@maudecode/talaria-web 0.0.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_release.json +20 -0
- package/dist/api/chat-router.d.ts +120 -3
- package/dist/api/chat-router.js +11 -8
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/router.d.ts +10 -0
- package/dist/api/router.js +2 -1
- package/dist/api/router.js.map +1 -1
- package/dist/api/sessions-router.d.ts +691 -40
- package/dist/api/sessions-router.js +2 -2
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +8 -0
- package/dist/api/settings-router.js +13 -5
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.js +53 -9
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-router.d.ts +420 -0
- package/dist/api/tools-router.js +98 -5
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.d.ts +1247 -43
- package/dist/auth/oidc.js +2 -0
- package/dist/auth/oidc.js.map +1 -1
- package/dist/auth/store.d.ts +17 -0
- package/dist/auth/store.js +77 -19
- package/dist/auth/store.js.map +1 -1
- package/dist/bin/talaria-web.js +4 -1
- package/dist/bin/talaria-web.js.map +1 -1
- package/dist/cli/supervise.js +2 -1
- package/dist/cli/supervise.js.map +1 -1
- package/dist/fs/atomic.d.ts +8 -1
- package/dist/fs/atomic.js +52 -3
- package/dist/fs/atomic.js.map +1 -1
- package/dist/http/context.d.ts +2 -0
- package/dist/http/context.js.map +1 -1
- package/dist/redact.d.ts +15 -0
- package/dist/redact.js +1393 -9
- package/dist/redact.js.map +1 -1
- package/dist/release.js +3 -1
- package/dist/release.js.map +1 -1
- package/dist/runtime.js +28 -11
- package/dist/runtime.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +11 -5
- package/dist/server.js.map +1 -1
- package/dist/sessions/anchor.d.ts +59 -5
- package/dist/sessions/anchor.js +373 -32
- package/dist/sessions/anchor.js.map +1 -1
- package/dist/sessions/file-changes.d.ts +15 -0
- package/dist/sessions/file-changes.js +58 -0
- package/dist/sessions/file-changes.js.map +1 -0
- package/dist/sessions/journal.d.ts +6 -1
- package/dist/sessions/journal.js +9 -15
- package/dist/sessions/journal.js.map +1 -1
- package/dist/sessions/list.d.ts +21 -1
- package/dist/sessions/list.js +81 -17
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +72 -2
- package/dist/sessions/merge.js +326 -13
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/pending.d.ts +11 -2
- package/dist/sessions/pending.js +52 -3
- package/dist/sessions/pending.js.map +1 -1
- package/dist/sessions/service.d.ts +18 -3
- package/dist/sessions/service.js +115 -62
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.js +1 -1
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/state-db.d.ts +5 -0
- package/dist/sessions/state-db.js +34 -0
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/streams.d.ts +4 -1
- package/dist/sessions/streams.js +3 -0
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/tool-display.d.ts +21 -0
- package/dist/sessions/tool-display.js +113 -0
- package/dist/sessions/tool-display.js.map +1 -0
- package/dist/sessions/turn.d.ts +39 -7
- package/dist/sessions/turn.js +288 -98
- package/dist/sessions/turn.js.map +1 -1
- package/dist/sessions/window.d.ts +1 -0
- package/dist/sessions/window.js +1 -1
- package/dist/sessions/window.js.map +1 -1
- package/dist/settings.js +5 -0
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/client.d.ts +1 -1
- package/dist/sidecar/client.js +15 -4
- package/dist/sidecar/client.js.map +1 -1
- package/dist/sidecar/fake.js +3 -2
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/spa.d.ts +2 -0
- package/dist/spa.js +9 -0
- package/dist/spa.js.map +1 -1
- package/dist/test/harness.d.ts +2 -0
- package/dist/test/harness.js +1 -1
- package/dist/test/harness.js.map +1 -1
- package/dist/tools/crons.js +55 -43
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/terminal.d.ts +6 -0
- package/dist/tools/terminal.js +24 -3
- package/dist/tools/terminal.js.map +1 -1
- package/dist/tools/update-notifications.d.ts +120 -0
- package/dist/tools/update-notifications.js +387 -0
- package/dist/tools/update-notifications.js.map +1 -0
- package/dist/tools/updates.d.ts +97 -13
- package/dist/tools/updates.js +638 -124
- package/dist/tools/updates.js.map +1 -1
- package/package.json +2 -2
- package/sidecar/agent_dependency.json +4 -3
- package/sidecar/scripts/replay_sidecar.py +17 -0
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/home.py +51 -19
- package/sidecar/talaria_sidecar/methods/chat.py +113 -4
- package/sidecar/talaria_sidecar/methods/config.py +5 -3
- package/sidecar/talaria_sidecar/runtime.py +3 -9
- package/static/dist/FILES.txt +115 -116
- package/static/dist/assets/AppShell-m4w420jl.js +1 -0
- package/static/dist/assets/ChatPage-cuqcnisv.js +20 -0
- package/static/dist/assets/HubRoute-hqgqtm35.js +2 -0
- package/static/dist/assets/{Markdown-bt9bqd6a.js → Markdown-j2hlu30v.js} +7 -7
- package/static/dist/assets/RightPanel-oid5q557.js +1 -0
- package/static/dist/assets/Select-ot2zr0il.js +1 -0
- package/static/dist/assets/SessionListPanel-o3sgjnrq.js +1 -0
- package/static/dist/assets/SettingsLayout-b0idn649.js +1 -0
- package/static/dist/assets/States-htz1oee5.js +1 -0
- package/static/dist/assets/Toaster-h49pk1hy.js +1 -0
- package/static/dist/assets/_app-h7eaezs7.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-h8oaqzsj.js +1 -0
- package/static/dist/assets/_app.index-xinao3xh.js +1 -0
- package/static/dist/assets/_app.insights-cxplvhkm.js +1 -0
- package/static/dist/assets/_app.kanban-hhli8h0h.js +1 -0
- package/static/dist/assets/_app.logs-f6srwjfl.js +1 -0
- package/static/dist/assets/_app.memory-lntcea85.js +1 -0
- package/static/dist/assets/_app.profiles-lftyp6of.js +1 -0
- package/static/dist/assets/{_app.session._sessionId-kevi4qd2.js → _app.session._sessionId-hhpcqih4.js} +1 -1
- package/static/dist/assets/_app.settings-rs93zpvw.js +1 -0
- package/static/dist/assets/_app.settings._section-nafqsbwm.js +1 -0
- package/static/dist/assets/_app.skills-jzoi1ivd.js +1 -0
- package/static/dist/assets/_app.tasks-ijphsw56.js +2 -0
- package/static/dist/assets/_app.todos-emyh8inv.js +1 -0
- package/static/dist/assets/_app.workspaces-fwr1cum8.js +1 -0
- package/static/dist/assets/{abnfDiagram-VCTEODGH-hvrr25lb.js → abnfDiagram-VCTEODGH-egykbz8h.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-l6y92mbn.js +1 -0
- package/static/dist/assets/{architectureDiagram-5GKGNRK7-b3r0z8sq.js → architectureDiagram-5GKGNRK7-b2e0wk3y.js} +1 -1
- package/static/dist/assets/{blockDiagram-I7D4REHJ-hd3gw0cj.js → blockDiagram-I7D4REHJ-i3cq67dn.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-jlmbjiji.js → c4Diagram-7LVT6UL2-lg1p1s7a.js} +1 -1
- package/static/dist/assets/channel-gq8cwu71.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-oydbpsin.js → chunk-4HAMMTFA-i0s1s7zi.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-j633otj1.js → chunk-75Z2AOVW-kwinpapo.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-ods2l027.js → chunk-DU6HZSFF-hb8qrbc3.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-ln4n2cwt.js → chunk-F27PBJKO-dy2tqtcs.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-fpz133eh.js → chunk-GMAD6QVW-fqox5yvt.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-abs9ixiy.js → chunk-GVQU2GXP-bo3x6ze4.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-j9vukdy1.js → chunk-IMKFNOWR-nxs6rrcq.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-cfyw87r3.js → chunk-L3NEJ4N5-f9yeq1fi.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-baja78wr.js → chunk-OSK3NFVY-c7df44qv.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-g66xby8h.js → chunk-P2QGCYS3-eyjzf5o5.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-osqu864t.js → chunk-POPQ4Y6H-iy3hp9rc.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-egejasv1.js → chunk-PWAF6VOD-co2yoefz.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-l014h8zz.js → chunk-SHT3W25Y-obzqmn9k.js} +1 -1
- package/static/dist/assets/{chunk-SVP7TREG-n3z10bp3.js → chunk-SVP7TREG-hqwdo6vt.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-bzozkjc0.js → chunk-TICWLB2K-l8t1mdfd.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-fg9sc5r8.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-fg9sc5r8.js +1 -0
- package/static/dist/assets/{copied-cjsttec1.js → copied-hurn8vn4.js} +1 -1
- package/static/dist/assets/{cynefin-OW5HDTMX-elpt7h1j.js → cynefin-OW5HDTMX-ngx2ihay.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-5mzl5pi2.js → cynefinDiagram-5FMLGOSQ-fiyooys3.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-ihwlhmfl.js → dagre-GXQ25YYZ-fctryel6.js} +1 -1
- package/static/dist/assets/{diagram-S7CK7UJ4-4z90agaz.js → diagram-S7CK7UJ4-m27jopok.js} +1 -1
- package/static/dist/assets/{diagram-UQ7AKVKN-eifw0lg7.js → diagram-UQ7AKVKN-ojgkbmp4.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-ksh3sjqv.js → diagram-VSXAHHWV-gfafpgyj.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-ett72f71.js → diagram-VX7I27RA-daobicg4.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-l8scp8nu.js → diagram-Z3DM3KII-mi475zvk.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-f0pxcmit.js → ebnfDiagram-PWID7BFC-daf4zvsy.js} +1 -1
- package/static/dist/assets/endpoints-cyjhnrbn.js +64 -0
- package/static/dist/assets/{erDiagram-RLTQ6QDP-f47m5xh0.js → erDiagram-RLTQ6QDP-gxfhxvfp.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-manga0bq.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-bpt13uny.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-bmktjdi0.js → ganttDiagram-EL5Y4UJY-k3208e0p.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-j2ueg258.js → gitGraph-4MIJSDKK-gjuhj4zk.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-ms6586v9.js → gitGraphDiagram-WWUBYQGX-jglxvux1.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-ev52d2si.js → highlighted-body-KPVGNVTW-gh24xc9c.js} +1 -1
- package/static/dist/assets/index-gsg78cb4.css +2 -0
- package/static/dist/assets/{index-hywfjw88.js → index-jb47los5.js} +4 -4
- package/static/dist/assets/{info-A6RAGUB7-j717vyt7.js → info-A6RAGUB7-huf0xaoq.js} +1 -1
- package/static/dist/assets/{infoDiagram-27XIBGKW-dsbpib36.js → infoDiagram-27XIBGKW-jk3n96ix.js} +1 -1
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-n0sz3i2d.js → ishikawaDiagram-5VMMS53U-o95uo5dx.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-mcxz1mme.js → journeyDiagram-3NMN7TZE-h5ye2l70.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-n6hq2lyc.js → kanban-definition-UXKFOSKX-lgrpk5yi.js} +1 -1
- package/static/dist/assets/{lazyRouteComponent-faquioun.js → lazyRouteComponent-owywngyt.js} +1 -1
- package/static/dist/assets/{line-h5xq20s4.js → line-cihmc0pn.js} +1 -1
- package/static/dist/assets/login-g063apx6.js +1 -0
- package/static/dist/assets/mermaid-HWGCJPDP-okd1mnvj.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-n9cuu5ue.js → mermaid-parser.core-d1609aga.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-gta3u7z4.js → mindmap-definition-YA3MSWOX-lbvtir31.js} +1 -1
- package/static/dist/assets/onboarding-ngw0x0pr.js +1 -0
- package/static/dist/assets/{packet-AYTQ26CC-bpzuq5n6.js → packet-AYTQ26CC-o4cp5z3k.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-juye13e5.js → pegDiagram-XKGWAZYB-e8xqu1qj.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-odhb8buq.js → pie-WAS4IAKB-hm9icuov.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-mgb14ksh.js → pieDiagram-E7YTZNPT-hj96x7hn.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-cg36naog.js → quadrantDiagram-AXDQQJYC-80utbxhm.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-lgzfpnef.js → radar-RG4KPBEZ-k39b6100.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-gmglc3ua.js → railroad-74A4TZTK-ewyqz67j.js} +1 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-dx2q0evz.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-l8xt49t5.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-kuxha9yz.js +1 -0
- package/static/dist/assets/{railroadDiagram-O6MQD6OU-cmxwjt73.js → railroadDiagram-O6MQD6OU-iwv9dby8.js} +1 -1
- package/static/dist/assets/{refresh-cw-mf192q3f.js → refresh-cw-hjzomwlo.js} +1 -1
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-ir0s2mek.js → requirementDiagram-BXWQKSXE-cdgh5jha.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-jo7jcdq0.js → sankeyDiagram-P5KCCOFB-dbu6p97m.js} +1 -1
- package/static/dist/assets/{saved-g777hp1t.js → saved-feqhycco.js} +1 -1
- package/static/dist/assets/{search-i2kfogyx.js → search-n3jdc20p.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-n0pf6xk5.js → sequenceDiagram-WJ2MYXX4-b0wchifg.js} +1 -1
- package/static/dist/assets/{settings_section_extensions_title-hgvh507l.js → settings_section_extensions_title-mtyviexd.js} +1 -1
- package/static/dist/assets/share._token-cwov8uqh.js +2 -0
- package/static/dist/assets/sliders-horizontal-i1lseyg0.js +1 -0
- package/static/dist/assets/{stateDiagram-D77RDMKH-olbrwyv9.js → stateDiagram-D77RDMKH-mb4b38xh.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-cn1fnqrg.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-od14zrw6.js → swimlanes-42K2YHIH-ofrpfwj0.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-d652ummv.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-l0qokmnb.js → timeline-definition-24CTP7MA-hlw0jg6o.js} +1 -1
- package/static/dist/assets/todoStore-mfy9lpio.js +1 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-hma3ip8m.js → treeView-Q6P3EWNA-d93wr19c.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-bghjng5m.js → treemap-WGGIJYW6-g7ezdedz.js} +1 -1
- package/static/dist/assets/{untitled-nfaw0q7m.js → untitled-mqxhd1eh.js} +1 -1
- package/static/dist/assets/{useForm-k7fj2zsr.js → useForm-hh33yrwa.js} +1 -1
- package/static/dist/assets/useLocale-cr30vl7r.js +1 -0
- package/static/dist/assets/{vennDiagram-4TSXK5OY-bo97zf3z.js → vennDiagram-4TSXK5OY-m5vgeba5.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-pbjl6jav.js → wardley-WFR3VGLG-gpao9bxv.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-bmy9i09l.js → wardleyDiagram-VM6X3IG4-g2yzwshm.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-eercu0mc.js → xychartDiagram-S5SC5T6Z-itakhpic.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +114 -152
- package/static/dist/assets/AppShell-gs0grlbs.js +0 -1
- package/static/dist/assets/ChatPage-gi1xlz52.js +0 -18
- package/static/dist/assets/HubRoute-qs9vzuh0.js +0 -2
- package/static/dist/assets/RightPanel-dn19xu42.js +0 -1
- package/static/dist/assets/Select-y7wtf85g.js +0 -1
- package/static/dist/assets/SessionListPanel-igwdj9xr.js +0 -1
- package/static/dist/assets/SettingsLayout-n6mu0ghg.js +0 -1
- package/static/dist/assets/States-oil2issf.js +0 -1
- package/static/dist/assets/Toaster-jtn59pjm.js +0 -1
- package/static/dist/assets/_app-k4jrkgfa.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-mmf1mepm.js +0 -1
- package/static/dist/assets/_app.index-mb41nf00.js +0 -1
- package/static/dist/assets/_app.insights-mz5cep8m.js +0 -1
- package/static/dist/assets/_app.kanban-ocgw506i.js +0 -1
- package/static/dist/assets/_app.logs-lstmoju6.js +0 -1
- package/static/dist/assets/_app.memory-dishj9ra.js +0 -1
- package/static/dist/assets/_app.profiles-dynpvsio.js +0 -1
- package/static/dist/assets/_app.settings-c2czm9v4.js +0 -1
- package/static/dist/assets/_app.settings._section-exwflld7.js +0 -1
- package/static/dist/assets/_app.skills-j5jh2nug.js +0 -1
- package/static/dist/assets/_app.tasks-b99d98fo.js +0 -2
- package/static/dist/assets/_app.todos-ma8urvn3.js +0 -1
- package/static/dist/assets/_app.workspaces-l86cxeod.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-mqft9w2p.js +0 -1
- package/static/dist/assets/channel-ix8cxdld.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-c210y3il.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-c210y3il.js +0 -1
- package/static/dist/assets/endpoints-ipnv1hd4.js +0 -64
- package/static/dist/assets/eventmodeling-NTZA5JFV-d9b5a0ia.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-kfxxsyrk.js +0 -1
- package/static/dist/assets/index-bz7g7rhx.css +0 -2
- package/static/dist/assets/login-mvjys1ol.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-gmnkgf1n.js +0 -1
- package/static/dist/assets/onboarding-l6quy6gz.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-5mjl5wpv.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-bfram8v8.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-nwfczn88.js +0 -1
- package/static/dist/assets/share._token-il3y6js2.js +0 -2
- package/static/dist/assets/sliders-horizontal-kd99ffvl.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-dnzlmdpu.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ck0eqqdp.js +0 -8
- package/static/dist/assets/todoStore-la6uyqzj.js +0 -1
- package/static/dist/assets/trash-bxz1k9cw.js +0 -1
- package/static/dist/assets/useLocale-evhacmv2.js +0 -1
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import type { SessionEventBus } from './events.js';
|
|
2
|
+
import type { ClarifyAnswers } from '@maudecode/talaria-web-contracts';
|
|
2
3
|
export interface PendingSubscriber {
|
|
3
4
|
queue: Record<string, unknown>[];
|
|
4
5
|
wake: (() => void) | null;
|
|
5
6
|
closed: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare const CLARIFY_DEFAULT_TIMEOUT_SECONDS = 3600;
|
|
8
|
-
export declare const CLARIFY_MAX_QUESTIONS = 5;
|
|
9
9
|
export declare const CLARIFY_MAX_CHOICES = 4;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Python `clarify.normalize_questions`, without its question cap: the Agent enforces its own batch limit before it
|
|
12
|
+
* parks, so any non-empty list it sends stays a batch (dropping the shape would leave it waiting on an envelope).
|
|
13
|
+
*/
|
|
11
14
|
export declare function normalizeQuestions(questions: unknown): Record<string, unknown>[] | null;
|
|
15
|
+
/**
|
|
16
|
+
* The reply string the parked Agent callback expects for keyed step answers: the batch envelope
|
|
17
|
+
* (`clarify_tool._run_batch`) or the single answer (a JSON array for multi-select). Null when an answer
|
|
18
|
+
* is missing, empty, keyed to an unknown step, or a list for a single-select step.
|
|
19
|
+
*/
|
|
20
|
+
export declare function clarifyReply(entry: Record<string, unknown>, answers: ClarifyAnswers): string | null;
|
|
12
21
|
export declare class PendingPrompts {
|
|
13
22
|
private readonly events;
|
|
14
23
|
private readonly now;
|
package/dist/sessions/pending.js
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
import { randomUUID } from 'node:crypto';
|
|
8
8
|
import { str } from '../util.js';
|
|
9
9
|
export const CLARIFY_DEFAULT_TIMEOUT_SECONDS = 3600;
|
|
10
|
-
export const CLARIFY_MAX_QUESTIONS = 5;
|
|
11
10
|
export const CLARIFY_MAX_CHOICES = 4;
|
|
12
11
|
function choiceText(choice) {
|
|
13
12
|
if (typeof choice === 'string')
|
|
@@ -28,9 +27,12 @@ function normalizedChoices(raw) {
|
|
|
28
27
|
const choices = raw.map(choiceText).filter(Boolean).slice(0, CLARIFY_MAX_CHOICES);
|
|
29
28
|
return choices.length ? choices : null;
|
|
30
29
|
}
|
|
31
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Python `clarify.normalize_questions`, without its question cap: the Agent enforces its own batch limit before it
|
|
32
|
+
* parks, so any non-empty list it sends stays a batch (dropping the shape would leave it waiting on an envelope).
|
|
33
|
+
*/
|
|
32
34
|
export function normalizeQuestions(questions) {
|
|
33
|
-
if (!Array.isArray(questions) || !questions.length
|
|
35
|
+
if (!Array.isArray(questions) || !questions.length)
|
|
34
36
|
return null;
|
|
35
37
|
return questions.map((raw, index) => {
|
|
36
38
|
let item;
|
|
@@ -48,6 +50,46 @@ export function normalizeQuestions(questions) {
|
|
|
48
50
|
return { qid: str(item.qid).trim() || `q${String(index)}`, id: str(item.id).trim() || null, question: text, choices, choices_offered: offered ?? choices, multi_select: Boolean(item.multi_select) && Boolean(choices) };
|
|
49
51
|
});
|
|
50
52
|
}
|
|
53
|
+
/** The ordered questions a client asks, one per step; a single-question prompt is one `q0` step. */
|
|
54
|
+
function clarifySteps(data) {
|
|
55
|
+
const batch = data.questions;
|
|
56
|
+
if (batch)
|
|
57
|
+
return batch.map((q) => ({ qid: str(q.qid), question: str(q.question), choices: q.choices ?? [], multi_select: Boolean(q.multi_select) }));
|
|
58
|
+
const choices = normalizedChoices(data.choices_offered) ?? normalizedChoices(data.choices) ?? [];
|
|
59
|
+
return [{ qid: 'q0', question: str(data.question).trim(), choices, multi_select: Boolean(data.multi_select) && choices.length > 0 }];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The reply string the parked Agent callback expects for keyed step answers: the batch envelope
|
|
63
|
+
* (`clarify_tool._run_batch`) or the single answer (a JSON array for multi-select). Null when an answer
|
|
64
|
+
* is missing, empty, keyed to an unknown step, or a list for a single-select step.
|
|
65
|
+
*/
|
|
66
|
+
export function clarifyReply(entry, answers) {
|
|
67
|
+
const steps = entry.steps;
|
|
68
|
+
if (Object.keys(answers).some((qid) => !steps.some((step) => step.qid === qid)))
|
|
69
|
+
return null;
|
|
70
|
+
const cleaned = {};
|
|
71
|
+
for (const step of steps) {
|
|
72
|
+
const raw = answers[step.qid];
|
|
73
|
+
if (Array.isArray(raw)) {
|
|
74
|
+
if (!step.multi_select)
|
|
75
|
+
return null;
|
|
76
|
+
const list = raw.map((v) => v.trim()).filter(Boolean);
|
|
77
|
+
if (!list.length)
|
|
78
|
+
return null;
|
|
79
|
+
cleaned[step.qid] = list;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const text = str(raw).trim();
|
|
83
|
+
if (!text)
|
|
84
|
+
return null;
|
|
85
|
+
cleaned[step.qid] = step.multi_select ? [text] : text;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (entry.questions)
|
|
89
|
+
return JSON.stringify({ answers: cleaned });
|
|
90
|
+
const only = cleaned.q0;
|
|
91
|
+
return Array.isArray(only) ? JSON.stringify(only) : str(only);
|
|
92
|
+
}
|
|
51
93
|
function withTimeoutMetadata(data, now) {
|
|
52
94
|
const item = { ...data };
|
|
53
95
|
const requestedAt = Number(item.requested_at) || now;
|
|
@@ -174,6 +216,13 @@ export class PendingPrompts {
|
|
|
174
216
|
// ── clarify ──
|
|
175
217
|
submitClarify(sid, data) {
|
|
176
218
|
const item = withTimeoutMetadata(data, this.now());
|
|
219
|
+
// The server owns the batch shape: the normalized list (iOS reads it) and the steps every client renders.
|
|
220
|
+
const batch = normalizeQuestions(item.questions);
|
|
221
|
+
if (batch)
|
|
222
|
+
item.questions = batch;
|
|
223
|
+
else
|
|
224
|
+
delete item.questions;
|
|
225
|
+
item.steps = clarifySteps(item);
|
|
177
226
|
const q = this.queue(this.clarifies, sid);
|
|
178
227
|
const last = q.entries[q.entries.length - 1];
|
|
179
228
|
let entry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/sessions/pending.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/sessions/pending.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,8 @@ export interface SessionServiceDeps {
|
|
|
34
34
|
runtime: RuntimeOverlay & {
|
|
35
35
|
/** A live worker stream that must block deletion / duplicate turns for this session. */
|
|
36
36
|
activeRunStream: (sid: string) => string | null;
|
|
37
|
+
/** A live run whose journal missed a frame, so a replay cannot restore its whole output. */
|
|
38
|
+
journalDegraded: (streamId: string) => boolean;
|
|
37
39
|
evictAgent: (sid: string) => void;
|
|
38
40
|
closeTerminal: (sid: string) => void;
|
|
39
41
|
/** Python `delete_cli_session`: remove the session's rows from the profile's state.db; resolves false on failure. */
|
|
@@ -80,6 +82,10 @@ export declare class SessionService {
|
|
|
80
82
|
private isReadOnlyImport;
|
|
81
83
|
/** Python `_session_is_subagent_view_only`: a delegated child by any signal — the persisted sidecar or the state.db row. */
|
|
82
84
|
isSubagentViewOnly(sid: string): boolean;
|
|
85
|
+
/** TAL-358: batched `sessions.source` owners from the active profile's state.db. */
|
|
86
|
+
readonly stateDbSources: (ids: string[]) => Map<string, string> | null;
|
|
87
|
+
/** The persisted flag folded with the state.db owner lock (TAL-358): the one read-only rule for mutation gates and the wire. */
|
|
88
|
+
isReadOnly(s: Session): boolean;
|
|
83
89
|
/** Full session for mutation, refusing read-only imports (Python `_get_or_materialize_session`). */
|
|
84
90
|
getForMutation(sid: string): Session;
|
|
85
91
|
private get404;
|
|
@@ -93,8 +99,6 @@ export declare class SessionService {
|
|
|
93
99
|
mergedTranscript(s: Session, local?: Message[]): Message[];
|
|
94
100
|
/** Python `_lookup_cli_session_metadata`: the sidebar row for a state.db session in the active profile. */
|
|
95
101
|
private lookupCliMeta;
|
|
96
|
-
/** Python `_is_claimable_cli_source`: a denylist of foreign families that own their sessions. */
|
|
97
|
-
private claimableCliSource;
|
|
98
102
|
/** Python `_session_index_marks_was_webui`: an index row that once owned a WebUI sidecar (self-heal 404). */
|
|
99
103
|
private indexMarksWasWebui;
|
|
100
104
|
/**
|
|
@@ -110,6 +114,8 @@ export declare class SessionService {
|
|
|
110
114
|
private rejectSubagent;
|
|
111
115
|
/** `compact()` plus messages, redacted for the wire (Python `_public_session_projection`). */
|
|
112
116
|
publicSession(s: Session, withMessages?: boolean): Record<string, unknown>;
|
|
117
|
+
/** `compact()` with the wire streaming/read-only flags (TAL-312), for replies that return the session row. */
|
|
118
|
+
wireRow(s: Session): Record<string, unknown>;
|
|
113
119
|
/** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
|
|
114
120
|
publicSessionDocument(s: Session): Record<string, unknown>;
|
|
115
121
|
private loadRevision;
|
|
@@ -120,11 +126,20 @@ export declare class SessionService {
|
|
|
120
126
|
msg_before?: string | null | undefined;
|
|
121
127
|
resolve_model?: string | null | undefined;
|
|
122
128
|
}): Record<string, unknown>;
|
|
129
|
+
/**
|
|
130
|
+
* TAL-316: the active run whose journal can replay its output from the start. The detail then leaves that output to the
|
|
131
|
+
* replay; with no active run, no identifiable prompt, or no complete journal, it returns the persisted transcript unchanged.
|
|
132
|
+
*/
|
|
133
|
+
private journaledActiveTurn;
|
|
134
|
+
/** TAL-368: the active run's prompt, which the detail shows until settlement persists it; null when idle or promptless. */
|
|
135
|
+
private pendingTurn;
|
|
136
|
+
/** A session without a sidecar, synthesized from state.db for this profile; 404/409 like the detail. */
|
|
137
|
+
private foreignSession;
|
|
123
138
|
/** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
|
|
124
139
|
private foreignSessionDetail;
|
|
125
140
|
/** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`, no journal recovery). */
|
|
126
141
|
clearStaleStreamState(session: Session): boolean;
|
|
127
|
-
list(params: Omit<ListParams, 'activeProfile' | 'isolatedProfileMode' | 'profilesMatch' | 'cliRows' | 'gatewayIdentity'>): {
|
|
142
|
+
list(params: Omit<ListParams, 'activeProfile' | 'isolatedProfileMode' | 'profilesMatch' | 'cliRows' | 'gatewayIdentity' | 'stateDbSources'>): {
|
|
128
143
|
body: ListResponse;
|
|
129
144
|
etag: string;
|
|
130
145
|
};
|
package/dist/sessions/service.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { str } from '../util.js';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { rmSync } from 'node:fs';
|
|
4
|
-
import { copyJson, redactSessionData, stripPublicInternalFields } from '../redact.js';
|
|
4
|
+
import { buildActiveTurnToken, copyJson, redactSessionData, redactValue, stripPublicInternalFields, withSceneToolDisplay } from '../redact.js';
|
|
5
5
|
import { DraftVersionConflict, normalizeDraftVersion } from './drafts.js';
|
|
6
|
-
import { allSessions, buildSessionListPayload, isMessagingSessionRecord, lineageRootId, mergeCliSidebarMetadata, sessionListResponse, sessionSearchMessageText, sessionSearchPreview } from './list.js';
|
|
7
|
-
import { anchorSceneIntOrNull, hydrateAnchorActivityScenes, normalizeAnchorSceneMessageRef, readAnchorSceneRows, storeAnchorScene } from './anchor.js';
|
|
6
|
+
import { allSessions, buildSessionListPayload, isClaimableCliSource, isMessagingSessionRecord, withOwnerLocks, withSessionWireFlags, lineageRootId, mergeCliSidebarMetadata, sessionListResponse, sessionSearchMessageText, sessionSearchPreview } from './list.js';
|
|
7
|
+
import { anchorSceneIntOrNull, hydrateAnchorActivityScenes, normalizeAnchorSceneMessageRef, readAnchorSceneRows, storeAnchorScene, withTurnIds } from './anchor.js';
|
|
8
8
|
import { isSafeSessionId, lastMessageTimestamp, Session, titleFrom } from './session.js';
|
|
9
9
|
import { SessionBusy, SessionNotFound, statSignature } from './store.js';
|
|
10
10
|
import { attachTodoState } from './todo.js';
|
|
11
|
-
import { stateDbSessionMessages, stateDbSessionRow } from './state-db.js';
|
|
12
|
-
import { mergeSessionMessagesAppendOnly } from './merge.js';
|
|
11
|
+
import { stateDbSessionMessages, stateDbSessionRow, stateDbSessionSources } from './state-db.js';
|
|
12
|
+
import { mergeSessionMessagesAppendOnly, pendingUserRow, withPendingUserTurn, withToolCallOutcomes, withoutRunningTurnOutput } from './merge.js';
|
|
13
13
|
import { messagesForLimitedPayload, messageWindowForDisplay, MAX_MSG_LIMIT, parseMsgLimit, toolCallsForMessageWindow } from './window.js';
|
|
14
14
|
import { redactText } from '../redact.js';
|
|
15
15
|
import { buildShareSnapshot } from './shares.js';
|
|
@@ -62,7 +62,7 @@ export class SessionService {
|
|
|
62
62
|
isReadOnlyImport(sid) {
|
|
63
63
|
try {
|
|
64
64
|
const s = this.store.get(sid, { metadataOnly: true });
|
|
65
|
-
if (s
|
|
65
|
+
if (this.isReadOnly(s))
|
|
66
66
|
return true;
|
|
67
67
|
}
|
|
68
68
|
catch {
|
|
@@ -85,11 +85,20 @@ export class SessionService {
|
|
|
85
85
|
const meta = this.lookupCliMeta(sid);
|
|
86
86
|
return meta !== null && str(meta.source_tag || meta.raw_source || meta.source).trim().toLowerCase() === 'subagent';
|
|
87
87
|
}
|
|
88
|
+
/** TAL-358: batched `sessions.source` owners from the active profile's state.db. */
|
|
89
|
+
stateDbSources = (ids) => stateDbSessionSources(join(this.deps.profileHome(this.deps.activeProfile()), 'state.db'), ids);
|
|
90
|
+
/** The persisted flag folded with the state.db owner lock (TAL-358): the one read-only rule for mutation gates and the wire. */
|
|
91
|
+
isReadOnly(s) {
|
|
92
|
+
if (s.read_only)
|
|
93
|
+
return true;
|
|
94
|
+
const [row] = withOwnerLocks([{ session_id: s.session_id, source_tag: s.source_tag, raw_source: s.raw_source, session_source: s.session_source }], this.stateDbSources);
|
|
95
|
+
return Boolean(row?.read_only);
|
|
96
|
+
}
|
|
88
97
|
/** Full session for mutation, refusing read-only imports (Python `_get_or_materialize_session`). */
|
|
89
98
|
getForMutation(sid) {
|
|
90
99
|
let s = this.get404(sid);
|
|
91
100
|
s = this.store.ensureFull(sid, s);
|
|
92
|
-
if (s
|
|
101
|
+
if (this.isReadOnly(s))
|
|
93
102
|
throw new HttpFailure(403, 'Read-only imported sessions cannot be modified from WebUI');
|
|
94
103
|
if (str(s.source_tag || s.raw_source).trim().toLowerCase() === 'subagent')
|
|
95
104
|
throw new HttpFailure(403, 'Read-only subagent child session');
|
|
@@ -141,23 +150,6 @@ export class SessionService {
|
|
|
141
150
|
return null;
|
|
142
151
|
}
|
|
143
152
|
}
|
|
144
|
-
/** Python `_is_claimable_cli_source`: a denylist of foreign families that own their sessions. */
|
|
145
|
-
claimableCliSource(meta, stateDbSource) {
|
|
146
|
-
if (meta.read_only)
|
|
147
|
-
return false;
|
|
148
|
-
const sessionSource = str(meta.session_source).trim().toLowerCase();
|
|
149
|
-
if (['messaging', 'external_agent'].includes(sessionSource))
|
|
150
|
-
return false;
|
|
151
|
-
const tag = str(meta.source_tag || meta.raw_source).trim().toLowerCase();
|
|
152
|
-
const refused = new Set(['claude_code', 'cron', 'external_agent', 'gateway', 'messaging', 'subagent', 'unknown']);
|
|
153
|
-
if (tag && refused.has(tag))
|
|
154
|
-
return false;
|
|
155
|
-
if (isMessagingSessionRecord(meta))
|
|
156
|
-
return false;
|
|
157
|
-
if (!tag && stateDbSource && refused.has(stateDbSource.trim().toLowerCase()))
|
|
158
|
-
return false;
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
153
|
/** Python `_session_index_marks_was_webui`: an index row that once owned a WebUI sidecar (self-heal 404). */
|
|
162
154
|
indexMarksWasWebui(sid) {
|
|
163
155
|
let entries;
|
|
@@ -214,7 +206,7 @@ export class SessionService {
|
|
|
214
206
|
if (!meta.updated_at && (row.ended_at || row.started_at))
|
|
215
207
|
meta.updated_at = row.ended_at || row.started_at;
|
|
216
208
|
}
|
|
217
|
-
const claimable =
|
|
209
|
+
const claimable = isClaimableCliSource(meta, stateDbSource);
|
|
218
210
|
const workspace = str(meta.workspace || meta.cwd).trim() || this.deps.workspaces.lastWorkspace(profile);
|
|
219
211
|
const defaults = this.store.deps.defaults(profile);
|
|
220
212
|
const session = new Session({
|
|
@@ -243,11 +235,16 @@ export class SessionService {
|
|
|
243
235
|
}
|
|
244
236
|
/** `compact()` plus messages, redacted for the wire (Python `_public_session_projection`). */
|
|
245
237
|
publicSession(s, withMessages = true) {
|
|
246
|
-
const payload =
|
|
238
|
+
const payload = this.wireRow(s);
|
|
239
|
+
// Mutation replies replace a client's transcript, so they carry the same server-built scenes as the detail.
|
|
247
240
|
if (withMessages)
|
|
248
|
-
payload.messages = s.messages;
|
|
241
|
+
payload.messages = hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(s.messages), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id });
|
|
249
242
|
return redactSessionData(payload, this.deps.redactEnabled());
|
|
250
243
|
}
|
|
244
|
+
/** `compact()` with the wire streaming/read-only flags (TAL-312), for replies that return the session row. */
|
|
245
|
+
wireRow(s) {
|
|
246
|
+
return withSessionWireFlags({ ...s.compact(), read_only: this.isReadOnly(s) }, this.deps.runtime.activeStreamIds);
|
|
247
|
+
}
|
|
251
248
|
/** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
|
|
252
249
|
publicSessionDocument(s) {
|
|
253
250
|
return redactSessionData(s.toDocument(), this.deps.redactEnabled());
|
|
@@ -278,7 +275,15 @@ export class SessionService {
|
|
|
278
275
|
throw new HttpFailure(404, 'Session not found');
|
|
279
276
|
}
|
|
280
277
|
this.clearStaleStreamState(s);
|
|
281
|
-
const
|
|
278
|
+
const journaled = loadMessages ? this.journaledActiveTurn(s) : null;
|
|
279
|
+
let transcript = loadMessages ? this.mergedTranscript(s) : [];
|
|
280
|
+
const pending = loadMessages ? this.pendingTurn(s) : null;
|
|
281
|
+
if (pending)
|
|
282
|
+
transcript = withPendingUserTurn(transcript, pending);
|
|
283
|
+
if (journaled)
|
|
284
|
+
transcript = withoutRunningTurnOutput(transcript, { ...journaled, localCount: s.messages.length });
|
|
285
|
+
// Turn ids, tool outcomes and scenes are computed over the full transcript, so every window reports the same values.
|
|
286
|
+
const all = loadMessages ? hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(transcript), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, clipToolResults: msgLimit !== null }) : [];
|
|
282
287
|
let truncated = [];
|
|
283
288
|
let offset = 0;
|
|
284
289
|
let summaryCount = null;
|
|
@@ -286,9 +291,16 @@ export class SessionService {
|
|
|
286
291
|
if (loadMessages) {
|
|
287
292
|
;
|
|
288
293
|
[truncated, offset] = messageWindowForDisplay(all, msgLimit, msgBefore);
|
|
294
|
+
// TAL-368: a tail window starts no later than the running turn's prompt, so a turn whose output stays in the
|
|
295
|
+
// transcript (no journal to replay it) keeps its prompt; older pages end before it, so it is never sent twice.
|
|
296
|
+
// ponytail: the window grows with that turn's persisted rows; clip the turn instead if degraded runs get long.
|
|
297
|
+
const prompt = pending && msgBefore === null ? all.findIndex((m) => isDict(m) && m.role === 'user' && m._active_turn_token === pending.activeTurnToken) : -1;
|
|
298
|
+
if (prompt >= 0 && prompt < offset) {
|
|
299
|
+
truncated = all.slice(prompt, offset + truncated.length);
|
|
300
|
+
offset = prompt;
|
|
301
|
+
}
|
|
289
302
|
if (msgLimit !== null)
|
|
290
303
|
truncated = messagesForLimitedPayload(truncated);
|
|
291
|
-
truncated = hydrateAnchorActivityScenes(truncated, s.anchor_activity_scenes, offset);
|
|
292
304
|
}
|
|
293
305
|
else {
|
|
294
306
|
summaryCount = s.metadataMessageCount ?? s.messages.length;
|
|
@@ -309,7 +321,6 @@ export class SessionService {
|
|
|
309
321
|
messages: truncated,
|
|
310
322
|
message_count: mergedCount,
|
|
311
323
|
tool_calls: toolCalls,
|
|
312
|
-
active_stream_id: s.active_stream_id,
|
|
313
324
|
pending_user_message: s.pending_user_message,
|
|
314
325
|
pending_attachments: loadMessages ? s.pending_attachments : [],
|
|
315
326
|
pending_started_at: s.pending_started_at,
|
|
@@ -318,6 +329,8 @@ export class SessionService {
|
|
|
318
329
|
threshold_tokens: Number(s.threshold_tokens ?? 0) || 0,
|
|
319
330
|
last_prompt_tokens: Number(s.last_prompt_tokens ?? 0) || 0,
|
|
320
331
|
};
|
|
332
|
+
if (loadMessages)
|
|
333
|
+
raw.transcript_seq = journaled ? { stream_id: journaled.turnId, seq: 0 } : null;
|
|
321
334
|
if (loadMessages && all.length)
|
|
322
335
|
attachTodoState(raw, all);
|
|
323
336
|
if (mergedLast) {
|
|
@@ -330,14 +343,36 @@ export class SessionService {
|
|
|
330
343
|
raw._msg_limit_max = MAX_MSG_LIMIT;
|
|
331
344
|
const revisionAfter = this.loadRevision(s);
|
|
332
345
|
raw._load_revision = revisionBefore !== null && revisionBefore === revisionAfter ? hashRevision(revisionBefore) : `unstable-${randomUUID().replace(/-/g, '')}`;
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
raw.read_only = true;
|
|
336
|
-
}
|
|
346
|
+
raw.read_only = this.isReadOnly(s);
|
|
347
|
+
withSessionWireFlags(raw, activeStreamIds);
|
|
337
348
|
return redactSessionData(raw, this.deps.redactEnabled());
|
|
338
349
|
}
|
|
339
|
-
/**
|
|
340
|
-
|
|
350
|
+
/**
|
|
351
|
+
* TAL-316: the active run whose journal can replay its output from the start. The detail then leaves that output to the
|
|
352
|
+
* replay; with no active run, no identifiable prompt, or no complete journal, it returns the persisted transcript unchanged.
|
|
353
|
+
*/
|
|
354
|
+
journaledActiveTurn(s) {
|
|
355
|
+
const turnId = str(s.active_stream_id).trim();
|
|
356
|
+
const activeTurnToken = buildActiveTurnToken(turnId, s.pending_started_at);
|
|
357
|
+
if (!turnId || !activeTurnToken || this.deps.runtime.journalDegraded(turnId))
|
|
358
|
+
return null;
|
|
359
|
+
const summary = this.deps.journal?.findRunSummary(turnId);
|
|
360
|
+
if (summary?.session_id !== s.session_id || summary.journal_pruned)
|
|
361
|
+
return null;
|
|
362
|
+
return { turnId, startedAt: Number(s.pending_started_at), activeTurnToken };
|
|
363
|
+
}
|
|
364
|
+
/** TAL-368: the active run's prompt, which the detail shows until settlement persists it; null when idle or promptless. */
|
|
365
|
+
pendingTurn(s) {
|
|
366
|
+
const turnId = str(s.active_stream_id).trim();
|
|
367
|
+
const activeTurnToken = buildActiveTurnToken(turnId, s.pending_started_at);
|
|
368
|
+
const text = str(s.pending_user_message);
|
|
369
|
+
if (!turnId || !activeTurnToken || (!text && !s.pending_attachments.length))
|
|
370
|
+
return null;
|
|
371
|
+
const startedAt = Number(s.pending_started_at);
|
|
372
|
+
return { turnId, startedAt, activeTurnToken, localCount: s.messages.length, prompt: pendingUserRow(text, s.pending_attachments, startedAt, s.pending_user_source || 'webui', turnId) };
|
|
373
|
+
}
|
|
374
|
+
/** A session without a sidecar, synthesized from state.db for this profile; 404/409 like the detail. */
|
|
375
|
+
foreignSession(sid) {
|
|
341
376
|
const meta = this.lookupCliMeta(sid);
|
|
342
377
|
const profile = str(meta?.profile) || null;
|
|
343
378
|
const profileAgnostic = str(meta?.source_tag || meta?.raw_source).trim().toLowerCase() === 'claude_code';
|
|
@@ -349,17 +384,23 @@ export class SessionService {
|
|
|
349
384
|
const { session: synth, reason } = this.claimOrSynthesizeCliSession(sid, meta);
|
|
350
385
|
if (!synth || reason === 'was_webui')
|
|
351
386
|
throw new HttpFailure(404, 'Session not found');
|
|
352
|
-
|
|
387
|
+
return { synth, meta };
|
|
388
|
+
}
|
|
389
|
+
/** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
|
|
390
|
+
foreignSessionDetail(sid) {
|
|
391
|
+
const { synth, meta } = this.foreignSession(sid);
|
|
392
|
+
// The same turn projection as a WebUI session: turn ids, tool outcomes, then each completed turn's scene.
|
|
393
|
+
const msgs = hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(synth.messages), [], null), {});
|
|
353
394
|
const lastTs = Number(msgs[msgs.length - 1]?.timestamp ?? 0) || 0;
|
|
354
395
|
const sess = {
|
|
355
396
|
session_id: synth.session_id, title: synth.title, workspace: synth.workspace, model: synth.model, message_count: msgs.length,
|
|
356
397
|
created_at: synth.created_at, updated_at: synth.updated_at, last_message_at: meta?.last_message_at || meta?.updated_at || lastTs,
|
|
357
398
|
pinned: synth.pinned, archived: synth.archived, project_id: synth.project_id ?? null, profile: synth.profile,
|
|
358
399
|
is_cli_session: synth.is_cli_session, source_tag: synth.source_tag, raw_source: synth.raw_source, session_source: synth.session_source,
|
|
359
|
-
source_label: synth.source_label, read_only: synth.read_only, messages: msgs, tool_calls: [],
|
|
400
|
+
source_label: synth.source_label, read_only: synth.read_only, can_duplicate: false, messages: msgs, tool_calls: [], transcript_seq: null,
|
|
360
401
|
};
|
|
361
402
|
attachTodoState(sess, msgs);
|
|
362
|
-
const merged = meta ? mergeCliSidebarMetadata(sess, meta) : sess;
|
|
403
|
+
const merged = withSessionWireFlags(meta ? mergeCliSidebarMetadata(sess, meta) : sess, this.deps.runtime.activeStreamIds);
|
|
363
404
|
return redactSessionData(merged, this.deps.redactEnabled());
|
|
364
405
|
}
|
|
365
406
|
/** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`, no journal recovery). */
|
|
@@ -393,10 +434,11 @@ export class SessionService {
|
|
|
393
434
|
// turn and an interruption marker follows it, so a dead stream never silently drops what the user sent.
|
|
394
435
|
const pendingText = str(target.pending_user_message);
|
|
395
436
|
if (pendingText) {
|
|
437
|
+
const turnId = str(target.active_stream_id);
|
|
396
438
|
const startedAt = typeof target.pending_started_at === 'number' && target.pending_started_at > 0 ? target.pending_started_at : this.deps.now();
|
|
397
439
|
const attachments = [...target.pending_attachments];
|
|
398
|
-
target.messages.push({ role: 'user', content: pendingText, timestamp: Math.trunc(startedAt), ...(attachments.length ? { attachments } : {}), _recovered: true, _source: target.pending_user_source ?? 'webui' });
|
|
399
|
-
target.messages.push({ role: 'assistant', content: '**Interrupted:** The reply was interrupted before it could be saved.', timestamp: Math.trunc(this.deps.now()), _error: true });
|
|
440
|
+
target.messages.push({ role: 'user', content: pendingText, timestamp: Math.trunc(startedAt), ...(attachments.length ? { attachments } : {}), _recovered: true, _source: target.pending_user_source ?? 'webui', ...(turnId ? { _turn_id: turnId } : {}) });
|
|
441
|
+
target.messages.push({ role: 'assistant', content: '**Interrupted:** The reply was interrupted before it could be saved.', timestamp: Math.trunc(this.deps.now()), _error: true, ...(turnId ? { _turn_id: turnId } : {}) });
|
|
400
442
|
}
|
|
401
443
|
target.active_stream_id = null;
|
|
402
444
|
target.pending_user_message = null;
|
|
@@ -426,7 +468,7 @@ export class SessionService {
|
|
|
426
468
|
// Python reads every profile's state.db under all_profiles; this port projects the active profile only.
|
|
427
469
|
const cliRows = wantState ? this.deps.cliSessions(activeProfile, { sourceFilter: params.sourceFilter ?? null }) : undefined;
|
|
428
470
|
const gatewayIdentity = loadGatewaySessionIdentityMap(join(this.deps.profileHome(activeProfile), 'sessions', 'sessions.json'));
|
|
429
|
-
const payload = buildSessionListPayload(this.store, { ...params, ...(cliRows ? { cliRows } : {}), gatewayIdentity, activeProfile, isolatedProfileMode: this.deps.isolatedProfileMode(), profilesMatch: this.deps.profilesMatch });
|
|
471
|
+
const payload = buildSessionListPayload(this.store, { ...params, ...(cliRows ? { cliRows } : {}), gatewayIdentity, stateDbSources: this.stateDbSources, activeProfile, isolatedProfileMode: this.deps.isolatedProfileMode(), profilesMatch: this.deps.profilesMatch });
|
|
430
472
|
return sessionListResponse(payload, this.deps.runtime, this.deps.redactEnabled(), this.deps.now());
|
|
431
473
|
}
|
|
432
474
|
search(q, opts) {
|
|
@@ -434,8 +476,10 @@ export class SessionService {
|
|
|
434
476
|
let sessions = allSessions(this.store);
|
|
435
477
|
if (!opts.allProfiles)
|
|
436
478
|
sessions = sessions.filter((r) => this.deps.profilesMatch(str(r.profile) || null, activeProfile));
|
|
479
|
+
sessions = withOwnerLocks(sessions, this.stateDbSources);
|
|
437
480
|
const redact = this.deps.redactEnabled();
|
|
438
481
|
const redactRow = (item) => {
|
|
482
|
+
withSessionWireFlags(item, this.deps.runtime.activeStreamIds);
|
|
439
483
|
if (typeof item.title === 'string')
|
|
440
484
|
item.title = redactText(item.title, redact);
|
|
441
485
|
for (const f of ['display_title', '_state_db_title', 'parent_title'])
|
|
@@ -491,10 +535,10 @@ export class SessionService {
|
|
|
491
535
|
catch {
|
|
492
536
|
hermesHome = '';
|
|
493
537
|
}
|
|
494
|
-
const
|
|
538
|
+
const { is_streaming: streaming, active_stream_id: live, read_only: readOnly } = this.wireRow(full);
|
|
495
539
|
return {
|
|
496
540
|
session_id: full.session_id, title: full.title, model: full.model, profile, hermes_home: hermesHome, workspace: full.workspace, personality: full.personality,
|
|
497
|
-
message_count: full.messages.length, created_at: full.created_at, updated_at: full.updated_at, agent_running:
|
|
541
|
+
message_count: full.messages.length, created_at: full.created_at, updated_at: full.updated_at, agent_running: streaming, is_streaming: streaming, active_stream_id: live, read_only: readOnly,
|
|
498
542
|
input_tokens: inp, output_tokens: out, total_tokens: inp + out, estimated_cost: full.estimated_cost,
|
|
499
543
|
};
|
|
500
544
|
}
|
|
@@ -566,7 +610,7 @@ export class SessionService {
|
|
|
566
610
|
catch {
|
|
567
611
|
throw new HttpFailure(404, 'Session not found');
|
|
568
612
|
}
|
|
569
|
-
if (current
|
|
613
|
+
if (this.isReadOnly(current))
|
|
570
614
|
throw new HttpFailure(403, `Session ${sid} is read-only`);
|
|
571
615
|
await this.store.withLock(sid, () => {
|
|
572
616
|
current.title = title;
|
|
@@ -585,7 +629,7 @@ export class SessionService {
|
|
|
585
629
|
});
|
|
586
630
|
await this.deps.syncTitle(s);
|
|
587
631
|
this.publish('session_rename', s.profile, s.session_id);
|
|
588
|
-
return { session:
|
|
632
|
+
return { session: this.wireRow(s) };
|
|
589
633
|
}
|
|
590
634
|
// The pin quota is counted across sessions, so the count-and-save transaction runs on one process-wide chain;
|
|
591
635
|
// per-session locks alone would let two pins of different sessions both see the last free slot.
|
|
@@ -615,7 +659,7 @@ export class SessionService {
|
|
|
615
659
|
this.store.save(s);
|
|
616
660
|
});
|
|
617
661
|
this.publish('session_pin', s.profile, s.session_id);
|
|
618
|
-
return { ok: true, session:
|
|
662
|
+
return { ok: true, session: this.wireRow(s) };
|
|
619
663
|
}
|
|
620
664
|
async archive(sid, archived) {
|
|
621
665
|
this.rejectSubagent(sid, 'archived');
|
|
@@ -628,7 +672,7 @@ export class SessionService {
|
|
|
628
672
|
this.store.save(s, { touchUpdatedAt: false });
|
|
629
673
|
});
|
|
630
674
|
this.publish('session_archive', s.profile, s.session_id);
|
|
631
|
-
return { ok: true, session:
|
|
675
|
+
return { ok: true, session: this.wireRow(s), ...worktreeRetainedPayload(s) };
|
|
632
676
|
}
|
|
633
677
|
async move(sid, targetProjectId) {
|
|
634
678
|
const s = this.mutationTarget(sid, 'moved');
|
|
@@ -650,7 +694,7 @@ export class SessionService {
|
|
|
650
694
|
throw error;
|
|
651
695
|
}
|
|
652
696
|
this.publish('session_move', s.profile, s.session_id);
|
|
653
|
-
return { ok: true, session:
|
|
697
|
+
return { ok: true, session: this.wireRow(s) };
|
|
654
698
|
}
|
|
655
699
|
async update(sid, body) {
|
|
656
700
|
const s = this.mutationTarget(sid, 'updated');
|
|
@@ -688,7 +732,7 @@ export class SessionService {
|
|
|
688
732
|
async setToolsets(sid, toolsets) {
|
|
689
733
|
this.rejectSubagent(sid, 'modified');
|
|
690
734
|
const cleaned = this.validateToolsetsShape(toolsets);
|
|
691
|
-
const s = this.
|
|
735
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
692
736
|
await this.store.withLock(sid, () => {
|
|
693
737
|
s.enabled_toolsets = cleaned;
|
|
694
738
|
this.store.save(s);
|
|
@@ -710,7 +754,7 @@ export class SessionService {
|
|
|
710
754
|
this.rejectSubagent(sid, 'modified');
|
|
711
755
|
if (keepRaw === null || keepRaw === undefined)
|
|
712
756
|
throw new HttpFailure(400, 'Missing required field(s): keep_count');
|
|
713
|
-
const s = this.
|
|
757
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
714
758
|
// Python `int(body["keep_count"])`: a float truncates, a non-integer string is rejected.
|
|
715
759
|
let keep;
|
|
716
760
|
if (typeof keepRaw === 'number')
|
|
@@ -732,7 +776,7 @@ export class SessionService {
|
|
|
732
776
|
}
|
|
733
777
|
async clear(sid) {
|
|
734
778
|
this.rejectSubagent(sid, 'modified');
|
|
735
|
-
const s = this.
|
|
779
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
736
780
|
await this.store.withLock(sid, () => {
|
|
737
781
|
const hadMessages = s.messages.length > 0;
|
|
738
782
|
truncateSessionAtKeep(s, 0);
|
|
@@ -767,12 +811,12 @@ export class SessionService {
|
|
|
767
811
|
}
|
|
768
812
|
});
|
|
769
813
|
this.deps.runtime.evictAgent(sid);
|
|
770
|
-
return { ok: true, session:
|
|
814
|
+
return { ok: true, session: this.wireRow(s) };
|
|
771
815
|
}
|
|
772
816
|
async retry(sid) {
|
|
773
817
|
this.rejectSubagent(sid, 'modified');
|
|
774
818
|
return this.store.withLock(sid, () => {
|
|
775
|
-
const s = this.
|
|
819
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
776
820
|
const history = s.messages;
|
|
777
821
|
const lastUser = findLastUserIndex(history);
|
|
778
822
|
if (lastUser === null)
|
|
@@ -787,7 +831,7 @@ export class SessionService {
|
|
|
787
831
|
async undo(sid) {
|
|
788
832
|
this.rejectSubagent(sid, 'modified');
|
|
789
833
|
return this.store.withLock(sid, () => {
|
|
790
|
-
const s = this.
|
|
834
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
791
835
|
const history = s.messages;
|
|
792
836
|
const lastUser = findLastUserIndex(history);
|
|
793
837
|
if (lastUser === null)
|
|
@@ -825,7 +869,7 @@ export class SessionService {
|
|
|
825
869
|
if (this.isSubagentViewOnly(sid))
|
|
826
870
|
throw new HttpFailure(400, 'Subagent sessions are view-only and cannot be branched from WebUI');
|
|
827
871
|
const source = this.get404(sid);
|
|
828
|
-
if (source
|
|
872
|
+
if (this.isReadOnly(source)) {
|
|
829
873
|
if (str(source.source_tag || source.raw_source).trim().toLowerCase() !== 'cron')
|
|
830
874
|
throw new HttpFailure(403, 'Read-only sessions cannot be branched from WebUI');
|
|
831
875
|
source.branchSourceReadonly = true;
|
|
@@ -1165,20 +1209,29 @@ export class SessionService {
|
|
|
1165
1209
|
if (!sid || (!messageRef && messageIndex === null))
|
|
1166
1210
|
throw new HttpFailure(400, 'session_id and message_ref or message_index are required');
|
|
1167
1211
|
let session;
|
|
1212
|
+
let transcript;
|
|
1168
1213
|
try {
|
|
1169
1214
|
session = this.store.get(sid);
|
|
1170
1215
|
if (session.loadedMetadataOnly)
|
|
1171
1216
|
session = this.store.load(sid) ?? session;
|
|
1217
|
+
if (!this.visibleToActiveProfile(session.profile))
|
|
1218
|
+
throw new HttpFailure(404, 'Session not found');
|
|
1219
|
+
transcript = this.mergedTranscript(session);
|
|
1172
1220
|
}
|
|
1173
|
-
catch {
|
|
1174
|
-
|
|
1221
|
+
catch (error) {
|
|
1222
|
+
if (error instanceof HttpFailure)
|
|
1223
|
+
throw error;
|
|
1224
|
+
// A state.db-only session pages the same synthesized transcript its detail was built from.
|
|
1225
|
+
session = this.foreignSession(sid).synth;
|
|
1226
|
+
transcript = session.messages;
|
|
1175
1227
|
}
|
|
1176
|
-
|
|
1177
|
-
throw new HttpFailure(404, 'Session not found');
|
|
1178
|
-
const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) });
|
|
1228
|
+
const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) }, withToolCallOutcomes(withTurnIds(transcript), session.tool_calls, session.active_stream_id));
|
|
1179
1229
|
if (!result)
|
|
1180
1230
|
throw new HttpFailure(404, 'Anchor activity scene not found');
|
|
1181
|
-
|
|
1231
|
+
// Paged rows come from the raw transcript, so they take the same credential redaction as the detail's preview.
|
|
1232
|
+
const enabled = this.deps.redactEnabled();
|
|
1233
|
+
const redacted = redactValue(result, enabled);
|
|
1234
|
+
return { ...redacted, rows: withSceneToolDisplay(result.rows, redacted.rows, enabled) };
|
|
1182
1235
|
}
|
|
1183
1236
|
// ── shares ───────────────────────────────────────────────────────────────
|
|
1184
1237
|
createShare(sid) {
|