p-spore 0.1.3 → 0.1.42

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 (396) hide show
  1. package/README.md +110 -15
  2. package/dist/agents/agent-manager.d.ts +3 -3
  3. package/dist/agents/agent-manager.d.ts.map +1 -1
  4. package/dist/agents/agent-manager.js +3 -2
  5. package/dist/agents/agent-manager.js.map +1 -1
  6. package/dist/application/agent-application.d.ts +29 -5
  7. package/dist/application/agent-application.d.ts.map +1 -1
  8. package/dist/application/agent-application.js +444 -14
  9. package/dist/application/agent-application.js.map +1 -1
  10. package/dist/articles/diff.d.ts +70 -0
  11. package/dist/articles/diff.d.ts.map +1 -0
  12. package/dist/articles/diff.js +330 -0
  13. package/dist/articles/diff.js.map +1 -0
  14. package/dist/articles/docx.d.ts +10 -0
  15. package/dist/articles/docx.d.ts.map +1 -0
  16. package/dist/articles/docx.js +219 -0
  17. package/dist/articles/docx.js.map +1 -0
  18. package/dist/articles/draft.d.ts +18 -0
  19. package/dist/articles/draft.d.ts.map +1 -0
  20. package/dist/articles/draft.js +88 -0
  21. package/dist/articles/draft.js.map +1 -0
  22. package/dist/articles/edits.d.ts +24 -0
  23. package/dist/articles/edits.d.ts.map +1 -0
  24. package/dist/articles/edits.js +54 -0
  25. package/dist/articles/edits.js.map +1 -0
  26. package/dist/articles/html.d.ts +10 -0
  27. package/dist/articles/html.d.ts.map +1 -0
  28. package/dist/articles/html.js +122 -0
  29. package/dist/articles/html.js.map +1 -0
  30. package/dist/articles/plain.d.ts +8 -0
  31. package/dist/articles/plain.d.ts.map +1 -0
  32. package/dist/articles/plain.js +69 -0
  33. package/dist/articles/plain.js.map +1 -0
  34. package/dist/articles/preview.d.ts +43 -0
  35. package/dist/articles/preview.d.ts.map +1 -0
  36. package/dist/articles/preview.js +90 -0
  37. package/dist/articles/preview.js.map +1 -0
  38. package/dist/articles/publish.d.ts +10 -0
  39. package/dist/articles/publish.d.ts.map +1 -0
  40. package/dist/articles/publish.js +54 -0
  41. package/dist/articles/publish.js.map +1 -0
  42. package/dist/articles/receipt.d.ts +16 -0
  43. package/dist/articles/receipt.d.ts.map +1 -0
  44. package/dist/articles/receipt.js +27 -0
  45. package/dist/articles/receipt.js.map +1 -0
  46. package/dist/articles/store.d.ts +78 -0
  47. package/dist/articles/store.d.ts.map +1 -0
  48. package/dist/articles/store.js +308 -0
  49. package/dist/articles/store.js.map +1 -0
  50. package/dist/articles/tool.d.ts +14 -0
  51. package/dist/articles/tool.d.ts.map +1 -0
  52. package/dist/articles/tool.js +175 -0
  53. package/dist/articles/tool.js.map +1 -0
  54. package/dist/articles/writer-context.d.ts +5 -0
  55. package/dist/articles/writer-context.d.ts.map +1 -0
  56. package/dist/articles/writer-context.js +56 -0
  57. package/dist/articles/writer-context.js.map +1 -0
  58. package/dist/articles/writer.d.ts +18 -0
  59. package/dist/articles/writer.d.ts.map +1 -0
  60. package/dist/articles/writer.js +79 -0
  61. package/dist/articles/writer.js.map +1 -0
  62. package/dist/articles/zip-write.d.ts +11 -0
  63. package/dist/articles/zip-write.d.ts.map +1 -0
  64. package/dist/articles/zip-write.js +63 -0
  65. package/dist/articles/zip-write.js.map +1 -0
  66. package/dist/bundled-skills/README.md +17 -0
  67. package/dist/bundled-skills/aegis-search/SKILL.md +59 -0
  68. package/dist/bundled-skills/aegis-search/bin/.gitkeep +0 -0
  69. package/dist/bundled-skills/article-canvas/SKILL.md +28 -0
  70. package/dist/bundled-skills/binaries.json +23 -0
  71. package/dist/bundled-skills/doc-extract/SKILL.md +56 -0
  72. package/dist/cli/main.d.ts.map +1 -1
  73. package/dist/cli/main.js +407 -54
  74. package/dist/cli/main.js.map +1 -1
  75. package/dist/config/config.d.ts +43 -0
  76. package/dist/config/config.d.ts.map +1 -1
  77. package/dist/config/config.js +150 -6
  78. package/dist/config/config.js.map +1 -1
  79. package/dist/daemon/daemon.d.ts.map +1 -1
  80. package/dist/daemon/daemon.js +80 -11
  81. package/dist/daemon/daemon.js.map +1 -1
  82. package/dist/desktop/application.d.ts +4 -0
  83. package/dist/desktop/application.d.ts.map +1 -0
  84. package/dist/desktop/application.js +1688 -0
  85. package/dist/desktop/application.js.map +1 -0
  86. package/dist/desktop/article-export.d.ts +12 -0
  87. package/dist/desktop/article-export.d.ts.map +1 -0
  88. package/dist/desktop/article-export.js +87 -0
  89. package/dist/desktop/article-export.js.map +1 -0
  90. package/dist/desktop/assets/pspore.png +0 -0
  91. package/dist/desktop/assets/pspore.svg +24 -0
  92. package/dist/desktop/conversation-smoke.d.ts +5 -0
  93. package/dist/desktop/conversation-smoke.d.ts.map +1 -0
  94. package/dist/desktop/conversation-smoke.js +93 -0
  95. package/dist/desktop/conversation-smoke.js.map +1 -0
  96. package/dist/desktop/daemon-bridge.d.ts.map +1 -1
  97. package/dist/desktop/daemon-bridge.js +62 -17
  98. package/dist/desktop/daemon-bridge.js.map +1 -1
  99. package/dist/desktop/ipc-contract.d.ts +124 -0
  100. package/dist/desktop/ipc-contract.d.ts.map +1 -1
  101. package/dist/desktop/ipc-contract.js +191 -12
  102. package/dist/desktop/ipc-contract.js.map +1 -1
  103. package/dist/desktop/local-path.d.ts +15 -0
  104. package/dist/desktop/local-path.d.ts.map +1 -0
  105. package/dist/desktop/local-path.js +59 -0
  106. package/dist/desktop/local-path.js.map +1 -0
  107. package/dist/desktop/main.d.ts +10 -1
  108. package/dist/desktop/main.d.ts.map +1 -1
  109. package/dist/desktop/main.js +122 -530
  110. package/dist/desktop/main.js.map +1 -1
  111. package/dist/desktop/native-startup.d.ts +4 -0
  112. package/dist/desktop/native-startup.d.ts.map +1 -0
  113. package/dist/desktop/native-startup.js +57 -0
  114. package/dist/desktop/native-startup.js.map +1 -0
  115. package/dist/desktop/preload.cjs +28 -1
  116. package/dist/desktop/renderer/article-panel.d.ts +45 -0
  117. package/dist/desktop/renderer/article-panel.d.ts.map +1 -0
  118. package/dist/desktop/renderer/article-panel.js +1126 -0
  119. package/dist/desktop/renderer/article-panel.js.map +1 -0
  120. package/dist/desktop/renderer/article-split.d.ts +32 -0
  121. package/dist/desktop/renderer/article-split.d.ts.map +1 -0
  122. package/dist/desktop/renderer/article-split.js +48 -0
  123. package/dist/desktop/renderer/article-split.js.map +1 -0
  124. package/dist/desktop/renderer/composer-file-references.d.ts +23 -0
  125. package/dist/desktop/renderer/composer-file-references.d.ts.map +1 -0
  126. package/dist/desktop/renderer/composer-file-references.js +51 -0
  127. package/dist/desktop/renderer/composer-file-references.js.map +1 -0
  128. package/dist/desktop/renderer/conversation.d.ts +23 -0
  129. package/dist/desktop/renderer/conversation.d.ts.map +1 -0
  130. package/dist/desktop/renderer/conversation.js +66 -0
  131. package/dist/desktop/renderer/conversation.js.map +1 -0
  132. package/dist/desktop/renderer/dom-reconcile.d.ts +15 -0
  133. package/dist/desktop/renderer/dom-reconcile.d.ts.map +1 -0
  134. package/dist/desktop/renderer/dom-reconcile.js +33 -0
  135. package/dist/desktop/renderer/dom-reconcile.js.map +1 -0
  136. package/dist/desktop/renderer/index.html +211 -34
  137. package/dist/desktop/renderer/indexing-view.d.ts +22 -0
  138. package/dist/desktop/renderer/indexing-view.d.ts.map +1 -0
  139. package/dist/desktop/renderer/indexing-view.js +115 -0
  140. package/dist/desktop/renderer/indexing-view.js.map +1 -0
  141. package/dist/desktop/renderer/markdown-view.d.ts +23 -0
  142. package/dist/desktop/renderer/markdown-view.d.ts.map +1 -0
  143. package/dist/desktop/renderer/markdown-view.js +436 -0
  144. package/dist/desktop/renderer/markdown-view.js.map +1 -0
  145. package/dist/desktop/renderer/motion.d.ts +67 -0
  146. package/dist/desktop/renderer/motion.d.ts.map +1 -0
  147. package/dist/desktop/renderer/motion.js +296 -0
  148. package/dist/desktop/renderer/motion.js.map +1 -0
  149. package/dist/desktop/renderer/renderer.js +1793 -155
  150. package/dist/desktop/renderer/renderer.js.map +1 -1
  151. package/dist/desktop/renderer/session-find.d.ts +18 -0
  152. package/dist/desktop/renderer/session-find.d.ts.map +1 -0
  153. package/dist/desktop/renderer/session-find.js +29 -0
  154. package/dist/desktop/renderer/session-find.js.map +1 -0
  155. package/dist/desktop/renderer/session-search.d.ts +30 -0
  156. package/dist/desktop/renderer/session-search.d.ts.map +1 -0
  157. package/dist/desktop/renderer/session-search.js +296 -0
  158. package/dist/desktop/renderer/session-search.js.map +1 -0
  159. package/dist/desktop/renderer/store.d.ts +35 -8
  160. package/dist/desktop/renderer/store.d.ts.map +1 -1
  161. package/dist/desktop/renderer/store.js +95 -78
  162. package/dist/desktop/renderer/store.js.map +1 -1
  163. package/dist/desktop/renderer/styles.css +910 -268
  164. package/dist/desktop/renderer/vendor/gsap.min.js +11 -0
  165. package/dist/desktop/renderer-diagnostics.d.ts +5 -0
  166. package/dist/desktop/renderer-diagnostics.d.ts.map +1 -0
  167. package/dist/desktop/renderer-diagnostics.js +47 -0
  168. package/dist/desktop/renderer-diagnostics.js.map +1 -0
  169. package/dist/desktop/security.d.ts +26 -1
  170. package/dist/desktop/security.d.ts.map +1 -1
  171. package/dist/desktop/security.js +26 -6
  172. package/dist/desktop/security.js.map +1 -1
  173. package/dist/desktop/smoke-fixture.d.ts.map +1 -1
  174. package/dist/desktop/smoke-fixture.js +77 -3
  175. package/dist/desktop/smoke-fixture.js.map +1 -1
  176. package/dist/desktop/splash/index.html +25 -0
  177. package/dist/desktop/splash/splash.d.ts +2 -0
  178. package/dist/desktop/splash/splash.d.ts.map +1 -0
  179. package/dist/desktop/splash/splash.js +8 -0
  180. package/dist/desktop/splash/splash.js.map +1 -0
  181. package/dist/desktop/splash/styles.css +24 -0
  182. package/dist/desktop/system-open.d.ts +16 -0
  183. package/dist/desktop/system-open.d.ts.map +1 -0
  184. package/dist/desktop/system-open.js +90 -0
  185. package/dist/desktop/system-open.js.map +1 -0
  186. package/dist/desktop/validation.d.ts.map +1 -1
  187. package/dist/desktop/validation.js +99 -21
  188. package/dist/desktop/validation.js.map +1 -1
  189. package/dist/desktop/window-security.d.ts +4 -0
  190. package/dist/desktop/window-security.d.ts.map +1 -0
  191. package/dist/desktop/window-security.js +26 -0
  192. package/dist/desktop/window-security.js.map +1 -0
  193. package/dist/documents/errors.d.ts +12 -0
  194. package/dist/documents/errors.d.ts.map +1 -0
  195. package/dist/documents/errors.js +12 -0
  196. package/dist/documents/errors.js.map +1 -0
  197. package/dist/documents/extract.d.ts +37 -0
  198. package/dist/documents/extract.d.ts.map +1 -0
  199. package/dist/documents/extract.js +90 -0
  200. package/dist/documents/extract.js.map +1 -0
  201. package/dist/documents/legacy-office.d.ts +23 -0
  202. package/dist/documents/legacy-office.d.ts.map +1 -0
  203. package/dist/documents/legacy-office.js +439 -0
  204. package/dist/documents/legacy-office.js.map +1 -0
  205. package/dist/documents/ole.d.ts +20 -0
  206. package/dist/documents/ole.d.ts.map +1 -0
  207. package/dist/documents/ole.js +189 -0
  208. package/dist/documents/ole.js.map +1 -0
  209. package/dist/documents/ooxml.d.ts +23 -0
  210. package/dist/documents/ooxml.d.ts.map +1 -0
  211. package/dist/documents/ooxml.js +197 -0
  212. package/dist/documents/ooxml.js.map +1 -0
  213. package/dist/documents/pdf.d.ts +20 -0
  214. package/dist/documents/pdf.d.ts.map +1 -0
  215. package/dist/documents/pdf.js +95 -0
  216. package/dist/documents/pdf.js.map +1 -0
  217. package/dist/documents/plain-text.d.ts +22 -0
  218. package/dist/documents/plain-text.d.ts.map +1 -0
  219. package/dist/documents/plain-text.js +57 -0
  220. package/dist/documents/plain-text.js.map +1 -0
  221. package/dist/documents/zip.d.ts +15 -0
  222. package/dist/documents/zip.d.ts.map +1 -0
  223. package/dist/documents/zip.js +137 -0
  224. package/dist/documents/zip.js.map +1 -0
  225. package/dist/domain/indexing.d.ts +60 -0
  226. package/dist/domain/indexing.d.ts.map +1 -0
  227. package/dist/domain/indexing.js +13 -0
  228. package/dist/domain/indexing.js.map +1 -0
  229. package/dist/domain/runtime.d.ts +133 -5
  230. package/dist/domain/runtime.d.ts.map +1 -1
  231. package/dist/gateway/local-gateway.d.ts +8 -0
  232. package/dist/gateway/local-gateway.d.ts.map +1 -1
  233. package/dist/gateway/local-gateway.js +105 -21
  234. package/dist/gateway/local-gateway.js.map +1 -1
  235. package/dist/indexing/index-service.d.ts +56 -0
  236. package/dist/indexing/index-service.d.ts.map +1 -0
  237. package/dist/indexing/index-service.js +262 -0
  238. package/dist/indexing/index-service.js.map +1 -0
  239. package/dist/kernel/loop.d.ts +10 -0
  240. package/dist/kernel/loop.d.ts.map +1 -1
  241. package/dist/kernel/loop.js +6 -2
  242. package/dist/kernel/loop.js.map +1 -1
  243. package/dist/kernel/reducer.d.ts.map +1 -1
  244. package/dist/kernel/reducer.js +17 -1
  245. package/dist/kernel/reducer.js.map +1 -1
  246. package/dist/kernel/state.d.ts +17 -4
  247. package/dist/kernel/state.d.ts.map +1 -1
  248. package/dist/kernel/state.js +2 -0
  249. package/dist/kernel/state.js.map +1 -1
  250. package/dist/memory/memory-tools.d.ts.map +1 -1
  251. package/dist/memory/memory-tools.js +25 -5
  252. package/dist/memory/memory-tools.js.map +1 -1
  253. package/dist/pi/context-budget.d.ts +8 -0
  254. package/dist/pi/context-budget.d.ts.map +1 -0
  255. package/dist/pi/context-budget.js +62 -0
  256. package/dist/pi/context-budget.js.map +1 -0
  257. package/dist/pi/pi-runtime-adapter.d.ts +38 -3
  258. package/dist/pi/pi-runtime-adapter.d.ts.map +1 -1
  259. package/dist/pi/pi-runtime-adapter.js +551 -56
  260. package/dist/pi/pi-runtime-adapter.js.map +1 -1
  261. package/dist/plugins/bundled-skills.d.ts +56 -0
  262. package/dist/plugins/bundled-skills.d.ts.map +1 -0
  263. package/dist/plugins/bundled-skills.js +243 -0
  264. package/dist/plugins/bundled-skills.js.map +1 -0
  265. package/dist/plugins/extension-manager.d.ts +23 -1
  266. package/dist/plugins/extension-manager.d.ts.map +1 -1
  267. package/dist/plugins/extension-manager.js +117 -0
  268. package/dist/plugins/extension-manager.js.map +1 -1
  269. package/dist/plugins/types.d.ts +29 -0
  270. package/dist/plugins/types.d.ts.map +1 -1
  271. package/dist/plugins/workspace-skills.d.ts +36 -0
  272. package/dist/plugins/workspace-skills.d.ts.map +1 -0
  273. package/dist/plugins/workspace-skills.js +309 -0
  274. package/dist/plugins/workspace-skills.js.map +1 -0
  275. package/dist/policy/policy.d.ts.map +1 -1
  276. package/dist/policy/policy.js +26 -4
  277. package/dist/policy/policy.js.map +1 -1
  278. package/dist/protocol/client.d.ts +1 -0
  279. package/dist/protocol/client.d.ts.map +1 -1
  280. package/dist/protocol/client.js +49 -24
  281. package/dist/protocol/client.js.map +1 -1
  282. package/dist/protocol/limits.d.ts +69 -0
  283. package/dist/protocol/limits.d.ts.map +1 -0
  284. package/dist/protocol/limits.js +166 -0
  285. package/dist/protocol/limits.js.map +1 -0
  286. package/dist/protocol/schema.d.ts +6 -0
  287. package/dist/protocol/schema.d.ts.map +1 -1
  288. package/dist/protocol/schema.js.map +1 -1
  289. package/dist/protocol/server-frame-codec.d.ts +18 -0
  290. package/dist/protocol/server-frame-codec.d.ts.map +1 -0
  291. package/dist/protocol/server-frame-codec.js +211 -0
  292. package/dist/protocol/server-frame-codec.js.map +1 -0
  293. package/dist/service/legacy-daemon.d.ts +6 -0
  294. package/dist/service/legacy-daemon.d.ts.map +1 -0
  295. package/dist/service/legacy-daemon.js +42 -0
  296. package/dist/service/legacy-daemon.js.map +1 -0
  297. package/dist/service/service-launch.d.ts +10 -0
  298. package/dist/service/service-launch.d.ts.map +1 -0
  299. package/dist/service/service-launch.js +56 -0
  300. package/dist/service/service-launch.js.map +1 -0
  301. package/dist/service/system-service.d.ts +57 -0
  302. package/dist/service/system-service.d.ts.map +1 -0
  303. package/dist/service/system-service.js +263 -0
  304. package/dist/service/system-service.js.map +1 -0
  305. package/dist/sessions/session-catalog.d.ts +45 -0
  306. package/dist/sessions/session-catalog.d.ts.map +1 -0
  307. package/dist/sessions/session-catalog.js +270 -0
  308. package/dist/sessions/session-catalog.js.map +1 -0
  309. package/dist/sessions/session-file.d.ts +12 -0
  310. package/dist/sessions/session-file.d.ts.map +1 -0
  311. package/dist/sessions/session-file.js +47 -0
  312. package/dist/sessions/session-file.js.map +1 -0
  313. package/dist/settings/compaction-settings.d.ts +10 -0
  314. package/dist/settings/compaction-settings.d.ts.map +1 -0
  315. package/dist/settings/compaction-settings.js +8 -0
  316. package/dist/settings/compaction-settings.js.map +1 -0
  317. package/dist/settings/indexing-settings-service.d.ts +16 -0
  318. package/dist/settings/indexing-settings-service.d.ts.map +1 -0
  319. package/dist/settings/indexing-settings-service.js +57 -0
  320. package/dist/settings/indexing-settings-service.js.map +1 -0
  321. package/dist/settings/indexing-settings.d.ts +30 -0
  322. package/dist/settings/indexing-settings.d.ts.map +1 -0
  323. package/dist/settings/indexing-settings.js +58 -0
  324. package/dist/settings/indexing-settings.js.map +1 -0
  325. package/dist/settings/llm-settings-service.d.ts +6 -0
  326. package/dist/settings/llm-settings-service.d.ts.map +1 -1
  327. package/dist/settings/llm-settings-service.js +137 -12
  328. package/dist/settings/llm-settings-service.js.map +1 -1
  329. package/dist/settings/llm-settings.d.ts +68 -2
  330. package/dist/settings/llm-settings.d.ts.map +1 -1
  331. package/dist/settings/llm-settings.js +119 -17
  332. package/dist/settings/llm-settings.js.map +1 -1
  333. package/dist/settings/model-api.d.ts +10 -0
  334. package/dist/settings/model-api.d.ts.map +1 -0
  335. package/dist/settings/model-api.js +10 -0
  336. package/dist/settings/model-api.js.map +1 -0
  337. package/dist/storage/home.d.ts +1 -0
  338. package/dist/storage/home.d.ts.map +1 -1
  339. package/dist/storage/home.js +37 -2
  340. package/dist/storage/home.js.map +1 -1
  341. package/dist/tools/core-tools.d.ts +2 -0
  342. package/dist/tools/core-tools.d.ts.map +1 -1
  343. package/dist/tools/core-tools.js +91 -1
  344. package/dist/tools/core-tools.js.map +1 -1
  345. package/dist/ui/shared/activity.d.ts +27 -0
  346. package/dist/ui/shared/activity.d.ts.map +1 -0
  347. package/dist/ui/shared/activity.js +384 -0
  348. package/dist/ui/shared/activity.js.map +1 -0
  349. package/dist/ui/shared/full-message.d.ts +22 -0
  350. package/dist/ui/shared/full-message.d.ts.map +1 -0
  351. package/dist/ui/shared/full-message.js +40 -0
  352. package/dist/ui/shared/full-message.js.map +1 -0
  353. package/dist/ui/shared/local-links.d.ts +7 -0
  354. package/dist/ui/shared/local-links.d.ts.map +1 -0
  355. package/dist/ui/shared/local-links.js +24 -0
  356. package/dist/ui/shared/local-links.js.map +1 -0
  357. package/dist/ui/shared/markdown-stream.d.ts +25 -0
  358. package/dist/ui/shared/markdown-stream.d.ts.map +1 -0
  359. package/dist/ui/shared/markdown-stream.js +35 -0
  360. package/dist/ui/shared/markdown-stream.js.map +1 -0
  361. package/dist/ui/shared/markdown.d.ts +70 -0
  362. package/dist/ui/shared/markdown.d.ts.map +1 -0
  363. package/dist/ui/shared/markdown.js +434 -0
  364. package/dist/ui/shared/markdown.js.map +1 -0
  365. package/dist/ui/shared/presentation.d.ts +10 -2
  366. package/dist/ui/shared/presentation.d.ts.map +1 -1
  367. package/dist/ui/shared/presentation.js +83 -22
  368. package/dist/ui/shared/presentation.js.map +1 -1
  369. package/dist/ui/shared/protocol-state.d.ts +19 -0
  370. package/dist/ui/shared/protocol-state.d.ts.map +1 -1
  371. package/dist/ui/shared/protocol-state.js +188 -26
  372. package/dist/ui/shared/protocol-state.js.map +1 -1
  373. package/dist/ui/shared/virtual-list.d.ts +34 -0
  374. package/dist/ui/shared/virtual-list.d.ts.map +1 -0
  375. package/dist/ui/shared/virtual-list.js +143 -0
  376. package/dist/ui/shared/virtual-list.js.map +1 -0
  377. package/dist/ui/tui/commands.d.ts +1 -1
  378. package/dist/ui/tui/commands.d.ts.map +1 -1
  379. package/dist/ui/tui/commands.js +9 -3
  380. package/dist/ui/tui/commands.js.map +1 -1
  381. package/dist/ui/tui/store.d.ts +26 -0
  382. package/dist/ui/tui/store.d.ts.map +1 -1
  383. package/dist/ui/tui/store.js +67 -3
  384. package/dist/ui/tui/store.js.map +1 -1
  385. package/dist/ui/tui/tui-app.d.ts.map +1 -1
  386. package/dist/ui/tui/tui-app.js +316 -38
  387. package/dist/ui/tui/tui-app.js.map +1 -1
  388. package/dist/ui/tui/view.d.ts +10 -0
  389. package/dist/ui/tui/view.d.ts.map +1 -1
  390. package/dist/ui/tui/view.js +253 -49
  391. package/dist/ui/tui/view.js.map +1 -1
  392. package/dist/version.d.ts +1 -1
  393. package/dist/version.d.ts.map +1 -1
  394. package/dist/version.js +1 -1
  395. package/dist/version.js.map +1 -1
  396. package/package.json +13 -2
@@ -2,7 +2,25 @@ import { randomUUID } from "node:crypto";
2
2
  import { chmod, lstat, unlink } from "node:fs/promises";
3
3
  import { createServer } from "node:net";
4
4
  import { CommandError } from "../protocol/errors.js";
5
+ import { boundPublishedValue, measurePublishedValue } from "../protocol/limits.js";
6
+ import { DEFAULT_MAX_SERVER_MESSAGE_BYTES, encodeServerFrame, SERVER_FRAME_CHUNKS_CAPABILITY, } from "../protocol/server-frame-codec.js";
5
7
  import { decodeClientFrame, DEFAULT_MAX_FRAME_BYTES, encodeFrame, PROTOCOL_VERSION, ProtocolError, toEventEnvelope, } from "../protocol/schema.js";
8
+ /**
9
+ * Long agent runs push far more through a connection than an idle session does,
10
+ * and a client that is busy rendering can legitimately fall a few megabytes
11
+ * behind. Dropping it at that point is what surfaced as "lost connection" in
12
+ * the middle of a task, so the ceiling is generous enough that only a client
13
+ * which has genuinely stopped reading reaches it.
14
+ */
15
+ const DEFAULT_MAX_OUTGOING_BYTES = 64 * 1_048_576;
16
+ /**
17
+ * Durable events carry session snapshots, so a replay window counted only in
18
+ * events retains one transcript copy per entry — hundreds of megabytes over a
19
+ * long run. A reconnecting client whose cursor falls outside the window simply
20
+ * takes the authoritative snapshot from the handshake instead, so trading
21
+ * replay depth for bounded memory costs nothing but a little extra traffic.
22
+ */
23
+ const DEFAULT_MAX_REPLAY_BYTES = 16 * 1_048_576;
6
24
  export class LocalGateway {
7
25
  #socketPath;
8
26
  #instanceId;
@@ -13,9 +31,14 @@ export class LocalGateway {
13
31
  #commandCacheCapacity;
14
32
  #maxFrameBytes;
15
33
  #maxPendingBytes;
34
+ #maxOutgoingBytes;
35
+ #maxServerMessageBytes;
36
+ #maxReplayBytes;
16
37
  #idFactory;
38
+ #onWarning;
17
39
  #connections = new Set();
18
40
  #replay = [];
41
+ #replayBytes = 0;
19
42
  #commandCache = new Map();
20
43
  #server;
21
44
  #seq = 0;
@@ -29,7 +52,11 @@ export class LocalGateway {
29
52
  this.#commandCacheCapacity = options.commandCacheCapacity ?? 2_048;
30
53
  this.#maxFrameBytes = options.maxFrameBytes ?? DEFAULT_MAX_FRAME_BYTES;
31
54
  this.#maxPendingBytes = options.maxPendingBytes ?? this.#maxFrameBytes * 2;
55
+ this.#maxOutgoingBytes = options.maxOutgoingBytes ?? DEFAULT_MAX_OUTGOING_BYTES;
56
+ this.#maxServerMessageBytes = options.maxServerMessageBytes ?? DEFAULT_MAX_SERVER_MESSAGE_BYTES;
57
+ this.#maxReplayBytes = options.maxReplayBytes ?? DEFAULT_MAX_REPLAY_BYTES;
32
58
  this.#idFactory = options.idFactory ?? randomUUID;
59
+ this.#onWarning = options.onWarning ?? (() => undefined);
33
60
  }
34
61
  get latestSeq() {
35
62
  return this.#seq;
@@ -63,17 +90,19 @@ export class LocalGateway {
63
90
  }
64
91
  }
65
92
  publish(event) {
66
- const envelope = toEventEnvelope(event, this.#streamId, ++this.#seq);
93
+ const bounded = measurePublishedValue(event.payload);
94
+ const envelope = toEventEnvelope({ ...event, payload: bounded.value }, this.#streamId, ++this.#seq);
67
95
  if (event.durable) {
68
- this.#replay.push(envelope);
69
- if (this.#replay.length > this.#replayCapacity)
70
- this.#replay.shift();
96
+ this.#replay.push({ envelope, cost: bounded.cost });
97
+ this.#replayBytes += bounded.cost;
98
+ while (this.#replay.length > this.#replayCapacity
99
+ || (this.#replayBytes > this.#maxReplayBytes && this.#replay.length > 1)) {
100
+ this.#replayBytes -= this.#replay.shift()?.cost ?? 0;
101
+ }
71
102
  }
72
103
  for (const connection of this.#connections) {
73
104
  if (!connection.authenticated)
74
105
  continue;
75
- if (!event.durable && connection.socket.writableNeedDrain)
76
- continue;
77
106
  this.#write(connection, envelope);
78
107
  }
79
108
  return envelope;
@@ -103,8 +132,11 @@ export class LocalGateway {
103
132
  authenticated: false,
104
133
  clientId: undefined,
105
134
  pending: Buffer.alloc(0),
135
+ scanned: 0,
106
136
  processing: Promise.resolve(),
137
+ supportsServerFrameChunks: false,
107
138
  failed: false,
139
+ skippedEvents: 0,
108
140
  };
109
141
  this.#connections.add(connection);
110
142
  socket.on("data", (chunk) => this.#receive(connection, chunk));
@@ -115,20 +147,26 @@ export class LocalGateway {
115
147
  if (connection.failed)
116
148
  return;
117
149
  connection.pending = Buffer.concat([connection.pending, chunk]);
118
- if (connection.pending.byteLength > this.#maxPendingBytes) {
119
- this.#protocolFailure(connection, new ProtocolError("pending_bytes_exceeded", "Connection input buffer exceeded"));
120
- return;
121
- }
122
150
  for (;;) {
123
- const delimiter = connection.pending.indexOf(0x0a);
124
- if (delimiter < 0)
151
+ // Rescanning from byte zero on every read makes a large frame that
152
+ // arrives in many small reads quadratic, which is exactly the shape of a
153
+ // long run's traffic. Only the bytes that just arrived need scanning.
154
+ const delimiter = connection.pending.indexOf(0x0a, connection.scanned);
155
+ if (delimiter < 0) {
156
+ connection.scanned = connection.pending.byteLength;
125
157
  break;
158
+ }
126
159
  const line = connection.pending.subarray(0, delimiter);
127
160
  connection.pending = connection.pending.subarray(delimiter + 1);
161
+ connection.scanned = 0;
128
162
  connection.processing = connection.processing
129
163
  .then(async () => this.#handleFrame(connection, line))
130
164
  .catch((error) => this.#protocolFailure(connection, normalizeProtocolError(error)));
131
165
  }
166
+ if (connection.pending.byteLength > this.#maxPendingBytes) {
167
+ this.#protocolFailure(connection, new ProtocolError("pending_bytes_exceeded", "Connection input buffer exceeded"));
168
+ return;
169
+ }
132
170
  if (connection.pending.byteLength > this.#maxFrameBytes) {
133
171
  this.#protocolFailure(connection, new ProtocolError("frame_too_large", "Protocol frame exceeded limit"));
134
172
  }
@@ -153,8 +191,9 @@ export class LocalGateway {
153
191
  #hello(connection, hello) {
154
192
  connection.authenticated = true;
155
193
  connection.clientId = hello.clientId;
194
+ connection.supportsServerFrameChunks = hello.capabilities.includes(SERVER_FRAME_CHUNKS_CAPABILITY);
156
195
  const cursor = hello.cursors[this.#streamId] ?? 0;
157
- const oldest = this.#replay[0]?.seq ?? this.#seq + 1;
196
+ const oldest = this.#replay[0]?.envelope.seq ?? this.#seq + 1;
158
197
  const acknowledgement = {
159
198
  v: PROTOCOL_VERSION,
160
199
  kind: "hello_ack",
@@ -164,13 +203,16 @@ export class LocalGateway {
164
203
  streamId: this.#streamId,
165
204
  latestSeq: this.#seq,
166
205
  replayFromSeq: oldest,
167
- snapshot: this.#snapshot(),
206
+ // An unbounded snapshot is the one frame a client can never skip: it
207
+ // rides on every reconnect, so a client that rejects it once rejects it
208
+ // forever. Bounding it here keeps a huge session recoverable.
209
+ snapshot: boundPublishedValue(this.#snapshot()),
168
210
  };
169
211
  this.#write(connection, acknowledgement);
170
212
  if (cursor >= oldest - 1) {
171
- for (const event of this.#replay) {
172
- if (event.seq > cursor)
173
- this.#write(connection, event);
213
+ for (const entry of this.#replay) {
214
+ if (entry.envelope.seq > cursor)
215
+ this.#write(connection, entry.envelope);
174
216
  }
175
217
  }
176
218
  }
@@ -195,7 +237,7 @@ export class LocalGateway {
195
237
  id: this.#idFactory(),
196
238
  commandId: command.id,
197
239
  ok: true,
198
- payload,
240
+ payload: boundPublishedValue(payload),
199
241
  };
200
242
  }
201
243
  catch (error) {
@@ -227,11 +269,53 @@ export class LocalGateway {
227
269
  #write(connection, frame) {
228
270
  if (connection.socket.destroyed)
229
271
  return;
230
- if (connection.socket.writableLength > this.#maxPendingBytes) {
231
- connection.socket.destroy(new Error("Protocol client is too slow"));
272
+ const transient = frame.kind === "event" && !frame.durable;
273
+ // Transient frames are droppable by design; a client that cannot keep up sheds
274
+ // them rather than being torn down, which is what used to make long runs
275
+ // flap between connected and reconnecting.
276
+ if (transient && connection.socket.writableNeedDrain) {
277
+ connection.skippedEvents += 1;
278
+ return;
279
+ }
280
+ if (connection.socket.writableLength > this.#maxOutgoingBytes) {
281
+ if (transient) {
282
+ connection.skippedEvents += 1;
283
+ return;
284
+ }
285
+ this.#drop(connection, `client ${connection.clientId ?? "unknown"} stopped reading with `
286
+ + `${connection.socket.writableLength} bytes queued`);
287
+ return;
288
+ }
289
+ // Only an event can carry the pending skip count forward, so hello and
290
+ // response frames must leave it untouched: clearing it there would strand
291
+ // the client behind the sequence with nothing to explain the jump.
292
+ const carriesSkip = frame.kind === "event" && connection.skippedEvents > 0;
293
+ const outgoing = carriesSkip ? { ...frame, skipped: connection.skippedEvents } : frame;
294
+ let encoded;
295
+ try {
296
+ encoded = connection.supportsServerFrameChunks
297
+ ? encodeServerFrame(outgoing, {
298
+ maxFrameBytes: this.#maxFrameBytes,
299
+ maxMessageBytes: this.#maxServerMessageBytes,
300
+ idFactory: this.#idFactory,
301
+ })
302
+ : [encodeFrame(outgoing)];
303
+ }
304
+ catch (error) {
305
+ // Encoding is per connection, but a failure here means this frame can
306
+ // never reach this client. Dropping only the connection keeps the rest of
307
+ // the broadcast — and the daemon — intact.
308
+ this.#drop(connection, `frame ${frame.kind} could not be encoded: ${toError(error).message}`);
232
309
  return;
233
310
  }
234
- connection.socket.write(encodeFrame(frame));
311
+ for (const chunk of encoded)
312
+ connection.socket.write(chunk);
313
+ if (frame.kind === "event")
314
+ connection.skippedEvents = 0;
315
+ }
316
+ #drop(connection, reason) {
317
+ this.#onWarning(`Dropped protocol connection: ${reason}`);
318
+ connection.socket.destroy(new Error(reason));
235
319
  }
236
320
  #protocolFailure(connection, error) {
237
321
  if (connection.failed || connection.socket.destroyed)
@@ -1 +1 @@
1
- {"version":3,"file":"local-gateway.js","sourceRoot":"","sources":["../../src/gateway/local-gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-gateway.js","sourceRoot":"","sources":["../../src/gateway/local-gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { ChildProcess } from "node:child_process";
2
+ import type { Readable } from "node:stream";
3
+ import { type IndexingStatus } from "../domain/indexing.js";
4
+ export { initialIndexingStatus } from "../domain/indexing.js";
5
+ export type { IndexingPassSummary, IndexingPhase, IndexingStatus } from "../domain/indexing.js";
6
+ /**
7
+ * Drives the bundled `aegis-search` CLI so the local full-text index stays
8
+ * current while the daemon runs. The CLI writes the same index directory the
9
+ * Aegis Searcher desktop application uses, so an interactive search sees
10
+ * everything the daemon has indexed and vice versa.
11
+ *
12
+ * Indexing is incremental: the CLI skips files whose mtime and size are
13
+ * unchanged, so a pass over an already-indexed tree is cheap.
14
+ *
15
+ * This module reaches for the filesystem and spawns a process, so nothing the
16
+ * sandboxed renderer imports may import it; the status shape it publishes lives
17
+ * in `domain/indexing.ts` for exactly that reason.
18
+ */
19
+ /** The subset of a spawned indexer this service actually reads. */
20
+ export interface IndexerProcess extends ChildProcess {
21
+ stdout: Readable;
22
+ stderr: Readable;
23
+ }
24
+ export interface IndexServiceOptions {
25
+ /** Absolute path of the `aegis-search` binary, usually inside the bundled skill. */
26
+ binaryPath: string;
27
+ directories: readonly string[];
28
+ extensions: readonly string[];
29
+ intervalMs: number;
30
+ enabled: boolean;
31
+ onStatus: (status: IndexingStatus) => void;
32
+ clock?: () => Date;
33
+ /** Injected for tests so a pass can be driven without a real binary. */
34
+ spawnProcess?: (command: string, args: readonly string[]) => IndexerProcess;
35
+ }
36
+ export declare class IndexService {
37
+ #private;
38
+ constructor(options: IndexServiceOptions);
39
+ status(): IndexingStatus;
40
+ /**
41
+ * Begins periodic indexing. Returns once the service knows whether it can run;
42
+ * the first pass proceeds in the background so daemon startup is never blocked
43
+ * behind a filesystem walk.
44
+ */
45
+ start(): Promise<void>;
46
+ /**
47
+ * Runs a pass now and resolves when it ends. Going through the timer would
48
+ * return before the pass had even been created, so the pass is started here
49
+ * directly; a pass already in flight is awaited rather than duplicated.
50
+ */
51
+ runNow(): Promise<void>;
52
+ stop(): Promise<void>;
53
+ }
54
+ /** Path of the indexing binary shipped inside a bundled skill directory. */
55
+ export declare function bundledIndexerPath(skillPath: string): string;
56
+ //# sourceMappingURL=index-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-service.d.ts","sourceRoot":"","sources":["../../src/indexing/index-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEhG;;;;;;;;;;;;GAYG;AACH,mEAAmE;AACnE,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,wEAAwE;IACxE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,cAAc,CAAC;CAC7E;AAED,qBAAa,YAAY;;gBAWX,OAAO,EAAE,mBAAmB;IAOxC,MAAM,IAAI,cAAc;IAIxB;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC5B;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAavB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA2K5B;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,262 @@
1
+ import { spawn } from "node:child_process";
2
+ import { access, constants } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { initialIndexingStatus } from "../domain/indexing.js";
5
+ export { initialIndexingStatus } from "../domain/indexing.js";
6
+ export class IndexService {
7
+ #options;
8
+ #clock;
9
+ #spawn;
10
+ #status = initialIndexingStatus();
11
+ #timer;
12
+ #child;
13
+ #running = false;
14
+ #stopped = false;
15
+ #pass = Promise.resolve();
16
+ constructor(options) {
17
+ this.#options = options;
18
+ this.#clock = options.clock ?? (() => new Date());
19
+ this.#spawn = options.spawnProcess
20
+ ?? ((command, args) => spawn(command, [...args], { stdio: ["ignore", "pipe", "pipe"] }));
21
+ }
22
+ status() {
23
+ return structuredClone(this.#status);
24
+ }
25
+ /**
26
+ * Begins periodic indexing. Returns once the service knows whether it can run;
27
+ * the first pass proceeds in the background so daemon startup is never blocked
28
+ * behind a filesystem walk.
29
+ */
30
+ async start() {
31
+ if (!this.#options.enabled) {
32
+ this.#emit({ ...initialIndexingStatus(), phase: "disabled", directories: [...this.#options.directories] });
33
+ return;
34
+ }
35
+ // Every path below is reached with indexing switched on, so `enabled` stays
36
+ // true and the phase says why a switched-on indexer is not making progress.
37
+ // Reporting all three as `disabled` made the settings panel and the status
38
+ // panel contradict each other.
39
+ if (this.#options.directories.length === 0) {
40
+ this.#emit({
41
+ ...initialIndexingStatus(),
42
+ enabled: true,
43
+ phase: "unconfigured",
44
+ message: "本机索引已启用,但还没有选择要索引的目录",
45
+ });
46
+ return;
47
+ }
48
+ if (!(await this.#binaryAvailable())) {
49
+ this.#emit({
50
+ ...initialIndexingStatus(),
51
+ enabled: true,
52
+ phase: "unavailable",
53
+ directories: [...this.#options.directories],
54
+ message: `未找到索引程序: ${this.#options.binaryPath}`,
55
+ });
56
+ return;
57
+ }
58
+ this.#emit({
59
+ ...initialIndexingStatus(),
60
+ enabled: true,
61
+ phase: "idle",
62
+ directories: [...this.#options.directories],
63
+ });
64
+ this.#schedule(0);
65
+ }
66
+ /**
67
+ * Runs a pass now and resolves when it ends. Going through the timer would
68
+ * return before the pass had even been created, so the pass is started here
69
+ * directly; a pass already in flight is awaited rather than duplicated.
70
+ */
71
+ async runNow() {
72
+ if (this.#running) {
73
+ await this.#pass.catch(() => undefined);
74
+ return;
75
+ }
76
+ if (this.#timer) {
77
+ clearTimeout(this.#timer);
78
+ this.#timer = undefined;
79
+ }
80
+ this.#pass = this.#runPass();
81
+ await this.#pass.catch(() => undefined);
82
+ }
83
+ async stop() {
84
+ this.#stopped = true;
85
+ if (this.#timer) {
86
+ clearTimeout(this.#timer);
87
+ this.#timer = undefined;
88
+ }
89
+ this.#child?.kill("SIGTERM");
90
+ await this.#pass.catch(() => undefined);
91
+ }
92
+ async #binaryAvailable() {
93
+ try {
94
+ await access(this.#options.binaryPath, constants.X_OK);
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ #schedule(delayMs) {
102
+ if (this.#stopped || this.#timer)
103
+ return;
104
+ this.#timer = setTimeout(() => {
105
+ this.#timer = undefined;
106
+ this.#pass = this.#runPass().catch(() => undefined);
107
+ }, delayMs);
108
+ this.#timer.unref();
109
+ }
110
+ async #runPass() {
111
+ if (this.#stopped || this.#running)
112
+ return;
113
+ this.#running = true;
114
+ const startedAt = this.#clock().toISOString();
115
+ const fresh = {
116
+ ...this.#status,
117
+ phase: "scanning",
118
+ total: 0,
119
+ processed: 0,
120
+ failed: 0,
121
+ skipped: 0,
122
+ startedAt,
123
+ };
124
+ // A new pass starts with no current file rather than the previous one's;
125
+ // `lastPass` stays, so the index remains visibly usable while it rescans.
126
+ delete fresh.currentFile;
127
+ delete fresh.message;
128
+ delete fresh.finishedAt;
129
+ this.#emit(fresh);
130
+ try {
131
+ await this.#spawnPass();
132
+ }
133
+ catch (error) {
134
+ this.#emit({
135
+ ...this.#status,
136
+ phase: "failed",
137
+ finishedAt: this.#clock().toISOString(),
138
+ message: error instanceof Error ? error.message : String(error),
139
+ });
140
+ }
141
+ finally {
142
+ this.#running = false;
143
+ this.#child = undefined;
144
+ if (!this.#stopped) {
145
+ const nextRunAt = new Date(this.#clock().getTime() + this.#options.intervalMs).toISOString();
146
+ this.#emit({ ...this.#status, nextRunAt });
147
+ this.#schedule(this.#options.intervalMs);
148
+ }
149
+ }
150
+ }
151
+ #spawnPass() {
152
+ const args = [
153
+ "index",
154
+ ...this.#options.directories,
155
+ "--json",
156
+ ...(this.#options.extensions.length > 0 ? ["--ext", this.#options.extensions.join(",")] : []),
157
+ ];
158
+ const child = this.#spawn(this.#options.binaryPath, args);
159
+ this.#child = child;
160
+ return new Promise((resolve, reject) => {
161
+ let stdout = "";
162
+ let stderr = "";
163
+ child.stdout.setEncoding("utf8");
164
+ child.stderr.setEncoding("utf8");
165
+ child.stdout.on("data", (chunk) => {
166
+ stdout += chunk;
167
+ // The CLI emits one JSON object per line; partial trailing lines wait.
168
+ let newline = stdout.indexOf("\n");
169
+ while (newline >= 0) {
170
+ this.#consume(stdout.slice(0, newline));
171
+ stdout = stdout.slice(newline + 1);
172
+ newline = stdout.indexOf("\n");
173
+ }
174
+ });
175
+ child.stderr.on("data", (chunk) => {
176
+ // Keep only the tail: a failing pass should not buffer unbounded output.
177
+ stderr = `${stderr}${chunk}`.slice(-4_096);
178
+ });
179
+ child.on("error", reject);
180
+ child.on("close", (code, signal) => {
181
+ if (signal || this.#stopped) {
182
+ resolve();
183
+ return;
184
+ }
185
+ if (code === 0) {
186
+ // Normally the `done` record has already ended the pass; a CLI that
187
+ // exits cleanly without one still gets its pass recorded.
188
+ const alreadyCompleted = this.#status.phase === "idle" && this.#status.finishedAt !== undefined;
189
+ if (!alreadyCompleted)
190
+ this.#emit(this.#completed(this.#status));
191
+ resolve();
192
+ return;
193
+ }
194
+ reject(new Error(stderr.trim() || `索引进程退出码 ${String(code)}`));
195
+ });
196
+ });
197
+ }
198
+ #consume(line) {
199
+ const trimmed = line.trim();
200
+ if (!trimmed.startsWith("{"))
201
+ return;
202
+ let parsed;
203
+ try {
204
+ parsed = JSON.parse(trimmed);
205
+ }
206
+ catch {
207
+ return;
208
+ }
209
+ if (typeof parsed !== "object" || parsed === null)
210
+ return;
211
+ const record = parsed;
212
+ const type = record["type"];
213
+ if (type !== "progress" && type !== "done")
214
+ return;
215
+ const status = record["status"];
216
+ const next = {
217
+ ...this.#status,
218
+ // The CLI's own `progress`/`done` status arrives just before the `done`
219
+ // record; it is still part of the pass, so it must not end it early.
220
+ phase: status === "scanning" ? "scanning" : status === "comparing" ? "comparing" : "indexing",
221
+ total: numeric(record["total"], this.#status.total),
222
+ processed: numeric(record["processed"], this.#status.processed),
223
+ failed: numeric(record["failed"], this.#status.failed),
224
+ skipped: numeric(record["skipped"], this.#status.skipped),
225
+ ...(typeof record["currentFile"] === "string" && record["currentFile"]
226
+ ? { currentFile: record["currentFile"] }
227
+ : {}),
228
+ };
229
+ this.#emit(type === "done" ? this.#completed(next) : next);
230
+ }
231
+ /** Ends a pass as idle and keeps its result for the passes that follow. */
232
+ #completed(status) {
233
+ const finishedAt = this.#clock().toISOString();
234
+ const started = status.startedAt ? Date.parse(status.startedAt) : Number.NaN;
235
+ const next = {
236
+ ...status,
237
+ phase: "idle",
238
+ finishedAt,
239
+ lastPass: {
240
+ finishedAt,
241
+ durationMs: Number.isFinite(started) ? Math.max(0, Date.parse(finishedAt) - started) : 0,
242
+ processed: status.processed,
243
+ skipped: status.skipped,
244
+ failed: status.failed,
245
+ },
246
+ };
247
+ delete next.currentFile;
248
+ return next;
249
+ }
250
+ #emit(status) {
251
+ this.#status = status;
252
+ this.#options.onStatus(structuredClone(status));
253
+ }
254
+ }
255
+ /** Path of the indexing binary shipped inside a bundled skill directory. */
256
+ export function bundledIndexerPath(skillPath) {
257
+ return join(skillPath, "bin", "aegis-search");
258
+ }
259
+ function numeric(value, fallback) {
260
+ return typeof value === "number" && Number.isFinite(value) ? value : fallback;
261
+ }
262
+ //# sourceMappingURL=index-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-service.js","sourceRoot":"","sources":["../../src/indexing/index-service.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,19 @@
1
1
  import { type KernelEffect, type KernelEvent, type KernelState } from "./state.js";
2
+ /**
3
+ * Receives the state that produced `effect`. Kernel state is immutable by
4
+ * construction — every reducer branch rebuilds the parts it changes — so the
5
+ * value is shared rather than copied and must never be mutated. Copying it per
6
+ * event meant deep-cloning every session transcript for every streamed token.
7
+ */
2
8
  export type KernelEffectRunner = (effect: KernelEffect, state: KernelState) => void | Promise<void>;
3
9
  export declare class KernelLoop {
4
10
  #private;
5
11
  constructor(effectRunner: KernelEffectRunner, state?: KernelState);
6
12
  snapshot(): KernelState;
13
+ /**
14
+ * Commits `event` and resolves with the resulting state. Like the effect
15
+ * runner's argument, that state is shared and must be treated as read-only.
16
+ */
7
17
  dispatch(event: KernelEvent): Promise<KernelState>;
8
18
  idle(): Promise<void>;
9
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/kernel/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvG,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpG,qBAAa,UAAU;;gBAMT,YAAY,EAAE,kBAAkB,EAAE,KAAK,cAAuB;IAK1E,QAAQ,IAAI,WAAW;IAIvB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAc5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAe5B"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/kernel/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvG;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpG,qBAAa,UAAU;;gBAMT,YAAY,EAAE,kBAAkB,EAAE,KAAK,cAAuB;IAK1E,QAAQ,IAAI,WAAW;IAIvB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAc5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAe5B"}