@makaio/framework 1.0.0-dev-1781023871421 → 1.0.0-dev-1781034508425
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/.makaio-build.json +2 -2
- package/dist/{account-identity-DT5NOtFi.mjs → account-identity-CgzOqnVm.mjs} +1 -1
- package/dist/{adapter-C1eI-fGV.mjs → adapter-Dt2FDMs4.mjs} +1 -1
- package/dist/adapters/acp-client/index.d.mts +4 -4
- package/dist/adapters/config/index.d.mts +1 -1
- package/dist/adapters/config/index.mjs +1 -1
- package/dist/adapters/index.d.mts +2 -2
- package/dist/adapters/index.mjs +6 -13
- package/dist/adapters/node.d.mts +1 -1
- package/dist/adapters/node.mjs +1 -1
- package/dist/ajv-B-geJci9.mjs +8 -0
- package/dist/await-trigger-CmK_k2oe.mjs +1 -0
- package/dist/bus/index.d.mts +2 -2
- package/dist/{client-bx74gm4R.mjs → client-BBJf1mVA.mjs} +1 -1
- package/dist/{clients-namespace-GmSJpBUV.d.mts → clients-namespace-DOr4mmmr.d.mts} +7 -7
- package/dist/contracts/adapter/index.d.mts +2 -2
- package/dist/contracts/adapter/index.mjs +1 -1
- package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
- package/dist/contracts/artifact/index.d.mts +1 -1
- package/dist/contracts/client/index.d.mts +2 -2
- package/dist/contracts/client/index.mjs +1 -1
- package/dist/contracts/common/index.d.mts +1 -1
- package/dist/contracts/config/index.d.mts +1 -1
- package/dist/contracts/config/index.mjs +1 -1
- package/dist/contracts/extension/index.d.mts +3 -3
- package/dist/contracts/extension/index.mjs +1 -1
- package/dist/contracts/facet/index.d.mts +1 -1
- package/dist/contracts/facet/index.mjs +1 -1
- package/dist/contracts/harness/index.d.mts +1 -1
- package/dist/contracts/harness/index.mjs +1 -1
- package/dist/contracts/host/index.d.mts +1 -1
- package/dist/contracts/host/index.mjs +1 -1
- package/dist/contracts/index.d.mts +192 -192
- package/dist/contracts/index.mjs +1 -1
- package/dist/contracts/materialization/index.d.mts +3 -3
- package/dist/contracts/materialization/index.mjs +1 -1
- package/dist/contracts/model-registry/index.d.mts +1 -1
- package/dist/contracts/model-registry/index.mjs +1 -1
- package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
- package/dist/contracts/native-session-supervisor/index.mjs +1 -1
- package/dist/contracts/platform/index.d.mts +1 -1
- package/dist/contracts/platform/index.mjs +1 -1
- package/dist/contracts/provider/index.d.mts +2 -2
- package/dist/contracts/session/index.d.mts +2 -2
- package/dist/contracts/session/index.mjs +1 -1
- package/dist/contracts/shared/index.d.mts +1 -1
- package/dist/contracts/skill/index.d.mts +1 -1
- package/dist/contracts/skill/index.mjs +1 -1
- package/dist/contracts/telemetry/index.d.mts +1 -1
- package/dist/contracts/telemetry/index.mjs +1 -1
- package/dist/contracts/timeout/index.d.mts +1 -1
- package/dist/contracts/toast/index.mjs +1 -1
- package/dist/contracts/variant/index.d.mts +1 -1
- package/dist/contracts/variant/index.mjs +1 -1
- package/dist/create-static-mount-Btee48F5.mjs +1 -0
- package/dist/cross-spawn-CTptpCy4.mjs +1 -0
- package/dist/{cursor-storage-CtVJ3JzB.mjs → cursor-storage-BOsCO4oj.mjs} +1 -1
- package/dist/{definition-CrgHIpTK.d.mts → definition-BidQ9_x8.d.mts} +1 -1
- package/dist/{definition-BLCdXGzh.d.mts → definition-CWCNiH-q.d.mts} +1 -1
- package/dist/descriptor-to-package-CY8oc2gl.mjs +1 -0
- package/dist/detached-extension-handle-Bo5Q06_g.mjs +1 -0
- package/dist/esm-BdLRFEUy.mjs +3 -0
- package/dist/expression/index.d.mts +120 -0
- package/dist/expression/index.mjs +1431 -0
- package/dist/{extension-C-4BHMRI.mjs → extension-CbCanyuh.mjs} +1 -1
- package/dist/{extension-CpIUgBKI.mjs → extension-DFIZ3FCJ.mjs} +1 -1
- package/dist/extension-discovery-CffOPDvn.d.mts +163 -0
- package/dist/fast-uri-DARKlakU.mjs +1 -0
- package/dist/{filesystem-service-B8rhBRgB.mjs → filesystem-service-B9RbT-n-.mjs} +1 -1
- package/dist/git/index.mjs +17 -17
- package/dist/globby-DPHEhf86.mjs +1 -0
- package/dist/{handlers-CkTsQLra.mjs → handlers-Bl2Af8zt.mjs} +1 -1
- package/dist/{index-CCGVh9BF2.d.mts → index-B-_F8N_E.d.mts} +12 -12
- package/dist/{index-Caig6TeF.d.mts → index-B5lijQs7.d.mts} +93 -17
- package/dist/{index-Bh_Ne7LF.d.mts → index-BF8DYsOC.d.mts} +30 -30
- package/dist/{index-472sOmsW.d.mts → index-BLmI8xDN.d.mts} +4 -4
- package/dist/index-BM7lYmmQ.d.mts +1133 -0
- package/dist/{index-Cm0dUkWL.d.mts → index-BXip2Nlo.d.mts} +18 -18
- package/dist/{index-CelJCBjk.d.mts → index-Brlbx33t.d.mts} +15 -15
- package/dist/{index-B3PK4FIn.d.mts → index-Bs5H4PFm.d.mts} +92 -92
- package/dist/{index-B_zQC98V.d.mts → index-Dnd_-839.d.mts} +8 -8
- package/dist/{index-DUaw0Dw8.d.mts → index-DuIPU8sG.d.mts} +139 -139
- package/dist/{index-Bvb2mMH6.d.mts → index-LbBWaNnT.d.mts} +98 -98
- package/dist/{index-DBw-89vC2.d.mts → index-WZX3cU1L.d.mts} +5 -5
- package/dist/{index-mNec7V-9.d.mts → index-ayGCeZ8t.d.mts} +24 -24
- package/dist/{index-D90OmGmV.d.mts → index-k7SK-A0P.d.mts} +3 -3
- package/dist/{index-soFznFCy2.d.mts → index-o9__SHM7.d.mts} +1 -1
- package/dist/jsonl-transport-DN1zyi6w.mjs +3 -0
- package/dist/kernel/cli/index.d.mts +1 -1
- package/dist/kernel/cli/index.mjs +1 -1
- package/dist/kernel/cli/schemas.mjs +1 -1
- package/dist/kernel/extension/index.d.mts +1 -1
- package/dist/kernel/extension/index.mjs +1 -1
- package/dist/kernel/index.d.mts +5 -5
- package/dist/kernel/index.mjs +1 -1
- package/dist/kernel/namespace/index.d.mts +1 -1
- package/dist/kernel/namespace/index.mjs +1 -1
- package/dist/kernel/observability/index.d.mts +1 -1
- package/dist/kernel/observability/index.mjs +1 -1
- package/dist/kernel/providers/index.d.mts +1 -1
- package/dist/kernel/providers/index.mjs +1 -1
- package/dist/kernel/window/index.d.mts +1 -1
- package/dist/kernel/window/index.mjs +1 -1
- package/dist/lib--v_LnhHr.mjs +5 -0
- package/dist/lib-DtXofYKC.mjs +4 -0
- package/dist/lib-X80cqNZ5.mjs +155 -0
- package/dist/load-extensions-CESuhxma.mjs +1 -0
- package/dist/load-extensions-t2rtaz1C.d.mts +117 -0
- package/dist/mcp-http-server/index.d.mts +561 -0
- package/dist/mcp-http-server/index.mjs +11 -0
- package/dist/{namespace-Dr8K0MCp.d.mts → namespace-B0l_lsLW.d.mts} +12 -12
- package/dist/{namespace-BM7Djng9.d.mts → namespace-BFM1kQbS.d.mts} +2 -2
- package/dist/{namespace-DgqkaOVu.d.mts → namespace-BnVlQiRv.d.mts} +22 -22
- package/dist/{namespace-CaaNnKcR.d.mts → namespace-BsmSZbub.d.mts} +2 -2
- package/dist/{namespace-DD8Oiqo7.d.mts → namespace-CfqAh9gM.d.mts} +20 -20
- package/dist/{namespace-TyiTsLFv.d.mts → namespace-DldKDPMI.d.mts} +28 -28
- package/dist/{namespace-5QQqbF-B.d.mts → namespace-SD7Y-_iY.d.mts} +36 -36
- package/dist/{namespace-DLovh2Ws.d.mts → namespace-YsOUkmgE.d.mts} +12 -12
- package/dist/{namespace-DuXK5AYN.mjs → namespace-eOeUjGPB.mjs} +1 -1
- package/dist/{namespace-EQniz-Aw.d.mts → namespace-l8A5zTPU2.d.mts} +2 -2
- package/dist/{namespace-CxhsoFUP.d.mts → namespace-sd3QrSzo.d.mts} +20 -20
- package/dist/{native-session-supervisor-B1TnaPUF.mjs → native-session-supervisor-DeKpxhWO.mjs} +1 -1
- package/dist/node/bus-server/index.d.mts +1 -1
- package/dist/node/bus-server/index.mjs +1 -1
- package/dist/node/bus-server/server-lifecycle.d.mts +1 -1
- package/dist/node/bus-server/server-lifecycle.mjs +1 -1
- package/dist/{orchestrator-shared-CIDiFJMD.mjs → orchestrator-shared-DaPATFz1.mjs} +1 -1
- package/dist/out-Rp-RSvc2.mjs +41 -0
- package/dist/{profile-6ynCD5k3.mjs → profile-D39-Zy_W.mjs} +1 -1
- package/dist/{provider-context-CK6B4X_8.mjs → provider-context-ClL5nCQg.mjs} +1 -1
- package/dist/quick-lru-8GhFeKMZ.mjs +1 -0
- package/dist/rules/index.d.mts +27 -0
- package/dist/rules/index.mjs +1 -0
- package/dist/rules/schemas.d.mts +2 -0
- package/dist/rules/schemas.mjs +1 -0
- package/dist/runtime-bun/index.d.mts +385 -0
- package/dist/runtime-bun/index.mjs +1 -0
- package/dist/runtime-node/bus/runtime/namespace.d.mts +61 -0
- package/dist/runtime-node/bus/runtime/namespace.mjs +1 -0
- package/dist/runtime-node/bus/runtime/schemas.d.mts +54 -0
- package/dist/runtime-node/bus/runtime/schemas.mjs +1 -0
- package/dist/runtime-node/extension-discovery.d.mts +2 -0
- package/dist/runtime-node/extension-discovery.mjs +1 -0
- package/dist/runtime-node/extension-validation.d.mts +2 -0
- package/dist/runtime-node/extension-validation.mjs +1 -0
- package/dist/runtime-node/index.d.mts +745 -0
- package/dist/runtime-node/index.mjs +148 -0
- package/dist/runtime-node/makaio-config.d.mts +153 -0
- package/dist/runtime-node/makaio-config.mjs +1 -0
- package/dist/runtime-node/workflow-worker/index.d.mts +2 -0
- package/dist/runtime-node/workflow-worker/index.mjs +1 -0
- package/dist/runtime-node/workflow-worker/worker-entry.d.mts +39 -0
- package/dist/runtime-node/workflow-worker/worker-entry.mjs +1 -0
- package/dist/{schema-M5YTvSAG.d.mts → schema-BycLqlQI.d.mts} +2 -2
- package/dist/{schema-e0wU_lcV.mjs → schema-DxHkeT-G.mjs} +1 -1
- package/dist/schema-introspection-A6FnQ1qg.mjs +1 -0
- package/dist/{schemas-C46QfKzv.d.mts → schemas-BI4gqRlW.d.mts} +17 -17
- package/dist/{schemas-DATniTHb.d.mts → schemas-BkeedMoC.d.mts} +7 -7
- package/dist/{schemas-DVF1A4DF.d.mts → schemas-C3wZhEAc.d.mts} +4 -4
- package/dist/{schemas-ClOOT1W6.d.mts → schemas-C4u2d8jR.d.mts} +3 -3
- package/dist/{schemas-CaLhkkLn.mjs → schemas-CSUwpaNm.mjs} +1 -1
- package/dist/{schemas-DiYVzG6e.d.mts → schemas-CaeiaR4r2.d.mts} +15 -15
- package/dist/{schemas-j7ivZ2HI.d.mts → schemas-D7wxjmif.d.mts} +2 -2
- package/dist/schemas-WJ9OOsOF.d.mts +171 -0
- package/dist/{schemas-wg_6PAdV.d.mts → schemas-mD6cFIJs.d.mts} +1 -1
- package/dist/semver-DhHJv6Dt.mjs +1 -0
- package/dist/services/adapter-runtime/index.d.mts +3 -3
- package/dist/services/adapter-runtime/namespace.d.mts +1 -1
- package/dist/services/adapter-runtime/schemas.d.mts +1 -1
- package/dist/services/adapter-subsystem/index.d.mts +2 -2
- package/dist/services/adapter-subsystem/index.mjs +1 -1
- package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
- package/dist/services/adapter-subsystem/namespace.mjs +1 -1
- package/dist/services/agent-runtime/index.d.mts +2 -2
- package/dist/services/agent-runtime/namespace.d.mts +1 -1
- package/dist/services/agent-runtime/schemas.d.mts +1 -1
- package/dist/services/capability/index.d.mts +1 -1
- package/dist/services/capability/index.mjs +1 -1
- package/dist/services/codebase/index.d.mts +2 -2
- package/dist/services/codebase/namespace.d.mts +1 -1
- package/dist/services/codebase/schemas.d.mts +1 -1
- package/dist/services/compression/index.d.mts +2 -2
- package/dist/services/compression/namespace.d.mts +1 -1
- package/dist/services/compression/schemas.d.mts +1 -1
- package/dist/services/context-rules/index.d.mts +1 -1
- package/dist/services/context-rules/index.mjs +1 -1
- package/dist/services/execution-target/index.d.mts +3 -3
- package/dist/services/execution-target/namespace.d.mts +1 -1
- package/dist/services/execution-target/schemas.d.mts +1 -1
- package/dist/services/filesystem/index.d.mts +1 -1
- package/dist/services/filesystem/index.mjs +1 -1
- package/dist/services/filesystem/namespace.d.mts +6 -6
- package/dist/services/filesystem/schemas.d.mts +3 -3
- package/dist/services/git/namespace.d.mts +2 -2
- package/dist/services/git/schemas.d.mts +1 -1
- package/dist/services/harness/index.d.mts +31 -31
- package/dist/services/harness/storage/schema.d.mts +4 -4
- package/dist/services/index.d.mts +99 -98
- package/dist/services/index.mjs +1 -1
- package/dist/services/log-import/browser.d.mts +2 -2
- package/dist/services/log-import/index.d.mts +2 -2
- package/dist/services/log-import/log-import.d.mts +1 -1
- package/dist/services/log-import/log-import.mjs +1 -1
- package/dist/services/log-import/namespace.mjs +1 -1
- package/dist/services/log-import/schemas.mjs +1 -1
- package/dist/services/model-registry/index.d.mts +1 -1
- package/dist/services/model-registry/index.mjs +1 -1
- package/dist/services/preferences/index.d.mts +2 -2
- package/dist/services/preferences/schemas.d.mts +1 -1
- package/dist/services/preferences/storage-namespace.d.mts +2 -2
- package/dist/services/provider-context/index.d.mts +1 -1
- package/dist/services/provider-context/index.mjs +1 -1
- package/dist/services/provider-runtime/index.mjs +1 -1
- package/dist/services/session/handlers/index.d.mts +1 -1
- package/dist/services/session/handlers/index.mjs +1 -1
- package/dist/services/session/index.d.mts +9 -9
- package/dist/services/session/index.mjs +1 -1
- package/dist/services/session/messages/namespace.d.mts +1 -1
- package/dist/services/session/messages/namespace.mjs +1 -1
- package/dist/services/session/orchestrator-testing/index.d.mts +1 -1
- package/dist/services/session/orchestrator-testing/index.mjs +1 -1
- package/dist/services/session/session-events/namespace.d.mts +1 -1
- package/dist/services/session/session-events/namespace.mjs +1 -1
- package/dist/services/session/storage/namespace.d.mts +1 -1
- package/dist/services/session/storage/schema.d.mts +1 -1
- package/dist/services/session/testing/index.mjs +1 -1
- package/dist/services/session/testing/orchestrator-shared.d.mts +1 -1
- package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
- package/dist/services/session/turns/namespace.d.mts +1 -1
- package/dist/services/session/turns/namespace.mjs +1 -1
- package/dist/services/session-editor/index.d.mts +1 -1
- package/dist/services/session-editor/index.mjs +1 -1
- package/dist/services/settings/index.d.mts +3 -3
- package/dist/services/settings/index.mjs +1 -1
- package/dist/services/settings/namespace.d.mts +12 -12
- package/dist/services/settings/storage/clients-namespace.d.mts +1 -1
- package/dist/services/settings/storage/clients-namespace.mjs +1 -1
- package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
- package/dist/services/settings/storage/index.d.mts +3 -3
- package/dist/services/settings/storage/index.mjs +1 -1
- package/dist/services/settings/storage/providers-namespace.d.mts +1 -1
- package/dist/services/settings/storage/providers-namespace.mjs +1 -1
- package/dist/services/subagent/index.d.mts +1 -1
- package/dist/services/subagent-template/index.d.mts +2 -2
- package/dist/services/subagent-template/namespace.d.mts +1 -1
- package/dist/services/subagent-template/schemas.d.mts +1 -1
- package/dist/services/tool-approval/index.d.mts +1 -1
- package/dist/services/tool-approval/index.mjs +1 -1
- package/dist/services/tools/index.d.mts +1 -1
- package/dist/services/tools/index.mjs +1 -1
- package/dist/services/tray-menu/index.d.mts +3 -3
- package/dist/services/tray-menu/index.mjs +1 -1
- package/dist/services/tray-menu/namespace.d.mts +1 -1
- package/dist/services/tray-menu/schemas.d.mts +1 -1
- package/dist/services/turn/index.d.mts +1 -1
- package/dist/services/turn/namespace.d.mts +1 -1
- package/dist/services/turn/schemas.d.mts +10 -10
- package/dist/{session-DuVOYctZ.mjs → session-C1Cami7U.mjs} +1 -1
- package/dist/{session-BoldSdNZ2.mjs → session-DOGx_Qrm2.mjs} +1 -1
- package/dist/{skill-CQO4mDqK.mjs → skill-BNQnWVIG.mjs} +1 -1
- package/dist/src-BdKH_3mM.mjs +1 -0
- package/dist/src-CUlokMRL.mjs +21 -0
- package/dist/storage/drizzle/client.d.mts +1 -1
- package/dist/storage/drizzle/index.d.mts +1 -1
- package/dist/storage/handlers/drizzle/index.d.mts +1 -1
- package/dist/storage/handlers/drizzle/index.mjs +1 -1
- package/dist/storage/handlers/index.d.mts +1 -1
- package/dist/storage/handlers/index.mjs +1 -1
- package/dist/storage-namespace-DecBVTzH.mjs +1 -0
- package/dist/{storage-namespace-BXkoh5Sy.d.mts → storage-namespace-DyOwnbQO.d.mts} +10 -10
- package/dist/style.css +540 -540
- package/dist/supports-color-CcNsYzyh.mjs +1 -0
- package/dist/{tool-approval-service-BvZWhYZp.mjs → tool-approval-service-DRe1lqy-.mjs} +1 -1
- package/dist/tools-BXEIs_Ur.mjs +1 -0
- package/dist/{types-Dy3YTcTF.d.mts → types-BQB_1_Tv.d.mts} +55 -55
- package/dist/{types-BCMUtBj1.d.mts → types-CLojY5bP.d.mts} +1 -1
- package/dist/{types-CCdqjeuH.d.mts → types-DVAi-qkD.d.mts} +2 -81
- package/dist/{types-DZHvOc_Q.d.mts → types-igF72H-P.d.mts} +1 -1
- package/dist/ui-components/index.d.mts +1 -1
- package/dist/ui-components/index.mjs +2 -2
- package/dist/ui-hooks/index.d.mts +6 -6
- package/dist/ui-kernel/index.d.mts +4 -4
- package/dist/ui-kernel/pages/namespace.d.mts +4 -4
- package/dist/ui-kernel/pages/schemas.d.mts +1 -1
- package/dist/ui-views/index.mjs +2 -2
- package/dist/version-B4NO_fID.mjs +1 -0
- package/dist/workflow-worker-BWoY_2ue.mjs +1 -0
- package/package.json +53 -1
- package/dist/globby-rtWVaFHv.mjs +0 -41
- package/dist/schema-introspection-Dn1jWQs1.mjs +0 -1
- package/dist/schemas-CVvwIfG4.mjs +0 -1
- package/dist/storage-namespace-DWsYLAXa.mjs +0 -1
- package/dist/tools-D-luYcDw.mjs +0 -1431
- package/dist/version-BeT3ASEe.mjs +0 -1
- /package/dist/{base-orchestrator-wyumsn3b.d.mts → base-orchestrator-D9E-Y8Kr.d.mts} +0 -0
- /package/dist/{capability-service-CJbmhfv9.mjs → capability-service-C2RapAHW.mjs} +0 -0
- /package/dist/{cleanEnvForAdapter-KkYzQa1f.mjs → cleanEnvForAdapter-GVzUk_oB.mjs} +0 -0
- /package/dist/{config-namespace-CPY9YsR8.d.mts → config-namespace-B5fFJwQj.d.mts} +0 -0
- /package/dist/{config-namespace-ncYg2ct_.mjs → config-namespace-DydHz9so.mjs} +0 -0
- /package/dist/{definition-pkJ6szUl.d.mts → definition-C4DLI1SC.d.mts} +0 -0
- /package/dist/{drizzle-Eq8W1EbD.mjs → drizzle-YUDNFNbV.mjs} +0 -0
- /package/dist/{extension-namespace-cMh_mMiL.mjs → extension-namespace-BBgYOttA.mjs} +0 -0
- /package/dist/{facet-BuwhrThl.mjs → facet-DMrryX_0.mjs} +0 -0
- /package/dist/{filesystem-service-p_iJVHd4.d.mts → filesystem-service-Cw4_S1bm.d.mts} +0 -0
- /package/dist/{harness-BRCMcvQN.mjs → harness-B8E_wRwa.mjs} +0 -0
- /package/dist/{host-Br9VuOyr.mjs → host-DbMiI5wQ.mjs} +0 -0
- /package/dist/{index-D9MwJ2Q8.d.mts → index-2mvEGCcP.d.mts} +0 -0
- /package/dist/{index-D5d5HeWI2.d.mts → index-8AU9itst2.d.mts} +0 -0
- /package/dist/{index-DKC62dY5.d.mts → index-AJDF86bD2.d.mts} +0 -0
- /package/dist/{index-L4GjJDKb.d.mts → index-B0bwOIpr.d.mts} +0 -0
- /package/dist/{index-CokQYGVP.d.mts → index-B3SbibGM.d.mts} +0 -0
- /package/dist/{index-CHQ1SqT0.d.mts → index-BKqJTm2-.d.mts} +0 -0
- /package/dist/{index-DMKnON5s.d.mts → index-BPn5ODFL.d.mts} +0 -0
- /package/dist/{index-CLpjm52M.d.mts → index-BWA-Bf0T.d.mts} +0 -0
- /package/dist/{index-x_lVDp_J.d.mts → index-BZmLqP2a.d.mts} +0 -0
- /package/dist/{index-DGBu6bHi2.d.mts → index-BkKMwRJj.d.mts} +0 -0
- /package/dist/{index-BFg9BUpx.d.mts → index-Bo6dMW5B.d.mts} +0 -0
- /package/dist/{index-DANINzMu.d.mts → index-CBW3XX7b.d.mts} +0 -0
- /package/dist/{index-eemAKwsB.d.mts → index-CE2F0_8r.d.mts} +0 -0
- /package/dist/{index-U-A8eyGT.d.mts → index-CJt_4GQu.d.mts} +0 -0
- /package/dist/{index-BGfWS6GE.d.mts → index-ChpYWZGc.d.mts} +0 -0
- /package/dist/{index-DKia0MX1.d.mts → index-DOAUskuB.d.mts} +0 -0
- /package/dist/{index-CGmcS0Ma.d.mts → index-DOfnh3xf.d.mts} +0 -0
- /package/dist/{index-De3kPhlN.d.mts → index-DYLb4v5z.d.mts} +0 -0
- /package/dist/{index-B80L4YqA.d.mts → index-DpKxkrU8.d.mts} +0 -0
- /package/dist/{index-Cs0kZXIz2.d.mts → index-FjZOM4M0.d.mts} +0 -0
- /package/dist/{index-BVgfS-AJ.d.mts → index-Ksoed-mL.d.mts} +0 -0
- /package/dist/{index-8SZkg7s6.d.mts → index-j7hM0JEz.d.mts} +0 -0
- /package/dist/{index-vtXJuwrz.d.mts → index-rQU8B-JX.d.mts} +0 -0
- /package/dist/{index-ChunCFu4.d.mts → index-sQ-7cpgm2.d.mts} +0 -0
- /package/dist/{materialization-CuUBu4XI.mjs → materialization-3QUnQLbC.mjs} +0 -0
- /package/dist/{model-registry-Scn_MC2d.mjs → model-registry-DdZrE4sa.mjs} +0 -0
- /package/dist/{model-registry-CfXytvzx.mjs → model-registry-j-rCKcik.mjs} +0 -0
- /package/dist/{namespace-DkRgbZYn.mjs → namespace-BGGiHXkz.mjs} +0 -0
- /package/dist/{namespace-CFLAmQfh.mjs → namespace-BbjCyZC9.mjs} +0 -0
- /package/dist/{namespace-CTm3nEvh.d.mts → namespace-Buecxx19.d.mts} +0 -0
- /package/dist/{namespace-LViZ-EQk.mjs → namespace-CCfEHbi9.mjs} +0 -0
- /package/dist/{namespace-BoD94mrN.mjs → namespace-DzS4SSkr2.mjs} +0 -0
- /package/dist/{namespace-xcmbQlxh.mjs → namespace-FT8igkn4.mjs} +0 -0
- /package/dist/{namespace-CaoZ3S78.d.mts → namespace-oS2v7viW.d.mts} +0 -0
- /package/dist/{namespace-IV1QK__V.d.mts → namespace-wYMkOtE0.d.mts} +0 -0
- /package/dist/{orchestrator-shared-Dfa7FMyw.d.mts → orchestrator-shared-DXAvgseP.d.mts} +0 -0
- /package/dist/{platform-DZ7z-wXD.mjs → platform-Dhv22LiX.mjs} +0 -0
- /package/dist/{providers-u8i15co9.mjs → providers-B1p0P-vB.mjs} +0 -0
- /package/dist/{providers-namespace-DSEpli4A.d.mts → providers-namespace-BITpk8sN.d.mts} +0 -0
- /package/dist/{schema-CoyE6mPt.mjs → schema-DdMn1KCD.mjs} +0 -0
- /package/dist/{schemas-DaRSfYLf.d.mts → schemas-7y9O8b0X.d.mts} +0 -0
- /package/dist/{schemas-DE-GNmSD.mjs → schemas-B-Z4U9FN.mjs} +0 -0
- /package/dist/{schemas-jFe1AuI-.mjs → schemas-BCIuTWRl2.mjs} +0 -0
- /package/dist/{schemas-Bd0OjRQf.d.mts → schemas-CMyv6Mkq.d.mts} +0 -0
- /package/dist/{schemas-CDBSjg7o.d.mts → schemas-PmHLOkr-.d.mts} +0 -0
- /package/dist/{server-lifecycle-FXTPW39-.mjs → server-lifecycle-JTFuSJhg.mjs} +0 -0
- /package/dist/{server-lifecycle-YoSGFGnU.d.mts → server-lifecycle-JX0MpLfX.d.mts} +0 -0
- /package/dist/{session-lineage-CRsc9g1x.d.mts → session-lineage-PY_8PUTH.d.mts} +0 -0
- /package/dist/{shared-schemas-CPShiLNp.mjs → shared-schemas-CbbcM1GQ.mjs} +0 -0
- /package/dist/{storage-namespace-definition-Bkx5rSto.d.mts → storage-namespace-definition-QTqbbw5b.d.mts} +0 -0
- /package/dist/{storage-namespace-definition-CqSdsuCC.mjs → storage-namespace-definition-RvjfFysN.mjs} +0 -0
- /package/dist/{telemetry-CvdLBWuk.mjs → telemetry-O0394b7p.mjs} +0 -0
- /package/dist/{tray-menu-service-DuXq5k22.mjs → tray-menu-service-CsaXURTf.mjs} +0 -0
- /package/dist/{types-dyP-bXXE.d.mts → types-Bnf1bRcq.d.mts} +0 -0
- /package/dist/{types-MfJZ67e9.d.mts → types-C6R2eyMZ.d.mts} +0 -0
- /package/dist/{types-C2Ob9zz_.d.mts → types-CycWG-_j.d.mts} +0 -0
- /package/dist/{variant-CT6XBP6T.mjs → variant-COVbYmMs.mjs} +0 -0
- /package/dist/{window-registry-DW-dKRjQ.mjs → window-registry-XjOExitT.mjs} +0 -0
- /package/dist/{window-registry-CBcrGTv4.d.mts → window-registry-r3VFP-_d.d.mts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./window-registry-DW-dKRjQ.mjs";import{o as t,t as n}from"./schema-introspection-Dn1jWQs1.mjs";import{n as r}from"./extension-namespace-cMh_mMiL.mjs";import{z as i}from"zod";import a from"node:path";import{createBusNamespace as o}from"@makaio/framework/core";import{ProviderDefinitionSchema as s,versionSatisfies as c}from"@makaio/framework/contracts";import{ToastSubjects as l}from"@makaio/framework/contracts/toast";import{ExtensionWarningSchema as u,getExtensionWarningActionLabel as d}from"@makaio/framework/contracts/extension";import{TrayMenuSubjects as f}from"@makaio/framework/services/tray-menu";const p=i.object({name:i.string(),displayName:i.string()}),m=o(`kernel:boot`,{getState:{request:i.object({}),response:i.object({complete:i.boolean(),completedCount:i.number(),totalCount:i.number(),currentService:i.string().optional(),failedServices:i.array(i.string()),skippedServices:i.array(i.string()).default([]),totalDurationMs:i.number().optional()})},"service.starting":p,"service.ready":p.extend({durationMs:i.number().int().nonnegative()}),"service.failed":p.extend({errorMessage:i.string()}),"service.skipped":p.extend({reason:i.string()}),progress:i.object({completedCount:i.number(),totalCount:i.number(),currentService:i.string().optional()}),complete:i.object({totalDurationMs:i.number(),failedServices:i.array(i.string())})}),h=m.subjects;var g=class extends Error{reason;constructor(e){super(e),this.name=`ServiceSkipError`,this.reason=e}};function _(e){return{name:e.name,displayName:e.displayName}}var v=class{bus;state;cleanup;constructor(e,t){this.bus=e,this.state={complete:!1,completedCount:0,totalCount:t,failedServices:[],skippedServices:[],startedAt:Date.now()},this.cleanup=this.bus.on(h.getState,e=>{e.setResult({complete:this.state.complete,completedCount:this.state.completedCount,totalCount:this.state.totalCount,...this.state.currentService===void 0?{}:{currentService:this.state.currentService},failedServices:[...this.state.failedServices],skippedServices:[...this.state.skippedServices],...this.state.totalDurationMs===void 0?{}:{totalDurationMs:this.state.totalDurationMs}})})}dispose(){this.cleanup()}starting(e){let t=_(e);this.state.currentService=t.displayName,this.state.currentServiceStartedAt=Date.now(),this.bus.emit(h.service.starting,t).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.starting emit failed for "${t.name}":`,e)})}ready(e){let t=_(e);this.state.completedCount+=1;let n=this.state.currentServiceStartedAt===void 0?0:Math.max(0,Date.now()-this.state.currentServiceStartedAt);this.bus.emit(h.service.ready,{...t,durationMs:n}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.ready emit failed for "${t.name}":`,e)}),this.emitProgress()}failed(e,t){let n=_(e);this.state.completedCount+=1,this.state.failedServices.push(n.name),this.bus.emit(h.service.failed,{...n,errorMessage:t}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.failed emit failed for "${n.name}":`,e)}),this.emitProgress()}skipped(e,t){let n=_(e);this.state.completedCount+=1,this.state.skippedServices.push(n.name),this.bus.emit(h.service.skipped,{...n,reason:t}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.skipped emit failed for "${n.name}":`,e)}),this.emitProgress()}complete(){this.state.complete=!0,delete this.state.currentService,delete this.state.currentServiceStartedAt,this.state.totalDurationMs=Date.now()-this.state.startedAt,this.bus.emit(h.complete,{totalDurationMs:this.state.totalDurationMs,failedServices:[...this.state.failedServices]}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.complete emit failed:`,e)})}emitProgress(){this.bus.emit(h.progress,{completedCount:this.state.completedCount,totalCount:this.state.totalCount,...this.state.currentService===void 0?{}:{currentService:this.state.currentService}}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.progress emit failed:`,e)})}};function ee(e){return{subject:`wiring.apply`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1,payload:{request:{},response:{}}}}}const y=`action`;function b(e,t){return`${e}:${t}`}function te(e,t,n){return e.on(l.interacted,r=>{let{toastId:i,actionId:a}=r.payload,o=b(i,a),s=t.get(o);s&&x(e,s,i,n).catch(e=>{console.error(`[ExtensionCoordinator] Warning action dispatch failed for toast "${i}":`,e)})})}async function x(e,t,n,r){switch(t.kind){case`configure-integration`:await C(e,t.clientId,n,r);break;case`open-url`:console.info(`[ExtensionCoordinator] Toast "${n}" open-url action not routable from runtime layer: ${t.url}`);break;case`run-command`:console.info(`[ExtensionCoordinator] Toast "${n}" run-command action not routable from runtime layer: ${t.command}`);break;case`install-extension`:console.info(`[ExtensionCoordinator] Toast "${n}" install-extension action not routable from runtime layer: ${t.extensionName}`);break;default:S(t)}}function S(e){throw Error(`[ExtensionCoordinator] Unsupported warning action: ${JSON.stringify(e)}`)}async function C(e,t,n,r){let i=ee(t),a=await e.requestOptional(i,{scope:`user`,makaioCommand:r});if(!a.handled){console.warn(`[ExtensionCoordinator] Toast "${n}" configure-integration: no wiring handler for client "${t}". Is the client package loaded?`);return}let{applied:o,skipped:s}=a.data;console.info(`[ExtensionCoordinator] Toast "${n}" configure-integration: wired client "${t}" — ${o} applied, ${s} skipped.`)}function w(e){return e.map(e=>({name:e.name,description:e.description,hasInteractive:!!e.interactive,subcommands:e.subcommands.map(e=>({name:e.name,description:e.description,args:n(e.schema)}))}))}async function T(e,t,n){let{command:r,subcommand:i,args:a}=e,o=t.find(e=>e.name===r);if(!o)return{exitCode:1,stdout:[],stderr:[`Unknown command: ${r}`]};let s=o.subcommands.find(e=>e.name===i);if(!s)return{exitCode:1,stdout:[],stderr:[`Unknown subcommand: ${i}`]};let c=s.schema.safeParse(a??{});if(!c.success)return{exitCode:1,stdout:[],stderr:[`Validation failed:`,...c.error.issues.map(e=>` ${e.path.join(`.`)||`(root)`}: ${e.message}`)]};if(o.beforeRun)try{let e=await o.beforeRun({subcommandName:i,args:c.data??{},bus:n});if(!e.proceed)return{exitCode:e.exitCode??1,stdout:[],stderr:[e.message]}}catch(e){return{exitCode:1,stdout:[],stderr:[`beforeRun hook failed: ${e instanceof Error?e.message:String(e)}`]}}let l=[],u=[],d={write:e=>l.push(e),error:e=>u.push(e)},f=0,p=new AbortController().signal;try{await s.handler({args:c.data,bus:n,output:d,signal:p,setExitCode:e=>{f=e}})}catch(e){f===0&&(f=1),u.push(e instanceof Error?e.message:String(e))}return{exitCode:f,stdout:l,stderr:u}}function E(e){let{pkg:t,state:n,error:r,enabled:i}=e;return{name:t.name,displayName:t.displayName,state:n,...t.surface===void 0?{}:{surface:t.surface},enabled:i,...t.browser===void 0?{}:{browser:t.browser},...r===void 0?{}:{error:r}}}function D(e){let n=[];return n.push(e.bus.on(r.list,t=>{t.setResult({extensions:e.list()})})),n.push(e.bus.on(r.get,t=>{let n=e.entries.get(t.payload.name);t.setResult({extension:n?E(n):null})})),n.push(e.bus.on(r.setEnabled,async t=>{let n=await e.handleSetEnabled(t.payload.name,t.payload.enabled);t.setResult({success:n})})),n.push(e.bus.on(r.contributions.catalog,t=>{let n=[],r=[];for(let[t,i]of e.entries)if(i.state===`active`){for(let e of i.pkg.providers??[])n.push({packageName:t,definition:s.parse(e)});for(let e of i.pkg.clients??[])r.push({packageName:t,definition:e})}t.setResult({providers:n,clients:r})})),n.push(e.bus.on(t.listContributions,t=>{t.setResult({contributions:w(e.cliContributions)})})),n.push(e.bus.on(t.execute,async t=>{t.setResult(await T(t.payload,e.cliContributions,e.bus))})),n.push(e.bus.on(r.warnings.list,t=>{let{extensionName:n}=t.payload;if(n!==void 0){let r=e.entries.get(n),i=r&&r.warnings.length>0?[{extensionName:n,warnings:[...r.warnings]}]:[];t.setResult({entries:i});return}let r=[];for(let[t,n]of e.entries)n.warnings.length>0&&r.push({extensionName:t,warnings:[...n.warnings]});t.setResult({entries:r})})),n}async function ne(e){for(let[t,n]of e.entries)n.state===`active`&&await k(e,t,n)}function re(e){if(e&&O(e))return[{id:y,label:d(e)}]}function O(e){return e.kind===`configure-integration`}function ie(e,t){let n=`${t}:`;for(let t of e.keys())t.startsWith(n)&&e.delete(t)}async function k(e,t,n){ie(e.warningActionMap,t);let r=n.warnings.filter(e=>e.severity===`degraded`);if(r.length!==0)for(let i=0;i<r.length;i++){let a=r[i];console.warn(`[${t}] ⚠ ${a.title}: ${a.message}`);let o=`${t}:${a.title}:${i}`,s=re(a.action);try{await e.bus.emit(l.show,{level:`warning`,title:a.title,message:`${n.pkg.displayName}: ${a.message}`,toastId:o,durationMs:null,...s&&{actions:s}}),a.action&&O(a.action)&&e.warningActionMap.set(b(o,y),a.action)}catch(e){console.warn(`[${t}] toast emission failed for warning "${a.title}":`,e)}}}function ae(e){return Object.freeze({extensionName:e})}function oe(e,t,n,r){if(!t)return;let i={...n??{},...r??{}};try{return t.parse(i)}catch(n){console.warn(`[ExtensionCoordinator] Config parse failed for "${e}", starting with schema defaults:`,n instanceof Error?n.message:n);try{return t.parse({})}catch{console.warn(`[ExtensionCoordinator] Fallback config parse also failed for "${e}" — config will be absent`);return}}}function A(e,t,n){let r;if(n.pkg.configSchema)try{r=e.loadConfig?.(t)}catch(e){console.error(`[ExtensionCoordinator] loadConfig threw for "${t}":`,e)}return oe(t,n.pkg.configSchema,n.configDefaults,r)}function j(e,t,n){if(!e.extensionContextBase)throw Error(`ExtensionCoordinator: extensionContextBase is required to start extensions with a create factory. Provide it via the constructor.`);return{...e.extensionContextBase,bus:e.bus,identity:t.identity,dataDir:a.join(e.extensionContextBase.makaioHome,t.identity.extensionName),getService:t=>e.getExtensionService(t.name),signal:e.signal,hasExtension:e.hasActiveExtension,...n===void 0?{}:{config:n}}}function M(e){return{adapters:!!e.adapters?.length,tools:!!e.tools,triggers:!!e.triggers,providers:!!e.providers?.length,clients:!!e.clients?.length,ui:!!e.ui,storage:!!e.storage,sessionEventActions:!!e.sessionEventActions}}function N(e,t,n){let i=t.state;t.state=n,e.emit(r.stateChanged,{name:t.pkg.name,displayName:t.pkg.displayName,from:i,to:n,...t.error===void 0?{}:{error:t.error},contributes:M(t.pkg)}).catch(e=>{console.error(`[ExtensionCoordinator] stateChanged emit failed for "${t.pkg.name}":`,e)})}async function P(e,t,n,r,i){i===`activated`?await F(e,t,n,r):await I(e,n)}async function F(e,t,n,r){let i=[];try{for(let a of e){if(a.filter&&!a.filter(r.pkg))continue;let e=j(t,r,A(t,n,r));await a.processActivated(n,r.pkg,e),i.push(a)}}catch(e){for(let e of i.reverse())if(e.processStopped)try{await e.processStopped(n)}catch(e){console.error(`[ExtensionCoordinator] Contribution processor rollback error for "${n}":`,e)}throw e}}async function I(e,t){for(let n of[...e].reverse())if(n.processStopped)try{await n.processStopped(t)}catch(e){console.error(`[ExtensionCoordinator] Contribution processor error (stopped) for "${t}":`,e)}}async function L(e,t,n){let i=e.entries.get(t);if(!i)return!1;let a=n?await R(e,t,i):await z(e,t,i),o=i.enabled===n;return!a&&!o||(await e.persistEnabled?.(t,n),!a)?!1:(e.bus.emit(r.enabledChanged,{name:t,enabled:n}).catch(e=>{console.error(`[ExtensionCoordinator] enabledChanged emit failed for "${t}":`,e)}),!0)}async function R(e,t,n){if(n.state!==`stopped`&&n.state!==`failed`&&n.state!==`skipped`)return!1;let{pkg:r}=n,i,a=(r.dependencies??[]).filter(t=>{if(t.optional)return!1;let n=e.entries.get(t.name);return!n||n.state!==`active`});if(a.length>0)return n.error=`Required dependencies not active: ${a.map(e=>e.name).join(`, `)}`,console.error(`[ExtensionCoordinator] Cannot re-enable "${t}":`,n.error),N(e.bus,n,`failed`),!1;n.enabled=!0,n.error=void 0,N(e.bus,n,`initializing`);let o=A(e,t,n);if(r.storage?.registerHandlers&&e.db!==void 0)try{let t=j(e,n,o),a=r.storage.registerHandlers(e.bus,e.db,t);typeof a==`function`&&(i=a,n.storageCleanup=a)}catch(r){return n.error=r instanceof Error?r.message:String(r),console.error(`[ExtensionCoordinator] Extension "${t}" storage re-registration failed:`,r),N(e.bus,n,`failed`),!1}if(r.create){let a;try{let t=j(e,n,o);a=await r.create(t),await a.init?.(),n.service=a}catch(r){return await B(t,a,i,n),r instanceof g?n.pkg.critical?(n.error=`Critical extension cannot skip startup: ${r.reason}`,console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,n.error),N(e.bus,n,`failed`),!1):(n.error=r.reason,N(e.bus,n,`skipped`),!1):(n.error=r instanceof Error?r.message:String(r),console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,r),N(e.bus,n,`failed`),!1)}}try{await P(e.contributionProcessors,e,t,n,`activated`)}catch(r){return await B(t,n.service,i,n),n.service=void 0,n.error=r instanceof Error?r.message:String(r),console.error(`[ExtensionCoordinator] Extension "${t}" contribution processing failed:`,r),N(e.bus,n,`failed`),!1}return N(e.bus,n,`active`),await e.runHealthCheck(t),await e.emitWarningsForEntry(t,n),!0}async function z(e,t,n){if(n.state!==`active`)return!1;let i=Array.from(e.entries.entries()).filter(([e,n])=>e===t||n.state!==`active`?!1:n.pkg.dependencies?.some(e=>!e.optional&&e.name===t)??!1).map(([e])=>e);if(i.length>0)return n.error=`Cannot disable "${t}" while active dependents remain: ${i.join(`, `)}`,console.error(`[ExtensionCoordinator] ${n.error}`),!1;if(n.enabled=!1,n.error=void 0,await P(e.contributionProcessors,e,t,n,`stopped`),n.service)try{await n.service.destroy?.()}catch(e){console.error(`[ExtensionCoordinator] Error during disable destroy of "${t}":`,e)}finally{n.service=void 0}if(n.storageCleanup)try{n.storageCleanup()}catch(e){console.error(`[ExtensionCoordinator] Storage cleanup error during disable of "${t}":`,e)}finally{n.storageCleanup=void 0}N(e.bus,n,`stopped`),n.warnings=[];try{await e.bus.emit(r.warnings.changed,{extensionName:t,warnings:[]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}return!0}async function B(e,t,n,r){try{await t?.destroy?.()}catch(t){console.error(`[ExtensionCoordinator] Service cleanup error after failed enable of "${e}":`,t)}try{n?.()}catch(t){console.error(`[ExtensionCoordinator] Storage cleanup error after failed enable of "${e}":`,t)}finally{r.storageCleanup=void 0}}function V(e){let t=new Map;for(let n of e)t.has(n.name)&&(console.info(`[ExtensionCoordinator] Extension "${n.name}" overrides an earlier registration`),t.delete(n.name)),t.set(n.name,n);return[...t.values()]}function H(e,t,n){let r=new Set(e.map(e=>e.name)),i=e.filter(e=>U(e,t,n)),a=new Map(i.map(e=>[e.name,e])),o=new Set(a.keys()),s=!0;for(;s;){s=!1;for(let e of o)(a.get(e).dependencies??[]).some(e=>!e.optional&&r.has(e.name)&&!o.has(e.name))&&(o.delete(e),s=!0)}return i.filter(e=>o.has(e.name))}function U(e,t,n){if(!G(e,t))return!1;let r=e.requires;return!r||r.length===0||!n?!0:r.every(e=>{switch(e.type){case`host`:return n.hosts.has(e.id);case`capability`:return n.capabilities.has(e.id)?e.version===void 0?!0:W(n,e.id,e.version):!1}})}function W(e,t,n){let r=e.capabilityVersions?.get(t);return r!==void 0&&c(r,n)}function G(e,t){return e.surface===void 0||e.surface===`any`||e.surface===t}function K(e){let t=q(e);return se(e,t,new Map(e.map(e=>[e.name,e]))),ue(t,le(e,t))}function q(e){let t=new Set;for(let n of e){if(t.has(n.name))throw Error(`ExtensionCoordinator: duplicate package name detected: "${n.name}"`);t.add(n.name)}return t}function se(e,t,n){for(let r of e)ce(r,t,n)}function ce(e,t,n){let r=e.dependencies??[],i=r.filter(e=>!e.optional&&!t.has(e.name));if(i.length>0)throw Error(`ExtensionCoordinator: package "${e.name}" declares missing dependencies: ${i.map(e=>e.name).join(`, `)}`);for(let t of r){let r=n.get(t.name);if(r===void 0)continue;let i=r.version;if(!c(i,t.version))throw Error(`ExtensionCoordinator: package "${e.name}" dependency "${t.name}" version ${i} does not satisfy ${t.version}`)}}function le(e,t){let n=new Map;for(let r of e){let e=(r.dependencies??[]).filter(e=>t.has(e.name)).map(e=>e.name);n.set(r.name,new Set(e))}return n}function ue(e,t){let n=[];for(let[e,r]of t)r.size===0&&n.push(e);let r=[],i=new Set;for(;n.length>0;){let e=n.shift();if(!i.has(e)){i.add(e),r.push(e);for(let[r,a]of t)a.has(e)&&(a.delete(e),a.size===0&&!i.has(r)&&n.push(r))}}if(r.length!==e.size){let t=[...e].filter(e=>!i.has(e));throw Error(`ExtensionCoordinator: circular dependency detected among: ${t.join(`, `)}`)}return r}async function de(e){if(!e.runMigrations)return;let t=[];for(let n of e.loadOrder){let r=e.entries.get(n);if(!r)throw Error(`Extension "${n}" is in loadOrder but missing from entries`);let i=r.pkg.storage?.migrations;if(!i)continue;let a=fe(n,r.pkg,i);t.push({name:n,migrationsPath:a,migrationSourceId:r.pkg.storage?.migrationSourceId??a})}t.length!==0&&await e.runMigrations(t)}function fe(e,t,n){if(a.isAbsolute(n))return n;let r=t.storage?.packageRoot;if(!r)throw Error(`Extension "${e}" declares relative storage.migrations "${n}" without storage.packageRoot`);let i=a.resolve(r),o=a.resolve(i,n),s=a.relative(i,o);if(s.startsWith(`..`)||a.isAbsolute(s))throw Error(`Extension "${e}" declares storage.migrations "${n}" outside storage.packageRoot`);return o}async function J(e,t){let n=e.entries.get(t);if(!n?.service||n.state!==`active`)return;let{checkHealth:i}=n.service;if(!i)return;let a;try{let e=await i.call(n.service),r=u.array().safeParse(e);r.success?a=r.data:(console.error(`[ExtensionCoordinator] checkHealth for "${t}" returned invalid data:`,r.error),a=[])}catch(e){console.error(`[ExtensionCoordinator] checkHealth threw for "${t}":`,e),a=[]}n.warnings=a;try{await e.bus.emit(r.warnings.changed,{extensionName:t,warnings:[...a]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}}function pe(e,t){if(t.windows)for(let n of t.windows)e.windowRegistry.register(t.name,t.displayName,n);if(t.tray&&e.trayEntries.push({...t.tray,packageName:t.name}),t.cli){let n=t.cli;`subcommands`in n&&e.cliContributions.push(n)}}function me(e){return Array.from(e.values()).filter(e=>e.enabled).map(e=>e.pkg).filter(e=>!!e.http)}async function he(e){let t=[...e.loadOrder].reverse();for(let n of t){let t=e.entries.get(n);if(t){if(t.state===`active`&&await P(e.contributionProcessors,e.contextHost,n,t,`stopped`),t.service)try{await t.service.destroy?.()}catch(e){console.error(`[ExtensionCoordinator] Error during shutdown of "${n}":`,e)}finally{t.service=void 0}if(t.storageCleanup)try{t.storageCleanup()}catch(e){console.error(`[ExtensionCoordinator] Storage cleanup error for "${n}":`,e)}finally{t.storageCleanup=void 0}t.state===`active`&&N(e.contextHost.bus,t,`stopped`)}}}async function ge(e,t){if(!t.tray)return;let n=_e(t);await e.request(f.register,{entry:n})}function _e(e){let t=e.tray;if(!t)throw Error(`[tray-menu-entry-bridge] extension "${e.name}" does not declare a tray entry`);return{packageName:e.name,entryId:t.opensWindow??t.action??`default`,label:t.label,section:t.section??`views`,priority:50,enabled:!0,metadata:t.opensWindow?{registrationId:`${e.name}:${t.opensWindow}`}:t.action?{action:t.action}:void 0}}async function Y(e,t,n){if(!n.enabled){N(e.bus,n,`skipped`),e.bootProgress.skipped(n.pkg,`disabled`);return}let r=(n.pkg.dependencies??[]).filter(t=>t.optional?!1:e.entries.get(t.name)?.state!==`active`);if(r.length>0){let i=`Required dependencies not active: ${r.map(e=>e.name).join(`, `)}`;if(Q(e,t,n,i),n.pkg.critical)throw Error(`Critical package "${t}" failed: ${i}`);return}e.bootProgress.starting(n.pkg),N(e.bus,n,`initializing`);let i=A(e.contextHost,t,n);if(be(e,t,n,i)){if(!n.pkg.create){await ve(e,t,n);return}await ye(e,t,n,i)}}async function ve(e,t,n){try{await P(e.contributionProcessors,e.contextHost,t,n,`activated`)}catch(r){if(Z(t,n),X(e,t,n,r))return;if(Q(e,t,n,r instanceof Error?r.message:String(r)),n.pkg.critical)throw r;return}N(e.bus,n,`active`),e.bootProgress.ready(n.pkg),await $(e.bus,t,n)}async function ye(e,t,n,r){let i;try{let a=j(e.contextHost,n,r);i=await n.pkg.create(a),await i.init?.(),n.service=i,await P(e.contributionProcessors,e.contextHost,t,n,`activated`),N(e.bus,n,`active`),e.bootProgress.ready(n.pkg),await $(e.bus,t,n)}catch(r){try{await i?.destroy?.()}catch(e){console.error(`[ExtensionCoordinator] Service cleanup error after failed start of "${t}":`,e)}if(n.service=void 0,Z(t,n),X(e,t,n,r))return;if(Q(e,t,n,r instanceof Error?r.message:String(r)),n.pkg.critical)throw r}}function X(e,t,n,r){if(!(r instanceof g))return!1;if(n.pkg.critical){let i=`Critical package cannot skip startup: ${r.reason}`;throw Q(e,t,n,i),Error(`Critical package "${t}" failed: ${i}`,{cause:r})}return n.error=r.reason,console.info(`[ExtensionCoordinator] Package "${t}" skipped: ${r.reason}`),N(e.bus,n,`skipped`),e.bootProgress.skipped(n.pkg,r.reason),!0}function be(e,t,n,r){if(!n.pkg.storage?.registerHandlers||e.db===void 0)return!0;try{let t=j(e.contextHost,n,r),i=n.pkg.storage.registerHandlers(e.bus,e.db,t);return i&&(n.storageCleanup=i),!0}catch(r){let i=r instanceof Error?r.message:String(r);if(console.error(`[ExtensionCoordinator] Package "${t}" storage registration failed:`,r),Q(e,t,n,i),n.pkg.critical)throw r;return!1}}function Z(e,t){if(t.storageCleanup)try{t.storageCleanup()}catch(t){console.error(`[ExtensionCoordinator] Storage cleanup error after failed start of "${e}":`,t)}finally{t.storageCleanup=void 0}}function Q(e,t,n,r){n.error=r,console.error(`[ExtensionCoordinator] Package "${t}" failed:`,r),N(e.bus,n,`failed`),e.bootProgress.failed(n.pkg,r)}async function $(e,t,n){try{await ge(e,n.pkg)}catch(e){console.warn(`[ExtensionCoordinator] Failed to register tray entry for ${t}:`,e)}}var xe=class{bus;surface;db;extensionContextBase;runtimeEnvironment;shutdownController=new AbortController;entries=new Map;loadOrder=[];loaded=!1;started=!1;rpcCleanups=[];contributionProcessors=[];warningActionMap=new Map;windowRegistry=new e;_trayEntries=[];_cliContributions=[];persistEnabled;loadEnabled;loadConfig;runMigrations;constructor(e,t={}){this.bus=e,this.surface=t.surface??`headless`,this.db=t.db,this.extensionContextBase=t.extensionContextBase,this.runtimeEnvironment=t.runtimeEnvironment,this.persistEnabled=t.persistEnabled,this.loadEnabled=t.loadEnabled,this.loadConfig=t.loadConfig,this.runMigrations=t.runMigrations,this.rpcCleanups.push(te(this.bus,this.warningActionMap,t.launcherCommand??`makaio`))}get trayEntries(){return this._trayEntries.map(e=>({...e}))}get cliContributions(){return this._cliContributions}extensionsWithHttp(){return me(this.entries)}load(e,t){if(this.loaded)throw Error(`ExtensionCoordinator.load() called twice. The coordinator is single-use; create a new instance if needed.`);let n=V(H(e,this.surface,this.runtimeEnvironment));this.loadOrder=K(n);for(let e of this.loadOrder){let r=n.find(t=>t.name===e),i={pkg:r,identity:ae(r.name),state:`discovered`,enabled:this.loadEnabled?.(e)!==!1,warnings:[]};if(t){let n=t.get(e);n&&(i.configDefaults=n)}this.entries.set(e,i),r.namespaces&&this.bus.registerNamespaces(r.namespaces),pe({windowRegistry:this.windowRegistry,trayEntries:this._trayEntries,cliContributions:this._cliContributions},r)}this.rpcCleanups.push(...D({bus:this.bus,entries:this.entries,cliContributions:this._cliContributions,list:()=>this.list(),handleSetEnabled:(e,t)=>this.handleSetEnabled(e,t)})),this.loaded=!0}async startAll(){if(!this.loaded)throw Error(`ExtensionCoordinator.startAll() called before load(). Call load() first.`);if(this.started)throw Error(`ExtensionCoordinator.startAll() called twice. The coordinator is single-use; create a new instance if needed.`);this.started=!0;let e=new v(this.bus,this.loadOrder.length);this.rpcCleanups.push(()=>e.dispose());try{await de({loadOrder:this.loadOrder,entries:this.entries,runMigrations:this.runMigrations});for(let t of this.loadOrder){let n=this.entries.get(t);n&&await Y({bus:this.bus,db:this.db,entries:this.entries,contributionProcessors:this.contributionProcessors,contextHost:this.createExtensionContextHost(),bootProgress:e},t,n)}let t=this.createExtensionHealthHost();await Promise.all(this.loadOrder.map(e=>this.entries.get(e)?.state===`active`?J(t,e):void 0)),await ne({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap})}finally{e.complete()}}async shutdown(){this.shutdownController.abort();for(let e of this.rpcCleanups)e();this.rpcCleanups=[],this.warningActionMap.clear(),await he({entries:this.entries,loadOrder:this.loadOrder,contributionProcessors:this.contributionProcessors,contextHost:this.createExtensionContextHost()})}list(){return[...this.entries.values()].map(e=>E(e))}getExtensionService(e){let t=typeof e==`string`?e:e.name;return this.entries.get(t)?.service}getExtension(e){return this.entries.get(e)?.pkg}forEachActiveExtension(e){let t=this.createExtensionContextHost();for(let n of this.loadOrder){let r=this.entries.get(n);if(!r||r.state!==`active`)continue;let i=j(t,r,A(t,n,r));e(n,r.pkg,i)}}forExtension(e,t){let n=this.entries.get(e);if(!n||n.state!==`active`)return;let r=this.createExtensionContextHost(),i=j(r,n,A(r,e,n));t(e,n.pkg,i)}registerContributionProcessor(e){return this.contributionProcessors.push(e),()=>{let t=this.contributionProcessors.indexOf(e);t>=0&&this.contributionProcessors.splice(t,1)}}async handleSetEnabled(e,t){return L({bus:this.bus,db:this.db,entries:this.entries,extensionContextBase:this.extensionContextBase,loadConfig:this.loadConfig,signal:this.shutdownController.signal,hasActiveExtension:e=>this.hasActiveExtension(e),persistEnabled:this.persistEnabled,contributionProcessors:this.contributionProcessors,getExtensionService:e=>this.getExtensionService(e),runHealthCheck:e=>J(this.createExtensionHealthHost(),e),emitWarningsForEntry:(e,t)=>k({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap},e,t)},e,t)}createExtensionContextHost(){return{bus:this.bus,extensionContextBase:this.extensionContextBase,loadConfig:this.loadConfig,signal:this.shutdownController.signal,hasActiveExtension:e=>this.hasActiveExtension(e),getExtensionService:e=>this.getExtensionService(e)}}createExtensionHealthHost(){return{bus:this.bus,entries:this.entries}}hasActiveExtension(e){return this.entries.get(e)?.state===`active`}};export{m as a,g as i,V as n,h as o,H as r,xe as t};
|
|
1
|
+
import{n as e}from"./window-registry-XjOExitT.mjs";import{o as t,t as n}from"./schema-introspection-A6FnQ1qg.mjs";import{n as r}from"./extension-namespace-BBgYOttA.mjs";import{z as i}from"zod";import a from"node:path";import{createBusNamespace as o}from"@makaio/framework/core";import{ProviderDefinitionSchema as s,versionSatisfies as c}from"@makaio/framework/contracts";import{ToastSubjects as l}from"@makaio/framework/contracts/toast";import{ExtensionWarningSchema as u,getExtensionWarningActionLabel as d}from"@makaio/framework/contracts/extension";import{TrayMenuSubjects as f}from"@makaio/framework/services/tray-menu";const p=i.object({name:i.string(),displayName:i.string()}),m=o(`kernel:boot`,{getState:{request:i.object({}),response:i.object({complete:i.boolean(),completedCount:i.number(),totalCount:i.number(),currentService:i.string().optional(),failedServices:i.array(i.string()),skippedServices:i.array(i.string()).default([]),totalDurationMs:i.number().optional()})},"service.starting":p,"service.ready":p.extend({durationMs:i.number().int().nonnegative()}),"service.failed":p.extend({errorMessage:i.string()}),"service.skipped":p.extend({reason:i.string()}),progress:i.object({completedCount:i.number(),totalCount:i.number(),currentService:i.string().optional()}),complete:i.object({totalDurationMs:i.number(),failedServices:i.array(i.string())})}),h=m.subjects;var g=class extends Error{reason;constructor(e){super(e),this.name=`ServiceSkipError`,this.reason=e}};function _(e){return{name:e.name,displayName:e.displayName}}var v=class{bus;state;cleanup;constructor(e,t){this.bus=e,this.state={complete:!1,completedCount:0,totalCount:t,failedServices:[],skippedServices:[],startedAt:Date.now()},this.cleanup=this.bus.on(h.getState,e=>{e.setResult({complete:this.state.complete,completedCount:this.state.completedCount,totalCount:this.state.totalCount,...this.state.currentService===void 0?{}:{currentService:this.state.currentService},failedServices:[...this.state.failedServices],skippedServices:[...this.state.skippedServices],...this.state.totalDurationMs===void 0?{}:{totalDurationMs:this.state.totalDurationMs}})})}dispose(){this.cleanup()}starting(e){let t=_(e);this.state.currentService=t.displayName,this.state.currentServiceStartedAt=Date.now(),this.bus.emit(h.service.starting,t).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.starting emit failed for "${t.name}":`,e)})}ready(e){let t=_(e);this.state.completedCount+=1;let n=this.state.currentServiceStartedAt===void 0?0:Math.max(0,Date.now()-this.state.currentServiceStartedAt);this.bus.emit(h.service.ready,{...t,durationMs:n}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.ready emit failed for "${t.name}":`,e)}),this.emitProgress()}failed(e,t){let n=_(e);this.state.completedCount+=1,this.state.failedServices.push(n.name),this.bus.emit(h.service.failed,{...n,errorMessage:t}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.failed emit failed for "${n.name}":`,e)}),this.emitProgress()}skipped(e,t){let n=_(e);this.state.completedCount+=1,this.state.skippedServices.push(n.name),this.bus.emit(h.service.skipped,{...n,reason:t}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.skipped emit failed for "${n.name}":`,e)}),this.emitProgress()}complete(){this.state.complete=!0,delete this.state.currentService,delete this.state.currentServiceStartedAt,this.state.totalDurationMs=Date.now()-this.state.startedAt,this.bus.emit(h.complete,{totalDurationMs:this.state.totalDurationMs,failedServices:[...this.state.failedServices]}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.complete emit failed:`,e)})}emitProgress(){this.bus.emit(h.progress,{completedCount:this.state.completedCount,totalCount:this.state.totalCount,...this.state.currentService===void 0?{}:{currentService:this.state.currentService}}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.progress emit failed:`,e)})}};function ee(e){return{subject:`wiring.apply`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1,payload:{request:{},response:{}}}}}const y=`action`;function b(e,t){return`${e}:${t}`}function te(e,t,n){return e.on(l.interacted,r=>{let{toastId:i,actionId:a}=r.payload,o=b(i,a),s=t.get(o);s&&x(e,s,i,n).catch(e=>{console.error(`[ExtensionCoordinator] Warning action dispatch failed for toast "${i}":`,e)})})}async function x(e,t,n,r){switch(t.kind){case`configure-integration`:await C(e,t.clientId,n,r);break;case`open-url`:console.info(`[ExtensionCoordinator] Toast "${n}" open-url action not routable from runtime layer: ${t.url}`);break;case`run-command`:console.info(`[ExtensionCoordinator] Toast "${n}" run-command action not routable from runtime layer: ${t.command}`);break;case`install-extension`:console.info(`[ExtensionCoordinator] Toast "${n}" install-extension action not routable from runtime layer: ${t.extensionName}`);break;default:S(t)}}function S(e){throw Error(`[ExtensionCoordinator] Unsupported warning action: ${JSON.stringify(e)}`)}async function C(e,t,n,r){let i=ee(t),a=await e.requestOptional(i,{scope:`user`,makaioCommand:r});if(!a.handled){console.warn(`[ExtensionCoordinator] Toast "${n}" configure-integration: no wiring handler for client "${t}". Is the client package loaded?`);return}let{applied:o,skipped:s}=a.data;console.info(`[ExtensionCoordinator] Toast "${n}" configure-integration: wired client "${t}" — ${o} applied, ${s} skipped.`)}function w(e){return e.map(e=>({name:e.name,description:e.description,hasInteractive:!!e.interactive,subcommands:e.subcommands.map(e=>({name:e.name,description:e.description,args:n(e.schema)}))}))}async function T(e,t,n){let{command:r,subcommand:i,args:a}=e,o=t.find(e=>e.name===r);if(!o)return{exitCode:1,stdout:[],stderr:[`Unknown command: ${r}`]};let s=o.subcommands.find(e=>e.name===i);if(!s)return{exitCode:1,stdout:[],stderr:[`Unknown subcommand: ${i}`]};let c=s.schema.safeParse(a??{});if(!c.success)return{exitCode:1,stdout:[],stderr:[`Validation failed:`,...c.error.issues.map(e=>` ${e.path.join(`.`)||`(root)`}: ${e.message}`)]};if(o.beforeRun)try{let e=await o.beforeRun({subcommandName:i,args:c.data??{},bus:n});if(!e.proceed)return{exitCode:e.exitCode??1,stdout:[],stderr:[e.message]}}catch(e){return{exitCode:1,stdout:[],stderr:[`beforeRun hook failed: ${e instanceof Error?e.message:String(e)}`]}}let l=[],u=[],d={write:e=>l.push(e),error:e=>u.push(e)},f=0,p=new AbortController().signal;try{await s.handler({args:c.data,bus:n,output:d,signal:p,setExitCode:e=>{f=e}})}catch(e){f===0&&(f=1),u.push(e instanceof Error?e.message:String(e))}return{exitCode:f,stdout:l,stderr:u}}function E(e){let{pkg:t,state:n,error:r,enabled:i}=e;return{name:t.name,displayName:t.displayName,state:n,...t.surface===void 0?{}:{surface:t.surface},enabled:i,...t.browser===void 0?{}:{browser:t.browser},...r===void 0?{}:{error:r}}}function D(e){let n=[];return n.push(e.bus.on(r.list,t=>{t.setResult({extensions:e.list()})})),n.push(e.bus.on(r.get,t=>{let n=e.entries.get(t.payload.name);t.setResult({extension:n?E(n):null})})),n.push(e.bus.on(r.setEnabled,async t=>{let n=await e.handleSetEnabled(t.payload.name,t.payload.enabled);t.setResult({success:n})})),n.push(e.bus.on(r.contributions.catalog,t=>{let n=[],r=[];for(let[t,i]of e.entries)if(i.state===`active`){for(let e of i.pkg.providers??[])n.push({packageName:t,definition:s.parse(e)});for(let e of i.pkg.clients??[])r.push({packageName:t,definition:e})}t.setResult({providers:n,clients:r})})),n.push(e.bus.on(t.listContributions,t=>{t.setResult({contributions:w(e.cliContributions)})})),n.push(e.bus.on(t.execute,async t=>{t.setResult(await T(t.payload,e.cliContributions,e.bus))})),n.push(e.bus.on(r.warnings.list,t=>{let{extensionName:n}=t.payload;if(n!==void 0){let r=e.entries.get(n),i=r&&r.warnings.length>0?[{extensionName:n,warnings:[...r.warnings]}]:[];t.setResult({entries:i});return}let r=[];for(let[t,n]of e.entries)n.warnings.length>0&&r.push({extensionName:t,warnings:[...n.warnings]});t.setResult({entries:r})})),n}async function ne(e){for(let[t,n]of e.entries)n.state===`active`&&await k(e,t,n)}function re(e){if(e&&O(e))return[{id:y,label:d(e)}]}function O(e){return e.kind===`configure-integration`}function ie(e,t){let n=`${t}:`;for(let t of e.keys())t.startsWith(n)&&e.delete(t)}async function k(e,t,n){ie(e.warningActionMap,t);let r=n.warnings.filter(e=>e.severity===`degraded`);if(r.length!==0)for(let i=0;i<r.length;i++){let a=r[i];console.warn(`[${t}] ⚠ ${a.title}: ${a.message}`);let o=`${t}:${a.title}:${i}`,s=re(a.action);try{await e.bus.emit(l.show,{level:`warning`,title:a.title,message:`${n.pkg.displayName}: ${a.message}`,toastId:o,durationMs:null,...s&&{actions:s}}),a.action&&O(a.action)&&e.warningActionMap.set(b(o,y),a.action)}catch(e){console.warn(`[${t}] toast emission failed for warning "${a.title}":`,e)}}}function ae(e){return Object.freeze({extensionName:e})}function oe(e,t,n,r){if(!t)return;let i={...n??{},...r??{}};try{return t.parse(i)}catch(n){console.warn(`[ExtensionCoordinator] Config parse failed for "${e}", starting with schema defaults:`,n instanceof Error?n.message:n);try{return t.parse({})}catch{console.warn(`[ExtensionCoordinator] Fallback config parse also failed for "${e}" — config will be absent`);return}}}function A(e,t,n){let r;if(n.pkg.configSchema)try{r=e.loadConfig?.(t)}catch(e){console.error(`[ExtensionCoordinator] loadConfig threw for "${t}":`,e)}return oe(t,n.pkg.configSchema,n.configDefaults,r)}function j(e,t,n){if(!e.extensionContextBase)throw Error(`ExtensionCoordinator: extensionContextBase is required to start extensions with a create factory. Provide it via the constructor.`);return{...e.extensionContextBase,bus:e.bus,identity:t.identity,dataDir:a.join(e.extensionContextBase.makaioHome,t.identity.extensionName),getService:t=>e.getExtensionService(t.name),signal:e.signal,hasExtension:e.hasActiveExtension,...n===void 0?{}:{config:n}}}function M(e){return{adapters:!!e.adapters?.length,tools:!!e.tools,triggers:!!e.triggers,providers:!!e.providers?.length,clients:!!e.clients?.length,ui:!!e.ui,storage:!!e.storage,sessionEventActions:!!e.sessionEventActions}}function N(e,t,n){let i=t.state;t.state=n,e.emit(r.stateChanged,{name:t.pkg.name,displayName:t.pkg.displayName,from:i,to:n,...t.error===void 0?{}:{error:t.error},contributes:M(t.pkg)}).catch(e=>{console.error(`[ExtensionCoordinator] stateChanged emit failed for "${t.pkg.name}":`,e)})}async function P(e,t,n,r,i){i===`activated`?await F(e,t,n,r):await I(e,n)}async function F(e,t,n,r){let i=[];try{for(let a of e){if(a.filter&&!a.filter(r.pkg))continue;let e=j(t,r,A(t,n,r));await a.processActivated(n,r.pkg,e),i.push(a)}}catch(e){for(let e of i.reverse())if(e.processStopped)try{await e.processStopped(n)}catch(e){console.error(`[ExtensionCoordinator] Contribution processor rollback error for "${n}":`,e)}throw e}}async function I(e,t){for(let n of[...e].reverse())if(n.processStopped)try{await n.processStopped(t)}catch(e){console.error(`[ExtensionCoordinator] Contribution processor error (stopped) for "${t}":`,e)}}async function L(e,t,n){let i=e.entries.get(t);if(!i)return!1;let a=n?await R(e,t,i):await z(e,t,i),o=i.enabled===n;return!a&&!o||(await e.persistEnabled?.(t,n),!a)?!1:(e.bus.emit(r.enabledChanged,{name:t,enabled:n}).catch(e=>{console.error(`[ExtensionCoordinator] enabledChanged emit failed for "${t}":`,e)}),!0)}async function R(e,t,n){if(n.state!==`stopped`&&n.state!==`failed`&&n.state!==`skipped`)return!1;let{pkg:r}=n,i,a=(r.dependencies??[]).filter(t=>{if(t.optional)return!1;let n=e.entries.get(t.name);return!n||n.state!==`active`});if(a.length>0)return n.error=`Required dependencies not active: ${a.map(e=>e.name).join(`, `)}`,console.error(`[ExtensionCoordinator] Cannot re-enable "${t}":`,n.error),N(e.bus,n,`failed`),!1;n.enabled=!0,n.error=void 0,N(e.bus,n,`initializing`);let o=A(e,t,n);if(r.storage?.registerHandlers&&e.db!==void 0)try{let t=j(e,n,o),a=r.storage.registerHandlers(e.bus,e.db,t);typeof a==`function`&&(i=a,n.storageCleanup=a)}catch(r){return n.error=r instanceof Error?r.message:String(r),console.error(`[ExtensionCoordinator] Extension "${t}" storage re-registration failed:`,r),N(e.bus,n,`failed`),!1}if(r.create){let a;try{let t=j(e,n,o);a=await r.create(t),await a.init?.(),n.service=a}catch(r){return await B(t,a,i,n),r instanceof g?n.pkg.critical?(n.error=`Critical extension cannot skip startup: ${r.reason}`,console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,n.error),N(e.bus,n,`failed`),!1):(n.error=r.reason,N(e.bus,n,`skipped`),!1):(n.error=r instanceof Error?r.message:String(r),console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,r),N(e.bus,n,`failed`),!1)}}try{await P(e.contributionProcessors,e,t,n,`activated`)}catch(r){return await B(t,n.service,i,n),n.service=void 0,n.error=r instanceof Error?r.message:String(r),console.error(`[ExtensionCoordinator] Extension "${t}" contribution processing failed:`,r),N(e.bus,n,`failed`),!1}return N(e.bus,n,`active`),await e.runHealthCheck(t),await e.emitWarningsForEntry(t,n),!0}async function z(e,t,n){if(n.state!==`active`)return!1;let i=Array.from(e.entries.entries()).filter(([e,n])=>e===t||n.state!==`active`?!1:n.pkg.dependencies?.some(e=>!e.optional&&e.name===t)??!1).map(([e])=>e);if(i.length>0)return n.error=`Cannot disable "${t}" while active dependents remain: ${i.join(`, `)}`,console.error(`[ExtensionCoordinator] ${n.error}`),!1;if(n.enabled=!1,n.error=void 0,await P(e.contributionProcessors,e,t,n,`stopped`),n.service)try{await n.service.destroy?.()}catch(e){console.error(`[ExtensionCoordinator] Error during disable destroy of "${t}":`,e)}finally{n.service=void 0}if(n.storageCleanup)try{n.storageCleanup()}catch(e){console.error(`[ExtensionCoordinator] Storage cleanup error during disable of "${t}":`,e)}finally{n.storageCleanup=void 0}N(e.bus,n,`stopped`),n.warnings=[];try{await e.bus.emit(r.warnings.changed,{extensionName:t,warnings:[]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}return!0}async function B(e,t,n,r){try{await t?.destroy?.()}catch(t){console.error(`[ExtensionCoordinator] Service cleanup error after failed enable of "${e}":`,t)}try{n?.()}catch(t){console.error(`[ExtensionCoordinator] Storage cleanup error after failed enable of "${e}":`,t)}finally{r.storageCleanup=void 0}}function V(e){let t=new Map;for(let n of e)t.has(n.name)&&(console.info(`[ExtensionCoordinator] Extension "${n.name}" overrides an earlier registration`),t.delete(n.name)),t.set(n.name,n);return[...t.values()]}function H(e,t,n){let r=new Set(e.map(e=>e.name)),i=e.filter(e=>U(e,t,n)),a=new Map(i.map(e=>[e.name,e])),o=new Set(a.keys()),s=!0;for(;s;){s=!1;for(let e of o)(a.get(e).dependencies??[]).some(e=>!e.optional&&r.has(e.name)&&!o.has(e.name))&&(o.delete(e),s=!0)}return i.filter(e=>o.has(e.name))}function U(e,t,n){if(!G(e,t))return!1;let r=e.requires;return!r||r.length===0||!n?!0:r.every(e=>{switch(e.type){case`host`:return n.hosts.has(e.id);case`capability`:return n.capabilities.has(e.id)?e.version===void 0?!0:W(n,e.id,e.version):!1}})}function W(e,t,n){let r=e.capabilityVersions?.get(t);return r!==void 0&&c(r,n)}function G(e,t){return e.surface===void 0||e.surface===`any`||e.surface===t}function K(e){let t=q(e);return se(e,t,new Map(e.map(e=>[e.name,e]))),ue(t,le(e,t))}function q(e){let t=new Set;for(let n of e){if(t.has(n.name))throw Error(`ExtensionCoordinator: duplicate package name detected: "${n.name}"`);t.add(n.name)}return t}function se(e,t,n){for(let r of e)ce(r,t,n)}function ce(e,t,n){let r=e.dependencies??[],i=r.filter(e=>!e.optional&&!t.has(e.name));if(i.length>0)throw Error(`ExtensionCoordinator: package "${e.name}" declares missing dependencies: ${i.map(e=>e.name).join(`, `)}`);for(let t of r){let r=n.get(t.name);if(r===void 0)continue;let i=r.version;if(!c(i,t.version))throw Error(`ExtensionCoordinator: package "${e.name}" dependency "${t.name}" version ${i} does not satisfy ${t.version}`)}}function le(e,t){let n=new Map;for(let r of e){let e=(r.dependencies??[]).filter(e=>t.has(e.name)).map(e=>e.name);n.set(r.name,new Set(e))}return n}function ue(e,t){let n=[];for(let[e,r]of t)r.size===0&&n.push(e);let r=[],i=new Set;for(;n.length>0;){let e=n.shift();if(!i.has(e)){i.add(e),r.push(e);for(let[r,a]of t)a.has(e)&&(a.delete(e),a.size===0&&!i.has(r)&&n.push(r))}}if(r.length!==e.size){let t=[...e].filter(e=>!i.has(e));throw Error(`ExtensionCoordinator: circular dependency detected among: ${t.join(`, `)}`)}return r}async function de(e){if(!e.runMigrations)return;let t=[];for(let n of e.loadOrder){let r=e.entries.get(n);if(!r)throw Error(`Extension "${n}" is in loadOrder but missing from entries`);let i=r.pkg.storage?.migrations;if(!i)continue;let a=fe(n,r.pkg,i);t.push({name:n,migrationsPath:a,migrationSourceId:r.pkg.storage?.migrationSourceId??a})}t.length!==0&&await e.runMigrations(t)}function fe(e,t,n){if(a.isAbsolute(n))return n;let r=t.storage?.packageRoot;if(!r)throw Error(`Extension "${e}" declares relative storage.migrations "${n}" without storage.packageRoot`);let i=a.resolve(r),o=a.resolve(i,n),s=a.relative(i,o);if(s.startsWith(`..`)||a.isAbsolute(s))throw Error(`Extension "${e}" declares storage.migrations "${n}" outside storage.packageRoot`);return o}async function J(e,t){let n=e.entries.get(t);if(!n?.service||n.state!==`active`)return;let{checkHealth:i}=n.service;if(!i)return;let a;try{let e=await i.call(n.service),r=u.array().safeParse(e);r.success?a=r.data:(console.error(`[ExtensionCoordinator] checkHealth for "${t}" returned invalid data:`,r.error),a=[])}catch(e){console.error(`[ExtensionCoordinator] checkHealth threw for "${t}":`,e),a=[]}n.warnings=a;try{await e.bus.emit(r.warnings.changed,{extensionName:t,warnings:[...a]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}}function pe(e,t){if(t.windows)for(let n of t.windows)e.windowRegistry.register(t.name,t.displayName,n);if(t.tray&&e.trayEntries.push({...t.tray,packageName:t.name}),t.cli){let n=t.cli;`subcommands`in n&&e.cliContributions.push(n)}}function me(e){return Array.from(e.values()).filter(e=>e.enabled).map(e=>e.pkg).filter(e=>!!e.http)}async function he(e){let t=[...e.loadOrder].reverse();for(let n of t){let t=e.entries.get(n);if(t){if(t.state===`active`&&await P(e.contributionProcessors,e.contextHost,n,t,`stopped`),t.service)try{await t.service.destroy?.()}catch(e){console.error(`[ExtensionCoordinator] Error during shutdown of "${n}":`,e)}finally{t.service=void 0}if(t.storageCleanup)try{t.storageCleanup()}catch(e){console.error(`[ExtensionCoordinator] Storage cleanup error for "${n}":`,e)}finally{t.storageCleanup=void 0}t.state===`active`&&N(e.contextHost.bus,t,`stopped`)}}}async function ge(e,t){if(!t.tray)return;let n=_e(t);await e.request(f.register,{entry:n})}function _e(e){let t=e.tray;if(!t)throw Error(`[tray-menu-entry-bridge] extension "${e.name}" does not declare a tray entry`);return{packageName:e.name,entryId:t.opensWindow??t.action??`default`,label:t.label,section:t.section??`views`,priority:50,enabled:!0,metadata:t.opensWindow?{registrationId:`${e.name}:${t.opensWindow}`}:t.action?{action:t.action}:void 0}}async function Y(e,t,n){if(!n.enabled){N(e.bus,n,`skipped`),e.bootProgress.skipped(n.pkg,`disabled`);return}let r=(n.pkg.dependencies??[]).filter(t=>t.optional?!1:e.entries.get(t.name)?.state!==`active`);if(r.length>0){let i=`Required dependencies not active: ${r.map(e=>e.name).join(`, `)}`;if(Q(e,t,n,i),n.pkg.critical)throw Error(`Critical package "${t}" failed: ${i}`);return}e.bootProgress.starting(n.pkg),N(e.bus,n,`initializing`);let i=A(e.contextHost,t,n);if(be(e,t,n,i)){if(!n.pkg.create){await ve(e,t,n);return}await ye(e,t,n,i)}}async function ve(e,t,n){try{await P(e.contributionProcessors,e.contextHost,t,n,`activated`)}catch(r){if(Z(t,n),X(e,t,n,r))return;if(Q(e,t,n,r instanceof Error?r.message:String(r)),n.pkg.critical)throw r;return}N(e.bus,n,`active`),e.bootProgress.ready(n.pkg),await $(e.bus,t,n)}async function ye(e,t,n,r){let i;try{let a=j(e.contextHost,n,r);i=await n.pkg.create(a),await i.init?.(),n.service=i,await P(e.contributionProcessors,e.contextHost,t,n,`activated`),N(e.bus,n,`active`),e.bootProgress.ready(n.pkg),await $(e.bus,t,n)}catch(r){try{await i?.destroy?.()}catch(e){console.error(`[ExtensionCoordinator] Service cleanup error after failed start of "${t}":`,e)}if(n.service=void 0,Z(t,n),X(e,t,n,r))return;if(Q(e,t,n,r instanceof Error?r.message:String(r)),n.pkg.critical)throw r}}function X(e,t,n,r){if(!(r instanceof g))return!1;if(n.pkg.critical){let i=`Critical package cannot skip startup: ${r.reason}`;throw Q(e,t,n,i),Error(`Critical package "${t}" failed: ${i}`,{cause:r})}return n.error=r.reason,console.info(`[ExtensionCoordinator] Package "${t}" skipped: ${r.reason}`),N(e.bus,n,`skipped`),e.bootProgress.skipped(n.pkg,r.reason),!0}function be(e,t,n,r){if(!n.pkg.storage?.registerHandlers||e.db===void 0)return!0;try{let t=j(e.contextHost,n,r),i=n.pkg.storage.registerHandlers(e.bus,e.db,t);return i&&(n.storageCleanup=i),!0}catch(r){let i=r instanceof Error?r.message:String(r);if(console.error(`[ExtensionCoordinator] Package "${t}" storage registration failed:`,r),Q(e,t,n,i),n.pkg.critical)throw r;return!1}}function Z(e,t){if(t.storageCleanup)try{t.storageCleanup()}catch(t){console.error(`[ExtensionCoordinator] Storage cleanup error after failed start of "${e}":`,t)}finally{t.storageCleanup=void 0}}function Q(e,t,n,r){n.error=r,console.error(`[ExtensionCoordinator] Package "${t}" failed:`,r),N(e.bus,n,`failed`),e.bootProgress.failed(n.pkg,r)}async function $(e,t,n){try{await ge(e,n.pkg)}catch(e){console.warn(`[ExtensionCoordinator] Failed to register tray entry for ${t}:`,e)}}var xe=class{bus;surface;db;extensionContextBase;runtimeEnvironment;shutdownController=new AbortController;entries=new Map;loadOrder=[];loaded=!1;started=!1;rpcCleanups=[];contributionProcessors=[];warningActionMap=new Map;windowRegistry=new e;_trayEntries=[];_cliContributions=[];persistEnabled;loadEnabled;loadConfig;runMigrations;constructor(e,t={}){this.bus=e,this.surface=t.surface??`headless`,this.db=t.db,this.extensionContextBase=t.extensionContextBase,this.runtimeEnvironment=t.runtimeEnvironment,this.persistEnabled=t.persistEnabled,this.loadEnabled=t.loadEnabled,this.loadConfig=t.loadConfig,this.runMigrations=t.runMigrations,this.rpcCleanups.push(te(this.bus,this.warningActionMap,t.launcherCommand??`makaio`))}get trayEntries(){return this._trayEntries.map(e=>({...e}))}get cliContributions(){return this._cliContributions}extensionsWithHttp(){return me(this.entries)}load(e,t){if(this.loaded)throw Error(`ExtensionCoordinator.load() called twice. The coordinator is single-use; create a new instance if needed.`);let n=V(H(e,this.surface,this.runtimeEnvironment));this.loadOrder=K(n);for(let e of this.loadOrder){let r=n.find(t=>t.name===e),i={pkg:r,identity:ae(r.name),state:`discovered`,enabled:this.loadEnabled?.(e)!==!1,warnings:[]};if(t){let n=t.get(e);n&&(i.configDefaults=n)}this.entries.set(e,i),r.namespaces&&this.bus.registerNamespaces(r.namespaces),pe({windowRegistry:this.windowRegistry,trayEntries:this._trayEntries,cliContributions:this._cliContributions},r)}this.rpcCleanups.push(...D({bus:this.bus,entries:this.entries,cliContributions:this._cliContributions,list:()=>this.list(),handleSetEnabled:(e,t)=>this.handleSetEnabled(e,t)})),this.loaded=!0}async startAll(){if(!this.loaded)throw Error(`ExtensionCoordinator.startAll() called before load(). Call load() first.`);if(this.started)throw Error(`ExtensionCoordinator.startAll() called twice. The coordinator is single-use; create a new instance if needed.`);this.started=!0;let e=new v(this.bus,this.loadOrder.length);this.rpcCleanups.push(()=>e.dispose());try{await de({loadOrder:this.loadOrder,entries:this.entries,runMigrations:this.runMigrations});for(let t of this.loadOrder){let n=this.entries.get(t);n&&await Y({bus:this.bus,db:this.db,entries:this.entries,contributionProcessors:this.contributionProcessors,contextHost:this.createExtensionContextHost(),bootProgress:e},t,n)}let t=this.createExtensionHealthHost();await Promise.all(this.loadOrder.map(e=>this.entries.get(e)?.state===`active`?J(t,e):void 0)),await ne({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap})}finally{e.complete()}}async shutdown(){this.shutdownController.abort();for(let e of this.rpcCleanups)e();this.rpcCleanups=[],this.warningActionMap.clear(),await he({entries:this.entries,loadOrder:this.loadOrder,contributionProcessors:this.contributionProcessors,contextHost:this.createExtensionContextHost()})}list(){return[...this.entries.values()].map(e=>E(e))}getExtensionService(e){let t=typeof e==`string`?e:e.name;return this.entries.get(t)?.service}getExtension(e){return this.entries.get(e)?.pkg}forEachActiveExtension(e){let t=this.createExtensionContextHost();for(let n of this.loadOrder){let r=this.entries.get(n);if(!r||r.state!==`active`)continue;let i=j(t,r,A(t,n,r));e(n,r.pkg,i)}}forExtension(e,t){let n=this.entries.get(e);if(!n||n.state!==`active`)return;let r=this.createExtensionContextHost(),i=j(r,n,A(r,e,n));t(e,n.pkg,i)}registerContributionProcessor(e){return this.contributionProcessors.push(e),()=>{let t=this.contributionProcessors.indexOf(e);t>=0&&this.contributionProcessors.splice(t,1)}}async handleSetEnabled(e,t){return L({bus:this.bus,db:this.db,entries:this.entries,extensionContextBase:this.extensionContextBase,loadConfig:this.loadConfig,signal:this.shutdownController.signal,hasActiveExtension:e=>this.hasActiveExtension(e),persistEnabled:this.persistEnabled,contributionProcessors:this.contributionProcessors,getExtensionService:e=>this.getExtensionService(e),runHealthCheck:e=>J(this.createExtensionHealthHost(),e),emitWarningsForEntry:(e,t)=>k({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap},e,t)},e,t)}createExtensionContextHost(){return{bus:this.bus,extensionContextBase:this.extensionContextBase,loadConfig:this.loadConfig,signal:this.shutdownController.signal,hasActiveExtension:e=>this.hasActiveExtension(e),getExtensionService:e=>this.getExtensionService(e)}}createExtensionHealthHost(){return{bus:this.bus,entries:this.entries}}hasActiveExtension(e){return this.entries.get(e)?.state===`active`}};export{m as a,g as i,V as n,h as o,H as r,xe as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./definition-DZMXOnjX.mjs";import{n as t,t as n}from"./version-
|
|
1
|
+
import{n as e}from"./definition-DZMXOnjX.mjs";import{n as t,t as n}from"./version-B4NO_fID.mjs";import{z as r}from"zod";const i=r.object({entrypoint:r.string().startsWith(`/`,{message:`Entrypoint must be a URL path starting with "/"`})}),a=r.object({endpoint:r.string().url().optional()}),o=r.union([e,r.object({anthropic:a.optional(),openai:a.optional()}).refine(e=>Object.keys(e).length>0,{message:`ProtocolRef config object must specify at least one protocol`})]),s=r.object({id:r.string().min(1),version:t,binaryVersion:t.optional()}),c=r.object({name:r.string().min(1),displayName:r.string().min(1).optional(),description:r.string().optional(),clients:r.array(s).readonly().optional(),protocols:r.array(o).min(1).readonly(),defaultProvider:r.string().min(1).optional()}),l=r.object({id:r.string().min(1),name:r.string().min(1),description:r.string().optional(),binary:r.object({name:r.string().min(1),managed:r.boolean().optional(),version:n.optional()}).strict().refine(e=>e.managed!==!0||e.version!==void 0,{message:`binary.version is required when binary.managed is true`,path:[`version`]}).refine(e=>e.version===void 0||e.managed===!0,{message:`binary.managed must be true when binary.version is provided`,path:[`managed`]}).optional()}).strict(),u=r.object({id:r.string().min(1),name:r.string().min(1),description:r.string().optional()}),d=r.object({prefix:r.string().min(1),description:r.string().optional(),stage:r.enum([`gather`,`transform`,`action`]).optional()}),f=r.object({adapterName:r.string().min(1),displayName:r.string().min(1),logFilePattern:r.string().min(1).optional()}),p=r.object({id:r.string().min(1),label:r.string().min(1),description:r.string().optional(),icon:r.string().min(1).optional(),selectionMode:r.enum([`single`,`multi`]),messageRoles:r.array(r.enum([`user`,`assistant`])).readonly().optional()}),m=r.enum([`beforeCreate`,`beforeRevise`,`afterCreate`,`afterRevise`,`afterStatusChanged`,`afterObservationAdded`]),h=r.object({id:r.string().min(1),event:m,kind:r.string().min(1).optional(),schemaVersion:r.string().min(1).optional()}),g=r.object({tiles:r.boolean().optional(),widgets:r.boolean().optional(),pages:r.boolean().optional(),routes:r.boolean().optional()}),_={adapters:`adapter`,clients:`client`,providers:`provider`,triggers:`trigger`,logImporters:`log importer`,sessionEventActions:`session event action`,artifactLifecycleHooks:`artifact lifecycle hook`};function v(e,t,n){e.addIssue({code:r.ZodIssueCode.custom,path:[t],message:`Duplicate ${_[t]} contribution identifier "${n}"`})}function y(e,t){let n=new Set,r=new Set,i=[];for(let a of e??[]){let e=t(a);if(n.has(e)){r.has(e)||(r.add(e),i.push(e));continue}n.add(e)}return i}const b=r.object({adapters:r.array(c).readonly().optional(),clients:r.array(l).readonly().optional(),providers:r.array(u).readonly().optional(),triggers:r.array(d).readonly().optional(),logImporters:r.array(f).readonly().optional(),sessionEventActions:r.array(p).readonly().optional(),artifactLifecycleHooks:r.array(h).readonly().optional(),create:r.boolean().optional(),tools:r.boolean().optional(),bootstrap:r.boolean().optional(),namespace:r.boolean().optional(),configSchema:r.boolean().optional(),uiConfig:r.boolean().optional(),ui:g.optional()}).superRefine((e,t)=>{for(let n of y(e.adapters,e=>e.name))v(t,`adapters`,n);for(let n of y(e.clients,e=>e.id))v(t,`clients`,n);for(let n of y(e.providers,e=>e.id))v(t,`providers`,n);for(let n of y(e.triggers,e=>e.prefix))v(t,`triggers`,n);for(let n of y(e.logImporters,e=>e.adapterName))v(t,`logImporters`,n);for(let n of y(e.sessionEventActions,e=>e.id))v(t,`sessionEventActions`,n);for(let n of y(e.artifactLifecycleHooks,e=>e.id))v(t,`artifactLifecycleHooks`,n)}),x=r.string().trim().min(1).transform(e=>e),S=r.object({name:r.string().min(1),required:r.boolean().optional()}),C=r.object({id:r.string(),style:r.enum([`tray-popover`,`utility`,`panel`]),width:r.number().optional(),height:r.number().optional(),singleton:r.boolean().optional(),params:r.array(S).readonly().optional()}).superRefine((e,t)=>{let n=new Set;for(let[i,a]of e.params?.entries()??[]){if(!n.has(a.name)){n.add(a.name);continue}t.addIssue({code:r.ZodIssueCode.custom,message:`Duplicate window param "${a.name}"`,path:[`params`,i,`name`]})}}),w=r.object({label:r.string(),section:r.enum([`utilities`,`tools`,`views`]).optional(),opensWindow:r.string().optional(),action:r.string().optional()}),T=r.object({name:r.string().min(1),description:r.string(),required:r.boolean().optional(),positional:r.boolean().optional(),short:r.string().regex(/^-[A-Za-z0-9]$/,`Expected a short flag like -p`).optional(),type:r.enum([`string`,`boolean`,`number`]).optional()}),E=r.object({name:r.string().min(1),description:r.string(),args:r.array(T).readonly().optional()}),D=r.object({name:r.string().min(1),description:r.string(),subcommands:r.array(E).readonly().optional(),hasInteractive:r.boolean().optional(),canProvideBus:r.boolean().optional()}),O=r.string().min(1).refine(e=>!/^(?:[\\/]|[A-Za-z]:)/.test(e),`Expected a relative path`).refine(e=>!e.split(/[\\/]/).some(e=>e===``||e===`.`||e===`..`),`Path must not contain empty or dot segments`),k=r.object({migrations:O.optional(),migrationSourceId:r.string().min(1).optional()}),A=r.object({type:r.literal(`extension`),name:r.string().min(1),version:t,optional:r.boolean().optional()});function j(e,t=`>=0.1.0`,n){return n===void 0?{type:`extension`,name:e,version:t}:{type:`extension`,name:e,version:t,optional:n}}const M=r.discriminatedUnion(`type`,[r.object({type:r.literal(`host`),id:r.string().min(1)}),r.object({type:r.literal(`capability`),id:r.string().min(1),version:t.optional()})]),N=r.object({name:r.string().min(1).regex(/^(@[^/\\]+\/)?[^/\\]+$/,`Extension name must be a plain identifier or an npm-scoped name (@scope/pkg)`).refine(e=>(e.startsWith(`@`)?e.split(`/`):[e]).every(e=>e!==`.`&&e!==`..`),`Extension name must not be a dot-segment`),displayName:r.string().min(1),version:n,surface:r.enum([`interactive`,`headless`,`any`]).optional(),dependencies:r.array(A).readonly().optional(),requires:r.array(M).readonly().optional(),provides:r.array(x).readonly().optional(),windows:r.array(C).readonly().optional(),tray:w.optional(),cli:D.optional(),storage:k.optional(),browser:i.optional(),contributions:b.optional()});function P(e){return Object.freeze({name:e})}const F=r.object({command:r.string().min(1),args:r.array(r.string()).optional(),env:r.record(r.string(),r.string()).optional(),healthTimeoutMs:r.number().int().positive().optional(),shutdownTimeoutMs:r.number().int().positive().optional()}),I=r.enum([`none`,`on-crash`,`always`]),L=F.extend({restartPolicy:I.optional()}),R=r.discriminatedUnion(`type`,[L.extend({type:r.literal(`bus-stdio`)}),L.extend({type:r.literal(`bus-websocket`)}),F.extend({type:r.literal(`mcp-stdio`)})]);function z(e){if(e.includes(`\\`)||e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`))return!1;let t=e.split(`/`),n=t.at(-1);return!n||n.includes(`.`)?!1:t.every(e=>e!==``&&e!==`.`&&e!==`..`&&e!==`src`&&e!==`dist`)}const B=r.union([r.literal(!0),r.string().min(1).refine(z,{message:`entrypoint stem must use forward-slash path stems, must not contain empty, . or .. segments, must not include a dotted final segment, and must not contain src or dist segments`})]),V=r.object({server:B.optional(),browser:B.optional(),cli:B.optional()}).refine(e=>e.server!==void 0||e.browser!==void 0||e.cli!==void 0,{message:`at least one entrypoint must be declared`});function H(e){return e.execution===`detached`}const U=N.extend({version:n,makaio:r.object({framework:t}).strict().readonly(),entrypoints:V.optional(),execution:r.enum([`embedded`,`detached`]).optional(),transport:R.optional(),config:r.object({defaults:r.record(r.string(),r.unknown()).optional()}).optional()}).superRefine((e,t)=>{e.execution===`detached`?(e.transport===void 0&&t.addIssue({code:r.ZodIssueCode.custom,message:`detached extensions must declare a 'transport' config`,path:[`transport`]}),e.entrypoints!==void 0&&t.addIssue({code:r.ZodIssueCode.custom,message:`detached extensions must not declare entrypoints`,path:[`entrypoints`]})):(e.entrypoints===void 0&&t.addIssue({code:r.ZodIssueCode.custom,message:`embedded extensions must declare at least one entrypoint`,path:[`entrypoints`]}),e.transport!==void 0&&t.addIssue({code:r.ZodIssueCode.custom,message:`embedded extensions must not declare a transport config`,path:[`transport`]}))});function W(e){return e}function G(e){return W(U.parse(e))}function K(e){let t=U.safeParse(e);return t.success?{success:!0,data:W(t.data)}:t}const q=r.discriminatedUnion(`kind`,[r.object({kind:r.literal(`configure-integration`),clientId:r.string().min(1),bundle:r.string().min(1)}),r.object({kind:r.literal(`install-extension`),extensionName:r.string().min(1)}),r.object({kind:r.literal(`open-url`),url:r.string().url()}),r.object({kind:r.literal(`run-command`),command:r.string().min(1)})]),J=r.enum([`info`,`recommended`,`degraded`]),Y=r.object({severity:J,title:r.string().min(1),message:r.string().min(1),action:q.optional()});function X(e){switch(e.kind){case`configure-integration`:return`Configure`;case`install-extension`:return`Install`;case`open-url`:return`Open`;case`run-command`:return`Run`}}const Z=r.object({extensionName:r.string().min(1),warnings:r.array(Y)});function Q(e,t){return e.parse(t??{})}function $(e){return JSON.stringify([e.extensionId,e.type,e.name,e.filename])}export{h as A,i as B,C,s as D,x as E,o as F,u as I,p as L,b as M,f as N,c as O,a as P,d as R,w as S,j as T,E as _,Y as a,M as b,R as c,H as d,G as f,D as g,T as h,Z as i,l as j,m as k,U as l,P as m,Q as n,J as o,K as p,q as r,X as s,$ as t,V as u,A as v,S as w,k as x,N as y,g as z};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { ExtensionDescriptor } from "@makaio/framework/contracts";
|
|
2
|
+
|
|
3
|
+
//#region runtimes/node/src/extension-discovery.d.ts
|
|
4
|
+
/** Preloaded server entry module used by bundled hosts. */
|
|
5
|
+
interface ExtensionEntrypointModule {
|
|
6
|
+
/** Server entry default export, validated by the extension loader. */
|
|
7
|
+
readonly default: unknown;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* An extension discovered on the filesystem.
|
|
11
|
+
* Carries the validated descriptor and the absolute path to the extension
|
|
12
|
+
* package root (used to resolve {@link ExtensionDescriptor.entrypoints}).
|
|
13
|
+
*/
|
|
14
|
+
interface DiscoveredExtension {
|
|
15
|
+
/** Validated descriptor parsed from `descriptor.json`. */
|
|
16
|
+
readonly descriptor: ExtensionDescriptor;
|
|
17
|
+
/** Absolute path to the extension package root directory. */
|
|
18
|
+
readonly extensionPath: string;
|
|
19
|
+
/**
|
|
20
|
+
* Where the extension was found.
|
|
21
|
+
* `'local'` (project node_modules) takes priority over `'installed'` (managed extensions),
|
|
22
|
+
* which takes priority over `'global-npm'` (global npm install).
|
|
23
|
+
*/
|
|
24
|
+
readonly source: 'local' | 'installed' | 'global-npm';
|
|
25
|
+
/**
|
|
26
|
+
* Pre-loaded server entry module. When present, the extension loader skips
|
|
27
|
+
* filesystem-based entry resolution and uses this module directly. Enables
|
|
28
|
+
* bundled deployments where extension code is statically imported at build
|
|
29
|
+
* time rather than dynamically discovered on disk.
|
|
30
|
+
*/
|
|
31
|
+
readonly preloadedModule?: ExtensionEntrypointModule;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Options for {@link FilesystemDescriptorDiscovery}.
|
|
35
|
+
*/
|
|
36
|
+
interface FilesystemDescriptorDiscoveryOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Override for project-local extension packages, or `false` to skip the
|
|
39
|
+
* local tier. Defaults to `{cwd}/node_modules`.
|
|
40
|
+
*/
|
|
41
|
+
readonly localNodeModulesDir?: string | false;
|
|
42
|
+
/**
|
|
43
|
+
* Managed extension install directory (e.g. `{makaioHome}/extensions`).
|
|
44
|
+
*/
|
|
45
|
+
readonly extensionsDir: string;
|
|
46
|
+
/**
|
|
47
|
+
* Global npm node_modules directory (e.g. `{makaioHome}/node_modules`).
|
|
48
|
+
*/
|
|
49
|
+
readonly nodeModulesDir: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Strategy interface for discovering extensions.
|
|
53
|
+
* Implementations scan different locations (filesystem, explicit list)
|
|
54
|
+
* and return validated descriptors ready for the loading bridge.
|
|
55
|
+
*/
|
|
56
|
+
interface ExtensionDiscovery {
|
|
57
|
+
/** Scan for extensions and return validated discoveries. */
|
|
58
|
+
discover(): Promise<DiscoveredExtension[]>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Discovers extensions by scanning up to three locations in priority order:
|
|
62
|
+
*
|
|
63
|
+
* 1. `{cwd}/node_modules/` — project-local installs (`'local'`), unless disabled via options
|
|
64
|
+
* 2. `{makaioHome}/extensions/` — managed extension installs (`'installed'`), requires `options.extensionsDir`
|
|
65
|
+
* 3. `{makaioHome}/node_modules/` — global npm installs (`'global-npm'`), requires `options.nodeModulesDir`
|
|
66
|
+
*
|
|
67
|
+
* When `options` is omitted, only the local tier is scanned (installed/global tiers are skipped).
|
|
68
|
+
* Each location supports both flat (`pkg/`) and scoped (`@scope/pkg/`) packages.
|
|
69
|
+
* Validates each descriptor against {@link ExtensionDescriptorSchema}.
|
|
70
|
+
* Malformed or invalid descriptors are skipped with a console warning.
|
|
71
|
+
* On name collision, earlier tiers win (local \> installed \> global-npm).
|
|
72
|
+
*/
|
|
73
|
+
declare class FilesystemDescriptorDiscovery implements ExtensionDiscovery {
|
|
74
|
+
private readonly localNodeModulesDir;
|
|
75
|
+
private readonly extensionsDir;
|
|
76
|
+
private readonly nodeModulesDir;
|
|
77
|
+
/**
|
|
78
|
+
* @param cwd - Working directory for local node_modules scan. Defaults to `process.cwd()`.
|
|
79
|
+
* @param options - Discovery directory configuration. When omitted, only project-local
|
|
80
|
+
* node_modules are scanned (installed/global tiers are skipped). When provided, both
|
|
81
|
+
* `extensionsDir` and `nodeModulesDir` are required so callers cannot silently
|
|
82
|
+
* fall back to a hardcoded default.
|
|
83
|
+
*/
|
|
84
|
+
constructor(cwd?: string, options?: FilesystemDescriptorDiscoveryOptions);
|
|
85
|
+
/**
|
|
86
|
+
* Scan all three extension locations and return a deduplicated list.
|
|
87
|
+
*
|
|
88
|
+
* Priority: local → installed → global-npm. Earlier tiers win on name collision.
|
|
89
|
+
* @returns Deduplicated list of discovered extensions ordered by priority.
|
|
90
|
+
*/
|
|
91
|
+
discover(): Promise<DiscoveredExtension[]>;
|
|
92
|
+
/**
|
|
93
|
+
* Scan project-local node_modules for descriptor.json files.
|
|
94
|
+
* @returns Discovered extensions from node_modules.
|
|
95
|
+
*/
|
|
96
|
+
private scanLocal;
|
|
97
|
+
/**
|
|
98
|
+
* Scan the managed extensions directory for descriptor.json files.
|
|
99
|
+
* @returns Discovered extensions from the managed install directory.
|
|
100
|
+
*/
|
|
101
|
+
private scanInstalled;
|
|
102
|
+
/**
|
|
103
|
+
* Scan global npm node_modules for descriptor.json files.
|
|
104
|
+
* @returns Discovered extensions from the global npm install directory.
|
|
105
|
+
*/
|
|
106
|
+
private scanGlobalNpm;
|
|
107
|
+
/**
|
|
108
|
+
* Glob for descriptor.json files, parse and validate each.
|
|
109
|
+
* Invalid descriptors are skipped with a warning.
|
|
110
|
+
* @param patterns - Glob patterns to search.
|
|
111
|
+
* @param source - The tier from which the results originate.
|
|
112
|
+
* @returns List of successfully parsed and validated extensions.
|
|
113
|
+
*/
|
|
114
|
+
private scanPatterns;
|
|
115
|
+
/**
|
|
116
|
+
* Deduplicate by descriptor name across priority tiers.
|
|
117
|
+
*
|
|
118
|
+
* Tiers are processed in priority order — earlier tiers win on name collision.
|
|
119
|
+
* @param tiers - Extension arrays ordered by descending priority.
|
|
120
|
+
* @returns Merged list with no duplicate names.
|
|
121
|
+
*/
|
|
122
|
+
private deduplicate;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Returns a pre-defined list of extensions without filesystem scanning.
|
|
126
|
+
*
|
|
127
|
+
* Used by tests and host-owned discovery flows where filesystem scanning is
|
|
128
|
+
* unavailable or undesirable.
|
|
129
|
+
*/
|
|
130
|
+
declare class ExplicitDescriptorDiscovery implements ExtensionDiscovery {
|
|
131
|
+
private readonly extensions;
|
|
132
|
+
/**
|
|
133
|
+
* @param extensions - Fixed list of extensions to return on every `discover()` call.
|
|
134
|
+
*/
|
|
135
|
+
constructor(extensions: DiscoveredExtension[]);
|
|
136
|
+
/**
|
|
137
|
+
* Return the fixed extension list provided at construction time.
|
|
138
|
+
* @returns The extension list passed to the constructor.
|
|
139
|
+
*/
|
|
140
|
+
discover(): Promise<DiscoveredExtension[]>;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Merges multiple discovery strategies into one deduplicated result.
|
|
144
|
+
*
|
|
145
|
+
* Discoveries run concurrently via `Promise.all` and their results are
|
|
146
|
+
* merged in constructor order. Earlier discoveries win on name collision,
|
|
147
|
+
* which lets hosts layer explicit descriptor sets without changing the
|
|
148
|
+
* existing tier semantics.
|
|
149
|
+
*/
|
|
150
|
+
declare class MergedDescriptorDiscovery implements ExtensionDiscovery {
|
|
151
|
+
private readonly discoveries;
|
|
152
|
+
/**
|
|
153
|
+
* @param discoveries - Discovery strategies ordered by descending priority.
|
|
154
|
+
*/
|
|
155
|
+
constructor(discoveries: ReadonlyArray<ExtensionDiscovery>);
|
|
156
|
+
/**
|
|
157
|
+
* Run all discoveries and merge their results by descriptor name.
|
|
158
|
+
* @returns Deduplicated list preserving the first occurrence of each name.
|
|
159
|
+
*/
|
|
160
|
+
discover(): Promise<DiscoveredExtension[]>;
|
|
161
|
+
}
|
|
162
|
+
//#endregion
|
|
163
|
+
export { FilesystemDescriptorDiscovery as a, ExtensionEntrypointModule as i, ExplicitDescriptorDiscovery as n, FilesystemDescriptorDiscoveryOptions as o, ExtensionDiscovery as r, MergedDescriptorDiscovery as s, DiscoveredExtension as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./chunk-DTipWd-i.mjs";var t=e(((e,t)=>{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),n=e(((e,t)=>{var n=t.exports=function(e,t,n){typeof t==`function`&&(n=t,t={}),n=t.cb||n;var i=typeof n==`function`?n:n.pre||function(){},a=n.post||function(){};r(t,i,a,e,``,e)};n.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},n.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},n.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},n.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function r(e,t,a,o,s,c,l,u,d,f){if(o&&typeof o==`object`&&!Array.isArray(o)){for(var p in t(o,s,c,l,u,d,f),o){var m=o[p];if(Array.isArray(m)){if(p in n.arrayKeywords)for(var h=0;h<m.length;h++)r(e,t,a,m[h],s+`/`+p+`/`+h,c,s,p,o,h)}else if(p in n.propsKeywords){if(m&&typeof m==`object`)for(var g in m)r(e,t,a,m[g],s+`/`+p+`/`+i(g),c,s,p,o,g)}else (p in n.keywords||e.allKeys&&!(p in n.skipKeywords))&&r(e,t,a,m,s+`/`+p,c,s,p,o)}a(o,s,c,l,u,d,f)}}function i(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}})),r=e(((e,t)=>{let n=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),r=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function i(e){let t=``,n=0,r=0;for(r=0;r<e.length;r++)if(n=e[r].charCodeAt(0),n!==48){if(!(n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return``;t+=e[r];break}for(r+=1;r<e.length;r++){if(n=e[r].charCodeAt(0),!(n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return``;t+=e[r]}return t}let a=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function o(e){return e.length=0,!0}function s(e,t,n){if(e.length){let r=i(e);if(r!==``)t.push(r);else return n.error=!0,!1;e.length=0}return!0}function c(e){let t=0,n={error:!1,address:``,zone:``},r=[],a=[],c=!1,l=!1,u=s;for(let i=0;i<e.length;i++){let s=e[i];if(!(s===`[`||s===`]`))if(s===`:`){if(c===!0&&(l=!0),!u(a,r,n))break;if(++t>7){n.error=!0;break}i>0&&e[i-1]===`:`&&(c=!0),r.push(`:`);continue}else if(s===`%`){if(!u(a,r,n))break;u=o}else{a.push(s);continue}}return a.length&&(u===o?n.zone=a.join(``):l?r.push(a.join(``)):r.push(i(a))),n.address=r.join(``),n}function l(e){if(u(e,`:`)<2)return{host:e,isIPV6:!1};let t=c(e);if(t.error)return{host:e,isIPV6:!1};{let e=t.address,n=t.address;return t.zone&&(e+=`%`+t.zone,n+=`%25`+t.zone),{host:e,isIPV6:!0,escapedHost:n}}}function u(e,t){let n=0;for(let r=0;r<e.length;r++)e[r]===t&&n++;return n}function d(e){let t=e,n=[],r=-1,i=0;for(;i=t.length;){if(i===1){if(t===`.`)break;if(t===`/`){n.push(`/`);break}else{n.push(t);break}}else if(i===2){if(t[0]===`.`){if(t[1]===`.`)break;if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&(t[1]===`.`||t[1]===`/`)){n.push(`/`);break}}else if(i===3&&t===`/..`){n.length!==0&&n.pop(),n.push(`/`);break}if(t[0]===`.`){if(t[1]===`.`){if(t[2]===`/`){t=t.slice(3);continue}}else if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&t[1]===`.`){if(t[2]===`/`){t=t.slice(2);continue}else if(t[2]===`.`&&t[3]===`/`){t=t.slice(3),n.length!==0&&n.pop();continue}}if((r=t.indexOf(`/`,1))===-1){n.push(t);break}else n.push(t.slice(0,r)),t=t.slice(r)}return n.join(``)}function f(e,t){let n=t===!0?unescape:escape;return e.scheme!==void 0&&(e.scheme=n(e.scheme)),e.userinfo!==void 0&&(e.userinfo=n(e.userinfo)),e.host!==void 0&&(e.host=n(e.host)),e.path!==void 0&&(e.path=n(e.path)),e.query!==void 0&&(e.query=n(e.query)),e.fragment!==void 0&&(e.fragment=n(e.fragment)),e}function p(e){let t=[];if(e.userinfo!==void 0&&(t.push(e.userinfo),t.push(`@`)),e.host!==void 0){let n=unescape(e.host);if(!r(n)){let t=l(n);n=t.isIPV6===!0?`[${t.escapedHost}]`:e.host}t.push(n)}return(typeof e.port==`number`||typeof e.port==`string`)&&(t.push(`:`),t.push(String(e.port))),t.length?t.join(``):void 0}t.exports={nonSimpleDomain:a,recomposeAuthority:p,normalizeComponentEncoding:f,removeDotSegments:d,isIPv4:r,isUUID:n,normalizeIPv6:l,stringArrayToHexStripped:i}})),i=e(((e,t)=>{let{isUUID:n}=r(),i=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,a=[`http`,`https`,`ws`,`wss`,`urn`,`urn:uuid`];function o(e){return a.indexOf(e)!==-1}function s(e){return e.secure===!0?!0:e.secure===!1?!1:e.scheme?e.scheme.length===3&&(e.scheme[0]===`w`||e.scheme[0]===`W`)&&(e.scheme[1]===`s`||e.scheme[1]===`S`)&&(e.scheme[2]===`s`||e.scheme[2]===`S`):!1}function c(e){return e.host||(e.error=e.error||`HTTP URIs must have a host.`),e}function l(e){let t=String(e.scheme).toLowerCase()===`https`;return(e.port===(t?443:80)||e.port===``)&&(e.port=void 0),e.path||=`/`,e}function u(e){return e.secure=s(e),e.resourceName=(e.path||`/`)+(e.query?`?`+e.query:``),e.path=void 0,e.query=void 0,e}function d(e){if((e.port===(s(e)?443:80)||e.port===``)&&(e.port=void 0),typeof e.secure==`boolean`&&(e.scheme=e.secure?`wss`:`ws`,e.secure=void 0),e.resourceName){let[t,n]=e.resourceName.split(`?`);e.path=t&&t!==`/`?t:void 0,e.query=n,e.resourceName=void 0}return e.fragment=void 0,e}function f(e,t){if(!e.path)return e.error=`URN can not be parsed`,e;let n=e.path.match(i);if(n){let r=t.scheme||e.scheme||`urn`;e.nid=n[1].toLowerCase(),e.nss=n[2];let i=b(`${r}:${t.nid||e.nid}`);e.path=void 0,i&&(e=i.parse(e,t))}else e.error=e.error||`URN can not be parsed.`;return e}function p(e,t){if(e.nid===void 0)throw Error(`URN without nid cannot be serialized`);let n=t.scheme||e.scheme||`urn`,r=e.nid.toLowerCase(),i=b(`${n}:${t.nid||r}`);i&&(e=i.serialize(e,t));let a=e,o=e.nss;return a.path=`${r||t.nid}:${o}`,t.skipEscape=!0,a}function m(e,t){let r=e;return r.uuid=r.nss,r.nss=void 0,!t.tolerant&&(!r.uuid||!n(r.uuid))&&(r.error=r.error||`UUID is not valid.`),r}function h(e){let t=e;return t.nss=(e.uuid||``).toLowerCase(),t}let g={scheme:`http`,domainHost:!0,parse:c,serialize:l},_={scheme:`https`,domainHost:g.domainHost,parse:c,serialize:l},v={scheme:`ws`,domainHost:!0,parse:u,serialize:d},y={http:g,https:_,ws:v,wss:{scheme:`wss`,domainHost:v.domainHost,parse:v.parse,serialize:v.serialize},urn:{scheme:`urn`,parse:f,serialize:p,skipNormalize:!0},"urn:uuid":{scheme:`urn:uuid`,parse:m,serialize:h,skipNormalize:!0}};Object.setPrototypeOf(y,null);function b(e){return e&&(y[e]||y[e.toLowerCase()])||void 0}t.exports={wsIsSecure:s,SCHEMES:y,isValidSchemeName:o,getSchemeHandler:b}})),a=e(((e,t)=>{let{normalizeIPv6:n,removeDotSegments:a,recomposeAuthority:o,normalizeComponentEncoding:s,isIPv4:c,nonSimpleDomain:l}=r(),{SCHEMES:u,getSchemeHandler:d}=i();function f(e,t){return typeof e==`string`?e=g(v(e,t),t):typeof e==`object`&&(e=v(g(e,t),t)),e}function p(e,t,n){let r=n?Object.assign({scheme:`null`},n):{scheme:`null`},i=m(v(e,r),v(t,r),r,!0);return r.skipEscape=!0,g(i,r)}function m(e,t,n,r){let i={};return r||(e=v(g(e,n),n),t=v(g(t,n),n)),n||={},!n.tolerant&&t.scheme?(i.scheme=t.scheme,i.userinfo=t.userinfo,i.host=t.host,i.port=t.port,i.path=a(t.path||``),i.query=t.query):(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0?(i.userinfo=t.userinfo,i.host=t.host,i.port=t.port,i.path=a(t.path||``),i.query=t.query):(t.path?(t.path[0]===`/`?i.path=a(t.path):((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path?i.path=`/`+t.path:e.path?i.path=e.path.slice(0,e.path.lastIndexOf(`/`)+1)+t.path:i.path=t.path,i.path=a(i.path)),i.query=t.query):(i.path=e.path,t.query===void 0?i.query=e.query:i.query=t.query),i.userinfo=e.userinfo,i.host=e.host,i.port=e.port),i.scheme=e.scheme),i.fragment=t.fragment,i}function h(e,t,n){return typeof e==`string`?(e=unescape(e),e=g(s(v(e,n),!0),{...n,skipEscape:!0})):typeof e==`object`&&(e=g(s(e,!0),{...n,skipEscape:!0})),typeof t==`string`?(t=unescape(t),t=g(s(v(t,n),!0),{...n,skipEscape:!0})):typeof t==`object`&&(t=g(s(t,!0),{...n,skipEscape:!0})),e.toLowerCase()===t.toLowerCase()}function g(e,t){let n={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:``},r=Object.assign({},t),i=[],s=d(r.scheme||n.scheme);s&&s.serialize&&s.serialize(n,r),n.path!==void 0&&(r.skipEscape?n.path=unescape(n.path):(n.path=escape(n.path),n.scheme!==void 0&&(n.path=n.path.split(`%3A`).join(`:`)))),r.reference!==`suffix`&&n.scheme&&i.push(n.scheme,`:`);let c=o(n);if(c!==void 0&&(r.reference!==`suffix`&&i.push(`//`),i.push(c),n.path&&n.path[0]!==`/`&&i.push(`/`)),n.path!==void 0){let e=n.path;!r.absolutePath&&(!s||!s.absolutePath)&&(e=a(e)),c===void 0&&e[0]===`/`&&e[1]===`/`&&(e=`/%2F`+e.slice(2)),i.push(e)}return n.query!==void 0&&i.push(`?`,n.query),n.fragment!==void 0&&i.push(`#`,n.fragment),i.join(``)}let _=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function v(e,t){let r=Object.assign({},t),i={scheme:void 0,userinfo:void 0,host:``,port:void 0,path:``,query:void 0,fragment:void 0},a=!1;r.reference===`suffix`&&(e=r.scheme?r.scheme+`:`+e:`//`+e);let o=e.match(_);if(o){if(i.scheme=o[1],i.userinfo=o[3],i.host=o[4],i.port=parseInt(o[5],10),i.path=o[6]||``,i.query=o[7],i.fragment=o[8],isNaN(i.port)&&(i.port=o[5]),i.host)if(c(i.host)===!1){let e=n(i.host);i.host=e.host.toLowerCase(),a=e.isIPV6}else a=!0;i.scheme===void 0&&i.userinfo===void 0&&i.host===void 0&&i.port===void 0&&i.query===void 0&&!i.path?i.reference=`same-document`:i.scheme===void 0?i.reference=`relative`:i.fragment===void 0?i.reference=`absolute`:i.reference=`uri`,r.reference&&r.reference!==`suffix`&&r.reference!==i.reference&&(i.error=i.error||`URI is not a `+r.reference+` reference.`);let t=d(r.scheme||i.scheme);if(!r.unicodeSupport&&(!t||!t.unicodeSupport)&&i.host&&(r.domainHost||t&&t.domainHost)&&a===!1&&l(i.host))try{i.host=URL.domainToASCII(i.host.toLowerCase())}catch(e){i.error=i.error||`Host's domain name can not be converted to ASCII: `+e}(!t||t&&!t.skipNormalize)&&(e.indexOf(`%`)!==-1&&(i.scheme!==void 0&&(i.scheme=unescape(i.scheme)),i.host!==void 0&&(i.host=unescape(i.host))),i.path&&=escape(unescape(i.path)),i.fragment&&=encodeURI(decodeURIComponent(i.fragment))),t&&t.parse&&t.parse(i,r)}else i.error=i.error||`URI can not be parsed.`;return i}let y={SCHEMES:u,normalize:f,resolve:p,resolveComponent:m,equal:h,serialize:g,parse:v};t.exports=y,t.exports.default=y,t.exports.fastUri=y}));export{n,t as r,a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{FileSystemSubjects as e,FsSubjects as t}from"./services/filesystem/namespace.mjs";import*as n from"node:fs/promises";import*as r from"node:path";import{BaseService as i}from"@makaio/framework/service-base";import*as a from"node:os";const o=[`node_modules`,`.git`,`dist`,`build`,`.next`,`coverage`,`.turbo`,`.cache`];function s(e){return e.split(r.sep).filter(Boolean)}function c(e){let t=r.dirname(e);return t===e?null:t}function l(e){let t=s(e),n=[],i=r.parse(e).root;for(let e of t)i=r.join(i,e),n.push({name:e,path:i});return n}async function u(e,t){let i=r.resolve(e),a=await n.readdir(i,{withFileTypes:!0}),u=t?.includeHidden??!1,d=new Set(t?.excludeNames??o),f=[],p=[];for(let e of a){if(e.name.startsWith(`.`)&&!u||d.has(e.name))continue;let t=r.join(i,e.name),a=e.isDirectory();try{let i=!1;if(a)try{await n.access(r.join(t,`.git`)),i=!0}catch{}let o=await n.stat(t);f.push({name:e.name,path:t,type:a?`directory`:`file`,isGitRepo:a?i:void 0,size:a?void 0:o.size,modified:o.mtimeMs})}catch(t){let n=t;p.push({name:e.name,code:n.code??`UNKNOWN`,message:n.message})}}f.sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1);let m=!1;try{await n.access(r.join(i,`.git`)),m=!0}catch{}return{entries:f,isGitRepo:m,path:i,parentPath:c(i),segments:s(i),breadcrumbs:l(i),errors:p.length>0?p:void 0}}var d=class extends i{machineId;label;constructor(e,t,n=`Local`){super(e),this.machineId=t,this.label=n}async onInit(){this.registerHandler(e.listSources,e=>{e.identify?.(this.machineId),e.setResult({sources:[{machineId:this.machineId,label:this.label}]})}),this.addCleanup(this.bus.on(e.listDirectory,async e=>{let t=await u(e.payload.path??a.homedir(),e.payload.options);e.setResult(t)},{filter:{machineId:this.machineId}})),this.addCleanup(this.bus.on(e.getHomeDir,e=>{e.setResult({path:a.homedir()})},{filter:{machineId:this.machineId}})),this.registerHandler(t.glob,async e=>{let{pattern:t,cwd:i,limit:a=100,offset:o=0,ignore:s=[],machineId:c}=e.payload;if(this.requireMachineIdForRemote(e,c),c!==void 0&&!this.shouldHandle(c))return;let{globby:l}=await import(`./globby-
|
|
1
|
+
import{FileSystemSubjects as e,FsSubjects as t}from"./services/filesystem/namespace.mjs";import*as n from"node:fs/promises";import*as r from"node:path";import{BaseService as i}from"@makaio/framework/service-base";import*as a from"node:os";const o=[`node_modules`,`.git`,`dist`,`build`,`.next`,`coverage`,`.turbo`,`.cache`];function s(e){return e.split(r.sep).filter(Boolean)}function c(e){let t=r.dirname(e);return t===e?null:t}function l(e){let t=s(e),n=[],i=r.parse(e).root;for(let e of t)i=r.join(i,e),n.push({name:e,path:i});return n}async function u(e,t){let i=r.resolve(e),a=await n.readdir(i,{withFileTypes:!0}),u=t?.includeHidden??!1,d=new Set(t?.excludeNames??o),f=[],p=[];for(let e of a){if(e.name.startsWith(`.`)&&!u||d.has(e.name))continue;let t=r.join(i,e.name),a=e.isDirectory();try{let i=!1;if(a)try{await n.access(r.join(t,`.git`)),i=!0}catch{}let o=await n.stat(t);f.push({name:e.name,path:t,type:a?`directory`:`file`,isGitRepo:a?i:void 0,size:a?void 0:o.size,modified:o.mtimeMs})}catch(t){let n=t;p.push({name:e.name,code:n.code??`UNKNOWN`,message:n.message})}}f.sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1);let m=!1;try{await n.access(r.join(i,`.git`)),m=!0}catch{}return{entries:f,isGitRepo:m,path:i,parentPath:c(i),segments:s(i),breadcrumbs:l(i),errors:p.length>0?p:void 0}}var d=class extends i{machineId;label;constructor(e,t,n=`Local`){super(e),this.machineId=t,this.label=n}async onInit(){this.registerHandler(e.listSources,e=>{e.identify?.(this.machineId),e.setResult({sources:[{machineId:this.machineId,label:this.label}]})}),this.addCleanup(this.bus.on(e.listDirectory,async e=>{let t=await u(e.payload.path??a.homedir(),e.payload.options);e.setResult(t)},{filter:{machineId:this.machineId}})),this.addCleanup(this.bus.on(e.getHomeDir,e=>{e.setResult({path:a.homedir()})},{filter:{machineId:this.machineId}})),this.registerHandler(t.glob,async e=>{let{pattern:t,cwd:i,limit:a=100,offset:o=0,ignore:s=[],machineId:c}=e.payload;if(this.requireMachineIdForRemote(e,c),c!==void 0&&!this.shouldHandle(c))return;let{globby:l}=await import(`./globby-DPHEhf86.mjs`).then(e=>e.n),u=await l(t,{cwd:i,ignore:[`node_modules/**`,`.git/**`,...s],absolute:!0,onlyFiles:!1,expandDirectories:!1}),d=u.length,f=o+a<d,p=u.slice(o,o+a),m=await Promise.all(p.map(async e=>{let t=r.relative(i,e),a=`file`,o;try{let t=await n.stat(e);a=t.isDirectory()?`directory`:`file`,o=t.isFile()?t.size:void 0}catch{}return{path:e,relativePath:t,type:a,size:o}}));e.setResult({files:m,truncated:f,total:d})}),this.registerHandler(t.readFile,async e=>{let{path:t,machineId:r,encoding:i=`utf-8`}=e.payload;if(this.requireMachineIdForRemote(e,r),r!==void 0&&!this.shouldHandle(r))return;let a=await n.readFile(t,{encoding:i});e.setResult({content:a})}),this.registerHandler(t.writeFile,async e=>{let{path:t,content:r,machineId:i,encoding:a=`utf-8`}=e.payload;this.requireMachineIdForRemote(e,i),!(i!==void 0&&!this.shouldHandle(i))&&(await n.writeFile(t,r,{encoding:a}),e.setResult({success:!0}))})}requireMachineIdForRemote(e,t){if(!this.isHostOwnedOrigin(e)&&t===void 0)throw Error(`machineId is required for remote filesystem access`)}isHostOwnedOrigin(e){return e.origin.local||e.transport?.transportName===`worker`&&e.transport.peer===void 0}shouldHandle(e){return e===this.machineId}};export{d as t};
|