jishushell 0.4.24 → 0.5.15

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.
Files changed (281) hide show
  1. package/INSTALL-NOTICE +11 -0
  2. package/apps/anythingllm-container.yaml +287 -0
  3. package/apps/browserless-chromium-container.yaml +90 -0
  4. package/apps/filebrowser-container.yaml +163 -0
  5. package/apps/hermes-container.yaml +36 -2
  6. package/apps/ollama-binary.yaml +91 -90
  7. package/apps/ollama-cpu-container.yaml +8 -1
  8. package/apps/ollama-with-hollama-binary.yaml +91 -90
  9. package/apps/openclaw-binary.yaml +38 -1
  10. package/apps/openclaw-container.yaml +45 -2
  11. package/apps/openclaw-with-ollama-container.yaml +11 -2
  12. package/apps/openclaw-with-searxng-container.yaml +26 -2
  13. package/apps/openwebui-container.yaml +45 -1
  14. package/apps/playwright-container.yaml +7 -1
  15. package/apps/searxng-container.yaml +58 -7
  16. package/apps/weknora-container.yaml +471 -0
  17. package/dist/cli/app.js +79 -9
  18. package/dist/cli/app.js.map +1 -1
  19. package/dist/cli/doctor.d.ts +12 -12
  20. package/dist/cli/doctor.js +242 -55
  21. package/dist/cli/doctor.js.map +1 -1
  22. package/dist/cli/llm.d.ts +4 -3
  23. package/dist/cli/llm.js +4 -3
  24. package/dist/cli/llm.js.map +1 -1
  25. package/dist/cli/panel.d.ts +6 -5
  26. package/dist/cli/panel.js +10 -9
  27. package/dist/cli/panel.js.map +1 -1
  28. package/dist/config.d.ts +19 -0
  29. package/dist/config.js +99 -1
  30. package/dist/config.js.map +1 -1
  31. package/dist/control.d.ts +7 -6
  32. package/dist/control.js +7 -6
  33. package/dist/control.js.map +1 -1
  34. package/dist/install.js +3 -3
  35. package/dist/install.js.map +1 -1
  36. package/dist/routes/agent-apps.d.ts +1 -1
  37. package/dist/routes/agent-apps.js +1 -1
  38. package/dist/routes/apps.js +44 -11
  39. package/dist/routes/apps.js.map +1 -1
  40. package/dist/routes/auth.js +5 -2
  41. package/dist/routes/auth.js.map +1 -1
  42. package/dist/routes/backup.js +64 -11
  43. package/dist/routes/backup.js.map +1 -1
  44. package/dist/routes/external-mounts.d.ts +17 -0
  45. package/dist/routes/external-mounts.js +73 -0
  46. package/dist/routes/external-mounts.js.map +1 -0
  47. package/dist/routes/file-mounts.d.ts +13 -0
  48. package/dist/routes/file-mounts.js +90 -0
  49. package/dist/routes/file-mounts.js.map +1 -0
  50. package/dist/routes/files-organize.d.ts +28 -0
  51. package/dist/routes/files-organize.js +167 -0
  52. package/dist/routes/files-organize.js.map +1 -0
  53. package/dist/routes/files.d.ts +31 -0
  54. package/dist/routes/files.js +321 -0
  55. package/dist/routes/files.js.map +1 -0
  56. package/dist/routes/instances.js +826 -17
  57. package/dist/routes/instances.js.map +1 -1
  58. package/dist/routes/internal.d.ts +2 -0
  59. package/dist/routes/internal.js +59 -0
  60. package/dist/routes/internal.js.map +1 -0
  61. package/dist/routes/llm.js +24 -35
  62. package/dist/routes/llm.js.map +1 -1
  63. package/dist/routes/setup.js +10 -10
  64. package/dist/routes/setup.js.map +1 -1
  65. package/dist/routes/system.js +1 -1
  66. package/dist/routes/system.js.map +1 -1
  67. package/dist/routes/webdav.d.ts +17 -0
  68. package/dist/routes/webdav.js +114 -0
  69. package/dist/routes/webdav.js.map +1 -0
  70. package/dist/server.d.ts +9 -0
  71. package/dist/server.js +751 -20
  72. package/dist/server.js.map +1 -1
  73. package/dist/services/agent-apps/catalog.js +4 -3
  74. package/dist/services/agent-apps/catalog.js.map +1 -1
  75. package/dist/services/agent-apps/index.d.ts +1 -1
  76. package/dist/services/agent-apps/index.js +1 -1
  77. package/dist/services/agent-apps/installers/adapter.d.ts +1 -1
  78. package/dist/services/agent-apps/installers/adapter.js +1 -1
  79. package/dist/services/agent-apps/installers/shell-script.d.ts +1 -1
  80. package/dist/services/agent-apps/installers/shell-script.js +3 -3
  81. package/dist/services/agent-apps/installers/shell-script.js.map +1 -1
  82. package/dist/services/agent-apps/types.d.ts +2 -2
  83. package/dist/services/agent-apps/types.js +1 -1
  84. package/dist/services/app/app-compiler.d.ts +1 -1
  85. package/dist/services/app/app-compiler.js +5 -5
  86. package/dist/services/app/app-compiler.js.map +1 -1
  87. package/dist/services/app/app-manager.d.ts +25 -1
  88. package/dist/services/app/app-manager.js +829 -150
  89. package/dist/services/app/app-manager.js.map +1 -1
  90. package/dist/services/app/custom-manager.js.map +1 -1
  91. package/dist/services/app/hermes-agent-manager.js +7 -4
  92. package/dist/services/app/hermes-agent-manager.js.map +1 -1
  93. package/dist/services/app/ollama-manager.js +1 -1
  94. package/dist/services/app/ollama-manager.js.map +1 -1
  95. package/dist/services/app/openclaw-manager.js +20 -3
  96. package/dist/services/app/openclaw-manager.js.map +1 -1
  97. package/dist/services/app/platform-transform.d.ts +32 -0
  98. package/dist/services/app/platform-transform.js +65 -0
  99. package/dist/services/app/platform-transform.js.map +1 -0
  100. package/dist/services/app/provide-resolver.d.ts +29 -0
  101. package/dist/services/app/provide-resolver.js +112 -0
  102. package/dist/services/app/provide-resolver.js.map +1 -0
  103. package/dist/services/app-passwords.d.ts +61 -0
  104. package/dist/services/app-passwords.js +173 -0
  105. package/dist/services/app-passwords.js.map +1 -0
  106. package/dist/services/backup-manager.d.ts +11 -0
  107. package/dist/services/backup-manager.js +177 -4
  108. package/dist/services/backup-manager.js.map +1 -1
  109. package/dist/services/capability-endpoint-validator.d.ts +41 -0
  110. package/dist/services/capability-endpoint-validator.js +104 -0
  111. package/dist/services/capability-endpoint-validator.js.map +1 -0
  112. package/dist/services/capability-health.d.ts +16 -0
  113. package/dist/services/capability-health.js +121 -0
  114. package/dist/services/capability-health.js.map +1 -0
  115. package/dist/services/capability-registry.d.ts +106 -0
  116. package/dist/services/capability-registry.js +313 -0
  117. package/dist/services/capability-registry.js.map +1 -0
  118. package/dist/services/connection-apply.d.ts +91 -0
  119. package/dist/services/connection-apply.js +475 -0
  120. package/dist/services/connection-apply.js.map +1 -0
  121. package/dist/services/connection-resolver.d.ts +65 -0
  122. package/dist/services/connection-resolver.js +281 -0
  123. package/dist/services/connection-resolver.js.map +1 -0
  124. package/dist/services/connection-transactor.d.ts +39 -0
  125. package/dist/services/connection-transactor.js +351 -0
  126. package/dist/services/connection-transactor.js.map +1 -0
  127. package/dist/services/external-mounts.d.ts +40 -0
  128. package/dist/services/external-mounts.js +187 -0
  129. package/dist/services/external-mounts.js.map +1 -0
  130. package/dist/services/files-manager.d.ts +252 -0
  131. package/dist/services/files-manager.js +1075 -0
  132. package/dist/services/files-manager.js.map +1 -0
  133. package/dist/services/files-mounts.d.ts +42 -0
  134. package/dist/services/files-mounts.js +207 -0
  135. package/dist/services/files-mounts.js.map +1 -0
  136. package/dist/services/instance-manager.d.ts +13 -0
  137. package/dist/services/instance-manager.js +138 -46
  138. package/dist/services/instance-manager.js.map +1 -1
  139. package/dist/services/llm-proxy/index.d.ts +16 -2
  140. package/dist/services/llm-proxy/index.js +48 -44
  141. package/dist/services/llm-proxy/index.js.map +1 -1
  142. package/dist/services/llm-proxy/probe.d.ts +6 -0
  143. package/dist/services/llm-proxy/probe.js +85 -0
  144. package/dist/services/llm-proxy/probe.js.map +1 -0
  145. package/dist/services/llm-proxy/ssrf.d.ts +1 -0
  146. package/dist/services/llm-proxy/ssrf.js +24 -9
  147. package/dist/services/llm-proxy/ssrf.js.map +1 -1
  148. package/dist/services/nomad-manager.d.ts +4 -0
  149. package/dist/services/nomad-manager.js +428 -35
  150. package/dist/services/nomad-manager.js.map +1 -1
  151. package/dist/services/organize/applier.d.ts +46 -0
  152. package/dist/services/organize/applier.js +218 -0
  153. package/dist/services/organize/applier.js.map +1 -0
  154. package/dist/services/organize/rules.d.ts +57 -0
  155. package/dist/services/organize/rules.js +286 -0
  156. package/dist/services/organize/rules.js.map +1 -0
  157. package/dist/services/organize/scanner.d.ts +50 -0
  158. package/dist/services/organize/scanner.js +366 -0
  159. package/dist/services/organize/scanner.js.map +1 -0
  160. package/dist/services/organize/store.d.ts +14 -0
  161. package/dist/services/organize/store.js +82 -0
  162. package/dist/services/organize/store.js.map +1 -0
  163. package/dist/services/panel-manager.js +20 -1
  164. package/dist/services/panel-manager.js.map +1 -1
  165. package/dist/services/process-manager.js +4 -3
  166. package/dist/services/process-manager.js.map +1 -1
  167. package/dist/services/runtime/adapters/hermes.d.ts +30 -1
  168. package/dist/services/runtime/adapters/hermes.js +219 -6
  169. package/dist/services/runtime/adapters/hermes.js.map +1 -1
  170. package/dist/services/runtime/adapters/openclaw-mcporter.d.ts +45 -0
  171. package/dist/services/runtime/adapters/openclaw-mcporter.js +108 -0
  172. package/dist/services/runtime/adapters/openclaw-mcporter.js.map +1 -0
  173. package/dist/services/runtime/adapters/openclaw-routes.d.ts +8 -2
  174. package/dist/services/runtime/adapters/openclaw-routes.js +68 -0
  175. package/dist/services/runtime/adapters/openclaw-routes.js.map +1 -1
  176. package/dist/services/runtime/adapters/openclaw.d.ts +177 -0
  177. package/dist/services/runtime/adapters/openclaw.js +1171 -11
  178. package/dist/services/runtime/adapters/openclaw.js.map +1 -1
  179. package/dist/services/runtime/instance.d.ts +1 -1
  180. package/dist/services/runtime/instance.js +1 -1
  181. package/dist/services/runtime/instance.js.map +1 -1
  182. package/dist/services/runtime/mcp-shims/anythingllm-shim.d.ts +46 -0
  183. package/dist/services/runtime/mcp-shims/anythingllm-shim.js +281 -0
  184. package/dist/services/runtime/mcp-shims/anythingllm-shim.js.map +1 -0
  185. package/dist/services/runtime/mcp-shims/drive-shim.d.ts +54 -0
  186. package/dist/services/runtime/mcp-shims/drive-shim.js +489 -0
  187. package/dist/services/runtime/mcp-shims/drive-shim.js.map +1 -0
  188. package/dist/services/runtime/mcp-shims/firewall.d.ts +26 -0
  189. package/dist/services/runtime/mcp-shims/firewall.js +129 -0
  190. package/dist/services/runtime/mcp-shims/firewall.js.map +1 -0
  191. package/dist/services/runtime/mcp-shims/searxng-shim.d.ts +27 -0
  192. package/dist/services/runtime/mcp-shims/searxng-shim.js +125 -0
  193. package/dist/services/runtime/mcp-shims/searxng-shim.js.map +1 -0
  194. package/dist/services/runtime/mcp-shims/write-mcp-entry.d.ts +83 -0
  195. package/dist/services/runtime/mcp-shims/write-mcp-entry.js +127 -0
  196. package/dist/services/runtime/mcp-shims/write-mcp-entry.js.map +1 -0
  197. package/dist/services/runtime/migrations.d.ts +8 -0
  198. package/dist/services/runtime/migrations.js +100 -0
  199. package/dist/services/runtime/migrations.js.map +1 -1
  200. package/dist/services/runtime/types.d.ts +46 -0
  201. package/dist/services/setup-manager.js +99 -24
  202. package/dist/services/setup-manager.js.map +1 -1
  203. package/dist/services/suggestions.d.ts +27 -0
  204. package/dist/services/suggestions.js +133 -0
  205. package/dist/services/suggestions.js.map +1 -0
  206. package/dist/services/task-registry.js +4 -2
  207. package/dist/services/task-registry.js.map +1 -1
  208. package/dist/services/telemetry/device-fingerprint.d.ts +1 -1
  209. package/dist/services/telemetry/device-fingerprint.js +1 -1
  210. package/dist/services/types-shim.d.ts +16 -0
  211. package/dist/services/types-shim.js +2 -0
  212. package/dist/services/types-shim.js.map +1 -0
  213. package/dist/services/webdav/server.d.ts +24 -0
  214. package/dist/services/webdav/server.js +420 -0
  215. package/dist/services/webdav/server.js.map +1 -0
  216. package/dist/services/webdav/xml-builder.d.ts +73 -0
  217. package/dist/services/webdav/xml-builder.js +156 -0
  218. package/dist/services/webdav/xml-builder.js.map +1 -0
  219. package/dist/services/workspace-builder.d.ts +29 -0
  220. package/dist/services/workspace-builder.js +188 -0
  221. package/dist/services/workspace-builder.js.map +1 -0
  222. package/dist/types.d.ts +231 -1
  223. package/dist/utils/instance-lock.d.ts +22 -0
  224. package/dist/utils/instance-lock.js +48 -0
  225. package/dist/utils/instance-lock.js.map +1 -0
  226. package/dist/utils/path-locks.d.ts +30 -0
  227. package/dist/utils/path-locks.js +63 -0
  228. package/dist/utils/path-locks.js.map +1 -0
  229. package/dist/utils/path-safety.d.ts +41 -0
  230. package/dist/utils/path-safety.js +119 -0
  231. package/dist/utils/path-safety.js.map +1 -0
  232. package/dist/utils/safe-json.js +55 -22
  233. package/dist/utils/safe-json.js.map +1 -1
  234. package/dist/utils/safe-write.d.ts +24 -0
  235. package/dist/utils/safe-write.js +82 -0
  236. package/dist/utils/safe-write.js.map +1 -0
  237. package/install/jishu-install.sh +323 -27
  238. package/install/jishu-uninstall.sh +353 -20
  239. package/package.json +18 -1
  240. package/public/assets/Dashboard-BdWPtroF.js +1 -0
  241. package/public/assets/{HermesChatPanel-mFSureyc.js → HermesChatPanel-B_2HlVBQ.js} +1 -1
  242. package/public/assets/HermesConfigForm-DVlhg3WV.js +4 -0
  243. package/public/assets/{InitPassword-CVA8wQA6.js → InitPassword-D7glTExX.js} +1 -1
  244. package/public/assets/InstanceDetail-CxSy2cpe.js +92 -0
  245. package/public/assets/{Login-BWsZH2mu.js → Login-Cfr5c2sv.js} +1 -1
  246. package/public/assets/NewInstance-BIYDmJis.js +1 -0
  247. package/public/assets/ProviderRecommendations-BuRnvRcI.js +1 -0
  248. package/public/assets/Settings-Cc-tYBil.js +1 -0
  249. package/public/assets/Setup-lGZEk5jq.js +1 -0
  250. package/public/assets/{WeixinLoginPanel-CnjR8xMu.js → WeixinLoginPanel-CoGqzxeV.js} +2 -2
  251. package/public/assets/index-87IJXG-w.css +1 -0
  252. package/public/assets/index-BZc5zH7u.js +19 -0
  253. package/public/assets/providers-DtNXh9JD.js +1 -0
  254. package/public/assets/registry-BWnkJgZ1.js +2 -0
  255. package/public/assets/{usePolling-Do5Erqm_.js → usePolling-CwwT9KrC.js} +1 -1
  256. package/public/assets/{vendor-i18n-ucpM0OR0.js → vendor-i18n-y9V7Sfuu.js} +1 -1
  257. package/public/assets/{vendor-react-Bk1hRGiY.js → vendor-react-BWrEVJVb.js} +6 -6
  258. package/public/index.html +4 -4
  259. package/scripts/check-app-spec.mjs +457 -0
  260. package/scripts/check-i18n.mjs +154 -0
  261. package/scripts/check-new-file-tests.mjs +230 -0
  262. package/scripts/check-quarantine-expiry.mjs +105 -0
  263. package/scripts/perf/README.md +49 -0
  264. package/scripts/perf/auth.js +99 -0
  265. package/scripts/perf/config.js +63 -0
  266. package/scripts/perf/instances.js +143 -0
  267. package/scripts/perf/proxy.js +96 -0
  268. package/scripts/run.sh +4 -4
  269. package/scripts/smoke/files-w1.sh +142 -0
  270. package/scripts/smoke-backend.mjs +122 -0
  271. package/scripts/smoke-post-publish.mjs +346 -0
  272. package/public/assets/Dashboard-B-JoOjBQ.js +0 -1
  273. package/public/assets/HermesConfigForm-DvR05LK1.js +0 -4
  274. package/public/assets/InstanceDetail-DcZW2QGO.js +0 -91
  275. package/public/assets/NewInstance-BCIrAd86.js +0 -1
  276. package/public/assets/Settings-xkDcduFz.js +0 -1
  277. package/public/assets/Setup-Cfuwj4gV.js +0 -1
  278. package/public/assets/index-CPhVFEsx.css +0 -1
  279. package/public/assets/index-DQsM6Joa.js +0 -19
  280. package/public/assets/providers-V-vwrExZ.js +0 -1
  281. package/public/assets/registry-B4UFJdpA.js +0 -2
@@ -2,7 +2,7 @@ id: ollama-binary
2
2
  name: Ollama
3
3
  version: "1.0.0"
4
4
  jishushell:
5
- min_version: "0.4.24"
5
+ min_version: "0.4.30"
6
6
  description: "通过官方脚本,安装并运行Ollama"
7
7
  singleInstance: true
8
8
 
@@ -62,8 +62,15 @@ provides:
62
62
  - cmd: "help"
63
63
  description: "Help about any command"
64
64
  - capability: "ollama-api"
65
+ task: "gateway"
65
66
  port: 11434
67
+ protocol: "http"
66
68
  description: "Ollama HTTP API,兼容 OpenAI /v1/chat/completions 端点"
69
+ - capability: "llm-ollama"
70
+ task: "gateway"
71
+ port: 11434
72
+ protocol: "http"
73
+ description: "Ollama OpenAI-compatible LLM endpoint (Connections 主推命名)"
67
74
 
68
75
  lifecycle:
69
76
  pre_install:
@@ -75,76 +82,74 @@ lifecycle:
75
82
  fi;
76
83
  install:
77
84
  - run: >-
78
- if ! command -v ollama >/dev/null 2>&1; then
79
- echo "未检测到 ollama,开始安装..." >&2;
80
- if [ "$(id -u)" -ne 0 ]; then
81
- if ! command -v sudo >/dev/null 2>&1; then
82
- echo "未检测到 sudo,当前环境无法自动安装 Ollama。请以 root 身份重试。" >&2;
83
- exit 1;
84
- fi;
85
- if [ -n "${JISHUSHELL_SUDO_ASKPASS:-}" ]; then
86
- sudo_probe_output="$(sudo -k -A true 2>&1)" || {
87
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
88
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法自动安装 Ollama。请在系统终端手动安装,或调整容器/服务配置后重试。" >&2;
89
- else
90
- echo "提供的 sudo 密码无效,无法安装 Ollama。" >&2;
91
- fi;
92
- exit 1;
93
- };
94
- run_as_root() { sudo -A "$@"; };
95
- else
96
- sudo_probe_output="$(sudo -n true 2>&1)" || {
97
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
98
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法自动安装 Ollama。请在系统终端手动安装,或调整容器/服务配置后重试。" >&2;
99
- else
100
- echo "安装 Ollama 需要 sudo 密码;请在页面弹窗中输入后重试。" >&2;
101
- fi;
102
- exit 1;
103
- };
104
- run_as_root() { sudo -n "$@"; };
105
- fi;
85
+ install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
86
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
87
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
88
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
89
+ rm -f "$install_marker";
90
+ if command -v ollama >/dev/null 2>&1; then
91
+ if [ -f "$owner_marker" ] || [ -f "$legacy_owner_marker" ]; then
92
+ echo "检测到由 JishuShell 安装的 ollama,复用现有二进制。" >&2;
93
+ rm -f "$system_install_marker";
106
94
  else
107
- run_as_root() { "$@"; };
95
+ echo "检测到系统中已安装 ollama,跳过二进制安装。" >&2;
96
+ rm -f "$owner_marker" "$legacy_owner_marker";
97
+ : > "$system_install_marker";
108
98
  fi;
109
- for BINDIR in /usr/local/bin /usr/bin /bin; do
110
- echo "$PATH" | grep -q "$BINDIR" && break || continue;
111
- done;
112
- OLLAMA_INSTALL_DIR="$(dirname "${BINDIR:-/usr/local/bin}")";
113
- if [ -d "$OLLAMA_INSTALL_DIR/lib/ollama" ]; then
114
- old_dir="$OLLAMA_INSTALL_DIR/lib/ollama.jishushell-old-$(date +%s)";
115
- echo "检测到旧版 Ollama 目录,先移动到 $old_dir 以避免长时间卡在清理步骤..." >&2;
116
- run_as_root mv "$OLLAMA_INSTALL_DIR/lib/ollama" "$old_dir";
117
- ( run_as_root rm -rf "$old_dir" >/dev/null 2>&1 || true ) &
118
- fi;
119
- curl -fsSL https://ollama.com/install.sh | run_as_root sh;
120
99
  else
121
- echo "检测到系统中已安装 ollama,跳过二进制安装。" >&2;
100
+ echo "未检测到 ollama,开始安装..." >&2;
101
+ rm -f "$owner_marker" "$legacy_owner_marker" "$system_install_marker";
102
+ : > "$install_marker";
122
103
  fi
104
+ - run: >-
105
+ install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
106
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
107
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
108
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
109
+ for BINDIR in /usr/local/bin /usr/bin /bin; do
110
+ echo "$PATH" | grep -q "$BINDIR" && break || continue;
111
+ done;
112
+ OLLAMA_INSTALL_DIR="$(dirname "${BINDIR:-/usr/local/bin}")";
113
+ if [ -d "$OLLAMA_INSTALL_DIR/lib/ollama" ]; then
114
+ old_dir="$OLLAMA_INSTALL_DIR/lib/ollama.jishushell-old-$(date +%s)";
115
+ echo "检测到旧版 Ollama 目录,先移动到 $old_dir 以避免长时间卡在清理步骤..." >&2;
116
+ mv "$OLLAMA_INSTALL_DIR/lib/ollama" "$old_dir";
117
+ ( rm -rf "$old_dir" >/dev/null 2>&1 || true ) &
118
+ fi;
119
+ curl -fsSL https://ollama.com/install.sh | sh;
120
+ rm -f "$install_marker";
121
+ rm -f "$legacy_owner_marker";
122
+ rm -f "$system_install_marker";
123
+ : > "$owner_marker"
124
+ sudo: true
125
+ ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
123
126
  timeout_ms: 900000
124
127
  successIfCommandExists: "ollama"
125
128
  - run: >-
129
+ install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
130
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
131
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
132
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
133
+ if [ -f "$install_marker" ] && command -v ollama >/dev/null 2>&1; then
134
+ echo "检测到 ollama 已可用,补记为由 JishuShell 安装。" >&2;
135
+ rm -f "$install_marker";
136
+ rm -f "$legacy_owner_marker";
137
+ rm -f "$system_install_marker";
138
+ : > "$owner_marker";
139
+ fi
140
+ ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
141
+ - run: >-
142
+ service_active_marker="$HOME/.jishushell/apps/${app_id}/.ollama-service-active";
143
+ rm -f "$service_active_marker";
126
144
  case "$(uname -s)" in
127
145
  Linux)
128
146
  if command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files ollama.service >/dev/null 2>&1; then
129
- echo "停止并禁用 ollama.service,后续交由 Nomad 管理..." >&2;
130
- if [ "$(id -u)" -eq 0 ]; then
131
- run_as_root() { "$@"; };
132
- elif [ -n "${JISHUSHELL_SUDO_ASKPASS:-}" ]; then
133
- sudo_probe_output="$(sudo -k -A true 2>&1)" || {
134
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
135
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法清理 ollama.service。请在系统终端手动执行后重试。" >&2;
136
- else
137
- echo "提供的 sudo 密码无效,无法清理 ollama.service。" >&2;
138
- fi;
139
- exit 1;
140
- };
141
- run_as_root() { sudo -A "$@"; };
142
- elif command -v sudo >/dev/null 2>&1; then
143
- run_as_root() { sudo -n "$@"; };
147
+ if systemctl is-active --quiet ollama.service 2>/dev/null; then
148
+ echo "检测到正在运行的 ollama.service,尝试停止并禁用,后续交由 Nomad 管理..." >&2;
149
+ : > "$service_active_marker";
144
150
  else
145
- run_as_root() { "$@"; };
151
+ echo "检测到未运行的 ollama.service,保留当前 systemd 配置不变。" >&2;
146
152
  fi;
147
- run_as_root systemctl disable --now ollama;
148
153
  else
149
154
  echo "Linux 环境未检测到 ollama.service,跳过 systemd 清理。" >&2;
150
155
  fi
@@ -163,38 +168,34 @@ lifecycle:
163
168
  echo "当前平台不支持自动清理 Ollama 自启,跳过。" >&2
164
169
  ;;
165
170
  esac
171
+ - run: >-
172
+ systemctl disable --now ollama;
173
+ rm -f "$HOME/.jishushell/apps/${app_id}/.ollama-service-active"
174
+ sudo: true
175
+ ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-service-active"
166
176
 
167
177
  uninstall:
168
178
  - run: >-
169
- if [ "$(id -u)" -ne 0 ]; then
170
- if ! command -v sudo >/dev/null 2>&1; then
171
- echo "当前环境未检测到 sudo,无法卸载 Ollama。请以 root 身份重试。" >&2;
172
- exit 1;
173
- fi;
174
- if [ -n "${JISHUSHELL_SUDO_ASKPASS:-}" ]; then
175
- sudo_probe_output="$(sudo -k -A true 2>&1)" || {
176
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
177
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法卸载 Ollama。请在系统终端手动执行,或调整容器/服务配置后重试。" >&2;
178
- else
179
- echo "提供的 sudo 密码无效,无法卸载 Ollama。" >&2;
180
- fi;
181
- exit 1;
182
- };
183
- run_as_root() { sudo -A "$@"; };
184
- else
185
- sudo_probe_output="$(sudo -n true 2>&1)" || {
186
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
187
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法卸载 Ollama。请在系统终端手动执行,或调整容器/服务配置后重试。" >&2;
188
- else
189
- echo "卸载 Ollama 需要 sudo 密码;请在页面弹窗中输入后重试。" >&2;
190
- fi;
191
- exit 1;
192
- };
193
- run_as_root() { sudo -n "$@"; };
194
- fi;
195
- else
196
- run_as_root() { "$@"; };
197
- fi;
198
- run_as_root rm -f /usr/local/bin/ollama /usr/bin/ollama /bin/ollama;
199
- run_as_root rm -rf /usr/local/lib/ollama /usr/lib/ollama /usr/share/ollama 2>/dev/null || true
179
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
180
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
181
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
182
+ uninstall_marker="$HOME/.jishushell/.ollama-uninstall-needed-${app_id}";
183
+ rm -f "$uninstall_marker";
184
+ if [ -f "$system_install_marker" ]; then
185
+ echo "检测到复用的是系统已有 ollama,卸载时保留系统安装。" >&2;
186
+ rm -f "$system_install_marker";
187
+ elif [ -f "$owner_marker" ] || [ -f "$legacy_owner_marker" ]; then
188
+ : > "$uninstall_marker";
189
+ fi
190
+ - run: >-
191
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
192
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
193
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
194
+ uninstall_marker="$HOME/.jishushell/.ollama-uninstall-needed-${app_id}";
195
+ rm -f /usr/local/bin/ollama /usr/bin/ollama /bin/ollama;
196
+ rm -rf /usr/local/lib/ollama /usr/lib/ollama /usr/share/ollama 2>/dev/null || true;
197
+ rm -rf /Applications/Ollama.app "$HOME/Applications/Ollama.app" 2>/dev/null || true;
198
+ rm -f "$owner_marker" "$legacy_owner_marker" "$system_install_marker" "$uninstall_marker"
199
+ sudo: true
200
+ ifFileExists: "~/.jishushell/.ollama-uninstall-needed-${app_id}"
200
201
 
@@ -2,7 +2,7 @@ id: ollama-cpu-docker
2
2
  name: Ollama CPU(Docker)
3
3
  version: "1.0.0"
4
4
  jishushell:
5
- min_version: "0.4.24"
5
+ min_version: "0.4.30"
6
6
  description: "使用 alpine/ollama 镜像运行的纯 CPU 版 Ollama"
7
7
  singleInstance: true
8
8
 
@@ -33,5 +33,12 @@ tasks:
33
33
 
34
34
  provides:
35
35
  - capability: "ollama-api"
36
+ task: "gateway"
36
37
  port: 11434
38
+ protocol: "http"
37
39
  description: "Ollama HTTP API,兼容 OpenAI /v1/chat/completions 端点"
40
+ - capability: "llm-ollama"
41
+ task: "gateway"
42
+ port: 11434
43
+ protocol: "http"
44
+ description: "Ollama OpenAI-compatible LLM endpoint (Connections 主推命名)"
@@ -2,7 +2,7 @@ id: ollama-with-hollama-binary
2
2
  name: Ollama
3
3
  version: "1.0.0"
4
4
  jishushell:
5
- min_version: "0.4.24"
5
+ min_version: "0.4.30"
6
6
  description: "通过官方脚本安装并运行 Ollama,同时提供 Hollama Web UI。"
7
7
  singleInstance: true
8
8
 
@@ -52,13 +52,20 @@ tasks:
52
52
 
53
53
  provides:
54
54
  - capability: "hollama-web"
55
+ task: "hollama"
55
56
  port: 4173
56
57
  protocol: "http"
57
58
  description: "Hollama Web 界面"
58
59
  - capability: "ollama-api"
60
+ task: "gateway"
59
61
  port: 11434
60
62
  protocol: "http"
61
63
  description: "Ollama HTTP API,兼容 OpenAI /v1/chat/completions 端点"
64
+ - capability: "llm-ollama"
65
+ task: "gateway"
66
+ port: 11434
67
+ protocol: "http"
68
+ description: "Ollama OpenAI-compatible LLM endpoint (Connections 主推命名)"
62
69
 
63
70
  lifecycle:
64
71
  pre_install:
@@ -71,76 +78,74 @@ lifecycle:
71
78
  install:
72
79
  - downloadImage: "ghcr.io/fmaclen/hollama:latest"
73
80
  - run: >-
74
- if ! command -v ollama >/dev/null 2>&1; then
75
- echo "未检测到 ollama,开始安装..." >&2;
76
- if [ "$(id -u)" -ne 0 ]; then
77
- if ! command -v sudo >/dev/null 2>&1; then
78
- echo "未检测到 sudo,当前环境无法自动安装 Ollama。请以 root 身份重试。" >&2;
79
- exit 1;
80
- fi;
81
- if [ -n "${JISHUSHELL_SUDO_ASKPASS:-}" ]; then
82
- sudo_probe_output="$(sudo -A true 2>&1)" || {
83
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
84
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法自动安装 Ollama。请在系统终端手动安装,或调整容器/服务配置后重试。" >&2;
85
- else
86
- echo "提供的 sudo 密码无效,无法安装 Ollama。" >&2;
87
- fi;
88
- exit 1;
89
- };
90
- run_as_root() { sudo -A "$@"; };
91
- else
92
- sudo_probe_output="$(sudo -n true 2>&1)" || {
93
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
94
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法自动安装 Ollama。请在系统终端手动安装,或调整容器/服务配置后重试。" >&2;
95
- else
96
- echo "安装 Ollama 需要 sudo 密码;请在页面弹窗中输入后重试。" >&2;
97
- fi;
98
- exit 1;
99
- };
100
- run_as_root() { sudo -n "$@"; };
101
- fi;
81
+ install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
82
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
83
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
84
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
85
+ rm -f "$install_marker";
86
+ if command -v ollama >/dev/null 2>&1; then
87
+ if [ -f "$owner_marker" ] || [ -f "$legacy_owner_marker" ]; then
88
+ echo "检测到由 JishuShell 安装的 ollama,复用现有二进制。" >&2;
89
+ rm -f "$system_install_marker";
102
90
  else
103
- run_as_root() { "$@"; };
91
+ echo "检测到系统中已安装 ollama,跳过二进制安装。" >&2;
92
+ rm -f "$owner_marker" "$legacy_owner_marker";
93
+ : > "$system_install_marker";
104
94
  fi;
105
- for BINDIR in /usr/local/bin /usr/bin /bin; do
106
- echo "$PATH" | grep -q "$BINDIR" && break || continue;
107
- done;
108
- OLLAMA_INSTALL_DIR="$(dirname "${BINDIR:-/usr/local/bin}")";
109
- if [ -d "$OLLAMA_INSTALL_DIR/lib/ollama" ]; then
110
- old_dir="$OLLAMA_INSTALL_DIR/lib/ollama.jishushell-old-$(date +%s)";
111
- echo "检测到旧版 Ollama 目录,先移动到 $old_dir 以避免长时间卡在清理步骤..." >&2;
112
- run_as_root mv "$OLLAMA_INSTALL_DIR/lib/ollama" "$old_dir";
113
- ( run_as_root rm -rf "$old_dir" >/dev/null 2>&1 || true ) &
114
- fi;
115
- curl -fsSL https://ollama.com/install.sh | run_as_root sh;
116
95
  else
117
- echo "检测到系统中已安装 ollama,跳过二进制安装。" >&2;
96
+ echo "未检测到 ollama,开始安装..." >&2;
97
+ rm -f "$owner_marker" "$legacy_owner_marker" "$system_install_marker";
98
+ : > "$install_marker";
118
99
  fi
100
+ - run: >-
101
+ install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
102
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
103
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
104
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
105
+ for BINDIR in /usr/local/bin /usr/bin /bin; do
106
+ echo "$PATH" | grep -q "$BINDIR" && break || continue;
107
+ done;
108
+ OLLAMA_INSTALL_DIR="$(dirname "${BINDIR:-/usr/local/bin}")";
109
+ if [ -d "$OLLAMA_INSTALL_DIR/lib/ollama" ]; then
110
+ old_dir="$OLLAMA_INSTALL_DIR/lib/ollama.jishushell-old-$(date +%s)";
111
+ echo "检测到旧版 Ollama 目录,先移动到 $old_dir 以避免长时间卡在清理步骤..." >&2;
112
+ mv "$OLLAMA_INSTALL_DIR/lib/ollama" "$old_dir";
113
+ ( rm -rf "$old_dir" >/dev/null 2>&1 || true ) &
114
+ fi;
115
+ curl -fsSL https://ollama.com/install.sh | sh;
116
+ rm -f "$install_marker";
117
+ rm -f "$legacy_owner_marker";
118
+ rm -f "$system_install_marker";
119
+ : > "$owner_marker"
120
+ sudo: true
121
+ ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
119
122
  timeout_ms: 900000
120
123
  successIfCommandExists: "ollama"
121
124
  - run: >-
125
+ install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
126
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
127
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
128
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
129
+ if [ -f "$install_marker" ] && command -v ollama >/dev/null 2>&1; then
130
+ echo "检测到 ollama 已可用,补记为由 JishuShell 安装。" >&2;
131
+ rm -f "$install_marker";
132
+ rm -f "$legacy_owner_marker";
133
+ rm -f "$system_install_marker";
134
+ : > "$owner_marker";
135
+ fi
136
+ ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
137
+ - run: >-
138
+ service_active_marker="$HOME/.jishushell/apps/${app_id}/.ollama-service-active";
139
+ rm -f "$service_active_marker";
122
140
  case "$(uname -s)" in
123
141
  Linux)
124
142
  if command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files ollama.service >/dev/null 2>&1; then
125
- echo "停止并禁用 ollama.service,后续交由 Nomad 管理..." >&2;
126
- if [ "$(id -u)" -eq 0 ]; then
127
- run_as_root() { "$@"; };
128
- elif [ -n "${JISHUSHELL_SUDO_ASKPASS:-}" ]; then
129
- sudo_probe_output="$(sudo -A true 2>&1)" || {
130
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
131
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法清理 ollama.service。请在系统终端手动执行后重试。" >&2;
132
- else
133
- echo "提供的 sudo 密码无效,无法清理 ollama.service。" >&2;
134
- fi;
135
- exit 1;
136
- };
137
- run_as_root() { sudo -A "$@"; };
138
- elif command -v sudo >/dev/null 2>&1; then
139
- run_as_root() { sudo -n "$@"; };
143
+ if systemctl is-active --quiet ollama.service 2>/dev/null; then
144
+ echo "检测到正在运行的 ollama.service,尝试停止并禁用,后续交由 Nomad 管理..." >&2;
145
+ : > "$service_active_marker";
140
146
  else
141
- run_as_root() { "$@"; };
147
+ echo "检测到未运行的 ollama.service,保留当前 systemd 配置不变。" >&2;
142
148
  fi;
143
- run_as_root systemctl disable --now ollama;
144
149
  else
145
150
  echo "Linux 环境未检测到 ollama.service,跳过 systemd 清理。" >&2;
146
151
  fi
@@ -159,37 +164,33 @@ lifecycle:
159
164
  echo "当前平台不支持自动清理 Ollama 自启,跳过。" >&2
160
165
  ;;
161
166
  esac
167
+ - run: >-
168
+ systemctl disable --now ollama;
169
+ rm -f "$HOME/.jishushell/apps/${app_id}/.ollama-service-active"
170
+ sudo: true
171
+ ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-service-active"
162
172
 
163
173
  uninstall:
164
174
  - run: >-
165
- if [ "$(id -u)" -ne 0 ]; then
166
- if ! command -v sudo >/dev/null 2>&1; then
167
- echo "当前环境未检测到 sudo,无法卸载 Ollama。请以 root 身份重试。" >&2;
168
- exit 1;
169
- fi;
170
- if [ -n "${JISHUSHELL_SUDO_ASKPASS:-}" ]; then
171
- sudo_probe_output="$(sudo -A true 2>&1)" || {
172
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
173
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法卸载 Ollama。请在系统终端手动执行,或调整容器/服务配置后重试。" >&2;
174
- else
175
- echo "提供的 sudo 密码无效,无法卸载 Ollama。" >&2;
176
- fi;
177
- exit 1;
178
- };
179
- run_as_root() { sudo -A "$@"; };
180
- else
181
- sudo_probe_output="$(sudo -n true 2>&1)" || {
182
- if printf '%s\n' "$sudo_probe_output" | grep -qi "no new privileges"; then
183
- echo "当前运行环境禁止 sudo 提权(no new privileges),无法卸载 Ollama。请在系统终端手动执行,或调整容器/服务配置后重试。" >&2;
184
- else
185
- echo "卸载 Ollama 需要 sudo 密码;请在页面弹窗中输入后重试。" >&2;
186
- fi;
187
- exit 1;
188
- };
189
- run_as_root() { sudo -n "$@"; };
190
- fi;
191
- else
192
- run_as_root() { "$@"; };
193
- fi;
194
- run_as_root rm -f /usr/local/bin/ollama /usr/bin/ollama /bin/ollama;
195
- run_as_root rm -rf /usr/local/lib/ollama /usr/lib/ollama /usr/share/ollama 2>/dev/null || true
175
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
176
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
177
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
178
+ uninstall_marker="$HOME/.jishushell/.ollama-uninstall-needed-${app_id}";
179
+ rm -f "$uninstall_marker";
180
+ if [ -f "$system_install_marker" ]; then
181
+ echo "检测到复用的是系统已有 ollama,卸载时保留系统安装。" >&2;
182
+ rm -f "$system_install_marker";
183
+ elif [ -f "$owner_marker" ] || [ -f "$legacy_owner_marker" ]; then
184
+ : > "$uninstall_marker";
185
+ fi
186
+ - run: >-
187
+ owner_marker="$HOME/.jishushell/.ollama-installed-by-jishushell-${app_id}";
188
+ legacy_owner_marker="$HOME/.jishushell/apps/${app_id}/.ollama-installed-by-jishushell";
189
+ system_install_marker="$HOME/.jishushell/.ollama-system-install-${app_id}";
190
+ uninstall_marker="$HOME/.jishushell/.ollama-uninstall-needed-${app_id}";
191
+ rm -f /usr/local/bin/ollama /usr/bin/ollama /bin/ollama;
192
+ rm -rf /usr/local/lib/ollama /usr/lib/ollama /usr/share/ollama 2>/dev/null || true;
193
+ rm -rf /Applications/Ollama.app "$HOME/Applications/Ollama.app" 2>/dev/null || true;
194
+ rm -f "$owner_marker" "$legacy_owner_marker" "$system_install_marker" "$uninstall_marker"
195
+ sudo: true
196
+ ifFileExists: "~/.jishushell/.ollama-uninstall-needed-${app_id}"
@@ -2,7 +2,7 @@ id: openclaw-binary
2
2
  name: OpenClaw Binary
3
3
  version: "1.0.0"
4
4
  jishushell:
5
- min_version: "0.4.24"
5
+ min_version: "0.4.30"
6
6
  agentType: openclaw
7
7
  description: "将 OpenClaw 安装到应用目录内的 npm prefix,并以 process runtime 运行网关"
8
8
  singleInstance: false
@@ -33,8 +33,45 @@ tasks:
33
33
 
34
34
  provides:
35
35
  - capability: "openclaw-dashboard"
36
+ task: "gateway"
36
37
  port: 18789
38
+ protocol: "http"
37
39
  description: "OpenClaw Dashboard"
40
+ - capability: "llm-agent"
41
+ task: "gateway"
42
+ port: 18789
43
+ protocol: "http"
44
+ path: "/v1"
45
+ description: "OpenAI-compatible agent endpoint backed by OpenClaw"
46
+ auth:
47
+ kind: "bearer"
48
+ tokenSource: "instance.config.gateway.auth.token"
49
+
50
+ requires:
51
+ - capability: "llm"
52
+ inject_as: "LLM_ENDPOINT"
53
+ required: false
54
+ cardinality: "one"
55
+ - capability: "search"
56
+ inject_as: "SEARCH_API_BASE_URL"
57
+ required: false
58
+ cardinality: "one"
59
+ - capability: "browser"
60
+ inject_as: "BROWSER_CDP_URL"
61
+ required: false
62
+ cardinality: "one"
63
+ - capability: "mcp"
64
+ inject_as: "MCP_SERVERS"
65
+ required: false
66
+ cardinality: "many"
67
+ - capability: "files"
68
+ inject_as: "FILES_BROWSER_URL"
69
+ required: false
70
+ cardinality: "one"
71
+ - capability: "knowledge"
72
+ inject_as: "KNOWLEDGE_BASE_URL"
73
+ required: false
74
+ cardinality: "one"
38
75
 
39
76
  lifecycle:
40
77
  install:
@@ -2,7 +2,7 @@ id: openclaw-container
2
2
  name: OpenClaw Container
3
3
  version: "1.0.0"
4
4
  jishushell:
5
- min_version: "0.4.24"
5
+ min_version: "0.4.30"
6
6
  agentType: openclaw
7
7
  description: "基于 openclaw-runtime 容器运行的 OpenClaw 网关"
8
8
  singleInstance: false
@@ -33,5 +33,48 @@ tasks:
33
33
 
34
34
  provides:
35
35
  - capability: "openclaw-dashboard"
36
+ task: "gateway"
36
37
  port: 18789
37
- description: "OpenClaw Dashboard"
38
+ protocol: "http"
39
+ description: "OpenClaw Dashboard"
40
+ # OpenClaw exposes OpenAI-compatible chat/completions when its config has
41
+ # `gateway.http.endpoints.chatCompletions.enabled = true`. The runtime
42
+ # adapter's startInstance hook patches openclaw.json on every start to
43
+ # ensure that flag is on, so any consumer binding this provider gets a
44
+ # working /v1/chat/completions endpoint regardless of when the instance
45
+ # was originally created. Auth uses the gateway token from openclaw.json.
46
+ - capability: "llm-agent"
47
+ task: "gateway"
48
+ port: 18789
49
+ protocol: "http"
50
+ path: "/v1"
51
+ description: "OpenAI-compatible agent endpoint backed by OpenClaw"
52
+ auth:
53
+ kind: "bearer"
54
+ tokenSource: "instance.config.gateway.auth.token"
55
+
56
+ requires:
57
+ - capability: "llm"
58
+ inject_as: "LLM_ENDPOINT"
59
+ required: false
60
+ cardinality: "one"
61
+ - capability: "search"
62
+ inject_as: "SEARCH_API_BASE_URL"
63
+ required: false
64
+ cardinality: "one"
65
+ - capability: "browser"
66
+ inject_as: "BROWSER_CDP_URL"
67
+ required: false
68
+ cardinality: "one"
69
+ - capability: "mcp"
70
+ inject_as: "MCP_SERVERS"
71
+ required: false
72
+ cardinality: "many"
73
+ - capability: "files"
74
+ inject_as: "FILES_BROWSER_URL"
75
+ required: false
76
+ cardinality: "one"
77
+ - capability: "knowledge"
78
+ inject_as: "KNOWLEDGE_BASE_URL"
79
+ required: false
80
+ cardinality: "one"
@@ -2,7 +2,7 @@ id: openclaw-with-ollama-container
2
2
  name: OpenClaw With Ollama
3
3
  version: "1.0.0"
4
4
  jishushell:
5
- min_version: "0.4.24"
5
+ min_version: "0.4.30"
6
6
  agentType: openclaw
7
7
  description: "通过 requires 消费 ollama-api 能力,并将解析地址注入 OpenClaw 运行环境"
8
8
  singleInstance: false
@@ -39,4 +39,13 @@ tasks:
39
39
  provides:
40
40
  - capability: "openclaw-dashboard"
41
41
  port: 18789
42
- description: "OpenClaw Dashboard"
42
+ description: "OpenClaw Dashboard"
43
+ - capability: "llm-agent"
44
+ task: "gateway"
45
+ port: 18789
46
+ protocol: "http"
47
+ path: "/v1"
48
+ description: "OpenAI-compatible agent endpoint backed by OpenClaw"
49
+ auth:
50
+ kind: "bearer"
51
+ tokenSource: "instance.config.gateway.auth.token"