jishushell 0.4.17 → 0.4.24-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile.hermes-slim +193 -0
- package/apps/hermes-container.yaml +35 -0
- package/apps/ollama-binary.yaml +164 -0
- package/apps/ollama-cpu-container.yaml +37 -0
- package/apps/ollama-with-hollama-binary.yaml +159 -0
- package/apps/openclaw-binary.yaml +69 -0
- package/apps/openclaw-container.yaml +37 -0
- package/apps/openclaw-with-ollama-container.yaml +42 -0
- package/apps/openclaw-with-searxng-container.yaml +136 -0
- package/apps/openwebui-container.yaml +53 -0
- package/apps/playwright-container.yaml +120 -0
- package/apps/searxng-container.yaml +115 -0
- package/dist/auth.d.ts +1 -0
- package/dist/auth.js +15 -14
- package/dist/auth.js.map +1 -1
- package/dist/cli/app.d.ts +1 -0
- package/dist/cli/app.js +770 -52
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/backup.d.ts +3 -0
- package/dist/cli/backup.js +434 -0
- package/dist/cli/backup.js.map +1 -0
- package/dist/cli/doctor.d.ts +1 -0
- package/dist/cli/doctor.js +61 -35
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/job.d.ts +1 -0
- package/dist/cli/job.js +37 -99
- package/dist/cli/job.js.map +1 -1
- package/dist/cli/llm.d.ts +1 -0
- package/dist/cli/llm.js +20 -14
- package/dist/cli/llm.js.map +1 -1
- package/dist/cli/managed-list.d.ts +30 -0
- package/dist/cli/managed-list.js +129 -0
- package/dist/cli/managed-list.js.map +1 -0
- package/dist/cli/panel.d.ts +4 -3
- package/dist/cli/panel.js +94 -24
- package/dist/cli/panel.js.map +1 -1
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.js +12 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli.js +47 -516
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +68 -0
- package/dist/config.js +266 -12
- package/dist/config.js.map +1 -1
- package/dist/control.d.ts +10 -6
- package/dist/control.js +87 -6
- package/dist/control.js.map +1 -1
- package/dist/install.d.ts +16 -0
- package/dist/install.js +75 -26
- package/dist/install.js.map +1 -1
- package/dist/routes/agent-apps.d.ts +15 -0
- package/dist/routes/agent-apps.js +78 -0
- package/dist/routes/agent-apps.js.map +1 -0
- package/dist/routes/apps.js +186 -7
- package/dist/routes/apps.js.map +1 -1
- package/dist/routes/backup.js +3 -3
- package/dist/routes/backup.js.map +1 -1
- package/dist/routes/instances.d.ts +6 -0
- package/dist/routes/instances.js +862 -879
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/llm.js +9 -8
- package/dist/routes/llm.js.map +1 -1
- package/dist/routes/runtime.d.ts +15 -0
- package/dist/routes/runtime.js +69 -0
- package/dist/routes/runtime.js.map +1 -0
- package/dist/routes/setup.js +103 -8
- package/dist/routes/setup.js.map +1 -1
- package/dist/routes/system.js +25 -3
- package/dist/routes/system.js.map +1 -1
- package/dist/server.js +71 -7
- package/dist/server.js.map +1 -1
- package/dist/services/agent-apps/catalog.d.ts +30 -0
- package/dist/services/agent-apps/catalog.js +60 -0
- package/dist/services/agent-apps/catalog.js.map +1 -0
- package/dist/services/agent-apps/index.d.ts +36 -0
- package/dist/services/agent-apps/index.js +171 -0
- package/dist/services/agent-apps/index.js.map +1 -0
- package/dist/services/agent-apps/installers/adapter-probes.d.ts +49 -0
- package/dist/services/agent-apps/installers/adapter-probes.js +223 -0
- package/dist/services/agent-apps/installers/adapter-probes.js.map +1 -0
- package/dist/services/agent-apps/installers/adapter.d.ts +30 -0
- package/dist/services/agent-apps/installers/adapter.js +171 -0
- package/dist/services/agent-apps/installers/adapter.js.map +1 -0
- package/dist/services/agent-apps/installers/registry-probe.d.ts +38 -0
- package/dist/services/agent-apps/installers/registry-probe.js +183 -0
- package/dist/services/agent-apps/installers/registry-probe.js.map +1 -0
- package/dist/services/agent-apps/installers/shell-script.d.ts +47 -0
- package/dist/services/agent-apps/installers/shell-script.js +471 -0
- package/dist/services/agent-apps/installers/shell-script.js.map +1 -0
- package/dist/services/agent-apps/types.d.ts +125 -0
- package/dist/services/agent-apps/types.js +17 -0
- package/dist/services/agent-apps/types.js.map +1 -0
- package/dist/services/{app-compiler.d.ts → app/app-compiler.d.ts} +3 -3
- package/dist/services/{app-compiler.js → app/app-compiler.js} +10 -7
- package/dist/services/app/app-compiler.js.map +1 -0
- package/dist/services/app/app-manager.d.ts +142 -0
- package/dist/services/app/app-manager.js +2148 -0
- package/dist/services/app/app-manager.js.map +1 -0
- package/dist/services/app/custom-manager.d.ts +27 -0
- package/dist/services/app/custom-manager.js +285 -0
- package/dist/services/app/custom-manager.js.map +1 -0
- package/dist/services/app/hermes-agent-manager.d.ts +20 -0
- package/dist/services/app/hermes-agent-manager.js +289 -0
- package/dist/services/app/hermes-agent-manager.js.map +1 -0
- package/dist/services/app/id-normalizer.d.ts +27 -0
- package/dist/services/app/id-normalizer.js +77 -0
- package/dist/services/app/id-normalizer.js.map +1 -0
- package/dist/services/app/ollama-manager.d.ts +18 -0
- package/dist/services/app/ollama-manager.js +207 -0
- package/dist/services/app/ollama-manager.js.map +1 -0
- package/dist/services/app/openclaw-manager.d.ts +63 -0
- package/dist/services/app/openclaw-manager.js +1178 -0
- package/dist/services/app/openclaw-manager.js.map +1 -0
- package/dist/services/app/paths.d.ts +47 -0
- package/dist/services/app/paths.js +68 -0
- package/dist/services/app/paths.js.map +1 -0
- package/dist/services/app/registry.d.ts +17 -0
- package/dist/services/app/registry.js +31 -0
- package/dist/services/app/registry.js.map +1 -0
- package/dist/services/app/remote-spec.d.ts +14 -0
- package/dist/services/app/remote-spec.js +58 -0
- package/dist/services/app/remote-spec.js.map +1 -0
- package/dist/services/app/terminal-session-manager.d.ts +27 -0
- package/dist/services/app/terminal-session-manager.js +157 -0
- package/dist/services/app/terminal-session-manager.js.map +1 -0
- package/dist/services/app/types.d.ts +72 -0
- package/dist/services/app/types.js +16 -0
- package/dist/services/app/types.js.map +1 -0
- package/dist/services/backup-manager.js +60 -22
- package/dist/services/backup-manager.js.map +1 -1
- package/dist/services/instance-manager.d.ts +82 -39
- package/dist/services/instance-manager.js +575 -1142
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/llm-proxy/circuit-breaker.js +10 -2
- package/dist/services/llm-proxy/circuit-breaker.js.map +1 -1
- package/dist/services/llm-proxy/index.d.ts +14 -1
- package/dist/services/llm-proxy/index.js +51 -6
- package/dist/services/llm-proxy/index.js.map +1 -1
- package/dist/services/nomad-manager.d.ts +260 -3
- package/dist/services/nomad-manager.js +2866 -449
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/panel-manager.d.ts +10 -0
- package/dist/services/panel-manager.js +97 -0
- package/dist/services/panel-manager.js.map +1 -1
- package/dist/services/plugin-installer.js +28 -2
- package/dist/services/plugin-installer.js.map +1 -1
- package/dist/services/process-manager.js +22 -0
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/runtime/adapters/custom.d.ts +20 -0
- package/dist/services/runtime/adapters/custom.js +90 -0
- package/dist/services/runtime/adapters/custom.js.map +1 -0
- package/dist/services/runtime/adapters/hermes.d.ts +174 -0
- package/dist/services/runtime/adapters/hermes.js +1316 -0
- package/dist/services/runtime/adapters/hermes.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw-routes.d.ts +17 -0
- package/dist/services/runtime/adapters/openclaw-routes.js +946 -0
- package/dist/services/runtime/adapters/openclaw-routes.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw.d.ts +188 -0
- package/dist/services/runtime/adapters/openclaw.js +2195 -0
- package/dist/services/runtime/adapters/openclaw.js.map +1 -0
- package/dist/services/runtime/errors.d.ts +28 -0
- package/dist/services/runtime/errors.js +31 -0
- package/dist/services/runtime/errors.js.map +1 -0
- package/dist/services/runtime/index.d.ts +34 -0
- package/dist/services/runtime/index.js +51 -0
- package/dist/services/runtime/index.js.map +1 -0
- package/dist/services/runtime/instance.d.ts +24 -0
- package/dist/services/runtime/instance.js +143 -0
- package/dist/services/runtime/instance.js.map +1 -0
- package/dist/services/runtime/migrations.d.ts +15 -0
- package/dist/services/runtime/migrations.js +25 -0
- package/dist/services/runtime/migrations.js.map +1 -0
- package/dist/services/runtime/registry.d.ts +13 -0
- package/dist/services/runtime/registry.js +32 -0
- package/dist/services/runtime/registry.js.map +1 -0
- package/dist/services/runtime/types.d.ts +545 -0
- package/dist/services/runtime/types.js +14 -0
- package/dist/services/runtime/types.js.map +1 -0
- package/dist/services/setup-manager.d.ts +70 -29
- package/dist/services/setup-manager.js +278 -597
- package/dist/services/setup-manager.js.map +1 -1
- package/dist/services/task-registry.d.ts +44 -0
- package/dist/services/task-registry.js +74 -0
- package/dist/services/task-registry.js.map +1 -0
- package/dist/services/telemetry/heartbeat.d.ts +6 -6
- package/dist/services/telemetry/heartbeat.js +29 -30
- package/dist/services/telemetry/heartbeat.js.map +1 -1
- package/dist/types.d.ts +164 -2
- package/dist/utils/docker-host.d.ts +15 -0
- package/dist/utils/docker-host.js +64 -0
- package/dist/utils/docker-host.js.map +1 -0
- package/install/jishu-install.sh +25 -2
- package/package.json +14 -4
- package/public/assets/Dashboard-rh9qpYRR.js +1 -0
- package/public/assets/HermesChatPanel-D6JI6lLY.js +1 -0
- package/public/assets/HermesConfigForm-DcbSemaj.js +4 -0
- package/public/assets/InitPassword-CFTKsED4.js +1 -0
- package/public/assets/InstanceDetail-BhNIKA6Z.js +91 -0
- package/public/assets/{Login-D1Bt-Lyk.js → Login-KB9qrtM0.js} +1 -1
- package/public/assets/NewInstance-CxkO8Hlq.js +1 -0
- package/public/assets/Settings-BVWJvOkU.js +1 -0
- package/public/assets/Setup-X-lzuaUT.js +1 -0
- package/public/assets/WeixinLoginPanel-gca0QTic.js +9 -0
- package/public/assets/index-C8B0cFJM.js +19 -0
- package/public/assets/index-CPhVFEsx.css +1 -0
- package/public/assets/input-paste-CrNVAyOy.js +1 -0
- package/public/assets/registry-fVUSujib.js +2 -0
- package/public/assets/{usePolling-CK0DfI4h.js → usePolling-Do5Erqm_.js} +1 -1
- package/public/assets/vendor-i18n-ucpM0OR0.js +9 -0
- package/public/assets/{vendor-react-B1-3Yrt-.js → vendor-react-Bk1hRGiY.js} +1 -1
- package/public/favicon.png +0 -0
- package/public/index.html +9 -4
- package/public/logos/hermes.png +0 -0
- package/public/logos/ollama.png +0 -0
- package/public/logos/openclaw.svg +60 -0
- package/scripts/build-hermes-image.sh +21 -0
- package/scripts/build-local.sh +54 -0
- package/scripts/check-adapter-isolation.ts +293 -0
- package/scripts/fixtures/instances/hermes-sample/instance.json +37 -0
- package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +7 -0
- package/scripts/smoke/hermes-bootstrap.sh +195 -0
- package/templates/hermes-entrypoint.sh +154 -0
- package/dist/cli/openclaw.d.ts +0 -12
- package/dist/cli/openclaw.js +0 -156
- package/dist/cli/openclaw.js.map +0 -1
- package/dist/services/app-compiler.js.map +0 -1
- package/dist/services/app-manager.d.ts +0 -17
- package/dist/services/app-manager.js +0 -168
- package/dist/services/app-manager.js.map +0 -1
- package/dist/services/job-manager.d.ts +0 -22
- package/dist/services/job-manager.js +0 -102
- package/dist/services/job-manager.js.map +0 -1
- package/public/assets/Dashboard-CQsp1Mr9.js +0 -1
- package/public/assets/InitPassword-BEC8SE4A.js +0 -1
- package/public/assets/InstanceDetail-B5wTgNEg.js +0 -17
- package/public/assets/NewInstance-GQzm3K9D.js +0 -1
- package/public/assets/Settings-ByjGlqhP.js +0 -1
- package/public/assets/Setup-cMF21Y-8.js +0 -1
- package/public/assets/index-B6qQP4mH.css +0 -1
- package/public/assets/index-BuTQtuNy.js +0 -16
- package/public/assets/vendor-i18n-CfW0RvgE.js +0 -9
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# JishuShell Hermes entrypoint shim.
|
|
3
|
+
# Wraps ghcr.io/x-aijishu/hermes-runtime:latest for per-instance upgrades.
|
|
4
|
+
#
|
|
5
|
+
# Business logic mirrors OpenClaw's update-seed pattern
|
|
6
|
+
# (src/services/runtime/adapters/openclaw.ts:ensureOpenclawUpdateSeed):
|
|
7
|
+
# 1. Baseline runtime is baked into the image (/opt/hermes).
|
|
8
|
+
# 2. A persistent venv lives on the bind-mounted agent-home
|
|
9
|
+
# (${HERMES_HOME}/.venv) and is seeded from the image on first boot.
|
|
10
|
+
# 3. In-container `uv pip install --upgrade ...` writes to the persistent
|
|
11
|
+
# venv, so after `docker restart` the instance boots the upgraded
|
|
12
|
+
# version — exactly like `npm install openclaw@latest` on OpenClaw.
|
|
13
|
+
#
|
|
14
|
+
# Implements §32.1 decisions from docs/multi-agent-runtime-generalization-plan.md:
|
|
15
|
+
# §32.1.2 — incomplete venv recovery via .installed-ref sentinel
|
|
16
|
+
# §32.1.3 — baseline mode detected by ABSENCE of JISHUSHELL_HERMES_SOURCE_REF env,
|
|
17
|
+
# not by any literal "image-baseline" string
|
|
18
|
+
set -e
|
|
19
|
+
|
|
20
|
+
IMAGE_INSTALL_DIR=/opt/hermes
|
|
21
|
+
IMAGE_VENV_DIR=/opt/hermes/.venv
|
|
22
|
+
HERMES_HOME=/opt/data
|
|
23
|
+
PERSISTENT_VENV_DIR=/opt/data/.venv
|
|
24
|
+
OVERLAY_DIR=/opt/data/hermes-overlay
|
|
25
|
+
|
|
26
|
+
# ── UID/GID remap (keep bind-mount permissions controllable) ──────────────────
|
|
27
|
+
if [ "$(id -u)" = "0" ]; then
|
|
28
|
+
if [ -n "$HERMES_UID" ] && [ "$HERMES_UID" != "$(id -u hermes)" ]; then
|
|
29
|
+
echo "[jishushell-shim] remapping hermes uid → $HERMES_UID"
|
|
30
|
+
usermod -u "$HERMES_UID" hermes
|
|
31
|
+
fi
|
|
32
|
+
if [ -n "$HERMES_GID" ] && [ "$HERMES_GID" != "$(id -g hermes)" ]; then
|
|
33
|
+
echo "[jishushell-shim] remapping hermes gid → $HERMES_GID"
|
|
34
|
+
groupmod -g "$HERMES_GID" hermes
|
|
35
|
+
fi
|
|
36
|
+
chown -R hermes:hermes "$HERMES_HOME"
|
|
37
|
+
# Re-exec under hermes user. Use `bash "$0"` instead of `"$0"` directly —
|
|
38
|
+
# Nomad/Docker bind-mounts sometimes drop the exec bit, so execve on the
|
|
39
|
+
# shim file fails with EACCES. Invoking bash as the interpreter bypasses
|
|
40
|
+
# that check entirely (bash reads the file, no execve on the script).
|
|
41
|
+
exec gosu hermes bash "$0" "$@"
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
# ── Mode selection (§32.1.3): overlay requires BOTH non-empty SOURCE_REF AND
|
|
45
|
+
# the overlay source pyproject.toml to exist; no "image-baseline" sentinel ──
|
|
46
|
+
if [ -n "$JISHUSHELL_HERMES_SOURCE_REF" ] && [ -f "$OVERLAY_DIR/source/pyproject.toml" ]; then
|
|
47
|
+
# ── overlay mode: use per-instance upgraded version ──────────────────────
|
|
48
|
+
echo "[jishushell-shim] overlay mode (ref=$JISHUSHELL_HERMES_SOURCE_REF)"
|
|
49
|
+
INSTALL_DIR="$OVERLAY_DIR/source"
|
|
50
|
+
VENV_DIR="$OVERLAY_DIR/.venv"
|
|
51
|
+
|
|
52
|
+
# §32.1.2: incomplete venv recovery — venv dir exists but sentinel missing
|
|
53
|
+
if [ -d "$VENV_DIR" ] && [ ! -f "$VENV_DIR/.installed-ref" ]; then
|
|
54
|
+
echo "[jishushell-shim] incomplete venv detected, rebuilding"
|
|
55
|
+
rm -rf "$VENV_DIR"
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
INSTALLED_REF=$(cat "$VENV_DIR/.installed-ref" 2>/dev/null || echo "")
|
|
59
|
+
|
|
60
|
+
if [ ! -f "$VENV_DIR/bin/activate" ] || [ "$JISHUSHELL_HERMES_SOURCE_REF" != "$INSTALLED_REF" ]; then
|
|
61
|
+
echo "[jishushell-shim] building overlay venv from source @ $JISHUSHELL_HERMES_SOURCE_REF (one-time per upgrade, ~1-3 min)..."
|
|
62
|
+
rm -rf "$VENV_DIR"
|
|
63
|
+
cd "$INSTALL_DIR"
|
|
64
|
+
uv venv "$VENV_DIR"
|
|
65
|
+
uv pip install --no-cache-dir --python "$VENV_DIR/bin/python" -e ".[all]"
|
|
66
|
+
echo "$JISHUSHELL_HERMES_SOURCE_REF" > "$VENV_DIR/.installed-ref"
|
|
67
|
+
echo "[jishushell-shim] overlay venv ready."
|
|
68
|
+
fi
|
|
69
|
+
else
|
|
70
|
+
# ── baseline mode: image venv (fast first boot) → persistent venv on upgrade ──
|
|
71
|
+
#
|
|
72
|
+
# Mirrors OpenClaw's update-seed model:
|
|
73
|
+
# - First boot: $PERSISTENT_VENV_DIR is missing, activate image venv
|
|
74
|
+
# directly (zero-overhead startup — no copy, no rebuild).
|
|
75
|
+
# - After user runs the in-container upgrade helper below, the
|
|
76
|
+
# persistent venv lives on the bind-mounted agent-home, so future
|
|
77
|
+
# boots pick it up and the user's upgraded packages survive
|
|
78
|
+
# container restart.
|
|
79
|
+
INSTALL_DIR="$IMAGE_INSTALL_DIR"
|
|
80
|
+
if [ -d "$PERSISTENT_VENV_DIR" ]; then
|
|
81
|
+
VENV_DIR="$PERSISTENT_VENV_DIR"
|
|
82
|
+
echo "[jishushell-shim] baseline (persistent venv — in-container upgrades active)"
|
|
83
|
+
else
|
|
84
|
+
VENV_DIR="$IMAGE_VENV_DIR"
|
|
85
|
+
echo "[jishushell-shim] baseline (image venv — fast first boot)"
|
|
86
|
+
fi
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# ── Deploy the upgrade helper (idempotent) ──────────────────────────────────
|
|
90
|
+
# Gives users a one-command upgrade path:
|
|
91
|
+
# docker exec -it <container> /opt/data/jishushell-hermes-upgrade [pkg-spec]
|
|
92
|
+
# mirroring OpenClaw's "Update now" button. Writes into the bind-mounted
|
|
93
|
+
# agent-home so it persists without touching the image.
|
|
94
|
+
UPGRADE_HELPER="$HERMES_HOME/jishushell-hermes-upgrade"
|
|
95
|
+
cat > "$UPGRADE_HELPER" <<'HELPER'
|
|
96
|
+
#!/bin/bash
|
|
97
|
+
# In-container Hermes upgrade helper (auto-generated by jishushell shim).
|
|
98
|
+
#
|
|
99
|
+
# Privilege model — never escalate:
|
|
100
|
+
# - If invoked as root (e.g. plain `docker exec`), re-exec under the
|
|
101
|
+
# hermes service account via gosu. All writes go through the unprivileged
|
|
102
|
+
# user so files on the mounted volume end up with hermes:hermes
|
|
103
|
+
# ownership, matching the service that actually runs the agent.
|
|
104
|
+
# - All filesystem writes stay inside the bind-mounted /opt/data volume.
|
|
105
|
+
# The read-only image layers at /opt/hermes are never touched.
|
|
106
|
+
#
|
|
107
|
+
# First run: seeds persistent venv from image baseline (~5-10s cp + sed).
|
|
108
|
+
# Subsequent runs: fast (venv already persistent).
|
|
109
|
+
# Restart the container after running to load the upgraded version.
|
|
110
|
+
set -e
|
|
111
|
+
|
|
112
|
+
if [ "$(id -u)" = "0" ]; then
|
|
113
|
+
exec gosu hermes bash "$0" "$@"
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
TARGET="${1:-hermes-agent}"
|
|
117
|
+
IMAGE_VENV=/opt/hermes/.venv
|
|
118
|
+
PERSISTENT_VENV=/opt/data/.venv
|
|
119
|
+
|
|
120
|
+
if [ ! -d "$PERSISTENT_VENV" ]; then
|
|
121
|
+
echo "[jishushell-upgrade] seeding persistent venv from image baseline ..."
|
|
122
|
+
cp -r "$IMAGE_VENV" "$PERSISTENT_VENV"
|
|
123
|
+
# Rewrite hardcoded paths so the copied venv's entrypoints resolve to
|
|
124
|
+
# the persistent location, not back to the read-only image path.
|
|
125
|
+
find "$PERSISTENT_VENV/bin" -type f -exec \
|
|
126
|
+
sed -i "s|$IMAGE_VENV|$PERSISTENT_VENV|g" {} + 2>/dev/null || true
|
|
127
|
+
[ -f "$PERSISTENT_VENV/pyvenv.cfg" ] && \
|
|
128
|
+
sed -i "s|$IMAGE_VENV|$PERSISTENT_VENV|g" "$PERSISTENT_VENV/pyvenv.cfg" || true
|
|
129
|
+
echo "[jishushell-upgrade] seed complete."
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
source "$PERSISTENT_VENV/bin/activate"
|
|
133
|
+
# uv-created venvs don't ship pip; bootstrap it on demand. ensurepip is a
|
|
134
|
+
# stdlib module so this works on every Python >= 3.4 without network.
|
|
135
|
+
python -m ensurepip --upgrade >/dev/null 2>&1 || true
|
|
136
|
+
echo "[jishushell-upgrade] python -m pip install --upgrade $TARGET ..."
|
|
137
|
+
python -m pip install --upgrade "$TARGET"
|
|
138
|
+
echo "[jishushell-upgrade] done. Restart the container to load the upgraded version:"
|
|
139
|
+
echo " docker restart <container-id> (or panel: Restart button)"
|
|
140
|
+
HELPER
|
|
141
|
+
chmod 755 "$UPGRADE_HELPER"
|
|
142
|
+
|
|
143
|
+
# ── Config bootstrap (both modes): mkdir + copy examples when missing ────────
|
|
144
|
+
mkdir -p "$HERMES_HOME"/{cron,sessions,logs,hooks,memories,skills,skins,plans,workspace,home,weixin,weixin/accounts,hermes-overlay}
|
|
145
|
+
[ -f "$HERMES_HOME/.env" ] || cp "$INSTALL_DIR/.env.example" "$HERMES_HOME/.env"
|
|
146
|
+
[ -f "$HERMES_HOME/config.yaml" ] || cp "$INSTALL_DIR/cli-config.yaml.example" "$HERMES_HOME/config.yaml"
|
|
147
|
+
[ -f "$HERMES_HOME/SOUL.md" ] || cp "$INSTALL_DIR/docker/SOUL.md" "$HERMES_HOME/SOUL.md"
|
|
148
|
+
|
|
149
|
+
# ── Skills sync (best-effort, upstream behavior) ─────────────────────────────
|
|
150
|
+
python3 "$INSTALL_DIR/tools/skills_sync.py" || true
|
|
151
|
+
|
|
152
|
+
# ── Activate venv and hand off to hermes ─────────────────────────────────────
|
|
153
|
+
source "$VENV_DIR/bin/activate"
|
|
154
|
+
exec hermes "$@"
|
package/dist/cli/openclaw.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/cli/openclaw.ts
|
|
3
|
-
* OpenClaw 实例管理子命令
|
|
4
|
-
*
|
|
5
|
-
* jishushell openclaw pairing list
|
|
6
|
-
* jishushell openclaw pairing approve <channel> <code>
|
|
7
|
-
*
|
|
8
|
-
* 后续可在此扩展: logs、shell、config-show 等
|
|
9
|
-
*/
|
|
10
|
-
export declare function run(rest: string[]): Promise<void>;
|
|
11
|
-
export declare function brief(): string;
|
|
12
|
-
export declare function printHelp(): void;
|
package/dist/cli/openclaw.js
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/cli/openclaw.ts
|
|
3
|
-
* OpenClaw 实例管理子命令
|
|
4
|
-
*
|
|
5
|
-
* jishushell openclaw pairing list
|
|
6
|
-
* jishushell openclaw pairing approve <channel> <code>
|
|
7
|
-
*
|
|
8
|
-
* 后续可在此扩展: logs、shell、config-show 等
|
|
9
|
-
*/
|
|
10
|
-
import { getSvc, resolveInstanceForPairing } from "../services/job-manager.js";
|
|
11
|
-
import { loadNomadToken } from "../services/setup-manager.js";
|
|
12
|
-
const isTTY = process.stdout.isTTY ?? false;
|
|
13
|
-
const c = {
|
|
14
|
-
bold: (s) => isTTY ? `\x1b[1m${s}\x1b[0m` : s,
|
|
15
|
-
green: (s) => isTTY ? `\x1b[32m${s}\x1b[0m` : s,
|
|
16
|
-
red: (s) => isTTY ? `\x1b[31m${s}\x1b[0m` : s,
|
|
17
|
-
cyan: (s) => isTTY ? `\x1b[36m${s}\x1b[0m` : s,
|
|
18
|
-
dim: (s) => isTTY ? `\x1b[2m${s}\x1b[0m` : s,
|
|
19
|
-
};
|
|
20
|
-
function log(msg) { process.stdout.write(msg + "\n"); }
|
|
21
|
-
async function runPairing(rest) {
|
|
22
|
-
const action = rest[0];
|
|
23
|
-
let instanceId;
|
|
24
|
-
const instIdx = rest.indexOf("--instance");
|
|
25
|
-
if (instIdx !== -1 && rest[instIdx + 1])
|
|
26
|
-
instanceId = rest[instIdx + 1];
|
|
27
|
-
if (action === "list") {
|
|
28
|
-
loadNomadToken();
|
|
29
|
-
let targetId;
|
|
30
|
-
try {
|
|
31
|
-
targetId = await resolveInstanceForPairing(instanceId);
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
log(c.red(` ✗ ${e.message}`));
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
log("");
|
|
38
|
-
log(c.bold(c.cyan(` Pairing requests for instance: ${targetId}`)));
|
|
39
|
-
log(c.dim(" ─────────────────────────────────────────────────────"));
|
|
40
|
-
const svc = await getSvc();
|
|
41
|
-
try {
|
|
42
|
-
const result = await svc.exec(targetId, ["openclaw", "pairing", "list"], 15_000);
|
|
43
|
-
const output = (result.stdout + result.stderr).trim();
|
|
44
|
-
log(output || " (no pending requests)");
|
|
45
|
-
if (result.exitCode !== 0)
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
48
|
-
catch (e) {
|
|
49
|
-
log(c.red(` ✗ ${e.message || "Failed to list pairing requests."}`));
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
log("");
|
|
53
|
-
}
|
|
54
|
-
else if (action === "approve") {
|
|
55
|
-
loadNomadToken();
|
|
56
|
-
const actionArgs = rest.slice(1).filter((a) => !a.startsWith("--") && a !== instanceId);
|
|
57
|
-
let channel;
|
|
58
|
-
let code;
|
|
59
|
-
if (actionArgs.length >= 2) {
|
|
60
|
-
[channel, code] = actionArgs;
|
|
61
|
-
}
|
|
62
|
-
else if (actionArgs.length === 1) {
|
|
63
|
-
channel = "feishu";
|
|
64
|
-
code = actionArgs[0];
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
console.error("Usage: jishushell openclaw pairing approve <channel> <code> [--instance <id>]");
|
|
68
|
-
process.exit(1);
|
|
69
|
-
}
|
|
70
|
-
let targetId;
|
|
71
|
-
try {
|
|
72
|
-
targetId = await resolveInstanceForPairing(instanceId);
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
log(c.red(` ✗ ${e.message}`));
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
const notify = rest.includes("--notify");
|
|
79
|
-
const cmd = ["openclaw", "pairing", "approve", channel, code];
|
|
80
|
-
if (notify)
|
|
81
|
-
cmd.push("--notify");
|
|
82
|
-
log("");
|
|
83
|
-
log(c.bold(` Approving pairing code ${c.cyan(code)} on channel ${c.cyan(channel)}…`));
|
|
84
|
-
const svc = await getSvc();
|
|
85
|
-
try {
|
|
86
|
-
const result = await svc.exec(targetId, cmd, 15_000);
|
|
87
|
-
const output = (result.stdout + result.stderr).trim();
|
|
88
|
-
if (result.exitCode === 0) {
|
|
89
|
-
log(c.green(` ✓ ${output}`));
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
log(c.red(` ✗ ${output || "Approval failed"}`));
|
|
93
|
-
process.exit(1);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (e) {
|
|
97
|
-
log(c.red(` ✗ ${e.message || "Approval failed"}`));
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
log("");
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
console.log(`
|
|
104
|
-
Usage: jishushell openclaw pairing <command> [options]
|
|
105
|
-
|
|
106
|
-
Commands:
|
|
107
|
-
list 列出等待审批的配对请求
|
|
108
|
-
approve <channel> <code> 审批配对码(例: feishu LVU7PNYK)
|
|
109
|
-
approve <code> 默认 channel=feishu 简写形式
|
|
110
|
-
|
|
111
|
-
Options:
|
|
112
|
-
--instance <id> 指定实例 ID(只有一个实例时可省略)
|
|
113
|
-
--notify 审批后通知申请方
|
|
114
|
-
|
|
115
|
-
Examples:
|
|
116
|
-
jishushell openclaw pairing list
|
|
117
|
-
jishushell openclaw pairing approve feishu LVU7PNYK
|
|
118
|
-
jishushell openclaw pairing approve LVU7PNYK --instance my-inst
|
|
119
|
-
`);
|
|
120
|
-
process.exit(action ? 1 : 0);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
export async function run(rest) {
|
|
124
|
-
const cmd = rest[0];
|
|
125
|
-
const args = rest.slice(1);
|
|
126
|
-
if (cmd === "pairing") {
|
|
127
|
-
await runPairing(args);
|
|
128
|
-
}
|
|
129
|
-
else if (cmd === "help" || cmd === "--help" || cmd === "-h") {
|
|
130
|
-
printHelp();
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
printHelp();
|
|
134
|
-
if (cmd)
|
|
135
|
-
process.exit(1);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
export function brief() {
|
|
139
|
-
return " openclaw <pairing> OpenClaw 实例管理";
|
|
140
|
-
}
|
|
141
|
-
export function printHelp() {
|
|
142
|
-
console.log(`
|
|
143
|
-
Usage: jishushell openclaw <command> [options]
|
|
144
|
-
|
|
145
|
-
Commands:
|
|
146
|
-
pairing list 列出等待审批的配对请求
|
|
147
|
-
pairing approve <channel> <code> 审批配对码(例: feishu LVU7PNYK)
|
|
148
|
-
help 显示此帮助
|
|
149
|
-
|
|
150
|
-
Examples:
|
|
151
|
-
jishushell openclaw pairing list
|
|
152
|
-
jishushell openclaw pairing approve feishu LVU7PNYK
|
|
153
|
-
jishushell openclaw pairing approve LVU7PNYK --instance my-inst
|
|
154
|
-
`);
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=openclaw.js.map
|
package/dist/cli/openclaw.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/cli/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-compiler.js","sourceRoot":"","sources":["../../src/services/app-compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { AppManifest, AppSpec } from "../types.js";
|
|
2
|
-
export declare function installApp(specYaml: string): Promise<{
|
|
3
|
-
spec: AppSpec;
|
|
4
|
-
manifest: AppManifest;
|
|
5
|
-
}>;
|
|
6
|
-
export declare function listApps(): Array<{
|
|
7
|
-
spec: AppSpec;
|
|
8
|
-
manifest: AppManifest;
|
|
9
|
-
}>;
|
|
10
|
-
export declare function getApp(id: string): {
|
|
11
|
-
spec: AppSpec;
|
|
12
|
-
manifest: AppManifest;
|
|
13
|
-
} | null;
|
|
14
|
-
export declare function uninstallApp(id: string): void;
|
|
15
|
-
export declare function registerCapabilities(instanceId: string, spec: AppSpec, port: number): void;
|
|
16
|
-
export declare function unregisterCapabilities(instanceId: string): void;
|
|
17
|
-
export declare function resolveRequires(spec: AppSpec): Record<string, string>;
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { createHash } from "crypto";
|
|
2
|
-
import { existsSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "fs";
|
|
3
|
-
import { join } from "path";
|
|
4
|
-
import { parse } from "yaml";
|
|
5
|
-
import { APPS_DIR } from "../config.js";
|
|
6
|
-
import { ensureDirHost } from "../utils/fs.js";
|
|
7
|
-
import { safeReadJson, safeWriteJson } from "../utils/safe-json.js";
|
|
8
|
-
const DOCKER_IMAGE_RE = /^[a-zA-Z0-9][a-zA-Z0-9\-_.:/@]*$/;
|
|
9
|
-
const APP_ID_RE = /^[a-z0-9][a-z0-9-]{0,62}$/;
|
|
10
|
-
const REGISTRY_PATH = join(APPS_DIR, "capability-registry.json");
|
|
11
|
-
function readRegistry() {
|
|
12
|
-
const reg = safeReadJson(REGISTRY_PATH, "capability-registry");
|
|
13
|
-
return reg ?? { capabilities: {} };
|
|
14
|
-
}
|
|
15
|
-
function writeRegistry(reg) {
|
|
16
|
-
ensureDirHost(APPS_DIR);
|
|
17
|
-
safeWriteJson(REGISTRY_PATH, reg, true);
|
|
18
|
-
}
|
|
19
|
-
export async function installApp(specYaml) {
|
|
20
|
-
let spec;
|
|
21
|
-
try {
|
|
22
|
-
spec = parse(specYaml);
|
|
23
|
-
}
|
|
24
|
-
catch (e) {
|
|
25
|
-
throw new Error(`YAML 解析失败: ${e.message}`);
|
|
26
|
-
}
|
|
27
|
-
if (!spec || !spec.id || !APP_ID_RE.test(spec.id)) {
|
|
28
|
-
throw new Error(`App id '${spec?.id}' 格式无效,必须符合 /^[a-z0-9][a-z0-9-]{0,62}$/`);
|
|
29
|
-
}
|
|
30
|
-
if (!Array.isArray(spec.tasks) || spec.tasks.length === 0) {
|
|
31
|
-
throw new Error("tasks 不能为空");
|
|
32
|
-
}
|
|
33
|
-
const hasService = spec.tasks.some((t) => t.role === "service");
|
|
34
|
-
if (!hasService) {
|
|
35
|
-
throw new Error("tasks 中至少需要一个 role 为 'service' 的任务");
|
|
36
|
-
}
|
|
37
|
-
for (const task of spec.tasks) {
|
|
38
|
-
if (task.runtime === "vm") {
|
|
39
|
-
throw new Error(`runtime 'vm' 暂不支持,请使用 runtime: container 或 process`);
|
|
40
|
-
}
|
|
41
|
-
if (task.runtime === "container" && !task.image) {
|
|
42
|
-
throw new Error(`container task '${task.name}' 需要指定 image 字段`);
|
|
43
|
-
}
|
|
44
|
-
if (task.runtime === "process" && !task.command) {
|
|
45
|
-
throw new Error(`process task '${task.name}' 需要指定 command 字段`);
|
|
46
|
-
}
|
|
47
|
-
if (task.image && !DOCKER_IMAGE_RE.test(task.image)) {
|
|
48
|
-
throw new Error(`task '${task.name}' 的 image '${task.image}' 格式无效`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
const appDir = join(APPS_DIR, spec.id);
|
|
52
|
-
const manifestPath = join(appDir, "manifest.json");
|
|
53
|
-
if (existsSync(manifestPath)) {
|
|
54
|
-
const err = new Error(`App '${spec.id}' 已安装,如需更新请先卸载`);
|
|
55
|
-
err.code = 409;
|
|
56
|
-
throw err;
|
|
57
|
-
}
|
|
58
|
-
ensureDirHost(appDir);
|
|
59
|
-
const yamlPath = join(appDir, "app-spec.yaml");
|
|
60
|
-
const yamlTmp = yamlPath + ".tmp";
|
|
61
|
-
writeFileSync(yamlTmp, specYaml, { mode: 0o644 });
|
|
62
|
-
renameSync(yamlTmp, yamlPath);
|
|
63
|
-
const manifest = {
|
|
64
|
-
id: spec.id,
|
|
65
|
-
installed_at: new Date().toISOString(),
|
|
66
|
-
spec_hash: createHash("sha256").update(specYaml).digest("hex"),
|
|
67
|
-
};
|
|
68
|
-
safeWriteJson(manifestPath, manifest, true);
|
|
69
|
-
return { spec, manifest };
|
|
70
|
-
}
|
|
71
|
-
export function listApps() {
|
|
72
|
-
if (!existsSync(APPS_DIR))
|
|
73
|
-
return [];
|
|
74
|
-
let entries;
|
|
75
|
-
try {
|
|
76
|
-
entries = readdirSync(APPS_DIR, { withFileTypes: true });
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
return [];
|
|
80
|
-
}
|
|
81
|
-
const results = [];
|
|
82
|
-
for (const entry of entries) {
|
|
83
|
-
if (!entry.isDirectory())
|
|
84
|
-
continue;
|
|
85
|
-
const appId = entry.name;
|
|
86
|
-
const appDir = join(APPS_DIR, appId);
|
|
87
|
-
try {
|
|
88
|
-
const yamlPath = join(appDir, "app-spec.yaml");
|
|
89
|
-
const manifestPath = join(appDir, "manifest.json");
|
|
90
|
-
if (!existsSync(yamlPath) || !existsSync(manifestPath))
|
|
91
|
-
continue;
|
|
92
|
-
const spec = parse(readFileSync(yamlPath, "utf-8"));
|
|
93
|
-
const manifest = safeReadJson(manifestPath, `app:${appId}`);
|
|
94
|
-
if (!manifest)
|
|
95
|
-
continue;
|
|
96
|
-
results.push({ spec, manifest });
|
|
97
|
-
}
|
|
98
|
-
catch (e) {
|
|
99
|
-
console.warn(`[app-manager] Skipping app '${appId}': ${e.message}`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return results;
|
|
103
|
-
}
|
|
104
|
-
export function getApp(id) {
|
|
105
|
-
if (!APP_ID_RE.test(id))
|
|
106
|
-
return null;
|
|
107
|
-
const appDir = join(APPS_DIR, id);
|
|
108
|
-
const yamlPath = join(appDir, "app-spec.yaml");
|
|
109
|
-
const manifestPath = join(appDir, "manifest.json");
|
|
110
|
-
if (!existsSync(yamlPath) || !existsSync(manifestPath))
|
|
111
|
-
return null;
|
|
112
|
-
try {
|
|
113
|
-
const spec = parse(readFileSync(yamlPath, "utf-8"));
|
|
114
|
-
const manifest = safeReadJson(manifestPath, `app:${id}`);
|
|
115
|
-
if (!manifest)
|
|
116
|
-
return null;
|
|
117
|
-
return { spec, manifest };
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
export function uninstallApp(id) {
|
|
124
|
-
if (!APP_ID_RE.test(id))
|
|
125
|
-
return;
|
|
126
|
-
rmSync(join(APPS_DIR, id), { recursive: true, force: true });
|
|
127
|
-
}
|
|
128
|
-
export function registerCapabilities(instanceId, spec, port) {
|
|
129
|
-
if (!spec.provides || spec.provides.length === 0)
|
|
130
|
-
return;
|
|
131
|
-
const reg = readRegistry();
|
|
132
|
-
const now = new Date().toISOString();
|
|
133
|
-
for (const provide of spec.provides) {
|
|
134
|
-
reg.capabilities[provide.capability] = {
|
|
135
|
-
instanceId,
|
|
136
|
-
hostPort: port,
|
|
137
|
-
address: `127.0.0.1:${port}`,
|
|
138
|
-
registered_at: now,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
writeRegistry(reg);
|
|
142
|
-
}
|
|
143
|
-
export function unregisterCapabilities(instanceId) {
|
|
144
|
-
const reg = readRegistry();
|
|
145
|
-
for (const key of Object.keys(reg.capabilities)) {
|
|
146
|
-
if (reg.capabilities[key].instanceId === instanceId) {
|
|
147
|
-
delete reg.capabilities[key];
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
writeRegistry(reg);
|
|
151
|
-
}
|
|
152
|
-
export function resolveRequires(spec) {
|
|
153
|
-
if (!spec.requires || spec.requires.length === 0)
|
|
154
|
-
return {};
|
|
155
|
-
const reg = readRegistry();
|
|
156
|
-
const result = {};
|
|
157
|
-
for (const req of spec.requires) {
|
|
158
|
-
const entry = reg.capabilities[req.capability];
|
|
159
|
-
if (entry) {
|
|
160
|
-
result[req.inject_as] = entry.address;
|
|
161
|
-
}
|
|
162
|
-
else if (req.required !== false) {
|
|
163
|
-
throw new Error(`Required capability '${req.capability}' is not registered`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return result;
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=app-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-manager.js","sourceRoot":"","sources":["../../src/services/app-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/services/job-manager.ts
|
|
3
|
-
*
|
|
4
|
-
* ServiceManager resolution and instance data helpers.
|
|
5
|
-
* No console.log — throws descriptive errors so callers can format output.
|
|
6
|
-
*/
|
|
7
|
-
import type { ServiceManager } from "../types.js";
|
|
8
|
-
export declare function getSvc(): Promise<ServiceManager>;
|
|
9
|
-
export declare function listInstanceIds(): string[];
|
|
10
|
-
export declare function readInstanceMeta(id: string): Record<string, any> | null;
|
|
11
|
-
/**
|
|
12
|
-
* Resolve an instance ID from an optional hint.
|
|
13
|
-
* Throws a descriptive Error (no logging) when resolution fails; callers
|
|
14
|
-
* catch and print however they like.
|
|
15
|
-
*/
|
|
16
|
-
export declare function resolveInstanceId(id?: string): Promise<string>;
|
|
17
|
-
/**
|
|
18
|
-
* Resolve an instance for pairing commands.
|
|
19
|
-
* When no ID is given and there are multiple instances, picks the single
|
|
20
|
-
* running one; throws if the result is still ambiguous.
|
|
21
|
-
*/
|
|
22
|
-
export declare function resolveInstanceForPairing(instanceId?: string): Promise<string>;
|