refactor: rename clawdbot to moltbot with legacy compat

This commit is contained in:
Peter Steinberger
2026-01-27 12:19:58 +00:00
parent 83460df96f
commit 6d16a658e5
1839 changed files with 11250 additions and 11199 deletions

View File

@@ -3,11 +3,11 @@
# Run via cron or systemd timer to get proactive notifications
# before Claude Code auth expires.
#
# Suggested cron: */30 * * * * /home/admin/clawdbot/scripts/auth-monitor.sh
# Suggested cron: */30 * * * * /home/admin/moltbot/scripts/auth-monitor.sh
#
# Environment variables:
# NOTIFY_PHONE - Phone number to send Clawdbot notification (e.g., +1234567890)
# NOTIFY_NTFY - ntfy.sh topic for push notifications (e.g., clawdbot-alerts)
# NOTIFY_PHONE - Phone number to send Moltbot notification (e.g., +1234567890)
# NOTIFY_NTFY - ntfy.sh topic for push notifications (e.g., moltbot-alerts)
# WARN_HOURS - Hours before expiry to warn (default: 2)
set -euo pipefail
@@ -41,12 +41,12 @@ send_notification() {
return
fi
# Send via Clawdbot if phone configured and auth still valid
# Send via Moltbot if phone configured and auth still valid
if [ -n "$NOTIFY_PHONE" ]; then
# Check if we can still use clawdbot
# Check if we can still use moltbot
if "$SCRIPT_DIR/claude-auth-status.sh" simple 2>/dev/null | grep -q "OK\|EXPIRING"; then
echo "Sending via Clawdbot to $NOTIFY_PHONE..."
clawdbot send --to "$NOTIFY_PHONE" --message "$message" 2>/dev/null || true
echo "Sending via Moltbot to $NOTIFY_PHONE..."
moltbot send --to "$NOTIFY_PHONE" --message "$message" 2>/dev/null || true
fi
fi
@@ -54,7 +54,7 @@ send_notification() {
if [ -n "$NOTIFY_NTFY" ]; then
echo "Sending via ntfy.sh to $NOTIFY_NTFY..."
curl -s -o /dev/null \
-H "Title: Clawdbot Auth Alert" \
-H "Title: Moltbot Auth Alert" \
-H "Priority: $priority" \
-H "Tags: warning,key" \
-d "$message" \
@@ -78,7 +78,7 @@ HOURS_LEFT=$((DIFF_MS / 3600000))
MINS_LEFT=$(((DIFF_MS % 3600000) / 60000))
if [ "$DIFF_MS" -lt 0 ]; then
send_notification "Claude Code auth EXPIRED! Clawdbot is down. Run: ssh l36 '~/clawdbot/scripts/mobile-reauth.sh'" "urgent"
send_notification "Claude Code auth EXPIRED! Moltbot is down. Run: ssh l36 '~/moltbot/scripts/mobile-reauth.sh'" "urgent"
exit 1
elif [ "$HOURS_LEFT" -lt "$WARN_HOURS" ]; then
send_notification "Claude Code auth expires in ${HOURS_LEFT}h ${MINS_LEFT}m. Consider re-auth soon." "high"

View File

@@ -3,7 +3,7 @@ set -euo pipefail
cd "$(dirname "$0")/../apps/macos"
BUILD_PATH=".build-local"
PRODUCT="Clawdbot"
PRODUCT="Moltbot"
BIN="$BUILD_PATH/debug/$PRODUCT"
printf "\n▶ Building $PRODUCT (debug, build path: $BUILD_PATH)\n"
@@ -13,6 +13,6 @@ printf "\n⏹ Stopping existing $PRODUCT...\n"
killall -q "$PRODUCT" 2>/dev/null || true
printf "\n🚀 Launching $BIN ...\n"
nohup "$BIN" >/tmp/clawdbot.log 2>&1 &
nohup "$BIN" >/tmp/moltbot.log 2>&1 &
PID=$!
printf "Started $PRODUCT (PID $PID). Logs: /tmp/clawdbot.log\n"
printf "Started $PRODUCT (PID $PID). Logs: /tmp/moltbot.log\n"

View File

@@ -2,16 +2,16 @@
set -euo pipefail
# Render the macOS .icon bundle to a padded .icns like Trimmy's pipeline.
# Defaults target the Clawdbot assets so you can just run the script from repo root.
# Defaults target the Moltbot assets so you can just run the script from repo root.
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
ICON_FILE=${1:-"$ROOT_DIR/apps/macos/Icon.icon"}
BASENAME=${2:-Clawdbot}
BASENAME=${2:-Moltbot}
OUT_ROOT=${3:-"$ROOT_DIR/apps/macos/build/icon"}
XCODE_APP=${XCODE_APP:-/Applications/Xcode.app}
# Where the final .icns should live; override DEST_ICNS to change.
DEST_ICNS=${DEST_ICNS:-"$ROOT_DIR/apps/macos/Sources/Clawdbot/Resources/Clawdbot.icns"}
DEST_ICNS=${DEST_ICNS:-"$ROOT_DIR/apps/macos/Sources/Moltbot/Resources/Moltbot.icns"}
ICTOOL="$XCODE_APP/Contents/Applications/Icon Composer.app/Contents/Executables/ictool"
if [[ ! -x "$ICTOOL" ]]; then

View File

@@ -57,13 +57,13 @@ markdown_to_html() {
version_content=$(extract_version_section "$VERSION" "$CHANGELOG_FILE")
if [[ -z "$version_content" ]]; then
echo "<h2>Clawdbot $VERSION</h2>"
echo "<p>Latest Clawdbot update.</p>"
echo "<p><a href=\"https://github.com/clawdbot/clawdbot/blob/main/CHANGELOG.md\">View full changelog</a></p>"
echo "<h2>Moltbot $VERSION</h2>"
echo "<p>Latest Moltbot update.</p>"
echo "<p><a href=\"https://github.com/moltbot/moltbot/blob/main/CHANGELOG.md\">View full changelog</a></p>"
exit 0
fi
echo "<h2>Clawdbot $VERSION</h2>"
echo "<h2>Moltbot $VERSION</h2>"
in_list=false
while IFS= read -r line; do
@@ -88,4 +88,4 @@ if [[ "$in_list" == true ]]; then
echo "</ul>"
fi
echo "<p><a href=\"https://github.com/clawdbot/clawdbot/blob/main/CHANGELOG.md\">View full changelog</a></p>"
echo "<p><a href=\"https://github.com/moltbot/moltbot/blob/main/CHANGELOG.md\">View full changelog</a></p>"

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# Claude Code Authentication Status Checker
# Checks both Claude Code and Clawdbot auth status
# Checks both Claude Code and Moltbot auth status
set -euo pipefail
@@ -17,7 +17,7 @@ NC='\033[0m' # No Color
OUTPUT_MODE="${1:-full}"
fetch_models_status_json() {
clawdbot models status --json 2>/dev/null || true
moltbot models status --json 2>/dev/null || true
}
STATUS_JSON="$(fetch_models_status_json)"
@@ -103,7 +103,7 @@ check_claude_code_auth() {
calc_status_from_expires "$expires_at"
}
check_clawdbot_auth() {
check_moltbot_auth() {
if [ "$USE_JSON" -eq 1 ]; then
local api_keys
api_keys=$(json_anthropic_api_key_count)
@@ -139,26 +139,26 @@ check_clawdbot_auth() {
# JSON output mode
if [ "$OUTPUT_MODE" = "json" ]; then
claude_status=$(check_claude_code_auth 2>/dev/null || true)
clawdbot_status=$(check_clawdbot_auth 2>/dev/null || true)
moltbot_status=$(check_moltbot_auth 2>/dev/null || true)
claude_expires=0
clawdbot_expires=0
moltbot_expires=0
if [ "$USE_JSON" -eq 1 ]; then
claude_expires=$(json_expires_for_claude_cli)
clawdbot_expires=$(json_expires_for_anthropic_any)
moltbot_expires=$(json_expires_for_anthropic_any)
else
claude_expires=$(jq -r '.claudeAiOauth.expiresAt // 0' "$CLAUDE_CREDS" 2>/dev/null || echo "0")
clawdbot_expires=$(jq -r '.profiles["anthropic:default"].expires // 0' "$CLAWDBOT_AUTH" 2>/dev/null || echo "0")
moltbot_expires=$(jq -r '.profiles["anthropic:default"].expires // 0' "$CLAWDBOT_AUTH" 2>/dev/null || echo "0")
fi
jq -n \
--arg cs "$claude_status" \
--arg ce "$claude_expires" \
--arg bs "$clawdbot_status" \
--arg be "$clawdbot_expires" \
--arg bs "$moltbot_status" \
--arg be "$moltbot_expires" \
'{
claude_code: {status: $cs, expires_at_ms: ($ce | tonumber)},
clawdbot: {status: $bs, expires_at_ms: ($be | tonumber)},
moltbot: {status: $bs, expires_at_ms: ($be | tonumber)},
needs_reauth: (($cs | startswith("EXPIRED") or startswith("EXPIRING") or startswith("MISSING")) or ($bs | startswith("EXPIRED") or startswith("EXPIRING") or startswith("MISSING")))
}'
exit 0
@@ -167,18 +167,18 @@ fi
# Simple output mode (for scripts/widgets)
if [ "$OUTPUT_MODE" = "simple" ]; then
claude_status=$(check_claude_code_auth 2>/dev/null || true)
clawdbot_status=$(check_clawdbot_auth 2>/dev/null || true)
moltbot_status=$(check_moltbot_auth 2>/dev/null || true)
if [[ "$claude_status" == EXPIRED* ]] || [[ "$claude_status" == MISSING* ]]; then
echo "CLAUDE_EXPIRED"
exit 1
elif [[ "$clawdbot_status" == EXPIRED* ]] || [[ "$clawdbot_status" == MISSING* ]]; then
elif [[ "$moltbot_status" == EXPIRED* ]] || [[ "$moltbot_status" == MISSING* ]]; then
echo "CLAWDBOT_EXPIRED"
exit 1
elif [[ "$claude_status" == EXPIRING* ]]; then
echo "CLAUDE_EXPIRING"
exit 2
elif [[ "$clawdbot_status" == EXPIRING* ]]; then
elif [[ "$moltbot_status" == EXPIRING* ]]; then
echo "CLAWDBOT_EXPIRING"
exit 2
else
@@ -228,7 +228,7 @@ else
fi
echo ""
echo "Clawdbot Auth (~/.clawdbot/agents/main/agent/auth-profiles.json):"
echo "Moltbot Auth (~/.clawdbot/agents/main/agent/auth-profiles.json):"
if [ "$USE_JSON" -eq 1 ]; then
best_profile=$(json_best_anthropic_profile)
expires=$(json_expires_for_anthropic_any)
@@ -253,7 +253,7 @@ if [ "$expires" -le 0 ] && [ "$api_keys" -gt 0 ]; then
echo -e " Status: ${GREEN}OK${NC} (API key)"
elif [ "$expires" -le 0 ]; then
echo -e " Status: ${RED}NOT FOUND${NC}"
echo " Note: Run 'clawdbot doctor --yes' to sync from Claude Code"
echo " Note: Run 'moltbot doctor --yes' to sync from Claude Code"
else
now_ms=$(( $(date +%s) * 1000 ))
diff_ms=$((expires - now_ms))
@@ -262,7 +262,7 @@ else
if [ "$diff_ms" -lt 0 ]; then
echo -e " Status: ${RED}EXPIRED${NC}"
echo " Note: Run 'clawdbot doctor --yes' to sync from Claude Code"
echo " Note: Run 'moltbot doctor --yes' to sync from Claude Code"
elif [ "$diff_ms" -lt 3600000 ]; then
echo -e " Status: ${YELLOW}EXPIRING SOON (${mins}m remaining)${NC}"
else
@@ -273,8 +273,8 @@ fi
echo ""
echo "=== Service Status ==="
if systemctl --user is-active clawdbot >/dev/null 2>&1; then
echo -e "Clawdbot service: ${GREEN}running${NC}"
if systemctl --user is-active moltbot >/dev/null 2>&1; then
echo -e "Moltbot service: ${GREEN}running${NC}"
else
echo -e "Clawdbot service: ${RED}NOT running${NC}"
echo -e "Moltbot service: ${RED}NOT running${NC}"
fi

View File

@@ -48,17 +48,17 @@ SHOW_HELP=false
# Function to show usage
show_usage() {
cat << EOF
clawlog - Clawdbot Logging Utility
clawlog - Moltbot Logging Utility
USAGE:
clawlog [OPTIONS]
DESCRIPTION:
View Clawdbot logs with full details (bypasses Apple's privacy redaction).
View Moltbot logs with full details (bypasses Apple's privacy redaction).
Requires sudo access configured for /usr/bin/log command.
LOG FLOW ARCHITECTURE:
Clawdbot logs flow through the macOS unified log (subsystem: com.clawdbot).
Moltbot logs flow through the macOS unified log (subsystem: com.clawdbot).
LOG CATEGORIES (examples):
• voicewake - Voice wake detection/test harness

View File

@@ -1,14 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
APP_BUNDLE="${1:-dist/Clawdbot.app}"
APP_BUNDLE="${1:-dist/Moltbot.app}"
IDENTITY="${SIGN_IDENTITY:-}"
TIMESTAMP_MODE="${CODESIGN_TIMESTAMP:-auto}"
DISABLE_LIBRARY_VALIDATION="${DISABLE_LIBRARY_VALIDATION:-0}"
SKIP_TEAM_ID_CHECK="${SKIP_TEAM_ID_CHECK:-0}"
ENT_TMP_BASE=$(mktemp -t clawdbot-entitlements-base.XXXXXX)
ENT_TMP_APP_BASE=$(mktemp -t clawdbot-entitlements-app-base.XXXXXX)
ENT_TMP_RUNTIME=$(mktemp -t clawdbot-entitlements-runtime.XXXXXX)
ENT_TMP_BASE=$(mktemp -t moltbot-entitlements-base.XXXXXX)
ENT_TMP_APP_BASE=$(mktemp -t moltbot-entitlements-app-base.XXXXXX)
ENT_TMP_RUNTIME=$(mktemp -t moltbot-entitlements-runtime.XXXXXX)
if [[ "${APP_BUNDLE}" == "--help" || "${APP_BUNDLE}" == "-h" ]]; then
cat <<'HELP'
@@ -248,8 +248,8 @@ verify_team_ids() {
}
# Sign main binary
if [ -f "$APP_BUNDLE/Contents/MacOS/Clawdbot" ]; then
echo "Signing main binary"; sign_item "$APP_BUNDLE/Contents/MacOS/Clawdbot" "$APP_ENTITLEMENTS"
if [ -f "$APP_BUNDLE/Contents/MacOS/Moltbot" ]; then
echo "Signing main binary"; sign_item "$APP_BUNDLE/Contents/MacOS/Moltbot" "$APP_ENTITLEMENTS"
fi
# Sign Sparkle deeply if present

View File

@@ -7,7 +7,7 @@ set -euo pipefail
# scripts/create-dmg.sh <app_path> [output_dmg]
#
# Env:
# DMG_VOLUME_NAME default: CFBundleName (or "Clawdbot")
# DMG_VOLUME_NAME default: CFBundleName (or "Moltbot")
# DMG_BACKGROUND_PATH default: assets/dmg-background.png
# DMG_BACKGROUND_SMALL default: assets/dmg-background-small.png (recommended)
# DMG_WINDOW_BOUNDS default: "400 100 900 420" (500x320)
@@ -33,7 +33,7 @@ ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
BUILD_DIR="$ROOT_DIR/dist"
mkdir -p "$BUILD_DIR"
APP_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" "$APP_PATH/Contents/Info.plist" 2>/dev/null || echo "Clawdbot")
APP_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" "$APP_PATH/Contents/Info.plist" 2>/dev/null || echo "Moltbot")
VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$APP_PATH/Contents/Info.plist" 2>/dev/null || echo "0.0.0")
DMG_NAME="${APP_NAME}-${VERSION}.dmg"
@@ -71,7 +71,7 @@ for vol in "/Volumes/$DMG_VOLUME_NAME"* "/Volumes/$APP_NAME"*; do
fi
done
DMG_TEMP="$(mktemp -d /tmp/clawdbot-dmg.XXXXXX)"
DMG_TEMP="$(mktemp -d /tmp/moltbot-dmg.XXXXXX)"
trap 'hdiutil detach "/Volumes/'"$DMG_VOLUME_NAME"'" -force 2>/dev/null || true; rm -rf "$DMG_TEMP" 2>/dev/null || true' EXIT
cp -R "$APP_PATH" "$DMG_TEMP/"
@@ -109,7 +109,7 @@ if [[ "${SKIP_DMG_STYLE:-0}" != "1" ]]; then
fi
# Volume icon: reuse the app icon if available.
ICON_SRC="$ROOT_DIR/apps/macos/Sources/Clawdbot/Resources/Clawdbot.icns"
ICON_SRC="$ROOT_DIR/apps/macos/Sources/Moltbot/Resources/Moltbot.icns"
if [[ -f "$ICON_SRC" ]]; then
cp "$ICON_SRC" "$MOUNT_POINT/.VolumeIcon.icns"
if command -v SetFile >/dev/null 2>&1; then
@@ -160,9 +160,9 @@ for i in {1..5}; do
sleep 2
done
hdiutil resize -limits "$DMG_RW_PATH" >/tmp/clawdbot-dmg-limits.txt 2>/dev/null || true
MIN_SECTORS="$(tail -n 1 /tmp/clawdbot-dmg-limits.txt 2>/dev/null | awk '{print $1}')"
rm -f /tmp/clawdbot-dmg-limits.txt
hdiutil resize -limits "$DMG_RW_PATH" >/tmp/moltbot-dmg-limits.txt 2>/dev/null || true
MIN_SECTORS="$(tail -n 1 /tmp/moltbot-dmg-limits.txt 2>/dev/null | awk '{print $1}')"
rm -f /tmp/moltbot-dmg-limits.txt
if [[ "$MIN_SECTORS" =~ ^[0-9]+$ ]] && [[ "$DMG_EXTRA_SECTORS" =~ ^[0-9]+$ ]]; then
TARGET_SECTORS=$((MIN_SECTORS + DMG_EXTRA_SECTORS))
echo "Shrinking RW image: min sectors=$MIN_SECTORS (+$DMG_EXTRA_SECTORS) -> $TARGET_SECTORS"

View File

@@ -73,7 +73,7 @@ const fetchAnthropicOAuthUsage = async (token: string) => {
Accept: "application/json",
"anthropic-version": "2023-06-01",
"anthropic-beta": "oauth-2025-04-20",
"User-Agent": "clawdbot-debug",
"User-Agent": "moltbot-debug",
},
});
const text = await res.text();

View File

@@ -14,7 +14,7 @@ RUN corepack enable \
&& pnpm install --frozen-lockfile
COPY . .
COPY scripts/docker/cleanup-smoke/run.sh /usr/local/bin/clawdbot-cleanup-smoke
RUN chmod +x /usr/local/bin/clawdbot-cleanup-smoke
COPY scripts/docker/cleanup-smoke/run.sh /usr/local/bin/moltbot-cleanup-smoke
RUN chmod +x /usr/local/bin/moltbot-cleanup-smoke
ENTRYPOINT ["/usr/local/bin/clawdbot-cleanup-smoke"]
ENTRYPOINT ["/usr/local/bin/moltbot-cleanup-smoke"]

View File

@@ -3,8 +3,8 @@ set -euo pipefail
cd /repo
export CLAWDBOT_STATE_DIR="/tmp/clawdbot-test"
export CLAWDBOT_CONFIG_PATH="${CLAWDBOT_STATE_DIR}/clawdbot.json"
export CLAWDBOT_STATE_DIR="/tmp/moltbot-test"
export CLAWDBOT_CONFIG_PATH="${CLAWDBOT_STATE_DIR}/moltbot.json"
echo "==> Seed state"
mkdir -p "${CLAWDBOT_STATE_DIR}/credentials"
@@ -14,7 +14,7 @@ echo 'creds' >"${CLAWDBOT_STATE_DIR}/credentials/marker.txt"
echo 'session' >"${CLAWDBOT_STATE_DIR}/agents/main/sessions/sessions.json"
echo "==> Reset (config+creds+sessions)"
pnpm clawdbot reset --scope config+creds+sessions --yes --non-interactive
pnpm moltbot reset --scope config+creds+sessions --yes --non-interactive
test ! -f "${CLAWDBOT_CONFIG_PATH}"
test ! -d "${CLAWDBOT_STATE_DIR}/credentials"
@@ -25,7 +25,7 @@ mkdir -p "${CLAWDBOT_STATE_DIR}/credentials"
echo '{}' >"${CLAWDBOT_CONFIG_PATH}"
echo "==> Uninstall (state only)"
pnpm clawdbot uninstall --state --yes --non-interactive
pnpm moltbot uninstall --state --yes --non-interactive
test ! -d "${CLAWDBOT_STATE_DIR}"

View File

@@ -8,7 +8,7 @@ RUN apt-get update \
git \
&& rm -rf /var/lib/apt/lists/*
COPY run.sh /usr/local/bin/clawdbot-install-e2e
RUN chmod +x /usr/local/bin/clawdbot-install-e2e
COPY run.sh /usr/local/bin/moltbot-install-e2e
RUN chmod +x /usr/local/bin/moltbot-install-e2e
ENTRYPOINT ["/usr/local/bin/clawdbot-install-e2e"]
ENTRYPOINT ["/usr/local/bin/moltbot-install-e2e"]

View File

@@ -33,9 +33,9 @@ elif [[ "$MODELS_MODE" == "anthropic" && -z "$ANTHROPIC_API_TOKEN" && -z "$ANTHR
fi
echo "==> Resolve npm versions"
EXPECTED_VERSION="$(npm view "clawdbot@${INSTALL_TAG}" version)"
EXPECTED_VERSION="$(npm view "moltbot@${INSTALL_TAG}" version)"
if [[ -z "$EXPECTED_VERSION" || "$EXPECTED_VERSION" == "undefined" || "$EXPECTED_VERSION" == "null" ]]; then
echo "ERROR: unable to resolve clawdbot@${INSTALL_TAG} version" >&2
echo "ERROR: unable to resolve moltbot@${INSTALL_TAG} version" >&2
exit 2
fi
if [[ -n "$E2E_PREVIOUS_VERSION" ]]; then
@@ -43,7 +43,7 @@ if [[ -n "$E2E_PREVIOUS_VERSION" ]]; then
else
PREVIOUS_VERSION="$(node - <<'NODE'
const { execSync } = require("node:child_process");
const versions = JSON.parse(execSync("npm view clawdbot versions --json", { encoding: "utf8" }));
const versions = JSON.parse(execSync("npm view moltbot versions --json", { encoding: "utf8" }));
if (!Array.isArray(versions) || versions.length === 0) process.exit(1);
process.stdout.write(versions.length >= 2 ? versions[versions.length - 2] : versions[0]);
NODE
@@ -55,7 +55,7 @@ if [[ "$SKIP_PREVIOUS" == "1" ]]; then
echo "==> Skip preinstall previous (CLAWDBOT_INSTALL_E2E_SKIP_PREVIOUS=1)"
else
echo "==> Preinstall previous (forces installer upgrade path; avoids read() prompt)"
npm install -g "clawdbot@${PREVIOUS_VERSION}"
npm install -g "moltbot@${PREVIOUS_VERSION}"
fi
echo "==> Run official installer one-liner"
@@ -68,10 +68,10 @@ else
fi
echo "==> Verify installed version"
INSTALLED_VERSION="$(clawdbot --version 2>/dev/null | head -n 1 | tr -d '\r')"
INSTALLED_VERSION="$(moltbot --version 2>/dev/null | head -n 1 | tr -d '\r')"
echo "installed=$INSTALLED_VERSION expected=$EXPECTED_VERSION"
if [[ "$INSTALLED_VERSION" != "$EXPECTED_VERSION" ]]; then
echo "ERROR: expected clawdbot@$EXPECTED_VERSION, got clawdbot@$INSTALLED_VERSION" >&2
echo "ERROR: expected moltbot@$EXPECTED_VERSION, got moltbot@$INSTALLED_VERSION" >&2
exit 1
fi
@@ -80,7 +80,7 @@ set_image_model() {
shift
local candidate
for candidate in "$@"; do
if clawdbot --profile "$profile" models set-image "$candidate" >/dev/null 2>&1; then
if moltbot --profile "$profile" models set-image "$candidate" >/dev/null 2>&1; then
echo "$candidate"
return 0
fi
@@ -94,7 +94,7 @@ set_agent_model() {
local candidate
shift
for candidate in "$@"; do
if clawdbot --profile "$profile" models set "$candidate" >/dev/null 2>&1; then
if moltbot --profile "$profile" models set "$candidate" >/dev/null 2>&1; then
echo "$candidate"
return 0
fi
@@ -177,7 +177,7 @@ run_agent_turn() {
local session_id="$2"
local prompt="$3"
local out_json="$4"
clawdbot --profile "$profile" agent \
moltbot --profile "$profile" agent \
--session-id "$session_id" \
--message "$prompt" \
--thinking off \
@@ -339,7 +339,7 @@ run_profile() {
echo "==> Onboard ($profile)"
if [[ "$agent_model_provider" == "openai" ]]; then
clawdbot --profile "$profile" onboard \
moltbot --profile "$profile" onboard \
--non-interactive \
--accept-risk \
--flow quickstart \
@@ -351,7 +351,7 @@ run_profile() {
--workspace "$workspace" \
--skip-health
elif [[ -n "$ANTHROPIC_API_TOKEN" ]]; then
clawdbot --profile "$profile" onboard \
moltbot --profile "$profile" onboard \
--non-interactive \
--accept-risk \
--flow quickstart \
@@ -364,7 +364,7 @@ run_profile() {
--workspace "$workspace" \
--skip-health
else
clawdbot --profile "$profile" onboard \
moltbot --profile "$profile" onboard \
--non-interactive \
--accept-risk \
--flow quickstart \
@@ -425,7 +425,7 @@ run_profile() {
echo "==> Start gateway ($profile)"
GATEWAY_LOG="$workspace/gateway.log"
clawdbot --profile "$profile" gateway --port "$port" --bind loopback >"$GATEWAY_LOG" 2>&1 &
moltbot --profile "$profile" gateway --port "$port" --bind loopback >"$GATEWAY_LOG" 2>&1 &
GATEWAY_PID="$!"
cleanup_profile() {
if kill -0 "$GATEWAY_PID" 2>/dev/null; then
@@ -437,12 +437,12 @@ run_profile() {
echo "==> Wait for health ($profile)"
for _ in $(seq 1 60); do
if clawdbot --profile "$profile" health --timeout 2000 --json >/dev/null 2>&1; then
if moltbot --profile "$profile" health --timeout 2000 --json >/dev/null 2>&1; then
break
fi
sleep 0.25
done
clawdbot --profile "$profile" health --timeout 10000 --json >/dev/null
moltbot --profile "$profile" health --timeout 10000 --json >/dev/null
echo "==> Agent turns ($profile)"
TURN1_JSON="/tmp/agent-${profile}-1.json"

View File

@@ -23,7 +23,7 @@ WORKDIR /home/app
ENV NPM_CONFIG_FUND=false
ENV NPM_CONFIG_AUDIT=false
COPY run.sh /usr/local/bin/clawdbot-install-nonroot
RUN sudo chmod +x /usr/local/bin/clawdbot-install-nonroot
COPY run.sh /usr/local/bin/moltbot-install-nonroot
RUN sudo chmod +x /usr/local/bin/moltbot-install-nonroot
ENTRYPOINT ["/usr/local/bin/clawdbot-install-nonroot"]
ENTRYPOINT ["/usr/local/bin/moltbot-install-nonroot"]

View File

@@ -18,26 +18,26 @@ export PATH="$HOME/.npm-global/bin:$PATH"
echo "==> Verify git installed"
command -v git >/dev/null
echo "==> Verify clawdbot installed"
echo "==> Verify moltbot installed"
EXPECTED_VERSION="${CLAWDBOT_INSTALL_EXPECT_VERSION:-}"
if [[ -n "$EXPECTED_VERSION" ]]; then
LATEST_VERSION="$EXPECTED_VERSION"
else
LATEST_VERSION="$(npm view clawdbot version)"
LATEST_VERSION="$(npm view moltbot version)"
fi
CMD_PATH="$(command -v clawdbot || true)"
if [[ -z "$CMD_PATH" && -x "$HOME/.npm-global/bin/clawdbot" ]]; then
CMD_PATH="$HOME/.npm-global/bin/clawdbot"
CMD_PATH="$(command -v moltbot || true)"
if [[ -z "$CMD_PATH" && -x "$HOME/.npm-global/bin/moltbot" ]]; then
CMD_PATH="$HOME/.npm-global/bin/moltbot"
fi
if [[ -z "$CMD_PATH" ]]; then
echo "clawdbot not on PATH" >&2
echo "moltbot not on PATH" >&2
exit 1
fi
INSTALLED_VERSION="$("$CMD_PATH" --version 2>/dev/null | head -n 1 | tr -d '\r')"
echo "installed=$INSTALLED_VERSION expected=$LATEST_VERSION"
if [[ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]]; then
echo "ERROR: expected clawdbot@$LATEST_VERSION, got @$INSTALLED_VERSION" >&2
echo "ERROR: expected moltbot@$LATEST_VERSION, got @$INSTALLED_VERSION" >&2
exit 1
fi

View File

@@ -15,7 +15,7 @@ RUN set -eux; \
sudo \
&& rm -rf /var/lib/apt/lists/*
COPY run.sh /usr/local/bin/clawdbot-install-smoke
RUN chmod +x /usr/local/bin/clawdbot-install-smoke
COPY run.sh /usr/local/bin/moltbot-install-smoke
RUN chmod +x /usr/local/bin/moltbot-install-smoke
ENTRYPOINT ["/usr/local/bin/clawdbot-install-smoke"]
ENTRYPOINT ["/usr/local/bin/moltbot-install-smoke"]

View File

@@ -7,10 +7,10 @@ SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}"
echo "==> Resolve npm versions"
if [[ -n "$SMOKE_PREVIOUS_VERSION" ]]; then
LATEST_VERSION="$(npm view clawdbot version)"
LATEST_VERSION="$(npm view moltbot version)"
PREVIOUS_VERSION="$SMOKE_PREVIOUS_VERSION"
else
VERSIONS_JSON="$(npm view clawdbot versions --json)"
VERSIONS_JSON="$(npm view moltbot versions --json)"
versions_line="$(node - <<'NODE'
const raw = process.env.VERSIONS_JSON || "[]";
let versions;
@@ -44,22 +44,22 @@ if [[ "$SKIP_PREVIOUS" == "1" ]]; then
echo "==> Skip preinstall previous (CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS=1)"
else
echo "==> Preinstall previous (forces installer upgrade path)"
npm install -g "clawdbot@${PREVIOUS_VERSION}"
npm install -g "moltbot@${PREVIOUS_VERSION}"
fi
echo "==> Run official installer one-liner"
curl -fsSL "$INSTALL_URL" | bash
echo "==> Verify installed version"
INSTALLED_VERSION="$(clawdbot --version 2>/dev/null | head -n 1 | tr -d '\r')"
INSTALLED_VERSION="$(moltbot --version 2>/dev/null | head -n 1 | tr -d '\r')"
echo "installed=$INSTALLED_VERSION expected=$LATEST_VERSION"
if [[ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]]; then
echo "ERROR: expected clawdbot@$LATEST_VERSION, got clawdbot@$INSTALLED_VERSION" >&2
echo "ERROR: expected moltbot@$LATEST_VERSION, got moltbot@$INSTALLED_VERSION" >&2
exit 1
fi
echo "==> Sanity: CLI runs"
clawdbot --help >/dev/null
moltbot --help >/dev/null
echo "OK"

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
IMAGE_NAME="clawdbot-doctor-install-switch-e2e"
IMAGE_NAME="moltbot-doctor-install-switch-e2e"
echo "Building Docker image..."
docker build -t "$IMAGE_NAME" -f "$ROOT_DIR/scripts/e2e/Dockerfile" "$ROOT_DIR"
@@ -17,10 +17,10 @@ docker run --rm -t "$IMAGE_NAME" bash -lc '
export npm_config_audit=false
# Stub systemd/loginctl so doctor + daemon flows work in Docker.
export PATH="/tmp/clawdbot-bin:$PATH"
mkdir -p /tmp/clawdbot-bin
export PATH="/tmp/moltbot-bin:$PATH"
mkdir -p /tmp/moltbot-bin
cat > /tmp/clawdbot-bin/systemctl <<"SYSTEMCTL"
cat > /tmp/moltbot-bin/systemctl <<"SYSTEMCTL"
#!/usr/bin/env bash
set -euo pipefail
@@ -54,9 +54,9 @@ case "$cmd" in
;;
esac
SYSTEMCTL
chmod +x /tmp/clawdbot-bin/systemctl
chmod +x /tmp/moltbot-bin/systemctl
cat > /tmp/clawdbot-bin/loginctl <<"LOGINCTL"
cat > /tmp/moltbot-bin/loginctl <<"LOGINCTL"
#!/usr/bin/env bash
set -euo pipefail
@@ -69,7 +69,7 @@ if [[ "$*" == *"enable-linger"* ]]; then
fi
exit 0
LOGINCTL
chmod +x /tmp/clawdbot-bin/loginctl
chmod +x /tmp/moltbot-bin/loginctl
# Install the npm-global variant from the local /app source.
# `npm pack` can emit script output; keep only the tarball name.
@@ -80,8 +80,8 @@ LOGINCTL
fi
npm install -g --prefix /tmp/npm-prefix "/app/$pkg_tgz"
npm_bin="/tmp/npm-prefix/bin/clawdbot"
npm_entry="/tmp/npm-prefix/lib/node_modules/clawdbot/dist/entry.js"
npm_bin="/tmp/npm-prefix/bin/moltbot"
npm_entry="/tmp/npm-prefix/lib/node_modules/moltbot/dist/entry.js"
git_entry="/app/dist/entry.js"
assert_entrypoint() {
@@ -113,13 +113,13 @@ LOGINCTL
local doctor_expected="$5"
echo "== Flow: $name =="
home_dir=$(mktemp -d "/tmp/clawdbot-switch-${name}.XXXXXX")
home_dir=$(mktemp -d "/tmp/moltbot-switch-${name}.XXXXXX")
export HOME="$home_dir"
export USER="testuser"
eval "$install_cmd"
unit_path="$HOME/.config/systemd/user/clawdbot-gateway.service"
unit_path="$HOME/.config/systemd/user/moltbot-gateway.service"
if [ ! -f "$unit_path" ]; then
echo "Missing unit file: $unit_path"
exit 1

View File

@@ -2,12 +2,12 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
IMAGE_NAME="clawdbot-gateway-network-e2e"
IMAGE_NAME="moltbot-gateway-network-e2e"
PORT="18789"
TOKEN="e2e-$(date +%s)-$$"
NET_NAME="clawdbot-net-e2e-$$"
GW_NAME="clawdbot-gateway-e2e-$$"
NET_NAME="moltbot-net-e2e-$$"
GW_NAME="moltbot-gateway-e2e-$$"
cleanup() {
docker rm -f "$GW_NAME" >/dev/null 2>&1 || true

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
IMAGE_NAME="clawdbot-onboard-e2e"
IMAGE_NAME="moltbot-onboard-e2e"
echo "Building Docker image..."
docker build -t "$IMAGE_NAME" -f "$ROOT_DIR/scripts/e2e/Dockerfile" "$ROOT_DIR"
@@ -15,9 +15,9 @@ docker run --rm -t "$IMAGE_NAME" bash -lc '
ONBOARD_FLAGS="--flow quickstart --auth-choice skip --skip-channels --skip-skills --skip-daemon --skip-ui"
# Provide a minimal trash shim to avoid noisy "missing trash" logs in containers.
export PATH="/tmp/clawdbot-bin:$PATH"
mkdir -p /tmp/clawdbot-bin
cat > /tmp/clawdbot-bin/trash <<'"'"'TRASH'"'"'
export PATH="/tmp/moltbot-bin:$PATH"
mkdir -p /tmp/moltbot-bin
cat > /tmp/moltbot-bin/trash <<'"'"'TRASH'"'"'
#!/usr/bin/env bash
set -euo pipefail
trash_dir="$HOME/.Trash"
@@ -32,7 +32,7 @@ for target in "$@"; do
mv "$target" "$dest"
done
TRASH
chmod +x /tmp/clawdbot-bin/trash
chmod +x /tmp/moltbot-bin/trash
send() {
local payload="$1"
@@ -140,9 +140,9 @@ TRASH
export HOME="$home_dir"
mkdir -p "$HOME"
input_fifo="$(mktemp -u "/tmp/clawdbot-onboard-${case_name}.XXXXXX")"
input_fifo="$(mktemp -u "/tmp/moltbot-onboard-${case_name}.XXXXXX")"
mkfifo "$input_fifo"
local log_path="/tmp/clawdbot-onboard-${case_name}.log"
local log_path="/tmp/moltbot-onboard-${case_name}.log"
WIZARD_LOG_PATH="$log_path"
export WIZARD_LOG_PATH
# Run under script to keep an interactive TTY for clack prompts.
@@ -189,7 +189,7 @@ TRASH
}
make_home() {
mktemp -d "/tmp/clawdbot-e2e-$1.XXXXXX"
mktemp -d "/tmp/moltbot-e2e-$1.XXXXXX"
}
assert_file() {
@@ -281,7 +281,7 @@ TRASH
# Assert config + workspace scaffolding.
workspace_dir="$HOME/clawd"
config_path="$HOME/.clawdbot/clawdbot.json"
config_path="$HOME/.clawdbot/moltbot.json"
sessions_dir="$HOME/.clawdbot/agents/main/sessions"
assert_file "$config_path"
@@ -352,7 +352,7 @@ NODE
--skip-skills \
--skip-health
config_path="$HOME/.clawdbot/clawdbot.json"
config_path="$HOME/.clawdbot/moltbot.json"
assert_file "$config_path"
CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"'
@@ -388,7 +388,7 @@ NODE
export HOME="$home_dir"
mkdir -p "$HOME/.clawdbot"
# Seed a remote config to exercise reset path.
cat > "$HOME/.clawdbot/clawdbot.json" <<'"'"'JSON'"'"'
cat > "$HOME/.clawdbot/moltbot.json" <<'"'"'JSON'"'"'
{
"agents": { "defaults": { "workspace": "/root/old" } },
"gateway": {
@@ -410,7 +410,7 @@ JSON
--skip-ui \
--skip-health
config_path="$HOME/.clawdbot/clawdbot.json"
config_path="$HOME/.clawdbot/moltbot.json"
assert_file "$config_path"
CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"'
@@ -443,7 +443,7 @@ NODE
# Channels-only configure flow.
run_wizard_cmd channels "$home_dir" "node dist/index.js configure --section channels" send_channels_flow
config_path="$HOME/.clawdbot/clawdbot.json"
config_path="$HOME/.clawdbot/moltbot.json"
assert_file "$config_path"
CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"'
@@ -483,7 +483,7 @@ NODE
export HOME="$home_dir"
mkdir -p "$HOME/.clawdbot"
# Seed skills config to ensure it survives the wizard.
cat > "$HOME/.clawdbot/clawdbot.json" <<'"'"'JSON'"'"'
cat > "$HOME/.clawdbot/moltbot.json" <<'"'"'JSON'"'"'
{
"skills": {
"allowBundled": ["__none__"],
@@ -494,7 +494,7 @@ JSON
run_wizard_cmd skills "$home_dir" "node dist/index.js configure --section skills" send_skills_flow
config_path="$HOME/.clawdbot/clawdbot.json"
config_path="$HOME/.clawdbot/moltbot.json"
assert_file "$config_path"
CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"'

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
IMAGE_NAME="clawdbot-plugins-e2e"
IMAGE_NAME="moltbot-plugins-e2e"
echo "Building Docker image..."
docker build -t "$IMAGE_NAME" -f "$ROOT_DIR/scripts/e2e/Dockerfile" "$ROOT_DIR"
@@ -11,7 +11,7 @@ echo "Running plugins Docker E2E..."
docker run --rm -t "$IMAGE_NAME" bash -lc '
set -euo pipefail
home_dir=$(mktemp -d "/tmp/clawdbot-plugins-e2e.XXXXXX")
home_dir=$(mktemp -d "/tmp/moltbot-plugins-e2e.XXXXXX")
export HOME="$home_dir"
mkdir -p "$HOME/.clawdbot/extensions"
@@ -61,13 +61,13 @@ console.log("ok");
NODE
echo "Testing tgz install flow..."
pack_dir="$(mktemp -d "/tmp/clawdbot-plugin-pack.XXXXXX")"
pack_dir="$(mktemp -d "/tmp/moltbot-plugin-pack.XXXXXX")"
mkdir -p "$pack_dir/package"
cat > "$pack_dir/package/package.json" <<'"'"'JSON'"'"'
{
"name": "@clawdbot/demo-plugin-tgz",
"name": "@moltbot/demo-plugin-tgz",
"version": "0.0.1",
"clawdbot": { "extensions": ["./index.js"] }
"moltbot": { "extensions": ["./index.js"] }
}
JSON
cat > "$pack_dir/package/index.js" <<'"'"'JS'"'"'
@@ -100,12 +100,12 @@ console.log("ok");
NODE
echo "Testing install from local folder (plugins.load.paths)..."
dir_plugin="$(mktemp -d "/tmp/clawdbot-plugin-dir.XXXXXX")"
dir_plugin="$(mktemp -d "/tmp/moltbot-plugin-dir.XXXXXX")"
cat > "$dir_plugin/package.json" <<'"'"'JSON'"'"'
{
"name": "@clawdbot/demo-plugin-dir",
"name": "@moltbot/demo-plugin-dir",
"version": "0.0.1",
"clawdbot": { "extensions": ["./index.js"] }
"moltbot": { "extensions": ["./index.js"] }
}
JSON
cat > "$dir_plugin/index.js" <<'"'"'JS'"'"'
@@ -137,13 +137,13 @@ console.log("ok");
NODE
echo "Testing install from npm spec (file:)..."
file_pack_dir="$(mktemp -d "/tmp/clawdbot-plugin-filepack.XXXXXX")"
file_pack_dir="$(mktemp -d "/tmp/moltbot-plugin-filepack.XXXXXX")"
mkdir -p "$file_pack_dir/package"
cat > "$file_pack_dir/package/package.json" <<'"'"'JSON'"'"'
{
"name": "@clawdbot/demo-plugin-file",
"name": "@moltbot/demo-plugin-file",
"version": "0.0.1",
"clawdbot": { "extensions": ["./index.js"] }
"moltbot": { "extensions": ["./index.js"] }
}
JSON
cat > "$file_pack_dir/package/index.js" <<'"'"'JS'"'"'

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
IMAGE_NAME="${CLAWDBOT_QR_SMOKE_IMAGE:-clawdbot-qr-smoke}"
IMAGE_NAME="${CLAWDBOT_QR_SMOKE_IMAGE:-moltbot-qr-smoke}"
echo "Building Docker image..."
docker build -t "$IMAGE_NAME" -f "$ROOT_DIR/scripts/e2e/Dockerfile.qr-import" "$ROOT_DIR"

View File

@@ -2,8 +2,8 @@
set -euo pipefail
ROOT=$(cd "$(dirname "$0")/.." && pwd)
ZIP=${1:?"Usage: $0 Clawdbot-<ver>.zip"}
FEED_URL=${2:-"https://raw.githubusercontent.com/clawdbot/clawdbot/main/appcast.xml"}
ZIP=${1:?"Usage: $0 Moltbot-<ver>.zip"}
FEED_URL=${2:-"https://raw.githubusercontent.com/moltbot/moltbot/main/appcast.xml"}
PRIVATE_KEY_FILE=${SPARKLE_PRIVATE_KEY_FILE:-}
if [[ -z "$PRIVATE_KEY_FILE" ]]; then
echo "Set SPARKLE_PRIVATE_KEY_FILE to your ed25519 private key (Sparkle)." >&2
@@ -19,7 +19,7 @@ ZIP_NAME=$(basename "$ZIP")
ZIP_BASE="${ZIP_NAME%.zip}"
VERSION=${SPARKLE_RELEASE_VERSION:-}
if [[ -z "$VERSION" ]]; then
if [[ "$ZIP_NAME" =~ ^Clawdbot-([0-9]+(\.[0-9]+){1,2}([-.][^.]*)?)\.zip$ ]]; then
if [[ "$ZIP_NAME" =~ ^Moltbot-([0-9]+(\.[0-9]+){1,2}([-.][^.]*)?)\.zip$ ]]; then
VERSION="${BASH_REMATCH[1]}"
else
echo "Could not infer version from $ZIP_NAME; set SPARKLE_RELEASE_VERSION." >&2
@@ -49,7 +49,7 @@ else
fi
cp -f "$NOTES_HTML" "$TMP_DIR/${ZIP_BASE}.html"
DOWNLOAD_URL_PREFIX=${SPARKLE_DOWNLOAD_URL_PREFIX:-"https://github.com/clawdbot/clawdbot/releases/download/v${VERSION}/"}
DOWNLOAD_URL_PREFIX=${SPARKLE_DOWNLOAD_URL_PREFIX:-"https://github.com/moltbot/moltbot/releases/download/v${VERSION}/"}
export PATH="$ROOT/apps/macos/.build/artifacts/sparkle/Sparkle/bin:$PATH"
if ! command -v generate_appcast >/dev/null; then

View File

@@ -69,11 +69,11 @@ if claude setup-token; then
echo ""
"$SCRIPT_DIR/claude-auth-status.sh" full
# Restart clawdbot service if running
if systemctl --user is-active clawdbot >/dev/null 2>&1; then
# Restart moltbot service if running
if systemctl --user is-active moltbot >/dev/null 2>&1; then
echo ""
echo "Restarting clawdbot service..."
systemctl --user restart clawdbot
echo "Restarting moltbot service..."
systemctl --user restart moltbot
echo -e "${GREEN}Service restarted.${NC}"
fi
else

View File

@@ -4,7 +4,7 @@ set -euo pipefail
# Notarize a macOS artifact (zip/dmg/pkg) and optionally staple the app bundle.
#
# Usage:
# STAPLE_APP_PATH=dist/Clawdbot.app scripts/notarize-mac-artifact.sh <artifact>
# STAPLE_APP_PATH=dist/Moltbot.app scripts/notarize-mac-artifact.sh <artifact>
#
# Auth (pick one):
# NOTARYTOOL_PROFILE keychain profile created via `xcrun notarytool store-credentials`

View File

@@ -1,13 +1,13 @@
#!/usr/bin/env bash
set -euo pipefail
# Build and bundle Clawdbot into a minimal .app we can open.
# Outputs to dist/Clawdbot.app
# Build and bundle Moltbot into a minimal .app we can open.
# Outputs to dist/Moltbot.app
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
APP_ROOT="$ROOT_DIR/dist/Clawdbot.app"
APP_ROOT="$ROOT_DIR/dist/Moltbot.app"
BUILD_ROOT="$ROOT_DIR/apps/macos/.build"
PRODUCT="Clawdbot"
PRODUCT="Moltbot"
BUNDLE_ID="${BUNDLE_ID:-com.clawdbot.mac.debug}"
PKG_VERSION="$(cd "$ROOT_DIR" && node -p "require('./package.json').version" 2>/dev/null || echo "0.0.0")"
BUILD_TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
@@ -23,7 +23,7 @@ fi
IFS=' ' read -r -a BUILD_ARCHS <<< "$BUILD_ARCHS_VALUE"
PRIMARY_ARCH="${BUILD_ARCHS[0]}"
SPARKLE_PUBLIC_ED_KEY="${SPARKLE_PUBLIC_ED_KEY:-AGCY8w5vHirVfGGDGc8Szc5iuOqupZSh9pMj/Qs67XI=}"
SPARKLE_FEED_URL="${SPARKLE_FEED_URL:-https://raw.githubusercontent.com/clawdbot/clawdbot/main/appcast.xml}"
SPARKLE_FEED_URL="${SPARKLE_FEED_URL:-https://raw.githubusercontent.com/moltbot/moltbot/main/appcast.xml}"
AUTO_CHECKS=true
if [[ "$BUNDLE_ID" == *.debug ]]; then
SPARKLE_FEED_URL=""
@@ -140,7 +140,7 @@ mkdir -p "$APP_ROOT/Contents/Resources"
mkdir -p "$APP_ROOT/Contents/Frameworks"
echo "📄 Copying Info.plist template"
INFO_PLIST_SRC="$ROOT_DIR/apps/macos/Sources/Clawdbot/Resources/Info.plist"
INFO_PLIST_SRC="$ROOT_DIR/apps/macos/Sources/Moltbot/Resources/Info.plist"
if [ ! -f "$INFO_PLIST_SRC" ]; then
echo "ERROR: Info.plist template missing at $INFO_PLIST_SRC" >&2
exit 1
@@ -149,8 +149,8 @@ cp "$INFO_PLIST_SRC" "$APP_ROOT/Contents/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier ${BUNDLE_ID}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${APP_VERSION}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${APP_BUILD}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :ClawdbotBuildTimestamp ${BUILD_TS}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :ClawdbotGitCommit ${GIT_COMMIT}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :MoltbotBuildTimestamp ${BUILD_TS}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :MoltbotGitCommit ${GIT_COMMIT}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :SUFeedURL ${SPARKLE_FEED_URL}" "$APP_ROOT/Contents/Info.plist" \
|| /usr/libexec/PlistBuddy -c "Add :SUFeedURL string ${SPARKLE_FEED_URL}" "$APP_ROOT/Contents/Info.plist" || true
/usr/libexec/PlistBuddy -c "Set :SUPublicEDKey ${SPARKLE_PUBLIC_ED_KEY}" "$APP_ROOT/Contents/Info.plist" \
@@ -162,17 +162,17 @@ else
fi
echo "🚚 Copying binary"
cp "$BIN_PRIMARY" "$APP_ROOT/Contents/MacOS/Clawdbot"
cp "$BIN_PRIMARY" "$APP_ROOT/Contents/MacOS/Moltbot"
if [[ "${#BUILD_ARCHS[@]}" -gt 1 ]]; then
BIN_INPUTS=()
for arch in "${BUILD_ARCHS[@]}"; do
BIN_INPUTS+=("$(bin_for_arch "$arch")")
done
/usr/bin/lipo -create "${BIN_INPUTS[@]}" -output "$APP_ROOT/Contents/MacOS/Clawdbot"
/usr/bin/lipo -create "${BIN_INPUTS[@]}" -output "$APP_ROOT/Contents/MacOS/Moltbot"
fi
chmod +x "$APP_ROOT/Contents/MacOS/Clawdbot"
chmod +x "$APP_ROOT/Contents/MacOS/Moltbot"
# SwiftPM outputs ad-hoc signed binaries; strip the signature before install_name_tool to avoid warnings.
/usr/bin/codesign --remove-signature "$APP_ROOT/Contents/MacOS/Clawdbot" 2>/dev/null || true
/usr/bin/codesign --remove-signature "$APP_ROOT/Contents/MacOS/Moltbot" 2>/dev/null || true
SPARKLE_FRAMEWORK_PRIMARY="$(sparkle_framework_for_arch "$PRIMARY_ARCH")"
if [ -d "$SPARKLE_FRAMEWORK_PRIMARY" ]; then
@@ -201,11 +201,11 @@ else
fi
echo "🖼 Copying app icon"
cp "$ROOT_DIR/apps/macos/Sources/Clawdbot/Resources/Clawdbot.icns" "$APP_ROOT/Contents/Resources/Clawdbot.icns"
cp "$ROOT_DIR/apps/macos/Sources/Moltbot/Resources/Moltbot.icns" "$APP_ROOT/Contents/Resources/Moltbot.icns"
echo "📦 Copying device model resources"
rm -rf "$APP_ROOT/Contents/Resources/DeviceModels"
cp -R "$ROOT_DIR/apps/macos/Sources/Clawdbot/Resources/DeviceModels" "$APP_ROOT/Contents/Resources/DeviceModels"
cp -R "$ROOT_DIR/apps/macos/Sources/Moltbot/Resources/DeviceModels" "$APP_ROOT/Contents/Resources/DeviceModels"
echo "📦 Copying model catalog"
MODEL_CATALOG_SRC="$ROOT_DIR/node_modules/@mariozechner/pi-ai/dist/models.generated.js"
@@ -216,13 +216,13 @@ else
echo "WARN: model catalog missing at $MODEL_CATALOG_SRC (continuing)" >&2
fi
echo "📦 Copying ClawdbotKit resources"
CLAWDBOTKIT_BUNDLE="$(build_path_for_arch "$PRIMARY_ARCH")/$BUILD_CONFIG/ClawdbotKit_ClawdbotKit.bundle"
if [ -d "$CLAWDBOTKIT_BUNDLE" ]; then
rm -rf "$APP_ROOT/Contents/Resources/ClawdbotKit_ClawdbotKit.bundle"
cp -R "$CLAWDBOTKIT_BUNDLE" "$APP_ROOT/Contents/Resources/ClawdbotKit_ClawdbotKit.bundle"
echo "📦 Copying MoltbotKit resources"
MOLTBOTKIT_BUNDLE="$(build_path_for_arch "$PRIMARY_ARCH")/$BUILD_CONFIG/MoltbotKit_MoltbotKit.bundle"
if [ -d "$MOLTBOTKIT_BUNDLE" ]; then
rm -rf "$APP_ROOT/Contents/Resources/MoltbotKit_MoltbotKit.bundle"
cp -R "$MOLTBOTKIT_BUNDLE" "$APP_ROOT/Contents/Resources/MoltbotKit_MoltbotKit.bundle"
else
echo "WARN: ClawdbotKit resource bundle not found at $CLAWDBOTKIT_BUNDLE (continuing)" >&2
echo "WARN: MoltbotKit resource bundle not found at $MOLTBOTKIT_BUNDLE (continuing)" >&2
fi
echo "📦 Copying Textual resources"
@@ -252,8 +252,8 @@ else
fi
fi
echo "⏹ Stopping any running Clawdbot"
killall -q Clawdbot 2>/dev/null || true
echo "⏹ Stopping any running Moltbot"
killall -q Moltbot 2>/dev/null || true
echo "🔏 Signing bundle (auto-selects signing identity if SIGN_IDENTITY is unset)"
"$ROOT_DIR/scripts/codesign-mac-app.sh" "$APP_ROOT"

View File

@@ -4,9 +4,9 @@ set -euo pipefail
# Build the mac app bundle, then create a zip (Sparkle) + styled DMG (humans).
#
# Output:
# - dist/Clawdbot.app
# - dist/Clawdbot-<version>.zip
# - dist/Clawdbot-<version>.dmg
# - dist/Moltbot.app
# - dist/Moltbot-<version>.zip
# - dist/Moltbot-<version>.dmg
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
@@ -15,16 +15,16 @@ export BUILD_ARCHS="${BUILD_ARCHS:-all}"
"$ROOT_DIR/scripts/package-mac-app.sh"
APP="$ROOT_DIR/dist/Clawdbot.app"
APP="$ROOT_DIR/dist/Moltbot.app"
if [[ ! -d "$APP" ]]; then
echo "Error: missing app bundle at $APP" >&2
exit 1
fi
VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$APP/Contents/Info.plist" 2>/dev/null || echo "0.0.0")
ZIP="$ROOT_DIR/dist/Clawdbot-$VERSION.zip"
DMG="$ROOT_DIR/dist/Clawdbot-$VERSION.dmg"
NOTARY_ZIP="$ROOT_DIR/dist/Clawdbot-$VERSION.notary.zip"
ZIP="$ROOT_DIR/dist/Moltbot-$VERSION.zip"
DMG="$ROOT_DIR/dist/Moltbot-$VERSION.dmg"
NOTARY_ZIP="$ROOT_DIR/dist/Moltbot-$VERSION.notary.zip"
SKIP_NOTARIZE="${SKIP_NOTARIZE:-0}"
NOTARIZE=1

View File

@@ -14,8 +14,8 @@ async function writeJsonSchema() {
const rootSchema = {
$schema: "http://json-schema.org/draft-07/schema#",
$id: "https://clawdbot.dev/protocol.schema.json",
title: "Clawdbot Gateway Protocol",
$id: "https://moltbot.dev/protocol.schema.json",
title: "Moltbot Gateway Protocol",
description: "Handshake, request/response, and event frames for the Gateway WebSocket.",
oneOf: [
{ $ref: "#/definitions/RequestFrame" },

View File

@@ -12,7 +12,7 @@ const requiredPaths = [
"dist/hooks/gmail.js",
"dist/whatsapp/normalize.js",
];
const forbiddenPrefixes = ["dist/Clawdbot.app/"];
const forbiddenPrefixes = ["dist/Moltbot.app/"];
type PackageJson = {
name?: string;

View File

@@ -1,20 +1,20 @@
#!/usr/bin/env bash
# Reset Clawdbot like Trimmy: kill running instances, rebuild, repackage, relaunch, verify.
# Reset Moltbot like Trimmy: kill running instances, rebuild, repackage, relaunch, verify.
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
APP_BUNDLE="${CLAWDBOT_APP_BUNDLE:-}"
APP_PROCESS_PATTERN="Clawdbot.app/Contents/MacOS/Clawdbot"
DEBUG_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/debug/Clawdbot"
LOCAL_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build-local/debug/Clawdbot"
RELEASE_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/release/Clawdbot"
APP_PROCESS_PATTERN="Moltbot.app/Contents/MacOS/Moltbot"
DEBUG_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/debug/Moltbot"
LOCAL_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build-local/debug/Moltbot"
RELEASE_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/release/Moltbot"
LAUNCH_AGENT="${HOME}/Library/LaunchAgents/com.clawdbot.mac.plist"
LOCK_KEY="$(printf '%s' "${ROOT_DIR}" | shasum -a 256 | cut -c1-8)"
LOCK_DIR="${TMPDIR:-/tmp}/clawdbot-restart-${LOCK_KEY}"
LOCK_DIR="${TMPDIR:-/tmp}/moltbot-restart-${LOCK_KEY}"
LOCK_PID_FILE="${LOCK_DIR}/pid"
WAIT_FOR_LOCK=0
LOG_PATH="${CLAWDBOT_RESTART_LOG:-/tmp/clawdbot-restart.log}"
LOG_PATH="${CLAWDBOT_RESTART_LOG:-/tmp/moltbot-restart.log}"
NO_SIGN=0
SIGN=0
AUTO_DETECT_SIGNING=1
@@ -126,18 +126,18 @@ fi
acquire_lock
kill_all_clawdbot() {
kill_all_moltbot() {
for _ in {1..10}; do
pkill -f "${APP_PROCESS_PATTERN}" 2>/dev/null || true
pkill -f "${DEBUG_PROCESS_PATTERN}" 2>/dev/null || true
pkill -f "${LOCAL_PROCESS_PATTERN}" 2>/dev/null || true
pkill -f "${RELEASE_PROCESS_PATTERN}" 2>/dev/null || true
pkill -x "Clawdbot" 2>/dev/null || true
pkill -x "Moltbot" 2>/dev/null || true
if ! pgrep -f "${APP_PROCESS_PATTERN}" >/dev/null 2>&1 \
&& ! pgrep -f "${DEBUG_PROCESS_PATTERN}" >/dev/null 2>&1 \
&& ! pgrep -f "${LOCAL_PROCESS_PATTERN}" >/dev/null 2>&1 \
&& ! pgrep -f "${RELEASE_PROCESS_PATTERN}" >/dev/null 2>&1 \
&& ! pgrep -x "Clawdbot" >/dev/null 2>&1; then
&& ! pgrep -x "Moltbot" >/dev/null 2>&1; then
return 0
fi
sleep 0.3
@@ -149,8 +149,8 @@ stop_launch_agent() {
}
# 1) Kill all running instances first.
log "==> Killing existing Clawdbot instances"
kill_all_clawdbot
log "==> Killing existing Moltbot instances"
kill_all_moltbot
stop_launch_agent
# Bundle Gateway-hosted Canvas A2UI assets.
@@ -158,7 +158,7 @@ run_step "bundle canvas a2ui" bash -lc "cd '${ROOT_DIR}' && pnpm canvas:a2ui:bun
# 2) Rebuild into the same path the packager consumes (.build).
run_step "clean build cache" bash -lc "cd '${ROOT_DIR}/apps/macos' && rm -rf .build .build-swift .swiftpm 2>/dev/null || true"
run_step "swift build" bash -lc "cd '${ROOT_DIR}/apps/macos' && swift build -q --product Clawdbot"
run_step "swift build" bash -lc "cd '${ROOT_DIR}/apps/macos' && swift build -q --product Moltbot"
if [ "$AUTO_DETECT_SIGNING" -eq 1 ]; then
if check_signing_keys; then
@@ -191,20 +191,20 @@ choose_app_bundle() {
return 0
fi
if [[ -d "/Applications/Clawdbot.app" ]]; then
APP_BUNDLE="/Applications/Clawdbot.app"
if [[ -d "/Applications/Moltbot.app" ]]; then
APP_BUNDLE="/Applications/Moltbot.app"
return 0
fi
if [[ -d "${ROOT_DIR}/dist/Clawdbot.app" ]]; then
APP_BUNDLE="${ROOT_DIR}/dist/Clawdbot.app"
if [[ -d "${ROOT_DIR}/dist/Moltbot.app" ]]; then
APP_BUNDLE="${ROOT_DIR}/dist/Moltbot.app"
if [[ ! -d "${APP_BUNDLE}/Contents/Frameworks/Sparkle.framework" ]]; then
fail "dist/Clawdbot.app missing Sparkle after packaging"
fail "dist/Moltbot.app missing Sparkle after packaging"
fi
return 0
fi
fail "App bundle not found. Set CLAWDBOT_APP_BUNDLE to your installed Clawdbot.app"
fail "App bundle not found. Set CLAWDBOT_APP_BUNDLE to your installed Moltbot.app"
}
choose_app_bundle
@@ -227,7 +227,7 @@ if [ "$NO_SIGN" -eq 1 ] && [ "$ATTACH_ONLY" -ne 1 ]; then
const fs = require("node:fs");
const path = require("node:path");
try {
const raw = fs.readFileSync(path.join(process.env.HOME, ".clawdbot", "clawdbot.json"), "utf8");
const raw = fs.readFileSync(path.join(process.env.HOME, ".clawdbot", "moltbot.json"), "utf8");
const cfg = JSON.parse(raw);
const port = cfg && cfg.gateway && typeof cfg.gateway.port === "number" ? cfg.gateway.port : 18789;
process.stdout.write(String(port));
@@ -259,7 +259,7 @@ run_step "launch app" env -i \
# 5) Verify the app is alive.
sleep 1.5
if pgrep -f "${APP_PROCESS_PATTERN}" >/dev/null 2>&1; then
log "OK: Clawdbot is running."
log "OK: Moltbot is running."
else
fail "App exited immediately. Check ${LOG_PATH} or Console.app (User Reports)."
fi

View File

@@ -82,7 +82,7 @@ const shouldBuild = () => {
const logRunner = (message) => {
if (env.CLAWDBOT_RUNNER_LOG === "0") return;
process.stderr.write(`[clawdbot] ${message}\n`);
process.stderr.write(`[moltbot] ${message}\n`);
};
const runNode = () => {

View File

@@ -2,7 +2,7 @@
set -euo pipefail
export DISPLAY=:1
export HOME=/tmp/clawdbot-home
export HOME=/tmp/moltbot-home
export XDG_CONFIG_HOME="${HOME}/.config"
export XDG_CACHE_HOME="${HOME}/.cache"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
IMAGE_NAME="clawdbot-sandbox-browser:bookworm-slim"
IMAGE_NAME="moltbot-sandbox-browser:bookworm-slim"
docker build -t "${IMAGE_NAME}" -f Dockerfile.sandbox-browser .
echo "Built ${IMAGE_NAME}"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
BASE_IMAGE="${BASE_IMAGE:-clawdbot-sandbox:bookworm-slim}"
TARGET_IMAGE="${TARGET_IMAGE:-clawdbot-sandbox-common:bookworm-slim}"
BASE_IMAGE="${BASE_IMAGE:-moltbot-sandbox:bookworm-slim}"
TARGET_IMAGE="${TARGET_IMAGE:-moltbot-sandbox-common:bookworm-slim}"
PACKAGES="${PACKAGES:-curl wget jq coreutils grep nodejs npm python3 git ca-certificates golang-go rustc cargo unzip pkg-config libasound2-dev build-essential file}"
INSTALL_PNPM="${INSTALL_PNPM:-1}"
INSTALL_BUN="${INSTALL_BUN:-1}"
@@ -61,5 +61,5 @@ cat <<NOTE
Built ${TARGET_IMAGE}.
To use it, set agents.defaults.sandbox.docker.image to "${TARGET_IMAGE}" and restart.
If you want a clean re-create, remove old sandbox containers:
docker rm -f \$(docker ps -aq --filter label=clawdbot.sandbox=1)
docker rm -f \$(docker ps -aq --filter label=moltbot.sandbox=1)
NOTE

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
IMAGE_NAME="clawdbot-sandbox:bookworm-slim"
IMAGE_NAME="moltbot-sandbox:bookworm-slim"
docker build -t "${IMAGE_NAME}" -f Dockerfile.sandbox .
echo "Built ${IMAGE_NAME}"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
# Setup Clawdbot Auth Management System
# Setup Moltbot Auth Management System
# Run this once to set up:
# 1. Long-lived Claude Code token
# 2. Auth monitoring with notifications
@@ -9,7 +9,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "=== Clawdbot Auth System Setup ==="
echo "=== Moltbot Auth System Setup ==="
echo ""
# Step 1: Check current auth status
@@ -49,19 +49,19 @@ echo ""
# Check for ntfy
echo " ntfy.sh: Free push notifications to your phone"
echo " 1. Install ntfy app on your phone"
echo " 2. Subscribe to a topic (e.g., 'clawdbot-alerts')"
echo " 2. Subscribe to a topic (e.g., 'moltbot-alerts')"
echo ""
echo "Enter ntfy.sh topic (or leave blank to skip):"
read -r NTFY_TOPIC
# Phone notification
echo ""
echo " Clawdbot message: Send warning via Clawdbot itself"
echo " Moltbot message: Send warning via Moltbot itself"
echo "Enter your phone number for alerts (or leave blank to skip):"
read -r PHONE_NUMBER
# Update service file
SERVICE_FILE="$SCRIPT_DIR/systemd/clawdbot-auth-monitor.service"
SERVICE_FILE="$SCRIPT_DIR/systemd/moltbot-auth-monitor.service"
if [ -n "$NTFY_TOPIC" ]; then
sed -i "s|# Environment=NOTIFY_NTFY=.*|Environment=NOTIFY_NTFY=$NTFY_TOPIC|" "$SERVICE_FILE"
fi
@@ -73,10 +73,10 @@ fi
echo ""
echo "Installing systemd timer..."
mkdir -p ~/.config/systemd/user
cp "$SCRIPT_DIR/systemd/clawdbot-auth-monitor.service" ~/.config/systemd/user/
cp "$SCRIPT_DIR/systemd/clawdbot-auth-monitor.timer" ~/.config/systemd/user/
cp "$SCRIPT_DIR/systemd/moltbot-auth-monitor.service" ~/.config/systemd/user/
cp "$SCRIPT_DIR/systemd/moltbot-auth-monitor.timer" ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now clawdbot-auth-monitor.timer
systemctl --user enable --now moltbot-auth-monitor.timer
echo "Auth monitor installed and running."
echo ""
@@ -110,7 +110,7 @@ echo ""
echo "What's configured:"
echo " - Auth status: $SCRIPT_DIR/claude-auth-status.sh"
echo " - Mobile re-auth: $SCRIPT_DIR/mobile-reauth.sh"
echo " - Auth monitor: systemctl --user status clawdbot-auth-monitor.timer"
echo " - Auth monitor: systemctl --user status moltbot-auth-monitor.timer"
echo ""
echo "Quick commands:"
echo " Check auth: $SCRIPT_DIR/claude-auth-status.sh"

View File

@@ -26,7 +26,7 @@ function ensureChangelogEntry(changelogPath: string, version: string): boolean {
if (!existsSync(changelogPath)) return false;
const content = readFileSync(changelogPath, "utf8");
if (content.includes(`## ${version}`)) return false;
const entry = `## ${version}\n\n### Changes\n- Version alignment with core Clawdbot release numbers.\n\n`;
const entry = `## ${version}\n\n### Changes\n- Version alignment with core Moltbot release numbers.\n\n`;
if (content.startsWith("# Changelog\n\n")) {
const next = content.replace("# Changelog\n\n", `# Changelog\n\n${entry}`);
writeFileSync(changelogPath, next);

View File

@@ -1,14 +1,14 @@
[Unit]
Description=Clawdbot Auth Expiry Monitor
Description=Moltbot Auth Expiry Monitor
After=network.target
[Service]
Type=oneshot
ExecStart=/home/admin/clawdbot/scripts/auth-monitor.sh
ExecStart=/home/admin/moltbot/scripts/auth-monitor.sh
# Configure notification channels via environment
Environment=WARN_HOURS=2
# Environment=NOTIFY_PHONE=+1234567890
# Environment=NOTIFY_NTFY=clawdbot-alerts
# Environment=NOTIFY_NTFY=moltbot-alerts
[Install]
WantedBy=default.target

View File

@@ -1,5 +1,5 @@
[Unit]
Description=Check Clawdbot auth expiry every 30 minutes
Description=Check Moltbot auth expiry every 30 minutes
[Timer]
OnBootSec=5min

View File

@@ -1,5 +1,5 @@
#!/data/data/com.termux/files/usr/bin/bash
# Clawdbot Auth Widget for Termux
# Moltbot Auth Widget for Termux
# Place in ~/.shortcuts/ for Termux:Widget
#
# This widget checks auth status and helps with re-auth if needed.
@@ -9,15 +9,15 @@
SERVER="${CLAWDBOT_SERVER:-l36}"
# Check auth status
termux-toast "Checking Clawdbot auth..."
termux-toast "Checking Moltbot auth..."
STATUS=$(ssh "$SERVER" '$HOME/clawdbot/scripts/claude-auth-status.sh simple' 2>&1)
STATUS=$(ssh "$SERVER" '$HOME/moltbot/scripts/claude-auth-status.sh simple' 2>&1)
EXIT_CODE=$?
case "$STATUS" in
OK)
# Get remaining time
DETAILS=$(ssh "$SERVER" '$HOME/clawdbot/scripts/claude-auth-status.sh json' 2>&1)
DETAILS=$(ssh "$SERVER" '$HOME/moltbot/scripts/claude-auth-status.sh json' 2>&1)
HOURS=$(echo "$DETAILS" | jq -r '.claude_code.status' | grep -oP '\d+(?=h)' || echo "?")
termux-vibrate -d 50
@@ -43,7 +43,7 @@ case "$STATUS" in
# Open terminal to server
am start -n com.termux/com.termux.app.TermuxActivity -a android.intent.action.MAIN
termux-toast "Run: ssh $SERVER '$HOME/clawdbot/scripts/mobile-reauth.sh'"
termux-toast "Run: ssh $SERVER '$HOME/moltbot/scripts/mobile-reauth.sh'"
;;
*)
termux-toast "Reminder: Auth expires soon"
@@ -66,10 +66,10 @@ case "$STATUS" in
2. Return here and tap OK to SSH"
am start -n com.termux/com.termux.app.TermuxActivity -a android.intent.action.MAIN
termux-toast "Run: ssh $SERVER '$HOME/clawdbot/scripts/mobile-reauth.sh'"
termux-toast "Run: ssh $SERVER '$HOME/moltbot/scripts/mobile-reauth.sh'"
;;
*)
termux-toast "Warning: Clawdbot won't work until re-auth"
termux-toast "Warning: Moltbot won't work until re-auth"
;;
esac
;;

View File

@@ -7,7 +7,7 @@
SERVER="${CLAWDBOT_SERVER:-l36}"
STATUS=$(ssh -o ConnectTimeout=5 "$SERVER" '$HOME/clawdbot/scripts/claude-auth-status.sh simple' 2>&1)
STATUS=$(ssh -o ConnectTimeout=5 "$SERVER" '$HOME/moltbot/scripts/claude-auth-status.sh simple' 2>&1)
case "$STATUS" in
OK)
@@ -22,7 +22,7 @@ case "$STATUS" in
termux-toast "Auth expired - opening console..."
termux-open-url "https://console.anthropic.com/settings/api-keys"
sleep 2
termux-notification -t "Clawdbot Re-Auth" -c "After getting key, run: ssh $SERVER '~/clawdbot/scripts/mobile-reauth.sh'" --id clawd-auth
termux-notification -t "Moltbot Re-Auth" -c "After getting key, run: ssh $SERVER '~/moltbot/scripts/mobile-reauth.sh'" --id clawd-auth
;;
*)
termux-toast "Connection error"

View File

@@ -1,12 +1,12 @@
#!/data/data/com.termux/files/usr/bin/bash
# Clawdbot OAuth Sync Widget
# Syncs Claude Code tokens to Clawdbot on l36 server
# Moltbot OAuth Sync Widget
# Syncs Claude Code tokens to Moltbot on l36 server
# Place in ~/.shortcuts/ on phone for Termux:Widget
termux-toast "Syncing Clawdbot auth..."
termux-toast "Syncing Moltbot auth..."
# Run sync on l36 server
RESULT=$(ssh l36 '/home/admin/clawdbot/scripts/sync-claude-code-auth.sh' 2>&1)
RESULT=$(ssh l36 '/home/admin/moltbot/scripts/sync-claude-code-auth.sh' 2>&1)
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
@@ -14,10 +14,10 @@ if [ $EXIT_CODE -eq 0 ]; then
EXPIRY=$(echo "$RESULT" | grep "Token expires:" | cut -d: -f2-)
termux-vibrate -d 100
termux-toast "Clawdbot synced! Expires:${EXPIRY}"
termux-toast "Moltbot synced! Expires:${EXPIRY}"
# Optional: restart clawdbot service
ssh l36 'systemctl --user restart clawdbot' 2>/dev/null
# Optional: restart moltbot service
ssh l36 'systemctl --user restart moltbot' 2>/dev/null
else
termux-vibrate -d 300
termux-toast "Sync failed: ${RESULT}"

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE_NAME="${CLAWDBOT_CLEANUP_SMOKE_IMAGE:-clawdbot-cleanup-smoke:local}"
IMAGE_NAME="${CLAWDBOT_CLEANUP_SMOKE_IMAGE:-moltbot-cleanup-smoke:local}"
echo "==> Build image: $IMAGE_NAME"
docker build \

View File

@@ -28,7 +28,7 @@ function killGatewayListeners(port: number): PortProcess[] {
function runTests() {
const isolatedLock =
process.env.CLAWDBOT_GATEWAY_LOCK ??
path.join(os.tmpdir(), `clawdbot-gateway.lock.test.${Date.now()}`);
path.join(os.tmpdir(), `moltbot-gateway.lock.test.${Date.now()}`);
const result = spawnSync("pnpm", ["vitest", "run"], {
stdio: "inherit",
env: {

View File

@@ -2,8 +2,8 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SMOKE_IMAGE="${CLAWDBOT_INSTALL_SMOKE_IMAGE:-clawdbot-install-smoke:local}"
NONROOT_IMAGE="${CLAWDBOT_INSTALL_NONROOT_IMAGE:-clawdbot-install-nonroot:local}"
SMOKE_IMAGE="${CLAWDBOT_INSTALL_SMOKE_IMAGE:-moltbot-install-smoke:local}"
NONROOT_IMAGE="${CLAWDBOT_INSTALL_NONROOT_IMAGE:-moltbot-install-nonroot:local}"
INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
CLI_INSTALL_URL="${CLAWDBOT_INSTALL_CLI_URL:-https://molt.bot/install-cli.sh}"
SKIP_NONROOT="${CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT:-0}"

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE_NAME="${CLAWDBOT_INSTALL_E2E_IMAGE:-clawdbot-install-e2e:local}"
IMAGE_NAME="${CLAWDBOT_INSTALL_E2E_IMAGE:-moltbot-install-e2e:local}"
INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
OPENAI_API_KEY="${OPENAI_API_KEY:-}"

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE_NAME="${CLAWDBOT_IMAGE:-clawdbot:local}"
IMAGE_NAME="${CLAWDBOT_IMAGE:-moltbot:local}"
CONFIG_DIR="${CLAWDBOT_CONFIG_DIR:-$HOME/.clawdbot}"
WORKSPACE_DIR="${CLAWDBOT_WORKSPACE_DIR:-$HOME/clawd}"
PROFILE_FILE="${CLAWDBOT_PROFILE_FILE:-$HOME/.profile}"

View File

@@ -2,7 +2,7 @@
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE_NAME="${CLAWDBOT_IMAGE:-clawdbot:local}"
IMAGE_NAME="${CLAWDBOT_IMAGE:-moltbot:local}"
CONFIG_DIR="${CLAWDBOT_CONFIG_DIR:-$HOME/.clawdbot}"
WORKSPACE_DIR="${CLAWDBOT_WORKSPACE_DIR:-$HOME/clawd}"
PROFILE_FILE="${CLAWDBOT_PROFILE_FILE:-$HOME/.profile}"

View File

@@ -3,7 +3,7 @@ import { readFileSync, writeFileSync } from "node:fs";
import { resolve } from "node:path";
import type { ApiContributor, Entry, MapConfig, User } from "./update-clawtributors.types.js";
const REPO = "clawdbot/clawdbot";
const REPO = "moltbot/moltbot";
const PER_LINE = 10;
const mapPath = resolve("scripts/clawtributors-map.json");

View File

@@ -75,10 +75,10 @@ async function main() {
}
const baseDir = await fs.mkdtemp(
path.join(os.tmpdir(), "clawdbot-zai-fallback-"),
path.join(os.tmpdir(), "moltbot-zai-fallback-"),
);
const stateDir = path.join(baseDir, "state");
const configPath = path.join(baseDir, "clawdbot.json");
const configPath = path.join(baseDir, "moltbot.json");
await fs.mkdir(stateDir, { recursive: true });
const config = {
@@ -127,7 +127,7 @@ async function main() {
const run1 = await runCommand(
"run1",
[
"clawdbot",
"moltbot",
"agent",
"--local",
"--session-id",
@@ -159,7 +159,7 @@ async function main() {
const run2 = await runCommand(
"run2",
[
"clawdbot",
"moltbot",
"agent",
"--local",
"--session-id",