jishushell 0.6.5 → 0.6.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (998) hide show
  1. package/apps/anythingllm-container.yaml +15 -170
  2. package/apps/browserless-chromium-container.yaml +15 -10
  3. package/apps/filebrowser-container.yaml +14 -9
  4. package/apps/hermes-container.yaml +23 -2
  5. package/apps/jishu-kb-container.yaml +29 -161
  6. package/apps/ollama-binary.yaml +32 -28
  7. package/apps/ollama-cpu-container.yaml +5 -0
  8. package/apps/ollama-with-hollama-binary.yaml +33 -28
  9. package/apps/openclaw-binary.yaml +34 -10
  10. package/apps/openclaw-container.yaml +31 -7
  11. package/apps/openclaw-with-ollama-container.yaml +8 -2
  12. package/apps/openclaw-with-searxng-container.yaml +18 -6
  13. package/apps/searxng-container.yaml +11 -6
  14. package/apps/weknora-container.yaml +21 -21
  15. package/dependencies/jishushell-panel-0.6.18.tgz +0 -0
  16. package/dist/cli/app.js +244 -213
  17. package/dist/cli/app.js.map +1 -1
  18. package/dist/cli/backup.js +15 -12
  19. package/dist/cli/backup.js.map +1 -1
  20. package/dist/cli/core.d.ts +4 -3
  21. package/dist/cli/core.js +392 -227
  22. package/dist/cli/core.js.map +1 -1
  23. package/dist/cli/doctor.d.ts +1 -1
  24. package/dist/cli/doctor.js +17 -10
  25. package/dist/cli/doctor.js.map +1 -1
  26. package/dist/cli/job.js +62 -14
  27. package/dist/cli/job.js.map +1 -1
  28. package/dist/cli/llm.js +80 -11
  29. package/dist/cli/llm.js.map +1 -1
  30. package/dist/cli/managed-list.d.ts +1 -3
  31. package/dist/cli/managed-list.js +18 -16
  32. package/dist/cli/managed-list.js.map +1 -1
  33. package/dist/cli/migrate.d.ts +2 -0
  34. package/dist/cli/migrate.js +160 -0
  35. package/dist/cli/migrate.js.map +1 -0
  36. package/dist/cli.js +1 -0
  37. package/dist/cli.js.map +1 -1
  38. package/dist/config.d.ts +23 -19
  39. package/dist/config.js +60 -49
  40. package/dist/config.js.map +1 -1
  41. package/dist/control.d.ts +6 -6
  42. package/dist/control.js +31 -23
  43. package/dist/control.js.map +1 -1
  44. package/dist/core.d.ts +5 -5
  45. package/dist/core.js +5 -5
  46. package/dist/core.js.map +1 -1
  47. package/dist/install.d.ts +2 -2
  48. package/dist/install.js +18 -18
  49. package/dist/install.js.map +1 -1
  50. package/dist/routes/apps.d.ts +1 -1
  51. package/dist/routes/apps.js +101 -193
  52. package/dist/routes/apps.js.map +1 -1
  53. package/dist/routes/auth.js +1 -1
  54. package/dist/routes/auth.js.map +1 -1
  55. package/dist/routes/backup.js +1 -1
  56. package/dist/routes/backup.js.map +1 -1
  57. package/dist/routes/external-mounts.d.ts +1 -1
  58. package/dist/routes/external-mounts.js +1 -1
  59. package/dist/routes/external-mounts.js.map +1 -1
  60. package/dist/routes/file-mounts.d.ts +4 -3
  61. package/dist/routes/file-mounts.js +51 -30
  62. package/dist/routes/file-mounts.js.map +1 -1
  63. package/dist/routes/files-organize.d.ts +2 -2
  64. package/dist/routes/files-organize.js +5 -5
  65. package/dist/routes/files-organize.js.map +1 -1
  66. package/dist/routes/files.d.ts +1 -1
  67. package/dist/routes/files.js +1 -1
  68. package/dist/routes/files.js.map +1 -1
  69. package/dist/routes/instances.d.ts +10 -4
  70. package/dist/routes/instances.js +323 -541
  71. package/dist/routes/instances.js.map +1 -1
  72. package/dist/routes/integration-apps.d.ts +14 -0
  73. package/dist/routes/integration-apps.js +81 -0
  74. package/dist/routes/integration-apps.js.map +1 -0
  75. package/dist/routes/integrations.d.ts +9 -0
  76. package/dist/routes/integrations.js +12 -0
  77. package/dist/routes/integrations.js.map +1 -0
  78. package/dist/routes/llm-proxy.js +26 -3
  79. package/dist/routes/llm-proxy.js.map +1 -1
  80. package/dist/routes/setup.js +53 -38
  81. package/dist/routes/setup.js.map +1 -1
  82. package/dist/routes/system.js +108 -68
  83. package/dist/routes/system.js.map +1 -1
  84. package/dist/routes/webdav.d.ts +1 -1
  85. package/dist/routes/webdav.js +2 -2
  86. package/dist/routes/webdav.js.map +1 -1
  87. package/dist/server.js +315 -213
  88. package/dist/server.js.map +1 -1
  89. package/dist/services/app-common/app-compiler.js +186 -0
  90. package/dist/services/app-common/app-compiler.js.map +1 -0
  91. package/dist/services/app-common/app-shared.d.ts +15 -0
  92. package/dist/services/app-common/app-shared.js +64 -0
  93. package/dist/services/app-common/app-shared.js.map +1 -0
  94. package/dist/services/app-common/capability-service.d.ts +45 -0
  95. package/dist/services/app-common/capability-service.js +331 -0
  96. package/dist/services/app-common/capability-service.js.map +1 -0
  97. package/dist/services/app-common/catalog-service.d.ts +59 -0
  98. package/dist/services/app-common/catalog-service.js +308 -0
  99. package/dist/services/app-common/catalog-service.js.map +1 -0
  100. package/dist/services/app-common/create-pipeline.d.ts +26 -0
  101. package/dist/services/app-common/create-pipeline.js +298 -0
  102. package/dist/services/app-common/create-pipeline.js.map +1 -0
  103. package/dist/services/app-common/delete-service.d.ts +5 -0
  104. package/dist/services/app-common/delete-service.js +104 -0
  105. package/dist/services/app-common/delete-service.js.map +1 -0
  106. package/dist/services/app-common/execution-owner.d.ts +23 -0
  107. package/dist/services/app-common/execution-owner.js +124 -0
  108. package/dist/services/app-common/execution-owner.js.map +1 -0
  109. package/dist/services/app-common/execution-service.d.ts +23 -0
  110. package/dist/services/app-common/execution-service.js +105 -0
  111. package/dist/services/app-common/execution-service.js.map +1 -0
  112. package/dist/services/app-common/id-normalizer.d.ts +31 -0
  113. package/dist/services/app-common/id-normalizer.js +83 -0
  114. package/dist/services/app-common/id-normalizer.js.map +1 -0
  115. package/dist/services/app-common/install-store.d.ts +34 -0
  116. package/dist/services/app-common/install-store.js +261 -0
  117. package/dist/services/app-common/install-store.js.map +1 -0
  118. package/dist/services/app-common/instance-store.d.ts +78 -0
  119. package/dist/services/app-common/instance-store.js +495 -0
  120. package/dist/services/app-common/instance-store.js.map +1 -0
  121. package/dist/services/app-common/integration-refs.d.ts +17 -0
  122. package/dist/services/app-common/integration-refs.js +47 -0
  123. package/dist/services/app-common/integration-refs.js.map +1 -0
  124. package/dist/services/app-common/lifecycle-pipeline.d.ts +62 -0
  125. package/dist/services/app-common/lifecycle-pipeline.js +317 -0
  126. package/dist/services/app-common/lifecycle-pipeline.js.map +1 -0
  127. package/dist/services/app-common/lifecycle-scripts.d.ts +38 -0
  128. package/dist/services/app-common/lifecycle-scripts.js +935 -0
  129. package/dist/services/app-common/lifecycle-scripts.js.map +1 -0
  130. package/dist/services/app-common/lifecycle-service.d.ts +68 -0
  131. package/dist/services/app-common/lifecycle-service.js +467 -0
  132. package/dist/services/app-common/lifecycle-service.js.map +1 -0
  133. package/dist/services/app-common/paths.d.ts +29 -0
  134. package/dist/services/app-common/paths.js +34 -0
  135. package/dist/services/app-common/paths.js.map +1 -0
  136. package/dist/services/app-common/platform-transform.d.ts +32 -0
  137. package/dist/services/app-common/platform-transform.js +65 -0
  138. package/dist/services/app-common/platform-transform.js.map +1 -0
  139. package/dist/services/app-common/provide-resolver.d.ts +29 -0
  140. package/dist/services/app-common/provide-resolver.js +129 -0
  141. package/dist/services/app-common/provide-resolver.js.map +1 -0
  142. package/dist/services/app-common/remote-spec.d.ts +14 -0
  143. package/dist/services/app-common/remote-spec.js +58 -0
  144. package/dist/services/app-common/remote-spec.js.map +1 -0
  145. package/dist/services/app-common/runtime-builder.d.ts +1 -0
  146. package/dist/services/app-common/runtime-builder.js +2 -0
  147. package/dist/services/app-common/runtime-builder.js.map +1 -0
  148. package/dist/services/app-common/runtime-facts.d.ts +19 -0
  149. package/dist/services/app-common/runtime-facts.js +126 -0
  150. package/dist/services/app-common/runtime-facts.js.map +1 -0
  151. package/dist/services/app-common/service.d.ts +9 -0
  152. package/dist/services/app-common/service.js +10 -0
  153. package/dist/services/app-common/service.js.map +1 -0
  154. package/dist/services/app-common/spec-materializer.d.ts +9 -0
  155. package/dist/services/app-common/spec-materializer.js +361 -0
  156. package/dist/services/app-common/spec-materializer.js.map +1 -0
  157. package/dist/services/app-common/status-refresh.d.ts +33 -0
  158. package/dist/services/app-common/status-refresh.js +759 -0
  159. package/dist/services/app-common/status-refresh.js.map +1 -0
  160. package/dist/services/app-common/task-service.d.ts +29 -0
  161. package/dist/services/app-common/task-service.js +93 -0
  162. package/dist/services/app-common/task-service.js.map +1 -0
  163. package/dist/services/app-common/terminal-session-manager.js +157 -0
  164. package/dist/services/app-common/terminal-session-manager.js.map +1 -0
  165. package/dist/services/app-modules/browserless/routes.d.ts +9 -0
  166. package/dist/services/app-modules/browserless/routes.js +517 -0
  167. package/dist/services/app-modules/browserless/routes.js.map +1 -0
  168. package/dist/services/app-modules/routes.d.ts +2 -0
  169. package/dist/services/app-modules/routes.js +5 -0
  170. package/dist/services/app-modules/routes.js.map +1 -0
  171. package/dist/services/backup/backup-admin.d.ts +95 -0
  172. package/dist/services/backup/backup-admin.js +246 -0
  173. package/dist/services/backup/backup-admin.js.map +1 -0
  174. package/dist/services/backup/backup-manager.d.ts +264 -0
  175. package/dist/services/backup/backup-manager.js +2318 -0
  176. package/dist/services/backup/backup-manager.js.map +1 -0
  177. package/dist/services/backup/backup-verify.js +240 -0
  178. package/dist/services/backup/backup-verify.js.map +1 -0
  179. package/dist/services/capabilities/browser-policy.d.ts +14 -0
  180. package/dist/services/capabilities/browser-policy.js +141 -0
  181. package/dist/services/capabilities/browser-policy.js.map +1 -0
  182. package/dist/services/capabilities/contract.d.ts +50 -0
  183. package/dist/services/capabilities/contract.js +129 -0
  184. package/dist/services/capabilities/contract.js.map +1 -0
  185. package/dist/services/capabilities/endpoint-validator.d.ts +42 -0
  186. package/dist/services/capabilities/endpoint-validator.js +114 -0
  187. package/dist/services/capabilities/endpoint-validator.js.map +1 -0
  188. package/dist/services/capabilities/health.d.ts +16 -0
  189. package/dist/services/capabilities/health.js +121 -0
  190. package/dist/services/capabilities/health.js.map +1 -0
  191. package/dist/services/capabilities/registry.d.ts +56 -0
  192. package/dist/services/capabilities/registry.js +222 -0
  193. package/dist/services/capabilities/registry.js.map +1 -0
  194. package/dist/services/capabilities/sync.d.ts +7 -0
  195. package/dist/services/capabilities/sync.js +223 -0
  196. package/dist/services/capabilities/sync.js.map +1 -0
  197. package/dist/services/capability-proxy/html-rewriters/browserless.d.ts +1 -0
  198. package/dist/services/capability-proxy/html-rewriters/browserless.js +83 -0
  199. package/dist/services/capability-proxy/html-rewriters/browserless.js.map +1 -0
  200. package/dist/services/capability-proxy/html-rewriters/index.d.ts +12 -0
  201. package/dist/services/capability-proxy/html-rewriters/index.js +25 -0
  202. package/dist/services/capability-proxy/html-rewriters/index.js.map +1 -0
  203. package/dist/services/capability-proxy/html-rewriters/jishukb.d.ts +1 -0
  204. package/dist/services/capability-proxy/html-rewriters/jishukb.js +161 -0
  205. package/dist/services/capability-proxy/html-rewriters/jishukb.js.map +1 -0
  206. package/dist/services/connections/admin.d.ts +80 -0
  207. package/dist/services/connections/admin.js +327 -0
  208. package/dist/services/connections/admin.js.map +1 -0
  209. package/dist/services/connections/apply.d.ts +110 -0
  210. package/dist/services/connections/apply.js +444 -0
  211. package/dist/services/connections/apply.js.map +1 -0
  212. package/dist/services/connections/resolver.d.ts +82 -0
  213. package/dist/services/connections/resolver.js +289 -0
  214. package/dist/services/connections/resolver.js.map +1 -0
  215. package/dist/services/connections/suggestions.d.ts +27 -0
  216. package/dist/services/connections/suggestions.js +124 -0
  217. package/dist/services/connections/suggestions.js.map +1 -0
  218. package/dist/services/connections/transactor.d.ts +39 -0
  219. package/dist/services/connections/transactor.js +307 -0
  220. package/dist/services/connections/transactor.js.map +1 -0
  221. package/dist/services/files/external-mounts.js +187 -0
  222. package/dist/services/files/external-mounts.js.map +1 -0
  223. package/dist/services/files/files-manager.d.ts +265 -0
  224. package/dist/services/files/files-manager.js +1189 -0
  225. package/dist/services/files/files-manager.js.map +1 -0
  226. package/dist/services/files/files-mounts.d.ts +42 -0
  227. package/dist/services/files/files-mounts.js +207 -0
  228. package/dist/services/files/files-mounts.js.map +1 -0
  229. package/dist/services/files/organize/applier.js +218 -0
  230. package/dist/services/files/organize/applier.js.map +1 -0
  231. package/dist/services/files/organize/rules.js +286 -0
  232. package/dist/services/files/organize/rules.js.map +1 -0
  233. package/dist/services/files/organize/scanner.js +366 -0
  234. package/dist/services/files/organize/scanner.js.map +1 -0
  235. package/dist/services/files/organize/store.js +82 -0
  236. package/dist/services/files/organize/store.js.map +1 -0
  237. package/dist/services/files/webdav/server.d.ts +47 -0
  238. package/dist/services/files/webdav/server.js +329 -0
  239. package/dist/services/files/webdav/server.js.map +1 -0
  240. package/dist/services/files/webdav/xml-builder.js.map +1 -0
  241. package/dist/services/instances/admin.d.ts +23 -0
  242. package/dist/services/instances/admin.js +218 -0
  243. package/dist/services/instances/admin.js.map +1 -0
  244. package/dist/services/instances/clone.d.ts +26 -0
  245. package/dist/services/instances/clone.js +78 -0
  246. package/dist/services/instances/clone.js.map +1 -0
  247. package/dist/services/instances/config-admin.d.ts +17 -0
  248. package/dist/services/instances/config-admin.js +181 -0
  249. package/dist/services/instances/config-admin.js.map +1 -0
  250. package/dist/services/instances/manager.d.ts +231 -0
  251. package/dist/services/instances/manager.js +1348 -0
  252. package/dist/services/instances/manager.js.map +1 -0
  253. package/dist/services/instances/passwords.js +173 -0
  254. package/dist/services/instances/passwords.js.map +1 -0
  255. package/dist/services/instances/types.d.ts +21 -0
  256. package/dist/services/instances/types.js +2 -0
  257. package/dist/services/instances/types.js.map +1 -0
  258. package/dist/services/integrations/anythingllm/integration.d.ts +25 -0
  259. package/dist/services/integrations/anythingllm/integration.js +251 -0
  260. package/dist/services/integrations/anythingllm/integration.js.map +1 -0
  261. package/dist/services/integrations/catalog.d.ts +3 -0
  262. package/dist/services/integrations/catalog.js +73 -0
  263. package/dist/services/integrations/catalog.js.map +1 -0
  264. package/dist/services/integrations/custom/integration.d.ts +28 -0
  265. package/dist/services/integrations/custom/integration.js +179 -0
  266. package/dist/services/integrations/custom/integration.js.map +1 -0
  267. package/dist/services/integrations/hermes/integration.d.ts +194 -0
  268. package/dist/services/integrations/hermes/integration.js +1669 -0
  269. package/dist/services/integrations/hermes/integration.js.map +1 -0
  270. package/dist/services/integrations/index.d.ts +40 -0
  271. package/dist/services/integrations/index.js +59 -0
  272. package/dist/services/integrations/index.js.map +1 -0
  273. package/dist/services/integrations/installable/catalog.d.ts +33 -0
  274. package/dist/services/integrations/installable/catalog.js +88 -0
  275. package/dist/services/integrations/installable/catalog.js.map +1 -0
  276. package/dist/services/integrations/installable/index.d.ts +35 -0
  277. package/dist/services/integrations/installable/index.js +170 -0
  278. package/dist/services/integrations/installable/index.js.map +1 -0
  279. package/dist/services/integrations/installable/installers/integration-probes.d.ts +50 -0
  280. package/dist/services/integrations/installable/installers/integration-probes.js +231 -0
  281. package/dist/services/integrations/installable/installers/integration-probes.js.map +1 -0
  282. package/dist/services/integrations/installable/installers/integration.d.ts +30 -0
  283. package/dist/services/integrations/installable/installers/integration.js +177 -0
  284. package/dist/services/integrations/installable/installers/integration.js.map +1 -0
  285. package/dist/services/integrations/installable/installers/registry-probe.js.map +1 -0
  286. package/dist/services/integrations/installable/installers/shell-script.d.ts +46 -0
  287. package/dist/services/integrations/installable/installers/shell-script.js +487 -0
  288. package/dist/services/integrations/installable/installers/shell-script.js.map +1 -0
  289. package/dist/services/integrations/installable/types.d.ts +130 -0
  290. package/dist/services/integrations/installable/types.js +19 -0
  291. package/dist/services/integrations/installable/types.js.map +1 -0
  292. package/dist/services/integrations/jishukb/integration.d.ts +22 -0
  293. package/dist/services/integrations/jishukb/integration.js +189 -0
  294. package/dist/services/integrations/jishukb/integration.js.map +1 -0
  295. package/dist/services/integrations/openclaw/anythingllm-shim.d.ts +46 -0
  296. package/dist/services/integrations/openclaw/anythingllm-shim.js +281 -0
  297. package/dist/services/integrations/openclaw/anythingllm-shim.js.map +1 -0
  298. package/dist/services/integrations/openclaw/drive-shim.js +490 -0
  299. package/dist/services/integrations/openclaw/drive-shim.js.map +1 -0
  300. package/dist/services/integrations/openclaw/integration.d.ts +424 -0
  301. package/dist/services/integrations/openclaw/integration.js +4402 -0
  302. package/dist/services/integrations/openclaw/integration.js.map +1 -0
  303. package/dist/services/integrations/openclaw/jishukb-shim.d.ts +48 -0
  304. package/dist/services/integrations/openclaw/jishukb-shim.js +750 -0
  305. package/dist/services/integrations/openclaw/jishukb-shim.js.map +1 -0
  306. package/dist/services/integrations/openclaw/mcporter-lite.js +276 -0
  307. package/dist/services/integrations/openclaw/mcporter-lite.js.map +1 -0
  308. package/dist/services/integrations/openclaw/mcporter.d.ts +46 -0
  309. package/dist/services/integrations/openclaw/mcporter.js +112 -0
  310. package/dist/services/integrations/openclaw/mcporter.js.map +1 -0
  311. package/dist/services/integrations/openclaw/routes.d.ts +21 -0
  312. package/dist/services/integrations/openclaw/routes.js +1191 -0
  313. package/dist/services/integrations/openclaw/routes.js.map +1 -0
  314. package/dist/services/integrations/registry.d.ts +17 -0
  315. package/dist/services/integrations/registry.js +36 -0
  316. package/dist/services/integrations/registry.js.map +1 -0
  317. package/dist/services/integrations/routes.d.ts +2 -0
  318. package/dist/services/integrations/routes.js +9 -0
  319. package/dist/services/integrations/routes.js.map +1 -0
  320. package/dist/services/integrations/types.d.ts +469 -0
  321. package/dist/services/integrations/types.js +2 -0
  322. package/dist/services/integrations/types.js.map +1 -0
  323. package/dist/services/legacy-migrator/classifier.d.ts +44 -0
  324. package/dist/services/legacy-migrator/classifier.js +309 -0
  325. package/dist/services/legacy-migrator/classifier.js.map +1 -0
  326. package/dist/services/legacy-migrator/executor.d.ts +42 -0
  327. package/dist/services/legacy-migrator/executor.js +637 -0
  328. package/dist/services/legacy-migrator/executor.js.map +1 -0
  329. package/dist/services/legacy-migrator/index.d.ts +31 -0
  330. package/dist/services/legacy-migrator/index.js +34 -0
  331. package/dist/services/legacy-migrator/index.js.map +1 -0
  332. package/dist/services/legacy-migrator/planner.d.ts +8 -0
  333. package/dist/services/legacy-migrator/planner.js +154 -0
  334. package/dist/services/legacy-migrator/planner.js.map +1 -0
  335. package/dist/services/legacy-migrator/provider-settings.d.ts +6 -0
  336. package/dist/services/legacy-migrator/provider-settings.js +72 -0
  337. package/dist/services/legacy-migrator/provider-settings.js.map +1 -0
  338. package/dist/services/legacy-migrator/report.d.ts +9 -0
  339. package/dist/services/legacy-migrator/report.js +99 -0
  340. package/dist/services/legacy-migrator/report.js.map +1 -0
  341. package/dist/services/legacy-migrator/scanner.d.ts +13 -0
  342. package/dist/services/legacy-migrator/scanner.js +157 -0
  343. package/dist/services/legacy-migrator/scanner.js.map +1 -0
  344. package/dist/services/legacy-migrator/types.d.ts +97 -0
  345. package/dist/services/legacy-migrator/types.js +23 -0
  346. package/dist/services/legacy-migrator/types.js.map +1 -0
  347. package/dist/services/llm-proxy/instance-proxy.d.ts +17 -1
  348. package/dist/services/llm-proxy/instance-proxy.js +171 -44
  349. package/dist/services/llm-proxy/instance-proxy.js.map +1 -1
  350. package/dist/services/llm-proxy/probe.js +5 -14
  351. package/dist/services/llm-proxy/probe.js.map +1 -1
  352. package/dist/services/llm-proxy/providers.js +23 -31
  353. package/dist/services/llm-proxy/providers.js.map +1 -1
  354. package/dist/services/llm-proxy/ssrf.d.ts +11 -4
  355. package/dist/services/llm-proxy/ssrf.js +45 -7
  356. package/dist/services/llm-proxy/ssrf.js.map +1 -1
  357. package/dist/services/llm-proxy/validate-key.js +16 -37
  358. package/dist/services/llm-proxy/validate-key.js.map +1 -1
  359. package/dist/services/repair/runtime-repair.d.ts +22 -0
  360. package/dist/services/repair/runtime-repair.js +307 -0
  361. package/dist/services/repair/runtime-repair.js.map +1 -0
  362. package/dist/services/runtime/driver-registry.d.ts +21 -0
  363. package/dist/services/runtime/driver-registry.js +22 -0
  364. package/dist/services/runtime/driver-registry.js.map +1 -0
  365. package/dist/services/runtime/drivers/nomad.d.ts +260 -0
  366. package/dist/services/runtime/drivers/nomad.js +3092 -0
  367. package/dist/services/runtime/drivers/nomad.js.map +1 -0
  368. package/dist/services/runtime/errors.d.ts +3 -3
  369. package/dist/services/runtime/errors.js +3 -3
  370. package/dist/services/runtime/instance.d.ts +14 -16
  371. package/dist/services/runtime/instance.js +93 -123
  372. package/dist/services/runtime/instance.js.map +1 -1
  373. package/dist/services/runtime/job-id.d.ts +1 -1
  374. package/dist/services/runtime/job-id.js +1 -1
  375. package/dist/services/runtime/mcp-shims/firewall.d.ts +2 -2
  376. package/dist/services/runtime/mcp-shims/firewall.js +2 -2
  377. package/dist/services/runtime/mcp-shims/searxng-shim.d.ts +3 -5
  378. package/dist/services/runtime/mcp-shims/searxng-shim.js +3 -5
  379. package/dist/services/runtime/mcp-shims/searxng-shim.js.map +1 -1
  380. package/dist/services/runtime/mcp-shims/write-mcp-entry.d.ts +20 -20
  381. package/dist/services/runtime/mcp-shims/write-mcp-entry.js +16 -16
  382. package/dist/services/runtime/mcp-shims/write-mcp-entry.js.map +1 -1
  383. package/dist/services/runtime/ownership-marker.d.ts +83 -0
  384. package/dist/services/runtime/ownership-marker.js +109 -0
  385. package/dist/services/runtime/ownership-marker.js.map +1 -0
  386. package/dist/services/runtime/types.d.ts +22 -501
  387. package/dist/services/runtime/types.js +0 -12
  388. package/dist/services/runtime/types.js.map +1 -1
  389. package/dist/services/runtime/workload-compiler.d.ts +17 -0
  390. package/dist/services/runtime/workload-compiler.js +525 -0
  391. package/dist/services/runtime/workload-compiler.js.map +1 -0
  392. package/dist/services/runtime/workload-types.d.ts +11 -0
  393. package/dist/services/runtime/workload-types.js +2 -0
  394. package/dist/services/runtime/workload-types.js.map +1 -0
  395. package/dist/services/setup/core-manager.d.ts +50 -0
  396. package/dist/services/setup/core-manager.js +456 -0
  397. package/dist/services/setup/core-manager.js.map +1 -0
  398. package/dist/services/setup/plugin-installer.js +136 -0
  399. package/dist/services/setup/plugin-installer.js.map +1 -0
  400. package/dist/services/setup/setup-manager.d.ts +158 -0
  401. package/dist/services/setup/setup-manager.js +2768 -0
  402. package/dist/services/setup/setup-manager.js.map +1 -0
  403. package/dist/services/system/cli-command.d.ts +5 -0
  404. package/dist/services/system/cli-command.js +18 -0
  405. package/dist/services/system/cli-command.js.map +1 -0
  406. package/dist/services/system/macos-launchd.js +312 -0
  407. package/dist/services/system/macos-launchd.js.map +1 -0
  408. package/dist/services/system/repair-orchestrator.d.ts +71 -0
  409. package/dist/services/system/repair-orchestrator.js +412 -0
  410. package/dist/services/system/repair-orchestrator.js.map +1 -0
  411. package/dist/services/system/system-monitor.js +96 -0
  412. package/dist/services/system/system-monitor.js.map +1 -0
  413. package/dist/services/system/system-ollama-provider.d.ts +14 -0
  414. package/dist/services/system/system-ollama-provider.js +129 -0
  415. package/dist/services/system/system-ollama-provider.js.map +1 -0
  416. package/dist/services/system/system-reconciler.d.ts +59 -0
  417. package/dist/services/system/system-reconciler.js +710 -0
  418. package/dist/services/system/system-reconciler.js.map +1 -0
  419. package/dist/services/system/update-manager.d.ts +43 -0
  420. package/dist/services/system/update-manager.js +315 -0
  421. package/dist/services/system/update-manager.js.map +1 -0
  422. package/dist/services/system/upgrade-finalize.d.ts +80 -0
  423. package/dist/services/system/upgrade-finalize.js +507 -0
  424. package/dist/services/system/upgrade-finalize.js.map +1 -0
  425. package/dist/services/tasks/registry.d.ts +44 -0
  426. package/dist/services/tasks/registry.js +90 -0
  427. package/dist/services/tasks/registry.js.map +1 -0
  428. package/dist/services/telemetry/activation.d.ts +6 -2
  429. package/dist/services/telemetry/activation.js +6 -2
  430. package/dist/services/telemetry/activation.js.map +1 -1
  431. package/dist/services/telemetry/heartbeat.d.ts +6 -2
  432. package/dist/services/telemetry/heartbeat.js +6 -2
  433. package/dist/services/telemetry/heartbeat.js.map +1 -1
  434. package/dist/services/workspaces/builder.d.ts +29 -0
  435. package/dist/services/workspaces/builder.js +186 -0
  436. package/dist/services/workspaces/builder.js.map +1 -0
  437. package/dist/types.d.ts +331 -45
  438. package/dist/utils/instance-lock.d.ts +2 -2
  439. package/dist/utils/instance-lock.js +2 -2
  440. package/install/jishu-install.sh +107 -26
  441. package/install/jishu-uninstall.sh +8 -0
  442. package/install/post-install.sh +162 -185
  443. package/install/post-uninstall.sh +6 -0
  444. package/node_modules/@fastify/static/.github/workflows/ci.yml +1 -1
  445. package/node_modules/@fastify/static/.github/workflows/lock-threads.yml +19 -0
  446. package/node_modules/@fastify/static/LICENSE +1 -3
  447. package/node_modules/@fastify/static/example/server-benchmark.js +39 -0
  448. package/node_modules/@fastify/static/index.js +169 -23
  449. package/node_modules/@fastify/static/lib/dirList.js +20 -6
  450. package/node_modules/@fastify/static/package.json +10 -8
  451. package/node_modules/@fastify/static/test/dir-list.test.js +82 -0
  452. package/node_modules/@fastify/static/test/static.test.js +326 -4
  453. package/node_modules/@fastify/static/types/index.d.ts +0 -4
  454. package/node_modules/@fastify/static/types/index.test-d.ts +1 -1
  455. package/node_modules/content-disposition/README.md +21 -22
  456. package/node_modules/content-disposition/index.js +122 -44
  457. package/node_modules/content-disposition/package.json +16 -20
  458. package/node_modules/glob/README.md +39 -130
  459. package/node_modules/glob/dist/commonjs/glob.d.ts +8 -0
  460. package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
  461. package/node_modules/glob/dist/commonjs/glob.js +2 -1
  462. package/node_modules/glob/dist/commonjs/glob.js.map +1 -1
  463. package/node_modules/glob/dist/commonjs/index.min.js +4 -0
  464. package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
  465. package/node_modules/glob/dist/commonjs/pattern.d.ts +3 -0
  466. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
  467. package/node_modules/glob/dist/commonjs/pattern.js +4 -0
  468. package/node_modules/glob/dist/commonjs/pattern.js.map +1 -1
  469. package/node_modules/glob/dist/esm/glob.d.ts +8 -0
  470. package/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
  471. package/node_modules/glob/dist/esm/glob.js +2 -1
  472. package/node_modules/glob/dist/esm/glob.js.map +1 -1
  473. package/node_modules/glob/dist/esm/index.min.js +4 -0
  474. package/node_modules/glob/dist/esm/index.min.js.map +7 -0
  475. package/node_modules/glob/dist/esm/pattern.d.ts +3 -0
  476. package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
  477. package/node_modules/glob/dist/esm/pattern.js +4 -0
  478. package/node_modules/glob/dist/esm/pattern.js.map +1 -1
  479. package/node_modules/glob/package.json +38 -37
  480. package/node_modules/jishushell-panel/README.md +4 -4
  481. package/node_modules/jishushell-panel/output/dist/server.js +17 -6
  482. package/node_modules/jishushell-panel/output/dist/server.js.map +1 -1
  483. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-NKcbHjNz.js +1 -0
  484. package/node_modules/jishushell-panel/output/public/assets/Dashboard-Da1fL38t.js +1 -0
  485. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-DZvmYsoh.js +1 -0
  486. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-BLUWlKwm.js +4 -0
  487. package/node_modules/jishushell-panel/output/public/assets/InitPassword-BAKsshzk.js +1 -0
  488. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-Dgyc_TX5.js +14 -0
  489. package/node_modules/jishushell-panel/output/public/assets/Login-DHeOmwI8.js +1 -0
  490. package/node_modules/jishushell-panel/output/public/assets/NewInstance-CIy0cYtp.js +1 -0
  491. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-H0ByEYF0.js +1 -0
  492. package/node_modules/jishushell-panel/output/public/assets/Settings-DAT-UMfP.js +1 -0
  493. package/node_modules/jishushell-panel/output/public/assets/Setup-g3uckFYR.js +1 -0
  494. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-D-T6BxkQ.js +1 -0
  495. package/node_modules/jishushell-panel/output/public/assets/api-C70Gt678.js +4 -0
  496. package/node_modules/jishushell-panel/output/public/assets/index-DnnqTf7s.css +1 -0
  497. package/node_modules/jishushell-panel/output/public/assets/index-ERt6_ngA.js +23 -0
  498. package/node_modules/jishushell-panel/output/public/assets/registry-DF93EzIb.js +2 -0
  499. package/node_modules/jishushell-panel/output/public/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  500. package/node_modules/jishushell-panel/output/public/assets/setup-task-q21GnI0E.js +1 -0
  501. package/node_modules/jishushell-panel/output/public/assets/usePolling-DeoThIQn.js +1 -0
  502. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-CS8DFbkQ.js +1 -0
  503. package/node_modules/jishushell-panel/output/public/assets/vendor-react-Cc84NArf.js +8 -0
  504. package/node_modules/jishushell-panel/output/public/index.html +6 -4
  505. package/node_modules/jishushell-panel/package.json +2 -2
  506. package/node_modules/semver/classes/range.js +11 -2
  507. package/node_modules/semver/package.json +2 -2
  508. package/package.json +12 -64
  509. package/scripts/check-app-path-boundaries.mjs +121 -0
  510. package/scripts/check-app-spec.mjs +127 -25
  511. package/scripts/check-colima-launchd.mjs +10 -8
  512. package/scripts/check-integration-isolation.ts +541 -0
  513. package/scripts/check-new-file-tests.mjs +11 -3
  514. package/scripts/check-open-core-boundaries.mjs +60 -10
  515. package/scripts/check-test-layering.sh +1 -1
  516. package/scripts/fixtures/instances/hermes-sample/instance.json +3 -2
  517. package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +1 -1
  518. package/scripts/local-web-upgrade-test.README +4 -3
  519. package/scripts/local-web-upgrade-test.example.env +2 -2
  520. package/scripts/local-web-upgrade-test.sh +14 -1
  521. package/scripts/pack-gui-and-send-pi.sh +41 -0
  522. package/scripts/perf/instances.js +1 -1
  523. package/scripts/prune-open-core-dist.mjs +89 -2
  524. package/scripts/smoke/hermes-bootstrap.sh +5 -5
  525. package/templates/hermes-entrypoint.sh +19 -29
  526. package/apps/openwebui-container.yaml +0 -97
  527. package/apps/playwright-container.yaml +0 -126
  528. package/dependencies/jishushell-panel-0.6.5.tgz +0 -0
  529. package/dist/crypto-shim.d.ts +0 -1
  530. package/dist/crypto-shim.js +0 -2
  531. package/dist/crypto-shim.js.map +0 -1
  532. package/dist/routes/agent-apps.d.ts +0 -14
  533. package/dist/routes/agent-apps.js +0 -77
  534. package/dist/routes/agent-apps.js.map +0 -1
  535. package/dist/routes/internal.d.ts +0 -2
  536. package/dist/routes/internal.js +0 -55
  537. package/dist/routes/internal.js.map +0 -1
  538. package/dist/routes/openclaw-routes.d.ts +0 -22
  539. package/dist/routes/openclaw-routes.js +0 -1020
  540. package/dist/routes/openclaw-routes.js.map +0 -1
  541. package/dist/routes/runtime.d.ts +0 -15
  542. package/dist/routes/runtime.js +0 -76
  543. package/dist/routes/runtime.js.map +0 -1
  544. package/dist/services/agent-apps/catalog.d.ts +0 -33
  545. package/dist/services/agent-apps/catalog.js +0 -88
  546. package/dist/services/agent-apps/catalog.js.map +0 -1
  547. package/dist/services/agent-apps/index.d.ts +0 -36
  548. package/dist/services/agent-apps/index.js +0 -171
  549. package/dist/services/agent-apps/index.js.map +0 -1
  550. package/dist/services/agent-apps/installers/adapter-probes.d.ts +0 -49
  551. package/dist/services/agent-apps/installers/adapter-probes.js +0 -230
  552. package/dist/services/agent-apps/installers/adapter-probes.js.map +0 -1
  553. package/dist/services/agent-apps/installers/adapter.d.ts +0 -30
  554. package/dist/services/agent-apps/installers/adapter.js +0 -171
  555. package/dist/services/agent-apps/installers/adapter.js.map +0 -1
  556. package/dist/services/agent-apps/installers/registry-probe.js.map +0 -1
  557. package/dist/services/agent-apps/installers/shell-script.d.ts +0 -47
  558. package/dist/services/agent-apps/installers/shell-script.js +0 -488
  559. package/dist/services/agent-apps/installers/shell-script.js.map +0 -1
  560. package/dist/services/agent-apps/types.d.ts +0 -128
  561. package/dist/services/agent-apps/types.js +0 -17
  562. package/dist/services/agent-apps/types.js.map +0 -1
  563. package/dist/services/app/app-compiler.js +0 -185
  564. package/dist/services/app/app-compiler.js.map +0 -1
  565. package/dist/services/app/app-manager.d.ts +0 -184
  566. package/dist/services/app/app-manager.js +0 -2933
  567. package/dist/services/app/app-manager.js.map +0 -1
  568. package/dist/services/app/custom-manager.d.ts +0 -27
  569. package/dist/services/app/custom-manager.js +0 -382
  570. package/dist/services/app/custom-manager.js.map +0 -1
  571. package/dist/services/app/hermes-agent-manager.d.ts +0 -20
  572. package/dist/services/app/hermes-agent-manager.js +0 -299
  573. package/dist/services/app/hermes-agent-manager.js.map +0 -1
  574. package/dist/services/app/id-normalizer.d.ts +0 -27
  575. package/dist/services/app/id-normalizer.js +0 -77
  576. package/dist/services/app/id-normalizer.js.map +0 -1
  577. package/dist/services/app/ollama-manager.d.ts +0 -18
  578. package/dist/services/app/ollama-manager.js +0 -224
  579. package/dist/services/app/ollama-manager.js.map +0 -1
  580. package/dist/services/app/openclaw-manager.d.ts +0 -63
  581. package/dist/services/app/openclaw-manager.js +0 -1215
  582. package/dist/services/app/openclaw-manager.js.map +0 -1
  583. package/dist/services/app/paths.d.ts +0 -27
  584. package/dist/services/app/paths.js +0 -40
  585. package/dist/services/app/paths.js.map +0 -1
  586. package/dist/services/app/platform-transform.d.ts +0 -32
  587. package/dist/services/app/platform-transform.js +0 -65
  588. package/dist/services/app/platform-transform.js.map +0 -1
  589. package/dist/services/app/provide-resolver.d.ts +0 -29
  590. package/dist/services/app/provide-resolver.js +0 -135
  591. package/dist/services/app/provide-resolver.js.map +0 -1
  592. package/dist/services/app/registry.d.ts +0 -17
  593. package/dist/services/app/registry.js +0 -31
  594. package/dist/services/app/registry.js.map +0 -1
  595. package/dist/services/app/remote-spec.d.ts +0 -14
  596. package/dist/services/app/remote-spec.js +0 -58
  597. package/dist/services/app/remote-spec.js.map +0 -1
  598. package/dist/services/app/terminal-session-manager.js +0 -157
  599. package/dist/services/app/terminal-session-manager.js.map +0 -1
  600. package/dist/services/app/types.d.ts +0 -74
  601. package/dist/services/app/types.js +0 -16
  602. package/dist/services/app/types.js.map +0 -1
  603. package/dist/services/app-config-admin.d.ts +0 -17
  604. package/dist/services/app-config-admin.js +0 -177
  605. package/dist/services/app-config-admin.js.map +0 -1
  606. package/dist/services/app-create-from-installed.d.ts +0 -23
  607. package/dist/services/app-create-from-installed.js +0 -75
  608. package/dist/services/app-create-from-installed.js.map +0 -1
  609. package/dist/services/app-passwords.js +0 -173
  610. package/dist/services/app-passwords.js.map +0 -1
  611. package/dist/services/backup-admin.d.ts +0 -101
  612. package/dist/services/backup-admin.js +0 -259
  613. package/dist/services/backup-admin.js.map +0 -1
  614. package/dist/services/backup-manager.d.ts +0 -264
  615. package/dist/services/backup-manager.js +0 -2263
  616. package/dist/services/backup-manager.js.map +0 -1
  617. package/dist/services/backup-verify.js +0 -240
  618. package/dist/services/backup-verify.js.map +0 -1
  619. package/dist/services/capability-endpoint-validator.d.ts +0 -41
  620. package/dist/services/capability-endpoint-validator.js +0 -114
  621. package/dist/services/capability-endpoint-validator.js.map +0 -1
  622. package/dist/services/capability-health.d.ts +0 -16
  623. package/dist/services/capability-health.js +0 -121
  624. package/dist/services/capability-health.js.map +0 -1
  625. package/dist/services/capability-registry.d.ts +0 -29
  626. package/dist/services/capability-registry.js +0 -176
  627. package/dist/services/capability-registry.js.map +0 -1
  628. package/dist/services/capability-sync.d.ts +0 -4
  629. package/dist/services/capability-sync.js +0 -220
  630. package/dist/services/capability-sync.js.map +0 -1
  631. package/dist/services/connection-admin.d.ts +0 -74
  632. package/dist/services/connection-admin.js +0 -287
  633. package/dist/services/connection-admin.js.map +0 -1
  634. package/dist/services/connection-apply.d.ts +0 -91
  635. package/dist/services/connection-apply.js +0 -471
  636. package/dist/services/connection-apply.js.map +0 -1
  637. package/dist/services/connection-resolver.d.ts +0 -65
  638. package/dist/services/connection-resolver.js +0 -281
  639. package/dist/services/connection-resolver.js.map +0 -1
  640. package/dist/services/connection-transactor.d.ts +0 -39
  641. package/dist/services/connection-transactor.js +0 -354
  642. package/dist/services/connection-transactor.js.map +0 -1
  643. package/dist/services/core-manager.d.ts +0 -50
  644. package/dist/services/core-manager.js +0 -411
  645. package/dist/services/core-manager.js.map +0 -1
  646. package/dist/services/external-mounts.js +0 -187
  647. package/dist/services/external-mounts.js.map +0 -1
  648. package/dist/services/files-manager.d.ts +0 -252
  649. package/dist/services/files-manager.js +0 -1156
  650. package/dist/services/files-manager.js.map +0 -1
  651. package/dist/services/files-mounts.d.ts +0 -42
  652. package/dist/services/files-mounts.js +0 -207
  653. package/dist/services/files-mounts.js.map +0 -1
  654. package/dist/services/instance-admin.d.ts +0 -26
  655. package/dist/services/instance-admin.js +0 -218
  656. package/dist/services/instance-admin.js.map +0 -1
  657. package/dist/services/instance-manager.d.ts +0 -192
  658. package/dist/services/instance-manager.js +0 -1289
  659. package/dist/services/instance-manager.js.map +0 -1
  660. package/dist/services/macos-launchd.js +0 -312
  661. package/dist/services/macos-launchd.js.map +0 -1
  662. package/dist/services/nomad-manager.d.ts +0 -307
  663. package/dist/services/nomad-manager.js +0 -3958
  664. package/dist/services/nomad-manager.js.map +0 -1
  665. package/dist/services/organize/applier.js +0 -218
  666. package/dist/services/organize/applier.js.map +0 -1
  667. package/dist/services/organize/rules.js +0 -286
  668. package/dist/services/organize/rules.js.map +0 -1
  669. package/dist/services/organize/scanner.js +0 -366
  670. package/dist/services/organize/scanner.js.map +0 -1
  671. package/dist/services/organize/store.js +0 -82
  672. package/dist/services/organize/store.js.map +0 -1
  673. package/dist/services/plugin-installer.js +0 -128
  674. package/dist/services/plugin-installer.js.map +0 -1
  675. package/dist/services/process-manager.d.ts +0 -25
  676. package/dist/services/process-manager.js +0 -568
  677. package/dist/services/process-manager.js.map +0 -1
  678. package/dist/services/runtime/adapters/custom.d.ts +0 -20
  679. package/dist/services/runtime/adapters/custom.js +0 -188
  680. package/dist/services/runtime/adapters/custom.js.map +0 -1
  681. package/dist/services/runtime/adapters/hermes.d.ts +0 -204
  682. package/dist/services/runtime/adapters/hermes.js +0 -1684
  683. package/dist/services/runtime/adapters/hermes.js.map +0 -1
  684. package/dist/services/runtime/adapters/openclaw-mcporter.d.ts +0 -45
  685. package/dist/services/runtime/adapters/openclaw-mcporter.js +0 -108
  686. package/dist/services/runtime/adapters/openclaw-mcporter.js.map +0 -1
  687. package/dist/services/runtime/adapters/openclaw.d.ts +0 -426
  688. package/dist/services/runtime/adapters/openclaw.js +0 -3975
  689. package/dist/services/runtime/adapters/openclaw.js.map +0 -1
  690. package/dist/services/runtime/index.d.ts +0 -34
  691. package/dist/services/runtime/index.js +0 -51
  692. package/dist/services/runtime/index.js.map +0 -1
  693. package/dist/services/runtime/mcp-shims/anythingllm-shim.d.ts +0 -46
  694. package/dist/services/runtime/mcp-shims/anythingllm-shim.js +0 -281
  695. package/dist/services/runtime/mcp-shims/anythingllm-shim.js.map +0 -1
  696. package/dist/services/runtime/mcp-shims/drive-shim.js +0 -490
  697. package/dist/services/runtime/mcp-shims/drive-shim.js.map +0 -1
  698. package/dist/services/runtime/mcp-shims/jishukb-shim.d.ts +0 -48
  699. package/dist/services/runtime/mcp-shims/jishukb-shim.js +0 -723
  700. package/dist/services/runtime/mcp-shims/jishukb-shim.js.map +0 -1
  701. package/dist/services/runtime/mcp-shims/mcporter-lite.js +0 -276
  702. package/dist/services/runtime/mcp-shims/mcporter-lite.js.map +0 -1
  703. package/dist/services/runtime/migrations.d.ts +0 -23
  704. package/dist/services/runtime/migrations.js +0 -125
  705. package/dist/services/runtime/migrations.js.map +0 -1
  706. package/dist/services/runtime/registry.d.ts +0 -13
  707. package/dist/services/runtime/registry.js +0 -32
  708. package/dist/services/runtime/registry.js.map +0 -1
  709. package/dist/services/runtime-identity.d.ts +0 -13
  710. package/dist/services/runtime-identity.js +0 -166
  711. package/dist/services/runtime-identity.js.map +0 -1
  712. package/dist/services/runtime-repair.d.ts +0 -52
  713. package/dist/services/runtime-repair.js +0 -352
  714. package/dist/services/runtime-repair.js.map +0 -1
  715. package/dist/services/setup-manager.d.ts +0 -158
  716. package/dist/services/setup-manager.js +0 -2740
  717. package/dist/services/setup-manager.js.map +0 -1
  718. package/dist/services/suggestions.d.ts +0 -27
  719. package/dist/services/suggestions.js +0 -133
  720. package/dist/services/suggestions.js.map +0 -1
  721. package/dist/services/system-monitor.js +0 -79
  722. package/dist/services/system-monitor.js.map +0 -1
  723. package/dist/services/system-ollama-provider.d.ts +0 -14
  724. package/dist/services/system-ollama-provider.js +0 -125
  725. package/dist/services/system-ollama-provider.js.map +0 -1
  726. package/dist/services/system-reconciler.d.ts +0 -72
  727. package/dist/services/system-reconciler.js +0 -600
  728. package/dist/services/system-reconciler.js.map +0 -1
  729. package/dist/services/task-registry.d.ts +0 -44
  730. package/dist/services/task-registry.js +0 -76
  731. package/dist/services/task-registry.js.map +0 -1
  732. package/dist/services/types-shim.d.ts +0 -16
  733. package/dist/services/types-shim.js +0 -2
  734. package/dist/services/types-shim.js.map +0 -1
  735. package/dist/services/update-manager.d.ts +0 -47
  736. package/dist/services/update-manager.js +0 -351
  737. package/dist/services/update-manager.js.map +0 -1
  738. package/dist/services/webdav/server.d.ts +0 -24
  739. package/dist/services/webdav/server.js +0 -420
  740. package/dist/services/webdav/server.js.map +0 -1
  741. package/dist/services/webdav/xml-builder.js.map +0 -1
  742. package/dist/services/workspace-builder.d.ts +0 -29
  743. package/dist/services/workspace-builder.js +0 -188
  744. package/dist/services/workspace-builder.js.map +0 -1
  745. package/node_modules/@fastify/static/.github/stale.yml +0 -21
  746. package/node_modules/@isaacs/cliui/LICENSE.md +0 -63
  747. package/node_modules/@isaacs/cliui/README.md +0 -151
  748. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts +0 -4
  749. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts.map +0 -1
  750. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js +0 -16
  751. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js.map +0 -1
  752. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts +0 -34
  753. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts.map +0 -1
  754. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js +0 -170
  755. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js.map +0 -1
  756. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts +0 -6
  757. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts.map +0 -1
  758. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js +0 -307
  759. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js.map +0 -1
  760. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts +0 -2
  761. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts.map +0 -1
  762. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js +0 -7
  763. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js.map +0 -1
  764. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts +0 -41
  765. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts.map +0 -1
  766. package/node_modules/@isaacs/cliui/dist/commonjs/index.js +0 -322
  767. package/node_modules/@isaacs/cliui/dist/commonjs/index.js.map +0 -1
  768. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js +0 -12
  769. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js.map +0 -7
  770. package/node_modules/@isaacs/cliui/dist/commonjs/package.json +0 -3
  771. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts +0 -5
  772. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts.map +0 -1
  773. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js +0 -49
  774. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js.map +0 -1
  775. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts +0 -2
  776. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts.map +0 -1
  777. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js +0 -8
  778. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js.map +0 -1
  779. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts +0 -7
  780. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts.map +0 -1
  781. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js +0 -176
  782. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js.map +0 -1
  783. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts +0 -4
  784. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts.map +0 -1
  785. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js +0 -12
  786. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js.map +0 -1
  787. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts +0 -34
  788. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts.map +0 -1
  789. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js +0 -167
  790. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js.map +0 -1
  791. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts +0 -6
  792. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts.map +0 -1
  793. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js +0 -299
  794. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js.map +0 -1
  795. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts +0 -2
  796. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts.map +0 -1
  797. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js +0 -3
  798. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js.map +0 -1
  799. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts +0 -41
  800. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts.map +0 -1
  801. package/node_modules/@isaacs/cliui/dist/esm/index.js +0 -317
  802. package/node_modules/@isaacs/cliui/dist/esm/index.js.map +0 -1
  803. package/node_modules/@isaacs/cliui/dist/esm/index.min.js +0 -12
  804. package/node_modules/@isaacs/cliui/dist/esm/index.min.js.map +0 -7
  805. package/node_modules/@isaacs/cliui/dist/esm/package.json +0 -3
  806. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts +0 -5
  807. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts.map +0 -1
  808. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js +0 -46
  809. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js.map +0 -1
  810. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts +0 -2
  811. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts.map +0 -1
  812. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js +0 -4
  813. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js.map +0 -1
  814. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts +0 -7
  815. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts.map +0 -1
  816. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js +0 -172
  817. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js.map +0 -1
  818. package/node_modules/@isaacs/cliui/package.json +0 -163
  819. package/node_modules/content-disposition/HISTORY.md +0 -60
  820. package/node_modules/cross-spawn/LICENSE +0 -21
  821. package/node_modules/cross-spawn/README.md +0 -89
  822. package/node_modules/cross-spawn/index.js +0 -39
  823. package/node_modules/cross-spawn/lib/enoent.js +0 -59
  824. package/node_modules/cross-spawn/lib/parse.js +0 -91
  825. package/node_modules/cross-spawn/lib/util/escape.js +0 -47
  826. package/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
  827. package/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
  828. package/node_modules/cross-spawn/package.json +0 -73
  829. package/node_modules/foreground-child/LICENSE +0 -15
  830. package/node_modules/foreground-child/README.md +0 -128
  831. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts +0 -2
  832. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map +0 -1
  833. package/node_modules/foreground-child/dist/commonjs/all-signals.js +0 -58
  834. package/node_modules/foreground-child/dist/commonjs/all-signals.js.map +0 -1
  835. package/node_modules/foreground-child/dist/commonjs/index.d.ts +0 -58
  836. package/node_modules/foreground-child/dist/commonjs/index.d.ts.map +0 -1
  837. package/node_modules/foreground-child/dist/commonjs/index.js +0 -123
  838. package/node_modules/foreground-child/dist/commonjs/index.js.map +0 -1
  839. package/node_modules/foreground-child/dist/commonjs/package.json +0 -3
  840. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts +0 -6
  841. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map +0 -1
  842. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js +0 -38
  843. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js.map +0 -1
  844. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts +0 -10
  845. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map +0 -1
  846. package/node_modules/foreground-child/dist/commonjs/watchdog.js +0 -50
  847. package/node_modules/foreground-child/dist/commonjs/watchdog.js.map +0 -1
  848. package/node_modules/foreground-child/dist/esm/all-signals.d.ts +0 -2
  849. package/node_modules/foreground-child/dist/esm/all-signals.d.ts.map +0 -1
  850. package/node_modules/foreground-child/dist/esm/all-signals.js +0 -52
  851. package/node_modules/foreground-child/dist/esm/all-signals.js.map +0 -1
  852. package/node_modules/foreground-child/dist/esm/index.d.ts +0 -58
  853. package/node_modules/foreground-child/dist/esm/index.d.ts.map +0 -1
  854. package/node_modules/foreground-child/dist/esm/index.js +0 -115
  855. package/node_modules/foreground-child/dist/esm/index.js.map +0 -1
  856. package/node_modules/foreground-child/dist/esm/package.json +0 -3
  857. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts +0 -6
  858. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map +0 -1
  859. package/node_modules/foreground-child/dist/esm/proxy-signals.js +0 -34
  860. package/node_modules/foreground-child/dist/esm/proxy-signals.js.map +0 -1
  861. package/node_modules/foreground-child/dist/esm/watchdog.d.ts +0 -10
  862. package/node_modules/foreground-child/dist/esm/watchdog.d.ts.map +0 -1
  863. package/node_modules/foreground-child/dist/esm/watchdog.js +0 -46
  864. package/node_modules/foreground-child/dist/esm/watchdog.js.map +0 -1
  865. package/node_modules/foreground-child/package.json +0 -106
  866. package/node_modules/glob/dist/esm/bin.d.mts +0 -3
  867. package/node_modules/glob/dist/esm/bin.d.mts.map +0 -1
  868. package/node_modules/glob/dist/esm/bin.mjs +0 -346
  869. package/node_modules/glob/dist/esm/bin.mjs.map +0 -1
  870. package/node_modules/isexe/.npmignore +0 -2
  871. package/node_modules/isexe/LICENSE +0 -15
  872. package/node_modules/isexe/README.md +0 -51
  873. package/node_modules/isexe/index.js +0 -57
  874. package/node_modules/isexe/mode.js +0 -41
  875. package/node_modules/isexe/package.json +0 -31
  876. package/node_modules/isexe/test/basic.js +0 -221
  877. package/node_modules/isexe/windows.js +0 -42
  878. package/node_modules/jackspeak/LICENSE.md +0 -55
  879. package/node_modules/jackspeak/README.md +0 -394
  880. package/node_modules/jackspeak/dist/commonjs/index.d.ts +0 -323
  881. package/node_modules/jackspeak/dist/commonjs/index.d.ts.map +0 -1
  882. package/node_modules/jackspeak/dist/commonjs/index.js +0 -944
  883. package/node_modules/jackspeak/dist/commonjs/index.js.map +0 -1
  884. package/node_modules/jackspeak/dist/commonjs/index.min.js +0 -33
  885. package/node_modules/jackspeak/dist/commonjs/index.min.js.map +0 -7
  886. package/node_modules/jackspeak/dist/commonjs/package.json +0 -3
  887. package/node_modules/jackspeak/dist/esm/index.d.ts +0 -323
  888. package/node_modules/jackspeak/dist/esm/index.d.ts.map +0 -1
  889. package/node_modules/jackspeak/dist/esm/index.js +0 -936
  890. package/node_modules/jackspeak/dist/esm/index.js.map +0 -1
  891. package/node_modules/jackspeak/dist/esm/index.min.js +0 -33
  892. package/node_modules/jackspeak/dist/esm/index.min.js.map +0 -7
  893. package/node_modules/jackspeak/dist/esm/package.json +0 -3
  894. package/node_modules/jackspeak/package.json +0 -115
  895. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-D1i7zWXR.js +0 -1
  896. package/node_modules/jishushell-panel/output/public/assets/Dashboard-sWIvL43F.js +0 -1
  897. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-DQ8RyvQY.js +0 -1
  898. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-tIbPP1sB.js +0 -4
  899. package/node_modules/jishushell-panel/output/public/assets/InitPassword-C3Slq3Dd.js +0 -1
  900. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-7JqY9tq4.js +0 -92
  901. package/node_modules/jishushell-panel/output/public/assets/Login-BXLDJlQN.js +0 -1
  902. package/node_modules/jishushell-panel/output/public/assets/NewInstance-dLc5Xrpx.js +0 -1
  903. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-DIAXxesl.js +0 -1
  904. package/node_modules/jishushell-panel/output/public/assets/Settings-Bd5utbBh.js +0 -1
  905. package/node_modules/jishushell-panel/output/public/assets/Setup-Yn9_20FL.js +0 -1
  906. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-C21doQTJ.js +0 -9
  907. package/node_modules/jishushell-panel/output/public/assets/index-CCkaIEjn.js +0 -20
  908. package/node_modules/jishushell-panel/output/public/assets/index-D7qxy-Vh.css +0 -1
  909. package/node_modules/jishushell-panel/output/public/assets/registry-B2ZQZXWL.js +0 -2
  910. package/node_modules/jishushell-panel/output/public/assets/usePolling-BFZm4do_.js +0 -1
  911. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-DqPtOicc.js +0 -9
  912. package/node_modules/jishushell-panel/output/public/assets/vendor-react-DW5juQin.js +0 -59
  913. package/node_modules/package-json-from-dist/LICENSE.md +0 -63
  914. package/node_modules/package-json-from-dist/README.md +0 -110
  915. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +0 -89
  916. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +0 -1
  917. package/node_modules/package-json-from-dist/dist/commonjs/index.js +0 -134
  918. package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +0 -1
  919. package/node_modules/package-json-from-dist/dist/commonjs/package.json +0 -3
  920. package/node_modules/package-json-from-dist/dist/esm/index.d.ts +0 -89
  921. package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +0 -1
  922. package/node_modules/package-json-from-dist/dist/esm/index.js +0 -129
  923. package/node_modules/package-json-from-dist/dist/esm/index.js.map +0 -1
  924. package/node_modules/package-json-from-dist/dist/esm/package.json +0 -3
  925. package/node_modules/package-json-from-dist/package.json +0 -68
  926. package/node_modules/path-key/index.d.ts +0 -40
  927. package/node_modules/path-key/index.js +0 -16
  928. package/node_modules/path-key/license +0 -9
  929. package/node_modules/path-key/package.json +0 -39
  930. package/node_modules/path-key/readme.md +0 -61
  931. package/node_modules/safe-buffer/LICENSE +0 -21
  932. package/node_modules/safe-buffer/README.md +0 -584
  933. package/node_modules/safe-buffer/index.d.ts +0 -187
  934. package/node_modules/safe-buffer/index.js +0 -65
  935. package/node_modules/safe-buffer/package.json +0 -51
  936. package/node_modules/shebang-command/index.js +0 -19
  937. package/node_modules/shebang-command/license +0 -9
  938. package/node_modules/shebang-command/package.json +0 -34
  939. package/node_modules/shebang-command/readme.md +0 -34
  940. package/node_modules/shebang-regex/index.d.ts +0 -22
  941. package/node_modules/shebang-regex/index.js +0 -2
  942. package/node_modules/shebang-regex/license +0 -9
  943. package/node_modules/shebang-regex/package.json +0 -35
  944. package/node_modules/shebang-regex/readme.md +0 -33
  945. package/node_modules/signal-exit/LICENSE.txt +0 -16
  946. package/node_modules/signal-exit/README.md +0 -74
  947. package/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
  948. package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
  949. package/node_modules/signal-exit/dist/cjs/browser.js +0 -10
  950. package/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
  951. package/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
  952. package/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
  953. package/node_modules/signal-exit/dist/cjs/index.js +0 -279
  954. package/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
  955. package/node_modules/signal-exit/dist/cjs/package.json +0 -3
  956. package/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
  957. package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
  958. package/node_modules/signal-exit/dist/cjs/signals.js +0 -42
  959. package/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
  960. package/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
  961. package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
  962. package/node_modules/signal-exit/dist/mjs/browser.js +0 -4
  963. package/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
  964. package/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
  965. package/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
  966. package/node_modules/signal-exit/dist/mjs/index.js +0 -275
  967. package/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
  968. package/node_modules/signal-exit/dist/mjs/package.json +0 -3
  969. package/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
  970. package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
  971. package/node_modules/signal-exit/dist/mjs/signals.js +0 -39
  972. package/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
  973. package/node_modules/signal-exit/package.json +0 -106
  974. package/node_modules/which/CHANGELOG.md +0 -166
  975. package/node_modules/which/LICENSE +0 -15
  976. package/node_modules/which/README.md +0 -54
  977. package/node_modules/which/bin/node-which +0 -52
  978. package/node_modules/which/package.json +0 -43
  979. package/node_modules/which/which.js +0 -125
  980. package/scripts/check-adapter-isolation.ts +0 -293
  981. /package/dist/services/{app → app-common}/app-compiler.d.ts +0 -0
  982. /package/dist/services/{app → app-common}/terminal-session-manager.d.ts +0 -0
  983. /package/dist/services/{backup-verify.d.ts → backup/backup-verify.d.ts} +0 -0
  984. /package/dist/services/{external-mounts.d.ts → files/external-mounts.d.ts} +0 -0
  985. /package/dist/services/{organize → files/organize}/applier.d.ts +0 -0
  986. /package/dist/services/{organize → files/organize}/rules.d.ts +0 -0
  987. /package/dist/services/{organize → files/organize}/scanner.d.ts +0 -0
  988. /package/dist/services/{organize → files/organize}/store.d.ts +0 -0
  989. /package/dist/services/{webdav → files/webdav}/xml-builder.d.ts +0 -0
  990. /package/dist/services/{webdav → files/webdav}/xml-builder.js +0 -0
  991. /package/dist/services/{app-passwords.d.ts → instances/passwords.d.ts} +0 -0
  992. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.d.ts +0 -0
  993. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.js +0 -0
  994. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/drive-shim.d.ts +0 -0
  995. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/mcporter-lite.d.ts +0 -0
  996. /package/dist/services/{plugin-installer.d.ts → setup/plugin-installer.d.ts} +0 -0
  997. /package/dist/services/{macos-launchd.d.ts → system/macos-launchd.d.ts} +0 -0
  998. /package/dist/services/{system-monitor.d.ts → system/system-monitor.d.ts} +0 -0
@@ -1,1020 +0,0 @@
1
- /**
2
- * OpenClaw-specific HTTP routes — private Panel route adapter.
3
- *
4
- * These endpoints know about the OpenClaw workspace layout (mcporter.json,
5
- * .openclaw/workspace/skills/, sessions.json), OpenClaw's Feishu/WeChat
6
- * channel plugins, and the OpenClaw gateway's control-UI HTML that needs
7
- * boot-script injection. None of them are generic enough for the framework
8
- * to host in the public runtime adapter, so the Panel route layer registers
9
- * them directly.
10
- */
11
- import { createHash } from "crypto";
12
- import { existsSync, realpathSync } from "fs";
13
- import { readFile, stat } from "fs/promises";
14
- import { request as httpRequest } from "http";
15
- import { join } from "path";
16
- import { PROXY_IDENTITY_HEADERS } from "../constants.js";
17
- import { assertNotLocked } from "../services/backup-manager.js";
18
- import * as instanceManager from "../services/instance-manager.js";
19
- import * as pluginInstaller from "../services/plugin-installer.js";
20
- import { supportsGatewayChatPanel } from "../services/runtime/instance.js";
21
- import { getAdapter, resolveAgentType } from "../services/runtime/index.js";
22
- import { writeConfigFile, ensureDirContainer } from "../utils/fs.js";
23
- import { HOP_BY_HOP, ensureControlUiAllowedOrigin, getSvc, inferRequestOrigin, restartRunningInstanceForControlUiOrigin, validateId, } from "./instances.js";
24
- /**
25
- * Register all OpenClaw-specific HTTP endpoints on the given Fastify app.
26
- * Called by the Panel route composition at server startup.
27
- */
28
- const REFERER_INSTANCE_ID_RE = /\/api\/instances\/([a-z0-9][a-z0-9-]*)\/gateway(?:\/|$|\?|#)/i;
29
- /**
30
- * Extract the instance id from an iframe Referer header that points at the
31
- * gateway-proxied control UI (`/api/instances/<id>/gateway/...`). Used by the
32
- * referer-forwarded proxy to recover routing context for OpenClaw chat
33
- * messages that embed jishushell-absolute URLs (e.g. screenshot media).
34
- *
35
- * Returns null when the Referer is missing, malformed, or doesn't match a
36
- * gateway URL — caller should fall through to a 404.
37
- */
38
- export function extractRefererInstanceId(refererHeader) {
39
- const ref = typeof refererHeader === "string"
40
- ? refererHeader
41
- : Array.isArray(refererHeader)
42
- ? String(refererHeader[0] ?? "")
43
- : "";
44
- if (!ref)
45
- return null;
46
- const m = ref.match(REFERER_INSTANCE_ID_RE);
47
- return m ? m[1] : null;
48
- }
49
- export function registerOpenclawRoutes(app) {
50
- // ── Plugin check & install — host-side, no container dependency ────
51
- app.get("/api/instances/:id/plugins/check/:channelId", async (req, reply) => {
52
- const idErr = validateId(req.params.id);
53
- if (idErr)
54
- return reply.status(400).send({ detail: idErr });
55
- if (!instanceManager.getInstance(req.params.id)) {
56
- return reply.status(404).send({ detail: "Instance not found" });
57
- }
58
- const inst = instanceManager.getInstance(req.params.id);
59
- const agentType = resolveAgentType(inst);
60
- const adapter = getAdapter(agentType);
61
- const installed = typeof adapter.isChannelPluginInstalled === "function"
62
- ? adapter.isChannelPluginInstalled(req.params.id, req.params.channelId)
63
- : false;
64
- return { channelId: req.params.channelId, installed };
65
- });
66
- app.get("/api/instances/:id/plugins/status", async (req, reply) => {
67
- const idErr = validateId(req.params.id);
68
- if (idErr)
69
- return reply.status(400).send({ detail: idErr });
70
- if (!instanceManager.getInstance(req.params.id)) {
71
- return reply.status(404).send({ detail: "Instance not found" });
72
- }
73
- return { plugins: pluginInstaller.getAllPluginStatuses(req.params.id) };
74
- });
75
- app.get("/api/instances/:id/quick-status", async (req, reply) => {
76
- const idErr = validateId(req.params.id);
77
- if (idErr)
78
- return reply.status(400).send({ detail: idErr });
79
- if (!instanceManager.getInstance(req.params.id)) {
80
- return reply.status(404).send({ detail: "Instance not found" });
81
- }
82
- const id = req.params.id;
83
- const cfg = instanceManager.getConfig(id) ?? {};
84
- const channels = cfg.channels ?? {};
85
- const feishuCh = channels["feishu"] ?? channels["lark"] ?? {};
86
- const weixinCh = channels["openclaw-weixin"] ?? {};
87
- const feishuBound = !!(feishuCh.enabled &&
88
- (feishuCh.appId || feishuCh.token || feishuCh.deviceToken || feishuCh.accessToken));
89
- const weixinBound = !!(weixinCh.enabled &&
90
- weixinCh.accounts &&
91
- Object.keys(weixinCh.accounts).length > 0);
92
- const { readdirSync: fsReaddir, readFileSync: fsRead } = await import("fs");
93
- const { join: fsJoin } = await import("path");
94
- const workspaceDir = fsJoin(instanceManager.getOpenclawHome(id), ".openclaw", "workspace");
95
- const stateDir = fsJoin(workspaceDir, "skills");
96
- let installedSkillDirs = [];
97
- try {
98
- installedSkillDirs = fsReaddir(stateDir, { withFileTypes: true })
99
- .filter((e) => e.isDirectory())
100
- .map((e) => e.name);
101
- }
102
- catch {
103
- /* no skills dir */
104
- }
105
- const mcporterInstalled = installedSkillDirs.some((d) => d.toLowerCase() === "mcporter");
106
- let mcporterServers = {};
107
- const mcporterCfgPath = fsJoin(workspaceDir, "config", "mcporter.json");
108
- try {
109
- const raw = JSON.parse(fsRead(mcporterCfgPath, "utf8"));
110
- mcporterServers = raw.mcpServers ?? {};
111
- }
112
- catch {
113
- /* no mcporter config */
114
- }
115
- return {
116
- im: { feishu: feishuBound, weixin: weixinBound },
117
- installedSkillDirs,
118
- mcporterInstalled,
119
- mcporterServers,
120
- };
121
- });
122
- // ── MCPorter server CRUD ──────────────────────────────────────────
123
- app.get("/api/instances/:id/mcporter/list", async (req, reply) => {
124
- const idErr = validateId(req.params.id);
125
- if (idErr)
126
- return reply.status(400).send({ detail: idErr });
127
- if (!instanceManager.getInstance(req.params.id)) {
128
- return reply.status(404).send({ detail: "Instance not found" });
129
- }
130
- const id = req.params.id;
131
- const openclawHome = instanceManager.getOpenclawHome(id);
132
- const workspaceDir = join(openclawHome, ".openclaw", "workspace");
133
- const mcporterBinPath = join(openclawHome, ".npm-global", "bin", "mcporter");
134
- const mcporterFallbackPath = join(openclawHome, ".npm-global", "bin", "jishushell-mcporter");
135
- const mcporterCfg = join(workspaceDir, "config", "mcporter.json");
136
- const binPath = existsSync(mcporterBinPath)
137
- ? mcporterBinPath
138
- : existsSync(mcporterFallbackPath)
139
- ? mcporterFallbackPath
140
- : "";
141
- if (!binPath) {
142
- return { servers: [], installed: false };
143
- }
144
- const { execFile } = await import("child_process");
145
- const { promisify } = await import("util");
146
- const execFileAsync = promisify(execFile);
147
- try {
148
- const useNodeLauncher = binPath === mcporterFallbackPath;
149
- const { stdout } = await execFileAsync(useNodeLauncher ? process.execPath : binPath, useNodeLauncher ? [binPath, "list", "--json"] : ["list", "--json"], {
150
- env: { ...process.env, HOME: openclawHome, MCPORTER_CONFIG: mcporterCfg },
151
- timeout: 60_000,
152
- });
153
- const parsed = JSON.parse(stdout);
154
- return { servers: parsed.servers ?? [], installed: true };
155
- }
156
- catch (err) {
157
- const raw = err?.stdout ?? "";
158
- try {
159
- const parsed = JSON.parse(raw);
160
- return { servers: parsed.servers ?? [], installed: true };
161
- }
162
- catch {
163
- /* fall through */
164
- }
165
- return { servers: [], installed: true, error: err?.message ?? "unknown" };
166
- }
167
- });
168
- app.post("/api/instances/:id/mcporter/add", async (req, reply) => {
169
- const idErr = validateId(req.params.id);
170
- if (idErr)
171
- return reply.status(400).send({ detail: idErr });
172
- if (!instanceManager.getInstance(req.params.id)) {
173
- return reply.status(404).send({ detail: "Instance not found" });
174
- }
175
- const { servers } = req.body;
176
- if (!servers || typeof servers !== "object" || Array.isArray(servers)) {
177
- return reply.status(400).send({ detail: "servers must be an object" });
178
- }
179
- const openclawHome = instanceManager.getOpenclawHome(req.params.id);
180
- const workspaceDir = join(openclawHome, ".openclaw", "workspace");
181
- const mcporterCfgPath = join(workspaceDir, "config", "mcporter.json");
182
- const { readFileSync } = await import("fs");
183
- let cfg = { mcpServers: {}, imports: [] };
184
- try {
185
- cfg = JSON.parse(readFileSync(mcporterCfgPath, "utf8"));
186
- }
187
- catch {
188
- /* start fresh */
189
- }
190
- if (!cfg.mcpServers)
191
- cfg.mcpServers = {};
192
- // Prototype-pollution guard.
193
- const PROTO_KEYS = new Set(["__proto__", "constructor", "prototype"]);
194
- for (const [k, v] of Object.entries(servers)) {
195
- if (!PROTO_KEYS.has(k))
196
- cfg.mcpServers[k] = v;
197
- }
198
- try {
199
- ensureDirContainer(join(workspaceDir, "config"));
200
- writeConfigFile(mcporterCfgPath, JSON.stringify(cfg, null, 2));
201
- }
202
- catch (err) {
203
- return reply.status(500).send({ detail: `Write failed: ${err.message}` });
204
- }
205
- return { ok: true, mcpServers: cfg.mcpServers };
206
- });
207
- app.delete("/api/instances/:id/mcporter/:serverName", async (req, reply) => {
208
- const idErr = validateId(req.params.id);
209
- if (idErr)
210
- return reply.status(400).send({ detail: idErr });
211
- if (!instanceManager.getInstance(req.params.id)) {
212
- return reply.status(404).send({ detail: "Instance not found" });
213
- }
214
- const { serverName } = req.params;
215
- if (!serverName || typeof serverName !== "string") {
216
- return reply.status(400).send({ detail: "serverName is required" });
217
- }
218
- const openclawHome = instanceManager.getOpenclawHome(req.params.id);
219
- const workspaceDir = join(openclawHome, ".openclaw", "workspace");
220
- const mcporterCfgPath = join(workspaceDir, "config", "mcporter.json");
221
- const { readFileSync } = await import("fs");
222
- let cfg = { mcpServers: {}, imports: [] };
223
- try {
224
- cfg = JSON.parse(readFileSync(mcporterCfgPath, "utf8"));
225
- }
226
- catch {
227
- /* start fresh */
228
- }
229
- if (!cfg.mcpServers || !(serverName in cfg.mcpServers)) {
230
- return reply.status(404).send({ detail: `Server '${serverName}' not found` });
231
- }
232
- delete cfg.mcpServers[serverName];
233
- try {
234
- writeConfigFile(mcporterCfgPath, JSON.stringify(cfg, null, 2));
235
- }
236
- catch (err) {
237
- return reply.status(500).send({ detail: `Write failed: ${err.message}` });
238
- }
239
- return { ok: true, mcpServers: cfg.mcpServers };
240
- });
241
- // ── Skills CRUD ───────────────────────────────────────────────────
242
- app.delete("/api/instances/:id/skills/:skillDir", async (req, reply) => {
243
- const idErr = validateId(req.params.id);
244
- if (idErr)
245
- return reply.status(400).send({ detail: idErr });
246
- if (!instanceManager.getInstance(req.params.id)) {
247
- return reply.status(404).send({ detail: "Instance not found" });
248
- }
249
- const { skillDir } = req.params;
250
- if (!skillDir || skillDir.includes("/") || skillDir.includes("..") || skillDir.startsWith(".")) {
251
- return reply.status(400).send({ detail: "Invalid skill directory name" });
252
- }
253
- const openclawHome = instanceManager.getOpenclawHome(req.params.id);
254
- const skillPath = join(openclawHome, ".openclaw", "workspace", "skills", skillDir);
255
- const { existsSync: fsEx, rmSync } = await import("fs");
256
- if (!fsEx(skillPath)) {
257
- return reply.status(404).send({ detail: `Skill '${skillDir}' not found` });
258
- }
259
- try {
260
- rmSync(skillPath, { recursive: true, force: true });
261
- }
262
- catch (err) {
263
- return reply.status(500).send({ detail: `Delete failed: ${err.message}` });
264
- }
265
- return { ok: true };
266
- });
267
- // ── Plugin install ────────────────────────────────────────────────
268
- app.post("/api/instances/:id/plugins/install", async (req, reply) => {
269
- const idErr = validateId(req.params.id);
270
- if (idErr)
271
- return reply.status(400).send({ detail: idErr });
272
- if (!instanceManager.getInstance(req.params.id)) {
273
- return reply.status(404).send({ detail: "Instance not found" });
274
- }
275
- try {
276
- assertNotLocked(req.params.id);
277
- }
278
- catch (e) {
279
- return reply.status(e.statusCode || 409).send({ detail: e.message });
280
- }
281
- const { channelId } = req.body;
282
- if (!channelId || typeof channelId !== "string") {
283
- return reply.status(400).send({ detail: "channelId is required" });
284
- }
285
- const inst2 = instanceManager.getInstance(req.params.id);
286
- const agentType2 = resolveAgentType(inst2);
287
- const pkg = getAdapter(agentType2).channelPluginMap?.[channelId];
288
- if (!pkg) {
289
- return reply.status(400).send({ detail: `Unknown channel: ${channelId}` });
290
- }
291
- const pStatus = pluginInstaller.getPluginStatus(req.params.id, channelId);
292
- if (pStatus.status === "installed")
293
- return { ok: true, status: "already_installed" };
294
- if (pStatus.status === "installing")
295
- return { ok: true, status: "installing" };
296
- pluginInstaller.enqueueInstall(req.params.id, channelId);
297
- return { ok: true, status: "queued" };
298
- });
299
- // Check-only helper; throws if the plugin needed by an IM login is missing.
300
- async function ensurePluginInstalled(instanceId, channelId) {
301
- const inst = instanceManager.getInstance(instanceId);
302
- const agentType = resolveAgentType(inst);
303
- const adapter = getAdapter(agentType);
304
- if (!adapter.channelPluginMap?.[channelId])
305
- return;
306
- const installed = typeof adapter.isChannelPluginInstalled === "function"
307
- ? adapter.isChannelPluginInstalled(instanceId, channelId)
308
- : false;
309
- if (!installed) {
310
- throw new Error(`Plugin ${channelId} is not installed. Please install it from the config page.`);
311
- }
312
- }
313
- // ── Feishu/Lark OAuth Device Code Login ───────────────────────────
314
- const FEISHU_AUTH_URL = "https://accounts.feishu.cn";
315
- const MAX_LOGIN_SESSIONS = 100;
316
- const feishuLogins = new Map();
317
- app.post("/api/instances/:id/feishu/login", async (req, reply) => {
318
- const channelKey = req.body?.channelKey || "feishu";
319
- const idErr = validateId(req.params.id);
320
- if (idErr)
321
- return reply.status(400).send({ detail: idErr });
322
- if (!instanceManager.getInstance(req.params.id)) {
323
- return reply.status(404).send({ detail: "Instance not found" });
324
- }
325
- const svc = await getSvc();
326
- const svcStatus = await svc.getStatus(req.params.id);
327
- if (svcStatus.status !== "running") {
328
- return reply.status(400).send({ detail: "Instance must be running first" });
329
- }
330
- try {
331
- await ensurePluginInstalled(req.params.id, channelKey);
332
- }
333
- catch (e) {
334
- return reply.status(400).send({ detail: e.message });
335
- }
336
- try {
337
- await fetch(`${FEISHU_AUTH_URL}/oauth/v1/app/registration`, {
338
- method: "POST",
339
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
340
- body: "action=init",
341
- signal: AbortSignal.timeout(30_000),
342
- });
343
- const beginResp = await fetch(`${FEISHU_AUTH_URL}/oauth/v1/app/registration`, {
344
- method: "POST",
345
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
346
- body: "action=begin&archetype=PersonalAgent&auth_method=client_secret&request_user_info=open_id",
347
- signal: AbortSignal.timeout(30_000),
348
- });
349
- if (!beginResp.ok)
350
- throw new Error(`Feishu API error: ${beginResp.status}`);
351
- const beginData = (await beginResp.json());
352
- const sessionKey = `${req.params.id}-${channelKey}-${Date.now()}`;
353
- feishuLogins.set(sessionKey, {
354
- instanceId: req.params.id,
355
- deviceCode: beginData.device_code,
356
- startedAt: Date.now(),
357
- interval: beginData.interval || 5,
358
- expireIn: beginData.expire_in || 600,
359
- channelKey,
360
- });
361
- for (const [k, v] of feishuLogins) {
362
- if (Date.now() - v.startedAt > v.expireIn * 1000)
363
- feishuLogins.delete(k);
364
- }
365
- while (feishuLogins.size > MAX_LOGIN_SESSIONS) {
366
- feishuLogins.delete(feishuLogins.keys().next().value);
367
- }
368
- return { qrcodeUrl: beginData.verification_uri_complete, sessionKey };
369
- }
370
- catch (e) {
371
- return reply.status(502).send({ detail: e.message || "Failed to start Feishu login" });
372
- }
373
- });
374
- app.get("/api/instances/:id/feishu/login/:sessionKey", async (req, reply) => {
375
- const idErr = validateId(req.params.id);
376
- if (idErr)
377
- return reply.status(400).send({ detail: idErr });
378
- const login = feishuLogins.get(req.params.sessionKey);
379
- if (!login)
380
- return reply.status(404).send({ detail: "Login session not found or expired" });
381
- if (login.instanceId !== req.params.id) {
382
- return reply.status(403).send({ detail: "Session belongs to a different instance" });
383
- }
384
- if (Date.now() - login.startedAt > login.expireIn * 1000) {
385
- feishuLogins.delete(req.params.sessionKey);
386
- return { status: "expired", connected: false, message: "QR code expired, please regenerate." };
387
- }
388
- try {
389
- const resp = await fetch(`${FEISHU_AUTH_URL}/oauth/v1/app/registration`, {
390
- method: "POST",
391
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
392
- body: `action=poll&device_code=${encodeURIComponent(login.deviceCode)}`,
393
- signal: AbortSignal.timeout(10_000),
394
- });
395
- const data = (await resp.json());
396
- if (data.client_id && data.client_secret) {
397
- const storedChannelKey = login.channelKey || "feishu";
398
- feishuLogins.delete(req.params.sessionKey);
399
- const domain = data.user_info?.tenant_brand === "lark" ? "lark" : "feishu";
400
- instanceManager.saveFeishuCredentials(req.params.id, {
401
- appId: data.client_id,
402
- appSecret: data.client_secret,
403
- domain,
404
- channelKey: storedChannelKey,
405
- });
406
- return {
407
- status: "confirmed",
408
- connected: true,
409
- domain,
410
- message: domain === "lark" ? "Lark bot configured!" : "Feishu bot configured!",
411
- };
412
- }
413
- if (data.error === "authorization_pending") {
414
- return { status: "waiting", connected: false, message: "Waiting for scan..." };
415
- }
416
- if (data.error === "expired_token") {
417
- feishuLogins.delete(req.params.sessionKey);
418
- return { status: "expired", connected: false, message: "QR code expired, please regenerate." };
419
- }
420
- return { status: "waiting", connected: false, message: "Waiting for scan..." };
421
- }
422
- catch (e) {
423
- return reply.status(502).send({ detail: e.message || "Poll failed" });
424
- }
425
- });
426
- // ── WeChat accounts + QR Login ────────────────────────────────────
427
- app.get("/api/instances/:id/weixin/accounts", async (req, reply) => {
428
- const idErr = validateId(req.params.id);
429
- if (idErr)
430
- return reply.status(400).send({ detail: idErr });
431
- if (!instanceManager.getInstance(req.params.id)) {
432
- return reply.status(404).send({ detail: "Instance not found" });
433
- }
434
- return { accounts: instanceManager.getWeixinAccounts(req.params.id) };
435
- });
436
- const WEIXIN_API_BASE = "https://ilinkai.weixin.qq.com";
437
- const WEIXIN_BOT_TYPE = "3";
438
- const weixinLogins = new Map();
439
- app.post("/api/instances/:id/weixin/login", async (req, reply) => {
440
- const idErr = validateId(req.params.id);
441
- if (idErr)
442
- return reply.status(400).send({ detail: idErr });
443
- if (!instanceManager.getInstance(req.params.id)) {
444
- return reply.status(404).send({ detail: "Instance not found" });
445
- }
446
- const svc = await getSvc();
447
- const svcStatus = await svc.getStatus(req.params.id);
448
- if (svcStatus.status !== "running") {
449
- return reply.status(400).send({ detail: "Instance must be running first" });
450
- }
451
- try {
452
- await ensurePluginInstalled(req.params.id, "openclaw-weixin");
453
- }
454
- catch (e) {
455
- return reply.status(400).send({ detail: e.message });
456
- }
457
- try {
458
- const resp = await fetch(`${WEIXIN_API_BASE}/ilink/bot/get_bot_qrcode?bot_type=${WEIXIN_BOT_TYPE}`, { signal: AbortSignal.timeout(30_000) });
459
- if (!resp.ok)
460
- throw new Error(`WeChat API error: ${resp.status}`);
461
- const data = (await resp.json());
462
- const sessionKey = `${req.params.id}-${Date.now()}`;
463
- weixinLogins.set(sessionKey, {
464
- instanceId: req.params.id,
465
- qrcode: data.qrcode,
466
- qrcodeUrl: data.qrcode_img_content,
467
- startedAt: Date.now(),
468
- });
469
- for (const [k, v] of weixinLogins) {
470
- if (Date.now() - v.startedAt > 5 * 60_000)
471
- weixinLogins.delete(k);
472
- }
473
- while (weixinLogins.size > MAX_LOGIN_SESSIONS) {
474
- weixinLogins.delete(weixinLogins.keys().next().value);
475
- }
476
- return { qrcodeUrl: data.qrcode_img_content, sessionKey };
477
- }
478
- catch (e) {
479
- return reply.status(502).send({ detail: e.message || "Failed to get QR code" });
480
- }
481
- });
482
- app.get("/api/instances/:id/weixin/login/:sessionKey", async (req, reply) => {
483
- const idErr = validateId(req.params.id);
484
- if (idErr)
485
- return reply.status(400).send({ detail: idErr });
486
- const login = weixinLogins.get(req.params.sessionKey);
487
- if (!login)
488
- return reply.status(404).send({ detail: "Login session not found or expired" });
489
- if (login.instanceId !== req.params.id) {
490
- return reply.status(403).send({ detail: "Session belongs to a different instance" });
491
- }
492
- if (Date.now() - login.startedAt > 5 * 60_000) {
493
- weixinLogins.delete(req.params.sessionKey);
494
- return { status: "expired", connected: false, message: "QR code expired, please regenerate." };
495
- }
496
- try {
497
- const resp = await fetch(`${WEIXIN_API_BASE}/ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(login.qrcode)}`, { headers: { "iLink-App-ClientVersion": "1" }, signal: AbortSignal.timeout(35_000) });
498
- if (!resp.ok)
499
- throw new Error(`Status poll failed: ${resp.status}`);
500
- const data = (await resp.json());
501
- if (data.status === "confirmed") {
502
- // iLink occasionally returns `confirmed` with an empty payload
503
- // (seen when the upstream QR session raced an internal refresh
504
- // on their side). Without all four fields the runtime can't
505
- // actually pair — write it anyway and the next `docker pull` of
506
- // updates 401s with a cryptic "token missing" error. Reject at
507
- // the route layer so the UI surfaces a clear failure instead.
508
- if (!data.ilink_bot_id || !data.bot_token) {
509
- console.error(`[weixin-login] iLink returned confirmed but payload incomplete: ` +
510
- `bot_id=${data.ilink_bot_id ? "<present>" : "<missing>"}, ` +
511
- `bot_token=${data.bot_token ? "<present>" : "<missing>"}`);
512
- weixinLogins.delete(req.params.sessionKey);
513
- return reply.status(502).send({
514
- status: "error",
515
- connected: false,
516
- detail: "WeChat confirmed the scan but returned an incomplete credential payload. " +
517
- "Please retry the QR login.",
518
- });
519
- }
520
- weixinLogins.delete(req.params.sessionKey);
521
- try {
522
- instanceManager.saveWeixinCredentials(req.params.id, {
523
- accountId: data.ilink_bot_id,
524
- token: data.bot_token,
525
- baseUrl: data.baseurl || WEIXIN_API_BASE,
526
- userId: data.ilink_user_id || "",
527
- });
528
- }
529
- catch (e) {
530
- console.error(`[weixin-login] Failed to save credentials: ${e.message}`);
531
- return reply.status(500).send({
532
- status: "confirmed",
533
- connected: false,
534
- detail: "WeChat authenticated but failed to save credentials: " + e.message,
535
- });
536
- }
537
- return {
538
- status: "confirmed",
539
- connected: true,
540
- accountId: data.ilink_bot_id,
541
- message: "WeChat connected!",
542
- };
543
- }
544
- if (data.status === "expired") {
545
- try {
546
- const refreshResp = await fetch(`${WEIXIN_API_BASE}/ilink/bot/get_bot_qrcode?bot_type=${WEIXIN_BOT_TYPE}`, { signal: AbortSignal.timeout(30_000) });
547
- if (refreshResp.ok) {
548
- const refreshData = (await refreshResp.json());
549
- login.qrcode = refreshData.qrcode;
550
- login.qrcodeUrl = refreshData.qrcode_img_content;
551
- login.startedAt = Date.now();
552
- return {
553
- status: "refreshed",
554
- connected: false,
555
- qrcodeUrl: refreshData.qrcode_img_content,
556
- message: "QR code refreshed, please scan again.",
557
- };
558
- }
559
- }
560
- catch {
561
- /* fall through */
562
- }
563
- weixinLogins.delete(req.params.sessionKey);
564
- return { status: "expired", connected: false, message: "QR code expired, please regenerate." };
565
- }
566
- return {
567
- status: data.status,
568
- connected: false,
569
- message: data.status === "scaned" ? "Scanned, please confirm on WeChat..." : "Waiting for scan...",
570
- };
571
- }
572
- catch (e) {
573
- return reply.status(502).send({ detail: e.message || "Status poll failed" });
574
- }
575
- });
576
- // ── Usage (reads OpenClaw sessions.json) ──────────────────────────
577
- app.get("/api/instances/:id/usage", async (req, reply) => {
578
- const idErr = validateId(req.params.id);
579
- if (idErr)
580
- return reply.status(400).send({ detail: idErr });
581
- const inst = instanceManager.getInstance(req.params.id);
582
- if (!inst)
583
- return reply.status(404).send({ detail: "Instance not found" });
584
- const openclawHome = instanceManager.getOpenclawHome(req.params.id);
585
- const sessionsIndex = join(openclawHome, ".openclaw", "agents", "main", "sessions", "sessions.json");
586
- const emptyTotals = {
587
- input: 0,
588
- output: 0,
589
- cacheRead: 0,
590
- cacheWrite: 0,
591
- totalTokens: 0,
592
- costTotal: 0,
593
- messages: 0,
594
- };
595
- if (!existsSync(sessionsIndex))
596
- return { sessions: [], totals: emptyTotals };
597
- const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
598
- const indexStat = await stat(sessionsIndex);
599
- if (indexStat.size > MAX_FILE_SIZE) {
600
- return reply.status(400).send({ detail: "sessions.json exceeds 10MB size limit" });
601
- }
602
- let sessionsMap;
603
- try {
604
- const raw = await readFile(sessionsIndex, "utf-8");
605
- sessionsMap = JSON.parse(raw);
606
- }
607
- catch {
608
- return reply.status(500).send({ detail: "Failed to parse sessions.json" });
609
- }
610
- const sessions = [];
611
- const totals = { ...emptyTotals };
612
- for (const [sessionKey, sessionMeta] of Object.entries(sessionsMap)) {
613
- const sessionFile = sessionMeta?.sessionFile;
614
- if (!sessionFile || !existsSync(sessionFile))
615
- continue;
616
- try {
617
- const resolvedSession = realpathSync(sessionFile);
618
- const resolvedHome = realpathSync(openclawHome);
619
- if (!resolvedSession.startsWith(resolvedHome + "/") && resolvedSession !== resolvedHome)
620
- continue;
621
- }
622
- catch {
623
- continue;
624
- }
625
- let sessionStat;
626
- try {
627
- sessionStat = await stat(sessionFile);
628
- }
629
- catch {
630
- continue;
631
- }
632
- if (sessionStat.size > MAX_FILE_SIZE)
633
- continue;
634
- const sessionUsage = {
635
- input: 0,
636
- output: 0,
637
- cacheRead: 0,
638
- cacheWrite: 0,
639
- totalTokens: 0,
640
- costTotal: 0,
641
- messages: 0,
642
- };
643
- let model = "";
644
- let firstTs = "";
645
- let lastTs = "";
646
- const originLabel = sessionMeta?.origin?.label || "";
647
- const channel = sessionMeta?.origin?.provider || "";
648
- let sessionContent;
649
- try {
650
- sessionContent = await readFile(sessionFile, "utf-8");
651
- }
652
- catch {
653
- continue;
654
- }
655
- for (const line of sessionContent.split("\n")) {
656
- let entry;
657
- try {
658
- entry = JSON.parse(line.trim());
659
- }
660
- catch {
661
- continue;
662
- }
663
- if (entry.type !== "message")
664
- continue;
665
- const msg = entry.message || {};
666
- const ts = entry.timestamp || "";
667
- if (ts && !firstTs)
668
- firstTs = ts;
669
- if (ts)
670
- lastTs = ts;
671
- if (msg.role === "assistant") {
672
- if (!model && msg.model)
673
- model = msg.model;
674
- const usage = msg.usage;
675
- if (usage) {
676
- sessionUsage.input += usage.input || 0;
677
- sessionUsage.output += usage.output || 0;
678
- sessionUsage.cacheRead += usage.cacheRead || 0;
679
- sessionUsage.cacheWrite += usage.cacheWrite || 0;
680
- sessionUsage.totalTokens += usage.totalTokens || 0;
681
- if (typeof usage.cost === "object")
682
- sessionUsage.costTotal += usage.cost.total || 0;
683
- }
684
- sessionUsage.messages++;
685
- }
686
- else if (msg.role === "user") {
687
- sessionUsage.messages++;
688
- }
689
- }
690
- sessions.push({
691
- key: sessionKey,
692
- model,
693
- channel,
694
- origin: originLabel,
695
- firstMessage: firstTs,
696
- lastMessage: lastTs,
697
- usage: sessionUsage,
698
- });
699
- for (const k of ["input", "output", "cacheRead", "cacheWrite", "totalTokens", "messages"]) {
700
- totals[k] += sessionUsage[k];
701
- }
702
- totals.costTotal += sessionUsage.costTotal;
703
- }
704
- sessions.sort((a, b) => (b.lastMessage || "").localeCompare(a.lastMessage || ""));
705
- return { sessions, totals };
706
- });
707
- // ── Gateway launch (OpenClaw control-UI iframe boot) ──────────────
708
- app.get("/api/instances/:id/gateway-launch", async (req, reply) => {
709
- const idErr = validateId(req.params.id);
710
- if (idErr)
711
- return reply.status(400).send({ detail: idErr });
712
- const inst = instanceManager.getInstance(req.params.id);
713
- if (!inst)
714
- return reply.status(404).send({ detail: "Instance not found" });
715
- if (!(await supportsGatewayChatPanel(req.params.id, inst))) {
716
- return reply
717
- .status(501)
718
- .send({ detail: "Gateway chat panel is not supported for this runtime" });
719
- }
720
- const panelOrigin = inferRequestOrigin(req);
721
- if (panelOrigin) {
722
- let addedAllowedOrigin = false;
723
- try {
724
- addedAllowedOrigin = await ensureControlUiAllowedOrigin(req.params.id, panelOrigin);
725
- }
726
- catch (err) {
727
- console.warn(`[gateway-launch] failed to add allowed origin for ${req.params.id}:`, err.message || err);
728
- }
729
- if (addedAllowedOrigin) {
730
- await restartRunningInstanceForControlUiOrigin(req.params.id, panelOrigin);
731
- }
732
- }
733
- const baseUrl = `/api/instances/${req.params.id}/gateway/`;
734
- const cfg = instanceManager.getStoredConfig(req.params.id);
735
- const token = cfg?.gateway?.auth?.token;
736
- if (typeof token !== "string" || !token.trim()) {
737
- return { url: baseUrl };
738
- }
739
- return { url: `${baseUrl}#token=${encodeURIComponent(token.trim())}` };
740
- });
741
- // ── Gateway HTTP proxy (with control-UI HTML injection) ───────────
742
- const gatewayProxy = async (request, reply) => {
743
- const { id } = request.params;
744
- const idErr = validateId(id);
745
- if (idErr)
746
- return reply.status(400).send({ detail: idErr });
747
- const inst = instanceManager.getInstance(id);
748
- if (!inst)
749
- return reply.status(404).send({ detail: "Instance not found" });
750
- if (!(await supportsGatewayChatPanel(id, inst))) {
751
- return reply.status(501).send({ detail: "Gateway proxy is not supported for this runtime" });
752
- }
753
- const port = instanceManager.getGatewayPort(id);
754
- const gwHost = await instanceManager.getGatewayHost(id);
755
- const suffix = request.params["*"] || "";
756
- const qs = request.url.includes("?") ? request.url.slice(request.url.indexOf("?")) : "";
757
- const urlGwHost = instanceManager.urlHost(gwHost);
758
- const targetUrl = `http://${urlGwHost}:${port}/${suffix}${qs}`;
759
- try {
760
- const fwdHeaders = {};
761
- const rawHeaders = request.raw.headers;
762
- for (const [k, v] of Object.entries(rawHeaders)) {
763
- if (v === undefined)
764
- continue;
765
- const lk = k.toLowerCase();
766
- if (HOP_BY_HOP.has(lk) ||
767
- PROXY_IDENTITY_HEADERS.has(lk) ||
768
- lk === "host" ||
769
- lk === "cookie" ||
770
- lk === "authorization")
771
- continue;
772
- fwdHeaders[k] = Array.isArray(v) ? v.join(", ") : v;
773
- }
774
- fwdHeaders["host"] = `${urlGwHost}:${port}`;
775
- // NOTE: the cli branch (commit 94163bc) stripped the browser's Origin
776
- // and rewrote it to `http://<gwHost>:<gwPort>`. In multi-agents the
777
- // panel instead auto-adds the browser's origin to
778
- // `gateway.controlUi.allowedOrigins` and restarts the instance (see
779
- // ensureControlUiAllowedOrigin in routes/instances.ts). Forwarding the
780
- // real Origin is what lets that whitelist entry match — rewriting
781
- // breaks the configured allowlist.
782
- fwdHeaders["accept-encoding"] = "identity";
783
- // Inject the per-instance gateway auth token so plain HTTP requests
784
- // from the iframe (notably `<img src="/api/chat/media/...">` for
785
- // server-emitted screenshot/upload URLs) authenticate against
786
- // OpenClaw. The browser-supplied Authorization/Cookie are stripped
787
- // above to avoid leaking panel auth into OpenClaw; without this
788
- // injection chat-embedded media renders as 401 broken-image.
789
- // The token is per-instance and only valid for this gateway, so
790
- // attaching it on every proxied request is safe.
791
- try {
792
- const cfg = instanceManager.getStoredConfig(id);
793
- const token = cfg?.gateway?.auth?.token;
794
- if (typeof token === "string" && token.trim()) {
795
- fwdHeaders["authorization"] = `Bearer ${token.trim()}`;
796
- }
797
- }
798
- catch { /* best-effort: a missing config means no auth, request will get the same 401 it does today */ }
799
- const upstreamRes = await new Promise((resolve, reject) => {
800
- const proxyReq = httpRequest(targetUrl, { method: request.method, headers: fwdHeaders }, resolve);
801
- proxyReq.on("error", reject);
802
- if (request.method !== "GET" && request.method !== "HEAD") {
803
- request.raw.pipe(proxyReq);
804
- }
805
- else {
806
- proxyReq.end();
807
- }
808
- });
809
- reply.status(upstreamRes.statusCode || 502);
810
- for (const [k, v] of Object.entries(upstreamRes.headers)) {
811
- if (v === undefined)
812
- continue;
813
- const lk = k.toLowerCase();
814
- if (HOP_BY_HOP.has(lk))
815
- continue;
816
- if (lk === "x-frame-options") {
817
- reply.header("x-frame-options", "SAMEORIGIN");
818
- continue;
819
- }
820
- if (lk === "content-security-policy") {
821
- const csp = Array.isArray(v) ? v.join(", ") : v;
822
- const rewritten = csp.replace(/frame-ancestors\s+[^;]*/i, "frame-ancestors 'self'");
823
- reply.header("content-security-policy", rewritten === csp ? `${csp}; frame-ancestors 'self'` : rewritten);
824
- continue;
825
- }
826
- reply.header(k, Array.isArray(v) ? v.join(", ") : v);
827
- }
828
- const respCt = upstreamRes.headers["content-type"] || "";
829
- if (suffix === "__openclaw/control-ui-config.json" && respCt.includes("application/json")) {
830
- const chunks = [];
831
- for await (const chunk of upstreamRes)
832
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
833
- try {
834
- const config = JSON.parse(Buffer.concat(chunks).toString("utf-8"));
835
- config.basePath = `/api/instances/${id}/gateway`;
836
- const buf = Buffer.from(JSON.stringify(config));
837
- reply.header("content-length", buf.length);
838
- reply.removeHeader("content-encoding");
839
- return reply.send(buf);
840
- }
841
- catch {
842
- /* fall through to stream */
843
- }
844
- }
845
- if (respCt.includes("text/html")) {
846
- const chunks = [];
847
- for await (const chunk of upstreamRes)
848
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
849
- let html = Buffer.concat(chunks).toString("utf-8");
850
- const basePath = `/api/instances/${id}/gateway`;
851
- const injectScript = [
852
- `window.__OPENCLAW_CONTROL_UI_BASE_PATH__=${JSON.stringify(basePath)};`,
853
- `(()=>{`,
854
- ` try {`,
855
- ` const settingsKey='openclaw.control.settings.v1';`,
856
- ` const tokenStoragePrefix='openclaw.control.token.v1:';`,
857
- ` const normalizeGatewayScope=(gatewayUrl)=>{`,
858
- ` const raw=(gatewayUrl||'').trim();`,
859
- ` if(!raw) return 'default';`,
860
- ` try {`,
861
- ` const base=\`\${window.location.protocol}//\${window.location.host}\${window.location.pathname||'/'}\`;`,
862
- ` const parsed=new URL(raw, base);`,
863
- ` const pathname=parsed.pathname==='/'?'':(parsed.pathname.replace(/\\/+$/,'')||parsed.pathname);`,
864
- ` return \`\${parsed.protocol}//\${parsed.host}\${pathname}\`;`,
865
- ` } catch {`,
866
- ` return raw;`,
867
- ` }`,
868
- ` };`,
869
- ` const proto=window.location.protocol==='https:'?'wss':'ws';`,
870
- ` const gatewayUrl=\`\${proto}://\${window.location.host}${basePath}\`;`,
871
- ` const tokenSessionKey=\`\${tokenStoragePrefix}\${normalizeGatewayScope(gatewayUrl)}\`;`,
872
- ` const raw=window.localStorage.getItem(settingsKey);`,
873
- ` let next={};`,
874
- ` try { next=raw ? JSON.parse(raw) : {}; } catch { next={}; }`,
875
- ` next.gatewayUrl=gatewayUrl;`,
876
- ` if('token' in next) delete next.token;`,
877
- ` const hashParams=new URLSearchParams(window.location.hash.startsWith('#')?window.location.hash.slice(1):window.location.hash);`,
878
- ` const searchParams=new URLSearchParams(window.location.search);`,
879
- ` const launchToken=(hashParams.get('token')||searchParams.get('token')||'').trim();`,
880
- ` if(launchToken){`,
881
- ` window.sessionStorage.setItem(tokenSessionKey, launchToken);`,
882
- ` }`,
883
- ` window.localStorage.setItem(settingsKey, JSON.stringify(next));`,
884
- ` const autoConnect=()=>{`,
885
- ` const attempt=()=>{`,
886
- ` const app=document.querySelector('openclaw-app');`,
887
- ` if(!app||typeof app.connect!=='function'||typeof app.applySettings!=='function'||!app.settings||typeof app.settings!=='object') return false;`,
888
- ` const sessionToken=(window.sessionStorage.getItem(tokenSessionKey)||'').trim();`,
889
- ` const token=(sessionToken||launchToken||app.settings.token||'').trim();`,
890
- ` if(!token) return false;`,
891
- ` const nextSettings={...app.settings, gatewayUrl, token};`,
892
- ` if(nextSettings.gatewayUrl!==app.settings.gatewayUrl||nextSettings.token!==app.settings.token){`,
893
- ` app.applySettings(nextSettings);`,
894
- ` }`,
895
- ` if(app.connected) return true;`,
896
- ` const wsState=app.client&&app.client.ws?app.client.ws.readyState:null;`,
897
- ` const connecting=wsState===0||wsState===1;`,
898
- ` if(!connecting){`,
899
- ` window.setTimeout(()=>{`,
900
- ` try { if(!app.connected) app.connect(); } catch {}`,
901
- ` }, 0);`,
902
- ` }`,
903
- ` return false;`,
904
- ` };`,
905
- ` const start=()=>{`,
906
- ` let tries=0;`,
907
- ` let timer=0;`,
908
- ` const tick=()=>{`,
909
- ` tries+=1;`,
910
- ` if(attempt()||tries>=120){`,
911
- ` window.clearInterval(timer);`,
912
- ` }`,
913
- ` };`,
914
- ` tick();`,
915
- ` timer=window.setInterval(()=>{`,
916
- ` tick();`,
917
- ` },500);`,
918
- ` };`,
919
- ` if(window.customElements&&typeof window.customElements.whenDefined==='function'){`,
920
- ` window.customElements.whenDefined('openclaw-app').then(start).catch(()=>{});`,
921
- ` }else{`,
922
- ` start();`,
923
- ` }`,
924
- ` };`,
925
- ` autoConnect();`,
926
- ` } catch {}`,
927
- `})();`,
928
- ].join("");
929
- const inject = `<script>${injectScript}</script>`;
930
- const injectCmdScript = [
931
- `(function(){`,
932
- ` var _jishuInject=function(cmd,send){`,
933
- ` var app=document.querySelector('openclaw-app');`,
934
- ` if(!app)return false;`,
935
- ` if(send){`,
936
- ` if(!app.connected)return false;`,
937
- ` try{app.handleSendChat(cmd);return true;}catch(e){}`,
938
- ` return false;`,
939
- ` }else{`,
940
- ` try{app.chatMessage=cmd;return true;}catch(e){}`,
941
- ` return false;`,
942
- ` }`,
943
- ` };`,
944
- ` window.addEventListener('message',function(e){`,
945
- ` if(!e.data||e.data.type!=='jishu:inject-cmd')return;`,
946
- ` var cmd=e.data.cmd,send=!!e.data.send,tries=0;`,
947
- ` var poll=function(){if(_jishuInject(cmd,send)||++tries>=50)return;setTimeout(poll,200);};`,
948
- ` poll();`,
949
- ` },false);`,
950
- `})();`,
951
- ].join("");
952
- const injectCmdScriptHash = createHash("sha256").update(injectCmdScript, "utf8").digest("base64");
953
- const fullHtmlInject = `${inject}<script>${injectCmdScript}</script>`;
954
- html = html.replace(/<head\b[^>]*>/i, (match) => `${match}${fullHtmlInject}`);
955
- const inlineScriptHash = createHash("sha256").update(injectScript, "utf8").digest("base64");
956
- const cspHeader = reply.getHeader("content-security-policy");
957
- if (typeof cspHeader === "string" && cspHeader) {
958
- const hashToken = `'sha256-${inlineScriptHash}'`;
959
- const hashToken2 = `'sha256-${injectCmdScriptHash}'`;
960
- const addHashes = (src) => {
961
- let s = src;
962
- if (!s.includes(hashToken))
963
- s = s + ` ${hashToken}`;
964
- if (!s.includes(hashToken2))
965
- s = s + ` ${hashToken2}`;
966
- return s;
967
- };
968
- const nextCsp = /\bscript-src\b/i.test(cspHeader)
969
- ? cspHeader.replace(/\bscript-src\b([^;]*)/i, (_m, value) => `script-src${addHashes(value)}`)
970
- : `${cspHeader}; script-src 'self' ${hashToken} ${hashToken2}`;
971
- reply.header("content-security-policy", nextCsp);
972
- }
973
- const buf = Buffer.from(html, "utf-8");
974
- reply.header("cache-control", "no-store");
975
- reply.header("content-length", buf.length);
976
- reply.removeHeader("content-encoding");
977
- return reply.send(buf);
978
- }
979
- return reply.send(upstreamRes);
980
- }
981
- catch (err) {
982
- console.error(`[gateway-proxy] ${id}:`, err.message || err);
983
- return reply.status(502).send({ detail: "Cannot reach OpenClaw gateway" });
984
- }
985
- };
986
- app.all("/api/instances/:id/gateway/*", gatewayProxy);
987
- app.all("/api/instances/:id/gateway", gatewayProxy);
988
- // ── Referer-forwarded gateway proxy for OpenClaw control-UI internal URLs ─
989
- //
990
- // Some OpenClaw chat messages embed server-generated absolute URLs that
991
- // ignore `gateway.basePath` (e.g. screenshot/upload media references emitted
992
- // as `{type:"image", url:"/api/chat/media/outgoing/..."}` — `basePath` is
993
- // the client-side override for outgoing requests, but server-rendered
994
- // message URLs are baked at emit time without it). Inside the iframe the
995
- // browser resolves those against the panel origin and they land here on
996
- // jishushell instead of the instance's gateway.
997
- //
998
- // Handle this by recovering the instance id from the iframe Referer
999
- // (`/api/instances/<id>/gateway/...`) and replaying the request through
1000
- // gatewayProxy. Limited to a narrow allowlist of OpenClaw-owned prefixes
1001
- // to avoid colliding with jishushell's own routes.
1002
- const refererForwardedProxy = async (request, reply) => {
1003
- const id = extractRefererInstanceId(request.headers.referer);
1004
- if (!id)
1005
- return reply.status(404).send({ detail: "Not found" });
1006
- const idErr = validateId(id);
1007
- if (idErr)
1008
- return reply.status(400).send({ detail: idErr });
1009
- const path = String(request.url ?? "").split("?")[0];
1010
- const suffix = path.replace(/^\/+/, "");
1011
- Object.assign(request.params, { id, "*": suffix });
1012
- return gatewayProxy(request, reply);
1013
- };
1014
- // /api/chat/* covers the screenshot/upload media that the runtime emits
1015
- // as message-embedded absolute URLs. Add other OpenClaw-internal prefixes
1016
- // here as they surface — keep the list narrow so jishushell-owned routes
1017
- // (auth/instances/system/setup) stay unambiguous.
1018
- app.all("/api/chat/*", refererForwardedProxy);
1019
- }
1020
- //# sourceMappingURL=openclaw-routes.js.map