@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/tools/updates.js
CHANGED
|
@@ -651,7 +651,7 @@ async function applyNpmWebUpdate(webRoot, channel, getJson, id, npmRun, canApply
|
|
|
651
651
|
}
|
|
652
652
|
if (!chosen.npm)
|
|
653
653
|
return { ok: false, manual_update: true, message: 'The completed Stable release does not include an npm package identity.' };
|
|
654
|
-
target = { version: chosen.version, sourceRevision: chosen.sourceRevision, label: `npm release ${chosen.version}`, matches: (r) => same(r, chosen.runtime), npm: chosen.npm };
|
|
654
|
+
target = { tag: chosen.tag, version: chosen.version, sourceRevision: chosen.sourceRevision, label: `npm release ${chosen.version}`, matches: (r) => same(r, chosen.runtime), npm: chosen.npm };
|
|
655
655
|
if (!switching) {
|
|
656
656
|
if (!canApply())
|
|
657
657
|
return { ok: false, message: 'Web update deferred because its settings or lifecycle changed.' };
|
|
@@ -674,7 +674,7 @@ async function applyNpmWebUpdate(webRoot, channel, getJson, id, npmRun, canApply
|
|
|
674
674
|
}
|
|
675
675
|
const identity = { tag: release.tag, version: release.version, sourceRevision: release.sourceRevision, releaseSet: release.sourceRevision };
|
|
676
676
|
// validateReleaseInfo (in diskRelease) already applies Stable's contract and Agent-pin checks to the packaged files.
|
|
677
|
-
target = { version: release.version, sourceRevision: release.sourceRevision, label: `Experimental ${release.version}`, matches: (r) => r !== null && same({ tag: r.tag, version: r.version, sourceRevision: r.sourceRevision, releaseSet: r.releaseSet }, identity), experimental: release };
|
|
677
|
+
target = { tag: release.tag, version: release.version, sourceRevision: release.sourceRevision, label: `Experimental ${release.version}`, matches: (r) => r !== null && same({ tag: r.tag, version: r.version, sourceRevision: r.sourceRevision, releaseSet: r.releaseSet }, identity), experimental: release };
|
|
678
678
|
}
|
|
679
679
|
const priorRollback = readUpdateRollback(packaged.stateDir);
|
|
680
680
|
if (packaged.skipFailedVersion && priorRollback?.failedVersion === target.version)
|
|
@@ -683,7 +683,7 @@ async function applyNpmWebUpdate(webRoot, channel, getJson, id, npmRun, canApply
|
|
|
683
683
|
if (current) {
|
|
684
684
|
if (same(id.release(), onDisk))
|
|
685
685
|
return { ok: true, up_to_date: true, target: 'webui', channel, message: channel === 'stable' ? 'Talaria Web already contains the selected npm release.' : `Talaria Web already contains ${target.label}.` };
|
|
686
|
-
return { ok: true, target: 'webui', channel, sourceRevision: target.sourceRevision, ...(target.npm ? { npm: target.npm } : {}), message: `Restarting Talaria Web with ${target.label}.` };
|
|
686
|
+
return { ok: true, target: 'webui', channel, tag: target.tag, sourceRevision: target.sourceRevision, ...(target.npm ? { npm: target.npm } : {}), message: `Restarting Talaria Web with ${target.label}.` };
|
|
687
687
|
}
|
|
688
688
|
if (!canApply())
|
|
689
689
|
return { ok: false, message: 'Web update deferred because its settings or lifecycle changed.' };
|
|
@@ -771,7 +771,7 @@ async function applyNpmWebUpdate(webRoot, channel, getJson, id, npmRun, canApply
|
|
|
771
771
|
catch { /* a leftover staging directory must not prevent restart after a verified switch */ }
|
|
772
772
|
}
|
|
773
773
|
}
|
|
774
|
-
return { ok: true, target: 'webui', channel, sourceRevision: target.sourceRevision, ...(target.npm ? { npm: target.npm } : {}),
|
|
774
|
+
return { ok: true, target: 'webui', channel, tag: target.tag, sourceRevision: target.sourceRevision, ...(target.npm ? { npm: target.npm } : {}),
|
|
775
775
|
...(switching ? { channel_switch: true, backup_dir: stores } : {}), message: `Updated Talaria Web to ${target.label}.${stores ? ` Settings were backed up to ${stores}.` : ''}` };
|
|
776
776
|
}
|
|
777
777
|
/** Python `apply_web_update`: installs npm releases; a source checkout is never mutated (TAL-379). */
|
|
@@ -796,6 +796,47 @@ async function currentReleaseTag(path, git) {
|
|
|
796
796
|
const out = await git(['describe', '--tags', '--exact-match', '--match', AGENT_TAG_GLOB, 'HEAD'], path);
|
|
797
797
|
return out.ok && out.out ? out.out : null;
|
|
798
798
|
}
|
|
799
|
+
/** TAL-1525: the checkout's installed identity, retained local-edit recovery, and distance to an already-known target, from local Git only. */
|
|
800
|
+
async function installedAgentIdentity(path, latest, git) {
|
|
801
|
+
if (!path)
|
|
802
|
+
return null;
|
|
803
|
+
const head = await git(['rev-parse', 'HEAD'], path);
|
|
804
|
+
if (!head.ok || !SHA.test(head.out))
|
|
805
|
+
return null;
|
|
806
|
+
let pending;
|
|
807
|
+
try {
|
|
808
|
+
pending = await pendingAutostashes(path, git);
|
|
809
|
+
}
|
|
810
|
+
catch {
|
|
811
|
+
return null;
|
|
812
|
+
} // Uninspectable recovery keeps the cached answer.
|
|
813
|
+
const installed = { current_sha: head.out, current_version: await currentReleaseTag(path, git) ?? head.out.slice(0, 12), ...(pending.length ? RETAINED_LOCAL_EDITS : {}) };
|
|
814
|
+
if (typeof latest !== 'string' || !SHA.test(latest) || latest === head.out)
|
|
815
|
+
return installed;
|
|
816
|
+
const count = await git(['rev-list', '--count', `${head.out}..${latest}`], path);
|
|
817
|
+
return { ...installed, behind: count.ok && /^\d+$/.test(count.out) ? Number.parseInt(count.out, 10) : null };
|
|
818
|
+
}
|
|
819
|
+
/** TAL-1525: a cached target re-anchored on its installed identity; only cached releases newer than it stay offered. */
|
|
820
|
+
function reanchored(info, installed) {
|
|
821
|
+
const next = { ...info };
|
|
822
|
+
// The installed identity re-asserts whatever recovery it still owes.
|
|
823
|
+
delete next.message;
|
|
824
|
+
delete next.metadata_repair;
|
|
825
|
+
delete next.channel_switch;
|
|
826
|
+
Object.assign(next, installed);
|
|
827
|
+
const versions = Array.isArray(info.versions) ? info.versions.map(dict) : [];
|
|
828
|
+
const at = versions.findIndex((v) => v.version === installed.current_version || (typeof v.sha === 'string' && v.sha === installed.current_sha));
|
|
829
|
+
if (at >= 0)
|
|
830
|
+
next.versions = versions.slice(0, at);
|
|
831
|
+
if (installed.current_sha === info.latest_sha) {
|
|
832
|
+
next.behind = 0;
|
|
833
|
+
next.versions = [];
|
|
834
|
+
delete next.manual_update;
|
|
835
|
+
}
|
|
836
|
+
else if (installed.behind === undefined)
|
|
837
|
+
next.behind = at >= 0 ? at : null;
|
|
838
|
+
return next;
|
|
839
|
+
}
|
|
799
840
|
async function verifiedAgentIdentity(path, expectedRevision, git) {
|
|
800
841
|
const head = await git(['rev-parse', 'HEAD'], path);
|
|
801
842
|
if (!head.ok || head.out !== expectedRevision || !SHA.test(head.out))
|
|
@@ -875,6 +916,8 @@ async function agentTarget(path, git, channel, version, published) {
|
|
|
875
916
|
...(manual ? { manual_update: true, message: 'Agent checkout is ahead of or divergent from this channel; refusing to rewind it.' } : {}),
|
|
876
917
|
};
|
|
877
918
|
}
|
|
919
|
+
/** TAL-1429: the Agent update waits for the gateways' own native drain instead of interrupting their work. */
|
|
920
|
+
export const gatewayDrainDetail = (services, seconds) => `Waiting for ${services.length ? services.join(', ') : 'the gateway'} to finish in-flight work before installing (up to ${String(Math.max(1, Math.ceil(seconds / 60)))} min).`;
|
|
878
921
|
/** Only an exact verified revision is supported: a moved tag, a non-tag HEAD, Experimental `main` and a missing record are all unchecked. */
|
|
879
922
|
const agentSupport = (sha, policy) => typeof sha === 'string' && SHA.test(sha) && policy.supportedRevisions.includes(sha) ? 'supported' : 'unchecked';
|
|
880
923
|
const SUPPORT_LABELS = { supported: 'Supported', unchecked: 'Not tested with this Talaria' };
|
|
@@ -905,6 +948,7 @@ async function isDirty(path, git) {
|
|
|
905
948
|
return !out.ok && (out.out === 'git exited with status 1' || !out.out || out.out.startsWith('git exited with status '));
|
|
906
949
|
}
|
|
907
950
|
/** Fetch and compare the independently selected Agent channel. */
|
|
951
|
+
const RETAINED_LOCAL_EDITS = { metadata_repair: true, message: 'Local Agent changes need recovery. Their saved recovery records are retained.' };
|
|
908
952
|
export async function checkAgentUpdate(path, git, channel = DEFAULT_CHANNEL, published) {
|
|
909
953
|
if (!path || !existsSync(join(path, '.git')))
|
|
910
954
|
return { name: 'agent', behind: null, no_git: true };
|
|
@@ -916,7 +960,7 @@ export async function checkAgentUpdate(path, git, channel = DEFAULT_CHANNEL, pub
|
|
|
916
960
|
try {
|
|
917
961
|
const pending = await pendingAutostashes(path, git);
|
|
918
962
|
return { ...await agentTarget(path, git, channel, undefined, published), dirty: await isDirty(path, git),
|
|
919
|
-
...(pending.length ?
|
|
963
|
+
...(pending.length ? RETAINED_LOCAL_EDITS : {}) };
|
|
920
964
|
}
|
|
921
965
|
catch (error) {
|
|
922
966
|
return { name: 'agent', channel, behind: null, error: error.message };
|
|
@@ -1026,7 +1070,7 @@ async function withAgentMutation(path, info, git, policy, mutate, mode = 'source
|
|
|
1026
1070
|
if (preflight)
|
|
1027
1071
|
return preflight;
|
|
1028
1072
|
try {
|
|
1029
|
-
const result = await policy.withMutation(path, str(info.latest_sha), guarded);
|
|
1073
|
+
const result = await policy.withMutation(path, str(info.latest_sha), guarded, str(info.current_sha));
|
|
1030
1074
|
return result.refresh_confirmation ? { ...result, target: 'agent', confirmation_required: true, candidate_revision: info.latest_sha, agent_channel: info.channel } : result;
|
|
1031
1075
|
}
|
|
1032
1076
|
catch (error) {
|
|
@@ -1458,6 +1502,9 @@ async function syncAgentDependencies(path, revision, sync, stateDir, git, clearI
|
|
|
1458
1502
|
return result;
|
|
1459
1503
|
}
|
|
1460
1504
|
const RECOVERY_DELAYS = [0, 1000, 4000, 15000, 60000, 120000];
|
|
1505
|
+
/** TAL-1430: re-check spacing for a native drain, and the lightweight lifecycle probe of exhausted debt. */
|
|
1506
|
+
const RECOVERY_DRAIN_RETRY_MS = 15000;
|
|
1507
|
+
const RECOVERY_PROBE_MS = 60000;
|
|
1461
1508
|
export class UpdateService {
|
|
1462
1509
|
deps;
|
|
1463
1510
|
recoveryTimer = null;
|
|
@@ -1465,12 +1512,19 @@ export class UpdateService {
|
|
|
1465
1512
|
recoveryUnsubscribe = null;
|
|
1466
1513
|
recoveryAttempt = 0;
|
|
1467
1514
|
recoveryFingerprint = '';
|
|
1515
|
+
recoveryDraining = false;
|
|
1516
|
+
/** The pending timer is an exhausted obligation's lightweight probe, which any immediate trigger may replace. */
|
|
1517
|
+
recoveryProbe = false;
|
|
1468
1518
|
recovery = { phase: 'idle', attempt: 0, detail: '', retry_at: null };
|
|
1469
1519
|
cache = { webui: null, agent: null, checked_at: 0, include_agent: true, channel: DEFAULT_CHANNEL, agent_channel: DEFAULT_CHANNEL };
|
|
1470
1520
|
checking = null;
|
|
1471
1521
|
checkingKey = null;
|
|
1472
1522
|
lastGood = new Map();
|
|
1473
1523
|
applying = false;
|
|
1524
|
+
/** TAL-1525: a forced check owed once the current apply releases its lock. */
|
|
1525
|
+
refreshOwed = false;
|
|
1526
|
+
/** TAL-1525: the Web package installed for the pending restart; this process still runs the old one. */
|
|
1527
|
+
installedWeb = null;
|
|
1474
1528
|
autoTimer = null;
|
|
1475
1529
|
autoStarted = false;
|
|
1476
1530
|
lifecycle = 0;
|
|
@@ -1570,11 +1624,12 @@ export class UpdateService {
|
|
|
1570
1624
|
supportedRevision: str(supported.sourceRevision), supportedVersion: str(supported.version), ...(options.confirmedRevision ? { confirmedRevision: options.confirmedRevision } : {}),
|
|
1571
1625
|
...(this.deps.agentHomes ? { retainedStateHomes: this.deps.agentHomes } : {}),
|
|
1572
1626
|
repairPending: Boolean(marker && existsSync(marker)),
|
|
1573
|
-
...(this.deps.agentMutation ? { withMutation: async (path, revision, mutate) => {
|
|
1627
|
+
...(this.deps.agentMutation ? { withMutation: async (path, revision, mutate, baseline) => {
|
|
1628
|
+
await options.onTransaction?.(baseline, revision);
|
|
1574
1629
|
const result = await this.deps.agentMutation(path, revision, async (git, sync) => {
|
|
1575
1630
|
const applied = await mutate(git);
|
|
1576
1631
|
return applied.ok ? this.finishAgent(applied, path, sync, false) : applied;
|
|
1577
|
-
}, { refreshToken: options.refreshToken, mutationIntent: options.mutationIntent ? JSON.stringify([options.mutationIntent, force, options.agentChannel ?? this.agentChannel(), options.version ?? '', options.confirmedRevision ?? '']) : undefined });
|
|
1632
|
+
}, { operationId: options.operationId, baseline, refreshToken: options.refreshToken, onProgress: options.onProgress, mutationIntent: options.mutationIntent ? JSON.stringify([options.mutationIntent, force, options.agentChannel ?? this.agentChannel(), options.version ?? '', options.confirmedRevision ?? '']) : undefined });
|
|
1578
1633
|
if (result.ok && !retainRuntimeIntent) {
|
|
1579
1634
|
const intent = agentSyncMarker(path, this.deps.stateDir);
|
|
1580
1635
|
try {
|
|
@@ -1645,7 +1700,13 @@ export class UpdateService {
|
|
|
1645
1700
|
if (this.deps.refreshWebuiVersion)
|
|
1646
1701
|
webui.current_version = this.deps.refreshWebuiVersion();
|
|
1647
1702
|
const agentDir = this.deps.agentDir();
|
|
1648
|
-
|
|
1703
|
+
let agent = includeAgent ? this.keepLastGood('agent', agentChannel, await checkAgentUpdate(agentDir, this.git, agentChannel, this.publishedTag)) : ignoredAgent();
|
|
1704
|
+
// A fetch failure keeps the last good remote answer, never its outdated installed identity.
|
|
1705
|
+
if (agent.stale_check && agent.latest_sha) {
|
|
1706
|
+
const installed = await installedAgentIdentity(agentDir, agent.latest_sha, this.git);
|
|
1707
|
+
if (installed)
|
|
1708
|
+
agent = reanchored(agent, installed);
|
|
1709
|
+
}
|
|
1649
1710
|
const marker = agentSyncMarker(agentDir, this.deps.stateDir);
|
|
1650
1711
|
if (includeAgent && marker && existsSync(marker)) {
|
|
1651
1712
|
Object.assign(agent, { metadata_repair: true, message: this.recovery.phase === 'blocked' ? this.recovery.detail || 'Agent update recovery needs attention.' : 'Agent update recovery is incomplete. Recovery will retry automatically when it is safe.' });
|
|
@@ -1655,7 +1716,7 @@ export class UpdateService {
|
|
|
1655
1716
|
Object.assign(agent, agentWarning(agent, policy));
|
|
1656
1717
|
if (Array.isArray(agent.versions))
|
|
1657
1718
|
agent.versions = agent.versions.map((v) => ({ ...dict(v), ...supportOf(dict(v).sha, policy) }));
|
|
1658
|
-
Object.assign(this.cache, { webui, agent, checked_at: this.now(), include_agent: includeAgent, channel, agent_channel: agentChannel });
|
|
1719
|
+
Object.assign(this.cache, { webui: this.installedWeb ? reanchored(webui, this.installedWeb) : webui, agent, checked_at: this.now(), include_agent: includeAgent, channel, agent_channel: agentChannel });
|
|
1659
1720
|
this.preGenerateSummaries(this.cache);
|
|
1660
1721
|
return this.statusSnapshot();
|
|
1661
1722
|
}
|
|
@@ -1678,6 +1739,31 @@ export class UpdateService {
|
|
|
1678
1739
|
const prior = this.lastGood.get(key);
|
|
1679
1740
|
return prior && this.now() - prior.at < CACHE_TTL_S ? { ...prior.result, stale_check: true } : result;
|
|
1680
1741
|
}
|
|
1742
|
+
/**
|
|
1743
|
+
* TAL-1525: an apply or recovery settled, so the cached target is re-anchored on its installed identity
|
|
1744
|
+
* at once (local reads only) and one forced check follows in the background once no apply holds the lock.
|
|
1745
|
+
*/
|
|
1746
|
+
async invalidate(target, applied) {
|
|
1747
|
+
this.cache.checked_at = 0;
|
|
1748
|
+
if (target === 'webui' && applied)
|
|
1749
|
+
this.installedWeb = { current_sha: applied.sourceRevision ?? null, current_version: applied.tag };
|
|
1750
|
+
const installed = target === 'webui' ? this.installedWeb : await installedAgentIdentity(this.deps.agentDir(), dict(this.cache.agent).latest_sha, this.git);
|
|
1751
|
+
const cached = this.cache[target];
|
|
1752
|
+
if (installed && cached && cached.ignored !== true)
|
|
1753
|
+
this.cache[target] = reanchored(cached, installed);
|
|
1754
|
+
if (this.deps.checkEnabled?.() === false)
|
|
1755
|
+
return;
|
|
1756
|
+
this.refreshOwed = true;
|
|
1757
|
+
if (!this.applying)
|
|
1758
|
+
this.refreshOwedCheck();
|
|
1759
|
+
}
|
|
1760
|
+
/** Starts the owed check; a check already in flight for the same key answers it. */
|
|
1761
|
+
refreshOwedCheck() {
|
|
1762
|
+
if (!this.refreshOwed)
|
|
1763
|
+
return;
|
|
1764
|
+
this.refreshOwed = false;
|
|
1765
|
+
void this.check(true).catch((error) => { this.deps.log(`[updates] refresh after update failed: ${error.message}`); });
|
|
1766
|
+
}
|
|
1681
1767
|
startAutoApply(intervalMs = AUTO_UPDATE_INTERVAL_MS) {
|
|
1682
1768
|
if (this.autoStarted || this.autoRestartScheduled)
|
|
1683
1769
|
return;
|
|
@@ -1713,14 +1799,22 @@ export class UpdateService {
|
|
|
1713
1799
|
if (this.recoveryTimer)
|
|
1714
1800
|
clearTimeout(this.recoveryTimer);
|
|
1715
1801
|
this.recoveryTimer = null;
|
|
1802
|
+
this.recoveryProbe = false;
|
|
1803
|
+
this.recoveryDraining = false;
|
|
1716
1804
|
this.recoveryAbort?.abort();
|
|
1717
1805
|
this.recoveryUnsubscribe?.();
|
|
1718
1806
|
this.recoveryUnsubscribe = null;
|
|
1719
1807
|
}
|
|
1720
1808
|
/** One sequence owns its timer and RPC; unchanged permanent debt cannot restart it. */
|
|
1721
1809
|
armRecovery() {
|
|
1722
|
-
if (!this.deps.recoverAgent || !this.deps.agentDir()
|
|
1810
|
+
if (!this.deps.recoverAgent || (!this.deps.agentDir() && !this.deps.hasPendingRecovery?.()) || this.recoveryAbort || !this.autoStarted)
|
|
1723
1811
|
return;
|
|
1812
|
+
if (this.recoveryTimer) {
|
|
1813
|
+
if (!this.recoveryProbe)
|
|
1814
|
+
return;
|
|
1815
|
+
clearTimeout(this.recoveryTimer);
|
|
1816
|
+
}
|
|
1817
|
+
this.recoveryProbe = false;
|
|
1724
1818
|
const lifecycle = this.lifecycle;
|
|
1725
1819
|
this.recoveryTimer = setTimeout(() => {
|
|
1726
1820
|
this.recoveryTimer = null;
|
|
@@ -1729,6 +1823,9 @@ export class UpdateService {
|
|
|
1729
1823
|
this.recoveryTimer.unref();
|
|
1730
1824
|
}
|
|
1731
1825
|
async publishRecovery() {
|
|
1826
|
+
const operation = this.recovery.operation;
|
|
1827
|
+
if (operation?.attempt_error)
|
|
1828
|
+
this.recovery = { ...this.recovery, operation: { ...operation, attempt_error: sanitizeGitDiagnostic(operation.attempt_error, 2000) } };
|
|
1732
1829
|
try {
|
|
1733
1830
|
await this.deps.recoveryChanged?.(this.recovery);
|
|
1734
1831
|
}
|
|
@@ -1742,41 +1839,59 @@ export class UpdateService {
|
|
|
1742
1839
|
const current = () => !abort.signal.aborted && lifecycle === this.lifecycle && this.autoStarted;
|
|
1743
1840
|
let retry = false;
|
|
1744
1841
|
let retryDelay = 1000;
|
|
1745
|
-
|
|
1842
|
+
let probeOnly = false;
|
|
1843
|
+
let ran = false;
|
|
1844
|
+
let publish = true;
|
|
1845
|
+
let operationId = this.deps.pendingRecoveryOperation?.();
|
|
1846
|
+
let operation;
|
|
1847
|
+
const waitWithoutSpending = (detail, delay = 1000) => {
|
|
1746
1848
|
retry = true;
|
|
1849
|
+
retryDelay = delay;
|
|
1747
1850
|
this.recovery = { phase: 'waiting', attempt: this.recoveryAttempt, detail, retry_at: new Date(this.now() * 1000 + retryDelay).toISOString() };
|
|
1748
1851
|
};
|
|
1749
1852
|
try {
|
|
1750
1853
|
if (this.applying || this.deps.gatewayRestarting?.()) {
|
|
1751
1854
|
retry = true;
|
|
1855
|
+
publish = false;
|
|
1752
1856
|
return;
|
|
1753
1857
|
}
|
|
1754
1858
|
const probe = await this.deps.recoverAgent(true, abort.signal);
|
|
1755
1859
|
if (!current())
|
|
1756
1860
|
return;
|
|
1861
|
+
operation = !operationId || probe.operation?.operation_id === operationId ? probe.operation : undefined;
|
|
1862
|
+
operationId ??= operation?.operation_id;
|
|
1757
1863
|
if (probe.waiting_for_idle) {
|
|
1758
|
-
|
|
1864
|
+
waitWithoutSpending(probe.detail);
|
|
1759
1865
|
return;
|
|
1760
1866
|
}
|
|
1761
1867
|
if (!probe.owed && ['idle', 'complete'].includes(this.recovery.phase) && !this.deps.hasPendingRecovery?.())
|
|
1762
1868
|
return;
|
|
1763
1869
|
if (probe.fingerprint !== this.recoveryFingerprint && ['idle', 'complete', 'blocked'].includes(this.recovery.phase))
|
|
1764
1870
|
this.recoveryAttempt = 0;
|
|
1765
|
-
if (probe.owed && this.recovery.phase === 'blocked' && this.recoveryAttempt >= RECOVERY_DELAYS.length && probe.fingerprint === this.recoveryFingerprint)
|
|
1871
|
+
if (probe.owed && this.recovery.phase === 'blocked' && this.recoveryAttempt >= RECOVERY_DELAYS.length && probe.fingerprint === this.recoveryFingerprint) {
|
|
1872
|
+
// Exhausted debt keeps a cheap probe; a changed receipt or attested gateway lifecycle rearms the sequence.
|
|
1873
|
+
retry = probeOnly = true;
|
|
1874
|
+
retryDelay = RECOVERY_PROBE_MS;
|
|
1766
1875
|
return;
|
|
1876
|
+
}
|
|
1767
1877
|
this.recoveryFingerprint = probe.fingerprint;
|
|
1768
1878
|
this.recoveryAttempt += 1;
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
if (!
|
|
1772
|
-
|
|
1879
|
+
ran = true;
|
|
1880
|
+
// A re-check of a still-draining gateway keeps its waiting notice rather than flapping to running.
|
|
1881
|
+
if (!this.recoveryDraining) {
|
|
1882
|
+
this.recovery = { phase: 'running', attempt: this.recoveryAttempt, detail: '', retry_at: null, ...(operationId ? { operation_id: operationId } : {}), ...(operation ? { operation } : {}) };
|
|
1883
|
+
await this.publishRecovery();
|
|
1884
|
+
if (!current())
|
|
1885
|
+
return;
|
|
1886
|
+
}
|
|
1773
1887
|
const result = await this.deps.recoverAgent(false, abort.signal);
|
|
1774
1888
|
if (!current())
|
|
1775
1889
|
return;
|
|
1776
1890
|
this.recoveryFingerprint = result.fingerprint;
|
|
1777
|
-
|
|
1891
|
+
this.recoveryDraining = result.draining === true;
|
|
1892
|
+
if (result.waiting_for_idle || result.draining) {
|
|
1778
1893
|
this.recoveryAttempt -= 1;
|
|
1779
|
-
|
|
1894
|
+
waitWithoutSpending(result.detail, result.draining ? RECOVERY_DRAIN_RETRY_MS : 1000);
|
|
1780
1895
|
return;
|
|
1781
1896
|
}
|
|
1782
1897
|
if (result.local_restore && result.revision) {
|
|
@@ -1794,21 +1909,27 @@ export class UpdateService {
|
|
|
1794
1909
|
}
|
|
1795
1910
|
if (!result.ok || result.owed)
|
|
1796
1911
|
throw new Error(result.detail || 'Agent recovery remains unverified.');
|
|
1797
|
-
this.
|
|
1798
|
-
this.recovery = { phase: 'complete', attempt: this.recoveryAttempt, detail: 'Agent service and runtime recovery is verified.
|
|
1912
|
+
await this.invalidate('agent');
|
|
1913
|
+
this.recovery = { phase: 'complete', attempt: this.recoveryAttempt, detail: 'Agent service and runtime recovery is verified.', retry_at: null, ...(result.operation ? { operation: result.operation } : {}), ...(result.revision ? { verified_revision: result.revision } : {}), ...(result.runtime_revision ? { runtime_revision: result.runtime_revision } : {}), ...(result.verified_version ? { verified_version: result.verified_version } : {}) };
|
|
1799
1914
|
}
|
|
1800
1915
|
catch (error) {
|
|
1801
1916
|
if (!current())
|
|
1802
1917
|
return;
|
|
1803
|
-
|
|
1804
|
-
|
|
1918
|
+
this.recoveryDraining = false;
|
|
1919
|
+
// A failed discovery also consumes the bounded sequence; an exhausted probe's failure does not extend it.
|
|
1920
|
+
if (!ran && this.recoveryAttempt < RECOVERY_DELAYS.length)
|
|
1805
1921
|
this.recoveryAttempt += 1;
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1922
|
+
const exhausted = this.recoveryAttempt >= RECOVERY_DELAYS.length;
|
|
1923
|
+
this.recovery = { phase: exhausted ? 'blocked' : 'waiting', attempt: this.recoveryAttempt, detail: sanitizeGitDiagnostic(error.message), retry_at: null };
|
|
1924
|
+
retry = true;
|
|
1925
|
+
probeOnly = exhausted;
|
|
1926
|
+
retryDelay = exhausted ? RECOVERY_PROBE_MS : RECOVERY_DELAYS[this.recoveryAttempt] ?? 1000;
|
|
1927
|
+
if (!exhausted)
|
|
1928
|
+
this.recovery.retry_at = new Date(this.now() * 1000 + retryDelay).toISOString();
|
|
1809
1929
|
}
|
|
1810
1930
|
finally {
|
|
1811
|
-
if (current()) {
|
|
1931
|
+
if (current() && publish) {
|
|
1932
|
+
this.recovery = { ...this.recovery, ...(operationId ? { operation_id: operationId } : {}), ...(operation && !this.recovery.operation ? { operation } : {}) };
|
|
1812
1933
|
await this.publishRecovery();
|
|
1813
1934
|
}
|
|
1814
1935
|
if (this.recoveryAbort === abort)
|
|
@@ -1816,7 +1937,8 @@ export class UpdateService {
|
|
|
1816
1937
|
if (this.autoStarted && lifecycle !== this.lifecycle)
|
|
1817
1938
|
this.armRecovery();
|
|
1818
1939
|
if (current() && retry) {
|
|
1819
|
-
this.
|
|
1940
|
+
this.recoveryProbe = probeOnly;
|
|
1941
|
+
this.recoveryTimer = setTimeout(() => { this.recoveryTimer = null; this.recoveryProbe = false; void this.recoverOnce(lifecycle); }, retryDelay);
|
|
1820
1942
|
this.recoveryTimer.unref();
|
|
1821
1943
|
}
|
|
1822
1944
|
}
|
|
@@ -1904,6 +2026,7 @@ export class UpdateService {
|
|
|
1904
2026
|
}
|
|
1905
2027
|
finally {
|
|
1906
2028
|
this.applying = false;
|
|
2029
|
+
this.refreshOwedCheck();
|
|
1907
2030
|
this.armRecovery();
|
|
1908
2031
|
}
|
|
1909
2032
|
}
|
|
@@ -1928,7 +2051,7 @@ export class UpdateService {
|
|
|
1928
2051
|
const result = await applyWebUpdate(this.deps.webRoot, channel, this.git, this.deps.getJson, this.deps.identity, this.deps.npm ?? runPackageNpm, canApply, { registry: this.deps.experimental, stateDir: this.deps.stateDir, skipFailedVersion: options.skipFailedVersion }, options.version);
|
|
1929
2052
|
// Settings can cancel before mutation, but a committed replacement must finish restarting unless shutting down.
|
|
1930
2053
|
if (result.ok && !result.up_to_date && lifecycle === this.lifecycle) {
|
|
1931
|
-
this.
|
|
2054
|
+
await this.invalidate('webui', result);
|
|
1932
2055
|
this.autoRestartScheduled = true;
|
|
1933
2056
|
this.stopAutoApply();
|
|
1934
2057
|
this.deps.scheduleRestart();
|
|
@@ -1968,24 +2091,34 @@ export class UpdateService {
|
|
|
1968
2091
|
return verified ? { ok: true, target: 'agent', up_to_date: false, message: 'Agent update recovery completed.', ...verified }
|
|
1969
2092
|
: { ok: false, message: 'Agent recovery could not verify the current source.' };
|
|
1970
2093
|
}, 'repair');
|
|
2094
|
+
// Repairing an older transaction cannot prove this request installed its selected release.
|
|
2095
|
+
if (options.operationId)
|
|
2096
|
+
result = { ...result, recovery_only: true };
|
|
1971
2097
|
}
|
|
1972
2098
|
else {
|
|
1973
2099
|
result = force
|
|
1974
2100
|
? await forceAgentUpdate(path, this.git, this.deps.log, options.agentChannel ?? this.agentChannel(), this.agentPolicy(options, force), options.version, this.publishedTag)
|
|
1975
2101
|
: await applyAgentUpdate(path, this.git, options.agentChannel ?? this.agentChannel(), this.agentPolicy(options, force), options.version, this.publishedTag);
|
|
1976
2102
|
}
|
|
2103
|
+
if (result.ok !== true && result.recovery_required !== false && !result.confirmation_required && await options.onFailure?.(result.message || result.error, typeof result.verified_revision === 'string' ? { revision: result.verified_revision, version: typeof result.verified_version === 'string' ? result.verified_version : null } : undefined))
|
|
2104
|
+
result.recovery_pending = true;
|
|
1977
2105
|
if (this.deps.agentMutation) {
|
|
1978
2106
|
if (result.ok && result.restart_scheduled) {
|
|
1979
2107
|
this.autoRestartScheduled = true;
|
|
1980
2108
|
this.stopAutoApply();
|
|
1981
2109
|
this.deps.scheduleRestart();
|
|
1982
2110
|
}
|
|
1983
|
-
return result;
|
|
1984
2111
|
}
|
|
1985
|
-
|
|
2112
|
+
else if (result.ok)
|
|
2113
|
+
result = await this.finishAgent(result, path);
|
|
2114
|
+
// A failure can still leave Git advanced (a failed dependency sync), so the next check refetches.
|
|
2115
|
+
if (result.ok)
|
|
2116
|
+
await this.invalidate('agent');
|
|
2117
|
+
else
|
|
2118
|
+
this.cache.checked_at = 0;
|
|
2119
|
+
return result;
|
|
1986
2120
|
}
|
|
1987
2121
|
async finishAgent(result, path, sync = this.deps.agentSync, restart = true) {
|
|
1988
|
-
this.cache.checked_at = 0;
|
|
1989
2122
|
const marker = agentSyncMarker(path, this.deps.stateDir);
|
|
1990
2123
|
if (result.up_to_date === true && (!marker || !existsSync(marker)))
|
|
1991
2124
|
return result;
|
|
@@ -2037,7 +2170,6 @@ export class UpdateService {
|
|
|
2037
2170
|
const inv = inventoryLocks(path);
|
|
2038
2171
|
const manual = `rm -f ${str(inv.well_known_lock_path)}`;
|
|
2039
2172
|
if (!inv.well_known_lock_present) {
|
|
2040
|
-
this.cache.checked_at = 0;
|
|
2041
2173
|
const retry = await this.applyInner(target, this.deps.channel(), () => true, options);
|
|
2042
2174
|
return { ...retry, lock_recovery: { action: 'no-lock-found', manual_command: manual, other_locks: inv.other_locks } };
|
|
2043
2175
|
}
|