@maudecode/talaria-web 1.19.0 → 1.21.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 +309 -2
- package/dist/api/automation-router.js +28 -2
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +646 -24
- package/dist/api/chat-router.js +54 -167
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.d.ts +54 -0
- package/dist/api/git-router.js +18 -5
- 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 +3 -3
- package/dist/api/session-visibility.js +2 -2
- package/dist/api/session-visibility.js.map +1 -1
- package/dist/api/sessions-router.d.ts +1868 -79
- package/dist/api/sessions-router.js +72 -43
- 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 +45 -21
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-router.d.ts +773 -39
- package/dist/api/tools-router.js +167 -45
- 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 +16 -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.d.ts +2 -0
- package/dist/redact.js +55 -16
- package/dist/redact.js.map +1 -1
- package/dist/release.js +5 -3
- package/dist/release.js.map +1 -1
- package/dist/runtime.js +118 -26
- package/dist/runtime.js.map +1 -1
- package/dist/server.js +25 -21
- package/dist/server.js.map +1 -1
- package/dist/sessions/admission.d.ts +21 -0
- package/dist/sessions/admission.js +176 -0
- package/dist/sessions/admission.js.map +1 -0
- package/dist/sessions/anchor.d.ts +4 -1
- package/dist/sessions/anchor.js +9 -5
- package/dist/sessions/anchor.js.map +1 -1
- package/dist/sessions/background-tasks.d.ts +41 -3
- package/dist/sessions/background-tasks.js +110 -10
- 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/events.d.ts +3 -0
- package/dist/sessions/events.js +4 -0
- package/dist/sessions/events.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 +92 -4
- package/dist/sessions/gateway-sessions.js +762 -93
- 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 +12 -5
- package/dist/sessions/merge.js +65 -18
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/prefix-index.d.ts +15 -4
- package/dist/sessions/prefix-index.js +35 -13
- package/dist/sessions/prefix-index.js.map +1 -1
- package/dist/sessions/prompt-queues.d.ts +36 -0
- package/dist/sessions/prompt-queues.js +318 -0
- package/dist/sessions/prompt-queues.js.map +1 -0
- 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/relay.d.ts +12 -1
- package/dist/sessions/relay.js +75 -17
- package/dist/sessions/relay.js.map +1 -1
- package/dist/sessions/service.d.ts +132 -37
- package/dist/sessions/service.js +688 -160
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +2 -0
- package/dist/sessions/session.js +5 -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 +71 -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 +6 -1
- package/dist/sessions/store.js +68 -27
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +10 -7
- package/dist/sessions/streams.js +49 -14
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/tool-display.d.ts +11 -2
- package/dist/sessions/tool-display.js +45 -4
- 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 +27 -6
- package/dist/sessions/turn.js +186 -89
- 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/kanban.d.ts +10 -1
- package/dist/tools/kanban.js +73 -1
- package/dist/tools/kanban.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.d.ts +3 -1
- package/dist/tools/mcp.js +92 -1
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/memory.d.ts +28 -0
- package/dist/tools/memory.js +120 -14
- package/dist/tools/memory.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 +77 -9
- package/dist/tools/update-notifications.js +390 -46
- package/dist/tools/update-notifications.js.map +1 -1
- package/dist/tools/updates.d.ts +29 -3
- package/dist/tools/updates.js +166 -34
- package/dist/tools/updates.js.map +1 -1
- package/dist/workspace/managed-buffers.d.ts +58 -0
- package/dist/workspace/managed-buffers.js +76 -0
- package/dist/workspace/managed-buffers.js.map +1 -0
- 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 +18 -8
- 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 +30 -15
- 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 +246 -32
- package/sidecar/talaria_sidecar/agent_services.py +157 -34
- 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 +304 -30
- package/sidecar/talaria_sidecar/methods/kanban.py +50 -3
- package/sidecar/talaria_sidecar/methods/managed_buffers.py +110 -0
- package/sidecar/talaria_sidecar/methods/mcp.py +55 -0
- package/sidecar/talaria_sidecar/methods/oauth.py +139 -11
- package/sidecar/talaria_sidecar/methods/outbound_drafts.py +165 -0
- 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 +240 -213
- package/static/dist/THIRD_PARTY_LICENSES.md +6 -22
- package/static/dist/assets/AppShell-c5989995.js +8 -0
- package/static/dist/assets/Button-nuaikybd.js +1 -0
- package/static/dist/assets/ChatPage-bfg4khph.js +6 -0
- package/static/dist/assets/ConnectTargets-k5wo9yo8.js +1 -0
- package/static/dist/assets/Dialog-o8vo2aws.js +1 -0
- package/static/dist/assets/ExtensionRoute-l1yjrso4.js +1 -0
- package/static/dist/assets/Field-j7o8cfps.js +1 -0
- package/static/dist/assets/HubRoute-efnwe4xz.js +2 -0
- package/static/dist/assets/LinkCheckContext-ix6zqqkk.js +1 -0
- package/static/dist/assets/Markdown-clqf5m22.js +2 -0
- package/static/dist/assets/MarkdownRenderer-ccgqrza3.js +302 -0
- package/static/dist/assets/MarkdownRenderer-i9o6nr38.css +1 -0
- package/static/dist/assets/OAuthSignIn-h7bjaqp6.js +1 -0
- package/static/dist/assets/ResourceSwitch-oai2zqaj.js +1 -0
- package/static/dist/assets/RightPanel-ho161a45.js +1 -0
- package/static/dist/assets/Select-d1g5a8bm.js +1 -0
- package/static/dist/assets/SessionListPanel-i7kaokhi.js +1 -0
- package/static/dist/assets/SettingsLayout-lnecm87w.js +1 -0
- package/static/dist/assets/States-easntmry.js +1 -0
- package/static/dist/assets/TerminalPanel-lxhwd4jl.js +16 -0
- package/static/dist/assets/Toaster-l4sciy8t.js +1 -0
- package/static/dist/assets/_app-mqexqbg8.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-n797jp72.js +1 -0
- package/static/dist/assets/_app.index-ne43mdw2.js +1 -0
- package/static/dist/assets/_app.insights-fqonovb4.js +1 -0
- package/static/dist/assets/_app.kanban-kysliv19.js +1 -0
- package/static/dist/assets/_app.logs-febut82r.js +1 -0
- package/static/dist/assets/_app.memory-ha86oj1c.js +1 -0
- package/static/dist/assets/_app.profiles-cnu3gxxq.js +1 -0
- package/static/dist/assets/_app.session._sessionId-ifzjpcgn.js +1 -0
- package/static/dist/assets/_app.settings-nmakdiaf.js +1 -0
- package/static/dist/assets/_app.settings._section-djglnjmi.js +3 -0
- package/static/dist/assets/_app.skills-f3wad8yo.js +1 -0
- package/static/dist/assets/_app.tasks-l10py1c0.js +1 -0
- package/static/dist/assets/_app.todos-bml1m3r1.js +1 -0
- package/static/dist/assets/_app.workspaces-f3d066lx.js +1 -0
- package/static/dist/assets/abnfDiagram-VCTEODGH-i53jc4yp.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-e3bv5m6f.js +1 -0
- package/static/dist/assets/architectureDiagram-5GKGNRK7-pakekxu2.js +36 -0
- package/static/dist/assets/archive-ihqi7z2x.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-bc6bo1n6.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-btvwk2qx.js} +1 -1
- package/static/dist/assets/channel-jn4f8443.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-koouqbut.js → chunk-4HAMMTFA-dlwab11c.js} +20 -20
- package/static/dist/assets/{chunk-75Z2AOVW-bl4bhdnt.js → chunk-75Z2AOVW-dp5gh7i8.js} +1 -1
- package/static/dist/assets/chunk-DU6HZSFF-bi06zl1c.js +128 -0
- package/static/dist/assets/{chunk-F27PBJKO-d8xxi0zi.js → chunk-F27PBJKO-kvv1rnlh.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-ji0rx9by.js} +6 -6
- package/static/dist/assets/{chunk-GVQU2GXP-djn6gbyu.js → chunk-GVQU2GXP-nmz0j82p.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-vw4p5p7o.js → chunk-IMKFNOWR-kmi1qx88.js} +5 -5
- package/static/dist/assets/{chunk-L3NEJ4N5-n1hj77q8.js → chunk-L3NEJ4N5-xhb7mebj.js} +1 -1
- package/static/dist/assets/chunk-OSK3NFVY-5a9sgscq.js +10 -0
- package/static/dist/assets/{chunk-P2QGCYS3-onf1hz6c.js → chunk-P2QGCYS3-dfezp4vu.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-m8sqn7cs.js → chunk-POPQ4Y6H-gd2vq3c0.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-ek4smc8x.js → chunk-PWAF6VOD-wvw2nksf.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-g9gfvefo.js → chunk-SHT3W25Y-f58q97px.js} +13 -13
- package/static/dist/assets/{chunk-SVP7TREG-f9nfv2cu.js → chunk-SVP7TREG-abgwpyz9.js} +4 -4
- package/static/dist/assets/{chunk-TICWLB2K-bnk3m1mq.js → chunk-TICWLB2K-h4sbs8ds.js} +6 -6
- package/static/dist/assets/{chunk-XXDRQBXY-n40pf9vy.js → chunk-XXDRQBXY-jkmnqu65.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-dzrw66se.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-dzrw66se.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/completionAudio-ce86msbu.js +1 -0
- package/static/dist/assets/copied-bz3gkazh.js +1 -0
- package/static/dist/assets/copy-m9h56qa8.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-g081vffs.js +1 -0
- package/static/dist/assets/cynefinDiagram-5FMLGOSQ-odxvjesk.js +62 -0
- package/static/dist/assets/cytoscape.esm-fjn2algp.js +321 -0
- package/static/dist/assets/dagre-GXQ25YYZ-cpdwzjs4.js +4 -0
- package/static/dist/assets/dagre-o5jmjz46.js +1 -0
- package/static/dist/assets/{diagram-S7CK7UJ4-m6aeoe7c.js → diagram-S7CK7UJ4-clv5mxvu.js} +4 -4
- package/static/dist/assets/diagram-UQ7AKVKN-m2ia1mbf.js +41 -0
- package/static/dist/assets/{diagram-VSXAHHWV-hbawi7hn.js → diagram-VSXAHHWV-ea6zv636.js} +1 -1
- package/static/dist/assets/diagram-VX7I27RA-oqlef685.js +24 -0
- package/static/dist/assets/diagram-Z3DM3KII-kjubcbwu.js +24 -0
- package/static/dist/assets/dist-carq1azj.js +44 -0
- package/static/dist/assets/dist-crc46di9.js +7 -0
- package/static/dist/assets/{dist-c4c2m3kv.js → dist-nb670eu6.js} +1 -1
- package/static/dist/assets/ebnfDiagram-PWID7BFC-fg0zri3e.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-eb7pmk3x.js +99 -0
- package/static/dist/assets/{erb-idlyfheg.js → erb-flwsv146.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-gvi1fxhn.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-abekab15.js +1 -0
- package/static/dist/assets/folder-plus-ksaons88.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-ma6jxj5i.js → ganttDiagram-EL5Y4UJY-jmisowrc.js} +1 -1
- package/static/dist/assets/{git-rebase-d9lpfpbn.js → git-rebase-bli19aoq.js} +1 -1
- package/static/dist/assets/gitGraph-4MIJSDKK-m7kt3u6e.js +1 -0
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-hzltvsod.js → gitGraphDiagram-WWUBYQGX-nq7vfzh2.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-gcu017ay.js +1 -0
- package/static/dist/assets/host-ipp4e84c.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-d6vbxlra.js +13 -0
- package/static/dist/assets/index-ey6qo0zx.css +2 -0
- package/static/dist/assets/info-A6RAGUB7-idazwfqe.js +1 -0
- package/static/dist/assets/infoDiagram-27XIBGKW-bb9jh8gl.js +2 -0
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-e7bnwq7h.js → ishikawaDiagram-5VMMS53U-nqc132rv.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-fpvnhy44.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-ndzqm6fu.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-javud235.js +1 -0
- package/static/dist/assets/{line-h0ojzsvs.js → line-g625e7cj.js} +1 -1
- package/static/dist/assets/linear-jlwrvvy6.js +1 -0
- package/static/dist/assets/link-gfdaho08.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-iv6yq4xf.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-cwj5cl6k.js +1 -0
- package/static/dist/assets/mermaid-parser.core-plzkuzov.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-ojrgs569.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-ff4emacu.js +1 -0
- package/static/dist/assets/packet-AYTQ26CC-gyaf9s8h.js +1 -0
- package/static/dist/assets/pegDiagram-XKGWAZYB-bf6xj8mq.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-f5ymzelo.js +1 -0
- package/static/dist/assets/pieDiagram-E7YTZNPT-d0qjl3zi.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-oqy1mras.js} +1 -1
- package/static/dist/assets/queryKeys-x8fjxhut.js +9 -0
- package/static/dist/assets/{r-o3r9c7ao.js → r-epfzuw6q.js} +1 -1
- package/static/dist/assets/radar-RG4KPBEZ-b6jcjvda.js +1 -0
- package/static/dist/assets/railroad-74A4TZTK-e3a6lk5k.js +1 -0
- package/static/dist/assets/railroad-abnf-HS5TGJTU-ff5hocrx.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-exkhyw4n.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-jefk9b7c.js +1 -0
- package/static/dist/assets/railroadDiagram-O6MQD6OU-e4amks1i.js +1 -0
- package/static/dist/assets/{razor-ilc585yr.js → razor-pea1u1d0.js} +1 -1
- package/static/dist/assets/refresh-cw-lfp4u1oh.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-c77k1e2y.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-oa1cc52s.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-j20gqt22.js} +11 -11
- package/static/dist/assets/settings_section_extensions_title-fadc7o65.js +1 -0
- package/static/dist/assets/share._token-kmfoflw6.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-g5jkzd9k.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-co2ghkdp.js +1 -0
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-faw1opgh.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-m30cktqe.js +1 -0
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-hfil433g.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-liuep6fl.js} +8 -8
- package/static/dist/assets/toast-zmb35u3r.js +56 -0
- package/static/dist/assets/treeView-Q6P3EWNA-np5d2jv2.js +1 -0
- package/static/dist/assets/treemap-WGGIJYW6-cmpltxh1.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-f1udzsjf.js +1 -0
- package/static/dist/assets/{useParams-gjc70qru.js → useParams-ierevvts.js} +1 -1
- package/static/dist/assets/{useSearch-e6ae539u.js → useSearch-i7nr9ypl.js} +1 -1
- package/static/dist/assets/vennDiagram-4TSXK5OY-b2g42qrg.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-lb0eqbff.js +1 -0
- package/static/dist/assets/wardleyDiagram-VM6X3IG4-ermwaqha.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-dll0jldk.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
package/dist/api/tools-router.js
CHANGED
|
@@ -7,10 +7,10 @@ import { requestSessionIdGuard } from './session-visibility.js';
|
|
|
7
7
|
import { activeProfileName, ensureTrustedAuthSession, sessionCanManageServer } from '../auth/gate.js';
|
|
8
8
|
import { currentChatReadiness, HttpFailure } from '../sessions/service.js';
|
|
9
9
|
import { SessionNotFound } from '../sessions/store.js';
|
|
10
|
-
import {
|
|
10
|
+
import { stateDbSessionReadAsync } from '../sessions/state-db.js';
|
|
11
11
|
import { ConfigUnavailable } from '../config/agent-config.js';
|
|
12
12
|
import { SidecarError } from '../sidecar/client.js';
|
|
13
|
-
import { createPrompt, deletePrompt, externalNotesEnabled, loadPrompts, readMemory, writeMemory } from '../tools/memory.js';
|
|
13
|
+
import { createPrompt, deletePrompt, externalNotesEnabled, loadPrompts, readMemory, writeMemory, previewMemoryCompaction, applyMemoryCompaction } from '../tools/memory.js';
|
|
14
14
|
import { JoplinError, joplinNote, joplinSearch, notesSources } from '../tools/mcp.js';
|
|
15
15
|
import { catalogNames, connectorOperation, connectorsPage, connectorTools, rememberCatalogNames } from '../tools/connectors.js';
|
|
16
16
|
import { resolveWikiLocation, wikiPages } from '../tools/wiki.js';
|
|
@@ -21,6 +21,8 @@ import { agentHealth, applyDashboardConfig, dashboardConfig, dashboardStatus, ga
|
|
|
21
21
|
import { restartGateway } from '../tools/gateway-restart.js';
|
|
22
22
|
import { projectOsDashboard } from '../tools/project-os.js';
|
|
23
23
|
import { PluginSettingsInvalid, planPluginSettings, pluginSettingsView, serializePluginSettingsSave } from '../tools/plugin-settings.js';
|
|
24
|
+
import { checkPastedRedirect } from '../tools/plugin-oauth.js';
|
|
25
|
+
import { oauthCall, oauthView } from './settings-router.js';
|
|
24
26
|
import { credentialShadowed, RuntimeCredentialError, writeRuntimeCredential } from '../providers/runtime-env.js';
|
|
25
27
|
import { EnvWriteError, loadEnvFile } from '../providers/env-file.js';
|
|
26
28
|
import { loadGatewaySessionIdentityMap } from '../sessions/list.js';
|
|
@@ -30,7 +32,7 @@ import { normalizeChannel, updatesCheckView } from '../tools/updates.js';
|
|
|
30
32
|
import { pyBool } from '../settings.js';
|
|
31
33
|
import { str } from '../util.js';
|
|
32
34
|
import { redactString } from '../redact.js';
|
|
33
|
-
import { GATEWAY_RESTART_NOW } from '../tools/update-notifications.js';
|
|
35
|
+
import { GATEWAY_RESTART_NOW, updateNotificationOwner } from '../tools/update-notifications.js';
|
|
34
36
|
const os = implement(toolsContract).$context().use(requestSessionIdGuard);
|
|
35
37
|
function failure(error) {
|
|
36
38
|
if (error instanceof HttpError)
|
|
@@ -84,6 +86,11 @@ async function pluginSettingsList(ctx) {
|
|
|
84
86
|
const result = await runningSidecar(ctx).call('plugins.settings', { profile_home: home(ctx) });
|
|
85
87
|
return result.plugins.map((entry) => ({ key: entry.key, fields: pluginSettingsFieldsView(ctx, entry.fields) }));
|
|
86
88
|
}
|
|
89
|
+
/** TAL-1276: each plugin's declared OAuth clients by key; empty on an Agent without plugin OAuth. */
|
|
90
|
+
async function pluginOAuthClients(ctx) {
|
|
91
|
+
const result = await runningSidecar(ctx).call('plugins.oauth_status', { profile_home: home(ctx) });
|
|
92
|
+
return new Map(result.supported ? result.plugins.map((entry) => [entry.key, entry.clients.map((client) => ({ ...client, can_sign_out: client.state !== 'logged_out' }))]) : []);
|
|
93
|
+
}
|
|
87
94
|
const pluginSettingsFieldsView = (ctx, fields) => {
|
|
88
95
|
const rootProfile = ctx.deps.isRootProfile(activeProfileName(ctx));
|
|
89
96
|
return pluginSettingsView(fields, (envVar) => credentialShadowed(ctx.deps.config.env, rootProfile, envVar));
|
|
@@ -118,9 +125,13 @@ async function connectorNames(ctx) {
|
|
|
118
125
|
}
|
|
119
126
|
/** An operation as the contract shows it, with the apps' catalog names. */
|
|
120
127
|
const operationView = async (ctx, snapshot) => connectorOperation(snapshot, await connectorNames(ctx));
|
|
121
|
-
/**
|
|
122
|
-
const
|
|
123
|
-
|
|
128
|
+
/** Read failures never create an identity. Auth refusals become a page sign-in state; unreadable rules fail closed. */
|
|
129
|
+
const connectorRead = (ctx, method) => connectorCall(ctx, method, {}).then((value) => ({ value, error: null, signInRequired: false }), (error) => {
|
|
130
|
+
if (error instanceof HttpError && (method === 'connectors.policy.get' || error.data?.code === 'connectors_sign_in')) {
|
|
131
|
+
return { value: null, error: error.message, signInRequired: error.data?.code === 'connectors_sign_in' };
|
|
132
|
+
}
|
|
133
|
+
throw error;
|
|
134
|
+
});
|
|
124
135
|
const health = (ctx) => agentHealth({ env: ctx.deps.config.env, hermesHome: ctx.deps.config.hermesHome, profileHome: () => home(ctx), fetch: () => ctx.deps.fetch, now: ctx.deps.nowSeconds });
|
|
125
136
|
/**
|
|
126
137
|
* TAL-805: the active profile's gateway mode from sidecar `gateway.mode`; null for a remote gateway. A named profile never
|
|
@@ -160,11 +171,13 @@ async function gatewayAction(ctx, action) {
|
|
|
160
171
|
throw new HttpError(500, 'Hermes Agent sidecar is not running', { ok: false, action });
|
|
161
172
|
let outcome;
|
|
162
173
|
try {
|
|
163
|
-
outcome = await sidecar.call('gateway.control', { profile_home: home(ctx), action, background_wait_seconds: GATEWAY_ACTION_TIMEOUT_S }, { timeoutMs: 300_000 });
|
|
174
|
+
outcome = await sidecar.call('gateway.control', { profile_home: home(ctx), action, interrupt: true, background_wait_seconds: GATEWAY_ACTION_TIMEOUT_S }, { timeoutMs: 300_000 });
|
|
164
175
|
}
|
|
165
176
|
catch (error) {
|
|
166
177
|
throw new HttpError(500, sanitizeError(error), { ok: false, action });
|
|
167
178
|
}
|
|
179
|
+
if (outcome.status === 'busy_live_work')
|
|
180
|
+
throw new HttpError(409, outcome.reason || 'The gateway still has live work.', { ok: false, action });
|
|
168
181
|
if (outcome.status === 'busy')
|
|
169
182
|
throw new HttpError(409, 'Another gateway action is already in progress; try again shortly.', { ok: false, action });
|
|
170
183
|
if (outcome.timed_out)
|
|
@@ -178,27 +191,15 @@ async function gatewayAction(ctx, action) {
|
|
|
178
191
|
return { ok: true, action, message: `Gateway ${action} completed.`, status: await currentGatewayStatus(ctx) };
|
|
179
192
|
}
|
|
180
193
|
const principalHash = (...parts) => createHash('sha256').update(JSON.stringify(parts), 'utf8').digest('hex');
|
|
181
|
-
export function updateNotificationOwner(session) {
|
|
182
|
-
const authType = str(session?.auth_type).trim();
|
|
183
|
-
if (authType === 'oidc') {
|
|
184
|
-
const issuer = str(session?.oidc_issuer).trim();
|
|
185
|
-
const subject = typeof session?.oidc_subject === 'string' ? session.oidc_subject : '';
|
|
186
|
-
if (issuer && subject.trim())
|
|
187
|
-
return `oidc:${principalHash(issuer, subject)}`;
|
|
188
|
-
const token = str(session?.token).trim();
|
|
189
|
-
if (token)
|
|
190
|
-
return `oidc-session:${principalHash(token)}`;
|
|
191
|
-
}
|
|
192
|
-
const username = str(session?.username).trim();
|
|
193
|
-
return username ? `${authType || 'auth'}:${username}` : 'local-owner';
|
|
194
|
-
}
|
|
195
194
|
async function updateNotificationScope(ctx, tab) {
|
|
196
195
|
const session = await ensureTrustedAuthSession(ctx);
|
|
196
|
+
const profile = activeProfileName(ctx);
|
|
197
197
|
return {
|
|
198
198
|
owner: updateNotificationOwner(session),
|
|
199
|
-
profile
|
|
199
|
+
profile,
|
|
200
200
|
serverOwner: await sessionCanManageServer(ctx, session),
|
|
201
201
|
tab: tab ?? null,
|
|
202
|
+
rootProfile: ctx.deps.isRootProfile(profile),
|
|
202
203
|
};
|
|
203
204
|
}
|
|
204
205
|
async function applyWithNotification(ctx, input, action) {
|
|
@@ -208,20 +209,33 @@ async function applyWithNotification(ctx, input, action) {
|
|
|
208
209
|
const active = ctx.deps.updateNotifications.activeUpdate(scope, target);
|
|
209
210
|
if (active)
|
|
210
211
|
(await ctx.deps.updateNotifications.watch(scope, active.id));
|
|
211
|
-
if (active && (active.phase === 'applying' || active.phase === 'restarting')) {
|
|
212
|
+
if (active && (active.phase === 'applying' || active.phase === 'restarting' || active.phase === 'verifying' || active.phase === 'recovering')) {
|
|
212
213
|
return { ok: false, status: 'already_in_progress', message: 'Update already in progress', notification_id: active.id };
|
|
213
214
|
}
|
|
214
215
|
const notification = active ?? (await ctx.deps.updateNotifications.begin(scope, target));
|
|
215
216
|
if (active?.phase === 'awaiting_confirmation' && confirmed)
|
|
216
217
|
(await ctx.deps.updateNotifications.transition(notification.id, 'applying'));
|
|
218
|
+
// TAL-1138: the gateways running before an Agent update; the update's check needs a new process for each.
|
|
219
|
+
const gatewaysBefore = target === 'agent' ? await ctx.deps.gatewayRestarts.gateways(scope.profile).catch(() => []) : [];
|
|
217
220
|
try {
|
|
218
|
-
const options = {
|
|
221
|
+
const options = { operationId: notification.id,
|
|
222
|
+
onTransaction: (baseline, selected) => ctx.deps.updateNotifications.bindAgentOperation(notification.id, baseline, selected),
|
|
223
|
+
onFailure: (detail, identity) => ctx.deps.updateNotifications.handoffAgentRecovery(notification.id, detail, identity),
|
|
224
|
+
agentChannel: input.agent_channel, confirmedRevision: input.confirmed_agent_revision, version: input.version, refreshToken: input.agent_refresh_token, mutationIntent: principalHash(scope.owner, scope.profile, notification.id),
|
|
225
|
+
// TAL-1429: the Updating dialog shows what the running update waits for; a lost refresh only delays that wording.
|
|
226
|
+
onProgress: (detail) => { ctx.deps.updateNotifications.transition(notification.id, 'applying', null, undefined, detail).catch(() => undefined); } };
|
|
219
227
|
const result = action === 'apply' ? await ctx.deps.updates.apply(target, bodyChannel(input.channel), () => true, options)
|
|
220
228
|
: action === 'force' ? await ctx.deps.updates.force(target, bodyChannel(input.channel), options)
|
|
221
229
|
: await ctx.deps.updates.clearLock(target, options);
|
|
222
230
|
const verifiedIdentity = typeof result.verified_revision === 'string'
|
|
223
231
|
? { revision: result.verified_revision, version: typeof result.verified_version === 'string' ? result.verified_version : null }
|
|
224
232
|
: undefined;
|
|
233
|
+
if (result.recovery_only === true) {
|
|
234
|
+
await ctx.deps.updateNotifications.transition(notification.id, 'unknown', null, verifiedIdentity, `Retained Agent recovery was attempted. The requested update outcome is unverified. ${str(result.message)}`);
|
|
235
|
+
return { ...result, ok: false, notification_id: notification.id };
|
|
236
|
+
}
|
|
237
|
+
if (result.recovery_pending === true)
|
|
238
|
+
return { ...result, notification_id: notification.id };
|
|
225
239
|
if (result.confirmation_required === true)
|
|
226
240
|
(await ctx.deps.updateNotifications.transition(notification.id, 'awaiting_confirmation', null, verifiedIdentity, result.message));
|
|
227
241
|
else if (result.restart_blocked === true)
|
|
@@ -231,11 +245,27 @@ async function applyWithNotification(ctx, input, action) {
|
|
|
231
245
|
else if (target === 'webui' && result.restart_scheduled === true) {
|
|
232
246
|
await ctx.deps.updateNotifications.transition(notification.id, 'restarting', str(result.sourceRevision || result.candidate_revision), verifiedIdentity);
|
|
233
247
|
}
|
|
248
|
+
else if (target === 'agent' && result.gateway_restart === 'resumed') {
|
|
249
|
+
// TAL-1138: the native updater restarted the gateways inside its writer pause. Agent responding still needs the
|
|
250
|
+
// new gateway processes and a current Agent runtime; a scheduled Web restart runs that check from the new server.
|
|
251
|
+
const detail = result.stash_conflict === true ? str(result.message) : null;
|
|
252
|
+
await ctx.deps.updateNotifications.recordGatewayBaseline(notification.id, gatewaysBefore);
|
|
253
|
+
await ctx.deps.updateNotifications.transition(notification.id, 'verifying', null, verifiedIdentity, detail);
|
|
254
|
+
if (result.restart_scheduled === true)
|
|
255
|
+
(await ctx.deps.updateNotifications.markWebRestart(notification.id));
|
|
256
|
+
else
|
|
257
|
+
void ctx.deps.gatewayRestarts.verify(notification.id, scope.profile, gatewaysBefore, detail);
|
|
258
|
+
}
|
|
234
259
|
else if (result.gateway_restart === 'waiting_for_idle' || (target === 'agent' && ctx.deps.gatewayRestarts.pendingId() !== null)) {
|
|
235
260
|
// TAL-953: the gateway restarts once its own work drains. A restart already waiting covers this update too, and a
|
|
236
261
|
// repeated request that found the Agent current follows that wait rather than reporting success before it.
|
|
237
262
|
const detail = result.stash_conflict === true ? str(result.message) : null;
|
|
238
263
|
await ctx.deps.updateNotifications.transition(notification.id, 'waiting_for_idle', null, verifiedIdentity, detail);
|
|
264
|
+
// TAL-1138: a scheduled Web restart goes first, and the restarted server resumes this wait.
|
|
265
|
+
if (result.restart_scheduled === true && ctx.deps.gatewayRestarts.pendingId() === null) {
|
|
266
|
+
await ctx.deps.updateNotifications.markWebRestart(notification.id);
|
|
267
|
+
return { ...result, notification_id: notification.id };
|
|
268
|
+
}
|
|
239
269
|
const pending = (await ctx.deps.gatewayRestarts.schedule(notification.id, scope.profile, detail));
|
|
240
270
|
if (pending !== notification.id)
|
|
241
271
|
(await ctx.deps.updateNotifications.watch(scope, pending));
|
|
@@ -248,7 +278,9 @@ async function applyWithNotification(ctx, input, action) {
|
|
|
248
278
|
return { ...result, notification_id: notification.id };
|
|
249
279
|
}
|
|
250
280
|
catch (error) {
|
|
251
|
-
|
|
281
|
+
const detail = error instanceof Error ? error.message : null;
|
|
282
|
+
if (!await ctx.deps.updateNotifications.handoffAgentRecovery(notification.id, detail))
|
|
283
|
+
await ctx.deps.updateNotifications.transition(notification.id, 'failed', null, undefined, detail);
|
|
252
284
|
throw error;
|
|
253
285
|
}
|
|
254
286
|
}
|
|
@@ -383,6 +415,13 @@ async function reviewPendingWrites(ctx, verb, input) {
|
|
|
383
415
|
const { results } = await runningSidecar(ctx).call(`write_approval.${verb}`, { profile_home: home(ctx), kind: input.kind, writes: input.writes });
|
|
384
416
|
return { results: results.map((r) => ({ ...r, message: redactString(r.message, ctx.deps.sessions.deps.redactEnabled()) })) };
|
|
385
417
|
}
|
|
418
|
+
function memoryWriteDeps(ctx, profileHome) {
|
|
419
|
+
return {
|
|
420
|
+
key: ctx.deps.auth.signingKey(),
|
|
421
|
+
check: (target, content) => runningSidecar(ctx).call('memory.check', { profile_home: profileHome, target, content }),
|
|
422
|
+
write: (section, base, content) => runningSidecar(ctx).call('memory.write', { profile_home: profileHome, section, base, content }),
|
|
423
|
+
};
|
|
424
|
+
}
|
|
386
425
|
export const toolsRouter = os.router({
|
|
387
426
|
toolsetsCatalog: os.toolsetsCatalog.handler(({ input, context: { ctx } }) => run(() => runningSidecar(ctx).call('toolsets.catalog', { profile_home: home(ctx), enabled_toolsets: input.toolsets }))),
|
|
388
427
|
skills: {
|
|
@@ -413,6 +452,17 @@ export const toolsRouter = os.router({
|
|
|
413
452
|
})),
|
|
414
453
|
},
|
|
415
454
|
memory: {
|
|
455
|
+
compactionPreview: os.memory.compactionPreview.handler(({ input, context: { ctx } }) => run(async () => {
|
|
456
|
+
const profileHome = home(ctx);
|
|
457
|
+
return previewMemoryCompaction(profileHome, await ctx.deps.agentConfig.read(profileHome), input.section, input.revision, {
|
|
458
|
+
...memoryWriteDeps(ctx, profileHome), now: ctx.deps.nowSeconds,
|
|
459
|
+
complete: (messages) => runningSidecar(ctx).call('aux.complete', { profile_home: profileHome, task: 'compression', messages, main_fallback: false, max_tokens: 4096, temperature: 0.2 }, { timeoutMs: 60_000 }),
|
|
460
|
+
});
|
|
461
|
+
})),
|
|
462
|
+
compactionApply: os.memory.compactionApply.handler(({ input, context: { ctx } }) => run(async () => {
|
|
463
|
+
const profileHome = home(ctx);
|
|
464
|
+
return applyMemoryCompaction(profileHome, await ctx.deps.agentConfig.read(profileHome), input.receipt, { ...memoryWriteDeps(ctx, profileHome), now: ctx.deps.nowSeconds });
|
|
465
|
+
})),
|
|
416
466
|
get: os.memory.get.handler(({ input, context: { ctx } }) => run(async () => {
|
|
417
467
|
const config = await ctx.deps.agentConfig.read(home(ctx));
|
|
418
468
|
return readMemory(home(ctx), config, (await memoryWorkspace(ctx, str(input.session_id), str(input.workspace))), ctx.deps.config.env, ctx.deps.sessions.deps.redactEnabled(), ctx.deps.auth.signingKey());
|
|
@@ -422,11 +472,7 @@ export const toolsRouter = os.router({
|
|
|
422
472
|
if (section === undefined || input.content === undefined)
|
|
423
473
|
throw new HttpError(400, 'Missing required field(s): section, content');
|
|
424
474
|
const profileHome = home(ctx);
|
|
425
|
-
return writeMemory(profileHome, await ctx.deps.agentConfig.read(profileHome), str(section), str(input.content), input.revision,
|
|
426
|
-
key: ctx.deps.auth.signingKey(),
|
|
427
|
-
check: (target, content) => runningSidecar(ctx).call('memory.check', { profile_home: profileHome, target, content }),
|
|
428
|
-
write: (target, base, content) => runningSidecar(ctx).call('memory.write', { profile_home: profileHome, section: target, base, content }),
|
|
429
|
-
});
|
|
475
|
+
return writeMemory(profileHome, await ctx.deps.agentConfig.read(profileHome), str(section), str(input.content), input.revision, memoryWriteDeps(ctx, profileHome));
|
|
430
476
|
})),
|
|
431
477
|
},
|
|
432
478
|
pendingWrites: {
|
|
@@ -472,12 +518,19 @@ export const toolsRouter = os.router({
|
|
|
472
518
|
// TAL-904: a chat's command runs under that chat's session and the workspace its next turn would use. An unknown
|
|
473
519
|
// chat (404) or a workspace that turn would refuse (400) refuses the command rather than run it half-bound.
|
|
474
520
|
const chat = sessionId ? { session_id: sessionId, workspace: (await ctx.deps.sessions.turnWorkspace((await ctx.deps.sessionStore.get(sessionId, { metadataOnly: true })))) } : {};
|
|
521
|
+
let output;
|
|
475
522
|
try {
|
|
476
|
-
|
|
523
|
+
output = (await runningSidecar(ctx).call('commands.exec', { profile_home: home(ctx), command, ...chat }, { timeoutMs: 120_000 })).output;
|
|
477
524
|
}
|
|
478
525
|
catch (error) {
|
|
479
526
|
return commandFailure(error, 'command_not_found', 'Plugin command not found');
|
|
480
527
|
}
|
|
528
|
+
// TAL-1274: an /autoprune answer typed in the composer withdraws the profile's open auto-prune question.
|
|
529
|
+
if (name.toLowerCase() === 'autoprune') {
|
|
530
|
+
const profile = activeProfileName(ctx);
|
|
531
|
+
await ctx.deps.pruneAdvice.check(ctx.deps.isRootProfile(profile) ? 'default' : profile, home(ctx));
|
|
532
|
+
}
|
|
533
|
+
return { output };
|
|
481
534
|
})),
|
|
482
535
|
bundles: os.commands.bundles.handler(({ context: { ctx } }) => run(async () => {
|
|
483
536
|
const sidecar = ctx.deps.sidecar();
|
|
@@ -544,9 +597,9 @@ export const toolsRouter = os.router({
|
|
|
544
597
|
catch {
|
|
545
598
|
entries = [];
|
|
546
599
|
}
|
|
547
|
-
return buildInsights(entries, input.days, ctx.deps.nowSeconds(), (cutoff) => insightsSessionRows
|
|
600
|
+
return buildInsights(entries, input.days, ctx.deps.nowSeconds(), (cutoff) => stateDbSessionReadAsync([], 'insightsSessionRows', join(home(ctx), 'state.db'), cutoff));
|
|
548
601
|
})),
|
|
549
|
-
logs: os.logs.handler(({ input, context: { ctx } }) => run(() => readLogTail(home(ctx), input.file, input.tail))),
|
|
602
|
+
logs: os.logs.handler(({ input, signal, context: { ctx } }) => run(() => readLogTail(home(ctx), input.file, input.tail, signal))),
|
|
550
603
|
ops: {
|
|
551
604
|
agent: os.ops.agent.handler(({ context: { ctx } }) => run(async () => { const [gateway, chat] = await Promise.all([health(ctx), currentChatReadiness(ctx.deps.sidecar())]); return { ...gateway, chat }; })),
|
|
552
605
|
system: os.ops.system.handler(({ context: { ctx } }) => run(() => systemHealth(ctx.deps.config.homeDir, ctx.deps.runtimeDiagnostics()))),
|
|
@@ -554,7 +607,7 @@ export const toolsRouter = os.router({
|
|
|
554
607
|
const sidecar = ctx.deps.sidecar();
|
|
555
608
|
if (!sidecar)
|
|
556
609
|
throw new HttpError(500, 'Hermes Agent sidecar is not running');
|
|
557
|
-
const outcome = await restartGateway(sidecar, home(ctx));
|
|
610
|
+
const outcome = await restartGateway(sidecar, home(ctx), true);
|
|
558
611
|
if (outcome.status === 'completed')
|
|
559
612
|
return { ok: true, message: 'Gateway service restarted successfully' };
|
|
560
613
|
if (outcome.status === 'busy')
|
|
@@ -611,14 +664,16 @@ export const toolsRouter = os.router({
|
|
|
611
664
|
available: os.connectors.available.handler(({ context: { ctx } }) => run(async () => ({ available: ctx.deps.sidecar() ? await connectorCall(ctx, 'connectors.available', {}).then((r) => r.available, () => false) : false }))),
|
|
612
665
|
page: os.connectors.page.handler(({ context: { ctx } }) => run(async () => {
|
|
613
666
|
if (!ctx.deps.sidecar() || !(await connectorCall(ctx, 'connectors.available', {})).available)
|
|
614
|
-
return { available: false, connectors: [], policy_revision: null, rules_error: null };
|
|
615
|
-
const [catalog, accounts, policy] = await Promise.all([
|
|
616
|
-
|
|
617
|
-
|
|
667
|
+
return { available: false, connectors: [], policy_revision: null, rules_error: null, sign_in_required: false };
|
|
668
|
+
const [catalog, accounts, policy] = await Promise.all([
|
|
669
|
+
connectorRead(ctx, 'connectors.catalog'), connectorRead(ctx, 'connectors.accounts'), connectorRead(ctx, 'connectors.policy.get'),
|
|
670
|
+
]);
|
|
671
|
+
rememberCatalogNames(home(ctx), catalog.value?.connectors ?? []);
|
|
672
|
+
return connectorsPage(catalog.value?.connectors ?? [], accounts.value?.accounts ?? [], policy.value, policy.error, catalog.signInRequired || accounts.signInRequired || policy.signInRequired);
|
|
618
673
|
})),
|
|
619
674
|
tools: os.connectors.tools.handler(({ input, context: { ctx } }) => run(async () => {
|
|
620
|
-
const [listing, policy] = await Promise.all([connectorCall(ctx, 'connectors.tools', { connector: input.connector }),
|
|
621
|
-
return connectorTools(listing, policy.
|
|
675
|
+
const [listing, policy] = await Promise.all([connectorCall(ctx, 'connectors.tools', { connector: input.connector }), connectorRead(ctx, 'connectors.policy.get')]);
|
|
676
|
+
return connectorTools(listing, policy.value);
|
|
622
677
|
})),
|
|
623
678
|
setPolicy: os.connectors.setPolicy.handler(({ input, context: { ctx } }) => run(async () => {
|
|
624
679
|
const change = input.tool === undefined ? (typeof input.enabled === 'boolean' ? { enabled: input.enabled } : null)
|
|
@@ -660,7 +715,14 @@ export const toolsRouter = os.router({
|
|
|
660
715
|
// A settings failure leaves the list itself readable.
|
|
661
716
|
const declared = await pluginSettingsList(ctx).catch((error) => { ctx.deps.log(`[plugins] settings fields failed: ${str(error.message)}`); return []; });
|
|
662
717
|
const settings = new Map(declared.map((entry) => [entry.key, entry.fields]));
|
|
663
|
-
|
|
718
|
+
// So does an OAuth status failure.
|
|
719
|
+
const oauth = await pluginOAuthClients(ctx).catch((error) => { ctx.deps.log(`[plugins] oauth status failed: ${str(error.message)}`); return new Map(); });
|
|
720
|
+
const plugins = result.plugins.map(({ update_available, latest_revision, ...plugin }) => ({
|
|
721
|
+
...plugin,
|
|
722
|
+
...(update_available === undefined ? {} : { update: { available: update_available, ...(latest_revision ? { latest_revision } : {}) } }),
|
|
723
|
+
...(settings.has(plugin.key) ? { settings: settings.get(plugin.key) } : {}),
|
|
724
|
+
...(oauth.has(plugin.key) ? { oauth_clients: oauth.get(plugin.key) } : {}),
|
|
725
|
+
}));
|
|
664
726
|
// An advisory failure leaves the list itself readable.
|
|
665
727
|
const advisory = await pluginIsolationAdvisory(ctx).catch((error) => { ctx.deps.log(`[plugins] isolation advisory failed: ${str(error.message)}`); return false; });
|
|
666
728
|
return { plugins, empty: plugins.length === 0, supported_hooks: result.supported_hooks, read_only: !editable, plugin_isolation_advisory: advisory };
|
|
@@ -670,6 +732,39 @@ export const toolsRouter = os.router({
|
|
|
670
732
|
return { plugins: [], empty: true, supported_hooks: hooks, read_only: true, unavailable: true };
|
|
671
733
|
}
|
|
672
734
|
})),
|
|
735
|
+
pluginCatalog: os.pluginCatalog.handler(({ input, context: { ctx } }) => run(async () => {
|
|
736
|
+
const result = await runningSidecar(ctx).call('plugins.catalog', { profile_home: home(ctx), ...input });
|
|
737
|
+
const readOnly = !await sessionCanManageServer(ctx, await ensureTrustedAuthSession(ctx));
|
|
738
|
+
return { ...result, read_only: readOnly, entries: result.entries.map((entry) => ({ ...entry, can_install: !readOnly && entry.can_install })) };
|
|
739
|
+
})),
|
|
740
|
+
pluginInstall: os.pluginInstall.handler(({ input, context: { ctx } }) => run(async () => {
|
|
741
|
+
try {
|
|
742
|
+
return await runningSidecar(ctx).call('plugins.install', { profile_home: home(ctx), ...input }, { timeoutMs: 0 });
|
|
743
|
+
}
|
|
744
|
+
catch (error) {
|
|
745
|
+
if (error instanceof SidecarError && error.condition === 'plugin_install_consent_changed')
|
|
746
|
+
throw new HttpError(409, error.message, { condition: error.condition });
|
|
747
|
+
if (error instanceof SidecarError && error.condition === 'plugin_install_refused')
|
|
748
|
+
throw new HttpError(409, error.message, { condition: error.condition });
|
|
749
|
+
if (error instanceof SidecarError && error.condition === 'plugin_catalog_unsupported')
|
|
750
|
+
throw new HttpError(503, error.message, { condition: error.condition });
|
|
751
|
+
if (!definitiveRefusal(error))
|
|
752
|
+
throw new HttpError(503, 'Install outcome is unknown. Refresh Plugins to check the installed identity before trying again.', { condition: 'plugin_install_unconfirmed' });
|
|
753
|
+
throw error;
|
|
754
|
+
}
|
|
755
|
+
})),
|
|
756
|
+
pluginUpdate: os.pluginUpdate.handler(({ input, context: { ctx } }) => run(async () => {
|
|
757
|
+
try {
|
|
758
|
+
return await runningSidecar(ctx).call('plugins.update', { profile_home: home(ctx), key: input.key, accept_caution: input.accept_caution, ...(input.consent_token ? { consent_token: input.consent_token } : {}) }, { timeoutMs: 0 });
|
|
759
|
+
}
|
|
760
|
+
catch (error) {
|
|
761
|
+
if (error instanceof SidecarError && error.condition === 'plugin_not_found')
|
|
762
|
+
throw new HttpError(404, error.message);
|
|
763
|
+
if (error instanceof SidecarError && ['plugin_update_refused', 'plugin_update_consent_changed'].includes(error.condition))
|
|
764
|
+
throw new HttpError(409, error.message, { condition: error.condition });
|
|
765
|
+
throw error;
|
|
766
|
+
}
|
|
767
|
+
})),
|
|
673
768
|
pluginSettings: os.pluginSettings.handler(({ input, context: { ctx } }) => run(() => serializePluginSettingsSave(async () => {
|
|
674
769
|
const sidecar = runningSidecar(ctx);
|
|
675
770
|
const fields = (await pluginSettingsList(ctx)).find((entry) => entry.key === input.key)?.fields;
|
|
@@ -720,8 +815,28 @@ export const toolsRouter = os.router({
|
|
|
720
815
|
throw new HttpError(error.status, `Failed to save a secret: ${error.message}`, { condition: error.condition });
|
|
721
816
|
throw error;
|
|
722
817
|
}
|
|
723
|
-
return { ok: true, key: result.key, written: [...result.written, ...secretFields.map((field) => field.key)], settings: pluginSettingsFieldsView(ctx, result.fields) };
|
|
818
|
+
return { ok: true, key: result.key, runtime_application: result.runtime_application ?? 'restart_required', written: [...result.written, ...secretFields.map((field) => field.key)], settings: pluginSettingsFieldsView(ctx, result.fields) };
|
|
724
819
|
}))),
|
|
820
|
+
pluginOAuthRedirect: os.pluginOAuthRedirect.handler(({ input, context: { ctx } }) => run(async () => {
|
|
821
|
+
// Only this flow's own answer reaches the sidecar: its loopback address and its `state`.
|
|
822
|
+
const verdict = checkPastedRedirect(input.flow_id, home(ctx), input.url);
|
|
823
|
+
if (verdict === 'unknown')
|
|
824
|
+
throw new HttpError(404, 'Unknown or expired sign-in.', { condition: 'oauth_flow_not_found' });
|
|
825
|
+
if (verdict === 'invalid')
|
|
826
|
+
throw new HttpError(400, 'That is not the address this sign-in sends the browser back to.', { condition: 'oauth_redirect_invalid' });
|
|
827
|
+
return oauthView(await oauthCall(ctx, 'oauth.submit_redirect', { profile_home: home(ctx), flow_id: input.flow_id, url: input.url }));
|
|
828
|
+
})),
|
|
829
|
+
pluginOAuthLogout: os.pluginOAuthLogout.handler(({ input, context: { ctx } }) => run(async () => {
|
|
830
|
+
try {
|
|
831
|
+
const result = await runningSidecar(ctx).call('plugins.oauth_logout', { profile_home: home(ctx), key: input.key, id: input.id });
|
|
832
|
+
return { ok: true, removed: result.removed };
|
|
833
|
+
}
|
|
834
|
+
catch (error) {
|
|
835
|
+
if (error instanceof SidecarError && error.condition === 'oauth_unsupported')
|
|
836
|
+
throw new HttpError(409, error.message, { condition: error.condition });
|
|
837
|
+
return failure(error);
|
|
838
|
+
}
|
|
839
|
+
})),
|
|
725
840
|
updates: {
|
|
726
841
|
check: os.updates.check.handler(({ context: { ctx } }) => run(async () => {
|
|
727
842
|
const settings = (await ctx.deps.settings.load());
|
|
@@ -748,7 +863,7 @@ export const toolsRouter = os.router({
|
|
|
748
863
|
list: os.updateNotifications.list.handler(({ input, context: { ctx } }) => run(async () => {
|
|
749
864
|
const scope = await updateNotificationScope(ctx, input.tab_id);
|
|
750
865
|
const frontendBuild = (await ctx.deps.updateNotifications.syncTabBuild(scope, input.loaded_build ?? null, ctx.deps.spa.buildId()));
|
|
751
|
-
return { ...(await ctx.deps.updateNotifications.list(scope)), frontend_build: frontendBuild };
|
|
866
|
+
return { ...(await ctx.deps.updateNotifications.list(scope, frontendBuild.refresh_required)), frontend_build: frontendBuild };
|
|
752
867
|
})),
|
|
753
868
|
read: os.updateNotifications.read.handler(({ input, context: { ctx } }) => run(async () => {
|
|
754
869
|
const notification = (await ctx.deps.updateNotifications.read(await updateNotificationScope(ctx, input.tab_id), input.id));
|
|
@@ -765,7 +880,7 @@ export const toolsRouter = os.router({
|
|
|
765
880
|
clear: os.updateNotifications.clear.handler(({ input, context: { ctx } }) => run(async () => {
|
|
766
881
|
const scope = await updateNotificationScope(ctx, input.tab_id);
|
|
767
882
|
const frontendBuild = (await ctx.deps.updateNotifications.syncTabBuild(scope, input.loaded_build ?? null, ctx.deps.spa.buildId()));
|
|
768
|
-
return { ...(await ctx.deps.updateNotifications.clear(scope)), frontend_build: frontendBuild };
|
|
883
|
+
return { ...(await ctx.deps.updateNotifications.clear(scope, frontendBuild.refresh_required)), frontend_build: frontendBuild };
|
|
769
884
|
})),
|
|
770
885
|
cancel: os.updateNotifications.cancel.handler(({ input, context: { ctx } }) => run(async () => {
|
|
771
886
|
const notification = (await ctx.deps.updateNotifications.cancelUpdate(await updateNotificationScope(ctx), input.id));
|
|
@@ -774,7 +889,14 @@ export const toolsRouter = os.router({
|
|
|
774
889
|
return notification;
|
|
775
890
|
})),
|
|
776
891
|
action: os.updateNotifications.action.handler(({ input, context: { ctx } }) => run(async () => {
|
|
777
|
-
const
|
|
892
|
+
const scope = await updateNotificationScope(ctx, input.tab_id);
|
|
893
|
+
// TAL-1274: an auto-prune answer runs the Agent's /autoprune for the profile before the question records it.
|
|
894
|
+
const answer = await ctx.deps.pruneAdvice.answer(scope, input.id, input.action_id, home(ctx));
|
|
895
|
+
if (answer && 'refused' in answer)
|
|
896
|
+
throw new HttpError(409, answer.refused);
|
|
897
|
+
if (answer)
|
|
898
|
+
return answer.notification;
|
|
899
|
+
const notification = (await ctx.deps.updateNotifications.action(scope, input.id, input.action_id));
|
|
778
900
|
if (!notification)
|
|
779
901
|
throw new HttpError(404, 'Notification action not found');
|
|
780
902
|
if (input.action_id === GATEWAY_RESTART_NOW)
|