zidane 9.1.1 → 9.1.3
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/dist/{acp-Di9WvMDF.js → acp-CeCavNlg.js} +7 -7
- package/dist/{acp-Di9WvMDF.js.map → acp-CeCavNlg.js.map} +1 -1
- package/dist/acp-cli.js +5 -5
- package/dist/acp.d.ts +2 -2
- package/dist/acp.js +1 -1
- package/dist/{agent-DJhpTS-B.js → agent-Dh_XZ7fj.js} +74 -19
- package/dist/agent-Dh_XZ7fj.js.map +1 -0
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +1 -1
- package/dist/{auth-store-port-DFgf22oo.js → auth-store-port-BKpjlJ8a.js} +2 -2
- package/dist/{auth-store-port-DFgf22oo.js.map → auth-store-port-BKpjlJ8a.js.map} +1 -1
- package/dist/{auto-update-restart-BFB7Ek87.js → auto-update-restart-CQJtndMG.js} +277 -41
- package/dist/auto-update-restart-CQJtndMG.js.map +1 -0
- package/dist/{browser-BcoCCB_n.js → browser-BkdeKnxO.js} +56 -2
- package/dist/browser-BkdeKnxO.js.map +1 -0
- package/dist/{browser-entry-ypi8CyE-.d.ts → browser-entry-BCwruqNa.d.ts} +10 -10
- package/dist/{browser-entry-ypi8CyE-.d.ts.map → browser-entry-BCwruqNa.d.ts.map} +1 -1
- package/dist/channels.d.ts +5 -5
- package/dist/chat/browser.d.ts +4 -4
- package/dist/chat/browser.js +6 -6
- package/dist/chat/pure.d.ts +5 -5
- package/dist/chat/pure.js +8 -8
- package/dist/chat.d.ts +5 -5
- package/dist/chat.js +55 -55
- package/dist/chat.js.map +1 -1
- package/dist/{cli-shared-CabruH8Z.js → cli-shared-DeRHgYvl.js} +4 -4
- package/dist/{cli-shared-CabruH8Z.js.map → cli-shared-DeRHgYvl.js.map} +1 -1
- package/dist/cli-style-DBEm6CyT.js +105 -0
- package/dist/cli-style-DBEm6CyT.js.map +1 -0
- package/dist/{client-core-CIixwznM.d.ts → client-core-C_4m_oL6.d.ts} +4 -4
- package/dist/{client-core-CIixwznM.d.ts.map → client-core-C_4m_oL6.d.ts.map} +1 -1
- package/dist/{client-CCaIXWue.d.ts → client-ygTASGis.d.ts} +2 -2
- package/dist/{client-CCaIXWue.d.ts.map → client-ygTASGis.d.ts.map} +1 -1
- package/dist/codemode-worker.js +8 -5
- package/dist/codemode-worker.js.map +1 -1
- package/dist/codemode.d.ts +16 -0
- package/dist/codemode.d.ts.map +1 -1
- package/dist/codemode.js +2 -2
- package/dist/{connection-loop-QmWL-fJf.d.ts → connection-loop-D_pRONCr.d.ts} +4 -4
- package/dist/{connection-loop-QmWL-fJf.d.ts.map → connection-loop-D_pRONCr.d.ts.map} +1 -1
- package/dist/contexts/daytona.d.ts +3 -3
- package/dist/contexts/docker.d.ts +1 -1
- package/dist/contexts/e2b.d.ts +2 -2
- package/dist/contexts/sandbox.d.ts +1 -1
- package/dist/{contexts-C72b0mMa.js → contexts-DLZTSRHU.js} +17 -106
- package/dist/contexts-DLZTSRHU.js.map +1 -0
- package/dist/contexts.d.ts +4 -4
- package/dist/contexts.js +2 -2
- package/dist/{credentials-wwETW8rI.js → credentials-Bqg-qNBM.js} +2 -2
- package/dist/{credentials-wwETW8rI.js.map → credentials-Bqg-qNBM.js.map} +1 -1
- package/dist/{cwd-picker-CcekODCt.js → cwd-picker-BsHA6HKv.js} +4 -4
- package/dist/{cwd-picker-CcekODCt.js.map → cwd-picker-BsHA6HKv.js.map} +1 -1
- package/dist/daemon-cli.js +4 -3
- package/dist/daemon-cli.js.map +1 -1
- package/dist/{decisions-CXmK0nz9.js → decisions-hsw5XS2g.js} +3 -1
- package/dist/decisions-hsw5XS2g.js.map +1 -0
- package/dist/{discovery-DycXFxdA.js → discovery-CX7nbMCn.js} +4 -4
- package/dist/{discovery-DycXFxdA.js.map → discovery-CX7nbMCn.js.map} +1 -1
- package/dist/durable/sqlite.d.ts +2 -2
- package/dist/durable.d.ts +1 -1
- package/dist/{engine-VQ86XGdG.js → engine-CxBGgU94.js} +6 -6
- package/dist/{engine-VQ86XGdG.js.map → engine-CxBGgU94.js.map} +1 -1
- package/dist/{eval-Bod0I1W_.js → eval-CfGUDAkN.js} +3 -3
- package/dist/{eval-Bod0I1W_.js.map → eval-CfGUDAkN.js.map} +1 -1
- package/dist/eval.d.ts +1 -1
- package/dist/eval.js +1 -1
- package/dist/{executor-C7RQrkEq.js → executor-j_LFRBwS.js} +4 -4
- package/dist/{executor-C7RQrkEq.js.map → executor-j_LFRBwS.js.map} +1 -1
- package/dist/{extension-mark-BqKdEZwF.js → extension-mark-_rhkDWL5.js} +9 -6
- package/dist/extension-mark-_rhkDWL5.js.map +1 -0
- package/dist/extensions/testing.d.ts +1 -1
- package/dist/extensions/testing.js +2 -2
- package/dist/{extensions-BCx4QuGB.js → extensions-ADlhBQ_1.js} +8 -8
- package/dist/{extensions-BCx4QuGB.js.map → extensions-ADlhBQ_1.js.map} +1 -1
- package/dist/{extensions-client-D8tEAcMw.d.ts → extensions-client-D4Q2XRKV.d.ts} +31 -5
- package/dist/extensions-client-D4Q2XRKV.d.ts.map +1 -0
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +6 -6
- package/dist/{fold-rules-DvLK8pbf.d.ts → fold-rules-1DpDwG9h.d.ts} +2 -2
- package/dist/{fold-rules-DvLK8pbf.d.ts.map → fold-rules-1DpDwG9h.d.ts.map} +1 -1
- package/dist/{google-Crva32sk.js → google-B-Dhmzzf.js} +2 -2
- package/dist/{google-Crva32sk.js.map → google-B-Dhmzzf.js.map} +1 -1
- package/dist/{headless-CCm-jLLT.js → headless-CQm19BL0.js} +4 -4
- package/dist/{headless-CCm-jLLT.js.map → headless-CQm19BL0.js.map} +1 -1
- package/dist/headless.d.ts +1 -1
- package/dist/headless.js +1 -1
- package/dist/history-worker.js +1 -1
- package/dist/{host-wO_6GW0y.js → host-C61ntFBC.js} +276 -103
- package/dist/host-C61ntFBC.js.map +1 -0
- package/dist/{host-BHMs9jsN.js → host-DEoEzQal.js} +13 -4
- package/dist/host-DEoEzQal.js.map +1 -0
- package/dist/{host-scoped-settings-CrbcqOkP.js → host-scoped-settings-WBYaCork.js} +2 -2
- package/dist/{host-scoped-settings-CrbcqOkP.js.map → host-scoped-settings-WBYaCork.js.map} +1 -1
- package/dist/{host-signals-Jsjd_-4g.js → host-signals-Cb2TlGtN.js} +5 -5
- package/dist/{host-signals-Jsjd_-4g.js.map → host-signals-Cb2TlGtN.js.map} +1 -1
- package/dist/{host-version-CNAr9pov.js → host-version-BIx4CuBM.js} +2 -2
- package/dist/{host-version-CNAr9pov.js.map → host-version-BIx4CuBM.js.map} +1 -1
- package/dist/{index-C6nnKu32.d.ts → index-B0PLo9jn.d.ts} +4 -4
- package/dist/{index-C6nnKu32.d.ts.map → index-B0PLo9jn.d.ts.map} +1 -1
- package/dist/{index-Djnc8Peh.d.ts → index-De4x-s76.d.ts} +14 -14
- package/dist/{index-Djnc8Peh.d.ts.map → index-De4x-s76.d.ts.map} +1 -1
- package/dist/{index-CGbOWa7y.d.ts → index-WlE93Q6d.d.ts} +411 -3
- package/dist/index-WlE93Q6d.d.ts.map +1 -0
- package/dist/{index-CCf_WeTQ.d.ts → index-f-XWIoYo.d.ts} +2 -2
- package/dist/{index-CCf_WeTQ.d.ts.map → index-f-XWIoYo.d.ts.map} +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +17 -17
- package/dist/ipc/browser-types.d.ts +304 -7
- package/dist/ipc/browser-types.d.ts.map +1 -1
- package/dist/ipc/browser.d.ts +4 -4
- package/dist/ipc/browser.js +2 -2
- package/dist/ipc/remote.d.ts +6 -6
- package/dist/ipc/remote.js +3 -3
- package/dist/{ipc-BzWhIybr.js → ipc-DiH_P-wr.js} +4 -4
- package/dist/{ipc-BzWhIybr.js.map → ipc-DiH_P-wr.js.map} +1 -1
- package/dist/ipc.d.ts +10 -10
- package/dist/ipc.js +8 -8
- package/dist/{json-Dj-YATkZ.js → json-BjClr43H.js} +2 -20
- package/dist/json-BjClr43H.js.map +1 -0
- package/dist/{links-CJG_rFvf.js → links-BbC_lOnn.js} +9 -9
- package/dist/{links-CJG_rFvf.js.map → links-BbC_lOnn.js.map} +1 -1
- package/dist/{loaded-entry-DTURJo_R.js → loaded-entry-C0vkCVNQ.js} +2 -2
- package/dist/{loaded-entry-DTURJo_R.js.map → loaded-entry-C0vkCVNQ.js.map} +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/{media-type-BtA0cbfI.d.ts → media-type-ZSmAGHvg.d.ts} +188 -7
- package/dist/media-type-ZSmAGHvg.d.ts.map +1 -0
- package/dist/{memory-DuVGrzbl.js → memory-C3w8nO8f.js} +132 -31
- package/dist/memory-C3w8nO8f.js.map +1 -0
- package/dist/model-test-CAtJ76kM.js.map +1 -1
- package/dist/{move-session-kylExJ5H.js → move-session-D7ILECs-.js} +4 -4
- package/dist/{move-session-kylExJ5H.js.map → move-session-D7ILECs-.js.map} +1 -1
- package/dist/{nested-call-record-DlzPeTB7.js → nested-call-record-OayszZBQ.js} +4 -3
- package/dist/nested-call-record-OayszZBQ.js.map +1 -0
- package/dist/output/stream-json.d.ts +1 -1
- package/dist/output/terminal.d.ts +1 -1
- package/dist/{path-display-COVV71Yu.js → path-display-DRAEpKOU.js} +3 -3
- package/dist/{path-display-COVV71Yu.js.map → path-display-DRAEpKOU.js.map} +1 -1
- package/dist/plugins.d.ts +1 -1
- package/dist/{prelude-CVKoUzV8.js → prelude-BwiSR1uA.js} +16 -5
- package/dist/prelude-BwiSR1uA.js.map +1 -0
- package/dist/{presets-CBt6rFfS.js → presets-CMY43nUP.js} +3 -3
- package/dist/{presets-CBt6rFfS.js.map → presets-CMY43nUP.js.map} +1 -1
- package/dist/presets.d.ts +1 -1
- package/dist/presets.js +1 -1
- package/dist/{protocol-CEVqBO-q.d.ts → protocol-C2lqKuMd.d.ts} +50 -7
- package/dist/protocol-C2lqKuMd.d.ts.map +1 -0
- package/dist/protocol-DOGyHgLQ.js.map +1 -1
- package/dist/protocol-NSllElLw.js.map +1 -1
- package/dist/providers/anthropic.d.ts +1 -1
- package/dist/providers/arcee.d.ts +1 -1
- package/dist/providers/baseten.d.ts +1 -1
- package/dist/providers/cerebras.d.ts +1 -1
- package/dist/providers/google.d.ts +1 -1
- package/dist/providers/google.js +1 -1
- package/dist/providers/local.d.ts +1 -1
- package/dist/providers/neuralwatt.d.ts +1 -1
- package/dist/providers/openai-compat.d.ts +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/xai.d.ts +1 -1
- package/dist/{providers-Z0TaBp1O.js → providers-CpXV_uLE.js} +5 -5
- package/dist/providers-CpXV_uLE.js.map +1 -0
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +1 -1
- package/dist/{readonly-db-D7Z-k0pQ.js → readonly-db-DrbT8tX6.js} +2 -2
- package/dist/{readonly-db-D7Z-k0pQ.js.map → readonly-db-DrbT8tX6.js.map} +1 -1
- package/dist/{registry-BKjeBnoy.js → registry-CJHvmvaP.js} +2 -2
- package/dist/{registry-BKjeBnoy.js.map → registry-CJHvmvaP.js.map} +1 -1
- package/dist/{registry-B6Ww76iW.js → registry-CN6JlZKj.js} +2 -2
- package/dist/{registry-B6Ww76iW.js.map → registry-CN6JlZKj.js.map} +1 -1
- package/dist/{registry-B9INJwJR.js → registry-CnnKaY9s.js} +324 -39
- package/dist/registry-CnnKaY9s.js.map +1 -0
- package/dist/{remote-hosts-BMWoHCWO.js → remote-hosts-DoO9CJUQ.js} +4 -4
- package/dist/{remote-hosts-BMWoHCWO.js.map → remote-hosts-DoO9CJUQ.js.map} +1 -1
- package/dist/{repo-url-D4Dr8NfZ.js → repo-url-DLjjuVk_.js} +169 -2
- package/dist/repo-url-DLjjuVk_.js.map +1 -0
- package/dist/restate.d.ts +2 -2
- package/dist/{sandbox-BwiPGKF7.d.ts → sandbox-B4OW6oNx.d.ts} +2 -2
- package/dist/{sandbox-BwiPGKF7.d.ts.map → sandbox-B4OW6oNx.d.ts.map} +1 -1
- package/dist/script-progress-CrZ507Qq.js +900 -0
- package/dist/script-progress-CrZ507Qq.js.map +1 -0
- package/dist/session/sqlite.d.ts +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/{setting-BQBSyUq0.js → setting-D_FpKFMw.js} +6 -6
- package/dist/{setting-BQBSyUq0.js.map → setting-D_FpKFMw.js.map} +1 -1
- package/dist/{settings-catalog-4IU2i_jG.js → settings-catalog-DEZlXP51.js} +14 -2
- package/dist/settings-catalog-DEZlXP51.js.map +1 -0
- package/dist/{settings-keys-iI_Y-7MC.js → settings-keys-CW2UgHgb.js} +3 -3
- package/dist/{settings-keys-iI_Y-7MC.js.map → settings-keys-CW2UgHgb.js.map} +1 -1
- package/dist/{skills-CFXRItJ6.js → skills-CEbosUlM.js} +2 -2
- package/dist/{skills-CFXRItJ6.js.map → skills-CEbosUlM.js.map} +1 -1
- package/dist/skills.d.ts +1 -1
- package/dist/skills.js +1 -1
- package/dist/{source-Bl1Z501r.js → source-3ZnEPOSa.js} +3 -2
- package/dist/source-3ZnEPOSa.js.map +1 -0
- package/dist/{sqlite-runtime-BZ2L4RaG.d.ts → sqlite-runtime-CS_LBaAN.d.ts} +2 -2
- package/dist/sqlite-runtime-CS_LBaAN.d.ts.map +1 -0
- package/dist/{src-BY_ND2xn.js → src-BmTXDta8.js} +2 -2
- package/dist/{src-BY_ND2xn.js.map → src-BmTXDta8.js.map} +1 -1
- package/dist/{store-C6gI7FfZ.js → store-ByCDaKgJ.js} +14 -3
- package/dist/store-ByCDaKgJ.js.map +1 -0
- package/dist/{system-freeze-m5o1sGIM.js → system-freeze-XgDPIwQS.js} +3 -3
- package/dist/{system-freeze-m5o1sGIM.js.map → system-freeze-XgDPIwQS.js.map} +1 -1
- package/dist/{todo-edits-CbukbjyV.js → todo-edits-Dyj32ds6.js} +4 -3
- package/dist/todo-edits-Dyj32ds6.js.map +1 -0
- package/dist/tools/fetch-url.d.ts +1 -1
- package/dist/tools/web-search.d.ts +1 -1
- package/dist/{tools-CVTGhggj.js → tools-BsrGQ8K4.js} +2 -2
- package/dist/{tools-CVTGhggj.js.map → tools-BsrGQ8K4.js.map} +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.js +3 -3
- package/dist/{transcript-anchors-CiSi_UBn.js → transcript-anchors-DMjvyUjk.js} +3 -3
- package/dist/{transcript-anchors-CiSi_UBn.js.map → transcript-anchors-DMjvyUjk.js.map} +1 -1
- package/dist/{transcript-reconcile-jbSBjLq2.js → transcript-reconcile-DpQO85wl.js} +3 -3
- package/dist/{transcript-reconcile-jbSBjLq2.js.map → transcript-reconcile-DpQO85wl.js.map} +1 -1
- package/dist/tui.d.ts +9 -9
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +289 -38
- package/dist/tui.js.map +1 -1
- package/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +20 -8
- package/dist/types-2HrgolQz.d.ts.map +1 -0
- package/dist/types-4q1bFG53.js +122 -0
- package/dist/types-4q1bFG53.js.map +1 -0
- package/dist/{types-DnRd9_cA.d.ts → types-SXqk6hLD.d.ts} +3 -3
- package/dist/{types-DnRd9_cA.d.ts.map → types-SXqk6hLD.d.ts.map} +1 -1
- package/dist/types-myxheQkw.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/{usage-summary-BfcXjiSM.js → usage-summary-BM7B3JdI.js} +2 -2
- package/dist/{usage-summary-BfcXjiSM.js.map → usage-summary-BM7B3JdI.js.map} +1 -1
- package/dist/{version-DqqqvHDP.js → version-szdW1Od9.js} +2 -2
- package/dist/{version-DqqqvHDP.js.map → version-szdW1Od9.js.map} +1 -1
- package/dist/{wait-task-BX4NcOOm.js → wait-task-BiI5UaZQ.js} +13 -3
- package/dist/wait-task-BiI5UaZQ.js.map +1 -0
- package/dist/{wire-CLm2rMK0.js → wire-C3l9jl9x.js} +2 -2
- package/dist/{wire-CLm2rMK0.js.map → wire-C3l9jl9x.js.map} +1 -1
- package/dist/{write-file-0E6TUJ9A.js → write-file-Dquu7MzB.js} +5 -3
- package/dist/write-file-Dquu7MzB.js.map +1 -0
- package/dist/{ws-DfGGYQ4W.js → ws-CEHi0CiB.js} +4 -4
- package/dist/{ws-DfGGYQ4W.js.map → ws-CEHi0CiB.js.map} +1 -1
- package/dist/{ws-client-CFMbhsNq.js → ws-client-t8XNWxcq.js} +2 -2
- package/dist/{ws-client-CFMbhsNq.js.map → ws-client-t8XNWxcq.js.map} +1 -1
- package/docs/CHAT.md +55 -0
- package/docs/CODEMODE.md +37 -0
- package/docs/EXTENSIONS.md +8 -6
- package/docs/RELEASE-NOTES-NEXT.md +48 -1
- package/docs/RELEASE.md +9 -1
- package/package.json +2 -3
- package/dist/agent-DJhpTS-B.js.map +0 -1
- package/dist/auto-update-restart-BFB7Ek87.js.map +0 -1
- package/dist/browser-BcoCCB_n.js.map +0 -1
- package/dist/contexts-C72b0mMa.js.map +0 -1
- package/dist/decisions-CXmK0nz9.js.map +0 -1
- package/dist/extension-mark-BqKdEZwF.js.map +0 -1
- package/dist/extensions-client-D8tEAcMw.d.ts.map +0 -1
- package/dist/host-BHMs9jsN.js.map +0 -1
- package/dist/host-wO_6GW0y.js.map +0 -1
- package/dist/index-CGbOWa7y.d.ts.map +0 -1
- package/dist/json-Dj-YATkZ.js.map +0 -1
- package/dist/media-type-BtA0cbfI.d.ts.map +0 -1
- package/dist/memory-DuVGrzbl.js.map +0 -1
- package/dist/nested-call-events-BYk8XvGX.js +0 -182
- package/dist/nested-call-events-BYk8XvGX.js.map +0 -1
- package/dist/nested-call-record-DlzPeTB7.js.map +0 -1
- package/dist/prelude-CVKoUzV8.js.map +0 -1
- package/dist/protocol-CEVqBO-q.d.ts.map +0 -1
- package/dist/providers-Z0TaBp1O.js.map +0 -1
- package/dist/registry-B9INJwJR.js.map +0 -1
- package/dist/repo-url-D4Dr8NfZ.js.map +0 -1
- package/dist/settings-catalog-4IU2i_jG.js.map +0 -1
- package/dist/source-Bl1Z501r.js.map +0 -1
- package/dist/sqlite-runtime-BZ2L4RaG.d.ts.map +0 -1
- package/dist/store-C6gI7FfZ.js.map +0 -1
- package/dist/todo-edits-CbukbjyV.js.map +0 -1
- package/dist/types-DTMEhKJO.js +0 -14
- package/dist/types-DTMEhKJO.js.map +0 -1
- package/dist/types-bDQagoiL.d.ts.map +0 -1
- package/dist/wait-task-BX4NcOOm.js.map +0 -1
- package/dist/write-file-0E6TUJ9A.js.map +0 -1
- package/scripts/eval.ts +0 -179
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-BhDjJH2R.js";
|
|
2
2
|
import { p as errorMessage } from "./errors-C3z7pmOx.js";
|
|
3
3
|
import { i as ARTIFACT_KIND_PATTERN } from "./artifacts-DPVc-oG0.js";
|
|
4
|
-
import {
|
|
5
|
-
import { a as readonlyView, i as isKnownHookEvent, n as createDecider, o as unwrapReadonly } from "./decisions-
|
|
6
|
-
import { D as errorMessage$1, E as checkSchema,
|
|
4
|
+
import { a as withProvenance } from "./json-BjClr43H.js";
|
|
5
|
+
import { a as readonlyView, i as isKnownHookEvent, n as createDecider, o as unwrapReadonly } from "./decisions-hsw5XS2g.js";
|
|
6
|
+
import { Ct as normalizeChords, D as errorMessage$1, E as checkSchema, Ht as actionScope, K as NoUiError, L as checkSettingsValues, O as isPlainRecord, P as createFacetRegistry, R as cleanSettingsSchema, S as createMemoryRegistry, St as createKeymap, T as validateStoreValue, U as DialogTimeoutError, Vt as validateDefinition, Zt as DisposedError, _ as createMemorySettingsPort, a as systemClock, ct as assertUsable, dt as track, f as EMPTY_MCP_PORT, ft as createArtifactsSurface, g as NO_UI_CLIENT_PORT, h as NO_INTEGRATION_FLOWS, k as resolveStoragePath, lt as createOwner, m as NO_CLIENT_DIALOG_PORT, mt as createWorkspaceSurface, r as createUiRegistry, st as assertAlive, u as runtimeSettingsWire, ut as isTornDown, v as createMemoryStoragePort, w as createStorageDomain, wt as resolveMod, z as settingsWire } from "./registry-CnnKaY9s.js";
|
|
7
7
|
import { t as generateStructuredData } from "./generate-data-Cs86LH2u.js";
|
|
8
8
|
import { t as createArtifactDetectHook } from "./artifact-detect-BkDNUhfB.js";
|
|
9
|
-
import { t as ZIDANE_VERSION } from "./version-
|
|
10
|
-
import { n as satisfiesVersionRange } from "./host-version-
|
|
9
|
+
import { t as ZIDANE_VERSION } from "./version-szdW1Od9.js";
|
|
10
|
+
import { n as satisfiesVersionRange } from "./host-version-BIx4CuBM.js";
|
|
11
11
|
import { F as parseBindingSpec } from "./references-DZ5qTYDl.js";
|
|
12
12
|
import { r as createLogger, t as consoleSink } from "./logger-BQj8QCJp.js";
|
|
13
|
-
import { a as createSettingsDomain, n as RpcErrorType, r as jsonBytes } from "./wire-
|
|
13
|
+
import { a as createSettingsDomain, n as RpcErrorType, r as jsonBytes } from "./wire-C3l9jl9x.js";
|
|
14
14
|
import { t as IMAGE_ASPECT_RATIOS } from "./types-JzccL5GE.js";
|
|
15
|
-
import { s as onProviderAccountsChange } from "./credentials-
|
|
16
|
-
import { n as integrationRegistry, t as createIntegrationRegistry } from "./registry-
|
|
15
|
+
import { s as onProviderAccountsChange } from "./credentials-Bqg-qNBM.js";
|
|
16
|
+
import { n as integrationRegistry, t as createIntegrationRegistry } from "./registry-CJHvmvaP.js";
|
|
17
17
|
import { n as RpcCallError } from "./rpc-Daec0xVh.js";
|
|
18
18
|
import { r as loadAgentPlugin } from "./plugins-CNj4kHpO.js";
|
|
19
|
-
import { a as createModelsCatalog, c as addTransform, d as reloadWith, f as createCatalogSet, h as createSessionsDomain, i as watchProviderAccounts, l as extensionOrigin, m as clonePlain, n as createProvidersCatalog, o as createModelsDomain, p as once, r as createProvidersDomain, u as owned } from "./providers-
|
|
19
|
+
import { a as createModelsCatalog, c as addTransform, d as reloadWith, f as createCatalogSet, h as createSessionsDomain, i as watchProviderAccounts, l as extensionOrigin, m as clonePlain, n as createProvidersCatalog, o as createModelsDomain, p as once, r as createProvidersDomain, u as owned } from "./providers-CpXV_uLE.js";
|
|
20
20
|
import { basename, isAbsolute, resolve } from "node:path";
|
|
21
21
|
import { createHooks } from "hookable";
|
|
22
22
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -914,6 +914,54 @@ function paletteProviderEntry(deps, spec, group) {
|
|
|
914
914
|
} } : {}
|
|
915
915
|
};
|
|
916
916
|
}
|
|
917
|
+
/** Marks a run in flight (`Guard.lease`): an unload meanwhile tears down only once it ends. Throws `DisposedError` once unloaded. */
|
|
918
|
+
function lease(guard, label) {
|
|
919
|
+
return guard.lease?.(label) ?? (() => {});
|
|
920
|
+
}
|
|
921
|
+
/** `fn` holding a lease while it runs. */
|
|
922
|
+
function leased(guard, label, fn) {
|
|
923
|
+
return (...args) => {
|
|
924
|
+
const release = lease(guard, label);
|
|
925
|
+
let result;
|
|
926
|
+
try {
|
|
927
|
+
result = fn(...args);
|
|
928
|
+
} catch (error) {
|
|
929
|
+
release();
|
|
930
|
+
throw error;
|
|
931
|
+
}
|
|
932
|
+
if (result && typeof result.then === "function") return result.finally(release);
|
|
933
|
+
release();
|
|
934
|
+
return result;
|
|
935
|
+
};
|
|
936
|
+
}
|
|
937
|
+
/**
|
|
938
|
+
* The steps of one pipeline share one lease, from the first step to the last
|
|
939
|
+
* (or the step that throws, or an abort), so an unload between two steps does
|
|
940
|
+
* not tear the extension down under the next one. Keyed by the run's context,
|
|
941
|
+
* which `executeCommand` hands to every step.
|
|
942
|
+
*/
|
|
943
|
+
function pipeline(guard, label, steps) {
|
|
944
|
+
const runs = /* @__PURE__ */ new WeakMap();
|
|
945
|
+
const end = (ctx) => {
|
|
946
|
+
const release = runs.get(ctx);
|
|
947
|
+
runs.delete(ctx);
|
|
948
|
+
release?.();
|
|
949
|
+
};
|
|
950
|
+
return steps.map((step, i) => ({ run: async (ctx) => {
|
|
951
|
+
if (!runs.has(ctx)) {
|
|
952
|
+
runs.set(ctx, lease(guard, label));
|
|
953
|
+
ctx.signal?.addEventListener("abort", () => end(ctx), { once: true });
|
|
954
|
+
}
|
|
955
|
+
try {
|
|
956
|
+
const result = await step.run(ctx);
|
|
957
|
+
if (i === steps.length - 1) end(ctx);
|
|
958
|
+
return result;
|
|
959
|
+
} catch (error) {
|
|
960
|
+
end(ctx);
|
|
961
|
+
throw error;
|
|
962
|
+
}
|
|
963
|
+
} }));
|
|
964
|
+
}
|
|
917
965
|
/**
|
|
918
966
|
* Makes `ctx.commands` and `ctx.keymap` for one extension.
|
|
919
967
|
*
|
|
@@ -1012,7 +1060,7 @@ function createCommandsDomain(deps, port, opts = {}) {
|
|
|
1012
1060
|
}
|
|
1013
1061
|
const run = spec.run;
|
|
1014
1062
|
const complete = spec.slash?.complete;
|
|
1015
|
-
const steps = hasSteps ? spec.steps.map((step, i) => ({ run: attributed(`command ${id} step ${i + 1}`, step.run) })) : void 0;
|
|
1063
|
+
const steps = hasSteps ? pipeline(guard, `command ${id}`, spec.steps.map((step, i) => ({ run: attributed(`command ${id} step ${i + 1}`, step.run) }))) : void 0;
|
|
1016
1064
|
const entry = {
|
|
1017
1065
|
id,
|
|
1018
1066
|
extensionId,
|
|
@@ -1040,7 +1088,7 @@ function createCommandsDomain(deps, port, opts = {}) {
|
|
|
1040
1088
|
for (const stop of stops) guard.callSync(`command ${id} unsubscribe`, stop);
|
|
1041
1089
|
};
|
|
1042
1090
|
},
|
|
1043
|
-
...typeof run === "function" ? { run: attributed(`command ${id}`, run) } : {},
|
|
1091
|
+
...typeof run === "function" ? { run: leased(guard, `command ${id}`, attributed(`command ${id}`, run)) } : {},
|
|
1044
1092
|
...steps ? { steps } : {},
|
|
1045
1093
|
...typeof complete === "function" ? { complete: async (prefix) => await guard.call(`command ${id} complete`, () => complete(prefix), { fallback: [] }) ?? [] } : {}
|
|
1046
1094
|
};
|
|
@@ -2118,6 +2166,16 @@ function createGuard(options) {
|
|
|
2118
2166
|
const threw = (label, cause) => {
|
|
2119
2167
|
fail(new ExtensionCallbackError(extensionId, label, "error", errorMessage(cause), cause));
|
|
2120
2168
|
};
|
|
2169
|
+
const lease = (label, opts = {}) => options.lease ? options.lease(`[${extensionId}] ${label}`, opts) : () => {};
|
|
2170
|
+
/** A lease for a guarded call, or `undefined` when the extension is unloaded (the call does not run). */
|
|
2171
|
+
const tryLease = (label, timeoutMs) => {
|
|
2172
|
+
try {
|
|
2173
|
+
return lease(label, timeoutMs !== void 0 && Number.isFinite(timeoutMs) ? { timeoutMs } : {});
|
|
2174
|
+
} catch (error) {
|
|
2175
|
+
if (error instanceof DisposedError) return void 0;
|
|
2176
|
+
throw error;
|
|
2177
|
+
}
|
|
2178
|
+
};
|
|
2121
2179
|
return {
|
|
2122
2180
|
extensionId,
|
|
2123
2181
|
get tripped() {
|
|
@@ -2128,56 +2186,74 @@ function createGuard(options) {
|
|
|
2128
2186
|
return [...failures];
|
|
2129
2187
|
},
|
|
2130
2188
|
report: threw,
|
|
2189
|
+
lease,
|
|
2131
2190
|
async call(label, fn, opts = {}) {
|
|
2132
2191
|
if (tripped && !opts.teardown) return opts.fallback;
|
|
2133
|
-
const
|
|
2134
|
-
|
|
2135
|
-
try {
|
|
2136
|
-
result = stalls.run(extensionId, label, () => fn(controller.signal));
|
|
2137
|
-
} catch (error) {
|
|
2138
|
-
threw(label, error);
|
|
2139
|
-
return opts.fallback;
|
|
2140
|
-
}
|
|
2141
|
-
if (!isThenable(result)) return result;
|
|
2142
|
-
const pending = Promise.resolve(result);
|
|
2143
|
-
const timeoutMs = opts.timeoutMs ?? defaultTimeout;
|
|
2144
|
-
if (!Number.isFinite(timeoutMs)) try {
|
|
2145
|
-
return await pending;
|
|
2146
|
-
} catch (error) {
|
|
2147
|
-
threw(label, error);
|
|
2148
|
-
return opts.fallback;
|
|
2149
|
-
}
|
|
2150
|
-
let timer;
|
|
2151
|
-
const timedOut = new Promise((resolve) => {
|
|
2152
|
-
timer = setTimeout(resolve, timeoutMs, TIMED_OUT);
|
|
2153
|
-
});
|
|
2192
|
+
const release = opts.teardown ? () => {} : tryLease(label, opts.timeoutMs ?? defaultTimeout);
|
|
2193
|
+
if (!release) return opts.fallback;
|
|
2154
2194
|
try {
|
|
2155
|
-
|
|
2156
|
-
if (value !== TIMED_OUT) return value;
|
|
2157
|
-
const message = `timed out after ${timeoutMs}ms`;
|
|
2158
|
-
controller.abort(/* @__PURE__ */ new Error(`${label} ${message}`));
|
|
2159
|
-
pending.catch(() => {});
|
|
2160
|
-
fail(new ExtensionCallbackError(extensionId, label, "timeout", message));
|
|
2161
|
-
return opts.fallback;
|
|
2162
|
-
} catch (error) {
|
|
2163
|
-
threw(label, error);
|
|
2164
|
-
return opts.fallback;
|
|
2195
|
+
return await runCall(label, fn, opts);
|
|
2165
2196
|
} finally {
|
|
2166
|
-
|
|
2197
|
+
release();
|
|
2167
2198
|
}
|
|
2168
2199
|
},
|
|
2169
2200
|
callSync(label, fn, opts = {}) {
|
|
2170
2201
|
if (tripped) return opts.fallback;
|
|
2202
|
+
const release = tryLease(label);
|
|
2203
|
+
if (!release) return opts.fallback;
|
|
2204
|
+
let value;
|
|
2171
2205
|
try {
|
|
2172
|
-
|
|
2173
|
-
if (isThenable(value)) Promise.resolve(value).catch((error) => threw(label, error));
|
|
2174
|
-
return value;
|
|
2206
|
+
value = stalls.run(extensionId, label, fn);
|
|
2175
2207
|
} catch (error) {
|
|
2208
|
+
release();
|
|
2176
2209
|
threw(label, error);
|
|
2177
2210
|
return opts.fallback;
|
|
2178
2211
|
}
|
|
2212
|
+
if (isThenable(value)) {
|
|
2213
|
+
Promise.resolve(value).catch((error) => threw(label, error)).finally(release);
|
|
2214
|
+
return value;
|
|
2215
|
+
}
|
|
2216
|
+
release();
|
|
2217
|
+
return value;
|
|
2179
2218
|
}
|
|
2180
2219
|
};
|
|
2220
|
+
async function runCall(label, fn, opts) {
|
|
2221
|
+
const controller = new AbortController();
|
|
2222
|
+
let result;
|
|
2223
|
+
try {
|
|
2224
|
+
result = stalls.run(extensionId, label, () => fn(controller.signal));
|
|
2225
|
+
} catch (error) {
|
|
2226
|
+
threw(label, error);
|
|
2227
|
+
return opts.fallback;
|
|
2228
|
+
}
|
|
2229
|
+
if (!isThenable(result)) return result;
|
|
2230
|
+
const pending = Promise.resolve(result);
|
|
2231
|
+
const timeoutMs = opts.timeoutMs ?? defaultTimeout;
|
|
2232
|
+
if (!Number.isFinite(timeoutMs)) try {
|
|
2233
|
+
return await pending;
|
|
2234
|
+
} catch (error) {
|
|
2235
|
+
threw(label, error);
|
|
2236
|
+
return opts.fallback;
|
|
2237
|
+
}
|
|
2238
|
+
let timer;
|
|
2239
|
+
const timedOut = new Promise((resolve) => {
|
|
2240
|
+
timer = setTimeout(resolve, timeoutMs, TIMED_OUT);
|
|
2241
|
+
});
|
|
2242
|
+
try {
|
|
2243
|
+
const value = await Promise.race([pending, timedOut]);
|
|
2244
|
+
if (value !== TIMED_OUT) return value;
|
|
2245
|
+
const message = `timed out after ${timeoutMs}ms`;
|
|
2246
|
+
controller.abort(/* @__PURE__ */ new Error(`${label} ${message}`));
|
|
2247
|
+
pending.catch(() => {});
|
|
2248
|
+
fail(new ExtensionCallbackError(extensionId, label, "timeout", message));
|
|
2249
|
+
return opts.fallback;
|
|
2250
|
+
} catch (error) {
|
|
2251
|
+
threw(label, error);
|
|
2252
|
+
return opts.fallback;
|
|
2253
|
+
} finally {
|
|
2254
|
+
clearTimeout(timer);
|
|
2255
|
+
}
|
|
2256
|
+
}
|
|
2181
2257
|
}
|
|
2182
2258
|
function isThenable(value) {
|
|
2183
2259
|
return value !== null && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
|
|
@@ -2509,6 +2585,32 @@ function createToolsCatalog(port, options = {}) {
|
|
|
2509
2585
|
}
|
|
2510
2586
|
};
|
|
2511
2587
|
}
|
|
2588
|
+
/**
|
|
2589
|
+
* `def` whose `execute` holds a lease on the extension (`Guard.lease`) while
|
|
2590
|
+
* it runs: an agent that took the tool before an unload finishes the call
|
|
2591
|
+
* on live domains. A call that starts after the unload throws
|
|
2592
|
+
* `DisposedError`. Same prototype and properties, like {@link cloneTool}.
|
|
2593
|
+
*/
|
|
2594
|
+
function leasedTool(deps, name, def) {
|
|
2595
|
+
const lease = deps.guard.lease;
|
|
2596
|
+
if (!lease) return def;
|
|
2597
|
+
const execute = def.execute;
|
|
2598
|
+
const wrapped = Object.create(Object.getPrototypeOf(def), Object.getOwnPropertyDescriptors(def));
|
|
2599
|
+
wrapped.execute = function(...args) {
|
|
2600
|
+
const release = lease(`tool ${name}`);
|
|
2601
|
+
let result;
|
|
2602
|
+
try {
|
|
2603
|
+
result = execute.apply(this, args);
|
|
2604
|
+
} catch (error) {
|
|
2605
|
+
release();
|
|
2606
|
+
throw error;
|
|
2607
|
+
}
|
|
2608
|
+
if (result && typeof result.then === "function") return result.finally(release);
|
|
2609
|
+
release();
|
|
2610
|
+
return result;
|
|
2611
|
+
};
|
|
2612
|
+
return wrapped;
|
|
2613
|
+
}
|
|
2512
2614
|
/** Creates one extension's `ctx.tools` over the shared catalog. */
|
|
2513
2615
|
function createToolsDomain(deps, catalog) {
|
|
2514
2616
|
return {
|
|
@@ -2517,7 +2619,7 @@ function createToolsDomain(deps, catalog) {
|
|
|
2517
2619
|
if (!def || typeof def.execute !== "function") throw new TypeError(`tools.register: "${name}" needs a ToolDef with execute`);
|
|
2518
2620
|
return owned(deps, "tools.register", () => catalog.register({
|
|
2519
2621
|
name,
|
|
2520
|
-
def
|
|
2622
|
+
def: leasedTool(deps, name, def)
|
|
2521
2623
|
}, extensionOrigin(deps)));
|
|
2522
2624
|
},
|
|
2523
2625
|
metadata(namespace, spec) {
|
|
@@ -2795,15 +2897,15 @@ function createArtifactsDomain(deps, port) {
|
|
|
2795
2897
|
}));
|
|
2796
2898
|
} },
|
|
2797
2899
|
list: async (query) => {
|
|
2798
|
-
|
|
2900
|
+
assertUsable(owner, "artifacts.list");
|
|
2799
2901
|
return surface.list(query);
|
|
2800
2902
|
},
|
|
2801
2903
|
find: async (kind, uri) => {
|
|
2802
|
-
|
|
2904
|
+
assertUsable(owner, "artifacts.find");
|
|
2803
2905
|
return (await surface.find(kind, uri))[0];
|
|
2804
2906
|
},
|
|
2805
2907
|
record: async (input) => {
|
|
2806
|
-
|
|
2908
|
+
assertUsable(owner, "artifacts.record");
|
|
2807
2909
|
return surface.record(input);
|
|
2808
2910
|
}
|
|
2809
2911
|
};
|
|
@@ -2890,9 +2992,9 @@ function createGenerateDomain(deps, port) {
|
|
|
2890
2992
|
hooks: createHooks()
|
|
2891
2993
|
}).forRun(void 0));
|
|
2892
2994
|
const resolve = async (method, model) => {
|
|
2893
|
-
|
|
2995
|
+
assertUsable(owner, `generate.${method}`);
|
|
2894
2996
|
const resolved = await port.resolve(model);
|
|
2895
|
-
|
|
2997
|
+
assertUsable(owner, `generate.${method}`);
|
|
2896
2998
|
const counted = counting(resolved.provider, (usage) => {
|
|
2897
2999
|
try {
|
|
2898
3000
|
port.recordUsage?.({
|
|
@@ -2912,14 +3014,14 @@ function createGenerateDomain(deps, port) {
|
|
|
2912
3014
|
};
|
|
2913
3015
|
};
|
|
2914
3016
|
const decide = ((request, options) => {
|
|
2915
|
-
|
|
3017
|
+
assertUsable(owner, "generate.decide");
|
|
2916
3018
|
const scoped = {
|
|
2917
3019
|
...request,
|
|
2918
3020
|
signal: combined(owner.signal, request.signal)
|
|
2919
3021
|
};
|
|
2920
3022
|
return options ? decider()(scoped, options) : decider()(scoped);
|
|
2921
3023
|
});
|
|
2922
|
-
Object.defineProperty(decide, "available", { get: () => !owner
|
|
3024
|
+
Object.defineProperty(decide, "available", { get: () => !isTornDown(owner) && decider().available });
|
|
2923
3025
|
return {
|
|
2924
3026
|
async text(opts) {
|
|
2925
3027
|
const { counted, modelId } = await resolve("text", opts.model);
|
|
@@ -2947,11 +3049,11 @@ function createGenerateDomain(deps, port) {
|
|
|
2947
3049
|
},
|
|
2948
3050
|
decide,
|
|
2949
3051
|
async image(opts) {
|
|
2950
|
-
|
|
3052
|
+
assertUsable(owner, "generate.image");
|
|
2951
3053
|
const request = imageRequest(extensionId, opts, combined(owner.signal, opts?.signal));
|
|
2952
3054
|
if (!port.image) throw new Error("generate.image: this host cannot generate images");
|
|
2953
3055
|
const result = await port.image(request);
|
|
2954
|
-
|
|
3056
|
+
assertUsable(owner, "generate.image");
|
|
2955
3057
|
try {
|
|
2956
3058
|
port.recordUsage?.({
|
|
2957
3059
|
extensionId,
|
|
@@ -3069,7 +3171,12 @@ function createPluginsDomain(deps, port) {
|
|
|
3069
3171
|
const source = skillSource(extension.source);
|
|
3070
3172
|
const loaded = await loadAgentPlugin(target, {
|
|
3071
3173
|
source,
|
|
3072
|
-
dataRoot:
|
|
3174
|
+
dataRoot: extension.storagePath?.("data", "plugin-data") ?? resolveStoragePath({
|
|
3175
|
+
paths: extension.paths,
|
|
3176
|
+
extensionId,
|
|
3177
|
+
...extension.dir !== void 0 ? { dir: extension.dir } : {},
|
|
3178
|
+
logger
|
|
3179
|
+
}, "data", "plugin-data"),
|
|
3073
3180
|
...options.skills !== void 0 ? { skills: options.skills } : {},
|
|
3074
3181
|
...options.mcp !== void 0 ? { mcp: options.mcp } : {},
|
|
3075
3182
|
...options.namePrefix !== void 0 ? { namePrefix: options.namePrefix } : {}
|
|
@@ -3134,11 +3241,11 @@ function createWorkspaceDomain(deps, port) {
|
|
|
3134
3241
|
const surface = createWorkspaceSurface(async () => await port.current()?.workspace?.() ?? null, () => port.current()?.workspaceAvailable?.());
|
|
3135
3242
|
return {
|
|
3136
3243
|
available: async () => {
|
|
3137
|
-
|
|
3244
|
+
assertUsable(owner, "workspace.available");
|
|
3138
3245
|
return surface.available();
|
|
3139
3246
|
},
|
|
3140
3247
|
exec: async (command, options = {}) => {
|
|
3141
|
-
|
|
3248
|
+
assertUsable(owner, "workspace.exec");
|
|
3142
3249
|
const signal = options.signal ? AbortSignal.any([options.signal, owner.signal]) : owner.signal;
|
|
3143
3250
|
return surface.exec(command, {
|
|
3144
3251
|
...options,
|
|
@@ -3146,19 +3253,19 @@ function createWorkspaceDomain(deps, port) {
|
|
|
3146
3253
|
});
|
|
3147
3254
|
},
|
|
3148
3255
|
readFile: async (path) => {
|
|
3149
|
-
|
|
3256
|
+
assertUsable(owner, "workspace.readFile");
|
|
3150
3257
|
return surface.readFile(path);
|
|
3151
3258
|
},
|
|
3152
3259
|
writeFile: async (path, content) => {
|
|
3153
|
-
|
|
3260
|
+
assertUsable(owner, "workspace.writeFile");
|
|
3154
3261
|
return surface.writeFile(path, content);
|
|
3155
3262
|
},
|
|
3156
3263
|
listFiles: async (path, options) => {
|
|
3157
|
-
|
|
3264
|
+
assertUsable(owner, "workspace.listFiles");
|
|
3158
3265
|
return surface.listFiles(path, options);
|
|
3159
3266
|
},
|
|
3160
3267
|
fileSize: async (path) => {
|
|
3161
|
-
|
|
3268
|
+
assertUsable(owner, "workspace.fileSize");
|
|
3162
3269
|
return surface.fileSize(path);
|
|
3163
3270
|
}
|
|
3164
3271
|
};
|
|
@@ -3303,7 +3410,7 @@ function createExtensionContext(input, services, owner) {
|
|
|
3303
3410
|
const childCtx = createExtensionContext(input, services, child);
|
|
3304
3411
|
return Object.assign(childCtx, { dispose: () => child.dispose() });
|
|
3305
3412
|
},
|
|
3306
|
-
onCleanup: (cleanup) => owner.
|
|
3413
|
+
onCleanup: (cleanup) => owner.onTeardown(cleanup),
|
|
3307
3414
|
add: createUiAdd(deps, services.ui),
|
|
3308
3415
|
tools: createToolsDomain(deps, catalogs.tools),
|
|
3309
3416
|
hooks: createHooksDomain(deps, input.hooks, { interceptors: services.interceptors }),
|
|
@@ -3341,6 +3448,8 @@ function desktopDomain(port, owner) {
|
|
|
3341
3448
|
}
|
|
3342
3449
|
};
|
|
3343
3450
|
}
|
|
3451
|
+
/** How long unload waits for async cleanups, in ms. */
|
|
3452
|
+
const UNLOAD_TIMEOUT_MS = 5e3;
|
|
3344
3453
|
const NOT_SETTLED = Symbol("not settled");
|
|
3345
3454
|
/**
|
|
3346
3455
|
* Runs `definition.setup` with a context bound to `owner`.
|
|
@@ -3408,7 +3517,7 @@ async function runSetup(definition, ctxFactory, owner, guard, options = {}) {
|
|
|
3408
3517
|
const warnings = [];
|
|
3409
3518
|
if (typeof result === "function") {
|
|
3410
3519
|
const cleanup = result;
|
|
3411
|
-
owner.
|
|
3520
|
+
owner.onTeardown(() => runCleanup(cleanup));
|
|
3412
3521
|
} else if (result !== void 0) warnings.push(`setup returned ${typeof result}; only a cleanup function or nothing is used`);
|
|
3413
3522
|
return {
|
|
3414
3523
|
ok: true,
|
|
@@ -3416,9 +3525,11 @@ async function runSetup(definition, ctxFactory, owner, guard, options = {}) {
|
|
|
3416
3525
|
};
|
|
3417
3526
|
}
|
|
3418
3527
|
/**
|
|
3419
|
-
* Unloads an extension: disposes its owner (
|
|
3420
|
-
*
|
|
3421
|
-
* cleanups up to a bound.
|
|
3528
|
+
* Unloads an extension: disposes its owner (every registration withdrawn,
|
|
3529
|
+
* then `ctx.signal` aborted and the teardown cleanups run) and waits for the
|
|
3530
|
+
* async cleanups up to a bound. With calls in flight the teardown waits for
|
|
3531
|
+
* them (`owner.ts`): unload then waits only for the withdrawal and reports
|
|
3532
|
+
* `draining`. Calling it again is harmless.
|
|
3422
3533
|
*
|
|
3423
3534
|
* @param owner - The extension's root owner.
|
|
3424
3535
|
* @param options - `timeoutMs`, default {@link UNLOAD_TIMEOUT_MS}.
|
|
@@ -3426,14 +3537,26 @@ async function runSetup(definition, ctxFactory, owner, guard, options = {}) {
|
|
|
3426
3537
|
* @returns Whether every cleanup finished in time.
|
|
3427
3538
|
*/
|
|
3428
3539
|
async function unload(owner, options = {}) {
|
|
3429
|
-
const timeoutMs = options.timeoutMs ?? 5e3;
|
|
3430
3540
|
owner.dispose();
|
|
3541
|
+
if (owner.draining) return {
|
|
3542
|
+
...await settleWithin(owner.withdrawn, options.timeoutMs),
|
|
3543
|
+
draining: true
|
|
3544
|
+
};
|
|
3545
|
+
return settleWithin(owner.settled, options.timeoutMs);
|
|
3546
|
+
}
|
|
3547
|
+
/**
|
|
3548
|
+
* Waits for `done` up to `timeoutMs` (default {@link UNLOAD_TIMEOUT_MS}).
|
|
3549
|
+
*
|
|
3550
|
+
* @param done - Async cleanups settling.
|
|
3551
|
+
* @param timeoutMs - The bound.
|
|
3552
|
+
*/
|
|
3553
|
+
async function settleWithin(done, timeoutMs = UNLOAD_TIMEOUT_MS) {
|
|
3431
3554
|
let timer;
|
|
3432
3555
|
const timedOut = new Promise((resolve) => {
|
|
3433
3556
|
timer = setTimeout(resolve, timeoutMs, NOT_SETTLED);
|
|
3434
3557
|
});
|
|
3435
3558
|
try {
|
|
3436
|
-
return await Promise.race([
|
|
3559
|
+
return await Promise.race([done, timedOut]) === NOT_SETTLED ? {
|
|
3437
3560
|
ok: false,
|
|
3438
3561
|
error: `cleanup still running after ${timeoutMs}ms`
|
|
3439
3562
|
} : { ok: true };
|
|
@@ -3627,7 +3750,9 @@ function createShared(options, ports, baseLogger, records, order, rank) {
|
|
|
3627
3750
|
changeListeners.delete(listener);
|
|
3628
3751
|
};
|
|
3629
3752
|
};
|
|
3753
|
+
let withdrawals = 0;
|
|
3630
3754
|
const outputs = {
|
|
3755
|
+
withdrawals: () => withdrawals,
|
|
3631
3756
|
interceptors: createInterceptorRegistry({ loadOrder: rank }),
|
|
3632
3757
|
catalogs: {
|
|
3633
3758
|
tools: createToolsCatalog(ports.catalogs?.tools ?? { base: () => [] }, loadOrder),
|
|
@@ -3675,7 +3800,8 @@ function createShared(options, ports, baseLogger, records, order, rank) {
|
|
|
3675
3800
|
return r ? {
|
|
3676
3801
|
...r.entry.dir !== void 0 ? { dir: r.entry.dir } : {},
|
|
3677
3802
|
source: r.entry.source,
|
|
3678
|
-
paths: options.paths
|
|
3803
|
+
paths: options.paths,
|
|
3804
|
+
...r.storage ? { storagePath: r.storage.storage.path } : {}
|
|
3679
3805
|
} : void 0;
|
|
3680
3806
|
},
|
|
3681
3807
|
registerSkill: (skill, origin) => outputs.catalogs.skills.register(skill, origin),
|
|
@@ -3729,6 +3855,9 @@ function createShared(options, ports, baseLogger, records, order, rank) {
|
|
|
3729
3855
|
commands.dispose();
|
|
3730
3856
|
services.dialogs.dispose();
|
|
3731
3857
|
};
|
|
3858
|
+
const withdrawn = () => {
|
|
3859
|
+
withdrawals++;
|
|
3860
|
+
};
|
|
3732
3861
|
return {
|
|
3733
3862
|
outputs,
|
|
3734
3863
|
services,
|
|
@@ -3741,7 +3870,8 @@ function createShared(options, ports, baseLogger, records, order, rank) {
|
|
|
3741
3870
|
subscribe,
|
|
3742
3871
|
changeListeners,
|
|
3743
3872
|
...rpcBridge ? { rpcBridge } : {},
|
|
3744
|
-
release
|
|
3873
|
+
release,
|
|
3874
|
+
withdrawn
|
|
3745
3875
|
};
|
|
3746
3876
|
}
|
|
3747
3877
|
/** The per-extension hooks port: the host's bus when given, else the extension's own. */
|
|
@@ -3882,8 +4012,9 @@ async function preloadSessions(records, sessionId, logger) {
|
|
|
3882
4012
|
* withdrawn, cleanups run) and its async cleanups get the unload bound; one
|
|
3883
4013
|
* still running then is logged and left alone. Called again while that runs
|
|
3884
4014
|
* (an unload after the guard tripped), it waits for the same teardown.
|
|
4015
|
+
* `withdrawn` is told before an active owner's registrations go.
|
|
3885
4016
|
*/
|
|
3886
|
-
function deactivateRecord(r, logger) {
|
|
4017
|
+
function deactivateRecord(r, logger, withdrawn) {
|
|
3887
4018
|
const owner = r.owner;
|
|
3888
4019
|
r.owner = void 0;
|
|
3889
4020
|
r.guard = void 0;
|
|
@@ -3894,6 +4025,9 @@ function deactivateRecord(r, logger) {
|
|
|
3894
4025
|
r.host.clear();
|
|
3895
4026
|
return r.deactivating ?? Promise.resolve();
|
|
3896
4027
|
}
|
|
4028
|
+
withdrawn();
|
|
4029
|
+
owner.dispose();
|
|
4030
|
+
if (owner.draining) r.teardown = awaitTeardown(owner, r.id, logger);
|
|
3897
4031
|
r.deactivating = (async () => {
|
|
3898
4032
|
const outcome = await unload(owner);
|
|
3899
4033
|
if (!outcome.ok) logger.warn(`unload: ${outcome.error}`, { extension: r.id });
|
|
@@ -3902,6 +4036,61 @@ function deactivateRecord(r, logger) {
|
|
|
3902
4036
|
})();
|
|
3903
4037
|
return r.deactivating;
|
|
3904
4038
|
}
|
|
4039
|
+
/**
|
|
4040
|
+
* Waits for a draining owner's teardown: it runs once its calls in flight
|
|
4041
|
+
* ended (bounded by the drain bound), then its async cleanups get the unload bound.
|
|
4042
|
+
*/
|
|
4043
|
+
function awaitTeardown(owner, id, logger) {
|
|
4044
|
+
return new Promise((resolve) => {
|
|
4045
|
+
const started = () => {
|
|
4046
|
+
settleWithin(owner.settled).then((outcome) => {
|
|
4047
|
+
if (!outcome.ok) logger.warn(`unload: ${outcome.error}`, { extension: id });
|
|
4048
|
+
resolve();
|
|
4049
|
+
});
|
|
4050
|
+
};
|
|
4051
|
+
if (owner.tornDown) started();
|
|
4052
|
+
else owner.signal.addEventListener("abort", started, { once: true });
|
|
4053
|
+
});
|
|
4054
|
+
}
|
|
4055
|
+
/**
|
|
4056
|
+
* One extension's guard and root owner. Every guarded call holds a lease on
|
|
4057
|
+
* the owner, and the owner logs a deferred teardown on the extension's logger.
|
|
4058
|
+
*/
|
|
4059
|
+
function createGuardedOwner(id, logger, stalls, options, onTrip) {
|
|
4060
|
+
let owner;
|
|
4061
|
+
const guard = createGuard({
|
|
4062
|
+
extensionId: id,
|
|
4063
|
+
logger,
|
|
4064
|
+
stalls,
|
|
4065
|
+
...options.budget !== void 0 ? { budget: options.budget } : {},
|
|
4066
|
+
...options.callbackTimeoutMs !== void 0 ? { timeoutMs: options.callbackTimeoutMs } : {},
|
|
4067
|
+
lease: (label, leaseOpts) => owner.lease(label, leaseOpts),
|
|
4068
|
+
onTrip: (trip) => onTrip(trip, guard)
|
|
4069
|
+
});
|
|
4070
|
+
const track = options.trackCalls;
|
|
4071
|
+
if (track) {
|
|
4072
|
+
const call = guard.call;
|
|
4073
|
+
guard.call = (label, fn, opts) => {
|
|
4074
|
+
const pending = call(label, fn, opts);
|
|
4075
|
+
track(pending);
|
|
4076
|
+
return pending;
|
|
4077
|
+
};
|
|
4078
|
+
}
|
|
4079
|
+
owner = createOwner(void 0, {
|
|
4080
|
+
onError: (error, label) => guard.report(label, error),
|
|
4081
|
+
label: id,
|
|
4082
|
+
...options.drainTimeoutMs !== void 0 ? { drainMs: options.drainTimeoutMs } : {},
|
|
4083
|
+
onDrain: ({ active, ms }) => logger.warn(`unloaded with ${active.length} call${active.length === 1 ? "" : "s"} in flight (${active.join(", ")}): its registrations are withdrawn, the rest is torn down once they finish (at most ${Math.round(ms / 1e3)}s)`, {
|
|
4084
|
+
active,
|
|
4085
|
+
boundMs: ms
|
|
4086
|
+
}),
|
|
4087
|
+
onDrainTimeout: ({ active, ms }) => logger.warn(`calls still running ${Math.round(ms / 1e3)}s after unload (${active.join(", ")}): tearing down now`, { active })
|
|
4088
|
+
});
|
|
4089
|
+
return {
|
|
4090
|
+
guard,
|
|
4091
|
+
owner
|
|
4092
|
+
};
|
|
4093
|
+
}
|
|
3905
4094
|
/** Runs async work one at a time, in call order; a failure does not stop the next. */
|
|
3906
4095
|
function createSerial() {
|
|
3907
4096
|
let queue = Promise.resolve();
|
|
@@ -3929,7 +4118,7 @@ async function reloadInPlace(c, id, opts) {
|
|
|
3929
4118
|
...entry,
|
|
3930
4119
|
enabled: r.entry.enabled
|
|
3931
4120
|
};
|
|
3932
|
-
await deactivateRecord(r, c.logger);
|
|
4121
|
+
await deactivateRecord(r, c.logger, c.withdrawn);
|
|
3933
4122
|
c.removeUi(id);
|
|
3934
4123
|
if (c.disposed() || c.records.get(id) !== r) return void 0;
|
|
3935
4124
|
const known = c.order.filter((other) => other !== id).map((other) => c.records.get(other));
|
|
@@ -3959,7 +4148,7 @@ async function reloadInPlace(c, id, opts) {
|
|
|
3959
4148
|
function defaultReimport() {
|
|
3960
4149
|
return async (entry) => {
|
|
3961
4150
|
if (entry.dir === void 0 || entry.source === "inline" || entry.source === "builtin") return entry;
|
|
3962
|
-
const [{ loadExtensionFolder }, { runtimeEntryOf }] = await Promise.all([import("./discovery-
|
|
4151
|
+
const [{ loadExtensionFolder }, { runtimeEntryOf }] = await Promise.all([import("./discovery-CX7nbMCn.js").then((n) => n.a), import("./loaded-entry-C0vkCVNQ.js").then((n) => n.r)]);
|
|
3963
4152
|
return {
|
|
3964
4153
|
...runtimeEntryOf(await loadExtensionFolder(entry.dir, { source: entry.source === "project" ? "project" : "user" }), entry.enabled),
|
|
3965
4154
|
source: entry.source
|
|
@@ -3986,7 +4175,7 @@ function createExtensionRuntime(options) {
|
|
|
3986
4175
|
const at = order.indexOf(id);
|
|
3987
4176
|
return at === -1 ? Number.MAX_SAFE_INTEGER : at;
|
|
3988
4177
|
};
|
|
3989
|
-
const { outputs, services, hostListeners, refreshObservers, artifactKinds, pluginRecords, changed, statusChanged, subscribe, changeListeners, rpcBridge, release } = createShared(options, ports, baseLogger, records, order, rank);
|
|
4178
|
+
const { outputs, services, hostListeners, refreshObservers, artifactKinds, pluginRecords, changed, statusChanged, subscribe, changeListeners, rpcBridge, release, withdrawn } = createShared(options, ports, baseLogger, records, order, rank);
|
|
3990
4179
|
const { ui } = outputs;
|
|
3991
4180
|
const stalls = createStallMonitor({ onStall: (report) => {
|
|
3992
4181
|
baseLogger.warn(`${report.label} blocked the event loop for ${Math.round(report.durationMs)}ms`, {
|
|
@@ -4014,30 +4203,10 @@ function createExtensionRuntime(options) {
|
|
|
4014
4203
|
const activate = async (r) => {
|
|
4015
4204
|
const def = r.definition;
|
|
4016
4205
|
const logger = baseLogger.with({ extension: r.id });
|
|
4017
|
-
const guard =
|
|
4018
|
-
|
|
4019
|
-
|
|
4020
|
-
|
|
4021
|
-
...options.budget !== void 0 ? { budget: options.budget } : {},
|
|
4022
|
-
...options.callbackTimeoutMs !== void 0 ? { timeoutMs: options.callbackTimeoutMs } : {},
|
|
4023
|
-
onTrip: (trip) => {
|
|
4024
|
-
if (r.guard !== guard) return;
|
|
4025
|
-
setStatus(r, "failed", `Disabled: ${trip.reason}`);
|
|
4026
|
-
deactivateRecord(r, baseLogger);
|
|
4027
|
-
}
|
|
4028
|
-
});
|
|
4029
|
-
const track = options.trackCalls;
|
|
4030
|
-
if (track) {
|
|
4031
|
-
const call = guard.call;
|
|
4032
|
-
guard.call = (label, fn, opts) => {
|
|
4033
|
-
const pending = call(label, fn, opts);
|
|
4034
|
-
track(pending);
|
|
4035
|
-
return pending;
|
|
4036
|
-
};
|
|
4037
|
-
}
|
|
4038
|
-
const owner = createOwner(void 0, {
|
|
4039
|
-
onError: (error, label) => guard.report(label, error),
|
|
4040
|
-
label: r.id
|
|
4206
|
+
const { guard, owner } = createGuardedOwner(r.id, logger, stalls, options, (trip, tripped) => {
|
|
4207
|
+
if (r.guard !== tripped) return;
|
|
4208
|
+
setStatus(r, "failed", `Disabled: ${trip.reason}`);
|
|
4209
|
+
deactivateRecord(r, baseLogger, withdrawn);
|
|
4041
4210
|
});
|
|
4042
4211
|
const deps = {
|
|
4043
4212
|
extensionId: r.id,
|
|
@@ -4048,6 +4217,7 @@ function createExtensionRuntime(options) {
|
|
|
4048
4217
|
const settings = createSettingsDomain(deps, settingsPort, def.settings);
|
|
4049
4218
|
const storage = createStorageDomain(deps, storagePort, {
|
|
4050
4219
|
paths: options.paths,
|
|
4220
|
+
...r.entry.dir !== void 0 ? { dir: r.entry.dir } : {},
|
|
4051
4221
|
memory,
|
|
4052
4222
|
...ports.currentSessionId ? { currentSessionId: ports.currentSessionId } : {}
|
|
4053
4223
|
});
|
|
@@ -4119,7 +4289,7 @@ function createExtensionRuntime(options) {
|
|
|
4119
4289
|
if (!r) return;
|
|
4120
4290
|
records.delete(id);
|
|
4121
4291
|
order.splice(order.indexOf(id), 1);
|
|
4122
|
-
await deactivateRecord(r, baseLogger);
|
|
4292
|
+
await deactivateRecord(r, baseLogger, withdrawn);
|
|
4123
4293
|
ui.removeExtension(id);
|
|
4124
4294
|
if (opts.forget) {
|
|
4125
4295
|
memory.clear(id);
|
|
@@ -4137,6 +4307,7 @@ function createExtensionRuntime(options) {
|
|
|
4137
4307
|
logger: baseLogger,
|
|
4138
4308
|
reimport: options.reimport ?? defaultReimport(),
|
|
4139
4309
|
disposed: () => disposed,
|
|
4310
|
+
withdrawn,
|
|
4140
4311
|
setStatus,
|
|
4141
4312
|
activate,
|
|
4142
4313
|
unload: unloadNow,
|
|
@@ -4181,13 +4352,15 @@ function createExtensionRuntime(options) {
|
|
|
4181
4352
|
dispose: async () => {
|
|
4182
4353
|
if (disposed) return;
|
|
4183
4354
|
disposed = true;
|
|
4355
|
+
withdrawn();
|
|
4184
4356
|
services.facets.close();
|
|
4185
4357
|
const all = [...order].reverse().map((id) => records.get(id));
|
|
4186
|
-
await Promise.all(all.map((r) => deactivateRecord(r, baseLogger)));
|
|
4358
|
+
await Promise.all(all.map((r) => deactivateRecord(r, baseLogger, withdrawn)));
|
|
4187
4359
|
for (const r of all) ui.removeExtension(r.id);
|
|
4188
4360
|
records.clear();
|
|
4189
4361
|
order.length = 0;
|
|
4190
4362
|
changeListeners.clear();
|
|
4363
|
+
await Promise.all(all.map((r) => r.teardown));
|
|
4191
4364
|
release();
|
|
4192
4365
|
}
|
|
4193
4366
|
};
|
|
@@ -4195,4 +4368,4 @@ function createExtensionRuntime(options) {
|
|
|
4195
4368
|
//#endregion
|
|
4196
4369
|
export { HOST_EVENT_NAMES as a, createRpcDomain as i, host_exports as n, isSyncInterceptor as o, createGuard as r, createExtensionRuntime as t };
|
|
4197
4370
|
|
|
4198
|
-
//# sourceMappingURL=host-
|
|
4371
|
+
//# sourceMappingURL=host-C61ntFBC.js.map
|