@maudecode/talaria-web 1.16.1 → 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 +59 -9
- package/dist/api/automation-raw.js.map +1 -1
- package/dist/api/automation-router.d.ts +163 -10
- package/dist/api/automation-router.js +25 -8
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +700 -15
- package/dist/api/chat-router.js +74 -55
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.d.ts +47 -2
- package/dist/api/git-router.js +31 -22
- package/dist/api/git-router.js.map +1 -1
- package/dist/api/raw-routes.d.ts +14 -0
- package/dist/api/raw-routes.js +277 -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 +1710 -73
- package/dist/api/sessions-router.js +164 -10
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +132 -2
- package/dist/api/settings-router.js +15 -5
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.d.ts +16 -3
- package/dist/api/sse-routes.js +194 -67
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-raw.js +12 -25
- package/dist/api/tools-raw.js.map +1 -1
- package/dist/api/tools-router.d.ts +425 -19
- package/dist/api/tools-router.js +157 -26
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.d.ts +0 -9377
- package/dist/app.js +42 -17
- package/dist/app.js.map +1 -1
- package/dist/auth/gate.js +8 -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.d.ts +2 -0
- package/dist/config/agent-config.js +12 -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 +20 -3
- package/dist/http/context.js +41 -8
- 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/onboarding.js +4 -0
- package/dist/onboarding.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 +101 -8
- package/dist/providers/catalog.js +463 -123
- 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.d.ts +1 -0
- package/dist/redact.js +354 -44
- package/dist/redact.js.map +1 -1
- package/dist/runtime.js +111 -27
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +5 -0
- package/dist/server.js.map +1 -1
- package/dist/sessions/anchor.d.ts +2 -0
- package/dist/sessions/anchor.js +8 -3
- package/dist/sessions/anchor.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/claude-code.d.ts +19 -0
- package/dist/sessions/claude-code.js +250 -0
- package/dist/sessions/claude-code.js.map +1 -0
- 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 +61 -9
- package/dist/sessions/completions.js +282 -34
- package/dist/sessions/completions.js.map +1 -1
- package/dist/sessions/compress.d.ts +14 -1
- package/dist/sessions/compress.js +52 -11
- package/dist/sessions/compress.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/journal.d.ts +8 -0
- package/dist/sessions/journal.js +44 -10
- package/dist/sessions/journal.js.map +1 -1
- package/dist/sessions/list.d.ts +13 -3
- package/dist/sessions/list.js +46 -15
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +53 -5
- package/dist/sessions/merge.js +219 -23
- 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 +152 -8
- package/dist/sessions/service.js +640 -72
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +17 -1
- package/dist/sessions/session.js +63 -4
- 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 +87 -4
- package/dist/sessions/state-db.js +417 -8
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/store.d.ts +7 -0
- package/dist/sessions/store.js +36 -22
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +10 -0
- package/dist/sessions/streams.js +14 -3
- package/dist/sessions/streams.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/todo.d.ts +6 -1
- package/dist/sessions/todo.js +11 -4
- package/dist/sessions/todo.js.map +1 -1
- package/dist/sessions/tool-display.d.ts +12 -1
- package/dist/sessions/tool-display.js +50 -1
- 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 +67 -11
- package/dist/sessions/turn.js +413 -111
- 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.d.ts +20 -2
- package/dist/settings.js +45 -9
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/fake.d.ts +4 -4
- package/dist/sidecar/fake.js +5 -2
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/spa.js +2 -1
- package/dist/spa.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/harness.js +2 -0
- package/dist/test/harness.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/insights.d.ts +8 -2
- package/dist/tools/insights.js +18 -2
- package/dist/tools/insights.js.map +1 -1
- package/dist/tools/kanban.d.ts +41 -1
- package/dist/tools/kanban.js +113 -2
- package/dist/tools/kanban.js.map +1 -1
- package/dist/tools/mcp.d.ts +15 -1
- package/dist/tools/mcp.js +99 -5
- 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/terminal.d.ts +1 -0
- package/dist/tools/terminal.js +1 -1
- package/dist/tools/terminal.js.map +1 -1
- package/dist/tools/updates.d.ts +33 -8
- package/dist/tools/updates.js +236 -57
- 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 +19 -3
- package/dist/workspace/fs.js +96 -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 +18 -45
- package/dist/workspace/media.js.map +1 -1
- package/dist/workspace/preview.d.ts +28 -0
- package/dist/workspace/preview.js +110 -0
- package/dist/workspace/preview.js.map +1 -0
- package/dist/workspace/rollback.d.ts +36 -21
- package/dist/workspace/rollback.js +179 -270
- 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 +9 -4
- package/dist/workspace/upload.js +9 -3
- 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 +25 -1
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/__main__.py +7 -1
- package/sidecar/talaria_sidecar/home.py +52 -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 +431 -43
- package/sidecar/talaria_sidecar/methods/checkpoints.py +89 -0
- package/sidecar/talaria_sidecar/methods/commands.py +96 -2
- package/sidecar/talaria_sidecar/methods/cron.py +39 -8
- package/sidecar/talaria_sidecar/methods/gateway.py +32 -15
- package/sidecar/talaria_sidecar/methods/kanban.py +140 -19
- package/sidecar/talaria_sidecar/methods/mcp.py +1 -1
- package/sidecar/talaria_sidecar/methods/process.py +115 -2
- package/sidecar/talaria_sidecar/methods/profiles.py +84 -8
- package/sidecar/talaria_sidecar/methods/providers.py +27 -8
- package/sidecar/talaria_sidecar/methods/runtime.py +3 -0
- package/sidecar/talaria_sidecar/methods/state_db.py +39 -5
- package/sidecar/talaria_sidecar/methods/text.py +17 -1
- package/sidecar/talaria_sidecar/methods/usage.py +257 -4
- package/sidecar/talaria_sidecar/runtime.py +17 -1
- package/static/dist/FILES.txt +127 -125
- 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-jqrx5es0.js → Markdown-j4kut4j2.js} +125 -125
- package/static/dist/assets/RightPanel-ohlsdzfl.js +1 -0
- package/static/dist/assets/Select-kddq75qc.js +1 -0
- package/static/dist/assets/SessionListPanel-lu3oy0hw.js +1 -0
- package/static/dist/assets/SettingsLayout-o9bv4mgb.js +1 -0
- package/static/dist/assets/States-eq6fe29m.js +1 -0
- package/static/dist/assets/Toaster-pc247u9f.js +1 -0
- package/static/dist/assets/_app-f8n1i0m1.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-gfbzpoou.js +1 -0
- 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-hh27wwu2.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-oity9y4o.js → abnfDiagram-VCTEODGH-c8kdixke.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-6crvnylg.js +1 -0
- package/static/dist/assets/{architectureDiagram-5GKGNRK7-ceaepnyr.js → architectureDiagram-5GKGNRK7-cku06x1p.js} +1 -1
- package/static/dist/assets/{back-eu64w89w.js → back-h7aun7ew.js} +1 -1
- package/static/dist/assets/{blockDiagram-I7D4REHJ-n79st4pj.js → blockDiagram-I7D4REHJ-jzthp1wa.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-mi73akzk.js → c4Diagram-7LVT6UL2-mwr67mt8.js} +1 -1
- package/static/dist/assets/{cancel-mzvkdjg8.js → cancel-fhi0vcnu.js} +1 -1
- package/static/dist/assets/channel-b2zo73z1.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-laat0g1q.js → chunk-4HAMMTFA-gpq1y228.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-0psy1tr2.js → chunk-75Z2AOVW-ktje58c4.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-lw8uox8x.js → chunk-DU6HZSFF-ofajdixh.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-erassib3.js → chunk-F27PBJKO-cmev85ti.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-fz7rx619.js → chunk-GMAD6QVW-htjgt22y.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-gdb0epb2.js → chunk-GVQU2GXP-qndvoxl7.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-ea8t26qw.js → chunk-IMKFNOWR-e5bkd5q6.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-mb1gu9kz.js → chunk-L3NEJ4N5-mj1155r6.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-eovmccvy.js → chunk-OSK3NFVY-e7gkikcw.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-bo55zjo5.js → chunk-P2QGCYS3-f7t54xfm.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-ja7ohe4h.js → chunk-POPQ4Y6H-i927v9oa.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-e30g9nus.js → chunk-PWAF6VOD-m84lmnyt.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-gbb798f7.js → chunk-SHT3W25Y-mi0tlcu9.js} +1 -1
- package/static/dist/assets/{chunk-SVP7TREG-h2iw8urm.js → chunk-SVP7TREG-dnau702j.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-fd2cottz.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-h65fc3cx.js → copied-hcplv46p.js} +1 -1
- package/static/dist/assets/copy-magtofyp.js +1 -0
- package/static/dist/assets/{cynefin-OW5HDTMX-lbltyl5j.js → cynefin-OW5HDTMX-siqlulkl.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-lxhsqq4a.js → cynefinDiagram-5FMLGOSQ-i648tah9.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-gn4nnaln.js → dagre-GXQ25YYZ-mwn6uc17.js} +1 -1
- package/static/dist/assets/{diagram-S7CK7UJ4-pa3ij6q7.js → diagram-S7CK7UJ4-l8abxaes.js} +1 -1
- package/static/dist/assets/{diagram-UQ7AKVKN-zbipyz57.js → diagram-UQ7AKVKN-mekq7zgq.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-d1kbpzgf.js → diagram-VSXAHHWV-fnky6lvc.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-i3ty14xl.js → diagram-VX7I27RA-xe6r5qfw.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-m8xefqa7.js → diagram-Z3DM3KII-nq07dg7k.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-nz7wj05l.js → ebnfDiagram-PWID7BFC-c62ipm3g.js} +1 -1
- package/static/dist/assets/endpoints-klbxod4t.js +64 -0
- package/static/dist/assets/{erDiagram-RLTQ6QDP-fa41ib83.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-n7zq01qu.js → ganttDiagram-EL5Y4UJY-ngbsyp37.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-c89emb07.js → gitGraph-4MIJSDKK-fr2i7caa.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-cz7cgr6w.js → gitGraphDiagram-WWUBYQGX-eravdti4.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-d9bapmni.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-r648f4o1.js +11 -0
- package/static/dist/assets/{info-A6RAGUB7-ndddhhhh.js → info-A6RAGUB7-h11x0dxo.js} +1 -1
- package/static/dist/assets/{infoDiagram-27XIBGKW-ccxigcpf.js → infoDiagram-27XIBGKW-dfh47dw9.js} +1 -1
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-le0z9vtc.js → ishikawaDiagram-5VMMS53U-i6ypq351.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-ivsmb26o.js → journeyDiagram-3NMN7TZE-lduf1z95.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-h6n2awt0.js → kanban-definition-UXKFOSKX-e18bu4pg.js} +1 -1
- package/static/dist/assets/lazyRouteComponent-e1y4t2i9.js +1 -0
- package/static/dist/assets/{line-dmzlfe0u.js → line-meizqsvn.js} +1 -1
- package/static/dist/assets/link-oot2yn73.js +1 -0
- 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-gwyd5bnq.js → mermaid-parser.core-ntne45i9.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-l68gg5h7.js → mindmap-definition-YA3MSWOX-27b26eok.js} +1 -1
- package/static/dist/assets/onboarding-lkphzu1s.js +1 -0
- package/static/dist/assets/onboarding_model_label-ftpjdwqk.js +1 -0
- package/static/dist/assets/{packet-AYTQ26CC-gpv06065.js → packet-AYTQ26CC-l6jdka8p.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-e52vs23u.js → pegDiagram-XKGWAZYB-g1er3bxj.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-l6m7nz5s.js → pie-WAS4IAKB-i0ylcrt9.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-b4is36bq.js → pieDiagram-E7YTZNPT-fbz1e55z.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-m8vt2788.js → quadrantDiagram-AXDQQJYC-hhue7d8o.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-nxbrhiov.js → radar-RG4KPBEZ-f9b70aa4.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-222mu9hi.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-o8lldfzv.js → railroadDiagram-O6MQD6OU-eqpy9fnz.js} +1 -1
- package/static/dist/assets/refresh-abtu93ke.js +1 -0
- package/static/dist/assets/refresh-cw-hlwb02qv.js +1 -0
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-ovyq38kv.js → requirementDiagram-BXWQKSXE-ogf6puhi.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-ou7lznor.js → sankeyDiagram-P5KCCOFB-fqb8xcjf.js} +1 -1
- package/static/dist/assets/{saved-bazmcup9.js → saved-girnabkf.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-ovckdzf2.js → sequenceDiagram-WJ2MYXX4-dlcz6qjz.js} +1 -1
- package/static/dist/assets/{settings_section_extensions_title-ertwwhlx.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-n1zm34qq.js +1 -0
- package/static/dist/assets/sse-iwku0sjo.js +1 -0
- package/static/dist/assets/{stateDiagram-D77RDMKH-fcrexkkv.js → stateDiagram-D77RDMKH-fyoznpcs.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-ixhx8r46.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-f7usu8fw.js → swimlanes-42K2YHIH-oefldhfy.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-h9ersk2e.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-gp1hvz9f.js → timeline-definition-24CTP7MA-b1vl2zil.js} +1 -1
- package/static/dist/assets/todoStore-jjr5yr78.js +1 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-gb9gf11u.js → treeView-Q6P3EWNA-f7hcci5o.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-nuvfnvvi.js → treemap-WGGIJYW6-nl85071a.js} +1 -1
- package/static/dist/assets/units-kgxzxfhi.js +1 -0
- package/static/dist/assets/{untitled-htelhc68.js → untitled-cikfjntn.js} +1 -1
- package/static/dist/assets/{useForm-h2t0u14e.js → useForm-kqoqg0k9.js} +1 -1
- package/static/dist/assets/useLocale-o59tbiea.js +1 -0
- package/static/dist/assets/{useParams-dqd64jv7.js → useParams-b4dq6n4q.js} +1 -1
- package/static/dist/assets/{useSearch-j30pvsy7.js → useSearch-ipfmv3he.js} +1 -1
- package/static/dist/assets/{vennDiagram-4TSXK5OY-fzchbzaj.js → vennDiagram-4TSXK5OY-h5hzbk0n.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-m47mhfbh.js → wardley-WFR3VGLG-jftvpm3e.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-odg6ct1z.js → wardleyDiagram-VM6X3IG4-hedh85ge.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-mrhms5um.js → xychartDiagram-S5SC5T6Z-e49523ab.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +2 -2
- package/static/dist/assets/AppShell-ef3bhu32.js +0 -1
- package/static/dist/assets/Button-nx37f4u1.js +0 -1
- package/static/dist/assets/ChatPage-cdcpykcg.js +0 -25
- package/static/dist/assets/Dialog-mec42hvb.js +0 -1
- package/static/dist/assets/HubRoute-ecb65zpr.js +0 -2
- package/static/dist/assets/RightPanel-d1lgvk4s.js +0 -1
- package/static/dist/assets/Select-h4ivl9qf.js +0 -1
- package/static/dist/assets/SessionListPanel-ewib046b.js +0 -1
- package/static/dist/assets/SettingsLayout-lx654cup.js +0 -1
- package/static/dist/assets/States-ehsb6lzo.js +0 -1
- package/static/dist/assets/Toaster-mch1pa3t.js +0 -1
- package/static/dist/assets/_app-m8d961ef.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-mp33hbzi.js +0 -1
- package/static/dist/assets/_app.index-dk6zp7e0.js +0 -1
- package/static/dist/assets/_app.insights-jt2fk4i1.js +0 -1
- package/static/dist/assets/_app.kanban-if4pubeu.js +0 -1
- package/static/dist/assets/_app.logs-mfaw9m6g.js +0 -1
- package/static/dist/assets/_app.memory-h3eaarb6.js +0 -1
- package/static/dist/assets/_app.profiles-ienktovs.js +0 -1
- package/static/dist/assets/_app.settings-dpoe0bzf.js +0 -1
- package/static/dist/assets/_app.settings._section-l468ynag.js +0 -3
- package/static/dist/assets/_app.skills-kcbncc8i.js +0 -1
- package/static/dist/assets/_app.tasks-occdrqhw.js +0 -2
- package/static/dist/assets/_app.todos-nnke2rcc.js +0 -1
- package/static/dist/assets/_app.workspaces-cdlatvwj.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-hj11333z.js +0 -1
- package/static/dist/assets/channel-mbvmf2vv.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-o8r05k0n.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-o8r05k0n.js +0 -1
- package/static/dist/assets/copy-e6977uwq.js +0 -1
- package/static/dist/assets/endpoints-k7yf25m0.js +0 -64
- package/static/dist/assets/eventmodeling-NTZA5JFV-kpbq09bx.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-lcz0kx14.js +0 -1
- package/static/dist/assets/index-h00usru2.js +0 -11
- package/static/dist/assets/index-n73ijkv2.css +0 -2
- package/static/dist/assets/lazyRouteComponent-m1rtyk4t.js +0 -1
- package/static/dist/assets/link-budeg5t9.js +0 -1
- package/static/dist/assets/login-kjhasvp8.js +0 -1
- package/static/dist/assets/matchContext-f8oy3lo7.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-jb5d211j.js +0 -1
- package/static/dist/assets/onboarding-cdfrk0pj.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-kdvgl6x8.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-itiqslby.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-go7kov78.js +0 -1
- package/static/dist/assets/refresh-cw-kbcje1uy.js +0 -1
- package/static/dist/assets/search-jen74z4u.js +0 -1
- package/static/dist/assets/share._token-dan9hgvj.js +0 -2
- package/static/dist/assets/sliders-horizontal-f9cb3lh3.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-lcfraua2.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ogmanni0.js +0 -8
- package/static/dist/assets/todoStore-eqtid4r4.js +0 -1
- package/static/dist/assets/useLocale-hcsb84pj.js +0 -1
- package/static/dist/assets/useNavigate-nwy70ztj.js +0 -1
package/dist/workspace/upload.js
CHANGED
|
@@ -6,6 +6,7 @@ import { randomBytes } from 'node:crypto';
|
|
|
6
6
|
import { isWithin, resolvePathLikePython } from './paths.js';
|
|
7
7
|
import { openAnchoredCreateFd, rmtreeAnchored, unlinkAnchored, FileExistsError } from './fs.js';
|
|
8
8
|
import { mimeFor } from './media.js';
|
|
9
|
+
import { MAX_CHAT_ATTACHMENTS } from '@maudecode/talaria-web-contracts';
|
|
9
10
|
/** Python `parse_multipart`: boundary split with CRLF or LF part separators. */
|
|
10
11
|
export function parseMultipart(raw, contentType) {
|
|
11
12
|
const m = /boundary=([^;\s]+)/.exec(contentType);
|
|
@@ -15,6 +16,7 @@ export function parseMultipart(raw, contentType) {
|
|
|
15
16
|
const delimiter = Buffer.concat([Buffer.from('--'), boundary]);
|
|
16
17
|
const fields = {};
|
|
17
18
|
const files = {};
|
|
19
|
+
const fileParts = [];
|
|
18
20
|
const parts = splitBuffer(raw, delimiter);
|
|
19
21
|
for (const part of parts.slice(1)) {
|
|
20
22
|
const stripped = stripLeadingNewlines(part);
|
|
@@ -39,12 +41,14 @@ export function parseMultipart(raw, contentType) {
|
|
|
39
41
|
if (!nameM)
|
|
40
42
|
continue;
|
|
41
43
|
const name = nameM[1] ?? '';
|
|
42
|
-
if (fileM)
|
|
44
|
+
if (fileM) {
|
|
43
45
|
files[name] = { filename: fileM[1] ?? '', body: Buffer.from(body) };
|
|
46
|
+
fileParts.push(files[name]);
|
|
47
|
+
}
|
|
44
48
|
else
|
|
45
49
|
fields[name] = body.toString('utf8');
|
|
46
50
|
}
|
|
47
|
-
return { fields, files };
|
|
51
|
+
return { fields, files, parts: fileParts };
|
|
48
52
|
}
|
|
49
53
|
function splitBuffer(buf, delimiter) {
|
|
50
54
|
const out = [];
|
|
@@ -183,7 +187,9 @@ export class UploadInbox {
|
|
|
183
187
|
// The response reports the name actually stored (Python `test_duplicate_upload_response_reports_actual_stored_filename`).
|
|
184
188
|
const stored = basename(dest);
|
|
185
189
|
const mime = guessMime(stored);
|
|
186
|
-
|
|
190
|
+
// The server names every attached file in the turn's prompt (TAL-276) and keeps at most
|
|
191
|
+
// MAX_CHAT_ATTACHMENTS per message, so clients send the bare draft and stage no more (TAL-635).
|
|
192
|
+
return { filename: stored, path: dest, size: bytes.length, mime, is_image: mime.startsWith('image/'), rollback_token: token, named_in_prompt: true, max_attachments_per_message: MAX_CHAT_ATTACHMENTS };
|
|
187
193
|
}
|
|
188
194
|
}
|
|
189
195
|
export class UploadConflict extends Error {
|
|
@@ -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;
|
|
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":"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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.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"
|
|
@@ -78,7 +84,7 @@ def _chat_start(ctx, params: dict) -> dict:
|
|
|
78
84
|
history = [*params.get("conversation_history", []), {"role": "user", "content": params.get("user_message", "")}, {"role": "assistant", "content": "talaria-contract"}]
|
|
79
85
|
return {
|
|
80
86
|
"status": "completed", "messages": history, "final_response": "talaria-contract", "error": None, "failed": False, "partial": False, "compression_exhausted": False,
|
|
81
|
-
"tool_limit_reached": False, "usage": {"prompt_tokens": 0, "completion_tokens": 0, "cache_read_tokens": 0, "cache_write_tokens": 0, "estimated_cost_usd": None},
|
|
87
|
+
"tool_limit_reached": False, "max_iterations_summary_request": "", "usage": {"prompt_tokens": 0, "completion_tokens": 0, "cache_read_tokens": 0, "cache_write_tokens": 0, "estimated_cost_usd": None},
|
|
82
88
|
"context": {}, "model": params.get("model") or "replay", "provider": params.get("model_provider") or "replay", "compressed": False,
|
|
83
89
|
"agent_session_id": params.get("session_id", ""), "token_sent": True, "pending_steer": "", "live_tool_calls": [],
|
|
84
90
|
}
|
|
@@ -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
|
|
|
@@ -39,7 +39,13 @@ def main() -> int:
|
|
|
39
39
|
# any same-named module in the checkout (api/config.py has the history).
|
|
40
40
|
sys.path.append(str(runtime.agent_dir))
|
|
41
41
|
server = RpcServer(build_methods(runtime), stdout=rpc_out, max_calls=int(os.environ.get("TALARIA_SIDECAR_MAX_CALLS") or DEFAULT_MAX_CALLS))
|
|
42
|
-
|
|
42
|
+
try:
|
|
43
|
+
return server.serve_forever()
|
|
44
|
+
finally:
|
|
45
|
+
# The server closes stdin to stop the sidecar: end every cached agent's memory session on the way out.
|
|
46
|
+
from .methods.chat import drain_agents
|
|
47
|
+
|
|
48
|
+
drain_agents()
|
|
43
49
|
|
|
44
50
|
|
|
45
51
|
if __name__ == "__main__":
|
|
@@ -25,6 +25,8 @@ from __future__ import annotations
|
|
|
25
25
|
|
|
26
26
|
import contextlib
|
|
27
27
|
import importlib
|
|
28
|
+
import json
|
|
29
|
+
import logging
|
|
28
30
|
import os
|
|
29
31
|
import sys
|
|
30
32
|
import threading
|
|
@@ -32,7 +34,12 @@ from pathlib import Path
|
|
|
32
34
|
|
|
33
35
|
from .errors import InvalidParams, RpcError
|
|
34
36
|
|
|
37
|
+
log = logging.getLogger("talaria_sidecar.home")
|
|
38
|
+
|
|
35
39
|
_ENV_LOCK = threading.RLock()
|
|
40
|
+
_RECOVERY_LOCK = threading.Lock()
|
|
41
|
+
_RECOVERED_HOMES: set[str] = set()
|
|
42
|
+
_RECOVERY_WARNED: set[str] = set()
|
|
36
43
|
_LAUNCH_ENV_LOCK = threading.Lock()
|
|
37
44
|
_LAUNCH_ENV: dict[str, str] | None = None
|
|
38
45
|
_PROCESS_HOME = Path(os.environ.get("HERMES_HOME") or Path.home() / ".hermes").expanduser()
|
|
@@ -80,6 +87,11 @@ def _activate_multi_profile_hosting() -> None:
|
|
|
80
87
|
set_multiplex_active(True)
|
|
81
88
|
|
|
82
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
|
+
|
|
83
95
|
def _launch_secret_scope(home: Path) -> dict[str, str]:
|
|
84
96
|
"""Agent 0.21.3 twin of ``tui_gateway.launch_profile_policy.launch_secret_scope``."""
|
|
85
97
|
from agent.secret_scope import _is_global_env, build_profile_secret_scope, is_multiplex_active
|
|
@@ -143,10 +155,13 @@ def _terminal_scope(home: Path):
|
|
|
143
155
|
else:
|
|
144
156
|
try:
|
|
145
157
|
from agent.secret_scope import is_multiplex_active
|
|
146
|
-
|
|
147
|
-
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
|
|
148
159
|
yield
|
|
149
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
|
|
150
165
|
# Like the launch secret scope: the live process env until multiplexing freezes it.
|
|
151
166
|
launch = launch_terminal_env() if is_multiplex_active() else {k: v for k, v in os.environ.items() if k.startswith("TERMINAL_")}
|
|
152
167
|
token = install_profile_terminal_scope(home, env_overlay=launch)
|
|
@@ -163,6 +178,39 @@ def profile_home_param(params: dict, key: str = "profile_home") -> Path:
|
|
|
163
178
|
return Path(raw).expanduser()
|
|
164
179
|
|
|
165
180
|
|
|
181
|
+
def _recover_processes(home: Path) -> None:
|
|
182
|
+
"""Re-adopt the live processes a previous run checkpointed in ``home`` (TAL-533), once per home and before the
|
|
183
|
+
first call in it can spawn: a spawn rewrites ``processes.json`` from the registry and would orphan them. A failed
|
|
184
|
+
recovery fails the call (and every later one in that home until a retry succeeds), so nothing can overwrite the
|
|
185
|
+
checkpoint it could not read."""
|
|
186
|
+
key = str(home.resolve())
|
|
187
|
+
with _RECOVERY_LOCK:
|
|
188
|
+
if key in _RECOVERED_HOMES:
|
|
189
|
+
return
|
|
190
|
+
try:
|
|
191
|
+
from tools import process_registry as registry_module
|
|
192
|
+
except ImportError: # an Agent without the registry has nothing to recover
|
|
193
|
+
_RECOVERED_HOMES.add(key)
|
|
194
|
+
return
|
|
195
|
+
try:
|
|
196
|
+
# The Agent reads an unreadable or malformed checkpoint as "nothing to recover"; that must not count as recovered.
|
|
197
|
+
checkpoint = registry_module._checkpoint_path()
|
|
198
|
+
if checkpoint.exists() and not isinstance(json.loads(checkpoint.read_text(encoding="utf-8")), list):
|
|
199
|
+
raise ValueError(f"{checkpoint} is not a list")
|
|
200
|
+
recovered = registry_module.process_registry.recover_from_checkpoint()
|
|
201
|
+
from .methods.process import track_recovered
|
|
202
|
+
|
|
203
|
+
track_recovered(registry_module.process_registry)
|
|
204
|
+
except Exception as exc: # noqa: BLE001
|
|
205
|
+
# Retried on every call in the home; reported once per home so a lasting failure does not flood the log.
|
|
206
|
+
log.log(logging.DEBUG if key in _RECOVERY_WARNED else logging.WARNING, "Background process recovery failed for %s", home, exc_info=True)
|
|
207
|
+
_RECOVERY_WARNED.add(key)
|
|
208
|
+
raise RpcError(f"background process recovery failed for {home}; its processes.json could not be re-adopted: {exc}") from exc
|
|
209
|
+
_RECOVERED_HOMES.add(key)
|
|
210
|
+
if recovered:
|
|
211
|
+
log.info("Recovered %d background process(es) for %s", recovered, home)
|
|
212
|
+
|
|
213
|
+
|
|
166
214
|
@contextlib.contextmanager
|
|
167
215
|
def scoped_home(home: Path):
|
|
168
216
|
"""Run the body with Hermes Agent resolving ``get_hermes_home()`` to ``home``."""
|
|
@@ -175,6 +223,7 @@ def scoped_home(home: Path):
|
|
|
175
223
|
token = set_hermes_home_override(home)
|
|
176
224
|
try:
|
|
177
225
|
with _secret_scope(home), _terminal_scope(home):
|
|
226
|
+
_recover_processes(home)
|
|
178
227
|
yield home
|
|
179
228
|
finally:
|
|
180
229
|
reset_hermes_home_override(token)
|
|
@@ -184,6 +233,7 @@ def scoped_home(home: Path):
|
|
|
184
233
|
os.environ["HERMES_HOME"] = str(home)
|
|
185
234
|
try:
|
|
186
235
|
with _secret_scope(home), _terminal_scope(home):
|
|
236
|
+
_recover_processes(home)
|
|
187
237
|
yield home
|
|
188
238
|
finally:
|
|
189
239
|
if previous is None:
|
|
@@ -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:
|