@maudecode/talaria-web 1.13.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 (268) 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 +1918 -299
  12. package/dist/api/sessions-router.js +39 -24
  13. package/dist/api/sessions-router.js.map +1 -1
  14. package/dist/api/settings-router.d.ts +45 -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 +2728 -416
  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 +56 -17
  31. package/dist/runtime.js.map +1 -1
  32. package/dist/server.js +3 -0
  33. package/dist/server.js.map +1 -1
  34. package/dist/sessions/background-tasks.d.ts +137 -0
  35. package/dist/sessions/background-tasks.js +349 -0
  36. package/dist/sessions/background-tasks.js.map +1 -0
  37. package/dist/sessions/background-updates.d.ts +56 -0
  38. package/dist/sessions/background-updates.js +152 -0
  39. package/dist/sessions/background-updates.js.map +1 -0
  40. package/dist/sessions/cli-sessions.d.ts +6 -0
  41. package/dist/sessions/cli-sessions.js +20 -7
  42. package/dist/sessions/cli-sessions.js.map +1 -1
  43. package/dist/sessions/completions.d.ts +17 -1
  44. package/dist/sessions/completions.js +83 -12
  45. package/dist/sessions/completions.js.map +1 -1
  46. package/dist/sessions/compress.d.ts +33 -0
  47. package/dist/sessions/compress.js +66 -0
  48. package/dist/sessions/compress.js.map +1 -0
  49. package/dist/sessions/journal.d.ts +27 -12
  50. package/dist/sessions/journal.js +115 -40
  51. package/dist/sessions/journal.js.map +1 -1
  52. package/dist/sessions/list.d.ts +14 -0
  53. package/dist/sessions/list.js +89 -16
  54. package/dist/sessions/list.js.map +1 -1
  55. package/dist/sessions/merge.d.ts +19 -1
  56. package/dist/sessions/merge.js +75 -7
  57. package/dist/sessions/merge.js.map +1 -1
  58. package/dist/sessions/relay.d.ts +17 -1
  59. package/dist/sessions/relay.js +74 -13
  60. package/dist/sessions/relay.js.map +1 -1
  61. package/dist/sessions/service.d.ts +61 -3
  62. package/dist/sessions/service.js +244 -16
  63. package/dist/sessions/service.js.map +1 -1
  64. package/dist/sessions/session.d.ts +16 -0
  65. package/dist/sessions/session.js +23 -2
  66. package/dist/sessions/session.js.map +1 -1
  67. package/dist/sessions/source-kind.d.ts +22 -0
  68. package/dist/sessions/source-kind.js +54 -0
  69. package/dist/sessions/source-kind.js.map +1 -0
  70. package/dist/sessions/state-db.d.ts +10 -1
  71. package/dist/sessions/state-db.js +48 -17
  72. package/dist/sessions/state-db.js.map +1 -1
  73. package/dist/sessions/store.d.ts +2 -0
  74. package/dist/sessions/store.js +23 -4
  75. package/dist/sessions/store.js.map +1 -1
  76. package/dist/sessions/streams.d.ts +3 -0
  77. package/dist/sessions/streams.js +0 -5
  78. package/dist/sessions/streams.js.map +1 -1
  79. package/dist/sessions/titles.d.ts +4 -0
  80. package/dist/sessions/titles.js +16 -0
  81. package/dist/sessions/titles.js.map +1 -1
  82. package/dist/sessions/turn-context.d.ts +1 -0
  83. package/dist/sessions/turn-context.js +3 -0
  84. package/dist/sessions/turn-context.js.map +1 -1
  85. package/dist/sessions/turn.d.ts +66 -6
  86. package/dist/sessions/turn.js +306 -63
  87. package/dist/sessions/turn.js.map +1 -1
  88. package/dist/settings.d.ts +2 -0
  89. package/dist/settings.js +6 -0
  90. package/dist/settings.js.map +1 -1
  91. package/dist/tools/crons.d.ts +34 -3
  92. package/dist/tools/crons.js +271 -31
  93. package/dist/tools/crons.js.map +1 -1
  94. package/dist/tools/hygiene.d.ts +11 -3
  95. package/dist/tools/hygiene.js +32 -14
  96. package/dist/tools/hygiene.js.map +1 -1
  97. package/package.json +2 -2
  98. package/sidecar/talaria_sidecar/__init__.py +1 -1
  99. package/sidecar/talaria_sidecar/methods/chat.py +233 -6
  100. package/sidecar/talaria_sidecar/methods/cron.py +22 -14
  101. package/sidecar/talaria_sidecar/methods/process.py +318 -0
  102. package/static/dist/FILES.txt +120 -119
  103. package/static/dist/assets/AppShell-orat1s43.js +1 -0
  104. package/static/dist/assets/ChatPage-ojhka3hy.js +22 -0
  105. package/static/dist/assets/HubRoute-gxgw1t33.js +2 -0
  106. package/static/dist/assets/{Markdown-bx4n7qs4.js → Markdown-dy8t4dy7.js} +7 -7
  107. package/static/dist/assets/{RightPanel-ds4majj3.js → RightPanel-c66ani1s.js} +1 -1
  108. package/static/dist/assets/Select-fswf66up.js +1 -0
  109. package/static/dist/assets/SessionListPanel-goh5mtt8.js +1 -0
  110. package/static/dist/assets/{SettingsLayout-oigbg9rl.js → SettingsLayout-n5d4wq4m.js} +1 -1
  111. package/static/dist/assets/States-kxyu50at.js +1 -0
  112. package/static/dist/assets/Toaster-6zmbcqgg.js +1 -0
  113. package/static/dist/assets/_app-fowyruiu.js +1 -0
  114. package/static/dist/assets/_app.ext._extensionId-nvjyrwhy.js +1 -0
  115. package/static/dist/assets/_app.index-c9zv4y7w.js +1 -0
  116. package/static/dist/assets/_app.insights-jf12nofo.js +1 -0
  117. package/static/dist/assets/_app.kanban-lri5a4yu.js +1 -0
  118. package/static/dist/assets/_app.logs-md1p0zqo.js +1 -0
  119. package/static/dist/assets/_app.memory-bzvf2e28.js +1 -0
  120. package/static/dist/assets/_app.profiles-jpg7zmbn.js +1 -0
  121. package/static/dist/assets/{_app.session._sessionId-ciix6itb.js → _app.session._sessionId-gyoh5ylx.js} +1 -1
  122. package/static/dist/assets/_app.settings-mpuwlx4j.js +1 -0
  123. package/static/dist/assets/_app.settings._section-knz8rwoj.js +1 -0
  124. package/static/dist/assets/_app.skills-fwu1dkir.js +1 -0
  125. package/static/dist/assets/_app.tasks-h9gphtl3.js +2 -0
  126. package/static/dist/assets/_app.todos-hd1dnvrh.js +1 -0
  127. package/static/dist/assets/_app.workspaces-l8toyn5f.js +1 -0
  128. package/static/dist/assets/{abnfDiagram-VCTEODGH-krt0yaru.js → abnfDiagram-VCTEODGH-cjqletra.js} +1 -1
  129. package/static/dist/assets/architecture-7GRP2DOG-cavnusaw.js +1 -0
  130. package/static/dist/assets/{architectureDiagram-5GKGNRK7-i54t9ywl.js → architectureDiagram-5GKGNRK7-k5a7v36n.js} +1 -1
  131. package/static/dist/assets/back-e4m6nsnm.js +1 -0
  132. package/static/dist/assets/{blockDiagram-I7D4REHJ-fevbz4mz.js → blockDiagram-I7D4REHJ-b195z021.js} +1 -1
  133. package/static/dist/assets/{c4Diagram-7LVT6UL2-np8eclmc.js → c4Diagram-7LVT6UL2-olu212k1.js} +1 -1
  134. package/static/dist/assets/channel-gozy3dp3.js +1 -0
  135. package/static/dist/assets/{chunk-4HAMMTFA-owoi036m.js → chunk-4HAMMTFA-b8o1nufs.js} +1 -1
  136. package/static/dist/assets/{chunk-75Z2AOVW-md44zf1n.js → chunk-75Z2AOVW-l1seddto.js} +1 -1
  137. package/static/dist/assets/{chunk-DU6HZSFF-ka3rw8d6.js → chunk-DU6HZSFF-lo5zg15v.js} +3 -3
  138. package/static/dist/assets/{chunk-F27PBJKO-iasnjsky.js → chunk-F27PBJKO-dsdzrp16.js} +1 -1
  139. package/static/dist/assets/{chunk-GMAD6QVW-ex1up6tz.js → chunk-GMAD6QVW-f3fxqq8b.js} +1 -1
  140. package/static/dist/assets/{chunk-GVQU2GXP-d4kmmg9p.js → chunk-GVQU2GXP-h8egxtf6.js} +1 -1
  141. package/static/dist/assets/{chunk-IMKFNOWR-mwy42t85.js → chunk-IMKFNOWR-iolwd8s0.js} +1 -1
  142. package/static/dist/assets/{chunk-L3NEJ4N5-fv7ry213.js → chunk-L3NEJ4N5-b88bbtwi.js} +1 -1
  143. package/static/dist/assets/{chunk-OSK3NFVY-jg9ir8ac.js → chunk-OSK3NFVY-e3e7nr6s.js} +1 -1
  144. package/static/dist/assets/{chunk-P2QGCYS3-pe9ms3ua.js → chunk-P2QGCYS3-mdc46rt1.js} +1 -1
  145. package/static/dist/assets/{chunk-POPQ4Y6H-dimsjrn1.js → chunk-POPQ4Y6H-kqlllrrm.js} +1 -1
  146. package/static/dist/assets/{chunk-PWAF6VOD-m4hv98dy.js → chunk-PWAF6VOD-he585k2x.js} +1 -1
  147. package/static/dist/assets/{chunk-SHT3W25Y-gkjgl6qe.js → chunk-SHT3W25Y-gh94y9a4.js} +1 -1
  148. package/static/dist/assets/{chunk-SVP7TREG-bc8qss5l.js → chunk-SVP7TREG-euxp9y7e.js} +1 -1
  149. package/static/dist/assets/{chunk-TICWLB2K-k9wzw38w.js → chunk-TICWLB2K-c8cxes1q.js} +1 -1
  150. package/static/dist/assets/classDiagram-ZZMXUADV-n0vs2f2q.js +1 -0
  151. package/static/dist/assets/classDiagram-v2-VYDZK3BY-n0vs2f2q.js +1 -0
  152. package/static/dist/assets/{copied-d5joolw7.js → copied-kq0u3ht7.js} +1 -1
  153. package/static/dist/assets/{cynefin-OW5HDTMX-hueklikk.js → cynefin-OW5HDTMX-lxd44ux4.js} +1 -1
  154. package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-e83o1wr1.js → cynefinDiagram-5FMLGOSQ-njpiwat8.js} +1 -1
  155. package/static/dist/assets/{dagre-GXQ25YYZ-ir1tj2ar.js → dagre-GXQ25YYZ-nvgy6yju.js} +1 -1
  156. package/static/dist/assets/{diagram-S7CK7UJ4-o5218p2q.js → diagram-S7CK7UJ4-g98nyv72.js} +1 -1
  157. package/static/dist/assets/{diagram-UQ7AKVKN-ciad4o1i.js → diagram-UQ7AKVKN-ovgm6lvv.js} +1 -1
  158. package/static/dist/assets/{diagram-VSXAHHWV-oharqjbt.js → diagram-VSXAHHWV-pb2bn2e4.js} +1 -1
  159. package/static/dist/assets/{diagram-VX7I27RA-wkwy62iv.js → diagram-VX7I27RA-6j4mvfqo.js} +1 -1
  160. package/static/dist/assets/{diagram-Z3DM3KII-bl252i7r.js → diagram-Z3DM3KII-dqmb982r.js} +1 -1
  161. package/static/dist/assets/{ebnfDiagram-PWID7BFC-nm0rcly7.js → ebnfDiagram-PWID7BFC-ozbpzb6d.js} +1 -1
  162. package/static/dist/assets/endpoints-k8agnro8.js +9 -0
  163. package/static/dist/assets/{erDiagram-RLTQ6QDP-m1w0vta2.js → erDiagram-RLTQ6QDP-hl7m8vua.js} +1 -1
  164. package/static/dist/assets/eventmodeling-NTZA5JFV-j1y2ekec.js +1 -0
  165. package/static/dist/assets/flowDiagram-HODETNUW-g2cvcbm5.js +1 -0
  166. package/static/dist/assets/{ganttDiagram-EL5Y4UJY-czxo6iew.js → ganttDiagram-EL5Y4UJY-ompixqmh.js} +1 -1
  167. package/static/dist/assets/{gitGraph-4MIJSDKK-ip9j1rph.js → gitGraph-4MIJSDKK-b6vxwp9q.js} +1 -1
  168. package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-kalxdole.js → gitGraphDiagram-WWUBYQGX-k98f57on.js} +1 -1
  169. package/static/dist/assets/{highlighted-body-KPVGNVTW-lgsj6fsk.js → highlighted-body-KPVGNVTW-cd3ff6ge.js} +1 -1
  170. package/static/dist/assets/index-nfy0ezs6.css +2 -0
  171. package/static/dist/assets/index-nqed3oum.js +11 -0
  172. package/static/dist/assets/{info-A6RAGUB7-fv4fbc5m.js → info-A6RAGUB7-hjcwjami.js} +1 -1
  173. package/static/dist/assets/{infoDiagram-27XIBGKW-kinx5jsl.js → infoDiagram-27XIBGKW-fm06rj36.js} +1 -1
  174. package/static/dist/assets/{ishikawaDiagram-5VMMS53U-kozvlqdv.js → ishikawaDiagram-5VMMS53U-bxak4mwu.js} +1 -1
  175. package/static/dist/assets/{journeyDiagram-3NMN7TZE-lgpouxoe.js → journeyDiagram-3NMN7TZE-khmihclr.js} +1 -1
  176. package/static/dist/assets/{kanban-definition-UXKFOSKX-b320wo7b.js → kanban-definition-UXKFOSKX-h1r32wdx.js} +1 -1
  177. package/static/dist/assets/{lazyRouteComponent-hy8doeye.js → lazyRouteComponent-b2eg0fws.js} +1 -1
  178. package/static/dist/assets/{line-gxfwyhjq.js → line-friyjof3.js} +1 -1
  179. package/static/dist/assets/link-m90ahx3n.js +1 -0
  180. package/static/dist/assets/login-bw7m2fzo.js +1 -0
  181. package/static/dist/assets/mermaid-HWGCJPDP-njwcl62n.js +1 -0
  182. package/static/dist/assets/{mermaid-parser.core-loxeqsu3.js → mermaid-parser.core-f1gvpwrt.js} +3 -3
  183. package/static/dist/assets/{mindmap-definition-YA3MSWOX-edi534gc.js → mindmap-definition-YA3MSWOX-mt2oxwue.js} +1 -1
  184. package/static/dist/assets/onboarding-ret37j1e.js +1 -0
  185. package/static/dist/assets/{packet-AYTQ26CC-gmb3yy71.js → packet-AYTQ26CC-jik4ixlf.js} +1 -1
  186. package/static/dist/assets/{pegDiagram-XKGWAZYB-fxy5j8cx.js → pegDiagram-XKGWAZYB-erxlv6cc.js} +1 -1
  187. package/static/dist/assets/{pie-WAS4IAKB-do2pm4s6.js → pie-WAS4IAKB-mnkoldfl.js} +1 -1
  188. package/static/dist/assets/{pieDiagram-E7YTZNPT-mgjvb365.js → pieDiagram-E7YTZNPT-i7lwrada.js} +1 -1
  189. package/static/dist/assets/{quadrantDiagram-AXDQQJYC-dhok6m1j.js → quadrantDiagram-AXDQQJYC-fr8ejdoy.js} +1 -1
  190. package/static/dist/assets/{radar-RG4KPBEZ-n5giw3vb.js → radar-RG4KPBEZ-otarjte2.js} +1 -1
  191. package/static/dist/assets/{railroad-74A4TZTK-h6nfs9bj.js → railroad-74A4TZTK-lw362oto.js} +1 -1
  192. package/static/dist/assets/railroad-abnf-HS5TGJTU-m741owar.js +1 -0
  193. package/static/dist/assets/railroad-ebnf-LZEXJU2U-noa4fbia.js +1 -0
  194. package/static/dist/assets/railroad-peg-WCYAUIDC-o4bpw4nb.js +1 -0
  195. package/static/dist/assets/{railroadDiagram-O6MQD6OU-lfwg92r4.js → railroadDiagram-O6MQD6OU-esyn75pw.js} +1 -1
  196. package/static/dist/assets/{refresh-cw-bg6oc499.js → refresh-cw-k66keho6.js} +1 -1
  197. package/static/dist/assets/{requirementDiagram-BXWQKSXE-c5k5pg07.js → requirementDiagram-BXWQKSXE-cyhi5u29.js} +1 -1
  198. package/static/dist/assets/{sankeyDiagram-P5KCCOFB-o9auio4y.js → sankeyDiagram-P5KCCOFB-jljpbo0h.js} +1 -1
  199. package/static/dist/assets/{saved-j5wyhbik.js → saved-do49si3v.js} +1 -1
  200. package/static/dist/assets/{search-ipa17zlr.js → search-j5ki6a9o.js} +1 -1
  201. package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-pfgodnmk.js → sequenceDiagram-WJ2MYXX4-fz0dhlu7.js} +1 -1
  202. package/static/dist/assets/{settings_section_extensions_title-fcfjf6l8.js → settings_section_extensions_title-b7lojn0o.js} +1 -1
  203. package/static/dist/assets/share._token-kg8w647b.js +2 -0
  204. package/static/dist/assets/{sliders-horizontal-bfrh4rch.js → sliders-horizontal-c4wya4dy.js} +1 -1
  205. package/static/dist/assets/{stateDiagram-D77RDMKH-m1y2cr3q.js → stateDiagram-D77RDMKH-kdnithdx.js} +1 -1
  206. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-k2wg2645.js +1 -0
  207. package/static/dist/assets/{swimlanes-42K2YHIH-hzai6fwo.js → swimlanes-42K2YHIH-esd6gmz3.js} +1 -1
  208. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-n5kvjtgr.js +8 -0
  209. package/static/dist/assets/tabBuild-bjmyvmn5.js +56 -0
  210. package/static/dist/assets/{timeline-definition-24CTP7MA-gwefy9gi.js → timeline-definition-24CTP7MA-g0qygccv.js} +1 -1
  211. package/static/dist/assets/todoStore-kjk5l0sy.js +1 -0
  212. package/static/dist/assets/{treeView-Q6P3EWNA-7q91p0dn.js → treeView-Q6P3EWNA-ndchzkuu.js} +1 -1
  213. package/static/dist/assets/{treemap-WGGIJYW6-occom39a.js → treemap-WGGIJYW6-hwjxj0zz.js} +1 -1
  214. package/static/dist/assets/{untitled-cgw2enra.js → untitled-mbr6tuhu.js} +1 -1
  215. package/static/dist/assets/useForm-ocxu460f.js +1 -0
  216. package/static/dist/assets/useLocale-fzy5jhg6.js +1 -0
  217. package/static/dist/assets/{useParams-gpbjxj8s.js → useParams-lo9u33d1.js} +1 -1
  218. package/static/dist/assets/{useSearch-bhdptos7.js → useSearch-lq1mr090.js} +1 -1
  219. package/static/dist/assets/{vennDiagram-4TSXK5OY-ew4bhldi.js → vennDiagram-4TSXK5OY-gubovd1r.js} +1 -1
  220. package/static/dist/assets/{wardley-WFR3VGLG-njdacy0u.js → wardley-WFR3VGLG-ir3om65j.js} +1 -1
  221. package/static/dist/assets/{wardleyDiagram-VM6X3IG4-mkvxx7u9.js → wardleyDiagram-VM6X3IG4-ce0or1ie.js} +1 -1
  222. package/static/dist/assets/{xychartDiagram-S5SC5T6Z-8uriotdw.js → xychartDiagram-S5SC5T6Z-dexylcjg.js} +1 -1
  223. package/static/dist/index.html +1 -1
  224. package/static/dist/sw.js +1 -1
  225. package/static/dist/assets/AppShell-irdqom6e.js +0 -1
  226. package/static/dist/assets/ChatPage-ldhqevjn.js +0 -20
  227. package/static/dist/assets/HubRoute-hq24vhj8.js +0 -2
  228. package/static/dist/assets/Select-gpqmt6x1.js +0 -1
  229. package/static/dist/assets/SessionListPanel-hkvipik4.js +0 -1
  230. package/static/dist/assets/States-fn4o2wdf.js +0 -1
  231. package/static/dist/assets/Toaster-cwnut53k.js +0 -1
  232. package/static/dist/assets/_app-h6ago6y6.js +0 -1
  233. package/static/dist/assets/_app.ext._extensionId-erqnfff5.js +0 -1
  234. package/static/dist/assets/_app.index-cq2fxmda.js +0 -1
  235. package/static/dist/assets/_app.insights-nzhld9gu.js +0 -1
  236. package/static/dist/assets/_app.kanban-m5uggety.js +0 -1
  237. package/static/dist/assets/_app.logs-d2kk9lza.js +0 -1
  238. package/static/dist/assets/_app.memory-gcmop1e7.js +0 -1
  239. package/static/dist/assets/_app.profiles-e9b2my7x.js +0 -1
  240. package/static/dist/assets/_app.settings-kcjum3c1.js +0 -1
  241. package/static/dist/assets/_app.settings._section-bi4jjex0.js +0 -1
  242. package/static/dist/assets/_app.skills-e4e61l23.js +0 -1
  243. package/static/dist/assets/_app.tasks-f1evdhbl.js +0 -2
  244. package/static/dist/assets/_app.todos-o7ijtk42.js +0 -1
  245. package/static/dist/assets/_app.workspaces-o18voh0w.js +0 -1
  246. package/static/dist/assets/architecture-7GRP2DOG-notdhmpv.js +0 -1
  247. package/static/dist/assets/channel-jpk1nas2.js +0 -1
  248. package/static/dist/assets/classDiagram-ZZMXUADV-hld301gc.js +0 -1
  249. package/static/dist/assets/classDiagram-v2-VYDZK3BY-hld301gc.js +0 -1
  250. package/static/dist/assets/endpoints-d8n28yf3.js +0 -64
  251. package/static/dist/assets/eventmodeling-NTZA5JFV-eaqs19mj.js +0 -1
  252. package/static/dist/assets/flowDiagram-HODETNUW-eli5764n.js +0 -1
  253. package/static/dist/assets/index-l08181vr.js +0 -11
  254. package/static/dist/assets/index-pdtcl20t.css +0 -2
  255. package/static/dist/assets/link-ib4prsn5.js +0 -1
  256. package/static/dist/assets/login-llplsuey.js +0 -1
  257. package/static/dist/assets/mermaid-HWGCJPDP-f3scrlds.js +0 -1
  258. package/static/dist/assets/onboarding-n1xhlgym.js +0 -1
  259. package/static/dist/assets/railroad-abnf-HS5TGJTU-d5gaaud9.js +0 -1
  260. package/static/dist/assets/railroad-ebnf-LZEXJU2U-ihudnbec.js +0 -1
  261. package/static/dist/assets/railroad-peg-WCYAUIDC-lgpvhel7.js +0 -1
  262. package/static/dist/assets/share._token-i339gqj4.js +0 -2
  263. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-hehvfv55.js +0 -1
  264. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-nfk9mtst.js +0 -8
  265. package/static/dist/assets/todoStore-fhvdsen0.js +0 -1
  266. package/static/dist/assets/useForm-jwbfla68.js +0 -1
  267. package/static/dist/assets/useLocale-gieo1fn7.js +0 -1
  268. package/static/dist/assets/useSelector-f2aak1ol.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hygiene.js","sourceRoot":"","sources":["../../src/tools/hygiene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hygiene.js","sourceRoot":"","sources":["../../src/tools/hygiene.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AACzC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAA;AACrC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAE9C,sHAAsH;AACtH,MAAM,UAAU,aAAa,CAAC,GAAuC,EAAE,QAAgB,EAAE,IAAY;IACnG,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3D,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IACnD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAuC;IACtE,MAAM,GAAG,GAAG,GAAG,CAAC,0BAA0B,CAAA;IAC1C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,qBAAqB,CAAA;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAClC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAA;AACvD,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,KAAa,EAAE,GAA2B;IAClF,IAAI,EAAU,CAAA;IACd,IAAI,CAAC;QAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;QAC/B,IAAI,IAAI,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QAC/B,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,CAAA;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACjC,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,SAAS,CAAC;gBACR,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBAClD,IAAI,CAAC,IAAI,CAAC;oBAAE,MAAK;gBACjB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,IAAI,CAAC,CAAA;YACb,CAAC;QACH,CAAC;gBAAS,CAAC;YAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAAC,CAAC;QAC5B,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACpB,GAAG,CAAC,oCAAoC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAA;QAC1F,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,sDAAsD,MAAM,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;QAChG,OAAO,KAAK,CAAA;IACd,CAAC;YAAS,CAAC;QAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,KAAa,EAAE,GAA2B;IACxF,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACpF,CAAC;AAcD,MAAM,OAAO,aAAa;IAKK;IAJrB,KAAK,GAA0B,IAAI,CAAA;IACnC,gBAAgB,GAAkB,IAAI,CAAA;IACtC,SAAS,GAAyB,IAAI,CAAA;IACtC,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;IACrC,YAA6B,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;IAAG,CAAC;IAElD,KAAK,CAAC,UAAU,GAAG,mBAAmB;QACpC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAM;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;QACjE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QAChE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,oHAAoH;IACpH,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QAAC,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAClB,OAAO,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5C,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAe,EAAQ,EAAE,GAAG,IAAI,CAAC;YAAC,GAAG,EAAE,CAAA;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAAC,CAAC,CAAC,CAAC,CAAA;QAClH,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACxK,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;YAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;QACxE,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QACtI,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC3H,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,wCAAwC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,CAAC;aACvK,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC;aACxE,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA,CAAC,CAAC,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAEO,IAAI,CAAC,KAAa,EAAE,KAAc,IAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,KAAK,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA,CAAC,CAAC;CACrI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maudecode/talaria-web",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "type": "module",
5
5
  "description": "Talaria Web server: Node 24 HTTP server for the Hermes Agent browser workbench, with the talaria-web launcher, daemon control, self-update, and MCP bins.",
6
6
  "bin": {
@@ -25,7 +25,7 @@
25
25
  "postpack": "node scripts/prepack.mjs --clean"
26
26
  },
27
27
  "dependencies": {
28
- "@maudecode/talaria-web-contracts": "1.13.0",
28
+ "@maudecode/talaria-web-contracts": "1.15.0",
29
29
  "@modelcontextprotocol/sdk": "1.30.0",
30
30
  "@orpc/contract": "1.15.2",
31
31
  "@orpc/openapi": "1.15.2",
@@ -7,4 +7,4 @@ stdio (docs/architecture/sidecar-rpc.md). Standard library only.
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
- SIDECAR_RPC_VERSION = 2
10
+ SIDECAR_RPC_VERSION = 3
@@ -257,13 +257,86 @@ def _clarify_timeout(params: dict) -> int:
257
257
  return 3600
258
258
 
259
259
 
260
+ def _steer_slot_lock(agent):
261
+ """The Agent's own pending-steer lock (a plain ``Lock``), so a slot read or rewrite is atomic against its drains."""
262
+ lock = agent.__dict__.get("_pending_steer_lock") if hasattr(agent, "__dict__") else None
263
+ return contextlib.nullcontext() if lock is None else lock
264
+
265
+
266
+ def _steer_slot(agent) -> str:
267
+ """The Agent's not-yet-applied steer text; call under ``_steer_slot_lock``."""
268
+ return str(getattr(agent, "_pending_steer", "") or "")
269
+
270
+
260
271
  def _agent_pending_steer_text(agent) -> str:
261
272
  """Predecessor ``_agent_pending_steer_text``: the Agent's not-yet-applied steer text."""
262
- lock = agent.__dict__.get("_pending_steer_lock") if hasattr(agent, "__dict__") else None
263
- if lock is None:
264
- return str(getattr(agent, "_pending_steer", "") or "")
265
- with lock:
266
- return str(agent.__dict__.get("_pending_steer") or "")
273
+ with _steer_slot_lock(agent):
274
+ return _steer_slot(agent)
275
+
276
+
277
+ def _slot_without(slot: str, pending: list[str], index: int) -> str | None:
278
+ """``slot`` without the steer ``pending[index]`` while the Agent still holds it, else None (it already took it).
279
+
280
+ The Agent keeps every not-yet-applied steer in one newline-joined slot, so the slot is the tail of ``pending``
281
+ (the server's steers, oldest first), possibly behind text another surface queued: the server's
282
+ ``pendingSteerSuffixStart`` rule. The longest tail that still holds the steer wins."""
283
+ for start in range(index + 1):
284
+ tail = "\n".join(pending[start:])
285
+ if slot == tail or slot.endswith("\n" + tail):
286
+ head = slot[: len(slot) - len(tail)].rstrip("\n")
287
+ return "\n".join(part for part in [head, *pending[start:index], *pending[index + 1:]] if part)
288
+ return None
289
+
290
+
291
+ def withdraw_steer(agent, pending: list[str], index: int) -> bool:
292
+ """TAL-424: take a not-yet-applied steer back out of the Agent's slot, keeping the others in order. False when the
293
+ Agent already took it; the slot is then left as it was, so no text is ever lost."""
294
+ with _steer_slot_lock(agent):
295
+ rest = _slot_without(_steer_slot(agent), pending, index)
296
+ if rest is None:
297
+ return False
298
+ agent._pending_steer = rest or None
299
+ return True
300
+
301
+
302
+ def steer_now(agent, pending: list[str], index: int) -> dict:
303
+ """TAL-424: deliver a pending steer now with the Agent's ``redirect``. During a model request that request restarts
304
+ with it (``delivery: redirect``); during tools it goes back on the slot and the tools yield (``delivery: steer``).
305
+ With no live request the steer stays pending: back in its place, or last when the slot changed meanwhile."""
306
+ text = pending[index]
307
+ with _steer_slot_lock(agent):
308
+ before = _steer_slot(agent)
309
+ rest = _slot_without(before, pending, index)
310
+ if rest is None:
311
+ return {"redirected": False, "withdrawn": False}
312
+ agent._pending_steer = rest or None
313
+ redirect = getattr(agent, "redirect", None)
314
+ try:
315
+ redirected = bool(redirect(text)) if callable(redirect) else False
316
+ except Exception as exc: # noqa: BLE001
317
+ log.debug("redirect failed: %s", exc)
318
+ redirected = False
319
+ if not redirected:
320
+ with _steer_slot_lock(agent):
321
+ if _steer_slot(agent) == rest:
322
+ agent._pending_steer = before or None
323
+ return {"redirected": False, "withdrawn": True, "requeued": "kept"}
324
+ agent.steer(text)
325
+ return {"redirected": False, "withdrawn": True, "requeued": "last"}
326
+ with _steer_slot_lock(agent):
327
+ slot = _steer_slot(agent)
328
+ delivery = "steer" if slot == text or slot.endswith("\n" + text) else "redirect"
329
+ return {"redirected": True, "withdrawn": True, "delivery": delivery}
330
+
331
+
332
+ def _steer_queue_params(params: dict) -> tuple[list[str], int]:
333
+ pending = params.get("pending")
334
+ index = params.get("index")
335
+ if not isinstance(pending, list) or not all(isinstance(t, str) and t.strip() for t in pending):
336
+ raise InvalidParams("pending must be a list of steer texts")
337
+ if not isinstance(index, int) or isinstance(index, bool) or not 0 <= index < len(pending):
338
+ raise InvalidParams("index must point into pending")
339
+ return [t.strip() for t in pending], index
267
340
 
268
341
 
269
342
  def _cancel_checkpoint(run: _Run) -> list | None:
@@ -725,6 +798,131 @@ def start(ctx: CallContext, params: dict) -> dict: # noqa: PLR0915 - one turn,
725
798
  _RUNS_BY_SESSION.pop(session_id, None)
726
799
 
727
800
 
801
+ def _checkpoint_required() -> bool:
802
+ """``compression.checkpoint_required`` needs the memory provider loaded to write the pre-compression checkpoint."""
803
+ try:
804
+ from hermes_cli.config import load_config
805
+
806
+ return ((load_config() or {}).get("compression") or {}).get("checkpoint_required") is True
807
+ except Exception: # noqa: BLE001
808
+ return False
809
+
810
+
811
+ #: Compressed results awaiting the server's write: ``commit_token -> (agent, profile home, expiry timer)``.
812
+ _PENDING_COMPRESSIONS: dict[str, tuple[Any, Any, threading.Timer]] = {}
813
+ _PENDING_COMPRESSIONS_LOCK = threading.Lock()
814
+ #: A server that never answers (restart, crash) gets its compression discarded after this long.
815
+ _PENDING_COMPRESSION_TTL = 600.0
816
+
817
+
818
+ def _release_compression(agent, committed: bool) -> None:
819
+ """Emit (committed) or discard the Agent's deferred context-engine notification, then close the throwaway agent."""
820
+ from agent.conversation_compression import finalize_context_engine_compression_notification
821
+
822
+ try:
823
+ finalize_context_engine_compression_notification(agent, committed=committed)
824
+ finally:
825
+ with contextlib.suppress(Exception):
826
+ agent._end_session_on_close = False
827
+ close = getattr(agent, "close", None)
828
+ if callable(close):
829
+ try:
830
+ close()
831
+ except Exception: # noqa: BLE001
832
+ log.debug("compression agent close failed", exc_info=True)
833
+
834
+
835
+ def finalize_compression(token: str, committed: bool) -> bool:
836
+ """``chat.compress_finalize``: the server reports whether it installed the result; unknown tokens are a no-op."""
837
+ with _PENDING_COMPRESSIONS_LOCK:
838
+ entry = _PENDING_COMPRESSIONS.pop(token, None)
839
+ if entry is None:
840
+ return False
841
+ agent, home, expiry = entry
842
+ expiry.cancel() # a no-op when the timer itself is finalizing
843
+ with scoped_home(home):
844
+ _release_compression(agent, committed=committed)
845
+ return True
846
+
847
+
848
+ def compress(ctx: CallContext, params: dict) -> dict:
849
+ """Manual ``/compress`` of ``conversation_history`` through the Agent's shared core (``compress_now``) on a throwaway
850
+ agent, like the gateway's ``_run_manual_compression``. The server owns the transcript: it re-checks the session and
851
+ installs ``messages`` itself, so nothing here touches history or the cached turn agent. The agent has no session
852
+ store, so the Agent neither rotates nor writes state.db; its one deferred effect, the context-engine notification,
853
+ waits for ``chat.compress_finalize`` with the returned ``commit_token`` (two-phase, like the gateway's commit)."""
854
+ home = profile_home_param(params)
855
+ session_id = str(params.get("session_id") or "").strip()
856
+ if not session_id:
857
+ raise InvalidParams("session_id is required")
858
+ history = params.get("conversation_history")
859
+ if not isinstance(history, list):
860
+ raise InvalidParams("conversation_history must be a list")
861
+ model = str(params.get("model") or "").strip()
862
+ provider = str(params.get("model_provider") or "").strip() or None
863
+ focus_topic = str(params.get("focus_topic") or "").strip()[:500] or None
864
+ toolsets = params.get("enabled_toolsets")
865
+ runtime = _resolve_runtime(provider, model)
866
+ if not runtime.get("api_key"):
867
+ raise RpcError("No provider configured -- cannot compress.", condition="credential_missing")
868
+ from agent.conversation_compression_manual import CompressRequest, compress_now
869
+
870
+ AIAgent = _agent_class()
871
+ kwargs: dict = dict(
872
+ model=model or str(runtime.get("model") or ""),
873
+ provider=provider or runtime.get("provider"),
874
+ base_url=runtime.get("base_url"),
875
+ api_key=runtime.get("api_key"),
876
+ platform="webui",
877
+ quiet_mode=True,
878
+ enabled_toolsets=toolsets if isinstance(toolsets, list) else None,
879
+ session_id=session_id,
880
+ )
881
+ for name, value in (
882
+ ("api_mode", runtime.get("api_mode")),
883
+ ("acp_command", runtime.get("acp_command")),
884
+ ("acp_args", runtime.get("acp_args")),
885
+ ("credential_pool", runtime.get("credential_pool")),
886
+ ("gateway_session_key", session_id),
887
+ ("skip_memory", not _checkpoint_required()),
888
+ ):
889
+ if _supported(AIAgent, name) and value is not None:
890
+ kwargs[name] = value
891
+ agent = AIAgent(**kwargs)
892
+ held = False
893
+ try:
894
+ result = compress_now(agent, history, CompressRequest(focus_topic=focus_topic), task_id=session_id)
895
+ message = None
896
+ if result.status != "compressed":
897
+ from agent.conversation_compression_manual import render_compress_result
898
+
899
+ message = "\n".join(render_compress_result(result)) or None
900
+ payload = {
901
+ "status": result.status,
902
+ "messages": json.loads(json.dumps([m for m in result.after_messages if isinstance(m, dict)], default=str)),
903
+ "before_tokens": int(result.before_tokens or 0),
904
+ "after_tokens": int(result.after_tokens or 0),
905
+ "summary": json.loads(json.dumps(result.summary, default=str)) if isinstance(result.summary, dict) else None,
906
+ "message": message,
907
+ "agent_session_id": str(getattr(agent, "session_id", None) or session_id),
908
+ "commit_token": None,
909
+ }
910
+ if result.status == "compressed":
911
+ token = uuid.uuid4().hex
912
+ # A server that never answers (restart, failed RPC) gets the compression discarded on its own.
913
+ expiry = threading.Timer(_PENDING_COMPRESSION_TTL, finalize_compression, args=(token, False))
914
+ expiry.daemon = True
915
+ with _PENDING_COMPRESSIONS_LOCK:
916
+ _PENDING_COMPRESSIONS[token] = (agent, home, expiry)
917
+ expiry.start()
918
+ held = True
919
+ payload["commit_token"] = token
920
+ return payload
921
+ finally:
922
+ if not held:
923
+ _release_compression(agent, committed=False)
924
+
925
+
728
926
  def _run_for(params: dict) -> _Run | None:
729
927
  stream_id = str(params.get("stream_id") or "").strip()
730
928
  session_id = str(params.get("session_id") or "").strip()
@@ -748,6 +946,18 @@ def register(registry) -> None:
748
946
  with _turn_identity(session_id, workspace):
749
947
  return start(ctx, params)
750
948
 
949
+ @registry.method("chat.compress")
950
+ def compress_(ctx: CallContext, params: dict) -> dict:
951
+ with scoped_home(profile_home_param(params)):
952
+ return compress(ctx, params)
953
+
954
+ @registry.method("chat.compress_finalize", requires_agent=False)
955
+ def compress_finalize_(ctx: CallContext, params: dict) -> dict:
956
+ token = str(params.get("commit_token") or "").strip()
957
+ if not token:
958
+ raise InvalidParams("commit_token is required")
959
+ return {"finalized": finalize_compression(token, params.get("committed") is True)}
960
+
751
961
  @registry.method("chat.interrupt", requires_agent=False)
752
962
  def interrupt_(ctx: CallContext, params: dict) -> dict:
753
963
  run = _run_for(params)
@@ -786,7 +996,24 @@ def register(registry) -> None:
786
996
  except Exception as exc: # noqa: BLE001
787
997
  log.debug("steer failed: %s", exc)
788
998
  return {"accepted": False, "fallback": "steer_error"}
789
- return {"accepted": accepted, "fallback": None if accepted else "not_running"}
999
+ # `can_redirect`: whether this Agent can deliver a pending steer now (TAL-424 "Send now").
1000
+ return {"accepted": accepted, "fallback": None if accepted else "not_running", "can_redirect": callable(getattr(run.agent, "redirect", None))}
1001
+
1002
+ @registry.method("chat.steer_withdraw", requires_agent=False)
1003
+ def steer_withdraw_(ctx: CallContext, params: dict) -> dict:
1004
+ pending, index = _steer_queue_params(params)
1005
+ run = _run_for(params)
1006
+ if run is None or run.agent is None:
1007
+ return {"withdrawn": False}
1008
+ return {"withdrawn": withdraw_steer(run.agent, pending, index)}
1009
+
1010
+ @registry.method("chat.steer_now", requires_agent=False)
1011
+ def steer_now_(ctx: CallContext, params: dict) -> dict:
1012
+ pending, index = _steer_queue_params(params)
1013
+ run = _run_for(params)
1014
+ if run is None or run.agent is None:
1015
+ return {"redirected": False, "withdrawn": False}
1016
+ return steer_now(run.agent, pending, index)
790
1017
 
791
1018
  @registry.method("chat.evict_agent", requires_agent=False)
792
1019
  def evict_(ctx: CallContext, params: dict) -> dict:
@@ -379,25 +379,33 @@ def register(registry) -> None:
379
379
  post["profile"] = str(body["profile"]).strip()
380
380
  if body.get("toast_notifications") is False:
381
381
  post["toast_notifications"] = False
382
- snapshot_home = params.get("execution_home")
383
- # The selected profile's provider/model snapshot is resolved before the job exists (predecessor
384
- # ``_selected_profile_snapshot_updates`` ran before ``create_job``), so a failure leaves nothing behind.
385
- if post.get("profile") and snapshot_home and not (body.get("model") and body.get("provider")) and not body.get("no_agent"):
382
+ if body.get("owner_profile"):
383
+ post["owner_profile"] = str(body["owner_profile"]).strip()
384
+ execution_home = params.get("execution_home")
385
+ if post.get("profile"):
386
+ if not execution_home:
387
+ raise InvalidParams("execution_home is required for a profile job")
388
+ home = Path(execution_home)
389
+ model, provider = (value.strip() or None if isinstance(value, str) else None for value in (body.get("model"), body.get("provider")))
390
+ # The scheduler ignores Talaria's profile field. Pin the execution profile's main model
391
+ # before creating it in that profile's own store. Scheduled workers bind credentials/config
392
+ # to the store home; owner_profile only preserves management from the creating Web profile.
393
+ if post.get("profile") and execution_home and not (model and provider) and not body.get("no_agent"):
386
394
  try:
387
- from cron.jobs import _compute_provider_model_snapshots
388
-
389
- with _SNAPSHOT_LOCK, scoped_home(Path(snapshot_home)):
390
- provider_snapshot, model_snapshot = _compute_provider_model_snapshots(provider=body.get("provider") or None, model=body.get("model") or None, base_url=None, no_agent=False)
391
- if body.get("provider") is None:
392
- post["provider_snapshot"] = provider_snapshot
393
- if body.get("model") is None:
394
- post["model_snapshot"] = model_snapshot
395
+ from cron.jobs import _main_model_pin
396
+
397
+ with _SNAPSHOT_LOCK, scoped_home(Path(execution_home)):
398
+ profile_provider, profile_model = _main_model_pin()
399
+ if not profile_model:
400
+ raise ValueError("Profile has no main model configured")
401
+ provider = provider or profile_provider
402
+ model = model or profile_model
395
403
  except Exception as exc: # noqa: BLE001
396
- raise RpcError(f"Cannot safely resolve cron snapshots for profile {post['profile']!r}", condition="cron_snapshot_failed") from exc
404
+ raise RpcError(f"Cannot safely resolve cron model for profile {post['profile']!r}", condition="cron_snapshot_failed") from exc
397
405
  with _store(home), scoped_home(home):
398
406
  try:
399
407
  job = jobs.create_job(prompt=body.get("prompt") or "", schedule=body["schedule"], name=body.get("name") or None, deliver=body.get("deliver") or "local",
400
- skills=body.get("skills") or [], model=body.get("model") or None, provider=body.get("provider") or None, **kwargs)
408
+ skills=body.get("skills") or [], model=model, provider=provider, **kwargs)
401
409
  except Exception as exc: # noqa: BLE001
402
410
  raise InvalidParams(str(exc)) from exc
403
411
  if post: