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.
Files changed (248) hide show
  1. package/Dockerfile.hermes-slim +193 -0
  2. package/INSTALL-NOTICE +10 -12
  3. package/apps/hermes-container.yaml +35 -0
  4. package/apps/ollama-binary.yaml +200 -0
  5. package/apps/ollama-cpu-container.yaml +37 -0
  6. package/apps/ollama-with-hollama-binary.yaml +195 -0
  7. package/apps/openclaw-binary.yaml +69 -0
  8. package/apps/openclaw-container.yaml +37 -0
  9. package/apps/openclaw-with-ollama-container.yaml +42 -0
  10. package/apps/openclaw-with-searxng-container.yaml +136 -0
  11. package/apps/openwebui-container.yaml +53 -0
  12. package/apps/playwright-container.yaml +120 -0
  13. package/apps/searxng-container.yaml +115 -0
  14. package/dist/auth.d.ts +1 -0
  15. package/dist/auth.js +15 -14
  16. package/dist/auth.js.map +1 -1
  17. package/dist/cli/app.d.ts +4 -0
  18. package/dist/cli/app.js +814 -0
  19. package/dist/cli/app.js.map +1 -0
  20. package/dist/cli/backup.d.ts +3 -0
  21. package/dist/cli/backup.js +434 -0
  22. package/dist/cli/backup.js.map +1 -0
  23. package/dist/{doctor.d.ts → cli/doctor.d.ts} +7 -1
  24. package/dist/{doctor.js → cli/doctor.js} +377 -22
  25. package/dist/cli/doctor.js.map +1 -0
  26. package/dist/cli/helpers.d.ts +4 -0
  27. package/dist/cli/helpers.js +32 -0
  28. package/dist/cli/helpers.js.map +1 -0
  29. package/dist/cli/job.d.ts +4 -0
  30. package/dist/cli/job.js +198 -0
  31. package/dist/cli/job.js.map +1 -0
  32. package/dist/cli/llm.d.ts +25 -0
  33. package/dist/cli/llm.js +599 -0
  34. package/dist/cli/llm.js.map +1 -0
  35. package/dist/cli/managed-list.d.ts +30 -0
  36. package/dist/cli/managed-list.js +129 -0
  37. package/dist/cli/managed-list.js.map +1 -0
  38. package/dist/cli/panel.d.ts +26 -0
  39. package/dist/cli/panel.js +804 -0
  40. package/dist/cli/panel.js.map +1 -0
  41. package/dist/cli/version.d.ts +1 -0
  42. package/dist/cli/version.js +12 -0
  43. package/dist/cli/version.js.map +1 -0
  44. package/dist/cli.js +48 -776
  45. package/dist/cli.js.map +1 -1
  46. package/dist/config.d.ts +69 -0
  47. package/dist/config.js +268 -7
  48. package/dist/config.js.map +1 -1
  49. package/dist/control.d.ts +17 -41
  50. package/dist/control.js +61 -1323
  51. package/dist/control.js.map +1 -1
  52. package/dist/install.d.ts +16 -0
  53. package/dist/install.js +75 -26
  54. package/dist/install.js.map +1 -1
  55. package/dist/routes/agent-apps.d.ts +15 -0
  56. package/dist/routes/agent-apps.js +78 -0
  57. package/dist/routes/agent-apps.js.map +1 -0
  58. package/dist/routes/apps.d.ts +3 -0
  59. package/dist/routes/apps.js +278 -0
  60. package/dist/routes/apps.js.map +1 -0
  61. package/dist/routes/backup.js +3 -3
  62. package/dist/routes/backup.js.map +1 -1
  63. package/dist/routes/instances.d.ts +6 -0
  64. package/dist/routes/instances.js +863 -874
  65. package/dist/routes/instances.js.map +1 -1
  66. package/dist/routes/llm.d.ts +15 -0
  67. package/dist/routes/llm.js +247 -0
  68. package/dist/routes/llm.js.map +1 -0
  69. package/dist/routes/runtime.d.ts +15 -0
  70. package/dist/routes/runtime.js +69 -0
  71. package/dist/routes/runtime.js.map +1 -0
  72. package/dist/routes/setup.js +131 -9
  73. package/dist/routes/setup.js.map +1 -1
  74. package/dist/routes/system.js +56 -9
  75. package/dist/routes/system.js.map +1 -1
  76. package/dist/server.js +107 -7
  77. package/dist/server.js.map +1 -1
  78. package/dist/services/agent-apps/catalog.d.ts +30 -0
  79. package/dist/services/agent-apps/catalog.js +60 -0
  80. package/dist/services/agent-apps/catalog.js.map +1 -0
  81. package/dist/services/agent-apps/index.d.ts +36 -0
  82. package/dist/services/agent-apps/index.js +171 -0
  83. package/dist/services/agent-apps/index.js.map +1 -0
  84. package/dist/services/agent-apps/installers/adapter-probes.d.ts +49 -0
  85. package/dist/services/agent-apps/installers/adapter-probes.js +223 -0
  86. package/dist/services/agent-apps/installers/adapter-probes.js.map +1 -0
  87. package/dist/services/agent-apps/installers/adapter.d.ts +30 -0
  88. package/dist/services/agent-apps/installers/adapter.js +171 -0
  89. package/dist/services/agent-apps/installers/adapter.js.map +1 -0
  90. package/dist/services/agent-apps/installers/registry-probe.d.ts +38 -0
  91. package/dist/services/agent-apps/installers/registry-probe.js +183 -0
  92. package/dist/services/agent-apps/installers/registry-probe.js.map +1 -0
  93. package/dist/services/agent-apps/installers/shell-script.d.ts +47 -0
  94. package/dist/services/agent-apps/installers/shell-script.js +471 -0
  95. package/dist/services/agent-apps/installers/shell-script.js.map +1 -0
  96. package/dist/services/agent-apps/types.d.ts +125 -0
  97. package/dist/services/agent-apps/types.js +17 -0
  98. package/dist/services/agent-apps/types.js.map +1 -0
  99. package/dist/services/app/app-compiler.d.ts +15 -0
  100. package/dist/services/app/app-compiler.js +172 -0
  101. package/dist/services/app/app-compiler.js.map +1 -0
  102. package/dist/services/app/app-manager.d.ts +142 -0
  103. package/dist/services/app/app-manager.js +1988 -0
  104. package/dist/services/app/app-manager.js.map +1 -0
  105. package/dist/services/app/custom-manager.d.ts +27 -0
  106. package/dist/services/app/custom-manager.js +285 -0
  107. package/dist/services/app/custom-manager.js.map +1 -0
  108. package/dist/services/app/hermes-agent-manager.d.ts +20 -0
  109. package/dist/services/app/hermes-agent-manager.js +289 -0
  110. package/dist/services/app/hermes-agent-manager.js.map +1 -0
  111. package/dist/services/app/id-normalizer.d.ts +27 -0
  112. package/dist/services/app/id-normalizer.js +77 -0
  113. package/dist/services/app/id-normalizer.js.map +1 -0
  114. package/dist/services/app/ollama-manager.d.ts +18 -0
  115. package/dist/services/app/ollama-manager.js +207 -0
  116. package/dist/services/app/ollama-manager.js.map +1 -0
  117. package/dist/services/app/openclaw-manager.d.ts +63 -0
  118. package/dist/services/app/openclaw-manager.js +1178 -0
  119. package/dist/services/app/openclaw-manager.js.map +1 -0
  120. package/dist/services/app/paths.d.ts +47 -0
  121. package/dist/services/app/paths.js +68 -0
  122. package/dist/services/app/paths.js.map +1 -0
  123. package/dist/services/app/registry.d.ts +17 -0
  124. package/dist/services/app/registry.js +31 -0
  125. package/dist/services/app/registry.js.map +1 -0
  126. package/dist/services/app/remote-spec.d.ts +14 -0
  127. package/dist/services/app/remote-spec.js +58 -0
  128. package/dist/services/app/remote-spec.js.map +1 -0
  129. package/dist/services/app/terminal-session-manager.d.ts +27 -0
  130. package/dist/services/app/terminal-session-manager.js +157 -0
  131. package/dist/services/app/terminal-session-manager.js.map +1 -0
  132. package/dist/services/app/types.d.ts +72 -0
  133. package/dist/services/app/types.js +16 -0
  134. package/dist/services/app/types.js.map +1 -0
  135. package/dist/services/backup-manager.js +60 -22
  136. package/dist/services/backup-manager.js.map +1 -1
  137. package/dist/services/instance-manager.d.ts +125 -34
  138. package/dist/services/instance-manager.js +679 -1043
  139. package/dist/services/instance-manager.js.map +1 -1
  140. package/dist/services/llm-proxy/adapters.js +5 -1
  141. package/dist/services/llm-proxy/adapters.js.map +1 -1
  142. package/dist/services/llm-proxy/circuit-breaker.js +10 -2
  143. package/dist/services/llm-proxy/circuit-breaker.js.map +1 -1
  144. package/dist/services/llm-proxy/index.d.ts +43 -0
  145. package/dist/services/llm-proxy/index.js +120 -5
  146. package/dist/services/llm-proxy/index.js.map +1 -1
  147. package/dist/services/llm-proxy/ssrf.js +1 -1
  148. package/dist/services/llm-proxy/ssrf.js.map +1 -1
  149. package/dist/services/nomad-manager.d.ts +260 -3
  150. package/dist/services/nomad-manager.js +2921 -341
  151. package/dist/services/nomad-manager.js.map +1 -1
  152. package/dist/services/panel-manager.d.ts +50 -0
  153. package/dist/services/panel-manager.js +443 -0
  154. package/dist/services/panel-manager.js.map +1 -0
  155. package/dist/services/plugin-installer.js +28 -2
  156. package/dist/services/plugin-installer.js.map +1 -1
  157. package/dist/services/process-manager.js +42 -7
  158. package/dist/services/process-manager.js.map +1 -1
  159. package/dist/services/runtime/adapters/custom.d.ts +20 -0
  160. package/dist/services/runtime/adapters/custom.js +90 -0
  161. package/dist/services/runtime/adapters/custom.js.map +1 -0
  162. package/dist/services/runtime/adapters/hermes.d.ts +174 -0
  163. package/dist/services/runtime/adapters/hermes.js +1316 -0
  164. package/dist/services/runtime/adapters/hermes.js.map +1 -0
  165. package/dist/services/runtime/adapters/openclaw-routes.d.ts +17 -0
  166. package/dist/services/runtime/adapters/openclaw-routes.js +946 -0
  167. package/dist/services/runtime/adapters/openclaw-routes.js.map +1 -0
  168. package/dist/services/runtime/adapters/openclaw.d.ts +188 -0
  169. package/dist/services/runtime/adapters/openclaw.js +2195 -0
  170. package/dist/services/runtime/adapters/openclaw.js.map +1 -0
  171. package/dist/services/runtime/errors.d.ts +28 -0
  172. package/dist/services/runtime/errors.js +31 -0
  173. package/dist/services/runtime/errors.js.map +1 -0
  174. package/dist/services/runtime/index.d.ts +34 -0
  175. package/dist/services/runtime/index.js +51 -0
  176. package/dist/services/runtime/index.js.map +1 -0
  177. package/dist/services/runtime/instance.d.ts +24 -0
  178. package/dist/services/runtime/instance.js +143 -0
  179. package/dist/services/runtime/instance.js.map +1 -0
  180. package/dist/services/runtime/migrations.d.ts +15 -0
  181. package/dist/services/runtime/migrations.js +25 -0
  182. package/dist/services/runtime/migrations.js.map +1 -0
  183. package/dist/services/runtime/registry.d.ts +13 -0
  184. package/dist/services/runtime/registry.js +32 -0
  185. package/dist/services/runtime/registry.js.map +1 -0
  186. package/dist/services/runtime/types.d.ts +545 -0
  187. package/dist/services/runtime/types.js +14 -0
  188. package/dist/services/runtime/types.js.map +1 -0
  189. package/dist/services/setup-manager.d.ts +70 -29
  190. package/dist/services/setup-manager.js +591 -625
  191. package/dist/services/setup-manager.js.map +1 -1
  192. package/dist/services/task-registry.d.ts +44 -0
  193. package/dist/services/task-registry.js +74 -0
  194. package/dist/services/task-registry.js.map +1 -0
  195. package/dist/services/telemetry/heartbeat.d.ts +6 -6
  196. package/dist/services/telemetry/heartbeat.js +29 -30
  197. package/dist/services/telemetry/heartbeat.js.map +1 -1
  198. package/dist/services/update-manager.d.ts +47 -0
  199. package/dist/services/update-manager.js +305 -0
  200. package/dist/services/update-manager.js.map +1 -0
  201. package/dist/types.d.ts +222 -0
  202. package/dist/utils/docker-host.d.ts +15 -0
  203. package/dist/utils/docker-host.js +64 -0
  204. package/dist/utils/docker-host.js.map +1 -0
  205. package/install/jishu-install.sh +303 -37
  206. package/install/post-install.sh +64 -5
  207. package/package.json +19 -5
  208. package/public/assets/Dashboard-B-JoOjBQ.js +1 -0
  209. package/public/assets/HermesChatPanel-mFSureyc.js +1 -0
  210. package/public/assets/HermesConfigForm-DvR05LK1.js +4 -0
  211. package/public/assets/InitPassword-CVA8wQA6.js +1 -0
  212. package/public/assets/InstanceDetail-DcZW2QGO.js +91 -0
  213. package/public/assets/{Login-CUoEZOWR.js → Login-BWsZH2mu.js} +1 -1
  214. package/public/assets/NewInstance-BCIrAd86.js +1 -0
  215. package/public/assets/Settings-xkDcduFz.js +1 -0
  216. package/public/assets/Setup-Cfuwj4gV.js +1 -0
  217. package/public/assets/WeixinLoginPanel-CnjR8xMu.js +9 -0
  218. package/public/assets/index-CPhVFEsx.css +1 -0
  219. package/public/assets/index-DQsM6Joa.js +19 -0
  220. package/public/assets/input-paste-CrNVAyOy.js +1 -0
  221. package/public/assets/{providers-lBSOjUWy.js → providers-V-vwrExZ.js} +1 -1
  222. package/public/assets/registry-B4UFJdpA.js +2 -0
  223. package/public/assets/{usePolling-CK0DfI4h.js → usePolling-Do5Erqm_.js} +1 -1
  224. package/public/assets/vendor-i18n-ucpM0OR0.js +9 -0
  225. package/public/assets/{vendor-react-B1-3Yrt-.js → vendor-react-Bk1hRGiY.js} +1 -1
  226. package/public/favicon.png +0 -0
  227. package/public/index.html +9 -4
  228. package/public/logos/hermes.png +0 -0
  229. package/public/logos/ollama.png +0 -0
  230. package/public/logos/openclaw.svg +60 -0
  231. package/scripts/build-hermes-image.sh +21 -0
  232. package/scripts/build-local.sh +54 -0
  233. package/scripts/check-adapter-isolation.ts +293 -0
  234. package/scripts/fixtures/instances/hermes-sample/instance.json +37 -0
  235. package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +7 -0
  236. package/scripts/smoke/hermes-bootstrap.sh +195 -0
  237. package/templates/hermes-entrypoint.sh +154 -0
  238. package/dist/doctor.js.map +0 -1
  239. package/install/jishu-install-china.sh +0 -3092
  240. package/public/assets/Dashboard-DhsrzJ4F.js +0 -1
  241. package/public/assets/InitPassword-BjubiVdd.js +0 -1
  242. package/public/assets/InstanceDetail-DMcywsof.js +0 -17
  243. package/public/assets/NewInstance-Bk0G4EiJ.js +0 -1
  244. package/public/assets/Settings-D5tHL_h5.js +0 -1
  245. package/public/assets/Setup-4t6E3Rut.js +0 -1
  246. package/public/assets/index-BJ47MWpF.css +0 -1
  247. package/public/assets/index-DbX85irc.js +0 -16
  248. 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";