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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files-manager.js","sourceRoot":"","sources":["../../src/services/files-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { FileMount } from "./runtime/types.js";
2
+ export declare const MAX_MOUNTS_PER_INSTANCE = 16;
3
+ export declare class FileMountValidationError extends Error {
4
+ mountIndex?: number | undefined;
5
+ constructor(message: string, mountIndex?: number | undefined);
6
+ }
7
+ /**
8
+ * Validate a complete mount set for one instance.
9
+ *
10
+ * @param mounts the proposed list (may be the result of merging defaults +
11
+ * user input); validation is total — every problem is
12
+ * surfaced, not just the first one
13
+ * @param instanceId the owning instance, used for the agent-data
14
+ * isolation rule (path = "agent-data/{otherInstance}"
15
+ * is rejected)
16
+ */
17
+ export declare function validateMounts(mounts: FileMount[], instanceId: string): {
18
+ ok: boolean;
19
+ errors: FileMountValidationError[];
20
+ };
21
+ /**
22
+ * Resolve the effective alias for a mount: explicit non-empty value,
23
+ * else basename of path; root mounts (alias = "" / null) return null.
24
+ */
25
+ export declare function effectiveAlias(m: FileMount): string | null;
26
+ /**
27
+ * Ensure every mount target physically exists under filesRoot. Required
28
+ * before docker tries to bind-mount them — docker errors if the host
29
+ * path is missing.
30
+ *
31
+ * Side-effect: creates 0o755 directories. Will not modify existing
32
+ * directories. Throws on permission errors so the caller can surface
33
+ * a clear message.
34
+ */
35
+ export declare function ensureMountTargets(filesRoot: string, mounts: FileMount[]): void;
36
+ /**
37
+ * Default mount applied to every newly created instance: the instance's
38
+ * own agent-data subtree, alias "_out". This is the directory the
39
+ * agent uses to drop output that the user is then expected to find in
40
+ * the Files page.
41
+ */
42
+ export declare function defaultMountsForNewInstance(instanceId: string): FileMount[];
@@ -0,0 +1,207 @@
1
+ /**
2
+ * File mount configuration management for instances (M1 W2 PR-1).
3
+ *
4
+ * One mount = one subtree of ~/.jishushell/files/ visible inside an
5
+ * instance's container, optionally read-only. Mounts live on the
6
+ * instance runtime config (`fileMounts` field added in W2).
7
+ *
8
+ * This module is the *only* place that:
9
+ * - validates a proposed mount set (no duplicate aliases, no
10
+ * reserved paths, no privilege escalation across instances)
11
+ * - mkdirs the host-side mount targets so docker can bind them
12
+ *
13
+ * It does NOT:
14
+ * - touch container state (that's workspace-builder.ts in PR-2)
15
+ * - touch adapter volume strings (that's openclaw.ts in PR-3)
16
+ *
17
+ * Invariants enforced here:
18
+ * - path passes path-safety
19
+ * - path is not "" (root mount = no path) — represented via alias
20
+ * - mode is ro|rw
21
+ * - alias is "" / null (root) or a single name segment
22
+ * - alias != ".trash", "agent-data", "skills", "memory", anything
23
+ * leading with "."
24
+ * - at most ONE root mount (alias === "" or null)
25
+ * - aliases unique within a single mount set
26
+ * - path != "agent-data/{otherInstance}" — only own agent-data
27
+ * - path != ".trash" / ".knowledge" / ".organize-rules.json"
28
+ * - <= 16 mounts per instance
29
+ */
30
+ import * as fs from "node:fs";
31
+ import * as path from "node:path";
32
+ import { validateRelativePath, PathSafetyError, } from "../utils/path-safety.js";
33
+ export const MAX_MOUNTS_PER_INSTANCE = 16;
34
+ const RESERVED_TOP_PATHS = new Set([
35
+ ".trash",
36
+ ".knowledge",
37
+ ".organize-rules.json",
38
+ ".pending-organize.json",
39
+ ".organize-batches.json",
40
+ ]);
41
+ const RESERVED_ALIASES = new Set([
42
+ ".trash",
43
+ "skills",
44
+ "memory",
45
+ ".openclaw",
46
+ "node_modules",
47
+ ".npm-global",
48
+ ]);
49
+ export class FileMountValidationError extends Error {
50
+ mountIndex;
51
+ constructor(message, mountIndex) {
52
+ super(message);
53
+ this.mountIndex = mountIndex;
54
+ this.name = "FileMountValidationError";
55
+ }
56
+ }
57
+ /**
58
+ * Validate a complete mount set for one instance.
59
+ *
60
+ * @param mounts the proposed list (may be the result of merging defaults +
61
+ * user input); validation is total — every problem is
62
+ * surfaced, not just the first one
63
+ * @param instanceId the owning instance, used for the agent-data
64
+ * isolation rule (path = "agent-data/{otherInstance}"
65
+ * is rejected)
66
+ */
67
+ export function validateMounts(mounts, instanceId) {
68
+ const errors = [];
69
+ if (mounts.length > MAX_MOUNTS_PER_INSTANCE) {
70
+ errors.push(new FileMountValidationError(`too many mounts (${mounts.length} > ${MAX_MOUNTS_PER_INSTANCE})`));
71
+ }
72
+ const seenAliases = new Set();
73
+ let rootMountCount = 0;
74
+ mounts.forEach((m, idx) => {
75
+ // mode
76
+ if (m.mode !== "ro" && m.mode !== "rw") {
77
+ errors.push(new FileMountValidationError(`mount[${idx}].mode must be "ro" or "rw"`, idx));
78
+ }
79
+ // path
80
+ if (typeof m.path !== "string" || m.path === "") {
81
+ errors.push(new FileMountValidationError(`mount[${idx}].path must be non-empty`, idx));
82
+ }
83
+ else {
84
+ try {
85
+ validateRelativePath(m.path);
86
+ }
87
+ catch (e) {
88
+ if (e instanceof PathSafetyError) {
89
+ errors.push(new FileMountValidationError(`mount[${idx}].path invalid: ${e.message}`, idx));
90
+ }
91
+ else {
92
+ throw e;
93
+ }
94
+ }
95
+ // Reserved system paths
96
+ const topSegment = m.path.split("/")[0];
97
+ if (RESERVED_TOP_PATHS.has(topSegment)) {
98
+ errors.push(new FileMountValidationError(`mount[${idx}].path "${m.path}" is reserved (cannot mount ${topSegment})`, idx));
99
+ }
100
+ // Cross-instance agent-data isolation
101
+ if (m.path.startsWith("agent-data/") || m.path === "agent-data") {
102
+ const owner = m.path === "agent-data" ? "" : m.path.split("/")[1] ?? "";
103
+ if (owner && owner !== instanceId) {
104
+ errors.push(new FileMountValidationError(`mount[${idx}].path: agent-data/${owner} belongs to another instance`, idx));
105
+ }
106
+ }
107
+ }
108
+ // alias
109
+ if (m.alias === "" || m.alias === null) {
110
+ rootMountCount++;
111
+ }
112
+ else if (m.alias === undefined) {
113
+ // implicit alias = basename(path); validate that
114
+ const implied = (m.path ?? "").split("/").pop() ?? "";
115
+ validateAliasName(implied, idx, errors);
116
+ registerAlias(implied, idx, seenAliases, errors);
117
+ }
118
+ else if (typeof m.alias === "string") {
119
+ validateAliasName(m.alias, idx, errors);
120
+ registerAlias(m.alias, idx, seenAliases, errors);
121
+ }
122
+ else {
123
+ errors.push(new FileMountValidationError(`mount[${idx}].alias must be string, "" or null`, idx));
124
+ }
125
+ });
126
+ if (rootMountCount > 1) {
127
+ errors.push(new FileMountValidationError(`at most one root mount (alias = "" or null) is allowed; found ${rootMountCount}`));
128
+ }
129
+ if (rootMountCount === 1 && mounts.length > 1) {
130
+ errors.push(new FileMountValidationError(`root mount is exclusive — cannot combine with named mounts`));
131
+ }
132
+ return { ok: errors.length === 0, errors };
133
+ }
134
+ function validateAliasName(alias, idx, errors) {
135
+ if (!alias) {
136
+ errors.push(new FileMountValidationError(`mount[${idx}] empty alias on non-root mount`, idx));
137
+ return;
138
+ }
139
+ if (alias.includes("/") || alias.includes("\\")) {
140
+ errors.push(new FileMountValidationError(`mount[${idx}].alias cannot contain "/" or "\\\\"`, idx));
141
+ }
142
+ if (alias === "." || alias === "..") {
143
+ errors.push(new FileMountValidationError(`mount[${idx}].alias cannot be "." or ".."`, idx));
144
+ }
145
+ if (alias.startsWith(".")) {
146
+ errors.push(new FileMountValidationError(`mount[${idx}].alias cannot start with "."`, idx));
147
+ }
148
+ if (alias.includes("\0")) {
149
+ errors.push(new FileMountValidationError(`mount[${idx}].alias contains null byte`, idx));
150
+ }
151
+ if (RESERVED_ALIASES.has(alias)) {
152
+ errors.push(new FileMountValidationError(`mount[${idx}].alias "${alias}" is reserved`, idx));
153
+ }
154
+ if (alias.length > 64) {
155
+ errors.push(new FileMountValidationError(`mount[${idx}].alias too long (max 64 chars)`, idx));
156
+ }
157
+ }
158
+ function registerAlias(alias, idx, seen, errors) {
159
+ if (!alias)
160
+ return;
161
+ if (seen.has(alias)) {
162
+ errors.push(new FileMountValidationError(`mount[${idx}].alias "${alias}" duplicates an earlier mount`, idx));
163
+ }
164
+ seen.add(alias);
165
+ }
166
+ /**
167
+ * Resolve the effective alias for a mount: explicit non-empty value,
168
+ * else basename of path; root mounts (alias = "" / null) return null.
169
+ */
170
+ export function effectiveAlias(m) {
171
+ if (m.alias === null || m.alias === "")
172
+ return null;
173
+ if (m.alias === undefined) {
174
+ const last = (m.path ?? "").split("/").pop() ?? "";
175
+ return last || null;
176
+ }
177
+ return m.alias;
178
+ }
179
+ /**
180
+ * Ensure every mount target physically exists under filesRoot. Required
181
+ * before docker tries to bind-mount them — docker errors if the host
182
+ * path is missing.
183
+ *
184
+ * Side-effect: creates 0o755 directories. Will not modify existing
185
+ * directories. Throws on permission errors so the caller can surface
186
+ * a clear message.
187
+ */
188
+ export function ensureMountTargets(filesRoot, mounts) {
189
+ for (const m of mounts) {
190
+ if (!m.path)
191
+ continue;
192
+ const abs = path.join(filesRoot, m.path);
193
+ fs.mkdirSync(abs, { recursive: true });
194
+ }
195
+ }
196
+ /**
197
+ * Default mount applied to every newly created instance: the instance's
198
+ * own agent-data subtree, alias "_out". This is the directory the
199
+ * agent uses to drop output that the user is then expected to find in
200
+ * the Files page.
201
+ */
202
+ export function defaultMountsForNewInstance(instanceId) {
203
+ return [
204
+ { path: `agent-data/${instanceId}`, mode: "rw", alias: "_out" },
205
+ ];
206
+ }
207
+ //# sourceMappingURL=files-mounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files-mounts.js","sourceRoot":"","sources":["../../src/services/files-mounts.ts"],"names":[],"mappings":"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"}
@@ -133,6 +133,19 @@ export declare function getGatewayPort(instanceId: string): number;
133
133
  export declare function getListeningHostForPort(port: number): string;
134
134
  export declare function getAdvertisedHostForPort(port: number): string;
135
135
  export declare function getGatewayHost(instanceId: string): Promise<string>;
136
+ /**
137
+ * Resolve the host IP for a specific port belonging to an app's Nomad job.
138
+ *
139
+ * On macOS with Colima + docker driver the container port is bound *inside*
140
+ * the VM, not on the host. `ss` (or `netstat`) run on the macOS host see
141
+ * nothing on that port, so `getListeningHostForPort` returns 127.0.0.1 and
142
+ * the panel proxy gets a 502.
143
+ *
144
+ * This function mirrors the logic of `getGatewayHost` but matches by port
145
+ * *value* rather than by the "gateway" label, making it suitable for
146
+ * arbitrary capability ports exposed by app tasks.
147
+ */
148
+ export declare function getHostForAppPort(appId: string, port: number): Promise<string>;
136
149
  /**
137
150
  * Wrap an IPv6 literal in brackets for safe URL host-component / Host-header
138
151
  * use. Bare names ("gateway.local") and IPv4 ("127.0.0.1") contain no colon
@@ -24,7 +24,7 @@ const APPS_DIR = resolveConfigPath(getConfigValue("APPS_DIR"), join(JISHUSHELL_H
24
24
  const BACKUPS_DIR = resolveConfigPath(getConfigValue("BACKUPS_DIR"), join(JISHUSHELL_HOME, "backups"));
25
25
  const INSTANCES_DIR = resolveConfigPath(getConfigValue("INSTANCES_DIR"), join(JISHUSHELL_HOME, "instances"));
26
26
  const getPanelConfigValue = getConfigValue("getPanelConfig");
27
- const getPanelConfig = typeof getPanelConfigValue === "function"
27
+ const _getPanelConfig = typeof getPanelConfigValue === "function"
28
28
  ? getPanelConfigValue
29
29
  : () => ({});
30
30
  const _configChangeListeners = [];
@@ -98,28 +98,6 @@ export function defaultModelEnvFile(instanceId) {
98
98
  export function normalizePath(p) {
99
99
  return resolve(p.replace(/^~/, userInfo().homedir));
100
100
  }
101
- // ── JSON / deep merge ──
102
- function loadJson(path) {
103
- try {
104
- return JSON.parse(readFileSync(path, "utf-8"));
105
- }
106
- catch (e) {
107
- console.warn(`[instance] Failed to parse ${path}: ${e.message}`);
108
- return null;
109
- }
110
- }
111
- function deepMerge(base, overlay) {
112
- if (typeof base !== "object" || base === null ||
113
- typeof overlay !== "object" || overlay === null ||
114
- Array.isArray(base) || Array.isArray(overlay)) {
115
- return structuredClone(overlay);
116
- }
117
- const merged = structuredClone(base);
118
- for (const key of Object.keys(overlay)) {
119
- merged[key] = key in merged ? deepMerge(merged[key], overlay[key]) : structuredClone(overlay[key]);
120
- }
121
- return merged;
122
- }
123
101
  // ── Gateway port helpers ──
124
102
  // Track in-flight port allocations to prevent race conditions
125
103
  // between concurrent createInstance() calls.
@@ -133,13 +111,22 @@ const _pendingPorts = new Set();
133
111
  export function extractGatewayPort(runtime, agentType) {
134
112
  if (!runtime)
135
113
  return null;
136
- // Primary: RuntimeSpec.ports[] declaration first gateway-labeled port wins.
114
+ // Primary: RuntimeSpec.ports[] declaration. Prefer a port literally named
115
+ // "gateway" (the convention OpenClaw / Hermes templates use); otherwise
116
+ // fall back to the first declared port. This makes the helper work for
117
+ // generic V2 apps (SearXNG = "http", Open WebUI = "http", Ollama =
118
+ // "ollama", etc.) without forcing every template to rename its port.
137
119
  const ports = Array.isArray(runtime.ports) ? runtime.ports : [];
138
120
  for (const port of ports) {
139
121
  if (port?.name === "gateway" && Number.isInteger(port.hostPort) && port.hostPort > 0) {
140
122
  return port.hostPort;
141
123
  }
142
124
  }
125
+ for (const port of ports) {
126
+ if (Number.isInteger(port?.hostPort) && port.hostPort > 0) {
127
+ return port.hostPort;
128
+ }
129
+ }
143
130
  // Fall back to the adapter's legacy reader. Default agentType "openclaw".
144
131
  try {
145
132
  const adapter = getAdapter(agentType || "openclaw");
@@ -467,7 +454,8 @@ export function listInstances() {
467
454
  // even though the backup chain still holds valid content on disk.
468
455
  const meta = safeReadJson(metaPath, `instance:${name}`);
469
456
  if (meta) {
470
- deduped.set(name, backfillInstanceMeta(meta));
457
+ const normalised = backfillInstanceMeta(meta);
458
+ deduped.set(name, normalised);
471
459
  continue;
472
460
  }
473
461
  // safeReadJson → null can mean any of (a) primary missing + no
@@ -497,8 +485,10 @@ export function getInstance(instanceId) {
497
485
  // is still served from the .bak chain. Returning null on "truly gone"
498
486
  // (no primary, no backups) keeps the existing 404 behavior intact.
499
487
  const meta = safeReadJson(metaPath, `instance:${instanceId}`);
500
- if (meta)
501
- return backfillInstanceMeta(meta);
488
+ if (meta) {
489
+ const normalised = backfillInstanceMeta(meta);
490
+ return normalised;
491
+ }
502
492
  // safeReadJson swallows every read error internally, which is exactly
503
493
  // wrong for the EACCES case — a root-owned primary would silently
504
494
  // return null and callers would report "Instance not found" instead
@@ -876,26 +866,68 @@ export function getGatewayPort(instanceId) {
876
866
  const _gwHostCache = new Map();
877
867
  const GW_HOST_CACHE_TTL = 30000;
878
868
  export function getListeningHostForPort(port) {
879
- let result = "127.0.0.1";
880
- try {
881
- const out = execFileSync("ss", ["-tlnH", "sport", "=", ":" + safePort(port)], {
882
- encoding: "utf-8",
883
- timeout: 3000,
884
- stdio: ["pipe", "pipe", "pipe"],
885
- });
886
- for (const line of out.split("\n")) {
887
- let match = line.match(/\s([\d.]+):(\d+)\s/);
888
- if (!match)
889
- match = line.match(/\s\[([0-9a-fA-F:]+)\]:(\d+)\s/);
890
- if (match && match[2] === String(port)) {
891
- const addr = match[1];
892
- result = addr === "0.0.0.0" ? "127.0.0.1" : addr;
893
- break;
869
+ // Linux: ss is universal and parses cleanly. macOS/BSD ships lsof but
870
+ // not ss, so without this fallback execFileSync throws ENOENT, the
871
+ // catch block silently returns 127.0.0.1, and any caller that fans
872
+ // out to the wrong host fails (the capability HTTP proxy in
873
+ // `proxyProvidedCapability`, the gateway-host fallback for raw_exec
874
+ // instances, etc.). On macOS docker driver mode the actual published
875
+ // host can be e.g. 10.188.0.21 via `host_network = "external"`, never
876
+ // loopback so silently picking 127.0.0.1 leaves the panel fetching
877
+ // a host nothing is listening on.
878
+ const safe = safePort(port);
879
+ const fromSs = () => {
880
+ try {
881
+ const out = execFileSync("ss", ["-tlnH", "sport", "=", ":" + safe], {
882
+ encoding: "utf-8",
883
+ timeout: 3000,
884
+ stdio: ["pipe", "pipe", "pipe"],
885
+ });
886
+ for (const line of out.split("\n")) {
887
+ let match = line.match(/\s([\d.]+):(\d+)\s/);
888
+ if (!match)
889
+ match = line.match(/\s\[([0-9a-fA-F:]+)\]:(\d+)\s/);
890
+ if (match && match[2] === String(port))
891
+ return match[1];
894
892
  }
895
893
  }
896
- }
897
- catch { /* fall through */ }
898
- return result;
894
+ catch { /* ss not available or no match */ }
895
+ return null;
896
+ };
897
+ const fromLsof = () => {
898
+ try {
899
+ // `-FnP` keeps numeric output (no name resolution, no /etc/services).
900
+ // Lines beginning with `n` carry the bind address: e.g. `n10.188.0.21:8080`,
901
+ // `n127.0.0.1:8080`, `n[::1]:8080`, or `n*:8080` for wildcard binds.
902
+ const out = execFileSync("lsof", ["-nP", "-iTCP:" + safe, "-sTCP:LISTEN", "-FnP"], {
903
+ encoding: "utf-8",
904
+ timeout: 3000,
905
+ stdio: ["pipe", "pipe", "pipe"],
906
+ });
907
+ for (const line of out.split("\n")) {
908
+ if (!line.startsWith("n"))
909
+ continue;
910
+ const body = line.slice(1);
911
+ // IPv6 form: [::1]:8080 → strip brackets
912
+ const v6 = body.match(/^\[([0-9a-fA-F:]+)\]:(\d+)$/);
913
+ if (v6 && v6[2] === String(port))
914
+ return v6[1];
915
+ const idx = body.lastIndexOf(":");
916
+ if (idx <= 0)
917
+ continue;
918
+ const addr = body.slice(0, idx);
919
+ const portPart = body.slice(idx + 1);
920
+ if (portPart === String(port))
921
+ return addr === "*" ? "0.0.0.0" : addr;
922
+ }
923
+ }
924
+ catch { /* lsof unavailable or no match */ }
925
+ return null;
926
+ };
927
+ const detected = (process.platform === "linux" ? fromSs() : fromLsof()) ?? fromLsof() ?? fromSs();
928
+ if (!detected)
929
+ return "127.0.0.1";
930
+ return detected === "0.0.0.0" ? "127.0.0.1" : detected;
899
931
  }
900
932
  function getPrimaryIpv4Address() {
901
933
  try {
@@ -941,7 +973,13 @@ export async function getGatewayHost(instanceId) {
941
973
  }
942
974
  }
943
975
  catch { /* use fallback prefix */ }
944
- const jid = `${prefix}${instanceId}`;
976
+ // Avoid double-prefix when the instance ID already carries the
977
+ // adapter prefix (e.g. apps stored as `openclaw-c1` whose Nomad
978
+ // job name is also `openclaw-c1`). Without this guard we'd ask
979
+ // Nomad for `openclaw-openclaw-c1`, get 0 allocs, and fall back
980
+ // to the 127.0.0.1 default — which silently breaks the gateway
981
+ // proxy on docker driver where the real HostIP differs.
982
+ const jid = instanceId.startsWith(prefix) ? instanceId : `${prefix}${instanceId}`;
945
983
  const headers = { "Content-Type": "application/json" };
946
984
  const token = getNomadToken();
947
985
  if (token)
@@ -1007,6 +1045,60 @@ export async function getGatewayHost(instanceId) {
1007
1045
  _gwHostCache.set(instanceId, { host: result, ts: Date.now() });
1008
1046
  return result;
1009
1047
  }
1048
+ const _appPortHostCache = new Map();
1049
+ const APP_PORT_HOST_CACHE_TTL = 30000;
1050
+ /**
1051
+ * Resolve the host IP for a specific port belonging to an app's Nomad job.
1052
+ *
1053
+ * On macOS with Colima + docker driver the container port is bound *inside*
1054
+ * the VM, not on the host. `ss` (or `netstat`) run on the macOS host see
1055
+ * nothing on that port, so `getListeningHostForPort` returns 127.0.0.1 and
1056
+ * the panel proxy gets a 502.
1057
+ *
1058
+ * This function mirrors the logic of `getGatewayHost` but matches by port
1059
+ * *value* rather than by the "gateway" label, making it suitable for
1060
+ * arbitrary capability ports exposed by app tasks.
1061
+ */
1062
+ export async function getHostForAppPort(appId, port) {
1063
+ const cacheKey = `${appId}:${port}`;
1064
+ const cached = _appPortHostCache.get(cacheKey);
1065
+ if (cached && Date.now() - cached.ts < APP_PORT_HOST_CACHE_TTL)
1066
+ return cached.host;
1067
+ let result = "127.0.0.1";
1068
+ try {
1069
+ const { getNomadDriver, getNomadAddr, getNomadToken } = await import("../config.js");
1070
+ if (getNomadDriver() === "docker") {
1071
+ const headers = { "Content-Type": "application/json" };
1072
+ const token = getNomadToken();
1073
+ if (token)
1074
+ headers["X-Nomad-Token"] = token;
1075
+ const resp = await fetch(`${getNomadAddr()}/v1/job/${encodeURIComponent(appId)}/allocations`, { headers, signal: AbortSignal.timeout(5000) });
1076
+ if (resp.ok) {
1077
+ const allocs = await resp.json();
1078
+ const alloc = allocs.find((a) => a.ClientStatus === "running")
1079
+ ?? allocs.find((a) => a.ClientStatus === "pending");
1080
+ if (alloc) {
1081
+ const detail = await fetch(`${getNomadAddr()}/v1/allocation/${encodeURIComponent(alloc.ID)}`, { headers, signal: AbortSignal.timeout(5000) });
1082
+ if (detail.ok) {
1083
+ const d = await detail.json();
1084
+ // Bridge / host-network mode: ports listed under Shared.Ports
1085
+ const sharedPorts = d?.AllocatedResources?.Shared?.Ports ?? [];
1086
+ const matched = sharedPorts.find((p) => p.Value === port || p.To === port);
1087
+ if (matched?.HostIP && matched.HostIP !== "0.0.0.0") {
1088
+ result = matched.HostIP;
1089
+ }
1090
+ }
1091
+ }
1092
+ }
1093
+ }
1094
+ }
1095
+ catch { /* fall through to ss-based detection */ }
1096
+ if (result === "127.0.0.1") {
1097
+ result = getListeningHostForPort(port);
1098
+ }
1099
+ _appPortHostCache.set(cacheKey, { host: result, ts: Date.now() });
1100
+ return result;
1101
+ }
1010
1102
  /**
1011
1103
  * Wrap an IPv6 literal in brackets for safe URL host-component / Host-header
1012
1104
  * use. Bare names ("gateway.local") and IPv4 ("127.0.0.1") contain no colon