@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.
- package/_release.json +4 -4
- package/dist/api/automation-router.d.ts +14 -14
- package/dist/api/chat-router.d.ts +225 -68
- package/dist/api/groups-router.d.ts +764 -0
- package/dist/api/groups-router.js +79 -0
- package/dist/api/groups-router.js.map +1 -0
- package/dist/api/raw-routes.d.ts +1 -1
- package/dist/api/raw-routes.js +15 -3
- package/dist/api/raw-routes.js.map +1 -1
- package/dist/api/router.d.ts +41 -0
- package/dist/api/router.js +2 -0
- package/dist/api/router.js.map +1 -1
- package/dist/api/sessions-router.d.ts +590 -160
- package/dist/api/sessions-router.js +14 -14
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +948 -1
- package/dist/api/settings-router.js +54 -2
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.d.ts +1 -1
- package/dist/api/sse-routes.js +11 -3
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-raw.js +27 -136
- package/dist/api/tools-raw.js.map +1 -1
- package/dist/api/tools-router.d.ts +109 -24
- package/dist/api/tools-router.js +69 -9
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.js +5 -1
- package/dist/app.js.map +1 -1
- package/dist/auth/gate.js +5 -1
- package/dist/auth/gate.js.map +1 -1
- package/dist/cli/ctl.d.ts +5 -2
- package/dist/cli/ctl.js +90 -42
- package/dist/cli/ctl.js.map +1 -1
- package/dist/config/agent-config.d.ts +6 -1
- package/dist/config/agent-config.js +75 -3
- package/dist/config/agent-config.js.map +1 -1
- package/dist/feedback.d.ts +21 -0
- package/dist/feedback.js +328 -0
- package/dist/feedback.js.map +1 -0
- package/dist/fs/stat.d.ts +2 -0
- package/dist/fs/stat.js +4 -0
- package/dist/fs/stat.js.map +1 -1
- package/dist/http/context.d.ts +10 -1
- package/dist/http/context.js +0 -6
- package/dist/http/context.js.map +1 -1
- package/dist/http/pinned.js +19 -8
- package/dist/http/pinned.js.map +1 -1
- package/dist/providers/catalog.d.ts +10 -2
- package/dist/providers/catalog.js +113 -15
- package/dist/providers/catalog.js.map +1 -1
- package/dist/redact.js +9 -3
- package/dist/redact.js.map +1 -1
- package/dist/release.d.ts +14 -1
- package/dist/release.js +40 -2
- package/dist/release.js.map +1 -1
- package/dist/runtime.js +29 -5
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +1 -0
- package/dist/server.js.map +1 -1
- package/dist/sessions/anchor.d.ts +3 -2
- package/dist/sessions/anchor.js +11 -10
- package/dist/sessions/anchor.js.map +1 -1
- package/dist/sessions/cli-sessions.js +11 -6
- package/dist/sessions/cli-sessions.js.map +1 -1
- package/dist/sessions/compress.d.ts +10 -9
- package/dist/sessions/compress.js +31 -20
- package/dist/sessions/compress.js.map +1 -1
- package/dist/sessions/gateway-sessions.d.ts +11 -0
- package/dist/sessions/gateway-sessions.js +79 -24
- package/dist/sessions/gateway-sessions.js.map +1 -1
- package/dist/sessions/gateway-watcher.js +8 -4
- package/dist/sessions/gateway-watcher.js.map +1 -1
- package/dist/sessions/groups.d.ts +60 -0
- package/dist/sessions/groups.js +339 -0
- package/dist/sessions/groups.js.map +1 -0
- package/dist/sessions/list.d.ts +8 -3
- package/dist/sessions/list.js +17 -6
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +14 -5
- package/dist/sessions/merge.js +42 -13
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/pending.d.ts +1 -1
- package/dist/sessions/pending.js +15 -6
- package/dist/sessions/pending.js.map +1 -1
- package/dist/sessions/prefix-index.d.ts +1 -14
- package/dist/sessions/prefix-index.js +1 -50
- package/dist/sessions/prefix-index.js.map +1 -1
- package/dist/sessions/reasoning-display.d.ts +2 -0
- package/dist/sessions/reasoning-display.js +31 -0
- package/dist/sessions/reasoning-display.js.map +1 -0
- package/dist/sessions/relay.d.ts +34 -2
- package/dist/sessions/relay.js +84 -7
- package/dist/sessions/relay.js.map +1 -1
- package/dist/sessions/service.d.ts +7 -2
- package/dist/sessions/service.js +106 -64
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +6 -0
- package/dist/sessions/session.js +13 -0
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/shares.d.ts +3 -1
- package/dist/sessions/shares.js +33 -11
- package/dist/sessions/shares.js.map +1 -1
- package/dist/sessions/source-kind.js +2 -0
- package/dist/sessions/source-kind.js.map +1 -1
- package/dist/sessions/state-db.d.ts +2 -1
- package/dist/sessions/state-db.js +12 -5
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/storage/json-documents.js +2 -0
- package/dist/sessions/storage/json-documents.js.map +1 -1
- package/dist/sessions/store.d.ts +1 -0
- package/dist/sessions/store.js +10 -3
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +7 -2
- package/dist/sessions/streams.js +16 -6
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/titles.d.ts +2 -0
- package/dist/sessions/titles.js +11 -0
- package/dist/sessions/titles.js.map +1 -1
- package/dist/sessions/todo.js +10 -1
- package/dist/sessions/todo.js.map +1 -1
- package/dist/sessions/turn.js +50 -21
- package/dist/sessions/turn.js.map +1 -1
- package/dist/settings.js +6 -1
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/client.d.ts +3 -0
- package/dist/sidecar/client.js +2 -1
- package/dist/sidecar/client.js.map +1 -1
- package/dist/sidecar/discover.js +3 -2
- package/dist/sidecar/discover.js.map +1 -1
- package/dist/spa.js +1 -1
- package/dist/spa.js.map +1 -1
- package/dist/test/group-fixture.d.ts +66 -0
- package/dist/test/group-fixture.js +89 -0
- package/dist/test/group-fixture.js.map +1 -0
- package/dist/test/harness.d.ts +3 -0
- package/dist/test/harness.js +3 -0
- package/dist/test/harness.js.map +1 -1
- package/dist/tools/connectors.d.ts +9 -1
- package/dist/tools/connectors.js +48 -0
- package/dist/tools/connectors.js.map +1 -1
- package/dist/tools/gateway-restart.d.ts +1 -1
- package/dist/tools/insights.d.ts +3 -0
- package/dist/tools/insights.js +6 -7
- package/dist/tools/insights.js.map +1 -1
- package/dist/tools/skills.d.ts +6 -0
- package/dist/tools/skills.js +17 -0
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/update-notifications.d.ts +2 -0
- package/dist/tools/update-notifications.js +7 -3
- package/dist/tools/update-notifications.js.map +1 -1
- package/dist/tools/updates.d.ts +26 -9
- package/dist/tools/updates.js +144 -47
- package/dist/tools/updates.js.map +1 -1
- package/dist/workspace/fs.d.ts +2 -0
- package/dist/workspace/fs.js +63 -1
- package/dist/workspace/fs.js.map +1 -1
- package/dist/workspace/media-refs.js +10 -3
- package/dist/workspace/media-refs.js.map +1 -1
- package/dist/workspace/upload.d.ts +1 -1
- package/dist/workspace/upload.js +52 -37
- package/dist/workspace/upload.js.map +1 -1
- package/dist/workspace/workspaces.d.ts +5 -1
- package/dist/workspace/workspaces.js +32 -6
- package/dist/workspace/workspaces.js.map +1 -1
- package/package.json +4 -3
- package/sidecar/agent_importer.json +8 -0
- package/sidecar/scripts/agent_importer_contract.py +19 -0
- package/sidecar/scripts/suite_runner.py +55 -8
- package/sidecar/scripts/test.sh +3 -1
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/home.py +12 -5
- package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
- package/sidecar/talaria_sidecar/methods/agent_imports.py +346 -0
- package/sidecar/talaria_sidecar/methods/chat.py +141 -58
- package/sidecar/talaria_sidecar/methods/commands.py +6 -4
- package/sidecar/talaria_sidecar/methods/config.py +8 -3
- package/sidecar/talaria_sidecar/methods/connectors.py +138 -4
- package/sidecar/talaria_sidecar/methods/dashboard_plugins.py +21 -0
- package/sidecar/talaria_sidecar/methods/delegation.py +126 -0
- package/sidecar/talaria_sidecar/methods/gateway.py +5 -0
- package/sidecar/talaria_sidecar/methods/gateway_sessions.py +35 -6
- package/sidecar/talaria_sidecar/methods/groups.py +120 -0
- package/sidecar/talaria_sidecar/methods/memory.py +27 -3
- package/sidecar/talaria_sidecar/methods/nous_account.py +130 -0
- package/sidecar/talaria_sidecar/methods/oauth.py +25 -4
- package/sidecar/talaria_sidecar/methods/outbound_drafts.py +1 -19
- package/sidecar/talaria_sidecar/methods/plugin_catalog.py +73 -2
- package/sidecar/talaria_sidecar/methods/providers.py +51 -1
- package/sidecar/talaria_sidecar/methods/skill_revisions.py +177 -0
- package/sidecar/talaria_sidecar/methods/skills.py +10 -0
- package/sidecar/talaria_sidecar/methods/tts.py +67 -0
- package/sidecar/talaria_sidecar/rpc.py +11 -2
- package/static/dist/FILES.txt +154 -143
- package/static/dist/THIRD_PARTY_LICENSES.md +1 -1
- package/static/dist/assets/AppShell-jwd95ofg.js +8 -0
- package/static/dist/assets/{Button-nuaikybd.js → Button-nrcj7shj.js} +1 -1
- package/static/dist/assets/ChatPage-fmgk8xpk.js +2 -0
- package/static/dist/assets/Composer-oya4ggu7.js +5 -0
- package/static/dist/assets/ConnectTargets-rg90uiui.js +1 -0
- package/static/dist/assets/Dialog-gk0uatl8.js +1 -0
- package/static/dist/assets/ExtensionRoute-ji4xce9l.js +1 -0
- package/static/dist/assets/HubRoute-2pgy4aa2.js +2 -0
- package/static/dist/assets/Markdown-d6br42ts.js +2 -0
- package/static/dist/assets/{MarkdownRenderer-ccgqrza3.js → MarkdownRenderer-k8rmb83g.js} +6 -6
- package/static/dist/assets/OAuthSignIn-pbls9ljk.js +1 -0
- package/static/dist/assets/QueueCard-liib58ru.js +1 -0
- package/static/dist/assets/ResourceSwitch-gtdv2jgs.js +1 -0
- package/static/dist/assets/RightPanel-b89e4kx3.js +1 -0
- package/static/dist/assets/Select-l6qybenp.js +1 -0
- package/static/dist/assets/SessionListPanel-l4vy95j8.js +1 -0
- package/static/dist/assets/SettingsLayout-chw7pl2m.js +1 -0
- package/static/dist/assets/TerminalPanel-qrd0gkx7.js +16 -0
- package/static/dist/assets/Toaster-ihzgaq9z.js +1 -0
- package/static/dist/assets/_app-cn1au4zq.js +1 -0
- package/static/dist/assets/{_app.ext._extensionId-n797jp72.js → _app.ext._extensionId-m4npkrr0.js} +1 -1
- package/static/dist/assets/_app.groups-c8ycbp5n.js +1 -0
- package/static/dist/assets/{_app.index-ne43mdw2.js → _app.index-f1fckz3h.js} +1 -1
- package/static/dist/assets/{_app.insights-fqonovb4.js → _app.insights-ezivk7ad.js} +1 -1
- package/static/dist/assets/{_app.kanban-kysliv19.js → _app.kanban-zbkeov0f.js} +1 -1
- package/static/dist/assets/{_app.logs-febut82r.js → _app.logs-dqam5zyz.js} +1 -1
- package/static/dist/assets/{_app.memory-ha86oj1c.js → _app.memory-gzxkm3a0.js} +1 -1
- package/static/dist/assets/{_app.profiles-cnu3gxxq.js → _app.profiles-j28l31hl.js} +1 -1
- package/static/dist/assets/{_app.session._sessionId-ifzjpcgn.js → _app.session._sessionId-55egsufs.js} +1 -1
- package/static/dist/assets/{_app.settings-nmakdiaf.js → _app.settings-f5ltpieb.js} +1 -1
- package/static/dist/assets/_app.settings._section-dda0vfot.js +3 -0
- package/static/dist/assets/{_app.skills-f3wad8yo.js → _app.skills-kuc81hq0.js} +1 -1
- package/static/dist/assets/_app.tasks-gyy6vj5l.js +1 -0
- package/static/dist/assets/{_app.todos-bml1m3r1.js → _app.todos-d0xoy68t.js} +1 -1
- package/static/dist/assets/{_app.workspaces-f3d066lx.js → _app.workspaces-pawp2gxk.js} +1 -1
- package/static/dist/assets/_delete-qnxuo87s.js +1 -0
- package/static/dist/assets/{abnfDiagram-VCTEODGH-i53jc4yp.js → abnfDiagram-VCTEODGH-mhav7n5a.js} +1 -1
- package/static/dist/assets/{architecture-7GRP2DOG-e3bv5m6f.js → architecture-7GRP2DOG-ozbanukt.js} +1 -1
- package/static/dist/assets/{architectureDiagram-5GKGNRK7-pakekxu2.js → architectureDiagram-5GKGNRK7-febtor5m.js} +1 -1
- package/static/dist/assets/archive-gyk9c34a.js +1 -0
- package/static/dist/assets/autoReadClaim-nlyv8tu9.js +1 -0
- package/static/dist/assets/{blockDiagram-I7D4REHJ-bc6bo1n6.js → blockDiagram-I7D4REHJ-ocais2jf.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-btvwk2qx.js → c4Diagram-7LVT6UL2-cgpfjx5f.js} +1 -1
- package/static/dist/assets/channel-els5ri1f.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-dlwab11c.js → chunk-4HAMMTFA-hvqdiiow.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-dp5gh7i8.js → chunk-75Z2AOVW-hxbulvtb.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-bi06zl1c.js → chunk-DU6HZSFF-kkp6a7gp.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-kvv1rnlh.js → chunk-F27PBJKO-ljz0gssc.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-ji0rx9by.js → chunk-GMAD6QVW-bo0enyxn.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-nmz0j82p.js → chunk-GVQU2GXP-cnq7l2v6.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-kmi1qx88.js → chunk-IMKFNOWR-gjnkrfu6.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-xhb7mebj.js → chunk-L3NEJ4N5-gjfp71qi.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-5a9sgscq.js → chunk-OSK3NFVY-ieq5r94b.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-dfezp4vu.js → chunk-P2QGCYS3-hdefjk56.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-gd2vq3c0.js → chunk-POPQ4Y6H-mcbt8wpr.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-wvw2nksf.js → chunk-PWAF6VOD-mx2drja9.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-f58q97px.js → chunk-SHT3W25Y-j7dd9i66.js} +1 -1
- package/static/dist/assets/{chunk-SVP7TREG-abgwpyz9.js → chunk-SVP7TREG-jcnt3lxt.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-h4sbs8ds.js → chunk-TICWLB2K-lrwv5hx9.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-krpt9pdd.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-krpt9pdd.js +1 -0
- package/static/dist/assets/completionAudio-fhxf0h9j.js +1 -0
- package/static/dist/assets/{copy-m9h56qa8.js → copy-gyzrqmyr.js} +1 -1
- package/static/dist/assets/{cynefin-OW5HDTMX-g081vffs.js → cynefin-OW5HDTMX-heq36srt.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-odxvjesk.js → cynefinDiagram-5FMLGOSQ-crrmq338.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-cpdwzjs4.js → dagre-GXQ25YYZ-m7fpnt6k.js} +1 -1
- package/static/dist/assets/{diagram-S7CK7UJ4-clv5mxvu.js → diagram-S7CK7UJ4-ebm1ebv6.js} +1 -1
- package/static/dist/assets/{diagram-UQ7AKVKN-m2ia1mbf.js → diagram-UQ7AKVKN-hc0ypsp1.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-ea6zv636.js → diagram-VSXAHHWV-mu8q5n4b.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-oqlef685.js → diagram-VX7I27RA-i488wdlb.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-kjubcbwu.js → diagram-Z3DM3KII-gz3nwvq9.js} +1 -1
- package/static/dist/assets/{dist-carq1azj.js → dist-ge7hom9n.js} +4 -4
- package/static/dist/assets/{dist-crc46di9.js → dist-kpg5ccm9.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-fg0zri3e.js → ebnfDiagram-PWID7BFC-lwskecx4.js} +1 -1
- package/static/dist/assets/{erDiagram-RLTQ6QDP-eb7pmk3x.js → erDiagram-RLTQ6QDP-c0bysigr.js} +1 -1
- package/static/dist/assets/{eventmodeling-NTZA5JFV-gvi1fxhn.js → eventmodeling-NTZA5JFV-k19e509j.js} +1 -1
- package/static/dist/assets/feedbackVideo.worker-JBVT3sDD.js +480 -0
- package/static/dist/assets/flowDiagram-HODETNUW-n4m8e6kq.js +1 -0
- package/static/dist/assets/folder-plus-m1ywe0cv.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-jmisowrc.js → ganttDiagram-EL5Y4UJY-mz1p8yzt.js} +1 -1
- package/static/dist/assets/getPseudoElementBounds-ci0x9gki.js +1 -0
- package/static/dist/assets/{gitGraph-4MIJSDKK-m7kt3u6e.js → gitGraph-4MIJSDKK-h0uskiog.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-nq7vfzh2.js → gitGraphDiagram-WWUBYQGX-e4d9um1j.js} +1 -1
- package/static/dist/assets/group_discussions-fk5hry4l.js +1 -0
- package/static/dist/assets/{highlighted-body-KPVGNVTW-gcu017ay.js → highlighted-body-KPVGNVTW-d47n6oqu.js} +1 -1
- package/static/dist/assets/{host-ipp4e84c.js → host-f7eudvft.js} +1 -1
- package/static/dist/assets/index-lab8g9gs.css +2 -0
- package/static/dist/assets/index-n5rg2q2r.js +13 -0
- package/static/dist/assets/{info-A6RAGUB7-idazwfqe.js → info-A6RAGUB7-k04of9c6.js} +1 -1
- package/static/dist/assets/{infoDiagram-27XIBGKW-bb9jh8gl.js → infoDiagram-27XIBGKW-l98n1tgz.js} +1 -1
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-nqc132rv.js → ishikawaDiagram-5VMMS53U-gkznu2d6.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-fpvnhy44.js → journeyDiagram-3NMN7TZE-mt23qvx1.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-ndzqm6fu.js → kanban-definition-UXKFOSKX-ab93l7y5.js} +1 -1
- package/static/dist/assets/katex-ic33v820.js +257 -0
- package/static/dist/assets/katex-qcv7xo0t.css +1 -0
- package/static/dist/assets/{lazyRouteComponent-javud235.js → lazyRouteComponent-dt9efiqk.js} +1 -1
- package/static/dist/assets/{line-g625e7cj.js → line-dkm9r3as.js} +1 -1
- package/static/dist/assets/link-2-ozyjqwhh.js +1 -0
- package/static/dist/assets/{link-gfdaho08.js → link-dip3g6zs.js} +1 -1
- package/static/dist/assets/{locale-cs-n41hptse.js → locale-cs-brltdkcp.js} +1 -1
- package/static/dist/assets/{locale-de-k7ht47ew.js → locale-de-h6e9oq6v.js} +1 -1
- package/static/dist/assets/{locale-es-ih078lco.js → locale-es-oklmh80f.js} +1 -1
- package/static/dist/assets/{locale-fr-ojabnf41.js → locale-fr-b17ozoi2.js} +1 -1
- package/static/dist/assets/{locale-it-kb96jufy.js → locale-it-whe01eef.js} +1 -1
- package/static/dist/assets/{locale-ja-jpsp3xs1.js → locale-ja-g1s0rtpc.js} +1 -1
- package/static/dist/assets/{locale-pl-dbap4leu.js → locale-pl-d9p3lqcb.js} +1 -1
- package/static/dist/assets/{locale-pt-nci7w72x.js → locale-pt-l75on74f.js} +1 -1
- package/static/dist/assets/{locale-ru-soghe4cs.js → locale-ru-wl3mbsaw.js} +1 -1
- package/static/dist/assets/{locale-tr-ks00mu68.js → locale-tr-cz87itrq.js} +1 -1
- package/static/dist/assets/{locale-vi-ij7twfm6.js → locale-vi-elqj1y4k.js} +1 -1
- package/static/dist/assets/{locale-zh-Hant-feakwr7a.js → locale-zh-Hant-hf8gqm7d.js} +1 -1
- package/static/dist/assets/{locale-zh-ren0vjyv.js → locale-zh-cdckwb0u.js} +1 -1
- package/static/dist/assets/login-go5xfzkx.js +1 -0
- package/static/dist/assets/mermaid-HWGCJPDP-o7wh7c74.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-plzkuzov.js → mermaid-parser.core-c4ywstu7.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-ojrgs569.js → mindmap-definition-YA3MSWOX-mnvkgz5u.js} +1 -1
- package/static/dist/assets/onboarding-hbbpvp6w.js +1 -0
- package/static/dist/assets/{packet-AYTQ26CC-gyaf9s8h.js → packet-AYTQ26CC-dfm2ygox.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-bf6xj8mq.js → pegDiagram-XKGWAZYB-kfbyls4v.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-f5ymzelo.js → pie-WAS4IAKB-jniw7r2b.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-d0qjl3zi.js → pieDiagram-E7YTZNPT-cir9nlg4.js} +1 -1
- package/static/dist/assets/presence-ivo54s19.js +1 -0
- package/static/dist/assets/prompt_queue_cancelled-cebcuagu.js +1 -0
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-oqy1mras.js → quadrantDiagram-AXDQQJYC-2nnb2u4m.js} +1 -1
- package/static/dist/assets/queryKeys-mbi6o5vh.js +9 -0
- package/static/dist/assets/{radar-RG4KPBEZ-b6jcjvda.js → radar-RG4KPBEZ-jfvtqhq2.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-e3a6lk5k.js → railroad-74A4TZTK-hnm0ikx7.js} +1 -1
- package/static/dist/assets/{railroad-abnf-HS5TGJTU-ff5hocrx.js → railroad-abnf-HS5TGJTU-hcfz5gyc.js} +1 -1
- package/static/dist/assets/{railroad-ebnf-LZEXJU2U-exkhyw4n.js → railroad-ebnf-LZEXJU2U-ocbvmcwo.js} +1 -1
- package/static/dist/assets/{railroad-peg-WCYAUIDC-jefk9b7c.js → railroad-peg-WCYAUIDC-kkbzgo8d.js} +1 -1
- package/static/dist/assets/{railroadDiagram-O6MQD6OU-e4amks1i.js → railroadDiagram-O6MQD6OU-ox5v7853.js} +1 -1
- package/static/dist/assets/rename-ccd52yws.js +1 -0
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-c77k1e2y.js → requirementDiagram-BXWQKSXE-e1iq54h4.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-oa1cc52s.js → sankeyDiagram-P5KCCOFB-mmza9r2u.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-j20gqt22.js → sequenceDiagram-WJ2MYXX4-dioic69h.js} +1 -1
- package/static/dist/assets/{share._token-kmfoflw6.js → share._token-i51g4ccy.js} +1 -1
- package/static/dist/assets/sliders-horizontal-nj1dipq4.js +1 -0
- package/static/dist/assets/{stateDiagram-D77RDMKH-co2ghkdp.js → stateDiagram-D77RDMKH-do5wvqjw.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-f0sedx52.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-m30cktqe.js → swimlanes-42K2YHIH-mhjzgtgl.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-n0x444kc.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-liuep6fl.js → timeline-definition-24CTP7MA-i5820ppg.js} +1 -1
- package/static/dist/assets/toast-esv4ma70.js +56 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-np5d2jv2.js → treeView-Q6P3EWNA-btp8feob.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-cmpltxh1.js → treemap-WGGIJYW6-lv71dt7p.js} +1 -1
- package/static/dist/assets/tts-bq7ax6xp.js +1 -0
- package/static/dist/assets/{useForm-f1udzsjf.js → useForm-d5wxx0l0.js} +1 -1
- package/static/dist/assets/{useParams-ierevvts.js → useParams-gk1u0y6m.js} +1 -1
- package/static/dist/assets/{useSearch-i7nr9ypl.js → useSearch-nsrme1pf.js} +1 -1
- package/static/dist/assets/useTranscript-m9ve9mml.js +1 -0
- package/static/dist/assets/{vennDiagram-4TSXK5OY-b2g42qrg.js → vennDiagram-4TSXK5OY-bffv7e11.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-lb0eqbff.js → wardley-WFR3VGLG-f1m16ivx.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-ermwaqha.js → wardleyDiagram-VM6X3IG4-ous4pq48.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-dll0jldk.js → xychartDiagram-S5SC5T6Z-jxgbp4as.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +1 -1
- package/static/dist/assets/AppShell-c5989995.js +0 -8
- package/static/dist/assets/ChatPage-bfg4khph.js +0 -6
- package/static/dist/assets/ConnectTargets-k5wo9yo8.js +0 -1
- package/static/dist/assets/Dialog-o8vo2aws.js +0 -1
- package/static/dist/assets/ExtensionRoute-l1yjrso4.js +0 -1
- package/static/dist/assets/Field-j7o8cfps.js +0 -1
- package/static/dist/assets/HubRoute-efnwe4xz.js +0 -2
- package/static/dist/assets/Markdown-clqf5m22.js +0 -2
- package/static/dist/assets/OAuthSignIn-h7bjaqp6.js +0 -1
- package/static/dist/assets/ResourceSwitch-oai2zqaj.js +0 -1
- package/static/dist/assets/RightPanel-ho161a45.js +0 -1
- package/static/dist/assets/Select-d1g5a8bm.js +0 -1
- package/static/dist/assets/SessionListPanel-i7kaokhi.js +0 -1
- package/static/dist/assets/SettingsLayout-lnecm87w.js +0 -1
- package/static/dist/assets/States-easntmry.js +0 -1
- package/static/dist/assets/TerminalPanel-lxhwd4jl.js +0 -16
- package/static/dist/assets/Toaster-l4sciy8t.js +0 -1
- package/static/dist/assets/_app-mqexqbg8.js +0 -1
- package/static/dist/assets/_app.settings._section-djglnjmi.js +0 -3
- package/static/dist/assets/_app.tasks-l10py1c0.js +0 -1
- package/static/dist/assets/archive-ihqi7z2x.js +0 -1
- package/static/dist/assets/channel-jn4f8443.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-dzrw66se.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-dzrw66se.js +0 -1
- package/static/dist/assets/completionAudio-ce86msbu.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-abekab15.js +0 -1
- package/static/dist/assets/folder-plus-ksaons88.js +0 -1
- package/static/dist/assets/index-d6vbxlra.js +0 -13
- package/static/dist/assets/index-ey6qo0zx.css +0 -2
- package/static/dist/assets/katex-cbdd1ohw.css +0 -1
- package/static/dist/assets/katex-pbij2oo6.js +0 -257
- package/static/dist/assets/login-iv6yq4xf.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-cwj5cl6k.js +0 -1
- package/static/dist/assets/onboarding-ff4emacu.js +0 -1
- package/static/dist/assets/queryKeys-x8fjxhut.js +0 -9
- package/static/dist/assets/refresh-cw-lfp4u1oh.js +0 -1
- package/static/dist/assets/sliders-horizontal-g5jkzd9k.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-faw1opgh.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-hfil433g.js +0 -8
- 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>>;
|
package/dist/sessions/service.js
CHANGED
|
@@ -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,
|
|
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(),
|
|
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
|
|
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
|
-
|
|
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
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
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
|
|
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
|
|
3251
|
-
this.
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
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
|
-
|
|
3285
|
+
await this.store.save(session, { touchUpdatedAt: false });
|
|
3259
3286
|
}
|
|
3260
3287
|
catch (error) {
|
|
3261
|
-
|
|
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
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
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
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
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, '');
|