jishushell 0.6.5 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1207) hide show
  1. package/apps/anythingllm-container.yaml +16 -170
  2. package/apps/browserless-chromium-container.yaml +16 -10
  3. package/apps/filebrowser-container.yaml +15 -9
  4. package/apps/hermes-container.yaml +20 -5
  5. package/apps/immich-container-lite.yaml +337 -0
  6. package/apps/immich-container.yaml +371 -0
  7. package/apps/jishu-kb-container.yaml +50 -177
  8. package/apps/ollama-binary.yaml +33 -28
  9. package/apps/ollama-cpu-container.yaml +6 -0
  10. package/apps/ollama-with-hollama-binary.yaml +35 -28
  11. package/apps/openclaw-binary.yaml +35 -15
  12. package/apps/openclaw-container.yaml +29 -11
  13. package/apps/openclaw-with-ollama-container.yaml +9 -2
  14. package/apps/openclaw-with-searxng-container.yaml +38 -6
  15. package/apps/searxng-container.yaml +31 -6
  16. package/apps/weknora-container.yaml +26 -21
  17. package/dependencies/jishushell-panel-0.7.3.tgz +0 -0
  18. package/dist/cli/app.js +244 -213
  19. package/dist/cli/app.js.map +1 -1
  20. package/dist/cli/backup.js +15 -12
  21. package/dist/cli/backup.js.map +1 -1
  22. package/dist/cli/core.d.ts +4 -3
  23. package/dist/cli/core.js +392 -227
  24. package/dist/cli/core.js.map +1 -1
  25. package/dist/cli/doctor.d.ts +1 -1
  26. package/dist/cli/doctor.js +113 -10
  27. package/dist/cli/doctor.js.map +1 -1
  28. package/dist/cli/job.js +62 -14
  29. package/dist/cli/job.js.map +1 -1
  30. package/dist/cli/llm.js +80 -11
  31. package/dist/cli/llm.js.map +1 -1
  32. package/dist/cli/managed-list.d.ts +1 -3
  33. package/dist/cli/managed-list.js +18 -16
  34. package/dist/cli/managed-list.js.map +1 -1
  35. package/dist/cli/migrate.d.ts +2 -0
  36. package/dist/cli/migrate.js +160 -0
  37. package/dist/cli/migrate.js.map +1 -0
  38. package/dist/cli.js +1 -0
  39. package/dist/cli.js.map +1 -1
  40. package/dist/config.d.ts +32 -20
  41. package/dist/config.js +132 -51
  42. package/dist/config.js.map +1 -1
  43. package/dist/control.d.ts +6 -6
  44. package/dist/control.js +31 -23
  45. package/dist/control.js.map +1 -1
  46. package/dist/core.d.ts +5 -5
  47. package/dist/core.js +5 -5
  48. package/dist/core.js.map +1 -1
  49. package/dist/install.d.ts +2 -2
  50. package/dist/install.js +78 -37
  51. package/dist/install.js.map +1 -1
  52. package/dist/routes/admin.d.ts +2 -0
  53. package/dist/routes/admin.js +72 -0
  54. package/dist/routes/admin.js.map +1 -0
  55. package/dist/routes/apps.d.ts +1 -1
  56. package/dist/routes/apps.js +101 -193
  57. package/dist/routes/apps.js.map +1 -1
  58. package/dist/routes/auth.js +1 -1
  59. package/dist/routes/auth.js.map +1 -1
  60. package/dist/routes/backup.js +1 -1
  61. package/dist/routes/backup.js.map +1 -1
  62. package/dist/routes/docker.d.ts +2 -0
  63. package/dist/routes/docker.js +58 -0
  64. package/dist/routes/docker.js.map +1 -0
  65. package/dist/routes/external-mounts.d.ts +1 -1
  66. package/dist/routes/external-mounts.js +1 -1
  67. package/dist/routes/external-mounts.js.map +1 -1
  68. package/dist/routes/file-mounts.d.ts +4 -3
  69. package/dist/routes/file-mounts.js +49 -31
  70. package/dist/routes/file-mounts.js.map +1 -1
  71. package/dist/routes/files-organize.d.ts +2 -2
  72. package/dist/routes/files-organize.js +5 -5
  73. package/dist/routes/files-organize.js.map +1 -1
  74. package/dist/routes/files.d.ts +1 -1
  75. package/dist/routes/files.js +1 -1
  76. package/dist/routes/files.js.map +1 -1
  77. package/dist/routes/instances.d.ts +0 -8
  78. package/dist/routes/instances.js +202 -1560
  79. package/dist/routes/instances.js.map +1 -1
  80. package/dist/routes/integration-apps.d.ts +14 -0
  81. package/dist/routes/integration-apps.js +81 -0
  82. package/dist/routes/integration-apps.js.map +1 -0
  83. package/dist/routes/integrations.d.ts +9 -0
  84. package/dist/routes/integrations.js +12 -0
  85. package/dist/routes/integrations.js.map +1 -0
  86. package/dist/routes/llm-proxy.js +26 -3
  87. package/dist/routes/llm-proxy.js.map +1 -1
  88. package/dist/routes/setup.js +53 -38
  89. package/dist/routes/setup.js.map +1 -1
  90. package/dist/routes/system.js +108 -68
  91. package/dist/routes/system.js.map +1 -1
  92. package/dist/routes/webdav.d.ts +1 -1
  93. package/dist/routes/webdav.js +2 -2
  94. package/dist/routes/webdav.js.map +1 -1
  95. package/dist/server.d.ts +6 -0
  96. package/dist/server.js +368 -233
  97. package/dist/server.js.map +1 -1
  98. package/dist/services/app-common/app-compiler.js +186 -0
  99. package/dist/services/app-common/app-compiler.js.map +1 -0
  100. package/dist/services/app-common/app-shared.d.ts +15 -0
  101. package/dist/services/app-common/app-shared.js +64 -0
  102. package/dist/services/app-common/app-shared.js.map +1 -0
  103. package/dist/services/app-common/capability-service.d.ts +45 -0
  104. package/dist/services/app-common/capability-service.js +331 -0
  105. package/dist/services/app-common/capability-service.js.map +1 -0
  106. package/dist/services/app-common/catalog-service.d.ts +59 -0
  107. package/dist/services/app-common/catalog-service.js +318 -0
  108. package/dist/services/app-common/catalog-service.js.map +1 -0
  109. package/dist/services/app-common/create-pipeline.d.ts +26 -0
  110. package/dist/services/app-common/create-pipeline.js +298 -0
  111. package/dist/services/app-common/create-pipeline.js.map +1 -0
  112. package/dist/services/app-common/delete-service.d.ts +5 -0
  113. package/dist/services/app-common/delete-service.js +109 -0
  114. package/dist/services/app-common/delete-service.js.map +1 -0
  115. package/dist/services/app-common/execution-owner.d.ts +23 -0
  116. package/dist/services/app-common/execution-owner.js +124 -0
  117. package/dist/services/app-common/execution-owner.js.map +1 -0
  118. package/dist/services/app-common/execution-service.d.ts +23 -0
  119. package/dist/services/app-common/execution-service.js +105 -0
  120. package/dist/services/app-common/execution-service.js.map +1 -0
  121. package/dist/services/app-common/id-normalizer.d.ts +31 -0
  122. package/dist/services/app-common/id-normalizer.js +83 -0
  123. package/dist/services/app-common/id-normalizer.js.map +1 -0
  124. package/dist/services/app-common/install-store.d.ts +34 -0
  125. package/dist/services/app-common/install-store.js +261 -0
  126. package/dist/services/app-common/install-store.js.map +1 -0
  127. package/dist/services/app-common/instance-store.d.ts +78 -0
  128. package/dist/services/app-common/instance-store.js +498 -0
  129. package/dist/services/app-common/instance-store.js.map +1 -0
  130. package/dist/services/app-common/integration-refs.d.ts +17 -0
  131. package/dist/services/app-common/integration-refs.js +47 -0
  132. package/dist/services/app-common/integration-refs.js.map +1 -0
  133. package/dist/services/app-common/lifecycle-pipeline.d.ts +62 -0
  134. package/dist/services/app-common/lifecycle-pipeline.js +317 -0
  135. package/dist/services/app-common/lifecycle-pipeline.js.map +1 -0
  136. package/dist/services/app-common/lifecycle-scripts.d.ts +38 -0
  137. package/dist/services/app-common/lifecycle-scripts.js +935 -0
  138. package/dist/services/app-common/lifecycle-scripts.js.map +1 -0
  139. package/dist/services/app-common/lifecycle-service.d.ts +68 -0
  140. package/dist/services/app-common/lifecycle-service.js +475 -0
  141. package/dist/services/app-common/lifecycle-service.js.map +1 -0
  142. package/dist/services/app-common/ownership.d.ts +3 -0
  143. package/dist/services/app-common/ownership.js +11 -0
  144. package/dist/services/app-common/ownership.js.map +1 -0
  145. package/dist/services/app-common/paths.d.ts +29 -0
  146. package/dist/services/app-common/paths.js +34 -0
  147. package/dist/services/app-common/paths.js.map +1 -0
  148. package/dist/services/app-common/platform-transform.d.ts +32 -0
  149. package/dist/services/app-common/platform-transform.js +65 -0
  150. package/dist/services/app-common/platform-transform.js.map +1 -0
  151. package/dist/services/app-common/provide-resolver.d.ts +29 -0
  152. package/dist/services/app-common/provide-resolver.js +129 -0
  153. package/dist/services/app-common/provide-resolver.js.map +1 -0
  154. package/dist/services/app-common/remote-spec.d.ts +14 -0
  155. package/dist/services/app-common/remote-spec.js +58 -0
  156. package/dist/services/app-common/remote-spec.js.map +1 -0
  157. package/dist/services/app-common/runtime-builder.d.ts +1 -0
  158. package/dist/services/app-common/runtime-builder.js +2 -0
  159. package/dist/services/app-common/runtime-builder.js.map +1 -0
  160. package/dist/services/app-common/runtime-facts.d.ts +19 -0
  161. package/dist/services/app-common/runtime-facts.js +128 -0
  162. package/dist/services/app-common/runtime-facts.js.map +1 -0
  163. package/dist/services/app-common/service.d.ts +9 -0
  164. package/dist/services/app-common/service.js +10 -0
  165. package/dist/services/app-common/service.js.map +1 -0
  166. package/dist/services/app-common/spec-materializer.d.ts +8 -0
  167. package/dist/services/app-common/spec-materializer.js +295 -0
  168. package/dist/services/app-common/spec-materializer.js.map +1 -0
  169. package/dist/services/app-common/status-refresh.d.ts +33 -0
  170. package/dist/services/app-common/status-refresh.js +771 -0
  171. package/dist/services/app-common/status-refresh.js.map +1 -0
  172. package/dist/services/app-common/task-service.d.ts +29 -0
  173. package/dist/services/app-common/task-service.js +93 -0
  174. package/dist/services/app-common/task-service.js.map +1 -0
  175. package/dist/services/app-common/terminal-session-manager.js +157 -0
  176. package/dist/services/app-common/terminal-session-manager.js.map +1 -0
  177. package/dist/services/app-modules/browserless/routes.d.ts +9 -0
  178. package/dist/services/app-modules/browserless/routes.js +519 -0
  179. package/dist/services/app-modules/browserless/routes.js.map +1 -0
  180. package/dist/services/app-modules/routes.d.ts +2 -0
  181. package/dist/services/app-modules/routes.js +5 -0
  182. package/dist/services/app-modules/routes.js.map +1 -0
  183. package/dist/services/backup/backup-admin.d.ts +95 -0
  184. package/dist/services/backup/backup-admin.js +246 -0
  185. package/dist/services/backup/backup-admin.js.map +1 -0
  186. package/dist/services/backup/backup-manager.d.ts +264 -0
  187. package/dist/services/backup/backup-manager.js +2318 -0
  188. package/dist/services/backup/backup-manager.js.map +1 -0
  189. package/dist/services/backup/backup-verify.js +240 -0
  190. package/dist/services/backup/backup-verify.js.map +1 -0
  191. package/dist/services/capabilities/browser-policy.d.ts +14 -0
  192. package/dist/services/capabilities/browser-policy.js +141 -0
  193. package/dist/services/capabilities/browser-policy.js.map +1 -0
  194. package/dist/services/capabilities/contract.d.ts +49 -0
  195. package/dist/services/capabilities/contract.js +119 -0
  196. package/dist/services/capabilities/contract.js.map +1 -0
  197. package/dist/services/capabilities/endpoint-validator.d.ts +42 -0
  198. package/dist/services/capabilities/endpoint-validator.js +113 -0
  199. package/dist/services/capabilities/endpoint-validator.js.map +1 -0
  200. package/dist/services/capabilities/health.d.ts +16 -0
  201. package/dist/services/capabilities/health.js +121 -0
  202. package/dist/services/capabilities/health.js.map +1 -0
  203. package/dist/services/capabilities/registry.d.ts +56 -0
  204. package/dist/services/capabilities/registry.js +222 -0
  205. package/dist/services/capabilities/registry.js.map +1 -0
  206. package/dist/services/capabilities/sync.d.ts +7 -0
  207. package/dist/services/capabilities/sync.js +223 -0
  208. package/dist/services/capabilities/sync.js.map +1 -0
  209. package/dist/services/capability-proxy/html-rewriters/browserless.d.ts +1 -0
  210. package/dist/services/capability-proxy/html-rewriters/browserless.js +83 -0
  211. package/dist/services/capability-proxy/html-rewriters/browserless.js.map +1 -0
  212. package/dist/services/capability-proxy/html-rewriters/index.d.ts +12 -0
  213. package/dist/services/capability-proxy/html-rewriters/index.js +25 -0
  214. package/dist/services/capability-proxy/html-rewriters/index.js.map +1 -0
  215. package/dist/services/capability-proxy/html-rewriters/jishukb.d.ts +1 -0
  216. package/dist/services/capability-proxy/html-rewriters/jishukb.js +161 -0
  217. package/dist/services/capability-proxy/html-rewriters/jishukb.js.map +1 -0
  218. package/dist/services/capability-proxy/http.d.ts +7 -0
  219. package/dist/services/capability-proxy/http.js +555 -0
  220. package/dist/services/capability-proxy/http.js.map +1 -0
  221. package/dist/services/capability-proxy/terminal.d.ts +4 -0
  222. package/dist/services/capability-proxy/terminal.js +179 -0
  223. package/dist/services/capability-proxy/terminal.js.map +1 -0
  224. package/dist/services/connections/admin.d.ts +80 -0
  225. package/dist/services/connections/admin.js +337 -0
  226. package/dist/services/connections/admin.js.map +1 -0
  227. package/dist/services/connections/apply.d.ts +104 -0
  228. package/dist/services/connections/apply.js +415 -0
  229. package/dist/services/connections/apply.js.map +1 -0
  230. package/dist/services/connections/resolver.d.ts +82 -0
  231. package/dist/services/connections/resolver.js +289 -0
  232. package/dist/services/connections/resolver.js.map +1 -0
  233. package/dist/services/connections/transactor.d.ts +39 -0
  234. package/dist/services/connections/transactor.js +307 -0
  235. package/dist/services/connections/transactor.js.map +1 -0
  236. package/dist/services/files/bootstrap.d.ts +7 -0
  237. package/dist/services/files/bootstrap.js +16 -0
  238. package/dist/services/files/bootstrap.js.map +1 -0
  239. package/dist/services/files/external-mounts.js +187 -0
  240. package/dist/services/files/external-mounts.js.map +1 -0
  241. package/dist/services/files/files-manager.d.ts +265 -0
  242. package/dist/services/files/files-manager.js +1189 -0
  243. package/dist/services/files/files-manager.js.map +1 -0
  244. package/dist/services/files/files-mounts.d.ts +42 -0
  245. package/dist/services/files/files-mounts.js +207 -0
  246. package/dist/services/files/files-mounts.js.map +1 -0
  247. package/dist/services/files/organize/applier.js +218 -0
  248. package/dist/services/files/organize/applier.js.map +1 -0
  249. package/dist/services/files/organize/rules.js +286 -0
  250. package/dist/services/files/organize/rules.js.map +1 -0
  251. package/dist/services/files/organize/scanner.js +366 -0
  252. package/dist/services/files/organize/scanner.js.map +1 -0
  253. package/dist/services/files/organize/store.js +82 -0
  254. package/dist/services/files/organize/store.js.map +1 -0
  255. package/dist/services/files/photos/upload-page.d.ts +2 -0
  256. package/dist/services/files/photos/upload-page.js +248 -0
  257. package/dist/services/files/photos/upload-page.js.map +1 -0
  258. package/dist/services/files/photos/upload-store.d.ts +74 -0
  259. package/dist/services/files/photos/upload-store.js +432 -0
  260. package/dist/services/files/photos/upload-store.js.map +1 -0
  261. package/dist/services/files/webdav/server.d.ts +47 -0
  262. package/dist/services/files/webdav/server.js +329 -0
  263. package/dist/services/files/webdav/server.js.map +1 -0
  264. package/dist/services/files/webdav/xml-builder.js.map +1 -0
  265. package/dist/services/http/proxy-utils.d.ts +7 -0
  266. package/dist/services/http/proxy-utils.js +29 -0
  267. package/dist/services/http/proxy-utils.js.map +1 -0
  268. package/dist/services/http/request-utils.d.ts +3 -0
  269. package/dist/services/http/request-utils.js +23 -0
  270. package/dist/services/http/request-utils.js.map +1 -0
  271. package/dist/services/instances/admin.d.ts +23 -0
  272. package/dist/services/instances/admin.js +218 -0
  273. package/dist/services/instances/admin.js.map +1 -0
  274. package/dist/services/instances/clone.d.ts +26 -0
  275. package/dist/services/instances/clone.js +78 -0
  276. package/dist/services/instances/clone.js.map +1 -0
  277. package/dist/services/instances/config-admin.d.ts +17 -0
  278. package/dist/services/instances/config-admin.js +181 -0
  279. package/dist/services/instances/config-admin.js.map +1 -0
  280. package/dist/services/instances/manager.d.ts +232 -0
  281. package/dist/services/instances/manager.js +1342 -0
  282. package/dist/services/instances/manager.js.map +1 -0
  283. package/dist/services/instances/pairing.d.ts +17 -0
  284. package/dist/services/instances/pairing.js +53 -0
  285. package/dist/services/instances/pairing.js.map +1 -0
  286. package/dist/services/instances/passwords.js +173 -0
  287. package/dist/services/instances/passwords.js.map +1 -0
  288. package/dist/services/instances/status.d.ts +2 -0
  289. package/dist/services/instances/status.js +11 -0
  290. package/dist/services/instances/status.js.map +1 -0
  291. package/dist/services/instances/types.d.ts +21 -0
  292. package/dist/services/instances/types.js +2 -0
  293. package/dist/services/instances/types.js.map +1 -0
  294. package/dist/services/integrations/anythingllm/integration.d.ts +25 -0
  295. package/dist/services/integrations/anythingllm/integration.js +251 -0
  296. package/dist/services/integrations/anythingllm/integration.js.map +1 -0
  297. package/dist/services/integrations/catalog.d.ts +3 -0
  298. package/dist/services/integrations/catalog.js +73 -0
  299. package/dist/services/integrations/catalog.js.map +1 -0
  300. package/dist/services/integrations/custom/integration.d.ts +28 -0
  301. package/dist/services/integrations/custom/integration.js +179 -0
  302. package/dist/services/integrations/custom/integration.js.map +1 -0
  303. package/dist/services/integrations/hermes/integration.d.ts +194 -0
  304. package/dist/services/integrations/hermes/integration.js +1668 -0
  305. package/dist/services/integrations/hermes/integration.js.map +1 -0
  306. package/dist/services/integrations/immich/client.d.ts +93 -0
  307. package/dist/services/integrations/immich/client.js +458 -0
  308. package/dist/services/integrations/immich/client.js.map +1 -0
  309. package/dist/services/integrations/immich/config.d.ts +15 -0
  310. package/dist/services/integrations/immich/config.js +178 -0
  311. package/dist/services/integrations/immich/config.js.map +1 -0
  312. package/dist/services/integrations/immich/discovery.d.ts +9 -0
  313. package/dist/services/integrations/immich/discovery.js +101 -0
  314. package/dist/services/integrations/immich/discovery.js.map +1 -0
  315. package/dist/services/integrations/immich/gallery-renderer.d.ts +5 -0
  316. package/dist/services/integrations/immich/gallery-renderer.js +150 -0
  317. package/dist/services/integrations/immich/gallery-renderer.js.map +1 -0
  318. package/dist/services/integrations/immich/immich-shim.d.ts +11 -0
  319. package/dist/services/integrations/immich/immich-shim.js +439 -0
  320. package/dist/services/integrations/immich/immich-shim.js.map +1 -0
  321. package/dist/services/integrations/immich/integration.d.ts +18 -0
  322. package/dist/services/integrations/immich/integration.js +64 -0
  323. package/dist/services/integrations/immich/integration.js.map +1 -0
  324. package/dist/services/integrations/immich/photo-library.d.ts +4 -0
  325. package/dist/services/integrations/immich/photo-library.js +63 -0
  326. package/dist/services/integrations/immich/photo-library.js.map +1 -0
  327. package/dist/services/integrations/immich/review-executor.d.ts +3 -0
  328. package/dist/services/integrations/immich/review-executor.js +41 -0
  329. package/dist/services/integrations/immich/review-executor.js.map +1 -0
  330. package/dist/services/integrations/immich/review-session-service.d.ts +27 -0
  331. package/dist/services/integrations/immich/review-session-service.js +206 -0
  332. package/dist/services/integrations/immich/review-session-service.js.map +1 -0
  333. package/dist/services/integrations/immich/review-store.d.ts +47 -0
  334. package/dist/services/integrations/immich/review-store.js +347 -0
  335. package/dist/services/integrations/immich/review-store.js.map +1 -0
  336. package/dist/services/integrations/immich/routes.d.ts +7 -0
  337. package/dist/services/integrations/immich/routes.js +363 -0
  338. package/dist/services/integrations/immich/routes.js.map +1 -0
  339. package/dist/services/integrations/immich/types.d.ts +186 -0
  340. package/dist/services/integrations/immich/types.js +2 -0
  341. package/dist/services/integrations/immich/types.js.map +1 -0
  342. package/dist/services/integrations/index.d.ts +41 -0
  343. package/dist/services/integrations/index.js +60 -0
  344. package/dist/services/integrations/index.js.map +1 -0
  345. package/dist/services/integrations/installable/catalog.d.ts +33 -0
  346. package/dist/services/integrations/installable/catalog.js +88 -0
  347. package/dist/services/integrations/installable/catalog.js.map +1 -0
  348. package/dist/services/integrations/installable/index.d.ts +35 -0
  349. package/dist/services/integrations/installable/index.js +170 -0
  350. package/dist/services/integrations/installable/index.js.map +1 -0
  351. package/dist/services/integrations/installable/installers/integration-probes.d.ts +50 -0
  352. package/dist/services/integrations/installable/installers/integration-probes.js +231 -0
  353. package/dist/services/integrations/installable/installers/integration-probes.js.map +1 -0
  354. package/dist/services/integrations/installable/installers/integration.d.ts +30 -0
  355. package/dist/services/integrations/installable/installers/integration.js +283 -0
  356. package/dist/services/integrations/installable/installers/integration.js.map +1 -0
  357. package/dist/services/integrations/installable/installers/registry-probe.js.map +1 -0
  358. package/dist/services/integrations/installable/installers/shell-script.d.ts +46 -0
  359. package/dist/services/integrations/installable/installers/shell-script.js +487 -0
  360. package/dist/services/integrations/installable/installers/shell-script.js.map +1 -0
  361. package/dist/services/integrations/installable/types.d.ts +130 -0
  362. package/dist/services/integrations/installable/types.js +19 -0
  363. package/dist/services/integrations/installable/types.js.map +1 -0
  364. package/dist/services/integrations/jishukb/integration.d.ts +24 -0
  365. package/dist/services/integrations/jishukb/integration.js +300 -0
  366. package/dist/services/integrations/jishukb/integration.js.map +1 -0
  367. package/dist/services/integrations/openclaw/anythingllm-shim.d.ts +46 -0
  368. package/dist/services/integrations/openclaw/anythingllm-shim.js +281 -0
  369. package/dist/services/integrations/openclaw/anythingllm-shim.js.map +1 -0
  370. package/dist/services/integrations/openclaw/drive-shim.js +490 -0
  371. package/dist/services/integrations/openclaw/drive-shim.js.map +1 -0
  372. package/dist/services/integrations/openclaw/integration.d.ts +438 -0
  373. package/dist/services/integrations/openclaw/integration.js +4629 -0
  374. package/dist/services/integrations/openclaw/integration.js.map +1 -0
  375. package/dist/services/integrations/openclaw/jishukb-native-mcp.d.ts +58 -0
  376. package/dist/services/integrations/openclaw/jishukb-native-mcp.js +373 -0
  377. package/dist/services/integrations/openclaw/jishukb-native-mcp.js.map +1 -0
  378. package/dist/services/integrations/openclaw/jishukb-shim.d.ts +52 -0
  379. package/dist/services/integrations/openclaw/jishukb-shim.js +1357 -0
  380. package/dist/services/integrations/openclaw/jishukb-shim.js.map +1 -0
  381. package/dist/services/integrations/openclaw/mcporter-lite.js +276 -0
  382. package/dist/services/integrations/openclaw/mcporter-lite.js.map +1 -0
  383. package/dist/services/integrations/openclaw/mcporter.d.ts +59 -0
  384. package/dist/services/integrations/openclaw/mcporter.js +143 -0
  385. package/dist/services/integrations/openclaw/mcporter.js.map +1 -0
  386. package/dist/services/integrations/openclaw/native-mcp.d.ts +48 -0
  387. package/dist/services/integrations/openclaw/native-mcp.js +125 -0
  388. package/dist/services/integrations/openclaw/native-mcp.js.map +1 -0
  389. package/dist/services/integrations/openclaw/routes.d.ts +21 -0
  390. package/dist/services/integrations/openclaw/routes.js +1194 -0
  391. package/dist/services/integrations/openclaw/routes.js.map +1 -0
  392. package/dist/services/integrations/registry.d.ts +17 -0
  393. package/dist/services/integrations/registry.js +36 -0
  394. package/dist/services/integrations/registry.js.map +1 -0
  395. package/dist/services/integrations/routes.d.ts +2 -0
  396. package/dist/services/integrations/routes.js +9 -0
  397. package/dist/services/integrations/routes.js.map +1 -0
  398. package/dist/services/integrations/types.d.ts +457 -0
  399. package/dist/services/integrations/types.js +2 -0
  400. package/dist/services/integrations/types.js.map +1 -0
  401. package/dist/services/legacy-migrator/classifier.d.ts +44 -0
  402. package/dist/services/legacy-migrator/classifier.js +309 -0
  403. package/dist/services/legacy-migrator/classifier.js.map +1 -0
  404. package/dist/services/legacy-migrator/executor.d.ts +42 -0
  405. package/dist/services/legacy-migrator/executor.js +637 -0
  406. package/dist/services/legacy-migrator/executor.js.map +1 -0
  407. package/dist/services/legacy-migrator/index.d.ts +31 -0
  408. package/dist/services/legacy-migrator/index.js +34 -0
  409. package/dist/services/legacy-migrator/index.js.map +1 -0
  410. package/dist/services/legacy-migrator/planner.d.ts +8 -0
  411. package/dist/services/legacy-migrator/planner.js +154 -0
  412. package/dist/services/legacy-migrator/planner.js.map +1 -0
  413. package/dist/services/legacy-migrator/provider-settings.d.ts +6 -0
  414. package/dist/services/legacy-migrator/provider-settings.js +72 -0
  415. package/dist/services/legacy-migrator/provider-settings.js.map +1 -0
  416. package/dist/services/legacy-migrator/report.d.ts +9 -0
  417. package/dist/services/legacy-migrator/report.js +99 -0
  418. package/dist/services/legacy-migrator/report.js.map +1 -0
  419. package/dist/services/legacy-migrator/scanner.d.ts +13 -0
  420. package/dist/services/legacy-migrator/scanner.js +157 -0
  421. package/dist/services/legacy-migrator/scanner.js.map +1 -0
  422. package/dist/services/legacy-migrator/types.d.ts +97 -0
  423. package/dist/services/legacy-migrator/types.js +23 -0
  424. package/dist/services/legacy-migrator/types.js.map +1 -0
  425. package/dist/services/llm-proxy/instance-proxy.d.ts +17 -1
  426. package/dist/services/llm-proxy/instance-proxy.js +171 -44
  427. package/dist/services/llm-proxy/instance-proxy.js.map +1 -1
  428. package/dist/services/llm-proxy/probe.js +5 -14
  429. package/dist/services/llm-proxy/probe.js.map +1 -1
  430. package/dist/services/llm-proxy/providers.js +23 -31
  431. package/dist/services/llm-proxy/providers.js.map +1 -1
  432. package/dist/services/llm-proxy/ssrf.d.ts +11 -4
  433. package/dist/services/llm-proxy/ssrf.js +45 -7
  434. package/dist/services/llm-proxy/ssrf.js.map +1 -1
  435. package/dist/services/llm-proxy/validate-key.js +16 -37
  436. package/dist/services/llm-proxy/validate-key.js.map +1 -1
  437. package/dist/services/repair/runtime-repair.d.ts +22 -0
  438. package/dist/services/repair/runtime-repair.js +374 -0
  439. package/dist/services/repair/runtime-repair.js.map +1 -0
  440. package/dist/services/runtime/docker-network.d.ts +8 -0
  441. package/dist/services/runtime/docker-network.js +123 -0
  442. package/dist/services/runtime/docker-network.js.map +1 -0
  443. package/dist/services/runtime/driver-registry.d.ts +25 -0
  444. package/dist/services/runtime/driver-registry.js +22 -0
  445. package/dist/services/runtime/driver-registry.js.map +1 -0
  446. package/dist/services/runtime/drivers/nomad.d.ts +261 -0
  447. package/dist/services/runtime/drivers/nomad.js +3122 -0
  448. package/dist/services/runtime/drivers/nomad.js.map +1 -0
  449. package/dist/services/runtime/errors.d.ts +3 -3
  450. package/dist/services/runtime/errors.js +3 -3
  451. package/dist/services/runtime/instance.d.ts +14 -16
  452. package/dist/services/runtime/instance.js +93 -123
  453. package/dist/services/runtime/instance.js.map +1 -1
  454. package/dist/services/runtime/job-id.d.ts +1 -1
  455. package/dist/services/runtime/job-id.js +1 -1
  456. package/dist/services/runtime/mcp-shims/firewall.d.ts +2 -2
  457. package/dist/services/runtime/mcp-shims/firewall.js +2 -2
  458. package/dist/services/runtime/mcp-shims/searxng-shim.d.ts +3 -5
  459. package/dist/services/runtime/mcp-shims/searxng-shim.js +3 -5
  460. package/dist/services/runtime/mcp-shims/searxng-shim.js.map +1 -1
  461. package/dist/services/runtime/mcp-shims/write-mcp-entry.d.ts +20 -20
  462. package/dist/services/runtime/mcp-shims/write-mcp-entry.js +16 -16
  463. package/dist/services/runtime/mcp-shims/write-mcp-entry.js.map +1 -1
  464. package/dist/services/runtime/ownership-marker.d.ts +83 -0
  465. package/dist/services/runtime/ownership-marker.js +109 -0
  466. package/dist/services/runtime/ownership-marker.js.map +1 -0
  467. package/dist/services/runtime/service-manager.d.ts +2 -0
  468. package/dist/services/runtime/service-manager.js +18 -0
  469. package/dist/services/runtime/service-manager.js.map +1 -0
  470. package/dist/services/runtime/types.d.ts +23 -501
  471. package/dist/services/runtime/types.js +0 -12
  472. package/dist/services/runtime/types.js.map +1 -1
  473. package/dist/services/runtime/workload-compiler.d.ts +17 -0
  474. package/dist/services/runtime/workload-compiler.js +550 -0
  475. package/dist/services/runtime/workload-compiler.js.map +1 -0
  476. package/dist/services/runtime/workload-types.d.ts +11 -0
  477. package/dist/services/runtime/workload-types.js +2 -0
  478. package/dist/services/runtime/workload-types.js.map +1 -0
  479. package/dist/services/setup/core-manager.d.ts +50 -0
  480. package/dist/services/setup/core-manager.js +456 -0
  481. package/dist/services/setup/core-manager.js.map +1 -0
  482. package/dist/services/setup/plugin-installer.js +136 -0
  483. package/dist/services/setup/plugin-installer.js.map +1 -0
  484. package/dist/services/setup/setup-manager.d.ts +158 -0
  485. package/dist/services/setup/setup-manager.js +2724 -0
  486. package/dist/services/setup/setup-manager.js.map +1 -0
  487. package/dist/services/system/cli-command.d.ts +5 -0
  488. package/dist/services/system/cli-command.js +18 -0
  489. package/dist/services/system/cli-command.js.map +1 -0
  490. package/dist/services/system/macos-launchd.js +312 -0
  491. package/dist/services/system/macos-launchd.js.map +1 -0
  492. package/dist/services/system/repair-orchestrator.d.ts +71 -0
  493. package/dist/services/system/repair-orchestrator.js +412 -0
  494. package/dist/services/system/repair-orchestrator.js.map +1 -0
  495. package/dist/services/system/runtime-ownership.d.ts +36 -0
  496. package/dist/services/system/runtime-ownership.js +250 -0
  497. package/dist/services/system/runtime-ownership.js.map +1 -0
  498. package/dist/services/system/system-monitor.js +96 -0
  499. package/dist/services/system/system-monitor.js.map +1 -0
  500. package/dist/services/system/system-ollama-provider.d.ts +14 -0
  501. package/dist/services/system/system-ollama-provider.js +129 -0
  502. package/dist/services/system/system-ollama-provider.js.map +1 -0
  503. package/dist/services/system/system-reconciler.d.ts +59 -0
  504. package/dist/services/system/system-reconciler.js +763 -0
  505. package/dist/services/system/system-reconciler.js.map +1 -0
  506. package/dist/services/system/update-manager.d.ts +43 -0
  507. package/dist/services/system/update-manager.js +315 -0
  508. package/dist/services/system/update-manager.js.map +1 -0
  509. package/dist/services/system/upgrade-finalize.d.ts +80 -0
  510. package/dist/services/system/upgrade-finalize.js +507 -0
  511. package/dist/services/system/upgrade-finalize.js.map +1 -0
  512. package/dist/services/tasks/registry.d.ts +44 -0
  513. package/dist/services/tasks/registry.js +90 -0
  514. package/dist/services/tasks/registry.js.map +1 -0
  515. package/dist/services/telemetry/activation.d.ts +6 -2
  516. package/dist/services/telemetry/activation.js +6 -2
  517. package/dist/services/telemetry/activation.js.map +1 -1
  518. package/dist/services/telemetry/heartbeat.d.ts +6 -2
  519. package/dist/services/telemetry/heartbeat.js +6 -2
  520. package/dist/services/telemetry/heartbeat.js.map +1 -1
  521. package/dist/services/workspaces/builder.d.ts +29 -0
  522. package/dist/services/workspaces/builder.js +186 -0
  523. package/dist/services/workspaces/builder.js.map +1 -0
  524. package/dist/types.d.ts +350 -48
  525. package/dist/utils/instance-lock.d.ts +2 -2
  526. package/dist/utils/instance-lock.js +2 -2
  527. package/dist/utils/path-safety.js +1 -1
  528. package/dist/utils/service-user.d.ts +13 -0
  529. package/dist/utils/service-user.js +129 -0
  530. package/dist/utils/service-user.js.map +1 -0
  531. package/install/jishu-install.sh +107 -27
  532. package/install/jishu-uninstall.sh +8 -0
  533. package/install/post-install.sh +162 -185
  534. package/install/post-uninstall.sh +6 -0
  535. package/node_modules/@fastify/static/.github/workflows/ci.yml +1 -1
  536. package/node_modules/@fastify/static/.github/workflows/lock-threads.yml +19 -0
  537. package/node_modules/@fastify/static/LICENSE +1 -3
  538. package/node_modules/@fastify/static/example/server-benchmark.js +39 -0
  539. package/node_modules/@fastify/static/index.js +169 -23
  540. package/node_modules/@fastify/static/lib/dirList.js +20 -6
  541. package/node_modules/@fastify/static/package.json +10 -8
  542. package/node_modules/@fastify/static/test/dir-list.test.js +82 -0
  543. package/node_modules/@fastify/static/test/static.test.js +326 -4
  544. package/node_modules/@fastify/static/types/index.d.ts +0 -4
  545. package/node_modules/@fastify/static/types/index.test-d.ts +1 -1
  546. package/node_modules/brace-expansion/dist/commonjs/index.js +24 -14
  547. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  548. package/node_modules/brace-expansion/dist/esm/index.js +24 -14
  549. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  550. package/node_modules/brace-expansion/package.json +2 -2
  551. package/node_modules/content-disposition/README.md +21 -22
  552. package/node_modules/content-disposition/index.js +122 -44
  553. package/node_modules/content-disposition/package.json +16 -20
  554. package/node_modules/fast-uri/index.js +1 -1
  555. package/node_modules/fast-uri/package.json +1 -1
  556. package/node_modules/fast-uri/test/security.test.js +28 -0
  557. package/node_modules/fastify/SECURITY.md +1 -1
  558. package/node_modules/fastify/SPONSORS.md +6 -4
  559. package/node_modules/fastify/docs/Guides/Database.md +0 -28
  560. package/node_modules/fastify/docs/Guides/Ecosystem.md +13 -2
  561. package/node_modules/fastify/docs/Guides/Serverless.md +2 -2
  562. package/node_modules/fastify/docs/Guides/Write-Plugin.md +1 -1
  563. package/node_modules/fastify/docs/Reference/Encapsulation.md +27 -26
  564. package/node_modules/fastify/docs/Reference/Errors.md +10 -4
  565. package/node_modules/fastify/docs/Reference/HTTP2.md +10 -10
  566. package/node_modules/fastify/docs/Reference/Hooks.md +4 -4
  567. package/node_modules/fastify/docs/Reference/Index.md +14 -16
  568. package/node_modules/fastify/docs/Reference/LTS.md +12 -13
  569. package/node_modules/fastify/docs/Reference/Lifecycle.md +9 -8
  570. package/node_modules/fastify/docs/Reference/Logging.md +44 -39
  571. package/node_modules/fastify/docs/Reference/Middleware.md +21 -25
  572. package/node_modules/fastify/docs/Reference/Principles.md +2 -2
  573. package/node_modules/fastify/docs/Reference/Reply.md +6 -1
  574. package/node_modules/fastify/docs/Reference/Request.md +27 -16
  575. package/node_modules/fastify/docs/Reference/Routes.md +5 -2
  576. package/node_modules/fastify/docs/Reference/Server.md +31 -3
  577. package/node_modules/fastify/docs/Reference/Type-Providers.md +29 -5
  578. package/node_modules/fastify/docs/Reference/Validation-and-Serialization.md +15 -2
  579. package/node_modules/fastify/docs/Reference/Warnings.md +7 -6
  580. package/node_modules/fastify/eslint.config.js +7 -2
  581. package/node_modules/fastify/fastify.d.ts +8 -3
  582. package/node_modules/fastify/fastify.js +43 -14
  583. package/node_modules/fastify/lib/content-type-parser.js +13 -1
  584. package/node_modules/fastify/lib/decorate.js +11 -3
  585. package/node_modules/fastify/lib/error-handler.js +4 -3
  586. package/node_modules/fastify/lib/error-serializer.js +59 -59
  587. package/node_modules/fastify/lib/errors.js +16 -1
  588. package/node_modules/fastify/lib/four-oh-four.js +14 -9
  589. package/node_modules/fastify/lib/handle-request.js +11 -5
  590. package/node_modules/fastify/lib/plugin-override.js +2 -1
  591. package/node_modules/fastify/lib/plugin-utils.js +5 -5
  592. package/node_modules/fastify/lib/reply.js +63 -8
  593. package/node_modules/fastify/lib/request.js +14 -4
  594. package/node_modules/fastify/lib/route.js +20 -6
  595. package/node_modules/fastify/lib/schema-controller.js +1 -1
  596. package/node_modules/fastify/lib/schemas.js +37 -30
  597. package/node_modules/fastify/lib/symbols.js +3 -1
  598. package/node_modules/fastify/lib/validation.js +1 -13
  599. package/node_modules/fastify/lib/warnings.js +3 -3
  600. package/node_modules/fastify/package.json +13 -15
  601. package/node_modules/fastify/scripts/validate-ecosystem-links.js +1 -0
  602. package/node_modules/fastify/test/bundler/esbuild/package.json +1 -1
  603. package/node_modules/fastify/test/close-pipelining.test.js +1 -2
  604. package/node_modules/fastify/test/custom-http-server.test.js +38 -0
  605. package/node_modules/fastify/test/decorator-instance-properties.test.js +63 -0
  606. package/node_modules/fastify/test/diagnostics-channel/async-error-handler.test.js +74 -0
  607. package/node_modules/fastify/test/hooks.test.js +23 -0
  608. package/node_modules/fastify/test/http-methods/get.test.js +1 -1
  609. package/node_modules/fastify/test/http2/plain.test.js +135 -0
  610. package/node_modules/fastify/test/http2/secure-with-fallback.test.js +1 -1
  611. package/node_modules/fastify/test/https/https.test.js +1 -2
  612. package/node_modules/fastify/test/internals/errors.test.js +31 -1
  613. package/node_modules/fastify/test/internals/plugin.test.js +3 -1
  614. package/node_modules/fastify/test/internals/request.test.js +27 -3
  615. package/node_modules/fastify/test/internals/schema-controller-perf.test.js +33 -0
  616. package/node_modules/fastify/test/logger/logging.test.js +18 -1
  617. package/node_modules/fastify/test/logger/options.test.js +38 -1
  618. package/node_modules/fastify/test/reply-error.test.js +1 -1
  619. package/node_modules/fastify/test/reply-trailers.test.js +70 -0
  620. package/node_modules/fastify/test/request-media-type.test.js +105 -0
  621. package/node_modules/fastify/test/route-prefix.test.js +34 -0
  622. package/node_modules/fastify/test/router-options.test.js +222 -11
  623. package/node_modules/fastify/test/schema-serialization.test.js +108 -0
  624. package/node_modules/fastify/test/schema-validation.test.js +24 -0
  625. package/node_modules/fastify/test/scripts/validate-ecosystem-links.test.js +40 -57
  626. package/node_modules/fastify/test/throw.test.js +14 -0
  627. package/node_modules/fastify/test/trust-proxy.test.js +21 -0
  628. package/node_modules/fastify/test/types/content-type-parser.tst.ts +70 -0
  629. package/node_modules/fastify/test/types/decorate-request-reply.tst.ts +18 -0
  630. package/node_modules/fastify/test/types/dummy-plugin.mts +9 -0
  631. package/node_modules/fastify/test/types/errors.tst.ts +91 -0
  632. package/node_modules/fastify/test/types/fastify.tst.ts +351 -0
  633. package/node_modules/fastify/test/types/hooks.tst.ts +578 -0
  634. package/node_modules/fastify/test/types/instance.tst.ts +597 -0
  635. package/node_modules/fastify/test/types/logger.tst.ts +276 -0
  636. package/node_modules/fastify/test/types/plugin.tst.ts +96 -0
  637. package/node_modules/fastify/test/types/register.tst.ts +245 -0
  638. package/node_modules/fastify/test/types/reply.tst.ts +297 -0
  639. package/node_modules/fastify/test/types/request.tst.ts +199 -0
  640. package/node_modules/fastify/test/types/route.tst.ts +576 -0
  641. package/node_modules/fastify/test/types/schema.tst.ts +135 -0
  642. package/node_modules/fastify/test/types/serverFactory.tst.ts +37 -0
  643. package/node_modules/fastify/test/types/tsconfig.json +9 -0
  644. package/node_modules/fastify/test/types/type-provider.tst.ts +1219 -0
  645. package/node_modules/fastify/test/types/using.tst.ts +14 -0
  646. package/node_modules/fastify/types/errors.d.ts +3 -0
  647. package/node_modules/fastify/types/request.d.ts +23 -2
  648. package/node_modules/glob/README.md +39 -130
  649. package/node_modules/glob/dist/commonjs/glob.d.ts +8 -0
  650. package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
  651. package/node_modules/glob/dist/commonjs/glob.js +2 -1
  652. package/node_modules/glob/dist/commonjs/glob.js.map +1 -1
  653. package/node_modules/glob/dist/commonjs/index.min.js +4 -0
  654. package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
  655. package/node_modules/glob/dist/commonjs/pattern.d.ts +3 -0
  656. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
  657. package/node_modules/glob/dist/commonjs/pattern.js +4 -0
  658. package/node_modules/glob/dist/commonjs/pattern.js.map +1 -1
  659. package/node_modules/glob/dist/esm/glob.d.ts +8 -0
  660. package/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
  661. package/node_modules/glob/dist/esm/glob.js +2 -1
  662. package/node_modules/glob/dist/esm/glob.js.map +1 -1
  663. package/node_modules/glob/dist/esm/index.min.js +4 -0
  664. package/node_modules/glob/dist/esm/index.min.js.map +7 -0
  665. package/node_modules/glob/dist/esm/pattern.d.ts +3 -0
  666. package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
  667. package/node_modules/glob/dist/esm/pattern.js +4 -0
  668. package/node_modules/glob/dist/esm/pattern.js.map +1 -1
  669. package/node_modules/glob/package.json +38 -37
  670. package/node_modules/jishushell-panel/README.md +4 -4
  671. package/node_modules/jishushell-panel/output/dist/server.js +17 -6
  672. package/node_modules/jishushell-panel/output/dist/server.js.map +1 -1
  673. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-Ce5d1xna.js +1 -0
  674. package/node_modules/jishushell-panel/output/public/assets/Dashboard-BXame3yg.js +1 -0
  675. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-BHZtPCJd.js +1 -0
  676. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-CB3GbNX9.js +4 -0
  677. package/node_modules/jishushell-panel/output/public/assets/InitPassword-Boab9F6g.js +1 -0
  678. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-DrIWCqo-.js +14 -0
  679. package/node_modules/jishushell-panel/output/public/assets/Login-CzpOkNau.js +1 -0
  680. package/node_modules/jishushell-panel/output/public/assets/NewInstance-CANXyCcL.js +1 -0
  681. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-BABo9VOC.js +1 -0
  682. package/node_modules/jishushell-panel/output/public/assets/Settings-CKp5XxFh.js +1 -0
  683. package/node_modules/jishushell-panel/output/public/assets/Setup-C7xVDPow.js +1 -0
  684. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-B765Xz4C.js +1 -0
  685. package/node_modules/jishushell-panel/output/public/assets/api-C70Gt678.js +4 -0
  686. package/node_modules/jishushell-panel/output/public/assets/index-Bs6DSbiR.js +23 -0
  687. package/node_modules/jishushell-panel/output/public/assets/index-DnnqTf7s.css +1 -0
  688. package/node_modules/jishushell-panel/output/public/assets/registry-sWIZsIEF.js +2 -0
  689. package/node_modules/jishushell-panel/output/public/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  690. package/node_modules/jishushell-panel/output/public/assets/setup-task-q21GnI0E.js +1 -0
  691. package/node_modules/jishushell-panel/output/public/assets/usePolling-D4IDOQd_.js +1 -0
  692. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-Df8aUdv8.js +1 -0
  693. package/node_modules/jishushell-panel/output/public/assets/vendor-react-0L0rjmYG.js +8 -0
  694. package/node_modules/jishushell-panel/output/public/index.html +6 -4
  695. package/node_modules/jishushell-panel/package.json +2 -2
  696. package/node_modules/semver/classes/range.js +17 -4
  697. package/node_modules/semver/package.json +2 -2
  698. package/package.json +12 -64
  699. package/scripts/check-app-path-boundaries.mjs +121 -0
  700. package/scripts/check-app-spec.mjs +123 -29
  701. package/scripts/check-architecture-boundaries.mjs +178 -0
  702. package/scripts/check-colima-launchd.mjs +10 -8
  703. package/scripts/check-integration-isolation.ts +541 -0
  704. package/scripts/check-new-file-tests.mjs +11 -3
  705. package/scripts/check-open-core-boundaries.mjs +60 -10
  706. package/scripts/check-test-layering.sh +1 -1
  707. package/scripts/fixtures/instances/hermes-sample/instance.json +3 -2
  708. package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +1 -1
  709. package/scripts/local-web-upgrade-test.README +4 -3
  710. package/scripts/local-web-upgrade-test.example.env +2 -2
  711. package/scripts/local-web-upgrade-test.sh +14 -1
  712. package/scripts/pack-gui-and-send-pi.sh +43 -0
  713. package/scripts/perf/instances.js +1 -1
  714. package/scripts/prune-open-core-dist.mjs +89 -2
  715. package/scripts/smoke/hermes-bootstrap.sh +5 -5
  716. package/templates/hermes-entrypoint.sh +19 -29
  717. package/apps/openwebui-container.yaml +0 -97
  718. package/apps/playwright-container.yaml +0 -126
  719. package/dependencies/jishushell-panel-0.6.5.tgz +0 -0
  720. package/dist/crypto-shim.d.ts +0 -1
  721. package/dist/crypto-shim.js +0 -2
  722. package/dist/crypto-shim.js.map +0 -1
  723. package/dist/routes/agent-apps.d.ts +0 -14
  724. package/dist/routes/agent-apps.js +0 -77
  725. package/dist/routes/agent-apps.js.map +0 -1
  726. package/dist/routes/internal.d.ts +0 -2
  727. package/dist/routes/internal.js +0 -55
  728. package/dist/routes/internal.js.map +0 -1
  729. package/dist/routes/openclaw-routes.d.ts +0 -22
  730. package/dist/routes/openclaw-routes.js +0 -1020
  731. package/dist/routes/openclaw-routes.js.map +0 -1
  732. package/dist/routes/runtime.d.ts +0 -15
  733. package/dist/routes/runtime.js +0 -76
  734. package/dist/routes/runtime.js.map +0 -1
  735. package/dist/services/agent-apps/catalog.d.ts +0 -33
  736. package/dist/services/agent-apps/catalog.js +0 -88
  737. package/dist/services/agent-apps/catalog.js.map +0 -1
  738. package/dist/services/agent-apps/index.d.ts +0 -36
  739. package/dist/services/agent-apps/index.js +0 -171
  740. package/dist/services/agent-apps/index.js.map +0 -1
  741. package/dist/services/agent-apps/installers/adapter-probes.d.ts +0 -49
  742. package/dist/services/agent-apps/installers/adapter-probes.js +0 -230
  743. package/dist/services/agent-apps/installers/adapter-probes.js.map +0 -1
  744. package/dist/services/agent-apps/installers/adapter.d.ts +0 -30
  745. package/dist/services/agent-apps/installers/adapter.js +0 -171
  746. package/dist/services/agent-apps/installers/adapter.js.map +0 -1
  747. package/dist/services/agent-apps/installers/registry-probe.js.map +0 -1
  748. package/dist/services/agent-apps/installers/shell-script.d.ts +0 -47
  749. package/dist/services/agent-apps/installers/shell-script.js +0 -488
  750. package/dist/services/agent-apps/installers/shell-script.js.map +0 -1
  751. package/dist/services/agent-apps/types.d.ts +0 -128
  752. package/dist/services/agent-apps/types.js +0 -17
  753. package/dist/services/agent-apps/types.js.map +0 -1
  754. package/dist/services/app/app-compiler.js +0 -185
  755. package/dist/services/app/app-compiler.js.map +0 -1
  756. package/dist/services/app/app-manager.d.ts +0 -184
  757. package/dist/services/app/app-manager.js +0 -2933
  758. package/dist/services/app/app-manager.js.map +0 -1
  759. package/dist/services/app/custom-manager.d.ts +0 -27
  760. package/dist/services/app/custom-manager.js +0 -382
  761. package/dist/services/app/custom-manager.js.map +0 -1
  762. package/dist/services/app/hermes-agent-manager.d.ts +0 -20
  763. package/dist/services/app/hermes-agent-manager.js +0 -299
  764. package/dist/services/app/hermes-agent-manager.js.map +0 -1
  765. package/dist/services/app/id-normalizer.d.ts +0 -27
  766. package/dist/services/app/id-normalizer.js +0 -77
  767. package/dist/services/app/id-normalizer.js.map +0 -1
  768. package/dist/services/app/ollama-manager.d.ts +0 -18
  769. package/dist/services/app/ollama-manager.js +0 -224
  770. package/dist/services/app/ollama-manager.js.map +0 -1
  771. package/dist/services/app/openclaw-manager.d.ts +0 -63
  772. package/dist/services/app/openclaw-manager.js +0 -1215
  773. package/dist/services/app/openclaw-manager.js.map +0 -1
  774. package/dist/services/app/paths.d.ts +0 -27
  775. package/dist/services/app/paths.js +0 -40
  776. package/dist/services/app/paths.js.map +0 -1
  777. package/dist/services/app/platform-transform.d.ts +0 -32
  778. package/dist/services/app/platform-transform.js +0 -65
  779. package/dist/services/app/platform-transform.js.map +0 -1
  780. package/dist/services/app/provide-resolver.d.ts +0 -29
  781. package/dist/services/app/provide-resolver.js +0 -135
  782. package/dist/services/app/provide-resolver.js.map +0 -1
  783. package/dist/services/app/registry.d.ts +0 -17
  784. package/dist/services/app/registry.js +0 -31
  785. package/dist/services/app/registry.js.map +0 -1
  786. package/dist/services/app/remote-spec.d.ts +0 -14
  787. package/dist/services/app/remote-spec.js +0 -58
  788. package/dist/services/app/remote-spec.js.map +0 -1
  789. package/dist/services/app/terminal-session-manager.js +0 -157
  790. package/dist/services/app/terminal-session-manager.js.map +0 -1
  791. package/dist/services/app/types.d.ts +0 -74
  792. package/dist/services/app/types.js +0 -16
  793. package/dist/services/app/types.js.map +0 -1
  794. package/dist/services/app-config-admin.d.ts +0 -17
  795. package/dist/services/app-config-admin.js +0 -177
  796. package/dist/services/app-config-admin.js.map +0 -1
  797. package/dist/services/app-create-from-installed.d.ts +0 -23
  798. package/dist/services/app-create-from-installed.js +0 -75
  799. package/dist/services/app-create-from-installed.js.map +0 -1
  800. package/dist/services/app-passwords.js +0 -173
  801. package/dist/services/app-passwords.js.map +0 -1
  802. package/dist/services/backup-admin.d.ts +0 -101
  803. package/dist/services/backup-admin.js +0 -259
  804. package/dist/services/backup-admin.js.map +0 -1
  805. package/dist/services/backup-manager.d.ts +0 -264
  806. package/dist/services/backup-manager.js +0 -2263
  807. package/dist/services/backup-manager.js.map +0 -1
  808. package/dist/services/backup-verify.js +0 -240
  809. package/dist/services/backup-verify.js.map +0 -1
  810. package/dist/services/capability-endpoint-validator.d.ts +0 -41
  811. package/dist/services/capability-endpoint-validator.js +0 -114
  812. package/dist/services/capability-endpoint-validator.js.map +0 -1
  813. package/dist/services/capability-health.d.ts +0 -16
  814. package/dist/services/capability-health.js +0 -121
  815. package/dist/services/capability-health.js.map +0 -1
  816. package/dist/services/capability-registry.d.ts +0 -29
  817. package/dist/services/capability-registry.js +0 -176
  818. package/dist/services/capability-registry.js.map +0 -1
  819. package/dist/services/capability-sync.d.ts +0 -4
  820. package/dist/services/capability-sync.js +0 -220
  821. package/dist/services/capability-sync.js.map +0 -1
  822. package/dist/services/connection-admin.d.ts +0 -74
  823. package/dist/services/connection-admin.js +0 -287
  824. package/dist/services/connection-admin.js.map +0 -1
  825. package/dist/services/connection-apply.d.ts +0 -91
  826. package/dist/services/connection-apply.js +0 -471
  827. package/dist/services/connection-apply.js.map +0 -1
  828. package/dist/services/connection-resolver.d.ts +0 -65
  829. package/dist/services/connection-resolver.js +0 -281
  830. package/dist/services/connection-resolver.js.map +0 -1
  831. package/dist/services/connection-transactor.d.ts +0 -39
  832. package/dist/services/connection-transactor.js +0 -354
  833. package/dist/services/connection-transactor.js.map +0 -1
  834. package/dist/services/core-manager.d.ts +0 -50
  835. package/dist/services/core-manager.js +0 -411
  836. package/dist/services/core-manager.js.map +0 -1
  837. package/dist/services/external-mounts.js +0 -187
  838. package/dist/services/external-mounts.js.map +0 -1
  839. package/dist/services/files-manager.d.ts +0 -252
  840. package/dist/services/files-manager.js +0 -1156
  841. package/dist/services/files-manager.js.map +0 -1
  842. package/dist/services/files-mounts.d.ts +0 -42
  843. package/dist/services/files-mounts.js +0 -207
  844. package/dist/services/files-mounts.js.map +0 -1
  845. package/dist/services/instance-admin.d.ts +0 -26
  846. package/dist/services/instance-admin.js +0 -218
  847. package/dist/services/instance-admin.js.map +0 -1
  848. package/dist/services/instance-manager.d.ts +0 -192
  849. package/dist/services/instance-manager.js +0 -1289
  850. package/dist/services/instance-manager.js.map +0 -1
  851. package/dist/services/macos-launchd.js +0 -312
  852. package/dist/services/macos-launchd.js.map +0 -1
  853. package/dist/services/nomad-manager.d.ts +0 -307
  854. package/dist/services/nomad-manager.js +0 -3958
  855. package/dist/services/nomad-manager.js.map +0 -1
  856. package/dist/services/organize/applier.js +0 -218
  857. package/dist/services/organize/applier.js.map +0 -1
  858. package/dist/services/organize/rules.js +0 -286
  859. package/dist/services/organize/rules.js.map +0 -1
  860. package/dist/services/organize/scanner.js +0 -366
  861. package/dist/services/organize/scanner.js.map +0 -1
  862. package/dist/services/organize/store.js +0 -82
  863. package/dist/services/organize/store.js.map +0 -1
  864. package/dist/services/plugin-installer.js +0 -128
  865. package/dist/services/plugin-installer.js.map +0 -1
  866. package/dist/services/process-manager.d.ts +0 -25
  867. package/dist/services/process-manager.js +0 -568
  868. package/dist/services/process-manager.js.map +0 -1
  869. package/dist/services/runtime/adapters/custom.d.ts +0 -20
  870. package/dist/services/runtime/adapters/custom.js +0 -188
  871. package/dist/services/runtime/adapters/custom.js.map +0 -1
  872. package/dist/services/runtime/adapters/hermes.d.ts +0 -204
  873. package/dist/services/runtime/adapters/hermes.js +0 -1684
  874. package/dist/services/runtime/adapters/hermes.js.map +0 -1
  875. package/dist/services/runtime/adapters/openclaw-mcporter.d.ts +0 -45
  876. package/dist/services/runtime/adapters/openclaw-mcporter.js +0 -108
  877. package/dist/services/runtime/adapters/openclaw-mcporter.js.map +0 -1
  878. package/dist/services/runtime/adapters/openclaw.d.ts +0 -426
  879. package/dist/services/runtime/adapters/openclaw.js +0 -3975
  880. package/dist/services/runtime/adapters/openclaw.js.map +0 -1
  881. package/dist/services/runtime/index.d.ts +0 -34
  882. package/dist/services/runtime/index.js +0 -51
  883. package/dist/services/runtime/index.js.map +0 -1
  884. package/dist/services/runtime/mcp-shims/anythingllm-shim.d.ts +0 -46
  885. package/dist/services/runtime/mcp-shims/anythingllm-shim.js +0 -281
  886. package/dist/services/runtime/mcp-shims/anythingllm-shim.js.map +0 -1
  887. package/dist/services/runtime/mcp-shims/drive-shim.js +0 -490
  888. package/dist/services/runtime/mcp-shims/drive-shim.js.map +0 -1
  889. package/dist/services/runtime/mcp-shims/jishukb-shim.d.ts +0 -48
  890. package/dist/services/runtime/mcp-shims/jishukb-shim.js +0 -723
  891. package/dist/services/runtime/mcp-shims/jishukb-shim.js.map +0 -1
  892. package/dist/services/runtime/mcp-shims/mcporter-lite.js +0 -276
  893. package/dist/services/runtime/mcp-shims/mcporter-lite.js.map +0 -1
  894. package/dist/services/runtime/migrations.d.ts +0 -23
  895. package/dist/services/runtime/migrations.js +0 -125
  896. package/dist/services/runtime/migrations.js.map +0 -1
  897. package/dist/services/runtime/registry.d.ts +0 -13
  898. package/dist/services/runtime/registry.js +0 -32
  899. package/dist/services/runtime/registry.js.map +0 -1
  900. package/dist/services/runtime-identity.d.ts +0 -13
  901. package/dist/services/runtime-identity.js +0 -166
  902. package/dist/services/runtime-identity.js.map +0 -1
  903. package/dist/services/runtime-repair.d.ts +0 -52
  904. package/dist/services/runtime-repair.js +0 -352
  905. package/dist/services/runtime-repair.js.map +0 -1
  906. package/dist/services/setup-manager.d.ts +0 -158
  907. package/dist/services/setup-manager.js +0 -2740
  908. package/dist/services/setup-manager.js.map +0 -1
  909. package/dist/services/suggestions.d.ts +0 -27
  910. package/dist/services/suggestions.js +0 -133
  911. package/dist/services/suggestions.js.map +0 -1
  912. package/dist/services/system-monitor.js +0 -79
  913. package/dist/services/system-monitor.js.map +0 -1
  914. package/dist/services/system-ollama-provider.d.ts +0 -14
  915. package/dist/services/system-ollama-provider.js +0 -125
  916. package/dist/services/system-ollama-provider.js.map +0 -1
  917. package/dist/services/system-reconciler.d.ts +0 -72
  918. package/dist/services/system-reconciler.js +0 -600
  919. package/dist/services/system-reconciler.js.map +0 -1
  920. package/dist/services/task-registry.d.ts +0 -44
  921. package/dist/services/task-registry.js +0 -76
  922. package/dist/services/task-registry.js.map +0 -1
  923. package/dist/services/types-shim.d.ts +0 -16
  924. package/dist/services/types-shim.js +0 -2
  925. package/dist/services/types-shim.js.map +0 -1
  926. package/dist/services/update-manager.d.ts +0 -47
  927. package/dist/services/update-manager.js +0 -351
  928. package/dist/services/update-manager.js.map +0 -1
  929. package/dist/services/webdav/server.d.ts +0 -24
  930. package/dist/services/webdav/server.js +0 -420
  931. package/dist/services/webdav/server.js.map +0 -1
  932. package/dist/services/webdav/xml-builder.js.map +0 -1
  933. package/dist/services/workspace-builder.d.ts +0 -29
  934. package/dist/services/workspace-builder.js +0 -188
  935. package/dist/services/workspace-builder.js.map +0 -1
  936. package/node_modules/@fastify/static/.github/stale.yml +0 -21
  937. package/node_modules/@isaacs/cliui/LICENSE.md +0 -63
  938. package/node_modules/@isaacs/cliui/README.md +0 -151
  939. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts +0 -4
  940. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.d.ts.map +0 -1
  941. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js +0 -16
  942. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-regex/index.js.map +0 -1
  943. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts +0 -34
  944. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.d.ts.map +0 -1
  945. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js +0 -170
  946. package/node_modules/@isaacs/cliui/dist/commonjs/ansi-styles/index.js.map +0 -1
  947. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts +0 -6
  948. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.d.ts.map +0 -1
  949. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js +0 -307
  950. package/node_modules/@isaacs/cliui/dist/commonjs/eastasianwidth/index.js.map +0 -1
  951. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts +0 -2
  952. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.d.ts.map +0 -1
  953. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js +0 -7
  954. package/node_modules/@isaacs/cliui/dist/commonjs/emoji-regex/index.js.map +0 -1
  955. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts +0 -41
  956. package/node_modules/@isaacs/cliui/dist/commonjs/index.d.ts.map +0 -1
  957. package/node_modules/@isaacs/cliui/dist/commonjs/index.js +0 -322
  958. package/node_modules/@isaacs/cliui/dist/commonjs/index.js.map +0 -1
  959. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js +0 -12
  960. package/node_modules/@isaacs/cliui/dist/commonjs/index.min.js.map +0 -7
  961. package/node_modules/@isaacs/cliui/dist/commonjs/package.json +0 -3
  962. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts +0 -5
  963. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.d.ts.map +0 -1
  964. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js +0 -49
  965. package/node_modules/@isaacs/cliui/dist/commonjs/string-width/index.js.map +0 -1
  966. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts +0 -2
  967. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.d.ts.map +0 -1
  968. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js +0 -8
  969. package/node_modules/@isaacs/cliui/dist/commonjs/strip-ansi/index.js.map +0 -1
  970. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts +0 -7
  971. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.d.ts.map +0 -1
  972. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js +0 -176
  973. package/node_modules/@isaacs/cliui/dist/commonjs/wrap-ansi/index.js.map +0 -1
  974. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts +0 -4
  975. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.d.ts.map +0 -1
  976. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js +0 -12
  977. package/node_modules/@isaacs/cliui/dist/esm/ansi-regex/index.js.map +0 -1
  978. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts +0 -34
  979. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.d.ts.map +0 -1
  980. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js +0 -167
  981. package/node_modules/@isaacs/cliui/dist/esm/ansi-styles/index.js.map +0 -1
  982. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts +0 -6
  983. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.d.ts.map +0 -1
  984. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js +0 -299
  985. package/node_modules/@isaacs/cliui/dist/esm/eastasianwidth/index.js.map +0 -1
  986. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts +0 -2
  987. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.d.ts.map +0 -1
  988. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js +0 -3
  989. package/node_modules/@isaacs/cliui/dist/esm/emoji-regex/index.js.map +0 -1
  990. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts +0 -41
  991. package/node_modules/@isaacs/cliui/dist/esm/index.d.ts.map +0 -1
  992. package/node_modules/@isaacs/cliui/dist/esm/index.js +0 -317
  993. package/node_modules/@isaacs/cliui/dist/esm/index.js.map +0 -1
  994. package/node_modules/@isaacs/cliui/dist/esm/index.min.js +0 -12
  995. package/node_modules/@isaacs/cliui/dist/esm/index.min.js.map +0 -7
  996. package/node_modules/@isaacs/cliui/dist/esm/package.json +0 -3
  997. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts +0 -5
  998. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.d.ts.map +0 -1
  999. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js +0 -46
  1000. package/node_modules/@isaacs/cliui/dist/esm/string-width/index.js.map +0 -1
  1001. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts +0 -2
  1002. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.d.ts.map +0 -1
  1003. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js +0 -4
  1004. package/node_modules/@isaacs/cliui/dist/esm/strip-ansi/index.js.map +0 -1
  1005. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts +0 -7
  1006. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.d.ts.map +0 -1
  1007. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js +0 -172
  1008. package/node_modules/@isaacs/cliui/dist/esm/wrap-ansi/index.js.map +0 -1
  1009. package/node_modules/@isaacs/cliui/package.json +0 -163
  1010. package/node_modules/content-disposition/HISTORY.md +0 -60
  1011. package/node_modules/cross-spawn/LICENSE +0 -21
  1012. package/node_modules/cross-spawn/README.md +0 -89
  1013. package/node_modules/cross-spawn/index.js +0 -39
  1014. package/node_modules/cross-spawn/lib/enoent.js +0 -59
  1015. package/node_modules/cross-spawn/lib/parse.js +0 -91
  1016. package/node_modules/cross-spawn/lib/util/escape.js +0 -47
  1017. package/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
  1018. package/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
  1019. package/node_modules/cross-spawn/package.json +0 -73
  1020. package/node_modules/fastify/test/types/content-type-parser.test-d.ts +0 -72
  1021. package/node_modules/fastify/test/types/decorate-request-reply.test-d.ts +0 -18
  1022. package/node_modules/fastify/test/types/dummy-plugin.ts +0 -9
  1023. package/node_modules/fastify/test/types/errors.test-d.ts +0 -90
  1024. package/node_modules/fastify/test/types/fastify.test-d.ts +0 -352
  1025. package/node_modules/fastify/test/types/hooks.test-d.ts +0 -550
  1026. package/node_modules/fastify/test/types/import.ts +0 -2
  1027. package/node_modules/fastify/test/types/instance.test-d.ts +0 -588
  1028. package/node_modules/fastify/test/types/logger.test-d.ts +0 -277
  1029. package/node_modules/fastify/test/types/plugin.test-d.ts +0 -97
  1030. package/node_modules/fastify/test/types/register.test-d.ts +0 -237
  1031. package/node_modules/fastify/test/types/reply.test-d.ts +0 -254
  1032. package/node_modules/fastify/test/types/request.test-d.ts +0 -188
  1033. package/node_modules/fastify/test/types/route.test-d.ts +0 -553
  1034. package/node_modules/fastify/test/types/schema.test-d.ts +0 -135
  1035. package/node_modules/fastify/test/types/serverFactory.test-d.ts +0 -37
  1036. package/node_modules/fastify/test/types/type-provider.test-d.ts +0 -1213
  1037. package/node_modules/fastify/test/types/using.test-d.ts +0 -17
  1038. package/node_modules/foreground-child/LICENSE +0 -15
  1039. package/node_modules/foreground-child/README.md +0 -128
  1040. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts +0 -2
  1041. package/node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map +0 -1
  1042. package/node_modules/foreground-child/dist/commonjs/all-signals.js +0 -58
  1043. package/node_modules/foreground-child/dist/commonjs/all-signals.js.map +0 -1
  1044. package/node_modules/foreground-child/dist/commonjs/index.d.ts +0 -58
  1045. package/node_modules/foreground-child/dist/commonjs/index.d.ts.map +0 -1
  1046. package/node_modules/foreground-child/dist/commonjs/index.js +0 -123
  1047. package/node_modules/foreground-child/dist/commonjs/index.js.map +0 -1
  1048. package/node_modules/foreground-child/dist/commonjs/package.json +0 -3
  1049. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts +0 -6
  1050. package/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map +0 -1
  1051. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js +0 -38
  1052. package/node_modules/foreground-child/dist/commonjs/proxy-signals.js.map +0 -1
  1053. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts +0 -10
  1054. package/node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map +0 -1
  1055. package/node_modules/foreground-child/dist/commonjs/watchdog.js +0 -50
  1056. package/node_modules/foreground-child/dist/commonjs/watchdog.js.map +0 -1
  1057. package/node_modules/foreground-child/dist/esm/all-signals.d.ts +0 -2
  1058. package/node_modules/foreground-child/dist/esm/all-signals.d.ts.map +0 -1
  1059. package/node_modules/foreground-child/dist/esm/all-signals.js +0 -52
  1060. package/node_modules/foreground-child/dist/esm/all-signals.js.map +0 -1
  1061. package/node_modules/foreground-child/dist/esm/index.d.ts +0 -58
  1062. package/node_modules/foreground-child/dist/esm/index.d.ts.map +0 -1
  1063. package/node_modules/foreground-child/dist/esm/index.js +0 -115
  1064. package/node_modules/foreground-child/dist/esm/index.js.map +0 -1
  1065. package/node_modules/foreground-child/dist/esm/package.json +0 -3
  1066. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts +0 -6
  1067. package/node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map +0 -1
  1068. package/node_modules/foreground-child/dist/esm/proxy-signals.js +0 -34
  1069. package/node_modules/foreground-child/dist/esm/proxy-signals.js.map +0 -1
  1070. package/node_modules/foreground-child/dist/esm/watchdog.d.ts +0 -10
  1071. package/node_modules/foreground-child/dist/esm/watchdog.d.ts.map +0 -1
  1072. package/node_modules/foreground-child/dist/esm/watchdog.js +0 -46
  1073. package/node_modules/foreground-child/dist/esm/watchdog.js.map +0 -1
  1074. package/node_modules/foreground-child/package.json +0 -106
  1075. package/node_modules/glob/dist/esm/bin.d.mts +0 -3
  1076. package/node_modules/glob/dist/esm/bin.d.mts.map +0 -1
  1077. package/node_modules/glob/dist/esm/bin.mjs +0 -346
  1078. package/node_modules/glob/dist/esm/bin.mjs.map +0 -1
  1079. package/node_modules/isexe/.npmignore +0 -2
  1080. package/node_modules/isexe/LICENSE +0 -15
  1081. package/node_modules/isexe/README.md +0 -51
  1082. package/node_modules/isexe/index.js +0 -57
  1083. package/node_modules/isexe/mode.js +0 -41
  1084. package/node_modules/isexe/package.json +0 -31
  1085. package/node_modules/isexe/test/basic.js +0 -221
  1086. package/node_modules/isexe/windows.js +0 -42
  1087. package/node_modules/jackspeak/LICENSE.md +0 -55
  1088. package/node_modules/jackspeak/README.md +0 -394
  1089. package/node_modules/jackspeak/dist/commonjs/index.d.ts +0 -323
  1090. package/node_modules/jackspeak/dist/commonjs/index.d.ts.map +0 -1
  1091. package/node_modules/jackspeak/dist/commonjs/index.js +0 -944
  1092. package/node_modules/jackspeak/dist/commonjs/index.js.map +0 -1
  1093. package/node_modules/jackspeak/dist/commonjs/index.min.js +0 -33
  1094. package/node_modules/jackspeak/dist/commonjs/index.min.js.map +0 -7
  1095. package/node_modules/jackspeak/dist/commonjs/package.json +0 -3
  1096. package/node_modules/jackspeak/dist/esm/index.d.ts +0 -323
  1097. package/node_modules/jackspeak/dist/esm/index.d.ts.map +0 -1
  1098. package/node_modules/jackspeak/dist/esm/index.js +0 -936
  1099. package/node_modules/jackspeak/dist/esm/index.js.map +0 -1
  1100. package/node_modules/jackspeak/dist/esm/index.min.js +0 -33
  1101. package/node_modules/jackspeak/dist/esm/index.min.js.map +0 -7
  1102. package/node_modules/jackspeak/dist/esm/package.json +0 -3
  1103. package/node_modules/jackspeak/package.json +0 -115
  1104. package/node_modules/jishushell-panel/output/public/assets/ApiKeyField-D1i7zWXR.js +0 -1
  1105. package/node_modules/jishushell-panel/output/public/assets/Dashboard-sWIvL43F.js +0 -1
  1106. package/node_modules/jishushell-panel/output/public/assets/HermesChatPanel-DQ8RyvQY.js +0 -1
  1107. package/node_modules/jishushell-panel/output/public/assets/HermesConfigForm-tIbPP1sB.js +0 -4
  1108. package/node_modules/jishushell-panel/output/public/assets/InitPassword-C3Slq3Dd.js +0 -1
  1109. package/node_modules/jishushell-panel/output/public/assets/InstanceDetail-7JqY9tq4.js +0 -92
  1110. package/node_modules/jishushell-panel/output/public/assets/Login-BXLDJlQN.js +0 -1
  1111. package/node_modules/jishushell-panel/output/public/assets/NewInstance-dLc5Xrpx.js +0 -1
  1112. package/node_modules/jishushell-panel/output/public/assets/ProviderRecommendations-DIAXxesl.js +0 -1
  1113. package/node_modules/jishushell-panel/output/public/assets/Settings-Bd5utbBh.js +0 -1
  1114. package/node_modules/jishushell-panel/output/public/assets/Setup-Yn9_20FL.js +0 -1
  1115. package/node_modules/jishushell-panel/output/public/assets/WeixinLoginPanel-C21doQTJ.js +0 -9
  1116. package/node_modules/jishushell-panel/output/public/assets/index-CCkaIEjn.js +0 -20
  1117. package/node_modules/jishushell-panel/output/public/assets/index-D7qxy-Vh.css +0 -1
  1118. package/node_modules/jishushell-panel/output/public/assets/registry-B2ZQZXWL.js +0 -2
  1119. package/node_modules/jishushell-panel/output/public/assets/usePolling-BFZm4do_.js +0 -1
  1120. package/node_modules/jishushell-panel/output/public/assets/vendor-i18n-DqPtOicc.js +0 -9
  1121. package/node_modules/jishushell-panel/output/public/assets/vendor-react-DW5juQin.js +0 -59
  1122. package/node_modules/package-json-from-dist/LICENSE.md +0 -63
  1123. package/node_modules/package-json-from-dist/README.md +0 -110
  1124. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +0 -89
  1125. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +0 -1
  1126. package/node_modules/package-json-from-dist/dist/commonjs/index.js +0 -134
  1127. package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +0 -1
  1128. package/node_modules/package-json-from-dist/dist/commonjs/package.json +0 -3
  1129. package/node_modules/package-json-from-dist/dist/esm/index.d.ts +0 -89
  1130. package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +0 -1
  1131. package/node_modules/package-json-from-dist/dist/esm/index.js +0 -129
  1132. package/node_modules/package-json-from-dist/dist/esm/index.js.map +0 -1
  1133. package/node_modules/package-json-from-dist/dist/esm/package.json +0 -3
  1134. package/node_modules/package-json-from-dist/package.json +0 -68
  1135. package/node_modules/path-key/index.d.ts +0 -40
  1136. package/node_modules/path-key/index.js +0 -16
  1137. package/node_modules/path-key/license +0 -9
  1138. package/node_modules/path-key/package.json +0 -39
  1139. package/node_modules/path-key/readme.md +0 -61
  1140. package/node_modules/safe-buffer/LICENSE +0 -21
  1141. package/node_modules/safe-buffer/README.md +0 -584
  1142. package/node_modules/safe-buffer/index.d.ts +0 -187
  1143. package/node_modules/safe-buffer/index.js +0 -65
  1144. package/node_modules/safe-buffer/package.json +0 -51
  1145. package/node_modules/shebang-command/index.js +0 -19
  1146. package/node_modules/shebang-command/license +0 -9
  1147. package/node_modules/shebang-command/package.json +0 -34
  1148. package/node_modules/shebang-command/readme.md +0 -34
  1149. package/node_modules/shebang-regex/index.d.ts +0 -22
  1150. package/node_modules/shebang-regex/index.js +0 -2
  1151. package/node_modules/shebang-regex/license +0 -9
  1152. package/node_modules/shebang-regex/package.json +0 -35
  1153. package/node_modules/shebang-regex/readme.md +0 -33
  1154. package/node_modules/signal-exit/LICENSE.txt +0 -16
  1155. package/node_modules/signal-exit/README.md +0 -74
  1156. package/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
  1157. package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
  1158. package/node_modules/signal-exit/dist/cjs/browser.js +0 -10
  1159. package/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
  1160. package/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
  1161. package/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
  1162. package/node_modules/signal-exit/dist/cjs/index.js +0 -279
  1163. package/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
  1164. package/node_modules/signal-exit/dist/cjs/package.json +0 -3
  1165. package/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
  1166. package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
  1167. package/node_modules/signal-exit/dist/cjs/signals.js +0 -42
  1168. package/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
  1169. package/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
  1170. package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
  1171. package/node_modules/signal-exit/dist/mjs/browser.js +0 -4
  1172. package/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
  1173. package/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
  1174. package/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
  1175. package/node_modules/signal-exit/dist/mjs/index.js +0 -275
  1176. package/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
  1177. package/node_modules/signal-exit/dist/mjs/package.json +0 -3
  1178. package/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
  1179. package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
  1180. package/node_modules/signal-exit/dist/mjs/signals.js +0 -39
  1181. package/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
  1182. package/node_modules/signal-exit/package.json +0 -106
  1183. package/node_modules/which/CHANGELOG.md +0 -166
  1184. package/node_modules/which/LICENSE +0 -15
  1185. package/node_modules/which/README.md +0 -54
  1186. package/node_modules/which/bin/node-which +0 -52
  1187. package/node_modules/which/package.json +0 -43
  1188. package/node_modules/which/which.js +0 -125
  1189. package/scripts/check-adapter-isolation.ts +0 -293
  1190. /package/dist/services/{app → app-common}/app-compiler.d.ts +0 -0
  1191. /package/dist/services/{app → app-common}/terminal-session-manager.d.ts +0 -0
  1192. /package/dist/services/{backup-verify.d.ts → backup/backup-verify.d.ts} +0 -0
  1193. /package/dist/services/{external-mounts.d.ts → files/external-mounts.d.ts} +0 -0
  1194. /package/dist/services/{organize → files/organize}/applier.d.ts +0 -0
  1195. /package/dist/services/{organize → files/organize}/rules.d.ts +0 -0
  1196. /package/dist/services/{organize → files/organize}/scanner.d.ts +0 -0
  1197. /package/dist/services/{organize → files/organize}/store.d.ts +0 -0
  1198. /package/dist/services/{webdav → files/webdav}/xml-builder.d.ts +0 -0
  1199. /package/dist/services/{webdav → files/webdav}/xml-builder.js +0 -0
  1200. /package/dist/services/{app-passwords.d.ts → instances/passwords.d.ts} +0 -0
  1201. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.d.ts +0 -0
  1202. /package/dist/services/{agent-apps → integrations/installable}/installers/registry-probe.js +0 -0
  1203. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/drive-shim.d.ts +0 -0
  1204. /package/dist/services/{runtime/mcp-shims → integrations/openclaw}/mcporter-lite.d.ts +0 -0
  1205. /package/dist/services/{plugin-installer.d.ts → setup/plugin-installer.d.ts} +0 -0
  1206. /package/dist/services/{macos-launchd.d.ts → system/macos-launchd.d.ts} +0 -0
  1207. /package/dist/services/{system-monitor.d.ts → system/system-monitor.d.ts} +0 -0
@@ -1,1156 +0,0 @@
1
- /**
2
- * FilesManager — POSIX file CRUD for `~/.jishushell/files/` (M1 W1 PR-3).
3
- *
4
- * Source-of-truth: real filesystem (POSIX). sqlite indexing comes in W5
5
- * (NAS module) but does not change the truth model.
6
- *
7
- * Streaming-first:
8
- * - readStream() → fs.createReadStream
9
- * - writeStream() → atomicWriteStream (tmp + sha256 transform + fsync + rename)
10
- *
11
- * ETag policy (W1):
12
- * - Weak ETag W/"<size>-<mtime_ms>" — no sha256 scan on GET
13
- * - If-Match uses weak comparison
14
- * - Strong ETag (sha256 from index) added in W5
15
- *
16
- * Soft delete:
17
- * - DELETE moves to ~/.jishushell/files/.trash/{YYYY-MM-DD}/{name}.{epoch}
18
- * - 30-day retention cleaner is W7+; W1 just creates the directory
19
- */
20
- import * as fs from "node:fs";
21
- import * as path from "node:path";
22
- import { createHash } from "node:crypto";
23
- import { DatabaseSync } from "node:sqlite";
24
- import { resolveSafe, isHidden, PathSafetyError, } from "../utils/path-safety.js";
25
- import { atomicWriteStream } from "../utils/safe-write.js";
26
- import { withPathLock } from "../utils/path-locks.js";
27
- import { safeWriteJson, safeReadJson } from "../utils/safe-json.js";
28
- import { FILES_ROOT, FILES_TRASH_DIR, FILES_AUDIT_LOG, } from "../config.js";
29
- import { resolveAcrossMounts, } from "./external-mounts.js";
30
- import { homedir } from "node:os";
31
- export class FilesError extends Error {
32
- code;
33
- httpStatus;
34
- constructor(message, code, httpStatus) {
35
- super(message);
36
- this.code = code;
37
- this.httpStatus = httpStatus;
38
- this.name = "FilesError";
39
- }
40
- }
41
- // ── Defaults ─────────────────────────────────────────
42
- const DEFAULT_BLOCKED_EXTENSIONS = new Set([
43
- ".exe",
44
- ".bat",
45
- ".cmd",
46
- ".ps1",
47
- ".sh",
48
- ".bash",
49
- ".zsh",
50
- ".com",
51
- ".scr",
52
- ".msi",
53
- ".app",
54
- ]);
55
- const DEFAULT_QUOTA_MB = 10240; // 10 GB
56
- const DEFAULT_MAX_UPLOAD_MB = 50;
57
- const DEFAULT_TEXT_PREVIEW_KB = 256;
58
- // Extensions treated as indexable text even when MIME is not text/*
59
- const INDEXABLE_EXTS = new Set([
60
- ".md", ".txt", ".log", ".csv", ".tsv", ".json", ".yaml", ".yml",
61
- ".toml", ".ini", ".cfg", ".js", ".ts", ".tsx", ".jsx", ".mjs", ".cjs",
62
- ".py", ".rb", ".go", ".rs", ".java", ".c", ".cpp", ".h", ".hpp",
63
- ".sh", ".html", ".css", ".xml", ".sql",
64
- ]);
65
- // Minimal MIME map covering the formats Files Tab actually previews +
66
- // common archive/binary types. Avoid pulling a 100KB dep for W1.
67
- const MIME_MAP = {
68
- ".txt": "text/plain; charset=utf-8",
69
- ".md": "text/markdown; charset=utf-8",
70
- ".json": "application/json",
71
- ".yaml": "application/yaml",
72
- ".yml": "application/yaml",
73
- ".csv": "text/csv; charset=utf-8",
74
- ".log": "text/plain; charset=utf-8",
75
- ".html": "text/html; charset=utf-8",
76
- ".css": "text/css; charset=utf-8",
77
- ".js": "application/javascript",
78
- ".ts": "application/typescript",
79
- ".xml": "application/xml",
80
- ".jpg": "image/jpeg",
81
- ".jpeg": "image/jpeg",
82
- ".png": "image/png",
83
- ".webp": "image/webp",
84
- ".gif": "image/gif",
85
- ".svg": "image/svg+xml",
86
- ".bmp": "image/bmp",
87
- ".pdf": "application/pdf",
88
- ".mp3": "audio/mpeg",
89
- ".wav": "audio/wav",
90
- ".ogg": "audio/ogg",
91
- ".mp4": "video/mp4",
92
- ".webm": "video/webm",
93
- ".mov": "video/quicktime",
94
- ".zip": "application/zip",
95
- ".tar": "application/x-tar",
96
- ".gz": "application/gzip",
97
- };
98
- function lookupMime(p) {
99
- const ext = path.extname(p).toLowerCase();
100
- return MIME_MAP[ext] ?? "application/octet-stream";
101
- }
102
- // ── AI-FS W4: Knowledge-dir README ───────────────────
103
- const KNOWLEDGE_README_TEMPLATE = `# \`.knowledge/\` — Core-managed AI metadata
104
-
105
- This directory is **maintained by JishuShell core**, not by you.
106
-
107
- It stores two kinds of artifacts that let the AI agent answer questions about
108
- your files without re-reading them from scratch each time:
109
-
110
- - **\`index.sqlite\`** — FTS5 full-text search index over text / markdown / code /
111
- json / yaml content under \`~/.jishushell/files/\`. Rebuilt on demand when the
112
- agent calls \`drive_reindex\`. Never auto-rebuilt on file changes.
113
- - **\`<sha256>.json\`** — Per-file metadata sidecars. Each file is keyed by its
114
- content hash, not its path, so renaming a file does not lose its tags or
115
- notes. Schema: \`{ schema_version, sha256, size, mtime, indexed_at, tags?,
116
- summary?, links?, agent_notes?, ... }\`.
117
-
118
- ## Why it's here, not somewhere hidden
119
-
120
- You own this filesystem. We surface \`.knowledge/\` instead of stashing state
121
- inside a database the panel keeps to itself, so backups, snapshots, and
122
- disaster recovery work without coordinating with the panel. If you copy
123
- \`~/.jishushell/files/\` to another machine, the AI knowledge moves with it.
124
-
125
- ## Safe to do
126
-
127
- - **Browse it** — to satisfy curiosity.
128
- - **Back it up** — it's part of your data, treat it like the rest of the tree.
129
- - **Delete the whole directory** — the panel will recreate it next time the
130
- agent uses \`drive_*\` tools; you just lose the cached index and any
131
- agent-authored notes/tags.
132
-
133
- ## Don't do
134
-
135
- - **Don't hand-edit** \`<sha256>.json\` files. Use the agent (or a future panel
136
- UI) to write metadata. Hand-edits work but are not validated — easy to
137
- corrupt schemas.
138
- - **Don't rename or move this directory** — the panel hard-codes the path.
139
-
140
- ## Want to ignore it?
141
-
142
- Filebrowser shows hidden dotfiles by default. If \`.knowledge/\` clutter bothers
143
- you, toggle "Hide dotfiles" in your Filebrowser user settings; the panel doesn't
144
- care whether you see it or not.
145
-
146
- — jishushell @ AI-FS v1
147
- `;
148
- // ── Class ────────────────────────────────────────────
149
- export class FilesManager {
150
- filesRoot;
151
- trashRoot;
152
- auditLog;
153
- quotaMb;
154
- maxUploadMb;
155
- textPreviewMaxKb;
156
- blockedExtensions;
157
- externalMounts;
158
- _indexDb = null;
159
- _indexDbRegistered = false;
160
- constructor(cfg = {}) {
161
- this.filesRoot = cfg.filesRoot ?? FILES_ROOT;
162
- this.trashRoot = cfg.trashRoot ?? FILES_TRASH_DIR;
163
- this.auditLog = cfg.auditLog ?? FILES_AUDIT_LOG;
164
- this.quotaMb = cfg.quotaMb ?? DEFAULT_QUOTA_MB;
165
- this.maxUploadMb = cfg.maxUploadMb ?? DEFAULT_MAX_UPLOAD_MB;
166
- this.textPreviewMaxKb = cfg.textPreviewMaxKb ?? DEFAULT_TEXT_PREVIEW_KB;
167
- this.blockedExtensions =
168
- cfg.blockedExtensions ?? DEFAULT_BLOCKED_EXTENSIONS;
169
- this.externalMounts = cfg.externalMounts ?? [];
170
- fs.mkdirSync(this.filesRoot, { recursive: true });
171
- }
172
- /**
173
- * Replace the current external-mount set; used when core.json is
174
- * mutated through routes/external-mounts.ts so a new mount becomes
175
- * visible without restarting the server.
176
- */
177
- setExternalMounts(mounts) {
178
- this.externalMounts = [...mounts];
179
- }
180
- // ── Listing ─────────────────────────────────────
181
- async list(relPath, opts = {}) {
182
- const abs = this.resolve(relPath);
183
- const stat = this.statOrThrow(abs);
184
- if (!stat.isDirectory()) {
185
- throw new FilesError("not a directory", "not-dir", 400);
186
- }
187
- const showHidden = opts.showHidden === true;
188
- const names = fs.readdirSync(abs);
189
- const entries = [];
190
- for (const name of names) {
191
- if (!showHidden && name.startsWith("."))
192
- continue;
193
- const childAbs = path.join(abs, name);
194
- let childStat;
195
- try {
196
- // lstat: do NOT follow symlinks during listing (defense layer 3)
197
- childStat = fs.lstatSync(childAbs);
198
- }
199
- catch {
200
- continue;
201
- }
202
- // Skip symlinks entirely from listings — present as a separate concept
203
- // if/when we want them. W1 hides them.
204
- if (childStat.isSymbolicLink())
205
- continue;
206
- const entry = {
207
- name,
208
- is_dir: childStat.isDirectory(),
209
- size: childStat.isDirectory() ? 0 : childStat.size,
210
- mtime: Math.floor(childStat.mtimeMs / 1000),
211
- etag: makeWeakETag(childStat),
212
- };
213
- if (entry.is_dir) {
214
- try {
215
- entry.child_count = fs.readdirSync(childAbs).length;
216
- }
217
- catch {
218
- /* ignore */
219
- }
220
- }
221
- else {
222
- entry.mime = lookupMime(name);
223
- }
224
- entries.push(entry);
225
- }
226
- // Merge external mount aliases as virtual entries when listing the
227
- // root. Mounts inside subdirectories are not (intentionally) — keep
228
- // mount surface flat at the top of files/.
229
- if (relPath === "" && this.externalMounts.length > 0) {
230
- const seen = new Set(entries.map((e) => e.name));
231
- for (const m of this.externalMounts) {
232
- if (seen.has(m.alias))
233
- continue; // real entry shadows the mount
234
- const mountRoot = m.host_path.startsWith("~")
235
- ? path.join(homedir(), m.host_path.slice(1))
236
- : path.resolve(m.host_path);
237
- let mtime = 0;
238
- let childCount;
239
- try {
240
- const s = fs.statSync(mountRoot);
241
- mtime = Math.floor(s.mtimeMs / 1000);
242
- if (s.isDirectory()) {
243
- try {
244
- childCount = fs.readdirSync(mountRoot).filter((n) => !n.startsWith(".")).length;
245
- }
246
- catch {
247
- /* permission denied — fine, leave undefined */
248
- }
249
- }
250
- }
251
- catch {
252
- /* host path missing — still surface the alias so user sees the
253
- configuration even if the underlying directory is unavailable */
254
- }
255
- entries.push({
256
- name: m.alias,
257
- is_dir: true,
258
- size: 0,
259
- mtime,
260
- etag: `W/"mount-${m.alias}-${mtime}"`,
261
- child_count: childCount,
262
- });
263
- }
264
- }
265
- entries.sort(sortDirsFirst);
266
- const quota = await this.quota();
267
- return {
268
- path: relPath,
269
- entries,
270
- quota_mb: quota.quota_mb,
271
- used_mb: quota.used_mb,
272
- available_mb: quota.available_mb,
273
- };
274
- }
275
- // ── Reading ─────────────────────────────────────
276
- async readStream(relPath) {
277
- const abs = this.resolve(relPath);
278
- const stat = this.statOrThrow(abs);
279
- if (stat.isDirectory()) {
280
- throw new FilesError("path is a directory", "is-dir", 400);
281
- }
282
- return {
283
- openStream: () => fs.createReadStream(abs),
284
- etag: makeWeakETag(stat),
285
- mime: lookupMime(relPath),
286
- size: stat.size,
287
- mtime: Math.floor(stat.mtimeMs / 1000),
288
- };
289
- }
290
- async readSmall(relPath, maxBytes) {
291
- const abs = this.resolve(relPath);
292
- const stat = this.statOrThrow(abs);
293
- if (stat.isDirectory()) {
294
- throw new FilesError("path is a directory", "is-dir", 400);
295
- }
296
- const target = Math.min(stat.size, maxBytes);
297
- const fd = fs.openSync(abs, "r");
298
- let buf = Buffer.alloc(target);
299
- try {
300
- let offset = 0;
301
- while (offset < target) {
302
- const got = fs.readSync(fd, buf, offset, target - offset, offset);
303
- if (got === 0)
304
- break;
305
- offset += got;
306
- }
307
- buf = buf.subarray(0, offset);
308
- }
309
- finally {
310
- fs.closeSync(fd);
311
- }
312
- return {
313
- buf,
314
- etag: makeWeakETag(stat),
315
- mime: lookupMime(relPath),
316
- truncated: stat.size > maxBytes,
317
- size: stat.size,
318
- };
319
- }
320
- // ── Writing ─────────────────────────────────────
321
- async writeStream(relPath, source, opts = {}) {
322
- if (relPath === "") {
323
- throw new FilesError("cannot write to root", "invalid-path", 400);
324
- }
325
- this.checkExtension(relPath);
326
- this.assertWritable(relPath);
327
- const abs = this.resolve(relPath);
328
- return withPathLock(abs, async () => {
329
- // Defense layer 3 — ancestor symlinks are always rejected;
330
- // a symlink AT the target is also rejected (we never write through
331
- // a symlink, even with overwrite=true).
332
- this.assertNoSymlinkInAncestors(abs);
333
- let existedBefore = false;
334
- let beforeSize = 0;
335
- try {
336
- const ls = fs.lstatSync(abs);
337
- if (ls.isSymbolicLink()) {
338
- throw new FilesError("target is a symlink", "symlink", 400);
339
- }
340
- if (ls.isDirectory()) {
341
- throw new FilesError("target is a directory", "is-dir", 400);
342
- }
343
- existedBefore = true;
344
- beforeSize = ls.size;
345
- }
346
- catch (e) {
347
- if (e instanceof FilesError)
348
- throw e;
349
- if (e.code !== "ENOENT")
350
- throw e;
351
- }
352
- if (existedBefore && opts.overwrite !== true) {
353
- throw new FilesError("target exists (use overwrite=true)", "exists", 409);
354
- }
355
- if (existedBefore && opts.ifMatch !== undefined) {
356
- const currentETag = makeWeakETag(fs.lstatSync(abs));
357
- if (!weakETagMatch(opts.ifMatch, currentETag)) {
358
- throw new FilesError("If-Match did not match current ETag", "etag-mismatch", 412);
359
- }
360
- }
361
- // Pre-check quota using expectedSize when available
362
- if (opts.expectedSize !== undefined) {
363
- const delta = opts.expectedSize - beforeSize;
364
- if (delta > 0)
365
- await this.assertQuotaAvailable(delta);
366
- if (opts.expectedSize >
367
- this.maxUploadMb * 1024 * 1024) {
368
- throw new FilesError(`file size exceeds max_upload_mb=${this.maxUploadMb}`, "too-large", 413);
369
- }
370
- }
371
- fs.mkdirSync(path.dirname(abs), { recursive: true });
372
- const result = await atomicWriteStream(abs, source, {
373
- expectedSize: opts.expectedSize,
374
- });
375
- // Defensive: re-check size against max_upload_mb in case expectedSize
376
- // was not provided (e.g. chunked client). If exceeded, soft-delete.
377
- const finalStat = fs.lstatSync(abs);
378
- if (finalStat.size > this.maxUploadMb * 1024 * 1024) {
379
- // Move to trash so we don't lose user data, then throw
380
- try {
381
- await this.removeInternal(abs, relPath);
382
- }
383
- catch {
384
- /* best-effort */
385
- }
386
- throw new FilesError(`file size exceeds max_upload_mb=${this.maxUploadMb}`, "too-large", 413);
387
- }
388
- const etag = makeWeakETag(finalStat);
389
- this.audit("write", relPath, { size: result.size });
390
- return { etag, size: result.size, mime: lookupMime(relPath) };
391
- });
392
- }
393
- // ── mkdir / move / remove ───────────────────────
394
- async mkdir(relPath) {
395
- if (relPath === "") {
396
- throw new FilesError("cannot mkdir root", "invalid-path", 400);
397
- }
398
- this.assertWritable(relPath);
399
- const abs = this.resolve(relPath);
400
- this.assertNoSymlinkInAncestors(abs);
401
- try {
402
- const ls = fs.lstatSync(abs);
403
- if (ls.isSymbolicLink()) {
404
- throw new FilesError("path is a symlink", "symlink", 400);
405
- }
406
- throw new FilesError("path already exists", "exists", 409);
407
- }
408
- catch (e) {
409
- if (e instanceof FilesError)
410
- throw e;
411
- if (e.code !== "ENOENT")
412
- throw e;
413
- }
414
- fs.mkdirSync(abs, { recursive: true });
415
- this.audit("mkdir", relPath);
416
- }
417
- async move(fromRel, toRel, overwrite = false) {
418
- if (fromRel === "" || toRel === "") {
419
- throw new FilesError("cannot move root", "invalid-path", 400);
420
- }
421
- this.assertWritable(fromRel); // moving FROM a ro mount = removing
422
- this.assertWritable(toRel); // moving TO a ro mount = creating
423
- const fromAbs = this.resolve(fromRel);
424
- const toAbs = this.resolve(toRel);
425
- this.checkExtension(toRel);
426
- // Defense layer 3 on both endpoints
427
- this.assertNoSymlinkInAncestors(fromAbs);
428
- this.assertNoSymlinkInAncestors(toAbs);
429
- let fromLstat;
430
- try {
431
- fromLstat = fs.lstatSync(fromAbs);
432
- }
433
- catch (e) {
434
- if (e.code === "ENOENT") {
435
- throw new FilesError("source not found", "not-found", 404);
436
- }
437
- throw e;
438
- }
439
- if (fromLstat.isSymbolicLink()) {
440
- throw new FilesError("source is a symlink", "symlink", 400);
441
- }
442
- // Lock both paths in deterministic order to avoid deadlock
443
- const sorted = [fromAbs, toAbs].sort();
444
- const [first, second] = [sorted[0], sorted[1]];
445
- return withPathLock(first, () => withPathLock(second, async () => {
446
- try {
447
- const toLstat = fs.lstatSync(toAbs);
448
- if (toLstat.isSymbolicLink()) {
449
- throw new FilesError("target is a symlink", "symlink", 400);
450
- }
451
- if (!overwrite) {
452
- throw new FilesError("target exists", "exists", 409);
453
- }
454
- }
455
- catch (e) {
456
- if (e instanceof FilesError)
457
- throw e;
458
- if (e.code !== "ENOENT")
459
- throw e;
460
- }
461
- fs.mkdirSync(path.dirname(toAbs), { recursive: true });
462
- fs.renameSync(fromAbs, toAbs);
463
- this.audit("move", fromRel, { to: toRel });
464
- }));
465
- }
466
- async remove(relPath) {
467
- if (relPath === "") {
468
- throw new FilesError("cannot remove root", "invalid-path", 400);
469
- }
470
- this.assertWritable(relPath);
471
- const abs = this.resolve(relPath);
472
- this.assertNoSymlinkInAncestors(abs);
473
- let ls;
474
- try {
475
- ls = fs.lstatSync(abs);
476
- }
477
- catch (e) {
478
- if (e.code === "ENOENT") {
479
- throw new FilesError("path not found", "not-found", 404);
480
- }
481
- throw e;
482
- }
483
- if (ls.isSymbolicLink()) {
484
- throw new FilesError("cannot remove symlink", "symlink", 400);
485
- }
486
- return withPathLock(abs, () => this.removeInternal(abs, relPath));
487
- }
488
- async removeInternal(abs, relPath) {
489
- const trashDay = path.join(this.trashRoot, ymd());
490
- fs.mkdirSync(trashDay, { recursive: true });
491
- const baseName = path.basename(abs);
492
- const ts = Date.now();
493
- const trashTarget = path.join(trashDay, `${baseName}.${ts}`);
494
- fs.renameSync(abs, trashTarget);
495
- this.audit("remove", relPath, { trash: trashTarget });
496
- }
497
- // ── Path resolution ─────────────────────────────
498
- /**
499
- * Resolve a files/-relative path to its absolute host filesystem path.
500
- *
501
- * Why a public API: the drive-shim (and the agents that call it via MCP)
502
- * needs to hand the resulting absolute path to IM channel plugins
503
- * (Feishu / WeChat / Telegram / ...) that send files. Those plugins read
504
- * from the local filesystem, not via HTTP. The OpenClaw container runs
505
- * with host==container bind mounts (see buildVolumes in
506
- * src/services/runtime/adapters/openclaw.ts), so the same absolute
507
- * string is valid on both sides; raw_exec / process service managers
508
- * run the agent natively on the host, where the path is also directly
509
- * usable.
510
- *
511
- * External mounts: a path whose first segment is an external mount
512
- * alias resolves into the mount's host_path. The returned abs_path
513
- * points at the real host location; external_mount is set so the
514
- * caller can warn the user that this is outside files/. mode is
515
- * propagated so writers know if it's read-only.
516
- *
517
- * Symlink policy: if the path resolves to a symlink we still surface
518
- * the abs_path (callers may legitimately want to know where it points
519
- * conceptually), but exists is reported as false to discourage handing
520
- * symlinks to channel plugins.
521
- */
522
- async resolveLocalPath(relPath) {
523
- const r = this.resolveOp(relPath);
524
- const out = {
525
- abs_path: r.abs,
526
- exists: false,
527
- };
528
- if (r.ext) {
529
- out.external_mount = r.ext.alias;
530
- out.external_mount_mode = r.ext.mode;
531
- }
532
- try {
533
- const ls = fs.lstatSync(r.abs);
534
- if (ls.isSymbolicLink()) {
535
- return out; // exists stays false; symlinks are not handed out
536
- }
537
- out.exists = true;
538
- out.is_dir = ls.isDirectory();
539
- out.size = ls.size;
540
- out.mtime = Math.floor(ls.mtimeMs / 1000);
541
- }
542
- catch (e) {
543
- if (e?.code !== "ENOENT" && e?.code !== "ENOTDIR") {
544
- throw new FilesError(`stat failed: ${e.message}`, "stat", 500);
545
- }
546
- }
547
- return out;
548
- }
549
- // ── Quota ───────────────────────────────────────
550
- async quota() {
551
- const used = dirSize(this.filesRoot, this.trashRoot);
552
- const trash = fs.existsSync(this.trashRoot) ? dirSize(this.trashRoot) : 0;
553
- const usedMb = used / (1024 * 1024);
554
- const trashMb = trash / (1024 * 1024);
555
- return {
556
- quota_mb: this.quotaMb,
557
- used_mb: round(usedMb),
558
- available_mb: round(Math.max(0, this.quotaMb - usedMb)),
559
- trash_mb: round(trashMb),
560
- };
561
- }
562
- async assertQuotaAvailable(deltaBytes) {
563
- if (deltaBytes <= 0)
564
- return;
565
- const q = await this.quota();
566
- const availBytes = q.available_mb * 1024 * 1024;
567
- if (deltaBytes > availBytes) {
568
- throw new FilesError("quota exceeded", "quota", 507);
569
- }
570
- }
571
- // ── Audit ───────────────────────────────────────
572
- audit(op, relPath, meta = {}) {
573
- try {
574
- const line = JSON.stringify({
575
- ts: Math.floor(Date.now() / 1000),
576
- op,
577
- path: relPath,
578
- ...meta,
579
- }) + "\n";
580
- fs.mkdirSync(path.dirname(this.auditLog), { recursive: true });
581
- fs.appendFileSync(this.auditLog, line);
582
- }
583
- catch (e) {
584
- console.warn(`[files-audit] failed: ${e.message}`);
585
- }
586
- }
587
- // ── Internals ───────────────────────────────────
588
- /**
589
- * Resolve a files/-relative path. If the first segment matches a
590
- * registered external mount alias the path is virtualized into the
591
- * mount's host_path; otherwise the path resolves under FILES_ROOT.
592
- *
593
- * Symlink defense (assertNoSymlinkInAncestors) and lstat checks in
594
- * the calling op still run on the absolute path returned here, so
595
- * symlinks INSIDE an external mount are still rejected.
596
- */
597
- resolve(relPath) {
598
- return this.resolveOp(relPath).abs;
599
- }
600
- resolveOp(relPath) {
601
- if (this.externalMounts.length > 0) {
602
- const m = resolveAcrossMounts(relPath, this.externalMounts);
603
- if (m) {
604
- const mountRoot = m.mount.host_path.startsWith("~")
605
- ? path.join(homedir(), m.mount.host_path.slice(1))
606
- : path.resolve(m.mount.host_path);
607
- try {
608
- const abs = resolveSafe(mountRoot, m.remainder);
609
- return { abs, ext: m.mount };
610
- }
611
- catch (e) {
612
- if (e instanceof PathSafetyError) {
613
- throw new FilesError(`invalid path: ${e.message}`, "invalid-path", 400);
614
- }
615
- throw e;
616
- }
617
- }
618
- }
619
- try {
620
- return { abs: resolveSafe(this.filesRoot, relPath), ext: null };
621
- }
622
- catch (e) {
623
- if (e instanceof PathSafetyError) {
624
- throw new FilesError(`invalid path: ${e.message}`, "invalid-path", 400);
625
- }
626
- throw e;
627
- }
628
- }
629
- /**
630
- * Refuse mutations that target a read-only external mount. Called by
631
- * write / move / delete / mkdir before any fs work.
632
- */
633
- assertWritable(rel) {
634
- const r = this.resolveOp(rel);
635
- if (r.ext && r.ext.mode === "ro") {
636
- throw new FilesError(`mount "${r.ext.alias}" is read-only`, "read-only", 403);
637
- }
638
- }
639
- /**
640
- * Defense layer 3 (per path-safety.ts header): refuse symlinks at the
641
- * target path AND refuse paths that traverse a symlink in their parent
642
- * chain inside the trust root.
643
- *
644
- * For external mounts the trust root is the mount's host_path (the
645
- * user explicitly chose that directory; symlinks inside it are their
646
- * own filesystem and not an attack we need to defend against). For
647
- * regular files/ paths the trust root is FILES_ROOT.
648
- */
649
- statOrThrow(abs) {
650
- try {
651
- const ls = fs.lstatSync(abs);
652
- if (ls.isSymbolicLink()) {
653
- throw new FilesError("symlink target is not allowed", "symlink", 400);
654
- }
655
- this.assertNoSymlinkInAncestors(abs);
656
- return fs.statSync(abs);
657
- }
658
- catch (e) {
659
- if (e instanceof FilesError)
660
- throw e;
661
- if (e.code === "ENOENT") {
662
- throw new FilesError("path not found", "not-found", 404);
663
- }
664
- throw e;
665
- }
666
- }
667
- /**
668
- * Walk up from `abs` toward the relevant trust root and refuse if any
669
- * intermediate component is a symlink. Trust root is FILES_ROOT for
670
- * regular paths and the matching external-mount host_path for paths
671
- * that fall inside an external mount.
672
- */
673
- assertNoSymlinkInAncestors(abs) {
674
- const trustRoot = this.trustRootFor(abs);
675
- let cur = path.dirname(abs);
676
- while (cur.length >= trustRoot.length && cur !== path.dirname(cur)) {
677
- if (cur === trustRoot)
678
- return;
679
- try {
680
- const s = fs.lstatSync(cur);
681
- if (s.isSymbolicLink()) {
682
- throw new FilesError("path traverses a symlink ancestor", "symlink", 400);
683
- }
684
- }
685
- catch (e) {
686
- if (e instanceof FilesError)
687
- throw e;
688
- if (e.code !== "ENOENT")
689
- throw e;
690
- // missing intermediate is OK — write side may create it
691
- }
692
- cur = path.dirname(cur);
693
- }
694
- }
695
- /**
696
- * Find the trust root for an absolute path: either an external mount's
697
- * host_path (if abs is inside one) or FILES_ROOT.
698
- */
699
- trustRootFor(abs) {
700
- for (const m of this.externalMounts) {
701
- const root = m.host_path.startsWith("~")
702
- ? path.join(homedir(), m.host_path.slice(1))
703
- : path.resolve(m.host_path);
704
- if (abs === root || abs.startsWith(root + path.sep))
705
- return root;
706
- }
707
- return this.filesRoot;
708
- }
709
- checkExtension(relPath) {
710
- const ext = path.extname(relPath).toLowerCase();
711
- if (this.blockedExtensions.has(ext)) {
712
- throw new FilesError(`extension ${ext} is blocked`, "blocked-ext", 400);
713
- }
714
- }
715
- // ── Knowledge index (AI-FS W3) ───────────────────
716
- /**
717
- * Returns the knowledge directory path (does NOT create it).
718
- */
719
- get knowledgeDir() {
720
- return path.join(this.filesRoot, ".knowledge");
721
- }
722
- /**
723
- * Returns the SQLite DB path.
724
- */
725
- get indexDbPath() {
726
- return path.join(this.knowledgeDir, "index.sqlite");
727
- }
728
- /**
729
- * Returns the sidecar path for a given sha256.
730
- */
731
- sidecarPath(sha256) {
732
- return path.join(this.knowledgeDir, `${sha256}.json`);
733
- }
734
- /**
735
- * Creates ~/.jishushell/files/.knowledge/ (mode 0700) and, on first
736
- * creation only, writes a README.md explaining the directory is
737
- * panel-private metadata. README is idempotent: only written when the
738
- * file doesn't already exist, never overwritten.
739
- */
740
- ensureKnowledgeDir() {
741
- fs.mkdirSync(this.knowledgeDir, { recursive: true, mode: 0o700 });
742
- const readmePath = path.join(this.knowledgeDir, "README.md");
743
- if (!fs.existsSync(readmePath)) {
744
- try {
745
- fs.writeFileSync(readmePath, KNOWLEDGE_README_TEMPLATE, { encoding: "utf8", mode: 0o644 });
746
- }
747
- catch (e) {
748
- try {
749
- this.audit("knowledge-readme-warn", readmePath, { err: e.message });
750
- }
751
- catch { /* ignore */ }
752
- }
753
- }
754
- }
755
- /**
756
- * Lazy-initialize the SQLite FTS5 handle. Creates the .knowledge dir
757
- * and the schema on first call.
758
- */
759
- getIndexDb() {
760
- if (this._indexDb !== null)
761
- return this._indexDb;
762
- this.ensureKnowledgeDir();
763
- const db = new DatabaseSync(this.indexDbPath);
764
- // Migrate a legacy unicode61 index to the trigram tokenizer. unicode61
765
- // does not segment CJK (a whole Chinese run becomes one token), so
766
- // substring queries like "发票" never match. trigram indexes 3-char
767
- // windows, which lets LIKE substring probes hit the index for Chinese.
768
- // The index is a derived cache (POSIX is source of truth), so dropping
769
- // and rebuilding it is safe.
770
- const existing = db
771
- .prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='docs'")
772
- .get();
773
- const needsMigration = !!existing?.sql && !/\btrigram\b/i.test(existing.sql);
774
- if (needsMigration) {
775
- db.exec("DROP TABLE docs");
776
- }
777
- db.exec(`
778
- CREATE VIRTUAL TABLE IF NOT EXISTS docs USING fts5(
779
- sha256 UNINDEXED,
780
- path,
781
- content,
782
- tags,
783
- tokenize='trigram'
784
- )
785
- `);
786
- this._indexDb = db;
787
- // After a tokenizer migration the table is empty; repopulate from the
788
- // POSIX tree so search isn't blank in the meantime. Fire-and-forget —
789
- // getIndexDb() now returns the cached handle, so no re-migration.
790
- if (needsMigration) {
791
- this.reindex().catch((e) => {
792
- this.audit("reindex-error", "", {
793
- err: e?.message,
794
- stack: e?.stack,
795
- reason: "trigram-migration",
796
- });
797
- });
798
- }
799
- // Register process.exit close handler once per instance
800
- if (!this._indexDbRegistered) {
801
- this._indexDbRegistered = true;
802
- process.once("beforeExit", () => {
803
- try {
804
- this._indexDb?.close();
805
- }
806
- catch { /* ignore */ }
807
- });
808
- }
809
- return db;
810
- }
811
- /**
812
- * Search the FTS5 index.
813
- */
814
- async searchIndex(query, opts) {
815
- const q = query.trim();
816
- if (!q) {
817
- throw new FilesError("query must not be empty", "invalid-query", 400);
818
- }
819
- // Return empty if DB doesn't exist yet (no reindex run)
820
- if (!fs.existsSync(this.indexDbPath)) {
821
- this.audit("search_index", "", { query: q, hits: 0 });
822
- return [];
823
- }
824
- const db = this.getIndexDb();
825
- const limit = Math.min(opts?.limit ?? 20, 100);
826
- // High-recall substring matching. Split the query into whitespace-separated
827
- // terms; a doc matching ANY term is a candidate, ranked by how many terms it
828
- // matches. The trigram tokenizer lets these LIKE substring probes hit the
829
- // index (CJK included). Semantic understanding and precise re-ranking are
830
- // the agent's job, not the panel's — this is a dumb, high-recall surface.
831
- const terms = q.split(/\s+/).filter(Boolean).slice(0, 16);
832
- if (terms.length === 0) {
833
- this.audit("search_index", "", { query: q, hits: 0 });
834
- return [];
835
- }
836
- const escapeLike = (s) => s.replace(/([\\%_])/g, "\\$1");
837
- const perTerm = "(content LIKE ? ESCAPE '\\' OR path LIKE ? ESCAPE '\\' OR tags LIKE ? ESCAPE '\\')";
838
- const matchCountExpr = terms
839
- .map(() => `(CASE WHEN ${perTerm} THEN 1 ELSE 0 END)`)
840
- .join(" + ");
841
- const whereExpr = terms.map(() => perTerm).join(" OR ");
842
- // Positional params follow SQL text order: the match-count CASEs (SELECT
843
- // clause) first, then the WHERE clause, then optional prefix, then limit.
844
- const likeParams = [];
845
- for (const t of terms) {
846
- const pat = `%${escapeLike(t)}%`;
847
- likeParams.push(pat, pat, pat);
848
- }
849
- let rows;
850
- if (opts?.pathPrefix) {
851
- const prefix = `${escapeLike(opts.pathPrefix)}%`;
852
- rows = db.prepare(`SELECT path, sha256, content, (${matchCountExpr}) AS match_count
853
- FROM docs
854
- WHERE (${whereExpr}) AND path LIKE ? ESCAPE '\\'
855
- ORDER BY match_count DESC
856
- LIMIT ?`).all(...likeParams, ...likeParams, prefix, limit);
857
- }
858
- else {
859
- rows = db.prepare(`SELECT path, sha256, content, (${matchCountExpr}) AS match_count
860
- FROM docs
861
- WHERE (${whereExpr})
862
- ORDER BY match_count DESC
863
- LIMIT ?`).all(...likeParams, ...likeParams, limit);
864
- }
865
- const hits = rows.map((r) => ({
866
- path: r.path,
867
- sha256: r.sha256,
868
- snippet: buildSnippet(r.content, terms),
869
- score: -r.match_count,
870
- }));
871
- this.audit("search_index", "", { query: q, hits: hits.length });
872
- return hits;
873
- }
874
- /**
875
- * Read a sidecar JSON for a file identified by sha256 or path.
876
- */
877
- async getMeta(args) {
878
- let sha256;
879
- if (args.sha256) {
880
- sha256 = args.sha256.toLowerCase();
881
- if (!SHA256_RE.test(sha256)) {
882
- throw new FilesError("invalid sha256 format", "invalid-sha256", 400);
883
- }
884
- }
885
- else if (args.path) {
886
- // Resolve path and stream-hash the file
887
- const abs = this.resolve(args.path);
888
- if (!fs.existsSync(abs)) {
889
- throw new FilesError("path not found", "not-found", 404);
890
- }
891
- sha256 = await streamSha256(abs, 64 * 1024 * 1024);
892
- }
893
- else {
894
- throw new FilesError("sha256 or path required", "invalid-args", 400);
895
- }
896
- this.audit("get_meta", sha256);
897
- const sp = this.sidecarPath(sha256);
898
- if (!fs.existsSync(sp))
899
- return null;
900
- const raw = safeReadJson(sp, "get_meta");
901
- if (raw === null) {
902
- this.audit("get_meta_warn", sha256, { warn: "sidecar malformed, treating as null" });
903
- return null;
904
- }
905
- return raw;
906
- }
907
- /**
908
- * Write (merge or replace) a sidecar for a given sha256.
909
- */
910
- async setMeta(sha256, payload, opts) {
911
- const normalizedSha = sha256.toLowerCase();
912
- if (!SHA256_RE.test(normalizedSha)) {
913
- throw new FilesError("invalid sha256 format", "invalid-sha256", 400);
914
- }
915
- // Validate payload is JSON-serializable and within size limit
916
- let serialized;
917
- try {
918
- serialized = JSON.stringify(payload);
919
- }
920
- catch {
921
- throw new FilesError("payload is not JSON-serializable", "invalid-payload", 400);
922
- }
923
- if (Buffer.byteLength(serialized, "utf8") > 64 * 1024) {
924
- throw new FilesError("payload exceeds 64KB limit", "payload-too-large", 413);
925
- }
926
- const merge = opts?.merge !== false; // default true
927
- this.ensureKnowledgeDir();
928
- let base = {};
929
- if (merge) {
930
- const existing = safeReadJson(this.sidecarPath(normalizedSha), "set_meta");
931
- if (existing !== null)
932
- base = existing;
933
- }
934
- const now = Math.floor(Date.now() / 1000);
935
- const merged = {
936
- ...base,
937
- ...payload,
938
- schema_version: 1,
939
- sha256: normalizedSha,
940
- indexed_at: now,
941
- size: base.size ?? 0,
942
- mtime: base.mtime ?? 0,
943
- };
944
- safeWriteJson(this.sidecarPath(normalizedSha), merged);
945
- this.audit("set_meta", normalizedSha, { merge });
946
- return merged;
947
- }
948
- /**
949
- * Walk the file tree and upsert text-indexable files into the FTS5 index.
950
- */
951
- async reindex(opts) {
952
- const walkRoot = opts?.pathPrefix
953
- ? path.join(this.filesRoot, opts.pathPrefix)
954
- : this.filesRoot;
955
- const result = { indexed: 0, skipped: 0, errors: 0 };
956
- if (!fs.existsSync(walkRoot)) {
957
- this.audit("reindex", opts?.pathPrefix ?? "/", result);
958
- return result;
959
- }
960
- const db = this.getIndexDb();
961
- const upsertDelete = db.prepare("DELETE FROM docs WHERE sha256 = ?");
962
- const upsertInsert = db.prepare("INSERT INTO docs(sha256, path, content, tags) VALUES (?, ?, ?, ?)");
963
- const stack = [walkRoot];
964
- while (stack.length > 0) {
965
- const cur = stack.pop();
966
- let entries;
967
- try {
968
- entries = fs.readdirSync(cur, { withFileTypes: true });
969
- }
970
- catch (e) {
971
- result.errors++;
972
- this.audit("reindex-error", cur, { err: e?.message });
973
- continue;
974
- }
975
- for (const entry of entries) {
976
- const absEntry = path.join(cur, entry.name);
977
- // Compute rel path relative to filesRoot
978
- const relEntry = path.relative(this.filesRoot, absEntry);
979
- if (entry.isDirectory()) {
980
- // Skip panel-private dirs
981
- if (relEntry === ".knowledge" || relEntry.startsWith(".knowledge" + path.sep))
982
- continue;
983
- if (relEntry === ".trash" || relEntry.startsWith(".trash" + path.sep))
984
- continue;
985
- stack.push(absEntry);
986
- continue;
987
- }
988
- if (!entry.isFile())
989
- continue;
990
- // Skip non-indexable files
991
- const mime = lookupMime(entry.name);
992
- const ext = path.extname(entry.name).toLowerCase();
993
- if (!mime.startsWith("text/") && !INDEXABLE_EXTS.has(ext)) {
994
- result.skipped++;
995
- continue;
996
- }
997
- try {
998
- // Compute sha256 via streaming (full file) and read up to 512KB for content
999
- const sha = await streamSha256(absEntry);
1000
- const stat = fs.statSync(absEntry);
1001
- const readBytes = Math.min(stat.size, 512 * 1024);
1002
- let content = "";
1003
- if (readBytes > 0) {
1004
- const fd = fs.openSync(absEntry, "r");
1005
- try {
1006
- const buf = Buffer.alloc(readBytes);
1007
- let off = 0;
1008
- while (off < readBytes) {
1009
- const got = fs.readSync(fd, buf, off, readBytes - off, off);
1010
- if (got === 0)
1011
- break;
1012
- off += got;
1013
- }
1014
- content = buf.subarray(0, off).toString("utf8");
1015
- }
1016
- finally {
1017
- fs.closeSync(fd);
1018
- }
1019
- }
1020
- // Load tags from existing sidecar if present
1021
- const sp = this.sidecarPath(sha);
1022
- let tags = "";
1023
- if (fs.existsSync(sp)) {
1024
- const sc = safeReadJson(sp, "reindex");
1025
- if (sc?.tags && Array.isArray(sc.tags)) {
1026
- tags = sc.tags.join(" ");
1027
- }
1028
- }
1029
- upsertDelete.run(sha);
1030
- upsertInsert.run(sha, relEntry, content, tags);
1031
- result.indexed++;
1032
- }
1033
- catch (e) {
1034
- result.errors++;
1035
- this.audit("reindex-error", relEntry, { err: e?.message });
1036
- }
1037
- }
1038
- }
1039
- this.audit("reindex", opts?.pathPrefix ?? "/", result);
1040
- return result;
1041
- }
1042
- }
1043
- // ── Helpers ───────────────────────────────────────
1044
- function makeWeakETag(stat) {
1045
- return `W/"${stat.size}-${Math.floor(stat.mtimeMs)}"`;
1046
- }
1047
- function weakETagMatch(provided, current) {
1048
- // RFC 7232 weak comparison: strip W/ from both, compare values
1049
- const strip = (s) => s.replace(/^W\//, "");
1050
- return strip(provided) === strip(current);
1051
- }
1052
- // Build a `<b>`-highlighted snippet around the first matched term. Replaces
1053
- // FTS5 snippet() (which needs MATCH); we do substring search via LIKE instead.
1054
- const SNIPPET_WINDOW = 30;
1055
- function buildSnippet(content, terms) {
1056
- if (!content)
1057
- return "";
1058
- const lc = content.toLowerCase();
1059
- let best = -1;
1060
- let bestLen = 0;
1061
- for (const t of terms) {
1062
- const idx = lc.indexOf(t.toLowerCase());
1063
- if (idx !== -1 && (best === -1 || idx < best)) {
1064
- best = idx;
1065
- bestLen = t.length;
1066
- }
1067
- }
1068
- const clean = (s) => s.replace(/\s+/g, " ").trim();
1069
- if (best === -1) {
1070
- // Shouldn't happen for a LIKE hit, but degrade gracefully.
1071
- const head = clean(content.slice(0, SNIPPET_WINDOW * 2));
1072
- return content.length > SNIPPET_WINDOW * 2 ? `${head}…` : head;
1073
- }
1074
- let start = Math.max(0, best - SNIPPET_WINDOW);
1075
- let end = Math.min(content.length, best + bestLen + SNIPPET_WINDOW);
1076
- // Don't split a surrogate pair (e.g. CJK Ext-B chars) at the window edges.
1077
- const cc = (i) => content.charCodeAt(i);
1078
- if (start > 0 && cc(start) >= 0xdc00 && cc(start) <= 0xdfff)
1079
- start--;
1080
- if (end < content.length && cc(end - 1) >= 0xd800 && cc(end - 1) <= 0xdbff)
1081
- end++;
1082
- const before = clean(content.slice(start, best));
1083
- const match = clean(content.slice(best, best + bestLen));
1084
- const after = clean(content.slice(best + bestLen, end));
1085
- return `${start > 0 ? "…" : ""}${before}<b>${match}</b>${after}${end < content.length ? "…" : ""}`;
1086
- }
1087
- function ymd() {
1088
- const d = new Date();
1089
- const yyyy = d.getFullYear();
1090
- const mm = String(d.getMonth() + 1).padStart(2, "0");
1091
- const dd = String(d.getDate()).padStart(2, "0");
1092
- return `${yyyy}-${mm}-${dd}`;
1093
- }
1094
- function round(n) {
1095
- return Math.round(n * 10) / 10;
1096
- }
1097
- function sortDirsFirst(a, b) {
1098
- if (a.is_dir !== b.is_dir)
1099
- return a.is_dir ? -1 : 1;
1100
- return a.name.localeCompare(b.name, "zh-CN", { sensitivity: "base" });
1101
- }
1102
- function dirSize(rootAbs, exclude) {
1103
- if (!fs.existsSync(rootAbs))
1104
- return 0;
1105
- let total = 0;
1106
- const stack = [rootAbs];
1107
- while (stack.length > 0) {
1108
- const cur = stack.pop();
1109
- if (exclude && (cur === exclude || cur.startsWith(exclude + path.sep))) {
1110
- continue;
1111
- }
1112
- let entries;
1113
- try {
1114
- entries = fs.readdirSync(cur, { withFileTypes: true });
1115
- }
1116
- catch {
1117
- continue;
1118
- }
1119
- for (const e of entries) {
1120
- const full = path.join(cur, e.name);
1121
- if (e.isSymbolicLink())
1122
- continue;
1123
- if (e.isDirectory()) {
1124
- stack.push(full);
1125
- }
1126
- else if (e.isFile()) {
1127
- try {
1128
- total += fs.statSync(full).size;
1129
- }
1130
- catch {
1131
- /* ignore */
1132
- }
1133
- }
1134
- }
1135
- }
1136
- return total;
1137
- }
1138
- // Re-export isHidden so callers don't need a second import for this common check
1139
- export { isHidden };
1140
- // ── Knowledge-index helpers ───────────────────────
1141
- const SHA256_RE = /^[a-f0-9]{64}$/i;
1142
- /**
1143
- * Stream-hash a file with SHA-256 and return the hex digest.
1144
- * Reads the entire file (or up to `maxBytes` for large files) without
1145
- * loading it fully into memory.
1146
- */
1147
- async function streamSha256(absPath, maxBytes) {
1148
- return new Promise((resolve, reject) => {
1149
- const hasher = createHash("sha256");
1150
- const stream = fs.createReadStream(absPath, maxBytes !== undefined ? { end: maxBytes - 1 } : undefined);
1151
- stream.on("data", (chunk) => hasher.update(chunk));
1152
- stream.on("end", () => resolve(hasher.digest("hex")));
1153
- stream.on("error", reject);
1154
- });
1155
- }
1156
- //# sourceMappingURL=files-manager.js.map