@maudecode/talaria-web 1.19.0 → 1.20.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/automation-raw.js +61 -6
- package/dist/api/automation-raw.js.map +1 -1
- package/dist/api/automation-router.d.ts +8 -6
- package/dist/api/automation-router.js +7 -1
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +258 -33
- package/dist/api/chat-router.js +60 -25
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.d.ts +4 -0
- package/dist/api/git-router.js +1 -1
- package/dist/api/git-router.js.map +1 -1
- package/dist/api/raw-routes.js +13 -1
- package/dist/api/raw-routes.js.map +1 -1
- package/dist/api/router.d.ts +2 -2
- package/dist/api/session-visibility.js +2 -2
- package/dist/api/session-visibility.js.map +1 -1
- package/dist/api/sessions-router.d.ts +787 -107
- package/dist/api/sessions-router.js +16 -4
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +34 -13
- package/dist/api/settings-router.js +54 -17
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.js +41 -19
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-router.d.ts +314 -32
- package/dist/api/tools-router.js +135 -38
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.js +15 -11
- package/dist/app.js.map +1 -1
- package/dist/auth/crypto.d.ts +3 -0
- package/dist/auth/crypto.js +18 -0
- package/dist/auth/crypto.js.map +1 -1
- package/dist/auth/gate.js +5 -1
- package/dist/auth/gate.js.map +1 -1
- package/dist/cli/ctl.js +6 -1
- package/dist/cli/ctl.js.map +1 -1
- package/dist/cli/main.js +23 -18
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/supervise.d.ts +22 -0
- package/dist/cli/supervise.js +80 -2
- package/dist/cli/supervise.js.map +1 -1
- package/dist/config/agent-config.d.ts +3 -0
- package/dist/config/agent-config.js +36 -9
- package/dist/config/agent-config.js.map +1 -1
- package/dist/fs/atomic.d.ts +3 -0
- package/dist/fs/atomic.js +19 -5
- package/dist/fs/atomic.js.map +1 -1
- package/dist/fs/stat.d.ts +6 -0
- package/dist/fs/stat.js +18 -2
- package/dist/fs/stat.js.map +1 -1
- package/dist/http/context.d.ts +14 -0
- package/dist/http/context.js +48 -5
- package/dist/http/context.js.map +1 -1
- package/dist/profiles/profiles.d.ts +2 -0
- package/dist/profiles/profiles.js +1 -0
- package/dist/profiles/profiles.js.map +1 -1
- package/dist/providers/catalog.d.ts +11 -6
- package/dist/providers/catalog.js +76 -24
- package/dist/providers/catalog.js.map +1 -1
- package/dist/redact.js +38 -14
- package/dist/redact.js.map +1 -1
- package/dist/release.js +5 -3
- package/dist/release.js.map +1 -1
- package/dist/runtime.js +85 -21
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +24 -21
- package/dist/server.js.map +1 -1
- package/dist/sessions/anchor.d.ts +2 -1
- package/dist/sessions/anchor.js +5 -1
- package/dist/sessions/anchor.js.map +1 -1
- package/dist/sessions/background-tasks.d.ts +23 -3
- package/dist/sessions/background-tasks.js +74 -4
- package/dist/sessions/background-tasks.js.map +1 -1
- package/dist/sessions/cli-sessions.d.ts +9 -2
- package/dist/sessions/cli-sessions.js +38 -57
- package/dist/sessions/cli-sessions.js.map +1 -1
- package/dist/sessions/completions.d.ts +8 -0
- package/dist/sessions/completions.js +55 -25
- package/dist/sessions/completions.js.map +1 -1
- package/dist/sessions/export.d.ts +2 -0
- package/dist/sessions/export.js +6 -2
- package/dist/sessions/export.js.map +1 -1
- package/dist/sessions/gateway-sessions.d.ts +44 -4
- package/dist/sessions/gateway-sessions.js +626 -90
- package/dist/sessions/gateway-sessions.js.map +1 -1
- package/dist/sessions/gateway-watcher.d.ts +10 -11
- package/dist/sessions/gateway-watcher.js +25 -21
- package/dist/sessions/gateway-watcher.js.map +1 -1
- package/dist/sessions/list.d.ts +9 -2
- package/dist/sessions/list.js +38 -26
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +11 -5
- package/dist/sessions/merge.js +59 -17
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/prefix-index.d.ts +7 -4
- package/dist/sessions/prefix-index.js +21 -10
- package/dist/sessions/prefix-index.js.map +1 -1
- package/dist/sessions/recovery.d.ts +1 -1
- package/dist/sessions/recovery.js +4 -3
- package/dist/sessions/recovery.js.map +1 -1
- package/dist/sessions/service.d.ts +107 -37
- package/dist/sessions/service.js +490 -156
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +2 -0
- package/dist/sessions/session.js +4 -0
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/state-db-worker.js +22 -5
- package/dist/sessions/state-db-worker.js.map +1 -1
- package/dist/sessions/state-db.d.ts +106 -15
- package/dist/sessions/state-db.js +651 -236
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/state-saved.d.ts +1 -1
- package/dist/sessions/state-saved.js +35 -11
- package/dist/sessions/state-saved.js.map +1 -1
- package/dist/sessions/storage/backend.d.ts +10 -1
- package/dist/sessions/storage/backend.js.map +1 -1
- package/dist/sessions/storage/conformance.js +1 -1
- package/dist/sessions/storage/conformance.js.map +1 -1
- package/dist/sessions/storage/json-documents.d.ts +2 -0
- package/dist/sessions/storage/json-documents.js +70 -26
- package/dist/sessions/storage/json-documents.js.map +1 -1
- package/dist/sessions/storage/json-files.d.ts +13 -2
- package/dist/sessions/storage/json-files.js +126 -6
- package/dist/sessions/storage/json-files.js.map +1 -1
- package/dist/sessions/storage/json-journal.d.ts +6 -7
- package/dist/sessions/storage/json-journal.js +143 -73
- package/dist/sessions/storage/json-journal.js.map +1 -1
- package/dist/sessions/storage/json.d.ts +15 -1
- package/dist/sessions/storage/json.js +125 -33
- package/dist/sessions/storage/json.js.map +1 -1
- package/dist/sessions/store.d.ts +5 -1
- package/dist/sessions/store.js +67 -27
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +8 -7
- package/dist/sessions/streams.js +49 -14
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/tool-display.d.ts +3 -1
- package/dist/sessions/tool-display.js +6 -0
- package/dist/sessions/tool-display.js.map +1 -1
- package/dist/sessions/turn-context.js +6 -2
- package/dist/sessions/turn-context.js.map +1 -1
- package/dist/sessions/turn.d.ts +23 -5
- package/dist/sessions/turn.js +168 -78
- package/dist/sessions/turn.js.map +1 -1
- package/dist/sidecar/client.d.ts +24 -1
- package/dist/sidecar/client.js +118 -38
- package/dist/sidecar/client.js.map +1 -1
- package/dist/sidecar/fake.d.ts +6 -2
- package/dist/sidecar/fake.js +15 -2
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/spa.d.ts +9 -4
- package/dist/spa.js +36 -12
- package/dist/spa.js.map +1 -1
- package/dist/startup-timing.d.ts +66 -0
- package/dist/startup-timing.js +129 -0
- package/dist/startup-timing.js.map +1 -0
- package/dist/test/fs-handles.d.ts +11 -0
- package/dist/test/fs-handles.js +31 -0
- package/dist/test/fs-handles.js.map +1 -0
- package/dist/tools/connectors.d.ts +1 -1
- package/dist/tools/connectors.js +2 -2
- package/dist/tools/connectors.js.map +1 -1
- package/dist/tools/crons.d.ts +8 -4
- package/dist/tools/crons.js +25 -18
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/dashboard-plugins.d.ts +29 -0
- package/dist/tools/dashboard-plugins.js +132 -0
- package/dist/tools/dashboard-plugins.js.map +1 -1
- package/dist/tools/gateway-restart.d.ts +25 -5
- package/dist/tools/gateway-restart.js +103 -23
- package/dist/tools/gateway-restart.js.map +1 -1
- package/dist/tools/health.d.ts +13 -1
- package/dist/tools/health.js +80 -22
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/insights.d.ts +1 -1
- package/dist/tools/insights.js +2 -2
- package/dist/tools/insights.js.map +1 -1
- package/dist/tools/mcp-health.js +74 -24
- package/dist/tools/mcp-health.js.map +1 -1
- package/dist/tools/mcp.js +19 -1
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/plugin-oauth.d.ts +14 -0
- package/dist/tools/plugin-oauth.js +53 -0
- package/dist/tools/plugin-oauth.js.map +1 -0
- package/dist/tools/prune-advice.d.ts +50 -0
- package/dist/tools/prune-advice.js +114 -0
- package/dist/tools/prune-advice.js.map +1 -0
- package/dist/tools/skills.d.ts +5 -2
- package/dist/tools/skills.js +9 -6
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/update-notifications.d.ts +73 -7
- package/dist/tools/update-notifications.js +277 -43
- package/dist/tools/update-notifications.js.map +1 -1
- package/dist/tools/updates.d.ts +8 -1
- package/dist/tools/updates.js +51 -17
- package/dist/tools/updates.js.map +1 -1
- package/dist/workspace/media.js +69 -20
- package/dist/workspace/media.js.map +1 -1
- package/dist/workspace/preview.js +4 -14
- package/dist/workspace/preview.js.map +1 -1
- package/dist/workspace/rollback.d.ts +6 -2
- package/dist/workspace/rollback.js +17 -7
- package/dist/workspace/rollback.js.map +1 -1
- package/package.json +3 -3
- package/sidecar/agent_dependency.json +4 -4
- package/sidecar/agent_support.json +17 -14
- package/sidecar/scripts/suite_runner.py +183 -27
- package/sidecar/scripts/test.sh +5 -7
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/__main__.py +10 -3
- package/sidecar/talaria_sidecar/agent_mutation.py +159 -23
- package/sidecar/talaria_sidecar/agent_services.py +74 -11
- package/sidecar/talaria_sidecar/context_detail.py +59 -0
- package/sidecar/talaria_sidecar/home.py +97 -20
- package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
- package/sidecar/talaria_sidecar/methods/aux.py +80 -18
- package/sidecar/talaria_sidecar/methods/chat.py +571 -106
- package/sidecar/talaria_sidecar/methods/checkpoints.py +29 -4
- package/sidecar/talaria_sidecar/methods/commands.py +277 -16
- package/sidecar/talaria_sidecar/methods/config.py +73 -3
- package/sidecar/talaria_sidecar/methods/connectors.py +45 -13
- package/sidecar/talaria_sidecar/methods/cron.py +8 -2
- package/sidecar/talaria_sidecar/methods/dashboard_plugins.py +301 -0
- package/sidecar/talaria_sidecar/methods/gateway.py +24 -4
- package/sidecar/talaria_sidecar/methods/gateway_sessions.py +211 -27
- package/sidecar/talaria_sidecar/methods/kanban.py +2 -3
- package/sidecar/talaria_sidecar/methods/oauth.py +139 -11
- package/sidecar/talaria_sidecar/methods/plugin_catalog.py +198 -0
- package/sidecar/talaria_sidecar/methods/plugin_oauth.py +234 -0
- package/sidecar/talaria_sidecar/methods/process.py +70 -6
- package/sidecar/talaria_sidecar/methods/profiles.py +4 -3
- package/sidecar/talaria_sidecar/methods/runtime.py +2 -0
- package/sidecar/talaria_sidecar/methods/skills.py +22 -7
- package/sidecar/talaria_sidecar/methods/state_db.py +128 -42
- package/sidecar/talaria_sidecar/methods/toolsets.py +4 -2
- package/sidecar/talaria_sidecar/methods/worktree.py +121 -2
- package/sidecar/talaria_sidecar/rpc.py +25 -3
- package/sidecar/talaria_sidecar/runtime.py +42 -3
- package/sidecar/talaria_sidecar/speed.py +13 -1
- package/sidecar/talaria_sidecar/startup_timing.py +119 -0
- package/static/dist/FILES.txt +241 -213
- package/static/dist/THIRD_PARTY_LICENSES.md +6 -22
- package/static/dist/assets/AppShell-3isgvoro.js +8 -0
- package/static/dist/assets/Button-f4n6dapf.js +1 -0
- package/static/dist/assets/ChatPage-k7b6xfax.js +4 -0
- package/static/dist/assets/ConnectTargets-juqvt5lm.js +1 -0
- package/static/dist/assets/Dialog-hta5utr3.js +1 -0
- package/static/dist/assets/ExtensionRoute-zrhjn0wm.js +1 -0
- package/static/dist/assets/Field-b6ez48oz.js +1 -0
- package/static/dist/assets/HubRoute-iwvso2tz.js +2 -0
- package/static/dist/assets/LinkCheckContext-ix6zqqkk.js +1 -0
- package/static/dist/assets/Markdown-jdeth7zq.js +2 -0
- package/static/dist/assets/MarkdownRenderer-fbswsgld.js +302 -0
- package/static/dist/assets/MarkdownRenderer-i9o6nr38.css +1 -0
- package/static/dist/assets/OAuthSignIn-bpd8hom3.js +1 -0
- package/static/dist/assets/ResourceSwitch-odi6dy2o.js +1 -0
- package/static/dist/assets/RightPanel-eu6enlo6.js +1 -0
- package/static/dist/assets/Select-kr07928w.js +1 -0
- package/static/dist/assets/SessionListPanel-etb2i54l.js +1 -0
- package/static/dist/assets/SettingsLayout-eu3xxp23.js +1 -0
- package/static/dist/assets/States-icab19yg.js +1 -0
- package/static/dist/assets/TerminalPanel-hngmsr8b.js +16 -0
- package/static/dist/assets/Toaster-nb2uzjw1.js +1 -0
- package/static/dist/assets/_app-ga1moszl.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-na62087t.js +1 -0
- package/static/dist/assets/_app.index-jypgdqoi.js +1 -0
- package/static/dist/assets/_app.insights-kabejdtm.js +1 -0
- package/static/dist/assets/_app.kanban-m19kfcmx.js +1 -0
- package/static/dist/assets/_app.logs-iw4m96sz.js +1 -0
- package/static/dist/assets/_app.memory-jq5frwcg.js +1 -0
- package/static/dist/assets/_app.profiles-kwa3m7rp.js +1 -0
- package/static/dist/assets/_app.session._sessionId-o5lyeipj.js +1 -0
- package/static/dist/assets/_app.settings-ckl8hdll.js +1 -0
- package/static/dist/assets/_app.settings._section-dtdjk98a.js +3 -0
- package/static/dist/assets/_app.skills-n016rihd.js +1 -0
- package/static/dist/assets/_app.tasks-n8zuqsqe.js +1 -0
- package/static/dist/assets/_app.todos-btew5v2s.js +1 -0
- package/static/dist/assets/_app.workspaces-lnfk95ch.js +1 -0
- package/static/dist/assets/abnfDiagram-VCTEODGH-dttheegb.js +1 -0
- package/static/dist/assets/{angular-html-nu6l31w3.js → angular-html-l28bd5fo.js} +1 -1
- package/static/dist/assets/{angular-ts-fbx4f8mm.js → angular-ts-ffzx1vj0.js} +1 -1
- package/static/dist/assets/{apl-bx2xr7dh.js → apl-b7h7mmy4.js} +1 -1
- package/static/dist/assets/{arc-7popfhbk.js → arc-fk1b21lm.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-ic435919.js +1 -0
- package/static/dist/assets/architectureDiagram-5GKGNRK7-8r3glgiq.js +36 -0
- package/static/dist/assets/archive-il7c6053.js +1 -0
- package/static/dist/assets/{astro-g77i97cb.js → astro-k117fy0t.js} +1 -1
- package/static/dist/assets/back-gu3nu279.js +1 -0
- package/static/dist/assets/{blade-boo0u92y.js → blade-npefsmn8.js} +1 -1
- package/static/dist/assets/{blockDiagram-I7D4REHJ-joedghi3.js → blockDiagram-I7D4REHJ-jenyos6c.js} +4 -4
- package/static/dist/assets/{c-cat0w3sc.js → c-2umg6kbn.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-hyrjrohe.js → c4Diagram-7LVT6UL2-nzlx7yc4.js} +1 -1
- package/static/dist/assets/cancel-bsnfo36u.js +1 -0
- package/static/dist/assets/channel-dsbtk01y.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-koouqbut.js → chunk-4HAMMTFA-g0cru63b.js} +20 -20
- package/static/dist/assets/{chunk-75Z2AOVW-bl4bhdnt.js → chunk-75Z2AOVW-7rkswkjw.js} +1 -1
- package/static/dist/assets/chunk-DU6HZSFF-fn73jzdo.js +128 -0
- package/static/dist/assets/{chunk-F27PBJKO-d8xxi0zi.js → chunk-F27PBJKO-oey8e72m.js} +1 -1
- package/static/dist/assets/{chunk-FOHPRMQF-opuflp73.js → chunk-FOHPRMQF-ipewusgj.js} +8 -8
- package/static/dist/assets/{chunk-GMAD6QVW-jro0hl73.js → chunk-GMAD6QVW-l2a32wiy.js} +6 -6
- package/static/dist/assets/{chunk-GVQU2GXP-djn6gbyu.js → chunk-GVQU2GXP-o9dwzh8h.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-vw4p5p7o.js → chunk-IMKFNOWR-eblwj20b.js} +5 -5
- package/static/dist/assets/{chunk-L3NEJ4N5-n1hj77q8.js → chunk-L3NEJ4N5-o2mufspb.js} +1 -1
- package/static/dist/assets/chunk-OSK3NFVY-ijp9pw29.js +10 -0
- package/static/dist/assets/{chunk-P2QGCYS3-onf1hz6c.js → chunk-P2QGCYS3-hs9hqwl4.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-m8sqn7cs.js → chunk-POPQ4Y6H-bp9rsqez.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-ek4smc8x.js → chunk-PWAF6VOD-brkprov6.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-g9gfvefo.js → chunk-SHT3W25Y-gmpv0pxz.js} +13 -13
- package/static/dist/assets/{chunk-SVP7TREG-f9nfv2cu.js → chunk-SVP7TREG-oldm08fu.js} +4 -4
- package/static/dist/assets/{chunk-TICWLB2K-bnk3m1mq.js → chunk-TICWLB2K-ooqilfv7.js} +6 -6
- package/static/dist/assets/{chunk-XXDRQBXY-n40pf9vy.js → chunk-XXDRQBXY-jkmnqu65.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-fvgcv24g.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-fvgcv24g.js +1 -0
- package/static/dist/assets/{cobol-go622aep.js → cobol-ssf9hkh7.js} +1 -1
- package/static/dist/assets/{coffee-jwo1xjhq.js → coffee-lsi9fwae.js} +1 -1
- package/static/dist/assets/copied-bz3gkazh.js +1 -0
- package/static/dist/assets/copy-jo006coq.js +1 -0
- package/static/dist/assets/cose-bilkent-JH36ORCC-layy2r27.js +1 -0
- package/static/dist/assets/{cpp-nre7j0kq.js → cpp-lfrh4y55.js} +1 -1
- package/static/dist/assets/{crystal-lviso2je.js → crystal-efh4pte7.js} +1 -1
- package/static/dist/assets/{css-ywz9j4hb.js → css-i82qdo89.js} +1 -1
- package/static/dist/assets/cynefin-OW5HDTMX-d47op7qs.js +1 -0
- package/static/dist/assets/cynefinDiagram-5FMLGOSQ-doa7594y.js +62 -0
- package/static/dist/assets/cytoscape.esm-fjn2algp.js +321 -0
- package/static/dist/assets/dagre-GXQ25YYZ-os768dp4.js +4 -0
- package/static/dist/assets/dagre-o5jmjz46.js +1 -0
- package/static/dist/assets/{diagram-S7CK7UJ4-m6aeoe7c.js → diagram-S7CK7UJ4-fyi81nxd.js} +4 -4
- package/static/dist/assets/diagram-UQ7AKVKN-j3exggaq.js +41 -0
- package/static/dist/assets/{diagram-VSXAHHWV-hbawi7hn.js → diagram-VSXAHHWV-omo1en2l.js} +1 -1
- package/static/dist/assets/diagram-VX7I27RA-oro2cyu0.js +24 -0
- package/static/dist/assets/diagram-Z3DM3KII-byt9vdb7.js +24 -0
- package/static/dist/assets/dist-crc46di9.js +7 -0
- package/static/dist/assets/dist-etpoyscq.js +44 -0
- package/static/dist/assets/{dist-c4c2m3kv.js → dist-nb670eu6.js} +1 -1
- package/static/dist/assets/ebnfDiagram-PWID7BFC-ee3haugh.js +1 -0
- package/static/dist/assets/{edge-dvv35byi.js → edge-lrob635n.js} +1 -1
- package/static/dist/assets/{elixir-i2f1ki1g.js → elixir-kdpxeq93.js} +1 -1
- package/static/dist/assets/{elm-cpepyjm4.js → elm-c8irj9uh.js} +1 -1
- package/static/dist/assets/erDiagram-RLTQ6QDP-d1e93yff.js +99 -0
- package/static/dist/assets/{erb-idlyfheg.js → erb-flwsv146.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-i1ihb40c.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-jahfpiod.js +1 -0
- package/static/dist/assets/folder-plus-ivoglq98.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-ma6jxj5i.js → ganttDiagram-EL5Y4UJY-m7g0jud4.js} +1 -1
- package/static/dist/assets/{git-rebase-d9lpfpbn.js → git-rebase-bli19aoq.js} +1 -1
- package/static/dist/assets/gitGraph-4MIJSDKK-hzdj07yy.js +1 -0
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-hzltvsod.js → gitGraphDiagram-WWUBYQGX-dm9agbna.js} +1 -1
- package/static/dist/assets/{glimmer-js-39i0urfb.js → glimmer-js-d4icg38p.js} +1 -1
- package/static/dist/assets/{glimmer-ts-gdtd6n73.js → glimmer-ts-bk75772u.js} +1 -1
- package/static/dist/assets/{glsl-o1djm5pp.js → glsl-lqormp2b.js} +1 -1
- package/static/dist/assets/{graphql-kj6rz55t.js → graphql-hw6s5qzd.js} +1 -1
- package/static/dist/assets/{hack-pe1qqr2i.js → hack-ozrv6l4d.js} +1 -1
- package/static/dist/assets/{haml-cknnbcqs.js → haml-gytfosdt.js} +1 -1
- package/static/dist/assets/{handlebars-hwq64orh.js → handlebars-b6g7jffd.js} +1 -1
- package/static/dist/assets/highlighted-body-KPVGNVTW-mmgz2czu.js +1 -0
- package/static/dist/assets/host-fr6lni1p.js +1 -0
- package/static/dist/assets/{html-derivative-h2i2pyjc.js → html-derivative-f1tqcroo.js} +1 -1
- package/static/dist/assets/{html-ha05xtvt.js → html-on6oj6yj.js} +1 -1
- package/static/dist/assets/{http-cf94zu27.js → http-odhufsl7.js} +1 -1
- package/static/dist/assets/{hurl-lslax568.js → hurl-mu680336.js} +1 -1
- package/static/dist/assets/index-73649w7o.js +10 -0
- package/static/dist/assets/index-lhf1fsdf.css +2 -0
- package/static/dist/assets/info-A6RAGUB7-lll1dqmm.js +1 -0
- package/static/dist/assets/infoDiagram-27XIBGKW-k7esc639.js +2 -0
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-e7bnwq7h.js → ishikawaDiagram-5VMMS53U-lgr6k9wo.js} +6 -6
- package/static/dist/assets/{java-ndjf2o89.js → java-nxbe8uju.js} +1 -1
- package/static/dist/assets/{javascript-coftlwy3.js → javascript-lz3kxcyz.js} +1 -1
- package/static/dist/assets/{jinja-etei9wy7.js → jinja-l5pk84gt.js} +1 -1
- package/static/dist/assets/{jison-hyekgft1.js → jison-jdutdwyy.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-etd1bi6p.js → journeyDiagram-3NMN7TZE-ndmbxuqk.js} +1 -1
- package/static/dist/assets/{json-lok0yaho.js → json-dnge4ssf.js} +1 -1
- package/static/dist/assets/{jsx-b64w0nbx.js → jsx-c3lwhkep.js} +1 -1
- package/static/dist/assets/{jsx-runtime-eu92a5pu.js → jsx-runtime-o40ukmjl.js} +1 -1
- package/static/dist/assets/{julia-jxxzz2yn.js → julia-hwd4rrcb.js} +1 -1
- package/static/dist/assets/{just-mc29iw9t.js → just-nka3oxdx.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-emb1g9dz.js → kanban-definition-UXKFOSKX-mjxym0jp.js} +28 -28
- package/static/dist/assets/katex-cbdd1ohw.css +1 -0
- package/static/dist/assets/katex-pbij2oo6.js +257 -0
- package/static/dist/assets/{latex-pafa03ft.js → latex-iqmr7e40.js} +1 -1
- package/static/dist/assets/lazyRouteComponent-cwb6l7xh.js +1 -0
- package/static/dist/assets/{line-h0ojzsvs.js → line-mtr5k6il.js} +1 -1
- package/static/dist/assets/linear-jlwrvvy6.js +1 -0
- package/static/dist/assets/link-iadw4ghw.js +2 -0
- package/static/dist/assets/{liquid-hz5c2pov.js → liquid-okmk9tbp.js} +1 -1
- package/static/dist/assets/locale-cs-n41hptse.js +5 -0
- package/static/dist/assets/locale-de-k7ht47ew.js +5 -0
- package/static/dist/assets/locale-es-ih078lco.js +5 -0
- package/static/dist/assets/locale-fr-ojabnf41.js +5 -0
- package/static/dist/assets/locale-it-kb96jufy.js +5 -0
- package/static/dist/assets/locale-ja-jpsp3xs1.js +7 -0
- package/static/dist/assets/locale-ko-cpzuy0n7.js +5 -0
- package/static/dist/assets/locale-pl-dbap4leu.js +5 -0
- package/static/dist/assets/locale-pt-nci7w72x.js +5 -0
- package/static/dist/assets/locale-ru-soghe4cs.js +7 -0
- package/static/dist/assets/locale-tr-ks00mu68.js +5 -0
- package/static/dist/assets/locale-vi-ij7twfm6.js +5 -0
- package/static/dist/assets/locale-zh-Hant-feakwr7a.js +5 -0
- package/static/dist/assets/locale-zh-ren0vjyv.js +7 -0
- package/static/dist/assets/login-lkhtzfcl.js +1 -0
- package/static/dist/assets/{lua-leyf8mlb.js → lua-krx4xj5h.js} +1 -1
- package/static/dist/assets/{marko-cn1fzpdv.js → marko-gbvpfehz.js} +1 -1
- package/static/dist/assets/{mdc-huhy88df.js → mdc-c21zlyi5.js} +1 -1
- package/static/dist/assets/mermaid-HWGCJPDP-jx0q5dm2.js +1 -0
- package/static/dist/assets/mermaid-parser.core-k91vdnvi.js +7 -0
- package/static/dist/assets/micromark-factory-space-fnmnpi6s.js +1 -0
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-o1vathns.js → mindmap-definition-YA3MSWOX-ehztfea4.js} +28 -28
- package/static/dist/assets/{nginx-e7lvhsmn.js → nginx-f3d68ed4.js} +1 -1
- package/static/dist/assets/{nim-dun5d8mk.js → nim-dw0jcy70.js} +1 -1
- package/static/dist/assets/onboarding-f67z0a2r.js +1 -0
- package/static/dist/assets/packet-AYTQ26CC-ok2xrblz.js +1 -0
- package/static/dist/assets/pegDiagram-XKGWAZYB-ec3rpj0m.js +1 -0
- package/static/dist/assets/{perl-bj3oqtet.js → perl-3c0r45c8.js} +1 -1
- package/static/dist/assets/{php-buzp12r0.js → php-rznhidvp.js} +1 -1
- package/static/dist/assets/pie-WAS4IAKB-iwkir23u.js +1 -0
- package/static/dist/assets/pieDiagram-E7YTZNPT-fcpqpekh.js +39 -0
- package/static/dist/assets/{pug-mjad7he9.js → pug-f2le4f3y.js} +1 -1
- package/static/dist/assets/{qml-d1gdp10s.js → qml-e2wbq9cr.js} +1 -1
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-owqc4uqn.js → quadrantDiagram-AXDQQJYC-lqsync43.js} +1 -1
- package/static/dist/assets/queryKeys-ed4n2egc.js +9 -0
- package/static/dist/assets/{r-o3r9c7ao.js → r-epfzuw6q.js} +1 -1
- package/static/dist/assets/radar-RG4KPBEZ-hje4jbk6.js +1 -0
- package/static/dist/assets/railroad-74A4TZTK-gll9n6qi.js +1 -0
- package/static/dist/assets/railroad-abnf-HS5TGJTU-o6h6lpn4.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-juaefj6o.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-cgfhvpah.js +1 -0
- package/static/dist/assets/railroadDiagram-O6MQD6OU-lp3w7awf.js +1 -0
- package/static/dist/assets/{razor-ilc585yr.js → razor-pea1u1d0.js} +1 -1
- package/static/dist/assets/refresh-cw-iccm7a4e.js +1 -0
- package/static/dist/assets/refresh-i9ya9dvl.js +1 -0
- package/static/dist/assets/{regexp-mpjtcvwm.js → regexp-hzte0a5x.js} +1 -1
- package/static/dist/assets/registry-g7w3353u.js +1 -0
- package/static/dist/assets/requirementDiagram-BXWQKSXE-ha8eibcf.js +84 -0
- package/static/dist/assets/rolldown-runtime-bnnw9q4a.js +1 -0
- package/static/dist/assets/{rst-jrkwjdyi.js → rst-m6tugj5o.js} +1 -1
- package/static/dist/assets/{ruby-n4tjcbpz.js → ruby-l19vq3w1.js} +1 -1
- package/static/dist/assets/runtime-nlxpnegr.js +1 -0
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-iqc02emv.js → sankeyDiagram-P5KCCOFB-oxf31pr9.js} +1 -1
- package/static/dist/assets/{sas-hjo6y93k.js → sas-ktdxo397.js} +1 -1
- package/static/dist/assets/{scss-ncidjv48.js → scss-kn3oxfwf.js} +1 -1
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-i0v116q0.js → sequenceDiagram-WJ2MYXX4-jiq8lhyo.js} +11 -11
- package/static/dist/assets/settings_section_extensions_title-fadc7o65.js +1 -0
- package/static/dist/assets/share._token-o76ki0ly.js +2 -0
- package/static/dist/assets/{shellscript-m8whjpqd.js → shellscript-l100jtrg.js} +1 -1
- package/static/dist/assets/{shellsession-i5bj6syz.js → shellsession-m5qukwow.js} +1 -1
- package/static/dist/assets/sizeCapture-INFHLROL-dk1io13w.js +1 -0
- package/static/dist/assets/sliders-horizontal-ddcs88av.js +1 -0
- package/static/dist/assets/{soy-hhh36ysq.js → soy-mexlscur.js} +1 -1
- package/static/dist/assets/{sql-j21bzcl6.js → sql-o0ho5suh.js} +1 -1
- package/static/dist/assets/src-h89s0hs4.js +1 -0
- package/static/dist/assets/{stata-bbu2onh1.js → stata-be9ck1q3.js} +1 -1
- package/static/dist/assets/stateDiagram-D77RDMKH-f3fslnon.js +1 -0
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-hlt6yphw.js +1 -0
- package/static/dist/assets/{surrealql-l5vczuco.js → surrealql-gk1xkkyy.js} +1 -1
- package/static/dist/assets/{svelte-idn422g6.js → svelte-k6ecjilf.js} +1 -1
- package/static/dist/assets/swimlanes-42K2YHIH-k1hmk7jf.js +1 -0
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-hd5t9tnt.js +8 -0
- package/static/dist/assets/{templ-e22qou3c.js → templ-gf3bftk6.js} +1 -1
- package/static/dist/assets/{tex-deqpc5ee.js → tex-d21fqv1z.js} +1 -1
- package/static/dist/assets/{timeline-definition-24CTP7MA-ol2hnvma.js → timeline-definition-24CTP7MA-n3ncfy9r.js} +8 -8
- package/static/dist/assets/toast-liparz2j.js +56 -0
- package/static/dist/assets/treeView-Q6P3EWNA-l3y2pejt.js +1 -0
- package/static/dist/assets/treemap-WGGIJYW6-jown9axh.js +1 -0
- package/static/dist/assets/{ts-tags-ctnibc27.js → ts-tags-n0g61gr6.js} +1 -1
- package/static/dist/assets/{tsx-i163n32g.js → tsx-cvv7wv6q.js} +1 -1
- package/static/dist/assets/{twig-x0fi7wm8.js → twig-n1f67204.js} +1 -1
- package/static/dist/assets/{typescript-g18c34xz.js → typescript-og7o55cx.js} +1 -1
- package/static/dist/assets/untitled-mj86r4gz.js +1 -0
- package/static/dist/assets/useDebounced-g8r0ggve.js +1 -0
- package/static/dist/assets/useForm-o4uu74mx.js +1 -0
- package/static/dist/assets/{useParams-gjc70qru.js → useParams-ftsveu84.js} +1 -1
- package/static/dist/assets/{useSearch-e6ae539u.js → useSearch-crqueqga.js} +1 -1
- package/static/dist/assets/vennDiagram-4TSXK5OY-dh59uq1c.js +34 -0
- package/static/dist/assets/{vue-mwu5l1bb.js → vue-ej4xpwqw.js} +1 -1
- package/static/dist/assets/{vue-html-nskj3du0.js → vue-html-d48xsjuo.js} +1 -1
- package/static/dist/assets/{vue-vine-cqe77smq.js → vue-vine-pev88ip6.js} +1 -1
- package/static/dist/assets/wardley-WFR3VGLG-e6d74b0j.js +1 -0
- package/static/dist/assets/wardleyDiagram-VM6X3IG4-hnofh78f.js +78 -0
- package/static/dist/assets/with-selector-nu1b5z0v.js +1 -0
- package/static/dist/assets/{xml-gau7gvrv.js → xml-ifxp6gqb.js} +1 -1
- package/static/dist/assets/{xsl-ew09zq8b.js → xsl-fug2cckc.js} +1 -1
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-aqbgvujg.js → xychartDiagram-S5SC5T6Z-bpymjelb.js} +6 -6
- package/static/dist/assets/{yaml-ofnrxtvf.js → yaml-fjmafnlo.js} +1 -1
- package/static/dist/extension-sdk.js +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +180 -136
- package/static/dist/assets/AppShell-cey33v9s.js +0 -8
- package/static/dist/assets/ChatPage-i8wnugr7.js +0 -18
- package/static/dist/assets/ConnectTargets-hg19553x.js +0 -1
- package/static/dist/assets/ExtensionRoute-cly4apm5.js +0 -1
- package/static/dist/assets/Field-j8uqoigz.js +0 -9
- package/static/dist/assets/HubRoute-e4bgz41j.js +0 -2
- package/static/dist/assets/Markdown-lahuichm.js +0 -598
- package/static/dist/assets/Markdown-lwviulmg.css +0 -1
- package/static/dist/assets/RightPanel-lbo4i0fn.js +0 -1
- package/static/dist/assets/Select-gqatm2e0.js +0 -1
- package/static/dist/assets/SessionListPanel-mfqayfjh.js +0 -1
- package/static/dist/assets/SettingsLayout-b8980u7k.js +0 -1
- package/static/dist/assets/States-e7dkgtxf.js +0 -1
- package/static/dist/assets/Toaster-bfqqy786.js +0 -1
- package/static/dist/assets/_app-n1n6pfx1.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-buxjxav3.js +0 -1
- package/static/dist/assets/_app.index-jt8zwiu2.js +0 -1
- package/static/dist/assets/_app.insights-cv76ml71.js +0 -1
- package/static/dist/assets/_app.kanban-h6ts53j7.js +0 -1
- package/static/dist/assets/_app.logs-dm873z90.js +0 -1
- package/static/dist/assets/_app.memory-glk5y6m8.js +0 -1
- package/static/dist/assets/_app.profiles-ka6zpstq.js +0 -1
- package/static/dist/assets/_app.session._sessionId-g2vzghvc.js +0 -1
- package/static/dist/assets/_app.settings-hgjdhzcd.js +0 -1
- package/static/dist/assets/_app.settings._section-jf2kmhae.js +0 -3
- package/static/dist/assets/_app.skills-cii852yq.js +0 -1
- package/static/dist/assets/_app.tasks-fp9q7atm.js +0 -1
- package/static/dist/assets/_app.todos-dw94qzue.js +0 -1
- package/static/dist/assets/_app.workspaces-inyygzze.js +0 -1
- package/static/dist/assets/abnfDiagram-VCTEODGH-gjayq3ra.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-lp56972r.js +0 -1
- package/static/dist/assets/architectureDiagram-5GKGNRK7-nwb3xovn.js +0 -36
- package/static/dist/assets/archive-b1j004vn.js +0 -1
- package/static/dist/assets/back-g74gkozu.js +0 -1
- package/static/dist/assets/channel-es95o4y8.js +0 -1
- package/static/dist/assets/chunk-DU6HZSFF-gpedttsp.js +0 -128
- package/static/dist/assets/chunk-OSK3NFVY-oy0gwn2n.js +0 -10
- package/static/dist/assets/classDiagram-ZZMXUADV-kmihoqxh.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-kmihoqxh.js +0 -1
- package/static/dist/assets/copied-bli9tbcx.js +0 -1
- package/static/dist/assets/copy-jamtd1pf.js +0 -1
- package/static/dist/assets/cose-bilkent-JH36ORCC-eclcy6ja.js +0 -1
- package/static/dist/assets/cynefin-OW5HDTMX-f8xfdd3f.js +0 -1
- package/static/dist/assets/cynefinDiagram-5FMLGOSQ-n9lb99h9.js +0 -62
- package/static/dist/assets/cytoscape.esm-bqu53u12.js +0 -321
- package/static/dist/assets/dagre-GXQ25YYZ-dgailddi.js +0 -4
- package/static/dist/assets/dagre-lkoknbjn.js +0 -1
- package/static/dist/assets/diagram-UQ7AKVKN-jall3j0x.js +0 -41
- package/static/dist/assets/diagram-VX7I27RA-hendl2tt.js +0 -24
- package/static/dist/assets/diagram-Z3DM3KII-igwc35p3.js +0 -24
- package/static/dist/assets/ebnfDiagram-PWID7BFC-c64knz08.js +0 -1
- package/static/dist/assets/erDiagram-RLTQ6QDP-brdu9lcm.js +0 -99
- package/static/dist/assets/eventmodeling-NTZA5JFV-njk1j8wl.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-nma6f0ga.js +0 -1
- package/static/dist/assets/folder-plus-lvt9kudb.js +0 -1
- package/static/dist/assets/gitGraph-4MIJSDKK-naa9w6xa.js +0 -1
- package/static/dist/assets/highlighted-body-KPVGNVTW-ghoavj8d.js +0 -1
- package/static/dist/assets/host-hzm8n85n.js +0 -1
- package/static/dist/assets/index-drdcaqeq.css +0 -2
- package/static/dist/assets/index-jzm844he.js +0 -11
- package/static/dist/assets/info-A6RAGUB7-mn2ut5ko.js +0 -1
- package/static/dist/assets/infoDiagram-27XIBGKW-h6kuqvsb.js +0 -2
- package/static/dist/assets/lazyRouteComponent-o816ytzl.js +0 -1
- package/static/dist/assets/linear-becwlnhk.js +0 -1
- package/static/dist/assets/link-k01ryaf9.js +0 -1
- package/static/dist/assets/login-bsae49ew.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-ihl34s74.js +0 -1
- package/static/dist/assets/mermaid-parser.core-bnre27u8.js +0 -7
- package/static/dist/assets/not-found-ccnnac39.js +0 -1
- package/static/dist/assets/onboarding-c65tysya.js +0 -1
- package/static/dist/assets/onboarding_model_label-gpn28uix.js +0 -1
- package/static/dist/assets/packet-AYTQ26CC-hatq7m2e.js +0 -1
- package/static/dist/assets/pegDiagram-XKGWAZYB-gwisz8jv.js +0 -1
- package/static/dist/assets/pie-WAS4IAKB-fpftf0mk.js +0 -1
- package/static/dist/assets/pieDiagram-E7YTZNPT-khm1o9a6.js +0 -39
- package/static/dist/assets/radar-RG4KPBEZ-cntfwjpq.js +0 -1
- package/static/dist/assets/railroad-74A4TZTK-a7t5eibp.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-ol8cdktf.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-i8vzd429.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-nw3ulewz.js +0 -1
- package/static/dist/assets/railroadDiagram-O6MQD6OU-etuh0qa0.js +0 -1
- package/static/dist/assets/refresh-cw-mqbkv2a3.js +0 -1
- package/static/dist/assets/refresh-l29ljp76.js +0 -1
- package/static/dist/assets/requirementDiagram-BXWQKSXE-oq2ulk22.js +0 -84
- package/static/dist/assets/rolldown-runtime-b9miacsj.js +0 -1
- package/static/dist/assets/root-mbklpuv4.js +0 -1
- package/static/dist/assets/saved-ndd4t2xb.js +0 -1
- package/static/dist/assets/settings_section_extensions_title-jhfo6o8z.js +0 -1
- package/static/dist/assets/share._token-c1ri0hy1.js +0 -2
- package/static/dist/assets/sizeCapture-INFHLROL-g612l48j.js +0 -1
- package/static/dist/assets/sliders-horizontal-j3jjt9tv.js +0 -1
- package/static/dist/assets/src-hjyib4mu.js +0 -1
- package/static/dist/assets/stateDiagram-D77RDMKH-dnpt1ato.js +0 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-bxjacpk6.js +0 -1
- package/static/dist/assets/swimlanes-42K2YHIH-loqbdazb.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-id62p9hz.js +0 -8
- package/static/dist/assets/toast-i3h34v6o.js +0 -64
- package/static/dist/assets/treeView-Q6P3EWNA-idrj6iox.js +0 -1
- package/static/dist/assets/treemap-WGGIJYW6-lzr49vv5.js +0 -1
- package/static/dist/assets/untitled-oaoya4qj.js +0 -1
- package/static/dist/assets/useForm-nfaxgmsk.js +0 -1
- package/static/dist/assets/vennDiagram-4TSXK5OY-bvwr9o2z.js +0 -34
- package/static/dist/assets/wardley-WFR3VGLG-31ui8tma.js +0 -1
- package/static/dist/assets/wardleyDiagram-VM6X3IG4-k5wqtx4b.js +0 -78
- /package/static/dist/assets/{ChatPage-gmu5c7lf.css → TerminalPanel-gmu5c7lf.css} +0 -0
|
@@ -24,6 +24,7 @@ its launch-process ``TERMINAL_*`` under those files.
|
|
|
24
24
|
from __future__ import annotations
|
|
25
25
|
|
|
26
26
|
import contextlib
|
|
27
|
+
import copy
|
|
27
28
|
import importlib
|
|
28
29
|
import json
|
|
29
30
|
import logging
|
|
@@ -42,6 +43,69 @@ _RECOVERED_HOMES: set[str] = set()
|
|
|
42
43
|
_RECOVERY_WARNED: set[str] = set()
|
|
43
44
|
_LAUNCH_ENV_LOCK = threading.Lock()
|
|
44
45
|
_LAUNCH_ENV: dict[str, str] | None = None
|
|
46
|
+
_SCOPE_CACHE_LOCK = threading.Lock()
|
|
47
|
+
_SCOPE_CACHE: dict[str, dict] = {}
|
|
48
|
+
_SCOPE_CACHE_MAX = 64
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _scope_stamp(home: Path) -> tuple | None:
|
|
52
|
+
stamps = []
|
|
53
|
+
for name in (".env", "config.yaml"):
|
|
54
|
+
try:
|
|
55
|
+
st = (home / name).stat()
|
|
56
|
+
except FileNotFoundError:
|
|
57
|
+
stamps.append(None)
|
|
58
|
+
except OSError:
|
|
59
|
+
return None # Uncertain identity must never reuse credentials or terminal authority.
|
|
60
|
+
else:
|
|
61
|
+
stamps.append((st.st_dev, st.st_ino, st.st_mtime_ns, st.st_ctime_ns, st.st_size, st.st_mode))
|
|
62
|
+
return tuple(stamps)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _cached_scope(home: Path, kind: str, stamp: tuple | None, inputs, build):
|
|
66
|
+
"""One snapshot of each kind per home; bindings receive copies, never the memo itself."""
|
|
67
|
+
key = str(home.absolute())
|
|
68
|
+
with _SCOPE_CACHE_LOCK:
|
|
69
|
+
scopes = _SCOPE_CACHE.pop(key, {})
|
|
70
|
+
_SCOPE_CACHE[key] = scopes
|
|
71
|
+
while len(_SCOPE_CACHE) > _SCOPE_CACHE_MAX:
|
|
72
|
+
del _SCOPE_CACHE[next(iter(_SCOPE_CACHE))]
|
|
73
|
+
cached = scopes.pop(kind, None)
|
|
74
|
+
if (
|
|
75
|
+
stamp is not None
|
|
76
|
+
and cached is not None
|
|
77
|
+
and cached[:2] == (stamp, inputs)
|
|
78
|
+
and _scope_stamp(home) == stamp
|
|
79
|
+
):
|
|
80
|
+
scopes[kind] = cached
|
|
81
|
+
return copy.deepcopy(cached[2])
|
|
82
|
+
value = build()
|
|
83
|
+
# A writer racing the build cannot lend its file identity to stale bytes.
|
|
84
|
+
if stamp is not None and _scope_stamp(home) == stamp:
|
|
85
|
+
scopes[kind] = (stamp, copy.deepcopy(inputs), copy.deepcopy(value))
|
|
86
|
+
return value
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _secret_scope_inputs(home: Path, named: bool):
|
|
90
|
+
"""File stamps alone cannot detect vault refreshes, managed policy, or launch-env edits."""
|
|
91
|
+
try:
|
|
92
|
+
from hermes_cli.env_loader import get_secret_source_values
|
|
93
|
+
from hermes_cli.managed_scope import load_managed_env
|
|
94
|
+
from gateway.config_loader import bridged_allow_all_users
|
|
95
|
+
|
|
96
|
+
launch = None
|
|
97
|
+
if not named:
|
|
98
|
+
try:
|
|
99
|
+
from tui_gateway.launch_profile_policy import _launch_env
|
|
100
|
+
except ImportError:
|
|
101
|
+
from agent.secret_scope import is_multiplex_active
|
|
102
|
+
|
|
103
|
+
launch = _frozen_launch_env() if is_multiplex_active() else dict(os.environ)
|
|
104
|
+
else:
|
|
105
|
+
launch = _launch_env()
|
|
106
|
+
return (get_secret_source_values(home), load_managed_env(), bridged_allow_all_users(), launch)
|
|
107
|
+
except Exception: # Older/partial Agents keep the original uncached builder and its policy.
|
|
108
|
+
return None
|
|
45
109
|
|
|
46
110
|
|
|
47
111
|
def _process_home() -> Path:
|
|
@@ -118,7 +182,7 @@ def _launch_secret_scope(home: Path) -> dict[str, str]:
|
|
|
118
182
|
|
|
119
183
|
|
|
120
184
|
@contextlib.contextmanager
|
|
121
|
-
def _secret_scope(home: Path):
|
|
185
|
+
def _secret_scope(home: Path, stamp: tuple | None = None, *, load_plugins: bool = True):
|
|
122
186
|
"""Install ``home``'s credential scope for the call; named profiles run under multiplex semantics."""
|
|
123
187
|
named = _is_named_profile(home)
|
|
124
188
|
try:
|
|
@@ -140,17 +204,18 @@ def _secret_scope(home: Path):
|
|
|
140
204
|
return
|
|
141
205
|
if named:
|
|
142
206
|
activate_multi_profile_hosting()
|
|
143
|
-
#
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
else
|
|
153
|
-
|
|
207
|
+
# Dashboard hosting must never load third-party code into this sidecar.
|
|
208
|
+
if load_plugins:
|
|
209
|
+
try:
|
|
210
|
+
from hermes_cli.plugins import discover_plugins
|
|
211
|
+
|
|
212
|
+
discover_plugins()
|
|
213
|
+
except Exception: # noqa: BLE001 - a broken plugin must not block the call, as in the Agent's own discovery
|
|
214
|
+
log.debug("Plugin discovery failed for %s", home, exc_info=True)
|
|
215
|
+
hydrate_profile_secret_sources(home)
|
|
216
|
+
build = lambda: build_profile_secret_scope(home) if named else launch_secret_scope(home)
|
|
217
|
+
inputs = _secret_scope_inputs(home, named)
|
|
218
|
+
secrets = build() if inputs is None else _cached_scope(home, "secrets", stamp, inputs, build)
|
|
154
219
|
scope_token = set_secret_scope(secrets)
|
|
155
220
|
try:
|
|
156
221
|
yield
|
|
@@ -159,7 +224,7 @@ def _secret_scope(home: Path):
|
|
|
159
224
|
|
|
160
225
|
|
|
161
226
|
@contextlib.contextmanager
|
|
162
|
-
def _terminal_scope(home: Path):
|
|
227
|
+
def _terminal_scope(home: Path, stamp: tuple | None = None):
|
|
163
228
|
"""Install ``home``'s terminal policy for the call; a policy file that cannot be read refuses terminal execution."""
|
|
164
229
|
named = _is_named_profile(home)
|
|
165
230
|
try:
|
|
@@ -172,9 +237,8 @@ def _terminal_scope(home: Path):
|
|
|
172
237
|
)
|
|
173
238
|
yield
|
|
174
239
|
return
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
else:
|
|
240
|
+
launch = None
|
|
241
|
+
if not named:
|
|
178
242
|
try:
|
|
179
243
|
from agent.secret_scope import is_multiplex_active
|
|
180
244
|
except ImportError: # An Agent without multiplexing cannot layer the launch env, so the launch profile keeps the process env
|
|
@@ -186,7 +250,19 @@ def _terminal_scope(home: Path):
|
|
|
186
250
|
launch_terminal_env = _launch_terminal_env
|
|
187
251
|
# Like the launch secret scope: the live process env until multiplexing freezes it.
|
|
188
252
|
launch = launch_terminal_env() if is_multiplex_active() else {k: v for k, v in os.environ.items() if k.startswith("TERMINAL_")}
|
|
189
|
-
|
|
253
|
+
try:
|
|
254
|
+
from tools.terminal_scope import build_profile_terminal_scope, set_terminal_scope, TerminalPolicyRefusal, TerminalPolicyUnavailable
|
|
255
|
+
except ImportError: # Keep the installed Agent's original behavior when its builder API is absent.
|
|
256
|
+
token = install_profile_terminal_scope(home, env_overlay=launch) if not named else install_profile_terminal_scope(home)
|
|
257
|
+
else:
|
|
258
|
+
try:
|
|
259
|
+
policy = _cached_scope(
|
|
260
|
+
home, "terminal", stamp, (launch, str(Path.home())),
|
|
261
|
+
lambda: build_profile_terminal_scope(home, env_overlay=launch),
|
|
262
|
+
)
|
|
263
|
+
except (OSError, TerminalPolicyUnavailable) as exc:
|
|
264
|
+
policy = TerminalPolicyRefusal(str(exc))
|
|
265
|
+
token = set_terminal_scope(policy)
|
|
190
266
|
try:
|
|
191
267
|
yield
|
|
192
268
|
finally:
|
|
@@ -234,9 +310,10 @@ def _recover_processes(home: Path) -> None:
|
|
|
234
310
|
|
|
235
311
|
|
|
236
312
|
@contextlib.contextmanager
|
|
237
|
-
def scoped_home(home: Path):
|
|
313
|
+
def scoped_home(home: Path, *, load_plugins: bool = True):
|
|
238
314
|
"""Run the body with Hermes Agent resolving ``get_hermes_home()`` to ``home``."""
|
|
239
315
|
home = Path(home).expanduser()
|
|
316
|
+
stamp = _scope_stamp(home)
|
|
240
317
|
try:
|
|
241
318
|
from hermes_constants import reset_hermes_home_override, set_hermes_home_override
|
|
242
319
|
except Exception: # noqa: BLE001 - older Agent without context-local homes
|
|
@@ -244,7 +321,7 @@ def scoped_home(home: Path):
|
|
|
244
321
|
if set_hermes_home_override is not None:
|
|
245
322
|
token = set_hermes_home_override(home)
|
|
246
323
|
try:
|
|
247
|
-
with _secret_scope(home), _terminal_scope(home):
|
|
324
|
+
with _secret_scope(home, stamp, load_plugins=load_plugins), _terminal_scope(home, stamp):
|
|
248
325
|
_recover_processes(home)
|
|
249
326
|
yield home
|
|
250
327
|
finally:
|
|
@@ -254,7 +331,7 @@ def scoped_home(home: Path):
|
|
|
254
331
|
previous = os.environ.get("HERMES_HOME")
|
|
255
332
|
os.environ["HERMES_HOME"] = str(home)
|
|
256
333
|
try:
|
|
257
|
-
with _secret_scope(home), _terminal_scope(home):
|
|
334
|
+
with _secret_scope(home, stamp, load_plugins=load_plugins), _terminal_scope(home, stamp):
|
|
258
335
|
_recover_processes(home)
|
|
259
336
|
yield home
|
|
260
337
|
finally:
|
|
@@ -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, checkpoints, commands, config, connectors, cron, gateway, goals, kanban, mcp, memory, oauth, process, profiles, providers, skills, state_db, stt, text, toolsets, usage, worktree, write_approval # noqa: WPS433
|
|
32
|
+
from . import aux, chat, checkpoints, commands, config, connectors, cron, dashboard_plugins, gateway, goals, kanban, mcp, memory, oauth, plugin_oauth, process, profiles, providers, skills, state_db, stt, text, toolsets, usage, worktree, write_approval # 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, checkpoints, memory, chat, config, toolsets, write_approval, connectors):
|
|
35
|
+
for module in (runtime_methods, goals, commands, kanban, state_db, profiles, skills, mcp, stt, cron, providers, oauth, plugin_oauth, aux, text, process, usage, gateway, worktree, checkpoints, memory, chat, config, toolsets, write_approval, connectors, dashboard_plugins):
|
|
36
36
|
module.register(registry)
|
|
37
37
|
return registry.methods
|
|
@@ -41,11 +41,15 @@ def resolve_main_runtime(hint: dict | None) -> dict | None:
|
|
|
41
41
|
return out
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def _main_model_completion(messages: list, runtime: dict, *, task: str) -> dict:
|
|
44
|
+
def _main_model_completion(messages: list, runtime: dict, *, task: str, ctx: CallContext) -> dict:
|
|
45
45
|
"""Predecessor fallback: run the main model through ``AIAgent`` with no tools when no auxiliary client answers.
|
|
46
46
|
|
|
47
47
|
The throwaway agent never touches long-term memory (the prompt is a raw git diff) and is always closed."""
|
|
48
|
-
from .chat import _agent_class, _supported
|
|
48
|
+
from .chat import _agent_class, _supported, _require_data_use_support
|
|
49
|
+
|
|
50
|
+
if _require_data_use_support(messages):
|
|
51
|
+
# The string-only AIAgent fallback would discard the derived prompt's routing metadata.
|
|
52
|
+
return _model_completion(task, messages, model=runtime["model"], provider=runtime.get("provider"), max_tokens=None, temperature=None, ctx=ctx)
|
|
49
53
|
|
|
50
54
|
AIAgent = _agent_class()
|
|
51
55
|
|
|
@@ -78,12 +82,15 @@ def _model_completion(task: str, messages: list, *, model: str, provider: str |
|
|
|
78
82
|
"""TAL-258 (predecessor ``_agent_text_completion``): the named model answers itself through the Agent's ``call_llm``,
|
|
79
83
|
reasoning off and no tools, so the caller sees its ``finish_reason``. ``max_tokens`` reaches the provider on the routes
|
|
80
84
|
the Agent forwards a cap on. ``credential_missing`` when the model has no credential."""
|
|
81
|
-
from .chat import _resolve_runtime
|
|
85
|
+
from .chat import _resolve_runtime, _require_data_use_support
|
|
82
86
|
|
|
83
87
|
runtime = _resolve_runtime(provider, model)
|
|
84
88
|
if not runtime.get("api_key"):
|
|
85
89
|
raise RpcError(f"no credential for model {model or 'default'!r}", condition="credential_missing")
|
|
86
90
|
resolved = model or str(runtime.get("model") or "")
|
|
91
|
+
if _require_data_use_support(messages):
|
|
92
|
+
route = _privacy_request_kwargs(messages, provider=provider or runtime.get("provider"), model=resolved, base_url=runtime.get("base_url"), api_key=runtime.get("api_key"))
|
|
93
|
+
return _stream_completion(lambda **_: _call_llm(task, ctx, **route, messages=messages, max_tokens=max_tokens, temperature=temperature, stream=True), resolved, stream=True, ctx=ctx, retry_nonstream=False)
|
|
87
94
|
response = _call_llm(
|
|
88
95
|
task, ctx, provider=provider or runtime.get("provider"), model=resolved, base_url=runtime.get("base_url"), api_key=runtime.get("api_key"),
|
|
89
96
|
api_mode=runtime.get("api_mode"), messages=messages, max_tokens=int(max_tokens) if max_tokens else None,
|
|
@@ -107,6 +114,9 @@ def complete(task: str, messages: list, *, main_runtime: dict | None, max_tokens
|
|
|
107
114
|
With ``main_fallback`` the main model answers (through ``AIAgent``) when no auxiliary client is configured or the
|
|
108
115
|
auxiliary call fails, as the predecessor's git commit-message route did. An explicit ``model`` skips the auxiliary
|
|
109
116
|
route: that model answers (``_model_completion``)."""
|
|
117
|
+
from .chat import _require_data_use_support
|
|
118
|
+
|
|
119
|
+
protected = bool(_require_data_use_support(messages))
|
|
110
120
|
if model is not None:
|
|
111
121
|
return _model_completion(task, messages, model=model, provider=provider, max_tokens=max_tokens, temperature=temperature, ctx=ctx)
|
|
112
122
|
try:
|
|
@@ -114,24 +124,32 @@ def complete(task: str, messages: list, *, main_runtime: dict | None, max_tokens
|
|
|
114
124
|
except Exception as exc: # noqa: BLE001
|
|
115
125
|
raise RpcError(f"auxiliary client unavailable: {exc}", condition="aux_unavailable") from exc
|
|
116
126
|
main_runtime = resolve_main_runtime(main_runtime)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
127
|
+
selected_provider = None
|
|
128
|
+
if protected:
|
|
129
|
+
# Snapshot the selected provider with its client; get_text_auxiliary_client's tuple omits the provider.
|
|
130
|
+
from agent.auxiliary_client import _resolve_task_provider_model, resolve_provider_client
|
|
131
|
+
|
|
132
|
+
selected_provider, selected_model, base_url, api_key, api_mode = _resolve_task_provider_model(task)
|
|
133
|
+
client, model = resolve_provider_client(selected_provider, model=selected_model, explicit_base_url=base_url, explicit_api_key=api_key, api_mode=api_mode, main_runtime=main_runtime)
|
|
134
|
+
else:
|
|
135
|
+
try:
|
|
136
|
+
client, model = get_text_auxiliary_client(task, main_runtime=main_runtime)
|
|
137
|
+
except TypeError:
|
|
138
|
+
client, model = get_text_auxiliary_client(task)
|
|
121
139
|
if client is None or not model:
|
|
122
140
|
if main_fallback and main_runtime and main_runtime.get("model"):
|
|
123
|
-
return _main_model_completion(messages, main_runtime, task=task)
|
|
141
|
+
return _main_model_completion(messages, main_runtime, task=task, ctx=ctx)
|
|
124
142
|
raise RpcError(f"no auxiliary model configured for task {task!r}", condition="aux_unconfigured")
|
|
125
|
-
create, stream = _aux_request(task, client, model, messages, main_runtime=main_runtime, max_tokens=max_tokens, temperature=temperature, ctx=ctx)
|
|
143
|
+
create, stream = _aux_request(task, client, model, messages, main_runtime=main_runtime, max_tokens=max_tokens, temperature=temperature, ctx=ctx, selected_provider=selected_provider)
|
|
126
144
|
if main_fallback and main_runtime and main_runtime.get("model"):
|
|
127
145
|
try:
|
|
128
|
-
return _stream_completion(create, model, stream=stream, ctx=ctx)
|
|
146
|
+
return _stream_completion(create, model, stream=stream, ctx=ctx, retry_nonstream=not protected)
|
|
129
147
|
except RpcError:
|
|
130
148
|
raise
|
|
131
149
|
except Exception as exc: # noqa: BLE001 - predecessor fell back to the main model
|
|
132
150
|
log.debug("auxiliary %s call failed; falling back to the main model: %s", task, exc)
|
|
133
|
-
return _main_model_completion(messages, main_runtime, task=task)
|
|
134
|
-
return _stream_completion(create, model, stream=stream, ctx=ctx)
|
|
151
|
+
return _main_model_completion(messages, main_runtime, task=task, ctx=ctx)
|
|
152
|
+
return _stream_completion(create, model, stream=stream, ctx=ctx, retry_nonstream=not protected)
|
|
135
153
|
|
|
136
154
|
|
|
137
155
|
def _permit_limited(task: str) -> bool:
|
|
@@ -180,7 +198,25 @@ def _call_llm_streams() -> bool:
|
|
|
180
198
|
return {"stream", "main_runtime"} <= inspect.signature(call_llm).parameters.keys()
|
|
181
199
|
|
|
182
200
|
|
|
183
|
-
def
|
|
201
|
+
def _privacy_request_kwargs(messages: list, *, provider, model, base_url, api_key) -> dict:
|
|
202
|
+
"""Pin a verifiable Agent-owned privacy route; streamed call_llm never takes its implicit provider fallback ladder."""
|
|
203
|
+
from .chat import _require_data_use_support
|
|
204
|
+
from providers import get_provider_profile
|
|
205
|
+
|
|
206
|
+
requires = _require_data_use_support(messages)
|
|
207
|
+
try:
|
|
208
|
+
profile = get_provider_profile(str(provider or ""))
|
|
209
|
+
body = profile.build_extra_body(model=model, base_url=base_url, data_use=requires) if profile else {}
|
|
210
|
+
policy = body.get("provider", {})
|
|
211
|
+
safe = not requires.difference({"no_training", "zero_retention"}) and policy.get("data_collection") == "deny" and ("zero_retention" not in requires or policy.get("zdr") is True)
|
|
212
|
+
except Exception as exc: # noqa: BLE001 - unknown policy fails before any provider dispatch
|
|
213
|
+
raise RpcError("Cannot verify the auxiliary provider's connector privacy policy.", condition="data_policy_denied") from exc
|
|
214
|
+
if not safe or not provider or not base_url or not api_key or not _call_llm_streams():
|
|
215
|
+
raise RpcError("The auxiliary provider cannot enforce connector privacy requirements.", condition="data_policy_denied")
|
|
216
|
+
return {"provider": provider, "model": model, "base_url": str(base_url), "api_key": api_key, "extra_body": {"provider": policy}}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def _aux_request(task: str, client, model: str, messages: list, *, main_runtime: dict | None, max_tokens: int | None, temperature: float | None, ctx: CallContext, selected_provider: str | None = None):
|
|
184
220
|
"""``(create(**stream), stream)`` for one auxiliary request. TAL-823: through the Agent's ``call_llm`` funnel (plugin
|
|
185
221
|
hooks, a custom provider's ``extra_body``, watchdogs, response unwrap, fallbacks) when it streams; else the raw
|
|
186
222
|
client. ``stream`` is False for a permit-limited task (its call must stay cancellable, see ``_call_llm``) and for
|
|
@@ -190,13 +226,18 @@ def _aux_request(task: str, client, model: str, messages: list, *, main_runtime:
|
|
|
190
226
|
kwargs["max_tokens"] = int(max_tokens)
|
|
191
227
|
if temperature is not None:
|
|
192
228
|
kwargs["temperature"] = float(temperature)
|
|
229
|
+
from .chat import _require_data_use_support
|
|
230
|
+
|
|
231
|
+
if _require_data_use_support(messages):
|
|
232
|
+
route = _privacy_request_kwargs(messages, provider=getattr(client, "_hermes_aux_effective_provider", None) or selected_provider, model=model, base_url=getattr(client, "base_url", None), api_key=getattr(client, "api_key", None))
|
|
233
|
+
return (lambda **_: _call_llm(task, ctx, **route, **kwargs, stream=True)), True
|
|
193
234
|
stream = hasattr(client.chat.completions, "with_streaming_response")
|
|
194
235
|
if _call_llm_streams():
|
|
195
236
|
return (lambda **stream: _call_llm(task, ctx, main_runtime=main_runtime, **kwargs, **stream)), stream and not _permit_limited(task)
|
|
196
237
|
return (lambda **stream: client.chat.completions.create(model=model, **kwargs, **stream)), stream
|
|
197
238
|
|
|
198
239
|
|
|
199
|
-
def _stream_completion(create, model: str, *, stream: bool, ctx: CallContext) -> dict:
|
|
240
|
+
def _stream_completion(create, model: str, *, stream: bool, ctx: CallContext, retry_nonstream: bool = True) -> dict:
|
|
200
241
|
if not stream:
|
|
201
242
|
return _response_result(model, create())
|
|
202
243
|
text_parts: list[str] = []
|
|
@@ -229,6 +270,8 @@ def _stream_completion(create, model: str, *, stream: bool, ctx: CallContext) ->
|
|
|
229
270
|
except RpcError:
|
|
230
271
|
raise
|
|
231
272
|
except Exception as exc: # noqa: BLE001 - fall back to a non-streaming call
|
|
273
|
+
if not retry_nonstream:
|
|
274
|
+
raise
|
|
232
275
|
log.debug("streaming auxiliary call failed (%s); retrying without stream", exc)
|
|
233
276
|
return _response_result(model, create())
|
|
234
277
|
return {"model": str(model), "text": "".join(text_parts).strip(), "usage": usage, "finish_reason": finish_reason}
|
|
@@ -251,16 +294,31 @@ def _effort_word(task_cfg: dict) -> str:
|
|
|
251
294
|
return "none" if raw is False else str(raw or "").strip().lower()
|
|
252
295
|
|
|
253
296
|
|
|
297
|
+
def _delegation_row() -> dict | None:
|
|
298
|
+
"""TAL-1273: the picker's subagent (``delegate_task``) row, listed after the auxiliary slots. Its route is the
|
|
299
|
+
top-level ``delegation`` section, not ``auxiliary.delegation``; None on an Agent whose picker has no such row."""
|
|
300
|
+
try:
|
|
301
|
+
from hermes_cli.main_provider_setup import _DELEGATION_TASK_DESC, _DELEGATION_TASK_KEY, _DELEGATION_TASK_NAME, _delegation_cfg_as_task
|
|
302
|
+
except ImportError:
|
|
303
|
+
return None
|
|
304
|
+
from hermes_cli.config import load_config
|
|
305
|
+
|
|
306
|
+
return {"key": _DELEGATION_TASK_KEY, "label": _DELEGATION_TASK_NAME, "description": _DELEGATION_TASK_DESC, "inherit_from": None,
|
|
307
|
+
"reasoning_effort": _effort_word(_delegation_cfg_as_task(load_config())), "effective": None}
|
|
308
|
+
|
|
309
|
+
|
|
254
310
|
def aux_tasks() -> dict:
|
|
255
|
-
"""TAL-800: the home's auxiliary slots in Agent order, the ``hermes model`` picker's built-ins
|
|
256
|
-
tasks, each with its resolved reasoning effort and, for a task that
|
|
311
|
+
"""TAL-800: the home's auxiliary slots in Agent order, the ``hermes model`` picker's built-ins, the home's plugin
|
|
312
|
+
tasks, then the picker's delegation row (TAL-1273), each with its resolved reasoning effort and, for a task that
|
|
313
|
+
inherits another slot, its effective route.
|
|
257
314
|
``reserved`` names the Agent's other ``auxiliary.*`` keys (settings and unlisted routes), which are never slots."""
|
|
258
315
|
from agent.auxiliary_client import _get_auxiliary_task_config
|
|
259
316
|
from hermes_cli.config import DEFAULT_CONFIG
|
|
260
317
|
from hermes_cli.main_provider_setup import _AUX_TASKS
|
|
261
318
|
|
|
262
319
|
rows = [{"key": key, "label": label, "description": description, "inherit_from": None} for key, label, description in _AUX_TASKS]
|
|
263
|
-
|
|
320
|
+
delegation = _delegation_row()
|
|
321
|
+
builtin = {row["key"] for row in rows} | ({delegation["key"]} if delegation else set())
|
|
264
322
|
try:
|
|
265
323
|
from hermes_cli.plugins import get_plugin_auxiliary_tasks
|
|
266
324
|
|
|
@@ -274,6 +332,8 @@ def aux_tasks() -> dict:
|
|
|
274
332
|
resolved = _get_auxiliary_task_config(row["key"])
|
|
275
333
|
row["reasoning_effort"] = _effort_word(resolved)
|
|
276
334
|
row["effective"] = {field: str(resolved.get(field) or "") for field in ("provider", "model", "base_url")} if row["inherit_from"] else None
|
|
335
|
+
if delegation:
|
|
336
|
+
rows.append(delegation)
|
|
277
337
|
listed = {row["key"] for row in rows}
|
|
278
338
|
return {"tasks": rows, "reserved": sorted(key for key in (DEFAULT_CONFIG.get("auxiliary") or {}) if key not in listed)}
|
|
279
339
|
|
|
@@ -288,7 +348,9 @@ def register(registry) -> None:
|
|
|
288
348
|
if not isinstance(messages, list) or not messages:
|
|
289
349
|
raise InvalidParams("messages must be a non-empty list")
|
|
290
350
|
main_runtime = params.get("main_runtime") if isinstance(params.get("main_runtime"), dict) else None
|
|
291
|
-
|
|
351
|
+
from .chat import agent_scope
|
|
352
|
+
|
|
353
|
+
with agent_scope(profile_home_param(params)):
|
|
292
354
|
model = params.get("model")
|
|
293
355
|
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")),
|
|
294
356
|
model=str(model).strip() if isinstance(model, str) else None, provider=str(params.get("provider") or "").strip() or None)
|