@makaio/framework 1.0.0-dev-1783977266352 → 1.0.0-dev-1784144891135
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/adapters/config/index.d.mts +2 -2
- package/dist/adapters/config/index.mjs +1 -1
- package/dist/adapters/index.d.mts +2 -2
- package/dist/adapters/index.mjs +3 -3
- package/dist/adapters/node.d.mts +1 -1
- package/dist/adapters/node.mjs +1 -1
- package/dist/{artifact-CGjnoyCC.mjs → artifact-Dnpy5ei_.mjs} +1 -1
- package/dist/{authority-state-bootstrap-CEuKScnL.mjs → authority-state-bootstrap-BlbmQ9A5.mjs} +1 -1
- package/dist/bus/index.mjs +1 -1
- package/dist/clients/index.d.mts +1 -1
- package/dist/clients/index.mjs +1 -1
- package/dist/clients/managed-install.d.mts +1 -1
- package/dist/clients/managed-install.mjs +1 -1
- package/dist/context-resolution-CE1o3wTv.d.mts +1268 -0
- package/dist/contracts/adapter/index.d.mts +2 -2
- package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
- package/dist/contracts/artifact/index.d.mts +2 -1
- package/dist/contracts/artifact/index.mjs +1 -1
- package/dist/contracts/auth/index.d.mts +2 -2
- package/dist/contracts/canonical-model/index.d.mts +1 -1
- package/dist/contracts/client/index.d.mts +2 -2
- package/dist/contracts/common/index.d.mts +1 -1
- package/dist/contracts/config/index.d.mts +1 -1
- package/dist/contracts/extension/index.d.mts +3 -3
- 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 +75 -75
- package/dist/contracts/index.mjs +1 -1
- package/dist/contracts/materialization/index.d.mts +4 -4
- package/dist/contracts/materialization/index.mjs +1 -1
- 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/session/index.d.mts +2 -2
- 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/workflow/index.d.mts +2 -2
- package/dist/contracts/workflow/index.mjs +1 -1
- package/dist/{detached-extension-handle-vDK194QV.mjs → detached-extension-handle-BVM-Ic-4.mjs} +1 -1
- package/dist/{filesystem-service-maY_P3yA.mjs → filesystem-service-qR9Zy5-r.mjs} +1 -1
- package/dist/git/index.mjs +1 -1
- package/dist/{globby-CisClzat.mjs → globby-DE358g5u.mjs} +1 -1
- package/dist/{index-D3Eek6kd.d.mts → index-4WQgnxfO.d.mts} +158 -1044
- package/dist/{index-C6LZOiDv.d.mts → index-B96HlWaM.d.mts} +1 -1
- package/dist/{index-DMQlLz2W.d.mts → index-BB5xeWrm.d.mts} +6 -6
- package/dist/{index-DpZbaS7y.d.mts → index-BB6bmH1n.d.mts} +3 -3
- package/dist/{index-Bbr5LEUc.d.mts → index-BFAc9Mqw.d.mts} +1 -1
- package/dist/{index-Cx8jGKOs.d.mts → index-BMmJJJmZ.d.mts} +7 -7
- package/dist/{index-j2YlW_Fc.d.mts → index-B_KmL_z8.d.mts} +1 -1
- package/dist/{index-CagRgpXI2.d.mts → index-ChB3K_a12.d.mts} +1 -1
- package/dist/{index-BrAp9ntB.d.mts → index-CxxqBc3y.d.mts} +87 -87
- package/dist/{index-BxuiHVFi.d.mts → index-DA5S_dj8.d.mts} +1 -1
- package/dist/{index-BXWTilGs.d.mts → index-DHejCnq8.d.mts} +3 -3
- package/dist/{index-kqxUXYe7.d.mts → index-DL1L6Pvw.d.mts} +6 -6
- package/dist/{index-CHjKP5G0.d.mts → index-DeLkAZZ2.d.mts} +23 -10
- package/dist/{index-Cq6rXKae.d.mts → index-GmoTPQcx.d.mts} +92 -92
- package/dist/{index-D75FnT0B.d.mts → index-TWs1TQ2-.d.mts} +1 -1
- package/dist/index-n9dy5seY.d.mts +817 -0
- package/dist/{index-MTvmxwiu2.d.mts → index-wP-qhIoT2.d.mts} +4 -4
- 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 +1 -1
- package/dist/kernel/index.d.mts +5 -5
- package/dist/kernel/namespace/index.d.mts +1 -1
- package/dist/kernel/observability/index.d.mts +1 -1
- package/dist/kernel/providers/index.d.mts +1 -1
- package/dist/kernel/window/index.d.mts +1 -1
- package/dist/{lib-DktBDEoY.mjs → lib-6P8_sBCe.mjs} +1 -1
- package/dist/{lib-DIVnpS8e.mjs → lib-DhbCgfYD.mjs} +1 -1
- package/dist/{load-extensions-nqL5WAKj.mjs → load-extensions-5VckHXuw.mjs} +1 -1
- package/dist/{load-extensions-_EnedkUp.d.mts → load-extensions-jGQgvw6Z.d.mts} +1 -1
- package/dist/materialization-BBxXhthv.mjs +1 -0
- package/dist/mcp-http-server/index.mjs +1 -1
- package/dist/{namespace-dgNmx9g3.d.mts → namespace-BF1FZKiV.d.mts} +27 -27
- package/dist/{namespace-CukqFYHf2.d.mts → namespace-BQhnjUvN2.d.mts} +1 -1
- package/dist/{namespace-TLkZRkcU.d.mts → namespace-CXoCX9u1.d.mts} +20 -20
- package/dist/{namespace-BoA6u44C.d.mts → namespace-CbQ8hdd8.d.mts} +2 -2
- package/dist/{namespace-rO-C2Dgu2.d.mts → namespace-Cv8zbqwY.d.mts} +2 -2
- package/dist/node/bus-server/index.d.mts +1 -1
- package/dist/node/bus-server/index.mjs +1 -1
- package/dist/node/bus-server/server-lifecycle.d.mts +1 -1
- package/dist/node/bus-server/server-lifecycle.mjs +1 -1
- package/dist/{package-CsFFT9iR.mjs → package-Brt4dhRC.mjs} +1 -1
- package/dist/package.json +1 -1
- package/dist/packages-BBJsifai.d.mts +532 -0
- package/dist/packages-I0D3JP9L.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.mjs +1 -1
- package/dist/runtime-node/extension-discovery.d.mts +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 +3 -3
- package/dist/runtime-node/index.mjs +23 -23
- 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-CxN7d_MU.d.mts → schema-BwJf2zRN.d.mts} +1 -1
- package/dist/schemas-6H-dlMrB.mjs +1 -0
- package/dist/{schemas-OaBqeEUT.d.mts → schemas-D6zcRPQo.d.mts} +2 -2
- package/dist/{schemas-CIO03KSD2.d.mts → schemas-tF70HEfT.d.mts} +17 -17
- package/dist/services/adapter-runtime/index.d.mts +3 -3
- package/dist/services/adapter-runtime/index.mjs +1 -1
- 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/capability/index.d.mts +1 -1
- package/dist/services/capability/index.mjs +1 -1
- package/dist/services/codebase/index.d.mts +2 -2
- package/dist/services/codebase/namespace.d.mts +1 -1
- package/dist/services/codebase/schemas.d.mts +1 -1
- package/dist/services/compression/index.d.mts +2 -2
- package/dist/services/compression/namespace.d.mts +1 -1
- package/dist/services/compression/schemas.d.mts +1 -1
- package/dist/services/context-rules/index.d.mts +4 -4
- package/dist/services/context-rules/index.mjs +1 -1
- package/dist/services/execution-target/index.d.mts +3 -3
- package/dist/services/execution-target/index.mjs +1 -1
- package/dist/services/execution-target/namespace.d.mts +1 -1
- package/dist/services/execution-target/schemas.d.mts +1 -1
- package/dist/services/filesystem/index.d.mts +1 -1
- package/dist/services/filesystem/index.mjs +1 -1
- package/dist/services/filesystem/namespace.d.mts +12 -12
- package/dist/services/filesystem/schemas.d.mts +6 -6
- package/dist/services/git/namespace.mjs +1 -1
- package/dist/services/git/schemas.mjs +1 -1
- package/dist/services/harness/index.mjs +1 -1
- package/dist/services/index.d.mts +59 -308
- package/dist/services/index.mjs +1 -1
- package/dist/services/log-import/browser.d.mts +2 -2
- package/dist/services/log-import/index.d.mts +2 -2
- package/dist/services/log-import/log-import.d.mts +1 -1
- package/dist/services/log-import/log-import.mjs +1 -1
- package/dist/services/log-import/namespace.mjs +1 -1
- package/dist/services/log-import/schemas.mjs +1 -1
- package/dist/services/materialization/index.d.mts +76 -0
- package/dist/services/materialization/index.mjs +1 -0
- package/dist/services/model-registry/index.d.mts +1 -1
- package/dist/services/model-registry/index.mjs +1 -1
- package/dist/services/preferences/index.d.mts +2 -2
- package/dist/services/preferences/schemas.d.mts +1 -1
- package/dist/services/preferences/storage-namespace.d.mts +2 -2
- package/dist/services/provider-context/index.d.mts +1 -1
- package/dist/services/provider-runtime/index.mjs +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/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/testing/index.mjs +1 -1
- package/dist/services/session/testing/orchestrator-shared.d.mts +1 -1
- package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
- package/dist/services/session/turns/namespace.d.mts +1 -1
- package/dist/services/session-editor/index.d.mts +1 -1
- package/dist/services/settings/index.d.mts +3 -3
- package/dist/services/settings/namespace.d.mts +14 -14
- 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/index.mjs +1 -1
- package/dist/services/subagent-template/index.d.mts +2 -2
- package/dist/services/subagent-template/namespace.d.mts +1 -1
- package/dist/services/subagent-template/schemas.d.mts +1 -1
- package/dist/services/tool-approval/index.d.mts +1 -1
- package/dist/services/tool-approval/index.mjs +1 -1
- package/dist/services/tools/index.d.mts +1 -1
- package/dist/services/tools/index.mjs +1 -1
- package/dist/services/tray-menu/index.d.mts +3 -3
- package/dist/services/tray-menu/index.mjs +1 -1
- package/dist/services/tray-menu/namespace.d.mts +1 -1
- package/dist/services/tray-menu/schemas.d.mts +1 -1
- package/dist/services/turn/index.d.mts +1 -1
- package/dist/services/turn/namespace.d.mts +1 -1
- package/dist/{src-Bo2eA51B.mjs → src-T5DtFSyU.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/drizzle/index.mjs +1 -1
- package/dist/storage/handlers/index.d.mts +1 -1
- package/dist/storage/handlers/index.mjs +1 -1
- package/dist/tools-CWSuNk-M.mjs +1 -0
- package/dist/{transition-DjipYcC3.d.mts → transition-C9UOqw0W.d.mts} +2 -2
- package/dist/{types-B-xY9WW2.d.mts → types-Be7wY1De.d.mts} +1 -1
- package/dist/{types-DQsYUZwa.d.mts → types-he1s7Vd_.d.mts} +37 -37
- package/dist/ui-kernel/index.d.mts +1 -1
- package/dist/ui-kernel/pages/schemas.d.mts +1 -1
- package/dist/utils/index.d.mts +20 -1
- package/dist/utils/index.mjs +2 -2
- package/dist/view-builder-D75mQTa1.d.mts +618 -0
- package/dist/{workflow-DFJYGjq_.mjs → workflow-DPeE6-Ta.mjs} +1 -1
- package/dist/workflow-engine/index.d.mts +68 -68
- 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/workflow-orchestrator.mjs +1 -1
- package/dist/{workflow-worker-BEFjCccX.mjs → workflow-worker-CPCh68Qf.mjs} +1 -1
- package/package.json +6 -2
- package/dist/definition-D7qCBmtc.d.mts +0 -60
- package/dist/index-CidblQAY.d.mts +0 -355
- package/dist/materialization-BwTORtBr.mjs +0 -1
- package/dist/schemas-DlCdlCEF.d.mts +0 -153
- package/dist/schemas-DlrQ0227.mjs +0 -1
- package/dist/tools-PC_L6g2m.mjs +0 -1
- /package/dist/{adapter-auth-runtime-a4O7cSNP.mjs → adapter-auth-runtime-CotG_6M4.mjs} +0 -0
- /package/dist/{adapter-binding-DDUyv1JK.d.mts → adapter-binding-DQ1HrGcH.d.mts} +0 -0
- /package/dist/{ajv-DfHhgdS5.mjs → ajv-WvFKnw8d.mjs} +0 -0
- /package/dist/{await-trigger-DP-fTQc4.mjs → await-trigger-COHFNyNi.mjs} +0 -0
- /package/dist/{base-orchestrator-BiShpVKL.d.mts → base-orchestrator-p3zIcnaJ.d.mts} +0 -0
- /package/dist/{capability-service-Dg2bU8qc.mjs → capability-service-TCOwWrLi.mjs} +0 -0
- /package/dist/{client-DmJwprw1.d.mts → client-CGEyBWKl.d.mts} +0 -0
- /package/dist/{client-binary-version-verifier-BK_vIjIo.mjs → client-binary-version-verifier-CaFlNNjs.mjs} +0 -0
- /package/dist/{client-binary-version-verifier-BwrMTAh2.d.mts → client-binary-version-verifier-WsNRplFB.d.mts} +0 -0
- /package/dist/{clients-namespace-B96QIJOs.d.mts → clients-namespace-ClKm1GLT.d.mts} +0 -0
- /package/dist/{config-namespace-x0fuhEXe.d.mts → config-namespace-DOw8R5eb.d.mts} +0 -0
- /package/dist/{create-static-mount-CBTXRtbN.mjs → create-static-mount-DM9qO98Q.mjs} +0 -0
- /package/dist/{cross-spawn-D9WWFl2a.mjs → cross-spawn-CVfmnMVP.mjs} +0 -0
- /package/dist/{cursor-storage-Bw-7ROzx.mjs → cursor-storage-BoFVjVGq.mjs} +0 -0
- /package/dist/{definition-BsTlOz99.d.mts → definition-BZrouYAq.d.mts} +0 -0
- /package/dist/{definition-Cbl0k6Fc.d.mts → definition-ClKlXenJ.d.mts} +0 -0
- /package/dist/{descriptor-to-package-Rs-OjOQU.mjs → descriptor-to-package-DCwvJoUE.mjs} +0 -0
- /package/dist/{drizzle-DYfaDzlO.mjs → drizzle-BQDvlDL2.mjs} +0 -0
- /package/dist/{esm-C_WW4-pP.mjs → esm-1UzF2r1U.mjs} +0 -0
- /package/dist/{event-DTM0-qWP.mjs → event-Ddxe4yp9.mjs} +0 -0
- /package/dist/{execution-target-Bg2wpfML.mjs → execution-target-D6PoGaO8.mjs} +0 -0
- /package/dist/{extension-discovery-APMf1Tes.d.mts → extension-discovery-Cce4FmRu.d.mts} +0 -0
- /package/dist/{filesystem-service-Bx0bR2Lb.d.mts → filesystem-service-CWBzOEAA.d.mts} +0 -0
- /package/dist/{handler-4pKQi3eo.mjs → handler-Bxs0moLY.mjs} +0 -0
- /package/dist/{identity-2qUT1NME.mjs → identity-D481xSkS.mjs} +0 -0
- /package/dist/{index-FDyqQIt5.d.mts → index-4b-ig5Uf.d.mts} +0 -0
- /package/dist/{index-Bv9lm0Kf.d.mts → index-BOlzcjwS.d.mts} +0 -0
- /package/dist/{index-S-mAqWwq.d.mts → index-BRdPSBFH2.d.mts} +0 -0
- /package/dist/{index-BmsPH78f2.d.mts → index-BcqWLD6J.d.mts} +0 -0
- /package/dist/{index-DmuGKvE2.d.mts → index-BfNfKh4y.d.mts} +0 -0
- /package/dist/{index-CSxfU0tB.d.mts → index-BjgfHTX4.d.mts} +0 -0
- /package/dist/{index-CarbJsC92.d.mts → index-BrvsExEF.d.mts} +0 -0
- /package/dist/{index-D0eUQjTU2.d.mts → index-C2PHX5Em.d.mts} +0 -0
- /package/dist/{index-BZ_DSGnE.d.mts → index-CNS1jyBU.d.mts} +0 -0
- /package/dist/{index-DoLdETfR.d.mts → index-CQco6KNL.d.mts} +0 -0
- /package/dist/{index-C18Pn3zP.d.mts → index-ChsmMZmN.d.mts} +0 -0
- /package/dist/{index-DwDBa2mb.d.mts → index-D3cH5U0n.d.mts} +0 -0
- /package/dist/{index-T96ydgVk.d.mts → index-DAVLhzkq.d.mts} +0 -0
- /package/dist/{index-9dISOTLT.d.mts → index-DIAmg04s.d.mts} +0 -0
- /package/dist/{index-DlAfs3RD.d.mts → index-DKCFz7dL.d.mts} +0 -0
- /package/dist/{index-DvaPrL6C.d.mts → index-DbP0yaRw.d.mts} +0 -0
- /package/dist/{index-2PsDAhPN.d.mts → index-DnPJWaO7.d.mts} +0 -0
- /package/dist/{index-DXBiCH2y.d.mts → index-Dx6P-ajY.d.mts} +0 -0
- /package/dist/{index-Rhcr4YNA.d.mts → index-Jec13bI-2.d.mts} +0 -0
- /package/dist/{index-BkAKfh4d.d.mts → index-M8rNEeH8.d.mts} +0 -0
- /package/dist/{index-DnWZdG6C.d.mts → index-NZ-gfUOw.d.mts} +0 -0
- /package/dist/{index-DfVSWBBp.d.mts → index-RtP5Mi4D.d.mts} +0 -0
- /package/dist/{index-_zsihEmk.d.mts → index-XLGBNeu0.d.mts} +0 -0
- /package/dist/{index-Bd52mmj9.d.mts → index-fFSPF7N0.d.mts} +0 -0
- /package/dist/{index-Ctw617Tj.d.mts → index-p1N3ZuqF.d.mts} +0 -0
- /package/dist/{json-value-C8duSh9X.d.mts → json-value-BsWNQQbr.d.mts} +0 -0
- /package/dist/{jsonl-transport-l5NPcQ_2.mjs → jsonl-transport-B70HQ9l1.mjs} +0 -0
- /package/dist/{lib-ClRTNIuz.mjs → lib-C_apP_9s.mjs} +0 -0
- /package/dist/{model-registry-C8MInDtX.mjs → model-registry-C3NX834K.mjs} +0 -0
- /package/dist/{namespace-HsI0Jbbr.mjs → namespace-B1_egU5J.mjs} +0 -0
- /package/dist/{namespace-Dar3O6iT.d.mts → namespace-BTp6-zD8.d.mts} +0 -0
- /package/dist/{namespace-Bl1UhLnK.d.mts → namespace-BqlDkdht2.d.mts} +0 -0
- /package/dist/{namespace-DoNigVgx.d.mts → namespace-BwAiuQ2_.d.mts} +0 -0
- /package/dist/{namespace-3YVLQ_bM.d.mts → namespace-CU1jSw6E.d.mts} +0 -0
- /package/dist/{namespace-BcDHt-ww.d.mts → namespace-CddQuUvG.d.mts} +0 -0
- /package/dist/{namespace-BsEoWXV_.d.mts → namespace-DNgZ_rfi.d.mts} +0 -0
- /package/dist/{namespace-VmsT_tLJ.d.mts → namespace-Dzbt8LqQ.d.mts} +0 -0
- /package/dist/{namespace-Dvi66QS6.d.mts → namespace-SwgMs4rw.d.mts} +0 -0
- /package/dist/{namespace-BhVlHfoO.d.mts → namespace-UCwUrFRx.d.mts} +0 -0
- /package/dist/{namespace-Xp9-g_r-.mjs → namespace-kIjqar0Y.mjs} +0 -0
- /package/dist/{orchestrator-shared-pxtyNu3W.d.mts → orchestrator-shared-DrEFeZYw.d.mts} +0 -0
- /package/dist/{orchestrator-shared-DAkGOu9H.mjs → orchestrator-shared-jYk9mi5C.mjs} +0 -0
- /package/dist/{out-BB6Kb4Xu.mjs → out-B6fO6go6.mjs} +0 -0
- /package/dist/{package-BYpWkSuQ.mjs → package-3cW8oIkI.mjs} +0 -0
- /package/dist/{package-DG9GSY8M.d.mts → package-BVm1EakP.d.mts} +0 -0
- /package/dist/{providers-namespace-O4de1tgO.d.mts → providers-namespace-Bl3M8Ibo.d.mts} +0 -0
- /package/dist/{quick-lru-BLaSzINB.mjs → quick-lru-Coxb6GVa.mjs} +0 -0
- /package/dist/{registry-TJjQgTgp.mjs → registry-ElIHcMM2.mjs} +0 -0
- /package/dist/{schemas-9QJf1FtS.d.mts → schemas-B3K1ekm7.d.mts} +0 -0
- /package/dist/{schemas-jDRSOXJL.d.mts → schemas-BKgUDm_a2.d.mts} +0 -0
- /package/dist/{schemas-XRhqOgVE.d.mts → schemas-CVbfHPw-.d.mts} +0 -0
- /package/dist/{schemas-CLsbsX1W.d.mts → schemas-CzT0LApM.d.mts} +0 -0
- /package/dist/{schemas-D_9X_CRo.d.mts → schemas-DPosZWw-.d.mts} +0 -0
- /package/dist/{schemas-fRLDhefF.d.mts → schemas-D_H0ztxl.d.mts} +0 -0
- /package/dist/{schemas-qpo1Goit.d.mts → schemas-DfZ85CRF2.d.mts} +0 -0
- /package/dist/{schemas-K3Td_WdR.d.mts → schemas-Dq_g7Giu.d.mts} +0 -0
- /package/dist/{schemas-DwfTUQIa.mjs → schemas-FiDj_kLq.mjs} +0 -0
- /package/dist/{schemas-qt5QTjVc.d.mts → schemas-pl0mzEtO.d.mts} +0 -0
- /package/dist/{server-lifecycle-D-jxVr_0.mjs → server-lifecycle-DLdh0-4H.mjs} +0 -0
- /package/dist/{server-lifecycle-r5Tkk8bU.d.mts → server-lifecycle-DzO3rjKP.d.mts} +0 -0
- /package/dist/{session-lineage-YShrn77v.d.mts → session-lineage-COFDOi7x.d.mts} +0 -0
- /package/dist/{src-Ci_WY9uw.mjs → src-Dqa1n_kI.mjs} +0 -0
- /package/dist/{storage-namespace-BzE2M4Hq.mjs → storage-namespace-B1_x8Ho2.mjs} +0 -0
- /package/dist/{storage-namespace-DWKFqEW-.d.mts → storage-namespace-D4yQ--Sp.d.mts} +0 -0
- /package/dist/{storage-namespace-definition-BZJGSaX3.d.mts → storage-namespace-definition-BzSaRLtZ.d.mts} +0 -0
- /package/dist/{supports-color-Dzp6WuF5.mjs → supports-color-CCdGjFUY.mjs} +0 -0
- /package/dist/{tool-approval-service-Dh0XI21f.mjs → tool-approval-service-BgSn_6NT.mjs} +0 -0
- /package/dist/{tray-menu-service-Bonl2KXf.mjs → tray-menu-service-BJ9r7IY3.mjs} +0 -0
- /package/dist/{types-BCW9kr4L.d.mts → types-B9QOZAZ5.d.mts} +0 -0
- /package/dist/{types-DWNoZ3Sd.d.mts → types-Bgb8eQkd.d.mts} +0 -0
- /package/dist/{types-DvKaEOOn.d.mts → types-C8_OhAFv.d.mts} +0 -0
- /package/dist/{types-CrJ7KEZ0.d.mts → types-Diu9uAnB.d.mts} +0 -0
- /package/dist/{window-registry-WsWu-rcK.d.mts → window-registry-CHv3cgSN.d.mts} +0 -0
package/dist/clients/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as StrategyDependencies, i as InstallStrategy, n as createStrategy, r as InstallArtifact, t as verifyInstalledVersion } from "../client-binary-version-verifier-
|
|
1
|
+
import { a as StrategyDependencies, i as InstallStrategy, n as createStrategy, r as InstallArtifact, t as verifyInstalledVersion } from "../client-binary-version-verifier-WsNRplFB.mjs";
|
|
2
2
|
import * as _$zod from "zod";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import * as _$_makaio_core0 from "@makaio/framework/core";
|
package/dist/clients/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"../client-binary-version-verifier-BK_vIjIo.mjs";import{z as r}from"zod";import*as i from"node:fs/promises";import*as a from"node:path";import{randomUUID as o}from"node:crypto";import{createBusNamespace as s}from"@makaio/framework/core";import{MakaioBus as c}from"@makaio/framework/bus";import{extensionToken as l,isUniversalRange as u,versionSatisfies as d}from"@makaio/framework/contracts";import{BaseService as f}from"@makaio/framework/service-base";import{index as p,unique as ee,uniqueIndex as te}from"drizzle-orm/sqlite-core";import{index as m,unique as ne,uniqueIndex as re}from"drizzle-orm/pg-core";import{defineDialectSchema as h,defineDualTable as g,didAffectRows as ie,executeTransaction as _,registerDrizzleHandlers as ae,resolveSchema as v}from"@makaio/framework/storage/drizzle";import{and as y,eq as b,gt as oe,sql as x}from"drizzle-orm";import{ClientProfileNameSchema as S,ClientProfileSchema as se,ClientSubjects as ce,ClientSubjects as C,ClientWiringEntrySchema as w,SessionConfigLeaseIdSchema as le}from"@makaio/framework/contracts/client";import*as T from"node:os";import{CLIDetectionSubjects as ue}from"@makaio/framework/services/cli-detection/namespace";import{ClientStorageSubjects as de}from"@makaio/framework/services/settings/storage";import{SessionSubjects as fe}from"@makaio/framework/contracts/session";async function pe(e,t,n,r,i){let a,o=(n.get(e)??Promise.resolve()).then(async()=>{let n=await i(r(await me(e,t)));n.changed&&await he(e,n.content),a=n.result}),s=o.then(()=>void 0,()=>void 0);n.set(e,s);try{await o}finally{n.get(e)===s&&n.delete(e)}return a}async function me(e,t){let n;try{n=await i.readFile(e,`utf-8`)}catch(e){if(e.code===`ENOENT`)return t;throw e}return JSON.parse(n)}async function he(e,t){let n=a.dirname(e),r=a.join(n,`${a.basename(e)}.${o()}.tmp`);await i.mkdir(n,{recursive:!0});try{await i.writeFile(r,`${JSON.stringify(t,null,2)}\n`,`utf-8`),await i.rename(r,e)}catch(e){throw await i.unlink(r).catch(()=>void 0),e}}var ge=class e extends Error{code=`BINARY_NOT_FOUND`;constructor(t){super(`client.resolveBinary: no binary found for client '${t}' — install a managed version or ensure the binary is on PATH`),this.name=`BinaryNotFoundError`,Error.captureStackTrace?.(this,e)}},_e=class{nextAccountSequence=1;accountIdsByIdentifier=new Map;accounts=new Map;upsertAccount(e){let t=ye(e.displayLabel),n=new Map;for(let t of e.identifiers)n.set(ve(e.clientId,t.scheme,t.value),t);let r=be(n,this.accountIdsByIdentifier,`strong`),i=be(n,this.accountIdsByIdentifier,`alias`),a=r[0]??(i.length===1?i[0]:i.length>1?xe(i):this.createAccount()),o=(r.length>0?Ce(a,r,i):[]).flatMap(e=>this.mergeInto(a,e)),s=this.accounts.get(a);if(!s)throw Error(`Client account registry invariant violated: missing account ${a}`);for(let[e,t]of n){let n=this.accountIdsByIdentifier.get(e);r.length===0&&t.strength===`alias`&&n!==void 0&&n!==a||(s.identifiers.set(e,t),this.accountIdsByIdentifier.set(e,a))}return t!==void 0&&(s.displayLabel=t),{clientAccountId:a,displayLabel:s.displayLabel,mergedAccountIds:o}}clear(){this.accountIdsByIdentifier.clear(),this.accounts.clear(),this.nextAccountSequence=1}createAccount(){let e=`client-account-${this.nextAccountSequence}`;return this.nextAccountSequence+=1,this.accounts.set(e,{clientAccountId:e,identifiers:new Map}),e}mergeInto(e,t){if(e===t)return[];let n=this.accounts.get(e),r=this.accounts.get(t);if(!n||!r)return[];for(let[t,i]of r.identifiers)n.identifiers.set(t,i),this.accountIdsByIdentifier.set(t,e);return n.displayLabel===void 0&&r.displayLabel!==void 0&&(n.displayLabel=r.displayLabel),this.accounts.delete(t),[t]}};function ve(e,t,n){return`${e}\u0000${t}\u0000${n}`}function ye(e){return e?.trim()||void 0}function be(e,t,n){let r=new Set;for(let[i,a]of e){if(a.strength!==n)continue;let e=t.get(i);e!==void 0&&r.add(e)}return Array.from(r).sort(E)}function xe(e){return[...e].sort(E)[0]}function E(e,t){let n=Se(e),r=Se(t);return n!==null&&r!==null&&n!==r?n-r:e.localeCompare(t)}function Se(e){let t=e.match(/^client-account-(\d+)$/);return t?Number(t[1]):null}function Ce(e,t,n){let r=new Set([...t,...n]);return r.delete(e),Array.from(r).sort(E)}function we(e){return{subject:`config.prime`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}async function D(e,t){let n=await e.requestOptional(we(t.clientId),t);return n.handled?n.data:{primed:!1}}function Te(){let e=e=>async()=>{throw Error(`StrategyDependencies.${e} is not implemented`)};return{fetchText:e(`fetchText`),fetchJson:e(`fetchJson`),downloadFile:e(`downloadFile`),exec:e(`exec`),extractArchive:e(`extractArchive`),deleteFile:e(`deleteFile`),computeChecksum:e(`computeChecksum`),removeDirectory:e(`removeDirectory`)}}var Ee=class{resolveInstallVersion(e,t,n){let r=t.version;if(n===void 0)return{version:r,explicit:!1};let i=n.trim();if(i.length===0)throw Error(`Explicit version returned an empty version string`);if(i!==r)throw Error(`client.install: requested version ${i} for client '${e}' does not match pinned version ${r}`);return{version:i,explicit:!0}}};function O(t,n){return!a.isAbsolute(t)||!a.isAbsolute(n)?!1:e(a.resolve(t),a.resolve(n))}function k(e,t){if(!e||!a.isAbsolute(e))throw Error(`${t} requires a non-empty absolute basePath`);return a.resolve(e)}var De=class{strategyDeps;config;jobs=new Map;#e=!1;resolvedBasePath;constructor(e,t){this.strategyDeps=e,this.config=t,this.resolvedBasePath=k(t.basePath,`ClientBinaryJobRunner`)}startJob(e,t,n,r,i,a,o){let s={...e,status:`running`};return this.jobs.set(e.jobId,s),this.runJob(s,t,n,r,i,a,o),e.jobId}cancelAll(){this.#e=!0,this.jobs.clear()}safeOnProgress(e,t){try{e(t)}catch{}}emitProgressIfActive(e,t){return this.#e?!1:(this.safeOnProgress(e,t),!this.#e)}async runJob(e,n,r,i,a,o,s){try{let c=this.resolveTargetDir(e.clientId,e.version),l=t(n,this.strategyDeps);if(l===void 0)throw Error(`Unsupported managed install descriptor type: ${n.type}`);let u=await this.executeStrategy(e,l,c,r);if(this.#e)return;let d;try{if(d=await this.runPostInstall(e,u.installPath,o,r),this.#e)return;s!==void 0&&await this.runVersionVerification(e,u.installPath,s,r)}catch(e){throw this.#e||await this.cleanupStagedArtifact(u.installPath),e}if(this.#e)return;await this.finalizeSuccess(e,u,d,r,i,a)}catch(t){if(this.#e)return;let n=t instanceof Error?t.message:String(t),r=t instanceof Error&&`code`in t?String(t.code):void 0;try{await a({jobId:e.jobId,clientId:e.clientId,version:e.version,strategy:e.strategy,status:`error`,activeVersion:null,error:{message:n,...r===void 0?{}:{code:r}}})}catch{}}finally{this.jobs.delete(e.jobId)}}async finalizeSuccess(e,t,n,r,i,a){if(!(e.makeActive&&!this.emitProgressIfActive(r,{jobId:e.jobId,clientId:e.clientId,version:t.version,strategy:e.strategy,stage:`activating`,progress:null,installPath:t.installPath,activeAfterCompletion:!0}))&&!this.#e){try{await i({jobId:e.jobId,clientId:e.clientId,version:t.version,installPath:t.installPath,makeActive:e.makeActive,reason:e.reason})}catch(e){try{await this.strategyDeps.removeDirectory(t.installPath)}catch{}throw e}if(!this.#e)try{await a({jobId:e.jobId,clientId:e.clientId,version:t.version,strategy:e.strategy,status:`success`,installPath:t.installPath,activeVersion:e.makeActive?t.version:null,...n===void 0?{}:{metadata:{postInstall:n}}})}catch{}}}async cleanupStagedArtifact(e){try{await this.strategyDeps.removeDirectory(e)}catch{}}async executeStrategy(e,t,n,r){try{return await t.execute(e.version,n,(t,i)=>{this.emitProgressIfActive(r,{jobId:e.jobId,clientId:e.clientId,version:e.version,strategy:e.strategy,stage:t,progress:i,installPath:t===`installing`?n:void 0,activeAfterCompletion:e.makeActive})})}catch(e){throw this.#e||await this.cleanupStagedArtifact(n),e}}async runPostInstall(e,t,n,r){if(n===void 0)return;let i=this.resolvePostInstallHandler(n),a=this.buildProgressPayload(e,`post-install`,null,t,{kind:n.kind});if(!this.emitProgressIfActive(r,a))return;let o=await i({clientId:e.clientId,version:e.version,installPath:t,descriptor:n});return this.emitProgressIfActive(r,this.buildProgressPayload(e,`post-install`,100,t,{kind:n.kind,...o??{}})),o??void 0}async runVersionVerification(e,t,r,i){this.emitProgressIfActive(i,this.buildProgressPayload(e,`verifying`,null,t,{kind:`version-command`}))&&(this.#e||await n(this.strategyDeps.exec,t,r,e.version))}resolvePostInstallHandler(e){let t=this.config.postInstallHandlers?.get(e.kind);if(t===void 0)throw Error(`No post-install handler registered for kind "${e.kind}"`);return t}buildProgressPayload(e,t,n,r,i){return{jobId:e.jobId,clientId:e.clientId,version:e.version,strategy:e.strategy,stage:t,progress:n,installPath:r,activeAfterCompletion:e.makeActive,...i===void 0?{}:{metadata:i}}}resolveTargetDir(e,t){let n=a.resolve(this.resolvedBasePath,e,t);if(!O(this.resolvedBasePath,n))throw Error(`Invalid install target path for client "${e}" and version "${t}"`);return n}};const A=r.object({id:r.string(),clientId:r.string(),version:r.string(),installPath:r.string(),installedAt:r.number().int().nonnegative(),createdAt:r.number().int().nonnegative()}),j=r.object({clientId:r.string(),activeVersion:r.string().nullable(),updatedAt:r.number().int().nonnegative()}),Oe=r.object({previousActiveVersion:r.string().nullable(),activeVersion:r.string().nullable()}),ke=s(`client-binary:storage`,{insertVersion:{request:A,response:r.object({success:r.boolean()})},recordInstalledVersion:{request:r.object({versionRecord:A,makeActive:r.boolean(),updatedAt:r.number().int().nonnegative()}),response:Oe},listVersions:{request:r.object({clientId:r.string()}),response:r.object({versions:r.array(A)})},getSnapshot:{request:r.object({clientId:r.string()}),response:r.object({state:j.nullable(),versions:r.array(A)})},loadAllVersions:{request:r.object({}),response:r.object({versions:r.array(A)})},upsertState:{request:j,response:r.object({success:r.boolean()})},setActiveVersion:{request:r.object({clientId:r.string(),activeVersion:r.string().nullable(),updatedAt:r.number().int().nonnegative()}),response:Oe},getState:{request:r.object({clientId:r.string()}),response:r.object({state:j.nullable()})},loadAllState:{request:r.object({}),response:r.object({states:r.array(j)})},loadSnapshot:{request:r.object({}),response:r.object({states:r.array(j),versions:r.array(A)})},removeVersionAndClearActive:{request:r.object({clientId:r.string(),version:r.string(),updatedAt:r.number().int().nonnegative()}),response:Oe.extend({removedVersion:r.string().nullable()})}}),M=ke.subjects;var N=class{definitions=new Map;constructor(e=[]){for(let t of e)this.registerUnique(t)}getDefinition(e){return this.definitions.get(e)}listDefinitions(){return[...this.definitions.values()]}register(e){this.definitions.set(e.id,e)}registerUnique(e){if(this.definitions.has(e.id))throw Error(`ClientDefinitionRegistry: duplicate client definition id '${e.id}'`);this.definitions.set(e.id,e)}};const Ae=process.env.MAKAIO_SKIP_CLIENT_VERSION_CHECK===`1`;function P(e,t,n,r,i){if(n===null){if(u(r))return;if(Ae){console.warn(`[SKIP_VERSION_CHECK] ${e}: ${i} for client '${t}' did not report a version; requires ${r}`);return}throw Error(`${e}: ${i} for client '${t}' did not report a version; requires ${r}`)}if(!d(n,r)){if(Ae){console.warn(`[SKIP_VERSION_CHECK] ${e}: ${i} ${n} for client '${t}' does not satisfy ${r} — check bypassed`);return}throw Error(`${e}: ${i} ${n} for client '${t}' does not satisfy ${r}`)}}var je=class{bus;resolvedBasePath;resolvedConfigBasePath;definitionLookup;resolutionPolicy;constructor(e){this.bus=e.bus,this.resolvedBasePath=e.resolvedBasePath,this.resolvedConfigBasePath=e.resolvedConfigBasePath,this.definitionLookup=e.definitionLookup,this.resolutionPolicy=e.resolutionPolicy??`managed-first`}async resolve(e){let t=this.definitionLookup.getDefinition(e);if(t===void 0)throw Error(`client.resolveBinary: no definition registered for client '${e}'`);if(this.resolutionPolicy===`managed-first`){let{state:n,versions:r}=await this.bus.request(M.getSnapshot,{clientId:e}),i=n?.activeVersion??null;if(i!==null)return this.buildManagedContext(e,i,t,r)}return this.buildGlobalContext(e,t)}isInstallPathWithinBase(e){return O(this.resolvedBasePath,e)}async isExpectedInstallPath(e,t,n){if(!a.isAbsolute(e)||!this.isInstallPathWithinBase(e))return!1;let r=a.resolve(this.resolvedBasePath,t,n);if(!this.isInstallPathWithinBase(r))return!1;try{let[t,n,a]=await Promise.all([i.realpath(this.resolvedBasePath),i.realpath(r),i.realpath(e)]);return O(t,n)?a===n||O(n,a):!1}catch{return!1}}async buildManagedContext(e,t,n,r){let i=r.find(e=>e.version===t);if(i===void 0)throw Error(`client.resolveBinary: active version '${t}' is not installed for client '${e}'`);if(!await this.isExpectedInstallPath(i.installPath,e,t))throw Error(`client.resolveBinary: stored installPath "${i.installPath}" does not match the expected install directory for ${e}@${t}`);n.binary!==void 0&&P(`client.resolveBinary`,e,t,n.binary.supportedVersions,`managed binary version`);let o=F(n.versionCommand)?.[0];if(o===void 0)throw Error(`client.resolveBinary: definition for '${e}' has no versionCommand — cannot derive binary path`);let s=a.resolve(i.installPath,o),c=a.resolve(i.installPath);if(!s.startsWith(c+a.sep)&&s!==c)throw Error(`client.resolveBinary: versionCommand for '${e}' resolves outside the install directory`);let{configDir:l,env:u}=this.resolveIsolatedConfig(e,n);return{binaryPath:s,env:u,configDir:l,source:`managed`,version:t}}async buildGlobalContext(e,t){if(!t.binary?.name)throw Error(`client.resolveBinary: definition for '${e}' has no binary.name — cannot scan PATH`);let n={clientId:e,binaryName:t.binary.name,supportedVersions:t.binary.supportedVersions},{results:r}=await this.bus.request(C.scan,{targets:[n]}),i=r.find(t=>t.clientId===e);if(i===void 0||!i.found)throw new ge(e);let o=i.version??null;P(`client.resolveBinary`,e,o,t.binary.supportedVersions,`detected global binary version`);let s=this.resolveGlobalConfigDir(t),c=i.binaryPath??null;if(c!==null&&!a.isAbsolute(c))throw Error(`client.resolveBinary: detected global binary path for '${e}' is not absolute`);return{binaryPath:c,env:{},configDir:s,source:`global`,version:o}}resolveIsolatedConfig(e,t){let{configIsolation:n}=t;if(n===void 0)return{configDir:null,env:{}};let r=a.join(this.resolvedConfigBasePath,e,`config`),i=n.pathKind===`file`?a.join(r,a.basename(n.defaultPath)):r;return{configDir:r,env:{[n.envVar]:i}}}resolveGlobalConfigDir(e){let{configIsolation:t}=e;if(t===void 0)return null;let n=t.defaultPath,r=n===`~`?T.homedir():n.startsWith(`~/`)?a.join(T.homedir(),n.slice(2)):n,i=t.pathKind===`file`?a.dirname(r):r;if(!a.isAbsolute(i))throw Error(`ConfigIsolation defaultPath for '${e.id}' resolved to non-absolute path '${r}'; use an absolute or tilde-expanded path (e.g. '~/.myapp')`);return i}};function F(e){if(e===void 0)return;let{executable:t,args:n}=e,r=typeof t==`string`?t:t[process.platform]??t.default;if(typeof r!=`string`||r.trim()===``)throw Error(`client.resolveBinary: versionCommand executable is missing for this platform`);return[r,...n]}async function Me(e,t){let{versions:n,states:r}=await e.request(M.loadSnapshot,{}),i=Map.groupBy(n,e=>e.clientId),a=new Map;for(let e of r)a.set(e.clientId,e.activeVersion);let o=new Map;for(let e of t.listDefinitions())e.managedInstall!==void 0&&o.set(e.id,e.managedInstall);return[...new Set(o.keys())].map(e=>{let t=o.get(e);if(t===void 0)throw Error(`assembleBinaryList: missing descriptor for client '${e}'`);let n=a.get(e)??null,r=(i.get(e)??[]).map(e=>({version:e.version,installPath:e.installPath,installedAt:e.installedAt,isActive:e.version===n})),s=t.version;return{clientId:e,installedVersions:r,activeVersion:n,pinnedVersion:s,updateAvailable:n!==null&&n!==s}})}var Ne=class extends f{config;definitionLookup;versionResolver;jobRunner;strategyDeps;resolvedBasePath;resolvedConfigBasePath;resolver;pendingClients=new Set;constructor(e=c,t,n=new N([]),r=Te()){super(e),this.config=t,this.definitionLookup=n,this.resolvedBasePath=k(t.basePath,`ClientBinaryManager`),this.resolvedConfigBasePath=k(t.configBasePath,`ClientBinaryManager configBasePath`),this.strategyDeps=r,this.versionResolver=new Ee,this.jobRunner=new De(r,t),this.resolver=new je({bus:e,resolvedBasePath:this.resolvedBasePath,resolvedConfigBasePath:this.resolvedConfigBasePath,definitionLookup:n,...t.resolutionPolicy!==void 0&&{resolutionPolicy:t.resolutionPolicy}})}async onInit(){this.registerHandler(C.list,async e=>{let t=await this.handleList();e.setResult({clients:t})}),this.registerHandler(C.install,async e=>{let t=await this.handleInstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(C.update,async e=>{let t=await this.handleUpdate(e.payload.clientId);e.setResult(t)}),this.registerHandler(C.setActive,async e=>{let t=await this.handleSetActive(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(C.uninstall,async e=>{let t=await this.handleUninstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(C.resolveBinary,async e=>{let t=await this.resolver.resolve(e.payload.clientId);e.setResult(t)})}onDestroy(){this.jobRunner.cancelAll(),this.pendingClients.clear()}async handleList(){return Me(this.bus,this.definitionLookup)}async handleInstall(e,t){let{definition:n,descriptor:r}=this.requireManagedDefinition(e,`client.install`);return this.withClientLock(e,async()=>{let{version:i}=this.versionResolver.resolveInstallVersion(e,r,t);return n.binary!==void 0&&P(`client.install`,e,i,n.binary.supportedVersions,t===void 0?`resolved binary version`:`requested binary version`),{jobId:this.startInstallJob(e,i,r,n,!1,`install`),requestedVersion:t??null,resolvedVersion:i}})}async handleUpdate(e){let{definition:t,descriptor:n}=this.requireManagedDefinition(e,`client.update`);return this.withClientLock(e,async()=>{let{version:r}=this.versionResolver.resolveInstallVersion(e,n);return t.binary!==void 0&&P(`client.update`,e,r,t.binary.supportedVersions,`resolved binary version`),{jobId:this.startInstallJob(e,r,n,t,!0,`update`),resolvedVersion:r}})}async handleSetActive(e,t){if(this.pendingClients.has(e))throw Error(`Operation already in progress for client "${e}"`);this.pendingClients.add(e);try{let{versions:r}=await this.bus.request(M.listVersions,{clientId:e}),i=r.find(e=>e.version===t);if(i===void 0)throw Error(`client.setActive: version '${t}' is not installed for client '${e}'`);let a=this.definitionLookup.getDefinition(e);if(a===void 0)throw Error(`client.setActive: no definition registered for client '${e}'`);a.binary!==void 0&&P(`client.setActive`,e,t,a.binary.supportedVersions,`requested binary version`);let o=F(a.versionCommand);if(o===void 0)throw Error(`client.setActive: no versionCommand registered for client '${e}'`);if(!await this.resolver.isExpectedInstallPath(i.installPath,e,t))throw Error(`client.setActive: stored installPath "${i.installPath}" does not match the expected install directory for ${e}@${t}`);return await n(this.strategyDeps.exec,i.installPath,o,t),await this.patchActiveVersion(e,t,`set-active`),{clientId:e,activeVersion:t}}finally{this.pendingClients.delete(e)}}async handleUninstall(e,t){if(this.pendingClients.has(e))throw Error(`Operation already in progress for client "${e}"`);this.pendingClients.add(e);try{let{versions:n}=await this.bus.request(M.listVersions,{clientId:e}),r=n.find(e=>e.version===t);if(r===void 0)throw Error(`client.uninstall: version '${t}' is not installed for client '${e}'`);let{removedVersion:i,previousActiveVersion:o,activeVersion:s}=await this.bus.request(M.removeVersionAndClearActive,{clientId:e,version:t,updatedAt:Date.now()});if(i===null)throw Error(`client.uninstall: failed to delete version '${t}' for client '${e}'`);let c=r.installPath,l=typeof c==`string`&&c.length>0?a.resolve(c):null;if(typeof c!=`string`||c.length===0||l===null||!a.isAbsolute(c)||!await this.resolver.isExpectedInstallPath(l,e,t)?console.warn(`[ClientBinaryManager] Skipping removeDirectory: stored installPath "${String(c)}" does not match the expected install directory for ${e}@${t}`):await this.strategyDeps.removeDirectory(l).catch(n=>{console.warn(`[ClientBinaryManager] Failed to remove binary directory "${l}" for ${e}@${t}:`,n)}),o!==null&&s===null)try{await this.bus.emit(C.version.changed,{clientId:e,previousActiveVersion:o,activeVersion:null,reason:`uninstall`})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}return{clientId:e,removedVersion:t,activeVersion:s}}finally{this.pendingClients.delete(e)}}async patchActiveVersion(e,t,n){let r=(await this.bus.request(M.setActiveVersion,{clientId:e,activeVersion:t,updatedAt:Date.now()})).previousActiveVersion;if(r!==t)try{await this.bus.emit(C.version.changed,{clientId:e,previousActiveVersion:r,activeVersion:t,reason:n})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}return r}requireManagedDefinition(e,t){let n=this.definitionLookup.getDefinition(e);if(n===void 0)throw Error(`${t}: no definition registered for client '${e}'`);let r=n.managedInstall;if(r===void 0)throw Error(`${t}: client '${e}' does not declare a managed install descriptor`);return{definition:n,descriptor:r}}async withClientLock(e,t){if(this.pendingClients.has(e))throw Error(`Operation already in progress for client "${e}"`);this.pendingClients.add(e);try{return await t()}catch(t){throw this.pendingClients.delete(e),t}}startInstallJob(e,t,n,r,i,a){let o={jobId:crypto.randomUUID(),clientId:e,version:t,strategy:n.type,status:`pending`,makeActive:i,reason:a};return this.jobRunner.startJob(o,n,e=>{this.bus.emit(C.installJob.progress,e).catch(e=>{console.warn(`[ClientBinaryManager] Failed to emit client.installJob.progress:`,e)})},this.makeCompletionCallback(),async e=>{this.pendingClients.delete(e.clientId),await this.bus.emit(C.installJob.completed,e).catch(e=>{console.warn(`[ClientBinaryManager] Failed to emit client.installJob.completed:`,e)})},r.postInstall,F(r.versionCommand)),o.jobId}makeCompletionCallback(){return async({clientId:e,version:t,installPath:n,makeActive:r,reason:i})=>{let a=Date.now();await D(this.bus,{clientId:e,configDir:this.resolveManagedConfigDir(e),phase:`managed-install`,binaryVersion:t});let o=await this.bus.request(M.recordInstalledVersion,{versionRecord:{id:crypto.randomUUID(),clientId:e,version:t,installPath:n,installedAt:a,createdAt:a},makeActive:r,updatedAt:a});if(r&&o.previousActiveVersion!==o.activeVersion)try{await this.bus.emit(C.version.changed,{clientId:e,previousActiveVersion:o.previousActiveVersion,activeVersion:o.activeVersion,reason:i})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}}}resolveManagedConfigDir(e){return a.join(this.resolvedConfigBasePath,e,`config`)}};function I(e,t){return`${e}${t}`}function L(e,t){return`${e}${t}`}var Pe=class{records=new Map;bySupervisorSessionId=new Map;byPidClientId=new Map;byAdapterSessionClientId=new Map;adapterOwnedSessions=new Set;set(e){let t=this.records.get(e.clientRuntimeId);t&&this.removeIndexEntries(t),this.records.set(e.clientRuntimeId,e),this.addIndexEntries(e)}setFromStorage(e,t,n){this.records.set(e.clientRuntimeId,e),e.supervisorSessionId!==void 0&&this.bySupervisorSessionId.set(e.supervisorSessionId,e.clientRuntimeId),t-e.updatedAt<=n&&(e.pid!==void 0&&this.byPidClientId.set(I(e.pid,e.clientId),e.clientRuntimeId),e.adapterSessionId!==void 0&&this.byAdapterSessionClientId.set(L(e.adapterSessionId,e.clientId),e.clientRuntimeId))}delete(e){let t=this.records.get(e);t&&(this.removeIndexEntries(t),t.adapterSessionId!==void 0&&this.adapterOwnedSessions.delete(L(t.adapterSessionId,t.clientId)),this.records.delete(e))}get(e){return this.records.get(e)}findByEvidence(e,t,n,r){if(e!==void 0){let t=this.bySupervisorSessionId.get(e);if(t!==void 0)return this.records.get(t)}if(t!==void 0){let e=this.byPidClientId.get(I(t,r));if(e!==void 0)return this.records.get(e)}if(n!==void 0){let e=this.byAdapterSessionClientId.get(L(n,r));if(e!==void 0)return this.records.get(e)}}values(){return this.records.values()}clear(){this.records.clear(),this.bySupervisorSessionId.clear(),this.byPidClientId.clear(),this.byAdapterSessionClientId.clear(),this.adapterOwnedSessions.clear()}markAdapterOwned(e,t){this.adapterOwnedSessions.add(L(e,t))}hasAdapterSession(e,t){return this.adapterOwnedSessions.has(L(e,t))}get size(){return this.records.size}addIndexEntries(e){e.supervisorSessionId!==void 0&&this.bySupervisorSessionId.set(e.supervisorSessionId,e.clientRuntimeId),e.pid!==void 0&&this.byPidClientId.set(I(e.pid,e.clientId),e.clientRuntimeId),e.adapterSessionId!==void 0&&this.byAdapterSessionClientId.set(L(e.adapterSessionId,e.clientId),e.clientRuntimeId)}removeIndexEntries(e){e.supervisorSessionId!==void 0&&this.bySupervisorSessionId.delete(e.supervisorSessionId),e.pid!==void 0&&this.byPidClientId.delete(I(e.pid,e.clientId)),e.adapterSessionId!==void 0&&this.byAdapterSessionClientId.delete(L(e.adapterSessionId,e.clientId))}};const R=[`observed`,`started`],z=r.object({clientRuntimeId:r.string(),clientId:r.string(),status:r.enum(R),supervisorSessionId:r.string().optional(),pid:r.number().int().positive().optional(),parentPid:r.number().int().positive().optional(),adapterSessionId:r.string().optional(),sessionId:r.string().optional(),cwd:r.string().optional(),argv:r.array(r.string()).optional(),metadata:r.record(r.string(),r.unknown()).optional(),observedAt:r.number().int().nonnegative(),createdAt:r.number().int().nonnegative(),updatedAt:r.number().int().nonnegative()}),B=s(`client-runtime:storage`,{upsert:{request:z,response:r.object({success:r.boolean()})},loadAll:{request:r.object({}),response:r.object({records:r.array(z)})}}),V=B.subjects;function Fe(e){return e.supervisorSessionId!==void 0||e.adapterSessionId!==void 0}function H(e){return{...e,argv:e.argv===void 0?void 0:[...e.argv],metadata:e.metadata===void 0?void 0:structuredClone(e.metadata)}}function Ie(e){return Math.max(Date.now(),e+1)}function Le(e,t){let n=!1;return t.supervisorSessionId!==void 0&&e.supervisorSessionId!==t.supervisorSessionId&&(e.supervisorSessionId=t.supervisorSessionId,n=!0),t.pid!==void 0&&e.pid!==t.pid&&(e.pid=t.pid,n=!0),t.parentPid!==void 0&&e.parentPid!==t.parentPid&&(e.parentPid=t.parentPid,n=!0),t.adapterSessionId!==void 0&&e.adapterSessionId!==t.adapterSessionId&&(e.adapterSessionId=t.adapterSessionId,n=!0),t.sessionId!==void 0&&e.sessionId!==t.sessionId&&(e.sessionId=t.sessionId,n=!0),t.cwd!==void 0&&e.cwd!==t.cwd&&(e.cwd=t.cwd,n=!0),t.argv!==void 0&&JSON.stringify(e.argv)!==JSON.stringify(t.argv)&&(e.argv=[...t.argv],n=!0),t.metadata!==void 0&&JSON.stringify(e.metadata)!==JSON.stringify(t.metadata)&&(e.metadata=structuredClone(t.metadata),n=!0),n}var Re=class{runtimeMap=new Pe;bus;constructor(e){this.bus=e}async loadFromStorage(){if(!this.bus)return;let e=await this.bus.requestOptional(V.loadAll,{});if(!e.handled)return;let t=Date.now();for(let n of e.data.records)this.runtimeMap.setFromStorage(H(n),t,864e5)}async upsertRuntime(e){let t=this.runtimeMap.findByEvidence(e.supervisorSessionId,e.pid,e.adapterSessionId,e.clientId);if(t){let n=t.status===`observed`,r=n&&Fe(e),i=Le(t,e),a=n&&e.observedAt>t.observedAt;return r&&(t.status=`started`),(i||r||a)&&(t.updatedAt=Ie(t.updatedAt),a&&(t.observedAt=e.observedAt),this.runtimeMap.set(t),await this.persistRecord(t)),{clientRuntimeId:t.clientRuntimeId,created:!1,promoted:r,record:H(t)}}let n=Date.now(),r=o(),i=Fe(e)?`started`:`observed`,a={clientRuntimeId:r,clientId:e.clientId,status:i,supervisorSessionId:e.supervisorSessionId,pid:e.pid,parentPid:e.parentPid,adapterSessionId:e.adapterSessionId,sessionId:e.sessionId,cwd:e.cwd,argv:e.argv?[...e.argv]:void 0,metadata:e.metadata?structuredClone(e.metadata):void 0,observedAt:e.observedAt,createdAt:n,updatedAt:n};return this.runtimeMap.set(a),await this.persistRecord(a),{clientRuntimeId:r,created:!0,promoted:!1,record:H(a)}}getRuntime(e){let t=this.runtimeMap.get(e);return t?H(t):void 0}markAdapterOwned(e,t){this.runtimeMap.markAdapterOwned(e,t)}hasAdapterSession(e,t){return this.runtimeMap.hasAdapterSession(e,t)}clear(){this.runtimeMap.clear()}get size(){return this.runtimeMap.size}async persistRecord(e){this.bus&&await this.bus.requestOptional(V.upsert,H(e))}};const U=r.object({eventName:r.string(),receivedAt:r.number().int().finite().nonnegative().describe(`Unix epoch timestamp in milliseconds`),payload:r.record(r.string(),r.unknown()),metadata:r.record(r.string(),r.unknown()).optional()}),ze=/^[a-z0-9-]+$/;function W(e,t=`canonicalizeClientId`){let n=e.trim().toLowerCase(),r=n.startsWith(`client:`)?n.slice(7):n;if(r.length===0)throw Error(`[${t}] clientId must be a non-empty string`);if(!ze.test(r))throw Error(`[${t}] clientId must contain only lowercase letters, numbers, and hyphens after an optional client: prefix`);return r}function Be(e){return{subject:`hook.received`,$meta:{namespace:`client:${W(e,`createRawClientHookReceivedSubject`)}`,isRequest:!1,local:!1,channel:!1}}}const Ve=5e3,He=r.object({exitCode:r.number().int().min(0).max(255).default(0),stdout:r.string().default(``),stderr:r.string().default(``)});function Ue(e){return{subject:`hook.handle`,$meta:{namespace:`client:${W(e,`createRawClientHookHandleSubject`)}`,isRequest:!0,local:!1,channel:!1}}}function We(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Ge(e,t){return We(e[t])}function Ke(e){return{clientId:e.clientId,source:`adapter-derived`,observedAt:Date.now(),...e.sessionId!==void 0&&{sessionId:e.sessionId},...e.adapterSessionId!==void 0&&{adapterSessionId:e.adapterSessionId}}}function qe(e){try{e().catch(Je)}catch(e){Je(e)}}function Je(e){(process.env.DEBUG||process.env.MAKAIO_DEBUG)&&console.debug(`[emitBestEffort] observed-semantics emission failed`,e)}function Ye(e,t){return{subject:t,$meta:{namespace:`client:${W(e,`createClientWiringSubjectDef`)}`,isRequest:!0,local:!1,channel:!1}}}function Xe(e){return Ye(e,`wiring.list`)}const Ze=r.string().min(1).refine(a.isAbsolute,{message:`projectDir must be an absolute path`}),Qe=r.object({entries:r.array(w)}),$e=r.object({applied:r.number().int().nonnegative(),skipped:r.number().int().nonnegative()}),et=r.object({removed:r.number().int().nonnegative()}),tt=r.object({clientId:r.string().trim().min(1),entries:r.array(w)});function nt(e){if(e!==void 0&&!a.isAbsolute(e))throw Error(`projectDir must be an absolute path, got: ${e}`)}var rt=class extends f{accountRegistry;runtimeRegistry;latestSnapshots=new Map;activeIdentities=new Map;constructor(e=c,t=new _e,n=new Re(e)){super(e),this.accountRegistry=t,this.runtimeRegistry=n}async onInit(){await this.runtimeRegistry.loadFromStorage(),this.registerHandler(C.account.observe,e=>this.handleAccountObserve(e)),this.registerHandler(C.usage.ingest,e=>this.handleUsageIngest(e)),this.registerHandler(C.scan,async e=>{let t=await this.scanClients(e.payload.targets);e.setResult({results:t})}),this.registerHandler(C.runtime.observe,e=>this.handleRuntimeObserve(e)),this.registerHandler(C.runtime.isAdapterManaged,e=>{let{adapterSessionId:t,clientId:n}=e.payload;e.setResult({managed:this.runtimeRegistry.hasAdapterSession(t,n)})}),this.registerHandler(C.wiring.list,async e=>{let t=await this.listWirings(e.payload);e.setResult({results:t})}),this.registerHandler(C.account.activate,e=>{this.activeIdentities.set(e.payload.clientId,{clientAccountId:e.payload.clientAccountId,identifiers:e.payload.identifiers,displayLabel:e.payload.displayLabel}),e.setResult({accepted:!0})}),this.registerHandler(C.account.getActive,e=>{let t=this.activeIdentities.get(e.payload.clientId);e.setResult({identity:t??null})})}onDestroy(){this.latestSnapshots.clear(),this.activeIdentities.clear(),this.accountRegistry.clear(),this.runtimeRegistry.clear()}getLatestSnapshot(e){return this.latestSnapshots.get(e)}async handleAccountObserve(e){let t=this.accountRegistry.upsertAccount({clientId:e.payload.clientId,identifiers:e.payload.identifiers,displayLabel:e.payload.displayLabel}),n=this.latestSnapshots.get(t.clientAccountId),r=ot(this.consolidateMergedSnapshots(t.clientAccountId,t.mergedAccountIds)??n,t.displayLabel);r&&this.latestSnapshots.set(t.clientAccountId,r),r&&(t.mergedAccountIds.length>0||r!==n)&&await this.bus.emit(C.usage.snapshot,r),e.setResult({clientAccountId:t.clientAccountId,displayLabel:t.displayLabel})}async handleUsageIngest(e){let t=this.accountRegistry.upsertAccount({clientId:e.payload.clientId,identifiers:e.payload.account.identifiers,displayLabel:e.payload.account.displayLabel});this.consolidateMergedSnapshots(t.clientAccountId,t.mergedAccountIds);let n=it(t.clientAccountId,e.payload,t.displayLabel),r=ot(at(this.latestSnapshots.get(t.clientAccountId),n),t.displayLabel);this.latestSnapshots.set(t.clientAccountId,r),await this.bus.emit(C.usage.snapshot,r),e.setResult({clientAccountId:t.clientAccountId,snapshot:r})}async handleRuntimeObserve(e){let{payload:t}=e;if(t.supervisorSessionId===void 0&&t.pid===void 0&&t.adapterSessionId===void 0)throw Error(`client.runtime.observe: at least one hard-evidence field is required (supervisorSessionId, pid, or adapterSessionId)`);let{record:n,...r}=await this.runtimeRegistry.upsertRuntime(t);t.source.layer===`adapter`&&t.adapterSessionId!==void 0&&this.runtimeRegistry.markAdapterOwned(t.adapterSessionId,t.clientId),(r.created||r.promoted)&&await this.bus.emit(C.runtime.started,{clientRuntimeId:n.clientRuntimeId,clientId:n.clientId,status:n.status,source:t.source,observedAt:t.observedAt,supervisorSessionId:n.supervisorSessionId,pid:n.pid,parentPid:n.parentPid,adapterSessionId:n.adapterSessionId,sessionId:n.sessionId,cwd:n.cwd,argv:n.argv,metadata:n.metadata}),e.setResult({clientRuntimeId:r.clientRuntimeId,created:r.created,promoted:r.promoted})}async scanClients(e){let t=e??await this.listScannableStoredClients();if(t.length===0)return[];let n=Array.from(new Set(t.map(e=>e.binaryName))),{results:r}=await this.bus.request(ue.scan,{binaries:n}),i=new Map(r.map(e=>[e.binary,e]));return t.map(e=>{let t=i.get(e.binaryName),n=t?.found??!1,r=t?.version,a=t?.path;return{clientId:e.clientId,found:n,...a!==void 0&&{binaryPath:a},version:r,warningMessage:ct(n,r,e.supportedVersions)}})}async listScannableStoredClients(){let{clients:e}=await this.bus.request(de.list,{});return e.filter(st).map(e=>({clientId:e.id,binaryName:e.binary.name,supportedVersions:e.binary.supportedVersions}))}async listWirings(e){nt(e.projectDir);let{clients:t}=await this.bus.request(de.list,{}),n=e.clientId===void 0?void 0:W(e.clientId,`listWirings`),r=t.filter(e=>e.enabled).filter(e=>n===void 0||e.id===n),i=await Promise.allSettled(r.map(async t=>{let n=Xe(t.id),r=await this.bus.requestOptional(n,{projectDir:e.projectDir,makaioCommand:e.makaioCommand});return r.handled?{clientId:t.id,entries:r.data.entries}:null}));for(let e=0;e<i.length;e++){let t=i[e];if(t.status===`rejected`){let n=t.reason instanceof Error?t.reason.message:String(t.reason);console.warn(`[ClientRuntimeService] wiring.list for ${r[e].id} failed: ${n}`)}}return i.filter(e=>e.status===`fulfilled`).map(e=>e.value).filter(e=>e!==null)}consolidateMergedSnapshots(e,t){let n=this.latestSnapshots.get(e),r=!1;for(let i of t){if(i===e)continue;let t=this.latestSnapshots.get(i);t&&(n===void 0||t.observedAt>n.observedAt)&&(n={...t,clientAccountId:e},r=!0),this.latestSnapshots.delete(i)}return n&&this.latestSnapshots.set(e,n),r?n:void 0}};function it(e,t,n){return{clientAccountId:e,clientId:t.clientId,observedAt:t.observedAt,source:t.source,displayLabel:n,usage:{windows:t.usage.windows.map(e=>({...e}))},metadata:t.metadata?{...t.metadata}:void 0}}function at(e,t){return e&&e.observedAt>t.observedAt?e:t}function ot(e,t){return!e||t===void 0||e.displayLabel===t?e:{...e,displayLabel:t}}function st(e){return e.enabled&&e.binary!==void 0}function ct(e,t,n){if(e&&t!==void 0&&t!==`unknown`&&n!==void 0&&!d(t,n))return`Unsupported version: requires ${n}`}var lt=class extends f{constructor(e=c){super(e)}onInit(){this.registerHandler(C.config.prime,async e=>{e.setResult(await D(this.bus,e.payload))})}};const G=se,K=r.string().trim().min(1),q=s(`client-profile:storage`,{get:{request:r.object({clientId:K,name:S}),response:r.object({record:G.nullable()})},getById:{request:r.object({id:K}),response:r.object({record:G.nullable()})},list:{request:r.object({clientId:K}),response:r.object({records:r.array(G)})},set:{request:G,response:r.object({success:r.boolean()})},delete:{request:r.object({clientId:K,name:S}),response:r.object({success:r.boolean()})},clearDefault:{request:r.object({clientId:K}),response:r.object({success:r.boolean()})},setDefault:{request:r.object({clientId:K,name:S}),response:r.object({record:G.nullable()})}}),J=q.subjects;function ut(e,t,n){let r=a.resolve(e),i=a.resolve(t),o=a.relative(r,i);if(o!==``&&!o.startsWith(`..`)&&!a.isAbsolute(o))return i;throw Error(`${n} refused to access path outside client profile root`)}var dt=class extends f{clientsBasePath;constructor(e,t){super(e),this.clientsBasePath=t}async onInit(){this.registerCreateHandler(),this.registerListHandler(),this.registerGetHandler(),this.registerUpdateHandler(),this.registerDeleteHandler(),this.registerSetDefaultHandler()}registerCreateHandler(){this.registerHandler(C.profile.create,async e=>{let t=W(e.payload.clientId,`profile.create`),{name:n,description:r}=e.payload;if((await this.bus.request(J.get,{clientId:t,name:n})).record!==null)throw Error(`Profile '${n}' already exists for client '${t}'`);let s=a.join(this.clientsBasePath,t,`profiles`),c=ut(s,a.join(s,n),`profile.create`);await i.mkdir(c,{recursive:!0});try{await D(this.bus,{clientId:t,configDir:c,phase:`profile-create`});let i=Date.now(),a={id:o(),clientId:t,name:n,description:r??null,configDir:c,isDefault:!1,createdAt:i,updatedAt:i};await this.bus.request(J.set,a),e.setResult({profile:a})}catch(e){throw await i.rm(c,{recursive:!0,force:!0}),e}})}registerListHandler(){this.registerHandler(C.profile.list,async e=>{let t=W(e.payload.clientId,`profile.list`),n=await this.bus.request(J.list,{clientId:t});e.setResult({profiles:n.records})})}registerGetHandler(){this.registerHandler(C.profile.get,async e=>{let t=W(e.payload.clientId,`profile.get`),n=await this.bus.request(J.get,{clientId:t,name:e.payload.name});e.setResult({profile:n.record})})}registerUpdateHandler(){this.registerHandler(C.profile.update,async e=>{let t=W(e.payload.clientId,`profile.update`),{name:n,description:r}=e.payload,i=await this.bus.request(J.get,{clientId:t,name:n});if(i.record===null)throw Error(`Profile '${n}' not found for client '${t}'`);let a={...i.record,description:r===void 0?i.record.description:r,updatedAt:Date.now()};await this.bus.request(J.set,a),e.setResult({profile:a})})}registerDeleteHandler(){this.registerHandler(C.profile.delete,async e=>{let t=W(e.payload.clientId,`profile.delete`),{name:n}=e.payload,r=await this.bus.request(J.get,{clientId:t,name:n});r.record!==null&&(ut(a.join(this.clientsBasePath,t,`profiles`),r.record.configDir,`profile.delete`),await i.rm(r.record.configDir,{recursive:!0,force:!0}));let o=await this.bus.request(J.delete,{clientId:t,name:n});e.setResult({success:o.success})})}registerSetDefaultHandler(){this.registerHandler(C.profile.setDefault,async e=>{let t=W(e.payload.clientId,`profile.setDefault`),{name:n}=e.payload,r=await this.bus.request(J.setDefault,{clientId:t,name:n});if(r.record===null)throw Error(`Profile '${n}' not found for client '${t}'`);e.setResult({profile:r.record})})}};function ft(e){return{subject:`sessionConfig.setup`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}function pt(e){return{subject:`sessionConfig.destroy`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}const mt=()=>Date.now();function ht(){let e=T.platform();if(e===`darwin`||e===`linux`||e===`win32`)return e;throw Error(`client.sessionConfig does not support platform '${e}'`)}function gt(e,t,n){let r=le.safeParse(t);if(!r.success)throw Error(`${n} received an unsafe lease ID`);let i=a.resolve(e),o=a.resolve(i,r.data),s=a.relative(i,o);if(s===``||!s.startsWith(`..`)&&!a.isAbsolute(s))return o;throw Error(`${n} refused to access path outside client sessions root`)}var _t=class extends f{clientsBasePath;getNow;liveLeasesByClient=new Map;liveLeasesByOwner=new Map;constructor(e,t,n=mt){super(e),this.clientsBasePath=t,this.getNow=n}async onInit(){this.registerCreateHandler(),this.registerHandler(C.sessionConfig.destroy,async e=>{let{clientId:t,leaseId:n}=e.payload,r=W(t,`sessionConfig.destroy`),i=this.resolveClientSessionDir(r,n,`sessionConfig.destroy`),a=this.getLiveLease(r,n);a===void 0?await this.destroyClientSessionDir(r,i):await this.releaseLiveLease(a),e.setResult({success:!0})}),this.registerHandler(C.sessionConfig.cleanup,async e=>{let{clientId:t}=e.payload,n=t===void 0?void 0:W(t,`sessionConfig.cleanup`),r=await this.cleanupOrphanedDirs(n);e.setResult({removed:r})}),this.registerHandler(fe.closed,async e=>{await this.destroyOwnedLeases(e.payload.sessionId)}),await this.cleanupOrphanedDirs()}registerCreateHandler(){this.registerHandler(C.sessionConfig.create,async e=>{let{clientId:t,leaseId:n,ownerSessionId:r,profileName:a,baseConfigDir:o,projectDir:s,configInheritance:c=`full`}=e.payload,l=W(t,`sessionConfig.create`),u=this.resolveClientSessionDir(l,n,`sessionConfig.create`),d=this.reserveLiveLease({clientId:l,leaseId:n,...r===void 0?{}:{ownerSessionId:r}});try{await i.mkdir(u,{recursive:!0});let t=await this.resolveBaseConfigDir(l,u,a,o),r=ft(l),f=await this.bus.requestOptional(r,{sessionDir:u,baseConfigDir:t,projectDir:s,platform:ht(),configInheritance:c}),p=f.handled?f.data.env??{}:{},ee=f.handled?f.data.authMaterialized:!1;if(await D(this.bus,{clientId:l,configDir:u,phase:`session-create`,projectDir:s}),d.releaseRequested)throw Error(`Config lease '${n}' was released while it was being created`);e.setResult({sessionDir:u,env:p,authMaterialized:ee}),d.state=`ready`}catch(e){try{await this.beginLeaseCleanup(d)}catch(t){throw AggregateError([e,t],`Client session config creation and rollback both failed`)}throw e}finally{d.settleCreation(),d.state===`released`&&this.untrackLiveLease(d)}})}async resolveBaseConfigDir(e,t,n,r){if(r!==void 0)return r;if(n!==void 0){let t=await this.bus.request(J.get,{clientId:e,name:n});if(t.record!==null)return t.record.configDir;throw Error(`Profile '${n}' not found for client '${e}'`)}let i=(await this.bus.request(J.list,{clientId:e})).records.find(e=>e.isDefault);return i?i.configDir:t}async cleanupOrphanedDirs(e){let t=[],n=this.getNow(),r=e===void 0?await this.listClientIds():[e];return await Promise.all(r.map(async e=>{let r=a.join(this.clientsBasePath,e,`sessions`),o=await i.readdir(r).catch(()=>[]);await Promise.all(o.map(async a=>{if(!le.safeParse(a).success)return;let o=gt(r,a,`sessionConfig.cleanup`),s;try{s=await i.stat(o)}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return;throw e}let c=s.birthtimeMs>0?s.birthtimeMs:s.ctimeMs;s.isDirectory()&&n-c>36e5&&!this.isLiveLease(e,a)&&(await this.destroyClientSessionDir(e,o),t.push(o))}))})),t}async destroyOwnedLeases(e){let t=[...this.liveLeasesByOwner.get(e)??[]],n=(await Promise.allSettled(t.map(async e=>{this.getLiveLease(e.clientId,e.leaseId)===e&&await this.releaseLiveLease(e)}))).flatMap(e=>e.status===`rejected`?[e.reason]:[]);if(n.length>0)throw AggregateError(n,`Failed to release config leases owned by session '${e}'`)}async destroyClientSessionDir(e,t){try{await this.bus.requestOptional(pt(e),{sessionDir:t,platform:ht()})}finally{await i.rm(t,{recursive:!0,force:!0})}}isLiveLease(e,t){return this.getLiveLease(e,t)!==void 0}getLiveLease(e,t){return this.liveLeasesByClient.get(e)?.get(t)}resolveClientSessionDir(e,t,n){return gt(a.join(this.clientsBasePath,e,`sessions`),t,n)}reserveLiveLease(e){if(this.isLiveLease(e.clientId,e.leaseId))throw Error(`Config lease '${e.leaseId}' is already active for client '${e.clientId}'`);let t=Promise.withResolvers(),n={...e,state:`creating`,releaseRequested:!1,creationSettled:t.promise,settleCreation:()=>t.resolve()},r=this.liveLeasesByClient.get(n.clientId)??new Map;if(r.set(n.leaseId,n),this.liveLeasesByClient.set(n.clientId,r),n.ownerSessionId!==void 0){let e=this.liveLeasesByOwner.get(n.ownerSessionId)??new Set;e.add(n),this.liveLeasesByOwner.set(n.ownerSessionId,e)}return n}async releaseLiveLease(e){if(this.getLiveLease(e.clientId,e.leaseId)!==e){e.releasePromise!==void 0&&await e.releasePromise;return}if(e.releaseRequested=!0,e.state===`creating`){await e.creationSettled,e.releasePromise!==void 0&&await e.releasePromise;return}await this.beginLeaseCleanup(e)}beginLeaseCleanup(e){if(e.releasePromise!==void 0)return e.releasePromise;if(this.getLiveLease(e.clientId,e.leaseId)!==e)return Promise.resolve();let t=e.state===`creating`;e.state=`releasing`;let n=this.resolveClientSessionDir(e.clientId,e.leaseId,`sessionConfig.release`);return e.releasePromise=this.destroyClientSessionDir(e.clientId,n).finally(()=>{e.state=`released`,t||this.untrackLiveLease(e)}),e.releasePromise}untrackLiveLease(e){let t=this.liveLeasesByClient.get(e.clientId);if(t?.get(e.leaseId)===e&&(t.delete(e.leaseId),t.size===0&&this.liveLeasesByClient.delete(e.clientId),e.ownerSessionId!==void 0)){let t=this.liveLeasesByOwner.get(e.ownerSessionId);t?.delete(e),t?.size===0&&this.liveLeasesByOwner.delete(e.ownerSessionId)}}async listClientIds(){return(await i.readdir(this.clientsBasePath,{withFileTypes:!0}).catch(()=>[])).filter(e=>e.isDirectory()).map(e=>e.name)}};const vt=new Set([`hook.received`,`hook.handle`]);function yt(e,t){return c.registerNamespace(s(`client:${e}`,{"hook.received":U,"hook.handle":{request:U,response:He},...t})).subjects}function bt(e,t){let n=Object.keys(t).filter(e=>vt.has(e));if(n.length===0)return;let r=n.join(`, `);throw Error([`[createClientNamespace] additionalSchemas for client:${e}`,`cannot override reserved shared hook subjects: ${r}`].join(` `))}function xt(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n||!(e in n))return!1;n=n[e]}return!0}function St(e,t,n){let r=Object.keys(n).filter(e=>!xt(t,e));if(r.length!==0)throw Error(`[createClientNamespace] client:${e} was already registered without required subjects: ${r.join(`, `)}`)}function Ct(e,t){let n=W(e,`createClientNamespace`),r=t??{};bt(n,r);let i=yt(n,r);return St(n,i,r),{namespaceDomain:`client:${n}`,subjects:i}}const Y=g(`client_runtimes`,e=>({id:e.text(`id`).primaryKey(),clientId:e.text(`client_id`).notNull(),status:e.text(`status`).notNull(),supervisorSessionId:e.text(`supervisor_session_id`),pid:e.int4(`pid`),parentPid:e.int4(`parent_pid`),adapterSessionId:e.text(`adapter_session_id`),sessionId:e.text(`session_id`),cwd:e.text(`cwd`),argv:e.jsonCol(`argv`),metadata:e.jsonCol(`metadata`),observedAt:e.epochMs(`observed_at`).notNull(),createdAt:e.epochMs(`created_at`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()}),{sqlite:e=>[p(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),p(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),p(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)],postgres:e=>[m(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),m(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),m(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)]}),wt=Y.sqlite,Tt=Y.postgres,Et=h({clientRuntimes:wt},{clientRuntimes:Tt}),Dt=new Set(R);function Ot(e){if(!Dt.has(e.status))throw Error(`Unknown ClientRuntimeStatus in DB: '${e.status}'`);return{clientRuntimeId:e.id,clientId:e.clientId,status:e.status,supervisorSessionId:e.supervisorSessionId??void 0,pid:e.pid??void 0,parentPid:e.parentPid??void 0,adapterSessionId:e.adapterSessionId??void 0,sessionId:e.sessionId??void 0,cwd:e.cwd??void 0,argv:e.argv??void 0,metadata:e.metadata??void 0,observedAt:e.observedAt,createdAt:e.createdAt,updatedAt:e.updatedAt}}function kt(e,t){let{clientRuntimes:n}=v(t,Et),r=e.on(V.upsert,async e=>{let r=e.payload,i={clientId:r.clientId,status:r.status,supervisorSessionId:r.supervisorSessionId??null,pid:r.pid??null,parentPid:r.parentPid??null,adapterSessionId:r.adapterSessionId??null,sessionId:r.sessionId??null,cwd:r.cwd??null,argv:r.argv??null,metadata:r.metadata??null,observedAt:r.observedAt,updatedAt:r.updatedAt};await t.insert(n).values({id:r.clientRuntimeId,createdAt:r.createdAt,...i}).onConflictDoUpdate({target:n.id,set:i,setWhere:oe(x`excluded.updated_at`,n.updatedAt)}),e.setResult({success:!0})}),i=e.on(V.loadAll,async e=>{let r=await t.select().from(n);e.setResult({records:r.map(Ot)})});return()=>{r(),i()}}const At=g(`client_binary_versions`,e=>({id:e.text(`id`).primaryKey(),clientId:e.text(`client_id`).notNull(),version:e.text(`version`).notNull(),installPath:e.text(`install_path`).notNull(),installedAt:e.epochMs(`installed_at`).notNull(),createdAt:e.epochMs(`created_at`).notNull()}),{sqlite:e=>[ee(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)],postgres:e=>[ne(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)]}),jt=At.sqlite,Mt=g(`client_binary_state`,e=>({clientId:e.text(`client_id`).primaryKey(),activeVersion:e.text(`active_version`),updatedAt:e.epochMs(`updated_at`).notNull()})),Nt=Mt.sqlite,Pt=At.postgres,Ft=Mt.postgres,X=h({clientBinaryVersions:jt,clientBinaryState:Nt},{clientBinaryVersions:Pt,clientBinaryState:Ft});function Z(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}function Q(e){return{clientId:e.clientId,activeVersion:e.activeVersion??null,updatedAt:e.updatedAt}}function It(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}async function Lt(e,t,n){await e.insert(n).values(It(t)).onConflictDoNothing({target:[n.clientId,n.version]})}function Rt(e,t,n){return{clientId:e,activeVersion:t,updatedAt:n}}async function zt(e,t,n,r,i){await e.insert(i).values(Rt(t,n,r)).onConflictDoUpdate({target:i.clientId,set:{activeVersion:n,updatedAt:r}})}async function Bt(e,t){let{clientBinaryVersions:n}=v(e,X);await Lt(e,t,n)}async function Vt(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=v(e,X);return _(e,async e=>{let[o]=await e.select().from(a).where(b(a.clientId,t.clientId)).limit(1),s=o?.activeVersion??null;return await Lt(e,t,i),n?(await zt(e,t.clientId,t.version,r,a),{previousActiveVersion:s,activeVersion:t.version}):{previousActiveVersion:s,activeVersion:s}})}async function Ht(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=v(e,X);return _(e,async e=>{let[i]=await e.select().from(r).where(b(r.clientId,t)).limit(1),a=await e.select().from(n).where(b(n.clientId,t));return{state:i?Q(i):null,versions:a.map(Z)}})}async function Ut(e){let{clientBinaryVersions:t,clientBinaryState:n}=v(e,X);return _(e,async e=>{let r=await e.select().from(n),i=await e.select().from(t);return{states:r.map(Q),versions:i.map(Z)}})}async function Wt(e,t){let{clientBinaryState:n}=v(e,X),r={clientId:t.clientId,activeVersion:t.activeVersion??null,updatedAt:t.updatedAt};await e.insert(n).values(r).onConflictDoUpdate({target:n.clientId,set:r})}async function Gt(e,t,n,r){let{clientBinaryState:i}=v(e,X);return _(e,async e=>{let[a]=await e.select().from(i).where(b(i.clientId,t)).limit(1),o=a?.activeVersion??null;return await zt(e,t,n,r,i),{previousActiveVersion:o,activeVersion:n}})}async function Kt(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=v(e,X);return _(e,async e=>{let[o]=await e.select().from(a).where(b(a.clientId,t)).limit(1),s=o?.activeVersion??null;if(!ie(await e.delete(i).where(y(b(i.clientId,t),b(i.version,n)))))return{removedVersion:null,previousActiveVersion:s,activeVersion:s};await e.update(a).set({activeVersion:null,updatedAt:r}).where(y(b(a.clientId,t),b(a.activeVersion,n)));let[c]=await e.select().from(a).where(b(a.clientId,t)).limit(1);return{removedVersion:n,previousActiveVersion:s,activeVersion:c?.activeVersion??null}})}function qt(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=v(t,X),i=[e.on(M.insertVersion,async e=>{await Bt(t,e.payload),e.setResult({success:!0})}),e.on(M.recordInstalledVersion,async e=>{let{versionRecord:n,makeActive:r,updatedAt:i}=e.payload,a=await Vt(t,n,r,i);e.setResult(a)}),e.on(M.listVersions,async e=>{let r=await t.select().from(n).where(b(n.clientId,e.payload.clientId));e.setResult({versions:r.map(Z)})}),e.on(M.getSnapshot,async e=>{let{state:n,versions:r}=await Ht(t,e.payload.clientId);e.setResult({state:n,versions:r})}),e.on(M.loadAllVersions,async e=>{let r=await t.select().from(n);e.setResult({versions:r.map(Z)})}),e.on(M.upsertState,async e=>{await Wt(t,e.payload),e.setResult({success:!0})}),e.on(M.setActiveVersion,async e=>{let{clientId:n,activeVersion:r,updatedAt:i}=e.payload,a=await Gt(t,n,r,i);e.setResult(a)}),e.on(M.getState,async e=>{let[n]=await t.select().from(r).where(b(r.clientId,e.payload.clientId)).limit(1);e.setResult({state:n?Q(n):null})}),e.on(M.loadAllState,async e=>{let n=await t.select().from(r);e.setResult({states:n.map(Q)})}),e.on(M.loadSnapshot,async e=>{let{states:n,versions:r}=await Ut(t);e.setResult({states:n,versions:r})}),e.on(M.removeVersionAndClearActive,async e=>{let{clientId:n,version:r,updatedAt:i}=e.payload,a=await Kt(t,n,r,i);e.setResult(a)})];return()=>{for(let e of i)e()}}const Jt=g(`client_profiles`,e=>({id:e.text(`id`).primaryKey(),clientId:e.text(`client_id`).notNull(),name:e.text(`name`).notNull(),description:e.text(`description`),configDir:e.text(`config_dir`).notNull(),isDefault:e.bool(`is_default`).notNull().default(!1),createdAt:e.epochMs(`created_at`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()}),{sqlite:e=>[te(`uq_client_profiles_client_name`).on(e.clientId,e.name),te(`uq_client_profiles_default`).on(e.clientId).where(x`${e.isDefault} = 1`)],postgres:e=>[re(`uq_client_profiles_client_name`).on(e.clientId,e.name),re(`uq_client_profiles_default`).on(e.clientId).where(x`${e.isDefault} = true`)]}),Yt=Jt.sqlite,Xt=Jt.postgres,Zt=h({clientProfiles:Yt},{clientProfiles:Xt});function $(e){return{id:e.id,clientId:e.clientId,name:e.name,description:e.description??null,configDir:e.configDir,isDefault:e.isDefault,createdAt:e.createdAt,updatedAt:e.updatedAt}}async function Qt(e,t,n){let{clientProfiles:r}=v(e,Zt),i=Date.now();return _(e,async e=>{let[a]=await e.select().from(r).where(y(b(r.clientId,t),b(r.name,n))).limit(1);if(a===void 0)return null;await e.update(r).set({isDefault:!1,updatedAt:i}).where(y(b(r.clientId,t),b(r.isDefault,!0))),await e.update(r).set({isDefault:!0,updatedAt:i}).where(y(b(r.clientId,t),b(r.name,n)));let[o]=await e.select().from(r).where(y(b(r.clientId,t),b(r.name,n))).limit(1);return o===void 0?null:$(o)})}function $t(e,t){let{clientProfiles:n}=v(t,Zt),r=[e.on(J.get,async e=>{let{clientId:r,name:i}=e.payload,[a]=await t.select().from(n).where(y(b(n.clientId,r),b(n.name,i))).limit(1);e.setResult({record:a?$(a):null})}),e.on(J.getById,async e=>{let[r]=await t.select().from(n).where(b(n.id,e.payload.id)).limit(1);e.setResult({record:r?$(r):null})}),e.on(J.list,async e=>{let r=await t.select().from(n).where(b(n.clientId,e.payload.clientId));e.setResult({records:r.map($)})}),e.on(J.set,async e=>{let r=e.payload,i={id:r.id,clientId:r.clientId,name:r.name,description:r.description??null,configDir:r.configDir,isDefault:r.isDefault,createdAt:r.createdAt,updatedAt:r.updatedAt};await t.insert(n).values(i).onConflictDoUpdate({target:n.id,set:{name:r.name,description:r.description??null,configDir:r.configDir,isDefault:r.isDefault,updatedAt:r.updatedAt}}),e.setResult({success:!0})}),e.on(J.delete,async e=>{let{clientId:r,name:i}=e.payload,a=await t.delete(n).where(y(b(n.clientId,r),b(n.name,i)));e.setResult({success:ie(a)})}),e.on(J.clearDefault,async e=>{await t.update(n).set({isDefault:!1,updatedAt:Date.now()}).where(y(b(n.clientId,e.payload.clientId),b(n.isDefault,!0))),e.setResult({success:!0})}),e.on(J.setDefault,async e=>{let{clientId:n,name:r}=e.payload,i=await Qt(t,n,r);e.setResult({record:i})})];return()=>{for(let e of r)e()}}var en=class{runtimeService;binaryManager;configPrimeService;profileService;sessionConfigService;constructor(e,t,n,r,i){this.runtimeService=e,this.binaryManager=t,this.configPrimeService=n,this.profileService=r,this.sessionConfigService=i}async init(){let e=(await Promise.allSettled([this.runtimeService.init(),this.binaryManager.init(),this.configPrimeService.init(),this.profileService.init(),this.sessionConfigService.init()])).filter(e=>e.status===`rejected`);if(e.length>0){for(let t=1;t<e.length;t++)console.warn(`[ClientsCoreService] Multiple init failures, secondary:`,e[t].reason);throw e[0].reason}}async destroy(){let e=(await Promise.allSettled([this.runtimeService.destroy(),this.binaryManager.destroy(),this.configPrimeService.destroy(),this.profileService.destroy(),this.sessionConfigService.destroy()])).filter(e=>e.status===`rejected`);for(let t of e)console.warn(`[ClientsCoreService] destroy failure:`,t.reason)}};const tn=l(`makaio.clients-core`);function nn(e){let t=[],n=()=>{for(let e of[...t].reverse())e()};try{for(let n of e)t.push(n())}catch(e){throw n(),e}return n}function rn(e={}){let{definitions:t=[],strategyDependencies:n,postInstallHandlers:r,binaryResolutionPolicy:i}=e,o=[...t];return{name:`makaio.clients-core`,displayName:`Clients Core`,version:`0.1.0`,critical:!0,namespaces:[ke,B,q],storage:{registerHandlers:ae((e,t)=>nn([()=>kt(e,t),()=>qt(e,t),()=>$t(e,t)]))},create:e=>{let t=new N(o),s=a.join(e.makaioHome,`clients`),c=new Ne(e.bus,{basePath:a.join(e.makaioHome,`binaries`),configBasePath:s,postInstallHandlers:r,...i!==void 0&&{resolutionPolicy:i}},t,n),l=new dt(e.bus,s),u=new _t(e.bus,s);return new en(new rt(e.bus),c,new lt(e.bus),l,u)}}}async function an(e,t){let n=await e.requestOptional(C.resolveBinary,{clientId:t});return n.handled?n.data:void 0}function on(e,t,n){return[...n??[],e,...t].map(ln).join(` `)}function sn(e,t,n,r,i){return on(e,[...i??[],...t.split(` `),n],r)}function cn(e){return e.runtimeCapabilities.hookEvents.filter(e=>e.frameworkSubject!==void 0).map(e=>({eventName:e.name,mode:e.mode}))}function ln(e){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)?e:`'${e.replaceAll(`'`,`'\\''`)}'`}export{Ze as AbsolutePathSchema,ge as BinaryNotFoundError,R as CLIENT_RUNTIME_STATUSES,_e as ClientAccountRegistry,De as ClientBinaryJobRunner,Ne as ClientBinaryManager,j as ClientBinaryStateRecordSchema,ke as ClientBinaryStorageNamespace,M as ClientBinaryStorageSubjects,A as ClientBinaryVersionRecordSchema,Ee as ClientBinaryVersionResolver,lt as ClientConfigPrimeService,N as ClientDefinitionRegistry,He as ClientHookHandleResponseSchema,G as ClientProfileRecordSchema,dt as ClientProfileService,q as ClientProfileStorageNamespace,J as ClientProfileStorageSubjects,Re as ClientRuntimeRegistry,rt as ClientRuntimeService,B as ClientRuntimeStorageNamespace,V as ClientRuntimeStorageSubjects,_t as ClientSessionConfigService,ce as ClientSubjects,tt as ClientWiringAggregatedResultSchema,$e as ClientWiringApplyResponseSchema,w as ClientWiringEntrySchema,Qe as ClientWiringListResponseSchema,et as ClientWiringRemoveResponseSchema,en as ClientsCoreService,tn as ClientsCoreToken,Ve as DEFAULT_HOOK_HANDLE_TIMEOUT_MS,U as RawClientHookPayloadSchema,z as RuntimeRecordSchema,nt as assertAbsoluteProjectDir,pe as atomicModifyFile,on as buildClientCommand,Ke as buildClientSessionBase,sn as buildHookCommand,W as canonicalizeClientId,Y as clientRuntimesDual,Ct as createClientNamespace,Xe as createClientWiringListSubjectDef,Ye as createClientWiringSubjectDef,rn as createClientsCorePackage,Ue as createRawClientHookHandleSubject,Be as createRawClientHookReceivedSubject,t as createStrategy,cn as deriveSessionEventDescriptors,qe as emitBestEffort,O as isPathWithinBase,Ge as pickNonEmptyString,We as pickNonEmptyStringValue,qt as registerDrizzleClientBinaryStorage,$t as registerDrizzleProfileStorage,kt as registerDrizzleRuntimeStorage,nn as registerStorageHandlersWithRollback,k as resolveAndValidateBasePath,an as resolveClientBinary,n as verifyInstalledVersion};
|
|
1
|
+
import{n as e,r as t,t as n}from"../client-binary-version-verifier-CaFlNNjs.mjs";import{z as r}from"zod";import*as i from"node:fs/promises";import*as a from"node:path";import{randomUUID as o}from"node:crypto";import{createBusNamespace as s}from"@makaio/framework/core";import{MakaioBus as c}from"@makaio/framework/bus";import{extensionToken as l,isUniversalRange as u,versionSatisfies as d}from"@makaio/framework/contracts";import{BaseService as f}from"@makaio/framework/service-base";import{index as p,unique as ee,uniqueIndex as te}from"drizzle-orm/sqlite-core";import{index as m,unique as ne,uniqueIndex as re}from"drizzle-orm/pg-core";import{defineDialectSchema as h,defineDualTable as g,didAffectRows as ie,executeTransaction as _,registerDrizzleHandlers as ae,resolveSchema as v}from"@makaio/framework/storage/drizzle";import{and as y,eq as b,gt as oe,sql as x}from"drizzle-orm";import{ClientProfileNameSchema as S,ClientProfileSchema as se,ClientSubjects as ce,ClientSubjects as C,ClientWiringEntrySchema as w,SessionConfigLeaseIdSchema as le}from"@makaio/framework/contracts/client";import*as T from"node:os";import{CLIDetectionSubjects as ue}from"@makaio/framework/services/cli-detection/namespace";import{ClientStorageSubjects as de}from"@makaio/framework/services/settings/storage";import{SessionSubjects as fe}from"@makaio/framework/contracts/session";async function pe(e,t,n,r,i){let a,o=(n.get(e)??Promise.resolve()).then(async()=>{let n=await i(r(await me(e,t)));n.changed&&await he(e,n.content),a=n.result}),s=o.then(()=>void 0,()=>void 0);n.set(e,s);try{await o}finally{n.get(e)===s&&n.delete(e)}return a}async function me(e,t){let n;try{n=await i.readFile(e,`utf-8`)}catch(e){if(e.code===`ENOENT`)return t;throw e}return JSON.parse(n)}async function he(e,t){let n=a.dirname(e),r=a.join(n,`${a.basename(e)}.${o()}.tmp`);await i.mkdir(n,{recursive:!0});try{await i.writeFile(r,`${JSON.stringify(t,null,2)}\n`,`utf-8`),await i.rename(r,e)}catch(e){throw await i.unlink(r).catch(()=>void 0),e}}var ge=class e extends Error{code=`BINARY_NOT_FOUND`;constructor(t){super(`client.resolveBinary: no binary found for client '${t}' — install a managed version or ensure the binary is on PATH`),this.name=`BinaryNotFoundError`,Error.captureStackTrace?.(this,e)}},_e=class{nextAccountSequence=1;accountIdsByIdentifier=new Map;accounts=new Map;upsertAccount(e){let t=ye(e.displayLabel),n=new Map;for(let t of e.identifiers)n.set(ve(e.clientId,t.scheme,t.value),t);let r=be(n,this.accountIdsByIdentifier,`strong`),i=be(n,this.accountIdsByIdentifier,`alias`),a=r[0]??(i.length===1?i[0]:i.length>1?xe(i):this.createAccount()),o=(r.length>0?Ce(a,r,i):[]).flatMap(e=>this.mergeInto(a,e)),s=this.accounts.get(a);if(!s)throw Error(`Client account registry invariant violated: missing account ${a}`);for(let[e,t]of n){let n=this.accountIdsByIdentifier.get(e);r.length===0&&t.strength===`alias`&&n!==void 0&&n!==a||(s.identifiers.set(e,t),this.accountIdsByIdentifier.set(e,a))}return t!==void 0&&(s.displayLabel=t),{clientAccountId:a,displayLabel:s.displayLabel,mergedAccountIds:o}}clear(){this.accountIdsByIdentifier.clear(),this.accounts.clear(),this.nextAccountSequence=1}createAccount(){let e=`client-account-${this.nextAccountSequence}`;return this.nextAccountSequence+=1,this.accounts.set(e,{clientAccountId:e,identifiers:new Map}),e}mergeInto(e,t){if(e===t)return[];let n=this.accounts.get(e),r=this.accounts.get(t);if(!n||!r)return[];for(let[t,i]of r.identifiers)n.identifiers.set(t,i),this.accountIdsByIdentifier.set(t,e);return n.displayLabel===void 0&&r.displayLabel!==void 0&&(n.displayLabel=r.displayLabel),this.accounts.delete(t),[t]}};function ve(e,t,n){return`${e}\u0000${t}\u0000${n}`}function ye(e){return e?.trim()||void 0}function be(e,t,n){let r=new Set;for(let[i,a]of e){if(a.strength!==n)continue;let e=t.get(i);e!==void 0&&r.add(e)}return Array.from(r).sort(E)}function xe(e){return[...e].sort(E)[0]}function E(e,t){let n=Se(e),r=Se(t);return n!==null&&r!==null&&n!==r?n-r:e.localeCompare(t)}function Se(e){let t=e.match(/^client-account-(\d+)$/);return t?Number(t[1]):null}function Ce(e,t,n){let r=new Set([...t,...n]);return r.delete(e),Array.from(r).sort(E)}function we(e){return{subject:`config.prime`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}async function D(e,t){let n=await e.requestOptional(we(t.clientId),t);return n.handled?n.data:{primed:!1}}function Te(){let e=e=>async()=>{throw Error(`StrategyDependencies.${e} is not implemented`)};return{fetchText:e(`fetchText`),fetchJson:e(`fetchJson`),downloadFile:e(`downloadFile`),exec:e(`exec`),extractArchive:e(`extractArchive`),deleteFile:e(`deleteFile`),computeChecksum:e(`computeChecksum`),removeDirectory:e(`removeDirectory`)}}var Ee=class{resolveInstallVersion(e,t,n){let r=t.version;if(n===void 0)return{version:r,explicit:!1};let i=n.trim();if(i.length===0)throw Error(`Explicit version returned an empty version string`);if(i!==r)throw Error(`client.install: requested version ${i} for client '${e}' does not match pinned version ${r}`);return{version:i,explicit:!0}}};function O(t,n){return!a.isAbsolute(t)||!a.isAbsolute(n)?!1:e(a.resolve(t),a.resolve(n))}function k(e,t){if(!e||!a.isAbsolute(e))throw Error(`${t} requires a non-empty absolute basePath`);return a.resolve(e)}var De=class{strategyDeps;config;jobs=new Map;#e=!1;resolvedBasePath;constructor(e,t){this.strategyDeps=e,this.config=t,this.resolvedBasePath=k(t.basePath,`ClientBinaryJobRunner`)}startJob(e,t,n,r,i,a,o){let s={...e,status:`running`};return this.jobs.set(e.jobId,s),this.runJob(s,t,n,r,i,a,o),e.jobId}cancelAll(){this.#e=!0,this.jobs.clear()}safeOnProgress(e,t){try{e(t)}catch{}}emitProgressIfActive(e,t){return this.#e?!1:(this.safeOnProgress(e,t),!this.#e)}async runJob(e,n,r,i,a,o,s){try{let c=this.resolveTargetDir(e.clientId,e.version),l=t(n,this.strategyDeps);if(l===void 0)throw Error(`Unsupported managed install descriptor type: ${n.type}`);let u=await this.executeStrategy(e,l,c,r);if(this.#e)return;let d;try{if(d=await this.runPostInstall(e,u.installPath,o,r),this.#e)return;s!==void 0&&await this.runVersionVerification(e,u.installPath,s,r)}catch(e){throw this.#e||await this.cleanupStagedArtifact(u.installPath),e}if(this.#e)return;await this.finalizeSuccess(e,u,d,r,i,a)}catch(t){if(this.#e)return;let n=t instanceof Error?t.message:String(t),r=t instanceof Error&&`code`in t?String(t.code):void 0;try{await a({jobId:e.jobId,clientId:e.clientId,version:e.version,strategy:e.strategy,status:`error`,activeVersion:null,error:{message:n,...r===void 0?{}:{code:r}}})}catch{}}finally{this.jobs.delete(e.jobId)}}async finalizeSuccess(e,t,n,r,i,a){if(!(e.makeActive&&!this.emitProgressIfActive(r,{jobId:e.jobId,clientId:e.clientId,version:t.version,strategy:e.strategy,stage:`activating`,progress:null,installPath:t.installPath,activeAfterCompletion:!0}))&&!this.#e){try{await i({jobId:e.jobId,clientId:e.clientId,version:t.version,installPath:t.installPath,makeActive:e.makeActive,reason:e.reason})}catch(e){try{await this.strategyDeps.removeDirectory(t.installPath)}catch{}throw e}if(!this.#e)try{await a({jobId:e.jobId,clientId:e.clientId,version:t.version,strategy:e.strategy,status:`success`,installPath:t.installPath,activeVersion:e.makeActive?t.version:null,...n===void 0?{}:{metadata:{postInstall:n}}})}catch{}}}async cleanupStagedArtifact(e){try{await this.strategyDeps.removeDirectory(e)}catch{}}async executeStrategy(e,t,n,r){try{return await t.execute(e.version,n,(t,i)=>{this.emitProgressIfActive(r,{jobId:e.jobId,clientId:e.clientId,version:e.version,strategy:e.strategy,stage:t,progress:i,installPath:t===`installing`?n:void 0,activeAfterCompletion:e.makeActive})})}catch(e){throw this.#e||await this.cleanupStagedArtifact(n),e}}async runPostInstall(e,t,n,r){if(n===void 0)return;let i=this.resolvePostInstallHandler(n),a=this.buildProgressPayload(e,`post-install`,null,t,{kind:n.kind});if(!this.emitProgressIfActive(r,a))return;let o=await i({clientId:e.clientId,version:e.version,installPath:t,descriptor:n});return this.emitProgressIfActive(r,this.buildProgressPayload(e,`post-install`,100,t,{kind:n.kind,...o??{}})),o??void 0}async runVersionVerification(e,t,r,i){this.emitProgressIfActive(i,this.buildProgressPayload(e,`verifying`,null,t,{kind:`version-command`}))&&(this.#e||await n(this.strategyDeps.exec,t,r,e.version))}resolvePostInstallHandler(e){let t=this.config.postInstallHandlers?.get(e.kind);if(t===void 0)throw Error(`No post-install handler registered for kind "${e.kind}"`);return t}buildProgressPayload(e,t,n,r,i){return{jobId:e.jobId,clientId:e.clientId,version:e.version,strategy:e.strategy,stage:t,progress:n,installPath:r,activeAfterCompletion:e.makeActive,...i===void 0?{}:{metadata:i}}}resolveTargetDir(e,t){let n=a.resolve(this.resolvedBasePath,e,t);if(!O(this.resolvedBasePath,n))throw Error(`Invalid install target path for client "${e}" and version "${t}"`);return n}};const A=r.object({id:r.string(),clientId:r.string(),version:r.string(),installPath:r.string(),installedAt:r.number().int().nonnegative(),createdAt:r.number().int().nonnegative()}),j=r.object({clientId:r.string(),activeVersion:r.string().nullable(),updatedAt:r.number().int().nonnegative()}),Oe=r.object({previousActiveVersion:r.string().nullable(),activeVersion:r.string().nullable()}),ke=s(`client-binary:storage`,{insertVersion:{request:A,response:r.object({success:r.boolean()})},recordInstalledVersion:{request:r.object({versionRecord:A,makeActive:r.boolean(),updatedAt:r.number().int().nonnegative()}),response:Oe},listVersions:{request:r.object({clientId:r.string()}),response:r.object({versions:r.array(A)})},getSnapshot:{request:r.object({clientId:r.string()}),response:r.object({state:j.nullable(),versions:r.array(A)})},loadAllVersions:{request:r.object({}),response:r.object({versions:r.array(A)})},upsertState:{request:j,response:r.object({success:r.boolean()})},setActiveVersion:{request:r.object({clientId:r.string(),activeVersion:r.string().nullable(),updatedAt:r.number().int().nonnegative()}),response:Oe},getState:{request:r.object({clientId:r.string()}),response:r.object({state:j.nullable()})},loadAllState:{request:r.object({}),response:r.object({states:r.array(j)})},loadSnapshot:{request:r.object({}),response:r.object({states:r.array(j),versions:r.array(A)})},removeVersionAndClearActive:{request:r.object({clientId:r.string(),version:r.string(),updatedAt:r.number().int().nonnegative()}),response:Oe.extend({removedVersion:r.string().nullable()})}}),M=ke.subjects;var N=class{definitions=new Map;constructor(e=[]){for(let t of e)this.registerUnique(t)}getDefinition(e){return this.definitions.get(e)}listDefinitions(){return[...this.definitions.values()]}register(e){this.definitions.set(e.id,e)}registerUnique(e){if(this.definitions.has(e.id))throw Error(`ClientDefinitionRegistry: duplicate client definition id '${e.id}'`);this.definitions.set(e.id,e)}};const Ae=process.env.MAKAIO_SKIP_CLIENT_VERSION_CHECK===`1`;function P(e,t,n,r,i){if(n===null){if(u(r))return;if(Ae){console.warn(`[SKIP_VERSION_CHECK] ${e}: ${i} for client '${t}' did not report a version; requires ${r}`);return}throw Error(`${e}: ${i} for client '${t}' did not report a version; requires ${r}`)}if(!d(n,r)){if(Ae){console.warn(`[SKIP_VERSION_CHECK] ${e}: ${i} ${n} for client '${t}' does not satisfy ${r} — check bypassed`);return}throw Error(`${e}: ${i} ${n} for client '${t}' does not satisfy ${r}`)}}var je=class{bus;resolvedBasePath;resolvedConfigBasePath;definitionLookup;resolutionPolicy;constructor(e){this.bus=e.bus,this.resolvedBasePath=e.resolvedBasePath,this.resolvedConfigBasePath=e.resolvedConfigBasePath,this.definitionLookup=e.definitionLookup,this.resolutionPolicy=e.resolutionPolicy??`managed-first`}async resolve(e){let t=this.definitionLookup.getDefinition(e);if(t===void 0)throw Error(`client.resolveBinary: no definition registered for client '${e}'`);if(this.resolutionPolicy===`managed-first`){let{state:n,versions:r}=await this.bus.request(M.getSnapshot,{clientId:e}),i=n?.activeVersion??null;if(i!==null)return this.buildManagedContext(e,i,t,r)}return this.buildGlobalContext(e,t)}isInstallPathWithinBase(e){return O(this.resolvedBasePath,e)}async isExpectedInstallPath(e,t,n){if(!a.isAbsolute(e)||!this.isInstallPathWithinBase(e))return!1;let r=a.resolve(this.resolvedBasePath,t,n);if(!this.isInstallPathWithinBase(r))return!1;try{let[t,n,a]=await Promise.all([i.realpath(this.resolvedBasePath),i.realpath(r),i.realpath(e)]);return O(t,n)?a===n||O(n,a):!1}catch{return!1}}async buildManagedContext(e,t,n,r){let i=r.find(e=>e.version===t);if(i===void 0)throw Error(`client.resolveBinary: active version '${t}' is not installed for client '${e}'`);if(!await this.isExpectedInstallPath(i.installPath,e,t))throw Error(`client.resolveBinary: stored installPath "${i.installPath}" does not match the expected install directory for ${e}@${t}`);n.binary!==void 0&&P(`client.resolveBinary`,e,t,n.binary.supportedVersions,`managed binary version`);let o=F(n.versionCommand)?.[0];if(o===void 0)throw Error(`client.resolveBinary: definition for '${e}' has no versionCommand — cannot derive binary path`);let s=a.resolve(i.installPath,o),c=a.resolve(i.installPath);if(!s.startsWith(c+a.sep)&&s!==c)throw Error(`client.resolveBinary: versionCommand for '${e}' resolves outside the install directory`);let{configDir:l,env:u}=this.resolveIsolatedConfig(e,n);return{binaryPath:s,env:u,configDir:l,source:`managed`,version:t}}async buildGlobalContext(e,t){if(!t.binary?.name)throw Error(`client.resolveBinary: definition for '${e}' has no binary.name — cannot scan PATH`);let n={clientId:e,binaryName:t.binary.name,supportedVersions:t.binary.supportedVersions},{results:r}=await this.bus.request(C.scan,{targets:[n]}),i=r.find(t=>t.clientId===e);if(i===void 0||!i.found)throw new ge(e);let o=i.version??null;P(`client.resolveBinary`,e,o,t.binary.supportedVersions,`detected global binary version`);let s=this.resolveGlobalConfigDir(t),c=i.binaryPath??null;if(c!==null&&!a.isAbsolute(c))throw Error(`client.resolveBinary: detected global binary path for '${e}' is not absolute`);return{binaryPath:c,env:{},configDir:s,source:`global`,version:o}}resolveIsolatedConfig(e,t){let{configIsolation:n}=t;if(n===void 0)return{configDir:null,env:{}};let r=a.join(this.resolvedConfigBasePath,e,`config`),i=n.pathKind===`file`?a.join(r,a.basename(n.defaultPath)):r;return{configDir:r,env:{[n.envVar]:i}}}resolveGlobalConfigDir(e){let{configIsolation:t}=e;if(t===void 0)return null;let n=t.defaultPath,r=n===`~`?T.homedir():n.startsWith(`~/`)?a.join(T.homedir(),n.slice(2)):n,i=t.pathKind===`file`?a.dirname(r):r;if(!a.isAbsolute(i))throw Error(`ConfigIsolation defaultPath for '${e.id}' resolved to non-absolute path '${r}'; use an absolute or tilde-expanded path (e.g. '~/.myapp')`);return i}};function F(e){if(e===void 0)return;let{executable:t,args:n}=e,r=typeof t==`string`?t:t[process.platform]??t.default;if(typeof r!=`string`||r.trim()===``)throw Error(`client.resolveBinary: versionCommand executable is missing for this platform`);return[r,...n]}async function Me(e,t){let{versions:n,states:r}=await e.request(M.loadSnapshot,{}),i=Map.groupBy(n,e=>e.clientId),a=new Map;for(let e of r)a.set(e.clientId,e.activeVersion);let o=new Map;for(let e of t.listDefinitions())e.managedInstall!==void 0&&o.set(e.id,e.managedInstall);return[...new Set(o.keys())].map(e=>{let t=o.get(e);if(t===void 0)throw Error(`assembleBinaryList: missing descriptor for client '${e}'`);let n=a.get(e)??null,r=(i.get(e)??[]).map(e=>({version:e.version,installPath:e.installPath,installedAt:e.installedAt,isActive:e.version===n})),s=t.version;return{clientId:e,installedVersions:r,activeVersion:n,pinnedVersion:s,updateAvailable:n!==null&&n!==s}})}var Ne=class extends f{config;definitionLookup;versionResolver;jobRunner;strategyDeps;resolvedBasePath;resolvedConfigBasePath;resolver;pendingClients=new Set;constructor(e=c,t,n=new N([]),r=Te()){super(e),this.config=t,this.definitionLookup=n,this.resolvedBasePath=k(t.basePath,`ClientBinaryManager`),this.resolvedConfigBasePath=k(t.configBasePath,`ClientBinaryManager configBasePath`),this.strategyDeps=r,this.versionResolver=new Ee,this.jobRunner=new De(r,t),this.resolver=new je({bus:e,resolvedBasePath:this.resolvedBasePath,resolvedConfigBasePath:this.resolvedConfigBasePath,definitionLookup:n,...t.resolutionPolicy!==void 0&&{resolutionPolicy:t.resolutionPolicy}})}async onInit(){this.registerHandler(C.list,async e=>{let t=await this.handleList();e.setResult({clients:t})}),this.registerHandler(C.install,async e=>{let t=await this.handleInstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(C.update,async e=>{let t=await this.handleUpdate(e.payload.clientId);e.setResult(t)}),this.registerHandler(C.setActive,async e=>{let t=await this.handleSetActive(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(C.uninstall,async e=>{let t=await this.handleUninstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(C.resolveBinary,async e=>{let t=await this.resolver.resolve(e.payload.clientId);e.setResult(t)})}onDestroy(){this.jobRunner.cancelAll(),this.pendingClients.clear()}async handleList(){return Me(this.bus,this.definitionLookup)}async handleInstall(e,t){let{definition:n,descriptor:r}=this.requireManagedDefinition(e,`client.install`);return this.withClientLock(e,async()=>{let{version:i}=this.versionResolver.resolveInstallVersion(e,r,t);return n.binary!==void 0&&P(`client.install`,e,i,n.binary.supportedVersions,t===void 0?`resolved binary version`:`requested binary version`),{jobId:this.startInstallJob(e,i,r,n,!1,`install`),requestedVersion:t??null,resolvedVersion:i}})}async handleUpdate(e){let{definition:t,descriptor:n}=this.requireManagedDefinition(e,`client.update`);return this.withClientLock(e,async()=>{let{version:r}=this.versionResolver.resolveInstallVersion(e,n);return t.binary!==void 0&&P(`client.update`,e,r,t.binary.supportedVersions,`resolved binary version`),{jobId:this.startInstallJob(e,r,n,t,!0,`update`),resolvedVersion:r}})}async handleSetActive(e,t){if(this.pendingClients.has(e))throw Error(`Operation already in progress for client "${e}"`);this.pendingClients.add(e);try{let{versions:r}=await this.bus.request(M.listVersions,{clientId:e}),i=r.find(e=>e.version===t);if(i===void 0)throw Error(`client.setActive: version '${t}' is not installed for client '${e}'`);let a=this.definitionLookup.getDefinition(e);if(a===void 0)throw Error(`client.setActive: no definition registered for client '${e}'`);a.binary!==void 0&&P(`client.setActive`,e,t,a.binary.supportedVersions,`requested binary version`);let o=F(a.versionCommand);if(o===void 0)throw Error(`client.setActive: no versionCommand registered for client '${e}'`);if(!await this.resolver.isExpectedInstallPath(i.installPath,e,t))throw Error(`client.setActive: stored installPath "${i.installPath}" does not match the expected install directory for ${e}@${t}`);return await n(this.strategyDeps.exec,i.installPath,o,t),await this.patchActiveVersion(e,t,`set-active`),{clientId:e,activeVersion:t}}finally{this.pendingClients.delete(e)}}async handleUninstall(e,t){if(this.pendingClients.has(e))throw Error(`Operation already in progress for client "${e}"`);this.pendingClients.add(e);try{let{versions:n}=await this.bus.request(M.listVersions,{clientId:e}),r=n.find(e=>e.version===t);if(r===void 0)throw Error(`client.uninstall: version '${t}' is not installed for client '${e}'`);let{removedVersion:i,previousActiveVersion:o,activeVersion:s}=await this.bus.request(M.removeVersionAndClearActive,{clientId:e,version:t,updatedAt:Date.now()});if(i===null)throw Error(`client.uninstall: failed to delete version '${t}' for client '${e}'`);let c=r.installPath,l=typeof c==`string`&&c.length>0?a.resolve(c):null;if(typeof c!=`string`||c.length===0||l===null||!a.isAbsolute(c)||!await this.resolver.isExpectedInstallPath(l,e,t)?console.warn(`[ClientBinaryManager] Skipping removeDirectory: stored installPath "${String(c)}" does not match the expected install directory for ${e}@${t}`):await this.strategyDeps.removeDirectory(l).catch(n=>{console.warn(`[ClientBinaryManager] Failed to remove binary directory "${l}" for ${e}@${t}:`,n)}),o!==null&&s===null)try{await this.bus.emit(C.version.changed,{clientId:e,previousActiveVersion:o,activeVersion:null,reason:`uninstall`})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}return{clientId:e,removedVersion:t,activeVersion:s}}finally{this.pendingClients.delete(e)}}async patchActiveVersion(e,t,n){let r=(await this.bus.request(M.setActiveVersion,{clientId:e,activeVersion:t,updatedAt:Date.now()})).previousActiveVersion;if(r!==t)try{await this.bus.emit(C.version.changed,{clientId:e,previousActiveVersion:r,activeVersion:t,reason:n})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}return r}requireManagedDefinition(e,t){let n=this.definitionLookup.getDefinition(e);if(n===void 0)throw Error(`${t}: no definition registered for client '${e}'`);let r=n.managedInstall;if(r===void 0)throw Error(`${t}: client '${e}' does not declare a managed install descriptor`);return{definition:n,descriptor:r}}async withClientLock(e,t){if(this.pendingClients.has(e))throw Error(`Operation already in progress for client "${e}"`);this.pendingClients.add(e);try{return await t()}catch(t){throw this.pendingClients.delete(e),t}}startInstallJob(e,t,n,r,i,a){let o={jobId:crypto.randomUUID(),clientId:e,version:t,strategy:n.type,status:`pending`,makeActive:i,reason:a};return this.jobRunner.startJob(o,n,e=>{this.bus.emit(C.installJob.progress,e).catch(e=>{console.warn(`[ClientBinaryManager] Failed to emit client.installJob.progress:`,e)})},this.makeCompletionCallback(),async e=>{this.pendingClients.delete(e.clientId),await this.bus.emit(C.installJob.completed,e).catch(e=>{console.warn(`[ClientBinaryManager] Failed to emit client.installJob.completed:`,e)})},r.postInstall,F(r.versionCommand)),o.jobId}makeCompletionCallback(){return async({clientId:e,version:t,installPath:n,makeActive:r,reason:i})=>{let a=Date.now();await D(this.bus,{clientId:e,configDir:this.resolveManagedConfigDir(e),phase:`managed-install`,binaryVersion:t});let o=await this.bus.request(M.recordInstalledVersion,{versionRecord:{id:crypto.randomUUID(),clientId:e,version:t,installPath:n,installedAt:a,createdAt:a},makeActive:r,updatedAt:a});if(r&&o.previousActiveVersion!==o.activeVersion)try{await this.bus.emit(C.version.changed,{clientId:e,previousActiveVersion:o.previousActiveVersion,activeVersion:o.activeVersion,reason:i})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}}}resolveManagedConfigDir(e){return a.join(this.resolvedConfigBasePath,e,`config`)}};function I(e,t){return`${e}${t}`}function L(e,t){return`${e}${t}`}var Pe=class{records=new Map;bySupervisorSessionId=new Map;byPidClientId=new Map;byAdapterSessionClientId=new Map;adapterOwnedSessions=new Set;set(e){let t=this.records.get(e.clientRuntimeId);t&&this.removeIndexEntries(t),this.records.set(e.clientRuntimeId,e),this.addIndexEntries(e)}setFromStorage(e,t,n){this.records.set(e.clientRuntimeId,e),e.supervisorSessionId!==void 0&&this.bySupervisorSessionId.set(e.supervisorSessionId,e.clientRuntimeId),t-e.updatedAt<=n&&(e.pid!==void 0&&this.byPidClientId.set(I(e.pid,e.clientId),e.clientRuntimeId),e.adapterSessionId!==void 0&&this.byAdapterSessionClientId.set(L(e.adapterSessionId,e.clientId),e.clientRuntimeId))}delete(e){let t=this.records.get(e);t&&(this.removeIndexEntries(t),t.adapterSessionId!==void 0&&this.adapterOwnedSessions.delete(L(t.adapterSessionId,t.clientId)),this.records.delete(e))}get(e){return this.records.get(e)}findByEvidence(e,t,n,r){if(e!==void 0){let t=this.bySupervisorSessionId.get(e);if(t!==void 0)return this.records.get(t)}if(t!==void 0){let e=this.byPidClientId.get(I(t,r));if(e!==void 0)return this.records.get(e)}if(n!==void 0){let e=this.byAdapterSessionClientId.get(L(n,r));if(e!==void 0)return this.records.get(e)}}values(){return this.records.values()}clear(){this.records.clear(),this.bySupervisorSessionId.clear(),this.byPidClientId.clear(),this.byAdapterSessionClientId.clear(),this.adapterOwnedSessions.clear()}markAdapterOwned(e,t){this.adapterOwnedSessions.add(L(e,t))}hasAdapterSession(e,t){return this.adapterOwnedSessions.has(L(e,t))}get size(){return this.records.size}addIndexEntries(e){e.supervisorSessionId!==void 0&&this.bySupervisorSessionId.set(e.supervisorSessionId,e.clientRuntimeId),e.pid!==void 0&&this.byPidClientId.set(I(e.pid,e.clientId),e.clientRuntimeId),e.adapterSessionId!==void 0&&this.byAdapterSessionClientId.set(L(e.adapterSessionId,e.clientId),e.clientRuntimeId)}removeIndexEntries(e){e.supervisorSessionId!==void 0&&this.bySupervisorSessionId.delete(e.supervisorSessionId),e.pid!==void 0&&this.byPidClientId.delete(I(e.pid,e.clientId)),e.adapterSessionId!==void 0&&this.byAdapterSessionClientId.delete(L(e.adapterSessionId,e.clientId))}};const R=[`observed`,`started`],z=r.object({clientRuntimeId:r.string(),clientId:r.string(),status:r.enum(R),supervisorSessionId:r.string().optional(),pid:r.number().int().positive().optional(),parentPid:r.number().int().positive().optional(),adapterSessionId:r.string().optional(),sessionId:r.string().optional(),cwd:r.string().optional(),argv:r.array(r.string()).optional(),metadata:r.record(r.string(),r.unknown()).optional(),observedAt:r.number().int().nonnegative(),createdAt:r.number().int().nonnegative(),updatedAt:r.number().int().nonnegative()}),B=s(`client-runtime:storage`,{upsert:{request:z,response:r.object({success:r.boolean()})},loadAll:{request:r.object({}),response:r.object({records:r.array(z)})}}),V=B.subjects;function Fe(e){return e.supervisorSessionId!==void 0||e.adapterSessionId!==void 0}function H(e){return{...e,argv:e.argv===void 0?void 0:[...e.argv],metadata:e.metadata===void 0?void 0:structuredClone(e.metadata)}}function Ie(e){return Math.max(Date.now(),e+1)}function Le(e,t){let n=!1;return t.supervisorSessionId!==void 0&&e.supervisorSessionId!==t.supervisorSessionId&&(e.supervisorSessionId=t.supervisorSessionId,n=!0),t.pid!==void 0&&e.pid!==t.pid&&(e.pid=t.pid,n=!0),t.parentPid!==void 0&&e.parentPid!==t.parentPid&&(e.parentPid=t.parentPid,n=!0),t.adapterSessionId!==void 0&&e.adapterSessionId!==t.adapterSessionId&&(e.adapterSessionId=t.adapterSessionId,n=!0),t.sessionId!==void 0&&e.sessionId!==t.sessionId&&(e.sessionId=t.sessionId,n=!0),t.cwd!==void 0&&e.cwd!==t.cwd&&(e.cwd=t.cwd,n=!0),t.argv!==void 0&&JSON.stringify(e.argv)!==JSON.stringify(t.argv)&&(e.argv=[...t.argv],n=!0),t.metadata!==void 0&&JSON.stringify(e.metadata)!==JSON.stringify(t.metadata)&&(e.metadata=structuredClone(t.metadata),n=!0),n}var Re=class{runtimeMap=new Pe;bus;constructor(e){this.bus=e}async loadFromStorage(){if(!this.bus)return;let e=await this.bus.requestOptional(V.loadAll,{});if(!e.handled)return;let t=Date.now();for(let n of e.data.records)this.runtimeMap.setFromStorage(H(n),t,864e5)}async upsertRuntime(e){let t=this.runtimeMap.findByEvidence(e.supervisorSessionId,e.pid,e.adapterSessionId,e.clientId);if(t){let n=t.status===`observed`,r=n&&Fe(e),i=Le(t,e),a=n&&e.observedAt>t.observedAt;return r&&(t.status=`started`),(i||r||a)&&(t.updatedAt=Ie(t.updatedAt),a&&(t.observedAt=e.observedAt),this.runtimeMap.set(t),await this.persistRecord(t)),{clientRuntimeId:t.clientRuntimeId,created:!1,promoted:r,record:H(t)}}let n=Date.now(),r=o(),i=Fe(e)?`started`:`observed`,a={clientRuntimeId:r,clientId:e.clientId,status:i,supervisorSessionId:e.supervisorSessionId,pid:e.pid,parentPid:e.parentPid,adapterSessionId:e.adapterSessionId,sessionId:e.sessionId,cwd:e.cwd,argv:e.argv?[...e.argv]:void 0,metadata:e.metadata?structuredClone(e.metadata):void 0,observedAt:e.observedAt,createdAt:n,updatedAt:n};return this.runtimeMap.set(a),await this.persistRecord(a),{clientRuntimeId:r,created:!0,promoted:!1,record:H(a)}}getRuntime(e){let t=this.runtimeMap.get(e);return t?H(t):void 0}markAdapterOwned(e,t){this.runtimeMap.markAdapterOwned(e,t)}hasAdapterSession(e,t){return this.runtimeMap.hasAdapterSession(e,t)}clear(){this.runtimeMap.clear()}get size(){return this.runtimeMap.size}async persistRecord(e){this.bus&&await this.bus.requestOptional(V.upsert,H(e))}};const U=r.object({eventName:r.string(),receivedAt:r.number().int().finite().nonnegative().describe(`Unix epoch timestamp in milliseconds`),payload:r.record(r.string(),r.unknown()),metadata:r.record(r.string(),r.unknown()).optional()}),ze=/^[a-z0-9-]+$/;function W(e,t=`canonicalizeClientId`){let n=e.trim().toLowerCase(),r=n.startsWith(`client:`)?n.slice(7):n;if(r.length===0)throw Error(`[${t}] clientId must be a non-empty string`);if(!ze.test(r))throw Error(`[${t}] clientId must contain only lowercase letters, numbers, and hyphens after an optional client: prefix`);return r}function Be(e){return{subject:`hook.received`,$meta:{namespace:`client:${W(e,`createRawClientHookReceivedSubject`)}`,isRequest:!1,local:!1,channel:!1}}}const Ve=5e3,He=r.object({exitCode:r.number().int().min(0).max(255).default(0),stdout:r.string().default(``),stderr:r.string().default(``)});function Ue(e){return{subject:`hook.handle`,$meta:{namespace:`client:${W(e,`createRawClientHookHandleSubject`)}`,isRequest:!0,local:!1,channel:!1}}}function We(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Ge(e,t){return We(e[t])}function Ke(e){return{clientId:e.clientId,source:`adapter-derived`,observedAt:Date.now(),...e.sessionId!==void 0&&{sessionId:e.sessionId},...e.adapterSessionId!==void 0&&{adapterSessionId:e.adapterSessionId}}}function qe(e){try{e().catch(Je)}catch(e){Je(e)}}function Je(e){(process.env.DEBUG||process.env.MAKAIO_DEBUG)&&console.debug(`[emitBestEffort] observed-semantics emission failed`,e)}function Ye(e,t){return{subject:t,$meta:{namespace:`client:${W(e,`createClientWiringSubjectDef`)}`,isRequest:!0,local:!1,channel:!1}}}function Xe(e){return Ye(e,`wiring.list`)}const Ze=r.string().min(1).refine(a.isAbsolute,{message:`projectDir must be an absolute path`}),Qe=r.object({entries:r.array(w)}),$e=r.object({applied:r.number().int().nonnegative(),skipped:r.number().int().nonnegative()}),et=r.object({removed:r.number().int().nonnegative()}),tt=r.object({clientId:r.string().trim().min(1),entries:r.array(w)});function nt(e){if(e!==void 0&&!a.isAbsolute(e))throw Error(`projectDir must be an absolute path, got: ${e}`)}var rt=class extends f{accountRegistry;runtimeRegistry;latestSnapshots=new Map;activeIdentities=new Map;constructor(e=c,t=new _e,n=new Re(e)){super(e),this.accountRegistry=t,this.runtimeRegistry=n}async onInit(){await this.runtimeRegistry.loadFromStorage(),this.registerHandler(C.account.observe,e=>this.handleAccountObserve(e)),this.registerHandler(C.usage.ingest,e=>this.handleUsageIngest(e)),this.registerHandler(C.scan,async e=>{let t=await this.scanClients(e.payload.targets);e.setResult({results:t})}),this.registerHandler(C.runtime.observe,e=>this.handleRuntimeObserve(e)),this.registerHandler(C.runtime.isAdapterManaged,e=>{let{adapterSessionId:t,clientId:n}=e.payload;e.setResult({managed:this.runtimeRegistry.hasAdapterSession(t,n)})}),this.registerHandler(C.wiring.list,async e=>{let t=await this.listWirings(e.payload);e.setResult({results:t})}),this.registerHandler(C.account.activate,e=>{this.activeIdentities.set(e.payload.clientId,{clientAccountId:e.payload.clientAccountId,identifiers:e.payload.identifiers,displayLabel:e.payload.displayLabel}),e.setResult({accepted:!0})}),this.registerHandler(C.account.getActive,e=>{let t=this.activeIdentities.get(e.payload.clientId);e.setResult({identity:t??null})})}onDestroy(){this.latestSnapshots.clear(),this.activeIdentities.clear(),this.accountRegistry.clear(),this.runtimeRegistry.clear()}getLatestSnapshot(e){return this.latestSnapshots.get(e)}async handleAccountObserve(e){let t=this.accountRegistry.upsertAccount({clientId:e.payload.clientId,identifiers:e.payload.identifiers,displayLabel:e.payload.displayLabel}),n=this.latestSnapshots.get(t.clientAccountId),r=ot(this.consolidateMergedSnapshots(t.clientAccountId,t.mergedAccountIds)??n,t.displayLabel);r&&this.latestSnapshots.set(t.clientAccountId,r),r&&(t.mergedAccountIds.length>0||r!==n)&&await this.bus.emit(C.usage.snapshot,r),e.setResult({clientAccountId:t.clientAccountId,displayLabel:t.displayLabel})}async handleUsageIngest(e){let t=this.accountRegistry.upsertAccount({clientId:e.payload.clientId,identifiers:e.payload.account.identifiers,displayLabel:e.payload.account.displayLabel});this.consolidateMergedSnapshots(t.clientAccountId,t.mergedAccountIds);let n=it(t.clientAccountId,e.payload,t.displayLabel),r=ot(at(this.latestSnapshots.get(t.clientAccountId),n),t.displayLabel);this.latestSnapshots.set(t.clientAccountId,r),await this.bus.emit(C.usage.snapshot,r),e.setResult({clientAccountId:t.clientAccountId,snapshot:r})}async handleRuntimeObserve(e){let{payload:t}=e;if(t.supervisorSessionId===void 0&&t.pid===void 0&&t.adapterSessionId===void 0)throw Error(`client.runtime.observe: at least one hard-evidence field is required (supervisorSessionId, pid, or adapterSessionId)`);let{record:n,...r}=await this.runtimeRegistry.upsertRuntime(t);t.source.layer===`adapter`&&t.adapterSessionId!==void 0&&this.runtimeRegistry.markAdapterOwned(t.adapterSessionId,t.clientId),(r.created||r.promoted)&&await this.bus.emit(C.runtime.started,{clientRuntimeId:n.clientRuntimeId,clientId:n.clientId,status:n.status,source:t.source,observedAt:t.observedAt,supervisorSessionId:n.supervisorSessionId,pid:n.pid,parentPid:n.parentPid,adapterSessionId:n.adapterSessionId,sessionId:n.sessionId,cwd:n.cwd,argv:n.argv,metadata:n.metadata}),e.setResult({clientRuntimeId:r.clientRuntimeId,created:r.created,promoted:r.promoted})}async scanClients(e){let t=e??await this.listScannableStoredClients();if(t.length===0)return[];let n=Array.from(new Set(t.map(e=>e.binaryName))),{results:r}=await this.bus.request(ue.scan,{binaries:n}),i=new Map(r.map(e=>[e.binary,e]));return t.map(e=>{let t=i.get(e.binaryName),n=t?.found??!1,r=t?.version,a=t?.path;return{clientId:e.clientId,found:n,...a!==void 0&&{binaryPath:a},version:r,warningMessage:ct(n,r,e.supportedVersions)}})}async listScannableStoredClients(){let{clients:e}=await this.bus.request(de.list,{});return e.filter(st).map(e=>({clientId:e.id,binaryName:e.binary.name,supportedVersions:e.binary.supportedVersions}))}async listWirings(e){nt(e.projectDir);let{clients:t}=await this.bus.request(de.list,{}),n=e.clientId===void 0?void 0:W(e.clientId,`listWirings`),r=t.filter(e=>e.enabled).filter(e=>n===void 0||e.id===n),i=await Promise.allSettled(r.map(async t=>{let n=Xe(t.id),r=await this.bus.requestOptional(n,{projectDir:e.projectDir,makaioCommand:e.makaioCommand});return r.handled?{clientId:t.id,entries:r.data.entries}:null}));for(let e=0;e<i.length;e++){let t=i[e];if(t.status===`rejected`){let n=t.reason instanceof Error?t.reason.message:String(t.reason);console.warn(`[ClientRuntimeService] wiring.list for ${r[e].id} failed: ${n}`)}}return i.filter(e=>e.status===`fulfilled`).map(e=>e.value).filter(e=>e!==null)}consolidateMergedSnapshots(e,t){let n=this.latestSnapshots.get(e),r=!1;for(let i of t){if(i===e)continue;let t=this.latestSnapshots.get(i);t&&(n===void 0||t.observedAt>n.observedAt)&&(n={...t,clientAccountId:e},r=!0),this.latestSnapshots.delete(i)}return n&&this.latestSnapshots.set(e,n),r?n:void 0}};function it(e,t,n){return{clientAccountId:e,clientId:t.clientId,observedAt:t.observedAt,source:t.source,displayLabel:n,usage:{windows:t.usage.windows.map(e=>({...e}))},metadata:t.metadata?{...t.metadata}:void 0}}function at(e,t){return e&&e.observedAt>t.observedAt?e:t}function ot(e,t){return!e||t===void 0||e.displayLabel===t?e:{...e,displayLabel:t}}function st(e){return e.enabled&&e.binary!==void 0}function ct(e,t,n){if(e&&t!==void 0&&t!==`unknown`&&n!==void 0&&!d(t,n))return`Unsupported version: requires ${n}`}var lt=class extends f{constructor(e=c){super(e)}onInit(){this.registerHandler(C.config.prime,async e=>{e.setResult(await D(this.bus,e.payload))})}};const G=se,K=r.string().trim().min(1),q=s(`client-profile:storage`,{get:{request:r.object({clientId:K,name:S}),response:r.object({record:G.nullable()})},getById:{request:r.object({id:K}),response:r.object({record:G.nullable()})},list:{request:r.object({clientId:K}),response:r.object({records:r.array(G)})},set:{request:G,response:r.object({success:r.boolean()})},delete:{request:r.object({clientId:K,name:S}),response:r.object({success:r.boolean()})},clearDefault:{request:r.object({clientId:K}),response:r.object({success:r.boolean()})},setDefault:{request:r.object({clientId:K,name:S}),response:r.object({record:G.nullable()})}}),J=q.subjects;function ut(e,t,n){let r=a.resolve(e),i=a.resolve(t),o=a.relative(r,i);if(o!==``&&!o.startsWith(`..`)&&!a.isAbsolute(o))return i;throw Error(`${n} refused to access path outside client profile root`)}var dt=class extends f{clientsBasePath;constructor(e,t){super(e),this.clientsBasePath=t}async onInit(){this.registerCreateHandler(),this.registerListHandler(),this.registerGetHandler(),this.registerUpdateHandler(),this.registerDeleteHandler(),this.registerSetDefaultHandler()}registerCreateHandler(){this.registerHandler(C.profile.create,async e=>{let t=W(e.payload.clientId,`profile.create`),{name:n,description:r}=e.payload;if((await this.bus.request(J.get,{clientId:t,name:n})).record!==null)throw Error(`Profile '${n}' already exists for client '${t}'`);let s=a.join(this.clientsBasePath,t,`profiles`),c=ut(s,a.join(s,n),`profile.create`);await i.mkdir(c,{recursive:!0});try{await D(this.bus,{clientId:t,configDir:c,phase:`profile-create`});let i=Date.now(),a={id:o(),clientId:t,name:n,description:r??null,configDir:c,isDefault:!1,createdAt:i,updatedAt:i};await this.bus.request(J.set,a),e.setResult({profile:a})}catch(e){throw await i.rm(c,{recursive:!0,force:!0}),e}})}registerListHandler(){this.registerHandler(C.profile.list,async e=>{let t=W(e.payload.clientId,`profile.list`),n=await this.bus.request(J.list,{clientId:t});e.setResult({profiles:n.records})})}registerGetHandler(){this.registerHandler(C.profile.get,async e=>{let t=W(e.payload.clientId,`profile.get`),n=await this.bus.request(J.get,{clientId:t,name:e.payload.name});e.setResult({profile:n.record})})}registerUpdateHandler(){this.registerHandler(C.profile.update,async e=>{let t=W(e.payload.clientId,`profile.update`),{name:n,description:r}=e.payload,i=await this.bus.request(J.get,{clientId:t,name:n});if(i.record===null)throw Error(`Profile '${n}' not found for client '${t}'`);let a={...i.record,description:r===void 0?i.record.description:r,updatedAt:Date.now()};await this.bus.request(J.set,a),e.setResult({profile:a})})}registerDeleteHandler(){this.registerHandler(C.profile.delete,async e=>{let t=W(e.payload.clientId,`profile.delete`),{name:n}=e.payload,r=await this.bus.request(J.get,{clientId:t,name:n});r.record!==null&&(ut(a.join(this.clientsBasePath,t,`profiles`),r.record.configDir,`profile.delete`),await i.rm(r.record.configDir,{recursive:!0,force:!0}));let o=await this.bus.request(J.delete,{clientId:t,name:n});e.setResult({success:o.success})})}registerSetDefaultHandler(){this.registerHandler(C.profile.setDefault,async e=>{let t=W(e.payload.clientId,`profile.setDefault`),{name:n}=e.payload,r=await this.bus.request(J.setDefault,{clientId:t,name:n});if(r.record===null)throw Error(`Profile '${n}' not found for client '${t}'`);e.setResult({profile:r.record})})}};function ft(e){return{subject:`sessionConfig.setup`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}function pt(e){return{subject:`sessionConfig.destroy`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}const mt=()=>Date.now();function ht(){let e=T.platform();if(e===`darwin`||e===`linux`||e===`win32`)return e;throw Error(`client.sessionConfig does not support platform '${e}'`)}function gt(e,t,n){let r=le.safeParse(t);if(!r.success)throw Error(`${n} received an unsafe lease ID`);let i=a.resolve(e),o=a.resolve(i,r.data),s=a.relative(i,o);if(s===``||!s.startsWith(`..`)&&!a.isAbsolute(s))return o;throw Error(`${n} refused to access path outside client sessions root`)}var _t=class extends f{clientsBasePath;getNow;liveLeasesByClient=new Map;liveLeasesByOwner=new Map;constructor(e,t,n=mt){super(e),this.clientsBasePath=t,this.getNow=n}async onInit(){this.registerCreateHandler(),this.registerHandler(C.sessionConfig.destroy,async e=>{let{clientId:t,leaseId:n}=e.payload,r=W(t,`sessionConfig.destroy`),i=this.resolveClientSessionDir(r,n,`sessionConfig.destroy`),a=this.getLiveLease(r,n);a===void 0?await this.destroyClientSessionDir(r,i):await this.releaseLiveLease(a),e.setResult({success:!0})}),this.registerHandler(C.sessionConfig.cleanup,async e=>{let{clientId:t}=e.payload,n=t===void 0?void 0:W(t,`sessionConfig.cleanup`),r=await this.cleanupOrphanedDirs(n);e.setResult({removed:r})}),this.registerHandler(fe.closed,async e=>{await this.destroyOwnedLeases(e.payload.sessionId)}),await this.cleanupOrphanedDirs()}registerCreateHandler(){this.registerHandler(C.sessionConfig.create,async e=>{let{clientId:t,leaseId:n,ownerSessionId:r,profileName:a,baseConfigDir:o,projectDir:s,configInheritance:c=`full`}=e.payload,l=W(t,`sessionConfig.create`),u=this.resolveClientSessionDir(l,n,`sessionConfig.create`),d=this.reserveLiveLease({clientId:l,leaseId:n,...r===void 0?{}:{ownerSessionId:r}});try{await i.mkdir(u,{recursive:!0});let t=await this.resolveBaseConfigDir(l,u,a,o),r=ft(l),f=await this.bus.requestOptional(r,{sessionDir:u,baseConfigDir:t,projectDir:s,platform:ht(),configInheritance:c}),p=f.handled?f.data.env??{}:{},ee=f.handled?f.data.authMaterialized:!1;if(await D(this.bus,{clientId:l,configDir:u,phase:`session-create`,projectDir:s}),d.releaseRequested)throw Error(`Config lease '${n}' was released while it was being created`);e.setResult({sessionDir:u,env:p,authMaterialized:ee}),d.state=`ready`}catch(e){try{await this.beginLeaseCleanup(d)}catch(t){throw AggregateError([e,t],`Client session config creation and rollback both failed`)}throw e}finally{d.settleCreation(),d.state===`released`&&this.untrackLiveLease(d)}})}async resolveBaseConfigDir(e,t,n,r){if(r!==void 0)return r;if(n!==void 0){let t=await this.bus.request(J.get,{clientId:e,name:n});if(t.record!==null)return t.record.configDir;throw Error(`Profile '${n}' not found for client '${e}'`)}let i=(await this.bus.request(J.list,{clientId:e})).records.find(e=>e.isDefault);return i?i.configDir:t}async cleanupOrphanedDirs(e){let t=[],n=this.getNow(),r=e===void 0?await this.listClientIds():[e];return await Promise.all(r.map(async e=>{let r=a.join(this.clientsBasePath,e,`sessions`),o=await i.readdir(r).catch(()=>[]);await Promise.all(o.map(async a=>{if(!le.safeParse(a).success)return;let o=gt(r,a,`sessionConfig.cleanup`),s;try{s=await i.stat(o)}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return;throw e}let c=s.birthtimeMs>0?s.birthtimeMs:s.ctimeMs;s.isDirectory()&&n-c>36e5&&!this.isLiveLease(e,a)&&(await this.destroyClientSessionDir(e,o),t.push(o))}))})),t}async destroyOwnedLeases(e){let t=[...this.liveLeasesByOwner.get(e)??[]],n=(await Promise.allSettled(t.map(async e=>{this.getLiveLease(e.clientId,e.leaseId)===e&&await this.releaseLiveLease(e)}))).flatMap(e=>e.status===`rejected`?[e.reason]:[]);if(n.length>0)throw AggregateError(n,`Failed to release config leases owned by session '${e}'`)}async destroyClientSessionDir(e,t){try{await this.bus.requestOptional(pt(e),{sessionDir:t,platform:ht()})}finally{await i.rm(t,{recursive:!0,force:!0})}}isLiveLease(e,t){return this.getLiveLease(e,t)!==void 0}getLiveLease(e,t){return this.liveLeasesByClient.get(e)?.get(t)}resolveClientSessionDir(e,t,n){return gt(a.join(this.clientsBasePath,e,`sessions`),t,n)}reserveLiveLease(e){if(this.isLiveLease(e.clientId,e.leaseId))throw Error(`Config lease '${e.leaseId}' is already active for client '${e.clientId}'`);let t=Promise.withResolvers(),n={...e,state:`creating`,releaseRequested:!1,creationSettled:t.promise,settleCreation:()=>t.resolve()},r=this.liveLeasesByClient.get(n.clientId)??new Map;if(r.set(n.leaseId,n),this.liveLeasesByClient.set(n.clientId,r),n.ownerSessionId!==void 0){let e=this.liveLeasesByOwner.get(n.ownerSessionId)??new Set;e.add(n),this.liveLeasesByOwner.set(n.ownerSessionId,e)}return n}async releaseLiveLease(e){if(this.getLiveLease(e.clientId,e.leaseId)!==e){e.releasePromise!==void 0&&await e.releasePromise;return}if(e.releaseRequested=!0,e.state===`creating`){await e.creationSettled,e.releasePromise!==void 0&&await e.releasePromise;return}await this.beginLeaseCleanup(e)}beginLeaseCleanup(e){if(e.releasePromise!==void 0)return e.releasePromise;if(this.getLiveLease(e.clientId,e.leaseId)!==e)return Promise.resolve();let t=e.state===`creating`;e.state=`releasing`;let n=this.resolveClientSessionDir(e.clientId,e.leaseId,`sessionConfig.release`);return e.releasePromise=this.destroyClientSessionDir(e.clientId,n).finally(()=>{e.state=`released`,t||this.untrackLiveLease(e)}),e.releasePromise}untrackLiveLease(e){let t=this.liveLeasesByClient.get(e.clientId);if(t?.get(e.leaseId)===e&&(t.delete(e.leaseId),t.size===0&&this.liveLeasesByClient.delete(e.clientId),e.ownerSessionId!==void 0)){let t=this.liveLeasesByOwner.get(e.ownerSessionId);t?.delete(e),t?.size===0&&this.liveLeasesByOwner.delete(e.ownerSessionId)}}async listClientIds(){return(await i.readdir(this.clientsBasePath,{withFileTypes:!0}).catch(()=>[])).filter(e=>e.isDirectory()).map(e=>e.name)}};const vt=new Set([`hook.received`,`hook.handle`]);function yt(e,t){return c.registerNamespace(s(`client:${e}`,{"hook.received":U,"hook.handle":{request:U,response:He},...t})).subjects}function bt(e,t){let n=Object.keys(t).filter(e=>vt.has(e));if(n.length===0)return;let r=n.join(`, `);throw Error([`[createClientNamespace] additionalSchemas for client:${e}`,`cannot override reserved shared hook subjects: ${r}`].join(` `))}function xt(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n||!(e in n))return!1;n=n[e]}return!0}function St(e,t,n){let r=Object.keys(n).filter(e=>!xt(t,e));if(r.length!==0)throw Error(`[createClientNamespace] client:${e} was already registered without required subjects: ${r.join(`, `)}`)}function Ct(e,t){let n=W(e,`createClientNamespace`),r=t??{};bt(n,r);let i=yt(n,r);return St(n,i,r),{namespaceDomain:`client:${n}`,subjects:i}}const Y=g(`client_runtimes`,e=>({id:e.text(`id`).primaryKey(),clientId:e.text(`client_id`).notNull(),status:e.text(`status`).notNull(),supervisorSessionId:e.text(`supervisor_session_id`),pid:e.int4(`pid`),parentPid:e.int4(`parent_pid`),adapterSessionId:e.text(`adapter_session_id`),sessionId:e.text(`session_id`),cwd:e.text(`cwd`),argv:e.jsonCol(`argv`),metadata:e.jsonCol(`metadata`),observedAt:e.epochMs(`observed_at`).notNull(),createdAt:e.epochMs(`created_at`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()}),{sqlite:e=>[p(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),p(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),p(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)],postgres:e=>[m(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),m(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),m(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)]}),wt=Y.sqlite,Tt=Y.postgres,Et=h({clientRuntimes:wt},{clientRuntimes:Tt}),Dt=new Set(R);function Ot(e){if(!Dt.has(e.status))throw Error(`Unknown ClientRuntimeStatus in DB: '${e.status}'`);return{clientRuntimeId:e.id,clientId:e.clientId,status:e.status,supervisorSessionId:e.supervisorSessionId??void 0,pid:e.pid??void 0,parentPid:e.parentPid??void 0,adapterSessionId:e.adapterSessionId??void 0,sessionId:e.sessionId??void 0,cwd:e.cwd??void 0,argv:e.argv??void 0,metadata:e.metadata??void 0,observedAt:e.observedAt,createdAt:e.createdAt,updatedAt:e.updatedAt}}function kt(e,t){let{clientRuntimes:n}=v(t,Et),r=e.on(V.upsert,async e=>{let r=e.payload,i={clientId:r.clientId,status:r.status,supervisorSessionId:r.supervisorSessionId??null,pid:r.pid??null,parentPid:r.parentPid??null,adapterSessionId:r.adapterSessionId??null,sessionId:r.sessionId??null,cwd:r.cwd??null,argv:r.argv??null,metadata:r.metadata??null,observedAt:r.observedAt,updatedAt:r.updatedAt};await t.insert(n).values({id:r.clientRuntimeId,createdAt:r.createdAt,...i}).onConflictDoUpdate({target:n.id,set:i,setWhere:oe(x`excluded.updated_at`,n.updatedAt)}),e.setResult({success:!0})}),i=e.on(V.loadAll,async e=>{let r=await t.select().from(n);e.setResult({records:r.map(Ot)})});return()=>{r(),i()}}const At=g(`client_binary_versions`,e=>({id:e.text(`id`).primaryKey(),clientId:e.text(`client_id`).notNull(),version:e.text(`version`).notNull(),installPath:e.text(`install_path`).notNull(),installedAt:e.epochMs(`installed_at`).notNull(),createdAt:e.epochMs(`created_at`).notNull()}),{sqlite:e=>[ee(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)],postgres:e=>[ne(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)]}),jt=At.sqlite,Mt=g(`client_binary_state`,e=>({clientId:e.text(`client_id`).primaryKey(),activeVersion:e.text(`active_version`),updatedAt:e.epochMs(`updated_at`).notNull()})),Nt=Mt.sqlite,Pt=At.postgres,Ft=Mt.postgres,X=h({clientBinaryVersions:jt,clientBinaryState:Nt},{clientBinaryVersions:Pt,clientBinaryState:Ft});function Z(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}function Q(e){return{clientId:e.clientId,activeVersion:e.activeVersion??null,updatedAt:e.updatedAt}}function It(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}async function Lt(e,t,n){await e.insert(n).values(It(t)).onConflictDoNothing({target:[n.clientId,n.version]})}function Rt(e,t,n){return{clientId:e,activeVersion:t,updatedAt:n}}async function zt(e,t,n,r,i){await e.insert(i).values(Rt(t,n,r)).onConflictDoUpdate({target:i.clientId,set:{activeVersion:n,updatedAt:r}})}async function Bt(e,t){let{clientBinaryVersions:n}=v(e,X);await Lt(e,t,n)}async function Vt(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=v(e,X);return _(e,async e=>{let[o]=await e.select().from(a).where(b(a.clientId,t.clientId)).limit(1),s=o?.activeVersion??null;return await Lt(e,t,i),n?(await zt(e,t.clientId,t.version,r,a),{previousActiveVersion:s,activeVersion:t.version}):{previousActiveVersion:s,activeVersion:s}})}async function Ht(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=v(e,X);return _(e,async e=>{let[i]=await e.select().from(r).where(b(r.clientId,t)).limit(1),a=await e.select().from(n).where(b(n.clientId,t));return{state:i?Q(i):null,versions:a.map(Z)}})}async function Ut(e){let{clientBinaryVersions:t,clientBinaryState:n}=v(e,X);return _(e,async e=>{let r=await e.select().from(n),i=await e.select().from(t);return{states:r.map(Q),versions:i.map(Z)}})}async function Wt(e,t){let{clientBinaryState:n}=v(e,X),r={clientId:t.clientId,activeVersion:t.activeVersion??null,updatedAt:t.updatedAt};await e.insert(n).values(r).onConflictDoUpdate({target:n.clientId,set:r})}async function Gt(e,t,n,r){let{clientBinaryState:i}=v(e,X);return _(e,async e=>{let[a]=await e.select().from(i).where(b(i.clientId,t)).limit(1),o=a?.activeVersion??null;return await zt(e,t,n,r,i),{previousActiveVersion:o,activeVersion:n}})}async function Kt(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=v(e,X);return _(e,async e=>{let[o]=await e.select().from(a).where(b(a.clientId,t)).limit(1),s=o?.activeVersion??null;if(!ie(await e.delete(i).where(y(b(i.clientId,t),b(i.version,n)))))return{removedVersion:null,previousActiveVersion:s,activeVersion:s};await e.update(a).set({activeVersion:null,updatedAt:r}).where(y(b(a.clientId,t),b(a.activeVersion,n)));let[c]=await e.select().from(a).where(b(a.clientId,t)).limit(1);return{removedVersion:n,previousActiveVersion:s,activeVersion:c?.activeVersion??null}})}function qt(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=v(t,X),i=[e.on(M.insertVersion,async e=>{await Bt(t,e.payload),e.setResult({success:!0})}),e.on(M.recordInstalledVersion,async e=>{let{versionRecord:n,makeActive:r,updatedAt:i}=e.payload,a=await Vt(t,n,r,i);e.setResult(a)}),e.on(M.listVersions,async e=>{let r=await t.select().from(n).where(b(n.clientId,e.payload.clientId));e.setResult({versions:r.map(Z)})}),e.on(M.getSnapshot,async e=>{let{state:n,versions:r}=await Ht(t,e.payload.clientId);e.setResult({state:n,versions:r})}),e.on(M.loadAllVersions,async e=>{let r=await t.select().from(n);e.setResult({versions:r.map(Z)})}),e.on(M.upsertState,async e=>{await Wt(t,e.payload),e.setResult({success:!0})}),e.on(M.setActiveVersion,async e=>{let{clientId:n,activeVersion:r,updatedAt:i}=e.payload,a=await Gt(t,n,r,i);e.setResult(a)}),e.on(M.getState,async e=>{let[n]=await t.select().from(r).where(b(r.clientId,e.payload.clientId)).limit(1);e.setResult({state:n?Q(n):null})}),e.on(M.loadAllState,async e=>{let n=await t.select().from(r);e.setResult({states:n.map(Q)})}),e.on(M.loadSnapshot,async e=>{let{states:n,versions:r}=await Ut(t);e.setResult({states:n,versions:r})}),e.on(M.removeVersionAndClearActive,async e=>{let{clientId:n,version:r,updatedAt:i}=e.payload,a=await Kt(t,n,r,i);e.setResult(a)})];return()=>{for(let e of i)e()}}const Jt=g(`client_profiles`,e=>({id:e.text(`id`).primaryKey(),clientId:e.text(`client_id`).notNull(),name:e.text(`name`).notNull(),description:e.text(`description`),configDir:e.text(`config_dir`).notNull(),isDefault:e.bool(`is_default`).notNull().default(!1),createdAt:e.epochMs(`created_at`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()}),{sqlite:e=>[te(`uq_client_profiles_client_name`).on(e.clientId,e.name),te(`uq_client_profiles_default`).on(e.clientId).where(x`${e.isDefault} = 1`)],postgres:e=>[re(`uq_client_profiles_client_name`).on(e.clientId,e.name),re(`uq_client_profiles_default`).on(e.clientId).where(x`${e.isDefault} = true`)]}),Yt=Jt.sqlite,Xt=Jt.postgres,Zt=h({clientProfiles:Yt},{clientProfiles:Xt});function $(e){return{id:e.id,clientId:e.clientId,name:e.name,description:e.description??null,configDir:e.configDir,isDefault:e.isDefault,createdAt:e.createdAt,updatedAt:e.updatedAt}}async function Qt(e,t,n){let{clientProfiles:r}=v(e,Zt),i=Date.now();return _(e,async e=>{let[a]=await e.select().from(r).where(y(b(r.clientId,t),b(r.name,n))).limit(1);if(a===void 0)return null;await e.update(r).set({isDefault:!1,updatedAt:i}).where(y(b(r.clientId,t),b(r.isDefault,!0))),await e.update(r).set({isDefault:!0,updatedAt:i}).where(y(b(r.clientId,t),b(r.name,n)));let[o]=await e.select().from(r).where(y(b(r.clientId,t),b(r.name,n))).limit(1);return o===void 0?null:$(o)})}function $t(e,t){let{clientProfiles:n}=v(t,Zt),r=[e.on(J.get,async e=>{let{clientId:r,name:i}=e.payload,[a]=await t.select().from(n).where(y(b(n.clientId,r),b(n.name,i))).limit(1);e.setResult({record:a?$(a):null})}),e.on(J.getById,async e=>{let[r]=await t.select().from(n).where(b(n.id,e.payload.id)).limit(1);e.setResult({record:r?$(r):null})}),e.on(J.list,async e=>{let r=await t.select().from(n).where(b(n.clientId,e.payload.clientId));e.setResult({records:r.map($)})}),e.on(J.set,async e=>{let r=e.payload,i={id:r.id,clientId:r.clientId,name:r.name,description:r.description??null,configDir:r.configDir,isDefault:r.isDefault,createdAt:r.createdAt,updatedAt:r.updatedAt};await t.insert(n).values(i).onConflictDoUpdate({target:n.id,set:{name:r.name,description:r.description??null,configDir:r.configDir,isDefault:r.isDefault,updatedAt:r.updatedAt}}),e.setResult({success:!0})}),e.on(J.delete,async e=>{let{clientId:r,name:i}=e.payload,a=await t.delete(n).where(y(b(n.clientId,r),b(n.name,i)));e.setResult({success:ie(a)})}),e.on(J.clearDefault,async e=>{await t.update(n).set({isDefault:!1,updatedAt:Date.now()}).where(y(b(n.clientId,e.payload.clientId),b(n.isDefault,!0))),e.setResult({success:!0})}),e.on(J.setDefault,async e=>{let{clientId:n,name:r}=e.payload,i=await Qt(t,n,r);e.setResult({record:i})})];return()=>{for(let e of r)e()}}var en=class{runtimeService;binaryManager;configPrimeService;profileService;sessionConfigService;constructor(e,t,n,r,i){this.runtimeService=e,this.binaryManager=t,this.configPrimeService=n,this.profileService=r,this.sessionConfigService=i}async init(){let e=(await Promise.allSettled([this.runtimeService.init(),this.binaryManager.init(),this.configPrimeService.init(),this.profileService.init(),this.sessionConfigService.init()])).filter(e=>e.status===`rejected`);if(e.length>0){for(let t=1;t<e.length;t++)console.warn(`[ClientsCoreService] Multiple init failures, secondary:`,e[t].reason);throw e[0].reason}}async destroy(){let e=(await Promise.allSettled([this.runtimeService.destroy(),this.binaryManager.destroy(),this.configPrimeService.destroy(),this.profileService.destroy(),this.sessionConfigService.destroy()])).filter(e=>e.status===`rejected`);for(let t of e)console.warn(`[ClientsCoreService] destroy failure:`,t.reason)}};const tn=l(`makaio.clients-core`);function nn(e){let t=[],n=()=>{for(let e of[...t].reverse())e()};try{for(let n of e)t.push(n())}catch(e){throw n(),e}return n}function rn(e={}){let{definitions:t=[],strategyDependencies:n,postInstallHandlers:r,binaryResolutionPolicy:i}=e,o=[...t];return{name:`makaio.clients-core`,displayName:`Clients Core`,version:`0.1.0`,critical:!0,namespaces:[ke,B,q],storage:{registerHandlers:ae((e,t)=>nn([()=>kt(e,t),()=>qt(e,t),()=>$t(e,t)]))},create:e=>{let t=new N(o),s=a.join(e.makaioHome,`clients`),c=new Ne(e.bus,{basePath:a.join(e.makaioHome,`binaries`),configBasePath:s,postInstallHandlers:r,...i!==void 0&&{resolutionPolicy:i}},t,n),l=new dt(e.bus,s),u=new _t(e.bus,s);return new en(new rt(e.bus),c,new lt(e.bus),l,u)}}}async function an(e,t){let n=await e.requestOptional(C.resolveBinary,{clientId:t});return n.handled?n.data:void 0}function on(e,t,n){return[...n??[],e,...t].map(ln).join(` `)}function sn(e,t,n,r,i){return on(e,[...i??[],...t.split(` `),n],r)}function cn(e){return e.runtimeCapabilities.hookEvents.filter(e=>e.frameworkSubject!==void 0).map(e=>({eventName:e.name,mode:e.mode}))}function ln(e){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)?e:`'${e.replaceAll(`'`,`'\\''`)}'`}export{Ze as AbsolutePathSchema,ge as BinaryNotFoundError,R as CLIENT_RUNTIME_STATUSES,_e as ClientAccountRegistry,De as ClientBinaryJobRunner,Ne as ClientBinaryManager,j as ClientBinaryStateRecordSchema,ke as ClientBinaryStorageNamespace,M as ClientBinaryStorageSubjects,A as ClientBinaryVersionRecordSchema,Ee as ClientBinaryVersionResolver,lt as ClientConfigPrimeService,N as ClientDefinitionRegistry,He as ClientHookHandleResponseSchema,G as ClientProfileRecordSchema,dt as ClientProfileService,q as ClientProfileStorageNamespace,J as ClientProfileStorageSubjects,Re as ClientRuntimeRegistry,rt as ClientRuntimeService,B as ClientRuntimeStorageNamespace,V as ClientRuntimeStorageSubjects,_t as ClientSessionConfigService,ce as ClientSubjects,tt as ClientWiringAggregatedResultSchema,$e as ClientWiringApplyResponseSchema,w as ClientWiringEntrySchema,Qe as ClientWiringListResponseSchema,et as ClientWiringRemoveResponseSchema,en as ClientsCoreService,tn as ClientsCoreToken,Ve as DEFAULT_HOOK_HANDLE_TIMEOUT_MS,U as RawClientHookPayloadSchema,z as RuntimeRecordSchema,nt as assertAbsoluteProjectDir,pe as atomicModifyFile,on as buildClientCommand,Ke as buildClientSessionBase,sn as buildHookCommand,W as canonicalizeClientId,Y as clientRuntimesDual,Ct as createClientNamespace,Xe as createClientWiringListSubjectDef,Ye as createClientWiringSubjectDef,rn as createClientsCorePackage,Ue as createRawClientHookHandleSubject,Be as createRawClientHookReceivedSubject,t as createStrategy,cn as deriveSessionEventDescriptors,qe as emitBestEffort,O as isPathWithinBase,Ge as pickNonEmptyString,We as pickNonEmptyStringValue,qt as registerDrizzleClientBinaryStorage,$t as registerDrizzleProfileStorage,kt as registerDrizzleRuntimeStorage,nn as registerStorageHandlersWithRollback,k as resolveAndValidateBasePath,an as resolveClientBinary,n as verifyInstalledVersion};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as StrategyDependencies, i as InstallStrategy, n as createStrategy, r as InstallArtifact, t as verifyInstalledVersion } from "../client-binary-version-verifier-
|
|
1
|
+
import { a as StrategyDependencies, i as InstallStrategy, n as createStrategy, r as InstallArtifact, t as verifyInstalledVersion } from "../client-binary-version-verifier-WsNRplFB.mjs";
|
|
2
2
|
export { type InstallArtifact, type InstallStrategy, type StrategyDependencies, createStrategy, verifyInstalledVersion };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,t}from"../client-binary-version-verifier-
|
|
1
|
+
import{r as e,t}from"../client-binary-version-verifier-CaFlNNjs.mjs";export{e as createStrategy,t as verifyInstalledVersion};
|