jishushell 0.4.24-beta.2 → 0.4.30
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/INSTALL-NOTICE +11 -0
- package/apps/browserless-chromium-container.yaml +78 -0
- package/apps/hermes-container.yaml +36 -2
- package/apps/ollama-binary.yaml +45 -8
- package/apps/ollama-cpu-container.yaml +8 -1
- package/apps/ollama-with-hollama-binary.yaml +45 -8
- package/apps/openclaw-binary.yaml +30 -1
- package/apps/openclaw-container.yaml +37 -2
- package/apps/openclaw-with-ollama-container.yaml +11 -2
- package/apps/openclaw-with-searxng-container.yaml +22 -2
- package/apps/openwebui-container.yaml +45 -1
- package/apps/playwright-container.yaml +7 -1
- package/apps/searxng-container.yaml +54 -4
- package/dist/cli/app.js +12 -2
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/doctor.d.ts +12 -12
- package/dist/cli/doctor.js +242 -55
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/llm.d.ts +4 -3
- package/dist/cli/llm.js +4 -3
- package/dist/cli/llm.js.map +1 -1
- package/dist/cli/panel.d.ts +6 -5
- package/dist/cli/panel.js +10 -9
- package/dist/cli/panel.js.map +1 -1
- package/dist/control.d.ts +7 -6
- package/dist/control.js +7 -6
- package/dist/control.js.map +1 -1
- package/dist/routes/agent-apps.d.ts +1 -1
- package/dist/routes/agent-apps.js +1 -1
- package/dist/routes/apps.js +44 -11
- package/dist/routes/apps.js.map +1 -1
- package/dist/routes/auth.js +3 -0
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/instances.js +787 -16
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/llm.js +24 -35
- package/dist/routes/llm.js.map +1 -1
- package/dist/routes/setup.js +1 -1
- package/dist/routes/setup.js.map +1 -1
- package/dist/server.d.ts +9 -0
- package/dist/server.js +410 -17
- package/dist/server.js.map +1 -1
- package/dist/services/agent-apps/catalog.js +4 -3
- package/dist/services/agent-apps/catalog.js.map +1 -1
- package/dist/services/agent-apps/index.d.ts +1 -1
- package/dist/services/agent-apps/index.js +1 -1
- package/dist/services/agent-apps/installers/adapter.d.ts +1 -1
- package/dist/services/agent-apps/installers/adapter.js +1 -1
- package/dist/services/agent-apps/installers/shell-script.d.ts +1 -1
- package/dist/services/agent-apps/installers/shell-script.js +3 -3
- package/dist/services/agent-apps/installers/shell-script.js.map +1 -1
- package/dist/services/agent-apps/types.d.ts +2 -2
- package/dist/services/agent-apps/types.js +1 -1
- package/dist/services/app/app-manager.d.ts +24 -1
- package/dist/services/app/app-manager.js +490 -102
- package/dist/services/app/app-manager.js.map +1 -1
- package/dist/services/app/hermes-agent-manager.js +6 -4
- package/dist/services/app/hermes-agent-manager.js.map +1 -1
- package/dist/services/app/provide-resolver.d.ts +29 -0
- package/dist/services/app/provide-resolver.js +112 -0
- package/dist/services/app/provide-resolver.js.map +1 -0
- package/dist/services/capability-endpoint-validator.d.ts +41 -0
- package/dist/services/capability-endpoint-validator.js +104 -0
- package/dist/services/capability-endpoint-validator.js.map +1 -0
- package/dist/services/capability-health.d.ts +16 -0
- package/dist/services/capability-health.js +121 -0
- package/dist/services/capability-health.js.map +1 -0
- package/dist/services/capability-registry.d.ts +106 -0
- package/dist/services/capability-registry.js +313 -0
- package/dist/services/capability-registry.js.map +1 -0
- package/dist/services/connection-apply.d.ts +89 -0
- package/dist/services/connection-apply.js +421 -0
- package/dist/services/connection-apply.js.map +1 -0
- package/dist/services/connection-resolver.d.ts +65 -0
- package/dist/services/connection-resolver.js +281 -0
- package/dist/services/connection-resolver.js.map +1 -0
- package/dist/services/connection-transactor.d.ts +37 -0
- package/dist/services/connection-transactor.js +341 -0
- package/dist/services/connection-transactor.js.map +1 -0
- package/dist/services/instance-manager.d.ts +13 -0
- package/dist/services/instance-manager.js +137 -23
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/llm-proxy/index.d.ts +16 -2
- package/dist/services/llm-proxy/index.js +48 -44
- package/dist/services/llm-proxy/index.js.map +1 -1
- package/dist/services/llm-proxy/probe.d.ts +6 -0
- package/dist/services/llm-proxy/probe.js +85 -0
- package/dist/services/llm-proxy/probe.js.map +1 -0
- package/dist/services/llm-proxy/ssrf.d.ts +1 -0
- package/dist/services/llm-proxy/ssrf.js +18 -7
- package/dist/services/llm-proxy/ssrf.js.map +1 -1
- package/dist/services/nomad-manager.js +375 -16
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/process-manager.js +1 -1
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/runtime/adapters/hermes.d.ts +30 -1
- package/dist/services/runtime/adapters/hermes.js +218 -5
- package/dist/services/runtime/adapters/hermes.js.map +1 -1
- package/dist/services/runtime/adapters/openclaw-mcporter.d.ts +45 -0
- package/dist/services/runtime/adapters/openclaw-mcporter.js +108 -0
- package/dist/services/runtime/adapters/openclaw-mcporter.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw.d.ts +87 -0
- package/dist/services/runtime/adapters/openclaw.js +250 -2
- package/dist/services/runtime/adapters/openclaw.js.map +1 -1
- package/dist/services/runtime/mcp-shims/firewall.d.ts +26 -0
- package/dist/services/runtime/mcp-shims/firewall.js +129 -0
- package/dist/services/runtime/mcp-shims/firewall.js.map +1 -0
- package/dist/services/runtime/mcp-shims/searxng-shim.d.ts +27 -0
- package/dist/services/runtime/mcp-shims/searxng-shim.js +125 -0
- package/dist/services/runtime/mcp-shims/searxng-shim.js.map +1 -0
- package/dist/services/runtime/mcp-shims/write-mcp-entry.d.ts +83 -0
- package/dist/services/runtime/mcp-shims/write-mcp-entry.js +127 -0
- package/dist/services/runtime/mcp-shims/write-mcp-entry.js.map +1 -0
- package/dist/services/runtime/migrations.d.ts +8 -0
- package/dist/services/runtime/migrations.js +100 -0
- package/dist/services/runtime/migrations.js.map +1 -1
- package/dist/services/runtime/types.d.ts +15 -0
- package/dist/services/setup-manager.js +6 -6
- package/dist/services/setup-manager.js.map +1 -1
- package/dist/services/suggestions.d.ts +27 -0
- package/dist/services/suggestions.js +133 -0
- package/dist/services/suggestions.js.map +1 -0
- package/dist/services/task-registry.js +4 -2
- package/dist/services/task-registry.js.map +1 -1
- package/dist/services/telemetry/device-fingerprint.d.ts +1 -1
- package/dist/services/telemetry/device-fingerprint.js +1 -1
- package/dist/services/types-shim.d.ts +16 -0
- package/dist/services/types-shim.js +2 -0
- package/dist/services/types-shim.js.map +1 -0
- package/dist/types.d.ts +169 -1
- package/dist/utils/instance-lock.d.ts +22 -0
- package/dist/utils/instance-lock.js +48 -0
- package/dist/utils/instance-lock.js.map +1 -0
- package/dist/utils/safe-json.js +55 -22
- package/dist/utils/safe-json.js.map +1 -1
- package/install/jishu-install.sh +323 -26
- package/install/jishu-uninstall.sh +353 -20
- package/package.json +3 -1
- package/public/assets/Dashboard-rkWp-CXd.js +1 -0
- package/public/assets/{HermesChatPanel-D6JI6lLY.js → HermesChatPanel-_GHoklgo.js} +1 -1
- package/public/assets/HermesConfigForm-anDnwUp_.js +4 -0
- package/public/assets/{InitPassword-CFTKsED4.js → InitPassword-ZU9_-hDr.js} +1 -1
- package/public/assets/InstanceDetail-CN0FH1aw.js +92 -0
- package/public/assets/{Login-KB9qrtM0.js → Login-BItXqYAJ.js} +1 -1
- package/public/assets/NewInstance-BousE6kY.js +1 -0
- package/public/assets/ProviderRecommendations-DFYj7Fb6.js +1 -0
- package/public/assets/Settings-Bttc6QmM.js +1 -0
- package/public/assets/Setup-Bsxx1zgj.js +1 -0
- package/public/assets/{WeixinLoginPanel-gca0QTic.js → WeixinLoginPanel-DPZpAKgO.js} +2 -2
- package/public/assets/index-8xZy1z5k.css +1 -0
- package/public/assets/index-Dw3HhUYE.js +19 -0
- package/public/assets/providers-DtNXh9JD.js +1 -0
- package/public/assets/registry-5s2UB6is.js +2 -0
- package/public/index.html +2 -2
- package/scripts/check-app-spec.mjs +443 -0
- package/scripts/check-i18n.mjs +154 -0
- package/scripts/run.sh +4 -4
- package/public/assets/Dashboard-rh9qpYRR.js +0 -1
- package/public/assets/HermesConfigForm-DcbSemaj.js +0 -4
- package/public/assets/InstanceDetail-BhNIKA6Z.js +0 -91
- package/public/assets/NewInstance-CxkO8Hlq.js +0 -1
- package/public/assets/Settings-BVWJvOkU.js +0 -1
- package/public/assets/Setup-X-lzuaUT.js +0 -1
- package/public/assets/index-C8B0cFJM.js +0 -19
- package/public/assets/index-CPhVFEsx.css +0 -1
- package/public/assets/providers-V-vwrExZ.js +0 -1
- package/public/assets/registry-fVUSujib.js +0 -2
package/INSTALL-NOTICE
CHANGED
|
@@ -20,6 +20,17 @@ software bundled with or installed by this product.
|
|
|
20
20
|
with its respective license terms, including any restrictions on
|
|
21
21
|
commercial use, competitive offerings, or redistribution.
|
|
22
22
|
|
|
23
|
+
Xcode Command Line Tools (build tools for macOS)
|
|
24
|
+
URL : https://www.apple.com/legal/sla/docs/xcode.pdf
|
|
25
|
+
License : Apple Xcode and Apple SDKs Agreement
|
|
26
|
+
Author : Apple Inc.
|
|
27
|
+
|
|
28
|
+
Homebrew (package manager for macOS)
|
|
29
|
+
URL : https://github.com/Homebrew/brew
|
|
30
|
+
License : BSD 2-Clause License
|
|
31
|
+
https://github.com/Homebrew/brew/blob/HEAD/LICENSE.txt
|
|
32
|
+
Author : Homebrew contributors
|
|
33
|
+
|
|
23
34
|
Docker Engine
|
|
24
35
|
URL : https://github.com/moby/moby
|
|
25
36
|
License : Apache License, Version 2.0
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
id: browserless-chromium-container
|
|
2
|
+
name: Browserless Chromium
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
jishushell:
|
|
5
|
+
min_version: "0.4.30"
|
|
6
|
+
description: "运行 browserless/chromium 服务,提供可嵌入实例页的浏览器调试画面与自动化连接端点"
|
|
7
|
+
singleInstance: true
|
|
8
|
+
|
|
9
|
+
tasks:
|
|
10
|
+
- name: browserless
|
|
11
|
+
role: service
|
|
12
|
+
runtime: container
|
|
13
|
+
image: "ghcr.io/browserless/chromium:latest"
|
|
14
|
+
env:
|
|
15
|
+
HOST: "0.0.0.0"
|
|
16
|
+
PORT: "3000"
|
|
17
|
+
TOKEN: ""
|
|
18
|
+
CONCURRENT: "5"
|
|
19
|
+
QUEUED: "10"
|
|
20
|
+
TIMEOUT: "120000"
|
|
21
|
+
# 防反爬虫配置
|
|
22
|
+
DEFAULT_USER_AGENT: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
|
|
23
|
+
FUNCTION_ENABLE_INCOGNITO: "true"
|
|
24
|
+
NAVIGATION_TIMEOUT: "30000"
|
|
25
|
+
# 减少自动化检测特征
|
|
26
|
+
DEFAULT_LAUNCH_ARGS: "--disable-blink-features=AutomationControlled --disable-infobars --window-size=1920,1080 --start-maximized"
|
|
27
|
+
DEFAULT_HEADLESS: "new"
|
|
28
|
+
# 持久化用户数据(cookies/localStorage/session),登录后会话保持
|
|
29
|
+
DATA_DIR: "/tmp/browserless-data"
|
|
30
|
+
volumes:
|
|
31
|
+
- source: "~/.jishushell/apps/${app_id}/data"
|
|
32
|
+
target: "/tmp/browserless-data"
|
|
33
|
+
resources:
|
|
34
|
+
cpu: "1000m"
|
|
35
|
+
memory: "2048Mi"
|
|
36
|
+
ports:
|
|
37
|
+
- name: http
|
|
38
|
+
port: 3000
|
|
39
|
+
visibility: external
|
|
40
|
+
health:
|
|
41
|
+
http:
|
|
42
|
+
path: /docs
|
|
43
|
+
port: 3000
|
|
44
|
+
interval: "15s"
|
|
45
|
+
timeout: "5s"
|
|
46
|
+
retries: 6
|
|
47
|
+
start_period: "35s"
|
|
48
|
+
|
|
49
|
+
provides:
|
|
50
|
+
- capability: "browserless-debugger"
|
|
51
|
+
port: 3000
|
|
52
|
+
path: "/debugger/"
|
|
53
|
+
protocol: "http"
|
|
54
|
+
description: "Browserless Debug Viewer,可在实例页中嵌入浏览器画面"
|
|
55
|
+
- capability: "browserless-api"
|
|
56
|
+
port: 3000
|
|
57
|
+
path: "/"
|
|
58
|
+
protocol: "http"
|
|
59
|
+
description: "Browserless 根 API(供调试器页面连接 ws 与 sessions 接口)"
|
|
60
|
+
- capability: "browserless-docs"
|
|
61
|
+
port: 3000
|
|
62
|
+
path: "/docs/"
|
|
63
|
+
protocol: "http"
|
|
64
|
+
description: "Browserless API 文档页"
|
|
65
|
+
- capability: "browser-ws"
|
|
66
|
+
task: "browserless"
|
|
67
|
+
port: 3000
|
|
68
|
+
protocol: "ws"
|
|
69
|
+
description: "Browserless CDP/WebSocket 连接端点(ws://host:3000),用于 browser 类 require 自动绑定(命名遵循 <category>-<vendor> 约定)"
|
|
70
|
+
|
|
71
|
+
lifecycle:
|
|
72
|
+
install:
|
|
73
|
+
- downloadImage: "ghcr.io/browserless/chromium:latest"
|
|
74
|
+
- mkdir: "~/.jishushell/apps/${app_id}/data"
|
|
75
|
+
pre_start:
|
|
76
|
+
- mkdir: "~/.jishushell/apps/${app_id}/data"
|
|
77
|
+
uninstall:
|
|
78
|
+
- deleteImage: "ghcr.io/browserless/chromium:latest"
|
|
@@ -2,7 +2,7 @@ id: hermes-container
|
|
|
2
2
|
name: Hermes Agent
|
|
3
3
|
version: "1.0.0"
|
|
4
4
|
jishushell:
|
|
5
|
-
min_version: "0.4.
|
|
5
|
+
min_version: "0.4.30"
|
|
6
6
|
agentType: hermes
|
|
7
7
|
description: "Hermes Agent 容器运行时,使用 apps 目录作为统一安装根"
|
|
8
8
|
singleInstance: false
|
|
@@ -32,4 +32,38 @@ tasks:
|
|
|
32
32
|
interval: "15s"
|
|
33
33
|
timeout: "5s"
|
|
34
34
|
retries: 3
|
|
35
|
-
start_period: "30s"
|
|
35
|
+
start_period: "30s"
|
|
36
|
+
|
|
37
|
+
provides:
|
|
38
|
+
- capability: "web-hermes"
|
|
39
|
+
task: "gateway"
|
|
40
|
+
port: 8642
|
|
41
|
+
protocol: "http"
|
|
42
|
+
description: "Hermes Agent Web UI"
|
|
43
|
+
- capability: "llm-agent"
|
|
44
|
+
task: "gateway"
|
|
45
|
+
port: 8642
|
|
46
|
+
protocol: "http"
|
|
47
|
+
path: "/v1"
|
|
48
|
+
auth:
|
|
49
|
+
kind: "bearer"
|
|
50
|
+
tokenSource: "instance.env.API_SERVER_KEY"
|
|
51
|
+
description: "OpenAI-compatible chat endpoint (verified on Pi: GET /v1/models returns hermes-agent model)"
|
|
52
|
+
|
|
53
|
+
requires:
|
|
54
|
+
- capability: "llm"
|
|
55
|
+
inject_as: "LLM_ENDPOINT"
|
|
56
|
+
required: false
|
|
57
|
+
cardinality: "one"
|
|
58
|
+
- capability: "search"
|
|
59
|
+
inject_as: "SEARCH_API_BASE_URL"
|
|
60
|
+
required: false
|
|
61
|
+
cardinality: "one"
|
|
62
|
+
- capability: "browser"
|
|
63
|
+
inject_as: "BROWSER_CDP_URL"
|
|
64
|
+
required: false
|
|
65
|
+
cardinality: "one"
|
|
66
|
+
- capability: "mcp"
|
|
67
|
+
inject_as: "MCP_SERVERS"
|
|
68
|
+
required: false
|
|
69
|
+
cardinality: "many"
|
package/apps/ollama-binary.yaml
CHANGED
|
@@ -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.
|
|
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:
|
|
@@ -76,22 +83,29 @@ lifecycle:
|
|
|
76
83
|
install:
|
|
77
84
|
- run: >-
|
|
78
85
|
install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
|
|
79
|
-
owner_marker="$HOME/.jishushell
|
|
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}";
|
|
80
89
|
rm -f "$install_marker";
|
|
81
90
|
if command -v ollama >/dev/null 2>&1; then
|
|
82
|
-
if [ -f "$owner_marker" ]; then
|
|
91
|
+
if [ -f "$owner_marker" ] || [ -f "$legacy_owner_marker" ]; then
|
|
83
92
|
echo "检测到由 JishuShell 安装的 ollama,复用现有二进制。" >&2;
|
|
93
|
+
rm -f "$system_install_marker";
|
|
84
94
|
else
|
|
85
95
|
echo "检测到系统中已安装 ollama,跳过二进制安装。" >&2;
|
|
96
|
+
rm -f "$owner_marker" "$legacy_owner_marker";
|
|
97
|
+
: > "$system_install_marker";
|
|
86
98
|
fi;
|
|
87
99
|
else
|
|
88
100
|
echo "未检测到 ollama,开始安装..." >&2;
|
|
89
|
-
rm -f "$owner_marker";
|
|
101
|
+
rm -f "$owner_marker" "$legacy_owner_marker" "$system_install_marker";
|
|
90
102
|
: > "$install_marker";
|
|
91
103
|
fi
|
|
92
104
|
- run: >-
|
|
93
105
|
install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
|
|
94
|
-
owner_marker="$HOME/.jishushell
|
|
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}";
|
|
95
109
|
for BINDIR in /usr/local/bin /usr/bin /bin; do
|
|
96
110
|
echo "$PATH" | grep -q "$BINDIR" && break || continue;
|
|
97
111
|
done;
|
|
@@ -104,6 +118,8 @@ lifecycle:
|
|
|
104
118
|
fi;
|
|
105
119
|
curl -fsSL https://ollama.com/install.sh | sh;
|
|
106
120
|
rm -f "$install_marker";
|
|
121
|
+
rm -f "$legacy_owner_marker";
|
|
122
|
+
rm -f "$system_install_marker";
|
|
107
123
|
: > "$owner_marker"
|
|
108
124
|
sudo: true
|
|
109
125
|
ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
|
|
@@ -111,10 +127,14 @@ lifecycle:
|
|
|
111
127
|
successIfCommandExists: "ollama"
|
|
112
128
|
- run: >-
|
|
113
129
|
install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
|
|
114
|
-
owner_marker="$HOME/.jishushell
|
|
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}";
|
|
115
133
|
if [ -f "$install_marker" ] && command -v ollama >/dev/null 2>&1; then
|
|
116
134
|
echo "检测到 ollama 已可用,补记为由 JishuShell 安装。" >&2;
|
|
117
135
|
rm -f "$install_marker";
|
|
136
|
+
rm -f "$legacy_owner_marker";
|
|
137
|
+
rm -f "$system_install_marker";
|
|
118
138
|
: > "$owner_marker";
|
|
119
139
|
fi
|
|
120
140
|
ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
|
|
@@ -156,9 +176,26 @@ lifecycle:
|
|
|
156
176
|
|
|
157
177
|
uninstall:
|
|
158
178
|
- run: >-
|
|
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}";
|
|
159
195
|
rm -f /usr/local/bin/ollama /usr/bin/ollama /bin/ollama;
|
|
160
196
|
rm -rf /usr/local/lib/ollama /usr/lib/ollama /usr/share/ollama 2>/dev/null || true;
|
|
161
|
-
rm -
|
|
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"
|
|
162
199
|
sudo: true
|
|
163
|
-
ifFileExists: "~/.jishushell
|
|
200
|
+
ifFileExists: "~/.jishushell/.ollama-uninstall-needed-${app_id}"
|
|
164
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.
|
|
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.
|
|
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:
|
|
@@ -72,22 +79,29 @@ lifecycle:
|
|
|
72
79
|
- downloadImage: "ghcr.io/fmaclen/hollama:latest"
|
|
73
80
|
- run: >-
|
|
74
81
|
install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
|
|
75
|
-
owner_marker="$HOME/.jishushell
|
|
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}";
|
|
76
85
|
rm -f "$install_marker";
|
|
77
86
|
if command -v ollama >/dev/null 2>&1; then
|
|
78
|
-
if [ -f "$owner_marker" ]; then
|
|
87
|
+
if [ -f "$owner_marker" ] || [ -f "$legacy_owner_marker" ]; then
|
|
79
88
|
echo "检测到由 JishuShell 安装的 ollama,复用现有二进制。" >&2;
|
|
89
|
+
rm -f "$system_install_marker";
|
|
80
90
|
else
|
|
81
91
|
echo "检测到系统中已安装 ollama,跳过二进制安装。" >&2;
|
|
92
|
+
rm -f "$owner_marker" "$legacy_owner_marker";
|
|
93
|
+
: > "$system_install_marker";
|
|
82
94
|
fi;
|
|
83
95
|
else
|
|
84
96
|
echo "未检测到 ollama,开始安装..." >&2;
|
|
85
|
-
rm -f "$owner_marker";
|
|
97
|
+
rm -f "$owner_marker" "$legacy_owner_marker" "$system_install_marker";
|
|
86
98
|
: > "$install_marker";
|
|
87
99
|
fi
|
|
88
100
|
- run: >-
|
|
89
101
|
install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
|
|
90
|
-
owner_marker="$HOME/.jishushell
|
|
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}";
|
|
91
105
|
for BINDIR in /usr/local/bin /usr/bin /bin; do
|
|
92
106
|
echo "$PATH" | grep -q "$BINDIR" && break || continue;
|
|
93
107
|
done;
|
|
@@ -100,6 +114,8 @@ lifecycle:
|
|
|
100
114
|
fi;
|
|
101
115
|
curl -fsSL https://ollama.com/install.sh | sh;
|
|
102
116
|
rm -f "$install_marker";
|
|
117
|
+
rm -f "$legacy_owner_marker";
|
|
118
|
+
rm -f "$system_install_marker";
|
|
103
119
|
: > "$owner_marker"
|
|
104
120
|
sudo: true
|
|
105
121
|
ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
|
|
@@ -107,10 +123,14 @@ lifecycle:
|
|
|
107
123
|
successIfCommandExists: "ollama"
|
|
108
124
|
- run: >-
|
|
109
125
|
install_marker="$HOME/.jishushell/apps/${app_id}/.ollama-install-needed";
|
|
110
|
-
owner_marker="$HOME/.jishushell
|
|
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}";
|
|
111
129
|
if [ -f "$install_marker" ] && command -v ollama >/dev/null 2>&1; then
|
|
112
130
|
echo "检测到 ollama 已可用,补记为由 JishuShell 安装。" >&2;
|
|
113
131
|
rm -f "$install_marker";
|
|
132
|
+
rm -f "$legacy_owner_marker";
|
|
133
|
+
rm -f "$system_install_marker";
|
|
114
134
|
: > "$owner_marker";
|
|
115
135
|
fi
|
|
116
136
|
ifFileExists: "~/.jishushell/apps/${app_id}/.ollama-install-needed"
|
|
@@ -152,8 +172,25 @@ lifecycle:
|
|
|
152
172
|
|
|
153
173
|
uninstall:
|
|
154
174
|
- run: >-
|
|
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}";
|
|
155
191
|
rm -f /usr/local/bin/ollama /usr/bin/ollama /bin/ollama;
|
|
156
192
|
rm -rf /usr/local/lib/ollama /usr/lib/ollama /usr/share/ollama 2>/dev/null || true;
|
|
157
|
-
rm -
|
|
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"
|
|
158
195
|
sudo: true
|
|
159
|
-
ifFileExists: "~/.jishushell
|
|
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.
|
|
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,37 @@ 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"
|
|
38
67
|
|
|
39
68
|
lifecycle:
|
|
40
69
|
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.
|
|
5
|
+
min_version: "0.4.30"
|
|
6
6
|
agentType: openclaw
|
|
7
7
|
description: "基于 openclaw-runtime 容器运行的 OpenClaw 网关"
|
|
8
8
|
singleInstance: false
|
|
@@ -33,5 +33,40 @@ tasks:
|
|
|
33
33
|
|
|
34
34
|
provides:
|
|
35
35
|
- capability: "openclaw-dashboard"
|
|
36
|
+
task: "gateway"
|
|
36
37
|
port: 18789
|
|
37
|
-
|
|
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"
|
|
@@ -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.
|
|
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"
|
|
@@ -2,7 +2,7 @@ id: openclaw-with-searxng-container
|
|
|
2
2
|
name: OpenClaw With SearXNG Container
|
|
3
3
|
version: "1.0.0"
|
|
4
4
|
jishushell:
|
|
5
|
-
min_version: "0.4.
|
|
5
|
+
min_version: "0.4.30"
|
|
6
6
|
agentType: openclaw
|
|
7
7
|
description: "将 SearXNG 作为 sidecar 子 task 安装并运行,并注入 OpenClaw 搜索环境"
|
|
8
8
|
singleInstance: false
|
|
@@ -46,7 +46,11 @@ tasks:
|
|
|
46
46
|
args: ["gateway", "run", "--port", "18789", "--allow-unconfigured"]
|
|
47
47
|
env:
|
|
48
48
|
NODE_ENV: production
|
|
49
|
-
SEARCH_API_BASE_URL
|
|
49
|
+
# SEARCH_API_BASE_URL injected by Connection apply hook (search category, §13).
|
|
50
|
+
# Single-candidate fallback (`requires: search-searxng`) auto-binds the
|
|
51
|
+
# sidecar SearXNG below on first start, so meta-app UX stays "open the
|
|
52
|
+
# box and it works".
|
|
53
|
+
SEARCH_API_BASE_URL: "${requires.SEARCH_API_BASE_URL}"
|
|
50
54
|
resources:
|
|
51
55
|
cpu: "1000m"
|
|
52
56
|
memory: "1024Mi"
|
|
@@ -65,8 +69,24 @@ tasks:
|
|
|
65
69
|
|
|
66
70
|
provides:
|
|
67
71
|
- capability: "openclaw-dashboard"
|
|
72
|
+
task: "gateway"
|
|
68
73
|
port: 18789
|
|
74
|
+
protocol: "http"
|
|
69
75
|
description: "OpenClaw Dashboard"
|
|
76
|
+
- capability: "llm-agent"
|
|
77
|
+
task: "gateway"
|
|
78
|
+
port: 18789
|
|
79
|
+
protocol: "http"
|
|
80
|
+
path: "/v1"
|
|
81
|
+
description: "OpenAI-compatible agent endpoint backed by OpenClaw"
|
|
82
|
+
auth:
|
|
83
|
+
kind: "bearer"
|
|
84
|
+
tokenSource: "instance.config.gateway.auth.token"
|
|
85
|
+
|
|
86
|
+
requires:
|
|
87
|
+
- capability: "search-searxng"
|
|
88
|
+
inject_as: "SEARCH_API_BASE_URL"
|
|
89
|
+
required: false
|
|
70
90
|
|
|
71
91
|
lifecycle:
|
|
72
92
|
install:
|
|
@@ -2,7 +2,7 @@ id: openwebui-container
|
|
|
2
2
|
name: Open WebUI
|
|
3
3
|
version: "1.0.0"
|
|
4
4
|
jishushell:
|
|
5
|
-
min_version: "0.4.
|
|
5
|
+
min_version: "0.4.30"
|
|
6
6
|
description: "使用 Open WebUI 提供自托管的大模型 Web 界面,容器模式由 Nomad 管理生命周期"
|
|
7
7
|
singleInstance: false
|
|
8
8
|
|
|
@@ -11,6 +11,11 @@ tasks:
|
|
|
11
11
|
role: service
|
|
12
12
|
runtime: container
|
|
13
13
|
image: "ghcr.io/open-webui/open-webui:main"
|
|
14
|
+
# Run as the panel user's uid:gid (typically pi=1000:1000). Bind-mount
|
|
15
|
+
# source `~/.jishushell/apps/${app_id}/data` is owned by the panel user,
|
|
16
|
+
# so the container can read/write it directly — no chown, no
|
|
17
|
+
# CAP_DAC_OVERRIDE, no DB readonly errors. Mirrors hermes / openclaw.
|
|
18
|
+
user: "host"
|
|
14
19
|
env:
|
|
15
20
|
HOME: "/app/backend/data"
|
|
16
21
|
PORT: "8080"
|
|
@@ -19,6 +24,32 @@ tasks:
|
|
|
19
24
|
HF_HOME: "/app/backend/data/.cache/huggingface"
|
|
20
25
|
TRANSFORMERS_CACHE: "/app/backend/data/.cache/huggingface/transformers"
|
|
21
26
|
SENTENCE_TRANSFORMERS_HOME: "/app/backend/data/.cache/sentence-transformers"
|
|
27
|
+
# OpenWebUI's start.sh writes a generated WEBUI_SECRET_KEY to a key
|
|
28
|
+
# file. The default path is `.webui_secret_key` in the image's
|
|
29
|
+
# /app/backend WORKDIR, which is owned by root and unwritable when
|
|
30
|
+
# running as uid 1000. Redirect to the bind-mounted (and writable)
|
|
31
|
+
# data dir so the key persists across restarts and survives image
|
|
32
|
+
# upgrades.
|
|
33
|
+
WEBUI_SECRET_KEY_FILE: "/app/backend/data/.webui_secret_key"
|
|
34
|
+
# Open WebUI marks OPENAI_API_BASE_URL / OPENAI_API_KEY as PersistentConfig:
|
|
35
|
+
# without this flag, the first start writes them to the internal DB and
|
|
36
|
+
# subsequent restarts ignore env, defeating Connections "Save & Restart"
|
|
37
|
+
# rebinds. Disabling persistent config means the Admin UI's manual
|
|
38
|
+
# OpenAI config doesn't survive restarts — that's the trade-off
|
|
39
|
+
# JishuShell takes to own LLM configuration via Connections (§13.3.2.1).
|
|
40
|
+
ENABLE_PERSISTENT_CONFIG: "False"
|
|
41
|
+
# JishuShell ships Open WebUI as a chat front-end only — RAG /
|
|
42
|
+
# reranker / Whisper STT all need ML model downloads from
|
|
43
|
+
# HuggingFace at first boot (~500 MB – 1.5 GB). On slow outbound
|
|
44
|
+
# networks (Raspberry Pi behind throttled NAT) this blocks
|
|
45
|
+
# health checks for hours. Bypassing them keeps the boot path
|
|
46
|
+
# to "FastAPI up in <30s". Users who want RAG/STT can flip these
|
|
47
|
+
# back from Admin UI and accept the one-time download.
|
|
48
|
+
BYPASS_EMBEDDING_AND_RETRIEVAL: "True"
|
|
49
|
+
RAG_EMBEDDING_MODEL: ""
|
|
50
|
+
RAG_RERANKING_MODEL: ""
|
|
51
|
+
WHISPER_MODEL: ""
|
|
52
|
+
AUDIO_STT_ENGINE: ""
|
|
22
53
|
resources:
|
|
23
54
|
cpu: "1000m"
|
|
24
55
|
memory: "1024Mi"
|
|
@@ -41,10 +72,23 @@ tasks:
|
|
|
41
72
|
|
|
42
73
|
provides:
|
|
43
74
|
- capability: "openwebui-web"
|
|
75
|
+
task: "openwebui"
|
|
76
|
+
port: 3000
|
|
77
|
+
protocol: "http"
|
|
78
|
+
description: "Open WebUI Web 界面(legacy capability,请改用 web-openwebui)"
|
|
79
|
+
- capability: "web-openwebui"
|
|
80
|
+
task: "openwebui"
|
|
44
81
|
port: 3000
|
|
45
82
|
protocol: "http"
|
|
46
83
|
description: "Open WebUI Web 界面"
|
|
47
84
|
|
|
85
|
+
requires:
|
|
86
|
+
- capability: "llm"
|
|
87
|
+
inject_as: "OPENAI_API_BASE_URL"
|
|
88
|
+
apply: "openai-env"
|
|
89
|
+
cardinality: "one"
|
|
90
|
+
required: false
|
|
91
|
+
|
|
48
92
|
lifecycle:
|
|
49
93
|
install:
|
|
50
94
|
- downloadImage: "ghcr.io/open-webui/open-webui:main"
|
|
@@ -2,7 +2,7 @@ id: playwright-container
|
|
|
2
2
|
name: Playwright
|
|
3
3
|
version: "1.0.0"
|
|
4
4
|
jishushell:
|
|
5
|
-
min_version: "0.4.
|
|
5
|
+
min_version: "0.4.30"
|
|
6
6
|
description: "在容器中启动 Playwright UI,通过浏览器查看和管理测试运行"
|
|
7
7
|
singleInstance: false
|
|
8
8
|
|
|
@@ -52,9 +52,15 @@ tasks:
|
|
|
52
52
|
|
|
53
53
|
provides:
|
|
54
54
|
- capability: "playwright-ui"
|
|
55
|
+
task: "playwright-ui"
|
|
55
56
|
port: 14567
|
|
56
57
|
protocol: "http"
|
|
57
58
|
description: "Playwright UI Web 界面"
|
|
59
|
+
# browser-playwright (CDP endpoint) is TODO — needs a sidecar task that runs
|
|
60
|
+
# `npx playwright launch-server --browser chromium --hostname 0.0.0.0`,
|
|
61
|
+
# captures the token-bearing ws URL into a file/env, and registers it as a
|
|
62
|
+
# capability with protocol=ws. Until the sidecar lands, OpenClaw / Hermes
|
|
63
|
+
# browser slots cannot bind to this app via the Connections UI.
|
|
58
64
|
|
|
59
65
|
lifecycle:
|
|
60
66
|
install:
|