@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
|
@@ -45,6 +45,8 @@ class _Run:
|
|
|
45
45
|
self.finished = threading.Event()
|
|
46
46
|
self.clarify_entries: dict[str, "_ClarifyEntry"] = {}
|
|
47
47
|
self.lock = threading.Lock()
|
|
48
|
+
# The Agent's transcript list from before this turn: a Stop while the Agent still holds it has no checkpoint.
|
|
49
|
+
self.prior_messages = None
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
class _ClarifyEntry:
|
|
@@ -81,6 +83,34 @@ def _snippet(raw: Any, limit: int = _TOOL_RESULT_SNIPPET_MAX) -> str:
|
|
|
81
83
|
return text[:limit]
|
|
82
84
|
|
|
83
85
|
|
|
86
|
+
_RAW_RESULT_MAX_KEYS = 64
|
|
87
|
+
_RAW_RESULT_OUTCOME_KEYS = ("error", "exit_code", "exitCode", "success")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _raw_result(raw: Any, limit: int = _TOOL_RESULT_SNIPPET_MAX) -> Any:
|
|
91
|
+
"""The tool result as the server's outcome rule reads it, bounded: a dict (or JSON-object text) keeps its first
|
|
92
|
+
``_RAW_RESULT_MAX_KEYS`` top-level fields plus its outcome fields, scalars as they are, text and non-empty nested
|
|
93
|
+
values as capped (JSON) text; anything else is the capped text. The sidecar decides nothing; the server does."""
|
|
94
|
+
try:
|
|
95
|
+
data = raw if isinstance(raw, dict) else json.loads(str(raw or ""))
|
|
96
|
+
except Exception: # noqa: BLE001
|
|
97
|
+
data = None
|
|
98
|
+
if not isinstance(data, dict):
|
|
99
|
+
return str(raw if raw is not None else "")[:limit]
|
|
100
|
+
out: dict = {}
|
|
101
|
+
# The server's outcome rule reads these, wherever they sit in the result.
|
|
102
|
+
kept = list(data.items())[:_RAW_RESULT_MAX_KEYS] + [(k, data[k]) for k in _RAW_RESULT_OUTCOME_KEYS if k in data]
|
|
103
|
+
for key, value in kept:
|
|
104
|
+
if value is None or isinstance(value, (bool, int)) or (isinstance(value, float) and value == value and abs(value) != float("inf")):
|
|
105
|
+
out[str(key)] = value
|
|
106
|
+
elif isinstance(value, (dict, list)) and not value:
|
|
107
|
+
out[str(key)] = {} if isinstance(value, dict) else []
|
|
108
|
+
else:
|
|
109
|
+
text = value if isinstance(value, str) else json.dumps(value, default=str)
|
|
110
|
+
out[str(key)] = text[:limit]
|
|
111
|
+
return out
|
|
112
|
+
|
|
113
|
+
|
|
84
114
|
def _delegation_cost_usd(name: Any, raw: Any):
|
|
85
115
|
"""Predecessor ``_delegation_cost_usd``: total spend a ``delegate_task`` result reports, or None."""
|
|
86
116
|
if str(name or "") != "delegate_task":
|
|
@@ -109,11 +139,66 @@ def _delegation_cost_usd(name: Any, raw: Any):
|
|
|
109
139
|
return round(total, 6) if total > 0 else None
|
|
110
140
|
|
|
111
141
|
|
|
142
|
+
def _js_number(value: int | float) -> str:
|
|
143
|
+
"""A number as JavaScript's `String()` shows it once the persisted JSON is parsed (`1.0` -> `1`, `1e21` -> `1e+21`)."""
|
|
144
|
+
try:
|
|
145
|
+
number = float(value)
|
|
146
|
+
except OverflowError:
|
|
147
|
+
return "Infinity" if value > 0 else "-Infinity"
|
|
148
|
+
if number != number:
|
|
149
|
+
return "NaN"
|
|
150
|
+
if number in (float("inf"), float("-inf")):
|
|
151
|
+
return "Infinity" if number > 0 else "-Infinity"
|
|
152
|
+
if number == 0:
|
|
153
|
+
return "0"
|
|
154
|
+
sign = "-" if number < 0 else ""
|
|
155
|
+
# repr() gives the shortest round-trip digits, as JavaScript does; only the notation differs.
|
|
156
|
+
mantissa, _, exp = repr(abs(number)).partition("e")
|
|
157
|
+
whole, _, frac = mantissa.partition(".")
|
|
158
|
+
digits = (whole + frac).lstrip("0")
|
|
159
|
+
point = len(whole) + int(exp or 0) - (len(whole + frac) - len((whole + frac).lstrip("0")))
|
|
160
|
+
digits = digits.rstrip("0") or "0"
|
|
161
|
+
k, n = len(digits), point
|
|
162
|
+
if k <= n <= 21:
|
|
163
|
+
return sign + digits + "0" * (n - k)
|
|
164
|
+
if 0 < n <= 21:
|
|
165
|
+
return sign + digits[:n] + "." + digits[n:]
|
|
166
|
+
if -6 < n <= 0:
|
|
167
|
+
return sign + "0." + "0" * -n + digits
|
|
168
|
+
e = n - 1
|
|
169
|
+
return sign + digits[0] + ("." + digits[1:] if k > 1 else "") + "e" + ("+" if e >= 0 else "-") + str(abs(e))
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def _display_repr(text: str) -> str:
|
|
173
|
+
quote = '"' if "'" in text and '"' not in text else "'"
|
|
174
|
+
escaped = text.replace("\\", "\\\\").replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t")
|
|
175
|
+
return quote + escaped.replace(quote, "\\" + quote) + quote
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def _display_str(value: Any, nested: bool = False) -> str:
|
|
179
|
+
"""A non-string argument as the server renders the parsed JSON of a persisted call (`pythonStr` in
|
|
180
|
+
`sessions/tool-display.ts`): Python `str()` shapes with JavaScript number text, so a live and a persisted call
|
|
181
|
+
show one target."""
|
|
182
|
+
if isinstance(value, str):
|
|
183
|
+
return _display_repr(value) if nested else value
|
|
184
|
+
if value is None:
|
|
185
|
+
return "None"
|
|
186
|
+
if isinstance(value, bool):
|
|
187
|
+
return "True" if value else "False"
|
|
188
|
+
if isinstance(value, (int, float)):
|
|
189
|
+
return _js_number(value)
|
|
190
|
+
if isinstance(value, (list, tuple)):
|
|
191
|
+
return "[" + ", ".join(_display_str(item, True) for item in value) + "]"
|
|
192
|
+
if isinstance(value, dict):
|
|
193
|
+
return "{" + ", ".join(f"{_display_repr(str(k))}: {_display_str(item, True)}" for k, item in value.items()) + "}"
|
|
194
|
+
return str(value)
|
|
195
|
+
|
|
196
|
+
|
|
112
197
|
def _args_snapshot(args: Any) -> dict:
|
|
113
198
|
snap: dict = {}
|
|
114
199
|
if isinstance(args, dict):
|
|
115
200
|
for k, v in list(args.items())[:4]:
|
|
116
|
-
s2 =
|
|
201
|
+
s2 = _display_str(v)
|
|
117
202
|
cap = _TOOL_RESULT_SNIPPET_MAX if str(k).lower() in _TOOL_ARG_CONTENT_KEYS else 120
|
|
118
203
|
snap[k] = s2[:cap] + ("..." if len(s2) > cap else "")
|
|
119
204
|
return snap
|
|
@@ -181,6 +266,21 @@ def _agent_pending_steer_text(agent) -> str:
|
|
|
181
266
|
return str(agent.__dict__.get("_pending_steer") or "")
|
|
182
267
|
|
|
183
268
|
|
|
269
|
+
def _cancel_checkpoint(run: _Run) -> list | None:
|
|
270
|
+
"""The Agent's canonical transcript at the stop boundary (the turn's prompt, completed tool calls and results),
|
|
271
|
+
which the live frames only project. The Agent republishes ``_session_messages`` after every tool round; until it
|
|
272
|
+
does, it still holds the previous turn's list and there is no checkpoint."""
|
|
273
|
+
agent = run.agent
|
|
274
|
+
messages = getattr(agent, "_session_messages", None) if agent is not None else None
|
|
275
|
+
if not isinstance(messages, list) or messages is run.prior_messages:
|
|
276
|
+
return None
|
|
277
|
+
try:
|
|
278
|
+
return json.loads(json.dumps([m for m in list(messages) if isinstance(m, dict)], default=str))
|
|
279
|
+
except Exception: # noqa: BLE001 - a row the Agent is still mutating; Stop must not fail on it
|
|
280
|
+
log.debug("cancel checkpoint snapshot failed", exc_info=True)
|
|
281
|
+
return None
|
|
282
|
+
|
|
283
|
+
|
|
184
284
|
def _resolve_runtime(provider: str | None, model: str) -> dict:
|
|
185
285
|
try:
|
|
186
286
|
from hermes_cli.runtime_provider import resolve_runtime_provider
|
|
@@ -386,7 +486,7 @@ def start(ctx: CallContext, params: dict) -> dict: # noqa: PLR0915 - one turn,
|
|
|
386
486
|
call["done"] = True
|
|
387
487
|
call["snippet"] = snippet
|
|
388
488
|
break
|
|
389
|
-
payload = {"event_type": "tool.completed", "name": name, "preview": snippet, "args": _args_snapshot(args), "tid": tid, "
|
|
489
|
+
payload = {"event_type": "tool.completed", "name": name, "preview": snippet, "args": _args_snapshot(args), "tid": tid, "raw_result": _raw_result(function_result)}
|
|
390
490
|
cost = _delegation_cost_usd(name, function_result)
|
|
391
491
|
if cost is not None:
|
|
392
492
|
payload["cost_usd"] = cost
|
|
@@ -415,13 +515,16 @@ def start(ctx: CallContext, params: dict) -> dict: # noqa: PLR0915 - one turn,
|
|
|
415
515
|
elif "non-retryable error" in lower:
|
|
416
516
|
emit("status", {"kind": "terminal_error", "message": text})
|
|
417
517
|
|
|
418
|
-
def clarify_callback(question, choices, questions=None):
|
|
518
|
+
def clarify_callback(question, choices, multi_select=False, questions=None):
|
|
419
519
|
choices_list = [str(c) for c in (choices or [])]
|
|
420
520
|
# Predecessor `_clarify_timeout_seconds`: the Agent's own resolver over this profile's config
|
|
421
521
|
# (``clarify.timeout`` else ``agent.clarify_timeout`` else 3600); ``<= 0`` waits until answered or cancelled.
|
|
422
522
|
# The advertised ``timeout_seconds`` is what the clients count down, so it is the same number.
|
|
423
523
|
timeout = _clarify_timeout(params)
|
|
424
524
|
data = {"question": str(question or ""), "choices_offered": choices_list, "session_id": session_id, "kind": "clarify", "requested_at": time.time(), "timeout_seconds": timeout}
|
|
525
|
+
if multi_select:
|
|
526
|
+
data["multi_select"] = True
|
|
527
|
+
# Batch prompts (the Agent's ``_run_batch``) carry no top-level question and expect the ``{"answers": {...}}`` reply.
|
|
425
528
|
if isinstance(questions, list) and questions:
|
|
426
529
|
data["questions"] = questions
|
|
427
530
|
entry = _ClarifyEntry(data)
|
|
@@ -525,6 +628,7 @@ def start(ctx: CallContext, params: dict) -> dict: # noqa: PLR0915 - one turn,
|
|
|
525
628
|
with _APPROVAL_CB_LOCK:
|
|
526
629
|
register_gateway_notify(session_id, approval_cb)
|
|
527
630
|
_APPROVAL_CB_OWNER[session_id] = stream_id
|
|
631
|
+
run.prior_messages = getattr(agent, "_session_messages", None)
|
|
528
632
|
run.agent = agent
|
|
529
633
|
compressions_before = int(getattr(getattr(agent, "context_compressor", None), "compression_count", 0) or 0)
|
|
530
634
|
|
|
@@ -649,6 +753,8 @@ def register(registry) -> None:
|
|
|
649
753
|
run = _run_for(params)
|
|
650
754
|
if run is None:
|
|
651
755
|
return {"ok": False, "reason": "not_running"}
|
|
756
|
+
# Before the interrupt, so the unwinding Agent cannot reshape the transcript first.
|
|
757
|
+
checkpoint = _cancel_checkpoint(run)
|
|
652
758
|
run.cancel.set()
|
|
653
759
|
# Predecessor ``_finalize_webui_steers``: drain the Agent's not-yet-applied steer text so the server can
|
|
654
760
|
# settle queued steers (consumed vs leftover) before it writes the terminal cancel row.
|
|
@@ -660,7 +766,10 @@ def register(registry) -> None:
|
|
|
660
766
|
pending = str(drain() or "") if callable(drain) else _agent_pending_steer_text(agent)
|
|
661
767
|
except Exception: # noqa: BLE001
|
|
662
768
|
pending = _agent_pending_steer_text(agent)
|
|
663
|
-
|
|
769
|
+
result = {"ok": True, "pending_steer": pending}
|
|
770
|
+
if checkpoint is not None:
|
|
771
|
+
result["checkpoint"] = checkpoint
|
|
772
|
+
return result
|
|
664
773
|
|
|
665
774
|
@registry.method("chat.steer", requires_agent=False)
|
|
666
775
|
def steer_(ctx: CallContext, params: dict) -> dict:
|
|
@@ -50,7 +50,9 @@ def read_config(path: Path) -> dict:
|
|
|
50
50
|
raise
|
|
51
51
|
except Exception as exc: # noqa: BLE001
|
|
52
52
|
raise RpcError(f"config.yaml is not valid YAML: {exc}", condition="config_invalid") from exc
|
|
53
|
-
|
|
53
|
+
if data is not None and not isinstance(data, dict):
|
|
54
|
+
raise RpcError("config.yaml must contain a mapping", condition="config_invalid")
|
|
55
|
+
return {"path": str(path), "exists": True, "config": data if data is not None else {}}
|
|
54
56
|
|
|
55
57
|
|
|
56
58
|
def _write_target(path: Path) -> Path:
|
|
@@ -117,11 +119,11 @@ def reasoning_efforts(model: str, provider: str) -> dict:
|
|
|
117
119
|
|
|
118
120
|
|
|
119
121
|
def register(registry) -> None:
|
|
120
|
-
@registry.method("config.get", requires_agent=
|
|
122
|
+
@registry.method("config.get", requires_agent=False)
|
|
121
123
|
def get(ctx: CallContext, params: dict) -> dict:
|
|
122
124
|
return read_config(config_path_param(params))
|
|
123
125
|
|
|
124
|
-
@registry.method("config.set", requires_agent=
|
|
126
|
+
@registry.method("config.set", requires_agent=False)
|
|
125
127
|
def set_(ctx: CallContext, params: dict) -> dict:
|
|
126
128
|
return write_config(config_path_param(params), params.get("config"))
|
|
127
129
|
|
|
@@ -305,14 +305,8 @@ class AgentRuntime:
|
|
|
305
305
|
|
|
306
306
|
# ── handshake ─────────────────────────────────────────────────────────
|
|
307
307
|
def describe(self) -> dict:
|
|
308
|
-
#
|
|
309
|
-
#
|
|
310
|
-
if not self.loaded:
|
|
311
|
-
compatible = False
|
|
312
|
-
elif self.revision is not None:
|
|
313
|
-
compatible = self.revision == self.pin["source_revision"]
|
|
314
|
-
else:
|
|
315
|
-
compatible = self.agent_version is not None and self.agent_version == self.pin["version"]
|
|
308
|
+
# The pin records official test coverage, not runtime capability. Each operation still checks its imports,
|
|
309
|
+
# profile isolation and loaded-revision guard at the point of use.
|
|
316
310
|
return {
|
|
317
311
|
"rpc_version": SIDECAR_RPC_VERSION,
|
|
318
312
|
"python": sys.executable,
|
|
@@ -323,7 +317,7 @@ class AgentRuntime:
|
|
|
323
317
|
"pinned_revision": self.pin["source_revision"],
|
|
324
318
|
"pinned_version": self.pin["version"],
|
|
325
319
|
"pinned_image": self.pin["image"],
|
|
326
|
-
"compatible":
|
|
320
|
+
"compatible": self.loaded,
|
|
327
321
|
"stale": self.is_stale(),
|
|
328
322
|
"update_state": self.update_transaction_state(),
|
|
329
323
|
"import_error": self.import_error,
|