@maudecode/talaria-web 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_release.json +4 -4
- package/dist/api/automation-router.d.ts +102 -0
- package/dist/api/automation-router.js +2 -0
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +589 -52
- package/dist/api/chat-router.js +111 -121
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/router.d.ts +2 -1
- package/dist/api/router.js +3 -1
- package/dist/api/router.js.map +1 -1
- package/dist/api/sessions-router.d.ts +1918 -299
- package/dist/api/sessions-router.js +39 -24
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +45 -8
- package/dist/api/settings-router.js +14 -10
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.js +1 -1
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/app.d.ts +2728 -416
- package/dist/config/agent-config.js +20 -15
- package/dist/config/agent-config.js.map +1 -1
- package/dist/http/context.d.ts +4 -2
- package/dist/http/context.js.map +1 -1
- package/dist/onboarding.d.ts +1 -1
- package/dist/onboarding.js +2 -1
- package/dist/onboarding.js.map +1 -1
- package/dist/providers/catalog.d.ts +11 -0
- package/dist/providers/catalog.js +32 -1
- package/dist/providers/catalog.js.map +1 -1
- package/dist/runtime.js +56 -17
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -1
- package/dist/sessions/background-tasks.d.ts +137 -0
- package/dist/sessions/background-tasks.js +349 -0
- package/dist/sessions/background-tasks.js.map +1 -0
- package/dist/sessions/background-updates.d.ts +56 -0
- package/dist/sessions/background-updates.js +152 -0
- package/dist/sessions/background-updates.js.map +1 -0
- package/dist/sessions/cli-sessions.d.ts +6 -0
- package/dist/sessions/cli-sessions.js +20 -7
- package/dist/sessions/cli-sessions.js.map +1 -1
- package/dist/sessions/completions.d.ts +17 -1
- package/dist/sessions/completions.js +83 -12
- package/dist/sessions/completions.js.map +1 -1
- package/dist/sessions/compress.d.ts +33 -0
- package/dist/sessions/compress.js +66 -0
- package/dist/sessions/compress.js.map +1 -0
- package/dist/sessions/journal.d.ts +27 -12
- package/dist/sessions/journal.js +115 -40
- package/dist/sessions/journal.js.map +1 -1
- package/dist/sessions/list.d.ts +14 -0
- package/dist/sessions/list.js +89 -16
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +19 -1
- package/dist/sessions/merge.js +75 -7
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/relay.d.ts +17 -1
- package/dist/sessions/relay.js +74 -13
- package/dist/sessions/relay.js.map +1 -1
- package/dist/sessions/service.d.ts +61 -3
- package/dist/sessions/service.js +244 -16
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +16 -0
- package/dist/sessions/session.js +23 -2
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/source-kind.d.ts +22 -0
- package/dist/sessions/source-kind.js +54 -0
- package/dist/sessions/source-kind.js.map +1 -0
- package/dist/sessions/state-db.d.ts +10 -1
- package/dist/sessions/state-db.js +48 -17
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/store.d.ts +2 -0
- package/dist/sessions/store.js +23 -4
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +3 -0
- package/dist/sessions/streams.js +0 -5
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/titles.d.ts +4 -0
- package/dist/sessions/titles.js +16 -0
- package/dist/sessions/titles.js.map +1 -1
- package/dist/sessions/turn-context.d.ts +1 -0
- package/dist/sessions/turn-context.js +3 -0
- package/dist/sessions/turn-context.js.map +1 -1
- package/dist/sessions/turn.d.ts +66 -6
- package/dist/sessions/turn.js +306 -63
- package/dist/sessions/turn.js.map +1 -1
- package/dist/settings.d.ts +2 -0
- package/dist/settings.js +6 -0
- package/dist/settings.js.map +1 -1
- package/dist/tools/crons.d.ts +34 -3
- package/dist/tools/crons.js +271 -31
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/hygiene.d.ts +11 -3
- package/dist/tools/hygiene.js +32 -14
- package/dist/tools/hygiene.js.map +1 -1
- package/package.json +2 -2
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/methods/chat.py +233 -6
- package/sidecar/talaria_sidecar/methods/cron.py +22 -14
- package/sidecar/talaria_sidecar/methods/process.py +318 -0
- package/static/dist/FILES.txt +120 -119
- package/static/dist/assets/AppShell-orat1s43.js +1 -0
- package/static/dist/assets/ChatPage-ojhka3hy.js +22 -0
- package/static/dist/assets/HubRoute-gxgw1t33.js +2 -0
- package/static/dist/assets/{Markdown-bx4n7qs4.js → Markdown-dy8t4dy7.js} +7 -7
- package/static/dist/assets/{RightPanel-ds4majj3.js → RightPanel-c66ani1s.js} +1 -1
- package/static/dist/assets/Select-fswf66up.js +1 -0
- package/static/dist/assets/SessionListPanel-goh5mtt8.js +1 -0
- package/static/dist/assets/{SettingsLayout-oigbg9rl.js → SettingsLayout-n5d4wq4m.js} +1 -1
- package/static/dist/assets/States-kxyu50at.js +1 -0
- package/static/dist/assets/Toaster-6zmbcqgg.js +1 -0
- package/static/dist/assets/_app-fowyruiu.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-nvjyrwhy.js +1 -0
- package/static/dist/assets/_app.index-c9zv4y7w.js +1 -0
- package/static/dist/assets/_app.insights-jf12nofo.js +1 -0
- package/static/dist/assets/_app.kanban-lri5a4yu.js +1 -0
- package/static/dist/assets/_app.logs-md1p0zqo.js +1 -0
- package/static/dist/assets/_app.memory-bzvf2e28.js +1 -0
- package/static/dist/assets/_app.profiles-jpg7zmbn.js +1 -0
- package/static/dist/assets/{_app.session._sessionId-ciix6itb.js → _app.session._sessionId-gyoh5ylx.js} +1 -1
- package/static/dist/assets/_app.settings-mpuwlx4j.js +1 -0
- package/static/dist/assets/_app.settings._section-knz8rwoj.js +1 -0
- package/static/dist/assets/_app.skills-fwu1dkir.js +1 -0
- package/static/dist/assets/_app.tasks-h9gphtl3.js +2 -0
- package/static/dist/assets/_app.todos-hd1dnvrh.js +1 -0
- package/static/dist/assets/_app.workspaces-l8toyn5f.js +1 -0
- package/static/dist/assets/{abnfDiagram-VCTEODGH-krt0yaru.js → abnfDiagram-VCTEODGH-cjqletra.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-cavnusaw.js +1 -0
- package/static/dist/assets/{architectureDiagram-5GKGNRK7-i54t9ywl.js → architectureDiagram-5GKGNRK7-k5a7v36n.js} +1 -1
- package/static/dist/assets/back-e4m6nsnm.js +1 -0
- package/static/dist/assets/{blockDiagram-I7D4REHJ-fevbz4mz.js → blockDiagram-I7D4REHJ-b195z021.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-np8eclmc.js → c4Diagram-7LVT6UL2-olu212k1.js} +1 -1
- package/static/dist/assets/channel-gozy3dp3.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-owoi036m.js → chunk-4HAMMTFA-b8o1nufs.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-md44zf1n.js → chunk-75Z2AOVW-l1seddto.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-ka3rw8d6.js → chunk-DU6HZSFF-lo5zg15v.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-iasnjsky.js → chunk-F27PBJKO-dsdzrp16.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-ex1up6tz.js → chunk-GMAD6QVW-f3fxqq8b.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-d4kmmg9p.js → chunk-GVQU2GXP-h8egxtf6.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-mwy42t85.js → chunk-IMKFNOWR-iolwd8s0.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-fv7ry213.js → chunk-L3NEJ4N5-b88bbtwi.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-jg9ir8ac.js → chunk-OSK3NFVY-e3e7nr6s.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-pe9ms3ua.js → chunk-P2QGCYS3-mdc46rt1.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-dimsjrn1.js → chunk-POPQ4Y6H-kqlllrrm.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-m4hv98dy.js → chunk-PWAF6VOD-he585k2x.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-gkjgl6qe.js → chunk-SHT3W25Y-gh94y9a4.js} +1 -1
- package/static/dist/assets/{chunk-SVP7TREG-bc8qss5l.js → chunk-SVP7TREG-euxp9y7e.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-k9wzw38w.js → chunk-TICWLB2K-c8cxes1q.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-n0vs2f2q.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-n0vs2f2q.js +1 -0
- package/static/dist/assets/{copied-d5joolw7.js → copied-kq0u3ht7.js} +1 -1
- package/static/dist/assets/{cynefin-OW5HDTMX-hueklikk.js → cynefin-OW5HDTMX-lxd44ux4.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-e83o1wr1.js → cynefinDiagram-5FMLGOSQ-njpiwat8.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-ir1tj2ar.js → dagre-GXQ25YYZ-nvgy6yju.js} +1 -1
- package/static/dist/assets/{diagram-S7CK7UJ4-o5218p2q.js → diagram-S7CK7UJ4-g98nyv72.js} +1 -1
- package/static/dist/assets/{diagram-UQ7AKVKN-ciad4o1i.js → diagram-UQ7AKVKN-ovgm6lvv.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-oharqjbt.js → diagram-VSXAHHWV-pb2bn2e4.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-wkwy62iv.js → diagram-VX7I27RA-6j4mvfqo.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-bl252i7r.js → diagram-Z3DM3KII-dqmb982r.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-nm0rcly7.js → ebnfDiagram-PWID7BFC-ozbpzb6d.js} +1 -1
- package/static/dist/assets/endpoints-k8agnro8.js +9 -0
- package/static/dist/assets/{erDiagram-RLTQ6QDP-m1w0vta2.js → erDiagram-RLTQ6QDP-hl7m8vua.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-j1y2ekec.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-g2cvcbm5.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-czxo6iew.js → ganttDiagram-EL5Y4UJY-ompixqmh.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-ip9j1rph.js → gitGraph-4MIJSDKK-b6vxwp9q.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-kalxdole.js → gitGraphDiagram-WWUBYQGX-k98f57on.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-lgsj6fsk.js → highlighted-body-KPVGNVTW-cd3ff6ge.js} +1 -1
- package/static/dist/assets/index-nfy0ezs6.css +2 -0
- package/static/dist/assets/index-nqed3oum.js +11 -0
- package/static/dist/assets/{info-A6RAGUB7-fv4fbc5m.js → info-A6RAGUB7-hjcwjami.js} +1 -1
- package/static/dist/assets/{infoDiagram-27XIBGKW-kinx5jsl.js → infoDiagram-27XIBGKW-fm06rj36.js} +1 -1
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-kozvlqdv.js → ishikawaDiagram-5VMMS53U-bxak4mwu.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-lgpouxoe.js → journeyDiagram-3NMN7TZE-khmihclr.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-b320wo7b.js → kanban-definition-UXKFOSKX-h1r32wdx.js} +1 -1
- package/static/dist/assets/{lazyRouteComponent-hy8doeye.js → lazyRouteComponent-b2eg0fws.js} +1 -1
- package/static/dist/assets/{line-gxfwyhjq.js → line-friyjof3.js} +1 -1
- package/static/dist/assets/link-m90ahx3n.js +1 -0
- package/static/dist/assets/login-bw7m2fzo.js +1 -0
- package/static/dist/assets/mermaid-HWGCJPDP-njwcl62n.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-loxeqsu3.js → mermaid-parser.core-f1gvpwrt.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-edi534gc.js → mindmap-definition-YA3MSWOX-mt2oxwue.js} +1 -1
- package/static/dist/assets/onboarding-ret37j1e.js +1 -0
- package/static/dist/assets/{packet-AYTQ26CC-gmb3yy71.js → packet-AYTQ26CC-jik4ixlf.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-fxy5j8cx.js → pegDiagram-XKGWAZYB-erxlv6cc.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-do2pm4s6.js → pie-WAS4IAKB-mnkoldfl.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-mgjvb365.js → pieDiagram-E7YTZNPT-i7lwrada.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-dhok6m1j.js → quadrantDiagram-AXDQQJYC-fr8ejdoy.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-n5giw3vb.js → radar-RG4KPBEZ-otarjte2.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-h6nfs9bj.js → railroad-74A4TZTK-lw362oto.js} +1 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-m741owar.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-noa4fbia.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-o4bpw4nb.js +1 -0
- package/static/dist/assets/{railroadDiagram-O6MQD6OU-lfwg92r4.js → railroadDiagram-O6MQD6OU-esyn75pw.js} +1 -1
- package/static/dist/assets/{refresh-cw-bg6oc499.js → refresh-cw-k66keho6.js} +1 -1
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-c5k5pg07.js → requirementDiagram-BXWQKSXE-cyhi5u29.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-o9auio4y.js → sankeyDiagram-P5KCCOFB-jljpbo0h.js} +1 -1
- package/static/dist/assets/{saved-j5wyhbik.js → saved-do49si3v.js} +1 -1
- package/static/dist/assets/{search-ipa17zlr.js → search-j5ki6a9o.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-pfgodnmk.js → sequenceDiagram-WJ2MYXX4-fz0dhlu7.js} +1 -1
- package/static/dist/assets/{settings_section_extensions_title-fcfjf6l8.js → settings_section_extensions_title-b7lojn0o.js} +1 -1
- package/static/dist/assets/share._token-kg8w647b.js +2 -0
- package/static/dist/assets/{sliders-horizontal-bfrh4rch.js → sliders-horizontal-c4wya4dy.js} +1 -1
- package/static/dist/assets/{stateDiagram-D77RDMKH-m1y2cr3q.js → stateDiagram-D77RDMKH-kdnithdx.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-k2wg2645.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-hzai6fwo.js → swimlanes-42K2YHIH-esd6gmz3.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-n5kvjtgr.js +8 -0
- package/static/dist/assets/tabBuild-bjmyvmn5.js +56 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-gwefy9gi.js → timeline-definition-24CTP7MA-g0qygccv.js} +1 -1
- package/static/dist/assets/todoStore-kjk5l0sy.js +1 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-7q91p0dn.js → treeView-Q6P3EWNA-ndchzkuu.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-occom39a.js → treemap-WGGIJYW6-hwjxj0zz.js} +1 -1
- package/static/dist/assets/{untitled-cgw2enra.js → untitled-mbr6tuhu.js} +1 -1
- package/static/dist/assets/useForm-ocxu460f.js +1 -0
- package/static/dist/assets/useLocale-fzy5jhg6.js +1 -0
- package/static/dist/assets/{useParams-gpbjxj8s.js → useParams-lo9u33d1.js} +1 -1
- package/static/dist/assets/{useSearch-bhdptos7.js → useSearch-lq1mr090.js} +1 -1
- package/static/dist/assets/{vennDiagram-4TSXK5OY-ew4bhldi.js → vennDiagram-4TSXK5OY-gubovd1r.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-njdacy0u.js → wardley-WFR3VGLG-ir3om65j.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-mkvxx7u9.js → wardleyDiagram-VM6X3IG4-ce0or1ie.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-8uriotdw.js → xychartDiagram-S5SC5T6Z-dexylcjg.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +1 -1
- package/static/dist/assets/AppShell-irdqom6e.js +0 -1
- package/static/dist/assets/ChatPage-ldhqevjn.js +0 -20
- package/static/dist/assets/HubRoute-hq24vhj8.js +0 -2
- package/static/dist/assets/Select-gpqmt6x1.js +0 -1
- package/static/dist/assets/SessionListPanel-hkvipik4.js +0 -1
- package/static/dist/assets/States-fn4o2wdf.js +0 -1
- package/static/dist/assets/Toaster-cwnut53k.js +0 -1
- package/static/dist/assets/_app-h6ago6y6.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-erqnfff5.js +0 -1
- package/static/dist/assets/_app.index-cq2fxmda.js +0 -1
- package/static/dist/assets/_app.insights-nzhld9gu.js +0 -1
- package/static/dist/assets/_app.kanban-m5uggety.js +0 -1
- package/static/dist/assets/_app.logs-d2kk9lza.js +0 -1
- package/static/dist/assets/_app.memory-gcmop1e7.js +0 -1
- package/static/dist/assets/_app.profiles-e9b2my7x.js +0 -1
- package/static/dist/assets/_app.settings-kcjum3c1.js +0 -1
- package/static/dist/assets/_app.settings._section-bi4jjex0.js +0 -1
- package/static/dist/assets/_app.skills-e4e61l23.js +0 -1
- package/static/dist/assets/_app.tasks-f1evdhbl.js +0 -2
- package/static/dist/assets/_app.todos-o7ijtk42.js +0 -1
- package/static/dist/assets/_app.workspaces-o18voh0w.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-notdhmpv.js +0 -1
- package/static/dist/assets/channel-jpk1nas2.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-hld301gc.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-hld301gc.js +0 -1
- package/static/dist/assets/endpoints-d8n28yf3.js +0 -64
- package/static/dist/assets/eventmodeling-NTZA5JFV-eaqs19mj.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-eli5764n.js +0 -1
- package/static/dist/assets/index-l08181vr.js +0 -11
- package/static/dist/assets/index-pdtcl20t.css +0 -2
- package/static/dist/assets/link-ib4prsn5.js +0 -1
- package/static/dist/assets/login-llplsuey.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-f3scrlds.js +0 -1
- package/static/dist/assets/onboarding-n1xhlgym.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-d5gaaud9.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-ihudnbec.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-lgpvhel7.js +0 -1
- package/static/dist/assets/share._token-i339gqj4.js +0 -2
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-hehvfv55.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-nfk9mtst.js +0 -8
- package/static/dist/assets/todoStore-fhvdsen0.js +0 -1
- package/static/dist/assets/useForm-jwbfla68.js +0 -1
- package/static/dist/assets/useLocale-gieo1fn7.js +0 -1
- package/static/dist/assets/useSelector-f2aak1ol.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hygiene.js","sourceRoot":"","sources":["../../src/tools/hygiene.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hygiene.js","sourceRoot":"","sources":["../../src/tools/hygiene.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maudecode/talaria-web",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Talaria Web server: Node 24 HTTP server for the Hermes Agent browser workbench, with the talaria-web launcher, daemon control, self-update, and MCP bins.",
|
|
6
6
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"postpack": "node scripts/prepack.mjs --clean"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@maudecode/talaria-web-contracts": "1.
|
|
28
|
+
"@maudecode/talaria-web-contracts": "1.15.0",
|
|
29
29
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
30
30
|
"@orpc/contract": "1.15.2",
|
|
31
31
|
"@orpc/openapi": "1.15.2",
|
|
@@ -257,13 +257,86 @@ def _clarify_timeout(params: dict) -> int:
|
|
|
257
257
|
return 3600
|
|
258
258
|
|
|
259
259
|
|
|
260
|
+
def _steer_slot_lock(agent):
|
|
261
|
+
"""The Agent's own pending-steer lock (a plain ``Lock``), so a slot read or rewrite is atomic against its drains."""
|
|
262
|
+
lock = agent.__dict__.get("_pending_steer_lock") if hasattr(agent, "__dict__") else None
|
|
263
|
+
return contextlib.nullcontext() if lock is None else lock
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def _steer_slot(agent) -> str:
|
|
267
|
+
"""The Agent's not-yet-applied steer text; call under ``_steer_slot_lock``."""
|
|
268
|
+
return str(getattr(agent, "_pending_steer", "") or "")
|
|
269
|
+
|
|
270
|
+
|
|
260
271
|
def _agent_pending_steer_text(agent) -> str:
|
|
261
272
|
"""Predecessor ``_agent_pending_steer_text``: the Agent's not-yet-applied steer text."""
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
273
|
+
with _steer_slot_lock(agent):
|
|
274
|
+
return _steer_slot(agent)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
def _slot_without(slot: str, pending: list[str], index: int) -> str | None:
|
|
278
|
+
"""``slot`` without the steer ``pending[index]`` while the Agent still holds it, else None (it already took it).
|
|
279
|
+
|
|
280
|
+
The Agent keeps every not-yet-applied steer in one newline-joined slot, so the slot is the tail of ``pending``
|
|
281
|
+
(the server's steers, oldest first), possibly behind text another surface queued: the server's
|
|
282
|
+
``pendingSteerSuffixStart`` rule. The longest tail that still holds the steer wins."""
|
|
283
|
+
for start in range(index + 1):
|
|
284
|
+
tail = "\n".join(pending[start:])
|
|
285
|
+
if slot == tail or slot.endswith("\n" + tail):
|
|
286
|
+
head = slot[: len(slot) - len(tail)].rstrip("\n")
|
|
287
|
+
return "\n".join(part for part in [head, *pending[start:index], *pending[index + 1:]] if part)
|
|
288
|
+
return None
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
def withdraw_steer(agent, pending: list[str], index: int) -> bool:
|
|
292
|
+
"""TAL-424: take a not-yet-applied steer back out of the Agent's slot, keeping the others in order. False when the
|
|
293
|
+
Agent already took it; the slot is then left as it was, so no text is ever lost."""
|
|
294
|
+
with _steer_slot_lock(agent):
|
|
295
|
+
rest = _slot_without(_steer_slot(agent), pending, index)
|
|
296
|
+
if rest is None:
|
|
297
|
+
return False
|
|
298
|
+
agent._pending_steer = rest or None
|
|
299
|
+
return True
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def steer_now(agent, pending: list[str], index: int) -> dict:
|
|
303
|
+
"""TAL-424: deliver a pending steer now with the Agent's ``redirect``. During a model request that request restarts
|
|
304
|
+
with it (``delivery: redirect``); during tools it goes back on the slot and the tools yield (``delivery: steer``).
|
|
305
|
+
With no live request the steer stays pending: back in its place, or last when the slot changed meanwhile."""
|
|
306
|
+
text = pending[index]
|
|
307
|
+
with _steer_slot_lock(agent):
|
|
308
|
+
before = _steer_slot(agent)
|
|
309
|
+
rest = _slot_without(before, pending, index)
|
|
310
|
+
if rest is None:
|
|
311
|
+
return {"redirected": False, "withdrawn": False}
|
|
312
|
+
agent._pending_steer = rest or None
|
|
313
|
+
redirect = getattr(agent, "redirect", None)
|
|
314
|
+
try:
|
|
315
|
+
redirected = bool(redirect(text)) if callable(redirect) else False
|
|
316
|
+
except Exception as exc: # noqa: BLE001
|
|
317
|
+
log.debug("redirect failed: %s", exc)
|
|
318
|
+
redirected = False
|
|
319
|
+
if not redirected:
|
|
320
|
+
with _steer_slot_lock(agent):
|
|
321
|
+
if _steer_slot(agent) == rest:
|
|
322
|
+
agent._pending_steer = before or None
|
|
323
|
+
return {"redirected": False, "withdrawn": True, "requeued": "kept"}
|
|
324
|
+
agent.steer(text)
|
|
325
|
+
return {"redirected": False, "withdrawn": True, "requeued": "last"}
|
|
326
|
+
with _steer_slot_lock(agent):
|
|
327
|
+
slot = _steer_slot(agent)
|
|
328
|
+
delivery = "steer" if slot == text or slot.endswith("\n" + text) else "redirect"
|
|
329
|
+
return {"redirected": True, "withdrawn": True, "delivery": delivery}
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def _steer_queue_params(params: dict) -> tuple[list[str], int]:
|
|
333
|
+
pending = params.get("pending")
|
|
334
|
+
index = params.get("index")
|
|
335
|
+
if not isinstance(pending, list) or not all(isinstance(t, str) and t.strip() for t in pending):
|
|
336
|
+
raise InvalidParams("pending must be a list of steer texts")
|
|
337
|
+
if not isinstance(index, int) or isinstance(index, bool) or not 0 <= index < len(pending):
|
|
338
|
+
raise InvalidParams("index must point into pending")
|
|
339
|
+
return [t.strip() for t in pending], index
|
|
267
340
|
|
|
268
341
|
|
|
269
342
|
def _cancel_checkpoint(run: _Run) -> list | None:
|
|
@@ -725,6 +798,131 @@ def start(ctx: CallContext, params: dict) -> dict: # noqa: PLR0915 - one turn,
|
|
|
725
798
|
_RUNS_BY_SESSION.pop(session_id, None)
|
|
726
799
|
|
|
727
800
|
|
|
801
|
+
def _checkpoint_required() -> bool:
|
|
802
|
+
"""``compression.checkpoint_required`` needs the memory provider loaded to write the pre-compression checkpoint."""
|
|
803
|
+
try:
|
|
804
|
+
from hermes_cli.config import load_config
|
|
805
|
+
|
|
806
|
+
return ((load_config() or {}).get("compression") or {}).get("checkpoint_required") is True
|
|
807
|
+
except Exception: # noqa: BLE001
|
|
808
|
+
return False
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
#: Compressed results awaiting the server's write: ``commit_token -> (agent, profile home, expiry timer)``.
|
|
812
|
+
_PENDING_COMPRESSIONS: dict[str, tuple[Any, Any, threading.Timer]] = {}
|
|
813
|
+
_PENDING_COMPRESSIONS_LOCK = threading.Lock()
|
|
814
|
+
#: A server that never answers (restart, crash) gets its compression discarded after this long.
|
|
815
|
+
_PENDING_COMPRESSION_TTL = 600.0
|
|
816
|
+
|
|
817
|
+
|
|
818
|
+
def _release_compression(agent, committed: bool) -> None:
|
|
819
|
+
"""Emit (committed) or discard the Agent's deferred context-engine notification, then close the throwaway agent."""
|
|
820
|
+
from agent.conversation_compression import finalize_context_engine_compression_notification
|
|
821
|
+
|
|
822
|
+
try:
|
|
823
|
+
finalize_context_engine_compression_notification(agent, committed=committed)
|
|
824
|
+
finally:
|
|
825
|
+
with contextlib.suppress(Exception):
|
|
826
|
+
agent._end_session_on_close = False
|
|
827
|
+
close = getattr(agent, "close", None)
|
|
828
|
+
if callable(close):
|
|
829
|
+
try:
|
|
830
|
+
close()
|
|
831
|
+
except Exception: # noqa: BLE001
|
|
832
|
+
log.debug("compression agent close failed", exc_info=True)
|
|
833
|
+
|
|
834
|
+
|
|
835
|
+
def finalize_compression(token: str, committed: bool) -> bool:
|
|
836
|
+
"""``chat.compress_finalize``: the server reports whether it installed the result; unknown tokens are a no-op."""
|
|
837
|
+
with _PENDING_COMPRESSIONS_LOCK:
|
|
838
|
+
entry = _PENDING_COMPRESSIONS.pop(token, None)
|
|
839
|
+
if entry is None:
|
|
840
|
+
return False
|
|
841
|
+
agent, home, expiry = entry
|
|
842
|
+
expiry.cancel() # a no-op when the timer itself is finalizing
|
|
843
|
+
with scoped_home(home):
|
|
844
|
+
_release_compression(agent, committed=committed)
|
|
845
|
+
return True
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
def compress(ctx: CallContext, params: dict) -> dict:
|
|
849
|
+
"""Manual ``/compress`` of ``conversation_history`` through the Agent's shared core (``compress_now``) on a throwaway
|
|
850
|
+
agent, like the gateway's ``_run_manual_compression``. The server owns the transcript: it re-checks the session and
|
|
851
|
+
installs ``messages`` itself, so nothing here touches history or the cached turn agent. The agent has no session
|
|
852
|
+
store, so the Agent neither rotates nor writes state.db; its one deferred effect, the context-engine notification,
|
|
853
|
+
waits for ``chat.compress_finalize`` with the returned ``commit_token`` (two-phase, like the gateway's commit)."""
|
|
854
|
+
home = profile_home_param(params)
|
|
855
|
+
session_id = str(params.get("session_id") or "").strip()
|
|
856
|
+
if not session_id:
|
|
857
|
+
raise InvalidParams("session_id is required")
|
|
858
|
+
history = params.get("conversation_history")
|
|
859
|
+
if not isinstance(history, list):
|
|
860
|
+
raise InvalidParams("conversation_history must be a list")
|
|
861
|
+
model = str(params.get("model") or "").strip()
|
|
862
|
+
provider = str(params.get("model_provider") or "").strip() or None
|
|
863
|
+
focus_topic = str(params.get("focus_topic") or "").strip()[:500] or None
|
|
864
|
+
toolsets = params.get("enabled_toolsets")
|
|
865
|
+
runtime = _resolve_runtime(provider, model)
|
|
866
|
+
if not runtime.get("api_key"):
|
|
867
|
+
raise RpcError("No provider configured -- cannot compress.", condition="credential_missing")
|
|
868
|
+
from agent.conversation_compression_manual import CompressRequest, compress_now
|
|
869
|
+
|
|
870
|
+
AIAgent = _agent_class()
|
|
871
|
+
kwargs: dict = dict(
|
|
872
|
+
model=model or str(runtime.get("model") or ""),
|
|
873
|
+
provider=provider or runtime.get("provider"),
|
|
874
|
+
base_url=runtime.get("base_url"),
|
|
875
|
+
api_key=runtime.get("api_key"),
|
|
876
|
+
platform="webui",
|
|
877
|
+
quiet_mode=True,
|
|
878
|
+
enabled_toolsets=toolsets if isinstance(toolsets, list) else None,
|
|
879
|
+
session_id=session_id,
|
|
880
|
+
)
|
|
881
|
+
for name, value in (
|
|
882
|
+
("api_mode", runtime.get("api_mode")),
|
|
883
|
+
("acp_command", runtime.get("acp_command")),
|
|
884
|
+
("acp_args", runtime.get("acp_args")),
|
|
885
|
+
("credential_pool", runtime.get("credential_pool")),
|
|
886
|
+
("gateway_session_key", session_id),
|
|
887
|
+
("skip_memory", not _checkpoint_required()),
|
|
888
|
+
):
|
|
889
|
+
if _supported(AIAgent, name) and value is not None:
|
|
890
|
+
kwargs[name] = value
|
|
891
|
+
agent = AIAgent(**kwargs)
|
|
892
|
+
held = False
|
|
893
|
+
try:
|
|
894
|
+
result = compress_now(agent, history, CompressRequest(focus_topic=focus_topic), task_id=session_id)
|
|
895
|
+
message = None
|
|
896
|
+
if result.status != "compressed":
|
|
897
|
+
from agent.conversation_compression_manual import render_compress_result
|
|
898
|
+
|
|
899
|
+
message = "\n".join(render_compress_result(result)) or None
|
|
900
|
+
payload = {
|
|
901
|
+
"status": result.status,
|
|
902
|
+
"messages": json.loads(json.dumps([m for m in result.after_messages if isinstance(m, dict)], default=str)),
|
|
903
|
+
"before_tokens": int(result.before_tokens or 0),
|
|
904
|
+
"after_tokens": int(result.after_tokens or 0),
|
|
905
|
+
"summary": json.loads(json.dumps(result.summary, default=str)) if isinstance(result.summary, dict) else None,
|
|
906
|
+
"message": message,
|
|
907
|
+
"agent_session_id": str(getattr(agent, "session_id", None) or session_id),
|
|
908
|
+
"commit_token": None,
|
|
909
|
+
}
|
|
910
|
+
if result.status == "compressed":
|
|
911
|
+
token = uuid.uuid4().hex
|
|
912
|
+
# A server that never answers (restart, failed RPC) gets the compression discarded on its own.
|
|
913
|
+
expiry = threading.Timer(_PENDING_COMPRESSION_TTL, finalize_compression, args=(token, False))
|
|
914
|
+
expiry.daemon = True
|
|
915
|
+
with _PENDING_COMPRESSIONS_LOCK:
|
|
916
|
+
_PENDING_COMPRESSIONS[token] = (agent, home, expiry)
|
|
917
|
+
expiry.start()
|
|
918
|
+
held = True
|
|
919
|
+
payload["commit_token"] = token
|
|
920
|
+
return payload
|
|
921
|
+
finally:
|
|
922
|
+
if not held:
|
|
923
|
+
_release_compression(agent, committed=False)
|
|
924
|
+
|
|
925
|
+
|
|
728
926
|
def _run_for(params: dict) -> _Run | None:
|
|
729
927
|
stream_id = str(params.get("stream_id") or "").strip()
|
|
730
928
|
session_id = str(params.get("session_id") or "").strip()
|
|
@@ -748,6 +946,18 @@ def register(registry) -> None:
|
|
|
748
946
|
with _turn_identity(session_id, workspace):
|
|
749
947
|
return start(ctx, params)
|
|
750
948
|
|
|
949
|
+
@registry.method("chat.compress")
|
|
950
|
+
def compress_(ctx: CallContext, params: dict) -> dict:
|
|
951
|
+
with scoped_home(profile_home_param(params)):
|
|
952
|
+
return compress(ctx, params)
|
|
953
|
+
|
|
954
|
+
@registry.method("chat.compress_finalize", requires_agent=False)
|
|
955
|
+
def compress_finalize_(ctx: CallContext, params: dict) -> dict:
|
|
956
|
+
token = str(params.get("commit_token") or "").strip()
|
|
957
|
+
if not token:
|
|
958
|
+
raise InvalidParams("commit_token is required")
|
|
959
|
+
return {"finalized": finalize_compression(token, params.get("committed") is True)}
|
|
960
|
+
|
|
751
961
|
@registry.method("chat.interrupt", requires_agent=False)
|
|
752
962
|
def interrupt_(ctx: CallContext, params: dict) -> dict:
|
|
753
963
|
run = _run_for(params)
|
|
@@ -786,7 +996,24 @@ def register(registry) -> None:
|
|
|
786
996
|
except Exception as exc: # noqa: BLE001
|
|
787
997
|
log.debug("steer failed: %s", exc)
|
|
788
998
|
return {"accepted": False, "fallback": "steer_error"}
|
|
789
|
-
|
|
999
|
+
# `can_redirect`: whether this Agent can deliver a pending steer now (TAL-424 "Send now").
|
|
1000
|
+
return {"accepted": accepted, "fallback": None if accepted else "not_running", "can_redirect": callable(getattr(run.agent, "redirect", None))}
|
|
1001
|
+
|
|
1002
|
+
@registry.method("chat.steer_withdraw", requires_agent=False)
|
|
1003
|
+
def steer_withdraw_(ctx: CallContext, params: dict) -> dict:
|
|
1004
|
+
pending, index = _steer_queue_params(params)
|
|
1005
|
+
run = _run_for(params)
|
|
1006
|
+
if run is None or run.agent is None:
|
|
1007
|
+
return {"withdrawn": False}
|
|
1008
|
+
return {"withdrawn": withdraw_steer(run.agent, pending, index)}
|
|
1009
|
+
|
|
1010
|
+
@registry.method("chat.steer_now", requires_agent=False)
|
|
1011
|
+
def steer_now_(ctx: CallContext, params: dict) -> dict:
|
|
1012
|
+
pending, index = _steer_queue_params(params)
|
|
1013
|
+
run = _run_for(params)
|
|
1014
|
+
if run is None or run.agent is None:
|
|
1015
|
+
return {"redirected": False, "withdrawn": False}
|
|
1016
|
+
return steer_now(run.agent, pending, index)
|
|
790
1017
|
|
|
791
1018
|
@registry.method("chat.evict_agent", requires_agent=False)
|
|
792
1019
|
def evict_(ctx: CallContext, params: dict) -> dict:
|
|
@@ -379,25 +379,33 @@ def register(registry) -> None:
|
|
|
379
379
|
post["profile"] = str(body["profile"]).strip()
|
|
380
380
|
if body.get("toast_notifications") is False:
|
|
381
381
|
post["toast_notifications"] = False
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
if post.get("profile")
|
|
382
|
+
if body.get("owner_profile"):
|
|
383
|
+
post["owner_profile"] = str(body["owner_profile"]).strip()
|
|
384
|
+
execution_home = params.get("execution_home")
|
|
385
|
+
if post.get("profile"):
|
|
386
|
+
if not execution_home:
|
|
387
|
+
raise InvalidParams("execution_home is required for a profile job")
|
|
388
|
+
home = Path(execution_home)
|
|
389
|
+
model, provider = (value.strip() or None if isinstance(value, str) else None for value in (body.get("model"), body.get("provider")))
|
|
390
|
+
# The scheduler ignores Talaria's profile field. Pin the execution profile's main model
|
|
391
|
+
# before creating it in that profile's own store. Scheduled workers bind credentials/config
|
|
392
|
+
# to the store home; owner_profile only preserves management from the creating Web profile.
|
|
393
|
+
if post.get("profile") and execution_home and not (model and provider) and not body.get("no_agent"):
|
|
386
394
|
try:
|
|
387
|
-
from cron.jobs import
|
|
388
|
-
|
|
389
|
-
with _SNAPSHOT_LOCK, scoped_home(Path(
|
|
390
|
-
|
|
391
|
-
if
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
+
from cron.jobs import _main_model_pin
|
|
396
|
+
|
|
397
|
+
with _SNAPSHOT_LOCK, scoped_home(Path(execution_home)):
|
|
398
|
+
profile_provider, profile_model = _main_model_pin()
|
|
399
|
+
if not profile_model:
|
|
400
|
+
raise ValueError("Profile has no main model configured")
|
|
401
|
+
provider = provider or profile_provider
|
|
402
|
+
model = model or profile_model
|
|
395
403
|
except Exception as exc: # noqa: BLE001
|
|
396
|
-
raise RpcError(f"Cannot safely resolve cron
|
|
404
|
+
raise RpcError(f"Cannot safely resolve cron model for profile {post['profile']!r}", condition="cron_snapshot_failed") from exc
|
|
397
405
|
with _store(home), scoped_home(home):
|
|
398
406
|
try:
|
|
399
407
|
job = jobs.create_job(prompt=body.get("prompt") or "", schedule=body["schedule"], name=body.get("name") or None, deliver=body.get("deliver") or "local",
|
|
400
|
-
skills=body.get("skills") or [], model=
|
|
408
|
+
skills=body.get("skills") or [], model=model, provider=provider, **kwargs)
|
|
401
409
|
except Exception as exc: # noqa: BLE001
|
|
402
410
|
raise InvalidParams(str(exc)) from exc
|
|
403
411
|
if post:
|