@maudecode/talaria-web 1.21.0 → 1.23.2

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 (390) 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 +225 -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.d.ts +1 -1
  8. package/dist/api/raw-routes.js +15 -3
  9. package/dist/api/raw-routes.js.map +1 -1
  10. package/dist/api/router.d.ts +41 -0
  11. package/dist/api/router.js +2 -0
  12. package/dist/api/router.js.map +1 -1
  13. package/dist/api/sessions-router.d.ts +590 -160
  14. package/dist/api/sessions-router.js +14 -14
  15. package/dist/api/sessions-router.js.map +1 -1
  16. package/dist/api/settings-router.d.ts +948 -1
  17. package/dist/api/settings-router.js +54 -2
  18. package/dist/api/settings-router.js.map +1 -1
  19. package/dist/api/sse-routes.d.ts +1 -1
  20. package/dist/api/sse-routes.js +11 -3
  21. package/dist/api/sse-routes.js.map +1 -1
  22. package/dist/api/tools-raw.js +27 -136
  23. package/dist/api/tools-raw.js.map +1 -1
  24. package/dist/api/tools-router.d.ts +109 -24
  25. package/dist/api/tools-router.js +69 -9
  26. package/dist/api/tools-router.js.map +1 -1
  27. package/dist/app.js +5 -1
  28. package/dist/app.js.map +1 -1
  29. package/dist/auth/gate.js +5 -1
  30. package/dist/auth/gate.js.map +1 -1
  31. package/dist/cli/ctl.d.ts +5 -2
  32. package/dist/cli/ctl.js +90 -42
  33. package/dist/cli/ctl.js.map +1 -1
  34. package/dist/config/agent-config.d.ts +6 -1
  35. package/dist/config/agent-config.js +75 -3
  36. package/dist/config/agent-config.js.map +1 -1
  37. package/dist/feedback.d.ts +21 -0
  38. package/dist/feedback.js +328 -0
  39. package/dist/feedback.js.map +1 -0
  40. package/dist/fs/stat.d.ts +2 -0
  41. package/dist/fs/stat.js +4 -0
  42. package/dist/fs/stat.js.map +1 -1
  43. package/dist/http/context.d.ts +10 -1
  44. package/dist/http/context.js +0 -6
  45. package/dist/http/context.js.map +1 -1
  46. package/dist/http/pinned.js +19 -8
  47. package/dist/http/pinned.js.map +1 -1
  48. package/dist/providers/catalog.d.ts +10 -2
  49. package/dist/providers/catalog.js +113 -15
  50. package/dist/providers/catalog.js.map +1 -1
  51. package/dist/redact.js +9 -3
  52. package/dist/redact.js.map +1 -1
  53. package/dist/release.d.ts +14 -1
  54. package/dist/release.js +40 -2
  55. package/dist/release.js.map +1 -1
  56. package/dist/runtime.js +29 -5
  57. package/dist/runtime.js.map +1 -1
  58. package/dist/server.js +1 -0
  59. package/dist/server.js.map +1 -1
  60. package/dist/sessions/anchor.d.ts +3 -2
  61. package/dist/sessions/anchor.js +11 -10
  62. package/dist/sessions/anchor.js.map +1 -1
  63. package/dist/sessions/cli-sessions.js +11 -6
  64. package/dist/sessions/cli-sessions.js.map +1 -1
  65. package/dist/sessions/compress.d.ts +10 -9
  66. package/dist/sessions/compress.js +31 -20
  67. package/dist/sessions/compress.js.map +1 -1
  68. package/dist/sessions/gateway-sessions.d.ts +11 -0
  69. package/dist/sessions/gateway-sessions.js +79 -24
  70. package/dist/sessions/gateway-sessions.js.map +1 -1
  71. package/dist/sessions/gateway-watcher.js +8 -4
  72. package/dist/sessions/gateway-watcher.js.map +1 -1
  73. package/dist/sessions/groups.d.ts +60 -0
  74. package/dist/sessions/groups.js +339 -0
  75. package/dist/sessions/groups.js.map +1 -0
  76. package/dist/sessions/list.d.ts +8 -3
  77. package/dist/sessions/list.js +17 -6
  78. package/dist/sessions/list.js.map +1 -1
  79. package/dist/sessions/merge.d.ts +14 -5
  80. package/dist/sessions/merge.js +42 -13
  81. package/dist/sessions/merge.js.map +1 -1
  82. package/dist/sessions/pending.d.ts +1 -1
  83. package/dist/sessions/pending.js +15 -6
  84. package/dist/sessions/pending.js.map +1 -1
  85. package/dist/sessions/prefix-index.d.ts +1 -14
  86. package/dist/sessions/prefix-index.js +1 -50
  87. package/dist/sessions/prefix-index.js.map +1 -1
  88. package/dist/sessions/reasoning-display.d.ts +2 -0
  89. package/dist/sessions/reasoning-display.js +31 -0
  90. package/dist/sessions/reasoning-display.js.map +1 -0
  91. package/dist/sessions/relay.d.ts +34 -2
  92. package/dist/sessions/relay.js +84 -7
  93. package/dist/sessions/relay.js.map +1 -1
  94. package/dist/sessions/service.d.ts +7 -2
  95. package/dist/sessions/service.js +106 -64
  96. package/dist/sessions/service.js.map +1 -1
  97. package/dist/sessions/session.d.ts +6 -0
  98. package/dist/sessions/session.js +13 -0
  99. package/dist/sessions/session.js.map +1 -1
  100. package/dist/sessions/shares.d.ts +3 -1
  101. package/dist/sessions/shares.js +33 -11
  102. package/dist/sessions/shares.js.map +1 -1
  103. package/dist/sessions/source-kind.js +2 -0
  104. package/dist/sessions/source-kind.js.map +1 -1
  105. package/dist/sessions/state-db.d.ts +2 -1
  106. package/dist/sessions/state-db.js +12 -5
  107. package/dist/sessions/state-db.js.map +1 -1
  108. package/dist/sessions/storage/json-documents.js +2 -0
  109. package/dist/sessions/storage/json-documents.js.map +1 -1
  110. package/dist/sessions/store.d.ts +1 -0
  111. package/dist/sessions/store.js +10 -3
  112. package/dist/sessions/store.js.map +1 -1
  113. package/dist/sessions/streams.d.ts +7 -2
  114. package/dist/sessions/streams.js +16 -6
  115. package/dist/sessions/streams.js.map +1 -1
  116. package/dist/sessions/titles.d.ts +2 -0
  117. package/dist/sessions/titles.js +11 -0
  118. package/dist/sessions/titles.js.map +1 -1
  119. package/dist/sessions/todo.js +10 -1
  120. package/dist/sessions/todo.js.map +1 -1
  121. package/dist/sessions/turn.js +50 -21
  122. package/dist/sessions/turn.js.map +1 -1
  123. package/dist/settings.js +6 -1
  124. package/dist/settings.js.map +1 -1
  125. package/dist/sidecar/client.d.ts +3 -0
  126. package/dist/sidecar/client.js +2 -1
  127. package/dist/sidecar/client.js.map +1 -1
  128. package/dist/sidecar/discover.js +3 -2
  129. package/dist/sidecar/discover.js.map +1 -1
  130. package/dist/spa.js +1 -1
  131. package/dist/spa.js.map +1 -1
  132. package/dist/test/group-fixture.d.ts +66 -0
  133. package/dist/test/group-fixture.js +89 -0
  134. package/dist/test/group-fixture.js.map +1 -0
  135. package/dist/test/harness.d.ts +3 -0
  136. package/dist/test/harness.js +3 -0
  137. package/dist/test/harness.js.map +1 -1
  138. package/dist/tools/connectors.d.ts +9 -1
  139. package/dist/tools/connectors.js +48 -0
  140. package/dist/tools/connectors.js.map +1 -1
  141. package/dist/tools/gateway-restart.d.ts +1 -1
  142. package/dist/tools/insights.d.ts +3 -0
  143. package/dist/tools/insights.js +6 -7
  144. package/dist/tools/insights.js.map +1 -1
  145. package/dist/tools/skills.d.ts +6 -0
  146. package/dist/tools/skills.js +17 -0
  147. package/dist/tools/skills.js.map +1 -1
  148. package/dist/tools/update-notifications.d.ts +2 -0
  149. package/dist/tools/update-notifications.js +7 -3
  150. package/dist/tools/update-notifications.js.map +1 -1
  151. package/dist/tools/updates.d.ts +26 -9
  152. package/dist/tools/updates.js +144 -47
  153. package/dist/tools/updates.js.map +1 -1
  154. package/dist/workspace/fs.d.ts +2 -0
  155. package/dist/workspace/fs.js +63 -1
  156. package/dist/workspace/fs.js.map +1 -1
  157. package/dist/workspace/media-refs.js +10 -3
  158. package/dist/workspace/media-refs.js.map +1 -1
  159. package/dist/workspace/upload.d.ts +1 -1
  160. package/dist/workspace/upload.js +52 -37
  161. package/dist/workspace/upload.js.map +1 -1
  162. package/dist/workspace/workspaces.d.ts +5 -1
  163. package/dist/workspace/workspaces.js +32 -6
  164. package/dist/workspace/workspaces.js.map +1 -1
  165. package/package.json +4 -3
  166. package/sidecar/agent_importer.json +8 -0
  167. package/sidecar/scripts/agent_importer_contract.py +19 -0
  168. package/sidecar/scripts/suite_runner.py +55 -8
  169. package/sidecar/scripts/test.sh +3 -1
  170. package/sidecar/talaria_sidecar/__init__.py +1 -1
  171. package/sidecar/talaria_sidecar/home.py +12 -5
  172. package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
  173. package/sidecar/talaria_sidecar/methods/agent_imports.py +346 -0
  174. package/sidecar/talaria_sidecar/methods/chat.py +141 -58
  175. package/sidecar/talaria_sidecar/methods/commands.py +6 -4
  176. package/sidecar/talaria_sidecar/methods/config.py +8 -3
  177. package/sidecar/talaria_sidecar/methods/connectors.py +138 -4
  178. package/sidecar/talaria_sidecar/methods/dashboard_plugins.py +21 -0
  179. package/sidecar/talaria_sidecar/methods/delegation.py +126 -0
  180. package/sidecar/talaria_sidecar/methods/gateway.py +5 -0
  181. package/sidecar/talaria_sidecar/methods/gateway_sessions.py +35 -6
  182. package/sidecar/talaria_sidecar/methods/groups.py +120 -0
  183. package/sidecar/talaria_sidecar/methods/memory.py +27 -3
  184. package/sidecar/talaria_sidecar/methods/nous_account.py +130 -0
  185. package/sidecar/talaria_sidecar/methods/oauth.py +25 -4
  186. package/sidecar/talaria_sidecar/methods/outbound_drafts.py +1 -19
  187. package/sidecar/talaria_sidecar/methods/plugin_catalog.py +73 -2
  188. package/sidecar/talaria_sidecar/methods/providers.py +51 -1
  189. package/sidecar/talaria_sidecar/methods/skill_revisions.py +177 -0
  190. package/sidecar/talaria_sidecar/methods/skills.py +10 -0
  191. package/sidecar/talaria_sidecar/methods/tts.py +67 -0
  192. package/sidecar/talaria_sidecar/rpc.py +11 -2
  193. package/static/dist/FILES.txt +154 -143
  194. package/static/dist/THIRD_PARTY_LICENSES.md +1 -1
  195. package/static/dist/assets/AppShell-jwd95ofg.js +8 -0
  196. package/static/dist/assets/{Button-nuaikybd.js → Button-nrcj7shj.js} +1 -1
  197. package/static/dist/assets/ChatPage-fmgk8xpk.js +2 -0
  198. package/static/dist/assets/Composer-oya4ggu7.js +5 -0
  199. package/static/dist/assets/ConnectTargets-rg90uiui.js +1 -0
  200. package/static/dist/assets/Dialog-gk0uatl8.js +1 -0
  201. package/static/dist/assets/ExtensionRoute-ji4xce9l.js +1 -0
  202. package/static/dist/assets/HubRoute-2pgy4aa2.js +2 -0
  203. package/static/dist/assets/Markdown-d6br42ts.js +2 -0
  204. package/static/dist/assets/{MarkdownRenderer-ccgqrza3.js → MarkdownRenderer-k8rmb83g.js} +6 -6
  205. package/static/dist/assets/OAuthSignIn-pbls9ljk.js +1 -0
  206. package/static/dist/assets/QueueCard-liib58ru.js +1 -0
  207. package/static/dist/assets/ResourceSwitch-gtdv2jgs.js +1 -0
  208. package/static/dist/assets/RightPanel-b89e4kx3.js +1 -0
  209. package/static/dist/assets/Select-l6qybenp.js +1 -0
  210. package/static/dist/assets/SessionListPanel-l4vy95j8.js +1 -0
  211. package/static/dist/assets/SettingsLayout-chw7pl2m.js +1 -0
  212. package/static/dist/assets/TerminalPanel-qrd0gkx7.js +16 -0
  213. package/static/dist/assets/Toaster-ihzgaq9z.js +1 -0
  214. package/static/dist/assets/_app-cn1au4zq.js +1 -0
  215. package/static/dist/assets/{_app.ext._extensionId-n797jp72.js → _app.ext._extensionId-m4npkrr0.js} +1 -1
  216. package/static/dist/assets/_app.groups-c8ycbp5n.js +1 -0
  217. package/static/dist/assets/{_app.index-ne43mdw2.js → _app.index-f1fckz3h.js} +1 -1
  218. package/static/dist/assets/{_app.insights-fqonovb4.js → _app.insights-ezivk7ad.js} +1 -1
  219. package/static/dist/assets/{_app.kanban-kysliv19.js → _app.kanban-zbkeov0f.js} +1 -1
  220. package/static/dist/assets/{_app.logs-febut82r.js → _app.logs-dqam5zyz.js} +1 -1
  221. package/static/dist/assets/{_app.memory-ha86oj1c.js → _app.memory-gzxkm3a0.js} +1 -1
  222. package/static/dist/assets/{_app.profiles-cnu3gxxq.js → _app.profiles-j28l31hl.js} +1 -1
  223. package/static/dist/assets/{_app.session._sessionId-ifzjpcgn.js → _app.session._sessionId-55egsufs.js} +1 -1
  224. package/static/dist/assets/{_app.settings-nmakdiaf.js → _app.settings-f5ltpieb.js} +1 -1
  225. package/static/dist/assets/_app.settings._section-dda0vfot.js +3 -0
  226. package/static/dist/assets/{_app.skills-f3wad8yo.js → _app.skills-kuc81hq0.js} +1 -1
  227. package/static/dist/assets/_app.tasks-gyy6vj5l.js +1 -0
  228. package/static/dist/assets/{_app.todos-bml1m3r1.js → _app.todos-d0xoy68t.js} +1 -1
  229. package/static/dist/assets/{_app.workspaces-f3d066lx.js → _app.workspaces-pawp2gxk.js} +1 -1
  230. package/static/dist/assets/_delete-qnxuo87s.js +1 -0
  231. package/static/dist/assets/{abnfDiagram-VCTEODGH-i53jc4yp.js → abnfDiagram-VCTEODGH-mhav7n5a.js} +1 -1
  232. package/static/dist/assets/{architecture-7GRP2DOG-e3bv5m6f.js → architecture-7GRP2DOG-ozbanukt.js} +1 -1
  233. package/static/dist/assets/{architectureDiagram-5GKGNRK7-pakekxu2.js → architectureDiagram-5GKGNRK7-febtor5m.js} +1 -1
  234. package/static/dist/assets/archive-gyk9c34a.js +1 -0
  235. package/static/dist/assets/autoReadClaim-nlyv8tu9.js +1 -0
  236. package/static/dist/assets/{blockDiagram-I7D4REHJ-bc6bo1n6.js → blockDiagram-I7D4REHJ-ocais2jf.js} +1 -1
  237. package/static/dist/assets/{c4Diagram-7LVT6UL2-btvwk2qx.js → c4Diagram-7LVT6UL2-cgpfjx5f.js} +1 -1
  238. package/static/dist/assets/channel-els5ri1f.js +1 -0
  239. package/static/dist/assets/{chunk-4HAMMTFA-dlwab11c.js → chunk-4HAMMTFA-hvqdiiow.js} +1 -1
  240. package/static/dist/assets/{chunk-75Z2AOVW-dp5gh7i8.js → chunk-75Z2AOVW-hxbulvtb.js} +1 -1
  241. package/static/dist/assets/{chunk-DU6HZSFF-bi06zl1c.js → chunk-DU6HZSFF-kkp6a7gp.js} +3 -3
  242. package/static/dist/assets/{chunk-F27PBJKO-kvv1rnlh.js → chunk-F27PBJKO-ljz0gssc.js} +1 -1
  243. package/static/dist/assets/{chunk-GMAD6QVW-ji0rx9by.js → chunk-GMAD6QVW-bo0enyxn.js} +1 -1
  244. package/static/dist/assets/{chunk-GVQU2GXP-nmz0j82p.js → chunk-GVQU2GXP-cnq7l2v6.js} +1 -1
  245. package/static/dist/assets/{chunk-IMKFNOWR-kmi1qx88.js → chunk-IMKFNOWR-gjnkrfu6.js} +1 -1
  246. package/static/dist/assets/{chunk-L3NEJ4N5-xhb7mebj.js → chunk-L3NEJ4N5-gjfp71qi.js} +1 -1
  247. package/static/dist/assets/{chunk-OSK3NFVY-5a9sgscq.js → chunk-OSK3NFVY-ieq5r94b.js} +1 -1
  248. package/static/dist/assets/{chunk-P2QGCYS3-dfezp4vu.js → chunk-P2QGCYS3-hdefjk56.js} +1 -1
  249. package/static/dist/assets/{chunk-POPQ4Y6H-gd2vq3c0.js → chunk-POPQ4Y6H-mcbt8wpr.js} +1 -1
  250. package/static/dist/assets/{chunk-PWAF6VOD-wvw2nksf.js → chunk-PWAF6VOD-mx2drja9.js} +1 -1
  251. package/static/dist/assets/{chunk-SHT3W25Y-f58q97px.js → chunk-SHT3W25Y-j7dd9i66.js} +1 -1
  252. package/static/dist/assets/{chunk-SVP7TREG-abgwpyz9.js → chunk-SVP7TREG-jcnt3lxt.js} +1 -1
  253. package/static/dist/assets/{chunk-TICWLB2K-h4sbs8ds.js → chunk-TICWLB2K-lrwv5hx9.js} +1 -1
  254. package/static/dist/assets/classDiagram-ZZMXUADV-krpt9pdd.js +1 -0
  255. package/static/dist/assets/classDiagram-v2-VYDZK3BY-krpt9pdd.js +1 -0
  256. package/static/dist/assets/completionAudio-fhxf0h9j.js +1 -0
  257. package/static/dist/assets/{copy-m9h56qa8.js → copy-gyzrqmyr.js} +1 -1
  258. package/static/dist/assets/{cynefin-OW5HDTMX-g081vffs.js → cynefin-OW5HDTMX-heq36srt.js} +1 -1
  259. package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-odxvjesk.js → cynefinDiagram-5FMLGOSQ-crrmq338.js} +1 -1
  260. package/static/dist/assets/{dagre-GXQ25YYZ-cpdwzjs4.js → dagre-GXQ25YYZ-m7fpnt6k.js} +1 -1
  261. package/static/dist/assets/{diagram-S7CK7UJ4-clv5mxvu.js → diagram-S7CK7UJ4-ebm1ebv6.js} +1 -1
  262. package/static/dist/assets/{diagram-UQ7AKVKN-m2ia1mbf.js → diagram-UQ7AKVKN-hc0ypsp1.js} +1 -1
  263. package/static/dist/assets/{diagram-VSXAHHWV-ea6zv636.js → diagram-VSXAHHWV-mu8q5n4b.js} +1 -1
  264. package/static/dist/assets/{diagram-VX7I27RA-oqlef685.js → diagram-VX7I27RA-i488wdlb.js} +1 -1
  265. package/static/dist/assets/{diagram-Z3DM3KII-kjubcbwu.js → diagram-Z3DM3KII-gz3nwvq9.js} +1 -1
  266. package/static/dist/assets/{dist-carq1azj.js → dist-ge7hom9n.js} +4 -4
  267. package/static/dist/assets/{dist-crc46di9.js → dist-kpg5ccm9.js} +1 -1
  268. package/static/dist/assets/{ebnfDiagram-PWID7BFC-fg0zri3e.js → ebnfDiagram-PWID7BFC-lwskecx4.js} +1 -1
  269. package/static/dist/assets/{erDiagram-RLTQ6QDP-eb7pmk3x.js → erDiagram-RLTQ6QDP-c0bysigr.js} +1 -1
  270. package/static/dist/assets/{eventmodeling-NTZA5JFV-gvi1fxhn.js → eventmodeling-NTZA5JFV-k19e509j.js} +1 -1
  271. package/static/dist/assets/feedbackVideo.worker-JBVT3sDD.js +480 -0
  272. package/static/dist/assets/flowDiagram-HODETNUW-n4m8e6kq.js +1 -0
  273. package/static/dist/assets/folder-plus-m1ywe0cv.js +1 -0
  274. package/static/dist/assets/{ganttDiagram-EL5Y4UJY-jmisowrc.js → ganttDiagram-EL5Y4UJY-mz1p8yzt.js} +1 -1
  275. package/static/dist/assets/getPseudoElementBounds-ci0x9gki.js +1 -0
  276. package/static/dist/assets/{gitGraph-4MIJSDKK-m7kt3u6e.js → gitGraph-4MIJSDKK-h0uskiog.js} +1 -1
  277. package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-nq7vfzh2.js → gitGraphDiagram-WWUBYQGX-e4d9um1j.js} +1 -1
  278. package/static/dist/assets/group_discussions-fk5hry4l.js +1 -0
  279. package/static/dist/assets/{highlighted-body-KPVGNVTW-gcu017ay.js → highlighted-body-KPVGNVTW-d47n6oqu.js} +1 -1
  280. package/static/dist/assets/{host-ipp4e84c.js → host-f7eudvft.js} +1 -1
  281. package/static/dist/assets/index-lab8g9gs.css +2 -0
  282. package/static/dist/assets/index-n5rg2q2r.js +13 -0
  283. package/static/dist/assets/{info-A6RAGUB7-idazwfqe.js → info-A6RAGUB7-k04of9c6.js} +1 -1
  284. package/static/dist/assets/{infoDiagram-27XIBGKW-bb9jh8gl.js → infoDiagram-27XIBGKW-l98n1tgz.js} +1 -1
  285. package/static/dist/assets/{ishikawaDiagram-5VMMS53U-nqc132rv.js → ishikawaDiagram-5VMMS53U-gkznu2d6.js} +1 -1
  286. package/static/dist/assets/{journeyDiagram-3NMN7TZE-fpvnhy44.js → journeyDiagram-3NMN7TZE-mt23qvx1.js} +1 -1
  287. package/static/dist/assets/{kanban-definition-UXKFOSKX-ndzqm6fu.js → kanban-definition-UXKFOSKX-ab93l7y5.js} +1 -1
  288. package/static/dist/assets/katex-ic33v820.js +257 -0
  289. package/static/dist/assets/katex-qcv7xo0t.css +1 -0
  290. package/static/dist/assets/{lazyRouteComponent-javud235.js → lazyRouteComponent-dt9efiqk.js} +1 -1
  291. package/static/dist/assets/{line-g625e7cj.js → line-dkm9r3as.js} +1 -1
  292. package/static/dist/assets/link-2-ozyjqwhh.js +1 -0
  293. package/static/dist/assets/{link-gfdaho08.js → link-dip3g6zs.js} +1 -1
  294. package/static/dist/assets/{locale-cs-n41hptse.js → locale-cs-brltdkcp.js} +1 -1
  295. package/static/dist/assets/{locale-de-k7ht47ew.js → locale-de-h6e9oq6v.js} +1 -1
  296. package/static/dist/assets/{locale-es-ih078lco.js → locale-es-oklmh80f.js} +1 -1
  297. package/static/dist/assets/{locale-fr-ojabnf41.js → locale-fr-b17ozoi2.js} +1 -1
  298. package/static/dist/assets/{locale-it-kb96jufy.js → locale-it-whe01eef.js} +1 -1
  299. package/static/dist/assets/{locale-ja-jpsp3xs1.js → locale-ja-g1s0rtpc.js} +1 -1
  300. package/static/dist/assets/{locale-pl-dbap4leu.js → locale-pl-d9p3lqcb.js} +1 -1
  301. package/static/dist/assets/{locale-pt-nci7w72x.js → locale-pt-l75on74f.js} +1 -1
  302. package/static/dist/assets/{locale-ru-soghe4cs.js → locale-ru-wl3mbsaw.js} +1 -1
  303. package/static/dist/assets/{locale-tr-ks00mu68.js → locale-tr-cz87itrq.js} +1 -1
  304. package/static/dist/assets/{locale-vi-ij7twfm6.js → locale-vi-elqj1y4k.js} +1 -1
  305. package/static/dist/assets/{locale-zh-Hant-feakwr7a.js → locale-zh-Hant-hf8gqm7d.js} +1 -1
  306. package/static/dist/assets/{locale-zh-ren0vjyv.js → locale-zh-cdckwb0u.js} +1 -1
  307. package/static/dist/assets/login-go5xfzkx.js +1 -0
  308. package/static/dist/assets/mermaid-HWGCJPDP-o7wh7c74.js +1 -0
  309. package/static/dist/assets/{mermaid-parser.core-plzkuzov.js → mermaid-parser.core-c4ywstu7.js} +3 -3
  310. package/static/dist/assets/{mindmap-definition-YA3MSWOX-ojrgs569.js → mindmap-definition-YA3MSWOX-mnvkgz5u.js} +1 -1
  311. package/static/dist/assets/onboarding-hbbpvp6w.js +1 -0
  312. package/static/dist/assets/{packet-AYTQ26CC-gyaf9s8h.js → packet-AYTQ26CC-dfm2ygox.js} +1 -1
  313. package/static/dist/assets/{pegDiagram-XKGWAZYB-bf6xj8mq.js → pegDiagram-XKGWAZYB-kfbyls4v.js} +1 -1
  314. package/static/dist/assets/{pie-WAS4IAKB-f5ymzelo.js → pie-WAS4IAKB-jniw7r2b.js} +1 -1
  315. package/static/dist/assets/{pieDiagram-E7YTZNPT-d0qjl3zi.js → pieDiagram-E7YTZNPT-cir9nlg4.js} +1 -1
  316. package/static/dist/assets/presence-ivo54s19.js +1 -0
  317. package/static/dist/assets/prompt_queue_cancelled-cebcuagu.js +1 -0
  318. package/static/dist/assets/{quadrantDiagram-AXDQQJYC-oqy1mras.js → quadrantDiagram-AXDQQJYC-2nnb2u4m.js} +1 -1
  319. package/static/dist/assets/queryKeys-mbi6o5vh.js +9 -0
  320. package/static/dist/assets/{radar-RG4KPBEZ-b6jcjvda.js → radar-RG4KPBEZ-jfvtqhq2.js} +1 -1
  321. package/static/dist/assets/{railroad-74A4TZTK-e3a6lk5k.js → railroad-74A4TZTK-hnm0ikx7.js} +1 -1
  322. package/static/dist/assets/{railroad-abnf-HS5TGJTU-ff5hocrx.js → railroad-abnf-HS5TGJTU-hcfz5gyc.js} +1 -1
  323. package/static/dist/assets/{railroad-ebnf-LZEXJU2U-exkhyw4n.js → railroad-ebnf-LZEXJU2U-ocbvmcwo.js} +1 -1
  324. package/static/dist/assets/{railroad-peg-WCYAUIDC-jefk9b7c.js → railroad-peg-WCYAUIDC-kkbzgo8d.js} +1 -1
  325. package/static/dist/assets/{railroadDiagram-O6MQD6OU-e4amks1i.js → railroadDiagram-O6MQD6OU-ox5v7853.js} +1 -1
  326. package/static/dist/assets/rename-ccd52yws.js +1 -0
  327. package/static/dist/assets/{requirementDiagram-BXWQKSXE-c77k1e2y.js → requirementDiagram-BXWQKSXE-e1iq54h4.js} +1 -1
  328. package/static/dist/assets/{sankeyDiagram-P5KCCOFB-oa1cc52s.js → sankeyDiagram-P5KCCOFB-mmza9r2u.js} +1 -1
  329. package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-j20gqt22.js → sequenceDiagram-WJ2MYXX4-dioic69h.js} +1 -1
  330. package/static/dist/assets/{share._token-kmfoflw6.js → share._token-i51g4ccy.js} +1 -1
  331. package/static/dist/assets/sliders-horizontal-nj1dipq4.js +1 -0
  332. package/static/dist/assets/{stateDiagram-D77RDMKH-co2ghkdp.js → stateDiagram-D77RDMKH-do5wvqjw.js} +1 -1
  333. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-f0sedx52.js +1 -0
  334. package/static/dist/assets/{swimlanes-42K2YHIH-m30cktqe.js → swimlanes-42K2YHIH-mhjzgtgl.js} +1 -1
  335. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-n0x444kc.js +8 -0
  336. package/static/dist/assets/{timeline-definition-24CTP7MA-liuep6fl.js → timeline-definition-24CTP7MA-i5820ppg.js} +1 -1
  337. package/static/dist/assets/toast-esv4ma70.js +56 -0
  338. package/static/dist/assets/{treeView-Q6P3EWNA-np5d2jv2.js → treeView-Q6P3EWNA-btp8feob.js} +1 -1
  339. package/static/dist/assets/{treemap-WGGIJYW6-cmpltxh1.js → treemap-WGGIJYW6-lv71dt7p.js} +1 -1
  340. package/static/dist/assets/tts-bq7ax6xp.js +1 -0
  341. package/static/dist/assets/{useForm-f1udzsjf.js → useForm-d5wxx0l0.js} +1 -1
  342. package/static/dist/assets/{useParams-ierevvts.js → useParams-gk1u0y6m.js} +1 -1
  343. package/static/dist/assets/{useSearch-i7nr9ypl.js → useSearch-nsrme1pf.js} +1 -1
  344. package/static/dist/assets/useTranscript-m9ve9mml.js +1 -0
  345. package/static/dist/assets/{vennDiagram-4TSXK5OY-b2g42qrg.js → vennDiagram-4TSXK5OY-bffv7e11.js} +1 -1
  346. package/static/dist/assets/{wardley-WFR3VGLG-lb0eqbff.js → wardley-WFR3VGLG-f1m16ivx.js} +1 -1
  347. package/static/dist/assets/{wardleyDiagram-VM6X3IG4-ermwaqha.js → wardleyDiagram-VM6X3IG4-ous4pq48.js} +1 -1
  348. package/static/dist/assets/{xychartDiagram-S5SC5T6Z-dll0jldk.js → xychartDiagram-S5SC5T6Z-jxgbp4as.js} +1 -1
  349. package/static/dist/index.html +1 -1
  350. package/static/dist/sw.js +1 -1
  351. package/static/dist/assets/AppShell-c5989995.js +0 -8
  352. package/static/dist/assets/ChatPage-bfg4khph.js +0 -6
  353. package/static/dist/assets/ConnectTargets-k5wo9yo8.js +0 -1
  354. package/static/dist/assets/Dialog-o8vo2aws.js +0 -1
  355. package/static/dist/assets/ExtensionRoute-l1yjrso4.js +0 -1
  356. package/static/dist/assets/Field-j7o8cfps.js +0 -1
  357. package/static/dist/assets/HubRoute-efnwe4xz.js +0 -2
  358. package/static/dist/assets/Markdown-clqf5m22.js +0 -2
  359. package/static/dist/assets/OAuthSignIn-h7bjaqp6.js +0 -1
  360. package/static/dist/assets/ResourceSwitch-oai2zqaj.js +0 -1
  361. package/static/dist/assets/RightPanel-ho161a45.js +0 -1
  362. package/static/dist/assets/Select-d1g5a8bm.js +0 -1
  363. package/static/dist/assets/SessionListPanel-i7kaokhi.js +0 -1
  364. package/static/dist/assets/SettingsLayout-lnecm87w.js +0 -1
  365. package/static/dist/assets/States-easntmry.js +0 -1
  366. package/static/dist/assets/TerminalPanel-lxhwd4jl.js +0 -16
  367. package/static/dist/assets/Toaster-l4sciy8t.js +0 -1
  368. package/static/dist/assets/_app-mqexqbg8.js +0 -1
  369. package/static/dist/assets/_app.settings._section-djglnjmi.js +0 -3
  370. package/static/dist/assets/_app.tasks-l10py1c0.js +0 -1
  371. package/static/dist/assets/archive-ihqi7z2x.js +0 -1
  372. package/static/dist/assets/channel-jn4f8443.js +0 -1
  373. package/static/dist/assets/classDiagram-ZZMXUADV-dzrw66se.js +0 -1
  374. package/static/dist/assets/classDiagram-v2-VYDZK3BY-dzrw66se.js +0 -1
  375. package/static/dist/assets/completionAudio-ce86msbu.js +0 -1
  376. package/static/dist/assets/flowDiagram-HODETNUW-abekab15.js +0 -1
  377. package/static/dist/assets/folder-plus-ksaons88.js +0 -1
  378. package/static/dist/assets/index-d6vbxlra.js +0 -13
  379. package/static/dist/assets/index-ey6qo0zx.css +0 -2
  380. package/static/dist/assets/katex-cbdd1ohw.css +0 -1
  381. package/static/dist/assets/katex-pbij2oo6.js +0 -257
  382. package/static/dist/assets/login-iv6yq4xf.js +0 -1
  383. package/static/dist/assets/mermaid-HWGCJPDP-cwj5cl6k.js +0 -1
  384. package/static/dist/assets/onboarding-ff4emacu.js +0 -1
  385. package/static/dist/assets/queryKeys-x8fjxhut.js +0 -9
  386. package/static/dist/assets/refresh-cw-lfp4u1oh.js +0 -1
  387. package/static/dist/assets/sliders-horizontal-g5jkzd9k.js +0 -1
  388. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-faw1opgh.js +0 -1
  389. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-hfil433g.js +0 -8
  390. package/static/dist/assets/toast-zmb35u3r.js +0 -56
@@ -83,6 +83,7 @@ export interface SessionServiceDeps {
83
83
  /** The agent's display name for a session's profile (`assistant_name`). */
84
84
  assistantName: (profile: string | null) => string;
85
85
  redactEnabled: () => boolean;
86
+ showReasoning?: (profile: string | null) => Promise<boolean>;
86
87
  pinnedSessionsLimit: () => number;
87
88
  runtime: RuntimeOverlay & {
88
89
  /** A live worker stream that must block deletion / duplicate turns for this session. */
@@ -374,7 +375,9 @@ export declare class SessionService {
374
375
  /** The agent's display name for a session's profile (`assistant_name`). */
375
376
  assistantName(s: Session): string;
376
377
  /** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
377
- publicSessionDocument(s: Session): Record<string, unknown>;
378
+ publicSessionDocument(s: Session): Promise<Record<string, unknown>>;
379
+ /** One server decision for history, mutation replies, done frames and export documents. */
380
+ publicProjection(payload: Record<string, unknown>, profile: string | null): Promise<Record<string, unknown>>;
378
381
  private loadRevision;
379
382
  private readonly pageTails;
380
383
  private readonly pageContexts;
@@ -408,7 +411,7 @@ export declare class SessionService {
408
411
  /** A session without a sidecar, synthesized from state.db for this profile; 404/409 like the detail. */
409
412
  private foreignSession;
410
413
  /** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
411
- foreignMessages(messages: Message[], session: object): Message[];
414
+ foreignMessages(messages: Message[], session: object, showReasoning?: boolean): Message[];
412
415
  private foreignSessionDetail;
413
416
  /** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`). */
414
417
  clearStaleStreamState(session: Session): Promise<boolean>;
@@ -637,6 +640,8 @@ export declare class SessionService {
637
640
  } & Partial<OutboundDraftAction>): Promise<{
638
641
  draft: OutboundDraft | null;
639
642
  }>;
643
+ private withShareLock;
644
+ private saveShareOwnership;
640
645
  createShare(sid: string): Promise<Record<string, unknown>>;
641
646
  revokeShare(sid: string): Promise<Record<string, unknown>>;
642
647
  loadShare(token: string): Promise<Record<string, unknown>>;
@@ -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);
@@ -1157,6 +1160,8 @@ export class SessionService {
1157
1160
  if (loadMessages)
1158
1161
  raw.can_compress = limited ? raw.read_only !== true && !isClaudeCodeSessionId(s.session_id) && (!s.active_stream_id || this.compactionWaiters.has(s.active_stream_id)) && limited.enoughContext : this.canCompress(s, raw.read_only === true, stateRows);
1159
1162
  raw.confirms_deep_truncate = true;
1163
+ // TAL-848: lets a client whose /clear outcome is unknown tell from a reread whether the clear committed.
1164
+ raw.clear_generation = typeof s.clear_generation === 'string' ? s.clear_generation : null;
1160
1165
  raw.pending_steers = raw.active_stream_id ? (this.deps.runtime.pendingSteers?.(str(raw.active_stream_id)) ?? []) : [];
1161
1166
  // TAL-1006: the compression a client shows on load: the running manual job's, else the live run's open span.
1162
1167
  const job = this.compressionJobs.get(s.session_id);
@@ -1166,7 +1171,7 @@ export class SessionService {
1166
1171
  raw.notices = this.deps.runtime.sessionNotices?.(s.session_id) ?? [];
1167
1172
  raw.goal = this.deps.runtime.sessionGoal?.(s.session_id) ?? null;
1168
1173
  const publicRow = redactSessionData(raw, this.deps.redactEnabled());
1169
- return this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow;
1174
+ return this.publicProjection(this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow, s.profile);
1170
1175
  }
1171
1176
  /**
1172
1177
  * TAL-454: the chat `/branch` copied, while it still loads (archived included). A compression continuation is also a
@@ -1237,13 +1242,13 @@ export class SessionService {
1237
1242
  return { synth, meta };
1238
1243
  }
1239
1244
  /** 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), {});
1245
+ foreignMessages(messages, session, showReasoning = true) {
1246
+ return hydrateAnchorActivityScenes(withToolCallOutcomes(withMarkerKinds(withTurnIds(messages), session), [], null), {}, { showReasoning });
1242
1247
  }
1243
1248
  async foreignSessionDetail(sid, loadMessages, msgLimit, msgBefore) {
1244
1249
  const { synth, meta } = (await this.foreignSession(sid));
1245
1250
  // 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);
1251
+ const msgs = this.foreignMessages(synth.messages, synth, await this.deps.showReasoning?.(synth.profile) ?? true);
1247
1252
  const lastTs = Number(msgs[msgs.length - 1]?.timestamp ?? 0) || 0;
1248
1253
  const sess = {
1249
1254
  session_id: synth.session_id, title: synth.title, workspace: synth.workspace, model: synth.model, message_count: msgs.length,
@@ -1256,7 +1261,7 @@ export class SessionService {
1256
1261
  attachTodoState(sess, msgs);
1257
1262
  const merged = withSessionWireFlags((await this.ownerLocked([meta ? mergeCliSidebarMetadata(sess, meta) : sess]))[0], this.deps.runtime.activeStreamIds);
1258
1263
  const publicRow = redactSessionData(merged, this.deps.redactEnabled());
1259
- return this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow;
1264
+ return this.publicProjection(this.owner ? await this.owner.project(publicRow, msgLimit, msgBefore, loadMessages) : publicRow, synth.profile);
1260
1265
  }
1261
1266
  /** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`). */
1262
1267
  async clearStaleStreamState(session) {
@@ -1511,7 +1516,8 @@ export class SessionService {
1511
1516
  const s = (await this.get404(sid));
1512
1517
  const inp = Math.trunc(s.input_tokens) || 0;
1513
1518
  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 };
1519
+ const view = this.owner ? await this.owner.project(await this.wireRow(s), 0, null, false) : { plan_gauge: s.plan_gauge };
1520
+ 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
1521
  }
1516
1522
  // ── creation ─────────────────────────────────────────────────────────────
1517
1523
  /** Only retained, readable identities in the request profile can become search pointers. */
@@ -2493,6 +2499,9 @@ export class SessionService {
2493
2499
  live.compression_anchor_message_key = anchorMessageKey(anchor);
2494
2500
  live.compression_anchor_summary = anchorSummary(summary, compressed);
2495
2501
  live.compression_anchor_mode = 'manual';
2502
+ // TAL-1566: the compaction's own row follows the anchor (first without one), before a waiting turn's rows.
2503
+ if (live.compression_anchor_summary)
2504
+ insertCompactionRow(live, anchor ? live.messages.indexOf(anchor) : -1, str(live.compression_anchor_summary), this.deps.now());
2496
2505
  // #4836: an intentional-shrink boundary, so append-only state.db reconciliation does not replay compressed rows.
2497
2506
  live.truncation_watermark = truncationWatermarkFor(compressed);
2498
2507
  live.truncation_boundary = live.truncation_watermark;
@@ -2935,21 +2944,32 @@ export class SessionService {
2935
2944
  async cleanup(zeroOnly) {
2936
2945
  let cleaned = 0;
2937
2946
  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);
2947
+ for (const candidate of (await this.store.scanAll())) {
2948
+ await this.store.withLock(candidate.session_id, async () => {
2949
+ let s;
2950
+ try {
2951
+ s = await this.store.get(candidate.session_id);
2952
+ }
2953
+ catch (error) {
2954
+ if (error instanceof SessionNotFound)
2955
+ return;
2956
+ throw error;
2957
+ }
2958
+ const shouldDelete = zeroOnly ? s.messages.length === 0 : s.title === 'Untitled' && s.messages.length === 0;
2959
+ if (!shouldDelete || (await this.isReadOnly(s)))
2960
+ return;
2961
+ // Keep the session (and its revoke route) if its share cannot be revoked.
2962
+ try {
2963
+ (await this.deps.shares.revoke(s));
2964
+ }
2965
+ catch {
2966
+ return;
2967
+ }
2968
+ if (!await this.store.delete(s.session_id, { tombstone: false }))
2969
+ return;
2970
+ cleaned += 1;
2971
+ removed.add(s.session_id);
2972
+ });
2953
2973
  }
2954
2974
  let rewroteIndex = false;
2955
2975
  try {
@@ -3169,7 +3189,8 @@ export class SessionService {
3169
3189
  if (!sid || (!messageRef && messageIndex === null))
3170
3190
  throw new HttpFailure(400, 'session_id and message_ref or message_index are required');
3171
3191
  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));
3192
+ const show = await this.deps.showReasoning?.(session.profile) ?? true;
3193
+ 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
3194
  if (!result)
3174
3195
  throw new HttpFailure(404, 'Anchor activity scene not found');
3175
3196
  // Paged rows come from the raw transcript, so they take the same credential redaction as the detail's preview.
@@ -3247,41 +3268,55 @@ export class SessionService {
3247
3268
  });
3248
3269
  }
3249
3270
  // ── 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;
3271
+ async withShareLock(sid, fn) {
3272
+ sid = await this.resolveSessionId(sid);
3273
+ return this.store.withLock(sid, async () => {
3274
+ const session = await this.get404(sid);
3275
+ if (!this.visibleToActiveProfile(session.profile))
3276
+ throw new HttpFailure(404, 'Session not found');
3277
+ return fn(await this.store.ensureFull(sid, session));
3278
+ });
3279
+ }
3280
+ async saveShareOwnership(session, token, createdAt) {
3281
+ const previous = { share_token: session.share_token, share_created_at: session.share_created_at };
3282
+ session.share_token = token;
3283
+ session.share_created_at = createdAt;
3257
3284
  try {
3258
- snapshot = buildShareSnapshot(s, s.messages, { hermesHome: this.deps.hermesHome, attachmentRoot: this.deps.attachmentDir('').replace(/\/[^/]*$/, ''), home: this.deps.home });
3285
+ await this.store.save(session, { touchUpdatedAt: false });
3259
3286
  }
3260
3287
  catch (error) {
3261
- throw new HttpFailure(400, error.message);
3288
+ Object.assign(session, previous);
3289
+ // A failed acknowledgement may follow a commit; the next operation must read persisted ownership.
3290
+ this.store.sessions.delete(session.session_id);
3291
+ throw error;
3262
3292
  }
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
- };
3293
+ }
3294
+ async createShare(sid) {
3295
+ this.rejectClaudeCode(sid, 'shared');
3296
+ return this.withShareLock(sid, async (s) => {
3297
+ let snapshot;
3298
+ try {
3299
+ snapshot = buildShareSnapshot(s, s.messages, { hermesHome: this.deps.hermesHome, attachmentRoot: this.deps.attachmentDir('').replace(/\/[^/]*$/, ''), home: this.deps.home });
3300
+ }
3301
+ catch (error) {
3302
+ throw new HttpFailure(400, error.message);
3303
+ }
3304
+ const meta = await this.deps.shares.createOrRefresh(s, snapshot, (owner) => this.saveShareOwnership(s, owner.share_token, owner.share_created_at));
3305
+ this.publish('session_share_create', s.profile, s.session_id);
3306
+ return {
3307
+ ok: true,
3308
+ 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 },
3309
+ session: (await this.publicSession(s)),
3310
+ };
3311
+ });
3273
3312
  }
3274
3313
  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)) };
3314
+ return this.withShareLock(sid, async (s) => {
3315
+ await this.deps.shares.revoke(s);
3316
+ await this.saveShareOwnership(s, null, null);
3317
+ this.publish('session_share_revoke', s.profile, s.session_id);
3318
+ return { ok: true, session: (await this.publicSession(s)) };
3319
+ });
3285
3320
  }
3286
3321
  async loadShare(token) {
3287
3322
  const share = (await this.deps.shares.load(token));
@@ -3404,6 +3439,13 @@ function truncationWatermarkFor(messages) {
3404
3439
  return Number.isFinite(ts) ? ts : 0.0;
3405
3440
  }
3406
3441
  function stampIntentionalShrink(session, oldCount, newCount) {
3442
+ // TAL-1566: a cut that removed the newest compaction's row ends its anchor too, so no later load restores the row.
3443
+ const summary = str(session.compression_anchor_summary).trim();
3444
+ if (summary && !session.messages.some((m) => isCompactionRow(m) && str(m.content).trim() === summary)) {
3445
+ session.compression_anchor_summary = null;
3446
+ session.compression_anchor_message_key = null;
3447
+ session.compression_anchor_visible_idx = null;
3448
+ }
3407
3449
  if (newCount >= oldCount)
3408
3450
  return false;
3409
3451
  session.intentional_shrink_generation = randomUUID().replace(/-/g, '');