jishushell 0.6.5 → 0.6.18

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 (998) hide show
  1. package/apps/anythingllm-container.yaml +15 -170
  2. package/apps/browserless-chromium-container.yaml +15 -10
  3. package/apps/filebrowser-container.yaml +14 -9
  4. package/apps/hermes-container.yaml +23 -2
  5. package/apps/jishu-kb-container.yaml +29 -161
  6. package/apps/ollama-binary.yaml +32 -28
  7. package/apps/ollama-cpu-container.yaml +5 -0
  8. package/apps/ollama-with-hollama-binary.yaml +33 -28
  9. package/apps/openclaw-binary.yaml +34 -10
  10. package/apps/openclaw-container.yaml +31 -7
  11. package/apps/openclaw-with-ollama-container.yaml +8 -2
  12. package/apps/openclaw-with-searxng-container.yaml +18 -6
  13. package/apps/searxng-container.yaml +11 -6
  14. package/apps/weknora-container.yaml +21 -21
  15. package/dependencies/jishushell-panel-0.6.18.tgz +0 -0
  16. package/dist/cli/app.js +244 -213
  17. package/dist/cli/app.js.map +1 -1
  18. package/dist/cli/backup.js +15 -12
  19. package/dist/cli/backup.js.map +1 -1
  20. package/dist/cli/core.d.ts +4 -3
  21. package/dist/cli/core.js +392 -227
  22. package/dist/cli/core.js.map +1 -1
  23. package/dist/cli/doctor.d.ts +1 -1
  24. package/dist/cli/doctor.js +17 -10
  25. package/dist/cli/doctor.js.map +1 -1
  26. package/dist/cli/job.js +62 -14
  27. package/dist/cli/job.js.map +1 -1
  28. package/dist/cli/llm.js +80 -11
  29. package/dist/cli/llm.js.map +1 -1
  30. package/dist/cli/managed-list.d.ts +1 -3
  31. package/dist/cli/managed-list.js +18 -16
  32. package/dist/cli/managed-list.js.map +1 -1
  33. package/dist/cli/migrate.d.ts +2 -0
  34. package/dist/cli/migrate.js +160 -0
  35. package/dist/cli/migrate.js.map +1 -0
  36. package/dist/cli.js +1 -0
  37. package/dist/cli.js.map +1 -1
  38. package/dist/config.d.ts +23 -19
  39. package/dist/config.js +60 -49
  40. package/dist/config.js.map +1 -1
  41. package/dist/control.d.ts +6 -6
  42. package/dist/control.js +31 -23
  43. package/dist/control.js.map +1 -1
  44. package/dist/core.d.ts +5 -5
  45. package/dist/core.js +5 -5
  46. package/dist/core.js.map +1 -1
  47. package/dist/install.d.ts +2 -2
  48. package/dist/install.js +18 -18
  49. package/dist/install.js.map +1 -1
  50. package/dist/routes/apps.d.ts +1 -1
  51. package/dist/routes/apps.js +101 -193
  52. package/dist/routes/apps.js.map +1 -1
  53. package/dist/routes/auth.js +1 -1
  54. package/dist/routes/auth.js.map +1 -1
  55. package/dist/routes/backup.js +1 -1
  56. package/dist/routes/backup.js.map +1 -1
  57. package/dist/routes/external-mounts.d.ts +1 -1
  58. package/dist/routes/external-mounts.js +1 -1
  59. package/dist/routes/external-mounts.js.map +1 -1
  60. package/dist/routes/file-mounts.d.ts +4 -3
  61. package/dist/routes/file-mounts.js +51 -30
  62. package/dist/routes/file-mounts.js.map +1 -1
  63. package/dist/routes/files-organize.d.ts +2 -2
  64. package/dist/routes/files-organize.js +5 -5
  65. package/dist/routes/files-organize.js.map +1 -1
  66. package/dist/routes/files.d.ts +1 -1
  67. package/dist/routes/files.js +1 -1
  68. package/dist/routes/files.js.map +1 -1
  69. package/dist/routes/instances.d.ts +10 -4
  70. package/dist/routes/instances.js +323 -541
  71. package/dist/routes/instances.js.map +1 -1
  72. package/dist/routes/integration-apps.d.ts +14 -0
  73. package/dist/routes/integration-apps.js +81 -0
  74. package/dist/routes/integration-apps.js.map +1 -0
  75. package/dist/routes/integrations.d.ts +9 -0
  76. package/dist/routes/integrations.js +12 -0
  77. package/dist/routes/integrations.js.map +1 -0
  78. package/dist/routes/llm-proxy.js +26 -3
  79. package/dist/routes/llm-proxy.js.map +1 -1
  80. package/dist/routes/setup.js +53 -38
  81. package/dist/routes/setup.js.map +1 -1
  82. package/dist/routes/system.js +108 -68
  83. package/dist/routes/system.js.map +1 -1
  84. package/dist/routes/webdav.d.ts +1 -1
  85. package/dist/routes/webdav.js +2 -2
  86. package/dist/routes/webdav.js.map +1 -1
  87. package/dist/server.js +315 -213
  88. package/dist/server.js.map +1 -1
  89. package/dist/services/app-common/app-compiler.js +186 -0
  90. package/dist/services/app-common/app-compiler.js.map +1 -0
  91. package/dist/services/app-common/app-shared.d.ts +15 -0
  92. package/dist/services/app-common/app-shared.js +64 -0
  93. package/dist/services/app-common/app-shared.js.map +1 -0
  94. package/dist/services/app-common/capability-service.d.ts +45 -0
  95. package/dist/services/app-common/capability-service.js +331 -0
  96. package/dist/services/app-common/capability-service.js.map +1 -0
  97. package/dist/services/app-common/catalog-service.d.ts +59 -0
  98. package/dist/services/app-common/catalog-service.js +308 -0
  99. package/dist/services/app-common/catalog-service.js.map +1 -0
  100. package/dist/services/app-common/create-pipeline.d.ts +26 -0
  101. package/dist/services/app-common/create-pipeline.js +298 -0
  102. package/dist/services/app-common/create-pipeline.js.map +1 -0
  103. package/dist/services/app-common/delete-service.d.ts +5 -0
  104. package/dist/services/app-common/delete-service.js +104 -0
  105. package/dist/services/app-common/delete-service.js.map +1 -0
  106. package/dist/services/app-common/execution-owner.d.ts +23 -0
  107. package/dist/services/app-common/execution-owner.js +124 -0
  108. package/dist/services/app-common/execution-owner.js.map +1 -0
  109. package/dist/services/app-common/execution-service.d.ts +23 -0
  110. package/dist/services/app-common/execution-service.js +105 -0
  111. package/dist/services/app-common/execution-service.js.map +1 -0
  112. package/dist/services/app-common/id-normalizer.d.ts +31 -0
  113. package/dist/services/app-common/id-normalizer.js +83 -0
  114. package/dist/services/app-common/id-normalizer.js.map +1 -0
  115. package/dist/services/app-common/install-store.d.ts +34 -0
  116. package/dist/services/app-common/install-store.js +261 -0
  117. package/dist/services/app-common/install-store.js.map +1 -0
  118. package/dist/services/app-common/instance-store.d.ts +78 -0
  119. package/dist/services/app-common/instance-store.js +495 -0
  120. package/dist/services/app-common/instance-store.js.map +1 -0
  121. package/dist/services/app-common/integration-refs.d.ts +17 -0
  122. package/dist/services/app-common/integration-refs.js +47 -0
  123. package/dist/services/app-common/integration-refs.js.map +1 -0
  124. package/dist/services/app-common/lifecycle-pipeline.d.ts +62 -0
  125. package/dist/services/app-common/lifecycle-pipeline.js +317 -0
  126. package/dist/services/app-common/lifecycle-pipeline.js.map +1 -0
  127. package/dist/services/app-common/lifecycle-scripts.d.ts +38 -0
  128. package/dist/services/app-common/lifecycle-scripts.js +935 -0
  129. package/dist/services/app-common/lifecycle-scripts.js.map +1 -0
  130. package/dist/services/app-common/lifecycle-service.d.ts +68 -0
  131. package/dist/services/app-common/lifecycle-service.js +467 -0
  132. package/dist/services/app-common/lifecycle-service.js.map +1 -0
  133. package/dist/services/app-common/paths.d.ts +29 -0
  134. package/dist/services/app-common/paths.js +34 -0
  135. package/dist/services/app-common/paths.js.map +1 -0
  136. package/dist/services/app-common/platform-transform.d.ts +32 -0
  137. package/dist/services/app-common/platform-transform.js +65 -0
  138. package/dist/services/app-common/platform-transform.js.map +1 -0
  139. package/dist/services/app-common/provide-resolver.d.ts +29 -0
  140. package/dist/services/app-common/provide-resolver.js +129 -0
  141. package/dist/services/app-common/provide-resolver.js.map +1 -0
  142. package/dist/services/app-common/remote-spec.d.ts +14 -0
  143. package/dist/services/app-common/remote-spec.js +58 -0
  144. package/dist/services/app-common/remote-spec.js.map +1 -0
  145. package/dist/services/app-common/runtime-builder.d.ts +1 -0
  146. package/dist/services/app-common/runtime-builder.js +2 -0
  147. package/dist/services/app-common/runtime-builder.js.map +1 -0
  148. package/dist/services/app-common/runtime-facts.d.ts +19 -0
  149. package/dist/services/app-common/runtime-facts.js +126 -0
  150. package/dist/services/app-common/runtime-facts.js.map +1 -0
  151. package/dist/services/app-common/service.d.ts +9 -0
  152. package/dist/services/app-common/service.js +10 -0
  153. package/dist/services/app-common/service.js.map +1 -0
  154. package/dist/services/app-common/spec-materializer.d.ts +9 -0
  155. package/dist/services/app-common/spec-materializer.js +361 -0
  156. package/dist/services/app-common/spec-materializer.js.map +1 -0
  157. package/dist/services/app-common/status-refresh.d.ts +33 -0
  158. package/dist/services/app-common/status-refresh.js +759 -0
  159. package/dist/services/app-common/status-refresh.js.map +1 -0
  160. package/dist/services/app-common/task-service.d.ts +29 -0
  161. package/dist/services/app-common/task-service.js +93 -0
  162. package/dist/services/app-common/task-service.js.map +1 -0
  163. package/dist/services/app-common/terminal-session-manager.js +157 -0
  164. package/dist/services/app-common/terminal-session-manager.js.map +1 -0
  165. package/dist/services/app-modules/browserless/routes.d.ts +9 -0
  166. package/dist/services/app-modules/browserless/routes.js +517 -0
  167. package/dist/services/app-modules/browserless/routes.js.map +1 -0
  168. package/dist/services/app-modules/routes.d.ts +2 -0
  169. package/dist/services/app-modules/routes.js +5 -0
  170. package/dist/services/app-modules/routes.js.map +1 -0
  171. package/dist/services/backup/backup-admin.d.ts +95 -0
  172. package/dist/services/backup/backup-admin.js +246 -0
  173. package/dist/services/backup/backup-admin.js.map +1 -0
  174. package/dist/services/backup/backup-manager.d.ts +264 -0
  175. package/dist/services/backup/backup-manager.js +2318 -0
  176. package/dist/services/backup/backup-manager.js.map +1 -0
  177. package/dist/services/backup/backup-verify.js +240 -0
  178. package/dist/services/backup/backup-verify.js.map +1 -0
  179. package/dist/services/capabilities/browser-policy.d.ts +14 -0
  180. package/dist/services/capabilities/browser-policy.js +141 -0
  181. package/dist/services/capabilities/browser-policy.js.map +1 -0
  182. package/dist/services/capabilities/contract.d.ts +50 -0
  183. package/dist/services/capabilities/contract.js +129 -0
  184. package/dist/services/capabilities/contract.js.map +1 -0
  185. package/dist/services/capabilities/endpoint-validator.d.ts +42 -0
  186. package/dist/services/capabilities/endpoint-validator.js +114 -0
  187. package/dist/services/capabilities/endpoint-validator.js.map +1 -0
  188. package/dist/services/capabilities/health.d.ts +16 -0
  189. package/dist/services/capabilities/health.js +121 -0
  190. package/dist/services/capabilities/health.js.map +1 -0
  191. package/dist/services/capabilities/registry.d.ts +56 -0
  192. package/dist/services/capabilities/registry.js +222 -0
  193. package/dist/services/capabilities/registry.js.map +1 -0
  194. package/dist/services/capabilities/sync.d.ts +7 -0
  195. package/dist/services/capabilities/sync.js +223 -0
  196. package/dist/services/capabilities/sync.js.map +1 -0
  197. package/dist/services/capability-proxy/html-rewriters/browserless.d.ts +1 -0
  198. package/dist/services/capability-proxy/html-rewriters/browserless.js +83 -0
  199. package/dist/services/capability-proxy/html-rewriters/browserless.js.map +1 -0
  200. package/dist/services/capability-proxy/html-rewriters/index.d.ts +12 -0
  201. package/dist/services/capability-proxy/html-rewriters/index.js +25 -0
  202. package/dist/services/capability-proxy/html-rewriters/index.js.map +1 -0
  203. package/dist/services/capability-proxy/html-rewriters/jishukb.d.ts +1 -0
  204. package/dist/services/capability-proxy/html-rewriters/jishukb.js +161 -0
  205. package/dist/services/capability-proxy/html-rewriters/jishukb.js.map +1 -0
  206. package/dist/services/connections/admin.d.ts +80 -0
  207. package/dist/services/connections/admin.js +327 -0
  208. package/dist/services/connections/admin.js.map +1 -0
  209. package/dist/services/connections/apply.d.ts +110 -0
  210. package/dist/services/connections/apply.js +444 -0
  211. package/dist/services/connections/apply.js.map +1 -0
  212. package/dist/services/connections/resolver.d.ts +82 -0
  213. package/dist/services/connections/resolver.js +289 -0
  214. package/dist/services/connections/resolver.js.map +1 -0
  215. package/dist/services/connections/suggestions.d.ts +27 -0
  216. package/dist/services/connections/suggestions.js +124 -0
  217. package/dist/services/connections/suggestions.js.map +1 -0
  218. package/dist/services/connections/transactor.d.ts +39 -0
  219. package/dist/services/connections/transactor.js +307 -0
  220. package/dist/services/connections/transactor.js.map +1 -0
  221. package/dist/services/files/external-mounts.js +187 -0
  222. package/dist/services/files/external-mounts.js.map +1 -0
  223. package/dist/services/files/files-manager.d.ts +265 -0
  224. package/dist/services/files/files-manager.js +1189 -0
  225. package/dist/services/files/files-manager.js.map +1 -0
  226. package/dist/services/files/files-mounts.d.ts +42 -0
  227. package/dist/services/files/files-mounts.js +207 -0
  228. package/dist/services/files/files-mounts.js.map +1 -0
  229. package/dist/services/files/organize/applier.js +218 -0
  230. package/dist/services/files/organize/applier.js.map +1 -0
  231. package/dist/services/files/organize/rules.js +286 -0
  232. package/dist/services/files/organize/rules.js.map +1 -0
  233. package/dist/services/files/organize/scanner.js +366 -0
  234. package/dist/services/files/organize/scanner.js.map +1 -0
  235. package/dist/services/files/organize/store.js +82 -0
  236. package/dist/services/files/organize/store.js.map +1 -0
  237. package/dist/services/files/webdav/server.d.ts +47 -0
  238. package/dist/services/files/webdav/server.js +329 -0
  239. package/dist/services/files/webdav/server.js.map +1 -0
  240. package/dist/services/files/webdav/xml-builder.js.map +1 -0
  241. package/dist/services/instances/admin.d.ts +23 -0
  242. package/dist/services/instances/admin.js +218 -0
  243. package/dist/services/instances/admin.js.map +1 -0
  244. package/dist/services/instances/clone.d.ts +26 -0
  245. package/dist/services/instances/clone.js +78 -0
  246. package/dist/services/instances/clone.js.map +1 -0
  247. package/dist/services/instances/config-admin.d.ts +17 -0
  248. package/dist/services/instances/config-admin.js +181 -0
  249. package/dist/services/instances/config-admin.js.map +1 -0
  250. package/dist/services/instances/manager.d.ts +231 -0
  251. package/dist/services/instances/manager.js +1348 -0
  252. package/dist/services/instances/manager.js.map +1 -0
  253. package/dist/services/instances/passwords.js +173 -0
  254. package/dist/services/instances/passwords.js.map +1 -0
  255. package/dist/services/instances/types.d.ts +21 -0
  256. package/dist/services/instances/types.js +2 -0
  257. package/dist/services/instances/types.js.map +1 -0
  258. package/dist/services/integrations/anythingllm/integration.d.ts +25 -0
  259. package/dist/services/integrations/anythingllm/integration.js +251 -0
  260. package/dist/services/integrations/anythingllm/integration.js.map +1 -0
  261. package/dist/services/integrations/catalog.d.ts +3 -0
  262. package/dist/services/integrations/catalog.js +73 -0
  263. package/dist/services/integrations/catalog.js.map +1 -0
  264. package/dist/services/integrations/custom/integration.d.ts +28 -0
  265. package/dist/services/integrations/custom/integration.js +179 -0
  266. package/dist/services/integrations/custom/integration.js.map +1 -0
  267. package/dist/services/integrations/hermes/integration.d.ts +194 -0
  268. package/dist/services/integrations/hermes/integration.js +1669 -0
  269. package/dist/services/integrations/hermes/integration.js.map +1 -0
  270. package/dist/services/integrations/index.d.ts +40 -0
  271. package/dist/services/integrations/index.js +59 -0
  272. package/dist/services/integrations/index.js.map +1 -0
  273. package/dist/services/integrations/installable/catalog.d.ts +33 -0
  274. package/dist/services/integrations/installable/catalog.js +88 -0
  275. package/dist/services/integrations/installable/catalog.js.map +1 -0
  276. package/dist/services/integrations/installable/index.d.ts +35 -0
  277. package/dist/services/integrations/installable/index.js +170 -0
  278. package/dist/services/integrations/installable/index.js.map +1 -0
  279. package/dist/services/integrations/installable/installers/integration-probes.d.ts +50 -0
  280. package/dist/services/integrations/installable/installers/integration-probes.js +231 -0
  281. package/dist/services/integrations/installable/installers/integration-probes.js.map +1 -0
  282. package/dist/services/integrations/installable/installers/integration.d.ts +30 -0
  283. package/dist/services/integrations/installable/installers/integration.js +177 -0
  284. package/dist/services/integrations/installable/installers/integration.js.map +1 -0
  285. package/dist/services/integrations/installable/installers/registry-probe.js.map +1 -0
  286. package/dist/services/integrations/installable/installers/shell-script.d.ts +46 -0
  287. package/dist/services/integrations/installable/installers/shell-script.js +487 -0
  288. package/dist/services/integrations/installable/installers/shell-script.js.map +1 -0
  289. package/dist/services/integrations/installable/types.d.ts +130 -0
  290. package/dist/services/integrations/installable/types.js +19 -0
  291. package/dist/services/integrations/installable/types.js.map +1 -0
  292. package/dist/services/integrations/jishukb/integration.d.ts +22 -0
  293. package/dist/services/integrations/jishukb/integration.js +189 -0
  294. package/dist/services/integrations/jishukb/integration.js.map +1 -0
  295. package/dist/services/integrations/openclaw/anythingllm-shim.d.ts +46 -0
  296. package/dist/services/integrations/openclaw/anythingllm-shim.js +281 -0
  297. package/dist/services/integrations/openclaw/anythingllm-shim.js.map +1 -0
  298. package/dist/services/integrations/openclaw/drive-shim.js +490 -0
  299. package/dist/services/integrations/openclaw/drive-shim.js.map +1 -0
  300. package/dist/services/integrations/openclaw/integration.d.ts +424 -0
  301. package/dist/services/integrations/openclaw/integration.js +4402 -0
  302. package/dist/services/integrations/openclaw/integration.js.map +1 -0
  303. package/dist/services/integrations/openclaw/jishukb-shim.d.ts +48 -0
  304. package/dist/services/integrations/openclaw/jishukb-shim.js +750 -0
  305. package/dist/services/integrations/openclaw/jishukb-shim.js.map +1 -0
  306. package/dist/services/integrations/openclaw/mcporter-lite.js +276 -0
  307. package/dist/services/integrations/openclaw/mcporter-lite.js.map +1 -0
  308. package/dist/services/integrations/openclaw/mcporter.d.ts +46 -0
  309. package/dist/services/integrations/openclaw/mcporter.js +112 -0
  310. package/dist/services/integrations/openclaw/mcporter.js.map +1 -0
  311. package/dist/services/integrations/openclaw/routes.d.ts +21 -0
  312. package/dist/services/integrations/openclaw/routes.js +1191 -0
  313. package/dist/services/integrations/openclaw/routes.js.map +1 -0
  314. package/dist/services/integrations/registry.d.ts +17 -0
  315. package/dist/services/integrations/registry.js +36 -0
  316. package/dist/services/integrations/registry.js.map +1 -0
  317. package/dist/services/integrations/routes.d.ts +2 -0
  318. package/dist/services/integrations/routes.js +9 -0
  319. package/dist/services/integrations/routes.js.map +1 -0
  320. package/dist/services/integrations/types.d.ts +469 -0
  321. package/dist/services/integrations/types.js +2 -0
  322. package/dist/services/integrations/types.js.map +1 -0
  323. package/dist/services/legacy-migrator/classifier.d.ts +44 -0
  324. package/dist/services/legacy-migrator/classifier.js +309 -0
  325. package/dist/services/legacy-migrator/classifier.js.map +1 -0
  326. package/dist/services/legacy-migrator/executor.d.ts +42 -0
  327. package/dist/services/legacy-migrator/executor.js +637 -0
  328. package/dist/services/legacy-migrator/executor.js.map +1 -0
  329. package/dist/services/legacy-migrator/index.d.ts +31 -0
  330. package/dist/services/legacy-migrator/index.js +34 -0
  331. package/dist/services/legacy-migrator/index.js.map +1 -0
  332. package/dist/services/legacy-migrator/planner.d.ts +8 -0
  333. package/dist/services/legacy-migrator/planner.js +154 -0
  334. package/dist/services/legacy-migrator/planner.js.map +1 -0
  335. package/dist/services/legacy-migrator/provider-settings.d.ts +6 -0
  336. package/dist/services/legacy-migrator/provider-settings.js +72 -0
  337. package/dist/services/legacy-migrator/provider-settings.js.map +1 -0
  338. package/dist/services/legacy-migrator/report.d.ts +9 -0
  339. package/dist/services/legacy-migrator/report.js +99 -0
  340. package/dist/services/legacy-migrator/report.js.map +1 -0
  341. package/dist/services/legacy-migrator/scanner.d.ts +13 -0
  342. package/dist/services/legacy-migrator/scanner.js +157 -0
  343. package/dist/services/legacy-migrator/scanner.js.map +1 -0
  344. package/dist/services/legacy-migrator/types.d.ts +97 -0
  345. package/dist/services/legacy-migrator/types.js +23 -0
  346. package/dist/services/legacy-migrator/types.js.map +1 -0
  347. package/dist/services/llm-proxy/instance-proxy.d.ts +17 -1
  348. package/dist/services/llm-proxy/instance-proxy.js +171 -44
  349. package/dist/services/llm-proxy/instance-proxy.js.map +1 -1
  350. package/dist/services/llm-proxy/probe.js +5 -14
  351. package/dist/services/llm-proxy/probe.js.map +1 -1
  352. package/dist/services/llm-proxy/providers.js +23 -31
  353. package/dist/services/llm-proxy/providers.js.map +1 -1
  354. package/dist/services/llm-proxy/ssrf.d.ts +11 -4
  355. package/dist/services/llm-proxy/ssrf.js +45 -7
  356. package/dist/services/llm-proxy/ssrf.js.map +1 -1
  357. package/dist/services/llm-proxy/validate-key.js +16 -37
  358. package/dist/services/llm-proxy/validate-key.js.map +1 -1
  359. package/dist/services/repair/runtime-repair.d.ts +22 -0
  360. package/dist/services/repair/runtime-repair.js +307 -0
  361. package/dist/services/repair/runtime-repair.js.map +1 -0
  362. package/dist/services/runtime/driver-registry.d.ts +21 -0
  363. package/dist/services/runtime/driver-registry.js +22 -0
  364. package/dist/services/runtime/driver-registry.js.map +1 -0
  365. package/dist/services/runtime/drivers/nomad.d.ts +260 -0
  366. package/dist/services/runtime/drivers/nomad.js +3092 -0
  367. package/dist/services/runtime/drivers/nomad.js.map +1 -0
  368. package/dist/services/runtime/errors.d.ts +3 -3
  369. package/dist/services/runtime/errors.js +3 -3
  370. package/dist/services/runtime/instance.d.ts +14 -16
  371. package/dist/services/runtime/instance.js +93 -123
  372. package/dist/services/runtime/instance.js.map +1 -1
  373. package/dist/services/runtime/job-id.d.ts +1 -1
  374. package/dist/services/runtime/job-id.js +1 -1
  375. package/dist/services/runtime/mcp-shims/firewall.d.ts +2 -2
  376. package/dist/services/runtime/mcp-shims/firewall.js +2 -2
  377. package/dist/services/runtime/mcp-shims/searxng-shim.d.ts +3 -5
  378. package/dist/services/runtime/mcp-shims/searxng-shim.js +3 -5
  379. package/dist/services/runtime/mcp-shims/searxng-shim.js.map +1 -1
  380. package/dist/services/runtime/mcp-shims/write-mcp-entry.d.ts +20 -20
  381. package/dist/services/runtime/mcp-shims/write-mcp-entry.js +16 -16
  382. package/dist/services/runtime/mcp-shims/write-mcp-entry.js.map +1 -1
  383. package/dist/services/runtime/ownership-marker.d.ts +83 -0
  384. package/dist/services/runtime/ownership-marker.js +109 -0
  385. package/dist/services/runtime/ownership-marker.js.map +1 -0
  386. package/dist/services/runtime/types.d.ts +22 -501
  387. package/dist/services/runtime/types.js +0 -12
  388. package/dist/services/runtime/types.js.map +1 -1
  389. package/dist/services/runtime/workload-compiler.d.ts +17 -0
  390. package/dist/services/runtime/workload-compiler.js +525 -0
  391. package/dist/services/runtime/workload-compiler.js.map +1 -0
  392. package/dist/services/runtime/workload-types.d.ts +11 -0
  393. package/dist/services/runtime/workload-types.js +2 -0
  394. package/dist/services/runtime/workload-types.js.map +1 -0
  395. package/dist/services/setup/core-manager.d.ts +50 -0
  396. package/dist/services/setup/core-manager.js +456 -0
  397. package/dist/services/setup/core-manager.js.map +1 -0
  398. package/dist/services/setup/plugin-installer.js +136 -0
  399. package/dist/services/setup/plugin-installer.js.map +1 -0
  400. package/dist/services/setup/setup-manager.d.ts +158 -0
  401. package/dist/services/setup/setup-manager.js +2768 -0
  402. package/dist/services/setup/setup-manager.js.map +1 -0
  403. package/dist/services/system/cli-command.d.ts +5 -0
  404. package/dist/services/system/cli-command.js +18 -0
  405. package/dist/services/system/cli-command.js.map +1 -0
  406. package/dist/services/system/macos-launchd.js +312 -0
  407. package/dist/services/system/macos-launchd.js.map +1 -0
  408. package/dist/services/system/repair-orchestrator.d.ts +71 -0
  409. package/dist/services/system/repair-orchestrator.js +412 -0
  410. package/dist/services/system/repair-orchestrator.js.map +1 -0
  411. package/dist/services/system/system-monitor.js +96 -0
  412. package/dist/services/system/system-monitor.js.map +1 -0
  413. package/dist/services/system/system-ollama-provider.d.ts +14 -0
  414. package/dist/services/system/system-ollama-provider.js +129 -0
  415. package/dist/services/system/system-ollama-provider.js.map +1 -0
  416. package/dist/services/system/system-reconciler.d.ts +59 -0
  417. package/dist/services/system/system-reconciler.js +710 -0
  418. package/dist/services/system/system-reconciler.js.map +1 -0
  419. package/dist/services/system/update-manager.d.ts +43 -0
  420. package/dist/services/system/update-manager.js +315 -0
  421. package/dist/services/system/update-manager.js.map +1 -0
  422. package/dist/services/system/upgrade-finalize.d.ts +80 -0
  423. package/dist/services/system/upgrade-finalize.js +507 -0
  424. package/dist/services/system/upgrade-finalize.js.map +1 -0
  425. package/dist/services/tasks/registry.d.ts +44 -0
  426. package/dist/services/tasks/registry.js +90 -0
  427. package/dist/services/tasks/registry.js.map +1 -0
  428. package/dist/services/telemetry/activation.d.ts +6 -2
  429. package/dist/services/telemetry/activation.js +6 -2
  430. package/dist/services/telemetry/activation.js.map +1 -1
  431. package/dist/services/telemetry/heartbeat.d.ts +6 -2
  432. package/dist/services/telemetry/heartbeat.js +6 -2
  433. package/dist/services/telemetry/heartbeat.js.map +1 -1
  434. package/dist/services/workspaces/builder.d.ts +29 -0
  435. package/dist/services/workspaces/builder.js +186 -0
  436. package/dist/services/workspaces/builder.js.map +1 -0
  437. package/dist/types.d.ts +331 -45
  438. package/dist/utils/instance-lock.d.ts +2 -2
  439. package/dist/utils/instance-lock.js +2 -2
  440. package/install/jishu-install.sh +107 -26
  441. package/install/jishu-uninstall.sh +8 -0
  442. package/install/post-install.sh +162 -185
  443. package/install/post-uninstall.sh +6 -0
  444. package/node_modules/@fastify/static/.github/workflows/ci.yml +1 -1
  445. package/node_modules/@fastify/static/.github/workflows/lock-threads.yml +19 -0
  446. package/node_modules/@fastify/static/LICENSE +1 -3
  447. package/node_modules/@fastify/static/example/server-benchmark.js +39 -0
  448. package/node_modules/@fastify/static/index.js +169 -23
  449. package/node_modules/@fastify/static/lib/dirList.js +20 -6
  450. package/node_modules/@fastify/static/package.json +10 -8
  451. package/node_modules/@fastify/static/test/dir-list.test.js +82 -0
  452. package/node_modules/@fastify/static/test/static.test.js +326 -4
  453. package/node_modules/@fastify/static/types/index.d.ts +0 -4
  454. package/node_modules/@fastify/static/types/index.test-d.ts +1 -1
  455. package/node_modules/content-disposition/README.md +21 -22
  456. package/node_modules/content-disposition/index.js +122 -44
  457. package/node_modules/content-disposition/package.json +16 -20
  458. package/node_modules/glob/README.md +39 -130
  459. package/node_modules/glob/dist/commonjs/glob.d.ts +8 -0
  460. package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
  461. package/node_modules/glob/dist/commonjs/glob.js +2 -1
  462. package/node_modules/glob/dist/commonjs/glob.js.map +1 -1
  463. package/node_modules/glob/dist/commonjs/index.min.js +4 -0
  464. package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
  465. package/node_modules/glob/dist/commonjs/pattern.d.ts +3 -0
  466. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
  467. package/node_modules/glob/dist/commonjs/pattern.js +4 -0
  468. package/node_modules/glob/dist/commonjs/pattern.js.map +1 -1
  469. package/node_modules/glob/dist/esm/glob.d.ts +8 -0
  470. package/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
  471. package/node_modules/glob/dist/esm/glob.js +2 -1
  472. package/node_modules/glob/dist/esm/glob.js.map +1 -1
  473. package/node_modules/glob/dist/esm/index.min.js +4 -0
  474. package/node_modules/glob/dist/esm/index.min.js.map +7 -0
  475. package/node_modules/glob/dist/esm/pattern.d.ts +3 -0
  476. package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
  477. package/node_modules/glob/dist/esm/pattern.js +4 -0
  478. package/node_modules/glob/dist/esm/pattern.js.map +1 -1
  479. package/node_modules/glob/package.json +38 -37
  480. package/node_modules/jishushell-panel/README.md +4 -4
  481. package/node_modules/jishushell-panel/output/dist/server.js +17 -6
  482. package/node_modules/jishushell-panel/output/dist/server.js.map +1 -1
  483. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-NKcbHjNz.js +1 -0
  484. package/node_modules/jishushell-panel/output/public/assets/Dashboard-Da1fL38t.js +1 -0
  485. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-DZvmYsoh.js +1 -0
  486. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-BLUWlKwm.js +4 -0
  487. package/node_modules/jishushell-panel/output/public/assets/InitPassword-BAKsshzk.js +1 -0
  488. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-Dgyc_TX5.js +14 -0
  489. package/node_modules/jishushell-panel/output/public/assets/Login-DHeOmwI8.js +1 -0
  490. package/node_modules/jishushell-panel/output/public/assets/NewInstance-CIy0cYtp.js +1 -0
  491. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-H0ByEYF0.js +1 -0
  492. package/node_modules/jishushell-panel/output/public/assets/Settings-DAT-UMfP.js +1 -0
  493. package/node_modules/jishushell-panel/output/public/assets/Setup-g3uckFYR.js +1 -0
  494. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-D-T6BxkQ.js +1 -0
  495. package/node_modules/jishushell-panel/output/public/assets/api-C70Gt678.js +4 -0
  496. package/node_modules/jishushell-panel/output/public/assets/index-DnnqTf7s.css +1 -0
  497. package/node_modules/jishushell-panel/output/public/assets/index-ERt6_ngA.js +23 -0
  498. package/node_modules/jishushell-panel/output/public/assets/registry-DF93EzIb.js +2 -0
  499. package/node_modules/jishushell-panel/output/public/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  500. package/node_modules/jishushell-panel/output/public/assets/setup-task-q21GnI0E.js +1 -0
  501. package/node_modules/jishushell-panel/output/public/assets/usePolling-DeoThIQn.js +1 -0
  502. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-CS8DFbkQ.js +1 -0
  503. package/node_modules/jishushell-panel/output/public/assets/vendor-react-Cc84NArf.js +8 -0
  504. package/node_modules/jishushell-panel/output/public/index.html +6 -4
  505. package/node_modules/jishushell-panel/package.json +2 -2
  506. package/node_modules/semver/classes/range.js +11 -2
  507. package/node_modules/semver/package.json +2 -2
  508. package/package.json +12 -64
  509. package/scripts/check-app-path-boundaries.mjs +121 -0
  510. package/scripts/check-app-spec.mjs +127 -25
  511. package/scripts/check-colima-launchd.mjs +10 -8
  512. package/scripts/check-integration-isolation.ts +541 -0
  513. package/scripts/check-new-file-tests.mjs +11 -3
  514. package/scripts/check-open-core-boundaries.mjs +60 -10
  515. package/scripts/check-test-layering.sh +1 -1
  516. package/scripts/fixtures/instances/hermes-sample/instance.json +3 -2
  517. package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +1 -1
  518. package/scripts/local-web-upgrade-test.README +4 -3
  519. package/scripts/local-web-upgrade-test.example.env +2 -2
  520. package/scripts/local-web-upgrade-test.sh +14 -1
  521. package/scripts/pack-gui-and-send-pi.sh +41 -0
  522. package/scripts/perf/instances.js +1 -1
  523. package/scripts/prune-open-core-dist.mjs +89 -2
  524. package/scripts/smoke/hermes-bootstrap.sh +5 -5
  525. package/templates/hermes-entrypoint.sh +19 -29
  526. package/apps/openwebui-container.yaml +0 -97
  527. package/apps/playwright-container.yaml +0 -126
  528. package/dependencies/jishushell-panel-0.6.5.tgz +0 -0
  529. package/dist/crypto-shim.d.ts +0 -1
  530. package/dist/crypto-shim.js +0 -2
  531. package/dist/crypto-shim.js.map +0 -1
  532. package/dist/routes/agent-apps.d.ts +0 -14
  533. package/dist/routes/agent-apps.js +0 -77
  534. package/dist/routes/agent-apps.js.map +0 -1
  535. package/dist/routes/internal.d.ts +0 -2
  536. package/dist/routes/internal.js +0 -55
  537. package/dist/routes/internal.js.map +0 -1
  538. package/dist/routes/openclaw-routes.d.ts +0 -22
  539. package/dist/routes/openclaw-routes.js +0 -1020
  540. package/dist/routes/openclaw-routes.js.map +0 -1
  541. package/dist/routes/runtime.d.ts +0 -15
  542. package/dist/routes/runtime.js +0 -76
  543. package/dist/routes/runtime.js.map +0 -1
  544. package/dist/services/agent-apps/catalog.d.ts +0 -33
  545. package/dist/services/agent-apps/catalog.js +0 -88
  546. package/dist/services/agent-apps/catalog.js.map +0 -1
  547. package/dist/services/agent-apps/index.d.ts +0 -36
  548. package/dist/services/agent-apps/index.js +0 -171
  549. package/dist/services/agent-apps/index.js.map +0 -1
  550. package/dist/services/agent-apps/installers/adapter-probes.d.ts +0 -49
  551. package/dist/services/agent-apps/installers/adapter-probes.js +0 -230
  552. package/dist/services/agent-apps/installers/adapter-probes.js.map +0 -1
  553. package/dist/services/agent-apps/installers/adapter.d.ts +0 -30
  554. package/dist/services/agent-apps/installers/adapter.js +0 -171
  555. package/dist/services/agent-apps/installers/adapter.js.map +0 -1
  556. package/dist/services/agent-apps/installers/registry-probe.js.map +0 -1
  557. package/dist/services/agent-apps/installers/shell-script.d.ts +0 -47
  558. package/dist/services/agent-apps/installers/shell-script.js +0 -488
  559. package/dist/services/agent-apps/installers/shell-script.js.map +0 -1
  560. package/dist/services/agent-apps/types.d.ts +0 -128
  561. package/dist/services/agent-apps/types.js +0 -17
  562. package/dist/services/agent-apps/types.js.map +0 -1
  563. package/dist/services/app/app-compiler.js +0 -185
  564. package/dist/services/app/app-compiler.js.map +0 -1
  565. package/dist/services/app/app-manager.d.ts +0 -184
  566. package/dist/services/app/app-manager.js +0 -2933
  567. package/dist/services/app/app-manager.js.map +0 -1
  568. package/dist/services/app/custom-manager.d.ts +0 -27
  569. package/dist/services/app/custom-manager.js +0 -382
  570. package/dist/services/app/custom-manager.js.map +0 -1
  571. package/dist/services/app/hermes-agent-manager.d.ts +0 -20
  572. package/dist/services/app/hermes-agent-manager.js +0 -299
  573. package/dist/services/app/hermes-agent-manager.js.map +0 -1
  574. package/dist/services/app/id-normalizer.d.ts +0 -27
  575. package/dist/services/app/id-normalizer.js +0 -77
  576. package/dist/services/app/id-normalizer.js.map +0 -1
  577. package/dist/services/app/ollama-manager.d.ts +0 -18
  578. package/dist/services/app/ollama-manager.js +0 -224
  579. package/dist/services/app/ollama-manager.js.map +0 -1
  580. package/dist/services/app/openclaw-manager.d.ts +0 -63
  581. package/dist/services/app/openclaw-manager.js +0 -1215
  582. package/dist/services/app/openclaw-manager.js.map +0 -1
  583. package/dist/services/app/paths.d.ts +0 -27
  584. package/dist/services/app/paths.js +0 -40
  585. package/dist/services/app/paths.js.map +0 -1
  586. package/dist/services/app/platform-transform.d.ts +0 -32
  587. package/dist/services/app/platform-transform.js +0 -65
  588. package/dist/services/app/platform-transform.js.map +0 -1
  589. package/dist/services/app/provide-resolver.d.ts +0 -29
  590. package/dist/services/app/provide-resolver.js +0 -135
  591. package/dist/services/app/provide-resolver.js.map +0 -1
  592. package/dist/services/app/registry.d.ts +0 -17
  593. package/dist/services/app/registry.js +0 -31
  594. package/dist/services/app/registry.js.map +0 -1
  595. package/dist/services/app/remote-spec.d.ts +0 -14
  596. package/dist/services/app/remote-spec.js +0 -58
  597. package/dist/services/app/remote-spec.js.map +0 -1
  598. package/dist/services/app/terminal-session-manager.js +0 -157
  599. package/dist/services/app/terminal-session-manager.js.map +0 -1
  600. package/dist/services/app/types.d.ts +0 -74
  601. package/dist/services/app/types.js +0 -16
  602. package/dist/services/app/types.js.map +0 -1
  603. package/dist/services/app-config-admin.d.ts +0 -17
  604. package/dist/services/app-config-admin.js +0 -177
  605. package/dist/services/app-config-admin.js.map +0 -1
  606. package/dist/services/app-create-from-installed.d.ts +0 -23
  607. package/dist/services/app-create-from-installed.js +0 -75
  608. package/dist/services/app-create-from-installed.js.map +0 -1
  609. package/dist/services/app-passwords.js +0 -173
  610. package/dist/services/app-passwords.js.map +0 -1
  611. package/dist/services/backup-admin.d.ts +0 -101
  612. package/dist/services/backup-admin.js +0 -259
  613. package/dist/services/backup-admin.js.map +0 -1
  614. package/dist/services/backup-manager.d.ts +0 -264
  615. package/dist/services/backup-manager.js +0 -2263
  616. package/dist/services/backup-manager.js.map +0 -1
  617. package/dist/services/backup-verify.js +0 -240
  618. package/dist/services/backup-verify.js.map +0 -1
  619. package/dist/services/capability-endpoint-validator.d.ts +0 -41
  620. package/dist/services/capability-endpoint-validator.js +0 -114
  621. package/dist/services/capability-endpoint-validator.js.map +0 -1
  622. package/dist/services/capability-health.d.ts +0 -16
  623. package/dist/services/capability-health.js +0 -121
  624. package/dist/services/capability-health.js.map +0 -1
  625. package/dist/services/capability-registry.d.ts +0 -29
  626. package/dist/services/capability-registry.js +0 -176
  627. package/dist/services/capability-registry.js.map +0 -1
  628. package/dist/services/capability-sync.d.ts +0 -4
  629. package/dist/services/capability-sync.js +0 -220
  630. package/dist/services/capability-sync.js.map +0 -1
  631. package/dist/services/connection-admin.d.ts +0 -74
  632. package/dist/services/connection-admin.js +0 -287
  633. package/dist/services/connection-admin.js.map +0 -1
  634. package/dist/services/connection-apply.d.ts +0 -91
  635. package/dist/services/connection-apply.js +0 -471
  636. package/dist/services/connection-apply.js.map +0 -1
  637. package/dist/services/connection-resolver.d.ts +0 -65
  638. package/dist/services/connection-resolver.js +0 -281
  639. package/dist/services/connection-resolver.js.map +0 -1
  640. package/dist/services/connection-transactor.d.ts +0 -39
  641. package/dist/services/connection-transactor.js +0 -354
  642. package/dist/services/connection-transactor.js.map +0 -1
  643. package/dist/services/core-manager.d.ts +0 -50
  644. package/dist/services/core-manager.js +0 -411
  645. package/dist/services/core-manager.js.map +0 -1
  646. package/dist/services/external-mounts.js +0 -187
  647. package/dist/services/external-mounts.js.map +0 -1
  648. package/dist/services/files-manager.d.ts +0 -252
  649. package/dist/services/files-manager.js +0 -1156
  650. package/dist/services/files-manager.js.map +0 -1
  651. package/dist/services/files-mounts.d.ts +0 -42
  652. package/dist/services/files-mounts.js +0 -207
  653. package/dist/services/files-mounts.js.map +0 -1
  654. package/dist/services/instance-admin.d.ts +0 -26
  655. package/dist/services/instance-admin.js +0 -218
  656. package/dist/services/instance-admin.js.map +0 -1
  657. package/dist/services/instance-manager.d.ts +0 -192
  658. package/dist/services/instance-manager.js +0 -1289
  659. package/dist/services/instance-manager.js.map +0 -1
  660. package/dist/services/macos-launchd.js +0 -312
  661. package/dist/services/macos-launchd.js.map +0 -1
  662. package/dist/services/nomad-manager.d.ts +0 -307
  663. package/dist/services/nomad-manager.js +0 -3958
  664. package/dist/services/nomad-manager.js.map +0 -1
  665. package/dist/services/organize/applier.js +0 -218
  666. package/dist/services/organize/applier.js.map +0 -1
  667. package/dist/services/organize/rules.js +0 -286
  668. package/dist/services/organize/rules.js.map +0 -1
  669. package/dist/services/organize/scanner.js +0 -366
  670. package/dist/services/organize/scanner.js.map +0 -1
  671. package/dist/services/organize/store.js +0 -82
  672. package/dist/services/organize/store.js.map +0 -1
  673. package/dist/services/plugin-installer.js +0 -128
  674. package/dist/services/plugin-installer.js.map +0 -1
  675. package/dist/services/process-manager.d.ts +0 -25
  676. package/dist/services/process-manager.js +0 -568
  677. package/dist/services/process-manager.js.map +0 -1
  678. package/dist/services/runtime/adapters/custom.d.ts +0 -20
  679. package/dist/services/runtime/adapters/custom.js +0 -188
  680. package/dist/services/runtime/adapters/custom.js.map +0 -1
  681. package/dist/services/runtime/adapters/hermes.d.ts +0 -204
  682. package/dist/services/runtime/adapters/hermes.js +0 -1684
  683. package/dist/services/runtime/adapters/hermes.js.map +0 -1
  684. package/dist/services/runtime/adapters/openclaw-mcporter.d.ts +0 -45
  685. package/dist/services/runtime/adapters/openclaw-mcporter.js +0 -108
  686. package/dist/services/runtime/adapters/openclaw-mcporter.js.map +0 -1
  687. package/dist/services/runtime/adapters/openclaw.d.ts +0 -426
  688. package/dist/services/runtime/adapters/openclaw.js +0 -3975
  689. package/dist/services/runtime/adapters/openclaw.js.map +0 -1
  690. package/dist/services/runtime/index.d.ts +0 -34
  691. package/dist/services/runtime/index.js +0 -51
  692. package/dist/services/runtime/index.js.map +0 -1
  693. package/dist/services/runtime/mcp-shims/anythingllm-shim.d.ts +0 -46
  694. package/dist/services/runtime/mcp-shims/anythingllm-shim.js +0 -281
  695. package/dist/services/runtime/mcp-shims/anythingllm-shim.js.map +0 -1
  696. package/dist/services/runtime/mcp-shims/drive-shim.js +0 -490
  697. package/dist/services/runtime/mcp-shims/drive-shim.js.map +0 -1
  698. package/dist/services/runtime/mcp-shims/jishukb-shim.d.ts +0 -48
  699. package/dist/services/runtime/mcp-shims/jishukb-shim.js +0 -723
  700. package/dist/services/runtime/mcp-shims/jishukb-shim.js.map +0 -1
  701. package/dist/services/runtime/mcp-shims/mcporter-lite.js +0 -276
  702. package/dist/services/runtime/mcp-shims/mcporter-lite.js.map +0 -1
  703. package/dist/services/runtime/migrations.d.ts +0 -23
  704. package/dist/services/runtime/migrations.js +0 -125
  705. package/dist/services/runtime/migrations.js.map +0 -1
  706. package/dist/services/runtime/registry.d.ts +0 -13
  707. package/dist/services/runtime/registry.js +0 -32
  708. package/dist/services/runtime/registry.js.map +0 -1
  709. package/dist/services/runtime-identity.d.ts +0 -13
  710. package/dist/services/runtime-identity.js +0 -166
  711. package/dist/services/runtime-identity.js.map +0 -1
  712. package/dist/services/runtime-repair.d.ts +0 -52
  713. package/dist/services/runtime-repair.js +0 -352
  714. package/dist/services/runtime-repair.js.map +0 -1
  715. package/dist/services/setup-manager.d.ts +0 -158
  716. package/dist/services/setup-manager.js +0 -2740
  717. package/dist/services/setup-manager.js.map +0 -1
  718. package/dist/services/suggestions.d.ts +0 -27
  719. package/dist/services/suggestions.js +0 -133
  720. package/dist/services/suggestions.js.map +0 -1
  721. package/dist/services/system-monitor.js +0 -79
  722. package/dist/services/system-monitor.js.map +0 -1
  723. package/dist/services/system-ollama-provider.d.ts +0 -14
  724. package/dist/services/system-ollama-provider.js +0 -125
  725. package/dist/services/system-ollama-provider.js.map +0 -1
  726. package/dist/services/system-reconciler.d.ts +0 -72
  727. package/dist/services/system-reconciler.js +0 -600
  728. package/dist/services/system-reconciler.js.map +0 -1
  729. package/dist/services/task-registry.d.ts +0 -44
  730. package/dist/services/task-registry.js +0 -76
  731. package/dist/services/task-registry.js.map +0 -1
  732. package/dist/services/types-shim.d.ts +0 -16
  733. package/dist/services/types-shim.js +0 -2
  734. package/dist/services/types-shim.js.map +0 -1
  735. package/dist/services/update-manager.d.ts +0 -47
  736. package/dist/services/update-manager.js +0 -351
  737. package/dist/services/update-manager.js.map +0 -1
  738. package/dist/services/webdav/server.d.ts +0 -24
  739. package/dist/services/webdav/server.js +0 -420
  740. package/dist/services/webdav/server.js.map +0 -1
  741. package/dist/services/webdav/xml-builder.js.map +0 -1
  742. package/dist/services/workspace-builder.d.ts +0 -29
  743. package/dist/services/workspace-builder.js +0 -188
  744. package/dist/services/workspace-builder.js.map +0 -1
  745. package/node_modules/@fastify/static/.github/stale.yml +0 -21
  746. package/node_modules/@isaacs/cliui/LICENSE.md +0 -63
  747. package/node_modules/@isaacs/cliui/README.md +0 -151
  748. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts +0 -4
  749. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts.map +0 -1
  750. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js +0 -16
  751. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js.map +0 -1
  752. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts +0 -34
  753. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts.map +0 -1
  754. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js +0 -170
  755. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js.map +0 -1
  756. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts +0 -6
  757. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts.map +0 -1
  758. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js +0 -307
  759. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js.map +0 -1
  760. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts +0 -2
  761. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts.map +0 -1
  762. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js +0 -7
  763. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js.map +0 -1
  764. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts +0 -41
  765. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts.map +0 -1
  766. package/node_modules/@isaacs/cliui/dist/commonjs/index.js +0 -322
  767. package/node_modules/@isaacs/cliui/dist/commonjs/index.js.map +0 -1
  768. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js +0 -12
  769. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js.map +0 -7
  770. package/node_modules/@isaacs/cliui/dist/commonjs/package.json +0 -3
  771. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts +0 -5
  772. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts.map +0 -1
  773. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js +0 -49
  774. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js.map +0 -1
  775. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts +0 -2
  776. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts.map +0 -1
  777. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js +0 -8
  778. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js.map +0 -1
  779. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts +0 -7
  780. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts.map +0 -1
  781. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js +0 -176
  782. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js.map +0 -1
  783. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts +0 -4
  784. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts.map +0 -1
  785. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js +0 -12
  786. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js.map +0 -1
  787. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts +0 -34
  788. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts.map +0 -1
  789. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js +0 -167
  790. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js.map +0 -1
  791. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts +0 -6
  792. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts.map +0 -1
  793. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js +0 -299
  794. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js.map +0 -1
  795. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts +0 -2
  796. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts.map +0 -1
  797. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js +0 -3
  798. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js.map +0 -1
  799. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts +0 -41
  800. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts.map +0 -1
  801. package/node_modules/@isaacs/cliui/dist/esm/index.js +0 -317
  802. package/node_modules/@isaacs/cliui/dist/esm/index.js.map +0 -1
  803. package/node_modules/@isaacs/cliui/dist/esm/index.min.js +0 -12
  804. package/node_modules/@isaacs/cliui/dist/esm/index.min.js.map +0 -7
  805. package/node_modules/@isaacs/cliui/dist/esm/package.json +0 -3
  806. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts +0 -5
  807. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts.map +0 -1
  808. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js +0 -46
  809. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js.map +0 -1
  810. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts +0 -2
  811. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts.map +0 -1
  812. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js +0 -4
  813. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js.map +0 -1
  814. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts +0 -7
  815. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts.map +0 -1
  816. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js +0 -172
  817. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js.map +0 -1
  818. package/node_modules/@isaacs/cliui/package.json +0 -163
  819. package/node_modules/content-disposition/HISTORY.md +0 -60
  820. package/node_modules/cross-spawn/LICENSE +0 -21
  821. package/node_modules/cross-spawn/README.md +0 -89
  822. package/node_modules/cross-spawn/index.js +0 -39
  823. package/node_modules/cross-spawn/lib/enoent.js +0 -59
  824. package/node_modules/cross-spawn/lib/parse.js +0 -91
  825. package/node_modules/cross-spawn/lib/util/escape.js +0 -47
  826. package/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
  827. package/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
  828. package/node_modules/cross-spawn/package.json +0 -73
  829. package/node_modules/foreground-child/LICENSE +0 -15
  830. package/node_modules/foreground-child/README.md +0 -128
  831. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts +0 -2
  832. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map +0 -1
  833. package/node_modules/foreground-child/dist/commonjs/all-signals.js +0 -58
  834. package/node_modules/foreground-child/dist/commonjs/all-signals.js.map +0 -1
  835. package/node_modules/foreground-child/dist/commonjs/index.d.ts +0 -58
  836. package/node_modules/foreground-child/dist/commonjs/index.d.ts.map +0 -1
  837. package/node_modules/foreground-child/dist/commonjs/index.js +0 -123
  838. package/node_modules/foreground-child/dist/commonjs/index.js.map +0 -1
  839. package/node_modules/foreground-child/dist/commonjs/package.json +0 -3
  840. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts +0 -6
  841. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map +0 -1
  842. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js +0 -38
  843. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js.map +0 -1
  844. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts +0 -10
  845. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map +0 -1
  846. package/node_modules/foreground-child/dist/commonjs/watchdog.js +0 -50
  847. package/node_modules/foreground-child/dist/commonjs/watchdog.js.map +0 -1
  848. package/node_modules/foreground-child/dist/esm/all-signals.d.ts +0 -2
  849. package/node_modules/foreground-child/dist/esm/all-signals.d.ts.map +0 -1
  850. package/node_modules/foreground-child/dist/esm/all-signals.js +0 -52
  851. package/node_modules/foreground-child/dist/esm/all-signals.js.map +0 -1
  852. package/node_modules/foreground-child/dist/esm/index.d.ts +0 -58
  853. package/node_modules/foreground-child/dist/esm/index.d.ts.map +0 -1
  854. package/node_modules/foreground-child/dist/esm/index.js +0 -115
  855. package/node_modules/foreground-child/dist/esm/index.js.map +0 -1
  856. package/node_modules/foreground-child/dist/esm/package.json +0 -3
  857. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts +0 -6
  858. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map +0 -1
  859. package/node_modules/foreground-child/dist/esm/proxy-signals.js +0 -34
  860. package/node_modules/foreground-child/dist/esm/proxy-signals.js.map +0 -1
  861. package/node_modules/foreground-child/dist/esm/watchdog.d.ts +0 -10
  862. package/node_modules/foreground-child/dist/esm/watchdog.d.ts.map +0 -1
  863. package/node_modules/foreground-child/dist/esm/watchdog.js +0 -46
  864. package/node_modules/foreground-child/dist/esm/watchdog.js.map +0 -1
  865. package/node_modules/foreground-child/package.json +0 -106
  866. package/node_modules/glob/dist/esm/bin.d.mts +0 -3
  867. package/node_modules/glob/dist/esm/bin.d.mts.map +0 -1
  868. package/node_modules/glob/dist/esm/bin.mjs +0 -346
  869. package/node_modules/glob/dist/esm/bin.mjs.map +0 -1
  870. package/node_modules/isexe/.npmignore +0 -2
  871. package/node_modules/isexe/LICENSE +0 -15
  872. package/node_modules/isexe/README.md +0 -51
  873. package/node_modules/isexe/index.js +0 -57
  874. package/node_modules/isexe/mode.js +0 -41
  875. package/node_modules/isexe/package.json +0 -31
  876. package/node_modules/isexe/test/basic.js +0 -221
  877. package/node_modules/isexe/windows.js +0 -42
  878. package/node_modules/jackspeak/LICENSE.md +0 -55
  879. package/node_modules/jackspeak/README.md +0 -394
  880. package/node_modules/jackspeak/dist/commonjs/index.d.ts +0 -323
  881. package/node_modules/jackspeak/dist/commonjs/index.d.ts.map +0 -1
  882. package/node_modules/jackspeak/dist/commonjs/index.js +0 -944
  883. package/node_modules/jackspeak/dist/commonjs/index.js.map +0 -1
  884. package/node_modules/jackspeak/dist/commonjs/index.min.js +0 -33
  885. package/node_modules/jackspeak/dist/commonjs/index.min.js.map +0 -7
  886. package/node_modules/jackspeak/dist/commonjs/package.json +0 -3
  887. package/node_modules/jackspeak/dist/esm/index.d.ts +0 -323
  888. package/node_modules/jackspeak/dist/esm/index.d.ts.map +0 -1
  889. package/node_modules/jackspeak/dist/esm/index.js +0 -936
  890. package/node_modules/jackspeak/dist/esm/index.js.map +0 -1
  891. package/node_modules/jackspeak/dist/esm/index.min.js +0 -33
  892. package/node_modules/jackspeak/dist/esm/index.min.js.map +0 -7
  893. package/node_modules/jackspeak/dist/esm/package.json +0 -3
  894. package/node_modules/jackspeak/package.json +0 -115
  895. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-D1i7zWXR.js +0 -1
  896. package/node_modules/jishushell-panel/output/public/assets/Dashboard-sWIvL43F.js +0 -1
  897. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-DQ8RyvQY.js +0 -1
  898. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-tIbPP1sB.js +0 -4
  899. package/node_modules/jishushell-panel/output/public/assets/InitPassword-C3Slq3Dd.js +0 -1
  900. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-7JqY9tq4.js +0 -92
  901. package/node_modules/jishushell-panel/output/public/assets/Login-BXLDJlQN.js +0 -1
  902. package/node_modules/jishushell-panel/output/public/assets/NewInstance-dLc5Xrpx.js +0 -1
  903. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-DIAXxesl.js +0 -1
  904. package/node_modules/jishushell-panel/output/public/assets/Settings-Bd5utbBh.js +0 -1
  905. package/node_modules/jishushell-panel/output/public/assets/Setup-Yn9_20FL.js +0 -1
  906. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-C21doQTJ.js +0 -9
  907. package/node_modules/jishushell-panel/output/public/assets/index-CCkaIEjn.js +0 -20
  908. package/node_modules/jishushell-panel/output/public/assets/index-D7qxy-Vh.css +0 -1
  909. package/node_modules/jishushell-panel/output/public/assets/registry-B2ZQZXWL.js +0 -2
  910. package/node_modules/jishushell-panel/output/public/assets/usePolling-BFZm4do_.js +0 -1
  911. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-DqPtOicc.js +0 -9
  912. package/node_modules/jishushell-panel/output/public/assets/vendor-react-DW5juQin.js +0 -59
  913. package/node_modules/package-json-from-dist/LICENSE.md +0 -63
  914. package/node_modules/package-json-from-dist/README.md +0 -110
  915. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +0 -89
  916. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +0 -1
  917. package/node_modules/package-json-from-dist/dist/commonjs/index.js +0 -134
  918. package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +0 -1
  919. package/node_modules/package-json-from-dist/dist/commonjs/package.json +0 -3
  920. package/node_modules/package-json-from-dist/dist/esm/index.d.ts +0 -89
  921. package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +0 -1
  922. package/node_modules/package-json-from-dist/dist/esm/index.js +0 -129
  923. package/node_modules/package-json-from-dist/dist/esm/index.js.map +0 -1
  924. package/node_modules/package-json-from-dist/dist/esm/package.json +0 -3
  925. package/node_modules/package-json-from-dist/package.json +0 -68
  926. package/node_modules/path-key/index.d.ts +0 -40
  927. package/node_modules/path-key/index.js +0 -16
  928. package/node_modules/path-key/license +0 -9
  929. package/node_modules/path-key/package.json +0 -39
  930. package/node_modules/path-key/readme.md +0 -61
  931. package/node_modules/safe-buffer/LICENSE +0 -21
  932. package/node_modules/safe-buffer/README.md +0 -584
  933. package/node_modules/safe-buffer/index.d.ts +0 -187
  934. package/node_modules/safe-buffer/index.js +0 -65
  935. package/node_modules/safe-buffer/package.json +0 -51
  936. package/node_modules/shebang-command/index.js +0 -19
  937. package/node_modules/shebang-command/license +0 -9
  938. package/node_modules/shebang-command/package.json +0 -34
  939. package/node_modules/shebang-command/readme.md +0 -34
  940. package/node_modules/shebang-regex/index.d.ts +0 -22
  941. package/node_modules/shebang-regex/index.js +0 -2
  942. package/node_modules/shebang-regex/license +0 -9
  943. package/node_modules/shebang-regex/package.json +0 -35
  944. package/node_modules/shebang-regex/readme.md +0 -33
  945. package/node_modules/signal-exit/LICENSE.txt +0 -16
  946. package/node_modules/signal-exit/README.md +0 -74
  947. package/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
  948. package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
  949. package/node_modules/signal-exit/dist/cjs/browser.js +0 -10
  950. package/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
  951. package/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
  952. package/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
  953. package/node_modules/signal-exit/dist/cjs/index.js +0 -279
  954. package/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
  955. package/node_modules/signal-exit/dist/cjs/package.json +0 -3
  956. package/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
  957. package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
  958. package/node_modules/signal-exit/dist/cjs/signals.js +0 -42
  959. package/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
  960. package/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
  961. package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
  962. package/node_modules/signal-exit/dist/mjs/browser.js +0 -4
  963. package/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
  964. package/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
  965. package/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
  966. package/node_modules/signal-exit/dist/mjs/index.js +0 -275
  967. package/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
  968. package/node_modules/signal-exit/dist/mjs/package.json +0 -3
  969. package/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
  970. package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
  971. package/node_modules/signal-exit/dist/mjs/signals.js +0 -39
  972. package/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
  973. package/node_modules/signal-exit/package.json +0 -106
  974. package/node_modules/which/CHANGELOG.md +0 -166
  975. package/node_modules/which/LICENSE +0 -15
  976. package/node_modules/which/README.md +0 -54
  977. package/node_modules/which/bin/node-which +0 -52
  978. package/node_modules/which/package.json +0 -43
  979. package/node_modules/which/which.js +0 -125
  980. package/scripts/check-adapter-isolation.ts +0 -293
  981. /package/dist/services/{app → app-common}/app-compiler.d.ts +0 -0
  982. /package/dist/services/{app → app-common}/terminal-session-manager.d.ts +0 -0
  983. /package/dist/services/{backup-verify.d.ts → backup/backup-verify.d.ts} +0 -0
  984. /package/dist/services/{external-mounts.d.ts → files/external-mounts.d.ts} +0 -0
  985. /package/dist/services/{organize → files/organize}/applier.d.ts +0 -0
  986. /package/dist/services/{organize → files/organize}/rules.d.ts +0 -0
  987. /package/dist/services/{organize → files/organize}/scanner.d.ts +0 -0
  988. /package/dist/services/{organize → files/organize}/store.d.ts +0 -0
  989. /package/dist/services/{webdav → files/webdav}/xml-builder.d.ts +0 -0
  990. /package/dist/services/{webdav → files/webdav}/xml-builder.js +0 -0
  991. /package/dist/services/{app-passwords.d.ts → instances/passwords.d.ts} +0 -0
  992. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.d.ts +0 -0
  993. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.js +0 -0
  994. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/drive-shim.d.ts +0 -0
  995. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/mcporter-lite.d.ts +0 -0
  996. /package/dist/services/{plugin-installer.d.ts → setup/plugin-installer.d.ts} +0 -0
  997. /package/dist/services/{macos-launchd.d.ts → system/macos-launchd.d.ts} +0 -0
  998. /package/dist/services/{system-monitor.d.ts → system/system-monitor.d.ts} +0 -0
@@ -0,0 +1,935 @@
1
+ import { existsSync, mkdtempSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync, chmodSync, chownSync, lstatSync, } from "fs";
2
+ import { homedir, tmpdir } from "os";
3
+ import { join, dirname } from "path";
4
+ import { spawn, spawnSync } from "child_process";
5
+ import * as config from "../../config.js";
6
+ import { emitTask } from "../tasks/registry.js";
7
+ import { createInvalidSudoPasswordError, isSudoAuthenticationError, isSudoNoNewPrivilegesError, isSudoPasswordRequiredError, prepareSudoAskpassEnv, SUDO_PASSTHROUGH_ENV_KEYS, } from "../../utils/sudo-askpass.js";
8
+ import { listBuiltinAppSpecs } from "./catalog-service.js";
9
+ import { getInstanceInstallRecordRuntimeStatus } from "./execution-service.js";
10
+ import { ANONYMOUS_DOWNLOAD_IMAGE_ALLOWLIST, ANONYMOUS_DOWNLOAD_IMAGE_REPOSITORY_ALLOWLIST, CURRENT_JISHUSHELL_VERSION, DEFAULT_LIFECYCLE_PATH, MACOS_LIFECYCLE_PATH_PROBES, expandPath, } from "./app-shared.js";
11
+ function parseComparableVersion(version, label) {
12
+ const normalized = version
13
+ .trim()
14
+ .replace(/^>=\s*/, "")
15
+ .replace(/^v/i, "")
16
+ .replace(/[-+].*$/, "");
17
+ const match = normalized.match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?$/);
18
+ if (!match) {
19
+ throw new Error(`${label} '${version}' 格式无效,应为 x.y.z`);
20
+ }
21
+ return [
22
+ Number(match[1] ?? 0),
23
+ Number(match[2] ?? 0),
24
+ Number(match[3] ?? 0),
25
+ ];
26
+ }
27
+ function compareVersions(left, right) {
28
+ for (let index = 0; index < 3; index++) {
29
+ if (left[index] > right[index])
30
+ return 1;
31
+ if (left[index] < right[index])
32
+ return -1;
33
+ }
34
+ return 0;
35
+ }
36
+ function requiredJishuShellVersion(spec) {
37
+ const required = spec.jishushell?.min_version?.trim();
38
+ if (!required) {
39
+ throw new Error(`App '${spec.id}' 缺少 jishushell.min_version,请先在 YAML 中声明支持的最低 JishuShell 版本`);
40
+ }
41
+ return required;
42
+ }
43
+ function ensureCompatibleJishuShellVersion(spec) {
44
+ const required = requiredJishuShellVersion(spec);
45
+ const current = parseComparableVersion(CURRENT_JISHUSHELL_VERSION, "当前 JishuShell 版本");
46
+ const minimum = parseComparableVersion(required, "jishushell.min_version");
47
+ if (compareVersions(current, minimum) < 0) {
48
+ throw new Error(`当前 JishuShell 版本 ${CURRENT_JISHUSHELL_VERSION} 低于应用要求 ${required},请先升级 JishuShell`);
49
+ }
50
+ }
51
+ function buildDeterministicPath(basePath, extraPaths = []) {
52
+ return [basePath ?? "", DEFAULT_LIFECYCLE_PATH, dirname(process.execPath), ...extraPaths]
53
+ .flatMap((entry) => entry.split(":"))
54
+ .map((entry) => entry.trim())
55
+ .filter(Boolean)
56
+ .filter((entry, index, entries) => entries.indexOf(entry) === index)
57
+ .join(":");
58
+ }
59
+ function buildLifecycleEnv() {
60
+ const extraPaths = process.platform === "darwin"
61
+ ? MACOS_LIFECYCLE_PATH_PROBES.filter((entry) => existsSync(entry))
62
+ : [];
63
+ const mergedPath = buildDeterministicPath(process.env.PATH, extraPaths);
64
+ // Surface core callback hooks to lifecycle scripts and internal shims.
65
+ // Managed instance helpers such as the OpenClaw drive shim use
66
+ // JISHUSHELL_CORE_URL + JISHUSHELL_INTERNAL_TOKEN together with
67
+ // X-Jishushell-Instance to call Core-owned internal routes without a user
68
+ // JWT. Best-effort: if the token file or port lookup fails we just omit
69
+ // the vars and the caller gets a clean "missing env" failure path.
70
+ const coreHooks = {};
71
+ try {
72
+ coreHooks.JISHUSHELL_CORE_URL = `http://127.0.0.1:${config.getCorePort()}`;
73
+ coreHooks.JISHUSHELL_INTERNAL_TOKEN = config.getInternalMcpToken();
74
+ // LAN host that *other* services (and the post_start script's curls into
75
+ // its own service) can reach. AnythingLLM binds eth0 via Nomad's
76
+ // `external` host_network, so the panel-host loopback (127.0.0.1) won't
77
+ // reach 18097 — post_start needs to hit the LAN IP to check its own
78
+ // health. getCoreLanHost() returns the same IP Nomad publishes ports on.
79
+ coreHooks.JISHUSHELL_LAN_HOST = config.getCoreLanHost();
80
+ }
81
+ catch {
82
+ // tolerate — only post_start cares
83
+ }
84
+ return {
85
+ ...process.env,
86
+ HOME: process.env.HOME ?? homedir(),
87
+ PATH: mergedPath,
88
+ ...coreHooks,
89
+ };
90
+ }
91
+ function buildSudoWrappedCommand(cmd, args, env, execOptions) {
92
+ const sudoArgs = execOptions?.sudoPassword ? ["-k", "-A"] : ["-n"];
93
+ const envArgs = SUDO_PASSTHROUGH_ENV_KEYS.flatMap((key) => {
94
+ const value = env[key];
95
+ return typeof value === "string" && value.length > 0 ? [`${key}=${value}`] : [];
96
+ });
97
+ return {
98
+ command: "sudo",
99
+ args: [...sudoArgs, "--", "env", ...envArgs, cmd, ...args],
100
+ };
101
+ }
102
+ function createLifecycleSudoError(stderr, fallbackDisplay, hasPassword) {
103
+ const message = sanitizeTaskLine(stderr).trim();
104
+ if (isSudoNoNewPrivilegesError(message)) {
105
+ return createNoNewPrivilegesSudoError();
106
+ }
107
+ if (isSudoAuthenticationError(message)) {
108
+ return createInvalidSudoPasswordError();
109
+ }
110
+ if (!hasPassword && isSudoPasswordRequiredError(message)) {
111
+ return new Error("该生命周期步骤需要 sudo 密码;请在页面弹窗中输入后重试。");
112
+ }
113
+ if (message) {
114
+ return new Error(message);
115
+ }
116
+ return new Error(`lifecycle sudo step failed: ${fallbackDisplay}`);
117
+ }
118
+ function materializeLifecycleInstanceTokens(value, instanceId) {
119
+ if (!instanceId)
120
+ return value;
121
+ if (typeof value === "string") {
122
+ return value.replace(/\$\{instance\.id\}/g, instanceId);
123
+ }
124
+ if (Array.isArray(value)) {
125
+ return value.map((entry) => materializeLifecycleInstanceTokens(entry, instanceId));
126
+ }
127
+ if (value && typeof value === "object") {
128
+ const rewritten = {};
129
+ for (const [key, entry] of Object.entries(value)) {
130
+ rewritten[key] = materializeLifecycleInstanceTokens(entry, instanceId);
131
+ }
132
+ return rewritten;
133
+ }
134
+ return value;
135
+ }
136
+ function coreSystemdServicePath() {
137
+ const override = process.env.JISHUSHELL_CORE_SYSTEMD_SERVICE_PATH?.trim();
138
+ return override || "/etc/systemd/system/jishushell.service";
139
+ }
140
+ function isLikelySystemdServiceProcess() {
141
+ return Boolean(process.env.INVOCATION_ID
142
+ || process.env.JOURNAL_STREAM
143
+ || process.env.NOTIFY_SOCKET
144
+ || process.env.JISHUSHELL_CORE_SYSTEMD_SERVICE_PATH?.trim());
145
+ }
146
+ function maybeRepairCoreAutostartNoNewPrivileges() {
147
+ if (!isLikelySystemdServiceProcess())
148
+ return null;
149
+ const servicePath = coreSystemdServicePath();
150
+ if (!existsSync(servicePath))
151
+ return null;
152
+ let unitText = "";
153
+ try {
154
+ unitText = readFileSync(servicePath, "utf-8");
155
+ }
156
+ catch {
157
+ return { servicePath, detected: true, updated: false };
158
+ }
159
+ if (!/^\s*NoNewPrivileges\s*=\s*true\s*$/mi.test(unitText)) {
160
+ return null;
161
+ }
162
+ const nextText = unitText.replace(/^\s*NoNewPrivileges\s*=\s*true\s*\n?/gim, "");
163
+ if (nextText === unitText) {
164
+ return { servicePath, detected: true, updated: false };
165
+ }
166
+ try {
167
+ writeFileSync(servicePath, nextText);
168
+ return { servicePath, detected: true, updated: true };
169
+ }
170
+ catch {
171
+ return { servicePath, detected: true, updated: false };
172
+ }
173
+ }
174
+ function manualInstallCommandForSpec(spec) {
175
+ if (spec.id === "ollama-binary") {
176
+ return "jishushell app install ollama";
177
+ }
178
+ const builtin = listBuiltinAppSpecs().find((entry) => entry.id === spec.id);
179
+ if (!builtin)
180
+ return null;
181
+ return `jishushell app install ${spec.id}`;
182
+ }
183
+ function createNoNewPrivilegesSudoError(manualInstallCommand) {
184
+ const repair = maybeRepairCoreAutostartNoNewPrivileges();
185
+ const restartCommand = "sudo systemctl daemon-reload && sudo systemctl restart jishushell";
186
+ const parts = ["当前运行环境禁止 sudo 提权(no new privileges),面板内无法继续后续安装。"];
187
+ if (repair?.updated) {
188
+ parts.push(`已从自启文件 ${repair.servicePath} 移除 NoNewPrivileges=true。请在系统终端执行以下命令后重试:\n${restartCommand}`);
189
+ }
190
+ else if (repair?.detected) {
191
+ parts.push(`检测到自启文件 ${repair.servicePath} 仍包含 NoNewPrivileges=true。请在系统终端删除该行后执行:\n${restartCommand}`);
192
+ }
193
+ if (manualInstallCommand) {
194
+ parts.push(`当前安装已停止。你也可以在系统终端手动执行 ${manualInstallCommand}。`);
195
+ }
196
+ return new Error(parts.join("\n"));
197
+ }
198
+ export function decorateInstallError(error, spec) {
199
+ const original = error instanceof Error ? error : new Error(String(error));
200
+ if (!isSudoNoNewPrivilegesError(original.message) && !/NoNewPrivileges=true/i.test(original.message)) {
201
+ return original;
202
+ }
203
+ return createNoNewPrivilegesSudoError(manualInstallCommandForSpec(spec) ?? undefined);
204
+ }
205
+ export async function validateSudoPassword(sudoPassword) {
206
+ if (!sudoPassword) {
207
+ throw new Error("请输入 sudo 密码");
208
+ }
209
+ if (typeof process.getuid === "function" && process.getuid() === 0) {
210
+ return;
211
+ }
212
+ const preparedEnv = prepareLifecycleExecEnv({ sudoPassword });
213
+ try {
214
+ await new Promise((resolve, reject) => {
215
+ const child = spawn("sudo", ["-k", "-A", "true"], {
216
+ stdio: ["ignore", "ignore", "pipe"],
217
+ env: preparedEnv.env,
218
+ timeout: 15_000,
219
+ });
220
+ let stderr = "";
221
+ child.stderr?.on("data", (chunk) => {
222
+ stderr += chunk.toString("utf-8");
223
+ });
224
+ child.on("close", (code) => {
225
+ if (code === 0) {
226
+ resolve();
227
+ return;
228
+ }
229
+ const message = sanitizeTaskLine(stderr).trim();
230
+ if (isSudoNoNewPrivilegesError(message)) {
231
+ reject(createNoNewPrivilegesSudoError());
232
+ return;
233
+ }
234
+ if (isSudoAuthenticationError(message)) {
235
+ reject(createInvalidSudoPasswordError());
236
+ return;
237
+ }
238
+ resolve();
239
+ });
240
+ child.on("error", (_error) => {
241
+ resolve();
242
+ });
243
+ });
244
+ }
245
+ finally {
246
+ preparedEnv.cleanup();
247
+ }
248
+ }
249
+ function prepareLifecycleExecEnv(execOptions, envOverrides) {
250
+ const env = {
251
+ ...buildLifecycleEnv(),
252
+ ...(envOverrides ?? {}),
253
+ };
254
+ const sudoPassword = execOptions?.sudoPassword;
255
+ if (!sudoPassword) {
256
+ return { env, cleanup: () => undefined };
257
+ }
258
+ return prepareSudoAskpassEnv(sudoPassword, env);
259
+ }
260
+ function shouldBypassDockerCredentialHelperForDownloadImage(image) {
261
+ const trimmedImage = image.trim();
262
+ return ANONYMOUS_DOWNLOAD_IMAGE_ALLOWLIST.has(trimmedImage)
263
+ || ANONYMOUS_DOWNLOAD_IMAGE_REPOSITORY_ALLOWLIST.has(normalizeDockerImageRepository(trimmedImage));
264
+ }
265
+ function normalizeDockerImageRepository(image) {
266
+ const digestIndex = image.indexOf("@");
267
+ const imageWithoutDigest = digestIndex >= 0 ? image.slice(0, digestIndex) : image;
268
+ const lastSlashIndex = imageWithoutDigest.lastIndexOf("/");
269
+ const lastColonIndex = imageWithoutDigest.lastIndexOf(":");
270
+ return lastColonIndex > lastSlashIndex
271
+ ? imageWithoutDigest.slice(0, lastColonIndex)
272
+ : imageWithoutDigest;
273
+ }
274
+ function createAnonymousDockerConfig() {
275
+ const dockerConfigDir = mkdtempSync(join(tmpdir(), "jishushell-docker-config-"));
276
+ writeFileSync(join(dockerConfigDir, "config.json"), `${JSON.stringify({ auths: {} }, null, 2)}\n`, { mode: 0o600 });
277
+ return {
278
+ envOverrides: {
279
+ DOCKER_CONFIG: dockerConfigDir,
280
+ },
281
+ cleanup: () => {
282
+ try {
283
+ rmSync(dockerConfigDir, { recursive: true, force: true });
284
+ }
285
+ catch {
286
+ // best effort cleanup for one-shot anonymous docker config files
287
+ }
288
+ },
289
+ };
290
+ }
291
+ const ANSI_ESCAPE_RE = /\u001B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g;
292
+ function sanitizeTaskLine(line) {
293
+ return line
294
+ .replace(ANSI_ESCAPE_RE, "")
295
+ .replace(/[\u0000-\u0008\u000B-\u001F\u007F]/g, "")
296
+ .trimEnd();
297
+ }
298
+ export function emitInstallTaskLog(task, message) {
299
+ if (!task)
300
+ return;
301
+ const line = sanitizeTaskLine(message).trim();
302
+ if (!line)
303
+ return;
304
+ emitTask(task, { type: "log", message: line });
305
+ }
306
+ export function selectRollbackUninstallSteps(steps, ownedArtifacts) {
307
+ if (!steps?.length)
308
+ return [];
309
+ const ownedImages = new Set(ownedArtifacts.filter((a) => a.type === "image").map((a) => a.path));
310
+ const ownedDirs = new Set(ownedArtifacts.filter((a) => a.type === "dir").map((a) => a.path));
311
+ const ownedBinaries = new Set(ownedArtifacts.filter((a) => a.type === "binary").map((a) => a.path));
312
+ return steps.filter((step) => {
313
+ if ("deleteImage" in step)
314
+ return ownedImages.has(step.deleteImage);
315
+ if ("deleteDir" in step)
316
+ return ownedDirs.has(expandPath(step.deleteDir));
317
+ if ("deleteBinary" in step)
318
+ return ownedBinaries.has(expandPath(step.deleteBinary));
319
+ if ("run" in step)
320
+ return true;
321
+ return false;
322
+ });
323
+ }
324
+ function spawnStep(label, display, cmd, args, task) {
325
+ return spawnStepWithTimeout(label, display, display, cmd, args, 300_000, task);
326
+ }
327
+ const DOCKER_PULL_RETRY_ATTEMPTS = 3;
328
+ // spawnStep's 5-min default is fine for small CLI calls but starves real-world
329
+ // image pulls on ARM + SD-card hardware. Hermes is ~2.4 GB compressed and may
330
+ // not extract in 5 min on a Raspberry Pi. 30 min leaves headroom while still
331
+ // capping runaway failures (total retry budget 90 min).
332
+ const DOCKER_PULL_TIMEOUT_MS = 1_800_000;
333
+ // Separate from the total timeout above: if docker pull stops producing any
334
+ // stdout/stderr for long enough, treat it as stalled and retry rather than
335
+ // waiting the full 30 minutes.
336
+ //
337
+ // Why 600s (not 180s): on slow links (especially Docker Hub from China to
338
+ // edge devices), large single layers — AnythingLLM ~500MB, Hermes ~2.4GB —
339
+ // can spend 5-8 minutes between progress lines without TTY. 180s
340
+ // idle was killing pulls that were actually making progress, then rolling
341
+ // back the partially-completed image. Layer cache is preserved across
342
+ // retries (docker dedupes by layer sha), so a higher idle ceiling lets each
343
+ // big layer finish without throwing away the layers already on disk.
344
+ const DOCKER_PULL_IDLE_TIMEOUT_MS = 600_000;
345
+ export async function pullDockerImageStep(label, image, display, task, timeoutMs = DOCKER_PULL_TIMEOUT_MS, idleTimeoutMs) {
346
+ if (await dockerImageExists(image)) {
347
+ const skipMessage = `[lifecycle:${label}] docker image '${image}' already exists locally; skipping pull`;
348
+ process.stdout.write(` ${skipMessage}\n`);
349
+ emitInstallTaskLog(task, skipMessage);
350
+ return false;
351
+ }
352
+ const anonymousDockerConfig = shouldBypassDockerCredentialHelperForDownloadImage(image)
353
+ ? createAnonymousDockerConfig()
354
+ : null;
355
+ let lastError;
356
+ try {
357
+ for (let attempt = 1; attempt <= DOCKER_PULL_RETRY_ATTEMPTS; attempt++) {
358
+ try {
359
+ await spawnStepWithTimeout(label, display, display, "docker", ["pull", image], timeoutMs, task, undefined, undefined, {
360
+ idleTimeoutMs: idleTimeoutMs ?? Math.min(DOCKER_PULL_IDLE_TIMEOUT_MS, timeoutMs),
361
+ envOverrides: anonymousDockerConfig?.envOverrides,
362
+ stallMessageHint: "Docker credential resolution (for example docker-credential-desktop) may be involved.",
363
+ });
364
+ return true;
365
+ }
366
+ catch (error) {
367
+ if (await dockerImageExists(image)) {
368
+ const recoveredMessage = `[lifecycle:${label}] docker image '${image}' is present locally after pull failure/timeout; treating step as successful`;
369
+ process.stdout.write(` ${recoveredMessage}\n`);
370
+ emitInstallTaskLog(task, recoveredMessage);
371
+ return true;
372
+ }
373
+ lastError = error;
374
+ if (attempt === DOCKER_PULL_RETRY_ATTEMPTS) {
375
+ break;
376
+ }
377
+ const reason = error instanceof Error ? error.message : String(error);
378
+ const retryMessage = `[lifecycle:${label}] docker pull failed for ${image} (attempt ${attempt}/${DOCKER_PULL_RETRY_ATTEMPTS}): ${reason}; retrying`;
379
+ process.stdout.write(` ${retryMessage}\n`);
380
+ emitInstallTaskLog(task, retryMessage);
381
+ }
382
+ }
383
+ }
384
+ finally {
385
+ anonymousDockerConfig?.cleanup();
386
+ }
387
+ throw (lastError instanceof Error ? lastError : new Error(String(lastError)));
388
+ }
389
+ /**
390
+ * In-flight background pulls keyed by image tag. Used by
391
+ * `pullDockerImageInBackground` to dedup concurrent requests so repeated
392
+ * UI clicks for the same not-yet-local image don't queue duplicate pulls.
393
+ */
394
+ const inFlightBackgroundPulls = new Map();
395
+ /**
396
+ * Fire-and-forget background docker pull. Used by `*-manager.ts`
397
+ * (custom / hermes / ollama) when an instance is requested with an image
398
+ * that's not yet local: kicks off a pull in the background and the caller
399
+ * asks the user to retry later (HTTP 202).
400
+ *
401
+ * Wraps the same `pullDockerImageStep` used by full installs, so it
402
+ * inherits the same protections — total timeout (30 min), idle timeout
403
+ * (10 min of silence on the pull's stdout/stderr terminates it), 3
404
+ * retries, and a post-failure `dockerImageExists` recovery check — that
405
+ * a bare `exec("docker pull ...", { timeout: 0 })` lacks. Docker Desktop
406
+ * on macOS can hang the CLI for tens of minutes after the image has been
407
+ * fully downloaded (the final manifest/tag write step occasionally
408
+ * deadlocks); the idle timer kills the hung CLI and the recovery check
409
+ * picks up the image if the tag did make it through.
410
+ *
411
+ * Concurrent calls for the same image dedup onto a single in-flight pull
412
+ * so repeated UI clicks don't waste retries.
413
+ *
414
+ * Always resolves — errors are logged via console.warn so the
415
+ * fire-and-forget caller doesn't have to attach a `.catch` handler.
416
+ */
417
+ export function pullDockerImageInBackground(label, image) {
418
+ const existing = inFlightBackgroundPulls.get(image);
419
+ if (existing)
420
+ return existing;
421
+ const promise = (async () => {
422
+ try {
423
+ await pullDockerImageStep(`${label}-background`, image, `docker pull ${image} (background)`);
424
+ }
425
+ catch (err) {
426
+ const reason = err instanceof Error ? err.message : String(err);
427
+ console.warn(`[${label}] Background pull of ${image} failed: ${reason}`);
428
+ }
429
+ finally {
430
+ inFlightBackgroundPulls.delete(image);
431
+ }
432
+ })();
433
+ inFlightBackgroundPulls.set(image, promise);
434
+ return promise;
435
+ }
436
+ async function dockerImageExists(image) {
437
+ return new Promise((resolve) => {
438
+ const child = spawn("docker", ["image", "inspect", image], {
439
+ stdio: "ignore",
440
+ env: buildLifecycleEnv(),
441
+ });
442
+ let settled = false;
443
+ const finish = (value) => {
444
+ if (settled)
445
+ return;
446
+ settled = true;
447
+ resolve(value);
448
+ };
449
+ // `docker image inspect` is a local-only daemon API call that should
450
+ // return in milliseconds. In practice, when dockerd itself wedges
451
+ // (the same failure mode that causes `docker pull` to hang), `docker
452
+ // image inspect` hangs too. Without this timeout the inspect call
453
+ // ties up the install lifecycle's post-failure recovery check, which
454
+ // in turn keeps the install lock held indefinitely. 10s is generous
455
+ // for a healthy daemon and short enough that a wedged daemon doesn't
456
+ // block install retry/recovery.
457
+ const watchdog = setTimeout(() => {
458
+ try {
459
+ child.kill("SIGKILL");
460
+ }
461
+ catch {
462
+ /* already exited */
463
+ }
464
+ finish(false);
465
+ }, 10_000);
466
+ watchdog.unref?.();
467
+ child.on("close", (code) => {
468
+ clearTimeout(watchdog);
469
+ finish(code === 0);
470
+ });
471
+ child.on("error", () => {
472
+ clearTimeout(watchdog);
473
+ finish(false);
474
+ });
475
+ });
476
+ }
477
+ /**
478
+ * Force-terminate a spawned child: send `SIGTERM`, then escalate to
479
+ * `SIGKILL` after a grace period if the process is still alive.
480
+ *
481
+ * Needed because some CLIs (notably `docker` on macOS when its daemon
482
+ * has wedged) block on a daemon round-trip and ignore `SIGTERM` until
483
+ * the daemon responds. Without `SIGKILL` escalation the parent
484
+ * `child.on("close")` handler never fires, the lifecycle promise never
485
+ * resolves, and the install task hangs forever holding its lock.
486
+ *
487
+ * The grace period must be long enough for well-behaved children to
488
+ * flush buffers and exit cleanly on SIGTERM (avoid corrupt artifacts in
489
+ * the common case) but short enough that a hung child doesn't waste a
490
+ * meaningful slice of the parent's overall budget. 30s is the sweet
491
+ * spot in practice for docker-class tooling.
492
+ */
493
+ function forceTerminateChild(child, label) {
494
+ try {
495
+ child.kill("SIGTERM");
496
+ }
497
+ catch {
498
+ /* already exited */
499
+ }
500
+ // Unref'd so it doesn't keep the event loop alive. If the child
501
+ // exited cleanly under SIGTERM before this fires, `kill("SIGKILL")`
502
+ // on a dead process is a harmless no-op (and we try/catch around it
503
+ // anyway). We deliberately do NOT register an extra `on("close")`
504
+ // listener to cancel this timer — some lifecycle paths use bare
505
+ // mock children whose `on` is single-slot and a second listener
506
+ // would clobber the parent's reject handler.
507
+ const killTimer = setTimeout(() => {
508
+ if (child.exitCode !== null || child.signalCode !== null)
509
+ return;
510
+ process.stdout.write(` [lifecycle:${label}] child ignored SIGTERM after 30s; escalating to SIGKILL\n`);
511
+ try {
512
+ child.kill("SIGKILL");
513
+ }
514
+ catch {
515
+ /* already exited */
516
+ }
517
+ }, 30_000);
518
+ killTimer.unref?.();
519
+ }
520
+ function spawnStepWithTimeout(label, display, taskDisplay, cmd, args, timeoutMs, task, execOptions, sudo, runOptions) {
521
+ process.stdout.write(` [lifecycle:${label}] ${display}\n`);
522
+ emitInstallTaskLog(task, `[lifecycle:${label}] ${taskDisplay}`);
523
+ return new Promise((resolve, reject) => {
524
+ const preparedEnv = prepareLifecycleExecEnv(sudo ? execOptions : undefined, runOptions?.envOverrides);
525
+ let cleaned = false;
526
+ let heartbeatTimer = null;
527
+ let idleTimer = null;
528
+ let stdoutPending = "";
529
+ let stderrPending = "";
530
+ let capturedStderr = "";
531
+ let forcedError = null;
532
+ let totalTimeoutTimer = null;
533
+ const cleanupPreparedEnv = () => {
534
+ if (cleaned)
535
+ return;
536
+ cleaned = true;
537
+ if (heartbeatTimer) {
538
+ clearInterval(heartbeatTimer);
539
+ heartbeatTimer = null;
540
+ }
541
+ if (idleTimer) {
542
+ clearTimeout(idleTimer);
543
+ idleTimer = null;
544
+ }
545
+ if (totalTimeoutTimer) {
546
+ clearTimeout(totalTimeoutTimer);
547
+ totalTimeoutTimer = null;
548
+ }
549
+ preparedEnv.cleanup();
550
+ };
551
+ const spawnTarget = sudo
552
+ ? buildSudoWrappedCommand(cmd, args, preparedEnv.env, execOptions)
553
+ : { command: cmd, args };
554
+ const captureOutput = Boolean(task) || Boolean(sudo) || Boolean(runOptions?.idleTimeoutMs);
555
+ const child = spawn(spawnTarget.command, spawnTarget.args, {
556
+ stdio: captureOutput ? ["ignore", "pipe", "pipe"] : "inherit",
557
+ // Node's spawn `timeout` sends SIGTERM at the deadline but has no
558
+ // SIGKILL escalation, so a child that ignores SIGTERM (docker CLI
559
+ // on macOS when its daemon is wedged) still blocks the parent's
560
+ // `child.on("close")`. We keep this here so callers / tests can
561
+ // observe the configured budget on the spawn options, and add the
562
+ // `totalKillEscalationTimer` below to SIGKILL after a grace.
563
+ timeout: timeoutMs,
564
+ env: preparedEnv.env,
565
+ });
566
+ // SIGKILL escalation for the total-timeout case. Node's `timeout`
567
+ // option above will have sent SIGTERM at `timeoutMs`; if the child
568
+ // hasn't exited within `timeoutMs + 30s` we force it. Independent
569
+ // of the idle timer's escalation (which `forceTerminateChild`
570
+ // handles inline) — covers the path where output keeps flowing but
571
+ // the total budget is blown.
572
+ totalTimeoutTimer = setTimeout(() => {
573
+ if (child.exitCode !== null || child.signalCode !== null)
574
+ return;
575
+ const totalSeconds = Math.max(1, Math.round(timeoutMs / 1000));
576
+ const timeoutMessage = `[lifecycle:${label}] child ignored spawn-timeout SIGTERM ${totalSeconds}s+30s ago; escalating to SIGKILL`;
577
+ process.stdout.write(` ${timeoutMessage}\n`);
578
+ emitInstallTaskLog(task, timeoutMessage);
579
+ if (!forcedError) {
580
+ forcedError = new Error(`lifecycle '${label}' step exceeded ${totalSeconds}s total budget: ${display}`);
581
+ }
582
+ try {
583
+ child.kill("SIGKILL");
584
+ }
585
+ catch {
586
+ /* already exited */
587
+ }
588
+ }, timeoutMs + 30_000);
589
+ totalTimeoutTimer.unref?.();
590
+ const resetIdleTimer = () => {
591
+ if (!runOptions?.idleTimeoutMs)
592
+ return;
593
+ if (idleTimer)
594
+ clearTimeout(idleTimer);
595
+ idleTimer = setTimeout(() => {
596
+ const idleSeconds = Math.max(1, Math.round(runOptions.idleTimeoutMs / 1000));
597
+ const stallMessageSuffix = runOptions.stallMessageHint ? ` ${runOptions.stallMessageHint}` : "";
598
+ const stallMessage = `[lifecycle:${label}] no output for ${idleSeconds}s; terminating stalled step: ${taskDisplay}${stallMessageSuffix}`;
599
+ process.stdout.write(` ${stallMessage}\n`);
600
+ emitInstallTaskLog(task, stallMessage);
601
+ forcedError = new Error(`lifecycle '${label}' step stalled after ${idleSeconds}s with no output: ${display}${stallMessageSuffix}`);
602
+ forceTerminateChild(child, label);
603
+ }, runOptions.idleTimeoutMs);
604
+ idleTimer.unref?.();
605
+ };
606
+ resetIdleTimer();
607
+ if (captureOutput) {
608
+ const startedAt = Date.now();
609
+ const flushPendingLine = (line) => {
610
+ if (!task)
611
+ return;
612
+ emitInstallTaskLog(task, line);
613
+ };
614
+ const handleChunk = (chunk, stream) => {
615
+ resetIdleTimer();
616
+ const text = typeof chunk === "string" ? chunk : chunk.toString("utf-8");
617
+ if (stream === "stderr") {
618
+ capturedStderr += text;
619
+ }
620
+ if (!task) {
621
+ if (stream === "stdout")
622
+ process.stdout.write(text);
623
+ else
624
+ process.stderr.write(text);
625
+ return;
626
+ }
627
+ const normalized = `${stream === "stdout" ? stdoutPending : stderrPending}${text}`
628
+ .replace(/\r\n/g, "\n")
629
+ .replace(/\r/g, "\n");
630
+ const lines = normalized.split("\n");
631
+ const pending = lines.pop() ?? "";
632
+ if (stream === "stdout")
633
+ stdoutPending = pending;
634
+ else
635
+ stderrPending = pending;
636
+ for (const line of lines) {
637
+ flushPendingLine(line);
638
+ }
639
+ };
640
+ child.stdout?.on("data", (data) => handleChunk(data, "stdout"));
641
+ child.stderr?.on("data", (data) => handleChunk(data, "stderr"));
642
+ if (task) {
643
+ heartbeatTimer = setInterval(() => {
644
+ const elapsedSeconds = Math.max(1, Math.round((Date.now() - startedAt) / 1000));
645
+ emitInstallTaskLog(task, `[lifecycle:${label}] still running (${elapsedSeconds}s): ${taskDisplay}`);
646
+ }, 10_000);
647
+ child.on("close", () => {
648
+ flushPendingLine(stdoutPending);
649
+ flushPendingLine(stderrPending);
650
+ });
651
+ }
652
+ }
653
+ child.on("close", (code) => {
654
+ cleanupPreparedEnv();
655
+ if (forcedError)
656
+ reject(forcedError);
657
+ else if (code === 0)
658
+ resolve();
659
+ else if (sudo)
660
+ reject(createLifecycleSudoError(capturedStderr, display, Boolean(execOptions?.sudoPassword)));
661
+ else
662
+ reject(new Error(`lifecycle '${label}' step failed (exit ${code ?? 1}): ${display}`));
663
+ });
664
+ child.on("error", (err) => {
665
+ cleanupPreparedEnv();
666
+ if (forcedError) {
667
+ reject(forcedError);
668
+ return;
669
+ }
670
+ if (sudo && err.code === "ENOENT") {
671
+ reject(new Error("当前环境未检测到 sudo,无法执行需要 sudo 的生命周期步骤。请以 root 身份重试。"));
672
+ return;
673
+ }
674
+ reject(new Error(`lifecycle '${label}' step error: ${err.message}`));
675
+ });
676
+ });
677
+ }
678
+ function lifecycleRunStepDisplay(label, index) {
679
+ if (label === "pre_install") {
680
+ return `run step ${index + 1}`;
681
+ }
682
+ return "$";
683
+ }
684
+ async function commandExists(command) {
685
+ return new Promise((resolve) => {
686
+ const quoted = command.replace(/'/g, "'\\''");
687
+ const child = spawn("sh", ["-c", `command -v '${quoted}' > /dev/null 2>&1`], {
688
+ stdio: "ignore",
689
+ env: buildLifecycleEnv(),
690
+ });
691
+ child.on("close", (code) => resolve(code === 0));
692
+ child.on("error", () => resolve(false));
693
+ });
694
+ }
695
+ // Recursively chown a path. Owner format is "uid:gid" (numeric only, e.g.
696
+ // "0:0" or "1000:1000"). Used by container apps whose images run as a
697
+ // different uid than the service user — without this, bind-mounted data
698
+ // dirs end up unwritable for the in-container process and fail with
699
+ // SQLite "readonly database" or chroma init errors.
700
+ function parseOwnerSpec(owner) {
701
+ const m = /^(\d+):(\d+)$/.exec(owner);
702
+ if (!m)
703
+ throw new Error(`chown owner must be "uid:gid" (numeric), got "${owner}"`);
704
+ return { uid: Number(m[1]), gid: Number(m[2]) };
705
+ }
706
+ function chownRecursive(path, uid, gid) {
707
+ chownSync(path, uid, gid);
708
+ let stat;
709
+ try {
710
+ stat = lstatSync(path);
711
+ }
712
+ catch {
713
+ return;
714
+ }
715
+ if (!stat.isDirectory())
716
+ return;
717
+ for (const entry of readdirSync(path)) {
718
+ chownRecursive(join(path, entry), uid, gid);
719
+ }
720
+ }
721
+ /**
722
+ * Try chowning via direct fs syscall first; on EPERM (core runs as a
723
+ * non-root user with no CAP_CHOWN) fall back to `sudo -n chown`. The
724
+ * fallback only succeeds where passwordless sudo is configured for the
725
+ * service user (the canonical Pi setup); on other hosts the original
726
+ * EPERM bubbles up as a clear error.
727
+ */
728
+ function chownWithSudoFallback(path, uid, gid, recursive) {
729
+ try {
730
+ if (recursive)
731
+ chownRecursive(path, uid, gid);
732
+ else
733
+ chownSync(path, uid, gid);
734
+ return;
735
+ }
736
+ catch (e) {
737
+ if (e?.code !== "EPERM" && e?.code !== "EACCES")
738
+ throw e;
739
+ }
740
+ const args = [
741
+ "-n",
742
+ "chown",
743
+ ...(recursive ? ["-R"] : []),
744
+ `${uid}:${gid}`,
745
+ path,
746
+ ];
747
+ const r = spawnSync("sudo", args, { stdio: ["ignore", "ignore", "pipe"] });
748
+ if (r.status !== 0) {
749
+ const stderr = r.stderr ? r.stderr.toString().trim() : "";
750
+ throw new Error(`chown ${recursive ? "-R " : ""}${uid}:${gid} ${path} failed: service user lacks CAP_CHOWN and passwordless sudo also failed${stderr ? `: ${stderr}` : ""}`);
751
+ }
752
+ }
753
+ async function downloadBinaryStep(label, url, dest, chmod, task) {
754
+ const expanded = expandPath(dest);
755
+ process.stdout.write(` [lifecycle:${label}] downloadBinary: ${url} → ${expanded}\n`);
756
+ emitInstallTaskLog(task, `[lifecycle:${label}] downloadBinary: ${url} -> ${expanded}`);
757
+ mkdirSync(dirname(expanded), { recursive: true });
758
+ const tmp = expanded + ".tmp";
759
+ const res = await fetch(url);
760
+ if (!res.ok)
761
+ throw new Error(`downloadBinary: HTTP ${res.status} ${url}`);
762
+ const buf = await res.arrayBuffer();
763
+ writeFileSync(tmp, Buffer.from(buf), { mode: 0o644 });
764
+ renameSync(tmp, expanded);
765
+ if (chmod)
766
+ chmodSync(expanded, parseInt(chmod, 8));
767
+ }
768
+ export async function runLifecycleSteps(steps, label, artifacts, task, execOptions, ownedArtifacts, instanceId) {
769
+ if (!steps || steps.length === 0)
770
+ return;
771
+ for (const [index, rawStep] of steps.entries()) {
772
+ const step = materializeLifecycleInstanceTokens(rawStep, instanceId);
773
+ if ("run" in step) {
774
+ if (step.ifFileExists && !existsSync(expandPath(step.ifFileExists))) {
775
+ continue;
776
+ }
777
+ const timeoutMs = step.timeout_ms ?? 300_000;
778
+ const display = label === "pre_install"
779
+ ? lifecycleRunStepDisplay(label, index)
780
+ : `${lifecycleRunStepDisplay(label, index)} ${step.run}`;
781
+ const taskDisplay = `run step ${index + 1}`;
782
+ try {
783
+ await spawnStepWithTimeout(label, display, taskDisplay, "sh", ["-c", step.run], timeoutMs, task, execOptions, step.sudo === true);
784
+ }
785
+ catch (error) {
786
+ if (step.successIfCommandExists && await commandExists(step.successIfCommandExists)) {
787
+ process.stdout.write(` [lifecycle:${label}] command '${step.successIfCommandExists}' detected after failure/timeout; treating step as successful\n`);
788
+ emitInstallTaskLog(task, `[lifecycle:${label}] command '${step.successIfCommandExists}' detected after failure/timeout; treating step as successful`);
789
+ continue;
790
+ }
791
+ throw error;
792
+ }
793
+ }
794
+ else if ("checkNotCommand" in step) {
795
+ const cmd = step.checkNotCommand;
796
+ const found = await commandExists(cmd);
797
+ if (found) {
798
+ throw new Error(step.message ??
799
+ `系统中已检测到 '${cmd}',建议直接使用系统版本,无需重复安装。如需由 Nomad 统一管理,请先卸载系统版本`);
800
+ }
801
+ }
802
+ else if ("downloadImage" in step) {
803
+ const pulled = await pullDockerImageStep(label, step.downloadImage, `downloadImage: ${step.downloadImage}`, task, step.timeout_ms, step.idle_timeout_ms);
804
+ artifacts?.push({ type: "image", path: step.downloadImage });
805
+ if (pulled)
806
+ ownedArtifacts?.push({ type: "image", path: step.downloadImage });
807
+ }
808
+ else if ("deleteImage" in step) {
809
+ await spawnStep(label, `deleteImage: ${step.deleteImage}`, "sh", [
810
+ "-c",
811
+ `docker rmi -f ${step.deleteImage} 2>/dev/null || true`,
812
+ ], task);
813
+ }
814
+ else if ("downloadBinary" in step) {
815
+ const { url, dest, chmod } = step.downloadBinary;
816
+ await downloadBinaryStep(label, url, dest, chmod, task);
817
+ artifacts?.push({ type: "binary", path: expandPath(dest) });
818
+ }
819
+ else if ("deleteBinary" in step) {
820
+ const p = expandPath(step.deleteBinary);
821
+ process.stdout.write(` [lifecycle:${label}] deleteBinary: ${p}\n`);
822
+ emitInstallTaskLog(task, `[lifecycle:${label}] deleteBinary: ${p}`);
823
+ try {
824
+ unlinkSync(p);
825
+ }
826
+ catch (e) {
827
+ if (e.code !== "ENOENT")
828
+ throw e;
829
+ }
830
+ }
831
+ else if ("mkdir" in step) {
832
+ const p = expandPath(step.mkdir);
833
+ process.stdout.write(` [lifecycle:${label}] mkdir: ${p}\n`);
834
+ emitInstallTaskLog(task, `[lifecycle:${label}] mkdir: ${p}`);
835
+ // Ownership semantics for rollback (Step 3):
836
+ // - If `p` did not exist before this step, this install attempt
837
+ // created it → claim ownership (push into `ownedArtifacts`) so a
838
+ // subsequent rollback may safely `rm -rf` it.
839
+ // - If `p` already existed, treat it as a dependency only (push into
840
+ // `artifacts`). User-pre-existing directories (e.g. a shared
841
+ // `~/.config/<app>` the user already populated) must never be
842
+ // deleted by our rollback path.
843
+ // `mkdir -p` is idempotent for the already-exists case, so the
844
+ // observable filesystem result is identical either way; only the
845
+ // rollback bookkeeping differs.
846
+ const preExisting = existsSync(p);
847
+ mkdirSync(p, { recursive: true });
848
+ artifacts?.push({ type: "dir", path: p });
849
+ if (!preExisting)
850
+ ownedArtifacts?.push({ type: "dir", path: p });
851
+ }
852
+ else if ("chown" in step) {
853
+ const p = expandPath(step.chown.path);
854
+ const { uid, gid } = parseOwnerSpec(step.chown.owner);
855
+ const recursive = step.chown.recursive !== false;
856
+ const tag = recursive ? "chown -R" : "chown";
857
+ process.stdout.write(` [lifecycle:${label}] ${tag} ${uid}:${gid} ${p}\n`);
858
+ emitInstallTaskLog(task, `[lifecycle:${label}] ${tag} ${uid}:${gid} ${p}`);
859
+ if (!existsSync(p)) {
860
+ // chown only makes sense if the target exists; surface a clear
861
+ // error rather than letting fs throw an opaque ENOENT later.
862
+ throw new Error(`chown target does not exist: ${p}`);
863
+ }
864
+ try {
865
+ chownWithSudoFallback(p, uid, gid, recursive);
866
+ }
867
+ catch (chownErr) {
868
+ // In pre_start, chown failures are non-fatal: on macOS Docker/Colima
869
+ // the VM handles UID mapping for bind-mounts, so the container can
870
+ // write even without matching ownership. Failing fatally here blocks
871
+ // any non-root service user from starting the app.
872
+ if (label === "pre_start") {
873
+ const msg = `[lifecycle:${label}] ${tag} ${uid}:${gid} ${p} failed (non-fatal): ${chownErr.message}`;
874
+ process.stdout.write(` ${msg}\n`);
875
+ emitInstallTaskLog(task, msg);
876
+ }
877
+ else {
878
+ throw chownErr;
879
+ }
880
+ }
881
+ }
882
+ else if ("deleteDir" in step) {
883
+ const p = expandPath(step.deleteDir);
884
+ process.stdout.write(` [lifecycle:${label}] deleteDir: ${p}\n`);
885
+ emitInstallTaskLog(task, `[lifecycle:${label}] deleteDir: ${p}`);
886
+ rmSync(p, { recursive: true, force: true });
887
+ }
888
+ }
889
+ }
890
+ export function cleanupArtifacts(artifacts, task) {
891
+ for (let i = artifacts.length - 1; i >= 0; i--) {
892
+ const a = artifacts[i];
893
+ try {
894
+ switch (a.type) {
895
+ case "image":
896
+ process.stdout.write(` [cleanup] removing image: ${a.path}\n`);
897
+ emitInstallTaskLog(task, `[cleanup] removing image: ${a.path}`);
898
+ spawn("docker", ["rmi", "-f", a.path], { stdio: "ignore" }).unref();
899
+ break;
900
+ case "binary":
901
+ process.stdout.write(` [cleanup] removing binary: ${a.path}\n`);
902
+ emitInstallTaskLog(task, `[cleanup] removing binary: ${a.path}`);
903
+ unlinkSync(a.path);
904
+ break;
905
+ case "dir":
906
+ process.stdout.write(` [cleanup] removing dir: ${a.path}\n`);
907
+ emitInstallTaskLog(task, `[cleanup] removing dir: ${a.path}`);
908
+ rmSync(a.path, { recursive: true, force: true });
909
+ break;
910
+ }
911
+ }
912
+ catch {
913
+ // best-effort
914
+ }
915
+ }
916
+ }
917
+ export async function runPostStartSteps(spec, instanceId) {
918
+ await runLifecycleSteps(spec.lifecycle?.post_start, "post_start", undefined, undefined, undefined, undefined, instanceId);
919
+ }
920
+ export async function runPreStartSteps(spec, instanceId) {
921
+ await runLifecycleSteps(spec.lifecycle?.pre_start, "pre_start", undefined, undefined, undefined, undefined, instanceId);
922
+ }
923
+ export async function waitForAppRuntimeRunning(instanceId, timeoutMs = 30_000, pollIntervalMs = 1_000) {
924
+ const deadline = Date.now() + timeoutMs;
925
+ while (Date.now() < deadline) {
926
+ const status = await getInstanceInstallRecordRuntimeStatus(instanceId);
927
+ if (status.status === "running")
928
+ return true;
929
+ if (status.status === "dead" || status.status === "failed")
930
+ return false;
931
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
932
+ }
933
+ return false;
934
+ }
935
+ //# sourceMappingURL=lifecycle-scripts.js.map