@maudecode/talaria-web 1.11.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_release.json +4 -4
- package/dist/api/chat-router.d.ts +68 -4
- 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 +407 -51
- package/dist/api/sessions-router.js +2 -2
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/sse-routes.js +52 -8
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-router.d.ts +329 -0
- package/dist/api/tools-router.js +97 -4
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.d.ts +812 -55
- 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/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 +20 -9
- 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 +2 -0
- package/dist/sessions/anchor.js +22 -17
- 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 +66 -2
- package/dist/sessions/merge.js +291 -9
- 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 +16 -3
- package/dist/sessions/service.js +92 -54
- package/dist/sessions/service.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 +25 -7
- package/dist/sessions/turn.js +153 -90
- package/dist/sessions/turn.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/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 +49 -3
- package/dist/tools/updates.js +319 -53
- package/dist/tools/updates.js.map +1 -1
- package/package.json +2 -2
- package/sidecar/scripts/replay_sidecar.py +17 -0
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/home.py +39 -16
- package/sidecar/talaria_sidecar/methods/chat.py +113 -4
- 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-ftyfzds0.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-pdpmhy1o.js → SettingsLayout-b0idn649.js} +1 -1
- 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-n1ggcf5e.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-i4bgzu83.js → abnfDiagram-VCTEODGH-egykbz8h.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-l6y92mbn.js +1 -0
- package/static/dist/assets/{architectureDiagram-5GKGNRK7-mx21lwqa.js → architectureDiagram-5GKGNRK7-b2e0wk3y.js} +1 -1
- package/static/dist/assets/{blockDiagram-I7D4REHJ-o1hhchxv.js → blockDiagram-I7D4REHJ-i3cq67dn.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-jygqtvd8.js → c4Diagram-7LVT6UL2-lg1p1s7a.js} +1 -1
- package/static/dist/assets/channel-gq8cwu71.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-hjcpubgk.js → chunk-4HAMMTFA-i0s1s7zi.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-eibnex6m.js → chunk-75Z2AOVW-kwinpapo.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-k1tp3qnp.js → chunk-DU6HZSFF-hb8qrbc3.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-lvcgn16f.js → chunk-F27PBJKO-dy2tqtcs.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-ldlzruv1.js → chunk-GMAD6QVW-fqox5yvt.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-hs1mva9d.js → chunk-GVQU2GXP-bo3x6ze4.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-o7eqx3yb.js → chunk-IMKFNOWR-nxs6rrcq.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-bp1ofl70.js → chunk-L3NEJ4N5-f9yeq1fi.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-o8m6mdz5.js → chunk-OSK3NFVY-c7df44qv.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-kx83fti2.js → chunk-P2QGCYS3-eyjzf5o5.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-mwl99e9y.js → chunk-POPQ4Y6H-iy3hp9rc.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-oriuokxy.js → chunk-PWAF6VOD-co2yoefz.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-ab5cf00v.js → chunk-SHT3W25Y-obzqmn9k.js} +1 -1
- package/static/dist/assets/{chunk-SVP7TREG-kqdrpr17.js → chunk-SVP7TREG-hqwdo6vt.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-kfbnjabk.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-dp33szhq.js → copied-hurn8vn4.js} +1 -1
- package/static/dist/assets/{cynefin-OW5HDTMX-mm5sj9s7.js → cynefin-OW5HDTMX-ngx2ihay.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-nfon5q38.js → cynefinDiagram-5FMLGOSQ-fiyooys3.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-dzdp9ypb.js → dagre-GXQ25YYZ-fctryel6.js} +1 -1
- package/static/dist/assets/{diagram-S7CK7UJ4-ckxzqo01.js → diagram-S7CK7UJ4-m27jopok.js} +1 -1
- package/static/dist/assets/{diagram-UQ7AKVKN-hw16h1um.js → diagram-UQ7AKVKN-ojgkbmp4.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-mu7wu2zg.js → diagram-VSXAHHWV-gfafpgyj.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-k9uprwtj.js → diagram-VX7I27RA-daobicg4.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-csdjzrg9.js → diagram-Z3DM3KII-mi475zvk.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-n8mbw2jj.js → ebnfDiagram-PWID7BFC-daf4zvsy.js} +1 -1
- package/static/dist/assets/endpoints-cyjhnrbn.js +64 -0
- package/static/dist/assets/{erDiagram-RLTQ6QDP-fsfe1uj0.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-gsba3iq9.js → ganttDiagram-EL5Y4UJY-k3208e0p.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-na86q1pu.js → gitGraph-4MIJSDKK-gjuhj4zk.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-g72ew3xz.js → gitGraphDiagram-WWUBYQGX-jglxvux1.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-okn18cp1.js → highlighted-body-KPVGNVTW-gh24xc9c.js} +1 -1
- package/static/dist/assets/index-gsg78cb4.css +2 -0
- package/static/dist/assets/index-jb47los5.js +11 -0
- package/static/dist/assets/{info-A6RAGUB7-i01jeltk.js → info-A6RAGUB7-huf0xaoq.js} +1 -1
- package/static/dist/assets/{infoDiagram-27XIBGKW-cayiv6fa.js → infoDiagram-27XIBGKW-jk3n96ix.js} +1 -1
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-g4rf14bv.js → ishikawaDiagram-5VMMS53U-o95uo5dx.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-fusb2424.js → journeyDiagram-3NMN7TZE-h5ye2l70.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-g831pwlr.js → kanban-definition-UXKFOSKX-lgrpk5yi.js} +1 -1
- package/static/dist/assets/{lazyRouteComponent-ol965zwk.js → lazyRouteComponent-owywngyt.js} +1 -1
- package/static/dist/assets/{line-md6em6gc.js → line-cihmc0pn.js} +1 -1
- package/static/dist/assets/{login-kfclsqd2.js → login-g063apx6.js} +1 -1
- package/static/dist/assets/mermaid-HWGCJPDP-okd1mnvj.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-mq3uns9m.js → mermaid-parser.core-d1609aga.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-oxafrned.js → mindmap-definition-YA3MSWOX-lbvtir31.js} +1 -1
- package/static/dist/assets/{onboarding-fo6hnkyv.js → onboarding-ngw0x0pr.js} +1 -1
- package/static/dist/assets/{packet-AYTQ26CC-ggxyvbym.js → packet-AYTQ26CC-o4cp5z3k.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-nk7xcqgp.js → pegDiagram-XKGWAZYB-e8xqu1qj.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-ito2razh.js → pie-WAS4IAKB-hm9icuov.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-g02xexar.js → pieDiagram-E7YTZNPT-hj96x7hn.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-d4jn4xq5.js → quadrantDiagram-AXDQQJYC-80utbxhm.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-nebvfdzt.js → radar-RG4KPBEZ-k39b6100.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-ny3gebse.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-m09mmu67.js → railroadDiagram-O6MQD6OU-iwv9dby8.js} +1 -1
- package/static/dist/assets/{refresh-cw-eitd7yva.js → refresh-cw-hjzomwlo.js} +1 -1
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-evggpcbk.js → requirementDiagram-BXWQKSXE-cdgh5jha.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-bun89039.js → sankeyDiagram-P5KCCOFB-dbu6p97m.js} +1 -1
- package/static/dist/assets/{saved-culx14ii.js → saved-feqhycco.js} +1 -1
- package/static/dist/assets/{search-nu6kzq55.js → search-n3jdc20p.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-hhs9f09o.js → sequenceDiagram-WJ2MYXX4-b0wchifg.js} +1 -1
- package/static/dist/assets/{settings_section_extensions_title-mj0gcozh.js → settings_section_extensions_title-mtyviexd.js} +1 -1
- package/static/dist/assets/{share._token-k4pcnxqu.js → share._token-cwov8uqh.js} +2 -2
- package/static/dist/assets/{sliders-horizontal-b9ljga1o.js → sliders-horizontal-i1lseyg0.js} +1 -1
- package/static/dist/assets/{stateDiagram-D77RDMKH-gi7t1tro.js → stateDiagram-D77RDMKH-mb4b38xh.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-cn1fnqrg.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-ea5urvph.js → swimlanes-42K2YHIH-ofrpfwj0.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-d652ummv.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-mq64rm3b.js → timeline-definition-24CTP7MA-hlw0jg6o.js} +1 -1
- package/static/dist/assets/todoStore-mfy9lpio.js +1 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-cimbtxlz.js → treeView-Q6P3EWNA-d93wr19c.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-wig5gi1y.js → treemap-WGGIJYW6-g7ezdedz.js} +1 -1
- package/static/dist/assets/{untitled-mbwemvxf.js → untitled-mqxhd1eh.js} +1 -1
- package/static/dist/assets/{useForm-li4bljlv.js → useForm-hh33yrwa.js} +1 -1
- package/static/dist/assets/useLocale-cr30vl7r.js +1 -0
- package/static/dist/assets/{vennDiagram-4TSXK5OY-ez63kh7n.js → vennDiagram-4TSXK5OY-m5vgeba5.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-r7rftz31.js → wardley-WFR3VGLG-gpao9bxv.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-mvqg9eqc.js → wardleyDiagram-VM6X3IG4-g2yzwshm.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-eqxdfc91.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-hikzkcql.js +0 -1
- package/static/dist/assets/ChatPage-ofqn89h9.js +0 -21
- package/static/dist/assets/HubRoute-f2zrs9si.js +0 -2
- package/static/dist/assets/RightPanel-febk3dkd.js +0 -1
- package/static/dist/assets/Select-lvx8gihl.js +0 -1
- package/static/dist/assets/SessionListPanel-o70ljmik.js +0 -1
- package/static/dist/assets/States-i46tz8an.js +0 -1
- package/static/dist/assets/Toaster-fklyeeyh.js +0 -1
- package/static/dist/assets/_app-j3rors25.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-c0ey5ec9.js +0 -1
- package/static/dist/assets/_app.index-coy9jrto.js +0 -1
- package/static/dist/assets/_app.insights-ebd2k0i5.js +0 -1
- package/static/dist/assets/_app.kanban-e2p7ypi5.js +0 -1
- package/static/dist/assets/_app.logs-ml21mfyz.js +0 -1
- package/static/dist/assets/_app.memory-lhu5mm47.js +0 -1
- package/static/dist/assets/_app.profiles-egx0fgjo.js +0 -1
- package/static/dist/assets/_app.settings-d0vqtyid.js +0 -1
- package/static/dist/assets/_app.settings._section-cnzj6pli.js +0 -1
- package/static/dist/assets/_app.skills-kkug8obu.js +0 -1
- package/static/dist/assets/_app.tasks-nf285d2o.js +0 -2
- package/static/dist/assets/_app.todos-dxalqp1e.js +0 -1
- package/static/dist/assets/_app.workspaces-bqtduujs.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-o8zqevhv.js +0 -1
- package/static/dist/assets/channel-mw8l793e.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-egajr1wp.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-egajr1wp.js +0 -1
- package/static/dist/assets/endpoints-f6ngsyu5.js +0 -64
- package/static/dist/assets/eventmodeling-NTZA5JFV-k3zhqcyl.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-bdxes51f.js +0 -1
- package/static/dist/assets/index-ab0wj9ik.css +0 -2
- package/static/dist/assets/index-fd27xooo.js +0 -11
- package/static/dist/assets/mermaid-HWGCJPDP-ejk0d88t.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-gtd38edw.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-o238oax2.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-c4acqp2j.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-jtadbol7.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ki7weepw.js +0 -8
- package/static/dist/assets/todoStore-azvfuqbv.js +0 -1
- package/static/dist/assets/trash-osyo895g.js +0 -1
- package/static/dist/assets/useLocale-kdew6auf.js +0 -1
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":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAKhC,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAA;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC,SAAS,UAAU,CAAC,MAAe;IACjC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACpD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAI,MAAkC,CAAC,GAAG,CAAC,CAAA;YACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;gBAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;QACpE,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;AAC3B,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;IACjF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAkB;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAC/D,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClC,IAAI,IAA6B,CAAA;QACjC,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;aAChD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,IAAI,GAAG,GAA8B,CAAA;;YAChG,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAA;QAC7C,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;QACpC,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACvD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA;QAC1D,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,IAAI,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;IAC1N,CAAC,CAAC,CAAA;AACJ,CAAC;AAGD,oGAAoG;AACpG,SAAS,YAAY,CAAC,IAA6B;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAkD,CAAA;IACrE,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAG,CAAC,CAAC,OAA2B,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1K,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAChG,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAA;AACtI,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAA8B,EAAE,OAAuB;IAClF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAsB,CAAA;IAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5F,MAAM,OAAO,GAAmB,EAAE,CAAA;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAA;YACnC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACrD,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;YAC5B,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAA;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACvD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAA;IACvB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA6B,EAAE,GAAW;IACrE,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAA;IACxB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAA;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAA;IACvC,mHAAmH;IACnH,MAAM,OAAO,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAA;IACvI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;IAC/B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAA;IAC9B,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,WAAW,GAAG,OAAO,CAAA;IACrF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,CAA4B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAgC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/Q,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAE,IAAI,CAAC,eAAyC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAClH,CAAC;AAED,MAAM,KAAK;IACA,OAAO,GAA8B,EAAE,CAAA;IACvC,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;CACpD;AAED,MAAM,OAAO,cAAc;IAII;IAA0C;IAHtD,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAA;IACpC,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAA;IAErD,YAA6B,MAAuB,EAAmB,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;QAArF,WAAM,GAAN,MAAM,CAAiB;QAAmB,QAAG,GAAH,GAAG,CAAwC;IAAG,CAAC;IAE9G,KAAK,CAAC,GAAuB,EAAE,GAAW;QAChD,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACpB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,IAAI,KAAK,EAAE,CAAA;YACf,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAEO,MAAM,CAAC,CAAQ;QACrB,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QACvG,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;gBAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YAC7C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACvB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,cAAc,CAAC,GAAW,EAAE,QAAiC;QAC3D,MAAM,KAAK,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAA;QAC7B,KAAK,CAAC,WAAW,KAAK,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAA;QAC5E,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACxC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,eAAe,CAAC,GAAW;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IACvG,CAAC;IAED,mGAAmG;IACnG,YAAY,CAAC,GAAW,EAAE,UAAkB;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE,CAAA;QACtD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,CAAA;QAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACzF,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAA;IACxD,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,SAAiB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE,CAAA;QACtD,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC3F,CAAC;IAED,2FAA2F;IAC3F,eAAe,CAAC,GAAW,EAAE,UAAkB;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,CAAA;QAClE,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAA;YAChE,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QACrD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC1C,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAC9C,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAA;QACjB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAC7D,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,UAAkB;QAC3C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAA;IAC3F,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IAC3D,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,GAAG,GAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QACvE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,oBAAoB,CAAC,GAAW,EAAE,GAAsB;QACtD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/E,CAAC;IAED,gBAAgB;IAChB,aAAa,CAAC,GAAW,EAAE,IAA6B;QACtD,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAClD,0GAA0G;QAC1G,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,KAAK;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC5C,IAAI,KAA8B,CAAA;QAClC,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,IAAI,CAAA;aAClE,CAAC;YACJ,KAAK,GAAG,IAAI,CAAA;YACZ,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACzE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACxC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IACvG,CAAC;IAED,8HAA8H;IAC9H,gBAAgB,CAAC,GAAW;QAC1B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC3D,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACvD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,GAAW,EAAE,SAAiB;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpF,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QACjD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC1C,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACxF,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAA;QAChB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAA;QAC1B,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAChD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,iBAAiB,CAAC,GAAW;QAC3B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IAC3D,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,GAAG,GAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QACvE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,oBAAoB,CAAC,GAAW,EAAE,GAAsB;QACtD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/E,CAAC;IAED,mEAAmE;IACnE,kBAAkB;QAChB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1E,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1E,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,GAAsB,EAAE,SAAiB;IACvE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC/B,IAAI,KAAK;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;QAC7E,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE;YACd,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAA;QACpC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -34,6 +34,8 @@ export interface SessionServiceDeps {
|
|
|
34
34
|
runtime: RuntimeOverlay & {
|
|
35
35
|
/** A live worker stream that must block deletion / duplicate turns for this session. */
|
|
36
36
|
activeRunStream: (sid: string) => string | null;
|
|
37
|
+
/** A live run whose journal missed a frame, so a replay cannot restore its whole output. */
|
|
38
|
+
journalDegraded: (streamId: string) => boolean;
|
|
37
39
|
evictAgent: (sid: string) => void;
|
|
38
40
|
closeTerminal: (sid: string) => void;
|
|
39
41
|
/** Python `delete_cli_session`: remove the session's rows from the profile's state.db; resolves false on failure. */
|
|
@@ -80,6 +82,10 @@ export declare class SessionService {
|
|
|
80
82
|
private isReadOnlyImport;
|
|
81
83
|
/** Python `_session_is_subagent_view_only`: a delegated child by any signal — the persisted sidecar or the state.db row. */
|
|
82
84
|
isSubagentViewOnly(sid: string): boolean;
|
|
85
|
+
/** TAL-358: batched `sessions.source` owners from the active profile's state.db. */
|
|
86
|
+
readonly stateDbSources: (ids: string[]) => Map<string, string> | null;
|
|
87
|
+
/** The persisted flag folded with the state.db owner lock (TAL-358): the one read-only rule for mutation gates and the wire. */
|
|
88
|
+
isReadOnly(s: Session): boolean;
|
|
83
89
|
/** Full session for mutation, refusing read-only imports (Python `_get_or_materialize_session`). */
|
|
84
90
|
getForMutation(sid: string): Session;
|
|
85
91
|
private get404;
|
|
@@ -93,8 +99,6 @@ export declare class SessionService {
|
|
|
93
99
|
mergedTranscript(s: Session, local?: Message[]): Message[];
|
|
94
100
|
/** Python `_lookup_cli_session_metadata`: the sidebar row for a state.db session in the active profile. */
|
|
95
101
|
private lookupCliMeta;
|
|
96
|
-
/** Python `_is_claimable_cli_source`: a denylist of foreign families that own their sessions. */
|
|
97
|
-
private claimableCliSource;
|
|
98
102
|
/** Python `_session_index_marks_was_webui`: an index row that once owned a WebUI sidecar (self-heal 404). */
|
|
99
103
|
private indexMarksWasWebui;
|
|
100
104
|
/**
|
|
@@ -110,6 +114,8 @@ export declare class SessionService {
|
|
|
110
114
|
private rejectSubagent;
|
|
111
115
|
/** `compact()` plus messages, redacted for the wire (Python `_public_session_projection`). */
|
|
112
116
|
publicSession(s: Session, withMessages?: boolean): Record<string, unknown>;
|
|
117
|
+
/** `compact()` with the wire streaming/read-only flags (TAL-312), for replies that return the session row. */
|
|
118
|
+
wireRow(s: Session): Record<string, unknown>;
|
|
113
119
|
/** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
|
|
114
120
|
publicSessionDocument(s: Session): Record<string, unknown>;
|
|
115
121
|
private loadRevision;
|
|
@@ -120,13 +126,20 @@ export declare class SessionService {
|
|
|
120
126
|
msg_before?: string | null | undefined;
|
|
121
127
|
resolve_model?: string | null | undefined;
|
|
122
128
|
}): Record<string, unknown>;
|
|
129
|
+
/**
|
|
130
|
+
* TAL-316: the active run whose journal can replay its output from the start. The detail then leaves that output to the
|
|
131
|
+
* replay; with no active run, no identifiable prompt, or no complete journal, it returns the persisted transcript unchanged.
|
|
132
|
+
*/
|
|
133
|
+
private journaledActiveTurn;
|
|
134
|
+
/** TAL-368: the active run's prompt, which the detail shows until settlement persists it; null when idle or promptless. */
|
|
135
|
+
private pendingTurn;
|
|
123
136
|
/** A session without a sidecar, synthesized from state.db for this profile; 404/409 like the detail. */
|
|
124
137
|
private foreignSession;
|
|
125
138
|
/** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
|
|
126
139
|
private foreignSessionDetail;
|
|
127
140
|
/** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`, no journal recovery). */
|
|
128
141
|
clearStaleStreamState(session: Session): boolean;
|
|
129
|
-
list(params: Omit<ListParams, 'activeProfile' | 'isolatedProfileMode' | 'profilesMatch' | 'cliRows' | 'gatewayIdentity'>): {
|
|
142
|
+
list(params: Omit<ListParams, 'activeProfile' | 'isolatedProfileMode' | 'profilesMatch' | 'cliRows' | 'gatewayIdentity' | 'stateDbSources'>): {
|
|
130
143
|
body: ListResponse;
|
|
131
144
|
etag: string;
|
|
132
145
|
};
|
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, redactValue, stripPublicInternalFields } from '../redact.js';
|
|
4
|
+
import { buildActiveTurnToken, copyJson, redactSessionData, redactValue, stripPublicInternalFields, withSceneToolDisplay } from '../redact.js';
|
|
5
5
|
import { DraftVersionConflict, normalizeDraftVersion } from './drafts.js';
|
|
6
|
-
import { allSessions, buildSessionListPayload, isMessagingSessionRecord, lineageRootId, mergeCliSidebarMetadata, sessionListResponse, sessionSearchMessageText, sessionSearchPreview } from './list.js';
|
|
6
|
+
import { allSessions, buildSessionListPayload, isClaimableCliSource, isMessagingSessionRecord, withOwnerLocks, withSessionWireFlags, lineageRootId, mergeCliSidebarMetadata, sessionListResponse, sessionSearchMessageText, sessionSearchPreview } from './list.js';
|
|
7
7
|
import { anchorSceneIntOrNull, hydrateAnchorActivityScenes, normalizeAnchorSceneMessageRef, readAnchorSceneRows, storeAnchorScene, withTurnIds } from './anchor.js';
|
|
8
8
|
import { isSafeSessionId, lastMessageTimestamp, Session, titleFrom } from './session.js';
|
|
9
9
|
import { SessionBusy, SessionNotFound, statSignature } from './store.js';
|
|
10
10
|
import { attachTodoState } from './todo.js';
|
|
11
|
-
import { stateDbSessionMessages, stateDbSessionRow } from './state-db.js';
|
|
12
|
-
import { mergeSessionMessagesAppendOnly } from './merge.js';
|
|
11
|
+
import { stateDbSessionMessages, stateDbSessionRow, stateDbSessionSources } from './state-db.js';
|
|
12
|
+
import { mergeSessionMessagesAppendOnly, pendingUserRow, withPendingUserTurn, withToolCallOutcomes, withoutRunningTurnOutput } from './merge.js';
|
|
13
13
|
import { messagesForLimitedPayload, messageWindowForDisplay, MAX_MSG_LIMIT, parseMsgLimit, toolCallsForMessageWindow } from './window.js';
|
|
14
14
|
import { redactText } from '../redact.js';
|
|
15
15
|
import { buildShareSnapshot } from './shares.js';
|
|
@@ -62,7 +62,7 @@ export class SessionService {
|
|
|
62
62
|
isReadOnlyImport(sid) {
|
|
63
63
|
try {
|
|
64
64
|
const s = this.store.get(sid, { metadataOnly: true });
|
|
65
|
-
if (s
|
|
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,12 +235,16 @@ export class SessionService {
|
|
|
243
235
|
}
|
|
244
236
|
/** `compact()` plus messages, redacted for the wire (Python `_public_session_projection`). */
|
|
245
237
|
publicSession(s, withMessages = true) {
|
|
246
|
-
const payload =
|
|
238
|
+
const payload = this.wireRow(s);
|
|
247
239
|
// Mutation replies replace a client's transcript, so they carry the same server-built scenes as the detail.
|
|
248
240
|
if (withMessages)
|
|
249
|
-
payload.messages = hydrateAnchorActivityScenes(withTurnIds(s.messages), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id });
|
|
241
|
+
payload.messages = hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(s.messages), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id });
|
|
250
242
|
return redactSessionData(payload, this.deps.redactEnabled());
|
|
251
243
|
}
|
|
244
|
+
/** `compact()` with the wire streaming/read-only flags (TAL-312), for replies that return the session row. */
|
|
245
|
+
wireRow(s) {
|
|
246
|
+
return withSessionWireFlags({ ...s.compact(), read_only: this.isReadOnly(s) }, this.deps.runtime.activeStreamIds);
|
|
247
|
+
}
|
|
252
248
|
/** Python `public_session_projection(s.__dict__)`: every persisted field, redacted (session export). */
|
|
253
249
|
publicSessionDocument(s) {
|
|
254
250
|
return redactSessionData(s.toDocument(), this.deps.redactEnabled());
|
|
@@ -279,8 +275,15 @@ export class SessionService {
|
|
|
279
275
|
throw new HttpFailure(404, 'Session not found');
|
|
280
276
|
}
|
|
281
277
|
this.clearStaleStreamState(s);
|
|
282
|
-
|
|
283
|
-
|
|
278
|
+
const journaled = loadMessages ? this.journaledActiveTurn(s) : null;
|
|
279
|
+
let transcript = loadMessages ? this.mergedTranscript(s) : [];
|
|
280
|
+
const pending = loadMessages ? this.pendingTurn(s) : null;
|
|
281
|
+
if (pending)
|
|
282
|
+
transcript = withPendingUserTurn(transcript, pending);
|
|
283
|
+
if (journaled)
|
|
284
|
+
transcript = withoutRunningTurnOutput(transcript, { ...journaled, localCount: s.messages.length });
|
|
285
|
+
// Turn ids, tool outcomes and scenes are computed over the full transcript, so every window reports the same values.
|
|
286
|
+
const all = loadMessages ? hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(transcript), s.tool_calls, s.active_stream_id), s.anchor_activity_scenes, { activeTurnId: s.active_stream_id, clipToolResults: msgLimit !== null }) : [];
|
|
284
287
|
let truncated = [];
|
|
285
288
|
let offset = 0;
|
|
286
289
|
let summaryCount = null;
|
|
@@ -288,6 +291,14 @@ export class SessionService {
|
|
|
288
291
|
if (loadMessages) {
|
|
289
292
|
;
|
|
290
293
|
[truncated, offset] = messageWindowForDisplay(all, msgLimit, msgBefore);
|
|
294
|
+
// TAL-368: a tail window starts no later than the running turn's prompt, so a turn whose output stays in the
|
|
295
|
+
// transcript (no journal to replay it) keeps its prompt; older pages end before it, so it is never sent twice.
|
|
296
|
+
// ponytail: the window grows with that turn's persisted rows; clip the turn instead if degraded runs get long.
|
|
297
|
+
const prompt = pending && msgBefore === null ? all.findIndex((m) => isDict(m) && m.role === 'user' && m._active_turn_token === pending.activeTurnToken) : -1;
|
|
298
|
+
if (prompt >= 0 && prompt < offset) {
|
|
299
|
+
truncated = all.slice(prompt, offset + truncated.length);
|
|
300
|
+
offset = prompt;
|
|
301
|
+
}
|
|
291
302
|
if (msgLimit !== null)
|
|
292
303
|
truncated = messagesForLimitedPayload(truncated);
|
|
293
304
|
}
|
|
@@ -310,7 +321,6 @@ export class SessionService {
|
|
|
310
321
|
messages: truncated,
|
|
311
322
|
message_count: mergedCount,
|
|
312
323
|
tool_calls: toolCalls,
|
|
313
|
-
active_stream_id: s.active_stream_id,
|
|
314
324
|
pending_user_message: s.pending_user_message,
|
|
315
325
|
pending_attachments: loadMessages ? s.pending_attachments : [],
|
|
316
326
|
pending_started_at: s.pending_started_at,
|
|
@@ -319,6 +329,8 @@ export class SessionService {
|
|
|
319
329
|
threshold_tokens: Number(s.threshold_tokens ?? 0) || 0,
|
|
320
330
|
last_prompt_tokens: Number(s.last_prompt_tokens ?? 0) || 0,
|
|
321
331
|
};
|
|
332
|
+
if (loadMessages)
|
|
333
|
+
raw.transcript_seq = journaled ? { stream_id: journaled.turnId, seq: 0 } : null;
|
|
322
334
|
if (loadMessages && all.length)
|
|
323
335
|
attachTodoState(raw, all);
|
|
324
336
|
if (mergedLast) {
|
|
@@ -331,12 +343,34 @@ export class SessionService {
|
|
|
331
343
|
raw._msg_limit_max = MAX_MSG_LIMIT;
|
|
332
344
|
const revisionAfter = this.loadRevision(s);
|
|
333
345
|
raw._load_revision = revisionBefore !== null && revisionBefore === revisionAfter ? hashRevision(revisionBefore) : `unstable-${randomUUID().replace(/-/g, '')}`;
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
raw.read_only = true;
|
|
337
|
-
}
|
|
346
|
+
raw.read_only = this.isReadOnly(s);
|
|
347
|
+
withSessionWireFlags(raw, activeStreamIds);
|
|
338
348
|
return redactSessionData(raw, this.deps.redactEnabled());
|
|
339
349
|
}
|
|
350
|
+
/**
|
|
351
|
+
* TAL-316: the active run whose journal can replay its output from the start. The detail then leaves that output to the
|
|
352
|
+
* replay; with no active run, no identifiable prompt, or no complete journal, it returns the persisted transcript unchanged.
|
|
353
|
+
*/
|
|
354
|
+
journaledActiveTurn(s) {
|
|
355
|
+
const turnId = str(s.active_stream_id).trim();
|
|
356
|
+
const activeTurnToken = buildActiveTurnToken(turnId, s.pending_started_at);
|
|
357
|
+
if (!turnId || !activeTurnToken || this.deps.runtime.journalDegraded(turnId))
|
|
358
|
+
return null;
|
|
359
|
+
const summary = this.deps.journal?.findRunSummary(turnId);
|
|
360
|
+
if (summary?.session_id !== s.session_id || summary.journal_pruned)
|
|
361
|
+
return null;
|
|
362
|
+
return { turnId, startedAt: Number(s.pending_started_at), activeTurnToken };
|
|
363
|
+
}
|
|
364
|
+
/** TAL-368: the active run's prompt, which the detail shows until settlement persists it; null when idle or promptless. */
|
|
365
|
+
pendingTurn(s) {
|
|
366
|
+
const turnId = str(s.active_stream_id).trim();
|
|
367
|
+
const activeTurnToken = buildActiveTurnToken(turnId, s.pending_started_at);
|
|
368
|
+
const text = str(s.pending_user_message);
|
|
369
|
+
if (!turnId || !activeTurnToken || (!text && !s.pending_attachments.length))
|
|
370
|
+
return null;
|
|
371
|
+
const startedAt = Number(s.pending_started_at);
|
|
372
|
+
return { turnId, startedAt, activeTurnToken, localCount: s.messages.length, prompt: pendingUserRow(text, s.pending_attachments, startedAt, s.pending_user_source || 'webui', turnId) };
|
|
373
|
+
}
|
|
340
374
|
/** A session without a sidecar, synthesized from state.db for this profile; 404/409 like the detail. */
|
|
341
375
|
foreignSession(sid) {
|
|
342
376
|
const meta = this.lookupCliMeta(sid);
|
|
@@ -355,18 +389,18 @@ export class SessionService {
|
|
|
355
389
|
/** Python `_handle_session_get` without a sidecar: the state.db transcript as a (read-only or claimable) foreign stub. */
|
|
356
390
|
foreignSessionDetail(sid) {
|
|
357
391
|
const { synth, meta } = this.foreignSession(sid);
|
|
358
|
-
// The same turn projection as a WebUI session: turn ids, then each completed turn's scene.
|
|
359
|
-
const msgs = hydrateAnchorActivityScenes(withTurnIds(synth.messages), {});
|
|
392
|
+
// The same turn projection as a WebUI session: turn ids, tool outcomes, then each completed turn's scene.
|
|
393
|
+
const msgs = hydrateAnchorActivityScenes(withToolCallOutcomes(withTurnIds(synth.messages), [], null), {});
|
|
360
394
|
const lastTs = Number(msgs[msgs.length - 1]?.timestamp ?? 0) || 0;
|
|
361
395
|
const sess = {
|
|
362
396
|
session_id: synth.session_id, title: synth.title, workspace: synth.workspace, model: synth.model, message_count: msgs.length,
|
|
363
397
|
created_at: synth.created_at, updated_at: synth.updated_at, last_message_at: meta?.last_message_at || meta?.updated_at || lastTs,
|
|
364
398
|
pinned: synth.pinned, archived: synth.archived, project_id: synth.project_id ?? null, profile: synth.profile,
|
|
365
399
|
is_cli_session: synth.is_cli_session, source_tag: synth.source_tag, raw_source: synth.raw_source, session_source: synth.session_source,
|
|
366
|
-
source_label: synth.source_label, read_only: synth.read_only, messages: msgs, tool_calls: [],
|
|
400
|
+
source_label: synth.source_label, read_only: synth.read_only, can_duplicate: false, messages: msgs, tool_calls: [], transcript_seq: null,
|
|
367
401
|
};
|
|
368
402
|
attachTodoState(sess, msgs);
|
|
369
|
-
const merged = meta ? mergeCliSidebarMetadata(sess, meta) : sess;
|
|
403
|
+
const merged = withSessionWireFlags(meta ? mergeCliSidebarMetadata(sess, meta) : sess, this.deps.runtime.activeStreamIds);
|
|
370
404
|
return redactSessionData(merged, this.deps.redactEnabled());
|
|
371
405
|
}
|
|
372
406
|
/** Clear persisted streaming flags when no live stream backs them (Python `_clear_stale_stream_state`, no journal recovery). */
|
|
@@ -434,7 +468,7 @@ export class SessionService {
|
|
|
434
468
|
// Python reads every profile's state.db under all_profiles; this port projects the active profile only.
|
|
435
469
|
const cliRows = wantState ? this.deps.cliSessions(activeProfile, { sourceFilter: params.sourceFilter ?? null }) : undefined;
|
|
436
470
|
const gatewayIdentity = loadGatewaySessionIdentityMap(join(this.deps.profileHome(activeProfile), 'sessions', 'sessions.json'));
|
|
437
|
-
const payload = buildSessionListPayload(this.store, { ...params, ...(cliRows ? { cliRows } : {}), gatewayIdentity, activeProfile, isolatedProfileMode: this.deps.isolatedProfileMode(), profilesMatch: this.deps.profilesMatch });
|
|
471
|
+
const payload = buildSessionListPayload(this.store, { ...params, ...(cliRows ? { cliRows } : {}), gatewayIdentity, stateDbSources: this.stateDbSources, activeProfile, isolatedProfileMode: this.deps.isolatedProfileMode(), profilesMatch: this.deps.profilesMatch });
|
|
438
472
|
return sessionListResponse(payload, this.deps.runtime, this.deps.redactEnabled(), this.deps.now());
|
|
439
473
|
}
|
|
440
474
|
search(q, opts) {
|
|
@@ -442,8 +476,10 @@ export class SessionService {
|
|
|
442
476
|
let sessions = allSessions(this.store);
|
|
443
477
|
if (!opts.allProfiles)
|
|
444
478
|
sessions = sessions.filter((r) => this.deps.profilesMatch(str(r.profile) || null, activeProfile));
|
|
479
|
+
sessions = withOwnerLocks(sessions, this.stateDbSources);
|
|
445
480
|
const redact = this.deps.redactEnabled();
|
|
446
481
|
const redactRow = (item) => {
|
|
482
|
+
withSessionWireFlags(item, this.deps.runtime.activeStreamIds);
|
|
447
483
|
if (typeof item.title === 'string')
|
|
448
484
|
item.title = redactText(item.title, redact);
|
|
449
485
|
for (const f of ['display_title', '_state_db_title', 'parent_title'])
|
|
@@ -499,10 +535,10 @@ export class SessionService {
|
|
|
499
535
|
catch {
|
|
500
536
|
hermesHome = '';
|
|
501
537
|
}
|
|
502
|
-
const
|
|
538
|
+
const { is_streaming: streaming, active_stream_id: live, read_only: readOnly } = this.wireRow(full);
|
|
503
539
|
return {
|
|
504
540
|
session_id: full.session_id, title: full.title, model: full.model, profile, hermes_home: hermesHome, workspace: full.workspace, personality: full.personality,
|
|
505
|
-
message_count: full.messages.length, created_at: full.created_at, updated_at: full.updated_at, agent_running:
|
|
541
|
+
message_count: full.messages.length, created_at: full.created_at, updated_at: full.updated_at, agent_running: streaming, is_streaming: streaming, active_stream_id: live, read_only: readOnly,
|
|
506
542
|
input_tokens: inp, output_tokens: out, total_tokens: inp + out, estimated_cost: full.estimated_cost,
|
|
507
543
|
};
|
|
508
544
|
}
|
|
@@ -574,7 +610,7 @@ export class SessionService {
|
|
|
574
610
|
catch {
|
|
575
611
|
throw new HttpFailure(404, 'Session not found');
|
|
576
612
|
}
|
|
577
|
-
if (current
|
|
613
|
+
if (this.isReadOnly(current))
|
|
578
614
|
throw new HttpFailure(403, `Session ${sid} is read-only`);
|
|
579
615
|
await this.store.withLock(sid, () => {
|
|
580
616
|
current.title = title;
|
|
@@ -593,7 +629,7 @@ export class SessionService {
|
|
|
593
629
|
});
|
|
594
630
|
await this.deps.syncTitle(s);
|
|
595
631
|
this.publish('session_rename', s.profile, s.session_id);
|
|
596
|
-
return { session:
|
|
632
|
+
return { session: this.wireRow(s) };
|
|
597
633
|
}
|
|
598
634
|
// The pin quota is counted across sessions, so the count-and-save transaction runs on one process-wide chain;
|
|
599
635
|
// per-session locks alone would let two pins of different sessions both see the last free slot.
|
|
@@ -623,7 +659,7 @@ export class SessionService {
|
|
|
623
659
|
this.store.save(s);
|
|
624
660
|
});
|
|
625
661
|
this.publish('session_pin', s.profile, s.session_id);
|
|
626
|
-
return { ok: true, session:
|
|
662
|
+
return { ok: true, session: this.wireRow(s) };
|
|
627
663
|
}
|
|
628
664
|
async archive(sid, archived) {
|
|
629
665
|
this.rejectSubagent(sid, 'archived');
|
|
@@ -636,7 +672,7 @@ export class SessionService {
|
|
|
636
672
|
this.store.save(s, { touchUpdatedAt: false });
|
|
637
673
|
});
|
|
638
674
|
this.publish('session_archive', s.profile, s.session_id);
|
|
639
|
-
return { ok: true, session:
|
|
675
|
+
return { ok: true, session: this.wireRow(s), ...worktreeRetainedPayload(s) };
|
|
640
676
|
}
|
|
641
677
|
async move(sid, targetProjectId) {
|
|
642
678
|
const s = this.mutationTarget(sid, 'moved');
|
|
@@ -658,7 +694,7 @@ export class SessionService {
|
|
|
658
694
|
throw error;
|
|
659
695
|
}
|
|
660
696
|
this.publish('session_move', s.profile, s.session_id);
|
|
661
|
-
return { ok: true, session:
|
|
697
|
+
return { ok: true, session: this.wireRow(s) };
|
|
662
698
|
}
|
|
663
699
|
async update(sid, body) {
|
|
664
700
|
const s = this.mutationTarget(sid, 'updated');
|
|
@@ -696,7 +732,7 @@ export class SessionService {
|
|
|
696
732
|
async setToolsets(sid, toolsets) {
|
|
697
733
|
this.rejectSubagent(sid, 'modified');
|
|
698
734
|
const cleaned = this.validateToolsetsShape(toolsets);
|
|
699
|
-
const s = this.
|
|
735
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
700
736
|
await this.store.withLock(sid, () => {
|
|
701
737
|
s.enabled_toolsets = cleaned;
|
|
702
738
|
this.store.save(s);
|
|
@@ -718,7 +754,7 @@ export class SessionService {
|
|
|
718
754
|
this.rejectSubagent(sid, 'modified');
|
|
719
755
|
if (keepRaw === null || keepRaw === undefined)
|
|
720
756
|
throw new HttpFailure(400, 'Missing required field(s): keep_count');
|
|
721
|
-
const s = this.
|
|
757
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
722
758
|
// Python `int(body["keep_count"])`: a float truncates, a non-integer string is rejected.
|
|
723
759
|
let keep;
|
|
724
760
|
if (typeof keepRaw === 'number')
|
|
@@ -740,7 +776,7 @@ export class SessionService {
|
|
|
740
776
|
}
|
|
741
777
|
async clear(sid) {
|
|
742
778
|
this.rejectSubagent(sid, 'modified');
|
|
743
|
-
const s = this.
|
|
779
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
744
780
|
await this.store.withLock(sid, () => {
|
|
745
781
|
const hadMessages = s.messages.length > 0;
|
|
746
782
|
truncateSessionAtKeep(s, 0);
|
|
@@ -775,12 +811,12 @@ export class SessionService {
|
|
|
775
811
|
}
|
|
776
812
|
});
|
|
777
813
|
this.deps.runtime.evictAgent(sid);
|
|
778
|
-
return { ok: true, session:
|
|
814
|
+
return { ok: true, session: this.wireRow(s) };
|
|
779
815
|
}
|
|
780
816
|
async retry(sid) {
|
|
781
817
|
this.rejectSubagent(sid, 'modified');
|
|
782
818
|
return this.store.withLock(sid, () => {
|
|
783
|
-
const s = this.
|
|
819
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
784
820
|
const history = s.messages;
|
|
785
821
|
const lastUser = findLastUserIndex(history);
|
|
786
822
|
if (lastUser === null)
|
|
@@ -795,7 +831,7 @@ export class SessionService {
|
|
|
795
831
|
async undo(sid) {
|
|
796
832
|
this.rejectSubagent(sid, 'modified');
|
|
797
833
|
return this.store.withLock(sid, () => {
|
|
798
|
-
const s = this.
|
|
834
|
+
const s = this.mutationTarget(sid, 'modified');
|
|
799
835
|
const history = s.messages;
|
|
800
836
|
const lastUser = findLastUserIndex(history);
|
|
801
837
|
if (lastUser === null)
|
|
@@ -833,7 +869,7 @@ export class SessionService {
|
|
|
833
869
|
if (this.isSubagentViewOnly(sid))
|
|
834
870
|
throw new HttpFailure(400, 'Subagent sessions are view-only and cannot be branched from WebUI');
|
|
835
871
|
const source = this.get404(sid);
|
|
836
|
-
if (source
|
|
872
|
+
if (this.isReadOnly(source)) {
|
|
837
873
|
if (str(source.source_tag || source.raw_source).trim().toLowerCase() !== 'cron')
|
|
838
874
|
throw new HttpFailure(403, 'Read-only sessions cannot be branched from WebUI');
|
|
839
875
|
source.branchSourceReadonly = true;
|
|
@@ -1189,11 +1225,13 @@ export class SessionService {
|
|
|
1189
1225
|
session = this.foreignSession(sid).synth;
|
|
1190
1226
|
transcript = session.messages;
|
|
1191
1227
|
}
|
|
1192
|
-
const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) }, withTurnIds(transcript));
|
|
1228
|
+
const result = readAnchorSceneRows(session, { messageRef, messageIndex, before: anchorSceneIntOrNull(query.before), limit: anchorSceneIntOrNull(query.limit) }, withToolCallOutcomes(withTurnIds(transcript), session.tool_calls, session.active_stream_id));
|
|
1193
1229
|
if (!result)
|
|
1194
1230
|
throw new HttpFailure(404, 'Anchor activity scene not found');
|
|
1195
1231
|
// Paged rows come from the raw transcript, so they take the same credential redaction as the detail's preview.
|
|
1196
|
-
|
|
1232
|
+
const enabled = this.deps.redactEnabled();
|
|
1233
|
+
const redacted = redactValue(result, enabled);
|
|
1234
|
+
return { ...redacted, rows: withSceneToolDisplay(result.rows, redacted.rows, enabled) };
|
|
1197
1235
|
}
|
|
1198
1236
|
// ── shares ───────────────────────────────────────────────────────────────
|
|
1199
1237
|
createShare(sid) {
|