jishushell 0.4.10 → 0.4.24
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/INSTALL-NOTICE +10 -12
- package/apps/hermes-container.yaml +35 -0
- package/apps/ollama-binary.yaml +200 -0
- package/apps/ollama-cpu-container.yaml +37 -0
- package/apps/ollama-with-hollama-binary.yaml +195 -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 +4 -0
- package/dist/cli/app.js +814 -0
- package/dist/cli/app.js.map +1 -0
- 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/{doctor.d.ts → cli/doctor.d.ts} +7 -1
- package/dist/{doctor.js → cli/doctor.js} +377 -22
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/helpers.d.ts +4 -0
- package/dist/cli/helpers.js +32 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/job.d.ts +4 -0
- package/dist/cli/job.js +198 -0
- package/dist/cli/job.js.map +1 -0
- package/dist/cli/llm.d.ts +25 -0
- package/dist/cli/llm.js +599 -0
- package/dist/cli/llm.js.map +1 -0
- 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 +26 -0
- package/dist/cli/panel.js +804 -0
- package/dist/cli/panel.js.map +1 -0
- 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 +48 -776
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +69 -0
- package/dist/config.js +268 -7
- package/dist/config.js.map +1 -1
- package/dist/control.d.ts +17 -41
- package/dist/control.js +61 -1323
- 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.d.ts +3 -0
- package/dist/routes/apps.js +278 -0
- package/dist/routes/apps.js.map +1 -0
- 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 +863 -874
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/llm.d.ts +15 -0
- package/dist/routes/llm.js +247 -0
- package/dist/routes/llm.js.map +1 -0
- 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 +131 -9
- package/dist/routes/setup.js.map +1 -1
- package/dist/routes/system.js +56 -9
- package/dist/routes/system.js.map +1 -1
- package/dist/server.js +107 -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/app-compiler.d.ts +15 -0
- package/dist/services/app/app-compiler.js +172 -0
- 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 +1988 -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 +125 -34
- package/dist/services/instance-manager.js +679 -1043
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/llm-proxy/adapters.js +5 -1
- package/dist/services/llm-proxy/adapters.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 +43 -0
- package/dist/services/llm-proxy/index.js +120 -5
- package/dist/services/llm-proxy/index.js.map +1 -1
- package/dist/services/llm-proxy/ssrf.js +1 -1
- package/dist/services/llm-proxy/ssrf.js.map +1 -1
- package/dist/services/nomad-manager.d.ts +260 -3
- package/dist/services/nomad-manager.js +2921 -341
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/panel-manager.d.ts +50 -0
- package/dist/services/panel-manager.js +443 -0
- package/dist/services/panel-manager.js.map +1 -0
- package/dist/services/plugin-installer.js +28 -2
- package/dist/services/plugin-installer.js.map +1 -1
- package/dist/services/process-manager.js +42 -7
- 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 +591 -625
- 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/services/update-manager.d.ts +47 -0
- package/dist/services/update-manager.js +305 -0
- package/dist/services/update-manager.js.map +1 -0
- package/dist/types.d.ts +222 -0
- 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 +303 -37
- package/install/post-install.sh +64 -5
- package/package.json +19 -5
- package/public/assets/Dashboard-B-JoOjBQ.js +1 -0
- package/public/assets/HermesChatPanel-mFSureyc.js +1 -0
- package/public/assets/HermesConfigForm-DvR05LK1.js +4 -0
- package/public/assets/InitPassword-CVA8wQA6.js +1 -0
- package/public/assets/InstanceDetail-DcZW2QGO.js +91 -0
- package/public/assets/{Login-CUoEZOWR.js → Login-BWsZH2mu.js} +1 -1
- package/public/assets/NewInstance-BCIrAd86.js +1 -0
- package/public/assets/Settings-xkDcduFz.js +1 -0
- package/public/assets/Setup-Cfuwj4gV.js +1 -0
- package/public/assets/WeixinLoginPanel-CnjR8xMu.js +9 -0
- package/public/assets/index-CPhVFEsx.css +1 -0
- package/public/assets/index-DQsM6Joa.js +19 -0
- package/public/assets/input-paste-CrNVAyOy.js +1 -0
- package/public/assets/{providers-lBSOjUWy.js → providers-V-vwrExZ.js} +1 -1
- package/public/assets/registry-B4UFJdpA.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/doctor.js.map +0 -1
- package/install/jishu-install-china.sh +0 -3092
- package/public/assets/Dashboard-DhsrzJ4F.js +0 -1
- package/public/assets/InitPassword-BjubiVdd.js +0 -1
- package/public/assets/InstanceDetail-DMcywsof.js +0 -17
- package/public/assets/NewInstance-Bk0G4EiJ.js +0 -1
- package/public/assets/Settings-D5tHL_h5.js +0 -1
- package/public/assets/Setup-4t6E3Rut.js +0 -1
- package/public/assets/index-BJ47MWpF.css +0 -1
- package/public/assets/index-DbX85irc.js +0 -16
- package/public/assets/vendor-i18n-CfW0RvgE.js +0 -9
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
export function parseCpuToMHz(cpu) {
|
|
2
|
+
if (!cpu)
|
|
3
|
+
return 500;
|
|
4
|
+
if (cpu.endsWith("m")) {
|
|
5
|
+
const n = parseInt(cpu.slice(0, -1), 10);
|
|
6
|
+
if (isNaN(n))
|
|
7
|
+
throw new Error(`Invalid CPU format: ${cpu}`);
|
|
8
|
+
return n;
|
|
9
|
+
}
|
|
10
|
+
const n = parseFloat(cpu);
|
|
11
|
+
if (isNaN(n))
|
|
12
|
+
throw new Error(`Invalid CPU format: ${cpu}`);
|
|
13
|
+
return Math.round(n * 1000);
|
|
14
|
+
}
|
|
15
|
+
export function parseMemoryToMB(memory) {
|
|
16
|
+
if (!memory)
|
|
17
|
+
return 512;
|
|
18
|
+
if (memory.endsWith("Gi")) {
|
|
19
|
+
const n = parseInt(memory.slice(0, -2), 10);
|
|
20
|
+
if (isNaN(n))
|
|
21
|
+
throw new Error(`Invalid memory format: ${memory}`);
|
|
22
|
+
return n * 1024;
|
|
23
|
+
}
|
|
24
|
+
if (memory.endsWith("Mi")) {
|
|
25
|
+
const n = parseInt(memory.slice(0, -2), 10);
|
|
26
|
+
if (isNaN(n))
|
|
27
|
+
throw new Error(`Invalid memory format: ${memory}`);
|
|
28
|
+
return n;
|
|
29
|
+
}
|
|
30
|
+
if (memory.endsWith("G")) {
|
|
31
|
+
const n = parseInt(memory.slice(0, -1), 10);
|
|
32
|
+
if (isNaN(n))
|
|
33
|
+
throw new Error(`Invalid memory format: ${memory}`);
|
|
34
|
+
return n * 1024;
|
|
35
|
+
}
|
|
36
|
+
if (memory.endsWith("M")) {
|
|
37
|
+
const n = parseInt(memory.slice(0, -1), 10);
|
|
38
|
+
if (isNaN(n))
|
|
39
|
+
throw new Error(`Invalid memory format: ${memory}`);
|
|
40
|
+
return n;
|
|
41
|
+
}
|
|
42
|
+
const n = parseInt(memory, 10);
|
|
43
|
+
if (isNaN(n))
|
|
44
|
+
throw new Error(`Invalid memory format: ${memory}`);
|
|
45
|
+
return n;
|
|
46
|
+
}
|
|
47
|
+
/** Parse interval strings like "10s", "1m" into nanoseconds (Nomad unit) */
|
|
48
|
+
function parseIntervalNs(s) {
|
|
49
|
+
if (!s)
|
|
50
|
+
return 10_000_000_000; // 10s default
|
|
51
|
+
if (s.endsWith("ms"))
|
|
52
|
+
return parseInt(s) * 1_000_000;
|
|
53
|
+
if (s.endsWith("s"))
|
|
54
|
+
return parseInt(s) * 1_000_000_000;
|
|
55
|
+
if (s.endsWith("m"))
|
|
56
|
+
return parseInt(s) * 60_000_000_000;
|
|
57
|
+
return parseInt(s) * 1_000_000_000;
|
|
58
|
+
}
|
|
59
|
+
/** Compile AppTask ports → Nomad network port mappings */
|
|
60
|
+
export function compilePorts(ports) {
|
|
61
|
+
if (!ports || ports.length === 0)
|
|
62
|
+
return [];
|
|
63
|
+
return ports.map((p) => ({
|
|
64
|
+
Label: p.name,
|
|
65
|
+
Value: p.host_port ?? p.port,
|
|
66
|
+
To: p.container_port ?? p.port,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
/** Compile AppTask health → Nomad service check */
|
|
70
|
+
export function compileHealthCheck(health, taskName, ports) {
|
|
71
|
+
if (!health)
|
|
72
|
+
return null;
|
|
73
|
+
if (health.http) {
|
|
74
|
+
const portEntry = ports?.find((port) => port.port === health.http?.port
|
|
75
|
+
|| port.host_port === health.http?.port
|
|
76
|
+
|| port.container_port === health.http?.port);
|
|
77
|
+
return {
|
|
78
|
+
Name: `${taskName || "service"}-health`,
|
|
79
|
+
Type: "http",
|
|
80
|
+
Path: health.http.path,
|
|
81
|
+
PortLabel: portEntry?.name ?? String(health.http.port),
|
|
82
|
+
Interval: parseIntervalNs(health.interval || "10s"),
|
|
83
|
+
Timeout: parseIntervalNs(health.timeout || "2s"),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
/** Map AppTask role → Nomad lifecycle hook */
|
|
89
|
+
export function compileLifecycle(role) {
|
|
90
|
+
switch (role) {
|
|
91
|
+
case "init":
|
|
92
|
+
return { Hook: "prestart", Sidecar: false };
|
|
93
|
+
case "sidecar":
|
|
94
|
+
return { Hook: "prestart", Sidecar: true };
|
|
95
|
+
case "cleanup":
|
|
96
|
+
return { Hook: "poststop", Sidecar: false };
|
|
97
|
+
default: // "service" — main task, no lifecycle hook
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export function compileTaskRuntime(task, instanceId) {
|
|
102
|
+
return {
|
|
103
|
+
command: task.command || "/usr/bin/openclaw",
|
|
104
|
+
args: task.args || [],
|
|
105
|
+
cwd: "/",
|
|
106
|
+
user: "root",
|
|
107
|
+
env_files: [],
|
|
108
|
+
env: task.env || {},
|
|
109
|
+
image: task.image || null,
|
|
110
|
+
resources: {
|
|
111
|
+
CPU: parseCpuToMHz(task.resources?.cpu),
|
|
112
|
+
MemoryMB: parseMemoryToMB(task.resources?.memory),
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Compile a full AppSpec into a Nomad-compatible task group structure.
|
|
118
|
+
* Returns an array of Nomad task objects (to be placed inside TaskGroups[0].Tasks).
|
|
119
|
+
*/
|
|
120
|
+
export function compileAppToNomadTasks(spec, instanceId) {
|
|
121
|
+
const tasks = [];
|
|
122
|
+
// Sort tasks by role precedence: init → sidecar → service → cleanup
|
|
123
|
+
const roleOrder = { init: 0, sidecar: 1, service: 2, cleanup: 3 };
|
|
124
|
+
const sorted = [...spec.tasks].sort((a, b) => (roleOrder[a.role ?? "service"] ?? 2) - (roleOrder[b.role ?? "service"] ?? 2));
|
|
125
|
+
for (const task of sorted) {
|
|
126
|
+
const compiled = {
|
|
127
|
+
Name: task.name,
|
|
128
|
+
Driver: task.runtime === "container" ? "docker" : "raw_exec",
|
|
129
|
+
Config: {},
|
|
130
|
+
Env: { ...task.env },
|
|
131
|
+
Resources: {
|
|
132
|
+
CPU: parseCpuToMHz(task.resources?.cpu),
|
|
133
|
+
MemoryMB: parseMemoryToMB(task.resources?.memory),
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
// Driver-specific config
|
|
137
|
+
if (task.runtime === "container") {
|
|
138
|
+
compiled.Config.image = task.image;
|
|
139
|
+
if (task.command)
|
|
140
|
+
compiled.Config.command = task.command;
|
|
141
|
+
if (task.args?.length)
|
|
142
|
+
compiled.Config.args = task.args;
|
|
143
|
+
// Port mappings for Docker
|
|
144
|
+
const ports = compilePorts(task.ports);
|
|
145
|
+
if (ports.length > 0) {
|
|
146
|
+
compiled.Config.ports = ports.map((p) => p.Label);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// raw_exec (process runtime)
|
|
151
|
+
compiled.Config.command = task.command || "/usr/bin/openclaw";
|
|
152
|
+
if (task.args?.length)
|
|
153
|
+
compiled.Config.args = task.args;
|
|
154
|
+
}
|
|
155
|
+
// Lifecycle for non-service tasks
|
|
156
|
+
const lifecycle = compileLifecycle(task.role ?? "service");
|
|
157
|
+
if (lifecycle)
|
|
158
|
+
compiled.Lifecycle = lifecycle;
|
|
159
|
+
// Health check → Nomad service block
|
|
160
|
+
const check = compileHealthCheck(task.health, task.name, task.ports);
|
|
161
|
+
if (check) {
|
|
162
|
+
compiled.Services = [{
|
|
163
|
+
Name: `${instanceId}-${task.name}`,
|
|
164
|
+
PortLabel: check.PortLabel,
|
|
165
|
+
Checks: [check],
|
|
166
|
+
}];
|
|
167
|
+
}
|
|
168
|
+
tasks.push(compiled);
|
|
169
|
+
}
|
|
170
|
+
return tasks;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=app-compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-compiler.js","sourceRoot":"","sources":["../../../src/services/app/app-compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { AppManifest, AppSpec, AppTerminalConfig } from "../../types.js";
|
|
2
|
+
import type { AppJobStatus } from "../nomad-manager.js";
|
|
3
|
+
import { type Task } from "../task-registry.js";
|
|
4
|
+
export interface BuiltinAppSpecTemplate {
|
|
5
|
+
id: string;
|
|
6
|
+
fileName: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
serviceRuntime: string | null;
|
|
10
|
+
instanceCompatible: boolean;
|
|
11
|
+
suggestedAppType: "ollama" | "custom";
|
|
12
|
+
yaml: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function listBuiltinAppSpecs(): BuiltinAppSpecTemplate[];
|
|
15
|
+
export declare function updateInstance(instanceId: string, name?: string, description?: string): Record<string, any> | null;
|
|
16
|
+
type LifecycleExecOptions = {
|
|
17
|
+
sudoPassword?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function validateSudoPassword(sudoPassword: string): Promise<void>;
|
|
20
|
+
export type AppTaskKind = "install" | "uninstall" | "start" | "stop" | "restart";
|
|
21
|
+
export interface AppCurrentTask {
|
|
22
|
+
id: string;
|
|
23
|
+
kind: AppTaskKind;
|
|
24
|
+
status: "running" | "done" | "error";
|
|
25
|
+
}
|
|
26
|
+
export interface AppTaskStartResult {
|
|
27
|
+
ok: boolean;
|
|
28
|
+
taskId?: string;
|
|
29
|
+
reused?: boolean;
|
|
30
|
+
error?: string;
|
|
31
|
+
kind?: Exclude<AppTaskKind, "install">;
|
|
32
|
+
}
|
|
33
|
+
export type AppInstallState = "installing" | "installed";
|
|
34
|
+
export interface InstalledAppRecord {
|
|
35
|
+
spec: AppSpec;
|
|
36
|
+
manifest: AppManifest;
|
|
37
|
+
install_state: AppInstallState;
|
|
38
|
+
current_task?: AppCurrentTask;
|
|
39
|
+
}
|
|
40
|
+
export interface InstallAppOptions {
|
|
41
|
+
preferInstanceDir?: boolean;
|
|
42
|
+
task?: Task;
|
|
43
|
+
exec?: LifecycleExecOptions;
|
|
44
|
+
bootstrap?: {
|
|
45
|
+
name?: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
cloneFrom?: string;
|
|
48
|
+
agentHome?: string;
|
|
49
|
+
cloneOptions?: {
|
|
50
|
+
include_sessions?: boolean;
|
|
51
|
+
include_memory?: boolean;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export declare function getRunningAppTask(appId: string, appDir?: string): AppCurrentTask | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Check whether an app with this id is installed (has manifest.json + app-spec.yaml).
|
|
58
|
+
* Exported so nomad-manager can use it for routing without the old prefix convention.
|
|
59
|
+
*/
|
|
60
|
+
export declare function isAppInstalled(appId: string): boolean;
|
|
61
|
+
export declare function getAppInstallState(appId: string): AppInstallState | null;
|
|
62
|
+
export interface AppProvidedCapabilitySummary {
|
|
63
|
+
appId: string;
|
|
64
|
+
capability: string;
|
|
65
|
+
port?: number;
|
|
66
|
+
path?: string;
|
|
67
|
+
url?: string;
|
|
68
|
+
protocol: string;
|
|
69
|
+
visibility?: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
address?: string;
|
|
72
|
+
registered: boolean;
|
|
73
|
+
registeredAddress?: string;
|
|
74
|
+
providerInstanceId?: string;
|
|
75
|
+
terminal?: AppTerminalConfig;
|
|
76
|
+
}
|
|
77
|
+
export interface AppEmbeddedUiHint {
|
|
78
|
+
capability: string;
|
|
79
|
+
protocol: "http" | "https";
|
|
80
|
+
port?: number;
|
|
81
|
+
url: string;
|
|
82
|
+
}
|
|
83
|
+
export declare function listProvidedCapabilities(): AppProvidedCapabilitySummary[];
|
|
84
|
+
export declare function getProvidedCapabilitiesForApp(appId: string): AppProvidedCapabilitySummary[];
|
|
85
|
+
export declare function getEmbeddedUiHintForApp(appId: string): AppEmbeddedUiHint | null;
|
|
86
|
+
export declare function installApp(specYaml: string, requestedAppId?: string, options?: InstallAppOptions): Promise<{
|
|
87
|
+
spec: AppSpec;
|
|
88
|
+
manifest: AppManifest;
|
|
89
|
+
}>;
|
|
90
|
+
export declare function listApps(): InstalledAppRecord[];
|
|
91
|
+
export declare function getApp(id: string): InstalledAppRecord | null;
|
|
92
|
+
export declare function uninstallApp(id: string, options?: {
|
|
93
|
+
exec?: LifecycleExecOptions;
|
|
94
|
+
}): Promise<void>;
|
|
95
|
+
export declare function uninstallAppTask(id: string, exec?: LifecycleExecOptions): AppTaskStartResult;
|
|
96
|
+
export declare function runPostStartSteps(spec: AppSpec): Promise<void>;
|
|
97
|
+
export declare function registerCapabilities(instanceId: string, spec: AppSpec, portOverride?: number): void;
|
|
98
|
+
export declare function unregisterCapabilities(instanceId: string): void;
|
|
99
|
+
export declare function resolveRequires(spec: AppSpec): Record<string, string>;
|
|
100
|
+
export declare function startApp(appId: string): Promise<{
|
|
101
|
+
ok: boolean;
|
|
102
|
+
error?: string;
|
|
103
|
+
eval_id?: string;
|
|
104
|
+
}>;
|
|
105
|
+
export declare function startAppTask(appId: string): AppTaskStartResult;
|
|
106
|
+
export declare function stopApp(appId: string, purge?: boolean): Promise<{
|
|
107
|
+
ok: boolean;
|
|
108
|
+
error?: string;
|
|
109
|
+
}>;
|
|
110
|
+
export declare function stopAppTask(appId: string, purge?: boolean): AppTaskStartResult;
|
|
111
|
+
export declare function restartApp(appId: string): Promise<{
|
|
112
|
+
ok: boolean;
|
|
113
|
+
error?: string;
|
|
114
|
+
eval_id?: string;
|
|
115
|
+
}>;
|
|
116
|
+
export declare function restartAppTask(appId: string): AppTaskStartResult;
|
|
117
|
+
export declare function getAppRuntimeStatus(appId: string): Promise<{
|
|
118
|
+
status: string;
|
|
119
|
+
uptime?: number;
|
|
120
|
+
memory_mb?: number;
|
|
121
|
+
tasks?: Record<string, {
|
|
122
|
+
state: string;
|
|
123
|
+
restarts: number;
|
|
124
|
+
}>;
|
|
125
|
+
error?: string;
|
|
126
|
+
}>;
|
|
127
|
+
export declare function getAppStatus(appId: string): Promise<AppJobStatus>;
|
|
128
|
+
export declare function getAppLogs(appId: string, taskName: string, lines?: number, logType?: string): Promise<string[]>;
|
|
129
|
+
export declare function execInApp(appId: string, command: string[], timeoutMs?: number): Promise<import("../../types.js").ExecResult>;
|
|
130
|
+
export interface AppExecStreamHandlers {
|
|
131
|
+
onStdout?: (text: string) => void;
|
|
132
|
+
onStderr?: (text: string) => void;
|
|
133
|
+
}
|
|
134
|
+
export declare function streamExecInApp(appId: string, command: string[], handlers: AppExecStreamHandlers, options?: {
|
|
135
|
+
timeoutMs?: number;
|
|
136
|
+
taskName?: string;
|
|
137
|
+
}): Promise<import("../../types.js").ExecResult>;
|
|
138
|
+
export declare function copyApp(sourceId: string): Promise<{
|
|
139
|
+
spec: AppSpec;
|
|
140
|
+
manifest: AppManifest;
|
|
141
|
+
}>;
|
|
142
|
+
export { onConfigChange, notifyConfigChange, instanceDir, instanceMetaPath, defaultModelEnvFile, normalizePath, extractGatewayPort, isPortInUse, allocateGatewayPort, releasePendingPort, getResolvedOpenclawBin, resolveServiceUser, chownToServiceUser, parseEnvFile, updateEnvFile, inferProviderApiKeyEnvName, listInstances, getInstance, updateInstanceMeta, deleteInstance, getConfig, getStoredConfig, saveConfig, CHANNEL_PLUGIN_MAP, isChannelPluginInstalled, createInstance, getOpenclawHome, saveFeishuCredentials, saveWeixinCredentials, getWeixinAccounts, getOpenclawConfigPath, getLegacyOpenclawConfigPath, getInstanceRuntime, getRuntimeEnvFiles, getGatewayPort, getGatewayHost, getListeningHostForPort, urlHost, findInstancesSharingOpenclawHome, reallocateGatewayPort, findInstancesSharingGatewayPort, getRuntimeEnv, defaultGatewayPort, releasePort, } from "../instance-manager.js";
|