@makaio/framework 1.0.0-dev-1789609124644 → 1.0.0-dev-1790066089222
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/{adapter-C4v_gNTI.mjs → adapter-DSRgsh2d.mjs} +1 -1
- package/dist/adapter-subsystem/index.d.mts +15 -7
- package/dist/adapter-subsystem/index.mjs +1 -1
- package/dist/adapters/claude/index.mjs +3 -3
- package/dist/adapters/config/index.d.mts +1 -1
- package/dist/adapters/index.d.mts +2 -2
- package/dist/adapters/node.d.mts +1 -1
- package/dist/{attempt-record-codec-DaQ3WHUs.mjs → attempt-record-codec-DXpdMgyI.mjs} +1 -1
- package/dist/bus/index.d.mts +120 -8
- package/dist/bus/index.mjs +1 -1
- package/dist/bus-ceMF9rsq.mjs +9 -0
- package/dist/client-DWSwtFyI.mjs +1 -0
- package/dist/clients/index.d.mts +179 -12
- package/dist/clients/index.mjs +1 -1
- package/dist/clients/managed-install.d.mts +1 -1
- package/dist/code-execution/worker-entry.d.mts +1 -1
- package/dist/code-execution/worker-entry.mjs +1 -1
- package/dist/{code-execution-pUF4IO462.mjs → code-execution-DWSux6k1.mjs} +1 -1
- 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 +2 -2
- package/dist/contracts/auth/index.d.mts +2 -2
- package/dist/contracts/automation-trigger/index.d.mts +3 -3
- package/dist/contracts/canonical-model/index.d.mts +1 -1
- package/dist/contracts/capabilities/index.d.mts +1 -1
- package/dist/contracts/client/index.d.mts +3 -3
- package/dist/contracts/client/index.mjs +1 -1
- package/dist/contracts/code-execution/index.d.mts +1 -1
- package/dist/contracts/common/index.d.mts +1 -1
- package/dist/contracts/config/index.d.mts +2 -47
- package/dist/contracts/context-projection/index.d.mts +232 -0
- package/dist/contracts/context-projection/index.mjs +1 -0
- package/dist/contracts/extension/index.d.mts +6 -6
- package/dist/contracts/extension/index.mjs +1 -1
- package/dist/contracts/facet/index.d.mts +1 -1
- package/dist/contracts/harness/index.d.mts +1 -1
- package/dist/contracts/host/index.d.mts +1 -1
- package/dist/contracts/index.d.mts +43 -43
- package/dist/contracts/index.mjs +1 -1
- package/dist/contracts/materialization/index.d.mts +2 -2
- package/dist/contracts/model-registry/index.d.mts +1 -1
- package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
- package/dist/contracts/platform/index.d.mts +1 -1
- package/dist/contracts/provider/index.d.mts +2 -2
- package/dist/contracts/reaction/index.d.mts +1 -1
- package/dist/contracts/session/index.d.mts +3 -3
- package/dist/contracts/session/index.mjs +1 -1
- package/dist/contracts/shared/index.d.mts +2 -2
- package/dist/contracts/skill/index.d.mts +1 -1
- package/dist/contracts/telemetry/index.d.mts +1 -1
- package/dist/contracts/timeout/index.d.mts +1 -1
- package/dist/contracts/variant/index.d.mts +1 -1
- package/dist/contracts/worker/index.d.mts +2 -2
- package/dist/contracts/workflow/index.d.mts +2 -2
- package/dist/{contribution-DDbHzCPF.d.mts → contribution-1GL7Rjaq.d.mts} +2 -2
- package/dist/credential-ref-w4ZYpYW0.d.mts +49 -0
- package/dist/{definition-CuaBQyde.d.mts → definition-DeIGoROj.d.mts} +1 -1
- package/dist/{descriptor-to-package-Dw8dnl5E.mjs → descriptor-to-package-BPIArq6N.mjs} +1 -1
- package/dist/{detached-extension-handle-DN3aqLyq.mjs → detached-extension-handle-W5_yfCyE.mjs} +1 -1
- package/dist/drizzle/0040_session_generation.sql +1 -0
- package/dist/drizzle/0041_session_principal_owner.sql +1 -0
- package/dist/drizzle/meta/_journal.json +14 -0
- package/dist/{execution-attempt-owner-recovery-CE_rvHKE.mjs → execution-attempt-owner-recovery-BZOEVYFH.mjs} +1 -1
- package/dist/extension-C6ANjR33.mjs +1 -0
- package/dist/{extension-context-BH31eOMv.d.mts → extension-context-pQ7Uio_s.d.mts} +44 -1
- package/dist/{extension-discovery-CA2IhDRo.d.mts → extension-discovery-Rup-gANp.d.mts} +114 -15
- package/dist/extension-kOwzAMud.mjs +1 -0
- package/dist/extension-namespace-CeRpt6C8.mjs +1 -0
- package/dist/{framework-packages-Bg4edkkM.mjs → framework-packages-U4Xhouxe.mjs} +1 -1
- package/dist/{hook-responses-Dq16X3Cb.d.mts → hook-responses-B882RcQc.d.mts} +48 -5
- package/dist/{index-Dm3d490n.d.mts → index-B2bxgKiK.d.mts} +1 -1
- package/dist/{index-7CVumCjj.d.mts → index-BTpkpHIS.d.mts} +65 -9
- package/dist/{index-Bh57xARQ.d.mts → index-BUv9gfRT.d.mts} +3 -3
- package/dist/{index-C6e9cwAl2.d.mts → index-BjQtqMxP2.d.mts} +4 -4
- package/dist/{index-B-u0Tu8X.d.mts → index-Bqi44ODz.d.mts} +37 -37
- package/dist/{index-CIzvBH8O.d.mts → index-C8two8wz.d.mts} +1 -1
- package/dist/{index-oxZt93RL.d.mts → index-CESqYf8a.d.mts} +2 -2
- package/dist/{index-C87P0WpY2.d.mts → index-CmCLAMNs.d.mts} +1 -1
- package/dist/index-CyEE1RI5.d.mts +869 -0
- package/dist/{index-De_oh9M-2.d.mts → index-D6Uq1btG.d.mts} +87 -10
- package/dist/{index-CRZ1jrxp.d.mts → index-DDSt0uS2.d.mts} +160 -12
- package/dist/{index-B6WkHnCQ.d.mts → index-DRxgmrad.d.mts} +1 -1
- package/dist/{index-U--ajOHy.d.mts → index-DUYjTfHD.d.mts} +1 -1
- package/dist/{index-HJkz7i4E.d.mts → index-DdJKsdya.d.mts} +188 -10
- package/dist/{index-B4pPwpKk.d.mts → index-DfREUyAk.d.mts} +1 -1
- package/dist/{index-ClKwF6LE.d.mts → index-Di-R1gmo.d.mts} +2 -2
- package/dist/{index-DWANFpTG.d.mts → index-Jdju2W3y.d.mts} +1 -1
- package/dist/{index-DQKVQPUS.d.mts → index-L6mssyeZ.d.mts} +1 -1
- package/dist/{index-B8v1-2-V2.d.mts → index-anIxF_eT.d.mts} +1 -1
- package/dist/{index-iVisrVdC2.d.mts → index-bYBnDBl32.d.mts} +539 -4
- package/dist/{index-Bg3WVL8n.d.mts → index-gNdH1F6r.d.mts} +531 -26
- package/dist/{index-zmDRR8gv2.d.mts → index-m5ZQFglW2.d.mts} +1 -1
- package/dist/{index-mTaFX2HH2.d.mts → index-uk8icWON2.d.mts} +419 -19
- package/dist/kernel/cli/index.d.mts +2 -2
- package/dist/kernel/cli/register.d.mts +1 -1
- package/dist/kernel/extension/index.d.mts +3 -2
- package/dist/kernel/extension/index.mjs +1 -1
- package/dist/kernel/index.d.mts +6 -6
- package/dist/kernel/index.mjs +1 -1
- package/dist/kernel/namespace/index.d.mts +1 -1
- package/dist/kernel/observability/index.d.mts +2 -2
- package/dist/kernel/observability/index.mjs +1 -1
- package/dist/kernel/providers/index.d.mts +1 -1
- package/dist/kernel/window/index.d.mts +1 -1
- package/dist/{lib-BF5XBSfw.mjs → lib-BdyGVjpO.mjs} +1 -1
- package/dist/{lib-Dljw2Cqh.mjs → lib-DxP3tPm9.mjs} +1 -1
- package/dist/load-extensions-BGfSWW_R.mjs +1 -0
- package/dist/{load-extensions-DGstT4_p.d.mts → load-extensions-Be_lOjm_.d.mts} +27 -14
- package/dist/mcp-http-server/index.mjs +1 -1
- package/dist/{namespace-BMdYJN_t.mjs → namespace-CqJhR19O.mjs} +1 -1
- package/dist/{namespace-Cmu-5_P9.d.mts → namespace-DudchWPb.d.mts} +457 -0
- package/dist/{namespace-BEbQb19g.d.mts → namespace-Eir1wQ_r.d.mts} +2 -2
- package/dist/node/bus-server/index.d.mts +1 -1
- package/dist/node/bus-server/server-lifecycle.d.mts +1 -1
- package/dist/node/transports/index.d.mts +102 -4
- package/dist/node/transports/index.mjs +2 -2
- package/dist/{orchestrator-shared-CtPB6PAr.mjs → orchestrator-shared-CF-jPH91.mjs} +1 -1
- package/dist/ownership-memory-handler-C-y9zQf8.mjs +1 -0
- package/dist/package-AlsbnlSt.mjs +159 -0
- package/dist/{package-CDj3F-L3.d.mts → package-CwyC-Krg.d.mts} +1 -1
- package/dist/{package-DYScYC0D.mjs → package-kkPGlxMm.mjs} +1 -1
- package/dist/package.json +1 -1
- package/dist/{registry-DNMjJ-Oj.mjs → registry-DtaRGU8i.mjs} +1 -0
- package/dist/rules/index.d.mts +1 -1
- package/dist/rules/index.mjs +1 -1
- package/dist/rules/schemas.d.mts +1 -1
- package/dist/runtime-bun/index.d.mts +2 -2
- package/dist/runtime-bun/index.mjs +1 -1
- package/dist/runtime-node/boot-config.d.mts +45 -0
- package/dist/runtime-node/boot-config.mjs +1 -0
- package/dist/runtime-node/code-execution/index.d.mts +2 -2
- package/dist/runtime-node/code-execution/index.mjs +1 -1
- package/dist/runtime-node/extension-discovery.d.mts +2 -2
- package/dist/runtime-node/extension-discovery.mjs +1 -1
- package/dist/runtime-node/extension-validation.d.mts +1 -1
- package/dist/runtime-node/extension-validation.mjs +1 -1
- package/dist/runtime-node/index.d.mts +345 -27
- package/dist/runtime-node/index.mjs +21 -24
- package/dist/runtime-node/makaio-config.d.mts +1 -1
- package/dist/runtime-node/makaio-config.mjs +1 -1
- package/dist/runtime-node/workflow-worker/index.d.mts +1 -1
- package/dist/runtime-node/workflow-worker/index.mjs +1 -1
- package/dist/runtime-node/workflow-worker/worker-entry.mjs +1 -1
- package/dist/{schema-BA1cHBbc.d.mts → schema-FY0EakKe.d.mts} +56 -0
- package/dist/schemas-CkxAK13D.mjs +1 -0
- package/dist/{schemas-CaYEFzK_.d.mts → schemas-FgVQek-j.d.mts} +2 -2
- 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 +3 -3
- package/dist/services/adapter-subsystem/namespace.d.mts +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/automation-trigger/index.d.mts +19 -0
- package/dist/services/capability/index.d.mts +2 -2
- package/dist/services/code-execution/index.d.mts +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-projection/index.d.mts +94 -0
- package/dist/services/context-projection/index.mjs +1 -0
- package/dist/services/context-rules/index.d.mts +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/index.d.mts +45 -40
- 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/materialization/index.d.mts +1 -1
- package/dist/services/model-registry/index.d.mts +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/session/handlers/index.d.mts +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/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/storage/namespace.d.mts +1 -1
- package/dist/services/session/storage/schema.d.mts +1 -1
- package/dist/services/session/storage/schema.mjs +1 -1
- package/dist/services/session/testing/index.mjs +4 -2
- 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-editor/index.d.mts +1 -1
- package/dist/services/settings/index.d.mts +3 -3
- package/dist/services/settings/namespace.d.mts +232 -3
- package/dist/services/settings/namespace.mjs +1 -1
- package/dist/services/settings/storage/clients-namespace.d.mts +1 -1
- package/dist/services/settings/storage/index.d.mts +3 -3
- package/dist/services/settings/storage/providers-namespace.d.mts +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/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/workflow-transitions/index.d.mts +1 -1
- package/dist/services/workflow-transitions/index.mjs +1 -1
- package/dist/session-BNiMZnfF.mjs +1 -0
- package/dist/session-CMbztxNO.mjs +95 -0
- package/dist/src-BZdw54VU.mjs +1 -0
- package/dist/{src-CbAw9kjJ.mjs → src-C0sw_Vs_.mjs} +1 -1
- package/dist/{src-Xn6SS74f.mjs → src-CqQSqLQI.mjs} +1 -1
- package/dist/storage/drizzle/client.d.mts +1 -1
- package/dist/storage/drizzle/client.mjs +1 -1
- package/dist/storage/drizzle/index.d.mts +1 -1
- package/dist/storage/drizzle/index.mjs +1 -1
- package/dist/storage/handlers/drizzle/index.d.mts +1 -1
- package/dist/storage/handlers/index.d.mts +1 -1
- package/dist/{tool-approval-service-pbkGcAV8.mjs → tool-approval-service-CRo3fZRF.mjs} +1 -1
- package/dist/{tools-C5Gy0IQG.mjs → tools-CKaxi3Mb.mjs} +1 -1
- package/dist/{transition-D-Lgbp1j.d.mts → transition-DMv8cgEd.d.mts} +2 -2
- package/dist/{types-CjYcHDPo2.d.mts → types-7L3BrU9m2.d.mts} +1 -1
- package/dist/{types-DhbllltK.d.mts → types-DNYO_Rxj.d.mts} +12 -3
- package/dist/ui-hooks/index.d.mts +17 -24
- package/dist/ui-hooks/index.mjs +1 -1
- package/dist/ui-kernel/index.d.mts +11 -2
- package/dist/ui-kernel/index.mjs +1 -1
- package/dist/ui-kernel/pages/schemas.d.mts +1 -1
- package/dist/ui-views/index.mjs +1 -1
- package/dist/utils/index.d.mts +31 -1
- package/dist/utils/index.mjs +2 -2
- package/dist/{view-builder-CHUTXJDl.d.mts → view-builder-DJGz9I-u.d.mts} +2 -2
- package/dist/workflow-engine/execution-attempt-repository.d.mts +1 -1
- package/dist/workflow-engine/execution-attempt-repository.mjs +1 -1
- package/dist/workflow-engine/index.d.mts +2 -2
- package/dist/workflow-engine/index.mjs +1 -1
- package/dist/workflow-engine/package.d.mts +1 -1
- package/dist/workflow-engine/package.mjs +1 -1
- package/dist/workflow-engine/provider-operation.d.mts +1 -1
- package/dist/workflow-engine/testing/conformance.d.mts +1 -1
- package/dist/workflow-engine/testing/conformance.mjs +1 -1
- package/dist/workflow-engine/testing/index.d.mts +1 -1
- package/dist/workflow-engine/testing/index.mjs +1 -1
- package/dist/workflow-engine/testing/sqlite.d.mts +1 -1
- package/dist/workflow-engine/testing/sqlite.mjs +1 -1
- package/dist/workflow-engine/workflow-orchestrator.mjs +1 -1
- package/dist/{workflow-transitions-C0sg3kar.mjs → workflow-transitions-t0ORS1F5.mjs} +1 -1
- package/dist/workflow-worker-DXCXb3g-.mjs +3 -0
- package/package.json +9 -1
- package/dist/bus-BQ64i3DN.mjs +0 -9
- package/dist/client-Bg3_IdaF.mjs +0 -1
- package/dist/extension-CfrTp3rC.mjs +0 -1
- package/dist/extension-CnNcY1hR.mjs +0 -1
- package/dist/extension-namespace-Ct9L6SKr.mjs +0 -1
- package/dist/index-D_j_T3nS.d.mts +0 -435
- package/dist/load-extensions-BVgxTj_y.mjs +0 -1
- package/dist/ownership-memory-handler-xex7sLiX.mjs +0 -1
- package/dist/schemas-ClkcU_N5.mjs +0 -1
- package/dist/session-6UG5udTX.mjs +0 -95
- package/dist/session-BB0s7c2B.mjs +0 -1
- package/dist/workflow-worker-ChrMIcKm.mjs +0 -2
- /package/dist/{adapter-binding-BxjUfkOn.d.mts → adapter-binding-CaYBrIkL.d.mts} +0 -0
- /package/dist/{attempt-control-evidence-7lwRG73Y.mjs → attempt-control-evidence-CHBnJoqN.mjs} +0 -0
- /package/dist/{attempt-fixtures-DHdYmr3o.mjs → attempt-fixtures-D3IsP0KH.mjs} +0 -0
- /package/dist/{authority-state-bootstrap-CvuWPywM.mjs → authority-state-bootstrap-4F5Wc_6l.mjs} +0 -0
- /package/dist/{base-orchestrator-CrXiMJzf.d.mts → base-orchestrator-1ofFsqUz.d.mts} +0 -0
- /package/dist/{bootstrap-start-client-C1ZHbv6e.mjs → bootstrap-start-client-9nOdeDYl.mjs} +0 -0
- /package/dist/{capability-service-CQ1aw_p-.d.mts → capability-service-CUN0MIS7.d.mts} +0 -0
- /package/dist/{client-ByjHcS78.d.mts → client-BY3sBW2L.d.mts} +0 -0
- /package/dist/{client-binary-version-verifier-C4fEAUdo.d.mts → client-binary-version-verifier-BeO4Eptw.d.mts} +0 -0
- /package/dist/{clients-namespace-D4BxF2Nw.d.mts → clients-namespace-D92YsbKI.d.mts} +0 -0
- /package/dist/{config-namespace-B1zyOYwH.d.mts → config-namespace-OEckUfVE.d.mts} +0 -0
- /package/dist/{create-static-mount-Dgxgi4W3.mjs → create-static-mount-4B-mNtx1.mjs} +0 -0
- /package/dist/{cross-spawn-BMCAyqrN.mjs → cross-spawn-DGqEuNyT.mjs} +0 -0
- /package/dist/{definition-ClWxAKQ2.d.mts → definition-DLJg-P4G.d.mts} +0 -0
- /package/dist/{esm-Ccx-3z8E.mjs → esm-DwiWcwH0.mjs} +0 -0
- /package/dist/{execution-attempt-repository-aabFKcXN.mjs → execution-attempt-repository-CY289HlC.mjs} +0 -0
- /package/dist/{execution-attempt-repository-BUah8hma.d.mts → execution-attempt-repository-DOb5V4N2.d.mts} +0 -0
- /package/dist/{extension-package-provenance-C7oO5JAE.mjs → extension-package-provenance-ClpN3GHp.mjs} +0 -0
- /package/dist/{filesystem-service-CDYoiwWY.d.mts → filesystem-service-BmavE-uO.d.mts} +0 -0
- /package/dist/{index-BbkcbY6d.d.mts → index--gbsE1W0.d.mts} +0 -0
- /package/dist/{index-DdVpWkaI.d.mts → index-B36rL4gp.d.mts} +0 -0
- /package/dist/{index-DM72_93s.d.mts → index-BD1SbHpP.d.mts} +0 -0
- /package/dist/{index-KdlZRuTp.d.mts → index-BDcK7jqJ2.d.mts} +0 -0
- /package/dist/{index-DAaQ--ki.d.mts → index-BQYGOXY5.d.mts} +0 -0
- /package/dist/{index-gAyARaKS.d.mts → index-BneZFJ7x.d.mts} +0 -0
- /package/dist/{index-D8ELwT5y.d.mts → index-BujgCaKt.d.mts} +0 -0
- /package/dist/{index-DfU8s_xP.d.mts → index-C2StVLk4.d.mts} +0 -0
- /package/dist/{index-BGnQ0EyD.d.mts → index-CCTzitBA.d.mts} +0 -0
- /package/dist/{index-CVRT01082.d.mts → index-Cj_V1aRL.d.mts} +0 -0
- /package/dist/{index-nkix3hP7.d.mts → index-CpN2C9jq.d.mts} +0 -0
- /package/dist/{index-D6p17KPs.d.mts → index-CsRPJ9FV.d.mts} +0 -0
- /package/dist/{index-BPNfYEA22.d.mts → index-CvdvuhTL2.d.mts} +0 -0
- /package/dist/{index-DmX9W3xH2.d.mts → index-D3peNmHN2.d.mts} +0 -0
- /package/dist/{index-DiZ4LmyE.d.mts → index-D7smT-YD.d.mts} +0 -0
- /package/dist/{index-B78CRVi9.d.mts → index-DEx4ZFkz.d.mts} +0 -0
- /package/dist/{index-CjDQn6lw.d.mts → index-DGoJayJg.d.mts} +0 -0
- /package/dist/{index-F7cVpFJ9.d.mts → index-DTvYp2GT.d.mts} +0 -0
- /package/dist/{index-Htfr-K5U2.d.mts → index-DqliLe_D2.d.mts} +0 -0
- /package/dist/{index-BCU5oByg.d.mts → index-DubyRZD9.d.mts} +0 -0
- /package/dist/{index-DjSUOMlr.d.mts → index-DwOpaQAE.d.mts} +0 -0
- /package/dist/{index-BZoOYV-y.d.mts → index-DxkSkszz.d.mts} +0 -0
- /package/dist/{index-tbjIqwa3.d.mts → index-TBJ1kIGA.d.mts} +0 -0
- /package/dist/{index-DXQTkwLB.d.mts → index-YOXWpZAS.d.mts} +0 -0
- /package/dist/{index-CXpgL3gz2.d.mts → index-aIJ7A4DC2.d.mts} +0 -0
- /package/dist/{index-D6liU_KS.d.mts → index-fxh7TB0q.d.mts} +0 -0
- /package/dist/{index-xsaaa85T.d.mts → index-qczb9Yx3.d.mts} +0 -0
- /package/dist/{index-C_kOkO3E.d.mts → index-zqo2mX_Z.d.mts} +0 -0
- /package/dist/{json-value-Ymw2f8i_.d.mts → json-value-Bjl8jzom.d.mts} +0 -0
- /package/dist/{jsonl-transport-Bg033Ng0.mjs → jsonl-transport-Ct1RWs0h.mjs} +0 -0
- /package/dist/{lib-BizqbepU.mjs → lib-DomKag_k.mjs} +0 -0
- /package/dist/{namespace-rJ3ycPMg.d.mts → namespace-Bhx72V7S.d.mts} +0 -0
- /package/dist/{namespace-BCVKdu-U.d.mts → namespace-CxEQv9iZ.d.mts} +0 -0
- /package/dist/{namespace-COHHDh2I.d.mts → namespace-D09uQ231.d.mts} +0 -0
- /package/dist/{namespace-UFcDEBJB.d.mts → namespace-D5DkpaaN.d.mts} +0 -0
- /package/dist/{namespace-CvK86QFk.d.mts → namespace-DHLwz4o3.d.mts} +0 -0
- /package/dist/{namespace-B5IFLQc-.d.mts → namespace-DHbrNQYD.d.mts} +0 -0
- /package/dist/{namespace-s0e215xO.d.mts → namespace-DyD06b5-.d.mts} +0 -0
- /package/dist/{namespace-C1pPZKtI.d.mts → namespace-Dz5_Hrz7.d.mts} +0 -0
- /package/dist/{namespace-Phxf0Lep.d.mts → namespace-Lkv2nyzb.d.mts} +0 -0
- /package/dist/{namespace-DM5vykb7.d.mts → namespace-hlhPqSsw.d.mts} +0 -0
- /package/dist/{namespace-DlOQmhgX.d.mts → namespace-x-gk5SmK.d.mts} +0 -0
- /package/dist/{namespace-f6Kz5cwX.d.mts → namespace-zusFEJPh.d.mts} +0 -0
- /package/dist/{orchestrator-shared--srEeSaY.d.mts → orchestrator-shared-ChU5qRSe.d.mts} +0 -0
- /package/dist/{packages-B98-WETs.d.mts → packages-D2s51nGU.d.mts} +0 -0
- /package/dist/{providers-namespace-DRcl03bo.d.mts → providers-namespace-BLVt8OyP.d.mts} +0 -0
- /package/dist/{runtime-inputs-DBtVIy9h.d.mts → runtime-inputs-BU_kBrP7.d.mts} +0 -0
- /package/dist/{schemas-CEJe8O6P.d.mts → schemas-3KTmPuZg.d.mts} +0 -0
- /package/dist/{schemas-D_-iXLQ9.d.mts → schemas-B-5_Dp4_.d.mts} +0 -0
- /package/dist/{schemas-CeItAAQM.d.mts → schemas-BLxdGZkr.d.mts} +0 -0
- /package/dist/{schemas-Cj6Gbqch.d.mts → schemas-BegArpU_.d.mts} +0 -0
- /package/dist/{schemas-Ca5RILd-2.d.mts → schemas-BzB6z9oX2.d.mts} +0 -0
- /package/dist/{schemas-CtzZDp29.d.mts → schemas-CBBzvIh0.d.mts} +0 -0
- /package/dist/{schemas-Cq1d5tid.d.mts → schemas-CD3Mq-jC.d.mts} +0 -0
- /package/dist/{schemas-LiiyNNpr.d.mts → schemas-Cl7fPlRv.d.mts} +0 -0
- /package/dist/{schemas-DJ2vMsgm.d.mts → schemas-CqawCYTY.d.mts} +0 -0
- /package/dist/{schemas-2_D4iVbb.d.mts → schemas-DEg6R9ph.d.mts} +0 -0
- /package/dist/{schemas-JjyFxrC0.d.mts → schemas-rMUsvzeJ.d.mts} +0 -0
- /package/dist/{server-lifecycle-DUKp1Fbf.d.mts → server-lifecycle-CTJvpdeL.d.mts} +0 -0
- /package/dist/{session-lineage-C3myyt5x.d.mts → session-lineage-BuGN3RZs.d.mts} +0 -0
- /package/dist/{storage-namespace-IvLOIP7j.d.mts → storage-namespace-B5r_ScUz.d.mts} +0 -0
- /package/dist/{storage-namespace-definition-Cv0XiTXb.d.mts → storage-namespace-definition-DiYr8UNl.d.mts} +0 -0
- /package/dist/{types-hkExapGH.d.mts → types-BSx8YYlc.d.mts} +0 -0
- /package/dist/{types-BYEybzjX.d.mts → types-CpEoQapk.d.mts} +0 -0
- /package/dist/{types-QRSc2AUU.d.mts → types-Cuhnt15L.d.mts} +0 -0
- /package/dist/{types-QsyX4H21.d.mts → types-DEGuc-fn.d.mts} +0 -0
- /package/dist/{types-BRM1AZaP.d.mts → types-DciLiPMd.d.mts} +0 -0
- /package/dist/{types-CsmvIK25.mjs → types-wwuw7RkB.mjs} +0 -0
- /package/dist/{window-registry-DeG37kt8.d.mts → window-registry-C3W2wtlX.d.mts} +0 -0
package/dist/client-Bg3_IdaF.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,s as t}from"./definitions-Do7bP-u7.mjs";import{t as n}from"./schemas-BmoFWBdh.mjs";import{_ as r,a as i,g as a,h as o,m as s,n as ee,o as te}from"./profile-1fvMljlJ.mjs";import{n as ne,t as c}from"./version-PuU2KG3I.mjs";import{c as re,d as ie,n as ae,o as oe,s as se,t as l,u as ce}from"./account-identity-C-v4mHq3.mjs";import{z as u}from"zod";import{createBusNamespace as le,observability as d}from"@makaio/framework/core";const f=u.object({tag:u.string(),description:u.string().optional()}),p=u.object({name:u.string(),friendlyName:u.string(),description:u.string().optional(),category:u.string().optional(),capabilities:u.array(f).default([])}),m=u.object({id:u.string(),name:u.string(),description:u.string().optional(),glob:u.string().optional()}),h=u.object({name:u.string().min(1),frameworkSubject:u.string().min(1).optional(),responseCapabilities:u.array(u.string().min(1)).readonly().default([])}).strict();function ue(e){return e.responseCapabilities.length>0?`request`:`event`}const de=u.object({envVar:a.regex(/^[A-Za-z_][A-Za-z0-9_]*$/,{message:`envVar must be a valid environment variable name (letters, digits, underscores)`}),defaultPath:a.refine(e=>e===`~`||e.startsWith(`~/`)||r(e),{message:`defaultPath must be absolute, '~', or start with '~/'`}),pathKind:u.enum([`directory`,`file`]).default(`directory`)});function fe(e){if(!e.startsWith(`@`))return!e.includes(`@`);let t=e.indexOf(`/`);return t>1&&!e.slice(t+1).includes(`@`)}const g=u.object({type:u.literal(`npm`),package:u.string().min(1).refine(fe,{message:"package must not include an inline `@version` suffix; use the version field instead"}),version:c}),_=u.object({type:u.literal(`signed-binary-bucket`),version:c,config:u.object({baseUrl:u.string().url(),manifestPathTemplate:u.string().min(1),manifestSignaturePathTemplate:u.string().min(1),publicKeyUrl:u.string().url(),publicKeyFingerprint:u.string().min(1),binaryPathTemplate:u.string().min(1),platforms:u.record(u.string().min(1),u.string().min(1))})}),v=u.discriminatedUnion(`type`,[g,_]),y=u.object({executable:u.union([u.string().min(1),u.object({default:u.string().min(1),darwin:u.string().min(1).optional(),linux:u.string().min(1).optional(),win32:u.string().min(1).optional()}).strict()]),args:u.array(u.string()).default([])}).strict(),b=u.object({kind:u.string().min(1),payload:u.record(u.string(),u.unknown()).optional()}),x=u.object({supportsHooks:u.boolean().default(!1),supportsStatusline:u.boolean().default(!1),supportsSupervisorLaunch:u.boolean().default(!1),supportsManagedBinary:u.boolean().default(!1),hookEvents:u.array(h).default([])}).refine(e=>e.supportsHooks||e.hookEvents.length===0,{message:`hookEvents must be empty when supportsHooks is false`,path:[`hookEvents`]}),S=u.object({name:u.string().min(1),supportedVersions:ne}).strict(),C=u.object({id:u.string(),name:u.string(),version:c,description:u.string().optional(),binary:S.optional(),nativeTools:u.array(p).default([]),defaultApprovalPolicy:n,logSources:u.array(m).optional(),authMethods:e,defaultAuth:t.optional(),runtimeCapabilities:x.optional().transform(e=>x.parse(e??{})),managedInstall:v.optional(),versionCommand:y.optional(),postInstall:b.optional(),configIsolation:de.optional()}).strict().refine(e=>!e.runtimeCapabilities.supportsManagedBinary||e.managedInstall!==void 0,{message:`managedInstall is required when runtimeCapabilities.supportsManagedBinary is true`,path:[`managedInstall`]}).refine(e=>e.managedInstall===void 0||e.runtimeCapabilities.supportsManagedBinary,{message:`runtimeCapabilities.supportsManagedBinary must be true when managedInstall is provided`,path:[`runtimeCapabilities`,`supportsManagedBinary`]}).refine(e=>e.managedInstall===void 0||e.versionCommand!==void 0,{message:`versionCommand is required when managedInstall is provided`,path:[`versionCommand`]}).superRefine((e,t)=>{e.defaultAuth!==void 0&&e.authMethods.find(({id:t})=>t===e.defaultAuth?.methodId)?.mode!==`inferred`&&t.addIssue({code:u.ZodIssueCode.custom,message:`defaultAuth.methodId must reference an inferred method declared by this client.`,path:[`defaultAuth`,`methodId`]})}).superRefine((e,t)=>{if(e.managedInstall===void 0||e.versionCommand===void 0)return;let{executable:n}=e.versionCommand,r=typeof n==`string`?[{path:n,issuePath:[`versionCommand`,`executable`]}]:[{path:n.default,issuePath:[`versionCommand`,`executable`,`default`]},...n.darwin===void 0?[]:[{path:n.darwin,issuePath:[`versionCommand`,`executable`,`darwin`]}],...n.linux===void 0?[]:[{path:n.linux,issuePath:[`versionCommand`,`executable`,`linux`]}],...n.win32===void 0?[]:[{path:n.win32,issuePath:[`versionCommand`,`executable`,`win32`]}]];for(let{path:e,issuePath:n}of r){let r=e.startsWith(`/`),i=/^[A-Za-z]:/.test(e),a=e.startsWith(`\\`);if(r||i||a){t.addIssue({code:u.ZodIssueCode.custom,path:n,message:`${n.join(`.`)} must be a relative path within the install directory`});continue}e.split(/[/\\]/).some(e=>e===`..`)&&t.addIssue({code:u.ZodIssueCode.custom,path:n,message:`${n.join(`.`)} must be a relative path within the install directory`})}}),w=u.object({binaryPath:s.nullable(),env:u.record(u.string(),u.string()),configDir:s.nullable(),source:u.enum([`managed`,`global`]),version:a.nullable()}),T={request:u.object({clientId:a,sessionId:a.optional(),projectDir:s.optional(),preferSource:u.enum([`managed`,`global`]).optional(),harnessId:a.optional()}),response:w},E=u.enum([`npm`,`signed-binary-bucket`]),D=u.object({version:a,installPath:s,installedAt:o,isActive:u.boolean()}),O=u.object({clientId:a,installedVersions:u.array(D),activeVersion:a.nullable(),pinnedVersion:c,updateAvailable:u.boolean()}).strict(),k={request:u.object({forceRefresh:u.boolean().optional()}),response:u.object({clients:u.array(O)})},A={request:u.object({clientId:a,version:c.optional()}),response:u.object({jobId:a,requestedVersion:c.nullable(),resolvedVersion:c.nullable()})},j={request:u.object({clientId:a,version:a}),response:u.object({clientId:a,removedVersion:a,activeVersion:a.nullable()})},M={request:u.object({clientId:a}),response:u.object({jobId:a,resolvedVersion:c.nullable()})},N={request:u.object({clientId:a,version:a}),response:u.object({clientId:a,activeVersion:a})},P=u.enum([`resolving`,`downloading`,`verifying`,`extracting`,`installing`,`post-install`,`activating`]),F=u.object({jobId:a,clientId:a,version:a.optional(),strategy:E,stage:P,progress:u.number().min(0).max(100).nullable(),installPath:s.optional(),activeAfterCompletion:u.boolean().optional(),metadata:u.record(u.string(),u.unknown()).optional()}),I=u.object({message:u.string(),code:u.string().optional()}),L=u.object({jobId:a,clientId:a,version:a.optional(),strategy:E,status:u.enum([`success`,`error`]),installPath:s.optional(),activeVersion:a.nullable(),error:I.optional(),metadata:u.record(u.string(),u.unknown()).optional()}),R=u.object({clientId:a,previousActiveVersion:a.nullable(),activeVersion:a.nullable(),reason:u.enum([`install`,`update`,`set-active`,`uninstall`])}),pe=u.enum([`supervisor`,`adapter`,`client-hook`,`statusline`,`cli-wrapper`]),z=u.object({layer:pe,producer:a}),B=u.object({supervisorSessionId:a.optional(),pid:u.number().int().positive().optional(),parentPid:u.number().int().positive().optional(),adapterSessionId:a.optional(),sessionId:a.optional(),cwd:u.string().optional(),argv:u.array(u.string()).optional(),metadata:u.record(u.string(),u.unknown()).optional()}),V={request:u.object({clientId:a,source:z,observedAt:o}).merge(B).refine(e=>e.supervisorSessionId!==void 0||e.pid!==void 0||e.adapterSessionId!==void 0,{message:`At least one hard-evidence field is required (supervisorSessionId, pid, or adapterSessionId)`}),response:u.object({clientRuntimeId:a,created:u.boolean(),promoted:u.boolean()})},H=B.extend({clientRuntimeId:a,clientId:a,status:u.enum([`observed`,`started`]),source:z,observedAt:o}),U={request:u.object({adapterSessionId:a,clientId:a}),response:u.object({managed:u.boolean()})},W=u.object({clientId:d.attribute(a,`makaio.client.id`),source:d.attribute(a,`makaio.client.lifecycle.source`),observedAt:d.attribute(o,`event.observed_at`),sessionId:d.attribute(u.string(),`makaio.session.id`).optional(),adapterSessionId:d.attribute(u.string(),`makaio.adapter.session_id`).optional(),metadata:u.record(u.string(),u.unknown()).optional()}),G=[`fresh`,`fork`,`resume`,`clear`,`compact`],K=u.enum(G),q=W.extend({transcriptPath:u.string().optional(),cwd:u.string().optional(),machineId:d.attribute(u.string(),`makaio.machine.id`).optional(),startMode:d.attribute(K,`makaio.session.start_mode`).optional(),parentAdapterSessionId:d.attribute(u.string(),`makaio.session.parent_adapter_session_id`).optional()}),J=W.extend({prompt:a.optional()}),Y=W.extend({}),me=W.extend({transcriptPath:u.string().optional()}),X=W.extend({toolName:d.attribute(a,`tool.name`).optional(),toolCallId:d.attribute(a,`tool.call_id`).optional()}),he=W.extend({toolName:d.attribute(a,`tool.name`).optional(),toolCallId:d.attribute(a,`tool.call_id`).optional(),success:d.attribute(u.boolean(),`tool.success`).optional()}),ge=[`manual`,`auto`],_e=u.enum(ge),ve=W.extend({trigger:d.attribute(_e,`makaio.session.compaction_trigger`).optional(),transcriptPath:u.string().optional()}),Z=W.extend({agentId:d.attribute(a,`makaio.client.agent_id`),agentType:d.attribute(a,`makaio.client.agent_type`).optional(),turnId:d.attribute(a,`makaio.client.turn_id`).optional()}),ye=Z.extend({agentTranscriptPath:u.string().optional()}),be=u.object({group:a,name:a,installed:u.boolean(),command:a}),xe=u.enum([`provider-reported`,`client-reported`,`estimated`]),Q=u.number().finite().nonnegative(),Se=u.number().finite().min(0).max(100),Ce=u.object({clientId:d.attribute(a,`makaio.client.id`),clientAccountId:d.attribute(a,`makaio.client.account_id`).optional(),sessionId:d.attribute(a,`makaio.session.id`).optional(),adapterSessionId:d.attribute(a,`makaio.adapter.session_id`).optional(),source:d.attribute(a,`makaio.client.usage.source`),observedAt:d.attribute(o,`event.observed_at`),clientVersion:d.attribute(a,`makaio.client.version`).optional(),modelId:d.attribute(a,`llm.model`).optional(),modelDisplayName:d.attribute(a,`llm.model.display_name`).optional(),modelFamily:d.attribute(a,`llm.model.family`).optional(),latestRequestInputTokens:d.attribute(Q,`llm.tokens.latest_request.input`).optional(),latestRequestOutputTokens:d.attribute(Q,`llm.tokens.latest_request.output`).optional(),latestRequestCacheReadTokens:d.attribute(Q,`llm.tokens.latest_request.cache_read`).optional(),latestRequestCacheWriteTokens:d.attribute(Q,`llm.tokens.latest_request.cache_write`).optional(),currentContextInputTokens:d.attribute(Q,`llm.context.tokens.input`).optional(),currentContextOutputTokens:d.attribute(Q,`llm.context.tokens.output`).optional(),contextWindowSizeTokens:d.attribute(Q,`llm.context.window_size`).optional(),contextUsedPercentage:d.attribute(Se,`llm.context.used_percentage`).optional(),contextRemainingPercentage:d.attribute(Se,`llm.context.remaining_percentage`).optional(),contextThresholdExceeded:d.attribute(u.boolean(),`llm.context.threshold_exceeded`).optional(),totalCost:d.attribute(Q,`llm.cost.total`).optional(),costCurrency:d.attribute(a,`llm.cost.currency`).optional(),costProvenance:d.attribute(xe,`llm.cost.provenance`).optional(),totalDurationMs:d.attribute(Q,`makaio.session.duration_ms`).optional(),totalApiDurationMs:d.attribute(Q,`llm.duration.total_api_ms`).optional(),totalLinesAdded:d.attribute(Q,`code.lines_added`).optional(),totalLinesRemoved:d.attribute(Q,`code.lines_removed`).optional(),totalEdits:d.attribute(Q,`code.edits`).optional()}).strict().superRefine((e,t)=>{let n=[`totalCost`,`costCurrency`,`costProvenance`],r=n.filter(t=>e[t]!==void 0).length;if(!(r===0||r===n.length))for(let r of n)e[r]===void 0&&t.addIssue({code:u.ZodIssueCode.custom,path:[r],message:`totalCost, costCurrency, and costProvenance must be supplied together`})}),we={"runtime.observe":V,"runtime.started":H,"runtime.isAdapterManaged":U,scan:{request:u.object({targets:u.array(se).optional()}),response:u.object({results:u.array(oe)})},"session.account.observe":re,"account.observe":ae,"account.activate":{request:u.object({clientId:a,clientAccountId:a,identifiers:u.array(l).min(1),displayLabel:u.string().optional()}),response:u.object({accepted:u.boolean()})},"account.getActive":{request:u.object({clientId:a}),response:u.object({identity:u.object({clientAccountId:a,identifiers:u.array(l).min(1),displayLabel:u.string().optional()}).nullable()})},"usage.ingest":ce,"usage.snapshot":ie,"session.usage.snapshot":Ce,"session.started":q,"session.userPrompt.submitted":J,"session.turn.started":Y,"session.turn.completed":me,"session.tool.pre":X,"session.tool.post":he,"session.compaction.pre":ve,"session.subagent.started":Z,"session.subagent.completed":ye,"wiring.list":{request:u.object({clientId:a.optional(),projectDir:s.optional(),makaioCommand:a}),response:u.object({results:u.array(u.object({clientId:a,entries:u.array(be)}))})},list:k,install:A,uninstall:j,update:M,setActive:N,"installJob.progress":F,"installJob.completed":L,"version.changed":R,resolveBinary:T,...i,...te,"config.prime":ee},Te=le(`client`,we),Ee=Te.subjects;function $(e){if(Array.isArray(e)){for(let t of e)$(t);return Object.freeze(e)}if(e&&typeof e==`object`){for(let t of Object.values(e))$(t);return Object.freeze(e)}return e}function De(e){return $(C.parse(e))}function Oe(e){return Object.freeze({kind:`context.append`,value:e})}const ke=`open`;function Ae(e){return typeof e==`string`&&e.trim().length>0}function je(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function Me(e,t){let n=[];for(let r of e){let e=r.kind===`event-name`?r.name:r.capability;if(!t.supportedInteractions.includes(e)){n.push(`Interaction '${e}' is not a supported interaction in contract '${t.contractId}'; failurePolicy 'closed' is not permitted`);continue}let i=t.blockability.find(t=>t.interaction===e);(!i||!i.blockable)&&n.push(`Interaction '${e}' is not blockable in contract '${t.contractId}'; failurePolicy 'closed' is not permitted`)}return n}export{p as $,pe as A,M as B,me as C,B as D,be as E,F,E as G,I as H,A as I,S as J,w as K,k as L,H as M,O as N,U as O,L as P,f as Q,N as R,X as S,J as T,P as U,R as V,D as W,h as X,C as Y,x as Z,K as _,Me as a,_ as at,Z as b,Ee as c,Ce as d,de as et,ge as f,W as g,_e as h,je as i,b as it,z as j,V as k,we as l,ve as m,Oe as n,v as nt,De as o,y as ot,G as p,T as q,Ae as r,g as rt,Te as s,ue as st,ke as t,m as tt,xe as u,q as v,Y as w,he as x,ye as y,j as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as e}from"./kind-registration-Dzfo6kyb.mjs";import{n as t}from"./definition-Dd7bDWpP.mjs";import{n,t as r}from"./version-PuU2KG3I.mjs";import{z as i}from"zod";const a=i.object({entrypoint:i.string().startsWith(`/`,{message:`Entrypoint must be a URL path starting with "/"`})}),o=i.object({endpoint:i.string().url().optional()}),s=i.union([t,i.object({anthropic:o.optional(),openai:o.optional()}).refine(e=>Object.keys(e).length>0,{message:`ProtocolRef config object must specify at least one protocol`})]),c=i.object({id:i.string().min(1),version:n,binaryVersion:n.optional()}),l=i.object({name:i.string().min(1),displayName:i.string().min(1).optional(),description:i.string().optional(),clients:i.array(c).readonly().optional(),protocols:i.array(s).readonly(),defaultProvider:i.string().min(1).optional()}),u=i.object({id:i.string().min(1),name:i.string().min(1),description:i.string().optional(),binary:i.object({name:i.string().min(1),managed:i.boolean().optional(),version:r.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(),d=i.object({id:i.string().min(1),name:i.string().min(1),description:i.string().optional()}),f=i.object({prefix:i.string().min(1),description:i.string().optional(),stage:i.enum([`gather`,`transform`,`action`]).optional()}),p=i.object({adapterName:i.string().min(1),displayName:i.string().min(1),logFilePattern:i.string().min(1).optional()}),m=i.object({id:i.string().min(1),label:i.string().min(1),description:i.string().optional(),icon:i.string().min(1).optional(),selectionMode:i.enum([`single`,`multi`]),messageRoles:i.array(i.enum([`user`,`assistant`])).readonly().optional()}),h=i.enum([`beforeCreate`,`beforeRevise`,`afterCreate`,`afterRevise`,`afterStatusChanged`,`afterObservationAdded`]),g=i.object({id:i.string().min(1),event:h,kind:i.string().min(1).optional(),schemaVersion:e.optional()}),_=i.object({tiles:i.boolean().optional(),widgets:i.boolean().optional(),pages:i.boolean().optional(),routes:i.boolean().optional()}),v={adapters:`adapter`,clients:`client`,providers:`provider`,hashTriggers:`hash trigger`,logImporters:`log importer`,sessionEventActions:`session event action`,artifactLifecycleHooks:`artifact lifecycle hook`};function y(e,t,n){e.addIssue({code:i.ZodIssueCode.custom,path:[t],message:`Duplicate ${v[t]} contribution identifier "${n}"`})}function b(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 x=i.object({adapters:i.array(l).readonly().optional(),clients:i.array(u).readonly().optional(),providers:i.array(d).readonly().optional(),hashTriggers:i.array(f).readonly().optional(),logImporters:i.array(p).readonly().optional(),sessionEventActions:i.array(m).readonly().optional(),artifactLifecycleHooks:i.array(g).readonly().optional(),create:i.boolean().optional(),tools:i.boolean().optional(),bootstrap:i.boolean().optional(),namespace:i.boolean().optional(),configSchema:i.boolean().optional(),uiConfig:i.boolean().optional(),ui:_.optional()}).strict().superRefine((e,t)=>{for(let n of b(e.adapters,e=>e.name))y(t,`adapters`,n);for(let n of b(e.clients,e=>e.id))y(t,`clients`,n);for(let n of b(e.providers,e=>e.id))y(t,`providers`,n);for(let n of b(e.hashTriggers,e=>e.prefix))y(t,`hashTriggers`,n);for(let n of b(e.logImporters,e=>e.adapterName))y(t,`logImporters`,n);for(let n of b(e.sessionEventActions,e=>e.id))y(t,`sessionEventActions`,n);for(let n of b(e.artifactLifecycleHooks,e=>e.id))y(t,`artifactLifecycleHooks`,n)}),S=i.string().trim().min(1).transform(e=>e),C=i.object({name:i.string().min(1),required:i.boolean().optional()}),w=i.object({id:i.string(),style:i.enum([`tray-popover`,`utility`,`panel`]),width:i.number().optional(),height:i.number().optional(),singleton:i.boolean().optional(),params:i.array(C).readonly().optional()}).superRefine((e,t)=>{let n=new Set;for(let[r,a]of e.params?.entries()??[]){if(!n.has(a.name)){n.add(a.name);continue}t.addIssue({code:i.ZodIssueCode.custom,message:`Duplicate window param "${a.name}"`,path:[`params`,r,`name`]})}}),T=i.object({label:i.string(),section:i.enum([`utilities`,`tools`,`views`]).optional(),opensWindow:i.string().optional(),action:i.string().optional()}),E=i.object({name:i.string().min(1),description:i.string(),required:i.boolean().optional(),positional:i.boolean().optional(),short:i.string().regex(/^-[A-Za-z0-9]$/,`Expected a short flag like -p`).optional(),type:i.enum([`string`,`boolean`,`number`]).optional()}),D=i.object({name:i.string().min(1),description:i.string(),args:i.array(E).readonly().optional()}),O=i.object({name:i.string().min(1),description:i.string(),subcommands:i.array(D).readonly().optional(),hasInteractive:i.boolean().optional(),canProvideBus:i.boolean().optional()}),k=[`sqlite`,`postgres`];function A(e){if(e!==void 0)return typeof e==`string`?e:e.sqlite??Object.values(e).find(e=>e!==void 0)}function j(e){if(e===void 0)return[];if(typeof e==`string`)return[e];let t=new Set;for(let n of Object.values(e))n!==void 0&&t.add(n);return[...t]}const M=i.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`),N=i.object({migrations:i.union([M,i.object({sqlite:M.optional(),postgres:M.optional()}).strict().refine(e=>Object.values(e).some(e=>e!==void 0),`Per-dialect storage.migrations must declare at least one chain`)]).optional(),migrationSourceId:i.string().min(1).optional()}),P=i.object({type:i.literal(`extension`),name:i.string().min(1),version:n,optional:i.boolean().optional()});function F(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 I=i.discriminatedUnion(`type`,[i.object({type:i.literal(`host`),id:i.string().min(1)}),i.object({type:i.literal(`capability`),id:i.string().min(1),version:n.optional()})]),L=i.object({name:i.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:i.string().min(1),version:r,surface:i.enum([`interactive`,`headless`,`any`]).optional(),dependencies:i.array(P).readonly().optional(),requires:i.array(I).readonly().optional(),provides:i.array(S).readonly().optional(),windows:i.array(w).readonly().optional(),tray:T.optional(),cli:O.optional(),storage:N.optional(),browser:a.optional(),contributions:x.optional()});function R(e){return Object.freeze({name:e})}const z=i.object({command:i.string().min(1),args:i.array(i.string()).optional(),env:i.record(i.string(),i.string()).optional(),healthTimeoutMs:i.number().int().positive().optional(),shutdownTimeoutMs:i.number().int().positive().optional()}),B=i.enum([`none`,`on-crash`,`always`]),V=z.extend({restartPolicy:B.optional()}),H=i.discriminatedUnion(`type`,[V.extend({type:i.literal(`bus-stdio`)}),V.extend({type:i.literal(`bus-websocket`)}),z.extend({type:i.literal(`mcp-stdio`)})]);function U(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 W=i.union([i.literal(!0),i.string().min(1).refine(U,{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`})]),G=i.object({server:W.optional(),browser:W.optional(),cli:W.optional()}).refine(e=>e.server!==void 0||e.browser!==void 0||e.cli!==void 0,{message:`at least one entrypoint must be declared`});function K(e){return e.execution===`detached`}const q=L.extend({version:r,makaio:i.object({framework:n}).strict().readonly(),entrypoints:G.optional(),execution:i.enum([`embedded`,`detached`]).optional(),transport:H.optional(),prebundleDependencies:i.array(i.string().regex(/\S/,`prebundleDependencies entries must not be blank`)).readonly().optional(),config:i.object({defaults:i.record(i.string(),i.unknown()).optional()}).optional()}).superRefine((e,t)=>{e.prebundleDependencies!==void 0&&e.entrypoints?.browser===void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`prebundleDependencies requires a browser entrypoint`,path:[`prebundleDependencies`]}),e.execution===`detached`?(e.transport===void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`detached extensions must declare a 'transport' config`,path:[`transport`]}),e.entrypoints!==void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`detached extensions must not declare entrypoints`,path:[`entrypoints`]})):(e.entrypoints===void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`embedded extensions must declare at least one entrypoint`,path:[`entrypoints`]}),e.transport!==void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`embedded extensions must not declare a transport config`,path:[`transport`]}))});function J(e){return e}function Y(e){return J(q.parse(e))}function X(e){let t=q.safeParse(e);return t.success?{success:!0,data:J(t.data)}:t}const Z=i.discriminatedUnion(`kind`,[i.object({kind:i.literal(`configure-integration`),clientId:i.string().min(1),bundle:i.string().min(1)}),i.object({kind:i.literal(`install-extension`),extensionName:i.string().min(1)}),i.object({kind:i.literal(`open-url`),url:i.string().url()}),i.object({kind:i.literal(`run-command`),command:i.string().min(1)})]),Q=i.enum([`info`,`recommended`,`degraded`]),$=i.object({severity:Q,title:i.string().min(1),message:i.string().min(1),action:Z.optional()});function ee(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 te=i.object({extensionName:i.string().min(1),warnings:i.array($)});function ne(e,t){return e.parse(t??{})}function re(e){return JSON.stringify([e.extensionId,e.type,e.name,e.filename])}export{c as A,d as B,T as C,F as D,j as E,x as F,_ as H,f as I,p as L,h as M,g as N,A as O,u as P,o as R,N as S,C as T,a as U,m as V,D as _,$ as a,I as b,H as c,K as d,Y as f,O as g,E as h,te as i,l as j,S as k,q as l,R as m,ne as n,Q as o,X as p,Z as r,ee as s,re as t,G as u,P as v,w,k as x,L as y,s as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./window-registry-2MZdZPdA.mjs";import{n as t}from"./namespace-BPf6AbBO.mjs";import{n}from"./extension-namespace-Ct9L6SKr.mjs";import{t as r}from"./schema-introspection-_Yw9L_mB.mjs";import{z as i}from"zod";import a from"node:path";import{getErrorString as o}from"@makaio/framework/utils";import{createBusNamespace as s}from"@makaio/framework/core";import{ProviderDefinitionSchema as c,primaryMigrationsPath as l,versionSatisfies as u}from"@makaio/framework/contracts";import{ToastSubjects as d}from"@makaio/framework/contracts/toast";import{ExtensionWarningSchema as f,getExtensionWarningActionLabel as p}from"@makaio/framework/contracts/extension";import{TrayMenuSubjects as m}from"@makaio/framework/services/tray-menu";const h=i.object({name:i.string(),displayName:i.string()}),g=s(`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":h,"service.ready":h.extend({durationMs:i.number().int().nonnegative()}),"service.failed":h.extend({errorMessage:i.string()}),"service.skipped":h.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())})}),_=g.subjects;var v=class extends Error{reason;constructor(e){super(e),this.name=`ServiceSkipError`,this.reason=e}};function y(e){return{name:e.name,displayName:e.displayName}}var b=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(_.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=y(e);this.state.currentService=t.displayName,this.state.currentServiceStartedAt=Date.now(),this.bus.emit(_.service.starting,t).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.starting emit failed for "${t.name}":`,e)})}ready(e){let t=y(e);this.state.completedCount+=1;let n=this.state.currentServiceStartedAt===void 0?0:Math.max(0,Date.now()-this.state.currentServiceStartedAt);this.bus.emit(_.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=y(e);this.state.completedCount+=1,this.state.failedServices.push(n.name),this.bus.emit(_.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=y(e);this.state.completedCount+=1,this.state.skippedServices.push(n.name),this.bus.emit(_.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(_.complete,{totalDurationMs:this.state.totalDurationMs,failedServices:[...this.state.failedServices]}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.complete emit failed:`,e)})}emitProgress(){this.bus.emit(_.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 x(e){return{subject:`wiring.apply`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1,payload:{request:{},response:{}}}}}const S=`action`;function C(e,t){return`${e}:${t}`}function ee(e,t,n){return e.on(d.interacted,r=>{let{toastId:i,actionId:a}=r.payload,o=C(i,a),s=t.get(o);s&&w(e,s,i,n).catch(e=>{console.error(`[ExtensionCoordinator] Warning action dispatch failed for toast "${i}":`,e)})})}async function w(e,t,n,r){switch(t.kind){case`configure-integration`:await ne(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:te(t)}}function te(e){throw Error(`[ExtensionCoordinator] Unsupported warning action: ${JSON.stringify(e)}`)}async function ne(e,t,n,r){let i=x(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 T(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:r(e.schema)}))}))}async function E(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 D(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 O(e){let r=[];return r.push(e.bus.on(n.list,t=>{t.setResult({extensions:e.list()})})),r.push(e.bus.on(n.get,t=>{let n=e.entries.get(t.payload.name);t.setResult({extension:n?D(n):null})})),r.push(e.bus.on(n.setEnabled,async t=>{let n=await e.handleSetEnabled(t.payload.name,t.payload.enabled);t.setResult({success:n})})),r.push(e.bus.on(n.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:c.parse(e)});for(let e of i.pkg.clients??[])r.push({packageName:t,definition:e})}t.setResult({providers:n,clients:r})})),r.push(e.bus.on(t.listContributions,t=>{t.setResult({contributions:T(e.cliContributions)})})),r.push(e.bus.on(t.execute,async t=>{t.setResult(await E(t.payload,e.cliContributions,e.bus))})),r.push(e.bus.on(n.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})})),r}async function re(e){for(let[t,n]of e.entries)n.state===`active`&&await A(e,t,n)}function ie(e){if(e&&k(e))return[{id:S,label:p(e)}]}function k(e){return e.kind===`configure-integration`}function ae(e,t){let n=`${t}:`;for(let t of e.keys())t.startsWith(n)&&e.delete(t)}async function A(e,t,n){ae(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=ie(a.action);try{await e.bus.emit(d.show,{level:`warning`,title:a.title,message:`${n.pkg.displayName}: ${a.message}`,toastId:o,durationMs:null,...s&&{actions:s}}),a.action&&k(a.action)&&e.warningActionMap.set(C(o,S),a.action)}catch(e){console.warn(`[${t}] toast emission failed for warning "${a.title}":`,e)}}}function oe(e){return Object.freeze({extensionName:e})}function se(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 j(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 se(t,n.pkg.configSchema,n.configDefaults,r)}function M(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 N(e){return{adapters:!!e.adapters?.length,tools:!!e.tools,hashTriggers:!!e.hashTriggers,providers:!!e.providers?.length,clients:!!e.clients?.length,ui:!!e.ui,storage:!!e.storage,sessionEventActions:!!e.sessionEventActions}}function P(e,t,r){let i=t.state;t.state=r,e.emit(n.stateChanged,{name:t.pkg.name,displayName:t.pkg.displayName,from:i,to:r,...t.error===void 0?{}:{error:t.error},contributes:N(t.pkg)}).catch(e=>{console.error(`[ExtensionCoordinator] stateChanged emit failed for "${t.pkg.name}":`,e)})}async function F(e,t,n,r,i){return i===`activated`?(await I(e,t,n,r),[]):L(e,n)}async function I(e,t,n,r){let i=[];try{for(let a of e){if(a.filter&&!a.filter(r.pkg))continue;let e=M(t,r,j(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 L(e,t){let n=[];for(let r of[...e].reverse())if(r.processStopped)try{await r.processStopped(t)}catch(e){n.push(e)}return n}async function R(e,t,r){let i=e.entries.get(t);if(!i)return!1;let a=i.enabled,o=r!==a;o&&await e.persistEnabled?.(t,r);let s;try{s=r?await z(e,t,i):await B(e,t,i)}catch(n){if(o&&e.persistEnabled)try{await e.persistEnabled(t,a)}catch(e){throw AggregateError([n,e],`Extension "${t}" transition and preference rollback both failed`)}throw n}return i.enabled===a&&!s?(o&&await e.persistEnabled?.(t,a),!1):(e.bus.emit(n.enabledChanged,{name:t,enabled:r}).catch(e=>{console.error(`[ExtensionCoordinator] enabledChanged emit failed for "${t}":`,e)}),s)}async function z(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),P(e.bus,n,`failed`),!1;n.enabled=!0,n.error=void 0,P(e.bus,n,`initializing`);let s=j(e,t,n);if(r.storage?.registerHandlers&&e.db!==void 0)try{let t=M(e,n,s),a=r.storage.registerHandlers(e.bus,e.db,t);typeof a==`function`&&(i=a,n.storageCleanup=a)}catch(r){return n.error=o(r),console.error(`[ExtensionCoordinator] Extension "${t}" storage re-registration failed:`,r),P(e.bus,n,`failed`),!1}if(r.create){let a;try{let t=M(e,n,s);a=await r.create(t),await a.init?.(),n.service=a}catch(r){return await V(t,a,i,n),r instanceof v?n.pkg.critical?(n.error=`Critical extension cannot skip startup: ${r.reason}`,console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,n.error),P(e.bus,n,`failed`),!1):(n.error=r.reason,P(e.bus,n,`skipped`),!1):(n.error=o(r),console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,r),P(e.bus,n,`failed`),!1)}}try{await F(e.contributionProcessors,e,t,n,`activated`)}catch(r){return await V(t,n.service,i,n),n.service=void 0,n.error=o(r),console.error(`[ExtensionCoordinator] Extension "${t}" contribution processing failed:`,r),P(e.bus,n,`failed`),!1}return P(e.bus,n,`active`),await e.runHealthCheck(t),await e.emitWarningsForEntry(t,n),!0}async function B(e,t,r){if(r.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 r.error=`Cannot disable "${t}" while active dependents remain: ${i.join(`, `)}`,console.error(`[ExtensionCoordinator] ${r.error}`),!1;r.enabled=!1,r.error=void 0;let a=[];try{a.push(...await F(e.contributionProcessors,e,t,r,`stopped`))}catch(e){a.push(e),console.error(`[ExtensionCoordinator] Contribution processor error during disable of "${t}":`,e)}if(r.service)try{await r.service.destroy?.()}catch(e){a.push(e),console.error(`[ExtensionCoordinator] Error during disable destroy of "${t}":`,e)}finally{r.service=void 0}if(r.storageCleanup)try{r.storageCleanup()}catch(e){a.push(e),console.error(`[ExtensionCoordinator] Storage cleanup error during disable of "${t}":`,e)}finally{r.storageCleanup=void 0}if(a.length>0){let e=a.map(e=>o(e)).join(`; `);r.error=o(AggregateError(a,`Extension "${t}" disabled with ${a.length} teardown failure(s): ${e}`))}P(e.bus,r,`stopped`),r.warnings=[];try{await e.bus.emit(n.warnings.changed,{extensionName:t,warnings:[]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}return a.length===0}async function V(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 H(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 U(e,t,n){let r=new Set(e.map(e=>e.name)),i=e.filter(e=>W(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 W(e,t,n){if(!K(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:G(n,e.id,e.version):!1}})}function G(e,t,n){let r=e.capabilityVersions?.get(t);return r!==void 0&&u(r,n)}function K(e,t){return e.surface===void 0||e.surface===`any`||e.surface===t}function ce(e){let t=le(e);return ue(e,t,new Map(e.map(e=>[e.name,e]))),pe(t,fe(e,t))}function le(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 ue(e,t,n){for(let r of e)de(r,t,n)}function de(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(!u(i,t.version))throw Error(`ExtensionCoordinator: package "${e.name}" dependency "${t.name}" version ${i} does not satisfy ${t.version}`)}}function fe(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 pe(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 me(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,o;if(typeof i==`string`)a=q(n,r.pkg,i);else{let e={};for(let[t,a]of Object.entries(i))a!==void 0&&(e[t]=q(n,r.pkg,a));let t=l(e);if(t===void 0)continue;a=t,o=e}t.push({name:n,migrationsPath:a,migrationSourceId:r.pkg.storage?.migrationSourceId??a,...o?{migrationsPathByDialect:o}:{}})}t.length!==0&&await e.runMigrations(t)}function q(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 r=e.entries.get(t);if(!r?.service||r.state!==`active`)return;let{checkHealth:i}=r.service;if(!i)return;let a;try{let e=await i.call(r.service),n=f.array().safeParse(e);n.success?a=n.data:(console.error(`[ExtensionCoordinator] checkHealth for "${t}" returned invalid data:`,n.error),a=[])}catch(e){console.error(`[ExtensionCoordinator] checkHealth threw for "${t}":`,e),a=[]}r.warnings=a;try{await e.bus.emit(n.warnings.changed,{extensionName:t,warnings:[...a]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}}function he(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 Y(e){return Array.from(e.values()).filter(e=>e.enabled).map(e=>e.pkg).filter(e=>!!e.http)}async function ge(e){let t=[...e.loadOrder].reverse(),n=[],r=[];for(let i of t){let t=e.entries.get(i);if(!t)continue;let a=!1;if(t.state===`active`){let r=await F(e.contributionProcessors,e.contextHost,i,t,`stopped`);r.length>0&&(a=!0,n.push(...r))}if(t.service)try{await t.service.destroy?.()}catch(e){a=!0,n.push(e)}finally{t.service=void 0}if(t.storageCleanup)try{t.storageCleanup()}catch(e){a=!0,n.push(e)}finally{t.storageCleanup=void 0}a&&r.push(i),t.state===`active`&&P(e.contextHost.bus,t,`stopped`)}if(n.length>0)throw AggregateError(n,`Extensions failed to shut down cleanly: ${r.join(`, `)}`)}async function _e(e,t){if(!t.tray)return;let n=ve(t);await e.request(m.register,{entry:n})}function ve(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 ye(e,t,n){if(!n.enabled){P(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),P(e.bus,n,`initializing`);let i=j(e.contextHost,t,n);if(Se(e,t,n,i)){if(!n.pkg.create){await be(e,t,n);return}await xe(e,t,n,i)}}async function be(e,t,n){try{await F(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}P(e.bus,n,`active`),e.bootProgress.ready(n.pkg),await $(e.bus,t,n)}async function xe(e,t,n,r){let i;try{let a=M(e.contextHost,n,r);i=await n.pkg.create(a),await i.init?.(),n.service=i,await F(e.contributionProcessors,e.contextHost,t,n,`activated`),P(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 v))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}`),P(e.bus,n,`skipped`),e.bootProgress.skipped(n.pkg,r.reason),!0}function Se(e,t,n,r){if(!n.pkg.storage?.registerHandlers||e.db===void 0)return!0;try{let t=M(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),P(e.bus,n,`failed`),e.bootProgress.failed(n.pkg,r)}async function $(e,t,n){try{await _e(e,n.pkg)}catch(e){console.warn(`[ExtensionCoordinator] Failed to register tray entry for ${t}:`,e)}}var Ce=class{bus;surface;db;extensionContextBase;runtimeEnvironment;shutdownController=new AbortController;entries=new Map;loadOrder=[];loaded=!1;started=!1;shutdownRequested=!1;shutdownPromise;lifecycleTail=Promise.resolve();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(ee(this.bus,this.warningActionMap,t.launcherCommand??`makaio`))}get trayEntries(){return this._trayEntries.map(e=>({...e}))}get cliContributions(){return this._cliContributions}extensionsWithHttp(){return Y(this.entries)}load(e,t){if(this.shutdownRequested)throw Error(`ExtensionCoordinator.load() called after shutdown(). The coordinator is terminal.`);if(this.loaded)throw Error(`ExtensionCoordinator.load() called twice. The coordinator is single-use; create a new instance if needed.`);let n=H(U(e,this.surface,this.runtimeEnvironment));this.loadOrder=ce(n);for(let e of this.loadOrder){let r=n.find(t=>t.name===e),i={pkg:r,identity:oe(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),he({windowRegistry:this.windowRegistry,trayEntries:this._trayEntries,cliContributions:this._cliContributions},r)}this.rpcCleanups.push(...O({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.shutdownRequested)throw Error(`ExtensionCoordinator.startAll() called after shutdown(). The coordinator is terminal.`);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,await this.enqueueLifecycle(()=>this.startAllInLifecycleLane())}async startAllInLifecycleLane(){let e=new b(this.bus,this.loadOrder.length);this.rpcCleanups.push(()=>e.dispose());try{await me({loadOrder:this.loadOrder,entries:this.entries,runMigrations:this.runMigrations});for(let t of this.loadOrder){let n=this.entries.get(t);n&&await ye({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 re({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap})}finally{e.complete()}}shutdown(){if(this.shutdownPromise)return this.shutdownPromise;this.shutdownRequested=!0;let e=this.enqueueLifecycle(()=>this.shutdownInLifecycleLane());return this.shutdownPromise=e,this.shutdownController.abort(),e}async shutdownInLifecycleLane(){let e=[],t;for(let t of this.rpcCleanups)try{t()}catch(t){e.push(t)}this.rpcCleanups=[],this.warningActionMap.clear();try{await ge({entries:this.entries,loadOrder:this.loadOrder,contributionProcessors:this.contributionProcessors,contextHost:this.createExtensionContextHost()})}catch(n){n instanceof AggregateError?(t=n.message,e.push(...n.errors)):e.push(n)}if(e.length>0){let n=t===void 0?``:`; ${t}`;throw AggregateError(e,`Extension coordinator shutdown failed with ${e.length} error(s)${n}`)}}list(){return[...this.entries.values()].map(e=>D(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}getLoadedProviderDefinitionIds(){let e=new Set;for(let t of this.entries.values())if(t.enabled&&!(t.state===`failed`||t.state===`skipped`||t.state===`stopped`))for(let n of t.pkg.providers??[])e.add(n.id);return e}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=M(t,r,j(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=M(r,n,j(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 this.shutdownRequested?!1:await this.enqueueLifecycle(()=>R({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)=>A({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap},e,t)},e,t))}enqueueLifecycle(e){let t=this.lifecycleTail.then(()=>e(),()=>e());return this.lifecycleTail=t.then(()=>void 0,()=>void 0),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{g as a,v as i,H as n,_ as o,U as r,Ce as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{z as e}from"zod";import{createBusNamespace as t}from"@makaio/framework/core";import{BrowserEntrypointSchema as n,ClientDefinitionSchema as r,ProviderDefinitionSchema as i}from"@makaio/framework/contracts";import{ExtensionWarningEntrySchema as a}from"@makaio/framework/contracts/extension";const o=e.enum([`discovered`,`initializing`,`active`,`failed`,`skipped`,`stopped`]),s=e.object({name:e.string(),displayName:e.string()}),c=s.extend({state:o,error:e.string().optional()}),l=c.extend({critical:e.boolean()}),u=c.extend({surface:e.enum([`interactive`,`headless`,`any`]).optional(),enabled:e.boolean(),browser:n.optional()}),d=e.object({packageName:e.string()}),f=d.extend({definition:i}),p=d.extend({definition:r}),m=t(`kernel:extension`,{stateChanged:e.object({name:e.string(),displayName:e.string(),from:o,to:o,error:e.string().optional(),contributes:e.object({adapters:e.boolean(),tools:e.boolean(),hashTriggers:e.boolean(),providers:e.boolean(),clients:e.boolean(),ui:e.boolean(),storage:e.boolean(),sessionEventActions:e.boolean()}).optional()}),list:{request:e.object({}),response:e.object({extensions:e.array(u)})},get:{request:e.object({name:e.string()}),response:e.object({extension:u.nullable()})},setEnabled:{request:e.object({name:e.string(),enabled:e.boolean()}),response:e.object({success:e.boolean()})},"contributions.catalog":{request:e.object({}),response:e.object({providers:e.array(f),clients:e.array(p)})},enabledChanged:e.object({name:e.string(),enabled:e.boolean()}),"warnings.list":{request:e.object({extensionName:e.string().optional()}),response:e.object({entries:e.array(a)})},"warnings.changed":a}),h=m.subjects;export{o as a,l as c,c as i,h as n,u as o,s as r,a as s,m as t};
|
|
@@ -1,435 +0,0 @@
|
|
|
1
|
-
import { i as CliContribution } from "./types-QRSc2AUU.mjs";
|
|
2
|
-
import { c as ExtensionInfo } from "./index-mTaFX2HH2.mjs";
|
|
3
|
-
import { r as WindowRegistry } from "./window-registry-DeG37kt8.mjs";
|
|
4
|
-
import { ExtensionContributionProcessor, ExtensionService, ExtensionToken, MakaioExtension, NodeExtensionContext, StorageDialect, TrayManifest, VersionLiteral } from "@makaio/framework/contracts";
|
|
5
|
-
import { IMakaioBus } from "@makaio/framework/bus";
|
|
6
|
-
|
|
7
|
-
//#region packages/kernel/src/extension/types.d.ts
|
|
8
|
-
/** Concrete Node runtime context supplied by the kernel coordinator. */
|
|
9
|
-
type KernelExtensionContext = NodeExtensionContext<IMakaioBus>;
|
|
10
|
-
/** Concrete executable extension shape loaded by the kernel coordinator. */
|
|
11
|
-
type KernelMakaioExtension = MakaioExtension<KernelExtensionContext>;
|
|
12
|
-
/** Awaited contribution processor registered with the {@link ExtensionCoordinator}. */
|
|
13
|
-
type ContributionProcessor = ExtensionContributionProcessor<KernelExtensionContext>;
|
|
14
|
-
/**
|
|
15
|
-
* Hosted runtime surface category used for extension/package gating.
|
|
16
|
-
*
|
|
17
|
-
* Represents the concrete surface a runtime IS -- `'any'` is intentionally
|
|
18
|
-
* absent because a runtime cannot BE `'any'`; it is always interactive or
|
|
19
|
-
* headless. Package manifests may declare `'any'` as their surface affinity,
|
|
20
|
-
* which the coordinator interprets as "load on all surfaces".
|
|
21
|
-
*/
|
|
22
|
-
type ExtensionRuntimeSurface = 'interactive' | 'headless';
|
|
23
|
-
/**
|
|
24
|
-
* Host-advertised runtime capability fact.
|
|
25
|
-
*/
|
|
26
|
-
interface RuntimeCapability {
|
|
27
|
-
/** Stable capability token. */
|
|
28
|
-
readonly id: string;
|
|
29
|
-
/** Concrete capability contract version when the host exposes one. */
|
|
30
|
-
readonly version?: VersionLiteral;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Snapshot of the runtime environment provided by the host.
|
|
34
|
-
*
|
|
35
|
-
* The coordinator uses this to evaluate {@link RuntimeRequirement} gates on
|
|
36
|
-
* each extension before deciding whether to load it.
|
|
37
|
-
*/
|
|
38
|
-
interface RuntimeEnvironment {
|
|
39
|
-
/**
|
|
40
|
-
* Identifiers of the active host runtimes (e.g. `'node'`, `'electron'`).
|
|
41
|
-
*
|
|
42
|
-
* Extensions that declare `{ type: 'host', id: '...' }` requirements check
|
|
43
|
-
* against this set.
|
|
44
|
-
*/
|
|
45
|
-
readonly hosts: ReadonlySet<string>;
|
|
46
|
-
/**
|
|
47
|
-
* Capability tokens advertised by the host (e.g. `'storage.drizzle'`).
|
|
48
|
-
*
|
|
49
|
-
* Extensions that declare `{ type: 'capability', id: '...' }` requirements
|
|
50
|
-
* check against this set. Versioned requirements additionally consult
|
|
51
|
-
* {@link RuntimeEnvironment.capabilityVersions}.
|
|
52
|
-
*/
|
|
53
|
-
readonly capabilities: ReadonlySet<string>;
|
|
54
|
-
/**
|
|
55
|
-
* Concrete versions for host capabilities that expose a versioned contract.
|
|
56
|
-
*
|
|
57
|
-
* A capability requirement with a `version` range is satisfied only when the
|
|
58
|
-
* capability ID is present and this map contains a satisfying concrete version.
|
|
59
|
-
*/
|
|
60
|
-
readonly capabilityVersions?: ReadonlyMap<string, VersionLiteral>;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Options for constructing an {@link ExtensionCoordinator}.
|
|
64
|
-
*/
|
|
65
|
-
interface ExtensionCoordinatorOptions {
|
|
66
|
-
/** Hosted surface category used to apply package gating. Defaults to `'headless'`. */
|
|
67
|
-
surface?: ExtensionRuntimeSurface;
|
|
68
|
-
/**
|
|
69
|
-
* Host launcher command embedded into client wiring installed from warning actions.
|
|
70
|
-
*
|
|
71
|
-
* Defaults to `'makaio'` for framework-only hosts. Hosts pass their
|
|
72
|
-
* own launcher policy through this seam so the runtime does not infer it
|
|
73
|
-
* from process entrypoints.
|
|
74
|
-
*/
|
|
75
|
-
launcherCommand?: string;
|
|
76
|
-
/** Optional database instance for storage handler registration (opaque — cast to MakaioDatabase at call site). */
|
|
77
|
-
db?: unknown;
|
|
78
|
-
/**
|
|
79
|
-
* Node host fields for the context supplied to extension factories.
|
|
80
|
-
*
|
|
81
|
-
* Required when any loaded extension declares a `create` factory. When absent,
|
|
82
|
-
* extensions with `create` will fail to start.
|
|
83
|
-
*
|
|
84
|
-
* Omit `config`, `signal`, and `hasExtension` — those are coordinator-owned
|
|
85
|
-
* and assembled per extension at context-build time.
|
|
86
|
-
*/
|
|
87
|
-
extensionContextBase?: Omit<KernelExtensionContext, 'bus' | 'identity' | 'getService' | 'dataDir' | 'config' | 'signal' | 'hasExtension'>;
|
|
88
|
-
/**
|
|
89
|
-
* Host-provided runtime environment snapshot used to evaluate extension
|
|
90
|
-
* {@link RuntimeRequirement} gates during {@link ExtensionCoordinator.load}.
|
|
91
|
-
*
|
|
92
|
-
* Extensions whose {@link MakaioExtension.requires} entries are not all
|
|
93
|
-
* satisfied by the supplied environment are excluded. Omit only in tests that
|
|
94
|
-
* intentionally bypass environment gating.
|
|
95
|
-
*/
|
|
96
|
-
runtimeEnvironment?: RuntimeEnvironment;
|
|
97
|
-
/**
|
|
98
|
-
* Optional callback to persist enabled/disabled state after a setEnabled call.
|
|
99
|
-
* The composition root supplies this to bridge into PreferencesSubjects or another durable store.
|
|
100
|
-
*/
|
|
101
|
-
persistEnabled?: (name: string, enabled: boolean) => Promise<void>;
|
|
102
|
-
/**
|
|
103
|
-
* Optional callback to retrieve persisted enabled state during startAll.
|
|
104
|
-
* Returns `false` to skip a package at boot, `true` or `undefined` to start normally.
|
|
105
|
-
*/
|
|
106
|
-
loadEnabled?: (name: string) => boolean | undefined;
|
|
107
|
-
/**
|
|
108
|
-
* Optional callback to retrieve stored configuration for a package during
|
|
109
|
-
* startAll and enablePackage. Returns `undefined` when no stored config exists.
|
|
110
|
-
*/
|
|
111
|
-
loadConfig?: (name: string) => Record<string, unknown> | undefined;
|
|
112
|
-
/**
|
|
113
|
-
* Optional callback invoked by {@link ExtensionCoordinator.startAll} to run
|
|
114
|
-
* database migrations declared by loaded packages before any services start.
|
|
115
|
-
*
|
|
116
|
-
* The coordinator collects all packages whose `StorageManifest.migrations`
|
|
117
|
-
* field is set and passes them as an array of
|
|
118
|
-
* `{ name, migrationsPath, migrationSourceId, migrationsPathByDialect? }`
|
|
119
|
-
* objects to this callback in topological (dependency) order. The callback is
|
|
120
|
-
* responsible for applying pending migrations — typically via Drizzle
|
|
121
|
-
* `migrate()` or the bundled `applyMigrations()` helper — using a tracking
|
|
122
|
-
* table keyed to the migration bundle identity so packages that share one
|
|
123
|
-
* folder share one ledger.
|
|
124
|
-
*
|
|
125
|
-
* When absent, declared migrations are silently skipped and storage tables
|
|
126
|
-
* that depend on them will not be created at runtime.
|
|
127
|
-
*
|
|
128
|
-
* The `migrationsPath` values are absolute discovery paths resolved by the
|
|
129
|
-
* coordinator from each package's `StorageManifest.migrations` field
|
|
130
|
-
* plus executable `storage.packageRoot` metadata when needed.
|
|
131
|
-
* `migrationSourceId` is the stable runtime identity used for bundled hosts;
|
|
132
|
-
* when a package does not declare one, it falls back to `migrationsPath`.
|
|
133
|
-
*
|
|
134
|
-
* When a package declares the object form of `StorageManifest.migrations`,
|
|
135
|
-
* the coordinator additionally passes `migrationsPathByDialect` — an
|
|
136
|
-
* absolute, containment-checked map of every declared per-dialect chain. The
|
|
137
|
-
* coordinator stays dialect-agnostic; the host runtime selects the active
|
|
138
|
-
* dialect's chain from this map and falls back to `migrationsPath` when the
|
|
139
|
-
* map has no entry for that dialect.
|
|
140
|
-
* @param sources - Migration sources in dependency order, each carrying the
|
|
141
|
-
* package name, absolute migration folder path, stable source id, and an
|
|
142
|
-
* optional per-dialect chain map.
|
|
143
|
-
* @returns A promise that resolves when all migrations have been applied.
|
|
144
|
-
*/
|
|
145
|
-
runMigrations?: (sources: ReadonlyArray<{
|
|
146
|
-
name: string;
|
|
147
|
-
migrationsPath: string;
|
|
148
|
-
migrationSourceId: string;
|
|
149
|
-
migrationsPathByDialect?: Partial<Record<StorageDialect, string>>;
|
|
150
|
-
}>) => Promise<void>;
|
|
151
|
-
}
|
|
152
|
-
//#endregion
|
|
153
|
-
//#region packages/kernel/src/extension/extension-coordinator.d.ts
|
|
154
|
-
/**
|
|
155
|
-
* Manages optional extensions through a unified lifecycle with per-extension state
|
|
156
|
-
* machine, bus observability, and window/tray/CLI surface collection.
|
|
157
|
-
*
|
|
158
|
-
* Lifecycle flow for each extension:
|
|
159
|
-
* ```
|
|
160
|
-
* discovered -> initializing -> [create + init + contributions] -> active
|
|
161
|
-
* ↘ failed (any step fails, contributions rolled back)
|
|
162
|
-
* ↘ skipped (ServiceSkipError from create or init,
|
|
163
|
-
* or loadEnabled returned false at boot)
|
|
164
|
-
* ```
|
|
165
|
-
*
|
|
166
|
-
* Every state transition emits `kernel:extension.stateChanged` on the bus.
|
|
167
|
-
* Non-critical failures are isolated so remaining extensions continue to start.
|
|
168
|
-
* Critical extension failures abort boot because the host declared them mandatory.
|
|
169
|
-
*
|
|
170
|
-
* Lifecycle transitions are serialized. Extension lifecycle callbacks must not
|
|
171
|
-
* await another coordinator lifecycle call, because it waits in the same lane.
|
|
172
|
-
*
|
|
173
|
-
* During {@link load}, window manifests are registered into
|
|
174
|
-
* {@link windowRegistry}, tray entries are collected into {@link trayEntries},
|
|
175
|
-
* and CLI contributions are collected into {@link cliContributions}. Static
|
|
176
|
-
* tray entries are bridged to the tray menu bus service after each extension
|
|
177
|
-
* starts so the tray service can be supplied by the same extension graph.
|
|
178
|
-
*
|
|
179
|
-
* During {@link startAll}, each extension's {@link MakaioExtension.create} factory
|
|
180
|
-
* is called with a `NodeExtensionContext`, followed by `service.init()`.
|
|
181
|
-
* Storage handlers (if any) are registered via
|
|
182
|
-
* `MakaioExtension.storage.registerHandlers` when a `db` instance is
|
|
183
|
-
* provided to the constructor.
|
|
184
|
-
*/
|
|
185
|
-
declare class ExtensionCoordinator {
|
|
186
|
-
private readonly bus;
|
|
187
|
-
private readonly surface;
|
|
188
|
-
private readonly db;
|
|
189
|
-
private readonly extensionContextBase;
|
|
190
|
-
private readonly runtimeEnvironment;
|
|
191
|
-
/**
|
|
192
|
-
* AbortController signalling graceful shutdown to all active packages.
|
|
193
|
-
*
|
|
194
|
-
* Aborted at the start of {@link shutdown} so packages receive the signal
|
|
195
|
-
* before their services are destroyed.
|
|
196
|
-
*/
|
|
197
|
-
private readonly shutdownController;
|
|
198
|
-
/** Insertion-ordered map so iteration matches dependency sort order. */
|
|
199
|
-
private readonly entries;
|
|
200
|
-
private loadOrder;
|
|
201
|
-
private loaded;
|
|
202
|
-
private started;
|
|
203
|
-
private shutdownRequested;
|
|
204
|
-
private shutdownPromise;
|
|
205
|
-
/** FIFO lane for lifecycle transitions that mutate extension entries. */
|
|
206
|
-
private lifecycleTail;
|
|
207
|
-
private rpcCleanups;
|
|
208
|
-
private readonly contributionProcessors;
|
|
209
|
-
/**
|
|
210
|
-
* Transient map from composite key (`toastId:actionId`) to the corresponding
|
|
211
|
-
* {@link ExtensionWarningAction}. Populated during {@link emitWarningsForEntry}
|
|
212
|
-
* and cleared per package before that package's current warning set is
|
|
213
|
-
* recorded, then cleared globally on {@link shutdown}.
|
|
214
|
-
*
|
|
215
|
-
* This map is intentionally coordinator-owned because toast interactions
|
|
216
|
-
* arrive after warning emission and need a short-lived runtime lookup without
|
|
217
|
-
* exposing executable warning actions in the toast payload.
|
|
218
|
-
*/
|
|
219
|
-
private readonly warningActionMap;
|
|
220
|
-
/** Window registry populated during {@link load}. */
|
|
221
|
-
readonly windowRegistry: WindowRegistry;
|
|
222
|
-
private readonly _trayEntries;
|
|
223
|
-
private readonly _cliContributions;
|
|
224
|
-
private readonly persistEnabled;
|
|
225
|
-
private readonly loadEnabled;
|
|
226
|
-
private readonly loadConfig;
|
|
227
|
-
private readonly runMigrations;
|
|
228
|
-
/**
|
|
229
|
-
* @param bus - Bus instance for emitting lifecycle events and serving the list RPC.
|
|
230
|
-
* @param options - Coordinator configuration.
|
|
231
|
-
*/
|
|
232
|
-
constructor(bus: IMakaioBus, options?: ExtensionCoordinatorOptions);
|
|
233
|
-
/**
|
|
234
|
-
* Tray manifest entries collected from packages during {@link load}.
|
|
235
|
-
* @returns Immutable snapshot of all collected tray entries.
|
|
236
|
-
*/
|
|
237
|
-
get trayEntries(): ReadonlyArray<TrayManifest & {
|
|
238
|
-
readonly packageName: string;
|
|
239
|
-
}>;
|
|
240
|
-
/**
|
|
241
|
-
* CLI contributions collected from packages during {@link load}.
|
|
242
|
-
* @returns Immutable snapshot of all collected CLI contributions.
|
|
243
|
-
*/
|
|
244
|
-
get cliContributions(): ReadonlyArray<CliContribution>;
|
|
245
|
-
/**
|
|
246
|
-
* Returns extensions that declare HTTP routes.
|
|
247
|
-
* Primarily retained for diagnostics and compatibility with callers that
|
|
248
|
-
* need a snapshot of loaded HTTP surfaces. Runtime route mounting is handled
|
|
249
|
-
* by contribution processors as extensions activate or stop.
|
|
250
|
-
* @returns Loaded extensions that have an `http` field defined.
|
|
251
|
-
*/
|
|
252
|
-
extensionsWithHttp(): ReadonlyArray<{
|
|
253
|
-
http: {
|
|
254
|
-
prefix: string;
|
|
255
|
-
mount: (app: unknown) => void;
|
|
256
|
-
};
|
|
257
|
-
}>;
|
|
258
|
-
/**
|
|
259
|
-
* Load extension manifests and build the dependency graph.
|
|
260
|
-
*
|
|
261
|
-
* Sets all entries to the `discovered` state and registers the
|
|
262
|
-
* `kernel:extension.list`, `kernel:extension.get`, `kernel:extension.setEnabled`,
|
|
263
|
-
* `cli.listContributions`, and `cli.execute` RPC handlers.
|
|
264
|
-
*
|
|
265
|
-
* Extensions that do not match the coordinator's runtime surface or declared
|
|
266
|
-
* environment requirements are
|
|
267
|
-
* silently excluded. Dependents of excluded extensions are transitively pruned.
|
|
268
|
-
*
|
|
269
|
-
* Window manifests are registered into {@link windowRegistry}, tray entries
|
|
270
|
-
* are collected into {@link trayEntries}, and CLI contributions are collected
|
|
271
|
-
* into {@link cliContributions} -- all before any services are started.
|
|
272
|
-
*
|
|
273
|
-
* Single-use: calling this method twice on the same instance throws.
|
|
274
|
-
* @param packages - Extension manifests to register.
|
|
275
|
-
* @param configDefaults - Optional map of extension name to default config values
|
|
276
|
-
* sourced from descriptor.json.
|
|
277
|
-
* @throws Error if called more than once, if a dependency cycle is detected,
|
|
278
|
-
* or if dependency sorting fails.
|
|
279
|
-
*/
|
|
280
|
-
load(packages: ReadonlyArray<KernelMakaioExtension>, configDefaults?: ReadonlyMap<string, Readonly<Record<string, unknown>>>): void;
|
|
281
|
-
/**
|
|
282
|
-
* Start all loaded packages in dependency order.
|
|
283
|
-
*
|
|
284
|
-
* For each package the state machine advances:
|
|
285
|
-
* `discovered -> initializing -> active | failed | skipped`
|
|
286
|
-
*
|
|
287
|
-
* Failures are isolated: a package that throws during `create` or `init` is
|
|
288
|
-
* set to `failed` and the error is captured, but remaining packages continue
|
|
289
|
-
* to start unless the package declares `critical: true`.
|
|
290
|
-
*
|
|
291
|
-
* Single-use: calling this method twice on the same instance throws.
|
|
292
|
-
* @throws Error if called more than once, before {@link load}, or when a
|
|
293
|
-
* critical package fails.
|
|
294
|
-
*/
|
|
295
|
-
startAll(): Promise<void>;
|
|
296
|
-
/** Run the admitted startup transition in the coordinator lifecycle lane. */
|
|
297
|
-
private startAllInLifecycleLane;
|
|
298
|
-
/**
|
|
299
|
-
* Shut down all active packages in reverse dependency order.
|
|
300
|
-
*
|
|
301
|
-
* Calls each package's service `destroy()` method (if any). A teardown
|
|
302
|
-
* failure does not stop remaining packages from shutting down, but it is
|
|
303
|
-
* reported: once every package has been stopped, all failures are thrown
|
|
304
|
-
* together so the caller can treat termination as unclean.
|
|
305
|
-
*
|
|
306
|
-
* Safe to call even if {@link startAll} was never called.
|
|
307
|
-
* @returns A promise that settles after every admitted transition and teardown complete.
|
|
308
|
-
* @throws An AggregateError when any package failed to shut down cleanly.
|
|
309
|
-
*/
|
|
310
|
-
shutdown(): Promise<void>;
|
|
311
|
-
/** Run shutdown after every lifecycle transition admitted before shutdown. */
|
|
312
|
-
private shutdownInLifecycleLane;
|
|
313
|
-
/**
|
|
314
|
-
* Return the current state snapshot for all registered packages.
|
|
315
|
-
* @returns Array of {@link ExtensionInfo} objects reflecting current observable states.
|
|
316
|
-
*/
|
|
317
|
-
list(): ExtensionInfo[];
|
|
318
|
-
/**
|
|
319
|
-
* Retrieve the live service instance for a named extension.
|
|
320
|
-
* @param tokenOrName - Extension token or extension name string.
|
|
321
|
-
* @returns The active service instance, or `undefined`.
|
|
322
|
-
*/
|
|
323
|
-
getExtensionService<TService = ExtensionService>(tokenOrName: string | ExtensionToken<TService>): TService | undefined;
|
|
324
|
-
/**
|
|
325
|
-
* Look up a loaded extension by name.
|
|
326
|
-
* @param name - Extension name.
|
|
327
|
-
* @returns The extension, or `undefined` if not loaded.
|
|
328
|
-
*/
|
|
329
|
-
getExtension(name: string): KernelMakaioExtension | undefined;
|
|
330
|
-
/**
|
|
331
|
-
* Collect provider definition IDs from extensions that can still provide them.
|
|
332
|
-
*
|
|
333
|
-
* Active entries are already visible through the contribution catalog.
|
|
334
|
-
* Enabled `discovered` and `initializing` entries are still eligible to
|
|
335
|
-
* activate later in the same boot or enablement pass, so adapters should
|
|
336
|
-
* defer for their providers. Disabled and terminal inactive entries are
|
|
337
|
-
* excluded so optional-provider adapters do not wait on providers that
|
|
338
|
-
* cannot become catalog-visible.
|
|
339
|
-
* @returns Set of provider definition IDs from active or activation-eligible extensions.
|
|
340
|
-
*/
|
|
341
|
-
getLoadedProviderDefinitionIds(): ReadonlySet<string>;
|
|
342
|
-
/**
|
|
343
|
-
* Iterate all active extensions in dependency order with their contexts.
|
|
344
|
-
*
|
|
345
|
-
* Intended for host-owned integration code that needs a snapshot of active
|
|
346
|
-
* packages after the coordinator has completed startup.
|
|
347
|
-
* @param callback - Called once per active extension with its name, manifest,
|
|
348
|
-
* and a per-extension `NodeExtensionContext`.
|
|
349
|
-
*/
|
|
350
|
-
forEachActiveExtension(callback: (name: string, pkg: KernelMakaioExtension, ctx: KernelExtensionContext) => void): void;
|
|
351
|
-
/**
|
|
352
|
-
* Invoke a callback for a single active extension with its resolved context.
|
|
353
|
-
*
|
|
354
|
-
* Singular complement to {@link forEachActiveExtension} for targeted operations
|
|
355
|
-
* after an extension is re-enabled.
|
|
356
|
-
* No-ops when the extension is not found or not in `active` state.
|
|
357
|
-
* @param name - Name of the extension to target.
|
|
358
|
-
* @param callback - Called with the extension name, manifest, and a
|
|
359
|
-
* per-extension `NodeExtensionContext` when the extension is active.
|
|
360
|
-
*/
|
|
361
|
-
forExtension(name: string, callback: (name: string, pkg: KernelMakaioExtension, ctx: KernelExtensionContext) => void): void;
|
|
362
|
-
/**
|
|
363
|
-
* Register an awaited contribution processor.
|
|
364
|
-
*
|
|
365
|
-
* The processor's `processActivated` method is called
|
|
366
|
-
* (and awaited) each time an extension transitions to `active` — both during
|
|
367
|
-
* {@link startAll} and on re-enable via `kernel:extension.setEnabled(true)`.
|
|
368
|
-
*
|
|
369
|
-
* `processStopped` (when present) is called before
|
|
370
|
-
* the extension's service is destroyed during {@link shutdown} or
|
|
371
|
-
* `kernel:extension.setEnabled(false)`.
|
|
372
|
-
*
|
|
373
|
-
* Processors run in registration order during activation and reverse
|
|
374
|
-
* registration order during deactivation. During activation, processor errors
|
|
375
|
-
* cause the extension to transition to `failed` with rollback of
|
|
376
|
-
* already-activated contributions. During deactivation, errors are caught and
|
|
377
|
-
* logged (best-effort).
|
|
378
|
-
* @param processor - Processor to register.
|
|
379
|
-
* @returns Cleanup function that removes the processor from the registry.
|
|
380
|
-
*/
|
|
381
|
-
registerContributionProcessor(processor: ContributionProcessor): () => void;
|
|
382
|
-
/**
|
|
383
|
-
* Handle the `kernel:extension.setEnabled` RPC by enabling or disabling an extension.
|
|
384
|
-
*
|
|
385
|
-
* Public so the extracted RPC handler module can call it. Delegates to the
|
|
386
|
-
* shared toggle lifecycle helper.
|
|
387
|
-
* @param name - Name of the extension to toggle.
|
|
388
|
-
* @param enabled - `true` to enable, `false` to disable.
|
|
389
|
-
* @returns `true` on success, `false` when the state machine rejects.
|
|
390
|
-
*/
|
|
391
|
-
handleSetEnabled(name: string, enabled: boolean): Promise<boolean>;
|
|
392
|
-
/**
|
|
393
|
-
* Schedule a lifecycle transition after every previously admitted transition.
|
|
394
|
-
*
|
|
395
|
-
* The tail recovers from failures so one rejected operation cannot strand
|
|
396
|
-
* later shutdown or toggle work behind a rejected promise.
|
|
397
|
-
* @param operation - Lifecycle transition to run exclusively.
|
|
398
|
-
* @returns The operation's result.
|
|
399
|
-
*/
|
|
400
|
-
private enqueueLifecycle;
|
|
401
|
-
/**
|
|
402
|
-
* Create the shared extension-context helper host without exposing coordinator internals.
|
|
403
|
-
* @returns Helper host for config resolution and ExtensionContext construction.
|
|
404
|
-
*/
|
|
405
|
-
private createExtensionContextHost;
|
|
406
|
-
/**
|
|
407
|
-
* Create the helper host for extension health checks.
|
|
408
|
-
* @returns Coordinator state required by the health runner.
|
|
409
|
-
*/
|
|
410
|
-
private createExtensionHealthHost;
|
|
411
|
-
/**
|
|
412
|
-
* Check whether an extension has reached active state.
|
|
413
|
-
* @param name - Extension name to check.
|
|
414
|
-
* @returns `true` when the extension is active.
|
|
415
|
-
*/
|
|
416
|
-
private hasActiveExtension;
|
|
417
|
-
}
|
|
418
|
-
//#endregion
|
|
419
|
-
//#region packages/kernel/src/extension/extension-selection.d.ts
|
|
420
|
-
/**
|
|
421
|
-
* Keep the last extension registered for a given name.
|
|
422
|
-
* @param extensions - Eligible extensions in load priority order.
|
|
423
|
-
* @returns Unique extensions with later entries winning name collisions.
|
|
424
|
-
*/
|
|
425
|
-
declare function coalesceExtensionOverrides(extensions: ReadonlyArray<KernelMakaioExtension>): KernelMakaioExtension[];
|
|
426
|
-
/**
|
|
427
|
-
* Filter extensions by runtime surface / environment requirements and prune dependents.
|
|
428
|
-
* @param extensions - Full extension set to filter.
|
|
429
|
-
* @param surface - Runtime surface to match.
|
|
430
|
-
* @param env - Host-provided runtime environment, or `undefined` to allow all.
|
|
431
|
-
* @returns Extensions eligible for loading in the current host environment.
|
|
432
|
-
*/
|
|
433
|
-
declare function filterEligibleExtensions(extensions: ReadonlyArray<KernelMakaioExtension>, surface: ExtensionRuntimeSurface, env: RuntimeEnvironment | undefined): KernelMakaioExtension[];
|
|
434
|
-
//#endregion
|
|
435
|
-
export { ExtensionCoordinatorOptions as a, KernelMakaioExtension as c, ContributionProcessor as i, RuntimeCapability as l, filterEligibleExtensions as n, ExtensionRuntimeSurface as o, ExtensionCoordinator as r, KernelExtensionContext as s, coalesceExtensionOverrides as t, RuntimeEnvironment as u };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./extension-package-provenance-C7oO5JAE.mjs";import{t}from"./descriptor-to-package-Dw8dnl5E.mjs";import{pathToFileURL as n}from"node:url";import*as r from"node:path";import*as i from"node:fs";import{versionSatisfies as a}from"@makaio/framework/contracts";import{AutomationCronSchedulerToken as o}from"@makaio/framework/services/automation-trigger";var s=class extends Error{};async function c(e,t){let{frameworkVersion:n,importModule:r=D}=t,i=[],a=[],o=new Map,s;for(let t of e){let{descriptor:e,extensionPath:c}=t,u=`[extensions] ${e.name}@${e.version}`;if(!h(t,n))continue;if(e.execution===`detached`){let t;try{s??=(await import(`./detached-extension-handle-DN3aqLyq.mjs`)).createDetachedExtensionPackage,t=s(e,c)}catch(e){console.warn(`${u}: failed to synthesize detached extension package:`,e instanceof Error?e.message:e);continue}i.push(t),e.config?.defaults&&o.set(e.name,e.config.defaults);continue}if(!e.entrypoints.server){!e.entrypoints.browser&&!e.entrypoints.cli&&console.warn(`${u}: no executable entrypoint declared, skipping`);continue}let f;if(t.preloadedModule)f=t.preloadedModule;else try{let t=S(`server`,e.entrypoints.server,c);if(!t){console.warn(`${u}: server entrypoint could not be resolved within extension directory, skipping`);continue}f=await r(t)}catch(e){console.warn(`${u}: failed to import server entry:`,e instanceof Error?e.message:e);continue}let p=d(f.default,e.name,u);p&&(i.push(...p),l(f,p,u,a),e.config?.defaults&&o.set(e.name,e.config.defaults))}return{packages:i,automationCronSchedulerHostPolicies:a,configDefaults:o}}function l(e,t,n,r){let i=e.automationCronSchedulerHostPolicy;if(i===void 0)return;if(!u(i))throw new s(`${n}: named export 'automationCronSchedulerHostPolicy' is not a valid owner-anchored scheduler policy`);let a=t.find(({name:e})=>e===i.ownerPackageName);if(!a)throw new s(`${n}: automation cron scheduler policy owner '${i.ownerPackageName}' is not a normalized descriptor default package`);if(i.package.name!==o.name)throw new s(`${n}: automation cron scheduler policy package '${i.package.name}' must be named '${o.name}'`);r.push({ownerPackage:a,package:i.package})}function u(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.ownerPackageName==`string`&&_(t.package)}function d(e,t,n){if(Array.isArray(e)){let r=[],i=new Set;for(let t of e){if(!_(t)){console.warn(`${n}: default export array contains an invalid MakaioExtension, skipping`);return}if(i.has(t.name)){console.warn(`${n}: default export array contains duplicate package name '${t.name}', skipping`);return}i.add(t.name),r.push(t)}if(!r.some(e=>e.name===t)){console.warn(`${n}: default export array must include a package named '${t}' to match descriptor identity, skipping`);return}if(r.some(e=>e.name!==t&&!e.name.startsWith(`${t}.`))){console.warn(`${n}: default export array contains package names outside descriptor namespace '${t}', skipping`);return}return r}if(!_(e)){console.warn(`${n}: default export is not a valid MakaioExtension or MakaioExtension[], skipping`);return}if(e.name!==t){console.warn(`${n}: imported package name '${e.name}' does not match descriptor name '${t}', skipping`);return}return[e]}async function f(t,n,r){let{importModule:i=D,frameworkVersion:a}=r,o=new Map(n.map(e=>[e.name,e])),s=new Map;for(let n of t){let t=p(n,a);if(!t)continue;let r=`[extensions] ${n.descriptor.name}@${n.descriptor.version}`,c=o.get(n.descriptor.name);if(c?.cli)continue;let l=await g(n,t,r,i);if(!l)continue;if(!v(l.default)){console.warn(`${r}: default export is not a valid CliContribution, skipping`);continue}let u=n.descriptor.cli?.name??n.descriptor.name;if(l.default.name!==u){console.warn(`${r}: imported CLI contribution name '${l.default.name}' does not match descriptor CLI name '${u}', skipping`);continue}if(c){let t={...c,cli:l.default};o.set(n.descriptor.name,e(t,c));continue}if(n.descriptor.entrypoints?.server||n.descriptor.entrypoints?.browser){console.warn(`${r}: server or browser entry is present but no package was loaded, skipping CLI-only synthesis`);continue}o.set(n.descriptor.name,m(n,l.default)),n.descriptor.config?.defaults&&s.set(n.descriptor.name,n.descriptor.config.defaults)}return{packages:[...o.values()],configDefaults:s}}function p(e,t){if(h(e,t)&&e.descriptor.execution!==`detached`)return e.descriptor.entrypoints?.cli}function m(e,n){return{...t(e.descriptor),cli:n}}function h(e,t){let{descriptor:n}=e,r=`[extensions] ${n.name}@${n.version}`;try{return a(t,n.makaio.framework)?!0:(console.warn(`${r}: requires framework ${n.makaio.framework}, current is ${t}, skipping`),!1)}catch(e){return console.warn(`${r}: invalid version metadata (framework=${t}, range=${n.makaio.framework}), skipping:`,e instanceof Error?e.message:e),!1}}async function g(e,t,n,r){try{let i=S(`cli`,t,e.extensionPath);if(!i){console.warn(`${n}: cli entrypoint has no resolvable candidate within extension directory, skipping`);return}return await r(i)}catch(e){console.warn(`${n}: failed to import cli entry:`,e instanceof Error?e.message:e);return}}function _(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.name==`string`&&typeof t.displayName==`string`&&typeof t.version==`string`}function v(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.name!=`string`||typeof t.description!=`string`||!Array.isArray(t.subcommands)||`interactive`in t&&t.interactive!==void 0&&typeof t.interactive!=`function`?!1:t.subcommands.length===0?typeof t.interactive==`function`:t.subcommands.every(y)}function y(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.name==`string`&&typeof t.description==`string`&&b(t.schema)&&typeof t.handler==`function`}function b(e){return typeof e==`object`&&!!e&&typeof e.safeParse==`function`}function x(e,t){return t===!0?e:t}function S(e,t,n){if(!r.isAbsolute(n))return;let i=x(e,t),a=E(n),o=r.resolve(n,`src`,`${i}.ts`);if(w(o,a))return o;let s=r.resolve(n,`dist`,`${i}.mjs`);if(w(s,a))return s}function C(e,t){let n=E(t);return T(E(e),n)}function w(e,t){try{return T(i.realpathSync(e),t)}catch{return!1}}function T(e,t){return e.startsWith(t+r.sep)}function E(e){let t=r.resolve(e);try{return i.realpathSync(t)}catch{return t}}async function D(e){return await import(n(e).href)}export{h as a,c,v as i,S as l,f as n,_ as o,x as r,C as s,s as t};
|