jishushell 0.6.5 → 0.7.3

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 (1207) hide show
  1. package/apps/anythingllm-container.yaml +16 -170
  2. package/apps/browserless-chromium-container.yaml +16 -10
  3. package/apps/filebrowser-container.yaml +15 -9
  4. package/apps/hermes-container.yaml +20 -5
  5. package/apps/immich-container-lite.yaml +337 -0
  6. package/apps/immich-container.yaml +371 -0
  7. package/apps/jishu-kb-container.yaml +50 -177
  8. package/apps/ollama-binary.yaml +33 -28
  9. package/apps/ollama-cpu-container.yaml +6 -0
  10. package/apps/ollama-with-hollama-binary.yaml +35 -28
  11. package/apps/openclaw-binary.yaml +35 -15
  12. package/apps/openclaw-container.yaml +29 -11
  13. package/apps/openclaw-with-ollama-container.yaml +9 -2
  14. package/apps/openclaw-with-searxng-container.yaml +38 -6
  15. package/apps/searxng-container.yaml +31 -6
  16. package/apps/weknora-container.yaml +26 -21
  17. package/dependencies/jishushell-panel-0.7.3.tgz +0 -0
  18. package/dist/cli/app.js +244 -213
  19. package/dist/cli/app.js.map +1 -1
  20. package/dist/cli/backup.js +15 -12
  21. package/dist/cli/backup.js.map +1 -1
  22. package/dist/cli/core.d.ts +4 -3
  23. package/dist/cli/core.js +392 -227
  24. package/dist/cli/core.js.map +1 -1
  25. package/dist/cli/doctor.d.ts +1 -1
  26. package/dist/cli/doctor.js +113 -10
  27. package/dist/cli/doctor.js.map +1 -1
  28. package/dist/cli/job.js +62 -14
  29. package/dist/cli/job.js.map +1 -1
  30. package/dist/cli/llm.js +80 -11
  31. package/dist/cli/llm.js.map +1 -1
  32. package/dist/cli/managed-list.d.ts +1 -3
  33. package/dist/cli/managed-list.js +18 -16
  34. package/dist/cli/managed-list.js.map +1 -1
  35. package/dist/cli/migrate.d.ts +2 -0
  36. package/dist/cli/migrate.js +160 -0
  37. package/dist/cli/migrate.js.map +1 -0
  38. package/dist/cli.js +1 -0
  39. package/dist/cli.js.map +1 -1
  40. package/dist/config.d.ts +32 -20
  41. package/dist/config.js +132 -51
  42. package/dist/config.js.map +1 -1
  43. package/dist/control.d.ts +6 -6
  44. package/dist/control.js +31 -23
  45. package/dist/control.js.map +1 -1
  46. package/dist/core.d.ts +5 -5
  47. package/dist/core.js +5 -5
  48. package/dist/core.js.map +1 -1
  49. package/dist/install.d.ts +2 -2
  50. package/dist/install.js +78 -37
  51. package/dist/install.js.map +1 -1
  52. package/dist/routes/admin.d.ts +2 -0
  53. package/dist/routes/admin.js +72 -0
  54. package/dist/routes/admin.js.map +1 -0
  55. package/dist/routes/apps.d.ts +1 -1
  56. package/dist/routes/apps.js +101 -193
  57. package/dist/routes/apps.js.map +1 -1
  58. package/dist/routes/auth.js +1 -1
  59. package/dist/routes/auth.js.map +1 -1
  60. package/dist/routes/backup.js +1 -1
  61. package/dist/routes/backup.js.map +1 -1
  62. package/dist/routes/docker.d.ts +2 -0
  63. package/dist/routes/docker.js +58 -0
  64. package/dist/routes/docker.js.map +1 -0
  65. package/dist/routes/external-mounts.d.ts +1 -1
  66. package/dist/routes/external-mounts.js +1 -1
  67. package/dist/routes/external-mounts.js.map +1 -1
  68. package/dist/routes/file-mounts.d.ts +4 -3
  69. package/dist/routes/file-mounts.js +49 -31
  70. package/dist/routes/file-mounts.js.map +1 -1
  71. package/dist/routes/files-organize.d.ts +2 -2
  72. package/dist/routes/files-organize.js +5 -5
  73. package/dist/routes/files-organize.js.map +1 -1
  74. package/dist/routes/files.d.ts +1 -1
  75. package/dist/routes/files.js +1 -1
  76. package/dist/routes/files.js.map +1 -1
  77. package/dist/routes/instances.d.ts +0 -8
  78. package/dist/routes/instances.js +202 -1560
  79. package/dist/routes/instances.js.map +1 -1
  80. package/dist/routes/integration-apps.d.ts +14 -0
  81. package/dist/routes/integration-apps.js +81 -0
  82. package/dist/routes/integration-apps.js.map +1 -0
  83. package/dist/routes/integrations.d.ts +9 -0
  84. package/dist/routes/integrations.js +12 -0
  85. package/dist/routes/integrations.js.map +1 -0
  86. package/dist/routes/llm-proxy.js +26 -3
  87. package/dist/routes/llm-proxy.js.map +1 -1
  88. package/dist/routes/setup.js +53 -38
  89. package/dist/routes/setup.js.map +1 -1
  90. package/dist/routes/system.js +108 -68
  91. package/dist/routes/system.js.map +1 -1
  92. package/dist/routes/webdav.d.ts +1 -1
  93. package/dist/routes/webdav.js +2 -2
  94. package/dist/routes/webdav.js.map +1 -1
  95. package/dist/server.d.ts +6 -0
  96. package/dist/server.js +368 -233
  97. package/dist/server.js.map +1 -1
  98. package/dist/services/app-common/app-compiler.js +186 -0
  99. package/dist/services/app-common/app-compiler.js.map +1 -0
  100. package/dist/services/app-common/app-shared.d.ts +15 -0
  101. package/dist/services/app-common/app-shared.js +64 -0
  102. package/dist/services/app-common/app-shared.js.map +1 -0
  103. package/dist/services/app-common/capability-service.d.ts +45 -0
  104. package/dist/services/app-common/capability-service.js +331 -0
  105. package/dist/services/app-common/capability-service.js.map +1 -0
  106. package/dist/services/app-common/catalog-service.d.ts +59 -0
  107. package/dist/services/app-common/catalog-service.js +318 -0
  108. package/dist/services/app-common/catalog-service.js.map +1 -0
  109. package/dist/services/app-common/create-pipeline.d.ts +26 -0
  110. package/dist/services/app-common/create-pipeline.js +298 -0
  111. package/dist/services/app-common/create-pipeline.js.map +1 -0
  112. package/dist/services/app-common/delete-service.d.ts +5 -0
  113. package/dist/services/app-common/delete-service.js +109 -0
  114. package/dist/services/app-common/delete-service.js.map +1 -0
  115. package/dist/services/app-common/execution-owner.d.ts +23 -0
  116. package/dist/services/app-common/execution-owner.js +124 -0
  117. package/dist/services/app-common/execution-owner.js.map +1 -0
  118. package/dist/services/app-common/execution-service.d.ts +23 -0
  119. package/dist/services/app-common/execution-service.js +105 -0
  120. package/dist/services/app-common/execution-service.js.map +1 -0
  121. package/dist/services/app-common/id-normalizer.d.ts +31 -0
  122. package/dist/services/app-common/id-normalizer.js +83 -0
  123. package/dist/services/app-common/id-normalizer.js.map +1 -0
  124. package/dist/services/app-common/install-store.d.ts +34 -0
  125. package/dist/services/app-common/install-store.js +261 -0
  126. package/dist/services/app-common/install-store.js.map +1 -0
  127. package/dist/services/app-common/instance-store.d.ts +78 -0
  128. package/dist/services/app-common/instance-store.js +498 -0
  129. package/dist/services/app-common/instance-store.js.map +1 -0
  130. package/dist/services/app-common/integration-refs.d.ts +17 -0
  131. package/dist/services/app-common/integration-refs.js +47 -0
  132. package/dist/services/app-common/integration-refs.js.map +1 -0
  133. package/dist/services/app-common/lifecycle-pipeline.d.ts +62 -0
  134. package/dist/services/app-common/lifecycle-pipeline.js +317 -0
  135. package/dist/services/app-common/lifecycle-pipeline.js.map +1 -0
  136. package/dist/services/app-common/lifecycle-scripts.d.ts +38 -0
  137. package/dist/services/app-common/lifecycle-scripts.js +935 -0
  138. package/dist/services/app-common/lifecycle-scripts.js.map +1 -0
  139. package/dist/services/app-common/lifecycle-service.d.ts +68 -0
  140. package/dist/services/app-common/lifecycle-service.js +475 -0
  141. package/dist/services/app-common/lifecycle-service.js.map +1 -0
  142. package/dist/services/app-common/ownership.d.ts +3 -0
  143. package/dist/services/app-common/ownership.js +11 -0
  144. package/dist/services/app-common/ownership.js.map +1 -0
  145. package/dist/services/app-common/paths.d.ts +29 -0
  146. package/dist/services/app-common/paths.js +34 -0
  147. package/dist/services/app-common/paths.js.map +1 -0
  148. package/dist/services/app-common/platform-transform.d.ts +32 -0
  149. package/dist/services/app-common/platform-transform.js +65 -0
  150. package/dist/services/app-common/platform-transform.js.map +1 -0
  151. package/dist/services/app-common/provide-resolver.d.ts +29 -0
  152. package/dist/services/app-common/provide-resolver.js +129 -0
  153. package/dist/services/app-common/provide-resolver.js.map +1 -0
  154. package/dist/services/app-common/remote-spec.d.ts +14 -0
  155. package/dist/services/app-common/remote-spec.js +58 -0
  156. package/dist/services/app-common/remote-spec.js.map +1 -0
  157. package/dist/services/app-common/runtime-builder.d.ts +1 -0
  158. package/dist/services/app-common/runtime-builder.js +2 -0
  159. package/dist/services/app-common/runtime-builder.js.map +1 -0
  160. package/dist/services/app-common/runtime-facts.d.ts +19 -0
  161. package/dist/services/app-common/runtime-facts.js +128 -0
  162. package/dist/services/app-common/runtime-facts.js.map +1 -0
  163. package/dist/services/app-common/service.d.ts +9 -0
  164. package/dist/services/app-common/service.js +10 -0
  165. package/dist/services/app-common/service.js.map +1 -0
  166. package/dist/services/app-common/spec-materializer.d.ts +8 -0
  167. package/dist/services/app-common/spec-materializer.js +295 -0
  168. package/dist/services/app-common/spec-materializer.js.map +1 -0
  169. package/dist/services/app-common/status-refresh.d.ts +33 -0
  170. package/dist/services/app-common/status-refresh.js +771 -0
  171. package/dist/services/app-common/status-refresh.js.map +1 -0
  172. package/dist/services/app-common/task-service.d.ts +29 -0
  173. package/dist/services/app-common/task-service.js +93 -0
  174. package/dist/services/app-common/task-service.js.map +1 -0
  175. package/dist/services/app-common/terminal-session-manager.js +157 -0
  176. package/dist/services/app-common/terminal-session-manager.js.map +1 -0
  177. package/dist/services/app-modules/browserless/routes.d.ts +9 -0
  178. package/dist/services/app-modules/browserless/routes.js +519 -0
  179. package/dist/services/app-modules/browserless/routes.js.map +1 -0
  180. package/dist/services/app-modules/routes.d.ts +2 -0
  181. package/dist/services/app-modules/routes.js +5 -0
  182. package/dist/services/app-modules/routes.js.map +1 -0
  183. package/dist/services/backup/backup-admin.d.ts +95 -0
  184. package/dist/services/backup/backup-admin.js +246 -0
  185. package/dist/services/backup/backup-admin.js.map +1 -0
  186. package/dist/services/backup/backup-manager.d.ts +264 -0
  187. package/dist/services/backup/backup-manager.js +2318 -0
  188. package/dist/services/backup/backup-manager.js.map +1 -0
  189. package/dist/services/backup/backup-verify.js +240 -0
  190. package/dist/services/backup/backup-verify.js.map +1 -0
  191. package/dist/services/capabilities/browser-policy.d.ts +14 -0
  192. package/dist/services/capabilities/browser-policy.js +141 -0
  193. package/dist/services/capabilities/browser-policy.js.map +1 -0
  194. package/dist/services/capabilities/contract.d.ts +49 -0
  195. package/dist/services/capabilities/contract.js +119 -0
  196. package/dist/services/capabilities/contract.js.map +1 -0
  197. package/dist/services/capabilities/endpoint-validator.d.ts +42 -0
  198. package/dist/services/capabilities/endpoint-validator.js +113 -0
  199. package/dist/services/capabilities/endpoint-validator.js.map +1 -0
  200. package/dist/services/capabilities/health.d.ts +16 -0
  201. package/dist/services/capabilities/health.js +121 -0
  202. package/dist/services/capabilities/health.js.map +1 -0
  203. package/dist/services/capabilities/registry.d.ts +56 -0
  204. package/dist/services/capabilities/registry.js +222 -0
  205. package/dist/services/capabilities/registry.js.map +1 -0
  206. package/dist/services/capabilities/sync.d.ts +7 -0
  207. package/dist/services/capabilities/sync.js +223 -0
  208. package/dist/services/capabilities/sync.js.map +1 -0
  209. package/dist/services/capability-proxy/html-rewriters/browserless.d.ts +1 -0
  210. package/dist/services/capability-proxy/html-rewriters/browserless.js +83 -0
  211. package/dist/services/capability-proxy/html-rewriters/browserless.js.map +1 -0
  212. package/dist/services/capability-proxy/html-rewriters/index.d.ts +12 -0
  213. package/dist/services/capability-proxy/html-rewriters/index.js +25 -0
  214. package/dist/services/capability-proxy/html-rewriters/index.js.map +1 -0
  215. package/dist/services/capability-proxy/html-rewriters/jishukb.d.ts +1 -0
  216. package/dist/services/capability-proxy/html-rewriters/jishukb.js +161 -0
  217. package/dist/services/capability-proxy/html-rewriters/jishukb.js.map +1 -0
  218. package/dist/services/capability-proxy/http.d.ts +7 -0
  219. package/dist/services/capability-proxy/http.js +555 -0
  220. package/dist/services/capability-proxy/http.js.map +1 -0
  221. package/dist/services/capability-proxy/terminal.d.ts +4 -0
  222. package/dist/services/capability-proxy/terminal.js +179 -0
  223. package/dist/services/capability-proxy/terminal.js.map +1 -0
  224. package/dist/services/connections/admin.d.ts +80 -0
  225. package/dist/services/connections/admin.js +337 -0
  226. package/dist/services/connections/admin.js.map +1 -0
  227. package/dist/services/connections/apply.d.ts +104 -0
  228. package/dist/services/connections/apply.js +415 -0
  229. package/dist/services/connections/apply.js.map +1 -0
  230. package/dist/services/connections/resolver.d.ts +82 -0
  231. package/dist/services/connections/resolver.js +289 -0
  232. package/dist/services/connections/resolver.js.map +1 -0
  233. package/dist/services/connections/transactor.d.ts +39 -0
  234. package/dist/services/connections/transactor.js +307 -0
  235. package/dist/services/connections/transactor.js.map +1 -0
  236. package/dist/services/files/bootstrap.d.ts +7 -0
  237. package/dist/services/files/bootstrap.js +16 -0
  238. package/dist/services/files/bootstrap.js.map +1 -0
  239. package/dist/services/files/external-mounts.js +187 -0
  240. package/dist/services/files/external-mounts.js.map +1 -0
  241. package/dist/services/files/files-manager.d.ts +265 -0
  242. package/dist/services/files/files-manager.js +1189 -0
  243. package/dist/services/files/files-manager.js.map +1 -0
  244. package/dist/services/files/files-mounts.d.ts +42 -0
  245. package/dist/services/files/files-mounts.js +207 -0
  246. package/dist/services/files/files-mounts.js.map +1 -0
  247. package/dist/services/files/organize/applier.js +218 -0
  248. package/dist/services/files/organize/applier.js.map +1 -0
  249. package/dist/services/files/organize/rules.js +286 -0
  250. package/dist/services/files/organize/rules.js.map +1 -0
  251. package/dist/services/files/organize/scanner.js +366 -0
  252. package/dist/services/files/organize/scanner.js.map +1 -0
  253. package/dist/services/files/organize/store.js +82 -0
  254. package/dist/services/files/organize/store.js.map +1 -0
  255. package/dist/services/files/photos/upload-page.d.ts +2 -0
  256. package/dist/services/files/photos/upload-page.js +248 -0
  257. package/dist/services/files/photos/upload-page.js.map +1 -0
  258. package/dist/services/files/photos/upload-store.d.ts +74 -0
  259. package/dist/services/files/photos/upload-store.js +432 -0
  260. package/dist/services/files/photos/upload-store.js.map +1 -0
  261. package/dist/services/files/webdav/server.d.ts +47 -0
  262. package/dist/services/files/webdav/server.js +329 -0
  263. package/dist/services/files/webdav/server.js.map +1 -0
  264. package/dist/services/files/webdav/xml-builder.js.map +1 -0
  265. package/dist/services/http/proxy-utils.d.ts +7 -0
  266. package/dist/services/http/proxy-utils.js +29 -0
  267. package/dist/services/http/proxy-utils.js.map +1 -0
  268. package/dist/services/http/request-utils.d.ts +3 -0
  269. package/dist/services/http/request-utils.js +23 -0
  270. package/dist/services/http/request-utils.js.map +1 -0
  271. package/dist/services/instances/admin.d.ts +23 -0
  272. package/dist/services/instances/admin.js +218 -0
  273. package/dist/services/instances/admin.js.map +1 -0
  274. package/dist/services/instances/clone.d.ts +26 -0
  275. package/dist/services/instances/clone.js +78 -0
  276. package/dist/services/instances/clone.js.map +1 -0
  277. package/dist/services/instances/config-admin.d.ts +17 -0
  278. package/dist/services/instances/config-admin.js +181 -0
  279. package/dist/services/instances/config-admin.js.map +1 -0
  280. package/dist/services/instances/manager.d.ts +232 -0
  281. package/dist/services/instances/manager.js +1342 -0
  282. package/dist/services/instances/manager.js.map +1 -0
  283. package/dist/services/instances/pairing.d.ts +17 -0
  284. package/dist/services/instances/pairing.js +53 -0
  285. package/dist/services/instances/pairing.js.map +1 -0
  286. package/dist/services/instances/passwords.js +173 -0
  287. package/dist/services/instances/passwords.js.map +1 -0
  288. package/dist/services/instances/status.d.ts +2 -0
  289. package/dist/services/instances/status.js +11 -0
  290. package/dist/services/instances/status.js.map +1 -0
  291. package/dist/services/instances/types.d.ts +21 -0
  292. package/dist/services/instances/types.js +2 -0
  293. package/dist/services/instances/types.js.map +1 -0
  294. package/dist/services/integrations/anythingllm/integration.d.ts +25 -0
  295. package/dist/services/integrations/anythingllm/integration.js +251 -0
  296. package/dist/services/integrations/anythingllm/integration.js.map +1 -0
  297. package/dist/services/integrations/catalog.d.ts +3 -0
  298. package/dist/services/integrations/catalog.js +73 -0
  299. package/dist/services/integrations/catalog.js.map +1 -0
  300. package/dist/services/integrations/custom/integration.d.ts +28 -0
  301. package/dist/services/integrations/custom/integration.js +179 -0
  302. package/dist/services/integrations/custom/integration.js.map +1 -0
  303. package/dist/services/integrations/hermes/integration.d.ts +194 -0
  304. package/dist/services/integrations/hermes/integration.js +1668 -0
  305. package/dist/services/integrations/hermes/integration.js.map +1 -0
  306. package/dist/services/integrations/immich/client.d.ts +93 -0
  307. package/dist/services/integrations/immich/client.js +458 -0
  308. package/dist/services/integrations/immich/client.js.map +1 -0
  309. package/dist/services/integrations/immich/config.d.ts +15 -0
  310. package/dist/services/integrations/immich/config.js +178 -0
  311. package/dist/services/integrations/immich/config.js.map +1 -0
  312. package/dist/services/integrations/immich/discovery.d.ts +9 -0
  313. package/dist/services/integrations/immich/discovery.js +101 -0
  314. package/dist/services/integrations/immich/discovery.js.map +1 -0
  315. package/dist/services/integrations/immich/gallery-renderer.d.ts +5 -0
  316. package/dist/services/integrations/immich/gallery-renderer.js +150 -0
  317. package/dist/services/integrations/immich/gallery-renderer.js.map +1 -0
  318. package/dist/services/integrations/immich/immich-shim.d.ts +11 -0
  319. package/dist/services/integrations/immich/immich-shim.js +439 -0
  320. package/dist/services/integrations/immich/immich-shim.js.map +1 -0
  321. package/dist/services/integrations/immich/integration.d.ts +18 -0
  322. package/dist/services/integrations/immich/integration.js +64 -0
  323. package/dist/services/integrations/immich/integration.js.map +1 -0
  324. package/dist/services/integrations/immich/photo-library.d.ts +4 -0
  325. package/dist/services/integrations/immich/photo-library.js +63 -0
  326. package/dist/services/integrations/immich/photo-library.js.map +1 -0
  327. package/dist/services/integrations/immich/review-executor.d.ts +3 -0
  328. package/dist/services/integrations/immich/review-executor.js +41 -0
  329. package/dist/services/integrations/immich/review-executor.js.map +1 -0
  330. package/dist/services/integrations/immich/review-session-service.d.ts +27 -0
  331. package/dist/services/integrations/immich/review-session-service.js +206 -0
  332. package/dist/services/integrations/immich/review-session-service.js.map +1 -0
  333. package/dist/services/integrations/immich/review-store.d.ts +47 -0
  334. package/dist/services/integrations/immich/review-store.js +347 -0
  335. package/dist/services/integrations/immich/review-store.js.map +1 -0
  336. package/dist/services/integrations/immich/routes.d.ts +7 -0
  337. package/dist/services/integrations/immich/routes.js +363 -0
  338. package/dist/services/integrations/immich/routes.js.map +1 -0
  339. package/dist/services/integrations/immich/types.d.ts +186 -0
  340. package/dist/services/integrations/immich/types.js +2 -0
  341. package/dist/services/integrations/immich/types.js.map +1 -0
  342. package/dist/services/integrations/index.d.ts +41 -0
  343. package/dist/services/integrations/index.js +60 -0
  344. package/dist/services/integrations/index.js.map +1 -0
  345. package/dist/services/integrations/installable/catalog.d.ts +33 -0
  346. package/dist/services/integrations/installable/catalog.js +88 -0
  347. package/dist/services/integrations/installable/catalog.js.map +1 -0
  348. package/dist/services/integrations/installable/index.d.ts +35 -0
  349. package/dist/services/integrations/installable/index.js +170 -0
  350. package/dist/services/integrations/installable/index.js.map +1 -0
  351. package/dist/services/integrations/installable/installers/integration-probes.d.ts +50 -0
  352. package/dist/services/integrations/installable/installers/integration-probes.js +231 -0
  353. package/dist/services/integrations/installable/installers/integration-probes.js.map +1 -0
  354. package/dist/services/integrations/installable/installers/integration.d.ts +30 -0
  355. package/dist/services/integrations/installable/installers/integration.js +283 -0
  356. package/dist/services/integrations/installable/installers/integration.js.map +1 -0
  357. package/dist/services/integrations/installable/installers/registry-probe.js.map +1 -0
  358. package/dist/services/integrations/installable/installers/shell-script.d.ts +46 -0
  359. package/dist/services/integrations/installable/installers/shell-script.js +487 -0
  360. package/dist/services/integrations/installable/installers/shell-script.js.map +1 -0
  361. package/dist/services/integrations/installable/types.d.ts +130 -0
  362. package/dist/services/integrations/installable/types.js +19 -0
  363. package/dist/services/integrations/installable/types.js.map +1 -0
  364. package/dist/services/integrations/jishukb/integration.d.ts +24 -0
  365. package/dist/services/integrations/jishukb/integration.js +300 -0
  366. package/dist/services/integrations/jishukb/integration.js.map +1 -0
  367. package/dist/services/integrations/openclaw/anythingllm-shim.d.ts +46 -0
  368. package/dist/services/integrations/openclaw/anythingllm-shim.js +281 -0
  369. package/dist/services/integrations/openclaw/anythingllm-shim.js.map +1 -0
  370. package/dist/services/integrations/openclaw/drive-shim.js +490 -0
  371. package/dist/services/integrations/openclaw/drive-shim.js.map +1 -0
  372. package/dist/services/integrations/openclaw/integration.d.ts +438 -0
  373. package/dist/services/integrations/openclaw/integration.js +4629 -0
  374. package/dist/services/integrations/openclaw/integration.js.map +1 -0
  375. package/dist/services/integrations/openclaw/jishukb-native-mcp.d.ts +58 -0
  376. package/dist/services/integrations/openclaw/jishukb-native-mcp.js +373 -0
  377. package/dist/services/integrations/openclaw/jishukb-native-mcp.js.map +1 -0
  378. package/dist/services/integrations/openclaw/jishukb-shim.d.ts +52 -0
  379. package/dist/services/integrations/openclaw/jishukb-shim.js +1357 -0
  380. package/dist/services/integrations/openclaw/jishukb-shim.js.map +1 -0
  381. package/dist/services/integrations/openclaw/mcporter-lite.js +276 -0
  382. package/dist/services/integrations/openclaw/mcporter-lite.js.map +1 -0
  383. package/dist/services/integrations/openclaw/mcporter.d.ts +59 -0
  384. package/dist/services/integrations/openclaw/mcporter.js +143 -0
  385. package/dist/services/integrations/openclaw/mcporter.js.map +1 -0
  386. package/dist/services/integrations/openclaw/native-mcp.d.ts +48 -0
  387. package/dist/services/integrations/openclaw/native-mcp.js +125 -0
  388. package/dist/services/integrations/openclaw/native-mcp.js.map +1 -0
  389. package/dist/services/integrations/openclaw/routes.d.ts +21 -0
  390. package/dist/services/integrations/openclaw/routes.js +1194 -0
  391. package/dist/services/integrations/openclaw/routes.js.map +1 -0
  392. package/dist/services/integrations/registry.d.ts +17 -0
  393. package/dist/services/integrations/registry.js +36 -0
  394. package/dist/services/integrations/registry.js.map +1 -0
  395. package/dist/services/integrations/routes.d.ts +2 -0
  396. package/dist/services/integrations/routes.js +9 -0
  397. package/dist/services/integrations/routes.js.map +1 -0
  398. package/dist/services/integrations/types.d.ts +457 -0
  399. package/dist/services/integrations/types.js +2 -0
  400. package/dist/services/integrations/types.js.map +1 -0
  401. package/dist/services/legacy-migrator/classifier.d.ts +44 -0
  402. package/dist/services/legacy-migrator/classifier.js +309 -0
  403. package/dist/services/legacy-migrator/classifier.js.map +1 -0
  404. package/dist/services/legacy-migrator/executor.d.ts +42 -0
  405. package/dist/services/legacy-migrator/executor.js +637 -0
  406. package/dist/services/legacy-migrator/executor.js.map +1 -0
  407. package/dist/services/legacy-migrator/index.d.ts +31 -0
  408. package/dist/services/legacy-migrator/index.js +34 -0
  409. package/dist/services/legacy-migrator/index.js.map +1 -0
  410. package/dist/services/legacy-migrator/planner.d.ts +8 -0
  411. package/dist/services/legacy-migrator/planner.js +154 -0
  412. package/dist/services/legacy-migrator/planner.js.map +1 -0
  413. package/dist/services/legacy-migrator/provider-settings.d.ts +6 -0
  414. package/dist/services/legacy-migrator/provider-settings.js +72 -0
  415. package/dist/services/legacy-migrator/provider-settings.js.map +1 -0
  416. package/dist/services/legacy-migrator/report.d.ts +9 -0
  417. package/dist/services/legacy-migrator/report.js +99 -0
  418. package/dist/services/legacy-migrator/report.js.map +1 -0
  419. package/dist/services/legacy-migrator/scanner.d.ts +13 -0
  420. package/dist/services/legacy-migrator/scanner.js +157 -0
  421. package/dist/services/legacy-migrator/scanner.js.map +1 -0
  422. package/dist/services/legacy-migrator/types.d.ts +97 -0
  423. package/dist/services/legacy-migrator/types.js +23 -0
  424. package/dist/services/legacy-migrator/types.js.map +1 -0
  425. package/dist/services/llm-proxy/instance-proxy.d.ts +17 -1
  426. package/dist/services/llm-proxy/instance-proxy.js +171 -44
  427. package/dist/services/llm-proxy/instance-proxy.js.map +1 -1
  428. package/dist/services/llm-proxy/probe.js +5 -14
  429. package/dist/services/llm-proxy/probe.js.map +1 -1
  430. package/dist/services/llm-proxy/providers.js +23 -31
  431. package/dist/services/llm-proxy/providers.js.map +1 -1
  432. package/dist/services/llm-proxy/ssrf.d.ts +11 -4
  433. package/dist/services/llm-proxy/ssrf.js +45 -7
  434. package/dist/services/llm-proxy/ssrf.js.map +1 -1
  435. package/dist/services/llm-proxy/validate-key.js +16 -37
  436. package/dist/services/llm-proxy/validate-key.js.map +1 -1
  437. package/dist/services/repair/runtime-repair.d.ts +22 -0
  438. package/dist/services/repair/runtime-repair.js +374 -0
  439. package/dist/services/repair/runtime-repair.js.map +1 -0
  440. package/dist/services/runtime/docker-network.d.ts +8 -0
  441. package/dist/services/runtime/docker-network.js +123 -0
  442. package/dist/services/runtime/docker-network.js.map +1 -0
  443. package/dist/services/runtime/driver-registry.d.ts +25 -0
  444. package/dist/services/runtime/driver-registry.js +22 -0
  445. package/dist/services/runtime/driver-registry.js.map +1 -0
  446. package/dist/services/runtime/drivers/nomad.d.ts +261 -0
  447. package/dist/services/runtime/drivers/nomad.js +3122 -0
  448. package/dist/services/runtime/drivers/nomad.js.map +1 -0
  449. package/dist/services/runtime/errors.d.ts +3 -3
  450. package/dist/services/runtime/errors.js +3 -3
  451. package/dist/services/runtime/instance.d.ts +14 -16
  452. package/dist/services/runtime/instance.js +93 -123
  453. package/dist/services/runtime/instance.js.map +1 -1
  454. package/dist/services/runtime/job-id.d.ts +1 -1
  455. package/dist/services/runtime/job-id.js +1 -1
  456. package/dist/services/runtime/mcp-shims/firewall.d.ts +2 -2
  457. package/dist/services/runtime/mcp-shims/firewall.js +2 -2
  458. package/dist/services/runtime/mcp-shims/searxng-shim.d.ts +3 -5
  459. package/dist/services/runtime/mcp-shims/searxng-shim.js +3 -5
  460. package/dist/services/runtime/mcp-shims/searxng-shim.js.map +1 -1
  461. package/dist/services/runtime/mcp-shims/write-mcp-entry.d.ts +20 -20
  462. package/dist/services/runtime/mcp-shims/write-mcp-entry.js +16 -16
  463. package/dist/services/runtime/mcp-shims/write-mcp-entry.js.map +1 -1
  464. package/dist/services/runtime/ownership-marker.d.ts +83 -0
  465. package/dist/services/runtime/ownership-marker.js +109 -0
  466. package/dist/services/runtime/ownership-marker.js.map +1 -0
  467. package/dist/services/runtime/service-manager.d.ts +2 -0
  468. package/dist/services/runtime/service-manager.js +18 -0
  469. package/dist/services/runtime/service-manager.js.map +1 -0
  470. package/dist/services/runtime/types.d.ts +23 -501
  471. package/dist/services/runtime/types.js +0 -12
  472. package/dist/services/runtime/types.js.map +1 -1
  473. package/dist/services/runtime/workload-compiler.d.ts +17 -0
  474. package/dist/services/runtime/workload-compiler.js +550 -0
  475. package/dist/services/runtime/workload-compiler.js.map +1 -0
  476. package/dist/services/runtime/workload-types.d.ts +11 -0
  477. package/dist/services/runtime/workload-types.js +2 -0
  478. package/dist/services/runtime/workload-types.js.map +1 -0
  479. package/dist/services/setup/core-manager.d.ts +50 -0
  480. package/dist/services/setup/core-manager.js +456 -0
  481. package/dist/services/setup/core-manager.js.map +1 -0
  482. package/dist/services/setup/plugin-installer.js +136 -0
  483. package/dist/services/setup/plugin-installer.js.map +1 -0
  484. package/dist/services/setup/setup-manager.d.ts +158 -0
  485. package/dist/services/setup/setup-manager.js +2724 -0
  486. package/dist/services/setup/setup-manager.js.map +1 -0
  487. package/dist/services/system/cli-command.d.ts +5 -0
  488. package/dist/services/system/cli-command.js +18 -0
  489. package/dist/services/system/cli-command.js.map +1 -0
  490. package/dist/services/system/macos-launchd.js +312 -0
  491. package/dist/services/system/macos-launchd.js.map +1 -0
  492. package/dist/services/system/repair-orchestrator.d.ts +71 -0
  493. package/dist/services/system/repair-orchestrator.js +412 -0
  494. package/dist/services/system/repair-orchestrator.js.map +1 -0
  495. package/dist/services/system/runtime-ownership.d.ts +36 -0
  496. package/dist/services/system/runtime-ownership.js +250 -0
  497. package/dist/services/system/runtime-ownership.js.map +1 -0
  498. package/dist/services/system/system-monitor.js +96 -0
  499. package/dist/services/system/system-monitor.js.map +1 -0
  500. package/dist/services/system/system-ollama-provider.d.ts +14 -0
  501. package/dist/services/system/system-ollama-provider.js +129 -0
  502. package/dist/services/system/system-ollama-provider.js.map +1 -0
  503. package/dist/services/system/system-reconciler.d.ts +59 -0
  504. package/dist/services/system/system-reconciler.js +763 -0
  505. package/dist/services/system/system-reconciler.js.map +1 -0
  506. package/dist/services/system/update-manager.d.ts +43 -0
  507. package/dist/services/system/update-manager.js +315 -0
  508. package/dist/services/system/update-manager.js.map +1 -0
  509. package/dist/services/system/upgrade-finalize.d.ts +80 -0
  510. package/dist/services/system/upgrade-finalize.js +507 -0
  511. package/dist/services/system/upgrade-finalize.js.map +1 -0
  512. package/dist/services/tasks/registry.d.ts +44 -0
  513. package/dist/services/tasks/registry.js +90 -0
  514. package/dist/services/tasks/registry.js.map +1 -0
  515. package/dist/services/telemetry/activation.d.ts +6 -2
  516. package/dist/services/telemetry/activation.js +6 -2
  517. package/dist/services/telemetry/activation.js.map +1 -1
  518. package/dist/services/telemetry/heartbeat.d.ts +6 -2
  519. package/dist/services/telemetry/heartbeat.js +6 -2
  520. package/dist/services/telemetry/heartbeat.js.map +1 -1
  521. package/dist/services/workspaces/builder.d.ts +29 -0
  522. package/dist/services/workspaces/builder.js +186 -0
  523. package/dist/services/workspaces/builder.js.map +1 -0
  524. package/dist/types.d.ts +350 -48
  525. package/dist/utils/instance-lock.d.ts +2 -2
  526. package/dist/utils/instance-lock.js +2 -2
  527. package/dist/utils/path-safety.js +1 -1
  528. package/dist/utils/service-user.d.ts +13 -0
  529. package/dist/utils/service-user.js +129 -0
  530. package/dist/utils/service-user.js.map +1 -0
  531. package/install/jishu-install.sh +107 -27
  532. package/install/jishu-uninstall.sh +8 -0
  533. package/install/post-install.sh +162 -185
  534. package/install/post-uninstall.sh +6 -0
  535. package/node_modules/@fastify/static/.github/workflows/ci.yml +1 -1
  536. package/node_modules/@fastify/static/.github/workflows/lock-threads.yml +19 -0
  537. package/node_modules/@fastify/static/LICENSE +1 -3
  538. package/node_modules/@fastify/static/example/server-benchmark.js +39 -0
  539. package/node_modules/@fastify/static/index.js +169 -23
  540. package/node_modules/@fastify/static/lib/dirList.js +20 -6
  541. package/node_modules/@fastify/static/package.json +10 -8
  542. package/node_modules/@fastify/static/test/dir-list.test.js +82 -0
  543. package/node_modules/@fastify/static/test/static.test.js +326 -4
  544. package/node_modules/@fastify/static/types/index.d.ts +0 -4
  545. package/node_modules/@fastify/static/types/index.test-d.ts +1 -1
  546. package/node_modules/brace-expansion/dist/commonjs/index.js +24 -14
  547. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  548. package/node_modules/brace-expansion/dist/esm/index.js +24 -14
  549. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  550. package/node_modules/brace-expansion/package.json +2 -2
  551. package/node_modules/content-disposition/README.md +21 -22
  552. package/node_modules/content-disposition/index.js +122 -44
  553. package/node_modules/content-disposition/package.json +16 -20
  554. package/node_modules/fast-uri/index.js +1 -1
  555. package/node_modules/fast-uri/package.json +1 -1
  556. package/node_modules/fast-uri/test/security.test.js +28 -0
  557. package/node_modules/fastify/SECURITY.md +1 -1
  558. package/node_modules/fastify/SPONSORS.md +6 -4
  559. package/node_modules/fastify/docs/Guides/Database.md +0 -28
  560. package/node_modules/fastify/docs/Guides/Ecosystem.md +13 -2
  561. package/node_modules/fastify/docs/Guides/Serverless.md +2 -2
  562. package/node_modules/fastify/docs/Guides/Write-Plugin.md +1 -1
  563. package/node_modules/fastify/docs/Reference/Encapsulation.md +27 -26
  564. package/node_modules/fastify/docs/Reference/Errors.md +10 -4
  565. package/node_modules/fastify/docs/Reference/HTTP2.md +10 -10
  566. package/node_modules/fastify/docs/Reference/Hooks.md +4 -4
  567. package/node_modules/fastify/docs/Reference/Index.md +14 -16
  568. package/node_modules/fastify/docs/Reference/LTS.md +12 -13
  569. package/node_modules/fastify/docs/Reference/Lifecycle.md +9 -8
  570. package/node_modules/fastify/docs/Reference/Logging.md +44 -39
  571. package/node_modules/fastify/docs/Reference/Middleware.md +21 -25
  572. package/node_modules/fastify/docs/Reference/Principles.md +2 -2
  573. package/node_modules/fastify/docs/Reference/Reply.md +6 -1
  574. package/node_modules/fastify/docs/Reference/Request.md +27 -16
  575. package/node_modules/fastify/docs/Reference/Routes.md +5 -2
  576. package/node_modules/fastify/docs/Reference/Server.md +31 -3
  577. package/node_modules/fastify/docs/Reference/Type-Providers.md +29 -5
  578. package/node_modules/fastify/docs/Reference/Validation-and-Serialization.md +15 -2
  579. package/node_modules/fastify/docs/Reference/Warnings.md +7 -6
  580. package/node_modules/fastify/eslint.config.js +7 -2
  581. package/node_modules/fastify/fastify.d.ts +8 -3
  582. package/node_modules/fastify/fastify.js +43 -14
  583. package/node_modules/fastify/lib/content-type-parser.js +13 -1
  584. package/node_modules/fastify/lib/decorate.js +11 -3
  585. package/node_modules/fastify/lib/error-handler.js +4 -3
  586. package/node_modules/fastify/lib/error-serializer.js +59 -59
  587. package/node_modules/fastify/lib/errors.js +16 -1
  588. package/node_modules/fastify/lib/four-oh-four.js +14 -9
  589. package/node_modules/fastify/lib/handle-request.js +11 -5
  590. package/node_modules/fastify/lib/plugin-override.js +2 -1
  591. package/node_modules/fastify/lib/plugin-utils.js +5 -5
  592. package/node_modules/fastify/lib/reply.js +63 -8
  593. package/node_modules/fastify/lib/request.js +14 -4
  594. package/node_modules/fastify/lib/route.js +20 -6
  595. package/node_modules/fastify/lib/schema-controller.js +1 -1
  596. package/node_modules/fastify/lib/schemas.js +37 -30
  597. package/node_modules/fastify/lib/symbols.js +3 -1
  598. package/node_modules/fastify/lib/validation.js +1 -13
  599. package/node_modules/fastify/lib/warnings.js +3 -3
  600. package/node_modules/fastify/package.json +13 -15
  601. package/node_modules/fastify/scripts/validate-ecosystem-links.js +1 -0
  602. package/node_modules/fastify/test/bundler/esbuild/package.json +1 -1
  603. package/node_modules/fastify/test/close-pipelining.test.js +1 -2
  604. package/node_modules/fastify/test/custom-http-server.test.js +38 -0
  605. package/node_modules/fastify/test/decorator-instance-properties.test.js +63 -0
  606. package/node_modules/fastify/test/diagnostics-channel/async-error-handler.test.js +74 -0
  607. package/node_modules/fastify/test/hooks.test.js +23 -0
  608. package/node_modules/fastify/test/http-methods/get.test.js +1 -1
  609. package/node_modules/fastify/test/http2/plain.test.js +135 -0
  610. package/node_modules/fastify/test/http2/secure-with-fallback.test.js +1 -1
  611. package/node_modules/fastify/test/https/https.test.js +1 -2
  612. package/node_modules/fastify/test/internals/errors.test.js +31 -1
  613. package/node_modules/fastify/test/internals/plugin.test.js +3 -1
  614. package/node_modules/fastify/test/internals/request.test.js +27 -3
  615. package/node_modules/fastify/test/internals/schema-controller-perf.test.js +33 -0
  616. package/node_modules/fastify/test/logger/logging.test.js +18 -1
  617. package/node_modules/fastify/test/logger/options.test.js +38 -1
  618. package/node_modules/fastify/test/reply-error.test.js +1 -1
  619. package/node_modules/fastify/test/reply-trailers.test.js +70 -0
  620. package/node_modules/fastify/test/request-media-type.test.js +105 -0
  621. package/node_modules/fastify/test/route-prefix.test.js +34 -0
  622. package/node_modules/fastify/test/router-options.test.js +222 -11
  623. package/node_modules/fastify/test/schema-serialization.test.js +108 -0
  624. package/node_modules/fastify/test/schema-validation.test.js +24 -0
  625. package/node_modules/fastify/test/scripts/validate-ecosystem-links.test.js +40 -57
  626. package/node_modules/fastify/test/throw.test.js +14 -0
  627. package/node_modules/fastify/test/trust-proxy.test.js +21 -0
  628. package/node_modules/fastify/test/types/content-type-parser.tst.ts +70 -0
  629. package/node_modules/fastify/test/types/decorate-request-reply.tst.ts +18 -0
  630. package/node_modules/fastify/test/types/dummy-plugin.mts +9 -0
  631. package/node_modules/fastify/test/types/errors.tst.ts +91 -0
  632. package/node_modules/fastify/test/types/fastify.tst.ts +351 -0
  633. package/node_modules/fastify/test/types/hooks.tst.ts +578 -0
  634. package/node_modules/fastify/test/types/instance.tst.ts +597 -0
  635. package/node_modules/fastify/test/types/logger.tst.ts +276 -0
  636. package/node_modules/fastify/test/types/plugin.tst.ts +96 -0
  637. package/node_modules/fastify/test/types/register.tst.ts +245 -0
  638. package/node_modules/fastify/test/types/reply.tst.ts +297 -0
  639. package/node_modules/fastify/test/types/request.tst.ts +199 -0
  640. package/node_modules/fastify/test/types/route.tst.ts +576 -0
  641. package/node_modules/fastify/test/types/schema.tst.ts +135 -0
  642. package/node_modules/fastify/test/types/serverFactory.tst.ts +37 -0
  643. package/node_modules/fastify/test/types/tsconfig.json +9 -0
  644. package/node_modules/fastify/test/types/type-provider.tst.ts +1219 -0
  645. package/node_modules/fastify/test/types/using.tst.ts +14 -0
  646. package/node_modules/fastify/types/errors.d.ts +3 -0
  647. package/node_modules/fastify/types/request.d.ts +23 -2
  648. package/node_modules/glob/README.md +39 -130
  649. package/node_modules/glob/dist/commonjs/glob.d.ts +8 -0
  650. package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
  651. package/node_modules/glob/dist/commonjs/glob.js +2 -1
  652. package/node_modules/glob/dist/commonjs/glob.js.map +1 -1
  653. package/node_modules/glob/dist/commonjs/index.min.js +4 -0
  654. package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
  655. package/node_modules/glob/dist/commonjs/pattern.d.ts +3 -0
  656. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
  657. package/node_modules/glob/dist/commonjs/pattern.js +4 -0
  658. package/node_modules/glob/dist/commonjs/pattern.js.map +1 -1
  659. package/node_modules/glob/dist/esm/glob.d.ts +8 -0
  660. package/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
  661. package/node_modules/glob/dist/esm/glob.js +2 -1
  662. package/node_modules/glob/dist/esm/glob.js.map +1 -1
  663. package/node_modules/glob/dist/esm/index.min.js +4 -0
  664. package/node_modules/glob/dist/esm/index.min.js.map +7 -0
  665. package/node_modules/glob/dist/esm/pattern.d.ts +3 -0
  666. package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
  667. package/node_modules/glob/dist/esm/pattern.js +4 -0
  668. package/node_modules/glob/dist/esm/pattern.js.map +1 -1
  669. package/node_modules/glob/package.json +38 -37
  670. package/node_modules/jishushell-panel/README.md +4 -4
  671. package/node_modules/jishushell-panel/output/dist/server.js +17 -6
  672. package/node_modules/jishushell-panel/output/dist/server.js.map +1 -1
  673. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-Ce5d1xna.js +1 -0
  674. package/node_modules/jishushell-panel/output/public/assets/Dashboard-BXame3yg.js +1 -0
  675. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-BHZtPCJd.js +1 -0
  676. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-CB3GbNX9.js +4 -0
  677. package/node_modules/jishushell-panel/output/public/assets/InitPassword-Boab9F6g.js +1 -0
  678. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-DrIWCqo-.js +14 -0
  679. package/node_modules/jishushell-panel/output/public/assets/Login-CzpOkNau.js +1 -0
  680. package/node_modules/jishushell-panel/output/public/assets/NewInstance-CANXyCcL.js +1 -0
  681. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-BABo9VOC.js +1 -0
  682. package/node_modules/jishushell-panel/output/public/assets/Settings-CKp5XxFh.js +1 -0
  683. package/node_modules/jishushell-panel/output/public/assets/Setup-C7xVDPow.js +1 -0
  684. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-B765Xz4C.js +1 -0
  685. package/node_modules/jishushell-panel/output/public/assets/api-C70Gt678.js +4 -0
  686. package/node_modules/jishushell-panel/output/public/assets/index-Bs6DSbiR.js +23 -0
  687. package/node_modules/jishushell-panel/output/public/assets/index-DnnqTf7s.css +1 -0
  688. package/node_modules/jishushell-panel/output/public/assets/registry-sWIZsIEF.js +2 -0
  689. package/node_modules/jishushell-panel/output/public/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  690. package/node_modules/jishushell-panel/output/public/assets/setup-task-q21GnI0E.js +1 -0
  691. package/node_modules/jishushell-panel/output/public/assets/usePolling-D4IDOQd_.js +1 -0
  692. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-Df8aUdv8.js +1 -0
  693. package/node_modules/jishushell-panel/output/public/assets/vendor-react-0L0rjmYG.js +8 -0
  694. package/node_modules/jishushell-panel/output/public/index.html +6 -4
  695. package/node_modules/jishushell-panel/package.json +2 -2
  696. package/node_modules/semver/classes/range.js +17 -4
  697. package/node_modules/semver/package.json +2 -2
  698. package/package.json +12 -64
  699. package/scripts/check-app-path-boundaries.mjs +121 -0
  700. package/scripts/check-app-spec.mjs +123 -29
  701. package/scripts/check-architecture-boundaries.mjs +178 -0
  702. package/scripts/check-colima-launchd.mjs +10 -8
  703. package/scripts/check-integration-isolation.ts +541 -0
  704. package/scripts/check-new-file-tests.mjs +11 -3
  705. package/scripts/check-open-core-boundaries.mjs +60 -10
  706. package/scripts/check-test-layering.sh +1 -1
  707. package/scripts/fixtures/instances/hermes-sample/instance.json +3 -2
  708. package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +1 -1
  709. package/scripts/local-web-upgrade-test.README +4 -3
  710. package/scripts/local-web-upgrade-test.example.env +2 -2
  711. package/scripts/local-web-upgrade-test.sh +14 -1
  712. package/scripts/pack-gui-and-send-pi.sh +43 -0
  713. package/scripts/perf/instances.js +1 -1
  714. package/scripts/prune-open-core-dist.mjs +89 -2
  715. package/scripts/smoke/hermes-bootstrap.sh +5 -5
  716. package/templates/hermes-entrypoint.sh +19 -29
  717. package/apps/openwebui-container.yaml +0 -97
  718. package/apps/playwright-container.yaml +0 -126
  719. package/dependencies/jishushell-panel-0.6.5.tgz +0 -0
  720. package/dist/crypto-shim.d.ts +0 -1
  721. package/dist/crypto-shim.js +0 -2
  722. package/dist/crypto-shim.js.map +0 -1
  723. package/dist/routes/agent-apps.d.ts +0 -14
  724. package/dist/routes/agent-apps.js +0 -77
  725. package/dist/routes/agent-apps.js.map +0 -1
  726. package/dist/routes/internal.d.ts +0 -2
  727. package/dist/routes/internal.js +0 -55
  728. package/dist/routes/internal.js.map +0 -1
  729. package/dist/routes/openclaw-routes.d.ts +0 -22
  730. package/dist/routes/openclaw-routes.js +0 -1020
  731. package/dist/routes/openclaw-routes.js.map +0 -1
  732. package/dist/routes/runtime.d.ts +0 -15
  733. package/dist/routes/runtime.js +0 -76
  734. package/dist/routes/runtime.js.map +0 -1
  735. package/dist/services/agent-apps/catalog.d.ts +0 -33
  736. package/dist/services/agent-apps/catalog.js +0 -88
  737. package/dist/services/agent-apps/catalog.js.map +0 -1
  738. package/dist/services/agent-apps/index.d.ts +0 -36
  739. package/dist/services/agent-apps/index.js +0 -171
  740. package/dist/services/agent-apps/index.js.map +0 -1
  741. package/dist/services/agent-apps/installers/adapter-probes.d.ts +0 -49
  742. package/dist/services/agent-apps/installers/adapter-probes.js +0 -230
  743. package/dist/services/agent-apps/installers/adapter-probes.js.map +0 -1
  744. package/dist/services/agent-apps/installers/adapter.d.ts +0 -30
  745. package/dist/services/agent-apps/installers/adapter.js +0 -171
  746. package/dist/services/agent-apps/installers/adapter.js.map +0 -1
  747. package/dist/services/agent-apps/installers/registry-probe.js.map +0 -1
  748. package/dist/services/agent-apps/installers/shell-script.d.ts +0 -47
  749. package/dist/services/agent-apps/installers/shell-script.js +0 -488
  750. package/dist/services/agent-apps/installers/shell-script.js.map +0 -1
  751. package/dist/services/agent-apps/types.d.ts +0 -128
  752. package/dist/services/agent-apps/types.js +0 -17
  753. package/dist/services/agent-apps/types.js.map +0 -1
  754. package/dist/services/app/app-compiler.js +0 -185
  755. package/dist/services/app/app-compiler.js.map +0 -1
  756. package/dist/services/app/app-manager.d.ts +0 -184
  757. package/dist/services/app/app-manager.js +0 -2933
  758. package/dist/services/app/app-manager.js.map +0 -1
  759. package/dist/services/app/custom-manager.d.ts +0 -27
  760. package/dist/services/app/custom-manager.js +0 -382
  761. package/dist/services/app/custom-manager.js.map +0 -1
  762. package/dist/services/app/hermes-agent-manager.d.ts +0 -20
  763. package/dist/services/app/hermes-agent-manager.js +0 -299
  764. package/dist/services/app/hermes-agent-manager.js.map +0 -1
  765. package/dist/services/app/id-normalizer.d.ts +0 -27
  766. package/dist/services/app/id-normalizer.js +0 -77
  767. package/dist/services/app/id-normalizer.js.map +0 -1
  768. package/dist/services/app/ollama-manager.d.ts +0 -18
  769. package/dist/services/app/ollama-manager.js +0 -224
  770. package/dist/services/app/ollama-manager.js.map +0 -1
  771. package/dist/services/app/openclaw-manager.d.ts +0 -63
  772. package/dist/services/app/openclaw-manager.js +0 -1215
  773. package/dist/services/app/openclaw-manager.js.map +0 -1
  774. package/dist/services/app/paths.d.ts +0 -27
  775. package/dist/services/app/paths.js +0 -40
  776. package/dist/services/app/paths.js.map +0 -1
  777. package/dist/services/app/platform-transform.d.ts +0 -32
  778. package/dist/services/app/platform-transform.js +0 -65
  779. package/dist/services/app/platform-transform.js.map +0 -1
  780. package/dist/services/app/provide-resolver.d.ts +0 -29
  781. package/dist/services/app/provide-resolver.js +0 -135
  782. package/dist/services/app/provide-resolver.js.map +0 -1
  783. package/dist/services/app/registry.d.ts +0 -17
  784. package/dist/services/app/registry.js +0 -31
  785. package/dist/services/app/registry.js.map +0 -1
  786. package/dist/services/app/remote-spec.d.ts +0 -14
  787. package/dist/services/app/remote-spec.js +0 -58
  788. package/dist/services/app/remote-spec.js.map +0 -1
  789. package/dist/services/app/terminal-session-manager.js +0 -157
  790. package/dist/services/app/terminal-session-manager.js.map +0 -1
  791. package/dist/services/app/types.d.ts +0 -74
  792. package/dist/services/app/types.js +0 -16
  793. package/dist/services/app/types.js.map +0 -1
  794. package/dist/services/app-config-admin.d.ts +0 -17
  795. package/dist/services/app-config-admin.js +0 -177
  796. package/dist/services/app-config-admin.js.map +0 -1
  797. package/dist/services/app-create-from-installed.d.ts +0 -23
  798. package/dist/services/app-create-from-installed.js +0 -75
  799. package/dist/services/app-create-from-installed.js.map +0 -1
  800. package/dist/services/app-passwords.js +0 -173
  801. package/dist/services/app-passwords.js.map +0 -1
  802. package/dist/services/backup-admin.d.ts +0 -101
  803. package/dist/services/backup-admin.js +0 -259
  804. package/dist/services/backup-admin.js.map +0 -1
  805. package/dist/services/backup-manager.d.ts +0 -264
  806. package/dist/services/backup-manager.js +0 -2263
  807. package/dist/services/backup-manager.js.map +0 -1
  808. package/dist/services/backup-verify.js +0 -240
  809. package/dist/services/backup-verify.js.map +0 -1
  810. package/dist/services/capability-endpoint-validator.d.ts +0 -41
  811. package/dist/services/capability-endpoint-validator.js +0 -114
  812. package/dist/services/capability-endpoint-validator.js.map +0 -1
  813. package/dist/services/capability-health.d.ts +0 -16
  814. package/dist/services/capability-health.js +0 -121
  815. package/dist/services/capability-health.js.map +0 -1
  816. package/dist/services/capability-registry.d.ts +0 -29
  817. package/dist/services/capability-registry.js +0 -176
  818. package/dist/services/capability-registry.js.map +0 -1
  819. package/dist/services/capability-sync.d.ts +0 -4
  820. package/dist/services/capability-sync.js +0 -220
  821. package/dist/services/capability-sync.js.map +0 -1
  822. package/dist/services/connection-admin.d.ts +0 -74
  823. package/dist/services/connection-admin.js +0 -287
  824. package/dist/services/connection-admin.js.map +0 -1
  825. package/dist/services/connection-apply.d.ts +0 -91
  826. package/dist/services/connection-apply.js +0 -471
  827. package/dist/services/connection-apply.js.map +0 -1
  828. package/dist/services/connection-resolver.d.ts +0 -65
  829. package/dist/services/connection-resolver.js +0 -281
  830. package/dist/services/connection-resolver.js.map +0 -1
  831. package/dist/services/connection-transactor.d.ts +0 -39
  832. package/dist/services/connection-transactor.js +0 -354
  833. package/dist/services/connection-transactor.js.map +0 -1
  834. package/dist/services/core-manager.d.ts +0 -50
  835. package/dist/services/core-manager.js +0 -411
  836. package/dist/services/core-manager.js.map +0 -1
  837. package/dist/services/external-mounts.js +0 -187
  838. package/dist/services/external-mounts.js.map +0 -1
  839. package/dist/services/files-manager.d.ts +0 -252
  840. package/dist/services/files-manager.js +0 -1156
  841. package/dist/services/files-manager.js.map +0 -1
  842. package/dist/services/files-mounts.d.ts +0 -42
  843. package/dist/services/files-mounts.js +0 -207
  844. package/dist/services/files-mounts.js.map +0 -1
  845. package/dist/services/instance-admin.d.ts +0 -26
  846. package/dist/services/instance-admin.js +0 -218
  847. package/dist/services/instance-admin.js.map +0 -1
  848. package/dist/services/instance-manager.d.ts +0 -192
  849. package/dist/services/instance-manager.js +0 -1289
  850. package/dist/services/instance-manager.js.map +0 -1
  851. package/dist/services/macos-launchd.js +0 -312
  852. package/dist/services/macos-launchd.js.map +0 -1
  853. package/dist/services/nomad-manager.d.ts +0 -307
  854. package/dist/services/nomad-manager.js +0 -3958
  855. package/dist/services/nomad-manager.js.map +0 -1
  856. package/dist/services/organize/applier.js +0 -218
  857. package/dist/services/organize/applier.js.map +0 -1
  858. package/dist/services/organize/rules.js +0 -286
  859. package/dist/services/organize/rules.js.map +0 -1
  860. package/dist/services/organize/scanner.js +0 -366
  861. package/dist/services/organize/scanner.js.map +0 -1
  862. package/dist/services/organize/store.js +0 -82
  863. package/dist/services/organize/store.js.map +0 -1
  864. package/dist/services/plugin-installer.js +0 -128
  865. package/dist/services/plugin-installer.js.map +0 -1
  866. package/dist/services/process-manager.d.ts +0 -25
  867. package/dist/services/process-manager.js +0 -568
  868. package/dist/services/process-manager.js.map +0 -1
  869. package/dist/services/runtime/adapters/custom.d.ts +0 -20
  870. package/dist/services/runtime/adapters/custom.js +0 -188
  871. package/dist/services/runtime/adapters/custom.js.map +0 -1
  872. package/dist/services/runtime/adapters/hermes.d.ts +0 -204
  873. package/dist/services/runtime/adapters/hermes.js +0 -1684
  874. package/dist/services/runtime/adapters/hermes.js.map +0 -1
  875. package/dist/services/runtime/adapters/openclaw-mcporter.d.ts +0 -45
  876. package/dist/services/runtime/adapters/openclaw-mcporter.js +0 -108
  877. package/dist/services/runtime/adapters/openclaw-mcporter.js.map +0 -1
  878. package/dist/services/runtime/adapters/openclaw.d.ts +0 -426
  879. package/dist/services/runtime/adapters/openclaw.js +0 -3975
  880. package/dist/services/runtime/adapters/openclaw.js.map +0 -1
  881. package/dist/services/runtime/index.d.ts +0 -34
  882. package/dist/services/runtime/index.js +0 -51
  883. package/dist/services/runtime/index.js.map +0 -1
  884. package/dist/services/runtime/mcp-shims/anythingllm-shim.d.ts +0 -46
  885. package/dist/services/runtime/mcp-shims/anythingllm-shim.js +0 -281
  886. package/dist/services/runtime/mcp-shims/anythingllm-shim.js.map +0 -1
  887. package/dist/services/runtime/mcp-shims/drive-shim.js +0 -490
  888. package/dist/services/runtime/mcp-shims/drive-shim.js.map +0 -1
  889. package/dist/services/runtime/mcp-shims/jishukb-shim.d.ts +0 -48
  890. package/dist/services/runtime/mcp-shims/jishukb-shim.js +0 -723
  891. package/dist/services/runtime/mcp-shims/jishukb-shim.js.map +0 -1
  892. package/dist/services/runtime/mcp-shims/mcporter-lite.js +0 -276
  893. package/dist/services/runtime/mcp-shims/mcporter-lite.js.map +0 -1
  894. package/dist/services/runtime/migrations.d.ts +0 -23
  895. package/dist/services/runtime/migrations.js +0 -125
  896. package/dist/services/runtime/migrations.js.map +0 -1
  897. package/dist/services/runtime/registry.d.ts +0 -13
  898. package/dist/services/runtime/registry.js +0 -32
  899. package/dist/services/runtime/registry.js.map +0 -1
  900. package/dist/services/runtime-identity.d.ts +0 -13
  901. package/dist/services/runtime-identity.js +0 -166
  902. package/dist/services/runtime-identity.js.map +0 -1
  903. package/dist/services/runtime-repair.d.ts +0 -52
  904. package/dist/services/runtime-repair.js +0 -352
  905. package/dist/services/runtime-repair.js.map +0 -1
  906. package/dist/services/setup-manager.d.ts +0 -158
  907. package/dist/services/setup-manager.js +0 -2740
  908. package/dist/services/setup-manager.js.map +0 -1
  909. package/dist/services/suggestions.d.ts +0 -27
  910. package/dist/services/suggestions.js +0 -133
  911. package/dist/services/suggestions.js.map +0 -1
  912. package/dist/services/system-monitor.js +0 -79
  913. package/dist/services/system-monitor.js.map +0 -1
  914. package/dist/services/system-ollama-provider.d.ts +0 -14
  915. package/dist/services/system-ollama-provider.js +0 -125
  916. package/dist/services/system-ollama-provider.js.map +0 -1
  917. package/dist/services/system-reconciler.d.ts +0 -72
  918. package/dist/services/system-reconciler.js +0 -600
  919. package/dist/services/system-reconciler.js.map +0 -1
  920. package/dist/services/task-registry.d.ts +0 -44
  921. package/dist/services/task-registry.js +0 -76
  922. package/dist/services/task-registry.js.map +0 -1
  923. package/dist/services/types-shim.d.ts +0 -16
  924. package/dist/services/types-shim.js +0 -2
  925. package/dist/services/types-shim.js.map +0 -1
  926. package/dist/services/update-manager.d.ts +0 -47
  927. package/dist/services/update-manager.js +0 -351
  928. package/dist/services/update-manager.js.map +0 -1
  929. package/dist/services/webdav/server.d.ts +0 -24
  930. package/dist/services/webdav/server.js +0 -420
  931. package/dist/services/webdav/server.js.map +0 -1
  932. package/dist/services/webdav/xml-builder.js.map +0 -1
  933. package/dist/services/workspace-builder.d.ts +0 -29
  934. package/dist/services/workspace-builder.js +0 -188
  935. package/dist/services/workspace-builder.js.map +0 -1
  936. package/node_modules/@fastify/static/.github/stale.yml +0 -21
  937. package/node_modules/@isaacs/cliui/LICENSE.md +0 -63
  938. package/node_modules/@isaacs/cliui/README.md +0 -151
  939. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts +0 -4
  940. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts.map +0 -1
  941. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js +0 -16
  942. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js.map +0 -1
  943. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts +0 -34
  944. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts.map +0 -1
  945. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js +0 -170
  946. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js.map +0 -1
  947. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts +0 -6
  948. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts.map +0 -1
  949. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js +0 -307
  950. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js.map +0 -1
  951. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts +0 -2
  952. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts.map +0 -1
  953. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js +0 -7
  954. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js.map +0 -1
  955. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts +0 -41
  956. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts.map +0 -1
  957. package/node_modules/@isaacs/cliui/dist/commonjs/index.js +0 -322
  958. package/node_modules/@isaacs/cliui/dist/commonjs/index.js.map +0 -1
  959. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js +0 -12
  960. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js.map +0 -7
  961. package/node_modules/@isaacs/cliui/dist/commonjs/package.json +0 -3
  962. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts +0 -5
  963. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts.map +0 -1
  964. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js +0 -49
  965. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js.map +0 -1
  966. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts +0 -2
  967. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts.map +0 -1
  968. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js +0 -8
  969. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js.map +0 -1
  970. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts +0 -7
  971. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts.map +0 -1
  972. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js +0 -176
  973. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js.map +0 -1
  974. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts +0 -4
  975. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts.map +0 -1
  976. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js +0 -12
  977. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js.map +0 -1
  978. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts +0 -34
  979. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts.map +0 -1
  980. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js +0 -167
  981. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js.map +0 -1
  982. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts +0 -6
  983. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts.map +0 -1
  984. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js +0 -299
  985. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js.map +0 -1
  986. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts +0 -2
  987. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts.map +0 -1
  988. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js +0 -3
  989. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js.map +0 -1
  990. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts +0 -41
  991. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts.map +0 -1
  992. package/node_modules/@isaacs/cliui/dist/esm/index.js +0 -317
  993. package/node_modules/@isaacs/cliui/dist/esm/index.js.map +0 -1
  994. package/node_modules/@isaacs/cliui/dist/esm/index.min.js +0 -12
  995. package/node_modules/@isaacs/cliui/dist/esm/index.min.js.map +0 -7
  996. package/node_modules/@isaacs/cliui/dist/esm/package.json +0 -3
  997. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts +0 -5
  998. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts.map +0 -1
  999. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js +0 -46
  1000. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js.map +0 -1
  1001. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts +0 -2
  1002. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts.map +0 -1
  1003. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js +0 -4
  1004. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js.map +0 -1
  1005. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts +0 -7
  1006. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts.map +0 -1
  1007. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js +0 -172
  1008. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js.map +0 -1
  1009. package/node_modules/@isaacs/cliui/package.json +0 -163
  1010. package/node_modules/content-disposition/HISTORY.md +0 -60
  1011. package/node_modules/cross-spawn/LICENSE +0 -21
  1012. package/node_modules/cross-spawn/README.md +0 -89
  1013. package/node_modules/cross-spawn/index.js +0 -39
  1014. package/node_modules/cross-spawn/lib/enoent.js +0 -59
  1015. package/node_modules/cross-spawn/lib/parse.js +0 -91
  1016. package/node_modules/cross-spawn/lib/util/escape.js +0 -47
  1017. package/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
  1018. package/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
  1019. package/node_modules/cross-spawn/package.json +0 -73
  1020. package/node_modules/fastify/test/types/content-type-parser.test-d.ts +0 -72
  1021. package/node_modules/fastify/test/types/decorate-request-reply.test-d.ts +0 -18
  1022. package/node_modules/fastify/test/types/dummy-plugin.ts +0 -9
  1023. package/node_modules/fastify/test/types/errors.test-d.ts +0 -90
  1024. package/node_modules/fastify/test/types/fastify.test-d.ts +0 -352
  1025. package/node_modules/fastify/test/types/hooks.test-d.ts +0 -550
  1026. package/node_modules/fastify/test/types/import.ts +0 -2
  1027. package/node_modules/fastify/test/types/instance.test-d.ts +0 -588
  1028. package/node_modules/fastify/test/types/logger.test-d.ts +0 -277
  1029. package/node_modules/fastify/test/types/plugin.test-d.ts +0 -97
  1030. package/node_modules/fastify/test/types/register.test-d.ts +0 -237
  1031. package/node_modules/fastify/test/types/reply.test-d.ts +0 -254
  1032. package/node_modules/fastify/test/types/request.test-d.ts +0 -188
  1033. package/node_modules/fastify/test/types/route.test-d.ts +0 -553
  1034. package/node_modules/fastify/test/types/schema.test-d.ts +0 -135
  1035. package/node_modules/fastify/test/types/serverFactory.test-d.ts +0 -37
  1036. package/node_modules/fastify/test/types/type-provider.test-d.ts +0 -1213
  1037. package/node_modules/fastify/test/types/using.test-d.ts +0 -17
  1038. package/node_modules/foreground-child/LICENSE +0 -15
  1039. package/node_modules/foreground-child/README.md +0 -128
  1040. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts +0 -2
  1041. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map +0 -1
  1042. package/node_modules/foreground-child/dist/commonjs/all-signals.js +0 -58
  1043. package/node_modules/foreground-child/dist/commonjs/all-signals.js.map +0 -1
  1044. package/node_modules/foreground-child/dist/commonjs/index.d.ts +0 -58
  1045. package/node_modules/foreground-child/dist/commonjs/index.d.ts.map +0 -1
  1046. package/node_modules/foreground-child/dist/commonjs/index.js +0 -123
  1047. package/node_modules/foreground-child/dist/commonjs/index.js.map +0 -1
  1048. package/node_modules/foreground-child/dist/commonjs/package.json +0 -3
  1049. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts +0 -6
  1050. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map +0 -1
  1051. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js +0 -38
  1052. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js.map +0 -1
  1053. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts +0 -10
  1054. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map +0 -1
  1055. package/node_modules/foreground-child/dist/commonjs/watchdog.js +0 -50
  1056. package/node_modules/foreground-child/dist/commonjs/watchdog.js.map +0 -1
  1057. package/node_modules/foreground-child/dist/esm/all-signals.d.ts +0 -2
  1058. package/node_modules/foreground-child/dist/esm/all-signals.d.ts.map +0 -1
  1059. package/node_modules/foreground-child/dist/esm/all-signals.js +0 -52
  1060. package/node_modules/foreground-child/dist/esm/all-signals.js.map +0 -1
  1061. package/node_modules/foreground-child/dist/esm/index.d.ts +0 -58
  1062. package/node_modules/foreground-child/dist/esm/index.d.ts.map +0 -1
  1063. package/node_modules/foreground-child/dist/esm/index.js +0 -115
  1064. package/node_modules/foreground-child/dist/esm/index.js.map +0 -1
  1065. package/node_modules/foreground-child/dist/esm/package.json +0 -3
  1066. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts +0 -6
  1067. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map +0 -1
  1068. package/node_modules/foreground-child/dist/esm/proxy-signals.js +0 -34
  1069. package/node_modules/foreground-child/dist/esm/proxy-signals.js.map +0 -1
  1070. package/node_modules/foreground-child/dist/esm/watchdog.d.ts +0 -10
  1071. package/node_modules/foreground-child/dist/esm/watchdog.d.ts.map +0 -1
  1072. package/node_modules/foreground-child/dist/esm/watchdog.js +0 -46
  1073. package/node_modules/foreground-child/dist/esm/watchdog.js.map +0 -1
  1074. package/node_modules/foreground-child/package.json +0 -106
  1075. package/node_modules/glob/dist/esm/bin.d.mts +0 -3
  1076. package/node_modules/glob/dist/esm/bin.d.mts.map +0 -1
  1077. package/node_modules/glob/dist/esm/bin.mjs +0 -346
  1078. package/node_modules/glob/dist/esm/bin.mjs.map +0 -1
  1079. package/node_modules/isexe/.npmignore +0 -2
  1080. package/node_modules/isexe/LICENSE +0 -15
  1081. package/node_modules/isexe/README.md +0 -51
  1082. package/node_modules/isexe/index.js +0 -57
  1083. package/node_modules/isexe/mode.js +0 -41
  1084. package/node_modules/isexe/package.json +0 -31
  1085. package/node_modules/isexe/test/basic.js +0 -221
  1086. package/node_modules/isexe/windows.js +0 -42
  1087. package/node_modules/jackspeak/LICENSE.md +0 -55
  1088. package/node_modules/jackspeak/README.md +0 -394
  1089. package/node_modules/jackspeak/dist/commonjs/index.d.ts +0 -323
  1090. package/node_modules/jackspeak/dist/commonjs/index.d.ts.map +0 -1
  1091. package/node_modules/jackspeak/dist/commonjs/index.js +0 -944
  1092. package/node_modules/jackspeak/dist/commonjs/index.js.map +0 -1
  1093. package/node_modules/jackspeak/dist/commonjs/index.min.js +0 -33
  1094. package/node_modules/jackspeak/dist/commonjs/index.min.js.map +0 -7
  1095. package/node_modules/jackspeak/dist/commonjs/package.json +0 -3
  1096. package/node_modules/jackspeak/dist/esm/index.d.ts +0 -323
  1097. package/node_modules/jackspeak/dist/esm/index.d.ts.map +0 -1
  1098. package/node_modules/jackspeak/dist/esm/index.js +0 -936
  1099. package/node_modules/jackspeak/dist/esm/index.js.map +0 -1
  1100. package/node_modules/jackspeak/dist/esm/index.min.js +0 -33
  1101. package/node_modules/jackspeak/dist/esm/index.min.js.map +0 -7
  1102. package/node_modules/jackspeak/dist/esm/package.json +0 -3
  1103. package/node_modules/jackspeak/package.json +0 -115
  1104. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-D1i7zWXR.js +0 -1
  1105. package/node_modules/jishushell-panel/output/public/assets/Dashboard-sWIvL43F.js +0 -1
  1106. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-DQ8RyvQY.js +0 -1
  1107. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-tIbPP1sB.js +0 -4
  1108. package/node_modules/jishushell-panel/output/public/assets/InitPassword-C3Slq3Dd.js +0 -1
  1109. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-7JqY9tq4.js +0 -92
  1110. package/node_modules/jishushell-panel/output/public/assets/Login-BXLDJlQN.js +0 -1
  1111. package/node_modules/jishushell-panel/output/public/assets/NewInstance-dLc5Xrpx.js +0 -1
  1112. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-DIAXxesl.js +0 -1
  1113. package/node_modules/jishushell-panel/output/public/assets/Settings-Bd5utbBh.js +0 -1
  1114. package/node_modules/jishushell-panel/output/public/assets/Setup-Yn9_20FL.js +0 -1
  1115. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-C21doQTJ.js +0 -9
  1116. package/node_modules/jishushell-panel/output/public/assets/index-CCkaIEjn.js +0 -20
  1117. package/node_modules/jishushell-panel/output/public/assets/index-D7qxy-Vh.css +0 -1
  1118. package/node_modules/jishushell-panel/output/public/assets/registry-B2ZQZXWL.js +0 -2
  1119. package/node_modules/jishushell-panel/output/public/assets/usePolling-BFZm4do_.js +0 -1
  1120. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-DqPtOicc.js +0 -9
  1121. package/node_modules/jishushell-panel/output/public/assets/vendor-react-DW5juQin.js +0 -59
  1122. package/node_modules/package-json-from-dist/LICENSE.md +0 -63
  1123. package/node_modules/package-json-from-dist/README.md +0 -110
  1124. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +0 -89
  1125. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +0 -1
  1126. package/node_modules/package-json-from-dist/dist/commonjs/index.js +0 -134
  1127. package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +0 -1
  1128. package/node_modules/package-json-from-dist/dist/commonjs/package.json +0 -3
  1129. package/node_modules/package-json-from-dist/dist/esm/index.d.ts +0 -89
  1130. package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +0 -1
  1131. package/node_modules/package-json-from-dist/dist/esm/index.js +0 -129
  1132. package/node_modules/package-json-from-dist/dist/esm/index.js.map +0 -1
  1133. package/node_modules/package-json-from-dist/dist/esm/package.json +0 -3
  1134. package/node_modules/package-json-from-dist/package.json +0 -68
  1135. package/node_modules/path-key/index.d.ts +0 -40
  1136. package/node_modules/path-key/index.js +0 -16
  1137. package/node_modules/path-key/license +0 -9
  1138. package/node_modules/path-key/package.json +0 -39
  1139. package/node_modules/path-key/readme.md +0 -61
  1140. package/node_modules/safe-buffer/LICENSE +0 -21
  1141. package/node_modules/safe-buffer/README.md +0 -584
  1142. package/node_modules/safe-buffer/index.d.ts +0 -187
  1143. package/node_modules/safe-buffer/index.js +0 -65
  1144. package/node_modules/safe-buffer/package.json +0 -51
  1145. package/node_modules/shebang-command/index.js +0 -19
  1146. package/node_modules/shebang-command/license +0 -9
  1147. package/node_modules/shebang-command/package.json +0 -34
  1148. package/node_modules/shebang-command/readme.md +0 -34
  1149. package/node_modules/shebang-regex/index.d.ts +0 -22
  1150. package/node_modules/shebang-regex/index.js +0 -2
  1151. package/node_modules/shebang-regex/license +0 -9
  1152. package/node_modules/shebang-regex/package.json +0 -35
  1153. package/node_modules/shebang-regex/readme.md +0 -33
  1154. package/node_modules/signal-exit/LICENSE.txt +0 -16
  1155. package/node_modules/signal-exit/README.md +0 -74
  1156. package/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
  1157. package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
  1158. package/node_modules/signal-exit/dist/cjs/browser.js +0 -10
  1159. package/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
  1160. package/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
  1161. package/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
  1162. package/node_modules/signal-exit/dist/cjs/index.js +0 -279
  1163. package/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
  1164. package/node_modules/signal-exit/dist/cjs/package.json +0 -3
  1165. package/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
  1166. package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
  1167. package/node_modules/signal-exit/dist/cjs/signals.js +0 -42
  1168. package/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
  1169. package/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
  1170. package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
  1171. package/node_modules/signal-exit/dist/mjs/browser.js +0 -4
  1172. package/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
  1173. package/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
  1174. package/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
  1175. package/node_modules/signal-exit/dist/mjs/index.js +0 -275
  1176. package/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
  1177. package/node_modules/signal-exit/dist/mjs/package.json +0 -3
  1178. package/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
  1179. package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
  1180. package/node_modules/signal-exit/dist/mjs/signals.js +0 -39
  1181. package/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
  1182. package/node_modules/signal-exit/package.json +0 -106
  1183. package/node_modules/which/CHANGELOG.md +0 -166
  1184. package/node_modules/which/LICENSE +0 -15
  1185. package/node_modules/which/README.md +0 -54
  1186. package/node_modules/which/bin/node-which +0 -52
  1187. package/node_modules/which/package.json +0 -43
  1188. package/node_modules/which/which.js +0 -125
  1189. package/scripts/check-adapter-isolation.ts +0 -293
  1190. /package/dist/services/{app → app-common}/app-compiler.d.ts +0 -0
  1191. /package/dist/services/{app → app-common}/terminal-session-manager.d.ts +0 -0
  1192. /package/dist/services/{backup-verify.d.ts → backup/backup-verify.d.ts} +0 -0
  1193. /package/dist/services/{external-mounts.d.ts → files/external-mounts.d.ts} +0 -0
  1194. /package/dist/services/{organize → files/organize}/applier.d.ts +0 -0
  1195. /package/dist/services/{organize → files/organize}/rules.d.ts +0 -0
  1196. /package/dist/services/{organize → files/organize}/scanner.d.ts +0 -0
  1197. /package/dist/services/{organize → files/organize}/store.d.ts +0 -0
  1198. /package/dist/services/{webdav → files/webdav}/xml-builder.d.ts +0 -0
  1199. /package/dist/services/{webdav → files/webdav}/xml-builder.js +0 -0
  1200. /package/dist/services/{app-passwords.d.ts → instances/passwords.d.ts} +0 -0
  1201. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.d.ts +0 -0
  1202. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.js +0 -0
  1203. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/drive-shim.d.ts +0 -0
  1204. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/mcporter-lite.d.ts +0 -0
  1205. /package/dist/services/{plugin-installer.d.ts → setup/plugin-installer.d.ts} +0 -0
  1206. /package/dist/services/{macos-launchd.d.ts → system/macos-launchd.d.ts} +0 -0
  1207. /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