@maudecode/talaria-web 1.17.2 → 1.18.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 +8 -8
- package/dist/api/auth-raw.d.ts +1 -1
- package/dist/api/auth-raw.js +4 -4
- package/dist/api/auth-raw.js.map +1 -1
- package/dist/api/automation-raw.d.ts +6 -0
- package/dist/api/automation-raw.js +53 -6
- package/dist/api/automation-raw.js.map +1 -1
- package/dist/api/automation-router.d.ts +26 -1
- package/dist/api/automation-router.js +16 -2
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +649 -15
- package/dist/api/chat-router.js +52 -50
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.d.ts +35 -1
- package/dist/api/git-router.js +18 -19
- package/dist/api/git-router.js.map +1 -1
- package/dist/api/raw-routes.d.ts +8 -0
- package/dist/api/raw-routes.js +247 -36
- package/dist/api/raw-routes.js.map +1 -1
- package/dist/api/router.d.ts +10 -0
- package/dist/api/router.js +10 -8
- package/dist/api/router.js.map +1 -1
- package/dist/api/sessions-router.d.ts +1492 -115
- package/dist/api/sessions-router.js +134 -8
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +31 -0
- package/dist/api/settings-router.js +8 -3
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.d.ts +5 -0
- package/dist/api/sse-routes.js +50 -3
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-raw.js +6 -23
- package/dist/api/tools-raw.js.map +1 -1
- package/dist/api/tools-router.d.ts +356 -15
- package/dist/api/tools-router.js +148 -19
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.js +35 -15
- package/dist/app.js.map +1 -1
- package/dist/auth/gate.js +5 -2
- package/dist/auth/gate.js.map +1 -1
- package/dist/auth/oidc.d.ts +5 -2
- package/dist/auth/oidc.js +8 -7
- package/dist/auth/oidc.js.map +1 -1
- package/dist/bin/talaria-web.js +1 -1
- package/dist/bin/talaria-web.js.map +1 -1
- package/dist/cli/dotenv.js +1 -0
- package/dist/cli/dotenv.js.map +1 -1
- package/dist/config/agent-config.js +3 -2
- package/dist/config/agent-config.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/http/context.d.ts +17 -3
- package/dist/http/context.js +31 -4
- package/dist/http/context.js.map +1 -1
- package/dist/http/csp.d.ts +2 -1
- package/dist/http/csp.js +3 -2
- package/dist/http/csp.js.map +1 -1
- package/dist/profiles/profiles.d.ts +10 -0
- package/dist/profiles/profiles.js +40 -2
- package/dist/profiles/profiles.js.map +1 -1
- package/dist/providers/catalog.d.ts +6 -2
- package/dist/providers/catalog.js +30 -11
- package/dist/providers/catalog.js.map +1 -1
- package/dist/raster-image.d.ts +7 -0
- package/dist/raster-image.js +267 -0
- package/dist/raster-image.js.map +1 -0
- package/dist/redact.js +327 -40
- package/dist/redact.js.map +1 -1
- package/dist/runtime.js +89 -23
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +5 -0
- package/dist/server.js.map +1 -1
- package/dist/sessions/background-tasks.d.ts +2 -9
- package/dist/sessions/background-tasks.js +2 -12
- package/dist/sessions/background-tasks.js.map +1 -1
- package/dist/sessions/cli-sessions.d.ts +15 -4
- package/dist/sessions/cli-sessions.js +120 -29
- package/dist/sessions/cli-sessions.js.map +1 -1
- package/dist/sessions/completions.d.ts +48 -8
- package/dist/sessions/completions.js +222 -26
- package/dist/sessions/completions.js.map +1 -1
- package/dist/sessions/export.d.ts +5 -0
- package/dist/sessions/export.js +30 -0
- package/dist/sessions/export.js.map +1 -1
- package/dist/sessions/gateway-watcher.d.ts +7 -3
- package/dist/sessions/gateway-watcher.js +31 -19
- package/dist/sessions/gateway-watcher.js.map +1 -1
- package/dist/sessions/handoff.d.ts +32 -0
- package/dist/sessions/handoff.js +114 -0
- package/dist/sessions/handoff.js.map +1 -0
- package/dist/sessions/list.d.ts +7 -1
- package/dist/sessions/list.js +13 -5
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +2 -4
- package/dist/sessions/merge.js +8 -15
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/recovery.d.ts +22 -0
- package/dist/sessions/recovery.js +506 -0
- package/dist/sessions/recovery.js.map +1 -0
- package/dist/sessions/relay.d.ts +21 -2
- package/dist/sessions/relay.js +156 -11
- package/dist/sessions/relay.js.map +1 -1
- package/dist/sessions/service.d.ts +108 -6
- package/dist/sessions/service.js +403 -29
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +6 -0
- package/dist/sessions/session.js +40 -2
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/state-db-worker.d.ts +1 -0
- package/dist/sessions/state-db-worker.js +33 -0
- package/dist/sessions/state-db-worker.js.map +1 -0
- package/dist/sessions/state-db.d.ts +61 -0
- package/dist/sessions/state-db.js +291 -0
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/store.d.ts +7 -0
- package/dist/sessions/store.js +31 -22
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/titles.d.ts +2 -0
- package/dist/sessions/titles.js +4 -0
- package/dist/sessions/titles.js.map +1 -1
- package/dist/sessions/tool-display.d.ts +3 -3
- package/dist/sessions/tool-display.js +11 -37
- package/dist/sessions/tool-display.js.map +1 -1
- package/dist/sessions/turn-context.d.ts +1 -1
- package/dist/sessions/turn-context.js +11 -7
- package/dist/sessions/turn-context.js.map +1 -1
- package/dist/sessions/turn.d.ts +37 -2
- package/dist/sessions/turn.js +182 -49
- package/dist/sessions/turn.js.map +1 -1
- package/dist/sessions/wakeup-pause.d.ts +59 -0
- package/dist/sessions/wakeup-pause.js +181 -0
- package/dist/sessions/wakeup-pause.js.map +1 -0
- package/dist/settings.js +5 -7
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/fake.d.ts +2 -2
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/startup.d.ts +13 -5
- package/dist/startup.js +48 -0
- package/dist/startup.js.map +1 -1
- package/dist/test/ts-worker-hooks.d.ts +1 -0
- package/dist/test/ts-worker-hooks.js +24 -0
- package/dist/test/ts-worker-hooks.js.map +1 -0
- package/dist/text/diff.d.ts +9 -14
- package/dist/text/diff.js +74 -108
- package/dist/text/diff.js.map +1 -1
- package/dist/tools/crons.js +45 -8
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/dashboard-plugins.d.ts +53 -0
- package/dist/tools/dashboard-plugins.js +188 -0
- package/dist/tools/dashboard-plugins.js.map +1 -0
- package/dist/tools/extensions.d.ts +13 -1
- package/dist/tools/extensions.js +132 -60
- package/dist/tools/extensions.js.map +1 -1
- package/dist/tools/health.d.ts +32 -0
- package/dist/tools/health.js +111 -19
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/mcp.d.ts +13 -0
- package/dist/tools/mcp.js +88 -0
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/project-os.d.ts +11 -0
- package/dist/tools/project-os.js +267 -0
- package/dist/tools/project-os.js.map +1 -0
- package/dist/tools/skills.d.ts +5 -1
- package/dist/tools/skills.js +5 -3
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/updates.d.ts +27 -9
- package/dist/tools/updates.js +163 -51
- package/dist/tools/updates.js.map +1 -1
- package/dist/tools/wiki.d.ts +68 -0
- package/dist/tools/wiki.js +413 -0
- package/dist/tools/wiki.js.map +1 -0
- package/dist/workspace/escape.d.ts +61 -0
- package/dist/workspace/escape.js +149 -0
- package/dist/workspace/escape.js.map +1 -0
- package/dist/workspace/extract.d.ts +22 -0
- package/dist/workspace/extract.js +308 -0
- package/dist/workspace/extract.js.map +1 -0
- package/dist/workspace/fs.d.ts +12 -0
- package/dist/workspace/fs.js +92 -23
- package/dist/workspace/fs.js.map +1 -1
- package/dist/workspace/git.d.ts +18 -0
- package/dist/workspace/git.js +38 -25
- package/dist/workspace/git.js.map +1 -1
- package/dist/workspace/media.d.ts +4 -4
- package/dist/workspace/media.js +16 -45
- package/dist/workspace/media.js.map +1 -1
- package/dist/workspace/rollback.d.ts +34 -20
- package/dist/workspace/rollback.js +171 -265
- package/dist/workspace/rollback.js.map +1 -1
- package/dist/workspace/unzip.js +4 -1
- package/dist/workspace/unzip.js.map +1 -1
- package/dist/workspace/upload.d.ts +7 -4
- package/dist/workspace/upload.js +5 -2
- package/dist/workspace/upload.js.map +1 -1
- package/dist/workspace/worktrees.d.ts +2 -1
- package/dist/workspace/worktrees.js +14 -15
- package/dist/workspace/worktrees.js.map +1 -1
- package/package.json +4 -2
- package/sidecar/agent_dependency.json +4 -4
- package/sidecar/scripts/replay_sidecar.py +24 -0
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/home.py +13 -2
- package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
- package/sidecar/talaria_sidecar/methods/aux.py +39 -5
- package/sidecar/talaria_sidecar/methods/chat.py +9 -5
- package/sidecar/talaria_sidecar/methods/checkpoints.py +89 -0
- package/sidecar/talaria_sidecar/methods/commands.py +81 -0
- package/sidecar/talaria_sidecar/methods/cron.py +29 -2
- package/sidecar/talaria_sidecar/methods/gateway.py +32 -15
- package/sidecar/talaria_sidecar/methods/kanban.py +28 -7
- package/sidecar/talaria_sidecar/methods/mcp.py +1 -1
- package/sidecar/talaria_sidecar/methods/process.py +58 -4
- package/sidecar/talaria_sidecar/methods/profiles.py +77 -7
- package/sidecar/talaria_sidecar/methods/providers.py +27 -8
- package/sidecar/talaria_sidecar/methods/state_db.py +39 -5
- package/sidecar/talaria_sidecar/runtime.py +17 -1
- package/static/dist/FILES.txt +127 -126
- package/static/dist/assets/AppShell-g3bkgnvt.js +1 -0
- package/static/dist/assets/ChatPage-oo7bdan6.js +25 -0
- package/static/dist/assets/Dialog-g355qxhp.js +1 -0
- package/static/dist/assets/ExtensionRoute-i2y9fvjm.js +1 -0
- package/static/dist/assets/HubRoute-lmkrbw47.js +2 -0
- package/static/dist/assets/{Markdown-mdwlvj3w.js → Markdown-j4kut4j2.js} +114 -114
- package/static/dist/assets/{RightPanel-ftvrjlcp.js → RightPanel-ohlsdzfl.js} +1 -1
- package/static/dist/assets/Select-kddq75qc.js +1 -0
- package/static/dist/assets/SessionListPanel-lu3oy0hw.js +1 -0
- package/static/dist/assets/{SettingsLayout-jonjefmj.js → SettingsLayout-o9bv4mgb.js} +1 -1
- package/static/dist/assets/{States-nmejrwrm.js → States-eq6fe29m.js} +1 -1
- package/static/dist/assets/Toaster-pc247u9f.js +1 -0
- package/static/dist/assets/{_app-gdidzd94.js → _app-f8n1i0m1.js} +1 -1
- package/static/dist/assets/{_app.ext._extensionId-opyh9y0v.js → _app.ext._extensionId-gfbzpoou.js} +1 -1
- package/static/dist/assets/_app.index-bzzv80hk.js +1 -0
- package/static/dist/assets/_app.insights-dzixbryi.js +1 -0
- package/static/dist/assets/_app.kanban-c6hep2us.js +1 -0
- package/static/dist/assets/_app.logs-i69qds98.js +1 -0
- package/static/dist/assets/_app.memory-kl4vf0gd.js +1 -0
- package/static/dist/assets/_app.profiles-b8zinmyp.js +1 -0
- package/static/dist/assets/{_app.session._sessionId-bfd4h3id.js → _app.session._sessionId-fn1bhde6.js} +1 -1
- package/static/dist/assets/_app.settings-cg8plwmf.js +1 -0
- package/static/dist/assets/_app.settings._section-bkwbi9zn.js +3 -0
- package/static/dist/assets/_app.skills-cs47sbvs.js +1 -0
- package/static/dist/assets/_app.tasks-dwvk64tc.js +1 -0
- package/static/dist/assets/_app.todos-c8xjm8p3.js +1 -0
- package/static/dist/assets/_app.workspaces-ehvd1gds.js +1 -0
- package/static/dist/assets/{abnfDiagram-VCTEODGH-b2x1lqot.js → abnfDiagram-VCTEODGH-c8kdixke.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-6crvnylg.js +1 -0
- package/static/dist/assets/{architectureDiagram-5GKGNRK7-h38o5l7b.js → architectureDiagram-5GKGNRK7-cku06x1p.js} +1 -1
- package/static/dist/assets/{back-bemaer09.js → back-h7aun7ew.js} +1 -1
- package/static/dist/assets/{blockDiagram-I7D4REHJ-bqquxv2u.js → blockDiagram-I7D4REHJ-jzthp1wa.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-f3fb8w6z.js → c4Diagram-7LVT6UL2-mwr67mt8.js} +1 -1
- package/static/dist/assets/{cancel-drd0g6d9.js → cancel-fhi0vcnu.js} +1 -1
- package/static/dist/assets/channel-b2zo73z1.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-bzfyyzp3.js → chunk-4HAMMTFA-gpq1y228.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-ly99rfx5.js → chunk-75Z2AOVW-ktje58c4.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-bg6ecfqf.js → chunk-DU6HZSFF-ofajdixh.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-e8k7mmqw.js → chunk-F27PBJKO-cmev85ti.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-cmalnoaj.js → chunk-GMAD6QVW-htjgt22y.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-gmif5o01.js → chunk-GVQU2GXP-qndvoxl7.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-f1nwwh6u.js → chunk-IMKFNOWR-e5bkd5q6.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-oktfh5v7.js → chunk-L3NEJ4N5-mj1155r6.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-b1sdx96z.js → chunk-OSK3NFVY-e7gkikcw.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-fhu4nzxt.js → chunk-P2QGCYS3-f7t54xfm.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-em31rnef.js → chunk-POPQ4Y6H-i927v9oa.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-bxhhyftw.js → chunk-PWAF6VOD-m84lmnyt.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-fmrvwcav.js → chunk-SHT3W25Y-mi0tlcu9.js} +1 -1
- package/static/dist/assets/{chunk-SVP7TREG-lymukl2j.js → chunk-SVP7TREG-dnau702j.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-lmza6k23.js → chunk-TICWLB2K-edem1gkg.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-oe99st8x.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-oe99st8x.js +1 -0
- package/static/dist/assets/{copied-ima3pysb.js → copied-hcplv46p.js} +1 -1
- package/static/dist/assets/{copy-fw5b1pc6.js → copy-magtofyp.js} +1 -1
- package/static/dist/assets/{cynefin-OW5HDTMX-czlhbyhs.js → cynefin-OW5HDTMX-siqlulkl.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-gq7mvswb.js → cynefinDiagram-5FMLGOSQ-i648tah9.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-cqdbf7dr.js → dagre-GXQ25YYZ-mwn6uc17.js} +1 -1
- package/static/dist/assets/{diagram-S7CK7UJ4-o6arxa58.js → diagram-S7CK7UJ4-l8abxaes.js} +1 -1
- package/static/dist/assets/{diagram-UQ7AKVKN-nhnd68tz.js → diagram-UQ7AKVKN-mekq7zgq.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-dk2sclzn.js → diagram-VSXAHHWV-fnky6lvc.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-n3k5nyx3.js → diagram-VX7I27RA-xe6r5qfw.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-m6q9cwdh.js → diagram-Z3DM3KII-nq07dg7k.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-lsa5641p.js → ebnfDiagram-PWID7BFC-c62ipm3g.js} +1 -1
- package/static/dist/assets/endpoints-klbxod4t.js +64 -0
- package/static/dist/assets/{erDiagram-RLTQ6QDP-fo2ckbe6.js → erDiagram-RLTQ6QDP-h39kmnzy.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-obfede4u.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-kdpsp1je.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-nzqz6x9g.js → ganttDiagram-EL5Y4UJY-ngbsyp37.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-gukvcxe6.js → gitGraph-4MIJSDKK-fr2i7caa.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-lqhdp8f0.js → gitGraphDiagram-WWUBYQGX-eravdti4.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-igw6cp39.js → highlighted-body-KPVGNVTW-jwpop9p8.js} +1 -1
- package/static/dist/assets/host-i828xuo7.js +1 -0
- package/static/dist/assets/index-eh8zilnv.css +2 -0
- package/static/dist/assets/{index-cxq58xb1.js → index-r648f4o1.js} +5 -5
- package/static/dist/assets/{info-A6RAGUB7-gvu7a93l.js → info-A6RAGUB7-h11x0dxo.js} +1 -1
- package/static/dist/assets/{infoDiagram-27XIBGKW-m8t8g6w1.js → infoDiagram-27XIBGKW-dfh47dw9.js} +1 -1
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-l07vkbgj.js → ishikawaDiagram-5VMMS53U-i6ypq351.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-hybkgj8l.js → journeyDiagram-3NMN7TZE-lduf1z95.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-by13uvtn.js → kanban-definition-UXKFOSKX-e18bu4pg.js} +1 -1
- package/static/dist/assets/{lazyRouteComponent-af0lvgjx.js → lazyRouteComponent-e1y4t2i9.js} +1 -1
- package/static/dist/assets/{line-osxq6fq7.js → line-meizqsvn.js} +1 -1
- package/static/dist/assets/{link-jyxicdhg.js → link-oot2yn73.js} +1 -1
- package/static/dist/assets/login-gu28l9ou.js +1 -0
- package/static/dist/assets/mermaid-HWGCJPDP-mtwrj8fn.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-i91oxmou.js → mermaid-parser.core-ntne45i9.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-m82mx8ww.js → mindmap-definition-YA3MSWOX-27b26eok.js} +1 -1
- package/static/dist/assets/onboarding-lkphzu1s.js +1 -0
- package/static/dist/assets/{onboarding_model_label-dp7xffoh.js → onboarding_model_label-ftpjdwqk.js} +1 -1
- package/static/dist/assets/{packet-AYTQ26CC-nbtgge2o.js → packet-AYTQ26CC-l6jdka8p.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-f1zxzga1.js → pegDiagram-XKGWAZYB-g1er3bxj.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-of8vuhxs.js → pie-WAS4IAKB-i0ylcrt9.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-o7y8ftio.js → pieDiagram-E7YTZNPT-fbz1e55z.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-iqiwia1t.js → quadrantDiagram-AXDQQJYC-hhue7d8o.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-delnsy2v.js → radar-RG4KPBEZ-f9b70aa4.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-nspnyq9u.js → railroad-74A4TZTK-lgsuoeda.js} +1 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-nf9d6pdx.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-f7ummkt5.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-oczq5tqs.js +1 -0
- package/static/dist/assets/{railroadDiagram-O6MQD6OU-z41tqx5z.js → railroadDiagram-O6MQD6OU-eqpy9fnz.js} +1 -1
- package/static/dist/assets/{refresh-b4uams1i.js → refresh-abtu93ke.js} +1 -1
- package/static/dist/assets/{refresh-cw-nt1dtsx4.js → refresh-cw-hlwb02qv.js} +1 -1
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-bdvif194.js → requirementDiagram-BXWQKSXE-ogf6puhi.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-h73e0rol.js → sankeyDiagram-P5KCCOFB-fqb8xcjf.js} +1 -1
- package/static/dist/assets/{saved-kg52csy7.js → saved-girnabkf.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-iv95mb1z.js → sequenceDiagram-WJ2MYXX4-dlcz6qjz.js} +1 -1
- package/static/dist/assets/{settings_section_extensions_title-ej0iapxe.js → settings_section_extensions_title-h14cwk6f.js} +1 -1
- package/static/dist/assets/share._token-kl0r7ido.js +2 -0
- package/static/dist/assets/{sliders-horizontal-fj18it47.js → sliders-horizontal-n1zm34qq.js} +1 -1
- package/static/dist/assets/sse-iwku0sjo.js +1 -0
- package/static/dist/assets/{stateDiagram-D77RDMKH-k417ixmf.js → stateDiagram-D77RDMKH-fyoznpcs.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-ixhx8r46.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-esola70w.js → swimlanes-42K2YHIH-oefldhfy.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-h9ersk2e.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-getrz2y8.js → timeline-definition-24CTP7MA-b1vl2zil.js} +1 -1
- package/static/dist/assets/todoStore-jjr5yr78.js +1 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-hc7ap1q7.js → treeView-Q6P3EWNA-f7hcci5o.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-b7k1syy5.js → treemap-WGGIJYW6-nl85071a.js} +1 -1
- package/static/dist/assets/{tts-lxdxnmjd.js → units-kgxzxfhi.js} +1 -1
- package/static/dist/assets/{untitled-ovpfthg4.js → untitled-cikfjntn.js} +1 -1
- package/static/dist/assets/{useForm-bcblv1rx.js → useForm-kqoqg0k9.js} +1 -1
- package/static/dist/assets/useLocale-o59tbiea.js +1 -0
- package/static/dist/assets/{useParams-lhg566ew.js → useParams-b4dq6n4q.js} +1 -1
- package/static/dist/assets/{useSearch-lbrh6ejn.js → useSearch-ipfmv3he.js} +1 -1
- package/static/dist/assets/{vennDiagram-4TSXK5OY-n6pcy5qb.js → vennDiagram-4TSXK5OY-h5hzbk0n.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-lpa18vz1.js → wardley-WFR3VGLG-jftvpm3e.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-kpclwwg7.js → wardleyDiagram-VM6X3IG4-hedh85ge.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-paa2n8y0.js → xychartDiagram-S5SC5T6Z-e49523ab.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +1 -1
- package/static/dist/assets/AppShell-fb2td9zi.js +0 -1
- package/static/dist/assets/ChatPage-cj96kiy9.js +0 -25
- package/static/dist/assets/Dialog-kxcg7ard.js +0 -1
- package/static/dist/assets/ExtensionRoute-jf7h0754.js +0 -1
- package/static/dist/assets/HubRoute-gmanpd5y.js +0 -2
- package/static/dist/assets/Select-bilaypej.js +0 -1
- package/static/dist/assets/SessionListPanel-og8n36qs.js +0 -1
- package/static/dist/assets/Toaster-nnl8zkt9.js +0 -1
- package/static/dist/assets/_app.index-hbarzbjx.js +0 -1
- package/static/dist/assets/_app.insights-luywlarz.js +0 -1
- package/static/dist/assets/_app.kanban-kincnbr8.js +0 -1
- package/static/dist/assets/_app.logs-oi2gr3gs.js +0 -1
- package/static/dist/assets/_app.memory-b6jfivt6.js +0 -1
- package/static/dist/assets/_app.profiles-lpvixmqp.js +0 -1
- package/static/dist/assets/_app.settings-vowx3iq0.js +0 -1
- package/static/dist/assets/_app.settings._section-cnntg1tu.js +0 -3
- package/static/dist/assets/_app.skills-fb57lpau.js +0 -1
- package/static/dist/assets/_app.tasks-eszpx1q7.js +0 -2
- package/static/dist/assets/_app.todos-nr05ac6w.js +0 -1
- package/static/dist/assets/_app.workspaces-d2luomu6.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-hd0o7bde.js +0 -1
- package/static/dist/assets/channel-cpdgf867.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-ko09sguk.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-ko09sguk.js +0 -1
- package/static/dist/assets/endpoints-d33siokx.js +0 -64
- package/static/dist/assets/eventmodeling-NTZA5JFV-emctlo64.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-bfi3moqa.js +0 -1
- package/static/dist/assets/index-hgtx08n5.css +0 -2
- package/static/dist/assets/login-ec21t39x.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-gfl8z3ep.js +0 -1
- package/static/dist/assets/onboarding-btnltvyz.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-nst1qxyn.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-ci37x8qy.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-aimkk07z.js +0 -1
- package/static/dist/assets/share._token-f97e94r0.js +0 -2
- package/static/dist/assets/sse-fwpqtzbg.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-hwn4apct.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-d1h97oyg.js +0 -8
- package/static/dist/assets/todoStore-eginf9h4.js +0 -1
- package/static/dist/assets/useLocale-fi5jb8ma.js +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
export interface MultipartFile {
|
|
2
|
+
filename: string;
|
|
3
|
+
body: Buffer;
|
|
4
|
+
}
|
|
5
|
+
/** `files` keeps the last part per field name; `parts` keeps every file part in order (repeated field names included). */
|
|
1
6
|
export interface MultipartResult {
|
|
2
7
|
fields: Record<string, string>;
|
|
3
|
-
files: Record<string,
|
|
4
|
-
|
|
5
|
-
body: Buffer;
|
|
6
|
-
}>;
|
|
8
|
+
files: Record<string, MultipartFile>;
|
|
9
|
+
parts: MultipartFile[];
|
|
7
10
|
}
|
|
8
11
|
/** Python `parse_multipart`: boundary split with CRLF or LF part separators. */
|
|
9
12
|
export declare function parseMultipart(raw: Buffer, contentType: string): MultipartResult;
|
package/dist/workspace/upload.js
CHANGED
|
@@ -16,6 +16,7 @@ export function parseMultipart(raw, contentType) {
|
|
|
16
16
|
const delimiter = Buffer.concat([Buffer.from('--'), boundary]);
|
|
17
17
|
const fields = {};
|
|
18
18
|
const files = {};
|
|
19
|
+
const fileParts = [];
|
|
19
20
|
const parts = splitBuffer(raw, delimiter);
|
|
20
21
|
for (const part of parts.slice(1)) {
|
|
21
22
|
const stripped = stripLeadingNewlines(part);
|
|
@@ -40,12 +41,14 @@ export function parseMultipart(raw, contentType) {
|
|
|
40
41
|
if (!nameM)
|
|
41
42
|
continue;
|
|
42
43
|
const name = nameM[1] ?? '';
|
|
43
|
-
if (fileM)
|
|
44
|
+
if (fileM) {
|
|
44
45
|
files[name] = { filename: fileM[1] ?? '', body: Buffer.from(body) };
|
|
46
|
+
fileParts.push(files[name]);
|
|
47
|
+
}
|
|
45
48
|
else
|
|
46
49
|
fields[name] = body.toString('utf8');
|
|
47
50
|
}
|
|
48
|
-
return { fields, files };
|
|
51
|
+
return { fields, files, parts: fileParts };
|
|
49
52
|
}
|
|
50
53
|
function splitBuffer(buf, delimiter) {
|
|
51
54
|
const out = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/workspace/upload.ts"],"names":[],"mappings":"AAAA,yHAAyH;AACzH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC/F,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/workspace/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Session } from '../sessions/session.js';
|
|
2
|
+
import type { WorktreeStatus } from '@maudecode/talaria-web-contracts';
|
|
2
3
|
/** The `OSError`/`TimeoutExpired` text Python interpolated into `Failed to remove worktree: {exc}`. */
|
|
3
4
|
export declare class GitSpawnFailure extends Error {
|
|
4
5
|
}
|
|
@@ -6,7 +7,7 @@ export interface WorktreeLocks {
|
|
|
6
7
|
lockedByStream: (session: Session) => boolean;
|
|
7
8
|
lockedByTerminal: (sessionId: string, worktreePath: string) => boolean;
|
|
8
9
|
}
|
|
9
|
-
export declare function worktreeStatusForSession(session: Session, locks: WorktreeLocks): Promise<
|
|
10
|
+
export declare function worktreeStatusForSession(session: Session, locks: WorktreeLocks): Promise<WorktreeStatus>;
|
|
10
11
|
export declare function removeWorktreeForSession(session: Session, locks: WorktreeLocks, opts?: {
|
|
11
12
|
force?: boolean;
|
|
12
13
|
}): Promise<Record<string, unknown>>;
|
|
@@ -92,20 +92,19 @@ export async function worktreeStatusForSession(session, locks) {
|
|
|
92
92
|
if (!worktreePath)
|
|
93
93
|
throw new Error('Session is not worktree-backed');
|
|
94
94
|
const exists = isDir(worktreePath);
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
const lockedByStream = locks.lockedByStream(session);
|
|
96
|
+
const lockedByTerminal = locks.lockedByTerminal(session.session_id, worktreePath);
|
|
97
|
+
const listed = await worktreeListed(worktreePath, session.worktree_repo_root);
|
|
98
|
+
const [dirty, untracked] = exists ? await statusPorcelain(worktreePath) : [false, 0];
|
|
99
|
+
const aheadBehindStatus = exists ? await aheadBehind(worktreePath) : { ahead: 0, behind: 0, available: false, upstream: null };
|
|
100
|
+
return {
|
|
101
|
+
path: worktreePath, exists, dirty, untracked_count: untracked, ahead_behind: aheadBehindStatus,
|
|
102
|
+
locked_by_stream: lockedByStream, locked_by_terminal: lockedByTerminal, listed,
|
|
103
|
+
// `removeWorktreeForSession`'s gates: a missing directory is always removable, a lock blocks removal outright,
|
|
104
|
+
// and uncommitted, untracked, or unpushed work needs `force`.
|
|
105
|
+
removable: !exists || !(lockedByStream || lockedByTerminal),
|
|
106
|
+
force_required: dirty || untracked > 0 || aheadBehindStatus.ahead > 0,
|
|
101
107
|
};
|
|
102
|
-
if (!exists)
|
|
103
|
-
return status;
|
|
104
|
-
const [dirty, untracked] = await statusPorcelain(worktreePath);
|
|
105
|
-
status.dirty = dirty;
|
|
106
|
-
status.untracked_count = untracked;
|
|
107
|
-
status.ahead_behind = await aheadBehind(worktreePath);
|
|
108
|
-
return status;
|
|
109
108
|
}
|
|
110
109
|
export async function removeWorktreeForSession(session, locks, opts = {}) {
|
|
111
110
|
const worktreePath = resolvePath(session.worktree_path);
|
|
@@ -122,14 +121,14 @@ export async function removeWorktreeForSession(session, locks, opts = {}) {
|
|
|
122
121
|
throw new Error('Worktree is locked by an active terminal session');
|
|
123
122
|
if (status.dirty && !force)
|
|
124
123
|
throw new Error('Worktree has uncommitted changes. Use force=true to override.');
|
|
125
|
-
const untracked =
|
|
124
|
+
const untracked = status.untracked_count;
|
|
126
125
|
if (untracked > 0) {
|
|
127
126
|
if (force)
|
|
128
127
|
warnings.push(`${untracked} untracked file(s) will be removed.`);
|
|
129
128
|
else
|
|
130
129
|
throw new Error(`Worktree has ${untracked} untracked file(s). Use force=true to override.`);
|
|
131
130
|
}
|
|
132
|
-
const ahead = status.ahead_behind.ahead
|
|
131
|
+
const ahead = status.ahead_behind.ahead;
|
|
133
132
|
if (ahead > 0) {
|
|
134
133
|
if (force)
|
|
135
134
|
warnings.push(`${ahead} unpushed commit(s) will be removed.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/workspace/worktrees.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/workspace/worktrees.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAItC,uGAAuG;AACvG,MAAM,OAAO,eAAgB,SAAQ,KAAK;CAAG;AAE7C,KAAK,UAAU,GAAG,CAAC,IAAc,EAAE,GAAW,EAAE,SAAS,GAAG,KAAK;IAC/D,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;IAC9C,IAAI,CAAC,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;AACtE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAc,EAAE,GAAW,EAAE,SAAiB;IACtE,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;IAC9C,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;QACzB,MAAM,IAAI,eAAe,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,qBAAqB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC9N,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAClD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,KAAK,CAAC,IAAmB;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACvB,IAAI,CAAC;QAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;AACpE,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc;IAChD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAQ;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QAC/C,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,YAAoB,EAAE,QAAiB;IACnE,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1E,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IACtB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAA;IAClE,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,OAAO,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AACpE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,YAAoB;IACjD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,0BAA0B,CAAC,EAAE,YAAY,CAAC,CAAA;IAC7F,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAC3E,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,YAAoB;IAC7C,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAqB,EAAE,CAAA;IAC1F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAA;IACvG,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAA;IACxB,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAA;IACtB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,YAAY,CAAC,CAAA;IAC9F,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAA;IAC1B,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAgB,EAAE,KAAoB;IACnF,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IACvD,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAA;IAClC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACpD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACjF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC7E,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACpF,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC9H,OAAO;QACL,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB;QAC9F,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM;QAC9E,+GAA+G;QAC/G,8DAA8D;QAC9D,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,cAAc,IAAI,gBAAgB,CAAC;QAC3D,cAAc,EAAE,KAAK,IAAI,SAAS,GAAG,CAAC,IAAI,iBAAiB,CAAC,KAAK,GAAG,CAAC;KACtE,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAgB,EAAE,KAAoB,EAAE,OAA4B,EAAE;IACnH,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IACvD,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACpE,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7D,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,8CAA8C,CAAC,EAAE,CAAA;IAC/H,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,MAAM,CAAC,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACjG,IAAI,MAAM,CAAC,kBAAkB;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IAClG,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAC5G,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAA;IACxC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,qCAAqC,CAAC,CAAA;;YACtE,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,iDAAiD,CAAC,CAAA;IAClG,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAA;IACvC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAA;;YACnE,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,kDAAkD,CAAC,CAAA;IAC/F,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAA;IAC3C,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACpE,iFAAiF;IACjF,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACvG,IAAI,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACjI,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;IAChE,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACnC,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACvB,IAAI,MAA0D,CAAA;IAC9D,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzG,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;QAC3D,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;IACjD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC9F,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maudecode/talaria-web",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.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,13 +25,15 @@
|
|
|
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.18.0",
|
|
29
29
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
30
30
|
"@orpc/contract": "1.15.2",
|
|
31
31
|
"@orpc/openapi": "1.15.2",
|
|
32
32
|
"@orpc/server": "1.15.2",
|
|
33
33
|
"mdast-util-from-markdown": "2.0.3",
|
|
34
34
|
"node-pty": "1.1.0",
|
|
35
|
+
"seek-bzip": "2.0.0",
|
|
36
|
+
"xz-decompress": "0.2.3",
|
|
35
37
|
"zod": "4.6.5"
|
|
36
38
|
},
|
|
37
39
|
"devDependencies": {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"x-talaria": {
|
|
3
|
-
"releaseTag": "
|
|
4
|
-
"version": "0.21.
|
|
5
|
-
"sourceRevision": "
|
|
3
|
+
"releaseTag": "v0.21.6",
|
|
4
|
+
"version": "0.21.6",
|
|
5
|
+
"sourceRevision": "818c13be1dc4fd28987e1e881a9408224afd4535"
|
|
6
6
|
},
|
|
7
7
|
"services": {
|
|
8
8
|
"hermes-agent": {
|
|
9
|
-
"image": "docker.io/nousresearch/hermes-agent@sha256:
|
|
9
|
+
"image": "docker.io/nousresearch/hermes-agent@sha256:9774f4f39a9bb8c2f68ce728ed5e99ddbad282163be56764afacf88ed952b784"
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -12,12 +12,17 @@ touches ``~/.hermes``, a model provider, or the network.
|
|
|
12
12
|
|
|
13
13
|
The App probe's ``talaria contract fixture`` message also stages a single-question
|
|
14
14
|
multi-select clarification after the approval is answered.
|
|
15
|
+
|
|
16
|
+
``worktree.create`` adds a real git worktree under the repository's ``.worktrees/``,
|
|
17
|
+
as the Agent's helper does, so worktree chats run end to end against a synthetic repo.
|
|
15
18
|
"""
|
|
16
19
|
|
|
17
20
|
from __future__ import annotations
|
|
18
21
|
|
|
19
22
|
import json
|
|
20
23
|
import os
|
|
24
|
+
import subprocess
|
|
25
|
+
import uuid
|
|
21
26
|
import sys
|
|
22
27
|
import threading
|
|
23
28
|
from pathlib import Path
|
|
@@ -25,6 +30,7 @@ from pathlib import Path
|
|
|
25
30
|
SIDECAR_ROOT = Path(__file__).resolve().parents[1]
|
|
26
31
|
sys.path.insert(0, str(SIDECAR_ROOT))
|
|
27
32
|
|
|
33
|
+
from talaria_sidecar.errors import RpcError # noqa: E402
|
|
28
34
|
from talaria_sidecar.rpc import RpcServer # noqa: E402
|
|
29
35
|
|
|
30
36
|
FIXTURES = SIDECAR_ROOT.parent / "packages" / "contracts" / "fixtures" / "sidecar"
|
|
@@ -94,6 +100,23 @@ def _clarify_respond(ctx, params: dict) -> dict:
|
|
|
94
100
|
return {"ok": True}
|
|
95
101
|
|
|
96
102
|
|
|
103
|
+
def _worktree_create(ctx, params: dict) -> dict:
|
|
104
|
+
def git(*args: str, cwd: str) -> subprocess.CompletedProcess:
|
|
105
|
+
return subprocess.run(["git", *args], cwd=cwd, text=True, capture_output=True, timeout=10, check=False)
|
|
106
|
+
|
|
107
|
+
repo_root = str(params.get("repo_root") or "")
|
|
108
|
+
probe = git("rev-parse", "--show-toplevel", cwd=repo_root) if Path(repo_root).is_dir() else None
|
|
109
|
+
if probe is None or probe.returncode != 0:
|
|
110
|
+
raise RpcError("Workspace is not inside a git repository", condition="not_a_repo")
|
|
111
|
+
root = str(Path(probe.stdout.strip()).resolve())
|
|
112
|
+
name = f"hermes-{uuid.uuid4().hex[:8]}"
|
|
113
|
+
path, branch = str(Path(root) / ".worktrees" / name), f"hermes/{name}"
|
|
114
|
+
added = git("worktree", "add", "-q", "-b", branch, path, "HEAD", cwd=root)
|
|
115
|
+
if added.returncode != 0:
|
|
116
|
+
raise RpcError(f"git worktree add failed: {added.stderr.strip()}", condition="worktree_failed")
|
|
117
|
+
return {"path": path, "branch": branch, "repo_root": root, "base": None}
|
|
118
|
+
|
|
119
|
+
|
|
97
120
|
def _shutdown(ctx, params: dict) -> dict:
|
|
98
121
|
ctx.server.request_shutdown(int(params.get("exit_code") or 0))
|
|
99
122
|
return {"ok": True}
|
|
@@ -118,6 +141,7 @@ def build_methods() -> dict:
|
|
|
118
141
|
methods["approval.set_yolo"] = lambda ctx, params: {"yolo_enabled": bool(params.get("enabled")), "released": 0}
|
|
119
142
|
# Every settled turn asks the goal judge (TAL-396); the replay holds no goal, so it answers as the sidecar does then.
|
|
120
143
|
methods["goals.evaluate"] = lambda ctx, params: {"status": None, "should_continue": False, "continuation_prompt": None, "verdict": "inactive", "reason": "no active goal", "message": ""}
|
|
144
|
+
methods["worktree.create"] = _worktree_create
|
|
121
145
|
methods["runtime.shutdown"] = _shutdown
|
|
122
146
|
return methods
|
|
123
147
|
|
|
@@ -87,6 +87,11 @@ def _activate_multi_profile_hosting() -> None:
|
|
|
87
87
|
set_multiplex_active(True)
|
|
88
88
|
|
|
89
89
|
|
|
90
|
+
def _launch_terminal_env() -> dict[str, str]:
|
|
91
|
+
"""Agent 0.21.3 twin of ``tui_gateway.launch_profile_policy.launch_terminal_env``."""
|
|
92
|
+
return {k: v for k, v in _frozen_launch_env().items() if k.startswith("TERMINAL_")}
|
|
93
|
+
|
|
94
|
+
|
|
90
95
|
def _launch_secret_scope(home: Path) -> dict[str, str]:
|
|
91
96
|
"""Agent 0.21.3 twin of ``tui_gateway.launch_profile_policy.launch_secret_scope``."""
|
|
92
97
|
from agent.secret_scope import _is_global_env, build_profile_secret_scope, is_multiplex_active
|
|
@@ -150,10 +155,13 @@ def _terminal_scope(home: Path):
|
|
|
150
155
|
else:
|
|
151
156
|
try:
|
|
152
157
|
from agent.secret_scope import is_multiplex_active
|
|
153
|
-
|
|
154
|
-
except ImportError: # Agent 0.21.3 cannot layer the launch env, so the launch profile keeps the process env
|
|
158
|
+
except ImportError: # An Agent without multiplexing cannot layer the launch env, so the launch profile keeps the process env
|
|
155
159
|
yield
|
|
156
160
|
return
|
|
161
|
+
try:
|
|
162
|
+
from tui_gateway.launch_profile_policy import launch_terminal_env
|
|
163
|
+
except ImportError: # Agent 0.21.3: the sidecar's twin of the launch-profile policy
|
|
164
|
+
launch_terminal_env = _launch_terminal_env
|
|
157
165
|
# Like the launch secret scope: the live process env until multiplexing freezes it.
|
|
158
166
|
launch = launch_terminal_env() if is_multiplex_active() else {k: v for k, v in os.environ.items() if k.startswith("TERMINAL_")}
|
|
159
167
|
token = install_profile_terminal_scope(home, env_overlay=launch)
|
|
@@ -190,6 +198,9 @@ def _recover_processes(home: Path) -> None:
|
|
|
190
198
|
if checkpoint.exists() and not isinstance(json.loads(checkpoint.read_text(encoding="utf-8")), list):
|
|
191
199
|
raise ValueError(f"{checkpoint} is not a list")
|
|
192
200
|
recovered = registry_module.process_registry.recover_from_checkpoint()
|
|
201
|
+
from .methods.process import track_recovered
|
|
202
|
+
|
|
203
|
+
track_recovered(registry_module.process_registry)
|
|
193
204
|
except Exception as exc: # noqa: BLE001
|
|
194
205
|
# Retried on every call in the home; reported once per home so a lasting failure does not flood the log.
|
|
195
206
|
log.log(logging.DEBUG if key in _RECOVERY_WARNED else logging.WARNING, "Background process recovery failed for %s", home, exc_info=True)
|
|
@@ -29,9 +29,9 @@ class Registry:
|
|
|
29
29
|
|
|
30
30
|
def build_methods(runtime: AgentRuntime) -> dict[str, Handler]:
|
|
31
31
|
registry = Registry(runtime)
|
|
32
|
-
from . import aux, chat, commands, config, cron, gateway, goals, kanban, mcp, oauth, process, profiles, providers, skills, state_db, stt, text, usage, worktree # noqa: WPS433
|
|
32
|
+
from . import aux, chat, checkpoints, commands, config, cron, gateway, goals, kanban, mcp, oauth, process, profiles, providers, skills, state_db, stt, text, usage, worktree # noqa: WPS433
|
|
33
33
|
from . import runtime as runtime_methods
|
|
34
34
|
|
|
35
|
-
for module in (runtime_methods, goals, commands, kanban, state_db, profiles, skills, mcp, stt, cron, providers, oauth, aux, text, process, usage, gateway, worktree, chat, config):
|
|
35
|
+
for module in (runtime_methods, goals, commands, kanban, state_db, profiles, skills, mcp, stt, cron, providers, oauth, aux, text, process, usage, gateway, worktree, checkpoints, chat, config):
|
|
36
36
|
module.register(registry)
|
|
37
37
|
return registry.methods
|
|
@@ -69,14 +69,42 @@ def _main_model_completion(messages: list, runtime: dict, *, task: str) -> dict:
|
|
|
69
69
|
close()
|
|
70
70
|
except Exception: # noqa: BLE001
|
|
71
71
|
log.debug("%s fallback agent close failed", task, exc_info=True)
|
|
72
|
-
return {"model": str(runtime.get("model") or ""), "text": str((result or {}).get("final_response") or "").strip(), "usage": None}
|
|
72
|
+
return {"model": str(runtime.get("model") or ""), "text": str((result or {}).get("final_response") or "").strip(), "usage": None, "finish_reason": None}
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
def
|
|
75
|
+
def _model_completion(task: str, messages: list, *, model: str, provider: str | None, max_tokens: int | None, temperature: float | None) -> dict:
|
|
76
|
+
"""TAL-258 (predecessor ``_agent_text_completion``): the named model answers itself through the Agent's ``call_llm``,
|
|
77
|
+
reasoning off and no tools, so the caller sees its ``finish_reason``. ``max_tokens`` reaches the provider on the routes
|
|
78
|
+
the Agent forwards a cap on. ``credential_missing`` when the model has no credential."""
|
|
79
|
+
from .chat import _resolve_runtime
|
|
80
|
+
|
|
81
|
+
runtime = _resolve_runtime(provider, model)
|
|
82
|
+
if not runtime.get("api_key"):
|
|
83
|
+
raise RpcError(f"no credential for model {model or 'default'!r}", condition="credential_missing")
|
|
84
|
+
from agent.auxiliary_client import call_llm
|
|
85
|
+
|
|
86
|
+
resolved = model or str(runtime.get("model") or "")
|
|
87
|
+
response = call_llm(
|
|
88
|
+
task, provider=provider or runtime.get("provider"), model=resolved, base_url=runtime.get("base_url"), api_key=runtime.get("api_key"),
|
|
89
|
+
api_mode=runtime.get("api_mode"), messages=messages, max_tokens=int(max_tokens) if max_tokens else None,
|
|
90
|
+
temperature=float(temperature) if temperature is not None else None, reasoning_config={"enabled": False}, timeout=30.0,
|
|
91
|
+
)
|
|
92
|
+
choice = (getattr(response, "choices", None) or [None])[0]
|
|
93
|
+
message = getattr(choice, "message", None)
|
|
94
|
+
reason = getattr(choice, "finish_reason", None)
|
|
95
|
+
return {"model": resolved, "text": str(getattr(message, "content", None) or "").strip(), "usage": _usage_dict(getattr(response, "usage", None)),
|
|
96
|
+
"finish_reason": str(reason) if reason else None}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def complete(task: str, messages: list, *, main_runtime: dict | None, max_tokens: int | None, temperature: float | None, ctx: CallContext, main_fallback: bool = False,
|
|
100
|
+
model: str | None = None, provider: str | None = None) -> dict:
|
|
76
101
|
"""One auxiliary completion; streams ``token`` frames when the client supports it.
|
|
77
102
|
|
|
78
103
|
With ``main_fallback`` the main model answers (through ``AIAgent``) when no auxiliary client is configured or the
|
|
79
|
-
auxiliary call fails, as the predecessor's git commit-message route did.
|
|
104
|
+
auxiliary call fails, as the predecessor's git commit-message route did. An explicit ``model`` skips the auxiliary
|
|
105
|
+
route: that model answers (``_model_completion``)."""
|
|
106
|
+
if model is not None:
|
|
107
|
+
return _model_completion(task, messages, model=model, provider=provider, max_tokens=max_tokens, temperature=temperature)
|
|
80
108
|
try:
|
|
81
109
|
from agent.auxiliary_client import get_text_auxiliary_client
|
|
82
110
|
except Exception as exc: # noqa: BLE001
|
|
@@ -109,6 +137,7 @@ def _stream_completion(client, model: str, messages: list, *, max_tokens: int |
|
|
|
109
137
|
kwargs["temperature"] = float(temperature)
|
|
110
138
|
text_parts: list[str] = []
|
|
111
139
|
usage = None
|
|
140
|
+
finish_reason = None
|
|
112
141
|
try:
|
|
113
142
|
stream = client.chat.completions.create(stream=True, **kwargs)
|
|
114
143
|
for chunk in stream:
|
|
@@ -119,6 +148,8 @@ def _stream_completion(client, model: str, messages: list, *, max_tokens: int |
|
|
|
119
148
|
if piece:
|
|
120
149
|
text_parts.append(piece)
|
|
121
150
|
ctx.emit("token", {"text": piece})
|
|
151
|
+
if choices and getattr(choices[0], "finish_reason", None):
|
|
152
|
+
finish_reason = str(choices[0].finish_reason)
|
|
122
153
|
chunk_usage = getattr(chunk, "usage", None)
|
|
123
154
|
if chunk_usage is not None:
|
|
124
155
|
usage = _usage_dict(chunk_usage)
|
|
@@ -129,7 +160,8 @@ def _stream_completion(client, model: str, messages: list, *, max_tokens: int |
|
|
|
129
160
|
response = client.chat.completions.create(**kwargs)
|
|
130
161
|
text_parts = [str(response.choices[0].message.content or "")]
|
|
131
162
|
usage = _usage_dict(getattr(response, "usage", None))
|
|
132
|
-
|
|
163
|
+
finish_reason = str(response.choices[0].finish_reason) if getattr(response.choices[0], "finish_reason", None) else None
|
|
164
|
+
return {"model": str(model), "text": "".join(text_parts).strip(), "usage": usage, "finish_reason": finish_reason}
|
|
133
165
|
|
|
134
166
|
|
|
135
167
|
def _usage_dict(usage) -> dict | None:
|
|
@@ -154,7 +186,9 @@ def register(registry) -> None:
|
|
|
154
186
|
raise InvalidParams("messages must be a non-empty list")
|
|
155
187
|
main_runtime = params.get("main_runtime") if isinstance(params.get("main_runtime"), dict) else None
|
|
156
188
|
with scoped_home(profile_home_param(params)):
|
|
157
|
-
|
|
189
|
+
model = params.get("model")
|
|
190
|
+
return complete(task, messages, main_runtime=main_runtime, max_tokens=params.get("max_tokens"), temperature=params.get("temperature"), ctx=ctx, main_fallback=bool(params.get("main_fallback")),
|
|
191
|
+
model=str(model).strip() if isinstance(model, str) else None, provider=str(params.get("provider") or "").strip() or None)
|
|
158
192
|
|
|
159
193
|
@registry.method("aux.resolve")
|
|
160
194
|
def resolve(ctx: CallContext, params: dict) -> dict:
|
|
@@ -28,6 +28,7 @@ from typing import Any
|
|
|
28
28
|
from ..errors import InvalidParams, RpcError
|
|
29
29
|
from ..home import profile_home_param, scoped_home
|
|
30
30
|
from ..rpc import CallContext
|
|
31
|
+
from .checkpoints import checkpoint_kwargs
|
|
31
32
|
|
|
32
33
|
log = logging.getLogger("talaria_sidecar.chat")
|
|
33
34
|
|
|
@@ -496,10 +497,8 @@ def _turn_identity(session_id: str, workspace: str):
|
|
|
496
497
|
not fatal."""
|
|
497
498
|
resets: list = []
|
|
498
499
|
try:
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
except ImportError:
|
|
502
|
-
from tools.approval import reset_current_session_key, set_current_session_key # type: ignore[no-redef]
|
|
500
|
+
from tools.approval_context import reset_current_session_key, set_current_session_key
|
|
501
|
+
|
|
503
502
|
token = set_current_session_key(session_id)
|
|
504
503
|
resets.append(lambda: reset_current_session_key(token))
|
|
505
504
|
except Exception: # noqa: BLE001
|
|
@@ -538,7 +537,7 @@ def _turn_identity(session_id: str, workspace: str):
|
|
|
538
537
|
|
|
539
538
|
|
|
540
539
|
#: Older configs named the CLI composite ``hermes``; the Agent registers it split in two (predecessor
|
|
541
|
-
#: ``_LEGACY_CLI_TOOLSET_ALIASES``).
|
|
540
|
+
#: ``_LEGACY_CLI_TOOLSET_ALIASES``). Agent 0.21.6 expands it itself; delete this once 0.21.6 is the oldest supported.
|
|
542
541
|
_LEGACY_TOOLSET_ALIASES = {"hermes": ("hermes-cli", "hermes-api-server")}
|
|
543
542
|
|
|
544
543
|
|
|
@@ -634,6 +633,7 @@ def _agent_signature(model: str, provider, runtime: dict, toolsets, home: str, k
|
|
|
634
633
|
# Bound at construction too: a reasoning-effort change from the composer must build a fresh agent.
|
|
635
634
|
"reasoning_config": kwargs.get("reasoning_config"),
|
|
636
635
|
"request_overrides": kwargs.get("request_overrides"),
|
|
636
|
+
"checkpoints": [kwargs.get(name) for name in ("checkpoints_enabled", "checkpoint_max_snapshots", "checkpoint_max_total_size_mb", "checkpoint_max_file_size_mb")],
|
|
637
637
|
# Entries may carry their own ``api_key``.
|
|
638
638
|
"fallback_model": hashlib.sha256(json.dumps(kwargs.get("fallback_model"), sort_keys=True, default=str).encode("utf-8")).hexdigest()[:16],
|
|
639
639
|
}
|
|
@@ -1102,6 +1102,10 @@ def start(ctx: CallContext, params: dict) -> dict: # noqa: PLR0915 - one turn,
|
|
|
1102
1102
|
request_overrides = _main_model_request_overrides(resolved_model, resolved_provider)
|
|
1103
1103
|
if request_overrides and _supported(AIAgent, "request_overrides"):
|
|
1104
1104
|
kwargs["request_overrides"] = request_overrides
|
|
1105
|
+
# TAL-913: the profile's ``checkpoints`` section, as the Agent's own CLI and gateway turns read it.
|
|
1106
|
+
for name, value in checkpoint_kwargs().items():
|
|
1107
|
+
if _supported(AIAgent, name):
|
|
1108
|
+
kwargs[name] = value
|
|
1105
1109
|
signature = _agent_signature(resolved_model, resolved_provider, runtime, toolsets, str(params.get("profile_home")), kwargs)
|
|
1106
1110
|
agent = None
|
|
1107
1111
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""``checkpoints.*``: a workspace's filesystem checkpoints through the Agent's own ``CheckpointManager`` (TAL-913).
|
|
2
|
+
|
|
3
|
+
The Agent keeps every project's checkpoints as refs in one shared git store under the profile home; listing, diffing and
|
|
4
|
+
restoring go through its manager so the store layout, the nested-repository refusal and the pre-rollback snapshot stay
|
|
5
|
+
the Agent's.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from ..errors import InvalidParams, RpcError
|
|
11
|
+
from ..home import profile_home_param, scoped_home
|
|
12
|
+
from ..rpc import CallContext
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def checkpoint_kwargs() -> dict:
|
|
16
|
+
"""The profile's ``checkpoints`` config as ``AIAgent`` kwargs, resolved as the Agent's gateway does
|
|
17
|
+
(``gateway/run.py::_checkpoint_agent_kwargs``): the legacy ``checkpoints: true`` form, else the section over
|
|
18
|
+
``DEFAULT_CONFIG``. Only a real ``true`` turns them on, so a quoted ``"false"`` stays off."""
|
|
19
|
+
from hermes_cli.config import DEFAULT_CONFIG, load_config
|
|
20
|
+
|
|
21
|
+
section = (load_config() or {}).get("checkpoints", {})
|
|
22
|
+
if isinstance(section, bool):
|
|
23
|
+
section = {"enabled": section}
|
|
24
|
+
elif not isinstance(section, dict):
|
|
25
|
+
section = {}
|
|
26
|
+
defaults = DEFAULT_CONFIG["checkpoints"]
|
|
27
|
+
return {
|
|
28
|
+
"checkpoints_enabled": section.get("enabled", defaults["enabled"]) is True,
|
|
29
|
+
"checkpoint_max_snapshots": section.get("max_snapshots", defaults["max_snapshots"]),
|
|
30
|
+
"checkpoint_max_total_size_mb": section.get("max_total_size_mb", defaults["max_total_size_mb"]),
|
|
31
|
+
"checkpoint_max_file_size_mb": section.get("max_file_size_mb", defaults["max_file_size_mb"]),
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _manager():
|
|
36
|
+
from tools.checkpoint_manager import CheckpointManager
|
|
37
|
+
|
|
38
|
+
kwargs = checkpoint_kwargs()
|
|
39
|
+
return CheckpointManager(enabled=kwargs["checkpoints_enabled"], max_snapshots=kwargs["checkpoint_max_snapshots"],
|
|
40
|
+
max_total_size_mb=kwargs["checkpoint_max_total_size_mb"], max_file_size_mb=kwargs["checkpoint_max_file_size_mb"])
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _param(params: dict, name: str) -> str:
|
|
44
|
+
value = params.get(name)
|
|
45
|
+
if not isinstance(value, str) or not value.strip():
|
|
46
|
+
raise InvalidParams(f"{name} is required")
|
|
47
|
+
return value
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _agent_result(result: dict) -> dict:
|
|
51
|
+
"""The Agent answers a refusal (unknown checkpoint, uncaptured nested repository, failed checkout) as ``success: False``."""
|
|
52
|
+
if not result.get("success"):
|
|
53
|
+
raise RpcError(str(result.get("error") or "checkpoint operation failed"), condition="checkpoint_failed")
|
|
54
|
+
return result
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _owned(manager, workspace: str, checkpoint: str) -> str:
|
|
58
|
+
"""The full hash of ``checkpoint`` among ``workspace``'s own checkpoints. The store is shared by every project and the
|
|
59
|
+
Agent's diff and restore accept any commit in it, so another workspace's hash would check that tree out here."""
|
|
60
|
+
matches = [c["hash"] for c in manager.list_checkpoints(workspace) if c.get("hash") and str(c["hash"]).startswith(checkpoint.lower())]
|
|
61
|
+
if len(matches) != 1:
|
|
62
|
+
raise RpcError(f"Checkpoint '{checkpoint}' is not a checkpoint of this workspace", condition="checkpoint_failed")
|
|
63
|
+
return matches[0]
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def register(registry) -> None:
|
|
67
|
+
@registry.method("checkpoints.list")
|
|
68
|
+
def list_(ctx: CallContext, params: dict) -> dict:
|
|
69
|
+
workspace = _param(params, "workspace")
|
|
70
|
+
with scoped_home(profile_home_param(params)):
|
|
71
|
+
from tools.checkpoint_manager import _store_path
|
|
72
|
+
|
|
73
|
+
return {"checkpoints": _manager().list_checkpoints(workspace), "store": str(_store_path())}
|
|
74
|
+
|
|
75
|
+
@registry.method("checkpoints.diff")
|
|
76
|
+
def diff(ctx: CallContext, params: dict) -> dict:
|
|
77
|
+
workspace, checkpoint = _param(params, "workspace"), _param(params, "checkpoint")
|
|
78
|
+
with scoped_home(profile_home_param(params)):
|
|
79
|
+
manager = _manager()
|
|
80
|
+
result = _agent_result(manager.diff(workspace, _owned(manager, workspace, checkpoint)))
|
|
81
|
+
return {"stat": str(result.get("stat") or ""), "diff": str(result.get("diff") or "")}
|
|
82
|
+
|
|
83
|
+
@registry.method("checkpoints.restore")
|
|
84
|
+
def restore(ctx: CallContext, params: dict) -> dict:
|
|
85
|
+
workspace, checkpoint = _param(params, "workspace"), _param(params, "checkpoint")
|
|
86
|
+
with scoped_home(profile_home_param(params)):
|
|
87
|
+
manager = _manager()
|
|
88
|
+
result = _agent_result(manager.restore(workspace, _owned(manager, workspace, checkpoint)))
|
|
89
|
+
return {"restored_to": str(result.get("restored_to") or ""), "reason": str(result.get("reason") or "")}
|