@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Authenticated observations
|
|
1
|
+
"""Authenticated observations, fenced controls and diagnostic creation through an existing native owner.
|
|
2
2
|
|
|
3
3
|
Never ensure/start a gateway, build an Agent, or write its transcript locally.
|
|
4
4
|
Each call owns its connection and subscription; cancellation only detaches it.
|
|
@@ -7,20 +7,46 @@ from __future__ import annotations
|
|
|
7
7
|
|
|
8
8
|
import asyncio
|
|
9
9
|
from contextlib import asynccontextmanager, closing, suppress
|
|
10
|
+
from importlib.util import find_spec
|
|
10
11
|
import json
|
|
11
12
|
from pathlib import Path
|
|
13
|
+
import re
|
|
12
14
|
import sqlite3
|
|
13
15
|
|
|
14
16
|
from ..errors import InvalidParams
|
|
15
17
|
from ..home import profile_home_param, scoped_home
|
|
16
18
|
|
|
17
|
-
_ACTIONS = {"snapshot", "watch", "submit", "receipt", "cancel", "
|
|
19
|
+
_ACTIONS = {"snapshot", "watch", "context_detail", "submit", "receipt", "cancel", "steer_queued", "replace_queued", "interrupt", "approval", "clarify",
|
|
20
|
+
"clarify_lock", "discard", "mutate", "export"}
|
|
21
|
+
_EXPORT_MAX_BYTES = 4 * 1024 * 1024
|
|
22
|
+
# A restart's after-turn wait keeps the owner reachable only to finish its parked turn (the owner's
|
|
23
|
+
# RESTART_WAIT_WS_METHODS); new work waits for the next owner.
|
|
24
|
+
_RESTART_ACTIONS = {"snapshot", "watch", "receipt", "approval", "clarify", "clarify_lock", "interrupt"}
|
|
18
25
|
_CAPABILITIES = {"durable-admission-v1", "event-replay-v1"}
|
|
19
26
|
_CONTROL_REFUSALS = {"native_clarify_batch_unavailable", "owner_controls_unverified"}
|
|
27
|
+
_CREATE_FIELDS = {"request_id", "source", "cwd", "model", "provider", "base_url", "toolsets", "safe_mode", "ignore_user_config"}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _batch_locks() -> bool:
|
|
31
|
+
"""v0.22.3 owners serve ``clarify.lock``, so an attached viewer can answer a clarify batch per question."""
|
|
32
|
+
return find_spec("gateway.session_clarify_lock") is not None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _restart_wait(home: Path) -> bool:
|
|
36
|
+
"""Whether the owner has entered a restart's after-turn wait since a watch attached. The owner announces
|
|
37
|
+
it on no socket, and the watch must not send on its own: a socket opened before the wait is cut when it does."""
|
|
38
|
+
from hermes_cli import gateway_runtime
|
|
39
|
+
if not hasattr(gateway_runtime, "attachable"):
|
|
40
|
+
return False
|
|
41
|
+
try:
|
|
42
|
+
found = gateway_runtime.discover_gateway_endpoint(home)
|
|
43
|
+
except Exception: # noqa: BLE001 - a failed probe leaves the watch as it was; every action rediscovers anyway
|
|
44
|
+
return False
|
|
45
|
+
return found.state != "ready" and gateway_runtime.attachable(found)
|
|
20
46
|
|
|
21
47
|
|
|
22
48
|
def _control_refusal(home: Path, sid: str) -> str | None:
|
|
23
|
-
"""Only canonical PendingControls can be recovered
|
|
49
|
+
"""Only canonical PendingControls can be recovered before v0.22.3. Never infer a missing batch.
|
|
24
50
|
|
|
25
51
|
Read the owner's committed admission in a read-only connection; opening SessionDB here
|
|
26
52
|
would run its schema writer alongside the owner. Compression keeps the logical target.
|
|
@@ -36,7 +62,7 @@ def _control_refusal(home: Path, sid: str) -> str | None:
|
|
|
36
62
|
return "owner_controls_unverified"
|
|
37
63
|
if "clarify_batch" in policy and not isinstance(policy["clarify_batch"], bool):
|
|
38
64
|
return "owner_controls_unverified"
|
|
39
|
-
if policy.get("clarify_batch") is True:
|
|
65
|
+
if policy.get("clarify_batch") is True and not _batch_locks():
|
|
40
66
|
return "native_clarify_batch_unavailable"
|
|
41
67
|
except (sqlite3.Error, OSError, ValueError, TypeError, AttributeError):
|
|
42
68
|
return "owner_controls_unverified"
|
|
@@ -48,7 +74,7 @@ def _snapshot(value: dict) -> dict:
|
|
|
48
74
|
# display rows, not those bindings or the inventory's system prompt and credential hint.
|
|
49
75
|
message_keys = {"role", "content", "tool_calls", "tool_call_id", "name", "timestamp", "message_id", "row_id",
|
|
50
76
|
"reasoning", "reasoning_content", "display_kind", "finish_reason"}
|
|
51
|
-
info_keys = {"title", "model", "cwd", "source", "provider"}
|
|
77
|
+
info_keys = {"title", "model", "cwd", "source", "provider", "config_warning"}
|
|
52
78
|
return {**value, "messages": [{k: v for k, v in row.items() if k in message_keys} for row in value["messages"]],
|
|
53
79
|
"info": {k: v for k, v in value["info"].items() if k in info_keys}}
|
|
54
80
|
|
|
@@ -89,23 +115,50 @@ async def _connect(home: Path, endpoint):
|
|
|
89
115
|
await reader
|
|
90
116
|
|
|
91
117
|
|
|
118
|
+
def _served(home: Path, endpoint, *, allow_verified: bool = False) -> bool:
|
|
119
|
+
if not endpoint.control_home or Path(endpoint.control_home).resolve() == home:
|
|
120
|
+
return False
|
|
121
|
+
if not allow_verified:
|
|
122
|
+
return True
|
|
123
|
+
# The private control socket reports the owner's boot revision, not the sidecar's
|
|
124
|
+
# checkout or a version label. The authenticated describe must still match below.
|
|
125
|
+
try:
|
|
126
|
+
record = json.loads((Path(__file__).resolve().parents[2] / "agent_support.json").read_text())
|
|
127
|
+
revisions = record["nativeContracts"]["served-local-policy-v1"]
|
|
128
|
+
return (not isinstance(revisions, list)
|
|
129
|
+
or not all(isinstance(sha, str) and re.fullmatch(r"[0-9a-f]{40}", sha) for sha in revisions)
|
|
130
|
+
or getattr(endpoint, "code_sha", None) not in revisions)
|
|
131
|
+
except (OSError, ValueError, KeyError, TypeError):
|
|
132
|
+
return True
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _owner_refusal(described: dict, endpoint) -> dict | None:
|
|
136
|
+
if (not isinstance(described, dict)
|
|
137
|
+
or described.get("instance_id") != endpoint.instance_id
|
|
138
|
+
or described.get("profile_id") != endpoint.profile_id
|
|
139
|
+
or type(described.get("authority_epoch")) is not int
|
|
140
|
+
or described.get("authority_epoch") != endpoint.authority_epoch
|
|
141
|
+
or not isinstance(described.get("capabilities"), list)
|
|
142
|
+
or not all(isinstance(capability, str) for capability in described["capabilities"])
|
|
143
|
+
or not _CAPABILITIES.issubset(described.get("capabilities", []))):
|
|
144
|
+
return _refused("incompatible", "owner_capabilities")
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
|
|
92
148
|
async def _run(ctx, params: dict, home: Path, discovery) -> dict:
|
|
93
149
|
from hermes_cli.gateway_client import GatewayRPCError
|
|
94
150
|
|
|
95
151
|
endpoint = discovery.endpoint
|
|
96
|
-
|
|
97
|
-
# transport identity. A dedicated owner's profile is isolated; a served profile
|
|
98
|
-
# needs a verified execution contract before Talaria may submit through it.
|
|
99
|
-
if endpoint.control_home and Path(endpoint.control_home).resolve() != home:
|
|
152
|
+
if _served(home, endpoint, allow_verified=True):
|
|
100
153
|
return _refused("incompatible", "served_profile_sessions_unavailable")
|
|
154
|
+
restarting = discovery.state != "ready"
|
|
155
|
+
if restarting and params["action"] not in _RESTART_ACTIONS:
|
|
156
|
+
return _refused("refused", "gateway_restarting")
|
|
101
157
|
subscription = None
|
|
102
158
|
async with _connect(home, endpoint) as (client, events):
|
|
103
159
|
described = await client.rpc("runtime.describe")
|
|
104
|
-
if (described
|
|
105
|
-
|
|
106
|
-
or described.get("authority_epoch") != endpoint.authority_epoch
|
|
107
|
-
or not _CAPABILITIES.issubset(described.get("capabilities", []))):
|
|
108
|
-
return _refused("incompatible", "owner_capabilities")
|
|
160
|
+
if refusal := _owner_refusal(described, endpoint):
|
|
161
|
+
return refusal
|
|
109
162
|
sid = params["session_id"]
|
|
110
163
|
|
|
111
164
|
async def snapshot():
|
|
@@ -119,11 +172,39 @@ async def _run(ctx, params: dict, home: Path, discovery) -> dict:
|
|
|
119
172
|
raise GatewayRPCError(reason)
|
|
120
173
|
return _snapshot(value)
|
|
121
174
|
|
|
122
|
-
receipt = None
|
|
175
|
+
receipt = lock = None
|
|
123
176
|
try:
|
|
177
|
+
if params["action"] == "export":
|
|
178
|
+
# No resume/subscription or mutation: the owner selects its current physical target.
|
|
179
|
+
fmt = "md" if params["format"] == "markdown" else params["format"]
|
|
180
|
+
value = await asyncio.wait_for(client.rpc("session.export", session_id=sid,
|
|
181
|
+
format=fmt, redact=params["redact"], _timeout=25), timeout=30)
|
|
182
|
+
if (not isinstance(value, dict) or value.get("format") != fmt
|
|
183
|
+
or not isinstance(value.get("filename"), str) or not 0 < len(value["filename"]) <= 255
|
|
184
|
+
or not isinstance(value.get("content"), str)):
|
|
185
|
+
return _refused("refused", "owner_export_invalid")
|
|
186
|
+
if len(value["content"]) > _EXPORT_MAX_BYTES or len(value["content"].encode("utf-8")) > _EXPORT_MAX_BYTES:
|
|
187
|
+
return _refused("refused", "export_too_large")
|
|
188
|
+
return {"state": "attached", "reason": None, "snapshot": None, "receipt": None,
|
|
189
|
+
"export": {"format": params["format"], "filename": value["filename"], "content": value["content"]}}
|
|
124
190
|
snap = await snapshot()
|
|
125
191
|
action = params["action"]
|
|
126
192
|
common = {"session_id": sid}
|
|
193
|
+
if action == "context_detail":
|
|
194
|
+
from ..context_detail import project, unavailable
|
|
195
|
+
# The authorized native read owns lookup and prompt interpretation. No local Agent is built.
|
|
196
|
+
try:
|
|
197
|
+
payload = await client.rpc("session.context_breakdown", **common)
|
|
198
|
+
usage = None
|
|
199
|
+
with suppress(Exception):
|
|
200
|
+
usage = await client.rpc("session.stats", **common)
|
|
201
|
+
after = await snapshot()
|
|
202
|
+
marks = ("session_id", "stored_session_id", "authority_epoch", "replay_epoch", "revision", "execution_generation", "running", "last_sequence")
|
|
203
|
+
stable = all(snap.get(k) == after.get(k) for k in marks) and snap.get("info") == after.get("info")
|
|
204
|
+
detail = project(payload, usage=usage, running=after.get("running") is True) if stable else unavailable("changed")
|
|
205
|
+
except Exception: # unsupported owners and failed reads never authorize a fallback Agent
|
|
206
|
+
detail = unavailable("unsupported")
|
|
207
|
+
return {"state": "attached", "reason": None, "snapshot": snap, "receipt": None, "context_detail": detail}
|
|
127
208
|
if action == "submit":
|
|
128
209
|
# The caller retains this identity across lost ACKs. An ambiguous error never
|
|
129
210
|
# causes this adapter to generate a replacement or replay started work.
|
|
@@ -134,45 +215,78 @@ async def _run(ctx, params: dict, home: Path, discovery) -> dict:
|
|
|
134
215
|
method = "prompt.cancel" if action == "cancel" else "prompt.resolve_unknown"
|
|
135
216
|
receipt = await client.rpc(method, **common, admission_id=params["admission_id"],
|
|
136
217
|
**({"execution_generation": params["execution_generation"]} if action == "discard" else {}))
|
|
218
|
+
elif action in {"steer_queued", "replace_queued"}:
|
|
219
|
+
receipt = await client.rpc("prompt." + action, **common, admission_id=params["admission_id"],
|
|
220
|
+
**({"submission_id": params["submission_id"], "text": params["text"]} if action == "replace_queued" else {}))
|
|
137
221
|
elif action == "interrupt":
|
|
138
222
|
await client.rpc("session.interrupt", **common, execution_generation=params["execution_generation"])
|
|
223
|
+
elif action == "clarify_lock":
|
|
224
|
+
# The lock that answers the last question settles the batch with every locked answer.
|
|
225
|
+
lock = await client.rpc("clarify.lock", request_id=params["request_id"],
|
|
226
|
+
question_id=params["question_id"], answer=params["answer"])
|
|
139
227
|
elif action in {"approval", "clarify"}:
|
|
140
228
|
await client.rpc(action + ".respond", **common, prompt_id=params["prompt_id"],
|
|
141
229
|
execution_generation=params["execution_generation"],
|
|
142
230
|
**({"choice": params["choice"]} if action == "approval" else {"answer": params["text"]}))
|
|
143
231
|
elif action == "mutate":
|
|
144
|
-
await client.rpc("session.mutate", **common, request_id=params["request_id"],
|
|
232
|
+
receipt = await client.rpc("session.mutate", **common, request_id=params["request_id"],
|
|
145
233
|
expected_revision=params["expected_revision"], expected_generation=params["execution_generation"],
|
|
146
234
|
operation=params["operation"], payload=params["payload"], _timeout=660)
|
|
147
235
|
if action not in {"snapshot", "watch"}:
|
|
148
236
|
snap = await snapshot()
|
|
149
|
-
result = {"state": "attached", "reason": None, "snapshot": snap, "receipt": receipt
|
|
237
|
+
result = {"state": "attached", "reason": None, "snapshot": snap, "receipt": receipt, "restarting": restarting,
|
|
238
|
+
**({"lock": lock} if action == "clarify_lock" else {})}
|
|
150
239
|
if action != "watch":
|
|
151
240
|
return result
|
|
152
|
-
|
|
241
|
+
# Display negotiation is best effort on older owners. It changes no persisted config.
|
|
242
|
+
if isinstance(params.get("show_reasoning"), bool):
|
|
243
|
+
with suppress(GatewayRPCError, TimeoutError):
|
|
244
|
+
await client.rpc("config.set", **common, key="show_reasoning",
|
|
245
|
+
value="1" if params["show_reasoning"] else "0", _timeout=10)
|
|
246
|
+
ctx.emit("snapshot", {**result, "replaying": True})
|
|
153
247
|
epoch, sequence = snap["replay_epoch"], snap["last_sequence"]
|
|
154
248
|
# Rebuild the active turn's display from retained events, even when its initial
|
|
155
249
|
# tokens predate this viewer. A gap replaces the subscription, never invents replay.
|
|
156
250
|
replay = await client.rpc("session.events.since", **common, replay_epoch=epoch, last_sequence=0)
|
|
157
251
|
if replay.get("snapshot_required"):
|
|
158
252
|
snap = await snapshot()
|
|
159
|
-
ctx.emit("snapshot", {**result, "snapshot": snap, "replay_gap": True})
|
|
253
|
+
ctx.emit("snapshot", {**result, "snapshot": snap, "replay_gap": True, "replaying": True})
|
|
160
254
|
epoch, sequence = snap["replay_epoch"], snap["last_sequence"]
|
|
161
255
|
else:
|
|
162
256
|
for event in replay["events"]:
|
|
163
|
-
if
|
|
257
|
+
if event.get("session_id") != sid or event.get("replay_epoch") != epoch:
|
|
258
|
+
continue
|
|
259
|
+
if (event.get("type") in {"session.updated", "notification.show", "notification.clear"}
|
|
260
|
+
or event.get("execution_generation") == snap["execution_generation"]
|
|
164
261
|
or event.get("type") == "session.info" and event.get("payload", {}).get("execution_generation") == snap["execution_generation"]):
|
|
165
262
|
ctx.emit("event", event)
|
|
166
263
|
sequence = replay["last_sequence"]
|
|
264
|
+
ctx.emit("replay_complete", {})
|
|
265
|
+
checked = asyncio.get_running_loop().time()
|
|
167
266
|
while not ctx.cancelled:
|
|
168
267
|
try:
|
|
169
268
|
frame = await asyncio.wait_for(events.get(), .25)
|
|
170
269
|
except TimeoutError:
|
|
270
|
+
now = asyncio.get_running_loop().time()
|
|
271
|
+
if not restarting and now - checked >= 2:
|
|
272
|
+
checked = now
|
|
273
|
+
# One-way for this owner: its next state is exit, which ends the watch.
|
|
274
|
+
if restarting := await asyncio.to_thread(_restart_wait, home):
|
|
275
|
+
result["restarting"] = True
|
|
276
|
+
ctx.emit("restarting", {"restarting": True})
|
|
171
277
|
continue
|
|
172
278
|
if isinstance(frame, Exception):
|
|
173
279
|
raise frame
|
|
174
280
|
if frame.get("method") == "clarify" and "id" in frame:
|
|
175
|
-
|
|
281
|
+
if not _batch_locks():
|
|
282
|
+
raise GatewayRPCError("native_clarify_batch_unavailable")
|
|
283
|
+
# The owner asks attached viewers only, once; its later request.cancel event settles it.
|
|
284
|
+
request = frame.get("params", {})
|
|
285
|
+
if request.get("session_id") == sid:
|
|
286
|
+
ctx.emit("clarify_batch", {"request_id": frame["id"], "questions": request.get("questions", [])})
|
|
287
|
+
continue
|
|
288
|
+
if frame.get("method") != "event":
|
|
289
|
+
continue
|
|
176
290
|
event = frame.get("params", {})
|
|
177
291
|
if event.get("session_id") != sid:
|
|
178
292
|
continue
|
|
@@ -181,7 +295,12 @@ async def _run(ctx, params: dict, home: Path, discovery) -> dict:
|
|
|
181
295
|
raise GatewayRPCError(reason)
|
|
182
296
|
if (event.get("type") == "session.replay_gap" or event.get("replay_epoch") != epoch
|
|
183
297
|
or event.get("seq", sequence + 1) > sequence + 1):
|
|
184
|
-
|
|
298
|
+
current = await snapshot()
|
|
299
|
+
# A queued frame from an obsolete epoch is not a gap in the current subscription.
|
|
300
|
+
if (event.get("type") != "session.replay_gap" and event.get("replay_epoch") != epoch
|
|
301
|
+
and current["replay_epoch"] == epoch):
|
|
302
|
+
continue
|
|
303
|
+
snap = current
|
|
185
304
|
ctx.emit("snapshot", {**result, "snapshot": snap, "replay_gap": True})
|
|
186
305
|
epoch, sequence = snap["replay_epoch"], snap["last_sequence"]
|
|
187
306
|
continue
|
|
@@ -191,6 +310,8 @@ async def _run(ctx, params: dict, home: Path, discovery) -> dict:
|
|
|
191
310
|
ctx.emit("event", event)
|
|
192
311
|
return result
|
|
193
312
|
except GatewayRPCError as exc:
|
|
313
|
+
if params["action"] == "export":
|
|
314
|
+
return _refused("refused", "export_too_large" if str(exc) == "export_too_large" else "owner_export_unsupported")
|
|
194
315
|
return {**_refused("incompatible" if str(exc) in _CONTROL_REFUSALS else "refused", str(exc)), "receipt": receipt}
|
|
195
316
|
except Exception: # noqa: BLE001 - native transport/contract failures never authorize another writer
|
|
196
317
|
# A received receipt remains admission proof even if the following observation
|
|
@@ -209,26 +330,89 @@ def session(ctx, params: dict) -> dict:
|
|
|
209
330
|
if action not in _ACTIONS or not isinstance(sid, str) or not sid.strip() or sid != sid.strip():
|
|
210
331
|
raise InvalidParams("session_id and supported action are required")
|
|
211
332
|
params = {**params, "action": action}
|
|
333
|
+
if action == "export" and (params.get("format") not in ("json", "markdown", "html")
|
|
334
|
+
or not isinstance(params.get("redact"), bool)):
|
|
335
|
+
raise InvalidParams("export requires an allowed format and redaction policy")
|
|
212
336
|
required = {
|
|
213
337
|
"submit": ("request_id", "text"), "receipt": ("admission_id",), "cancel": ("admission_id",),
|
|
338
|
+
"steer_queued": ("admission_id",), "replace_queued": ("admission_id", "submission_id", "text"),
|
|
214
339
|
"interrupt": ("execution_generation",), "approval": ("execution_generation", "prompt_id", "choice"),
|
|
215
|
-
"clarify": ("execution_generation", "prompt_id", "text"), "discard": ("execution_generation", "admission_id"),
|
|
340
|
+
"clarify": ("execution_generation", "prompt_id", "text"), "clarify_lock": ("request_id", "question_id", "answer"), "discard": ("execution_generation", "admission_id"),
|
|
216
341
|
"mutate": ("request_id", "expected_revision", "execution_generation", "operation", "payload"),
|
|
217
342
|
}.get(action, ())
|
|
218
343
|
if any(key not in params for key in required):
|
|
219
344
|
raise InvalidParams("missing gateway session action fields")
|
|
345
|
+
return _with_owner(home, lambda discovery: _run(ctx, params, home, discovery))
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def _with_owner(home: Path, run) -> dict:
|
|
220
349
|
try:
|
|
221
350
|
from hermes_constants import set_hermes_home_override, reset_hermes_home_override # noqa: F401
|
|
222
|
-
from hermes_cli
|
|
351
|
+
from hermes_cli import gateway_runtime
|
|
223
352
|
from hermes_cli.gateway_client import connect_gateway # noqa: F401
|
|
224
353
|
except ImportError:
|
|
225
354
|
return _refused("incompatible", "native_sessions_unavailable")
|
|
355
|
+
# v0.22.3 also admits a restart's after-turn wait, so a parked approval or clarify can still be answered.
|
|
356
|
+
attachable = getattr(gateway_runtime, "attachable", lambda found: found.state == "ready")
|
|
226
357
|
with scoped_home(home):
|
|
227
|
-
discovery = discover_gateway_endpoint(home)
|
|
228
|
-
if discovery.
|
|
358
|
+
discovery = gateway_runtime.discover_gateway_endpoint(home)
|
|
359
|
+
if discovery.endpoint is None or not attachable(discovery):
|
|
229
360
|
return _refused("stopped" if discovery.state in {"stopped", "absent"} else "unavailable", discovery.reason_code or discovery.state)
|
|
230
361
|
try:
|
|
231
|
-
return asyncio.run(
|
|
362
|
+
return asyncio.run(run(discovery))
|
|
232
363
|
except Exception: # noqa: BLE001 - native transport/contract failures never authorize another writer
|
|
233
364
|
# Do not expose peer diagnostics, endpoint paths or bootstrap credentials.
|
|
234
365
|
return _refused("unavailable", "owner_connection_lost")
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
async def _create(params: dict, home: Path, discovery) -> dict:
|
|
369
|
+
"""Mint one diagnostic session through the owner, which freezes the bypass in its creation
|
|
370
|
+
policy and runs every turn in a fresh private worker. Talaria never imports the Agent with
|
|
371
|
+
that policy, flips a process global or passes it through the environment."""
|
|
372
|
+
from hermes_cli.gateway_client import GatewayRPCError
|
|
373
|
+
|
|
374
|
+
endpoint = discovery.endpoint
|
|
375
|
+
if _served(home, endpoint):
|
|
376
|
+
return _refused("incompatible", "served_profile_sessions_unavailable")
|
|
377
|
+
if discovery.state != "ready":
|
|
378
|
+
return _refused("unavailable", "gateway_restarting")
|
|
379
|
+
async with _connect(home, endpoint) as (client, _):
|
|
380
|
+
described = await client.rpc("runtime.describe")
|
|
381
|
+
if refusal := _owner_refusal(described, endpoint):
|
|
382
|
+
return refusal
|
|
383
|
+
accepted = set((described.get("session_create") or {}).get("parameters", []))
|
|
384
|
+
if "local-cli-create-v1" not in described.get("capabilities", []) or not _CREATE_FIELDS.issubset(accepted):
|
|
385
|
+
return _refused("incompatible", "execution_mode_unavailable")
|
|
386
|
+
if params.get("probe") is True:
|
|
387
|
+
return {"state": "attached", "reason": None, "snapshot": None, "receipt": None}
|
|
388
|
+
fields = {key: params[key] for key in ("cwd", "model", "provider", "base_url", "toolsets") if params.get(key) is not None}
|
|
389
|
+
try:
|
|
390
|
+
# Safe implies config-only; the owner normalizes it too. No credential is sent or receipted.
|
|
391
|
+
created = await client.rpc("session.create", request_id=params["request_id"], source="cli", **fields,
|
|
392
|
+
safe_mode=params["execution_mode"] == "safe", ignore_user_config=True)
|
|
393
|
+
except GatewayRPCError as exc:
|
|
394
|
+
return _refused("refused", str(exc))
|
|
395
|
+
with suppress(Exception):
|
|
396
|
+
await client.rpc("session.detach", session_id=created["session_id"], subscription_id=created["subscription_id"])
|
|
397
|
+
return {"state": "attached", "reason": None, "snapshot": _snapshot(created), "receipt": None}
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def _text(params: dict, key: str, required: bool = True) -> bool:
|
|
401
|
+
value = params.get(key)
|
|
402
|
+
if value is None:
|
|
403
|
+
return not required
|
|
404
|
+
return isinstance(value, str) and bool(value) and value == value.strip()
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
def create(params: dict) -> dict:
|
|
408
|
+
"""``probe`` answers whether this owner can create diagnostic sessions, without creating one."""
|
|
409
|
+
home = profile_home_param(params).resolve()
|
|
410
|
+
toolsets = params.get("toolsets")
|
|
411
|
+
if params.get("probe") is not True and (
|
|
412
|
+
params.get("execution_mode") not in {"ignore_config", "safe"}
|
|
413
|
+
or not _text(params, "request_id") or len(params["request_id"]) > 128
|
|
414
|
+
or not _text(params, "model") or not _text(params, "cwd") or not Path(params["cwd"]).is_absolute()
|
|
415
|
+
or not _text(params, "provider", False) or not _text(params, "base_url", False)
|
|
416
|
+
or toolsets is not None and (not isinstance(toolsets, list) or not all(isinstance(t, str) and t for t in toolsets))):
|
|
417
|
+
raise InvalidParams("execution_mode, request_id, model and an absolute cwd are required")
|
|
418
|
+
return _with_owner(home, lambda discovery: _create(params, home, discovery))
|
|
@@ -97,8 +97,6 @@ def _connect_module():
|
|
|
97
97
|
|
|
98
98
|
|
|
99
99
|
def _conn(board=None):
|
|
100
|
-
kb = _kb()
|
|
101
|
-
kb.init_db(board=board)
|
|
102
100
|
module = _connect_module()
|
|
103
101
|
closing = getattr(module, "connect_closing", None)
|
|
104
102
|
return closing(board=board) if closing is not None else module.connect(board=board)
|
|
@@ -595,6 +593,7 @@ def task_detail_payload(params: dict) -> dict:
|
|
|
595
593
|
def events_payload(params: dict) -> dict:
|
|
596
594
|
since = _int(params, "since", 0, minimum=0)
|
|
597
595
|
limit = _int(params, "limit", 200, minimum=1, maximum=200)
|
|
596
|
+
kb = _kb()
|
|
598
597
|
with _conn(board=_board(params)) as conn:
|
|
599
598
|
rows = conn.execute(
|
|
600
599
|
"SELECT id, task_id, run_id, kind, payload, created_at FROM task_events WHERE id > ? ORDER BY id ASC LIMIT ?", (since, limit)
|
|
@@ -605,7 +604,7 @@ def events_payload(params: dict) -> dict:
|
|
|
605
604
|
payload = json.loads(row["payload"]) if row["payload"] else None
|
|
606
605
|
except Exception: # noqa: BLE001
|
|
607
606
|
payload = None
|
|
608
|
-
events.append({"id": row["id"], "task_id": row["task_id"], "run_id": row["run_id"], "kind": row["kind"], "payload": payload, "created_at": row["created_at"]})
|
|
607
|
+
events.append({"id": row["id"], "task_id": row["task_id"], "run_id": row["run_id"], "kind": row["kind"], "payload": payload, "created_at": kb._to_epoch(row["created_at"])})
|
|
609
608
|
cursor = int(row["id"])
|
|
610
609
|
latest = _latest_event_id(conn)
|
|
611
610
|
if not events:
|