@maudecode/talaria-web 1.14.0 → 1.15.0

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 (253) hide show
  1. package/_release.json +4 -4
  2. package/dist/api/automation-router.d.ts +102 -0
  3. package/dist/api/automation-router.js +2 -0
  4. package/dist/api/automation-router.js.map +1 -1
  5. package/dist/api/chat-router.d.ts +589 -52
  6. package/dist/api/chat-router.js +111 -121
  7. package/dist/api/chat-router.js.map +1 -1
  8. package/dist/api/router.d.ts +2 -1
  9. package/dist/api/router.js +3 -1
  10. package/dist/api/router.js.map +1 -1
  11. package/dist/api/sessions-router.d.ts +1913 -299
  12. package/dist/api/sessions-router.js +35 -24
  13. package/dist/api/sessions-router.js.map +1 -1
  14. package/dist/api/settings-router.d.ts +35 -8
  15. package/dist/api/settings-router.js +14 -10
  16. package/dist/api/settings-router.js.map +1 -1
  17. package/dist/api/sse-routes.js +1 -1
  18. package/dist/api/sse-routes.js.map +1 -1
  19. package/dist/app.d.ts +2715 -418
  20. package/dist/config/agent-config.js +20 -15
  21. package/dist/config/agent-config.js.map +1 -1
  22. package/dist/http/context.d.ts +4 -2
  23. package/dist/http/context.js.map +1 -1
  24. package/dist/onboarding.d.ts +1 -1
  25. package/dist/onboarding.js +2 -1
  26. package/dist/onboarding.js.map +1 -1
  27. package/dist/providers/catalog.d.ts +11 -0
  28. package/dist/providers/catalog.js +32 -1
  29. package/dist/providers/catalog.js.map +1 -1
  30. package/dist/runtime.js +54 -16
  31. package/dist/runtime.js.map +1 -1
  32. package/dist/sessions/background-tasks.d.ts +137 -0
  33. package/dist/sessions/background-tasks.js +349 -0
  34. package/dist/sessions/background-tasks.js.map +1 -0
  35. package/dist/sessions/background-updates.d.ts +56 -0
  36. package/dist/sessions/background-updates.js +152 -0
  37. package/dist/sessions/background-updates.js.map +1 -0
  38. package/dist/sessions/cli-sessions.d.ts +6 -0
  39. package/dist/sessions/cli-sessions.js +20 -7
  40. package/dist/sessions/cli-sessions.js.map +1 -1
  41. package/dist/sessions/completions.d.ts +17 -1
  42. package/dist/sessions/completions.js +83 -12
  43. package/dist/sessions/completions.js.map +1 -1
  44. package/dist/sessions/compress.d.ts +33 -0
  45. package/dist/sessions/compress.js +66 -0
  46. package/dist/sessions/compress.js.map +1 -0
  47. package/dist/sessions/list.d.ts +14 -0
  48. package/dist/sessions/list.js +89 -16
  49. package/dist/sessions/list.js.map +1 -1
  50. package/dist/sessions/merge.d.ts +12 -1
  51. package/dist/sessions/merge.js +64 -7
  52. package/dist/sessions/merge.js.map +1 -1
  53. package/dist/sessions/relay.d.ts +7 -1
  54. package/dist/sessions/relay.js +17 -4
  55. package/dist/sessions/relay.js.map +1 -1
  56. package/dist/sessions/service.d.ts +61 -3
  57. package/dist/sessions/service.js +243 -15
  58. package/dist/sessions/service.js.map +1 -1
  59. package/dist/sessions/session.d.ts +16 -0
  60. package/dist/sessions/session.js +23 -2
  61. package/dist/sessions/session.js.map +1 -1
  62. package/dist/sessions/source-kind.d.ts +22 -0
  63. package/dist/sessions/source-kind.js +54 -0
  64. package/dist/sessions/source-kind.js.map +1 -0
  65. package/dist/sessions/state-db.d.ts +10 -1
  66. package/dist/sessions/state-db.js +48 -17
  67. package/dist/sessions/state-db.js.map +1 -1
  68. package/dist/sessions/store.d.ts +2 -0
  69. package/dist/sessions/store.js +23 -4
  70. package/dist/sessions/store.js.map +1 -1
  71. package/dist/sessions/streams.d.ts +3 -0
  72. package/dist/sessions/streams.js +0 -5
  73. package/dist/sessions/streams.js.map +1 -1
  74. package/dist/sessions/titles.d.ts +4 -0
  75. package/dist/sessions/titles.js +16 -0
  76. package/dist/sessions/titles.js.map +1 -1
  77. package/dist/sessions/turn-context.d.ts +1 -0
  78. package/dist/sessions/turn-context.js +3 -0
  79. package/dist/sessions/turn-context.js.map +1 -1
  80. package/dist/sessions/turn.d.ts +66 -6
  81. package/dist/sessions/turn.js +304 -61
  82. package/dist/sessions/turn.js.map +1 -1
  83. package/dist/settings.d.ts +2 -0
  84. package/dist/settings.js +4 -0
  85. package/dist/settings.js.map +1 -1
  86. package/dist/tools/crons.d.ts +34 -3
  87. package/dist/tools/crons.js +271 -31
  88. package/dist/tools/crons.js.map +1 -1
  89. package/package.json +2 -2
  90. package/sidecar/talaria_sidecar/__init__.py +1 -1
  91. package/sidecar/talaria_sidecar/methods/chat.py +233 -6
  92. package/sidecar/talaria_sidecar/methods/cron.py +22 -14
  93. package/sidecar/talaria_sidecar/methods/process.py +318 -0
  94. package/static/dist/FILES.txt +120 -119
  95. package/static/dist/assets/AppShell-orat1s43.js +1 -0
  96. package/static/dist/assets/ChatPage-ojhka3hy.js +22 -0
  97. package/static/dist/assets/HubRoute-gxgw1t33.js +2 -0
  98. package/static/dist/assets/{Markdown-emii55o0.js → Markdown-dy8t4dy7.js} +7 -7
  99. package/static/dist/assets/{RightPanel-o73y98dn.js → RightPanel-c66ani1s.js} +1 -1
  100. package/static/dist/assets/Select-fswf66up.js +1 -0
  101. package/static/dist/assets/SessionListPanel-goh5mtt8.js +1 -0
  102. package/static/dist/assets/{SettingsLayout-lnn2wo2s.js → SettingsLayout-n5d4wq4m.js} +1 -1
  103. package/static/dist/assets/{States-e5hv6gdh.js → States-kxyu50at.js} +1 -1
  104. package/static/dist/assets/{Toaster-c4jq1i26.js → Toaster-6zmbcqgg.js} +1 -1
  105. package/static/dist/assets/_app-fowyruiu.js +1 -0
  106. package/static/dist/assets/_app.ext._extensionId-nvjyrwhy.js +1 -0
  107. package/static/dist/assets/_app.index-c9zv4y7w.js +1 -0
  108. package/static/dist/assets/_app.insights-jf12nofo.js +1 -0
  109. package/static/dist/assets/_app.kanban-lri5a4yu.js +1 -0
  110. package/static/dist/assets/_app.logs-md1p0zqo.js +1 -0
  111. package/static/dist/assets/_app.memory-bzvf2e28.js +1 -0
  112. package/static/dist/assets/_app.profiles-jpg7zmbn.js +1 -0
  113. package/static/dist/assets/{_app.session._sessionId-m6nx9g8t.js → _app.session._sessionId-gyoh5ylx.js} +1 -1
  114. package/static/dist/assets/_app.settings-mpuwlx4j.js +1 -0
  115. package/static/dist/assets/_app.settings._section-knz8rwoj.js +1 -0
  116. package/static/dist/assets/_app.skills-fwu1dkir.js +1 -0
  117. package/static/dist/assets/_app.tasks-h9gphtl3.js +2 -0
  118. package/static/dist/assets/_app.todos-hd1dnvrh.js +1 -0
  119. package/static/dist/assets/_app.workspaces-l8toyn5f.js +1 -0
  120. package/static/dist/assets/{abnfDiagram-VCTEODGH-kejgxpil.js → abnfDiagram-VCTEODGH-cjqletra.js} +1 -1
  121. package/static/dist/assets/architecture-7GRP2DOG-cavnusaw.js +1 -0
  122. package/static/dist/assets/{architectureDiagram-5GKGNRK7-hqnf84fc.js → architectureDiagram-5GKGNRK7-k5a7v36n.js} +1 -1
  123. package/static/dist/assets/back-e4m6nsnm.js +1 -0
  124. package/static/dist/assets/{blockDiagram-I7D4REHJ-l1466a7j.js → blockDiagram-I7D4REHJ-b195z021.js} +1 -1
  125. package/static/dist/assets/{c4Diagram-7LVT6UL2-gg3aq3sr.js → c4Diagram-7LVT6UL2-olu212k1.js} +1 -1
  126. package/static/dist/assets/channel-gozy3dp3.js +1 -0
  127. package/static/dist/assets/{chunk-4HAMMTFA-oalgz5l8.js → chunk-4HAMMTFA-b8o1nufs.js} +1 -1
  128. package/static/dist/assets/{chunk-75Z2AOVW-babmzhdg.js → chunk-75Z2AOVW-l1seddto.js} +1 -1
  129. package/static/dist/assets/{chunk-DU6HZSFF-lagu350c.js → chunk-DU6HZSFF-lo5zg15v.js} +3 -3
  130. package/static/dist/assets/{chunk-F27PBJKO-gjh2tqif.js → chunk-F27PBJKO-dsdzrp16.js} +1 -1
  131. package/static/dist/assets/{chunk-GMAD6QVW-ipdgja5c.js → chunk-GMAD6QVW-f3fxqq8b.js} +1 -1
  132. package/static/dist/assets/{chunk-GVQU2GXP-j8wkn1at.js → chunk-GVQU2GXP-h8egxtf6.js} +1 -1
  133. package/static/dist/assets/{chunk-IMKFNOWR-k00laqyk.js → chunk-IMKFNOWR-iolwd8s0.js} +1 -1
  134. package/static/dist/assets/{chunk-L3NEJ4N5-fju6xqj4.js → chunk-L3NEJ4N5-b88bbtwi.js} +1 -1
  135. package/static/dist/assets/{chunk-OSK3NFVY-bi6widqt.js → chunk-OSK3NFVY-e3e7nr6s.js} +1 -1
  136. package/static/dist/assets/{chunk-P2QGCYS3-czr4tebv.js → chunk-P2QGCYS3-mdc46rt1.js} +1 -1
  137. package/static/dist/assets/{chunk-POPQ4Y6H-ktdhn67w.js → chunk-POPQ4Y6H-kqlllrrm.js} +1 -1
  138. package/static/dist/assets/{chunk-PWAF6VOD-ii4dsu0d.js → chunk-PWAF6VOD-he585k2x.js} +1 -1
  139. package/static/dist/assets/{chunk-SHT3W25Y-fpwk3xxp.js → chunk-SHT3W25Y-gh94y9a4.js} +1 -1
  140. package/static/dist/assets/{chunk-SVP7TREG-k0jrvhei.js → chunk-SVP7TREG-euxp9y7e.js} +1 -1
  141. package/static/dist/assets/{chunk-TICWLB2K-nkqv9ot0.js → chunk-TICWLB2K-c8cxes1q.js} +1 -1
  142. package/static/dist/assets/classDiagram-ZZMXUADV-n0vs2f2q.js +1 -0
  143. package/static/dist/assets/classDiagram-v2-VYDZK3BY-n0vs2f2q.js +1 -0
  144. package/static/dist/assets/{copied-gpchexqu.js → copied-kq0u3ht7.js} +1 -1
  145. package/static/dist/assets/{cynefin-OW5HDTMX-lqxt8rs3.js → cynefin-OW5HDTMX-lxd44ux4.js} +1 -1
  146. package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-j9eqovf5.js → cynefinDiagram-5FMLGOSQ-njpiwat8.js} +1 -1
  147. package/static/dist/assets/{dagre-GXQ25YYZ-m9agobjm.js → dagre-GXQ25YYZ-nvgy6yju.js} +1 -1
  148. package/static/dist/assets/{diagram-S7CK7UJ4-itodc50c.js → diagram-S7CK7UJ4-g98nyv72.js} +1 -1
  149. package/static/dist/assets/{diagram-UQ7AKVKN-n1h2t4ah.js → diagram-UQ7AKVKN-ovgm6lvv.js} +1 -1
  150. package/static/dist/assets/{diagram-VSXAHHWV-lvtvm9bj.js → diagram-VSXAHHWV-pb2bn2e4.js} +1 -1
  151. package/static/dist/assets/{diagram-VX7I27RA-cgas58sy.js → diagram-VX7I27RA-6j4mvfqo.js} +1 -1
  152. package/static/dist/assets/{diagram-Z3DM3KII-d0aeps1q.js → diagram-Z3DM3KII-dqmb982r.js} +1 -1
  153. package/static/dist/assets/{ebnfDiagram-PWID7BFC-md345fyq.js → ebnfDiagram-PWID7BFC-ozbpzb6d.js} +1 -1
  154. package/static/dist/assets/{endpoints-e58saih3.js → endpoints-k8agnro8.js} +8 -8
  155. package/static/dist/assets/{erDiagram-RLTQ6QDP-i4rua63b.js → erDiagram-RLTQ6QDP-hl7m8vua.js} +1 -1
  156. package/static/dist/assets/eventmodeling-NTZA5JFV-j1y2ekec.js +1 -0
  157. package/static/dist/assets/flowDiagram-HODETNUW-g2cvcbm5.js +1 -0
  158. package/static/dist/assets/{ganttDiagram-EL5Y4UJY-geqx7zgl.js → ganttDiagram-EL5Y4UJY-ompixqmh.js} +1 -1
  159. package/static/dist/assets/{gitGraph-4MIJSDKK-leoq0z8t.js → gitGraph-4MIJSDKK-b6vxwp9q.js} +1 -1
  160. package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-llrlxfha.js → gitGraphDiagram-WWUBYQGX-k98f57on.js} +1 -1
  161. package/static/dist/assets/{highlighted-body-KPVGNVTW-kq2cnw6q.js → highlighted-body-KPVGNVTW-cd3ff6ge.js} +1 -1
  162. package/static/dist/assets/index-nfy0ezs6.css +2 -0
  163. package/static/dist/assets/{index-f9bzglkn.js → index-nqed3oum.js} +3 -3
  164. package/static/dist/assets/{info-A6RAGUB7-lkly4xj6.js → info-A6RAGUB7-hjcwjami.js} +1 -1
  165. package/static/dist/assets/{infoDiagram-27XIBGKW-oo7kdyte.js → infoDiagram-27XIBGKW-fm06rj36.js} +1 -1
  166. package/static/dist/assets/{ishikawaDiagram-5VMMS53U-hq6jf374.js → ishikawaDiagram-5VMMS53U-bxak4mwu.js} +1 -1
  167. package/static/dist/assets/{journeyDiagram-3NMN7TZE-is03ntb0.js → journeyDiagram-3NMN7TZE-khmihclr.js} +1 -1
  168. package/static/dist/assets/{kanban-definition-UXKFOSKX-jmerizqb.js → kanban-definition-UXKFOSKX-h1r32wdx.js} +1 -1
  169. package/static/dist/assets/{lazyRouteComponent-b1h2ykmb.js → lazyRouteComponent-b2eg0fws.js} +1 -1
  170. package/static/dist/assets/{line-laaa8h99.js → line-friyjof3.js} +1 -1
  171. package/static/dist/assets/{link-d8f0788e.js → link-m90ahx3n.js} +1 -1
  172. package/static/dist/assets/login-bw7m2fzo.js +1 -0
  173. package/static/dist/assets/mermaid-HWGCJPDP-njwcl62n.js +1 -0
  174. package/static/dist/assets/{mermaid-parser.core-ix4junux.js → mermaid-parser.core-f1gvpwrt.js} +3 -3
  175. package/static/dist/assets/{mindmap-definition-YA3MSWOX-o0e0adl1.js → mindmap-definition-YA3MSWOX-mt2oxwue.js} +1 -1
  176. package/static/dist/assets/{onboarding-lx0d6b38.js → onboarding-ret37j1e.js} +1 -1
  177. package/static/dist/assets/{packet-AYTQ26CC-kl8pwsyg.js → packet-AYTQ26CC-jik4ixlf.js} +1 -1
  178. package/static/dist/assets/{pegDiagram-XKGWAZYB-bbqn9jo4.js → pegDiagram-XKGWAZYB-erxlv6cc.js} +1 -1
  179. package/static/dist/assets/{pie-WAS4IAKB-cpyo8bkr.js → pie-WAS4IAKB-mnkoldfl.js} +1 -1
  180. package/static/dist/assets/{pieDiagram-E7YTZNPT-pelug34f.js → pieDiagram-E7YTZNPT-i7lwrada.js} +1 -1
  181. package/static/dist/assets/{quadrantDiagram-AXDQQJYC-jds4jmr5.js → quadrantDiagram-AXDQQJYC-fr8ejdoy.js} +1 -1
  182. package/static/dist/assets/{radar-RG4KPBEZ-e02oxnvd.js → radar-RG4KPBEZ-otarjte2.js} +1 -1
  183. package/static/dist/assets/{railroad-74A4TZTK-kz3delwo.js → railroad-74A4TZTK-lw362oto.js} +1 -1
  184. package/static/dist/assets/railroad-abnf-HS5TGJTU-m741owar.js +1 -0
  185. package/static/dist/assets/railroad-ebnf-LZEXJU2U-noa4fbia.js +1 -0
  186. package/static/dist/assets/railroad-peg-WCYAUIDC-o4bpw4nb.js +1 -0
  187. package/static/dist/assets/{railroadDiagram-O6MQD6OU-jgroj2ew.js → railroadDiagram-O6MQD6OU-esyn75pw.js} +1 -1
  188. package/static/dist/assets/{refresh-cw-k7yxjdn3.js → refresh-cw-k66keho6.js} +1 -1
  189. package/static/dist/assets/{requirementDiagram-BXWQKSXE-m4az5e0j.js → requirementDiagram-BXWQKSXE-cyhi5u29.js} +1 -1
  190. package/static/dist/assets/{sankeyDiagram-P5KCCOFB-vlryqiv3.js → sankeyDiagram-P5KCCOFB-jljpbo0h.js} +1 -1
  191. package/static/dist/assets/{saved-brdfjjnw.js → saved-do49si3v.js} +1 -1
  192. package/static/dist/assets/{search-gt2ueyvg.js → search-j5ki6a9o.js} +1 -1
  193. package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-fr8hrpql.js → sequenceDiagram-WJ2MYXX4-fz0dhlu7.js} +1 -1
  194. package/static/dist/assets/{settings_section_extensions_title-l0zodj0b.js → settings_section_extensions_title-b7lojn0o.js} +1 -1
  195. package/static/dist/assets/share._token-kg8w647b.js +2 -0
  196. package/static/dist/assets/{sliders-horizontal-gcgscv8r.js → sliders-horizontal-c4wya4dy.js} +1 -1
  197. package/static/dist/assets/{stateDiagram-D77RDMKH-bg548iyr.js → stateDiagram-D77RDMKH-kdnithdx.js} +1 -1
  198. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-k2wg2645.js +1 -0
  199. package/static/dist/assets/{swimlanes-42K2YHIH-hk5z3efh.js → swimlanes-42K2YHIH-esd6gmz3.js} +1 -1
  200. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-n5kvjtgr.js +8 -0
  201. package/static/dist/assets/tabBuild-bjmyvmn5.js +56 -0
  202. package/static/dist/assets/{timeline-definition-24CTP7MA-olvknr62.js → timeline-definition-24CTP7MA-g0qygccv.js} +1 -1
  203. package/static/dist/assets/todoStore-kjk5l0sy.js +1 -0
  204. package/static/dist/assets/{treeView-Q6P3EWNA-ovvjsxtf.js → treeView-Q6P3EWNA-ndchzkuu.js} +1 -1
  205. package/static/dist/assets/{treemap-WGGIJYW6-ggkipj59.js → treemap-WGGIJYW6-hwjxj0zz.js} +1 -1
  206. package/static/dist/assets/{untitled-c8ydw0bu.js → untitled-mbr6tuhu.js} +1 -1
  207. package/static/dist/assets/{useForm-kd759sjk.js → useForm-ocxu460f.js} +1 -1
  208. package/static/dist/assets/useLocale-fzy5jhg6.js +1 -0
  209. package/static/dist/assets/{useParams-katwvzil.js → useParams-lo9u33d1.js} +1 -1
  210. package/static/dist/assets/{useSearch-c70sgau1.js → useSearch-lq1mr090.js} +1 -1
  211. package/static/dist/assets/{vennDiagram-4TSXK5OY-hzld7zt7.js → vennDiagram-4TSXK5OY-gubovd1r.js} +1 -1
  212. package/static/dist/assets/{wardley-WFR3VGLG-hxkeoms8.js → wardley-WFR3VGLG-ir3om65j.js} +1 -1
  213. package/static/dist/assets/{wardleyDiagram-VM6X3IG4-ljh90mb1.js → wardleyDiagram-VM6X3IG4-ce0or1ie.js} +1 -1
  214. package/static/dist/assets/{xychartDiagram-S5SC5T6Z-mnuaes03.js → xychartDiagram-S5SC5T6Z-dexylcjg.js} +1 -1
  215. package/static/dist/index.html +1 -1
  216. package/static/dist/sw.js +1 -1
  217. package/static/dist/assets/AppShell-haqi9qzu.js +0 -1
  218. package/static/dist/assets/ChatPage-hjyu2g64.js +0 -22
  219. package/static/dist/assets/HubRoute-gkd8o1vg.js +0 -2
  220. package/static/dist/assets/Select-jld3yeni.js +0 -1
  221. package/static/dist/assets/SessionListPanel-d3qx4ric.js +0 -1
  222. package/static/dist/assets/_app-bnip2pjg.js +0 -1
  223. package/static/dist/assets/_app.ext._extensionId-egptzrfy.js +0 -1
  224. package/static/dist/assets/_app.index-vdz13ul5.js +0 -1
  225. package/static/dist/assets/_app.insights-lgjshsba.js +0 -1
  226. package/static/dist/assets/_app.kanban-c18cjrpz.js +0 -1
  227. package/static/dist/assets/_app.logs-ezhojgeg.js +0 -1
  228. package/static/dist/assets/_app.memory-i00paisv.js +0 -1
  229. package/static/dist/assets/_app.profiles-kd02bwjx.js +0 -1
  230. package/static/dist/assets/_app.settings-giaudkuk.js +0 -1
  231. package/static/dist/assets/_app.settings._section-k4qtlexk.js +0 -1
  232. package/static/dist/assets/_app.skills-bby2uvl8.js +0 -1
  233. package/static/dist/assets/_app.tasks-1kz9bosm.js +0 -2
  234. package/static/dist/assets/_app.todos-izjdbkm2.js +0 -1
  235. package/static/dist/assets/_app.workspaces-lfh2kw7s.js +0 -1
  236. package/static/dist/assets/architecture-7GRP2DOG-b4u9z1w3.js +0 -1
  237. package/static/dist/assets/channel-o77ioktg.js +0 -1
  238. package/static/dist/assets/classDiagram-ZZMXUADV-f5rvod26.js +0 -1
  239. package/static/dist/assets/classDiagram-v2-VYDZK3BY-f5rvod26.js +0 -1
  240. package/static/dist/assets/eventmodeling-NTZA5JFV-bn3fjsaq.js +0 -1
  241. package/static/dist/assets/flowDiagram-HODETNUW-li70d120.js +0 -1
  242. package/static/dist/assets/index-gkh7kum4.css +0 -2
  243. package/static/dist/assets/login-llkohrcg.js +0 -1
  244. package/static/dist/assets/mermaid-HWGCJPDP-id0ffk2r.js +0 -1
  245. package/static/dist/assets/railroad-abnf-HS5TGJTU-l13ped2z.js +0 -1
  246. package/static/dist/assets/railroad-ebnf-LZEXJU2U-c7rg3g4g.js +0 -1
  247. package/static/dist/assets/railroad-peg-WCYAUIDC-od0b8niq.js +0 -1
  248. package/static/dist/assets/share._token-oyjv046r.js +0 -2
  249. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-j5v40qih.js +0 -1
  250. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-grzefo9c.js +0 -8
  251. package/static/dist/assets/tabBuild-idliyw9f.js +0 -56
  252. package/static/dist/assets/todoStore-j4c2xq0b.js +0 -1
  253. package/static/dist/assets/useLocale-hds4xmja.js +0 -1
@@ -0,0 +1,137 @@
1
+ import type { BackgroundLink, BackgroundTask } from '@maudecode/talaria-web-contracts';
2
+ import type { SidecarLike } from '../sidecar/client.js';
3
+ type Dict = Record<string, unknown>;
4
+ type Status = BackgroundTask['status'];
5
+ type Kind = BackgroundTask['kind'];
6
+ type Agents = NonNullable<BackgroundTask['agents']>;
7
+ /** What the server keeps per record; `result` is the full result text when the Agent will not keep it. */
8
+ export interface Receipt {
9
+ task_id: string;
10
+ kind: Kind;
11
+ status: Status;
12
+ title: string;
13
+ started_at: number | null;
14
+ updated_at: number;
15
+ completed_at: number | null;
16
+ exit_code: number | null;
17
+ agents: Agents | null;
18
+ /** TAL-494: the subagent sessions a delegation ran, kept once seen (the Agent forgets a child's id when it ends). */
19
+ children?: ChildSession[];
20
+ result: string | null;
21
+ /** The Agent has the full result (a delegation's ledger row). */
22
+ agent_result: boolean;
23
+ /** The `/background` turn running it, while it runs. */
24
+ stream_id: string | null;
25
+ dismissed_at: number | null;
26
+ /** Old clients' `/api/background/status` has returned it once. */
27
+ legacy_reported: boolean;
28
+ }
29
+ export interface ChildSession {
30
+ goal: string;
31
+ session_id: string;
32
+ }
33
+ export interface DelegationRow {
34
+ delegation_id: string;
35
+ state: string;
36
+ dispatched_at: number | null;
37
+ completed_at: number | null;
38
+ updated_at: number | null;
39
+ goals: string[];
40
+ child_statuses: string[];
41
+ has_result: boolean;
42
+ live_status: string | null;
43
+ children?: ChildSession[] | undefined;
44
+ }
45
+ export interface ProcessRow {
46
+ process_id: string;
47
+ command: string;
48
+ started_at: number | null;
49
+ exited: boolean;
50
+ exited_at: number | null;
51
+ exit_code: number | null;
52
+ completion_reason: string;
53
+ watched: boolean;
54
+ }
55
+ export declare function isTerminal(status: Status): boolean;
56
+ /** One line, never output: the goal, command or prompt a record is about. */
57
+ export declare function taskTitle(text: unknown): string;
58
+ /** Subagent counts of a delegation unit: finished children by outcome, the rest still running. */
59
+ export declare function agentCounts(total: number, childStatuses: string[], running: boolean): Agents;
60
+ /** The record a ledger row describes; a live `stalling`/`stalled` unit needs attention. */
61
+ export declare function delegationReceipt(row: DelegationRow, now: number): Partial<Receipt> & Pick<Receipt, 'task_id' | 'kind'>;
62
+ /** A notified or watched process as the registry reports it: killed is cancelled, a non-zero exit failed. */
63
+ export declare function processReceipt(row: ProcessRow): Partial<Receipt> & Pick<Receipt, 'task_id' | 'kind'>;
64
+ /** The record one drained completion event settles, with the full result text when the Agent does not keep it. */
65
+ export declare function eventReceipt(evt: Dict, prompt: string, now: number): (Partial<Receipt> & Pick<Receipt, 'task_id' | 'kind'>) | null;
66
+ /** Fold an update into a receipt: a terminal record never reopens, and fields an update leaves out are kept. */
67
+ export declare function mergeReceipt(prev: Receipt | undefined, next: Partial<Receipt> & Pick<Receipt, 'task_id' | 'kind'>, now: number): Receipt;
68
+ /** The record every client sees; `unconfirmed` shows running work the Agent did not confirm as `unknown`. */
69
+ export declare function taskView(r: Receipt, opts?: {
70
+ unconfirmed?: boolean;
71
+ }): BackgroundTask;
72
+ /** The receipts of every session, one small file each, cached after the first read. */
73
+ export declare class BackgroundTaskStore {
74
+ private readonly sessionDir;
75
+ private readonly now;
76
+ private readonly onChange?;
77
+ private readonly cache;
78
+ constructor(sessionDir: string, now: () => number, onChange?: ((sid: string) => void) | undefined);
79
+ private path;
80
+ list(sid: string): Receipt[];
81
+ get(sid: string, taskId: string): Receipt | undefined;
82
+ /** Apply updates; writes and notifies only when something a client sees changed. */
83
+ update(sid: string, updates: (Partial<Receipt> & Pick<Receipt, 'task_id' | 'kind'>)[], opts?: {
84
+ notify?: boolean;
85
+ }): boolean;
86
+ /** Flags that are not task state: dismissal, the legacy status read. */
87
+ mark(sid: string, taskId: string, fields: Partial<Pick<Receipt, 'dismissed_at' | 'legacy_reported' | 'stream_id'>>): Receipt | null;
88
+ /** The session was deleted: its records go from memory too (the file goes with the session's other files). */
89
+ evict(sid: string): void;
90
+ /** Drop a `/background` task that never started. */
91
+ forget(sid: string, taskId: string): void;
92
+ private write;
93
+ }
94
+ /** Delegation ids a `delegate_task` result names: the call's id (split units extend it as `<id>-<n>`) and any unit ids. */
95
+ export declare function dispatchedDelegationIds(result: unknown): string[];
96
+ /** The link a delegation tool row shows: its units' records, one combined status, and summed subagent counts. */
97
+ export declare function backgroundLink(ids: string[], receipts: Receipt[]): BackgroundLink | null;
98
+ /** Stamps `tool.background` on delegation rows of every turn's scene. Returns copies; stored rows are untouched. */
99
+ export declare function withBackgroundLinks<T>(messages: T[], receipts: Receipt[]): T[];
100
+ export interface BackgroundActivityDeps {
101
+ store: BackgroundTaskStore;
102
+ sidecar: () => SidecarLike | null;
103
+ profileHome: (profile: string | null) => string;
104
+ /** The stream is still running in this server. */
105
+ liveStream: (streamId: string) => boolean;
106
+ now: () => number;
107
+ log: (line: string) => void;
108
+ }
109
+ /** The session-facing side: `/background` bookkeeping, drained completions, and the snapshot every client reads. */
110
+ export declare class BackgroundActivity {
111
+ private readonly deps;
112
+ constructor(deps: BackgroundActivityDeps);
113
+ receipts(sid: string): Receipt[];
114
+ trackCommand(sid: string, taskId: string, prompt: string): void;
115
+ setCommandStream(sid: string, taskId: string, streamId: string): void;
116
+ /** The `/background` turn finished: its answer, or the failure text old clients showed, is the result. */
117
+ settleCommand(sid: string, taskId: string, outcome: 'completed' | 'failed', text: string): void;
118
+ forgetCommand(sid: string, taskId: string): void;
119
+ /** A drained completion settles (or flags) its record. */
120
+ recordEvent(sid: string, evt: Dict, prompt: string): void;
121
+ /** The session's records, refreshed from the Agent; work it cannot confirm right now shows `unknown`. */
122
+ snapshot(sid: string, profile: string | null): Promise<{
123
+ tasks: BackgroundTask[];
124
+ agent_available: boolean;
125
+ agents_working: boolean;
126
+ }>;
127
+ /** The full result: kept here for `/background` and drained completions, else the Agent's ledger for a delegation. */
128
+ result(sid: string, profile: string | null, taskId: string): Promise<string | null>;
129
+ /** Dismissal is read state, separate from the task: the record stays in the history and leaves the tray. */
130
+ dismiss(sid: string, taskId: string): BackgroundTask | null;
131
+ /**
132
+ * Old clients' `/api/background/status`: each finished `/background` result once per server, as before. The record and
133
+ * its result stay; the shared `tasks` view is not affected.
134
+ */
135
+ legacyResults(sid: string): Record<string, unknown>[];
136
+ }
137
+ export {};
@@ -0,0 +1,349 @@
1
+ /**
2
+ * TAL-372: one durable lifecycle for a session's background work: delegated agents (the Agent's ledger), notified or
3
+ * watched processes (the Agent's process registry and completion queue) and `/background` tasks (this server). Each piece
4
+ * of work is one record with a stable id; the server keeps a small receipt per record under
5
+ * `sessions/_background/<sid>.json`, so reloads, restarts and every client read the same history, and reading never
6
+ * consumes anything. The Agent stays authoritative for its own work: a receipt only fills in what it no longer reports.
7
+ */
8
+ import { mkdirSync, readFileSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { atomicWriteText } from '../fs/atomic.js';
11
+ import { str } from '../util.js';
12
+ import { isDict } from './merge.js';
13
+ import { isSafeSessionId } from './session.js';
14
+ const DIR_NAME = '_background';
15
+ const RECORD_LIMIT = 200;
16
+ const RESULT_LIMIT = 64_000;
17
+ const TITLE_LIMIT = 160;
18
+ const TERMINAL = new Set(['completed', 'failed', 'cancelled']);
19
+ const LIVE = new Set(['running', 'attention', 'unknown']);
20
+ const CHILD_DONE = new Set(['completed', 'success']);
21
+ const RUNNING_STATES = new Set(['running', 'stalling', 'finalizing']);
22
+ const RUNNING_LIKE = new Set(['running', 'attention']);
23
+ const CHILD_CANCELLED = new Set(['interrupted', 'cancelled']);
24
+ export function isTerminal(status) { return TERMINAL.has(status); }
25
+ /** One line, never output: the goal, command or prompt a record is about. */
26
+ export function taskTitle(text) {
27
+ const first = str(text).split('\n').map((l) => l.trim()).find(Boolean) ?? '';
28
+ return first.length <= TITLE_LIMIT ? first : `${first.slice(0, TITLE_LIMIT)}…`;
29
+ }
30
+ function bounded(text) { return text.length <= RESULT_LIMIT ? text : `${text.slice(0, RESULT_LIMIT)}\n…(truncated)`; }
31
+ /** Subagent counts of a delegation unit: finished children by outcome, the rest still running. */
32
+ export function agentCounts(total, childStatuses, running) {
33
+ const completed = childStatuses.filter((s) => CHILD_DONE.has(s)).length;
34
+ const failed = childStatuses.filter((s) => s && !CHILD_DONE.has(s)).length;
35
+ const n = Math.max(total, childStatuses.length, 1);
36
+ return { total: n, completed, failed, running: running ? Math.max(0, n - completed - failed) : 0 };
37
+ }
38
+ /** A finished unit's status from its children: all cancelled is cancelled, none done is failed, else completed. */
39
+ function unitStatus(state, childStatuses) {
40
+ if (CHILD_CANCELLED.has(state) || (childStatuses.length && childStatuses.every((s) => CHILD_CANCELLED.has(s))))
41
+ return 'cancelled';
42
+ if (childStatuses.length)
43
+ return childStatuses.some((s) => CHILD_DONE.has(s)) ? 'completed' : 'failed';
44
+ return CHILD_DONE.has(state) ? 'completed' : 'failed';
45
+ }
46
+ /** The record a ledger row describes; a live `stalling`/`stalled` unit needs attention. */
47
+ export function delegationReceipt(row, now) {
48
+ const running = RUNNING_STATES.has(row.state);
49
+ const status = running ? (row.live_status === 'stalling' || row.live_status === 'stalled' || row.state === 'stalling' ? 'attention' : 'running') : unitStatus(row.state, row.child_statuses);
50
+ const goals = row.goals.filter(Boolean);
51
+ return {
52
+ task_id: row.delegation_id, kind: 'delegation', status, title: taskTitle(goals.length > 1 ? `${goals.length} subagents: ${goals.join('; ')}` : goals[0]),
53
+ started_at: row.dispatched_at, completed_at: running ? null : row.completed_at ?? row.updated_at ?? now,
54
+ agents: agentCounts(goals.length, running ? [] : row.child_statuses, running), agent_result: row.has_result,
55
+ ...(row.children?.length ? { children: row.children } : {}),
56
+ };
57
+ }
58
+ /** A notified or watched process as the registry reports it: killed is cancelled, a non-zero exit failed. */
59
+ export function processReceipt(row) {
60
+ const exit = row.exit_code ?? null;
61
+ const status = !row.exited ? 'running' : row.completion_reason === 'killed' ? 'cancelled' : exit !== null && exit !== 0 ? 'failed' : 'completed';
62
+ return { task_id: row.process_id, kind: 'process', status, title: taskTitle(row.command), started_at: row.started_at, completed_at: row.exited ? row.exited_at : null, exit_code: exit };
63
+ }
64
+ /** The record one drained completion event settles, with the full result text when the Agent does not keep it. */
65
+ export function eventReceipt(evt, prompt, now) {
66
+ const type = str(evt.type ?? 'completion');
67
+ const id = str(evt.process_id).trim();
68
+ if (!id)
69
+ return null;
70
+ if (type === 'async_delegation') {
71
+ const goals = Array.isArray(evt.goals) ? evt.goals.map(str) : [];
72
+ const results = Array.isArray(evt.results) ? evt.results.filter(isDict) : [];
73
+ // A split unit's results index the call's goals; a whole call or a single task is all of them.
74
+ const unitGoals = results.length && results.every((r) => typeof r.task_index === 'number') ? results.map((r) => goals[Number(r.task_index)] ?? str(r.goal)) : goals.length ? goals : [str(evt.goal)];
75
+ const childStatuses = results.length ? results.map((r) => str(r.status)) : [str(evt.status)];
76
+ return { ...delegationReceipt({ delegation_id: id, state: str(evt.status) || 'completed', dispatched_at: Number(evt.dispatched_at) || null, completed_at: Number(evt.completed_at) || now, updated_at: now, goals: unitGoals, child_statuses: childStatuses, has_result: true, live_status: null }, now), result: prompt ? bounded(prompt) : null };
77
+ }
78
+ if (type === 'completion') {
79
+ return { ...processReceipt({ process_id: id, command: str(evt.command), started_at: null, exited: true, exited_at: now, exit_code: evt.exit_code === undefined || evt.exit_code === null ? null : Number(evt.exit_code), completion_reason: str(evt.completion_reason) || 'exited', watched: false }), result: prompt ? bounded(prompt) : null };
80
+ }
81
+ // A watch match (or watch notice) on a process that keeps running.
82
+ return { task_id: id, kind: 'process', status: 'attention', title: taskTitle(evt.command), result: prompt ? bounded(prompt) : null };
83
+ }
84
+ /** Children seen so far plus newly reported ones, by session id, first-seen order. */
85
+ function mergeChildren(known, reported) {
86
+ const out = [...(known ?? [])];
87
+ for (const c of reported ?? [])
88
+ if (!out.some((k) => k.session_id === c.session_id))
89
+ out.push(c);
90
+ return out;
91
+ }
92
+ /** Fold an update into a receipt: a terminal record never reopens, and fields an update leaves out are kept. */
93
+ export function mergeReceipt(prev, next, now) {
94
+ const base = prev ?? { task_id: next.task_id, kind: next.kind, status: 'running', title: '', started_at: null, updated_at: now, completed_at: null, exit_code: null, agents: null, result: null, agent_result: false, stream_id: null, dismissed_at: null, legacy_reported: false };
95
+ const defined = Object.fromEntries(Object.entries(next).filter(([, v]) => v !== undefined && v !== null && v !== ''));
96
+ const children = mergeChildren(base.children, defined.children);
97
+ if (isTerminal(base.status)) {
98
+ // Settled once: later reports may add detail (the full result, counts, child sessions) but never change the outcome.
99
+ return { ...base, result: base.result ?? defined.result ?? null, agent_result: base.agent_result || Boolean(defined.agent_result), agents: base.agents ?? defined.agents ?? null, ...(children.length ? { children } : {}), updated_at: base.updated_at };
100
+ }
101
+ // A process's matched watch needs attention until it ends; the registry only knows it is still running.
102
+ if (base.kind === 'process' && base.status === 'attention' && defined.status === 'running')
103
+ delete defined.status;
104
+ const merged = { ...base, ...defined, task_id: base.task_id, kind: base.kind, ...(children.length ? { children } : {}), updated_at: now };
105
+ if (isTerminal(merged.status)) {
106
+ merged.completed_at = merged.completed_at ?? now;
107
+ merged.stream_id = null;
108
+ }
109
+ return merged;
110
+ }
111
+ function sameReceipt(a, b) {
112
+ if (!a)
113
+ return false;
114
+ return JSON.stringify({ ...a, updated_at: 0 }) === JSON.stringify({ ...b, updated_at: 0 });
115
+ }
116
+ function dismissible(r, status) {
117
+ return status === 'unknown' || (r.kind === 'background_command' && isTerminal(r.status));
118
+ }
119
+ /** The record every client sees; `unconfirmed` shows running work the Agent did not confirm as `unknown`. */
120
+ export function taskView(r, opts = {}) {
121
+ const status = opts.unconfirmed && LIVE.has(r.status) ? 'unknown' : r.status;
122
+ return {
123
+ task_id: r.task_id, kind: r.kind, status, title: r.title, started_at: r.started_at, updated_at: r.updated_at, completed_at: r.completed_at,
124
+ result_available: isTerminal(r.status) || r.status === 'attention' ? Boolean(r.result) || r.agent_result : false,
125
+ child_sessions: (r.children ?? []).filter((c) => isSafeSessionId(c.session_id)).map((c) => ({ goal: c.goal, session_id: c.session_id })), exit_code: r.exit_code, agents: r.agents,
126
+ // Work nobody can confirm (lost in an Agent or server restart) can be dismissed like a finished `/background` result.
127
+ pinned: status === 'running' || status === 'attention' || (dismissible(r, status) && r.dismissed_at === null),
128
+ // Dismissed work nobody can confirm will not settle on its own; clients stop refreshing for it.
129
+ active: LIVE.has(status) && !(status === 'unknown' && r.dismissed_at !== null),
130
+ dismissible: dismissible(r, status) && r.dismissed_at === null,
131
+ };
132
+ }
133
+ /** The receipts of every session, one small file each, cached after the first read. */
134
+ export class BackgroundTaskStore {
135
+ sessionDir;
136
+ now;
137
+ onChange;
138
+ cache = new Map();
139
+ constructor(sessionDir, now, onChange) {
140
+ this.sessionDir = sessionDir;
141
+ this.now = now;
142
+ this.onChange = onChange;
143
+ }
144
+ path(sid) { return join(this.sessionDir, DIR_NAME, `${sid}.json`); }
145
+ list(sid) {
146
+ if (!isSafeSessionId(sid))
147
+ return [];
148
+ const cached = this.cache.get(sid);
149
+ if (cached)
150
+ return cached;
151
+ let receipts = [];
152
+ try {
153
+ const parsed = JSON.parse(readFileSync(this.path(sid), 'utf8'));
154
+ // ponytail: receipts are trusted as this server wrote them; validate per field if the file ever comes from elsewhere.
155
+ if (isDict(parsed) && Array.isArray(parsed.tasks))
156
+ receipts = parsed.tasks.filter(isDict);
157
+ }
158
+ catch {
159
+ receipts = [];
160
+ }
161
+ this.cache.set(sid, receipts);
162
+ return receipts;
163
+ }
164
+ get(sid, taskId) { return this.list(sid).find((r) => r.task_id === taskId); }
165
+ /** Apply updates; writes and notifies only when something a client sees changed. */
166
+ update(sid, updates, opts = {}) {
167
+ if (!isSafeSessionId(sid) || !updates.length)
168
+ return false;
169
+ const now = this.now();
170
+ const receipts = [...this.list(sid)];
171
+ let changed = false;
172
+ for (const update of updates) {
173
+ const index = receipts.findIndex((r) => r.task_id === update.task_id);
174
+ const merged = mergeReceipt(index >= 0 ? receipts[index] : undefined, update, now);
175
+ if (sameReceipt(receipts[index], merged))
176
+ continue;
177
+ if (index >= 0)
178
+ receipts[index] = merged;
179
+ else
180
+ receipts.push(merged);
181
+ changed = true;
182
+ }
183
+ if (!changed)
184
+ return false;
185
+ this.write(sid, receipts);
186
+ if (opts.notify !== false)
187
+ this.onChange?.(sid);
188
+ return true;
189
+ }
190
+ /** Flags that are not task state: dismissal, the legacy status read. */
191
+ mark(sid, taskId, fields) {
192
+ const receipts = [...this.list(sid)];
193
+ const index = receipts.findIndex((r) => r.task_id === taskId);
194
+ if (index < 0)
195
+ return null;
196
+ receipts[index] = { ...receipts[index], ...fields };
197
+ this.write(sid, receipts);
198
+ if (fields.dismissed_at !== undefined)
199
+ this.onChange?.(sid);
200
+ return receipts[index];
201
+ }
202
+ /** The session was deleted: its records go from memory too (the file goes with the session's other files). */
203
+ evict(sid) { this.cache.delete(sid); }
204
+ /** Drop a `/background` task that never started. */
205
+ forget(sid, taskId) {
206
+ const receipts = this.list(sid).filter((r) => r.task_id !== taskId);
207
+ this.write(sid, receipts);
208
+ }
209
+ write(sid, receipts) {
210
+ // Newest RECORD_LIMIT by start; running work is never pruned.
211
+ const kept = receipts.length <= RECORD_LIMIT ? receipts : [...receipts.filter((r) => !isTerminal(r.status)), ...receipts.filter((r) => isTerminal(r.status)).sort((a, b) => (b.completed_at ?? 0) - (a.completed_at ?? 0)).slice(0, RECORD_LIMIT)];
212
+ this.cache.set(sid, kept);
213
+ mkdirSync(join(this.sessionDir, DIR_NAME), { recursive: true });
214
+ atomicWriteText(this.path(sid), JSON.stringify({ version: 1, tasks: kept }));
215
+ }
216
+ }
217
+ /** Delegation ids a `delegate_task` result names: the call's id (split units extend it as `<id>-<n>`) and any unit ids. */
218
+ export function dispatchedDelegationIds(result) {
219
+ const text = typeof result === 'string' ? result : JSON.stringify(result ?? '');
220
+ if (!/"status"\s*:\s*"dispatched"/.test(text))
221
+ return [];
222
+ return [...new Set([...text.matchAll(/"delegation_id"\s*:\s*"([^"]+)"/g)].map((m) => m[1]))];
223
+ }
224
+ /** The link a delegation tool row shows: its units' records, one combined status, and summed subagent counts. */
225
+ export function backgroundLink(ids, receipts) {
226
+ const linked = receipts.filter((r) => r.kind === 'delegation' && ids.some((id) => r.task_id === id || r.task_id.startsWith(`${id}-`)));
227
+ if (!linked.length)
228
+ return null;
229
+ const agents = linked.reduce((sum, r) => {
230
+ const a = r.agents ?? { total: 1, completed: 0, failed: 0, running: isTerminal(r.status) ? 0 : 1 };
231
+ return { total: sum.total + a.total, completed: sum.completed + a.completed, failed: sum.failed + a.failed, running: sum.running + a.running };
232
+ }, { total: 0, completed: 0, failed: 0, running: 0 });
233
+ const statuses = new Set(linked.map((r) => r.status));
234
+ const status = statuses.has('attention') ? 'attention' : statuses.has('running') ? 'running' : statuses.has('unknown') ? 'unknown'
235
+ : statuses.size === 1 ? linked[0].status : statuses.has('completed') ? 'completed' : 'failed';
236
+ return { task_ids: linked.map((r) => r.task_id), status, agents };
237
+ }
238
+ /** Stamps `tool.background` on delegation rows of every turn's scene. Returns copies; stored rows are untouched. */
239
+ export function withBackgroundLinks(messages, receipts) {
240
+ if (!receipts.some((r) => r.kind === 'delegation'))
241
+ return messages;
242
+ return messages.map((m) => {
243
+ if (!isDict(m) || !isDict(m._anchor_activity_scene) || !Array.isArray(m._anchor_activity_scene.activity_rows))
244
+ return m;
245
+ let touched = false;
246
+ const rows = m._anchor_activity_scene.activity_rows.map((row) => {
247
+ if (!isDict(row) || !isDict(row.tool) || str(row.tool.name) !== 'delegate_task')
248
+ return row;
249
+ const link = backgroundLink(dispatchedDelegationIds(row.tool.result ?? row.tool.preview), receipts);
250
+ if (!link)
251
+ return row;
252
+ touched = true;
253
+ return { ...row, tool: { ...row.tool, background: link } };
254
+ });
255
+ return touched ? { ...m, _anchor_activity_scene: { ...m._anchor_activity_scene, activity_rows: rows } } : m;
256
+ });
257
+ }
258
+ /** The session-facing side: `/background` bookkeeping, drained completions, and the snapshot every client reads. */
259
+ export class BackgroundActivity {
260
+ deps;
261
+ constructor(deps) {
262
+ this.deps = deps;
263
+ }
264
+ receipts(sid) { return this.deps.store.list(sid); }
265
+ trackCommand(sid, taskId, prompt) {
266
+ this.deps.store.update(sid, [{ task_id: taskId, kind: 'background_command', status: 'running', title: taskTitle(prompt), started_at: this.deps.now() }]);
267
+ }
268
+ setCommandStream(sid, taskId, streamId) { this.deps.store.mark(sid, taskId, { stream_id: streamId || null }); }
269
+ /** The `/background` turn finished: its answer, or the failure text old clients showed, is the result. */
270
+ settleCommand(sid, taskId, outcome, text) {
271
+ this.deps.store.update(sid, [{ task_id: taskId, kind: 'background_command', status: outcome, result: bounded(text) }]);
272
+ }
273
+ forgetCommand(sid, taskId) { this.deps.store.forget(sid, taskId); }
274
+ /** A drained completion settles (or flags) its record. */
275
+ recordEvent(sid, evt, prompt) {
276
+ const receipt = eventReceipt(evt, prompt, this.deps.now());
277
+ if (receipt)
278
+ this.deps.store.update(sid, [receipt]);
279
+ }
280
+ /** The session's records, refreshed from the Agent; work it cannot confirm right now shows `unknown`. */
281
+ async snapshot(sid, profile) {
282
+ const sidecar = this.deps.sidecar();
283
+ let agent = null;
284
+ if (sidecar) {
285
+ try {
286
+ agent = await sidecar.call('process.background_list', { profile_home: this.deps.profileHome(profile), session_ids: [sid] });
287
+ }
288
+ catch (error) {
289
+ this.deps.log(`[webui] WARNING: background tasks for ${sid} unavailable from the Agent: ${error.message}`);
290
+ }
291
+ }
292
+ const now = this.deps.now();
293
+ // A ledger row alone confirms only a settled unit: a running one must still be in the Agent's live registry, else it
294
+ // was lost in an Agent restart.
295
+ const liveDelegations = new Set((agent?.delegations ?? []).filter((r) => r.live_status !== null || !RUNNING_STATES.has(r.state)).map((r) => r.delegation_id));
296
+ const liveProcesses = new Set((agent?.processes ?? []).filter((p) => !p.exited).map((p) => p.process_id));
297
+ const confirmed = (r) => r.kind === 'background_command' ? Boolean(r.stream_id) && this.deps.liveStream(r.stream_id)
298
+ : r.kind === 'delegation' ? liveDelegations.has(r.task_id) : liveProcesses.has(r.task_id);
299
+ if (agent) {
300
+ const reported = [...agent.delegations.map((r) => delegationReceipt(r, now)), ...agent.processes.map(processReceipt)];
301
+ // The Agent answered: running work it no longer has is lost, and its record (the card and the delegation row alike)
302
+ // says unknown until the Agent reports it again.
303
+ const lost = this.deps.store.list(sid).filter((r) => LIVE.has(r.status) && r.status !== 'unknown' && !confirmed(r)).map((r) => ({ task_id: r.task_id, kind: r.kind, status: 'unknown' }));
304
+ const reportedIds = new Set(reported.map((r) => r.task_id));
305
+ this.deps.store.update(sid, [...reported.map((r) => (confirmed(r) || !RUNNING_LIKE.has(r.status ?? 'running') ? r : { ...r, status: 'unknown' })), ...lost.filter((r) => !reportedIds.has(r.task_id))]);
306
+ }
307
+ else {
308
+ // The Agent cannot be asked: a running delegation's record says unknown too, so its transcript row matches the
309
+ // card; it returns to running once the Agent reports it again.
310
+ this.deps.store.update(sid, this.deps.store.list(sid).filter((r) => r.kind === 'delegation' && RUNNING_LIKE.has(r.status)).map((r) => ({ task_id: r.task_id, kind: r.kind, status: 'unknown' })));
311
+ }
312
+ const tasks = this.deps.store.list(sid).map((r) => taskView(r, { unconfirmed: !agent && !confirmed(r) }));
313
+ tasks.sort((a, b) => (b.started_at ?? b.updated_at) - (a.started_at ?? a.updated_at));
314
+ return { tasks, agent_available: agent !== null, agents_working: tasks.some((t) => t.kind === 'delegation' && (t.status === 'running' || t.status === 'attention')) };
315
+ }
316
+ /** The full result: kept here for `/background` and drained completions, else the Agent's ledger for a delegation. */
317
+ async result(sid, profile, taskId) {
318
+ const receipt = this.deps.store.get(sid, taskId);
319
+ if (!receipt)
320
+ return null;
321
+ if (receipt.result)
322
+ return receipt.result;
323
+ const sidecar = this.deps.sidecar();
324
+ if (receipt.kind !== 'delegation' || !receipt.agent_result || !sidecar)
325
+ return null;
326
+ try {
327
+ return (await sidecar.call('process.delegation_result', { profile_home: this.deps.profileHome(profile), session_id: sid, delegation_id: taskId })).text || null;
328
+ }
329
+ catch {
330
+ return null;
331
+ }
332
+ }
333
+ /** Dismissal is read state, separate from the task: the record stays in the history and leaves the tray. */
334
+ dismiss(sid, taskId) {
335
+ const receipt = this.deps.store.mark(sid, taskId, { dismissed_at: this.deps.now() });
336
+ return receipt ? taskView(receipt) : null;
337
+ }
338
+ /**
339
+ * Old clients' `/api/background/status`: each finished `/background` result once per server, as before. The record and
340
+ * its result stay; the shared `tasks` view is not affected.
341
+ */
342
+ legacyResults(sid) {
343
+ const done = this.deps.store.list(sid).filter((r) => r.kind === 'background_command' && isTerminal(r.status) && !r.legacy_reported);
344
+ for (const r of done)
345
+ this.deps.store.mark(sid, r.task_id, { legacy_reported: true });
346
+ return done.map((r) => ({ task_id: r.task_id, prompt: r.title, answer: r.result, completed_at: r.completed_at }));
347
+ }
348
+ }
349
+ //# sourceMappingURL=background-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-tasks.js","sourceRoot":"","sources":["../../src/sessions/background-tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * TAL-371: automatic background wakeups (async delegation results, background process and watch notices) are shown as
3
+ * "background updates", not as messages the user sent. The server decides which rows are updates and what they say;
4
+ * clients only render `_background_update`. TAL-460: each update carries one completion line per result, and the
5
+ * Agent's reply to it is marked (`_background_reply`) and, when it is only a silence marker, silent (`_background_silent`).
6
+ */
7
+ import type { Session } from './session.js';
8
+ type Dict = Record<string, unknown>;
9
+ export type BackgroundUpdateKind = 'delegation' | 'process' | 'mixed' | 'other';
10
+ /** One finished background item: an agent (by its goal), a command, or another notice (by its summary). */
11
+ export interface BackgroundLine {
12
+ kind: 'agent' | 'command' | 'other';
13
+ status: 'completed' | 'failed' | 'notice';
14
+ label: string;
15
+ exit_code?: number | null;
16
+ }
17
+ export interface BackgroundUpdate {
18
+ kind: BackgroundUpdateKind;
19
+ attention: boolean;
20
+ count: number;
21
+ summary: string;
22
+ lines: BackgroundLine[];
23
+ }
24
+ export type TurnOrigin = 'user' | 'background';
25
+ /** The one instruction a background turn gets on top of the usual ones (TAL-460). */
26
+ export declare const BACKGROUND_TURN_PROMPT = "This turn was started by a background result, not by the user. If it needs nothing from the user, reply exactly [SILENT]. Otherwise tell the user what matters.";
27
+ /** The notification's first line without its `[ … ]` wrapper, like the `bg_task_complete` summary. */
28
+ export declare function backgroundUpdateSummary(text: string): string;
29
+ export declare function turnOrigin(source: string | null | undefined): TurnOrigin;
30
+ /** Hermes `is_intentional_silence_response`: the whole reply is exactly a silence marker. */
31
+ export declare function isSilentReply(text: string): boolean;
32
+ /** Hermes's streaming counterpart: text so far that could still become a silence marker is held back. */
33
+ export declare function mayBecomeSilentReply(text: string): boolean;
34
+ /** The completion lines of one event: one per agent of a delegation batch, one for a command, else one notice. */
35
+ export declare function eventLines(evt: Dict, prompt: string): BackgroundLine[];
36
+ /** Kind and attention of one completion event: failures and watch notices need attention without expanding. */
37
+ export declare function eventUpdate(evt: Dict): {
38
+ kind: BackgroundUpdateKind;
39
+ attention: boolean;
40
+ };
41
+ /** One update for a batched wakeup of these events, summarised by its first notification. */
42
+ export declare function batchUpdate(entries: {
43
+ event: Dict;
44
+ prompt: string;
45
+ }[]): BackgroundUpdate;
46
+ /** Remember a started wakeup's update by its turn id; the transcript row only carries `_source` and `_turn_id`. */
47
+ export declare function recordBackgroundUpdate(session: Session, turnId: string, update: BackgroundUpdate): void;
48
+ /**
49
+ * Stamps `_background_update` on user rows that are automatic wakeups: Web's own (`_source: process_wakeup`, with the
50
+ * update recorded at delivery, else a generic one for older rows) and the Agent's (`display_kind` from state.db). A
51
+ * person typing the same text stays an ordinary user message. The rest of a wakeup's turn is the Agent's reply to it
52
+ * (`_background_reply`); a reply that ends on a silence marker is `_background_silent` throughout. Needs `_turn_id` on
53
+ * every row (`withTurnIds`). Returns copies; stored rows are untouched.
54
+ */
55
+ export declare function withBackgroundUpdates<T>(messages: T[], session: Session): T[];
56
+ export {};