@maudecode/talaria-web 1.11.0 → 1.12.1

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 (247) hide show
  1. package/_release.json +4 -4
  2. package/dist/api/chat-router.d.ts +68 -4
  3. package/dist/api/chat-router.js +11 -8
  4. package/dist/api/chat-router.js.map +1 -1
  5. package/dist/api/router.d.ts +10 -0
  6. package/dist/api/router.js +2 -1
  7. package/dist/api/router.js.map +1 -1
  8. package/dist/api/sessions-router.d.ts +407 -51
  9. package/dist/api/sessions-router.js +2 -2
  10. package/dist/api/sessions-router.js.map +1 -1
  11. package/dist/api/sse-routes.js +52 -8
  12. package/dist/api/sse-routes.js.map +1 -1
  13. package/dist/api/tools-router.d.ts +329 -0
  14. package/dist/api/tools-router.js +97 -4
  15. package/dist/api/tools-router.js.map +1 -1
  16. package/dist/app.d.ts +812 -55
  17. package/dist/auth/oidc.js +2 -0
  18. package/dist/auth/oidc.js.map +1 -1
  19. package/dist/auth/store.d.ts +17 -0
  20. package/dist/auth/store.js +77 -19
  21. package/dist/auth/store.js.map +1 -1
  22. package/dist/fs/atomic.d.ts +8 -1
  23. package/dist/fs/atomic.js +52 -3
  24. package/dist/fs/atomic.js.map +1 -1
  25. package/dist/http/context.d.ts +2 -0
  26. package/dist/http/context.js.map +1 -1
  27. package/dist/redact.d.ts +15 -0
  28. package/dist/redact.js +1393 -9
  29. package/dist/redact.js.map +1 -1
  30. package/dist/release.js +3 -1
  31. package/dist/release.js.map +1 -1
  32. package/dist/runtime.js +20 -9
  33. package/dist/runtime.js.map +1 -1
  34. package/dist/server.d.ts +1 -1
  35. package/dist/server.js +11 -5
  36. package/dist/server.js.map +1 -1
  37. package/dist/sessions/anchor.d.ts +2 -0
  38. package/dist/sessions/anchor.js +22 -17
  39. package/dist/sessions/anchor.js.map +1 -1
  40. package/dist/sessions/file-changes.d.ts +15 -0
  41. package/dist/sessions/file-changes.js +58 -0
  42. package/dist/sessions/file-changes.js.map +1 -0
  43. package/dist/sessions/journal.d.ts +6 -1
  44. package/dist/sessions/journal.js +9 -15
  45. package/dist/sessions/journal.js.map +1 -1
  46. package/dist/sessions/list.d.ts +21 -1
  47. package/dist/sessions/list.js +81 -17
  48. package/dist/sessions/list.js.map +1 -1
  49. package/dist/sessions/merge.d.ts +66 -2
  50. package/dist/sessions/merge.js +291 -9
  51. package/dist/sessions/merge.js.map +1 -1
  52. package/dist/sessions/pending.d.ts +11 -2
  53. package/dist/sessions/pending.js +52 -3
  54. package/dist/sessions/pending.js.map +1 -1
  55. package/dist/sessions/service.d.ts +16 -3
  56. package/dist/sessions/service.js +92 -54
  57. package/dist/sessions/service.js.map +1 -1
  58. package/dist/sessions/state-db.d.ts +5 -0
  59. package/dist/sessions/state-db.js +34 -0
  60. package/dist/sessions/state-db.js.map +1 -1
  61. package/dist/sessions/streams.d.ts +4 -1
  62. package/dist/sessions/streams.js +3 -0
  63. package/dist/sessions/streams.js.map +1 -1
  64. package/dist/sessions/tool-display.d.ts +21 -0
  65. package/dist/sessions/tool-display.js +113 -0
  66. package/dist/sessions/tool-display.js.map +1 -0
  67. package/dist/sessions/turn.d.ts +25 -7
  68. package/dist/sessions/turn.js +153 -90
  69. package/dist/sessions/turn.js.map +1 -1
  70. package/dist/spa.d.ts +2 -0
  71. package/dist/spa.js +9 -0
  72. package/dist/spa.js.map +1 -1
  73. package/dist/test/harness.d.ts +2 -0
  74. package/dist/test/harness.js +1 -1
  75. package/dist/test/harness.js.map +1 -1
  76. package/dist/tools/terminal.d.ts +6 -0
  77. package/dist/tools/terminal.js +24 -3
  78. package/dist/tools/terminal.js.map +1 -1
  79. package/dist/tools/update-notifications.d.ts +120 -0
  80. package/dist/tools/update-notifications.js +387 -0
  81. package/dist/tools/update-notifications.js.map +1 -0
  82. package/dist/tools/updates.d.ts +49 -3
  83. package/dist/tools/updates.js +319 -53
  84. package/dist/tools/updates.js.map +1 -1
  85. package/package.json +2 -2
  86. package/sidecar/scripts/replay_sidecar.py +17 -0
  87. package/sidecar/talaria_sidecar/__init__.py +1 -1
  88. package/sidecar/talaria_sidecar/home.py +39 -16
  89. package/sidecar/talaria_sidecar/methods/chat.py +113 -4
  90. package/static/dist/FILES.txt +115 -116
  91. package/static/dist/assets/AppShell-m4w420jl.js +1 -0
  92. package/static/dist/assets/ChatPage-cuqcnisv.js +20 -0
  93. package/static/dist/assets/HubRoute-hqgqtm35.js +2 -0
  94. package/static/dist/assets/{Markdown-ftyfzds0.js → Markdown-j2hlu30v.js} +7 -7
  95. package/static/dist/assets/RightPanel-oid5q557.js +1 -0
  96. package/static/dist/assets/Select-ot2zr0il.js +1 -0
  97. package/static/dist/assets/SessionListPanel-o3sgjnrq.js +1 -0
  98. package/static/dist/assets/{SettingsLayout-pdpmhy1o.js → SettingsLayout-b0idn649.js} +1 -1
  99. package/static/dist/assets/States-htz1oee5.js +1 -0
  100. package/static/dist/assets/Toaster-h49pk1hy.js +1 -0
  101. package/static/dist/assets/_app-h7eaezs7.js +1 -0
  102. package/static/dist/assets/_app.ext._extensionId-h8oaqzsj.js +1 -0
  103. package/static/dist/assets/_app.index-xinao3xh.js +1 -0
  104. package/static/dist/assets/_app.insights-cxplvhkm.js +1 -0
  105. package/static/dist/assets/_app.kanban-hhli8h0h.js +1 -0
  106. package/static/dist/assets/_app.logs-f6srwjfl.js +1 -0
  107. package/static/dist/assets/_app.memory-lntcea85.js +1 -0
  108. package/static/dist/assets/_app.profiles-lftyp6of.js +1 -0
  109. package/static/dist/assets/{_app.session._sessionId-n1ggcf5e.js → _app.session._sessionId-hhpcqih4.js} +1 -1
  110. package/static/dist/assets/_app.settings-rs93zpvw.js +1 -0
  111. package/static/dist/assets/_app.settings._section-nafqsbwm.js +1 -0
  112. package/static/dist/assets/_app.skills-jzoi1ivd.js +1 -0
  113. package/static/dist/assets/_app.tasks-ijphsw56.js +2 -0
  114. package/static/dist/assets/_app.todos-emyh8inv.js +1 -0
  115. package/static/dist/assets/_app.workspaces-fwr1cum8.js +1 -0
  116. package/static/dist/assets/{abnfDiagram-VCTEODGH-i4bgzu83.js → abnfDiagram-VCTEODGH-egykbz8h.js} +1 -1
  117. package/static/dist/assets/architecture-7GRP2DOG-l6y92mbn.js +1 -0
  118. package/static/dist/assets/{architectureDiagram-5GKGNRK7-mx21lwqa.js → architectureDiagram-5GKGNRK7-b2e0wk3y.js} +1 -1
  119. package/static/dist/assets/{blockDiagram-I7D4REHJ-o1hhchxv.js → blockDiagram-I7D4REHJ-i3cq67dn.js} +1 -1
  120. package/static/dist/assets/{c4Diagram-7LVT6UL2-jygqtvd8.js → c4Diagram-7LVT6UL2-lg1p1s7a.js} +1 -1
  121. package/static/dist/assets/channel-gq8cwu71.js +1 -0
  122. package/static/dist/assets/{chunk-4HAMMTFA-hjcpubgk.js → chunk-4HAMMTFA-i0s1s7zi.js} +1 -1
  123. package/static/dist/assets/{chunk-75Z2AOVW-eibnex6m.js → chunk-75Z2AOVW-kwinpapo.js} +1 -1
  124. package/static/dist/assets/{chunk-DU6HZSFF-k1tp3qnp.js → chunk-DU6HZSFF-hb8qrbc3.js} +3 -3
  125. package/static/dist/assets/{chunk-F27PBJKO-lvcgn16f.js → chunk-F27PBJKO-dy2tqtcs.js} +1 -1
  126. package/static/dist/assets/{chunk-GMAD6QVW-ldlzruv1.js → chunk-GMAD6QVW-fqox5yvt.js} +1 -1
  127. package/static/dist/assets/{chunk-GVQU2GXP-hs1mva9d.js → chunk-GVQU2GXP-bo3x6ze4.js} +1 -1
  128. package/static/dist/assets/{chunk-IMKFNOWR-o7eqx3yb.js → chunk-IMKFNOWR-nxs6rrcq.js} +1 -1
  129. package/static/dist/assets/{chunk-L3NEJ4N5-bp1ofl70.js → chunk-L3NEJ4N5-f9yeq1fi.js} +1 -1
  130. package/static/dist/assets/{chunk-OSK3NFVY-o8m6mdz5.js → chunk-OSK3NFVY-c7df44qv.js} +1 -1
  131. package/static/dist/assets/{chunk-P2QGCYS3-kx83fti2.js → chunk-P2QGCYS3-eyjzf5o5.js} +1 -1
  132. package/static/dist/assets/{chunk-POPQ4Y6H-mwl99e9y.js → chunk-POPQ4Y6H-iy3hp9rc.js} +1 -1
  133. package/static/dist/assets/{chunk-PWAF6VOD-oriuokxy.js → chunk-PWAF6VOD-co2yoefz.js} +1 -1
  134. package/static/dist/assets/{chunk-SHT3W25Y-ab5cf00v.js → chunk-SHT3W25Y-obzqmn9k.js} +1 -1
  135. package/static/dist/assets/{chunk-SVP7TREG-kqdrpr17.js → chunk-SVP7TREG-hqwdo6vt.js} +1 -1
  136. package/static/dist/assets/{chunk-TICWLB2K-kfbnjabk.js → chunk-TICWLB2K-l8t1mdfd.js} +1 -1
  137. package/static/dist/assets/classDiagram-ZZMXUADV-fg9sc5r8.js +1 -0
  138. package/static/dist/assets/classDiagram-v2-VYDZK3BY-fg9sc5r8.js +1 -0
  139. package/static/dist/assets/{copied-dp33szhq.js → copied-hurn8vn4.js} +1 -1
  140. package/static/dist/assets/{cynefin-OW5HDTMX-mm5sj9s7.js → cynefin-OW5HDTMX-ngx2ihay.js} +1 -1
  141. package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-nfon5q38.js → cynefinDiagram-5FMLGOSQ-fiyooys3.js} +1 -1
  142. package/static/dist/assets/{dagre-GXQ25YYZ-dzdp9ypb.js → dagre-GXQ25YYZ-fctryel6.js} +1 -1
  143. package/static/dist/assets/{diagram-S7CK7UJ4-ckxzqo01.js → diagram-S7CK7UJ4-m27jopok.js} +1 -1
  144. package/static/dist/assets/{diagram-UQ7AKVKN-hw16h1um.js → diagram-UQ7AKVKN-ojgkbmp4.js} +1 -1
  145. package/static/dist/assets/{diagram-VSXAHHWV-mu7wu2zg.js → diagram-VSXAHHWV-gfafpgyj.js} +1 -1
  146. package/static/dist/assets/{diagram-VX7I27RA-k9uprwtj.js → diagram-VX7I27RA-daobicg4.js} +1 -1
  147. package/static/dist/assets/{diagram-Z3DM3KII-csdjzrg9.js → diagram-Z3DM3KII-mi475zvk.js} +1 -1
  148. package/static/dist/assets/{ebnfDiagram-PWID7BFC-n8mbw2jj.js → ebnfDiagram-PWID7BFC-daf4zvsy.js} +1 -1
  149. package/static/dist/assets/endpoints-cyjhnrbn.js +64 -0
  150. package/static/dist/assets/{erDiagram-RLTQ6QDP-fsfe1uj0.js → erDiagram-RLTQ6QDP-gxfhxvfp.js} +1 -1
  151. package/static/dist/assets/eventmodeling-NTZA5JFV-manga0bq.js +1 -0
  152. package/static/dist/assets/flowDiagram-HODETNUW-bpt13uny.js +1 -0
  153. package/static/dist/assets/{ganttDiagram-EL5Y4UJY-gsba3iq9.js → ganttDiagram-EL5Y4UJY-k3208e0p.js} +1 -1
  154. package/static/dist/assets/{gitGraph-4MIJSDKK-na86q1pu.js → gitGraph-4MIJSDKK-gjuhj4zk.js} +1 -1
  155. package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-g72ew3xz.js → gitGraphDiagram-WWUBYQGX-jglxvux1.js} +1 -1
  156. package/static/dist/assets/{highlighted-body-KPVGNVTW-okn18cp1.js → highlighted-body-KPVGNVTW-gh24xc9c.js} +1 -1
  157. package/static/dist/assets/index-gsg78cb4.css +2 -0
  158. package/static/dist/assets/index-jb47los5.js +11 -0
  159. package/static/dist/assets/{info-A6RAGUB7-i01jeltk.js → info-A6RAGUB7-huf0xaoq.js} +1 -1
  160. package/static/dist/assets/{infoDiagram-27XIBGKW-cayiv6fa.js → infoDiagram-27XIBGKW-jk3n96ix.js} +1 -1
  161. package/static/dist/assets/{ishikawaDiagram-5VMMS53U-g4rf14bv.js → ishikawaDiagram-5VMMS53U-o95uo5dx.js} +1 -1
  162. package/static/dist/assets/{journeyDiagram-3NMN7TZE-fusb2424.js → journeyDiagram-3NMN7TZE-h5ye2l70.js} +1 -1
  163. package/static/dist/assets/{kanban-definition-UXKFOSKX-g831pwlr.js → kanban-definition-UXKFOSKX-lgrpk5yi.js} +1 -1
  164. package/static/dist/assets/{lazyRouteComponent-ol965zwk.js → lazyRouteComponent-owywngyt.js} +1 -1
  165. package/static/dist/assets/{line-md6em6gc.js → line-cihmc0pn.js} +1 -1
  166. package/static/dist/assets/{login-kfclsqd2.js → login-g063apx6.js} +1 -1
  167. package/static/dist/assets/mermaid-HWGCJPDP-okd1mnvj.js +1 -0
  168. package/static/dist/assets/{mermaid-parser.core-mq3uns9m.js → mermaid-parser.core-d1609aga.js} +3 -3
  169. package/static/dist/assets/{mindmap-definition-YA3MSWOX-oxafrned.js → mindmap-definition-YA3MSWOX-lbvtir31.js} +1 -1
  170. package/static/dist/assets/{onboarding-fo6hnkyv.js → onboarding-ngw0x0pr.js} +1 -1
  171. package/static/dist/assets/{packet-AYTQ26CC-ggxyvbym.js → packet-AYTQ26CC-o4cp5z3k.js} +1 -1
  172. package/static/dist/assets/{pegDiagram-XKGWAZYB-nk7xcqgp.js → pegDiagram-XKGWAZYB-e8xqu1qj.js} +1 -1
  173. package/static/dist/assets/{pie-WAS4IAKB-ito2razh.js → pie-WAS4IAKB-hm9icuov.js} +1 -1
  174. package/static/dist/assets/{pieDiagram-E7YTZNPT-g02xexar.js → pieDiagram-E7YTZNPT-hj96x7hn.js} +1 -1
  175. package/static/dist/assets/{quadrantDiagram-AXDQQJYC-d4jn4xq5.js → quadrantDiagram-AXDQQJYC-80utbxhm.js} +1 -1
  176. package/static/dist/assets/{radar-RG4KPBEZ-nebvfdzt.js → radar-RG4KPBEZ-k39b6100.js} +1 -1
  177. package/static/dist/assets/{railroad-74A4TZTK-ny3gebse.js → railroad-74A4TZTK-ewyqz67j.js} +1 -1
  178. package/static/dist/assets/railroad-abnf-HS5TGJTU-dx2q0evz.js +1 -0
  179. package/static/dist/assets/railroad-ebnf-LZEXJU2U-l8xt49t5.js +1 -0
  180. package/static/dist/assets/railroad-peg-WCYAUIDC-kuxha9yz.js +1 -0
  181. package/static/dist/assets/{railroadDiagram-O6MQD6OU-m09mmu67.js → railroadDiagram-O6MQD6OU-iwv9dby8.js} +1 -1
  182. package/static/dist/assets/{refresh-cw-eitd7yva.js → refresh-cw-hjzomwlo.js} +1 -1
  183. package/static/dist/assets/{requirementDiagram-BXWQKSXE-evggpcbk.js → requirementDiagram-BXWQKSXE-cdgh5jha.js} +1 -1
  184. package/static/dist/assets/{sankeyDiagram-P5KCCOFB-bun89039.js → sankeyDiagram-P5KCCOFB-dbu6p97m.js} +1 -1
  185. package/static/dist/assets/{saved-culx14ii.js → saved-feqhycco.js} +1 -1
  186. package/static/dist/assets/{search-nu6kzq55.js → search-n3jdc20p.js} +1 -1
  187. package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-hhs9f09o.js → sequenceDiagram-WJ2MYXX4-b0wchifg.js} +1 -1
  188. package/static/dist/assets/{settings_section_extensions_title-mj0gcozh.js → settings_section_extensions_title-mtyviexd.js} +1 -1
  189. package/static/dist/assets/{share._token-k4pcnxqu.js → share._token-cwov8uqh.js} +2 -2
  190. package/static/dist/assets/{sliders-horizontal-b9ljga1o.js → sliders-horizontal-i1lseyg0.js} +1 -1
  191. package/static/dist/assets/{stateDiagram-D77RDMKH-gi7t1tro.js → stateDiagram-D77RDMKH-mb4b38xh.js} +1 -1
  192. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-cn1fnqrg.js +1 -0
  193. package/static/dist/assets/{swimlanes-42K2YHIH-ea5urvph.js → swimlanes-42K2YHIH-ofrpfwj0.js} +1 -1
  194. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-d652ummv.js +8 -0
  195. package/static/dist/assets/{timeline-definition-24CTP7MA-mq64rm3b.js → timeline-definition-24CTP7MA-hlw0jg6o.js} +1 -1
  196. package/static/dist/assets/todoStore-mfy9lpio.js +1 -0
  197. package/static/dist/assets/{treeView-Q6P3EWNA-cimbtxlz.js → treeView-Q6P3EWNA-d93wr19c.js} +1 -1
  198. package/static/dist/assets/{treemap-WGGIJYW6-wig5gi1y.js → treemap-WGGIJYW6-g7ezdedz.js} +1 -1
  199. package/static/dist/assets/{untitled-mbwemvxf.js → untitled-mqxhd1eh.js} +1 -1
  200. package/static/dist/assets/{useForm-li4bljlv.js → useForm-hh33yrwa.js} +1 -1
  201. package/static/dist/assets/useLocale-cr30vl7r.js +1 -0
  202. package/static/dist/assets/{vennDiagram-4TSXK5OY-ez63kh7n.js → vennDiagram-4TSXK5OY-m5vgeba5.js} +1 -1
  203. package/static/dist/assets/{wardley-WFR3VGLG-r7rftz31.js → wardley-WFR3VGLG-gpao9bxv.js} +1 -1
  204. package/static/dist/assets/{wardleyDiagram-VM6X3IG4-mvqg9eqc.js → wardleyDiagram-VM6X3IG4-g2yzwshm.js} +1 -1
  205. package/static/dist/assets/{xychartDiagram-S5SC5T6Z-eqxdfc91.js → xychartDiagram-S5SC5T6Z-itakhpic.js} +1 -1
  206. package/static/dist/index.html +1 -1
  207. package/static/dist/sw.js +114 -152
  208. package/static/dist/assets/AppShell-hikzkcql.js +0 -1
  209. package/static/dist/assets/ChatPage-ofqn89h9.js +0 -21
  210. package/static/dist/assets/HubRoute-f2zrs9si.js +0 -2
  211. package/static/dist/assets/RightPanel-febk3dkd.js +0 -1
  212. package/static/dist/assets/Select-lvx8gihl.js +0 -1
  213. package/static/dist/assets/SessionListPanel-o70ljmik.js +0 -1
  214. package/static/dist/assets/States-i46tz8an.js +0 -1
  215. package/static/dist/assets/Toaster-fklyeeyh.js +0 -1
  216. package/static/dist/assets/_app-j3rors25.js +0 -1
  217. package/static/dist/assets/_app.ext._extensionId-c0ey5ec9.js +0 -1
  218. package/static/dist/assets/_app.index-coy9jrto.js +0 -1
  219. package/static/dist/assets/_app.insights-ebd2k0i5.js +0 -1
  220. package/static/dist/assets/_app.kanban-e2p7ypi5.js +0 -1
  221. package/static/dist/assets/_app.logs-ml21mfyz.js +0 -1
  222. package/static/dist/assets/_app.memory-lhu5mm47.js +0 -1
  223. package/static/dist/assets/_app.profiles-egx0fgjo.js +0 -1
  224. package/static/dist/assets/_app.settings-d0vqtyid.js +0 -1
  225. package/static/dist/assets/_app.settings._section-cnzj6pli.js +0 -1
  226. package/static/dist/assets/_app.skills-kkug8obu.js +0 -1
  227. package/static/dist/assets/_app.tasks-nf285d2o.js +0 -2
  228. package/static/dist/assets/_app.todos-dxalqp1e.js +0 -1
  229. package/static/dist/assets/_app.workspaces-bqtduujs.js +0 -1
  230. package/static/dist/assets/architecture-7GRP2DOG-o8zqevhv.js +0 -1
  231. package/static/dist/assets/channel-mw8l793e.js +0 -1
  232. package/static/dist/assets/classDiagram-ZZMXUADV-egajr1wp.js +0 -1
  233. package/static/dist/assets/classDiagram-v2-VYDZK3BY-egajr1wp.js +0 -1
  234. package/static/dist/assets/endpoints-f6ngsyu5.js +0 -64
  235. package/static/dist/assets/eventmodeling-NTZA5JFV-k3zhqcyl.js +0 -1
  236. package/static/dist/assets/flowDiagram-HODETNUW-bdxes51f.js +0 -1
  237. package/static/dist/assets/index-ab0wj9ik.css +0 -2
  238. package/static/dist/assets/index-fd27xooo.js +0 -11
  239. package/static/dist/assets/mermaid-HWGCJPDP-ejk0d88t.js +0 -1
  240. package/static/dist/assets/railroad-abnf-HS5TGJTU-gtd38edw.js +0 -1
  241. package/static/dist/assets/railroad-ebnf-LZEXJU2U-o238oax2.js +0 -1
  242. package/static/dist/assets/railroad-peg-WCYAUIDC-c4acqp2j.js +0 -1
  243. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-jtadbol7.js +0 -1
  244. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ki7weepw.js +0 -8
  245. package/static/dist/assets/todoStore-azvfuqbv.js +0 -1
  246. package/static/dist/assets/trash-osyo895g.js +0 -1
  247. package/static/dist/assets/useLocale-kdew6auf.js +0 -1
@@ -7,7 +7,6 @@
7
7
  import { randomUUID } from 'node:crypto';
8
8
  import { str } from '../util.js';
9
9
  export const CLARIFY_DEFAULT_TIMEOUT_SECONDS = 3600;
10
- export const CLARIFY_MAX_QUESTIONS = 5;
11
10
  export const CLARIFY_MAX_CHOICES = 4;
12
11
  function choiceText(choice) {
13
12
  if (typeof choice === 'string')
@@ -28,9 +27,12 @@ function normalizedChoices(raw) {
28
27
  const choices = raw.map(choiceText).filter(Boolean).slice(0, CLARIFY_MAX_CHOICES);
29
28
  return choices.length ? choices : null;
30
29
  }
31
- /** Python `clarify.normalize_questions`. */
30
+ /**
31
+ * Python `clarify.normalize_questions`, without its question cap: the Agent enforces its own batch limit before it
32
+ * parks, so any non-empty list it sends stays a batch (dropping the shape would leave it waiting on an envelope).
33
+ */
32
34
  export function normalizeQuestions(questions) {
33
- if (!Array.isArray(questions) || !questions.length || questions.length > CLARIFY_MAX_QUESTIONS)
35
+ if (!Array.isArray(questions) || !questions.length)
34
36
  return null;
35
37
  return questions.map((raw, index) => {
36
38
  let item;
@@ -48,6 +50,46 @@ export function normalizeQuestions(questions) {
48
50
  return { qid: str(item.qid).trim() || `q${String(index)}`, id: str(item.id).trim() || null, question: text, choices, choices_offered: offered ?? choices, multi_select: Boolean(item.multi_select) && Boolean(choices) };
49
51
  });
50
52
  }
53
+ /** The ordered questions a client asks, one per step; a single-question prompt is one `q0` step. */
54
+ function clarifySteps(data) {
55
+ const batch = data.questions;
56
+ if (batch)
57
+ return batch.map((q) => ({ qid: str(q.qid), question: str(q.question), choices: q.choices ?? [], multi_select: Boolean(q.multi_select) }));
58
+ const choices = normalizedChoices(data.choices_offered) ?? normalizedChoices(data.choices) ?? [];
59
+ return [{ qid: 'q0', question: str(data.question).trim(), choices, multi_select: Boolean(data.multi_select) && choices.length > 0 }];
60
+ }
61
+ /**
62
+ * The reply string the parked Agent callback expects for keyed step answers: the batch envelope
63
+ * (`clarify_tool._run_batch`) or the single answer (a JSON array for multi-select). Null when an answer
64
+ * is missing, empty, keyed to an unknown step, or a list for a single-select step.
65
+ */
66
+ export function clarifyReply(entry, answers) {
67
+ const steps = entry.steps;
68
+ if (Object.keys(answers).some((qid) => !steps.some((step) => step.qid === qid)))
69
+ return null;
70
+ const cleaned = {};
71
+ for (const step of steps) {
72
+ const raw = answers[step.qid];
73
+ if (Array.isArray(raw)) {
74
+ if (!step.multi_select)
75
+ return null;
76
+ const list = raw.map((v) => v.trim()).filter(Boolean);
77
+ if (!list.length)
78
+ return null;
79
+ cleaned[step.qid] = list;
80
+ }
81
+ else {
82
+ const text = str(raw).trim();
83
+ if (!text)
84
+ return null;
85
+ cleaned[step.qid] = step.multi_select ? [text] : text;
86
+ }
87
+ }
88
+ if (entry.questions)
89
+ return JSON.stringify({ answers: cleaned });
90
+ const only = cleaned.q0;
91
+ return Array.isArray(only) ? JSON.stringify(only) : str(only);
92
+ }
51
93
  function withTimeoutMetadata(data, now) {
52
94
  const item = { ...data };
53
95
  const requestedAt = Number(item.requested_at) || now;
@@ -174,6 +216,13 @@ export class PendingPrompts {
174
216
  // ── clarify ──
175
217
  submitClarify(sid, data) {
176
218
  const item = withTimeoutMetadata(data, this.now());
219
+ // The server owns the batch shape: the normalized list (iOS reads it) and the steps every client renders.
220
+ const batch = normalizeQuestions(item.questions);
221
+ if (batch)
222
+ item.questions = batch;
223
+ else
224
+ delete item.questions;
225
+ item.steps = clarifySteps(item);
177
226
  const q = this.queue(this.clarifies, sid);
178
227
  const last = q.entries[q.entries.length - 1];
179
228
  let entry;
@@ -1 +1 @@
1
- {"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/sessions/pending.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/sessions/pending.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,8 @@ export interface SessionServiceDeps {
34
34
  runtime: RuntimeOverlay & {
35
35
  /** A live worker stream that must block deletion / duplicate turns for this session. */
36
36
  activeRunStream: (sid: string) => string | null;
37
+ /** A live run whose journal missed a frame, so a replay cannot restore its whole output. */
38
+ journalDegraded: (streamId: string) => boolean;
37
39
  evictAgent: (sid: string) => void;
38
40
  closeTerminal: (sid: string) => void;
39
41
  /** Python `delete_cli_session`: remove the session's rows from the profile's state.db; resolves false on failure. */
@@ -80,6 +82,10 @@ export declare class SessionService {
80
82
  private isReadOnlyImport;
81
83
  /** Python `_session_is_subagent_view_only`: a delegated child by any signal — the persisted sidecar or the state.db row. */
82
84
  isSubagentViewOnly(sid: string): boolean;
85
+ /** TAL-358: batched `sessions.source` owners from the active profile's state.db. */
86
+ readonly stateDbSources: (ids: string[]) => Map<string, string> | null;
87
+ /** The persisted flag folded with the state.db owner lock (TAL-358): the one read-only rule for mutation gates and the wire. */
88
+ isReadOnly(s: Session): boolean;
83
89
  /** Full session for mutation, refusing read-only imports (Python `_get_or_materialize_session`). */
84
90
  getForMutation(sid: string): Session;
85
91
  private get404;
@@ -93,8 +99,6 @@ export declare class SessionService {
93
99
  mergedTranscript(s: Session, local?: Message[]): Message[];
94
100
  /** Python `_lookup_cli_session_metadata`: the sidebar row for a state.db session in the active profile. */
95
101
  private lookupCliMeta;
96
- /** Python `_is_claimable_cli_source`: a denylist of foreign families that own their sessions. */
97
- private claimableCliSource;
98
102
  /** Python `_session_index_marks_was_webui`: an index row that once owned a WebUI sidecar (self-heal 404). */
99
103
  private indexMarksWasWebui;
100
104
  /**
@@ -110,6 +114,8 @@ export declare class SessionService {
110
114
  private rejectSubagent;
111
115
  /** `compact()` plus messages, redacted for the wire (Python `_public_session_projection`). */
112
116
  publicSession(s: Session, withMessages?: boolean): Record<string, unknown>;
117
+ /** `compact()` with the wire streaming/read-only flags (TAL-312), for replies that return the session row. */
118
+ wireRow(s: Session): Record<string, unknown>;
113
119
  /** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
114
120
  publicSessionDocument(s: Session): Record<string, unknown>;
115
121
  private loadRevision;
@@ -120,13 +126,20 @@ export declare class SessionService {
120
126
  msg_before?: string | null | undefined;
121
127
  resolve_model?: string | null | undefined;
122
128
  }): Record<string, unknown>;
129
+ /**
130
+ * TAL-316: the active run whose journal can replay its output from the start. The detail then leaves that output to the
131
+ * replay; with no active run, no identifiable prompt, or no complete journal, it returns the persisted transcript unchanged.
132
+ */
133
+ private journaledActiveTurn;
134
+ /** TAL-368: the active run's prompt, which the detail shows until settlement persists it; null when idle or promptless. */
135
+ private pendingTurn;
123
136
  /** A session without a sidecar, synthesized from state.db for this profile; 404/409 like the detail. */
124
137
  private foreignSession;
125
138
  /** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
126
139
  private foreignSessionDetail;
127
140
  /** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`, no journal recovery). */
128
141
  clearStaleStreamState(session: Session): boolean;
129
- list(params: Omit<ListParams, 'activeProfile' | 'isolatedProfileMode' | 'profilesMatch' | 'cliRows' | 'gatewayIdentity'>): {
142
+ list(params: Omit<ListParams, 'activeProfile' | 'isolatedProfileMode' | 'profilesMatch' | 'cliRows' | 'gatewayIdentity' | 'stateDbSources'>): {
130
143
  body: ListResponse;
131
144
  etag: string;
132
145
  };
@@ -1,15 +1,15 @@
1
1
  import { str } from '../util.js';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { rmSync } from 'node:fs';
4
- import { copyJson, redactSessionData, redactValue, stripPublicInternalFields } from '../redact.js';
4
+ import { buildActiveTurnToken, copyJson, redactSessionData, redactValue, stripPublicInternalFields, withSceneToolDisplay } from '../redact.js';
5
5
  import { DraftVersionConflict, normalizeDraftVersion } from './drafts.js';
6
- import { allSessions, buildSessionListPayload, isMessagingSessionRecord, lineageRootId, mergeCliSidebarMetadata, sessionListResponse, sessionSearchMessageText, sessionSearchPreview } from './list.js';
6
+ import { allSessions, buildSessionListPayload, isClaimableCliSource, isMessagingSessionRecord, withOwnerLocks, withSessionWireFlags, lineageRootId, mergeCliSidebarMetadata, sessionListResponse, sessionSearchMessageText, sessionSearchPreview } from './list.js';
7
7
  import { anchorSceneIntOrNull, hydrateAnchorActivityScenes, normalizeAnchorSceneMessageRef, readAnchorSceneRows, storeAnchorScene, withTurnIds } from './anchor.js';
8
8
  import { isSafeSessionId, lastMessageTimestamp, Session, titleFrom } from './session.js';
9
9
  import { SessionBusy, SessionNotFound, statSignature } from './store.js';
10
10
  import { attachTodoState } from './todo.js';
11
- import { stateDbSessionMessages, stateDbSessionRow } from './state-db.js';
12
- import { mergeSessionMessagesAppendOnly } from './merge.js';
11
+ import { stateDbSessionMessages, stateDbSessionRow, stateDbSessionSources } from './state-db.js';
12
+ import { mergeSessionMessagesAppendOnly, pendingUserRow, withPendingUserTurn, withToolCallOutcomes, withoutRunningTurnOutput } from './merge.js';
13
13
  import { messagesForLimitedPayload, messageWindowForDisplay, MAX_MSG_LIMIT, parseMsgLimit, toolCallsForMessageWindow } from './window.js';
14
14
  import { redactText } from '../redact.js';
15
15
  import { buildShareSnapshot } from './shares.js';
@@ -62,7 +62,7 @@ export class SessionService {
62
62
  isReadOnlyImport(sid) {
63
63
  try {
64
64
  const s = this.store.get(sid, { metadataOnly: true });
65
- if (s.read_only)
65
+ if (this.isReadOnly(s))
66
66
  return true;
67
67
  }
68
68
  catch {
@@ -85,11 +85,20 @@ export class SessionService {
85
85
  const meta = this.lookupCliMeta(sid);
86
86
  return meta !== null && str(meta.source_tag || meta.raw_source || meta.source).trim().toLowerCase() === 'subagent';
87
87
  }
88
+ /** TAL-358: batched `sessions.source` owners from the active profile's state.db. */
89
+ stateDbSources = (ids) => stateDbSessionSources(join(this.deps.profileHome(this.deps.activeProfile()), 'state.db'), ids);
90
+ /** The persisted flag folded with the state.db owner lock (TAL-358): the one read-only rule for mutation gates and the wire. */
91
+ isReadOnly(s) {
92
+ if (s.read_only)
93
+ return true;
94
+ const [row] = withOwnerLocks([{ session_id: s.session_id, source_tag: s.source_tag, raw_source: s.raw_source, session_source: s.session_source }], this.stateDbSources);
95
+ return Boolean(row?.read_only);
96
+ }
88
97
  /** Full session for mutation, refusing read-only imports (Python `_get_or_materialize_session`). */
89
98
  getForMutation(sid) {
90
99
  let s = this.get404(sid);
91
100
  s = this.store.ensureFull(sid, s);
92
- if (s.read_only)
101
+ if (this.isReadOnly(s))
93
102
  throw new HttpFailure(403, 'Read-only imported sessions cannot be modified from WebUI');
94
103
  if (str(s.source_tag || s.raw_source).trim().toLowerCase() === 'subagent')
95
104
  throw new HttpFailure(403, 'Read-only subagent child session');
@@ -141,23 +150,6 @@ export class SessionService {
141
150
  return null;
142
151
  }
143
152
  }
144
- /** Python `_is_claimable_cli_source`: a denylist of foreign families that own their sessions. */
145
- claimableCliSource(meta, stateDbSource) {
146
- if (meta.read_only)
147
- return false;
148
- const sessionSource = str(meta.session_source).trim().toLowerCase();
149
- if (['messaging', 'external_agent'].includes(sessionSource))
150
- return false;
151
- const tag = str(meta.source_tag || meta.raw_source).trim().toLowerCase();
152
- const refused = new Set(['claude_code', 'cron', 'external_agent', 'gateway', 'messaging', 'subagent', 'unknown']);
153
- if (tag && refused.has(tag))
154
- return false;
155
- if (isMessagingSessionRecord(meta))
156
- return false;
157
- if (!tag && stateDbSource && refused.has(stateDbSource.trim().toLowerCase()))
158
- return false;
159
- return true;
160
- }
161
153
  /** Python `_session_index_marks_was_webui`: an index row that once owned a WebUI sidecar (self-heal 404). */
162
154
  indexMarksWasWebui(sid) {
163
155
  let entries;
@@ -214,7 +206,7 @@ export class SessionService {
214
206
  if (!meta.updated_at && (row.ended_at || row.started_at))
215
207
  meta.updated_at = row.ended_at || row.started_at;
216
208
  }
217
- const claimable = this.claimableCliSource(meta, stateDbSource);
209
+ const claimable = isClaimableCliSource(meta, stateDbSource);
218
210
  const workspace = str(meta.workspace || meta.cwd).trim() || this.deps.workspaces.lastWorkspace(profile);
219
211
  const defaults = this.store.deps.defaults(profile);
220
212
  const session = new Session({
@@ -243,12 +235,16 @@ export class SessionService {
243
235
  }
244
236
  /** `compact()` plus messages, redacted for the wire (Python `_public_session_projection`). */
245
237
  publicSession(s, withMessages = true) {
246
- const payload = s.compact();
238
+ const payload = this.wireRow(s);
247
239
  // Mutation replies replace a client's transcript, so they carry the same server-built scenes as the detail.
248
240
  if (withMessages)
249
- payload.messages = hydrateAnchorActivityScenes(withTurnIds(s.messages), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id });
241
+ payload.messages = hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(s.messages), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id });
250
242
  return redactSessionData(payload, this.deps.redactEnabled());
251
243
  }
244
+ /** `compact()` with the wire streaming/read-only flags (TAL-312), for replies that return the session row. */
245
+ wireRow(s) {
246
+ return withSessionWireFlags({ ...s.compact(), read_only: this.isReadOnly(s) }, this.deps.runtime.activeStreamIds);
247
+ }
252
248
  /** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
253
249
  publicSessionDocument(s) {
254
250
  return redactSessionData(s.toDocument(), this.deps.redactEnabled());
@@ -279,8 +275,15 @@ export class SessionService {
279
275
  throw new HttpFailure(404, 'Session not found');
280
276
  }
281
277
  this.clearStaleStreamState(s);
282
- // Turn ids and scenes are computed over the full transcript, so every window reports the same values.
283
- const all = loadMessages ? hydrateAnchorActivityScenes(withTurnIds(this.mergedTranscript(s)), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, clipToolResults: msgLimit !== null }) : [];
278
+ const journaled = loadMessages ? this.journaledActiveTurn(s) : null;
279
+ let transcript = loadMessages ? this.mergedTranscript(s) : [];
280
+ const pending = loadMessages ? this.pendingTurn(s) : null;
281
+ if (pending)
282
+ transcript = withPendingUserTurn(transcript, pending);
283
+ if (journaled)
284
+ transcript = withoutRunningTurnOutput(transcript, { ...journaled, localCount: s.messages.length });
285
+ // Turn ids, tool outcomes and scenes are computed over the full transcript, so every window reports the same values.
286
+ const all = loadMessages ? hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(transcript), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, clipToolResults: msgLimit !== null }) : [];
284
287
  let truncated = [];
285
288
  let offset = 0;
286
289
  let summaryCount = null;
@@ -288,6 +291,14 @@ export class SessionService {
288
291
  if (loadMessages) {
289
292
  ;
290
293
  [truncated, offset] = messageWindowForDisplay(all, msgLimit, msgBefore);
294
+ // TAL-368: a tail window starts no later than the running turn's prompt, so a turn whose output stays in the
295
+ // transcript (no journal to replay it) keeps its prompt; older pages end before it, so it is never sent twice.
296
+ // ponytail: the window grows with that turn's persisted rows; clip the turn instead if degraded runs get long.
297
+ const prompt = pending && msgBefore === null ? all.findIndex((m) => isDict(m) && m.role === 'user' && m._active_turn_token === pending.activeTurnToken) : -1;
298
+ if (prompt >= 0 && prompt < offset) {
299
+ truncated = all.slice(prompt, offset + truncated.length);
300
+ offset = prompt;
301
+ }
291
302
  if (msgLimit !== null)
292
303
  truncated = messagesForLimitedPayload(truncated);
293
304
  }
@@ -310,7 +321,6 @@ export class SessionService {
310
321
  messages: truncated,
311
322
  message_count: mergedCount,
312
323
  tool_calls: toolCalls,
313
- active_stream_id: s.active_stream_id,
314
324
  pending_user_message: s.pending_user_message,
315
325
  pending_attachments: loadMessages ? s.pending_attachments : [],
316
326
  pending_started_at: s.pending_started_at,
@@ -319,6 +329,8 @@ export class SessionService {
319
329
  threshold_tokens: Number(s.threshold_tokens ?? 0) || 0,
320
330
  last_prompt_tokens: Number(s.last_prompt_tokens ?? 0) || 0,
321
331
  };
332
+ if (loadMessages)
333
+ raw.transcript_seq = journaled ? { stream_id: journaled.turnId, seq: 0 } : null;
322
334
  if (loadMessages && all.length)
323
335
  attachTodoState(raw, all);
324
336
  if (mergedLast) {
@@ -331,12 +343,34 @@ export class SessionService {
331
343
  raw._msg_limit_max = MAX_MSG_LIMIT;
332
344
  const revisionAfter = this.loadRevision(s);
333
345
  raw._load_revision = revisionBefore !== null && revisionBefore === revisionAfter ? hashRevision(revisionBefore) : `unstable-${randomUUID().replace(/-/g, '')}`;
334
- if (str(raw.source_tag || raw.raw_source || raw.session_source).trim().toLowerCase() === 'subagent') {
335
- raw.is_cli_session = false;
336
- raw.read_only = true;
337
- }
346
+ raw.read_only = this.isReadOnly(s);
347
+ withSessionWireFlags(raw, activeStreamIds);
338
348
  return redactSessionData(raw, this.deps.redactEnabled());
339
349
  }
350
+ /**
351
+ * TAL-316: the active run whose journal can replay its output from the start. The detail then leaves that output to the
352
+ * replay; with no active run, no identifiable prompt, or no complete journal, it returns the persisted transcript unchanged.
353
+ */
354
+ journaledActiveTurn(s) {
355
+ const turnId = str(s.active_stream_id).trim();
356
+ const activeTurnToken = buildActiveTurnToken(turnId, s.pending_started_at);
357
+ if (!turnId || !activeTurnToken || this.deps.runtime.journalDegraded(turnId))
358
+ return null;
359
+ const summary = this.deps.journal?.findRunSummary(turnId);
360
+ if (summary?.session_id !== s.session_id || summary.journal_pruned)
361
+ return null;
362
+ return { turnId, startedAt: Number(s.pending_started_at), activeTurnToken };
363
+ }
364
+ /** TAL-368: the active run's prompt, which the detail shows until settlement persists it; null when idle or promptless. */
365
+ pendingTurn(s) {
366
+ const turnId = str(s.active_stream_id).trim();
367
+ const activeTurnToken = buildActiveTurnToken(turnId, s.pending_started_at);
368
+ const text = str(s.pending_user_message);
369
+ if (!turnId || !activeTurnToken || (!text && !s.pending_attachments.length))
370
+ return null;
371
+ const startedAt = Number(s.pending_started_at);
372
+ return { turnId, startedAt, activeTurnToken, localCount: s.messages.length, prompt: pendingUserRow(text, s.pending_attachments, startedAt, s.pending_user_source || 'webui', turnId) };
373
+ }
340
374
  /** A session without a sidecar, synthesized from state.db for this profile; 404/409 like the detail. */
341
375
  foreignSession(sid) {
342
376
  const meta = this.lookupCliMeta(sid);
@@ -355,18 +389,18 @@ export class SessionService {
355
389
  /** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
356
390
  foreignSessionDetail(sid) {
357
391
  const { synth, meta } = this.foreignSession(sid);
358
- // The same turn projection as a WebUI session: turn ids, then each completed turn's scene.
359
- const msgs = hydrateAnchorActivityScenes(withTurnIds(synth.messages), {});
392
+ // The same turn projection as a WebUI session: turn ids, tool outcomes, then each completed turn's scene.
393
+ const msgs = hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(synth.messages), [], null), {});
360
394
  const lastTs = Number(msgs[msgs.length - 1]?.timestamp ?? 0) || 0;
361
395
  const sess = {
362
396
  session_id: synth.session_id, title: synth.title, workspace: synth.workspace, model: synth.model, message_count: msgs.length,
363
397
  created_at: synth.created_at, updated_at: synth.updated_at, last_message_at: meta?.last_message_at || meta?.updated_at || lastTs,
364
398
  pinned: synth.pinned, archived: synth.archived, project_id: synth.project_id ?? null, profile: synth.profile,
365
399
  is_cli_session: synth.is_cli_session, source_tag: synth.source_tag, raw_source: synth.raw_source, session_source: synth.session_source,
366
- source_label: synth.source_label, read_only: synth.read_only, messages: msgs, tool_calls: [],
400
+ source_label: synth.source_label, read_only: synth.read_only, can_duplicate: false, messages: msgs, tool_calls: [], transcript_seq: null,
367
401
  };
368
402
  attachTodoState(sess, msgs);
369
- const merged = meta ? mergeCliSidebarMetadata(sess, meta) : sess;
403
+ const merged = withSessionWireFlags(meta ? mergeCliSidebarMetadata(sess, meta) : sess, this.deps.runtime.activeStreamIds);
370
404
  return redactSessionData(merged, this.deps.redactEnabled());
371
405
  }
372
406
  /** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`, no journal recovery). */
@@ -434,7 +468,7 @@ export class SessionService {
434
468
  // Python reads every profile's state.db under all_profiles; this port projects the active profile only.
435
469
  const cliRows = wantState ? this.deps.cliSessions(activeProfile, { sourceFilter: params.sourceFilter ?? null }) : undefined;
436
470
  const gatewayIdentity = loadGatewaySessionIdentityMap(join(this.deps.profileHome(activeProfile), 'sessions', 'sessions.json'));
437
- const payload = buildSessionListPayload(this.store, { ...params, ...(cliRows ? { cliRows } : {}), gatewayIdentity, activeProfile, isolatedProfileMode: this.deps.isolatedProfileMode(), profilesMatch: this.deps.profilesMatch });
471
+ const payload = buildSessionListPayload(this.store, { ...params, ...(cliRows ? { cliRows } : {}), gatewayIdentity, stateDbSources: this.stateDbSources, activeProfile, isolatedProfileMode: this.deps.isolatedProfileMode(), profilesMatch: this.deps.profilesMatch });
438
472
  return sessionListResponse(payload, this.deps.runtime, this.deps.redactEnabled(), this.deps.now());
439
473
  }
440
474
  search(q, opts) {
@@ -442,8 +476,10 @@ export class SessionService {
442
476
  let sessions = allSessions(this.store);
443
477
  if (!opts.allProfiles)
444
478
  sessions = sessions.filter((r) => this.deps.profilesMatch(str(r.profile) || null, activeProfile));
479
+ sessions = withOwnerLocks(sessions, this.stateDbSources);
445
480
  const redact = this.deps.redactEnabled();
446
481
  const redactRow = (item) => {
482
+ withSessionWireFlags(item, this.deps.runtime.activeStreamIds);
447
483
  if (typeof item.title === 'string')
448
484
  item.title = redactText(item.title, redact);
449
485
  for (const f of ['display_title', '_state_db_title', 'parent_title'])
@@ -499,10 +535,10 @@ export class SessionService {
499
535
  catch {
500
536
  hermesHome = '';
501
537
  }
502
- const live = full.active_stream_id && this.deps.runtime.activeStreamIds.has(full.active_stream_id) ? full.active_stream_id : null;
538
+ const { is_streaming: streaming, active_stream_id: live, read_only: readOnly } = this.wireRow(full);
503
539
  return {
504
540
  session_id: full.session_id, title: full.title, model: full.model, profile, hermes_home: hermesHome, workspace: full.workspace, personality: full.personality,
505
- message_count: full.messages.length, created_at: full.created_at, updated_at: full.updated_at, agent_running: Boolean(full.active_stream_id), active_stream_id: live,
541
+ message_count: full.messages.length, created_at: full.created_at, updated_at: full.updated_at, agent_running: streaming, is_streaming: streaming, active_stream_id: live, read_only: readOnly,
506
542
  input_tokens: inp, output_tokens: out, total_tokens: inp + out, estimated_cost: full.estimated_cost,
507
543
  };
508
544
  }
@@ -574,7 +610,7 @@ export class SessionService {
574
610
  catch {
575
611
  throw new HttpFailure(404, 'Session not found');
576
612
  }
577
- if (current.read_only)
613
+ if (this.isReadOnly(current))
578
614
  throw new HttpFailure(403, `Session ${sid} is read-only`);
579
615
  await this.store.withLock(sid, () => {
580
616
  current.title = title;
@@ -593,7 +629,7 @@ export class SessionService {
593
629
  });
594
630
  await this.deps.syncTitle(s);
595
631
  this.publish('session_rename', s.profile, s.session_id);
596
- return { session: s.compact() };
632
+ return { session: this.wireRow(s) };
597
633
  }
598
634
  // The pin quota is counted across sessions, so the count-and-save transaction runs on one process-wide chain;
599
635
  // per-session locks alone would let two pins of different sessions both see the last free slot.
@@ -623,7 +659,7 @@ export class SessionService {
623
659
  this.store.save(s);
624
660
  });
625
661
  this.publish('session_pin', s.profile, s.session_id);
626
- return { ok: true, session: s.compact() };
662
+ return { ok: true, session: this.wireRow(s) };
627
663
  }
628
664
  async archive(sid, archived) {
629
665
  this.rejectSubagent(sid, 'archived');
@@ -636,7 +672,7 @@ export class SessionService {
636
672
  this.store.save(s, { touchUpdatedAt: false });
637
673
  });
638
674
  this.publish('session_archive', s.profile, s.session_id);
639
- return { ok: true, session: s.compact(), ...worktreeRetainedPayload(s) };
675
+ return { ok: true, session: this.wireRow(s), ...worktreeRetainedPayload(s) };
640
676
  }
641
677
  async move(sid, targetProjectId) {
642
678
  const s = this.mutationTarget(sid, 'moved');
@@ -658,7 +694,7 @@ export class SessionService {
658
694
  throw error;
659
695
  }
660
696
  this.publish('session_move', s.profile, s.session_id);
661
- return { ok: true, session: s.compact() };
697
+ return { ok: true, session: this.wireRow(s) };
662
698
  }
663
699
  async update(sid, body) {
664
700
  const s = this.mutationTarget(sid, 'updated');
@@ -696,7 +732,7 @@ export class SessionService {
696
732
  async setToolsets(sid, toolsets) {
697
733
  this.rejectSubagent(sid, 'modified');
698
734
  const cleaned = this.validateToolsetsShape(toolsets);
699
- const s = this.get404(sid);
735
+ const s = this.mutationTarget(sid, 'modified');
700
736
  await this.store.withLock(sid, () => {
701
737
  s.enabled_toolsets = cleaned;
702
738
  this.store.save(s);
@@ -718,7 +754,7 @@ export class SessionService {
718
754
  this.rejectSubagent(sid, 'modified');
719
755
  if (keepRaw === null || keepRaw === undefined)
720
756
  throw new HttpFailure(400, 'Missing required field(s): keep_count');
721
- const s = this.get404(sid);
757
+ const s = this.mutationTarget(sid, 'modified');
722
758
  // Python `int(body["keep_count"])`: a float truncates, a non-integer string is rejected.
723
759
  let keep;
724
760
  if (typeof keepRaw === 'number')
@@ -740,7 +776,7 @@ export class SessionService {
740
776
  }
741
777
  async clear(sid) {
742
778
  this.rejectSubagent(sid, 'modified');
743
- const s = this.get404(sid);
779
+ const s = this.mutationTarget(sid, 'modified');
744
780
  await this.store.withLock(sid, () => {
745
781
  const hadMessages = s.messages.length > 0;
746
782
  truncateSessionAtKeep(s, 0);
@@ -775,12 +811,12 @@ export class SessionService {
775
811
  }
776
812
  });
777
813
  this.deps.runtime.evictAgent(sid);
778
- return { ok: true, session: s.compact() };
814
+ return { ok: true, session: this.wireRow(s) };
779
815
  }
780
816
  async retry(sid) {
781
817
  this.rejectSubagent(sid, 'modified');
782
818
  return this.store.withLock(sid, () => {
783
- const s = this.get404(sid);
819
+ const s = this.mutationTarget(sid, 'modified');
784
820
  const history = s.messages;
785
821
  const lastUser = findLastUserIndex(history);
786
822
  if (lastUser === null)
@@ -795,7 +831,7 @@ export class SessionService {
795
831
  async undo(sid) {
796
832
  this.rejectSubagent(sid, 'modified');
797
833
  return this.store.withLock(sid, () => {
798
- const s = this.get404(sid);
834
+ const s = this.mutationTarget(sid, 'modified');
799
835
  const history = s.messages;
800
836
  const lastUser = findLastUserIndex(history);
801
837
  if (lastUser === null)
@@ -833,7 +869,7 @@ export class SessionService {
833
869
  if (this.isSubagentViewOnly(sid))
834
870
  throw new HttpFailure(400, 'Subagent sessions are view-only and cannot be branched from WebUI');
835
871
  const source = this.get404(sid);
836
- if (source.read_only) {
872
+ if (this.isReadOnly(source)) {
837
873
  if (str(source.source_tag || source.raw_source).trim().toLowerCase() !== 'cron')
838
874
  throw new HttpFailure(403, 'Read-only sessions cannot be branched from WebUI');
839
875
  source.branchSourceReadonly = true;
@@ -1189,11 +1225,13 @@ export class SessionService {
1189
1225
  session = this.foreignSession(sid).synth;
1190
1226
  transcript = session.messages;
1191
1227
  }
1192
- const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) }, withTurnIds(transcript));
1228
+ const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) }, withToolCallOutcomes(withTurnIds(transcript), session.tool_calls, session.active_stream_id));
1193
1229
  if (!result)
1194
1230
  throw new HttpFailure(404, 'Anchor activity scene not found');
1195
1231
  // Paged rows come from the raw transcript, so they take the same credential redaction as the detail's preview.
1196
- return redactValue(result, this.deps.redactEnabled());
1232
+ const enabled = this.deps.redactEnabled();
1233
+ const redacted = redactValue(result, enabled);
1234
+ return { ...redacted, rows: withSceneToolDisplay(result.rows, redacted.rows, enabled) };
1197
1235
  }
1198
1236
  // ── shares ───────────────────────────────────────────────────────────────
1199
1237
  createShare(sid) {