p-spore 0.1.4 → 0.1.43

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 (394) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +242 -67
  3. package/dist/agents/agent-manager.d.ts +3 -3
  4. package/dist/agents/agent-manager.d.ts.map +1 -1
  5. package/dist/agents/agent-manager.js +3 -2
  6. package/dist/agents/agent-manager.js.map +1 -1
  7. package/dist/application/agent-application.d.ts +29 -5
  8. package/dist/application/agent-application.d.ts.map +1 -1
  9. package/dist/application/agent-application.js +444 -14
  10. package/dist/application/agent-application.js.map +1 -1
  11. package/dist/articles/diff.d.ts +70 -0
  12. package/dist/articles/diff.d.ts.map +1 -0
  13. package/dist/articles/diff.js +330 -0
  14. package/dist/articles/diff.js.map +1 -0
  15. package/dist/articles/docx.d.ts +10 -0
  16. package/dist/articles/docx.d.ts.map +1 -0
  17. package/dist/articles/docx.js +219 -0
  18. package/dist/articles/docx.js.map +1 -0
  19. package/dist/articles/draft.d.ts +18 -0
  20. package/dist/articles/draft.d.ts.map +1 -0
  21. package/dist/articles/draft.js +88 -0
  22. package/dist/articles/draft.js.map +1 -0
  23. package/dist/articles/edits.d.ts +24 -0
  24. package/dist/articles/edits.d.ts.map +1 -0
  25. package/dist/articles/edits.js +54 -0
  26. package/dist/articles/edits.js.map +1 -0
  27. package/dist/articles/html.d.ts +10 -0
  28. package/dist/articles/html.d.ts.map +1 -0
  29. package/dist/articles/html.js +122 -0
  30. package/dist/articles/html.js.map +1 -0
  31. package/dist/articles/plain.d.ts +8 -0
  32. package/dist/articles/plain.d.ts.map +1 -0
  33. package/dist/articles/plain.js +69 -0
  34. package/dist/articles/plain.js.map +1 -0
  35. package/dist/articles/preview.d.ts +43 -0
  36. package/dist/articles/preview.d.ts.map +1 -0
  37. package/dist/articles/preview.js +90 -0
  38. package/dist/articles/preview.js.map +1 -0
  39. package/dist/articles/publish.d.ts +10 -0
  40. package/dist/articles/publish.d.ts.map +1 -0
  41. package/dist/articles/publish.js +54 -0
  42. package/dist/articles/publish.js.map +1 -0
  43. package/dist/articles/receipt.d.ts +16 -0
  44. package/dist/articles/receipt.d.ts.map +1 -0
  45. package/dist/articles/receipt.js +27 -0
  46. package/dist/articles/receipt.js.map +1 -0
  47. package/dist/articles/store.d.ts +78 -0
  48. package/dist/articles/store.d.ts.map +1 -0
  49. package/dist/articles/store.js +308 -0
  50. package/dist/articles/store.js.map +1 -0
  51. package/dist/articles/tool.d.ts +14 -0
  52. package/dist/articles/tool.d.ts.map +1 -0
  53. package/dist/articles/tool.js +175 -0
  54. package/dist/articles/tool.js.map +1 -0
  55. package/dist/articles/writer-context.d.ts +5 -0
  56. package/dist/articles/writer-context.d.ts.map +1 -0
  57. package/dist/articles/writer-context.js +56 -0
  58. package/dist/articles/writer-context.js.map +1 -0
  59. package/dist/articles/writer.d.ts +18 -0
  60. package/dist/articles/writer.d.ts.map +1 -0
  61. package/dist/articles/writer.js +79 -0
  62. package/dist/articles/writer.js.map +1 -0
  63. package/dist/articles/zip-write.d.ts +11 -0
  64. package/dist/articles/zip-write.d.ts.map +1 -0
  65. package/dist/articles/zip-write.js +63 -0
  66. package/dist/articles/zip-write.js.map +1 -0
  67. package/dist/bundled-skills/README.md +17 -0
  68. package/dist/bundled-skills/aegis-search/SKILL.md +59 -0
  69. package/dist/bundled-skills/aegis-search/bin/.gitkeep +0 -0
  70. package/dist/bundled-skills/article-canvas/SKILL.md +28 -0
  71. package/dist/bundled-skills/binaries.json +23 -0
  72. package/dist/bundled-skills/doc-extract/SKILL.md +56 -0
  73. package/dist/cli/main.d.ts.map +1 -1
  74. package/dist/cli/main.js +407 -54
  75. package/dist/cli/main.js.map +1 -1
  76. package/dist/config/config.d.ts +43 -0
  77. package/dist/config/config.d.ts.map +1 -1
  78. package/dist/config/config.js +150 -6
  79. package/dist/config/config.js.map +1 -1
  80. package/dist/daemon/daemon.d.ts.map +1 -1
  81. package/dist/daemon/daemon.js +80 -11
  82. package/dist/daemon/daemon.js.map +1 -1
  83. package/dist/desktop/application.d.ts +4 -0
  84. package/dist/desktop/application.d.ts.map +1 -0
  85. package/dist/desktop/application.js +1688 -0
  86. package/dist/desktop/application.js.map +1 -0
  87. package/dist/desktop/article-export.d.ts +12 -0
  88. package/dist/desktop/article-export.d.ts.map +1 -0
  89. package/dist/desktop/article-export.js +87 -0
  90. package/dist/desktop/article-export.js.map +1 -0
  91. package/dist/desktop/assets/pspore.png +0 -0
  92. package/dist/desktop/assets/pspore.svg +24 -0
  93. package/dist/desktop/conversation-smoke.d.ts +5 -0
  94. package/dist/desktop/conversation-smoke.d.ts.map +1 -0
  95. package/dist/desktop/conversation-smoke.js +107 -0
  96. package/dist/desktop/conversation-smoke.js.map +1 -0
  97. package/dist/desktop/daemon-bridge.d.ts.map +1 -1
  98. package/dist/desktop/daemon-bridge.js +62 -17
  99. package/dist/desktop/daemon-bridge.js.map +1 -1
  100. package/dist/desktop/ipc-contract.d.ts +124 -0
  101. package/dist/desktop/ipc-contract.d.ts.map +1 -1
  102. package/dist/desktop/ipc-contract.js +191 -12
  103. package/dist/desktop/ipc-contract.js.map +1 -1
  104. package/dist/desktop/local-path.d.ts +15 -0
  105. package/dist/desktop/local-path.d.ts.map +1 -0
  106. package/dist/desktop/local-path.js +59 -0
  107. package/dist/desktop/local-path.js.map +1 -0
  108. package/dist/desktop/main.d.ts +10 -1
  109. package/dist/desktop/main.d.ts.map +1 -1
  110. package/dist/desktop/main.js +122 -530
  111. package/dist/desktop/main.js.map +1 -1
  112. package/dist/desktop/native-startup.d.ts +4 -0
  113. package/dist/desktop/native-startup.d.ts.map +1 -0
  114. package/dist/desktop/native-startup.js +57 -0
  115. package/dist/desktop/native-startup.js.map +1 -0
  116. package/dist/desktop/preload.cjs +28 -1
  117. package/dist/desktop/renderer/article-panel.d.ts +45 -0
  118. package/dist/desktop/renderer/article-panel.d.ts.map +1 -0
  119. package/dist/desktop/renderer/article-panel.js +1126 -0
  120. package/dist/desktop/renderer/article-panel.js.map +1 -0
  121. package/dist/desktop/renderer/article-split.d.ts +32 -0
  122. package/dist/desktop/renderer/article-split.d.ts.map +1 -0
  123. package/dist/desktop/renderer/article-split.js +48 -0
  124. package/dist/desktop/renderer/article-split.js.map +1 -0
  125. package/dist/desktop/renderer/composer-file-references.d.ts +23 -0
  126. package/dist/desktop/renderer/composer-file-references.d.ts.map +1 -0
  127. package/dist/desktop/renderer/composer-file-references.js +51 -0
  128. package/dist/desktop/renderer/composer-file-references.js.map +1 -0
  129. package/dist/desktop/renderer/conversation.d.ts +23 -0
  130. package/dist/desktop/renderer/conversation.d.ts.map +1 -0
  131. package/dist/desktop/renderer/conversation.js +66 -0
  132. package/dist/desktop/renderer/conversation.js.map +1 -0
  133. package/dist/desktop/renderer/dom-reconcile.d.ts +15 -0
  134. package/dist/desktop/renderer/dom-reconcile.d.ts.map +1 -0
  135. package/dist/desktop/renderer/dom-reconcile.js +33 -0
  136. package/dist/desktop/renderer/dom-reconcile.js.map +1 -0
  137. package/dist/desktop/renderer/index.html +211 -34
  138. package/dist/desktop/renderer/indexing-view.d.ts +22 -0
  139. package/dist/desktop/renderer/indexing-view.d.ts.map +1 -0
  140. package/dist/desktop/renderer/indexing-view.js +115 -0
  141. package/dist/desktop/renderer/indexing-view.js.map +1 -0
  142. package/dist/desktop/renderer/markdown-view.d.ts +23 -0
  143. package/dist/desktop/renderer/markdown-view.d.ts.map +1 -0
  144. package/dist/desktop/renderer/markdown-view.js +436 -0
  145. package/dist/desktop/renderer/markdown-view.js.map +1 -0
  146. package/dist/desktop/renderer/motion.d.ts +67 -0
  147. package/dist/desktop/renderer/motion.d.ts.map +1 -0
  148. package/dist/desktop/renderer/motion.js +296 -0
  149. package/dist/desktop/renderer/motion.js.map +1 -0
  150. package/dist/desktop/renderer/renderer.js +1799 -152
  151. package/dist/desktop/renderer/renderer.js.map +1 -1
  152. package/dist/desktop/renderer/session-find.d.ts +18 -0
  153. package/dist/desktop/renderer/session-find.d.ts.map +1 -0
  154. package/dist/desktop/renderer/session-find.js +29 -0
  155. package/dist/desktop/renderer/session-find.js.map +1 -0
  156. package/dist/desktop/renderer/session-search.d.ts +30 -0
  157. package/dist/desktop/renderer/session-search.d.ts.map +1 -0
  158. package/dist/desktop/renderer/session-search.js +296 -0
  159. package/dist/desktop/renderer/session-search.js.map +1 -0
  160. package/dist/desktop/renderer/store.d.ts +33 -0
  161. package/dist/desktop/renderer/store.d.ts.map +1 -1
  162. package/dist/desktop/renderer/store.js +92 -19
  163. package/dist/desktop/renderer/store.js.map +1 -1
  164. package/dist/desktop/renderer/styles.css +928 -268
  165. package/dist/desktop/renderer/vendor/gsap.min.js +11 -0
  166. package/dist/desktop/renderer-diagnostics.d.ts +5 -0
  167. package/dist/desktop/renderer-diagnostics.d.ts.map +1 -0
  168. package/dist/desktop/renderer-diagnostics.js +47 -0
  169. package/dist/desktop/renderer-diagnostics.js.map +1 -0
  170. package/dist/desktop/security.d.ts +26 -1
  171. package/dist/desktop/security.d.ts.map +1 -1
  172. package/dist/desktop/security.js +26 -6
  173. package/dist/desktop/security.js.map +1 -1
  174. package/dist/desktop/smoke-fixture.d.ts.map +1 -1
  175. package/dist/desktop/smoke-fixture.js +77 -3
  176. package/dist/desktop/smoke-fixture.js.map +1 -1
  177. package/dist/desktop/splash/index.html +25 -0
  178. package/dist/desktop/splash/splash.d.ts +2 -0
  179. package/dist/desktop/splash/splash.d.ts.map +1 -0
  180. package/dist/desktop/splash/splash.js +8 -0
  181. package/dist/desktop/splash/splash.js.map +1 -0
  182. package/dist/desktop/splash/styles.css +24 -0
  183. package/dist/desktop/system-open.d.ts +16 -0
  184. package/dist/desktop/system-open.d.ts.map +1 -0
  185. package/dist/desktop/system-open.js +90 -0
  186. package/dist/desktop/system-open.js.map +1 -0
  187. package/dist/desktop/validation.d.ts.map +1 -1
  188. package/dist/desktop/validation.js +99 -21
  189. package/dist/desktop/validation.js.map +1 -1
  190. package/dist/desktop/window-security.d.ts +4 -0
  191. package/dist/desktop/window-security.d.ts.map +1 -0
  192. package/dist/desktop/window-security.js +26 -0
  193. package/dist/desktop/window-security.js.map +1 -0
  194. package/dist/documents/errors.d.ts +12 -0
  195. package/dist/documents/errors.d.ts.map +1 -0
  196. package/dist/documents/errors.js +12 -0
  197. package/dist/documents/errors.js.map +1 -0
  198. package/dist/documents/extract.d.ts +37 -0
  199. package/dist/documents/extract.d.ts.map +1 -0
  200. package/dist/documents/extract.js +90 -0
  201. package/dist/documents/extract.js.map +1 -0
  202. package/dist/documents/legacy-office.d.ts +23 -0
  203. package/dist/documents/legacy-office.d.ts.map +1 -0
  204. package/dist/documents/legacy-office.js +439 -0
  205. package/dist/documents/legacy-office.js.map +1 -0
  206. package/dist/documents/ole.d.ts +20 -0
  207. package/dist/documents/ole.d.ts.map +1 -0
  208. package/dist/documents/ole.js +189 -0
  209. package/dist/documents/ole.js.map +1 -0
  210. package/dist/documents/ooxml.d.ts +23 -0
  211. package/dist/documents/ooxml.d.ts.map +1 -0
  212. package/dist/documents/ooxml.js +197 -0
  213. package/dist/documents/ooxml.js.map +1 -0
  214. package/dist/documents/pdf.d.ts +20 -0
  215. package/dist/documents/pdf.d.ts.map +1 -0
  216. package/dist/documents/pdf.js +95 -0
  217. package/dist/documents/pdf.js.map +1 -0
  218. package/dist/documents/plain-text.d.ts +22 -0
  219. package/dist/documents/plain-text.d.ts.map +1 -0
  220. package/dist/documents/plain-text.js +57 -0
  221. package/dist/documents/plain-text.js.map +1 -0
  222. package/dist/documents/zip.d.ts +15 -0
  223. package/dist/documents/zip.d.ts.map +1 -0
  224. package/dist/documents/zip.js +137 -0
  225. package/dist/documents/zip.js.map +1 -0
  226. package/dist/domain/indexing.d.ts +60 -0
  227. package/dist/domain/indexing.d.ts.map +1 -0
  228. package/dist/domain/indexing.js +13 -0
  229. package/dist/domain/indexing.js.map +1 -0
  230. package/dist/domain/runtime.d.ts +133 -5
  231. package/dist/domain/runtime.d.ts.map +1 -1
  232. package/dist/gateway/local-gateway.d.ts +8 -0
  233. package/dist/gateway/local-gateway.d.ts.map +1 -1
  234. package/dist/gateway/local-gateway.js +105 -21
  235. package/dist/gateway/local-gateway.js.map +1 -1
  236. package/dist/indexing/index-service.d.ts +56 -0
  237. package/dist/indexing/index-service.d.ts.map +1 -0
  238. package/dist/indexing/index-service.js +262 -0
  239. package/dist/indexing/index-service.js.map +1 -0
  240. package/dist/kernel/loop.d.ts +10 -0
  241. package/dist/kernel/loop.d.ts.map +1 -1
  242. package/dist/kernel/loop.js +6 -2
  243. package/dist/kernel/loop.js.map +1 -1
  244. package/dist/kernel/reducer.d.ts.map +1 -1
  245. package/dist/kernel/reducer.js +17 -1
  246. package/dist/kernel/reducer.js.map +1 -1
  247. package/dist/kernel/state.d.ts +17 -4
  248. package/dist/kernel/state.d.ts.map +1 -1
  249. package/dist/kernel/state.js +2 -0
  250. package/dist/kernel/state.js.map +1 -1
  251. package/dist/pi/context-budget.d.ts +8 -0
  252. package/dist/pi/context-budget.d.ts.map +1 -0
  253. package/dist/pi/context-budget.js +62 -0
  254. package/dist/pi/context-budget.js.map +1 -0
  255. package/dist/pi/pi-runtime-adapter.d.ts +38 -3
  256. package/dist/pi/pi-runtime-adapter.d.ts.map +1 -1
  257. package/dist/pi/pi-runtime-adapter.js +551 -56
  258. package/dist/pi/pi-runtime-adapter.js.map +1 -1
  259. package/dist/plugins/bundled-skills.d.ts +56 -0
  260. package/dist/plugins/bundled-skills.d.ts.map +1 -0
  261. package/dist/plugins/bundled-skills.js +243 -0
  262. package/dist/plugins/bundled-skills.js.map +1 -0
  263. package/dist/plugins/extension-manager.d.ts +23 -1
  264. package/dist/plugins/extension-manager.d.ts.map +1 -1
  265. package/dist/plugins/extension-manager.js +117 -0
  266. package/dist/plugins/extension-manager.js.map +1 -1
  267. package/dist/plugins/types.d.ts +29 -0
  268. package/dist/plugins/types.d.ts.map +1 -1
  269. package/dist/plugins/workspace-skills.d.ts +36 -0
  270. package/dist/plugins/workspace-skills.d.ts.map +1 -0
  271. package/dist/plugins/workspace-skills.js +309 -0
  272. package/dist/plugins/workspace-skills.js.map +1 -0
  273. package/dist/policy/policy.d.ts.map +1 -1
  274. package/dist/policy/policy.js +22 -3
  275. package/dist/policy/policy.js.map +1 -1
  276. package/dist/protocol/client.d.ts +1 -0
  277. package/dist/protocol/client.d.ts.map +1 -1
  278. package/dist/protocol/client.js +49 -24
  279. package/dist/protocol/client.js.map +1 -1
  280. package/dist/protocol/limits.d.ts +69 -0
  281. package/dist/protocol/limits.d.ts.map +1 -0
  282. package/dist/protocol/limits.js +166 -0
  283. package/dist/protocol/limits.js.map +1 -0
  284. package/dist/protocol/schema.d.ts +6 -0
  285. package/dist/protocol/schema.d.ts.map +1 -1
  286. package/dist/protocol/schema.js.map +1 -1
  287. package/dist/protocol/server-frame-codec.d.ts +18 -0
  288. package/dist/protocol/server-frame-codec.d.ts.map +1 -0
  289. package/dist/protocol/server-frame-codec.js +211 -0
  290. package/dist/protocol/server-frame-codec.js.map +1 -0
  291. package/dist/service/legacy-daemon.d.ts +6 -0
  292. package/dist/service/legacy-daemon.d.ts.map +1 -0
  293. package/dist/service/legacy-daemon.js +42 -0
  294. package/dist/service/legacy-daemon.js.map +1 -0
  295. package/dist/service/service-launch.d.ts +10 -0
  296. package/dist/service/service-launch.d.ts.map +1 -0
  297. package/dist/service/service-launch.js +56 -0
  298. package/dist/service/service-launch.js.map +1 -0
  299. package/dist/service/system-service.d.ts +57 -0
  300. package/dist/service/system-service.d.ts.map +1 -0
  301. package/dist/service/system-service.js +263 -0
  302. package/dist/service/system-service.js.map +1 -0
  303. package/dist/sessions/session-catalog.d.ts +45 -0
  304. package/dist/sessions/session-catalog.d.ts.map +1 -0
  305. package/dist/sessions/session-catalog.js +270 -0
  306. package/dist/sessions/session-catalog.js.map +1 -0
  307. package/dist/sessions/session-file.d.ts +12 -0
  308. package/dist/sessions/session-file.d.ts.map +1 -0
  309. package/dist/sessions/session-file.js +47 -0
  310. package/dist/sessions/session-file.js.map +1 -0
  311. package/dist/settings/compaction-settings.d.ts +10 -0
  312. package/dist/settings/compaction-settings.d.ts.map +1 -0
  313. package/dist/settings/compaction-settings.js +8 -0
  314. package/dist/settings/compaction-settings.js.map +1 -0
  315. package/dist/settings/indexing-settings-service.d.ts +16 -0
  316. package/dist/settings/indexing-settings-service.d.ts.map +1 -0
  317. package/dist/settings/indexing-settings-service.js +57 -0
  318. package/dist/settings/indexing-settings-service.js.map +1 -0
  319. package/dist/settings/indexing-settings.d.ts +30 -0
  320. package/dist/settings/indexing-settings.d.ts.map +1 -0
  321. package/dist/settings/indexing-settings.js +58 -0
  322. package/dist/settings/indexing-settings.js.map +1 -0
  323. package/dist/settings/llm-settings-service.d.ts +6 -0
  324. package/dist/settings/llm-settings-service.d.ts.map +1 -1
  325. package/dist/settings/llm-settings-service.js +137 -12
  326. package/dist/settings/llm-settings-service.js.map +1 -1
  327. package/dist/settings/llm-settings.d.ts +68 -2
  328. package/dist/settings/llm-settings.d.ts.map +1 -1
  329. package/dist/settings/llm-settings.js +119 -17
  330. package/dist/settings/llm-settings.js.map +1 -1
  331. package/dist/settings/model-api.d.ts +10 -0
  332. package/dist/settings/model-api.d.ts.map +1 -0
  333. package/dist/settings/model-api.js +10 -0
  334. package/dist/settings/model-api.js.map +1 -0
  335. package/dist/storage/home.d.ts +1 -0
  336. package/dist/storage/home.d.ts.map +1 -1
  337. package/dist/storage/home.js +37 -2
  338. package/dist/storage/home.js.map +1 -1
  339. package/dist/tools/core-tools.d.ts +2 -0
  340. package/dist/tools/core-tools.d.ts.map +1 -1
  341. package/dist/tools/core-tools.js +91 -1
  342. package/dist/tools/core-tools.js.map +1 -1
  343. package/dist/ui/shared/activity.d.ts +2 -0
  344. package/dist/ui/shared/activity.d.ts.map +1 -1
  345. package/dist/ui/shared/activity.js +18 -4
  346. package/dist/ui/shared/activity.js.map +1 -1
  347. package/dist/ui/shared/full-message.d.ts +22 -0
  348. package/dist/ui/shared/full-message.d.ts.map +1 -0
  349. package/dist/ui/shared/full-message.js +40 -0
  350. package/dist/ui/shared/full-message.js.map +1 -0
  351. package/dist/ui/shared/local-links.d.ts +7 -0
  352. package/dist/ui/shared/local-links.d.ts.map +1 -0
  353. package/dist/ui/shared/local-links.js +24 -0
  354. package/dist/ui/shared/local-links.js.map +1 -0
  355. package/dist/ui/shared/markdown-stream.d.ts +25 -0
  356. package/dist/ui/shared/markdown-stream.d.ts.map +1 -0
  357. package/dist/ui/shared/markdown-stream.js +35 -0
  358. package/dist/ui/shared/markdown-stream.js.map +1 -0
  359. package/dist/ui/shared/markdown.d.ts +70 -0
  360. package/dist/ui/shared/markdown.d.ts.map +1 -0
  361. package/dist/ui/shared/markdown.js +434 -0
  362. package/dist/ui/shared/markdown.js.map +1 -0
  363. package/dist/ui/shared/presentation.d.ts +10 -2
  364. package/dist/ui/shared/presentation.d.ts.map +1 -1
  365. package/dist/ui/shared/presentation.js +83 -22
  366. package/dist/ui/shared/presentation.js.map +1 -1
  367. package/dist/ui/shared/protocol-state.d.ts +19 -0
  368. package/dist/ui/shared/protocol-state.d.ts.map +1 -1
  369. package/dist/ui/shared/protocol-state.js +188 -26
  370. package/dist/ui/shared/protocol-state.js.map +1 -1
  371. package/dist/ui/shared/virtual-list.d.ts +34 -0
  372. package/dist/ui/shared/virtual-list.d.ts.map +1 -0
  373. package/dist/ui/shared/virtual-list.js +143 -0
  374. package/dist/ui/shared/virtual-list.js.map +1 -0
  375. package/dist/ui/tui/commands.d.ts +1 -1
  376. package/dist/ui/tui/commands.d.ts.map +1 -1
  377. package/dist/ui/tui/commands.js +8 -3
  378. package/dist/ui/tui/commands.js.map +1 -1
  379. package/dist/ui/tui/store.d.ts +22 -1
  380. package/dist/ui/tui/store.d.ts.map +1 -1
  381. package/dist/ui/tui/store.js +50 -3
  382. package/dist/ui/tui/store.js.map +1 -1
  383. package/dist/ui/tui/tui-app.d.ts.map +1 -1
  384. package/dist/ui/tui/tui-app.js +231 -31
  385. package/dist/ui/tui/tui-app.js.map +1 -1
  386. package/dist/ui/tui/view.d.ts +7 -0
  387. package/dist/ui/tui/view.d.ts.map +1 -1
  388. package/dist/ui/tui/view.js +161 -57
  389. package/dist/ui/tui/view.js.map +1 -1
  390. package/dist/version.d.ts +1 -1
  391. package/dist/version.d.ts.map +1 -1
  392. package/dist/version.js +1 -1
  393. package/dist/version.js.map +1 -1
  394. package/package.json +13 -2
@@ -1,30 +1,61 @@
1
1
  export function presentSessions(kernel, selectedSessionId) {
2
- const main = kernel.sessions["main"];
3
- const result = [{
4
- id: "main",
5
- sessionId: "main",
6
- title: "Main session",
7
- status: main?.status ?? "idle",
2
+ const agents = Object.values(kernel.agents).sort((left, right) => left.createdAt.localeCompare(right.createdAt));
3
+ const agentSessionIds = new Set(agents.map((agent) => agent.sessionId));
4
+ // Newest first: the rail is where you go back to what you were just doing, and
5
+ // a list that grows downward buries it. `main` is not pinned to the top for the
6
+ // same reason — it is the oldest session in any home that has others.
7
+ const roots = Object.entries(kernel.sessions)
8
+ .filter(([id, session]) => session.rootSession || (!agentSessionIds.has(id) && !id.startsWith("agent:") && !id.startsWith("run:")))
9
+ .sort(([leftId, left], [rightId, right]) => {
10
+ // A session with no catalog record has no creation time; it sorts last
11
+ // rather than jumping to the top of a descending order.
12
+ const leftAt = left?.rootSession?.createdAt ?? "";
13
+ const rightAt = right?.rootSession?.createdAt ?? "";
14
+ if (leftAt !== rightAt)
15
+ return leftAt === "" ? 1 : rightAt === "" ? -1 : rightAt.localeCompare(leftAt);
16
+ return leftId.localeCompare(rightId);
17
+ });
18
+ if (roots.length === 0)
19
+ roots.push(["main", undefined]);
20
+ const result = [];
21
+ const appendedAgents = new Set();
22
+ for (const [id, session] of roots) {
23
+ result.push({
24
+ id,
25
+ sessionId: id,
26
+ title: session?.rootSession?.title ?? sessionTitle(session?.firstUserText, id),
27
+ status: session?.status ?? "idle",
8
28
  depth: 0,
9
- selected: selectedSessionId === "main",
10
- active: Boolean(main) || selectedSessionId === "main",
29
+ selected: selectedSessionId === id,
30
+ active: Boolean(session) || selectedSessionId === id,
11
31
  kind: "main",
12
- }];
13
- for (const agent of Object.values(kernel.agents).sort((left, right) => left.createdAt.localeCompare(right.createdAt))) {
14
- const session = kernel.sessions[agent.sessionId];
15
- result.push({
16
- id: agent.id,
17
- sessionId: agent.sessionId,
18
- title: agent.objective || agent.id,
19
- status: session?.status ?? agent.status,
20
- depth: Math.min(agent.depth, 5),
21
- selected: selectedSessionId === agent.sessionId,
22
- active: Boolean(session),
23
- kind: "agent",
32
+ ...(session?.rootSession?.createdAt === undefined ? {} : { createdAt: session.rootSession.createdAt }),
24
33
  });
34
+ for (const agent of agents.filter((candidate) => candidate.rootId === id)) {
35
+ result.push(agentListItem(agent, kernel, selectedSessionId));
36
+ appendedAgents.add(agent.id);
37
+ }
38
+ }
39
+ for (const agent of agents) {
40
+ if (appendedAgents.has(agent.id))
41
+ continue;
42
+ result.push(agentListItem(agent, kernel, selectedSessionId));
25
43
  }
26
44
  return result;
27
45
  }
46
+ function agentListItem(agent, kernel, selectedSessionId) {
47
+ const session = kernel.sessions[agent.sessionId];
48
+ return {
49
+ id: agent.id,
50
+ sessionId: agent.sessionId,
51
+ title: agent.objective || agent.id,
52
+ status: session?.status ?? agent.status,
53
+ depth: Math.min(agent.depth, 5),
54
+ selected: selectedSessionId === agent.sessionId,
55
+ active: Boolean(session),
56
+ kind: "agent",
57
+ };
58
+ }
28
59
  export function kernelMetrics(kernel) {
29
60
  const sessions = Object.values(kernel.sessions);
30
61
  const runs = Object.values(kernel.runs);
@@ -53,10 +84,23 @@ export function conversationIntent(kernel, selectedSessionId, text, mode) {
53
84
  agentId: agent.id,
54
85
  sessionId: agent.sessionId,
55
86
  text,
56
- mode: mode === "prompt" ? "next" : mode,
87
+ mode: mode === "auto" || mode === "prompt" ? "next" : mode,
57
88
  };
58
89
  }
59
- return { target: "main", sessionId: "main", text, mode };
90
+ const sessionId = kernel.sessions[selectedSessionId] ? selectedSessionId : "main";
91
+ return { target: "main", sessionId, text, mode };
92
+ }
93
+ /**
94
+ * Derived from the session view's `firstUserText` rather than its transcript:
95
+ * a broadcast carries only a bounded tail, so the opening message of a long
96
+ * conversation is usually not in it.
97
+ */
98
+ function sessionTitle(firstUserText, id) {
99
+ const first = firstUserText?.replace(/\s+/g, " ").trim();
100
+ if (!first)
101
+ return id === "main" ? "Main session" : "New session";
102
+ const chars = [...first];
103
+ return chars.length > 72 ? `${chars.slice(0, 71).join("")}…` : first;
60
104
  }
61
105
  export function terminalAgentStatus(value) {
62
106
  return value === "succeeded" || value === "failed" || value === "cancelled" || value === "budget_exhausted";
@@ -74,6 +118,23 @@ export function formatBytes(value) {
74
118
  return `${(value / 1_024).toFixed(1)} KB`;
75
119
  return `${value} B`;
76
120
  }
121
+ /**
122
+ * A timestamp for a list row, where the column is narrow and the reader mostly
123
+ * wants to know "how recent". Today shows the time, this year the date, and
124
+ * anything older the year as well, so no two rows are ambiguous.
125
+ */
126
+ export function listTime(value, now = new Date()) {
127
+ const date = new Date(value);
128
+ if (Number.isNaN(date.valueOf()))
129
+ return "";
130
+ const sameDay = date.getFullYear() === now.getFullYear()
131
+ && date.getMonth() === now.getMonth()
132
+ && date.getDate() === now.getDate();
133
+ if (sameDay)
134
+ return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
135
+ const day = `${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")}`;
136
+ return date.getFullYear() === now.getFullYear() ? day : `${date.getFullYear()}-${day}`;
137
+ }
77
138
  export function clockTime(value) {
78
139
  const date = new Date(value);
79
140
  return Number.isNaN(date.valueOf()) ? value.slice(0, 8) : date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
@@ -1 +1 @@
1
- {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/ui/shared/presentation.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,eAAe,CAAC,MAAmB,EAAE,iBAAyB;IAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAsB,CAAC;YACjC,EAAE,EAAE,MAAM;YACV,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM;YAC9B,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,iBAAiB,KAAK,MAAM;YACtC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,KAAK,MAAM;YACrD,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACtH,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,EAAE;YAClC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM;YACvC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B,QAAQ,EAAE,iBAAiB,KAAK,KAAK,CAAC,SAAS;YAC/C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;YACxB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAmB;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,MAAM;QACzB,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAClF,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM;QACtD,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAC5F,eAAe,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;QAChF,UAAU,EAAE,UAAU,CAAC,MAAM;QAC7B,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;QACnH,SAAS,EAAE,SAAS,CAAC,MAAM;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,iBAAyB;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAmB,EACnB,iBAAyB,EACzB,IAAY,EACZ,IAAkB;IAElB,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACvD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;YACL,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI;YACJ,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;SACxC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,kBAAkB,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9D,OAAO,GAAG,KAAK,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAChI,CAAC"}
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/ui/shared/presentation.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
+ import type { RuntimeMessage } from "../../domain/runtime.js";
1
2
  import { type KernelState } from "../../kernel/state.js";
2
3
  import type { EventEnvelope } from "../../protocol/schema.js";
3
4
  export interface ProtocolUiState {
4
5
  kernel: KernelState;
5
6
  cursors: Readonly<Record<string, number>>;
6
7
  streamingText: Readonly<Record<string, string>>;
8
+ streamingThinking: Readonly<Record<string, string>>;
9
+ /** Transcript item each session is currently streaming, so a delta for a
10
+ * superseded item cannot append to the one on screen. */
11
+ streamingItems: Readonly<Record<string, string>>;
7
12
  selectedSessionId: string;
8
13
  gap?: {
9
14
  streamId: string;
@@ -18,12 +23,26 @@ export interface ProtocolApplyResult {
18
23
  }
19
24
  export declare function initialProtocolUiState(): ProtocolUiState;
20
25
  export declare function replaceProtocolSnapshot(current: ProtocolUiState, kernel: KernelState, cursors: Readonly<Record<string, number>>): ProtocolUiState;
26
+ /**
27
+ * Merges an older page of history in front of what a client already holds.
28
+ * Only prepending is supported: the newest messages arrive with events, and a
29
+ * page that would leave a hole is refused rather than silently reordered.
30
+ */
31
+ export declare function applyTranscriptPage(current: ProtocolUiState, page: {
32
+ sessionId: string;
33
+ from: number;
34
+ count: number;
35
+ messages: readonly RuntimeMessage[];
36
+ }): ProtocolUiState;
21
37
  export declare function selectProtocolSession(current: ProtocolUiState, id: string): ProtocolUiState;
22
38
  export declare function applyProtocolDelta(current: ProtocolUiState, delta: {
23
39
  streamId: string;
24
40
  fromSeq: number;
25
41
  seq: number;
42
+ skipped?: number;
26
43
  sessionId: string;
44
+ itemId: string;
45
+ channel: "text" | "thinking";
27
46
  text: string;
28
47
  }): ProtocolApplyResult;
29
48
  export declare function applyProtocolEvent(current: ProtocolUiState, event: EventEnvelope): ProtocolApplyResult;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-state.d.ts","sourceRoot":"","sources":["../../../src/ui/shared/protocol-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,IAAI,eAAe,CAExD;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,eAAe,CAOjB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,CAI3F;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzF,mBAAmB,CAiBrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,GAAG,mBAAmB,CAsGtG"}
1
+ {"version":3,"file":"protocol-state.d.ts","sourceRoot":"","sources":["../../../src/ui/shared/protocol-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAiD,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD;6DACyD;IACzD,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,IAAI,eAAe,CASxD;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,eAAe,CASjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,GAC5F,eAAe,CAoBjB;AAsBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,CAI3F;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd,GACA,mBAAmB,CAwBrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,GAAG,mBAAmB,CAmLtG"}
@@ -1,15 +1,75 @@
1
1
  import { initialKernelState } from "../../kernel/state.js";
2
2
  export function initialProtocolUiState() {
3
- return { kernel: initialKernelState(), cursors: {}, streamingText: {}, selectedSessionId: "main" };
3
+ return {
4
+ kernel: initialKernelState(),
5
+ cursors: {},
6
+ streamingText: {},
7
+ streamingThinking: {},
8
+ streamingItems: {},
9
+ selectedSessionId: "main",
10
+ };
4
11
  }
5
12
  export function replaceProtocolSnapshot(current, kernel, cursors) {
6
13
  return {
7
14
  kernel: structuredClone(kernel),
8
15
  cursors: { ...cursors },
9
16
  streamingText: {},
17
+ streamingThinking: {},
18
+ streamingItems: {},
10
19
  selectedSessionId: selectAvailable(current.selectedSessionId, kernel),
11
20
  };
12
21
  }
22
+ /**
23
+ * Merges an older page of history in front of what a client already holds.
24
+ * Only prepending is supported: the newest messages arrive with events, and a
25
+ * page that would leave a hole is refused rather than silently reordered.
26
+ */
27
+ export function applyTranscriptPage(current, page) {
28
+ const session = current.kernel.sessions[page.sessionId];
29
+ if (!session || page.from >= session.messageOffset)
30
+ return current;
31
+ if (page.from + page.messages.length < session.messageOffset)
32
+ return current;
33
+ const older = page.messages.slice(0, session.messageOffset - page.from);
34
+ if (older.length === 0)
35
+ return current;
36
+ return {
37
+ ...current,
38
+ kernel: {
39
+ ...current.kernel,
40
+ sessions: {
41
+ ...current.kernel.sessions,
42
+ [page.sessionId]: {
43
+ ...session,
44
+ messageOffset: page.from,
45
+ messages: [...structuredClone(older), ...session.messages],
46
+ },
47
+ },
48
+ },
49
+ };
50
+ }
51
+ /**
52
+ * Keeps history a client has already paged in when an authoritative tail
53
+ * arrives. The tail is bounded, so without this every settled run would throw
54
+ * away the scrollback the reader just asked for. Older messages are kept only
55
+ * while they still join onto the new tail and still belong to the same upstream
56
+ * session: a replaced session renumbers the transcript, so its old prefix can
57
+ * no longer be trusted.
58
+ */
59
+ function mergeScrollback(existing, incoming) {
60
+ if (!existing || existing.upstreamSessionId !== incoming.upstreamSessionId)
61
+ return incoming;
62
+ if (existing.messageOffset >= incoming.messageOffset)
63
+ return incoming;
64
+ const kept = incoming.messageOffset - existing.messageOffset;
65
+ if (existing.messages.length < kept)
66
+ return incoming;
67
+ return {
68
+ ...incoming,
69
+ messageOffset: existing.messageOffset,
70
+ messages: [...existing.messages.slice(0, kept), ...incoming.messages],
71
+ };
72
+ }
13
73
  export function selectProtocolSession(current, id) {
14
74
  const sessionId = current.kernel.sessions[id] ? id : current.kernel.agents[id]?.sessionId;
15
75
  if (!sessionId || !current.kernel.sessions[sessionId])
@@ -20,17 +80,24 @@ export function applyProtocolDelta(current, delta) {
20
80
  const previous = current.cursors[delta.streamId] ?? 0;
21
81
  if (delta.seq <= previous)
22
82
  return { state: current, applied: false };
23
- if (delta.fromSeq !== previous + 1 || delta.seq < delta.fromSeq) {
24
- return { state: withGap(current, delta.streamId, previous + 1, delta.fromSeq), applied: false };
83
+ const expected = previous + 1 + (delta.skipped ?? 0);
84
+ if (delta.fromSeq !== expected || delta.seq < delta.fromSeq) {
85
+ return { state: withGap(current, delta.streamId, expected, delta.fromSeq), applied: false };
25
86
  }
87
+ // Deltas name their item, so a run belonging to a superseded item starts a
88
+ // fresh buffer rather than appending to the message already on screen.
89
+ const active = current.streamingItems[delta.sessionId];
90
+ const replaced = active !== undefined && active !== delta.itemId;
91
+ const field = delta.channel === "thinking" ? "streamingThinking" : "streamingText";
92
+ const other = delta.channel === "thinking" ? "streamingText" : "streamingThinking";
93
+ const existing = replaced ? "" : current[field][delta.sessionId] ?? "";
26
94
  return {
27
95
  state: {
28
96
  ...current,
29
97
  cursors: { ...current.cursors, [delta.streamId]: delta.seq },
30
- streamingText: {
31
- ...current.streamingText,
32
- [delta.sessionId]: `${current.streamingText[delta.sessionId] ?? ""}${delta.text}`,
33
- },
98
+ streamingItems: { ...current.streamingItems, [delta.sessionId]: delta.itemId },
99
+ [field]: { ...current[field], [delta.sessionId]: `${existing}${delta.text}` },
100
+ ...(replaced ? { [other]: { ...current[other], [delta.sessionId]: "" } } : {}),
34
101
  },
35
102
  applied: true,
36
103
  };
@@ -39,44 +106,123 @@ export function applyProtocolEvent(current, event) {
39
106
  const previous = current.cursors[event.streamId] ?? 0;
40
107
  if (event.seq <= previous)
41
108
  return { state: current, applied: false };
42
- if (event.seq !== previous + 1) {
43
- return { state: withGap(current, event.streamId, previous + 1, event.seq), applied: false };
109
+ // Transient events the daemon shed under backpressure are announced through
110
+ // `skipped`, so the cursor jumps forward without being treated as data loss.
111
+ const expected = previous + 1 + (event.skipped ?? 0);
112
+ if (event.seq !== expected) {
113
+ return { state: withGap(current, event.streamId, expected, event.seq), applied: false };
44
114
  }
45
115
  const payload = asRecord(event.payload);
46
116
  let kernel = current.kernel;
47
117
  let streamingText = current.streamingText;
118
+ let streamingThinking = current.streamingThinking;
119
+ let streamingItems = current.streamingItems;
48
120
  if (event.type === "daemon.state") {
49
121
  const daemon = payload["daemon"];
50
122
  if (isRecord(daemon) && typeof daemon["phase"] === "string" && typeof payload["revision"] === "number") {
51
123
  kernel = { ...kernel, daemon: daemon, revision: payload["revision"] };
52
124
  }
53
125
  }
126
+ if (event.type === "indexing.status" && isRecord(payload["status"])) {
127
+ kernel = {
128
+ ...kernel,
129
+ revision: numericRevision(payload, kernel.revision),
130
+ indexing: structuredClone(payload["status"]),
131
+ };
132
+ }
54
133
  const session = payload["session"];
55
- if (isAgentSnapshot(session)) {
134
+ if (isSessionMetadata(session)) {
135
+ // A payload without a transcript updates status, usage and queue only; the
136
+ // messages a client already holds stay in place. One that carries the tail
137
+ // re-establishes the transcript, which is what makes it authoritative.
138
+ const existing = kernel.sessions[session.sessionId];
139
+ const next = isSessionView(session)
140
+ ? mergeScrollback(existing, structuredClone(session))
141
+ : {
142
+ ...structuredClone(session),
143
+ messages: existing?.messages ?? [],
144
+ messageOffset: existing?.messageOffset ?? 0,
145
+ };
56
146
  kernel = {
57
147
  ...kernel,
58
148
  revision: numericRevision(payload, kernel.revision),
59
- sessions: { ...kernel.sessions, [session.sessionId]: structuredClone(session) },
149
+ sessions: { ...kernel.sessions, [session.sessionId]: next },
60
150
  };
61
- if (event.type === "message.completed" || event.type === "run.settled") {
62
- const next = { ...streamingText };
63
- delete next[session.sessionId];
64
- streamingText = next;
65
- }
66
151
  }
67
152
  if (event.type === "session.closed" && typeof payload["sessionId"] === "string") {
68
153
  const sessions = { ...kernel.sessions };
69
154
  delete sessions[payload["sessionId"]];
70
- const next = { ...streamingText };
71
- delete next[payload["sessionId"]];
72
- streamingText = next;
155
+ streamingText = withoutSession(streamingText, payload["sessionId"]);
156
+ streamingThinking = withoutSession(streamingThinking, payload["sessionId"]);
157
+ streamingItems = withoutSession(streamingItems, payload["sessionId"]);
73
158
  kernel = { ...kernel, revision: numericRevision(payload, kernel.revision), sessions };
74
159
  }
75
- if (event.type === "message.delta" && typeof payload["sessionId"] === "string" && typeof payload["delta"] === "string") {
76
- streamingText = {
77
- ...streamingText,
78
- [payload["sessionId"]]: `${streamingText[payload["sessionId"]] ?? ""}${payload["delta"]}`,
79
- };
160
+ const streamSessionId = typeof payload["sessionId"] === "string" ? payload["sessionId"] : undefined;
161
+ if (event.type === "transcript.item.started" && streamSessionId) {
162
+ const item = asRecord(payload["item"]);
163
+ if (typeof item["id"] === "string") {
164
+ streamingItems = { ...streamingItems, [streamSessionId]: item["id"] };
165
+ streamingText = withoutSession(streamingText, streamSessionId);
166
+ streamingThinking = withoutSession(streamingThinking, streamSessionId);
167
+ }
168
+ }
169
+ if (event.type === "transcript.delta" && streamSessionId && typeof payload["delta"] === "string") {
170
+ const itemId = typeof payload["itemId"] === "string" ? payload["itemId"] : undefined;
171
+ // A delta names its item, so one belonging to a superseded item starts a
172
+ // fresh buffer instead of appending to whatever is on screen.
173
+ const current = streamingItems[streamSessionId];
174
+ const replaced = itemId !== undefined && current !== undefined && current !== itemId;
175
+ if (itemId !== undefined && current !== itemId)
176
+ streamingItems = { ...streamingItems, [streamSessionId]: itemId };
177
+ const field = payload["kind"] === "thinking" ? "thinking" : "text";
178
+ const text = replaced ? "" : streamingText[streamSessionId] ?? "";
179
+ const think = replaced ? "" : streamingThinking[streamSessionId] ?? "";
180
+ if (field === "thinking") {
181
+ streamingThinking = { ...streamingThinking, [streamSessionId]: `${think}${payload["delta"]}` };
182
+ if (replaced)
183
+ streamingText = { ...streamingText, [streamSessionId]: "" };
184
+ }
185
+ else {
186
+ streamingText = { ...streamingText, [streamSessionId]: `${text}${payload["delta"]}` };
187
+ if (replaced)
188
+ streamingThinking = { ...streamingThinking, [streamSessionId]: "" };
189
+ }
190
+ }
191
+ if (event.type === "transcript.item.finished" && streamSessionId && !isSessionView(session)) {
192
+ // The event carries the finished item in full, so the transcript grows by
193
+ // appending it rather than by re-sending the messages around it. `run.settled`
194
+ // still ships the authoritative tail, which reconciles any drift.
195
+ const item = asRecord(payload["item"]);
196
+ const existing = kernel.sessions[streamSessionId];
197
+ if (existing && typeof item["role"] === "string" && typeof item["text"] === "string") {
198
+ kernel = {
199
+ ...kernel,
200
+ sessions: {
201
+ ...kernel.sessions,
202
+ [streamSessionId]: {
203
+ ...existing,
204
+ messages: [...existing.messages, {
205
+ role: item["role"], text: item["text"],
206
+ ...(typeof item["thinking"] === "string" ? { thinking: item["thinking"] } : {}),
207
+ ...(Array.isArray(item["toolCalls"]) ? { toolCalls: item["toolCalls"].filter(isRuntimeToolCall) } : {}),
208
+ ...(typeof item["toolCallId"] === "string" ? { toolCallId: item["toolCallId"] } : {}),
209
+ ...(typeof item["toolName"] === "string" ? { toolName: item["toolName"] } : {}),
210
+ ...(typeof item["isError"] === "boolean" ? { isError: item["isError"] } : {}),
211
+ }],
212
+ messageCount: existing.messageCount + 1,
213
+ },
214
+ },
215
+ };
216
+ }
217
+ }
218
+ const finishesStreaming = event.type === "transcript.item.finished"
219
+ || event.type === "run.settled"
220
+ || event.type === "runtime.error"
221
+ || event.type === "session.replaced";
222
+ if (streamSessionId && finishesStreaming) {
223
+ streamingText = withoutSession(streamingText, streamSessionId);
224
+ streamingThinking = withoutSession(streamingThinking, streamSessionId);
225
+ streamingItems = withoutSession(streamingItems, streamSessionId);
80
226
  }
81
227
  if (event.type === "approval.requested" && isRecord(payload["request"]) && typeof payload["request"]["id"] === "string") {
82
228
  const request = payload["request"];
@@ -131,12 +277,21 @@ export function applyProtocolEvent(current, event) {
131
277
  kernel,
132
278
  cursors: { ...current.cursors, [event.streamId]: event.seq },
133
279
  streamingText,
280
+ streamingThinking,
281
+ streamingItems,
134
282
  selectedSessionId: selectAvailable(current.selectedSessionId, kernel),
135
283
  },
136
284
  applied: true,
137
285
  ...(notificationNotice ? { notificationNotice } : {}),
138
286
  };
139
287
  }
288
+ function withoutSession(values, sessionId) {
289
+ if (!(sessionId in values))
290
+ return values;
291
+ const next = { ...values };
292
+ delete next[sessionId];
293
+ return next;
294
+ }
140
295
  function withGap(current, streamId, expected, received) {
141
296
  return { ...current, gap: { streamId, expected, received } };
142
297
  }
@@ -151,15 +306,22 @@ function selectAvailable(selected, kernel) {
151
306
  function asRecord(value) {
152
307
  return isRecord(value) ? value : {};
153
308
  }
309
+ function isRuntimeToolCall(value) {
310
+ return isRecord(value) && typeof value["id"] === "string" && typeof value["name"] === "string" && typeof value["input"] === "string";
311
+ }
154
312
  function isRecord(value) {
155
313
  return typeof value === "object" && value !== null && !Array.isArray(value);
156
314
  }
157
- function isAgentSnapshot(value) {
315
+ function isSessionMetadata(value) {
158
316
  return (isRecord(value)
159
317
  && typeof value["sessionId"] === "string"
160
318
  && typeof value["upstreamSessionId"] === "string"
161
319
  && typeof value["cwd"] === "string"
162
320
  && (value["status"] === "idle" || value["status"] === "running" || value["status"] === "failed")
163
- && Array.isArray(value["messages"]));
321
+ && typeof value["messageCount"] === "number");
322
+ }
323
+ function isSessionView(value) {
324
+ return isSessionMetadata(value) && Array.isArray(value.messages)
325
+ && typeof value.messageOffset === "number";
164
326
  }
165
327
  //# sourceMappingURL=protocol-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-state.js","sourceRoot":"","sources":["../../../src/ui/shared/protocol-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol-state.js","sourceRoot":"","sources":["../../../src/ui/shared/protocol-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface VirtualRange {
2
+ start: number;
3
+ end: number;
4
+ paddingStart: number;
5
+ paddingEnd: number;
6
+ totalSize: number;
7
+ }
8
+ /**
9
+ * Reports whether a scroll viewport is close enough to its lower boundary to
10
+ * keep following newly appended content. Non-scrollable viewports are at end.
11
+ */
12
+ export declare function isScrollNearEnd(scrollHeight: number, scrollTop: number, clientHeight: number, threshold?: number): boolean;
13
+ /**
14
+ * Variable-height list index backed by a Fenwick tree. Message measurements are
15
+ * retained by stable key, while viewport lookup and height updates stay O(log n).
16
+ */
17
+ export declare class VirtualHeightIndex {
18
+ #private;
19
+ constructor(estimatedSize?: number);
20
+ get count(): number;
21
+ sync(keys: readonly string[]): void;
22
+ update(key: string, size: number): boolean;
23
+ /**
24
+ * `keep` names one item that must stay in the window even if the viewport has
25
+ * moved off it — the item holding the reader's selection. Dropping its element
26
+ * would collapse the selection, and a growing message at the tail is enough to
27
+ * shift the window by an item while they are still dragging.
28
+ */
29
+ range(scrollTop: number, viewportSize: number, overscan?: number, keep?: number): VirtualRange;
30
+ totalSize(): number;
31
+ /** Pixel offset of an item, used to scroll a match into the virtual window. */
32
+ offsetAt(index: number): number;
33
+ }
34
+ //# sourceMappingURL=virtual-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-list.d.ts","sourceRoot":"","sources":["../../../src/ui/shared/virtual-list.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,SAAS,SAAK,GACb,OAAO,CAKT;AAYD;;;GAGG;AACH,qBAAa,kBAAkB;;gBAQjB,aAAa,SAAM;IAO/B,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAenC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAW1C;;;;;OAKG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,SAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY;IAmB3F,SAAS,IAAI,MAAM;IAInB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAmChC"}