@maudecode/talaria-web 1.21.0 → 1.22.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 (360) hide show
  1. package/_release.json +4 -4
  2. package/dist/api/automation-router.d.ts +14 -14
  3. package/dist/api/chat-router.d.ts +217 -68
  4. package/dist/api/groups-router.d.ts +764 -0
  5. package/dist/api/groups-router.js +79 -0
  6. package/dist/api/groups-router.js.map +1 -0
  7. package/dist/api/raw-routes.js +3 -1
  8. package/dist/api/raw-routes.js.map +1 -1
  9. package/dist/api/sessions-router.d.ts +559 -160
  10. package/dist/api/sessions-router.js +9 -12
  11. package/dist/api/sessions-router.js.map +1 -1
  12. package/dist/api/settings-router.d.ts +911 -1
  13. package/dist/api/settings-router.js +53 -2
  14. package/dist/api/settings-router.js.map +1 -1
  15. package/dist/api/sse-routes.d.ts +1 -1
  16. package/dist/api/sse-routes.js +11 -3
  17. package/dist/api/sse-routes.js.map +1 -1
  18. package/dist/api/tools-raw.js +27 -136
  19. package/dist/api/tools-raw.js.map +1 -1
  20. package/dist/api/tools-router.d.ts +109 -24
  21. package/dist/api/tools-router.js +64 -7
  22. package/dist/api/tools-router.js.map +1 -1
  23. package/dist/app.js +5 -1
  24. package/dist/app.js.map +1 -1
  25. package/dist/auth/gate.js +5 -1
  26. package/dist/auth/gate.js.map +1 -1
  27. package/dist/config/agent-config.d.ts +6 -1
  28. package/dist/config/agent-config.js +75 -3
  29. package/dist/config/agent-config.js.map +1 -1
  30. package/dist/feedback.d.ts +18 -0
  31. package/dist/feedback.js +145 -0
  32. package/dist/feedback.js.map +1 -0
  33. package/dist/fs/stat.d.ts +2 -0
  34. package/dist/fs/stat.js +4 -0
  35. package/dist/fs/stat.js.map +1 -1
  36. package/dist/http/context.d.ts +7 -0
  37. package/dist/http/context.js +0 -6
  38. package/dist/http/context.js.map +1 -1
  39. package/dist/http/pinned.js +19 -8
  40. package/dist/http/pinned.js.map +1 -1
  41. package/dist/providers/catalog.d.ts +9 -1
  42. package/dist/providers/catalog.js +86 -6
  43. package/dist/providers/catalog.js.map +1 -1
  44. package/dist/redact.js +9 -3
  45. package/dist/redact.js.map +1 -1
  46. package/dist/runtime.js +27 -4
  47. package/dist/runtime.js.map +1 -1
  48. package/dist/server.js +1 -0
  49. package/dist/server.js.map +1 -1
  50. package/dist/sessions/anchor.d.ts +3 -2
  51. package/dist/sessions/anchor.js +11 -10
  52. package/dist/sessions/anchor.js.map +1 -1
  53. package/dist/sessions/cli-sessions.js +11 -6
  54. package/dist/sessions/cli-sessions.js.map +1 -1
  55. package/dist/sessions/compress.d.ts +10 -9
  56. package/dist/sessions/compress.js +31 -20
  57. package/dist/sessions/compress.js.map +1 -1
  58. package/dist/sessions/gateway-sessions.d.ts +11 -0
  59. package/dist/sessions/gateway-sessions.js +79 -24
  60. package/dist/sessions/gateway-sessions.js.map +1 -1
  61. package/dist/sessions/gateway-watcher.js +8 -4
  62. package/dist/sessions/gateway-watcher.js.map +1 -1
  63. package/dist/sessions/groups.d.ts +60 -0
  64. package/dist/sessions/groups.js +339 -0
  65. package/dist/sessions/groups.js.map +1 -0
  66. package/dist/sessions/list.d.ts +7 -2
  67. package/dist/sessions/list.js +13 -4
  68. package/dist/sessions/list.js.map +1 -1
  69. package/dist/sessions/merge.d.ts +14 -5
  70. package/dist/sessions/merge.js +42 -13
  71. package/dist/sessions/merge.js.map +1 -1
  72. package/dist/sessions/pending.d.ts +1 -1
  73. package/dist/sessions/pending.js +15 -6
  74. package/dist/sessions/pending.js.map +1 -1
  75. package/dist/sessions/prefix-index.d.ts +1 -14
  76. package/dist/sessions/prefix-index.js +1 -50
  77. package/dist/sessions/prefix-index.js.map +1 -1
  78. package/dist/sessions/reasoning-display.d.ts +2 -0
  79. package/dist/sessions/reasoning-display.js +31 -0
  80. package/dist/sessions/reasoning-display.js.map +1 -0
  81. package/dist/sessions/relay.d.ts +4 -1
  82. package/dist/sessions/relay.js +44 -7
  83. package/dist/sessions/relay.js.map +1 -1
  84. package/dist/sessions/service.d.ts +7 -2
  85. package/dist/sessions/service.js +104 -64
  86. package/dist/sessions/service.js.map +1 -1
  87. package/dist/sessions/session.d.ts +6 -0
  88. package/dist/sessions/session.js +13 -0
  89. package/dist/sessions/session.js.map +1 -1
  90. package/dist/sessions/shares.d.ts +1 -1
  91. package/dist/sessions/shares.js +13 -4
  92. package/dist/sessions/shares.js.map +1 -1
  93. package/dist/sessions/state-db.d.ts +2 -1
  94. package/dist/sessions/state-db.js +7 -3
  95. package/dist/sessions/state-db.js.map +1 -1
  96. package/dist/sessions/storage/json-documents.js +2 -0
  97. package/dist/sessions/storage/json-documents.js.map +1 -1
  98. package/dist/sessions/store.d.ts +1 -0
  99. package/dist/sessions/store.js +10 -3
  100. package/dist/sessions/store.js.map +1 -1
  101. package/dist/sessions/streams.d.ts +2 -0
  102. package/dist/sessions/streams.js +12 -0
  103. package/dist/sessions/streams.js.map +1 -1
  104. package/dist/sessions/todo.js +10 -1
  105. package/dist/sessions/todo.js.map +1 -1
  106. package/dist/sessions/turn.js +33 -9
  107. package/dist/sessions/turn.js.map +1 -1
  108. package/dist/settings.js +2 -1
  109. package/dist/settings.js.map +1 -1
  110. package/dist/spa.js +1 -1
  111. package/dist/spa.js.map +1 -1
  112. package/dist/test/group-fixture.d.ts +66 -0
  113. package/dist/test/group-fixture.js +89 -0
  114. package/dist/test/group-fixture.js.map +1 -0
  115. package/dist/test/harness.d.ts +3 -0
  116. package/dist/test/harness.js +3 -0
  117. package/dist/test/harness.js.map +1 -1
  118. package/dist/tools/connectors.d.ts +9 -1
  119. package/dist/tools/connectors.js +48 -0
  120. package/dist/tools/connectors.js.map +1 -1
  121. package/dist/tools/gateway-restart.d.ts +1 -1
  122. package/dist/tools/skills.d.ts +6 -0
  123. package/dist/tools/skills.js +17 -0
  124. package/dist/tools/skills.js.map +1 -1
  125. package/dist/tools/updates.d.ts +16 -9
  126. package/dist/tools/updates.js +63 -25
  127. package/dist/tools/updates.js.map +1 -1
  128. package/dist/workspace/fs.d.ts +2 -0
  129. package/dist/workspace/fs.js +63 -1
  130. package/dist/workspace/fs.js.map +1 -1
  131. package/dist/workspace/upload.d.ts +1 -1
  132. package/dist/workspace/upload.js +52 -37
  133. package/dist/workspace/upload.js.map +1 -1
  134. package/dist/workspace/workspaces.d.ts +5 -1
  135. package/dist/workspace/workspaces.js +32 -6
  136. package/dist/workspace/workspaces.js.map +1 -1
  137. package/package.json +2 -2
  138. package/sidecar/agent_importer.json +8 -0
  139. package/sidecar/scripts/agent_importer_contract.py +19 -0
  140. package/sidecar/scripts/test.sh +3 -1
  141. package/sidecar/talaria_sidecar/__init__.py +1 -1
  142. package/sidecar/talaria_sidecar/home.py +12 -5
  143. package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
  144. package/sidecar/talaria_sidecar/methods/agent_imports.py +346 -0
  145. package/sidecar/talaria_sidecar/methods/chat.py +141 -58
  146. package/sidecar/talaria_sidecar/methods/commands.py +6 -4
  147. package/sidecar/talaria_sidecar/methods/config.py +8 -3
  148. package/sidecar/talaria_sidecar/methods/connectors.py +138 -4
  149. package/sidecar/talaria_sidecar/methods/dashboard_plugins.py +21 -0
  150. package/sidecar/talaria_sidecar/methods/delegation.py +126 -0
  151. package/sidecar/talaria_sidecar/methods/gateway.py +5 -0
  152. package/sidecar/talaria_sidecar/methods/gateway_sessions.py +35 -6
  153. package/sidecar/talaria_sidecar/methods/groups.py +120 -0
  154. package/sidecar/talaria_sidecar/methods/memory.py +27 -3
  155. package/sidecar/talaria_sidecar/methods/nous_account.py +130 -0
  156. package/sidecar/talaria_sidecar/methods/oauth.py +25 -4
  157. package/sidecar/talaria_sidecar/methods/outbound_drafts.py +1 -19
  158. package/sidecar/talaria_sidecar/methods/plugin_catalog.py +73 -2
  159. package/sidecar/talaria_sidecar/methods/providers.py +51 -1
  160. package/sidecar/talaria_sidecar/methods/skill_revisions.py +177 -0
  161. package/sidecar/talaria_sidecar/methods/skills.py +10 -0
  162. package/sidecar/talaria_sidecar/methods/tts.py +67 -0
  163. package/sidecar/talaria_sidecar/rpc.py +11 -2
  164. package/static/dist/FILES.txt +155 -143
  165. package/static/dist/THIRD_PARTY_LICENSES.md +1 -1
  166. package/static/dist/assets/AppShell-hvysbd9x.js +8 -0
  167. package/static/dist/assets/{Button-nuaikybd.js → Button-dlsibkzq.js} +1 -1
  168. package/static/dist/assets/ChatPage-jikwrwfd.js +2 -0
  169. package/static/dist/assets/Composer-mnke8ss2.js +5 -0
  170. package/static/dist/assets/ConnectTargets-ejplzo4q.js +1 -0
  171. package/static/dist/assets/Dialog-rksfyyq5.js +1 -0
  172. package/static/dist/assets/{ExtensionRoute-l1yjrso4.js → ExtensionRoute-igk5h0rj.js} +1 -1
  173. package/static/dist/assets/HubRoute-eooassx4.js +2 -0
  174. package/static/dist/assets/Markdown-m5pzgvtx.js +2 -0
  175. package/static/dist/assets/{MarkdownRenderer-ccgqrza3.js → MarkdownRenderer-74ysuomr.js} +6 -6
  176. package/static/dist/assets/OAuthSignIn-i4flsuq2.js +1 -0
  177. package/static/dist/assets/QueueCard-msz9wd1m.js +1 -0
  178. package/static/dist/assets/ResourceSwitch-b70zg4xd.js +1 -0
  179. package/static/dist/assets/RightPanel-f5v61m8j.js +1 -0
  180. package/static/dist/assets/Select-f3l897pt.js +1 -0
  181. package/static/dist/assets/SessionListPanel-brnzacw9.js +1 -0
  182. package/static/dist/assets/SettingsLayout-f4akmrt2.js +1 -0
  183. package/static/dist/assets/States-msohx3c0.js +1 -0
  184. package/static/dist/assets/TerminalPanel-bnu5xawo.js +16 -0
  185. package/static/dist/assets/Toaster-d6col3ch.js +1 -0
  186. package/static/dist/assets/_app-lrjgufcy.js +1 -0
  187. package/static/dist/assets/{_app.ext._extensionId-n797jp72.js → _app.ext._extensionId-k3xitxr1.js} +1 -1
  188. package/static/dist/assets/_app.groups-bt4wdwnd.js +1 -0
  189. package/static/dist/assets/{_app.index-ne43mdw2.js → _app.index-n3otiki0.js} +1 -1
  190. package/static/dist/assets/{_app.insights-fqonovb4.js → _app.insights-b0mzlh6m.js} +1 -1
  191. package/static/dist/assets/{_app.kanban-kysliv19.js → _app.kanban-d923g7j5.js} +1 -1
  192. package/static/dist/assets/{_app.logs-febut82r.js → _app.logs-donegue1.js} +1 -1
  193. package/static/dist/assets/{_app.memory-ha86oj1c.js → _app.memory-hdnled08.js} +1 -1
  194. package/static/dist/assets/{_app.profiles-cnu3gxxq.js → _app.profiles-fumot3jk.js} +1 -1
  195. package/static/dist/assets/{_app.session._sessionId-ifzjpcgn.js → _app.session._sessionId-crmdl2ux.js} +1 -1
  196. package/static/dist/assets/{_app.settings-nmakdiaf.js → _app.settings-jui8iesz.js} +1 -1
  197. package/static/dist/assets/_app.settings._section-do84hsqw.js +3 -0
  198. package/static/dist/assets/{_app.skills-f3wad8yo.js → _app.skills-heqcn21m.js} +1 -1
  199. package/static/dist/assets/_app.tasks-jiudtutt.js +1 -0
  200. package/static/dist/assets/{_app.todos-bml1m3r1.js → _app.todos-bl6kk2zq.js} +1 -1
  201. package/static/dist/assets/{_app.workspaces-f3d066lx.js → _app.workspaces-frvh3o7w.js} +1 -1
  202. package/static/dist/assets/_delete-qnxuo87s.js +1 -0
  203. package/static/dist/assets/{abnfDiagram-VCTEODGH-i53jc4yp.js → abnfDiagram-VCTEODGH-dppg3yfx.js} +1 -1
  204. package/static/dist/assets/{architecture-7GRP2DOG-e3bv5m6f.js → architecture-7GRP2DOG-gbajejh3.js} +1 -1
  205. package/static/dist/assets/{architectureDiagram-5GKGNRK7-pakekxu2.js → architectureDiagram-5GKGNRK7-bzrxyais.js} +1 -1
  206. package/static/dist/assets/archive-yhdyz231.js +1 -0
  207. package/static/dist/assets/autoReadClaim-nlyv8tu9.js +1 -0
  208. package/static/dist/assets/{blockDiagram-I7D4REHJ-bc6bo1n6.js → blockDiagram-I7D4REHJ-gmk9koab.js} +1 -1
  209. package/static/dist/assets/{c4Diagram-7LVT6UL2-btvwk2qx.js → c4Diagram-7LVT6UL2-bfqiqqcz.js} +1 -1
  210. package/static/dist/assets/channel-grt3rob4.js +1 -0
  211. package/static/dist/assets/{chunk-4HAMMTFA-dlwab11c.js → chunk-4HAMMTFA-i9s6h4wv.js} +1 -1
  212. package/static/dist/assets/{chunk-75Z2AOVW-dp5gh7i8.js → chunk-75Z2AOVW-gnt6pnso.js} +1 -1
  213. package/static/dist/assets/{chunk-DU6HZSFF-bi06zl1c.js → chunk-DU6HZSFF-gq439wot.js} +3 -3
  214. package/static/dist/assets/{chunk-F27PBJKO-kvv1rnlh.js → chunk-F27PBJKO-wvx90pbt.js} +1 -1
  215. package/static/dist/assets/{chunk-GMAD6QVW-ji0rx9by.js → chunk-GMAD6QVW-mc2gu30k.js} +1 -1
  216. package/static/dist/assets/{chunk-GVQU2GXP-nmz0j82p.js → chunk-GVQU2GXP-f8fxa2ym.js} +1 -1
  217. package/static/dist/assets/{chunk-IMKFNOWR-kmi1qx88.js → chunk-IMKFNOWR-lnsl31hj.js} +1 -1
  218. package/static/dist/assets/{chunk-L3NEJ4N5-xhb7mebj.js → chunk-L3NEJ4N5-kbfdidwu.js} +1 -1
  219. package/static/dist/assets/{chunk-OSK3NFVY-5a9sgscq.js → chunk-OSK3NFVY-dvxsduj6.js} +1 -1
  220. package/static/dist/assets/{chunk-P2QGCYS3-dfezp4vu.js → chunk-P2QGCYS3-ivo3i1wf.js} +1 -1
  221. package/static/dist/assets/{chunk-POPQ4Y6H-gd2vq3c0.js → chunk-POPQ4Y6H-i0gfu0hx.js} +1 -1
  222. package/static/dist/assets/{chunk-PWAF6VOD-wvw2nksf.js → chunk-PWAF6VOD-jb0fdyb0.js} +1 -1
  223. package/static/dist/assets/{chunk-SHT3W25Y-f58q97px.js → chunk-SHT3W25Y-b7ou2xsp.js} +1 -1
  224. package/static/dist/assets/{chunk-SVP7TREG-abgwpyz9.js → chunk-SVP7TREG-e2v7me5v.js} +1 -1
  225. package/static/dist/assets/{chunk-TICWLB2K-h4sbs8ds.js → chunk-TICWLB2K-e5zlai62.js} +1 -1
  226. package/static/dist/assets/classDiagram-ZZMXUADV-nnsp49jr.js +1 -0
  227. package/static/dist/assets/classDiagram-v2-VYDZK3BY-nnsp49jr.js +1 -0
  228. package/static/dist/assets/completionAudio-c5at041z.js +1 -0
  229. package/static/dist/assets/{copy-m9h56qa8.js → copy-jj3oiw13.js} +1 -1
  230. package/static/dist/assets/{cynefin-OW5HDTMX-g081vffs.js → cynefin-OW5HDTMX-n5n1ck70.js} +1 -1
  231. package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-odxvjesk.js → cynefinDiagram-5FMLGOSQ-b33npu4f.js} +1 -1
  232. package/static/dist/assets/{dagre-GXQ25YYZ-cpdwzjs4.js → dagre-GXQ25YYZ-miwvae07.js} +1 -1
  233. package/static/dist/assets/{diagram-S7CK7UJ4-clv5mxvu.js → diagram-S7CK7UJ4-j8fphsp4.js} +1 -1
  234. package/static/dist/assets/{diagram-UQ7AKVKN-m2ia1mbf.js → diagram-UQ7AKVKN-5cixo166.js} +1 -1
  235. package/static/dist/assets/{diagram-VSXAHHWV-ea6zv636.js → diagram-VSXAHHWV-ii3bf92m.js} +1 -1
  236. package/static/dist/assets/{diagram-VX7I27RA-oqlef685.js → diagram-VX7I27RA-b3cfgx81.js} +1 -1
  237. package/static/dist/assets/{diagram-Z3DM3KII-kjubcbwu.js → diagram-Z3DM3KII-bey9lqr8.js} +1 -1
  238. package/static/dist/assets/{dist-carq1azj.js → dist-cb8um5dh.js} +4 -4
  239. package/static/dist/assets/{dist-crc46di9.js → dist-kpg5ccm9.js} +1 -1
  240. package/static/dist/assets/{ebnfDiagram-PWID7BFC-fg0zri3e.js → ebnfDiagram-PWID7BFC-2m4wrnqc.js} +1 -1
  241. package/static/dist/assets/{erDiagram-RLTQ6QDP-eb7pmk3x.js → erDiagram-RLTQ6QDP-kak5te0n.js} +1 -1
  242. package/static/dist/assets/{eventmodeling-NTZA5JFV-gvi1fxhn.js → eventmodeling-NTZA5JFV-ojcc486t.js} +1 -1
  243. package/static/dist/assets/flowDiagram-HODETNUW-kxr9sicu.js +1 -0
  244. package/static/dist/assets/folder-plus-fk6j7tlv.js +1 -0
  245. package/static/dist/assets/{ganttDiagram-EL5Y4UJY-jmisowrc.js → ganttDiagram-EL5Y4UJY-k6nfmhrh.js} +1 -1
  246. package/static/dist/assets/getPseudoElementBounds-mwj3vqni.js +1 -0
  247. package/static/dist/assets/{gitGraph-4MIJSDKK-m7kt3u6e.js → gitGraph-4MIJSDKK-bxq1lbhy.js} +1 -1
  248. package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-nq7vfzh2.js → gitGraphDiagram-WWUBYQGX-ehvoankt.js} +1 -1
  249. package/static/dist/assets/group_discussions-fk5hry4l.js +1 -0
  250. package/static/dist/assets/{highlighted-body-KPVGNVTW-gcu017ay.js → highlighted-body-KPVGNVTW-nr4nfdq7.js} +1 -1
  251. package/static/dist/assets/{host-ipp4e84c.js → host-dhgqiozp.js} +1 -1
  252. package/static/dist/assets/index-hx7z4wdj.js +13 -0
  253. package/static/dist/assets/index-o8ebuc5x.css +2 -0
  254. package/static/dist/assets/{info-A6RAGUB7-idazwfqe.js → info-A6RAGUB7-dtsj0ybw.js} +1 -1
  255. package/static/dist/assets/{infoDiagram-27XIBGKW-bb9jh8gl.js → infoDiagram-27XIBGKW-jena90ao.js} +1 -1
  256. package/static/dist/assets/{ishikawaDiagram-5VMMS53U-nqc132rv.js → ishikawaDiagram-5VMMS53U-kia6bn5u.js} +1 -1
  257. package/static/dist/assets/{journeyDiagram-3NMN7TZE-fpvnhy44.js → journeyDiagram-3NMN7TZE-ipsa6icb.js} +1 -1
  258. package/static/dist/assets/{kanban-definition-UXKFOSKX-ndzqm6fu.js → kanban-definition-UXKFOSKX-moxx59kp.js} +1 -1
  259. package/static/dist/assets/katex-ic33v820.js +257 -0
  260. package/static/dist/assets/katex-qcv7xo0t.css +1 -0
  261. package/static/dist/assets/{lazyRouteComponent-javud235.js → lazyRouteComponent-i74ujrfk.js} +1 -1
  262. package/static/dist/assets/{line-g625e7cj.js → line-lgrkg9no.js} +1 -1
  263. package/static/dist/assets/link-2-fp49mwl2.js +1 -0
  264. package/static/dist/assets/{link-gfdaho08.js → link-es18mse1.js} +2 -2
  265. package/static/dist/assets/{locale-cs-n41hptse.js → locale-cs-brltdkcp.js} +1 -1
  266. package/static/dist/assets/{locale-de-k7ht47ew.js → locale-de-h6e9oq6v.js} +1 -1
  267. package/static/dist/assets/{locale-es-ih078lco.js → locale-es-oklmh80f.js} +1 -1
  268. package/static/dist/assets/{locale-fr-ojabnf41.js → locale-fr-b17ozoi2.js} +1 -1
  269. package/static/dist/assets/{locale-it-kb96jufy.js → locale-it-whe01eef.js} +1 -1
  270. package/static/dist/assets/{locale-ja-jpsp3xs1.js → locale-ja-g1s0rtpc.js} +1 -1
  271. package/static/dist/assets/{locale-pl-dbap4leu.js → locale-pl-d9p3lqcb.js} +1 -1
  272. package/static/dist/assets/{locale-pt-nci7w72x.js → locale-pt-l75on74f.js} +1 -1
  273. package/static/dist/assets/{locale-ru-soghe4cs.js → locale-ru-wl3mbsaw.js} +1 -1
  274. package/static/dist/assets/{locale-tr-ks00mu68.js → locale-tr-cz87itrq.js} +1 -1
  275. package/static/dist/assets/{locale-vi-ij7twfm6.js → locale-vi-elqj1y4k.js} +1 -1
  276. package/static/dist/assets/{locale-zh-Hant-feakwr7a.js → locale-zh-Hant-hf8gqm7d.js} +1 -1
  277. package/static/dist/assets/{locale-zh-ren0vjyv.js → locale-zh-cdckwb0u.js} +1 -1
  278. package/static/dist/assets/login-o6gfl4gy.js +1 -0
  279. package/static/dist/assets/mermaid-HWGCJPDP-n2kbzsao.js +1 -0
  280. package/static/dist/assets/{mermaid-parser.core-plzkuzov.js → mermaid-parser.core-fflovwf2.js} +3 -3
  281. package/static/dist/assets/{mindmap-definition-YA3MSWOX-ojrgs569.js → mindmap-definition-YA3MSWOX-ic8l9whi.js} +1 -1
  282. package/static/dist/assets/onboarding-bxm7gdrr.js +1 -0
  283. package/static/dist/assets/{packet-AYTQ26CC-gyaf9s8h.js → packet-AYTQ26CC-ntci3088.js} +1 -1
  284. package/static/dist/assets/{pegDiagram-XKGWAZYB-bf6xj8mq.js → pegDiagram-XKGWAZYB-e3btz04w.js} +1 -1
  285. package/static/dist/assets/{pie-WAS4IAKB-f5ymzelo.js → pie-WAS4IAKB-o2dc7l36.js} +1 -1
  286. package/static/dist/assets/{pieDiagram-E7YTZNPT-d0qjl3zi.js → pieDiagram-E7YTZNPT-gro55rrw.js} +1 -1
  287. package/static/dist/assets/presence-lq6m12ga.js +1 -0
  288. package/static/dist/assets/prompt_queue_cancelled-cebcuagu.js +1 -0
  289. package/static/dist/assets/{quadrantDiagram-AXDQQJYC-oqy1mras.js → quadrantDiagram-AXDQQJYC-fxulmd7d.js} +1 -1
  290. package/static/dist/assets/queryKeys-cnvn6pea.js +9 -0
  291. package/static/dist/assets/{radar-RG4KPBEZ-b6jcjvda.js → radar-RG4KPBEZ-9pcospra.js} +1 -1
  292. package/static/dist/assets/{railroad-74A4TZTK-e3a6lk5k.js → railroad-74A4TZTK-nzdga12j.js} +1 -1
  293. package/static/dist/assets/{railroad-abnf-HS5TGJTU-ff5hocrx.js → railroad-abnf-HS5TGJTU-ep3ytel0.js} +1 -1
  294. package/static/dist/assets/{railroad-ebnf-LZEXJU2U-exkhyw4n.js → railroad-ebnf-LZEXJU2U-iw7uc1wy.js} +1 -1
  295. package/static/dist/assets/{railroad-peg-WCYAUIDC-jefk9b7c.js → railroad-peg-WCYAUIDC-fo3b3gme.js} +1 -1
  296. package/static/dist/assets/{railroadDiagram-O6MQD6OU-e4amks1i.js → railroadDiagram-O6MQD6OU-lxpxf8f0.js} +1 -1
  297. package/static/dist/assets/{refresh-cw-lfp4u1oh.js → refresh-cw-d14h79x5.js} +1 -1
  298. package/static/dist/assets/rename-ccd52yws.js +1 -0
  299. package/static/dist/assets/{requirementDiagram-BXWQKSXE-c77k1e2y.js → requirementDiagram-BXWQKSXE-lrozucd2.js} +1 -1
  300. package/static/dist/assets/{sankeyDiagram-P5KCCOFB-oa1cc52s.js → sankeyDiagram-P5KCCOFB-iusxy9mq.js} +1 -1
  301. package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-j20gqt22.js → sequenceDiagram-WJ2MYXX4-o987q8ti.js} +1 -1
  302. package/static/dist/assets/{share._token-kmfoflw6.js → share._token-bfw7f9m5.js} +2 -2
  303. package/static/dist/assets/sliders-horizontal-l65hoa3x.js +1 -0
  304. package/static/dist/assets/{stateDiagram-D77RDMKH-co2ghkdp.js → stateDiagram-D77RDMKH-hh23v7y5.js} +1 -1
  305. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-jukr0d8h.js +1 -0
  306. package/static/dist/assets/{swimlanes-42K2YHIH-m30cktqe.js → swimlanes-42K2YHIH-gj2t3rm8.js} +1 -1
  307. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ik9m9j2m.js +8 -0
  308. package/static/dist/assets/{timeline-definition-24CTP7MA-liuep6fl.js → timeline-definition-24CTP7MA-84s2w2sr.js} +1 -1
  309. package/static/dist/assets/toast-gqqcvxiy.js +56 -0
  310. package/static/dist/assets/{treeView-Q6P3EWNA-np5d2jv2.js → treeView-Q6P3EWNA-cmuj50l7.js} +1 -1
  311. package/static/dist/assets/{treemap-WGGIJYW6-cmpltxh1.js → treemap-WGGIJYW6-dpjlg0xc.js} +1 -1
  312. package/static/dist/assets/tts-jw84jlqy.js +1 -0
  313. package/static/dist/assets/{useForm-f1udzsjf.js → useForm-lxzhiqao.js} +1 -1
  314. package/static/dist/assets/{useParams-ierevvts.js → useParams-dt6gkoq7.js} +1 -1
  315. package/static/dist/assets/{useSearch-i7nr9ypl.js → useSearch-o8t49csk.js} +1 -1
  316. package/static/dist/assets/useTranscript-gx9umcc2.js +1 -0
  317. package/static/dist/assets/{vennDiagram-4TSXK5OY-b2g42qrg.js → vennDiagram-4TSXK5OY-g9g5o8vy.js} +1 -1
  318. package/static/dist/assets/{wardley-WFR3VGLG-lb0eqbff.js → wardley-WFR3VGLG-ij35obrl.js} +1 -1
  319. package/static/dist/assets/{wardleyDiagram-VM6X3IG4-ermwaqha.js → wardleyDiagram-VM6X3IG4-f9my7q7w.js} +1 -1
  320. package/static/dist/assets/{xychartDiagram-S5SC5T6Z-dll0jldk.js → xychartDiagram-S5SC5T6Z-olqx1s1p.js} +1 -1
  321. package/static/dist/index.html +1 -1
  322. package/static/dist/sw.js +1 -1
  323. package/static/dist/assets/AppShell-c5989995.js +0 -8
  324. package/static/dist/assets/ChatPage-bfg4khph.js +0 -6
  325. package/static/dist/assets/ConnectTargets-k5wo9yo8.js +0 -1
  326. package/static/dist/assets/Dialog-o8vo2aws.js +0 -1
  327. package/static/dist/assets/Field-j7o8cfps.js +0 -1
  328. package/static/dist/assets/HubRoute-efnwe4xz.js +0 -2
  329. package/static/dist/assets/Markdown-clqf5m22.js +0 -2
  330. package/static/dist/assets/OAuthSignIn-h7bjaqp6.js +0 -1
  331. package/static/dist/assets/ResourceSwitch-oai2zqaj.js +0 -1
  332. package/static/dist/assets/RightPanel-ho161a45.js +0 -1
  333. package/static/dist/assets/Select-d1g5a8bm.js +0 -1
  334. package/static/dist/assets/SessionListPanel-i7kaokhi.js +0 -1
  335. package/static/dist/assets/SettingsLayout-lnecm87w.js +0 -1
  336. package/static/dist/assets/States-easntmry.js +0 -1
  337. package/static/dist/assets/TerminalPanel-lxhwd4jl.js +0 -16
  338. package/static/dist/assets/Toaster-l4sciy8t.js +0 -1
  339. package/static/dist/assets/_app-mqexqbg8.js +0 -1
  340. package/static/dist/assets/_app.settings._section-djglnjmi.js +0 -3
  341. package/static/dist/assets/_app.tasks-l10py1c0.js +0 -1
  342. package/static/dist/assets/archive-ihqi7z2x.js +0 -1
  343. package/static/dist/assets/channel-jn4f8443.js +0 -1
  344. package/static/dist/assets/classDiagram-ZZMXUADV-dzrw66se.js +0 -1
  345. package/static/dist/assets/classDiagram-v2-VYDZK3BY-dzrw66se.js +0 -1
  346. package/static/dist/assets/completionAudio-ce86msbu.js +0 -1
  347. package/static/dist/assets/flowDiagram-HODETNUW-abekab15.js +0 -1
  348. package/static/dist/assets/folder-plus-ksaons88.js +0 -1
  349. package/static/dist/assets/index-d6vbxlra.js +0 -13
  350. package/static/dist/assets/index-ey6qo0zx.css +0 -2
  351. package/static/dist/assets/katex-cbdd1ohw.css +0 -1
  352. package/static/dist/assets/katex-pbij2oo6.js +0 -257
  353. package/static/dist/assets/login-iv6yq4xf.js +0 -1
  354. package/static/dist/assets/mermaid-HWGCJPDP-cwj5cl6k.js +0 -1
  355. package/static/dist/assets/onboarding-ff4emacu.js +0 -1
  356. package/static/dist/assets/queryKeys-x8fjxhut.js +0 -9
  357. package/static/dist/assets/sliders-horizontal-g5jkzd9k.js +0 -1
  358. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-faw1opgh.js +0 -1
  359. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-hfil433g.js +0 -8
  360. package/static/dist/assets/toast-zmb35u3r.js +0 -56
@@ -1,3 +1,4 @@
1
+ import { reasoningProjection } from './reasoning-display.js';
1
2
  import { MAX_SOURCE_REFERENCES, SourceReferenceSchema, unavailableContextDetail } from '@maudecode/talaria-web-contracts';
2
3
  import { filterAsync } from '../util.js';
3
4
  import { statSignature } from '../fs/stat.js';
@@ -16,9 +17,9 @@ import { isClaudeCodeSessionId } from './claude-code.js';
16
17
  import { auditSessionRecovery, repairSafeSessionRecovery } from './recovery.js';
17
18
  import { stateDbWebDiagnosticIdsAsync, agentSessionRowsExistingAsync, CANONICAL_READ_ONLY_REASON, OWNERSHIP_UNAVAILABLE_REASON, CONVERSATION_ROUND_THRESHOLD, emptyLineageReport, stateDbSessionReadAsync, stateDbSessionSourcesAsync, stateDbTimestampSeconds, withStateDbListingReads } from './state-db.js';
18
19
  import { completionIncomplete, fallbackHandoffSummary, HANDOFF_SYSTEM_PROMPT, handoffMarker, handoffPayload, handoffTranscript, messageHandoffPayload, sameHandoff } from './handoff.js';
19
- import { anchorMessageKey, anchorSummary, CompressionJobs, compressionReference, visibleMessagesForAnchor } from './compress.js';
20
+ import { anchorMessageKey, anchorSummary, CompressionJobs, insertCompactionRow, visibleMessagesForAnchor } from './compress.js';
20
21
  import { chatReadiness, runtimeFailureDetails, SidecarError } from '../sidecar/client.js';
21
- import { agentSteerText, ApiMessageSummary, appendStateDbIdentityRows, attachedFilesPrompt, attachmentObjects, checkpointTurnStart, dedupeContext, isContextCompressionMarker, journalOutputRows, looksLikeCurrentUserTurn, stoppedTurnContext, mergeSessionMessagesAppendOnly, messageIdentity, pendingUserRow, reasoningFieldsText, sanitizeMessagesForApi, withDataUseRequirements, stateDbSeenId, stripWorkspacePrefix, withAttachmentObjects, newestSettledReply, withBodyExcerpts, withDisplayMedia, withMarkerKinds, withMirrorSources, withSceneRowMedia, withPendingUserTurn, withToolCallOutcomes, withoutRunningTurnOutput } from './merge.js';
22
+ import { agentSteerText, ApiMessageSummary, appendStateDbIdentityRows, attachedFilesPrompt, attachmentObjects, checkpointTurnStart, dedupeContext, isCompactionRow, isContextCompressionMarker, journalOutputRows, looksLikeCurrentUserTurn, stoppedTurnContext, mergeSessionMessagesAppendOnly, messageIdentity, pendingUserRow, reasoningFieldsText, sanitizeMessagesForApi, withDataUseRequirements, stateDbSeenId, stripWorkspacePrefix, withAttachmentObjects, newestSettledReply, withBodyExcerpts, withDisplayMedia, withMarkerKinds, withMirrorSources, withSceneRowMedia, withPendingUserTurn, withToolCallOutcomes, withoutRunningTurnOutput } from './merge.js';
22
23
  import { withBackgroundUpdates } from './background-updates.js';
23
24
  import { markedStateDbGeneration, stateDbIdentityKeys, stampStateDbGeneration, stateDbMessageRepresented } from './state-db-identity.js';
24
25
  import { sourceKind } from './source-kind.js';
@@ -795,10 +796,9 @@ export class SessionService {
795
796
  const payload = (await this.wireRow(s));
796
797
  // Mutation replies replace a client's transcript, so they carry the same server-built scenes as the detail.
797
798
  if (withMessages) {
798
- payload.messages = (await this.backgroundLinked(s, hydrateAnchorActivityScenes(withToolCallOutcomes((await this.backgroundUpdates(s, withMarkerKinds(withTurnIds(messages), s))), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, runningScene: !(await this.journaledActiveTurn(s)) })));
799
- payload.compression_reference = compressionReference(s, payload.messages);
799
+ payload.messages = (await this.backgroundLinked(s, hydrateAnchorActivityScenes(withToolCallOutcomes((await this.backgroundUpdates(s, withMarkerKinds(withTurnIds(messages), s))), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, showReasoning: await this.deps.showReasoning?.(s.profile) ?? true, runningScene: !(await this.journaledActiveTurn(s)) })));
800
800
  }
801
- return redactSessionData(payload, this.deps.redactEnabled());
801
+ return this.publicProjection(redactSessionData(payload, this.deps.redactEnabled()), s.profile);
802
802
  }
803
803
  /** Opaque read identity, including context changes that do not alter display message counts. */
804
804
  contextDetailKey(s) {
@@ -834,8 +834,13 @@ export class SessionService {
834
834
  return this.deps.assistantName(s.profile);
835
835
  }
836
836
  /** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
837
- publicSessionDocument(s) {
838
- return redactSessionData(s.toDocument(), this.deps.redactEnabled());
837
+ async publicSessionDocument(s) {
838
+ return this.publicProjection(redactSessionData(s.toDocument(), this.deps.redactEnabled()), s.profile);
839
+ }
840
+ /** One server decision for history, mutation replies, done frames and export documents. */
841
+ async publicProjection(payload, profile) {
842
+ const show = await this.deps.showReasoning?.(profile) ?? true;
843
+ return { ...reasoningProjection(payload, show), plan_gauge: payload.plan_gauge ?? null, show_reasoning: show };
839
844
  }
840
845
  // ── detail ──────────────────────────────────────────────────────────────
841
846
  async loadRevision(s) {
@@ -856,7 +861,7 @@ export class SessionService {
856
861
  }
857
862
  /** Existing projections, once per complete turn range, in absolute transcript coordinates. */
858
863
  async deriveRange(s, rows, baseIndex, initialTurn, journaled, refs, calls, reviewRows) {
859
- return (await this.backgroundLinked(s, hydrateAnchorActivityScenes(withToolCallOutcomes((await this.backgroundUpdates(s, withMarkerKinds(withTurnIds(withAttachmentObjects(rows), baseIndex, initialTurn), s), reviewRows)), calls, s.active_stream_id, baseIndex), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, runningScene: !journaled, clipToolResults: true, baseIndex, refCounts: refs })));
864
+ return (await this.backgroundLinked(s, hydrateAnchorActivityScenes(withToolCallOutcomes((await this.backgroundUpdates(s, withMarkerKinds(withTurnIds(withAttachmentObjects(rows), baseIndex, initialTurn), s), reviewRows)), calls, s.active_stream_id, baseIndex), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, showReasoning: await this.deps.showReasoning?.(s.profile) ?? true, runningScene: !journaled, clipToolResults: true, baseIndex, refCounts: refs })));
860
865
  }
861
866
  async limitedDetail(s, index, limit, before, pending, journaled, retried = false) {
862
867
  let prefixEnd = s.messages.length;
@@ -867,7 +872,7 @@ export class SessionService {
867
872
  if (prompt !== undefined)
868
873
  prefixEnd = Math.min(prefixEnd, prompt);
869
874
  const dbPath = this.stateDbPath(s.profile);
870
- const key = JSON.stringify([index.revision, index.length, statSignature(dbPath), statSignature(`${dbPath}-wal`), s.active_stream_id, pending, journaled, s.state_db_seen_id, s.state_db_seen_boundary, s.state_db_seen_stamp, s.updated_at, this.deps.activeProfile(), s.compression_anchor_summary, s.compression_anchor_message_key, s.compression_anchor_visible_idx, this.compactionWaiters.has(s.active_stream_id ?? '')]);
875
+ const key = JSON.stringify([index.revision, index.length, statSignature(dbPath), statSignature(`${dbPath}-wal`), s.active_stream_id, pending, journaled, s.state_db_seen_id, s.state_db_seen_boundary, s.state_db_seen_stamp, s.updated_at, this.deps.activeProfile(), this.compactionWaiters.has(s.active_stream_id ?? '')]);
871
876
  let cached = this.pageTails.get(index);
872
877
  if (cached?.key !== key || cached.contextRows !== s.context_messages || cached.contextLength !== s.context_messages.length) {
873
878
  const streaming = Boolean(s.active_stream_id && !this.compactionWaiters.has(s.active_stream_id));
@@ -946,7 +951,7 @@ export class SessionService {
946
951
  return result;
947
952
  };
948
953
  cached = { key, tail, index: tailIndex, enoughContext, sources, contextRows: s.context_messages, contextLength: s.context_messages.length,
949
- summary: { total: prefixEnd + tail.length, last: Math.max(index.summary(prefixEnd).maxTimestamp, tailIndex.summary().maxTimestamp), todo: tailIndex.summary().todo ?? index.summary(prefixEnd).todo, compression: index.compressionReference(s, prefixEnd, tailIndex) } };
954
+ summary: { total: prefixEnd + tail.length, last: Math.max(index.summary(prefixEnd).maxTimestamp, tailIndex.summary().maxTimestamp), todo: tailIndex.summary().todo ?? index.summary(prefixEnd).todo } };
950
955
  if (cacheable)
951
956
  this.pageTails.set(index, cached);
952
957
  }
@@ -1078,7 +1083,7 @@ export class SessionService {
1078
1083
  if (journaled && !limited)
1079
1084
  transcript = withoutRunningTurnOutput(transcript, { ...journaled, localCount: s.messages.length });
1080
1085
  // Turn ids, tool outcomes and scenes are computed over the full transcript, so every window reports the same values.
1081
- const all = loadMessages && !limited ? (await this.backgroundLinked(s, hydrateAnchorActivityScenes(withToolCallOutcomes((await this.backgroundUpdates(s, withMarkerKinds(withTurnIds(withAttachmentObjects(transcript)), s))), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, runningScene: !journaled, clipToolResults: msgLimit !== null }))) : [];
1086
+ const all = loadMessages && !limited ? (await this.backgroundLinked(s, hydrateAnchorActivityScenes(withToolCallOutcomes((await this.backgroundUpdates(s, withMarkerKinds(withTurnIds(withAttachmentObjects(transcript)), s))), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, showReasoning: await this.deps.showReasoning?.(s.profile) ?? true, runningScene: !journaled, clipToolResults: msgLimit !== null }))) : [];
1082
1087
  let truncated = limited?.messages ?? [];
1083
1088
  let offset = limited?.offset ?? 0;
1084
1089
  let summaryCount = limited?.total ?? null;
@@ -1134,8 +1139,6 @@ export class SessionService {
1134
1139
  attachTodoSnapshot(raw, limited.todo, s.extra[UNSETTLED_TODO_KEY]);
1135
1140
  else if (loadMessages)
1136
1141
  attachTodoState(raw, all, s.extra[UNSETTLED_TODO_KEY]);
1137
- if (loadMessages)
1138
- raw.compression_reference = limited ? limited.compression : compressionReference(s, all);
1139
1142
  if (mergedLast) {
1140
1143
  raw.last_message_at = Math.max(Number(raw.last_message_at ?? 0) || 0, mergedLast);
1141
1144
  raw.updated_at = Math.max(Number(raw.updated_at ?? 0) || 0, mergedLast);
@@ -1166,7 +1169,7 @@ export class SessionService {
1166
1169
  raw.notices = this.deps.runtime.sessionNotices?.(s.session_id) ?? [];
1167
1170
  raw.goal = this.deps.runtime.sessionGoal?.(s.session_id) ?? null;
1168
1171
  const publicRow = redactSessionData(raw, this.deps.redactEnabled());
1169
- return this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow;
1172
+ return this.publicProjection(this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow, s.profile);
1170
1173
  }
1171
1174
  /**
1172
1175
  * TAL-454: the chat `/branch` copied, while it still loads (archived included). A compression continuation is also a
@@ -1237,13 +1240,13 @@ export class SessionService {
1237
1240
  return { synth, meta };
1238
1241
  }
1239
1242
  /** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
1240
- foreignMessages(messages, session) {
1241
- return hydrateAnchorActivityScenes(withToolCallOutcomes(withMarkerKinds(withTurnIds(messages), session), [], null), {});
1243
+ foreignMessages(messages, session, showReasoning = true) {
1244
+ return hydrateAnchorActivityScenes(withToolCallOutcomes(withMarkerKinds(withTurnIds(messages), session), [], null), {}, { showReasoning });
1242
1245
  }
1243
1246
  async foreignSessionDetail(sid, loadMessages, msgLimit, msgBefore) {
1244
1247
  const { synth, meta } = (await this.foreignSession(sid));
1245
1248
  // The same turn projection as a WebUI session: turn ids, tool outcomes, then each completed turn's scene.
1246
- const msgs = this.foreignMessages(synth.messages, synth);
1249
+ const msgs = this.foreignMessages(synth.messages, synth, await this.deps.showReasoning?.(synth.profile) ?? true);
1247
1250
  const lastTs = Number(msgs[msgs.length - 1]?.timestamp ?? 0) || 0;
1248
1251
  const sess = {
1249
1252
  session_id: synth.session_id, title: synth.title, workspace: synth.workspace, model: synth.model, message_count: msgs.length,
@@ -1256,7 +1259,7 @@ export class SessionService {
1256
1259
  attachTodoState(sess, msgs);
1257
1260
  const merged = withSessionWireFlags((await this.ownerLocked([meta ? mergeCliSidebarMetadata(sess, meta) : sess]))[0], this.deps.runtime.activeStreamIds);
1258
1261
  const publicRow = redactSessionData(merged, this.deps.redactEnabled());
1259
- return this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow;
1262
+ return this.publicProjection(this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow, synth.profile);
1260
1263
  }
1261
1264
  /** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`). */
1262
1265
  async clearStaleStreamState(session) {
@@ -1511,7 +1514,8 @@ export class SessionService {
1511
1514
  const s = (await this.get404(sid));
1512
1515
  const inp = Math.trunc(s.input_tokens) || 0;
1513
1516
  const out = Math.trunc(s.output_tokens) || 0;
1514
- return { input_tokens: inp, output_tokens: out, total_tokens: inp + out, estimated_cost: s.estimated_cost, model: s.model };
1517
+ const view = this.owner ? await this.owner.project(await this.wireRow(s), 0, null, false) : { plan_gauge: s.plan_gauge };
1518
+ return { plan_gauge: view.plan_gauge ?? null, input_tokens: inp, output_tokens: out, total_tokens: inp + out, estimated_cost: s.estimated_cost, model: s.model };
1515
1519
  }
1516
1520
  // ── creation ─────────────────────────────────────────────────────────────
1517
1521
  /** Only retained, readable identities in the request profile can become search pointers. */
@@ -2493,6 +2497,9 @@ export class SessionService {
2493
2497
  live.compression_anchor_message_key = anchorMessageKey(anchor);
2494
2498
  live.compression_anchor_summary = anchorSummary(summary, compressed);
2495
2499
  live.compression_anchor_mode = 'manual';
2500
+ // TAL-1566: the compaction's own row follows the anchor (first without one), before a waiting turn's rows.
2501
+ if (live.compression_anchor_summary)
2502
+ insertCompactionRow(live, anchor ? live.messages.indexOf(anchor) : -1, str(live.compression_anchor_summary), this.deps.now());
2496
2503
  // #4836: an intentional-shrink boundary, so append-only state.db reconciliation does not replay compressed rows.
2497
2504
  live.truncation_watermark = truncationWatermarkFor(compressed);
2498
2505
  live.truncation_boundary = live.truncation_watermark;
@@ -2935,21 +2942,32 @@ export class SessionService {
2935
2942
  async cleanup(zeroOnly) {
2936
2943
  let cleaned = 0;
2937
2944
  const removed = new Set();
2938
- for (const s of (await this.store.scanAll())) {
2939
- const shouldDelete = zeroOnly ? s.messages.length === 0 : s.title === 'Untitled' && s.messages.length === 0;
2940
- if (!shouldDelete || (await this.isReadOnly(s)))
2941
- continue;
2942
- // A cleared session keeps its share; keep the session (and its revoke route) if the share cannot be revoked.
2943
- try {
2944
- (await this.deps.shares.revoke(s));
2945
- }
2946
- catch {
2947
- continue;
2948
- }
2949
- this.store.sessions.delete(s.session_id);
2950
- await this.store.delete(s.session_id, { tombstone: false });
2951
- cleaned += 1;
2952
- removed.add(s.session_id);
2945
+ for (const candidate of (await this.store.scanAll())) {
2946
+ await this.store.withLock(candidate.session_id, async () => {
2947
+ let s;
2948
+ try {
2949
+ s = await this.store.get(candidate.session_id);
2950
+ }
2951
+ catch (error) {
2952
+ if (error instanceof SessionNotFound)
2953
+ return;
2954
+ throw error;
2955
+ }
2956
+ const shouldDelete = zeroOnly ? s.messages.length === 0 : s.title === 'Untitled' && s.messages.length === 0;
2957
+ if (!shouldDelete || (await this.isReadOnly(s)))
2958
+ return;
2959
+ // Keep the session (and its revoke route) if its share cannot be revoked.
2960
+ try {
2961
+ (await this.deps.shares.revoke(s));
2962
+ }
2963
+ catch {
2964
+ return;
2965
+ }
2966
+ if (!await this.store.delete(s.session_id, { tombstone: false }))
2967
+ return;
2968
+ cleaned += 1;
2969
+ removed.add(s.session_id);
2970
+ });
2953
2971
  }
2954
2972
  let rewroteIndex = false;
2955
2973
  try {
@@ -3169,7 +3187,8 @@ export class SessionService {
3169
3187
  if (!sid || (!messageRef && messageIndex === null))
3170
3188
  throw new HttpFailure(400, 'session_id and message_ref or message_index are required');
3171
3189
  const { session, transcript, stored } = (await this.fullTranscript(sid));
3172
- const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) }, withToolCallOutcomes(withTurnIds(transcript), session.tool_calls, session.active_stream_id));
3190
+ const show = await this.deps.showReasoning?.(session.profile) ?? true;
3191
+ const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) }, withToolCallOutcomes(withTurnIds(transcript), session.tool_calls, session.active_stream_id), show);
3173
3192
  if (!result)
3174
3193
  throw new HttpFailure(404, 'Anchor activity scene not found');
3175
3194
  // Paged rows come from the raw transcript, so they take the same credential redaction as the detail's preview.
@@ -3247,41 +3266,55 @@ export class SessionService {
3247
3266
  });
3248
3267
  }
3249
3268
  // ── shares ───────────────────────────────────────────────────────────────
3250
- async createShare(sid) {
3251
- this.rejectClaudeCode(sid, 'shared');
3252
- let s = (await this.get404(sid));
3253
- if (!this.visibleToActiveProfile(s.profile))
3254
- throw new HttpFailure(404, 'Session not found');
3255
- s = (await this.store.ensureFull(sid, s));
3256
- let snapshot;
3269
+ async withShareLock(sid, fn) {
3270
+ sid = await this.resolveSessionId(sid);
3271
+ return this.store.withLock(sid, async () => {
3272
+ const session = await this.get404(sid);
3273
+ if (!this.visibleToActiveProfile(session.profile))
3274
+ throw new HttpFailure(404, 'Session not found');
3275
+ return fn(await this.store.ensureFull(sid, session));
3276
+ });
3277
+ }
3278
+ async saveShareOwnership(session, token, createdAt) {
3279
+ const previous = { share_token: session.share_token, share_created_at: session.share_created_at };
3280
+ session.share_token = token;
3281
+ session.share_created_at = createdAt;
3257
3282
  try {
3258
- snapshot = buildShareSnapshot(s, s.messages, { hermesHome: this.deps.hermesHome, attachmentRoot: this.deps.attachmentDir('').replace(/\/[^/]*$/, ''), home: this.deps.home });
3283
+ await this.store.save(session, { touchUpdatedAt: false });
3259
3284
  }
3260
3285
  catch (error) {
3261
- throw new HttpFailure(400, error.message);
3286
+ Object.assign(session, previous);
3287
+ // A failed acknowledgement may follow a commit; the next operation must read persisted ownership.
3288
+ this.store.sessions.delete(session.session_id);
3289
+ throw error;
3262
3290
  }
3263
- const meta = (await this.deps.shares.createOrRefresh(s, snapshot));
3264
- s.share_token = meta.share_token;
3265
- s.share_created_at = meta.share_created_at;
3266
- await this.store.save(s, { touchUpdatedAt: false });
3267
- this.publish('session_share_create', s.profile, sid);
3268
- return {
3269
- ok: true,
3270
- share: { token: meta.share_token, url: sharePath(meta.share_token) ?? '', title: meta.share_title, message_count: meta.share_message_count, created_at: meta.share_created_at, updated_at: meta.share_updated_at },
3271
- session: (await this.publicSession(s)),
3272
- };
3291
+ }
3292
+ async createShare(sid) {
3293
+ this.rejectClaudeCode(sid, 'shared');
3294
+ return this.withShareLock(sid, async (s) => {
3295
+ let snapshot;
3296
+ try {
3297
+ snapshot = buildShareSnapshot(s, s.messages, { hermesHome: this.deps.hermesHome, attachmentRoot: this.deps.attachmentDir('').replace(/\/[^/]*$/, ''), home: this.deps.home });
3298
+ }
3299
+ catch (error) {
3300
+ throw new HttpFailure(400, error.message);
3301
+ }
3302
+ const meta = await this.deps.shares.createOrRefresh(s, snapshot, (owner) => this.saveShareOwnership(s, owner.share_token, owner.share_created_at));
3303
+ this.publish('session_share_create', s.profile, s.session_id);
3304
+ return {
3305
+ ok: true,
3306
+ share: { token: meta.share_token, url: sharePath(meta.share_token) ?? '', title: meta.share_title, message_count: meta.share_message_count, created_at: meta.share_created_at, updated_at: meta.share_updated_at },
3307
+ session: (await this.publicSession(s)),
3308
+ };
3309
+ });
3273
3310
  }
3274
3311
  async revokeShare(sid) {
3275
- let s = (await this.get404(sid));
3276
- if (!this.visibleToActiveProfile(s.profile))
3277
- throw new HttpFailure(404, 'Session not found');
3278
- s = (await this.store.ensureFull(sid, s));
3279
- await this.deps.shares.revoke(s);
3280
- s.share_token = null;
3281
- s.share_created_at = null;
3282
- await this.store.save(s, { touchUpdatedAt: false });
3283
- this.publish('session_share_revoke', s.profile, sid);
3284
- return { ok: true, session: (await this.publicSession(s)) };
3312
+ return this.withShareLock(sid, async (s) => {
3313
+ await this.deps.shares.revoke(s);
3314
+ await this.saveShareOwnership(s, null, null);
3315
+ this.publish('session_share_revoke', s.profile, s.session_id);
3316
+ return { ok: true, session: (await this.publicSession(s)) };
3317
+ });
3285
3318
  }
3286
3319
  async loadShare(token) {
3287
3320
  const share = (await this.deps.shares.load(token));
@@ -3404,6 +3437,13 @@ function truncationWatermarkFor(messages) {
3404
3437
  return Number.isFinite(ts) ? ts : 0.0;
3405
3438
  }
3406
3439
  function stampIntentionalShrink(session, oldCount, newCount) {
3440
+ // TAL-1566: a cut that removed the newest compaction's row ends its anchor too, so no later load restores the row.
3441
+ const summary = str(session.compression_anchor_summary).trim();
3442
+ if (summary && !session.messages.some((m) => isCompactionRow(m) && str(m.content).trim() === summary)) {
3443
+ session.compression_anchor_summary = null;
3444
+ session.compression_anchor_message_key = null;
3445
+ session.compression_anchor_visible_idx = null;
3446
+ }
3407
3447
  if (newCount >= oldCount)
3408
3448
  return false;
3409
3449
  session.intentional_shrink_generation = randomUUID().replace(/-/g, '');