@makaio/framework 1.0.0-dev-1790624115602 → 1.0.0-dev-1790750768917
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 +1 -1
- package/dist/adapters/config/index.mjs +1 -1
- package/dist/adapters/index.d.mts +2 -2
- package/dist/adapters/index.mjs +1 -1
- package/dist/adapters/node.d.mts +1 -1
- package/dist/adapters/node.mjs +1 -1
- package/dist/{attempt-record-codec-DXpdMgyI.mjs → attempt-record-codec-zQnXwJF-.mjs} +1 -1
- package/dist/{caller-owned-adapter-stub-D8RZEdRn.mjs → caller-owned-adapter-stub-BLbPeCP9.mjs} +1 -1
- package/dist/clients/hook-subjects.d.mts +35 -1
- package/dist/clients/hook-subjects.mjs +1 -1
- package/dist/clients/index.d.mts +2 -12
- 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/code-execution/worker-entry.d.mts +1 -1
- package/dist/code-execution/worker-entry.mjs +1 -1
- package/dist/{code-execution-BspFbEdT.mjs → code-execution-Bdqurit9.mjs} +1 -1
- package/dist/{code-execution-DWSux6k1.mjs → code-execution-BwqsnOwu.mjs} +1 -1
- 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 -2
- package/dist/contracts/auth/index.d.mts +2 -2
- package/dist/contracts/automation-trigger/index.d.mts +3 -3
- package/dist/contracts/canonical-model/index.d.mts +1 -1
- package/dist/contracts/capabilities/index.d.mts +1 -1
- package/dist/contracts/client/index.d.mts +2 -2
- package/dist/contracts/code-execution/index.d.mts +1 -1
- package/dist/contracts/common/index.d.mts +1 -1
- package/dist/contracts/config/index.d.mts +2 -2
- package/dist/contracts/extension/index.d.mts +5 -5
- 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 +88 -88
- package/dist/contracts/materialization/index.d.mts +2 -2
- package/dist/contracts/model-registry/index.d.mts +1 -1
- package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
- package/dist/contracts/platform/index.d.mts +1 -1
- package/dist/contracts/provider/index.d.mts +2 -2
- package/dist/contracts/reaction/index.d.mts +1 -1
- package/dist/contracts/session/index.d.mts +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/worker/index.d.mts +2 -2
- package/dist/contracts/workflow/index.d.mts +2 -2
- package/dist/{contribution-DTb65rRN.d.mts → contribution-CCVRsaNB.d.mts} +2 -2
- package/dist/{definition-DWhjp0db.d.mts → definition-i4PufQpo.d.mts} +1 -1
- package/dist/{detached-extension-handle-QrXVNUR2.mjs → detached-extension-handle-DtnyN7vI.mjs} +1 -1
- package/dist/{execution-attempt-owner-recovery-BZOEVYFH.mjs → execution-attempt-owner-recovery-CvnTavxP.mjs} +1 -1
- package/dist/{execution-target-CDeIBu4b.mjs → execution-target-BumuKpUR.mjs} +1 -1
- package/dist/{extension-kOwzAMud.mjs → extension-C9EyvptA.mjs} +1 -1
- package/dist/{extension-context-DH84KOm9.d.mts → extension-context-BWrjVPXR.d.mts} +1 -1
- package/dist/fast-connection-CAm0eRI4.mjs +1 -0
- package/dist/{filesystem-service-CIaAqTRi.mjs → filesystem-service-yIGQgXXP.mjs} +1 -1
- package/dist/{framework-packages-D2fycy02.mjs → framework-packages-blqho6Nk.mjs} +1 -1
- package/dist/git/index.mjs +1 -1
- package/dist/{globby-CxGKRBGC.mjs → globby-DBl3Lybh.mjs} +1 -1
- package/dist/{handlers-CfWqy2KP.mjs → handlers-DmEPQqPX.mjs} +1 -1
- package/dist/{hook-responses-OETFKaAL.d.mts → hook-responses-v6EA_7WC.d.mts} +1 -1
- package/dist/inbound-hooks/fast-connection.d.mts +37 -0
- package/dist/inbound-hooks/fast-connection.mjs +1 -0
- package/dist/inbound-hooks/index.d.mts +3 -42
- package/dist/inbound-hooks/index.mjs +1 -1
- package/dist/inbound-hooks/stdio.d.mts +42 -0
- package/dist/inbound-hooks/stdio.mjs +1 -0
- package/dist/{index-oE2q0pTG.d.mts → index-BBrLhtLK.d.mts} +1 -1
- package/dist/{index-DPsQ_cFG2.d.mts → index-BIf8JHBp2.d.mts} +1 -1
- package/dist/{index-wQB90bP1.d.mts → index-BytbaguH.d.mts} +4 -4
- package/dist/{index-DpiNhNHS.d.mts → index-C0NhPcTU.d.mts} +7 -7
- package/dist/{index-CpaWzUE5.d.mts → index-CBzHX2vt.d.mts} +1 -1
- package/dist/{index-DyWD9bfP.d.mts → index-CE6cAf_r.d.mts} +1 -1
- package/dist/{index-C0Jfr8UK.d.mts → index-CPPulAkE.d.mts} +2 -2
- package/dist/{index-CQAriG-z.d.mts → index-CexFpJGs.d.mts} +17 -17
- package/dist/{index-BstMoG8p.d.mts → index-CfGPuR1W.d.mts} +3 -3
- package/dist/{index-BfFi98B_.d.mts → index-CrZ-G2qH.d.mts} +1 -1
- package/dist/{index-BRXETFym.d.mts → index-Cxx1aoPR.d.mts} +1 -1
- package/dist/{index-DDCixELI.d.mts → index-D-1RUdHM.d.mts} +1 -1
- package/dist/{index-BhvXJhTY.d.mts → index-DKPap20V.d.mts} +68 -68
- package/dist/{index-DHTLIeW62.d.mts → index-DUqPPB_X2.d.mts} +7 -7
- package/dist/{index-CLwnkYRD.d.mts → index-DWWP2cUb.d.mts} +1 -1
- package/dist/{index-CbVqpQBu.d.mts → index-DZkpkd7L.d.mts} +74 -74
- package/dist/{index-DrfwkH1x.d.mts → index-D_fMdJbU.d.mts} +8 -8
- package/dist/{index-CdkIg4Gu.d.mts → index-DeXQczqV.d.mts} +1 -1
- package/dist/{index-CVRQS5jk.d.mts → index-Di2-G_3M.d.mts} +1 -1
- package/dist/{index-BtyeBaw-.d.mts → index-DpqO6tbz.d.mts} +43 -43
- package/dist/{index-CtwkMknv.d.mts → index-Fmdwbgei.d.mts} +8 -8
- package/dist/{index-D9BLsMs8.d.mts → index-OLasQ7NP.d.mts} +1 -1
- package/dist/{index-UbOsrzp6.d.mts → index-gOYLLgKk.d.mts} +24 -24
- package/dist/{index-BUtnnwzK2.d.mts → index-hoGiyiqe2.d.mts} +12 -12
- package/dist/{index-t6LnywuE.d.mts → index-l8b_NgVk.d.mts} +1 -1
- package/dist/{index-6UlianLY2.d.mts → index-zD2RYwIn2.d.mts} +11 -11
- package/dist/kernel/cli/index.d.mts +2 -2
- package/dist/kernel/cli/index.mjs +1 -1
- package/dist/kernel/cli/register.d.mts +1 -1
- package/dist/kernel/cli/register.mjs +1 -1
- package/dist/kernel/cli/schemas.mjs +1 -1
- package/dist/kernel/extension/index.d.mts +2 -2
- package/dist/kernel/extension/index.mjs +1 -1
- package/dist/kernel/index.d.mts +5 -5
- package/dist/kernel/index.mjs +1 -1
- package/dist/kernel/namespace/index.d.mts +1 -1
- package/dist/kernel/namespace/index.mjs +1 -1
- package/dist/kernel/observability/index.d.mts +1 -1
- package/dist/kernel/observability/index.mjs +1 -1
- package/dist/kernel/providers/index.d.mts +1 -1
- package/dist/kernel/providers/index.mjs +1 -1
- package/dist/kernel/window/index.d.mts +1 -1
- package/dist/kernel/window/index.mjs +1 -1
- package/dist/{lib-BdyGVjpO.mjs → lib-BvRpcV8o.mjs} +1 -1
- package/dist/{lib-DxP3tPm9.mjs → lib-C0osDjMk.mjs} +1 -1
- package/dist/{load-extensions-eyXZhbRn.mjs → load-extensions-C4HK679X.mjs} +1 -1
- package/dist/{load-extensions-CCzTHlUE.d.mts → load-extensions-CMdXwAq-.d.mts} +1 -1
- package/dist/mcp-http-server/index.mjs +1 -1
- package/dist/{namespace-CHSwZhH7.d.mts → namespace-BH9U2C1O.d.mts} +2 -2
- package/dist/{namespace-B9iQN3FQ.d.mts → namespace-C42bZCbK.d.mts} +5 -5
- package/dist/namespace-CUKQ8osk.mjs +1 -0
- package/dist/{namespace-CMntzAPI.mjs → namespace-D-_gP6_l.mjs} +1 -1
- package/dist/{namespace-DAzOxaux.d.mts → namespace-D74MefGI.d.mts} +2 -2
- package/dist/{namespace-D38Fmd0E.d.mts → namespace-DYnHI_Nk.d.mts} +6 -6
- package/dist/node/bus-server/index.d.mts +1 -1
- package/dist/node/bus-server/index.mjs +1 -1
- package/dist/node/bus-server/server-lifecycle.d.mts +1 -1
- package/dist/node/bus-server/server-lifecycle.mjs +1 -1
- package/dist/{orchestrator-shared-CF-jPH91.mjs → orchestrator-shared-yQ-cLSjx.mjs} +1 -1
- package/dist/{ownership-memory-handler-C-y9zQf8.mjs → ownership-memory-handler-BkB4ondL.mjs} +1 -1
- package/dist/{package-CeEUAKHI.mjs → package-C-XcWpYW.mjs} +1 -1
- package/dist/{package-BSz4hbav.mjs → package-C_PVR-xw.mjs} +1 -1
- package/dist/{package-AlsbnlSt.mjs → package-CuXEeVP0.mjs} +1 -1
- package/dist/{package-BjtsXnaA.d.mts → package-Ir6SEHkA.d.mts} +1 -1
- package/dist/package.json +1 -1
- package/dist/{provider-context-D6GIZ5DC.mjs → provider-context-DHS1LRQA.mjs} +1 -1
- 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/code-execution/index.d.mts +2 -2
- package/dist/runtime-node/code-execution/index.mjs +1 -1
- package/dist/runtime-node/extension-discovery.d.mts +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 +5 -5
- package/dist/runtime-node/index.mjs +3 -3
- 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-Cz6-4_Dn.mjs → schema-C0lK_6u-.mjs} +1 -1
- package/dist/{schemas-BjhhkGN_.d.mts → schemas-BBMHnFq8.d.mts} +4 -4
- package/dist/{schemas-CYjPZwlQ.d.mts → schemas-C8YaJLKz.d.mts} +4 -4
- package/dist/{schemas-BXkSHQaF.d.mts → schemas-CEc_v3dl.d.mts} +2 -2
- package/dist/{schemas-feb64ScA.d.mts → schemas-DNP5mdxx.d.mts} +7 -7
- package/dist/{schemas-CBDNnyz4.d.mts → schemas-DnwAE1ao.d.mts} +1 -1
- package/dist/{schemas-RwAlAMbq2.d.mts → schemas-DrrpHMbF2.d.mts} +7 -7
- 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/index.mjs +1 -1
- package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
- package/dist/services/adapter-subsystem/namespace.mjs +1 -1
- package/dist/services/agent-runtime/index.d.mts +2 -2
- package/dist/services/agent-runtime/namespace.d.mts +1 -1
- package/dist/services/agent-runtime/schemas.d.mts +1 -1
- package/dist/services/automation-trigger/index.mjs +1 -1
- package/dist/services/capability/index.d.mts +2 -2
- package/dist/services/capability/index.mjs +1 -1
- package/dist/services/code-execution/index.d.mts +1 -1
- package/dist/services/code-execution/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/namespace.mjs +1 -1
- package/dist/services/execution-target/schemas.d.mts +1 -1
- package/dist/services/execution-target/schemas.mjs +1 -1
- package/dist/services/filesystem/index.d.mts +1 -1
- package/dist/services/filesystem/index.mjs +1 -1
- package/dist/services/filesystem/namespace.d.mts +6 -6
- package/dist/services/filesystem/schemas.d.mts +3 -3
- package/dist/services/git/namespace.mjs +1 -1
- package/dist/services/git/schemas.mjs +1 -1
- package/dist/services/harness/index.d.mts +3 -3
- package/dist/services/harness/index.mjs +1 -1
- package/dist/services/index.d.mts +59 -59
- 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 +1 -1
- package/dist/services/materialization/index.mjs +1 -1
- package/dist/services/model-registry/index.d.mts +1 -1
- package/dist/services/model-registry/index.mjs +1 -1
- package/dist/services/preferences/index.d.mts +2 -2
- package/dist/services/preferences/schemas.d.mts +1 -1
- package/dist/services/preferences/storage-namespace.d.mts +2 -2
- package/dist/services/provider-context/index.d.mts +1 -1
- package/dist/services/provider-context/index.mjs +1 -1
- package/dist/services/provider-runtime/index.mjs +1 -1
- package/dist/services/session/handlers/index.d.mts +1 -1
- package/dist/services/session/handlers/index.mjs +1 -1
- package/dist/services/session/index.d.mts +9 -9
- package/dist/services/session/index.mjs +1 -1
- package/dist/services/session/messages/namespace.d.mts +1 -1
- package/dist/services/session/messages/namespace.mjs +1 -1
- package/dist/services/session/orchestrator-testing/index.d.mts +1 -1
- package/dist/services/session/orchestrator-testing/index.mjs +1 -1
- package/dist/services/session/session-events/namespace.d.mts +1 -1
- package/dist/services/session/session-events/namespace.mjs +1 -1
- package/dist/services/session/storage/namespace.d.mts +1 -1
- package/dist/services/session/storage/schema.d.mts +1 -1
- package/dist/services/session/testing/index.mjs +1 -1
- package/dist/services/session/testing/orchestrator-shared.d.mts +1 -1
- package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
- package/dist/services/session/turns/namespace.d.mts +1 -1
- package/dist/services/session/turns/namespace.mjs +1 -1
- package/dist/services/session-editor/index.d.mts +1 -1
- package/dist/services/session-editor/index.mjs +1 -1
- package/dist/services/settings/index.d.mts +3 -3
- package/dist/services/settings/index.mjs +1 -1
- package/dist/services/settings/namespace.d.mts +4 -4
- package/dist/services/settings/namespace.mjs +1 -1
- package/dist/services/settings/storage/clients-namespace.d.mts +1 -1
- package/dist/services/settings/storage/clients-namespace.mjs +1 -1
- package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
- package/dist/services/settings/storage/index.d.mts +3 -3
- package/dist/services/settings/storage/index.mjs +1 -1
- package/dist/services/settings/storage/providers-namespace.d.mts +1 -1
- package/dist/services/settings/storage/providers-namespace.mjs +1 -1
- package/dist/services/subagent/index.d.mts +1 -1
- package/dist/services/subagent/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/services/workflow-transitions/index.d.mts +1 -1
- package/dist/services/workflow-transitions/index.mjs +1 -1
- package/dist/{session-Tj_635zr.mjs → session-BjV4HPCQ.mjs} +1 -1
- package/dist/{session-lineage-BQ9NWlt6.d.mts → session-lineage-CLrQb1Hz.d.mts} +1 -1
- package/dist/{src-CkKKoY0M.mjs → src-BDw_ijvA.mjs} +1 -1
- package/dist/src-CnTMHQm0.mjs +1 -0
- 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/{storage-namespace-NHTWAjaX.d.mts → storage-namespace-DoxNJ9Cg.d.mts} +10 -10
- package/dist/{tool-approval-service-BCN4W8eS.mjs → tool-approval-service-Bc0IC6Hj.mjs} +1 -1
- package/dist/{tools-BCL_dtHe.mjs → tools-Cbuj-ClQ.mjs} +1 -1
- package/dist/{transition-DK43U3QJ.d.mts → transition-DNNBGMtx.d.mts} +2 -2
- package/dist/{types-CW-4Y0k_2.d.mts → types-BfuE1-1V2.d.mts} +1 -1
- package/dist/{types-jmH0Yad4.d.mts → types-DsZBnL7z.d.mts} +6 -6
- package/dist/ui-kernel/index.d.mts +4 -4
- package/dist/ui-kernel/pages/namespace.d.mts +4 -4
- package/dist/ui-kernel/pages/schemas.d.mts +1 -1
- package/dist/{view-builder-Nffvg8MI.d.mts → view-builder-HU_v1Jg7.d.mts} +1 -1
- package/dist/workflow-engine/execution-attempt-repository.d.mts +1 -1
- package/dist/workflow-engine/execution-attempt-repository.mjs +1 -1
- package/dist/workflow-engine/index.d.mts +65 -65
- package/dist/workflow-engine/index.mjs +1 -1
- package/dist/workflow-engine/package.d.mts +1 -1
- package/dist/workflow-engine/package.mjs +1 -1
- package/dist/workflow-engine/provider-operation.d.mts +1 -1
- package/dist/workflow-engine/testing/conformance.d.mts +1 -1
- package/dist/workflow-engine/testing/conformance.mjs +1 -1
- package/dist/workflow-engine/testing/index.d.mts +1 -1
- package/dist/workflow-engine/testing/index.mjs +1 -1
- package/dist/workflow-engine/testing/sqlite.d.mts +1 -1
- package/dist/workflow-engine/testing/sqlite.mjs +1 -1
- package/dist/workflow-engine/workflow-orchestrator.mjs +1 -1
- package/dist/{workflow-transitions-7d9lGi08.mjs → workflow-transitions-CvT6P03B.mjs} +1 -1
- package/dist/{workflow-worker-BCLy_g_a.mjs → workflow-worker-CvQN2dmX.mjs} +1 -1
- package/package.json +9 -1
- package/dist/namespace-BPf6AbBO.mjs +0 -1
- package/dist/src-BZdw54VU.mjs +0 -1
- /package/dist/{adapter-auth-runtime-B6yX_QfG.mjs → adapter-auth-runtime-CYgj-Ht4.mjs} +0 -0
- /package/dist/{adapter-binding-DF-j-XHg.d.mts → adapter-binding-DG877aQO.d.mts} +0 -0
- /package/dist/{attach-error-wNJ8Q5uU.mjs → attach-error-mkj6SVd2.mjs} +0 -0
- /package/dist/{attempt-control-evidence-CHBnJoqN.mjs → attempt-control-evidence-DmNT2Wkb.mjs} +0 -0
- /package/dist/{attempt-fixtures-D3IsP0KH.mjs → attempt-fixtures-DPGw7peT.mjs} +0 -0
- /package/dist/{authority-state-bootstrap-4F5Wc_6l.mjs → authority-state-bootstrap-kIU-C2nI.mjs} +0 -0
- /package/dist/{base-orchestrator-DH6W4NQg.d.mts → base-orchestrator-CYU2iHqB.d.mts} +0 -0
- /package/dist/{bootstrap-start-client-9nOdeDYl.mjs → bootstrap-start-client-DyKCj6Eu.mjs} +0 -0
- /package/dist/{capability-service-BHcRd1td.d.mts → capability-service-BEVVEaTj.d.mts} +0 -0
- /package/dist/{client-Sx_N8LXo.d.mts → client-CkfU-f8m.d.mts} +0 -0
- /package/dist/{client-binary-version-verifier-DcHCFmsI.mjs → client-binary-version-verifier-CITusS9s.mjs} +0 -0
- /package/dist/{client-binary-version-verifier-C8gtKQFO.d.mts → client-binary-version-verifier-DgGke3gW.d.mts} +0 -0
- /package/dist/{clients-namespace-CASHxXUM.d.mts → clients-namespace-BRijqVIc.d.mts} +0 -0
- /package/dist/{config-namespace-Ctia-VDG.d.mts → config-namespace-9pC41Rtl.d.mts} +0 -0
- /package/dist/{create-static-mount-4B-mNtx1.mjs → create-static-mount-Dt-iC0Uq.mjs} +0 -0
- /package/dist/{credential-ref-MsnUkz9G.d.mts → credential-ref-DHhA4VTS.d.mts} +0 -0
- /package/dist/{cross-spawn-DGqEuNyT.mjs → cross-spawn-DIqCmSCD.mjs} +0 -0
- /package/dist/{cursor-storage-BvjxwBW6.mjs → cursor-storage-TgG0XBrI.mjs} +0 -0
- /package/dist/{definition-Cx175qXh.d.mts → definition-RnEMoWgj.d.mts} +0 -0
- /package/dist/{descriptor-to-package-BPIArq6N.mjs → descriptor-to-package-BmbVrmaM.mjs} +0 -0
- /package/dist/{drizzle-_w6sUR8p.mjs → drizzle-C9VHmFKj.mjs} +0 -0
- /package/dist/{esm-DwiWcwH0.mjs → esm-CC8hYyqN.mjs} +0 -0
- /package/dist/{event-D5_UaIBZ.mjs → event-DK8N_EOT.mjs} +0 -0
- /package/dist/{execution-attempt-repository-CY289HlC.mjs → execution-attempt-repository-BMbbbk7n.mjs} +0 -0
- /package/dist/{execution-attempt-repository-C2XKRZ3O.d.mts → execution-attempt-repository-Dyluu7wy.d.mts} +0 -0
- /package/dist/{extension-discovery-BqSPn73R.d.mts → extension-discovery-DmV1H6kV.d.mts} +0 -0
- /package/dist/{extension-namespace-CeRpt6C8.mjs → extension-namespace-BwNmFrd3.mjs} +0 -0
- /package/dist/{extension-package-provenance-ClpN3GHp.mjs → extension-package-provenance-DAc6EC8S.mjs} +0 -0
- /package/dist/{filesystem-service-5Ecp3nSV.d.mts → filesystem-service-RvR9ogzG.d.mts} +0 -0
- /package/dist/{handler-Cc1MhaR4.mjs → handler-BY2DDdyI.mjs} +0 -0
- /package/dist/{identity-DgTjgflr.mjs → identity-DBdzjf61.mjs} +0 -0
- /package/dist/{index-CwVSr7Ow.d.mts → index-2XwNyZAw.d.mts} +0 -0
- /package/dist/{index-B_Hf4XPX.d.mts → index-AtnMf7Qf.d.mts} +0 -0
- /package/dist/{index-BCuWtlv5.d.mts → index-B-ZgZuHg.d.mts} +0 -0
- /package/dist/{index-u0EteHlR2.d.mts → index-B4MBx8vA2.d.mts} +0 -0
- /package/dist/{index-Bmb7jPIe2.d.mts → index-BN4sKsLl2.d.mts} +0 -0
- /package/dist/{index-BjrbddkU.d.mts → index-BS3GYAN9.d.mts} +0 -0
- /package/dist/{index-CURT4JaX.d.mts → index-BrJ_6xi2.d.mts} +0 -0
- /package/dist/{index-w1AeWV4F.d.mts → index-BuRaseJB.d.mts} +0 -0
- /package/dist/{index-DmV9ybgT.d.mts → index-C5u82-qr.d.mts} +0 -0
- /package/dist/{index-DMgbNdEU.d.mts → index-C9G0Namh.d.mts} +0 -0
- /package/dist/{index-C9vF42jh.d.mts → index-CE-VlXE2.d.mts} +0 -0
- /package/dist/{index-2YW8DTb62.d.mts → index-CFet5T7v2.d.mts} +0 -0
- /package/dist/{index-rik4Uc5G.d.mts → index-CVQ852YA.d.mts} +0 -0
- /package/dist/{index-By1UhKYU2.d.mts → index-CVlnG_H22.d.mts} +0 -0
- /package/dist/{index-DOui-7u2.d.mts → index-C_LQ5NSy.d.mts} +0 -0
- /package/dist/{index-_OD_Nz3m.d.mts → index-Cc5kDe9y.d.mts} +0 -0
- /package/dist/{index-DDnY7JhE.d.mts → index-CnyQ2N42.d.mts} +0 -0
- /package/dist/{index-BOxMyaqG.d.mts → index-D-rTv5WO.d.mts} +0 -0
- /package/dist/{index-BEPn58tG.d.mts → index-D1es2sEA.d.mts} +0 -0
- /package/dist/{index-62OoZLGr.d.mts → index-DJZZS_H0.d.mts} +0 -0
- /package/dist/{index-N0-r5Hcd.d.mts → index-DggZJ6TT.d.mts} +0 -0
- /package/dist/{index-BV3nQpdO.d.mts → index-Do3__CB3.d.mts} +0 -0
- /package/dist/{index-DsmyofuM.d.mts → index-lJLrusa5.d.mts} +0 -0
- /package/dist/{index-BleQ0SR7.d.mts → index-riopop0h.d.mts} +0 -0
- /package/dist/{index-DAqAa9aL.d.mts → index-yfLm_tCv.d.mts} +0 -0
- /package/dist/{json-value--pv1-OHx.d.mts → json-value-B2gMynW3.d.mts} +0 -0
- /package/dist/{jsonl-transport-Ct1RWs0h.mjs → jsonl-transport-_zPQoMpM.mjs} +0 -0
- /package/dist/{lib-DomKag_k.mjs → lib-l8EW0aRq.mjs} +0 -0
- /package/dist/{model-registry-CeDu27XL.mjs → model-registry-BJbUh4uw.mjs} +0 -0
- /package/dist/{namespace-HLrZerLd.d.mts → namespace-B6S7ZFyX.d.mts} +0 -0
- /package/dist/{namespace-CqJhR19O.mjs → namespace-BG-DwVwA.mjs} +0 -0
- /package/dist/{namespace-Bo6-o_rW.mjs → namespace-BWTEnslo.mjs} +0 -0
- /package/dist/{namespace-Sd6qj6w22.d.mts → namespace-CO9J3NB-2.d.mts} +0 -0
- /package/dist/{namespace-CJ5sH_Bp.d.mts → namespace-CVO6bZ4F.d.mts} +0 -0
- /package/dist/{namespace-KomML5ti.d.mts → namespace-CytKzWBF.d.mts} +0 -0
- /package/dist/{namespace-C9xmGXbW.mjs → namespace-D1tJewLB.mjs} +0 -0
- /package/dist/{namespace-DbtfwD5Z.d.mts → namespace-D8pSI--d.d.mts} +0 -0
- /package/dist/{namespace-C1-ZAKEG.d.mts → namespace-DK5qZpST.d.mts} +0 -0
- /package/dist/{namespace-CnRQ8tCJ.mjs → namespace-DS4y8Kv9.mjs} +0 -0
- /package/dist/{namespace-J87EeVTm.mjs → namespace-DaFbUCqO.mjs} +0 -0
- /package/dist/{namespace-QV_2m25r.d.mts → namespace-Dcs8KeNG.d.mts} +0 -0
- /package/dist/{namespace-C_NGRHKs.d.mts → namespace-Dt7hJA-a.d.mts} +0 -0
- /package/dist/{namespace-CL9OyrHs.d.mts → namespace-F8g5LZte.d.mts} +0 -0
- /package/dist/{namespace-Bz0ZDWhE.d.mts → namespace-u4eoUCLp.d.mts} +0 -0
- /package/dist/{node-bridge-backend-DtRT--yn.mjs → node-bridge-backend-CsJ3_7CF.mjs} +0 -0
- /package/dist/{node-pty-backend-C72EgRws.mjs → node-pty-backend-o9xyqPMi.mjs} +0 -0
- /package/dist/{orchestrator-shared-Bvo0u-1D.d.mts → orchestrator-shared-B96yveBr.d.mts} +0 -0
- /package/dist/{out-EjlaPopg.mjs → out-GD8gVf9J.mjs} +0 -0
- /package/dist/{ownership-recovery-guard-C9h8K1jo.mjs → ownership-recovery-guard-C00rcqvz.mjs} +0 -0
- /package/dist/{package-BCKYMTYG.mjs → package-B6mFblgK.mjs} +0 -0
- /package/dist/{package-BwlW7N32.mjs → package-Dke3gaTJ.mjs} +0 -0
- /package/dist/{packages-vF9F4M41.mjs → packages-CZ2x-Ver.mjs} +0 -0
- /package/dist/{packages-KX9yofCa.d.mts → packages-Fy4a6vQy.d.mts} +0 -0
- /package/dist/{providers-CahjB0Kh.mjs → providers-CIb7WiA8.mjs} +0 -0
- /package/dist/{providers-namespace-B-l-OQZk.d.mts → providers-namespace-Bg03KVpr.d.mts} +0 -0
- /package/dist/{quick-lru-C1yB5RCQ.mjs → quick-lru-BgvUj18f.mjs} +0 -0
- /package/dist/{registry-DtaRGU8i.mjs → registry-mZnnYsTk.mjs} +0 -0
- /package/dist/{runtime-inputs-B7nWstrY.d.mts → runtime-inputs-qWXJyPAC.d.mts} +0 -0
- /package/dist/{schema-DLE6Dqyc.d.mts → schema-C58MdqlI.d.mts} +0 -0
- /package/dist/{schema-BnuyCklU.mjs → schema-CdUStsjr.mjs} +0 -0
- /package/dist/{schema-introspection-_Yw9L_mB.mjs → schema-introspection-CRLs6TZU.mjs} +0 -0
- /package/dist/{schemas-BNQtL3Ln.d.mts → schemas-BKE3qw_w.d.mts} +0 -0
- /package/dist/{schemas-C0Fb2-LN.d.mts → schemas-BNG5UOHC.d.mts} +0 -0
- /package/dist/{schemas-BNRFKQdz.mjs → schemas-BzzkGp4E.mjs} +0 -0
- /package/dist/{schemas-BOT1HUv6.d.mts → schemas-CUfqNSQj.d.mts} +0 -0
- /package/dist/{schemas-Dyp3rHZ7.d.mts → schemas-CtL2su-K.d.mts} +0 -0
- /package/dist/{schemas-Djjq4LLs.mjs → schemas-D9hVAoP5.mjs} +0 -0
- /package/dist/{schemas-DekYSXka.mjs → schemas-dPLES84M.mjs} +0 -0
- /package/dist/{schemas-Dxfk39-v.d.mts → schemas-hXVl5GeF.d.mts} +0 -0
- /package/dist/{schemas-BGTuiO3u.d.mts → schemas-zWy59x9Y.d.mts} +0 -0
- /package/dist/{server-lifecycle-BjbuCO-s.mjs → server-lifecycle-CmsnIyst.mjs} +0 -0
- /package/dist/{server-lifecycle-BINetU26.d.mts → server-lifecycle-DJcc_FqN.d.mts} +0 -0
- /package/dist/{shared-schemas-CnOyMY42.mjs → shared-schemas-DwAPAqeD.mjs} +0 -0
- /package/dist/{src-CqQSqLQI.mjs → src-CHyuN-wv.mjs} +0 -0
- /package/dist/{storage-namespace-TBX8VgK3.mjs → storage-namespace-CYZOP3RS.mjs} +0 -0
- /package/dist/{storage-namespace-definition-DV3IipmH.d.mts → storage-namespace-definition--9lrtKns.d.mts} +0 -0
- /package/dist/{supports-color-CjiFmM1U.mjs → supports-color-BZuv8Isw.mjs} +0 -0
- /package/dist/{tray-menu-service-BRrnoqaY.mjs → tray-menu-service-DGhHTNyy.mjs} +0 -0
- /package/dist/{types-CjoaGe_E.d.mts → types-BfQSVqtV.d.mts} +0 -0
- /package/dist/{types-B_mVEuYd.d.mts → types-CA6i6flt.d.mts} +0 -0
- /package/dist/{types-wwuw7RkB.mjs → types-CGL_-qT6.mjs} +0 -0
- /package/dist/{types-CqVuKsLC.d.mts → types-D-Q9gxe2.d.mts} +0 -0
- /package/dist/{types-D7WtaoMR.d.mts → types-DEDjIt3d.d.mts} +0 -0
- /package/dist/{types-MFZzmywp.d.mts → types-DVZYa4bZ.d.mts} +0 -0
- /package/dist/{window-registry-2MZdZPdA.mjs → window-registry-BB_bd5Yu.mjs} +0 -0
- /package/dist/{window-registry-1jI3f9ir.d.mts → window-registry-DqVHgb6Y.d.mts} +0 -0
package/dist/clients/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"../client-binary-version-verifier-DcHCFmsI.mjs";import{ClientHookHandleResponseSchema as r,DEFAULT_HOOK_HANDLE_TIMEOUT_MS as i,NOOP_HOOK_HANDLE_RESPONSE as a,RawClientHookPayloadSchema as o,canonicalizeClientId as s,createRawClientHookHandleSubject as c,createRawClientHookReceivedSubject as l}from"./hook-subjects.mjs";import{z as u}from"zod";import*as d from"node:fs/promises";import*as f from"node:path";import{randomUUID as p}from"node:crypto";import{SerialLane as m}from"@makaio/framework/utils";import{createBusNamespace as h,hostLocalRequest as ee}from"@makaio/framework/core";import{VersionLiteralSchema as te,extensionToken as ne,isUniversalRange as re,versionSatisfies as ie}from"@makaio/framework/contracts";import{MakaioBus as g}from"@makaio/framework/bus";import{BaseService as _}from"@makaio/framework/service-base";import{index as v,unique as ae,uniqueIndex as oe}from"drizzle-orm/sqlite-core";import{index as se,unique as ce,uniqueIndex as le}from"drizzle-orm/pg-core";import{defineDialectSchema as y,defineDualTable as b,didAffectRows as ue,executeTransaction as x,registerDrizzleHandlers as de,resolveSchema as S}from"@makaio/framework/storage/drizzle";import{and as C,eq as w,gt as fe,sql as T}from"drizzle-orm";import{ClientProfileNameSchema as E,ClientProfileSchema as pe,ClientSubjects as me,ClientSubjects as D,ClientWiringEntrySchema as O,DEFAULT_FAILURE_POLICY as he,SessionConfigLeaseIdSchema as ge,deriveHookEventTransportMode as _e,isValidContributorId as ve,isValidTimeoutMs as ye,validateClosedPolicy as be}from"@makaio/framework/contracts/client";import{SessionSubjects as xe}from"@makaio/framework/contracts/session";import*as k from"node:os";import{CLIDetectionSubjects as Se}from"@makaio/framework/services/cli-detection/namespace";import{ClientStorageSubjects as Ce}from"@makaio/framework/services/settings/storage";async function we(e,t,n,r,i){let a,o=(n.get(e)??Promise.resolve()).then(async()=>{let n=await i(r(await Te(e,t)));n.changed&&await Ee(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 Te(e,t){let n;try{n=await d.readFile(e,`utf-8`)}catch(e){if(e.code===`ENOENT`)return t;throw e}return JSON.parse(n)}async function Ee(e,t){let n=f.dirname(e),r=f.join(n,`${f.basename(e)}.${p()}.tmp`);await d.mkdir(n,{recursive:!0});try{await d.writeFile(r,`${JSON.stringify(t,null,2)}\n`,`utf-8`),await d.rename(r,e)}catch(e){throw await d.unlink(r).catch(()=>void 0),e}}var De=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)}},Oe=class{nextAccountSequence=1;accountIdsByIdentifier=new Map;accounts=new Map;upsertAccount(e){let t=Ae(e.displayLabel),n=new Map;for(let t of e.identifiers)n.set(ke(e.clientId,t.scheme,t.value),t);let r=je(n,this.accountIdsByIdentifier,`strong`),i=je(n,this.accountIdsByIdentifier,`alias`),a=r[0]??(i.length===1?i[0]:i.length>1?Me(i):this.createAccount()),o=(r.length>0?Fe(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 ke(e,t,n){return`${e}\u0000${t}\u0000${n}`}function Ae(e){return e?.trim()||void 0}function je(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(Ne)}function Me(e){return[...e].sort(Ne)[0]}function Ne(e,t){let n=Pe(e),r=Pe(t);return n!==null&&r!==null&&n!==r?n-r:e.localeCompare(t)}function Pe(e){let t=e.match(/^client-account-(\d+)$/);return t?Number(t[1]):null}function Fe(e,t,n){let r=new Set([...t,...n]);return r.delete(e),Array.from(r).sort(Ne)}function Ie(e){return{subject:`config.prime`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}async function A(e,t){let n=await e.requestOptional(Ie(t.clientId),t);return n.handled?n.data:{primed:!1}}function Le(){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 Re=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 j(t,n){return!f.isAbsolute(t)||!f.isAbsolute(n)?!1:e(f.resolve(t),f.resolve(n))}function M(e,t){if(!e||!f.isAbsolute(e))throw Error(`${t} requires a non-empty absolute basePath`);return f.resolve(e)}var ze=class{strategyDeps;config;jobs=new Map;#e=!1;resolvedBasePath;constructor(e,t){this.strategyDeps=e,this.config=t,this.resolvedBasePath=M(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=f.resolve(this.resolvedBasePath,e,t);if(!j(this.resolvedBasePath,n))throw Error(`Invalid install target path for client "${e}" and version "${t}"`);return n}};const N=u.object({id:u.string(),clientId:u.string(),version:u.string(),installPath:u.string(),installedAt:u.number().int().nonnegative(),createdAt:u.number().int().nonnegative()}),P=u.object({clientId:u.string(),activeVersion:u.string().nullable(),updatedAt:u.number().int().nonnegative()}),Be=u.object({previousActiveVersion:u.string().nullable(),activeVersion:u.string().nullable()}),Ve=h(`client-binary:storage`,{insertVersion:{request:N,response:u.object({success:u.boolean()})},recordInstalledVersion:{request:u.object({versionRecord:N,makeActive:u.boolean(),updatedAt:u.number().int().nonnegative()}),response:Be},listVersions:{request:u.object({clientId:u.string()}),response:u.object({versions:u.array(N)})},getSnapshot:{request:u.object({clientId:u.string()}),response:u.object({state:P.nullable(),versions:u.array(N)})},loadAllVersions:{request:u.object({}),response:u.object({versions:u.array(N)})},upsertState:{request:P,response:u.object({success:u.boolean()})},setActiveVersion:{request:u.object({clientId:u.string(),activeVersion:u.string().nullable(),updatedAt:u.number().int().nonnegative()}),response:Be},getState:{request:u.object({clientId:u.string()}),response:u.object({state:P.nullable()})},loadAllState:{request:u.object({}),response:u.object({states:u.array(P)})},loadSnapshot:{request:u.object({}),response:u.object({states:u.array(P),versions:u.array(N)})},removeVersionAndClearActive:{request:u.object({clientId:u.string(),version:u.string(),updatedAt:u.number().int().nonnegative()}),response:Be.extend({removedVersion:u.string().nullable()})}}),F=Ve.subjects;var He=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 Ue=process.env.MAKAIO_SKIP_CLIENT_VERSION_CHECK===`1`;function I(e,t,n,r,i){if(n===null){if(re(r))return;if(Ue){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(!ie(n,r)){if(Ue){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 We=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(F.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 j(this.resolvedBasePath,e)}async isExpectedInstallPath(e,t,n){if(!f.isAbsolute(e)||!this.isInstallPathWithinBase(e))return!1;let r=f.resolve(this.resolvedBasePath,t,n);if(!this.isInstallPathWithinBase(r))return!1;try{let[t,n,i]=await Promise.all([d.realpath(this.resolvedBasePath),d.realpath(r),d.realpath(e)]);return j(t,n)?i===n||j(n,i):!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&&I(`client.resolveBinary`,e,t,n.binary.supportedVersions,`managed binary version`);let a=Ge(n.versionCommand)?.[0];if(a===void 0)throw Error(`client.resolveBinary: definition for '${e}' has no versionCommand — cannot derive binary path`);let o=f.resolve(i.installPath,a),s=f.resolve(i.installPath);if(!o.startsWith(s+f.sep)&&o!==s)throw Error(`client.resolveBinary: versionCommand for '${e}' resolves outside the install directory`);let{configDir:c,env:l}=this.resolveIsolatedConfig(e,n);return{binaryPath:o,env:l,configDir:c,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(D.scan,{targets:[n]}),i=r.find(t=>t.clientId===e);if(i===void 0||!i.found)throw new De(e);let a=i.version??null;I(`client.resolveBinary`,e,a,t.binary.supportedVersions,`detected global binary version`);let o=this.resolveGlobalConfigDir(t),s=i.binaryPath??null;if(s!==null&&!f.isAbsolute(s))throw Error(`client.resolveBinary: detected global binary path for '${e}' is not absolute`);return{binaryPath:s,env:{},configDir:o,source:`global`,version:a}}resolveIsolatedConfig(e,t){let{configIsolation:n}=t;if(n===void 0)return{configDir:null,env:{}};let r=f.join(this.resolvedConfigBasePath,e,`config`),i=n.pathKind===`file`?f.join(r,f.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===`~`?k.homedir():n.startsWith(`~/`)?f.join(k.homedir(),n.slice(2)):n,i=t.pathKind===`file`?f.dirname(r):r;if(!f.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 Ge(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 Ke(e,t){let{versions:n,states:r}=await e.request(F.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 qe=class extends _{config;definitionLookup;versionResolver;jobRunner;strategyDeps;resolvedBasePath;resolvedConfigBasePath;resolver;pendingClients=new Set;constructor(e=g,t,n=new He([]),r=Le()){super(e),this.config=t,this.definitionLookup=n,this.resolvedBasePath=M(t.basePath,`ClientBinaryManager`),this.resolvedConfigBasePath=M(t.configBasePath,`ClientBinaryManager configBasePath`),this.strategyDeps=r,this.versionResolver=new Re,this.jobRunner=new ze(r,t),this.resolver=new We({bus:e,resolvedBasePath:this.resolvedBasePath,resolvedConfigBasePath:this.resolvedConfigBasePath,definitionLookup:n,...t.resolutionPolicy!==void 0&&{resolutionPolicy:t.resolutionPolicy}})}async onInit(){this.registerHandler(D.list,async e=>{let t=await this.handleList();e.setResult({clients:t})}),this.registerHandler(D.install,async e=>{let t=await this.handleInstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(D.update,async e=>{let t=await this.handleUpdate(e.payload.clientId);e.setResult(t)}),this.registerHandler(D.setActive,async e=>{let t=await this.handleSetActive(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(D.uninstall,async e=>{let t=await this.handleUninstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(D.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 Ke(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&&I(`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&&I(`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(F.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&&I(`client.setActive`,e,t,a.binary.supportedVersions,`requested binary version`);let o=Ge(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(F.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:a,activeVersion:o}=await this.bus.request(F.removeVersionAndClearActive,{clientId:e,version:t,updatedAt:Date.now()});if(i===null)throw Error(`client.uninstall: failed to delete version '${t}' for client '${e}'`);let s=r.installPath,c=typeof s==`string`&&s.length>0?f.resolve(s):null;if(typeof s!=`string`||s.length===0||c===null||!f.isAbsolute(s)||!await this.resolver.isExpectedInstallPath(c,e,t)?console.warn(`[ClientBinaryManager] Skipping removeDirectory: stored installPath "${String(s)}" does not match the expected install directory for ${e}@${t}`):await this.strategyDeps.removeDirectory(c).catch(n=>{console.warn(`[ClientBinaryManager] Failed to remove binary directory "${c}" for ${e}@${t}:`,n)}),a!==null&&o===null)try{await this.bus.emit(D.version.changed,{clientId:e,previousActiveVersion:a,activeVersion:null,reason:`uninstall`})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}return{clientId:e,removedVersion:t,activeVersion:o}}finally{this.pendingClients.delete(e)}}async patchActiveVersion(e,t,n){let r=(await this.bus.request(F.setActiveVersion,{clientId:e,activeVersion:t,updatedAt:Date.now()})).previousActiveVersion;if(r!==t)try{await this.bus.emit(D.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(D.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(D.installJob.completed,e).catch(e=>{console.warn(`[ClientBinaryManager] Failed to emit client.installJob.completed:`,e)})},r.postInstall,Ge(r.versionCommand)),o.jobId}makeCompletionCallback(){return async({clientId:e,version:t,installPath:n,makeActive:r,reason:i})=>{let a=Date.now();await A(this.bus,{clientId:e,configDir:this.resolveManagedConfigDir(e),phase:`managed-install`,binaryVersion:t});let o=await this.bus.request(F.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(D.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 f.join(this.resolvedConfigBasePath,e,`config`)}};function Je(e,t){return`${e}\0${t}`}function L(e,t){return`${e}\0${t}`}var Ye=class{records=new Map;bySupervisorSessionId=new Map;byPidClientId=new Map;byAdapterSessionClientId=new Map;supervisorSessionCandidates=new Map;pidClientCandidates=new Map;adapterSessionClientCandidates=new Map;adapterOwnedSessions=new Set;set(e,t){let n=t??this.records.get(e.clientRuntimeId);n&&this.removeIndexEntries(n),this.records.set(e.clientRuntimeId,e),this.addIndexEntries(e,!0)}setFromStorage(e,t,n){let r=this.records.get(e.clientRuntimeId);r&&this.removeIndexEntries(r),this.records.set(e.clientRuntimeId,e);let i=t-e.updatedAt<=n;this.addIndexEntries(e,i)}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 n=this.byPidClientId.get(Je(t,r));if(n!==void 0){let t=this.records.get(n);if(t!==void 0)return this.canMatchFallbackEvidence(t,e)?t:void 0}}if(n!==void 0){let t=this.byAdapterSessionClientId.get(L(n,r));if(t!==void 0){let n=this.records.get(t);if(n!==void 0)return this.canMatchFallbackEvidence(n,e)?n:void 0}}}values(){return this.records.values()}clear(){this.records.clear(),this.bySupervisorSessionId.clear(),this.byPidClientId.clear(),this.byAdapterSessionClientId.clear(),this.supervisorSessionCandidates.clear(),this.pidClientCandidates.clear(),this.adapterSessionClientCandidates.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,t){e.supervisorSessionId!==void 0&&this.setIndexEntry(this.bySupervisorSessionId,this.supervisorSessionCandidates,e.supervisorSessionId,e),t&&(e.pid!==void 0&&this.setIndexEntry(this.byPidClientId,this.pidClientCandidates,Je(e.pid,e.clientId),e),e.adapterSessionId!==void 0&&this.setIndexEntry(this.byAdapterSessionClientId,this.adapterSessionClientCandidates,L(e.adapterSessionId,e.clientId),e))}removeIndexEntries(e){e.supervisorSessionId!==void 0&&this.deleteIndexEntry(this.bySupervisorSessionId,this.supervisorSessionCandidates,e.supervisorSessionId,e.clientRuntimeId),e.pid!==void 0&&this.deleteIndexEntry(this.byPidClientId,this.pidClientCandidates,Je(e.pid,e.clientId),e.clientRuntimeId),e.adapterSessionId!==void 0&&this.deleteIndexEntry(this.byAdapterSessionClientId,this.adapterSessionClientCandidates,L(e.adapterSessionId,e.clientId),e.clientRuntimeId)}canMatchFallbackEvidence(e,t){return t===void 0||e.supervisorSessionId===void 0||e.supervisorSessionId===t}deleteIndexEntry(e,t,n,r){let i=t.get(n);if(i?.delete(r)&&(i.size===0&&t.delete(n),e.get(n)===r)){let t=this.findBestIndexOwner(i);t===void 0?e.delete(n):e.set(n,t.clientRuntimeId)}}setIndexEntry(e,t,n,r){let i=t.get(n);i===void 0&&(i=new Set,t.set(n,i)),i.add(r.clientRuntimeId);let a=e.get(n),o=a===void 0||!i.has(a)?void 0:this.records.get(a);(o===void 0||this.isNewerIndexOwner(r,o))&&e.set(n,r.clientRuntimeId)}findBestIndexOwner(e){let t;for(let n of e){let e=this.records.get(n);e!==void 0&&(t===void 0||this.isNewerIndexOwner(e,t))&&(t=e)}return t}isNewerIndexOwner(e,t){return e.createdAt>t.createdAt||e.createdAt===t.createdAt&&e.clientRuntimeId>t.clientRuntimeId}};const R=[`observed`,`started`],z=u.object({clientRuntimeId:u.string(),clientId:u.string(),status:u.enum(R),supervisorSessionId:u.string().optional(),pid:u.number().int().positive().optional(),parentPid:u.number().int().positive().optional(),adapterSessionId:u.string().optional(),sessionId:u.string().optional(),cwd:u.string().optional(),argv:u.array(u.string()).optional(),metadata:u.record(u.string(),u.unknown()).optional(),observedAt:u.number().int().nonnegative(),createdAt:u.number().int().nonnegative(),updatedAt:u.number().int().nonnegative()}),B=h(`client-runtime:storage`,{upsert:{request:z,response:u.object({success:u.boolean()})},loadAll:{request:u.object({}),response:u.object({records:u.array(z)})}}),V=B.subjects;function Xe(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 Ze(e){return Math.max(Date.now(),e+1)}function Qe(e,t){if(t.supervisorSessionId!==void 0&&t.supervisorSessionId===e.supervisorSessionId&&t.adapterSessionId!==void 0&&e.adapterSessionId!==void 0&&t.adapterSessionId!==e.adapterSessionId){if($e(e,t))return;throw Error(`client.runtime.observe: adapterSessionId '${t.adapterSessionId}' conflicts with the existing adapterSessionId '${e.adapterSessionId}' for supervisorSessionId '${t.supervisorSessionId}'`)}}function $e(e,t){return t.adapterSessionTransition===`root-clear`&&t.clientId===`codex`&&t.source.layer===`client-hook`&&t.source.producer===`codex-client-session-service`&&t.supervisorSessionId!==void 0&&t.supervisorSessionId===e.supervisorSessionId&&t.adapterSessionId!==void 0&&t.adapterSessionId!==e.adapterSessionId}function et(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}function tt(e,t){e.adapterSessionId=t.adapterSessionId,e.sessionId=void 0}var nt=class{runtimeMap=new Ye;mutationLane=new m;bus;latestCreatedAt=0;constructor(e){this.bus=e}async loadFromStorage(){await this.mutationLane.run(()=>this.loadFromStorageInLane())}async loadFromStorageInLane(){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),this.latestCreatedAt=Math.max(this.latestCreatedAt,n.createdAt)}async upsertRuntime(e){return this.mutationLane.run(()=>this.upsertRuntimeInLane(e))}async upsertRuntimeInLane(e){let t=this.runtimeMap.findByEvidence(e.supervisorSessionId,e.pid,e.adapterSessionId,e.clientId);if(t){let n=H(t);Qe(n,e);let r=$e(n,e);r&&tt(n,e);let i=n.status===`observed`,a=i&&Xe(e),o=et(n,e),s=i&&e.observedAt>n.observedAt;return a&&(n.status=`started`),(r||o||a||s)&&(n.updatedAt=Ze(n.updatedAt),s&&(n.observedAt=e.observedAt),await this.persistRecord(n),this.runtimeMap.set(n,t)),{clientRuntimeId:n.clientRuntimeId,created:!1,promoted:a,record:H(n)}}let n=this.nextCreatedAt(),r=p(),i=Xe(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 await this.persistRecord(a),this.runtimeMap.set(a),{clientRuntimeId:r,created:!0,promoted:!1,record:H(a)}}getRuntime(e){let t=this.runtimeMap.get(e);return t?H(t):void 0}resolveBySupervisorSessionId(e,t){let n=this.runtimeMap.findByEvidence(t,void 0,void 0,e);return n===void 0||n.clientId!==e||n.supervisorSessionId!==t?null:{clientId:n.clientId,supervisorSessionId:n.supervisorSessionId,...n.adapterSessionId!==void 0&&{adapterSessionId:n.adapterSessionId},...n.sessionId!==void 0&&{sessionId:n.sessionId},updatedAt:n.updatedAt}}markAdapterOwned(e,t){this.runtimeMap.markAdapterOwned(e,t)}hasAdapterSession(e,t){return this.runtimeMap.hasAdapterSession(e,t)}async clear(){await this.mutationLane.run(async()=>{this.runtimeMap.clear()})}get size(){return this.runtimeMap.size}nextCreatedAt(){return this.latestCreatedAt=Math.max(Date.now(),this.latestCreatedAt+1),this.latestCreatedAt}async persistRecord(e){if(!this.bus)return;let t=await this.bus.requestOptional(V.upsert,H(e));if(t.handled&&!t.data.success)throw Error(`client runtime storage rejected persistence for '${e.clientRuntimeId}'`)}};function rt(e,t){return{subject:t,$meta:{namespace:`client:${s(e,`createClientWiringSubjectDef`)}`,isRequest:!0,local:!1,channel:!1}}}function it(e){return rt(e,`wiring.list`)}const at=u.string().min(1).refine(f.isAbsolute,{message:`projectDir must be an absolute path`}),ot=u.object({entries:u.array(O)}),st=u.object({applied:u.number().int().nonnegative(),skipped:u.number().int().nonnegative()}),ct=u.object({removed:u.number().int().nonnegative()}),lt=u.object({clientId:u.string().trim().min(1),entries:u.array(O)});function ut(e){if(e!==void 0&&!f.isAbsolute(e))throw Error(`projectDir must be an absolute path, got: ${e}`)}var dt=class extends _{accountRegistry;runtimeRegistry;latestSnapshots=new Map;runtimeObserveRegistrationEpoch=0;activeIdentities=new Map;constructor(e=g,t=new Oe,n=new nt(e)){super(e),this.accountRegistry=t,this.runtimeRegistry=n}async onInit(){await this.runtimeRegistry.loadFromStorage(),this.registerHandler(D.account.observe,e=>this.handleAccountObserve(e)),this.registerHandler(D.usage.ingest,e=>this.handleUsageIngest(e)),this.registerHandler(D.scan,async e=>{let t=await this.scanClients(e.payload.targets);e.setResult({results:t})});let e=++this.runtimeObserveRegistrationEpoch;this.addCleanup(this.bus.on(D.runtime.observe,t=>this.handleRuntimeObserve(t,e))),this.registerHandler(D.runtime.resolveBySupervisorSessionId,e=>{e.setResult({runtime:this.runtimeRegistry.resolveBySupervisorSessionId(e.payload.clientId,e.payload.supervisorSessionId)})}),this.registerHandler(D.runtime.isAdapterManaged,e=>{let{adapterSessionId:t,clientId:n}=e.payload;e.setResult({managed:this.runtimeRegistry.hasAdapterSession(t,n)})}),this.registerHandler(D.wiring.list,async e=>{let t=await this.listWirings(e.payload);e.setResult({results:t})}),this.registerHandler(D.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(D.account.getActive,e=>{let t=this.activeIdentities.get(e.payload.clientId);e.setResult({identity:t??null})})}async onDestroy(){this.runtimeObserveRegistrationEpoch+=1,await this.runtimeRegistry.clear(),this.latestSnapshots.clear(),this.activeIdentities.clear(),this.accountRegistry.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=mt(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(D.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=ft(t.clientAccountId,e.payload,t.displayLabel),r=mt(pt(this.latestSnapshots.get(t.clientAccountId),n),t.displayLabel);this.latestSnapshots.set(t.clientAccountId,r),await this.bus.emit(D.usage.snapshot,r),e.setResult({clientAccountId:t.clientAccountId,snapshot:r})}async handleRuntimeObserve(e,t){if(t!==this.runtimeObserveRegistrationEpoch||!this.initialized)throw Error(`client.runtime.observe: service is stopping`);let n=this.serviceLifecycleGeneration,{payload:r}=e;if(r.supervisorSessionId===void 0&&r.pid===void 0&&r.adapterSessionId===void 0)throw Error(`client.runtime.observe: at least one hard-evidence field is required (supervisorSessionId, pid, or adapterSessionId)`);let{record:i,...a}=await this.runtimeRegistry.upsertRuntime(r);if(!this.isCurrentLifecycle(n)){e.setResult({clientRuntimeId:a.clientRuntimeId,created:a.created,promoted:a.promoted});return}r.source.layer===`adapter`&&r.adapterSessionId!==void 0&&this.runtimeRegistry.markAdapterOwned(r.adapterSessionId,r.clientId),this.bus.emit(D.runtime.observed,{clientRuntimeId:i.clientRuntimeId,clientId:i.clientId,status:i.status,source:r.source,observedAt:r.observedAt,supervisorSessionId:i.supervisorSessionId,pid:i.pid,parentPid:i.parentPid,adapterSessionId:i.adapterSessionId,sessionId:i.sessionId,cwd:i.cwd,argv:i.argv,metadata:i.metadata,updatedAt:i.updatedAt}).catch(e=>{console.warn(`[ClientRuntimeService] Failed to emit client.runtime.observed:`,e)}),(a.created||a.promoted)&&this.isCurrentLifecycle(n)&&await this.bus.emit(D.runtime.started,{clientRuntimeId:i.clientRuntimeId,clientId:i.clientId,status:i.status,source:r.source,observedAt:r.observedAt,supervisorSessionId:i.supervisorSessionId,pid:i.pid,parentPid:i.parentPid,adapterSessionId:i.adapterSessionId,sessionId:i.sessionId,cwd:i.cwd,argv:i.argv,metadata:i.metadata}).catch(e=>{console.warn(`[ClientRuntimeService] Failed to emit client.runtime.started:`,e)}),e.setResult({clientRuntimeId:a.clientRuntimeId,created:a.created,promoted:a.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(Se.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:gt(n,r,e.supportedVersions)}})}async listScannableStoredClients(){let{clients:e}=await this.bus.request(Ce.list,{});return e.filter(ht).map(e=>({clientId:e.id,binaryName:e.binary.name,supportedVersions:e.binary.supportedVersions}))}async listWirings(e){ut(e.projectDir);let{clients:t}=await this.bus.request(Ce.list,{}),n=e.clientId===void 0?void 0:s(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=it(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 ft(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 pt(e,t){return e&&e.observedAt>t.observedAt?e:t}function mt(e,t){return!e||t===void 0||e.displayLabel===t?e:{...e,displayLabel:t}}function ht(e){return e.enabled&&e.binary!==void 0}function gt(e,t,n){if(e&&t!==void 0&&t!==`unknown`&&n!==void 0&&!ie(t,n))return`Unsupported version: requires ${n}`}var _t=class extends _{constructor(e=g){super(e)}onInit(){this.registerHandler(D.config.prime,async e=>{e.setResult(await A(this.bus,e.payload))})}};const U=pe,W=u.string().trim().min(1),G=h(`client-profile:storage`,{get:{request:u.object({clientId:W,name:E}),response:u.object({record:U.nullable()})},getById:{request:u.object({id:W}),response:u.object({record:U.nullable()})},list:{request:u.object({clientId:W}),response:u.object({records:u.array(U)})},set:{request:U,response:u.object({success:u.boolean()})},delete:{request:u.object({clientId:W,name:E}),response:u.object({success:u.boolean()})},clearDefault:{request:u.object({clientId:W}),response:u.object({success:u.boolean()})},setDefault:{request:u.object({clientId:W,name:E}),response:u.object({record:U.nullable()})}}),K=G.subjects;function vt(e,t,n){let r=f.resolve(e),i=f.resolve(t),a=f.relative(r,i);if(a!==``&&!a.startsWith(`..`)&&!f.isAbsolute(a))return i;throw Error(`${n} refused to access path outside client profile root`)}var yt=class extends _{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(D.profile.create,async e=>{let t=s(e.payload.clientId,`profile.create`),{name:n,description:r}=e.payload;if((await this.bus.request(K.get,{clientId:t,name:n})).record!==null)throw Error(`Profile '${n}' already exists for client '${t}'`);let i=f.join(this.clientsBasePath,t,`profiles`),a=vt(i,f.join(i,n),`profile.create`);await d.mkdir(a,{recursive:!0});try{await A(this.bus,{clientId:t,configDir:a,phase:`profile-create`});let i=Date.now(),o={id:p(),clientId:t,name:n,description:r??null,configDir:a,isDefault:!1,createdAt:i,updatedAt:i};await this.bus.request(K.set,o),e.setResult({profile:o})}catch(e){throw await d.rm(a,{recursive:!0,force:!0}),e}})}registerListHandler(){this.registerHandler(D.profile.list,async e=>{let t=s(e.payload.clientId,`profile.list`),n=await this.bus.request(K.list,{clientId:t});e.setResult({profiles:n.records})})}registerGetHandler(){this.registerHandler(D.profile.get,async e=>{let t=s(e.payload.clientId,`profile.get`),n=await this.bus.request(K.get,{clientId:t,name:e.payload.name});e.setResult({profile:n.record})})}registerUpdateHandler(){this.registerHandler(D.profile.update,async e=>{let t=s(e.payload.clientId,`profile.update`),{name:n,description:r}=e.payload,i=await this.bus.request(K.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(K.set,a),e.setResult({profile:a})})}registerDeleteHandler(){this.registerHandler(D.profile.delete,async e=>{let t=s(e.payload.clientId,`profile.delete`),{name:n}=e.payload,r=await this.bus.request(K.get,{clientId:t,name:n});r.record!==null&&(vt(f.join(this.clientsBasePath,t,`profiles`),r.record.configDir,`profile.delete`),await d.rm(r.record.configDir,{recursive:!0,force:!0}));let i=await this.bus.request(K.delete,{clientId:t,name:n});e.setResult({success:i.success})})}registerSetDefaultHandler(){this.registerHandler(D.profile.setDefault,async e=>{let t=s(e.payload.clientId,`profile.setDefault`),{name:n}=e.payload,r=await this.bus.request(K.setDefault,{clientId:t,name:n});if(r.record===null)throw Error(`Profile '${n}' not found for client '${t}'`);e.setResult({profile:r.record})})}};function bt(e){return{subject:`sessionConfig.setup`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}function xt(e){return{subject:`sessionConfig.destroy`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}const St=()=>Date.now();function Ct(){let e=k.platform();if(e===`darwin`||e===`linux`||e===`win32`)return e;throw Error(`client.sessionConfig does not support platform '${e}'`)}function wt(e,t,n){let r=ge.safeParse(t);if(!r.success)throw Error(`${n} received an unsafe lease ID`);let i=f.resolve(e),a=f.resolve(i,r.data),o=f.relative(i,a);if(o===``||!o.startsWith(`..`)&&!f.isAbsolute(o))return a;throw Error(`${n} refused to access path outside client sessions root`)}var Tt=class extends _{clientsBasePath;getNow;liveLeasesByClient=new Map;liveLeasesByOwner=new Map;constructor(e,t,n=St){super(e),this.clientsBasePath=t,this.getNow=n}async onInit(){this.registerCreateHandler(),this.registerHandler(D.sessionConfig.destroy,async e=>{let{clientId:t,leaseId:n}=e.payload,r=s(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(D.sessionConfig.cleanup,async e=>{let{clientId:t}=e.payload,n=t===void 0?void 0:s(t,`sessionConfig.cleanup`),r=await this.cleanupOrphanedDirs(n);e.setResult({removed:r})}),this.registerHandler(xe.closed,async e=>{await this.destroyOwnedLeases(e.payload.sessionId)}),await this.cleanupOrphanedDirs()}registerCreateHandler(){this.registerHandler(D.sessionConfig.create,async e=>{let{clientId:t,leaseId:n,ownerSessionId:r,profileName:i,baseConfigDir:a,projectDir:o,configInheritance:c=`full`}=e.payload,l=s(t,`sessionConfig.create`),u=this.resolveClientSessionDir(l,n,`sessionConfig.create`),f=this.reserveLiveLease({clientId:l,leaseId:n,...r===void 0?{}:{ownerSessionId:r}});try{await d.mkdir(u,{recursive:!0});let t=await this.resolveBaseConfigDir(l,u,i,a),r=bt(l),s=await this.bus.requestOptional(r,{sessionDir:u,baseConfigDir:t,projectDir:o,platform:Ct(),configInheritance:c}),p=s.handled?s.data.env??{}:{},m=s.handled?s.data.authMaterialized:!1;if(await A(this.bus,{clientId:l,configDir:u,phase:`session-create`,projectDir:o}),f.releaseRequested)throw Error(`Config lease '${n}' was released while it was being created`);e.setResult({sessionDir:u,env:p,authMaterialized:m}),f.state=`ready`}catch(e){try{await this.beginLeaseCleanup(f)}catch(t){throw AggregateError([e,t],`Client session config creation and rollback both failed`)}throw e}finally{f.settleCreation(),f.state===`released`&&this.untrackLiveLease(f)}})}async resolveBaseConfigDir(e,t,n,r){if(r!==void 0)return r;if(n!==void 0){let t=await this.bus.request(K.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(K.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=f.join(this.clientsBasePath,e,`sessions`),i=await d.readdir(r).catch(()=>[]);await Promise.all(i.map(async i=>{if(!ge.safeParse(i).success)return;let a=wt(r,i,`sessionConfig.cleanup`),o;try{o=await d.stat(a)}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return;throw e}let s=o.birthtimeMs>0?o.birthtimeMs:o.ctimeMs;o.isDirectory()&&n-s>36e5&&!this.isLiveLease(e,i)&&(await this.destroyClientSessionDir(e,a),t.push(a))}))})),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(xt(e),{sessionDir:t,platform:Ct()})}finally{await d.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 wt(f.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 d.readdir(this.clientsBasePath,{withFileTypes:!0}).catch(()=>[])).filter(e=>e.isDirectory()).map(e=>e.name)}},Et=class extends _{store=new Map;constructor(e){super(e)}record(e,t){let{clientId:n,adapterSessionId:r,agentId:i}=e,a=this.buildKey(n,r,i);if(this.store.get(a)!==void 0)this.store.delete(a);else if(this.store.size>=1e3){let e=this.store.keys().next().value;e!==void 0&&this.store.delete(e)}this.store.set(a,{token:t,lastActivity:Date.now()})}onInit(){this.registerHandler(D.session.token.get,e=>{let{clientId:t,adapterSessionId:n,agentId:r}=e.payload,i=this.buildKey(t,n,r),a=this.store.get(i);a!==void 0&&(this.store.delete(i),this.store.set(i,{token:a.token,lastActivity:Date.now()})),e.setResult({token:a?.token??null})});let e=setInterval(()=>{let e=Date.now()-864e5;for(let[t,n]of this.store)n.lastActivity<e&&this.store.delete(t)},3e5);e.unref(),this.addCleanup(()=>clearInterval(e))}onDestroy(){this.store.clear()}buildKey(e,t,n){let r=`${e}\n${t}`;return n===void 0?r:`${r}\n${n}`}};function Dt(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Ot(e,t){return Dt(e[t])}function kt(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 At(e){try{e().catch(jt)}catch(e){jt(e)}}function jt(e){(process.env.DEBUG||process.env.MAKAIO_DEBUG)&&console.debug(`[emitBestEffort] observed-semantics emission failed`,e)}const Mt=new Set([`hook.received`,`hook.handle`]);function Nt(e,t){return g.registerNamespace(h(`client:${e}`,{"hook.received":o,"hook.handle":ee({request:o,response:r}),...t})).subjects}function Pt(e,t){let n=Object.keys(t).filter(e=>Mt.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 Ft(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 It(e,t,n){let r=Object.keys(n).filter(e=>!Ft(t,e));if(r.length!==0)throw Error(`[createClientNamespace] client:${e} was already registered without required subjects: ${r.join(`, `)}`)}function Lt(e,t){let n=s(e,`createClientNamespace`),r=t??{};Pt(n,r);let i=Nt(n,r);return It(n,i,r),{namespaceDomain:`client:${n}`,subjects:i}}const q=b(`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=>[v(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),v(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),v(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)],postgres:e=>[se(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),se(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),se(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)]}),Rt=q.sqlite,zt=q.postgres,Bt=y({clientRuntimes:Rt},{clientRuntimes:zt}),Vt=new Set(R);function Ht(e){if(!Vt.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 Ut(e,t){let{clientRuntimes:n}=S(t,Bt),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:fe(T`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(Ht)})});return()=>{r(),i()}}const Wt=b(`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=>[ae(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)],postgres:e=>[ce(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)]}),Gt=Wt.sqlite,Kt=b(`client_binary_state`,e=>({clientId:e.text(`client_id`).primaryKey(),activeVersion:e.text(`active_version`),updatedAt:e.epochMs(`updated_at`).notNull()})),qt=Kt.sqlite,Jt=Wt.postgres,Yt=Kt.postgres,J=y({clientBinaryVersions:Gt,clientBinaryState:qt},{clientBinaryVersions:Jt,clientBinaryState:Yt});function Y(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}function X(e){return{clientId:e.clientId,activeVersion:e.activeVersion??null,updatedAt:e.updatedAt}}function Xt(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}async function Zt(e,t,n){await e.insert(n).values(Xt(t)).onConflictDoNothing({target:[n.clientId,n.version]})}function Qt(e,t,n){return{clientId:e,activeVersion:t,updatedAt:n}}async function $t(e,t,n,r,i){await e.insert(i).values(Qt(t,n,r)).onConflictDoUpdate({target:i.clientId,set:{activeVersion:n,updatedAt:r}})}async function en(e,t){let{clientBinaryVersions:n}=S(e,J);await Zt(e,t,n)}async function tn(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=S(e,J);return x(e,async e=>{let[o]=await e.select().from(a).where(w(a.clientId,t.clientId)).limit(1),s=o?.activeVersion??null;return await Zt(e,t,i),n?(await $t(e,t.clientId,t.version,r,a),{previousActiveVersion:s,activeVersion:t.version}):{previousActiveVersion:s,activeVersion:s}})}async function nn(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=S(e,J);return x(e,async e=>{let[i]=await e.select().from(r).where(w(r.clientId,t)).limit(1),a=await e.select().from(n).where(w(n.clientId,t));return{state:i?X(i):null,versions:a.map(Y)}})}async function rn(e){let{clientBinaryVersions:t,clientBinaryState:n}=S(e,J);return x(e,async e=>{let r=await e.select().from(n),i=await e.select().from(t);return{states:r.map(X),versions:i.map(Y)}})}async function an(e,t){let{clientBinaryState:n}=S(e,J),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 on(e,t,n,r){let{clientBinaryState:i}=S(e,J);return x(e,async e=>{let[a]=await e.select().from(i).where(w(i.clientId,t)).limit(1),o=a?.activeVersion??null;return await $t(e,t,n,r,i),{previousActiveVersion:o,activeVersion:n}})}async function sn(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=S(e,J);return x(e,async e=>{let[o]=await e.select().from(a).where(w(a.clientId,t)).limit(1),s=o?.activeVersion??null;if(!ue(await e.delete(i).where(C(w(i.clientId,t),w(i.version,n)))))return{removedVersion:null,previousActiveVersion:s,activeVersion:s};await e.update(a).set({activeVersion:null,updatedAt:r}).where(C(w(a.clientId,t),w(a.activeVersion,n)));let[c]=await e.select().from(a).where(w(a.clientId,t)).limit(1);return{removedVersion:n,previousActiveVersion:s,activeVersion:c?.activeVersion??null}})}function cn(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=S(t,J),i=[e.on(F.insertVersion,async e=>{await en(t,e.payload),e.setResult({success:!0})}),e.on(F.recordInstalledVersion,async e=>{let{versionRecord:n,makeActive:r,updatedAt:i}=e.payload,a=await tn(t,n,r,i);e.setResult(a)}),e.on(F.listVersions,async e=>{let r=await t.select().from(n).where(w(n.clientId,e.payload.clientId));e.setResult({versions:r.map(Y)})}),e.on(F.getSnapshot,async e=>{let{state:n,versions:r}=await nn(t,e.payload.clientId);e.setResult({state:n,versions:r})}),e.on(F.loadAllVersions,async e=>{let r=await t.select().from(n);e.setResult({versions:r.map(Y)})}),e.on(F.upsertState,async e=>{await an(t,e.payload),e.setResult({success:!0})}),e.on(F.setActiveVersion,async e=>{let{clientId:n,activeVersion:r,updatedAt:i}=e.payload,a=await on(t,n,r,i);e.setResult(a)}),e.on(F.getState,async e=>{let[n]=await t.select().from(r).where(w(r.clientId,e.payload.clientId)).limit(1);e.setResult({state:n?X(n):null})}),e.on(F.loadAllState,async e=>{let n=await t.select().from(r);e.setResult({states:n.map(X)})}),e.on(F.loadSnapshot,async e=>{let{states:n,versions:r}=await rn(t);e.setResult({states:n,versions:r})}),e.on(F.removeVersionAndClearActive,async e=>{let{clientId:n,version:r,updatedAt:i}=e.payload,a=await sn(t,n,r,i);e.setResult(a)})];return()=>{for(let e of i)e()}}const ln=b(`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=>[oe(`uq_client_profiles_client_name`).on(e.clientId,e.name),oe(`uq_client_profiles_default`).on(e.clientId).where(T`${e.isDefault} = 1`)],postgres:e=>[le(`uq_client_profiles_client_name`).on(e.clientId,e.name),le(`uq_client_profiles_default`).on(e.clientId).where(T`${e.isDefault} = true`)]}),un=ln.sqlite,dn=ln.postgres,fn=y({clientProfiles:un},{clientProfiles:dn});function Z(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 pn(e,t,n){let{clientProfiles:r}=S(e,fn),i=Date.now();return x(e,async e=>{let[a]=await e.select().from(r).where(C(w(r.clientId,t),w(r.name,n))).limit(1);if(a===void 0)return null;await e.update(r).set({isDefault:!1,updatedAt:i}).where(C(w(r.clientId,t),w(r.isDefault,!0))),await e.update(r).set({isDefault:!0,updatedAt:i}).where(C(w(r.clientId,t),w(r.name,n)));let[o]=await e.select().from(r).where(C(w(r.clientId,t),w(r.name,n))).limit(1);return o===void 0?null:Z(o)})}function mn(e,t){let{clientProfiles:n}=S(t,fn),r=[e.on(K.get,async e=>{let{clientId:r,name:i}=e.payload,[a]=await t.select().from(n).where(C(w(n.clientId,r),w(n.name,i))).limit(1);e.setResult({record:a?Z(a):null})}),e.on(K.getById,async e=>{let[r]=await t.select().from(n).where(w(n.id,e.payload.id)).limit(1);e.setResult({record:r?Z(r):null})}),e.on(K.list,async e=>{let r=await t.select().from(n).where(w(n.clientId,e.payload.clientId));e.setResult({records:r.map(Z)})}),e.on(K.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(K.delete,async e=>{let{clientId:r,name:i}=e.payload,a=await t.delete(n).where(C(w(n.clientId,r),w(n.name,i)));e.setResult({success:ue(a)})}),e.on(K.clearDefault,async e=>{await t.update(n).set({isDefault:!1,updatedAt:Date.now()}).where(C(w(n.clientId,e.payload.clientId),w(n.isDefault,!0))),e.setResult({success:!0})}),e.on(K.setDefault,async e=>{let{clientId:n,name:r}=e.payload,i=await pn(t,n,r);e.setResult({record:i})})];return()=>{for(let e of r)e()}}function hn(e,t){return`${e}\0${t}`}function gn(e){let t=e=>typeof e==`string`&&e.trim().length>0;if(typeof e!=`object`||!e)throw Error(`Provider contract catalog must be an object`);if(!t(e.clientId)||!t(e.contractId)||!t(e.version))throw Error(`Provider contract catalog requires non-empty clientId, contractId, and version`);if(!Array.isArray(e.supportedInteractions)||e.supportedInteractions.length===0)throw Error(`Provider contract catalog requires supported interactions`);if(e.supportedInteractions.some(e=>!t(e))||new Set(e.supportedInteractions).size!==e.supportedInteractions.length)throw Error(`Provider contract catalog interactions must be non-empty and unique`);if(!Array.isArray(e.blockability)||e.blockability.length!==e.supportedInteractions.length)throw Error(`Provider contract catalog requires complete blockability metadata`);let n=new Map;for(let r of e.blockability){if(!t(r.interaction)||typeof r.blockable!=`boolean`||n.has(r.interaction))throw Error(`Provider contract catalog blockability metadata must be complete and unique`);n.set(r.interaction,r.blockable)}if(e.supportedInteractions.some(e=>!n.has(e))||typeof e.validate!=`function`)throw Error(`Provider contract catalog must provide blockability metadata and a validator for every interaction`)}var _n=class{entries=new Map;registerProviderContract(e,t){gn(t);let n=hn(t.clientId,t.contractId),r=this.entries.get(n);if(r)throw Error(`Provider contract collision: contract '${t.contractId}' for client '${t.clientId}' is already registered by extension '${r.extensionId}'; extension '${e}' cannot claim it`);this.entries.set(n,{extensionId:e,catalog:t})}unregisterProviderContract(e,t,n){let r=hn(t,n),i=this.entries.get(r);i&&i.extensionId===e&&this.entries.delete(r)}unregisterAllByExtension(e){for(let[t,n]of this.entries)n.extensionId===e&&this.entries.delete(t)}getProviderContract(e,t){let n=hn(e,t);return this.entries.get(n)?.catalog}getProviderContractsByClient(e){let t=[];for(let n of this.entries.values())n.catalog.clientId===e&&t.push(n.catalog);return t}getAllProviderContracts(){return[...this.entries.values()].map(e=>e.catalog)}clear(){this.entries.clear()}};function vn(e,t){return`${e}/${t}`}function yn(e,t,n){switch(e.kind){case`event-name`:return e.name===t;case`capability`:return n.includes(e.capability)}}function bn(e,t){let n=t.definition.priority-e.definition.priority;return n===0?e.ordinal-t.ordinal:n}function xn(e){return Array.isArray(e)&&e.length>0&&e.every(e=>typeof e!=`object`||!e?!1:e.kind===`event-name`?typeof e.name==`string`&&e.name.trim().length>0:e.kind===`capability`&&typeof e.capability==`string`&&e.capability.trim().length>0)}function Sn(e){return e.lane===`canonical`?e.clientIds===void 0||Array.isArray(e.clientIds)&&e.clientIds.length>0&&e.clientIds.every(e=>typeof e==`string`&&e.trim().length>0):e.lane===`provider`?typeof e.clientId==`string`&&e.clientId.trim().length>0&&typeof e.contractId==`string`&&e.contractId.trim().length>0:!1}function Cn(e,t){if(typeof t!=`object`||!t||Array.isArray(t))return{code:`invalid-contributor-lane`,message:`Contributor definition must be an object`,extensionName:e};let n={...typeof t.id==`string`&&{contributorId:t.id},extensionName:e};if(!Number.isFinite(t.priority))return{...n,code:`invalid-priority`,message:`Contributor '${t.id}' priority must be a finite number`};if(!xn(t.selectors))return{...n,code:`invalid-selectors`,message:`Contributor '${t.id}' requires non-empty valid selectors`};if(typeof t.respond!=`function`)return{...n,code:`invalid-respond`,message:`Contributor '${t.id}' respond must be a function`};if(!Sn(t))return{...n,code:`invalid-contributor-lane`,message:`Contributor '${t.id}' has an invalid lane or target identity`};if(!ve(t.id))return{...n,code:`invalid-contributor-id`,message:`Contributor ID is empty or invalid`};if(!ye(t.timeoutMs))return{...n,code:`invalid-timeout-ms`,message:`Contributor '${t.id}' has an invalid timeoutMs: ${String(t.timeoutMs)}; must be a positive finite number`}}function wn(e,t,n,r){let i=[],a=new Set;for(let o of t){let t=Cn(e,o);if(t){i.push(t);continue}let s=vn(e,o.id);if(a.has(s)){i.push({code:`invalid-contributor-id`,message:`Duplicate contributor ID '${o.id}' within the same extension batch '${e}'`,contributorId:o.id,extensionName:e});continue}if(r.has(s)){i.push({code:`invalid-contributor-id`,message:`Contributor ID '${o.id}' is already registered by extension '${e}'`,contributorId:o.id,extensionName:e});continue}a.add(s),Tn(e,o,n,i)}return i}function Tn(e,t,n,r){let i=t.failurePolicy??`open`;if(t.lane===`provider`){let a=n.getProviderContract(t.clientId,t.contractId);if(!a){r.push({code:`inactive-provider-contract`,message:`Provider contributor requires active contract '${t.contractId}' for client '${t.clientId}'`,contributorId:t.id,extensionName:e});return}En(e,t,[a],i,r);return}En(e,t,t.clientIds?t.clientIds.flatMap(e=>n.getProviderContractsByClient(e)):n.getAllProviderContracts(),i,r)}function En(e,t,n,r,i){for(let a of t.selectors){let o=a.kind===`capability`?a.capability:a.name,s=n.filter(e=>e.supportedInteractions.includes(o));if((t.lane===`provider`||a.kind===`capability`)&&s.length===0){i.push({code:`unsupported-interaction`,message:`Interaction '${o}' is not supported by an eligible active provider contract`,contributorId:t.id,extensionName:e});continue}if(r===`closed`){if(s.length===0){i.push({code:`closed-policy-on-non-blockable`,message:`Closed failure policy requires blockability proof for interaction '${o}', but no contract declares it for an eligible active client`,contributorId:t.id,extensionName:e});continue}for(let n of s)for(let r of be([a],n))i.push({code:`closed-policy-on-non-blockable`,message:r,contributorId:t.id,extensionName:e})}}}var Dn=class{contractRegistry;contributors=new Map;extensionIndex=new Map;nextOrdinal=1;constructor(e){this.contractRegistry=e}installContributors(e,t){let n=wn(e,t,this.contractRegistry,this.contributors);if(n.length>0)return{errors:n};let r=this.extensionIndex.get(e)??new Set;for(let n of t){let t=vn(e,n.id),i=Object.freeze({...n,selectors:Object.freeze(n.selectors.map(e=>Object.freeze({...e})))}),a=Object.freeze({namespacedId:t,extensionId:e,ordinal:this.nextOrdinal,definition:i});this.nextOrdinal+=1,this.contributors.set(t,a),r.add(t)}return this.extensionIndex.set(e,r),{errors:[]}}removeContributors(e){let t=this.extensionIndex.get(e);if(t){for(let e of t)this.contributors.delete(e);this.extensionIndex.delete(e)}}snapshot(e,t,n,r=[]){let i=[];for(let a of this.contributors.values()){let{definition:o}=a;o.lane===`provider`&&(o.clientId!==e||o.contractId!==t)||o.lane===`canonical`&&o.clientIds!==void 0&&!o.clientIds.includes(e)||a.definition.selectors.some(e=>yn(e,n,r))&&i.push(a)}return i.sort(bn),Object.freeze(i)}clear(){this.contributors.clear(),this.extensionIndex.clear(),this.nextOrdinal=1}};function On(e,t){return{filter:e=>!!e.clientHookResponses,async processActivated(n,r,i){let a=r.clientHookResponses;if(!a)return;let o={extensionName:n,extensionContext:i,getProviderContract:(e,n)=>t.getProviderContract(e,n)},s;try{s=await a.createContributors(o)}catch(e){throw Error(`[ClientHookResponseContributionProcessor] createContributors failed for '${n}': ${e instanceof Error?e.message:String(e)}`,{cause:e})}let c=e.installContributors(n,s);if(c.errors.length>0){let e=c.errors.map(e=>`[${e.code}] ${e.contributorId??`<unknown>`}: ${e.message}`).join(`; `);throw Error(`[ClientHookResponseContributionProcessor] Contributor validation failed for '${n}': ${e}`)}},async processStopped(t){e.removeContributors(t)}}}var kn=class{runtimeService;binaryManager;configPrimeService;profileService;sessionConfigService;sessionTokenService;providerContractRegistry;hookResponseRegistry;sessionTokens;constructor(e,t,n,r,i,a,o,s){this.runtimeService=e,this.binaryManager=t,this.configPrimeService=n,this.profileService=r,this.sessionConfigService=i,this.sessionTokenService=a,this.providerContractRegistry=o,this.hookResponseRegistry=s,this.sessionTokens=a}async init(){let e=(await Promise.allSettled([this.runtimeService.init(),this.binaryManager.init(),this.configPrimeService.init(),this.profileService.init(),this.sessionConfigService.init(),this.sessionTokenService.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(),this.sessionTokenService.destroy()])).filter(e=>e.status===`rejected`);if(e.length>0)throw AggregateError(e.map(e=>e.reason),`ClientsCoreService failed to tear down cleanly`)}};const An=ne(`makaio.clients-core`);function jn(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 Mn(e={}){let{definitions:t=[],strategyDependencies:n,postInstallHandlers:r,binaryResolutionPolicy:i}=e,a=[...t],o=new _n,s=new Dn(o);return{name:`makaio.clients-core`,displayName:`Clients Core`,version:`0.1.0`,critical:!0,namespaces:[Ve,B,G],storage:{registerHandlers:de((e,t)=>jn([()=>Ut(e,t),()=>cn(e,t),()=>mn(e,t)]))},create:e=>{let t=new He(a),c=f.join(e.makaioHome,`clients`),l=new qe(e.bus,{basePath:f.join(e.makaioHome,`binaries`),configBasePath:c,postInstallHandlers:r,...i!==void 0&&{resolutionPolicy:i}},t,n),u=new yt(e.bus,c),d=new Tt(e.bus,c),p=new Et(e.bus);return new kn(new dt(e.bus),l,new _t(e.bus),u,d,p,o,s)},runtimeBoot:{configure:e=>{e.registerContributionProcessor(On(s,o))}}}}async function Nn(e,t){let n=await e.requestOptional(D.resolveBinary,{clientId:t});return n.handled?n.data:void 0}function Pn(e,t,n){return[...n??[],e,...t].map(Rn).join(` `)}function Fn(e,t,n,r,i){return Pn(e,[...i??[],...t.split(` `),n],r)}function In(e){return e.runtimeCapabilities.hookEvents.map(e=>{let t={eventName:e.name,mode:_e(e)};return e.minimumVersion===void 0?t:{...t,minimumVersion:e.minimumVersion}})}function Ln(e,t){return e.minimumVersion===void 0||typeof t!=`string`||!te.safeParse(t).success?!0:ie(t,`>=${e.minimumVersion}`)}function Rn(e){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)?e:`'${e.replaceAll(`'`,`'\\''`)}'`}const zn=new Set([`context.append`,`session.token`]);function Bn(e){if(e===void 0)return!0;if(!Array.isArray(e))return`canonicalEffects must be an array`;for(let t of e){if(typeof t!=`object`||!t||!zn.has(t.kind)||typeof t.value!=`string`)return`canonicalEffects must contain complete context.append or session.token effects`;if(Object.keys(t).some(e=>e!==`kind`&&e!==`value`))return`canonicalEffects must contain only kind and value`;if(t.kind===`session.token`&&t.value.length===0)return`session.token effect requires a non-empty string value`}return!0}function Vn(e,t,n){return e===void 0?!0:typeof e!=`object`||!e||Array.isArray(e)||e.clientId!==t||e.contractId!==n||typeof e.effects!=`object`||e.effects===null||Array.isArray(e.effects)?`providerEnvelope must contain the exact clientId, contractId, and an effects object`:Object.keys(e).some(e=>e!==`clientId`&&e!==`contractId`&&e!==`effects`)?`providerEnvelope must contain only clientId, contractId, and effects`:!0}function Hn(e,t,n,r,i,a){if(!r)return`Provider contributor requires active contract '${t.contractId}'`;if(r.clientId!==n||r.clientId!==t.clientId)return`Provider contract client '${r.clientId}' does not match '${t.clientId}'`;if(r.contractId!==t.contractId)return`Provider contract '${r.contractId}' does not match '${t.contractId}'`;let o=Vn(e.providerEnvelope,t.clientId,t.contractId);return o===!0?r.validate(e,{clientId:n,eventName:i,eventPayload:a}):o}function Un(e,t,n,r,i,a){if(e===void 0)return!0;if(typeof e!=`object`||!e||Array.isArray(e))return`Contributor response must be an object or undefined`;let o=t.lane===`canonical`?[`canonicalEffects`]:[`providerEnvelope`];return Object.keys(e).some(e=>!o.includes(e))?`Contributor response contains keys outside the ${t.lane} lane`:t.lane===`canonical`?Bn(e.canonicalEffects):Hn(e,t,n,r,i,a)}const Q=Symbol(`contributor-timeout`);function Wn(e){return e.failurePolicy??he}function Gn(e){return e.namespacedId??e.definition.id}function $(e,t){return e===`closed`?`closed-failure`:t}function Kn(e){if(!e)return;let t=[];return e.canonicalEffects&&t.push(...e.canonicalEffects),e.providerEnvelope&&t.push(e.providerEnvelope),t.length>0?t:void 0}function qn(e,t,n){let r=t-Date.now();return r<=0||n.signal.aborted?(n.abort(Error(`Contributor deadline expired`)),Promise.resolve(Q)):new Promise((i,a)=>{let o=!1,s=e=>{o||(o=!0,clearTimeout(c),n.signal.removeEventListener(`abort`,l),i(e))},c=setTimeout(()=>{n.abort(Error(`Contributor timeout`)),s(Q)},r),l=()=>s(Q);n.signal.addEventListener(`abort`,l,{once:!0}),e.then(e=>{Date.now()>=t?(n.abort(Error(`Contributor timeout`)),s(Q)):s(e)},e=>{o||(o=!0,clearTimeout(c),n.signal.removeEventListener(`abort`,l),a(e))})})}function Jn(e){let t=[],n=[],r=`Request deadline already expired before collection started`;for(let i of e){let e=Gn(i),a=$(Wn(i.definition),`timeout`);t.push({contributorId:e,outcome:a,durationMs:0}),n.push({contributorId:e,severity:`error`,message:r})}let i=t.find(e=>e.outcome===`closed-failure`);return{outcomes:t,diagnostics:n,closedFailure:i?{contributorId:i.contributorId,detail:r}:void 0}}function Yn(e,t){if(t.aborted){e.abort(t.reason);return}let n=()=>{e.abort(t.reason)};t.addEventListener(`abort`,n,{once:!0}),e.signal.addEventListener(`abort`,()=>{t.removeEventListener(`abort`,n)},{once:!0})}function Xn(e,t,n,r,i,a){let{definition:o}=e,s=Gn(e),c=Date.now(),l=c+o.timeoutMs,u=n===void 0?l:Math.min(n,l),d=u-c,f=new AbortController;r&&Yn(f,r);let p={clientId:t,deadline:u,remainingBudgetMs:d,signal:f.signal,eventName:i,eventPayload:a};if(f.signal.aborted)return{contributorId:s,definition:o,startMs:c,abort:f,settled:Promise.resolve({tag:`timeout`})};let m;try{let e=o.respond(p);m=e instanceof Promise?e:Promise.resolve(e)}catch(e){m=Promise.reject(e)}return{contributorId:s,definition:o,startMs:c,abort:f,settled:qn(m,u,f).then(e=>e===Q?{tag:`timeout`}:{tag:`ok`,response:e},e=>({tag:`rejected`,error:e}))}}function Zn(e,t,n,r,i,a){let{contributorId:o,definition:s,startMs:c,abort:l}=e,u=Date.now()-c,d=Wn(s);if(l.signal.aborted||l.abort(Error(`Collection complete`)),t.tag===`timeout`){let e=`Contributor timed out after ${u}ms`;return{outcome:{contributorId:o,outcome:$(d,`timeout`),durationMs:u},diagnostic:{contributorId:o,severity:`error`,message:e}}}if(t.tag===`rejected`){let e=`Contributor rejected: ${t.error instanceof Error?t.error.message:String(t.error)}`;return{outcome:{contributorId:o,outcome:$(d,`rejection`),durationMs:u},diagnostic:{contributorId:o,severity:`error`,message:e,cause:t.error}}}let{response:f}=t,p=Un(f,s,n,r,i,a);if(p!==!0){let e=`Validation failed: ${p}`;return{outcome:{contributorId:o,outcome:$(d,`rejection`),durationMs:u},diagnostic:{contributorId:o,severity:`error`,message:e}}}return{outcome:{contributorId:o,outcome:`success`,durationMs:u,effects:Kn(f)}}}function Qn(e,t){let n=e.find(e=>e.outcome===`closed-failure`);if(!n)return{outcomes:e,diagnostics:t};let r={contributorId:n.contributorId,detail:t.find(e=>e.contributorId===n.contributorId)?.message??`Closed failure`};return{outcomes:e.map(e=>{if(e.effects){let{effects:t,...n}=e;return n}return e}),diagnostics:t,closedFailure:r}}async function $n(e,t,n,r,i,a,o){if(e.length===0)return{outcomes:[],diagnostics:[]};if(n!==void 0&&n<=Date.now())return Jn(e);let s=e.map(e=>Xn(e,t,n,r,i,a)),c=await Promise.all(s.map(e=>e.settled)),l=[],u=[];for(let e=0;e<s.length;e++){let{outcome:n,diagnostic:r}=Zn(s[e],c[e],t,o,i,a);l.push(n),r&&u.push(r)}return Qn(l,u)}export{at as AbsolutePathSchema,De as BinaryNotFoundError,R as CLIENT_RUNTIME_STATUSES,Oe as ClientAccountRegistry,ze as ClientBinaryJobRunner,qe as ClientBinaryManager,P as ClientBinaryStateRecordSchema,Ve as ClientBinaryStorageNamespace,F as ClientBinaryStorageSubjects,N as ClientBinaryVersionRecordSchema,Re as ClientBinaryVersionResolver,_t as ClientConfigPrimeService,He as ClientDefinitionRegistry,r as ClientHookHandleResponseSchema,_n as ClientHookProviderContractRegistry,Dn as ClientHookResponseRegistry,U as ClientProfileRecordSchema,yt as ClientProfileService,G as ClientProfileStorageNamespace,K as ClientProfileStorageSubjects,nt as ClientRuntimeRegistry,dt as ClientRuntimeService,B as ClientRuntimeStorageNamespace,V as ClientRuntimeStorageSubjects,Tt as ClientSessionConfigService,Et as ClientSessionTokenService,me as ClientSubjects,lt as ClientWiringAggregatedResultSchema,st as ClientWiringApplyResponseSchema,O as ClientWiringEntrySchema,ot as ClientWiringListResponseSchema,ct as ClientWiringRemoveResponseSchema,kn as ClientsCoreService,An as ClientsCoreToken,i as DEFAULT_HOOK_HANDLE_TIMEOUT_MS,a as NOOP_HOOK_HANDLE_RESPONSE,o as RawClientHookPayloadSchema,z as RuntimeRecordSchema,ut as assertAbsoluteProjectDir,we as atomicModifyFile,Pn as buildClientCommand,kt as buildClientSessionBase,Fn as buildHookCommand,s as canonicalizeClientId,q as clientRuntimesDual,$n as collectContributions,On as createClientHookResponseContributionProcessor,Lt as createClientNamespace,it as createClientWiringListSubjectDef,rt as createClientWiringSubjectDef,Mn as createClientsCorePackage,c as createRawClientHookHandleSubject,l as createRawClientHookReceivedSubject,t as createStrategy,In as deriveSessionEventDescriptors,At as emitBestEffort,j as isPathWithinBase,Ln as isSessionEventSupported,Ot as pickNonEmptyString,Dt as pickNonEmptyStringValue,cn as registerDrizzleClientBinaryStorage,mn as registerDrizzleProfileStorage,Ut as registerDrizzleRuntimeStorage,jn as registerStorageHandlersWithRollback,M as resolveAndValidateBasePath,Nn as resolveClientBinary,n as verifyInstalledVersion};
|
|
1
|
+
import{n as e,r as t,t as n}from"../client-binary-version-verifier-CITusS9s.mjs";import{ClientHookHandleResponseSchema as r,DEFAULT_HOOK_HANDLE_TIMEOUT_MS as i,NOOP_HOOK_HANDLE_RESPONSE as a,RawClientHookPayloadSchema as o,canonicalizeClientId as s,createRawClientHookHandleSubject as c,createRawClientHookReceivedSubject as l,pickNonEmptyStringValue as u}from"./hook-subjects.mjs";import{z as d}from"zod";import*as f from"node:fs/promises";import*as p from"node:path";import{randomUUID as m}from"node:crypto";import{SerialLane as ee}from"@makaio/framework/utils";import{createBusNamespace as h,hostLocalRequest as te}from"@makaio/framework/core";import{VersionLiteralSchema as ne,extensionToken as re,isUniversalRange as ie,versionSatisfies as g}from"@makaio/framework/contracts";import{MakaioBus as _}from"@makaio/framework/bus";import{BaseService as v}from"@makaio/framework/service-base";import{index as y,unique as ae,uniqueIndex as oe}from"drizzle-orm/sqlite-core";import{index as se,unique as ce,uniqueIndex as le}from"drizzle-orm/pg-core";import{defineDialectSchema as b,defineDualTable as x,didAffectRows as ue,executeTransaction as S,registerDrizzleHandlers as de,resolveSchema as C}from"@makaio/framework/storage/drizzle";import{and as w,eq as T,gt as fe,sql as pe}from"drizzle-orm";import{ClientProfileNameSchema as me,ClientProfileSchema as he,ClientSubjects as ge,ClientSubjects as E,ClientWiringEntrySchema as _e,DEFAULT_FAILURE_POLICY as ve,SessionConfigLeaseIdSchema as ye,deriveHookEventTransportMode as be,isValidContributorId as xe,isValidTimeoutMs as Se,validateClosedPolicy as Ce}from"@makaio/framework/contracts/client";import{SessionSubjects as we}from"@makaio/framework/contracts/session";import*as D from"node:os";import{CLIDetectionSubjects as Te}from"@makaio/framework/services/cli-detection/namespace";import{ClientStorageSubjects as Ee}from"@makaio/framework/services/settings/storage";async function De(e,t,n,r,i){let a,o=(n.get(e)??Promise.resolve()).then(async()=>{let n=await i(r(await Oe(e,t)));n.changed&&await ke(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 Oe(e,t){let n;try{n=await f.readFile(e,`utf-8`)}catch(e){if(e.code===`ENOENT`)return t;throw e}return JSON.parse(n)}async function ke(e,t){let n=p.dirname(e),r=p.join(n,`${p.basename(e)}.${m()}.tmp`);await f.mkdir(n,{recursive:!0});try{await f.writeFile(r,`${JSON.stringify(t,null,2)}\n`,`utf-8`),await f.rename(r,e)}catch(e){throw await f.unlink(r).catch(()=>void 0),e}}var Ae=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)}},je=class{nextAccountSequence=1;accountIdsByIdentifier=new Map;accounts=new Map;upsertAccount(e){let t=Ne(e.displayLabel),n=new Map;for(let t of e.identifiers)n.set(Me(e.clientId,t.scheme,t.value),t);let r=Pe(n,this.accountIdsByIdentifier,`strong`),i=Pe(n,this.accountIdsByIdentifier,`alias`),a=r[0]??(i.length===1?i[0]:i.length>1?Fe(i):this.createAccount()),o=(r.length>0?Le(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 Me(e,t,n){return`${e}\u0000${t}\u0000${n}`}function Ne(e){return e?.trim()||void 0}function Pe(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(O)}function Fe(e){return[...e].sort(O)[0]}function O(e,t){let n=Ie(e),r=Ie(t);return n!==null&&r!==null&&n!==r?n-r:e.localeCompare(t)}function Ie(e){let t=e.match(/^client-account-(\d+)$/);return t?Number(t[1]):null}function Le(e,t,n){let r=new Set([...t,...n]);return r.delete(e),Array.from(r).sort(O)}function Re(e){return{subject:`config.prime`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}async function k(e,t){let n=await e.requestOptional(Re(t.clientId),t);return n.handled?n.data:{primed:!1}}function ze(){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 Be=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 A(t,n){return!p.isAbsolute(t)||!p.isAbsolute(n)?!1:e(p.resolve(t),p.resolve(n))}function j(e,t){if(!e||!p.isAbsolute(e))throw Error(`${t} requires a non-empty absolute basePath`);return p.resolve(e)}var Ve=class{strategyDeps;config;jobs=new Map;#e=!1;resolvedBasePath;constructor(e,t){this.strategyDeps=e,this.config=t,this.resolvedBasePath=j(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=p.resolve(this.resolvedBasePath,e,t);if(!A(this.resolvedBasePath,n))throw Error(`Invalid install target path for client "${e}" and version "${t}"`);return n}};const M=d.object({id:d.string(),clientId:d.string(),version:d.string(),installPath:d.string(),installedAt:d.number().int().nonnegative(),createdAt:d.number().int().nonnegative()}),N=d.object({clientId:d.string(),activeVersion:d.string().nullable(),updatedAt:d.number().int().nonnegative()}),P=d.object({previousActiveVersion:d.string().nullable(),activeVersion:d.string().nullable()}),F=h(`client-binary:storage`,{insertVersion:{request:M,response:d.object({success:d.boolean()})},recordInstalledVersion:{request:d.object({versionRecord:M,makeActive:d.boolean(),updatedAt:d.number().int().nonnegative()}),response:P},listVersions:{request:d.object({clientId:d.string()}),response:d.object({versions:d.array(M)})},getSnapshot:{request:d.object({clientId:d.string()}),response:d.object({state:N.nullable(),versions:d.array(M)})},loadAllVersions:{request:d.object({}),response:d.object({versions:d.array(M)})},upsertState:{request:N,response:d.object({success:d.boolean()})},setActiveVersion:{request:d.object({clientId:d.string(),activeVersion:d.string().nullable(),updatedAt:d.number().int().nonnegative()}),response:P},getState:{request:d.object({clientId:d.string()}),response:d.object({state:N.nullable()})},loadAllState:{request:d.object({}),response:d.object({states:d.array(N)})},loadSnapshot:{request:d.object({}),response:d.object({states:d.array(N),versions:d.array(M)})},removeVersionAndClearActive:{request:d.object({clientId:d.string(),version:d.string(),updatedAt:d.number().int().nonnegative()}),response:P.extend({removedVersion:d.string().nullable()})}}),I=F.subjects;var He=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 Ue=process.env.MAKAIO_SKIP_CLIENT_VERSION_CHECK===`1`;function L(e,t,n,r,i){if(n===null){if(ie(r))return;if(Ue){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(!g(n,r)){if(Ue){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 We=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(I.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 A(this.resolvedBasePath,e)}async isExpectedInstallPath(e,t,n){if(!p.isAbsolute(e)||!this.isInstallPathWithinBase(e))return!1;let r=p.resolve(this.resolvedBasePath,t,n);if(!this.isInstallPathWithinBase(r))return!1;try{let[t,n,i]=await Promise.all([f.realpath(this.resolvedBasePath),f.realpath(r),f.realpath(e)]);return A(t,n)?i===n||A(n,i):!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&&L(`client.resolveBinary`,e,t,n.binary.supportedVersions,`managed binary version`);let a=Ge(n.versionCommand)?.[0];if(a===void 0)throw Error(`client.resolveBinary: definition for '${e}' has no versionCommand — cannot derive binary path`);let o=p.resolve(i.installPath,a),s=p.resolve(i.installPath);if(!o.startsWith(s+p.sep)&&o!==s)throw Error(`client.resolveBinary: versionCommand for '${e}' resolves outside the install directory`);let{configDir:c,env:l}=this.resolveIsolatedConfig(e,n);return{binaryPath:o,env:l,configDir:c,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(E.scan,{targets:[n]}),i=r.find(t=>t.clientId===e);if(i===void 0||!i.found)throw new Ae(e);let a=i.version??null;L(`client.resolveBinary`,e,a,t.binary.supportedVersions,`detected global binary version`);let o=this.resolveGlobalConfigDir(t),s=i.binaryPath??null;if(s!==null&&!p.isAbsolute(s))throw Error(`client.resolveBinary: detected global binary path for '${e}' is not absolute`);return{binaryPath:s,env:{},configDir:o,source:`global`,version:a}}resolveIsolatedConfig(e,t){let{configIsolation:n}=t;if(n===void 0)return{configDir:null,env:{}};let r=p.join(this.resolvedConfigBasePath,e,`config`),i=n.pathKind===`file`?p.join(r,p.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===`~`?D.homedir():n.startsWith(`~/`)?p.join(D.homedir(),n.slice(2)):n,i=t.pathKind===`file`?p.dirname(r):r;if(!p.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 Ge(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 Ke(e,t){let{versions:n,states:r}=await e.request(I.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 qe=class extends v{config;definitionLookup;versionResolver;jobRunner;strategyDeps;resolvedBasePath;resolvedConfigBasePath;resolver;pendingClients=new Set;constructor(e=_,t,n=new He([]),r=ze()){super(e),this.config=t,this.definitionLookup=n,this.resolvedBasePath=j(t.basePath,`ClientBinaryManager`),this.resolvedConfigBasePath=j(t.configBasePath,`ClientBinaryManager configBasePath`),this.strategyDeps=r,this.versionResolver=new Be,this.jobRunner=new Ve(r,t),this.resolver=new We({bus:e,resolvedBasePath:this.resolvedBasePath,resolvedConfigBasePath:this.resolvedConfigBasePath,definitionLookup:n,...t.resolutionPolicy!==void 0&&{resolutionPolicy:t.resolutionPolicy}})}async onInit(){this.registerHandler(E.list,async e=>{let t=await this.handleList();e.setResult({clients:t})}),this.registerHandler(E.install,async e=>{let t=await this.handleInstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(E.update,async e=>{let t=await this.handleUpdate(e.payload.clientId);e.setResult(t)}),this.registerHandler(E.setActive,async e=>{let t=await this.handleSetActive(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(E.uninstall,async e=>{let t=await this.handleUninstall(e.payload.clientId,e.payload.version);e.setResult(t)}),this.registerHandler(E.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 Ke(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&&L(`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&&L(`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(I.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&&L(`client.setActive`,e,t,a.binary.supportedVersions,`requested binary version`);let o=Ge(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(I.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:a,activeVersion:o}=await this.bus.request(I.removeVersionAndClearActive,{clientId:e,version:t,updatedAt:Date.now()});if(i===null)throw Error(`client.uninstall: failed to delete version '${t}' for client '${e}'`);let s=r.installPath,c=typeof s==`string`&&s.length>0?p.resolve(s):null;if(typeof s!=`string`||s.length===0||c===null||!p.isAbsolute(s)||!await this.resolver.isExpectedInstallPath(c,e,t)?console.warn(`[ClientBinaryManager] Skipping removeDirectory: stored installPath "${String(s)}" does not match the expected install directory for ${e}@${t}`):await this.strategyDeps.removeDirectory(c).catch(n=>{console.warn(`[ClientBinaryManager] Failed to remove binary directory "${c}" for ${e}@${t}:`,n)}),a!==null&&o===null)try{await this.bus.emit(E.version.changed,{clientId:e,previousActiveVersion:a,activeVersion:null,reason:`uninstall`})}catch(e){console.warn(`[ClientBinaryManager] Failed to emit client.version.changed:`,e)}return{clientId:e,removedVersion:t,activeVersion:o}}finally{this.pendingClients.delete(e)}}async patchActiveVersion(e,t,n){let r=(await this.bus.request(I.setActiveVersion,{clientId:e,activeVersion:t,updatedAt:Date.now()})).previousActiveVersion;if(r!==t)try{await this.bus.emit(E.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(E.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(E.installJob.completed,e).catch(e=>{console.warn(`[ClientBinaryManager] Failed to emit client.installJob.completed:`,e)})},r.postInstall,Ge(r.versionCommand)),o.jobId}makeCompletionCallback(){return async({clientId:e,version:t,installPath:n,makeActive:r,reason:i})=>{let a=Date.now();await k(this.bus,{clientId:e,configDir:this.resolveManagedConfigDir(e),phase:`managed-install`,binaryVersion:t});let o=await this.bus.request(I.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(E.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 p.join(this.resolvedConfigBasePath,e,`config`)}};function Je(e,t){return`${e}\0${t}`}function R(e,t){return`${e}\0${t}`}var Ye=class{records=new Map;bySupervisorSessionId=new Map;byPidClientId=new Map;byAdapterSessionClientId=new Map;supervisorSessionCandidates=new Map;pidClientCandidates=new Map;adapterSessionClientCandidates=new Map;adapterOwnedSessions=new Set;set(e,t){let n=t??this.records.get(e.clientRuntimeId);n&&this.removeIndexEntries(n),this.records.set(e.clientRuntimeId,e),this.addIndexEntries(e,!0)}setFromStorage(e,t,n){let r=this.records.get(e.clientRuntimeId);r&&this.removeIndexEntries(r),this.records.set(e.clientRuntimeId,e);let i=t-e.updatedAt<=n;this.addIndexEntries(e,i)}delete(e){let t=this.records.get(e);t&&(this.removeIndexEntries(t),t.adapterSessionId!==void 0&&this.adapterOwnedSessions.delete(R(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 n=this.byPidClientId.get(Je(t,r));if(n!==void 0){let t=this.records.get(n);if(t!==void 0)return this.canMatchFallbackEvidence(t,e)?t:void 0}}if(n!==void 0){let t=this.byAdapterSessionClientId.get(R(n,r));if(t!==void 0){let n=this.records.get(t);if(n!==void 0)return this.canMatchFallbackEvidence(n,e)?n:void 0}}}values(){return this.records.values()}clear(){this.records.clear(),this.bySupervisorSessionId.clear(),this.byPidClientId.clear(),this.byAdapterSessionClientId.clear(),this.supervisorSessionCandidates.clear(),this.pidClientCandidates.clear(),this.adapterSessionClientCandidates.clear(),this.adapterOwnedSessions.clear()}markAdapterOwned(e,t){this.adapterOwnedSessions.add(R(e,t))}hasAdapterSession(e,t){return this.adapterOwnedSessions.has(R(e,t))}get size(){return this.records.size}addIndexEntries(e,t){e.supervisorSessionId!==void 0&&this.setIndexEntry(this.bySupervisorSessionId,this.supervisorSessionCandidates,e.supervisorSessionId,e),t&&(e.pid!==void 0&&this.setIndexEntry(this.byPidClientId,this.pidClientCandidates,Je(e.pid,e.clientId),e),e.adapterSessionId!==void 0&&this.setIndexEntry(this.byAdapterSessionClientId,this.adapterSessionClientCandidates,R(e.adapterSessionId,e.clientId),e))}removeIndexEntries(e){e.supervisorSessionId!==void 0&&this.deleteIndexEntry(this.bySupervisorSessionId,this.supervisorSessionCandidates,e.supervisorSessionId,e.clientRuntimeId),e.pid!==void 0&&this.deleteIndexEntry(this.byPidClientId,this.pidClientCandidates,Je(e.pid,e.clientId),e.clientRuntimeId),e.adapterSessionId!==void 0&&this.deleteIndexEntry(this.byAdapterSessionClientId,this.adapterSessionClientCandidates,R(e.adapterSessionId,e.clientId),e.clientRuntimeId)}canMatchFallbackEvidence(e,t){return t===void 0||e.supervisorSessionId===void 0||e.supervisorSessionId===t}deleteIndexEntry(e,t,n,r){let i=t.get(n);if(i?.delete(r)&&(i.size===0&&t.delete(n),e.get(n)===r)){let t=this.findBestIndexOwner(i);t===void 0?e.delete(n):e.set(n,t.clientRuntimeId)}}setIndexEntry(e,t,n,r){let i=t.get(n);i===void 0&&(i=new Set,t.set(n,i)),i.add(r.clientRuntimeId);let a=e.get(n),o=a===void 0||!i.has(a)?void 0:this.records.get(a);(o===void 0||this.isNewerIndexOwner(r,o))&&e.set(n,r.clientRuntimeId)}findBestIndexOwner(e){let t;for(let n of e){let e=this.records.get(n);e!==void 0&&(t===void 0||this.isNewerIndexOwner(e,t))&&(t=e)}return t}isNewerIndexOwner(e,t){return e.createdAt>t.createdAt||e.createdAt===t.createdAt&&e.clientRuntimeId>t.clientRuntimeId}};const z=[`observed`,`started`],B=d.object({clientRuntimeId:d.string(),clientId:d.string(),status:d.enum(z),supervisorSessionId:d.string().optional(),pid:d.number().int().positive().optional(),parentPid:d.number().int().positive().optional(),adapterSessionId:d.string().optional(),sessionId:d.string().optional(),cwd:d.string().optional(),argv:d.array(d.string()).optional(),metadata:d.record(d.string(),d.unknown()).optional(),observedAt:d.number().int().nonnegative(),createdAt:d.number().int().nonnegative(),updatedAt:d.number().int().nonnegative()}),V=h(`client-runtime:storage`,{upsert:{request:B,response:d.object({success:d.boolean()})},loadAll:{request:d.object({}),response:d.object({records:d.array(B)})}}),H=V.subjects;function Xe(e){return e.supervisorSessionId!==void 0||e.adapterSessionId!==void 0}function U(e){return{...e,argv:e.argv===void 0?void 0:[...e.argv],metadata:e.metadata===void 0?void 0:structuredClone(e.metadata)}}function Ze(e){return Math.max(Date.now(),e+1)}function Qe(e,t){if(t.supervisorSessionId!==void 0&&t.supervisorSessionId===e.supervisorSessionId&&t.adapterSessionId!==void 0&&e.adapterSessionId!==void 0&&t.adapterSessionId!==e.adapterSessionId){if($e(e,t))return;throw Error(`client.runtime.observe: adapterSessionId '${t.adapterSessionId}' conflicts with the existing adapterSessionId '${e.adapterSessionId}' for supervisorSessionId '${t.supervisorSessionId}'`)}}function $e(e,t){return t.adapterSessionTransition===`root-clear`&&t.clientId===`codex`&&t.source.layer===`client-hook`&&t.source.producer===`codex-client-session-service`&&t.supervisorSessionId!==void 0&&t.supervisorSessionId===e.supervisorSessionId&&t.adapterSessionId!==void 0&&t.adapterSessionId!==e.adapterSessionId}function et(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}function tt(e,t){e.adapterSessionId=t.adapterSessionId,e.sessionId=void 0}var nt=class{runtimeMap=new Ye;mutationLane=new ee;bus;latestCreatedAt=0;constructor(e){this.bus=e}async loadFromStorage(){await this.mutationLane.run(()=>this.loadFromStorageInLane())}async loadFromStorageInLane(){if(!this.bus)return;let e=await this.bus.requestOptional(H.loadAll,{});if(!e.handled)return;let t=Date.now();for(let n of e.data.records)this.runtimeMap.setFromStorage(U(n),t,864e5),this.latestCreatedAt=Math.max(this.latestCreatedAt,n.createdAt)}async upsertRuntime(e){return this.mutationLane.run(()=>this.upsertRuntimeInLane(e))}async upsertRuntimeInLane(e){let t=this.runtimeMap.findByEvidence(e.supervisorSessionId,e.pid,e.adapterSessionId,e.clientId);if(t){let n=U(t);Qe(n,e);let r=$e(n,e);r&&tt(n,e);let i=n.status===`observed`,a=i&&Xe(e),o=et(n,e),s=i&&e.observedAt>n.observedAt;return a&&(n.status=`started`),(r||o||a||s)&&(n.updatedAt=Ze(n.updatedAt),s&&(n.observedAt=e.observedAt),await this.persistRecord(n),this.runtimeMap.set(n,t)),{clientRuntimeId:n.clientRuntimeId,created:!1,promoted:a,record:U(n)}}let n=this.nextCreatedAt(),r=m(),i=Xe(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 await this.persistRecord(a),this.runtimeMap.set(a),{clientRuntimeId:r,created:!0,promoted:!1,record:U(a)}}getRuntime(e){let t=this.runtimeMap.get(e);return t?U(t):void 0}resolveBySupervisorSessionId(e,t){let n=this.runtimeMap.findByEvidence(t,void 0,void 0,e);return n===void 0||n.clientId!==e||n.supervisorSessionId!==t?null:{clientId:n.clientId,supervisorSessionId:n.supervisorSessionId,...n.adapterSessionId!==void 0&&{adapterSessionId:n.adapterSessionId},...n.sessionId!==void 0&&{sessionId:n.sessionId},updatedAt:n.updatedAt}}markAdapterOwned(e,t){this.runtimeMap.markAdapterOwned(e,t)}hasAdapterSession(e,t){return this.runtimeMap.hasAdapterSession(e,t)}async clear(){await this.mutationLane.run(async()=>{this.runtimeMap.clear()})}get size(){return this.runtimeMap.size}nextCreatedAt(){return this.latestCreatedAt=Math.max(Date.now(),this.latestCreatedAt+1),this.latestCreatedAt}async persistRecord(e){if(!this.bus)return;let t=await this.bus.requestOptional(H.upsert,U(e));if(t.handled&&!t.data.success)throw Error(`client runtime storage rejected persistence for '${e.clientRuntimeId}'`)}};function rt(e,t){return{subject:t,$meta:{namespace:`client:${s(e,`createClientWiringSubjectDef`)}`,isRequest:!0,local:!1,channel:!1}}}function it(e){return rt(e,`wiring.list`)}const at=d.string().min(1).refine(p.isAbsolute,{message:`projectDir must be an absolute path`}),ot=d.object({entries:d.array(_e)}),st=d.object({applied:d.number().int().nonnegative(),skipped:d.number().int().nonnegative()}),ct=d.object({removed:d.number().int().nonnegative()}),lt=d.object({clientId:d.string().trim().min(1),entries:d.array(_e)});function ut(e){if(e!==void 0&&!p.isAbsolute(e))throw Error(`projectDir must be an absolute path, got: ${e}`)}var dt=class extends v{accountRegistry;runtimeRegistry;latestSnapshots=new Map;runtimeObserveRegistrationEpoch=0;activeIdentities=new Map;constructor(e=_,t=new je,n=new nt(e)){super(e),this.accountRegistry=t,this.runtimeRegistry=n}async onInit(){await this.runtimeRegistry.loadFromStorage(),this.registerHandler(E.account.observe,e=>this.handleAccountObserve(e)),this.registerHandler(E.usage.ingest,e=>this.handleUsageIngest(e)),this.registerHandler(E.scan,async e=>{let t=await this.scanClients(e.payload.targets);e.setResult({results:t})});let e=++this.runtimeObserveRegistrationEpoch;this.addCleanup(this.bus.on(E.runtime.observe,t=>this.handleRuntimeObserve(t,e))),this.registerHandler(E.runtime.resolveBySupervisorSessionId,e=>{e.setResult({runtime:this.runtimeRegistry.resolveBySupervisorSessionId(e.payload.clientId,e.payload.supervisorSessionId)})}),this.registerHandler(E.runtime.isAdapterManaged,e=>{let{adapterSessionId:t,clientId:n}=e.payload;e.setResult({managed:this.runtimeRegistry.hasAdapterSession(t,n)})}),this.registerHandler(E.wiring.list,async e=>{let t=await this.listWirings(e.payload);e.setResult({results:t})}),this.registerHandler(E.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(E.account.getActive,e=>{let t=this.activeIdentities.get(e.payload.clientId);e.setResult({identity:t??null})})}async onDestroy(){this.runtimeObserveRegistrationEpoch+=1,await this.runtimeRegistry.clear(),this.latestSnapshots.clear(),this.activeIdentities.clear(),this.accountRegistry.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=mt(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(E.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=ft(t.clientAccountId,e.payload,t.displayLabel),r=mt(pt(this.latestSnapshots.get(t.clientAccountId),n),t.displayLabel);this.latestSnapshots.set(t.clientAccountId,r),await this.bus.emit(E.usage.snapshot,r),e.setResult({clientAccountId:t.clientAccountId,snapshot:r})}async handleRuntimeObserve(e,t){if(t!==this.runtimeObserveRegistrationEpoch||!this.initialized)throw Error(`client.runtime.observe: service is stopping`);let n=this.serviceLifecycleGeneration,{payload:r}=e;if(r.supervisorSessionId===void 0&&r.pid===void 0&&r.adapterSessionId===void 0)throw Error(`client.runtime.observe: at least one hard-evidence field is required (supervisorSessionId, pid, or adapterSessionId)`);let{record:i,...a}=await this.runtimeRegistry.upsertRuntime(r);if(!this.isCurrentLifecycle(n)){e.setResult({clientRuntimeId:a.clientRuntimeId,created:a.created,promoted:a.promoted});return}r.source.layer===`adapter`&&r.adapterSessionId!==void 0&&this.runtimeRegistry.markAdapterOwned(r.adapterSessionId,r.clientId),this.bus.emit(E.runtime.observed,{clientRuntimeId:i.clientRuntimeId,clientId:i.clientId,status:i.status,source:r.source,observedAt:r.observedAt,supervisorSessionId:i.supervisorSessionId,pid:i.pid,parentPid:i.parentPid,adapterSessionId:i.adapterSessionId,sessionId:i.sessionId,cwd:i.cwd,argv:i.argv,metadata:i.metadata,updatedAt:i.updatedAt}).catch(e=>{console.warn(`[ClientRuntimeService] Failed to emit client.runtime.observed:`,e)}),(a.created||a.promoted)&&this.isCurrentLifecycle(n)&&await this.bus.emit(E.runtime.started,{clientRuntimeId:i.clientRuntimeId,clientId:i.clientId,status:i.status,source:r.source,observedAt:r.observedAt,supervisorSessionId:i.supervisorSessionId,pid:i.pid,parentPid:i.parentPid,adapterSessionId:i.adapterSessionId,sessionId:i.sessionId,cwd:i.cwd,argv:i.argv,metadata:i.metadata}).catch(e=>{console.warn(`[ClientRuntimeService] Failed to emit client.runtime.started:`,e)}),e.setResult({clientRuntimeId:a.clientRuntimeId,created:a.created,promoted:a.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(Te.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:gt(n,r,e.supportedVersions)}})}async listScannableStoredClients(){let{clients:e}=await this.bus.request(Ee.list,{});return e.filter(ht).map(e=>({clientId:e.id,binaryName:e.binary.name,supportedVersions:e.binary.supportedVersions}))}async listWirings(e){ut(e.projectDir);let{clients:t}=await this.bus.request(Ee.list,{}),n=e.clientId===void 0?void 0:s(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=it(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 ft(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 pt(e,t){return e&&e.observedAt>t.observedAt?e:t}function mt(e,t){return!e||t===void 0||e.displayLabel===t?e:{...e,displayLabel:t}}function ht(e){return e.enabled&&e.binary!==void 0}function gt(e,t,n){if(e&&t!==void 0&&t!==`unknown`&&n!==void 0&&!g(t,n))return`Unsupported version: requires ${n}`}var _t=class extends v{constructor(e=_){super(e)}onInit(){this.registerHandler(E.config.prime,async e=>{e.setResult(await k(this.bus,e.payload))})}};const W=he,G=d.string().trim().min(1),K=h(`client-profile:storage`,{get:{request:d.object({clientId:G,name:me}),response:d.object({record:W.nullable()})},getById:{request:d.object({id:G}),response:d.object({record:W.nullable()})},list:{request:d.object({clientId:G}),response:d.object({records:d.array(W)})},set:{request:W,response:d.object({success:d.boolean()})},delete:{request:d.object({clientId:G,name:me}),response:d.object({success:d.boolean()})},clearDefault:{request:d.object({clientId:G}),response:d.object({success:d.boolean()})},setDefault:{request:d.object({clientId:G,name:me}),response:d.object({record:W.nullable()})}}),q=K.subjects;function vt(e,t,n){let r=p.resolve(e),i=p.resolve(t),a=p.relative(r,i);if(a!==``&&!a.startsWith(`..`)&&!p.isAbsolute(a))return i;throw Error(`${n} refused to access path outside client profile root`)}var yt=class extends v{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(E.profile.create,async e=>{let t=s(e.payload.clientId,`profile.create`),{name:n,description:r}=e.payload;if((await this.bus.request(q.get,{clientId:t,name:n})).record!==null)throw Error(`Profile '${n}' already exists for client '${t}'`);let i=p.join(this.clientsBasePath,t,`profiles`),a=vt(i,p.join(i,n),`profile.create`);await f.mkdir(a,{recursive:!0});try{await k(this.bus,{clientId:t,configDir:a,phase:`profile-create`});let i=Date.now(),o={id:m(),clientId:t,name:n,description:r??null,configDir:a,isDefault:!1,createdAt:i,updatedAt:i};await this.bus.request(q.set,o),e.setResult({profile:o})}catch(e){throw await f.rm(a,{recursive:!0,force:!0}),e}})}registerListHandler(){this.registerHandler(E.profile.list,async e=>{let t=s(e.payload.clientId,`profile.list`),n=await this.bus.request(q.list,{clientId:t});e.setResult({profiles:n.records})})}registerGetHandler(){this.registerHandler(E.profile.get,async e=>{let t=s(e.payload.clientId,`profile.get`),n=await this.bus.request(q.get,{clientId:t,name:e.payload.name});e.setResult({profile:n.record})})}registerUpdateHandler(){this.registerHandler(E.profile.update,async e=>{let t=s(e.payload.clientId,`profile.update`),{name:n,description:r}=e.payload,i=await this.bus.request(q.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(q.set,a),e.setResult({profile:a})})}registerDeleteHandler(){this.registerHandler(E.profile.delete,async e=>{let t=s(e.payload.clientId,`profile.delete`),{name:n}=e.payload,r=await this.bus.request(q.get,{clientId:t,name:n});r.record!==null&&(vt(p.join(this.clientsBasePath,t,`profiles`),r.record.configDir,`profile.delete`),await f.rm(r.record.configDir,{recursive:!0,force:!0}));let i=await this.bus.request(q.delete,{clientId:t,name:n});e.setResult({success:i.success})})}registerSetDefaultHandler(){this.registerHandler(E.profile.setDefault,async e=>{let t=s(e.payload.clientId,`profile.setDefault`),{name:n}=e.payload,r=await this.bus.request(q.setDefault,{clientId:t,name:n});if(r.record===null)throw Error(`Profile '${n}' not found for client '${t}'`);e.setResult({profile:r.record})})}};function bt(e){return{subject:`sessionConfig.setup`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}function xt(e){return{subject:`sessionConfig.destroy`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1}}}const St=()=>Date.now();function Ct(){let e=D.platform();if(e===`darwin`||e===`linux`||e===`win32`)return e;throw Error(`client.sessionConfig does not support platform '${e}'`)}function wt(e,t,n){let r=ye.safeParse(t);if(!r.success)throw Error(`${n} received an unsafe lease ID`);let i=p.resolve(e),a=p.resolve(i,r.data),o=p.relative(i,a);if(o===``||!o.startsWith(`..`)&&!p.isAbsolute(o))return a;throw Error(`${n} refused to access path outside client sessions root`)}var Tt=class extends v{clientsBasePath;getNow;liveLeasesByClient=new Map;liveLeasesByOwner=new Map;constructor(e,t,n=St){super(e),this.clientsBasePath=t,this.getNow=n}async onInit(){this.registerCreateHandler(),this.registerHandler(E.sessionConfig.destroy,async e=>{let{clientId:t,leaseId:n}=e.payload,r=s(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(E.sessionConfig.cleanup,async e=>{let{clientId:t}=e.payload,n=t===void 0?void 0:s(t,`sessionConfig.cleanup`),r=await this.cleanupOrphanedDirs(n);e.setResult({removed:r})}),this.registerHandler(we.closed,async e=>{await this.destroyOwnedLeases(e.payload.sessionId)}),await this.cleanupOrphanedDirs()}registerCreateHandler(){this.registerHandler(E.sessionConfig.create,async e=>{let{clientId:t,leaseId:n,ownerSessionId:r,profileName:i,baseConfigDir:a,projectDir:o,configInheritance:c=`full`}=e.payload,l=s(t,`sessionConfig.create`),u=this.resolveClientSessionDir(l,n,`sessionConfig.create`),d=this.reserveLiveLease({clientId:l,leaseId:n,...r===void 0?{}:{ownerSessionId:r}});try{await f.mkdir(u,{recursive:!0});let t=await this.resolveBaseConfigDir(l,u,i,a),r=bt(l),s=await this.bus.requestOptional(r,{sessionDir:u,baseConfigDir:t,projectDir:o,platform:Ct(),configInheritance:c}),p=s.handled?s.data.env??{}:{},m=s.handled?s.data.authMaterialized:!1;if(await k(this.bus,{clientId:l,configDir:u,phase:`session-create`,projectDir:o}),d.releaseRequested)throw Error(`Config lease '${n}' was released while it was being created`);e.setResult({sessionDir:u,env:p,authMaterialized:m}),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(q.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(q.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=p.join(this.clientsBasePath,e,`sessions`),i=await f.readdir(r).catch(()=>[]);await Promise.all(i.map(async i=>{if(!ye.safeParse(i).success)return;let a=wt(r,i,`sessionConfig.cleanup`),o;try{o=await f.stat(a)}catch(e){let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return;throw e}let s=o.birthtimeMs>0?o.birthtimeMs:o.ctimeMs;o.isDirectory()&&n-s>36e5&&!this.isLiveLease(e,i)&&(await this.destroyClientSessionDir(e,a),t.push(a))}))})),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(xt(e),{sessionDir:t,platform:Ct()})}finally{await f.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 wt(p.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 f.readdir(this.clientsBasePath,{withFileTypes:!0}).catch(()=>[])).filter(e=>e.isDirectory()).map(e=>e.name)}},Et=class extends v{store=new Map;constructor(e){super(e)}record(e,t){let{clientId:n,adapterSessionId:r,agentId:i}=e,a=this.buildKey(n,r,i);if(this.store.get(a)!==void 0)this.store.delete(a);else if(this.store.size>=1e3){let e=this.store.keys().next().value;e!==void 0&&this.store.delete(e)}this.store.set(a,{token:t,lastActivity:Date.now()})}onInit(){this.registerHandler(E.session.token.get,e=>{let{clientId:t,adapterSessionId:n,agentId:r}=e.payload,i=this.buildKey(t,n,r),a=this.store.get(i);a!==void 0&&(this.store.delete(i),this.store.set(i,{token:a.token,lastActivity:Date.now()})),e.setResult({token:a?.token??null})});let e=setInterval(()=>{let e=Date.now()-864e5;for(let[t,n]of this.store)n.lastActivity<e&&this.store.delete(t)},3e5);e.unref(),this.addCleanup(()=>clearInterval(e))}onDestroy(){this.store.clear()}buildKey(e,t,n){let r=`${e}\n${t}`;return n===void 0?r:`${r}\n${n}`}};function Dt(e,t){return u(e[t])}function Ot(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 kt(e){try{e().catch(At)}catch(e){At(e)}}function At(e){(process.env.DEBUG||process.env.MAKAIO_DEBUG)&&console.debug(`[emitBestEffort] observed-semantics emission failed`,e)}const jt=new Set([`hook.received`,`hook.handle`]);function Mt(e,t){return _.registerNamespace(h(`client:${e}`,{"hook.received":o,"hook.handle":te({request:o,response:r}),...t})).subjects}function Nt(e,t){let n=Object.keys(t).filter(e=>jt.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 Pt(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 Ft(e,t,n){let r=Object.keys(n).filter(e=>!Pt(t,e));if(r.length!==0)throw Error(`[createClientNamespace] client:${e} was already registered without required subjects: ${r.join(`, `)}`)}function It(e,t){let n=s(e,`createClientNamespace`),r=t??{};Nt(n,r);let i=Mt(n,r);return Ft(n,i,r),{namespaceDomain:`client:${n}`,subjects:i}}const Lt=x(`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=>[y(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),y(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),y(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)],postgres:e=>[se(`idx_client_runtimes_supervisor_session_id`).on(e.supervisorSessionId),se(`idx_client_runtimes_pid_client_id`).on(e.pid,e.clientId),se(`idx_client_runtimes_adapter_session_id_client_id`).on(e.adapterSessionId,e.clientId)]}),Rt=Lt.sqlite,zt=Lt.postgres,Bt=b({clientRuntimes:Rt},{clientRuntimes:zt}),Vt=new Set(z);function Ht(e){if(!Vt.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 Ut(e,t){let{clientRuntimes:n}=C(t,Bt),r=e.on(H.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:fe(pe`excluded.updated_at`,n.updatedAt)}),e.setResult({success:!0})}),i=e.on(H.loadAll,async e=>{let r=await t.select().from(n);e.setResult({records:r.map(Ht)})});return()=>{r(),i()}}const Wt=x(`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=>[ae(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)],postgres:e=>[ce(`uq_client_binary_versions_client_version`).on(e.clientId,e.version)]}),Gt=Wt.sqlite,Kt=x(`client_binary_state`,e=>({clientId:e.text(`client_id`).primaryKey(),activeVersion:e.text(`active_version`),updatedAt:e.epochMs(`updated_at`).notNull()})),qt=Kt.sqlite,Jt=Wt.postgres,Yt=Kt.postgres,J=b({clientBinaryVersions:Gt,clientBinaryState:qt},{clientBinaryVersions:Jt,clientBinaryState:Yt});function Y(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}function X(e){return{clientId:e.clientId,activeVersion:e.activeVersion??null,updatedAt:e.updatedAt}}function Xt(e){return{id:e.id,clientId:e.clientId,version:e.version,installPath:e.installPath,installedAt:e.installedAt,createdAt:e.createdAt}}async function Zt(e,t,n){await e.insert(n).values(Xt(t)).onConflictDoNothing({target:[n.clientId,n.version]})}function Qt(e,t,n){return{clientId:e,activeVersion:t,updatedAt:n}}async function $t(e,t,n,r,i){await e.insert(i).values(Qt(t,n,r)).onConflictDoUpdate({target:i.clientId,set:{activeVersion:n,updatedAt:r}})}async function en(e,t){let{clientBinaryVersions:n}=C(e,J);await Zt(e,t,n)}async function tn(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=C(e,J);return S(e,async e=>{let[o]=await e.select().from(a).where(T(a.clientId,t.clientId)).limit(1),s=o?.activeVersion??null;return await Zt(e,t,i),n?(await $t(e,t.clientId,t.version,r,a),{previousActiveVersion:s,activeVersion:t.version}):{previousActiveVersion:s,activeVersion:s}})}async function nn(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=C(e,J);return S(e,async e=>{let[i]=await e.select().from(r).where(T(r.clientId,t)).limit(1),a=await e.select().from(n).where(T(n.clientId,t));return{state:i?X(i):null,versions:a.map(Y)}})}async function rn(e){let{clientBinaryVersions:t,clientBinaryState:n}=C(e,J);return S(e,async e=>{let r=await e.select().from(n),i=await e.select().from(t);return{states:r.map(X),versions:i.map(Y)}})}async function an(e,t){let{clientBinaryState:n}=C(e,J),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 on(e,t,n,r){let{clientBinaryState:i}=C(e,J);return S(e,async e=>{let[a]=await e.select().from(i).where(T(i.clientId,t)).limit(1),o=a?.activeVersion??null;return await $t(e,t,n,r,i),{previousActiveVersion:o,activeVersion:n}})}async function sn(e,t,n,r){let{clientBinaryVersions:i,clientBinaryState:a}=C(e,J);return S(e,async e=>{let[o]=await e.select().from(a).where(T(a.clientId,t)).limit(1),s=o?.activeVersion??null;if(!ue(await e.delete(i).where(w(T(i.clientId,t),T(i.version,n)))))return{removedVersion:null,previousActiveVersion:s,activeVersion:s};await e.update(a).set({activeVersion:null,updatedAt:r}).where(w(T(a.clientId,t),T(a.activeVersion,n)));let[c]=await e.select().from(a).where(T(a.clientId,t)).limit(1);return{removedVersion:n,previousActiveVersion:s,activeVersion:c?.activeVersion??null}})}function cn(e,t){let{clientBinaryVersions:n,clientBinaryState:r}=C(t,J),i=[e.on(I.insertVersion,async e=>{await en(t,e.payload),e.setResult({success:!0})}),e.on(I.recordInstalledVersion,async e=>{let{versionRecord:n,makeActive:r,updatedAt:i}=e.payload,a=await tn(t,n,r,i);e.setResult(a)}),e.on(I.listVersions,async e=>{let r=await t.select().from(n).where(T(n.clientId,e.payload.clientId));e.setResult({versions:r.map(Y)})}),e.on(I.getSnapshot,async e=>{let{state:n,versions:r}=await nn(t,e.payload.clientId);e.setResult({state:n,versions:r})}),e.on(I.loadAllVersions,async e=>{let r=await t.select().from(n);e.setResult({versions:r.map(Y)})}),e.on(I.upsertState,async e=>{await an(t,e.payload),e.setResult({success:!0})}),e.on(I.setActiveVersion,async e=>{let{clientId:n,activeVersion:r,updatedAt:i}=e.payload,a=await on(t,n,r,i);e.setResult(a)}),e.on(I.getState,async e=>{let[n]=await t.select().from(r).where(T(r.clientId,e.payload.clientId)).limit(1);e.setResult({state:n?X(n):null})}),e.on(I.loadAllState,async e=>{let n=await t.select().from(r);e.setResult({states:n.map(X)})}),e.on(I.loadSnapshot,async e=>{let{states:n,versions:r}=await rn(t);e.setResult({states:n,versions:r})}),e.on(I.removeVersionAndClearActive,async e=>{let{clientId:n,version:r,updatedAt:i}=e.payload,a=await sn(t,n,r,i);e.setResult(a)})];return()=>{for(let e of i)e()}}const ln=x(`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=>[oe(`uq_client_profiles_client_name`).on(e.clientId,e.name),oe(`uq_client_profiles_default`).on(e.clientId).where(pe`${e.isDefault} = 1`)],postgres:e=>[le(`uq_client_profiles_client_name`).on(e.clientId,e.name),le(`uq_client_profiles_default`).on(e.clientId).where(pe`${e.isDefault} = true`)]}),un=ln.sqlite,dn=ln.postgres,fn=b({clientProfiles:un},{clientProfiles:dn});function Z(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 pn(e,t,n){let{clientProfiles:r}=C(e,fn),i=Date.now();return S(e,async e=>{let[a]=await e.select().from(r).where(w(T(r.clientId,t),T(r.name,n))).limit(1);if(a===void 0)return null;await e.update(r).set({isDefault:!1,updatedAt:i}).where(w(T(r.clientId,t),T(r.isDefault,!0))),await e.update(r).set({isDefault:!0,updatedAt:i}).where(w(T(r.clientId,t),T(r.name,n)));let[o]=await e.select().from(r).where(w(T(r.clientId,t),T(r.name,n))).limit(1);return o===void 0?null:Z(o)})}function mn(e,t){let{clientProfiles:n}=C(t,fn),r=[e.on(q.get,async e=>{let{clientId:r,name:i}=e.payload,[a]=await t.select().from(n).where(w(T(n.clientId,r),T(n.name,i))).limit(1);e.setResult({record:a?Z(a):null})}),e.on(q.getById,async e=>{let[r]=await t.select().from(n).where(T(n.id,e.payload.id)).limit(1);e.setResult({record:r?Z(r):null})}),e.on(q.list,async e=>{let r=await t.select().from(n).where(T(n.clientId,e.payload.clientId));e.setResult({records:r.map(Z)})}),e.on(q.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(q.delete,async e=>{let{clientId:r,name:i}=e.payload,a=await t.delete(n).where(w(T(n.clientId,r),T(n.name,i)));e.setResult({success:ue(a)})}),e.on(q.clearDefault,async e=>{await t.update(n).set({isDefault:!1,updatedAt:Date.now()}).where(w(T(n.clientId,e.payload.clientId),T(n.isDefault,!0))),e.setResult({success:!0})}),e.on(q.setDefault,async e=>{let{clientId:n,name:r}=e.payload,i=await pn(t,n,r);e.setResult({record:i})})];return()=>{for(let e of r)e()}}function hn(e,t){return`${e}\0${t}`}function gn(e){let t=e=>typeof e==`string`&&e.trim().length>0;if(typeof e!=`object`||!e)throw Error(`Provider contract catalog must be an object`);if(!t(e.clientId)||!t(e.contractId)||!t(e.version))throw Error(`Provider contract catalog requires non-empty clientId, contractId, and version`);if(!Array.isArray(e.supportedInteractions)||e.supportedInteractions.length===0)throw Error(`Provider contract catalog requires supported interactions`);if(e.supportedInteractions.some(e=>!t(e))||new Set(e.supportedInteractions).size!==e.supportedInteractions.length)throw Error(`Provider contract catalog interactions must be non-empty and unique`);if(!Array.isArray(e.blockability)||e.blockability.length!==e.supportedInteractions.length)throw Error(`Provider contract catalog requires complete blockability metadata`);let n=new Map;for(let r of e.blockability){if(!t(r.interaction)||typeof r.blockable!=`boolean`||n.has(r.interaction))throw Error(`Provider contract catalog blockability metadata must be complete and unique`);n.set(r.interaction,r.blockable)}if(e.supportedInteractions.some(e=>!n.has(e))||typeof e.validate!=`function`)throw Error(`Provider contract catalog must provide blockability metadata and a validator for every interaction`)}var _n=class{entries=new Map;registerProviderContract(e,t){gn(t);let n=hn(t.clientId,t.contractId),r=this.entries.get(n);if(r)throw Error(`Provider contract collision: contract '${t.contractId}' for client '${t.clientId}' is already registered by extension '${r.extensionId}'; extension '${e}' cannot claim it`);this.entries.set(n,{extensionId:e,catalog:t})}unregisterProviderContract(e,t,n){let r=hn(t,n),i=this.entries.get(r);i&&i.extensionId===e&&this.entries.delete(r)}unregisterAllByExtension(e){for(let[t,n]of this.entries)n.extensionId===e&&this.entries.delete(t)}getProviderContract(e,t){let n=hn(e,t);return this.entries.get(n)?.catalog}getProviderContractsByClient(e){let t=[];for(let n of this.entries.values())n.catalog.clientId===e&&t.push(n.catalog);return t}getAllProviderContracts(){return[...this.entries.values()].map(e=>e.catalog)}clear(){this.entries.clear()}};function vn(e,t){return`${e}/${t}`}function yn(e,t,n){switch(e.kind){case`event-name`:return e.name===t;case`capability`:return n.includes(e.capability)}}function bn(e,t){let n=t.definition.priority-e.definition.priority;return n===0?e.ordinal-t.ordinal:n}function xn(e){return Array.isArray(e)&&e.length>0&&e.every(e=>typeof e!=`object`||!e?!1:e.kind===`event-name`?typeof e.name==`string`&&e.name.trim().length>0:e.kind===`capability`&&typeof e.capability==`string`&&e.capability.trim().length>0)}function Sn(e){return e.lane===`canonical`?e.clientIds===void 0||Array.isArray(e.clientIds)&&e.clientIds.length>0&&e.clientIds.every(e=>typeof e==`string`&&e.trim().length>0):e.lane===`provider`?typeof e.clientId==`string`&&e.clientId.trim().length>0&&typeof e.contractId==`string`&&e.contractId.trim().length>0:!1}function Cn(e,t){if(typeof t!=`object`||!t||Array.isArray(t))return{code:`invalid-contributor-lane`,message:`Contributor definition must be an object`,extensionName:e};let n={...typeof t.id==`string`&&{contributorId:t.id},extensionName:e};if(!Number.isFinite(t.priority))return{...n,code:`invalid-priority`,message:`Contributor '${t.id}' priority must be a finite number`};if(!xn(t.selectors))return{...n,code:`invalid-selectors`,message:`Contributor '${t.id}' requires non-empty valid selectors`};if(typeof t.respond!=`function`)return{...n,code:`invalid-respond`,message:`Contributor '${t.id}' respond must be a function`};if(!Sn(t))return{...n,code:`invalid-contributor-lane`,message:`Contributor '${t.id}' has an invalid lane or target identity`};if(!xe(t.id))return{...n,code:`invalid-contributor-id`,message:`Contributor ID is empty or invalid`};if(!Se(t.timeoutMs))return{...n,code:`invalid-timeout-ms`,message:`Contributor '${t.id}' has an invalid timeoutMs: ${String(t.timeoutMs)}; must be a positive finite number`}}function wn(e,t,n,r){let i=[],a=new Set;for(let o of t){let t=Cn(e,o);if(t){i.push(t);continue}let s=vn(e,o.id);if(a.has(s)){i.push({code:`invalid-contributor-id`,message:`Duplicate contributor ID '${o.id}' within the same extension batch '${e}'`,contributorId:o.id,extensionName:e});continue}if(r.has(s)){i.push({code:`invalid-contributor-id`,message:`Contributor ID '${o.id}' is already registered by extension '${e}'`,contributorId:o.id,extensionName:e});continue}a.add(s),Tn(e,o,n,i)}return i}function Tn(e,t,n,r){let i=t.failurePolicy??`open`;if(t.lane===`provider`){let a=n.getProviderContract(t.clientId,t.contractId);if(!a){r.push({code:`inactive-provider-contract`,message:`Provider contributor requires active contract '${t.contractId}' for client '${t.clientId}'`,contributorId:t.id,extensionName:e});return}En(e,t,[a],i,r);return}En(e,t,t.clientIds?t.clientIds.flatMap(e=>n.getProviderContractsByClient(e)):n.getAllProviderContracts(),i,r)}function En(e,t,n,r,i){for(let a of t.selectors){let o=a.kind===`capability`?a.capability:a.name,s=n.filter(e=>e.supportedInteractions.includes(o));if((t.lane===`provider`||a.kind===`capability`)&&s.length===0){i.push({code:`unsupported-interaction`,message:`Interaction '${o}' is not supported by an eligible active provider contract`,contributorId:t.id,extensionName:e});continue}if(r===`closed`){if(s.length===0){i.push({code:`closed-policy-on-non-blockable`,message:`Closed failure policy requires blockability proof for interaction '${o}', but no contract declares it for an eligible active client`,contributorId:t.id,extensionName:e});continue}for(let n of s)for(let r of Ce([a],n))i.push({code:`closed-policy-on-non-blockable`,message:r,contributorId:t.id,extensionName:e})}}}var Dn=class{contractRegistry;contributors=new Map;extensionIndex=new Map;nextOrdinal=1;constructor(e){this.contractRegistry=e}installContributors(e,t){let n=wn(e,t,this.contractRegistry,this.contributors);if(n.length>0)return{errors:n};let r=this.extensionIndex.get(e)??new Set;for(let n of t){let t=vn(e,n.id),i=Object.freeze({...n,selectors:Object.freeze(n.selectors.map(e=>Object.freeze({...e})))}),a=Object.freeze({namespacedId:t,extensionId:e,ordinal:this.nextOrdinal,definition:i});this.nextOrdinal+=1,this.contributors.set(t,a),r.add(t)}return this.extensionIndex.set(e,r),{errors:[]}}removeContributors(e){let t=this.extensionIndex.get(e);if(t){for(let e of t)this.contributors.delete(e);this.extensionIndex.delete(e)}}snapshot(e,t,n,r=[]){let i=[];for(let a of this.contributors.values()){let{definition:o}=a;o.lane===`provider`&&(o.clientId!==e||o.contractId!==t)||o.lane===`canonical`&&o.clientIds!==void 0&&!o.clientIds.includes(e)||a.definition.selectors.some(e=>yn(e,n,r))&&i.push(a)}return i.sort(bn),Object.freeze(i)}clear(){this.contributors.clear(),this.extensionIndex.clear(),this.nextOrdinal=1}};function On(e,t){return{filter:e=>!!e.clientHookResponses,async processActivated(n,r,i){let a=r.clientHookResponses;if(!a)return;let o={extensionName:n,extensionContext:i,getProviderContract:(e,n)=>t.getProviderContract(e,n)},s;try{s=await a.createContributors(o)}catch(e){throw Error(`[ClientHookResponseContributionProcessor] createContributors failed for '${n}': ${e instanceof Error?e.message:String(e)}`,{cause:e})}let c=e.installContributors(n,s);if(c.errors.length>0){let e=c.errors.map(e=>`[${e.code}] ${e.contributorId??`<unknown>`}: ${e.message}`).join(`; `);throw Error(`[ClientHookResponseContributionProcessor] Contributor validation failed for '${n}': ${e}`)}},async processStopped(t){e.removeContributors(t)}}}var kn=class{runtimeService;binaryManager;configPrimeService;profileService;sessionConfigService;sessionTokenService;providerContractRegistry;hookResponseRegistry;sessionTokens;constructor(e,t,n,r,i,a,o,s){this.runtimeService=e,this.binaryManager=t,this.configPrimeService=n,this.profileService=r,this.sessionConfigService=i,this.sessionTokenService=a,this.providerContractRegistry=o,this.hookResponseRegistry=s,this.sessionTokens=a}async init(){let e=(await Promise.allSettled([this.runtimeService.init(),this.binaryManager.init(),this.configPrimeService.init(),this.profileService.init(),this.sessionConfigService.init(),this.sessionTokenService.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(),this.sessionTokenService.destroy()])).filter(e=>e.status===`rejected`);if(e.length>0)throw AggregateError(e.map(e=>e.reason),`ClientsCoreService failed to tear down cleanly`)}};const An=re(`makaio.clients-core`);function jn(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 Mn(e={}){let{definitions:t=[],strategyDependencies:n,postInstallHandlers:r,binaryResolutionPolicy:i}=e,a=[...t],o=new _n,s=new Dn(o);return{name:`makaio.clients-core`,displayName:`Clients Core`,version:`0.1.0`,critical:!0,namespaces:[F,V,K],storage:{registerHandlers:de((e,t)=>jn([()=>Ut(e,t),()=>cn(e,t),()=>mn(e,t)]))},create:e=>{let t=new He(a),c=p.join(e.makaioHome,`clients`),l=new qe(e.bus,{basePath:p.join(e.makaioHome,`binaries`),configBasePath:c,postInstallHandlers:r,...i!==void 0&&{resolutionPolicy:i}},t,n),u=new yt(e.bus,c),d=new Tt(e.bus,c),f=new Et(e.bus);return new kn(new dt(e.bus),l,new _t(e.bus),u,d,f,o,s)},runtimeBoot:{configure:e=>{e.registerContributionProcessor(On(s,o))}}}}async function Nn(e,t){let n=await e.requestOptional(E.resolveBinary,{clientId:t});return n.handled?n.data:void 0}function Pn(e,t,n){return[...n??[],e,...t].map(Rn).join(` `)}function Fn(e,t,n,r,i){return Pn(e,[...i??[],...t.split(` `),n],r)}function In(e){return e.runtimeCapabilities.hookEvents.map(e=>{let t={eventName:e.name,mode:be(e)};return e.minimumVersion===void 0?t:{...t,minimumVersion:e.minimumVersion}})}function Ln(e,t){return e.minimumVersion===void 0||typeof t!=`string`||!ne.safeParse(t).success?!0:g(t,`>=${e.minimumVersion}`)}function Rn(e){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)?e:`'${e.replaceAll(`'`,`'\\''`)}'`}const zn=new Set([`context.append`,`session.token`]);function Bn(e){if(e===void 0)return!0;if(!Array.isArray(e))return`canonicalEffects must be an array`;for(let t of e){if(typeof t!=`object`||!t||!zn.has(t.kind)||typeof t.value!=`string`)return`canonicalEffects must contain complete context.append or session.token effects`;if(Object.keys(t).some(e=>e!==`kind`&&e!==`value`))return`canonicalEffects must contain only kind and value`;if(t.kind===`session.token`&&t.value.length===0)return`session.token effect requires a non-empty string value`}return!0}function Vn(e,t,n){return e===void 0?!0:typeof e!=`object`||!e||Array.isArray(e)||e.clientId!==t||e.contractId!==n||typeof e.effects!=`object`||e.effects===null||Array.isArray(e.effects)?`providerEnvelope must contain the exact clientId, contractId, and an effects object`:Object.keys(e).some(e=>e!==`clientId`&&e!==`contractId`&&e!==`effects`)?`providerEnvelope must contain only clientId, contractId, and effects`:!0}function Hn(e,t,n,r,i,a){if(!r)return`Provider contributor requires active contract '${t.contractId}'`;if(r.clientId!==n||r.clientId!==t.clientId)return`Provider contract client '${r.clientId}' does not match '${t.clientId}'`;if(r.contractId!==t.contractId)return`Provider contract '${r.contractId}' does not match '${t.contractId}'`;let o=Vn(e.providerEnvelope,t.clientId,t.contractId);return o===!0?r.validate(e,{clientId:n,eventName:i,eventPayload:a}):o}function Un(e,t,n,r,i,a){if(e===void 0)return!0;if(typeof e!=`object`||!e||Array.isArray(e))return`Contributor response must be an object or undefined`;let o=t.lane===`canonical`?[`canonicalEffects`]:[`providerEnvelope`];return Object.keys(e).some(e=>!o.includes(e))?`Contributor response contains keys outside the ${t.lane} lane`:t.lane===`canonical`?Bn(e.canonicalEffects):Hn(e,t,n,r,i,a)}const Q=Symbol(`contributor-timeout`);function Wn(e){return e.failurePolicy??ve}function Gn(e){return e.namespacedId??e.definition.id}function $(e,t){return e===`closed`?`closed-failure`:t}function Kn(e){if(!e)return;let t=[];return e.canonicalEffects&&t.push(...e.canonicalEffects),e.providerEnvelope&&t.push(e.providerEnvelope),t.length>0?t:void 0}function qn(e,t,n){let r=t-Date.now();return r<=0||n.signal.aborted?(n.abort(Error(`Contributor deadline expired`)),Promise.resolve(Q)):new Promise((i,a)=>{let o=!1,s=e=>{o||(o=!0,clearTimeout(c),n.signal.removeEventListener(`abort`,l),i(e))},c=setTimeout(()=>{n.abort(Error(`Contributor timeout`)),s(Q)},r),l=()=>s(Q);n.signal.addEventListener(`abort`,l,{once:!0}),e.then(e=>{Date.now()>=t?(n.abort(Error(`Contributor timeout`)),s(Q)):s(e)},e=>{o||(o=!0,clearTimeout(c),n.signal.removeEventListener(`abort`,l),a(e))})})}function Jn(e){let t=[],n=[],r=`Request deadline already expired before collection started`;for(let i of e){let e=Gn(i),a=$(Wn(i.definition),`timeout`);t.push({contributorId:e,outcome:a,durationMs:0}),n.push({contributorId:e,severity:`error`,message:r})}let i=t.find(e=>e.outcome===`closed-failure`);return{outcomes:t,diagnostics:n,closedFailure:i?{contributorId:i.contributorId,detail:r}:void 0}}function Yn(e,t){if(t.aborted){e.abort(t.reason);return}let n=()=>{e.abort(t.reason)};t.addEventListener(`abort`,n,{once:!0}),e.signal.addEventListener(`abort`,()=>{t.removeEventListener(`abort`,n)},{once:!0})}function Xn(e,t,n,r,i,a){let{definition:o}=e,s=Gn(e),c=Date.now(),l=c+o.timeoutMs,u=n===void 0?l:Math.min(n,l),d=u-c,f=new AbortController;r&&Yn(f,r);let p={clientId:t,deadline:u,remainingBudgetMs:d,signal:f.signal,eventName:i,eventPayload:a};if(f.signal.aborted)return{contributorId:s,definition:o,startMs:c,abort:f,settled:Promise.resolve({tag:`timeout`})};let m;try{let e=o.respond(p);m=e instanceof Promise?e:Promise.resolve(e)}catch(e){m=Promise.reject(e)}return{contributorId:s,definition:o,startMs:c,abort:f,settled:qn(m,u,f).then(e=>e===Q?{tag:`timeout`}:{tag:`ok`,response:e},e=>({tag:`rejected`,error:e}))}}function Zn(e,t,n,r,i,a){let{contributorId:o,definition:s,startMs:c,abort:l}=e,u=Date.now()-c,d=Wn(s);if(l.signal.aborted||l.abort(Error(`Collection complete`)),t.tag===`timeout`){let e=`Contributor timed out after ${u}ms`;return{outcome:{contributorId:o,outcome:$(d,`timeout`),durationMs:u},diagnostic:{contributorId:o,severity:`error`,message:e}}}if(t.tag===`rejected`){let e=`Contributor rejected: ${t.error instanceof Error?t.error.message:String(t.error)}`;return{outcome:{contributorId:o,outcome:$(d,`rejection`),durationMs:u},diagnostic:{contributorId:o,severity:`error`,message:e,cause:t.error}}}let{response:f}=t,p=Un(f,s,n,r,i,a);if(p!==!0){let e=`Validation failed: ${p}`;return{outcome:{contributorId:o,outcome:$(d,`rejection`),durationMs:u},diagnostic:{contributorId:o,severity:`error`,message:e}}}return{outcome:{contributorId:o,outcome:`success`,durationMs:u,effects:Kn(f)}}}function Qn(e,t){let n=e.find(e=>e.outcome===`closed-failure`);if(!n)return{outcomes:e,diagnostics:t};let r={contributorId:n.contributorId,detail:t.find(e=>e.contributorId===n.contributorId)?.message??`Closed failure`};return{outcomes:e.map(e=>{if(e.effects){let{effects:t,...n}=e;return n}return e}),diagnostics:t,closedFailure:r}}async function $n(e,t,n,r,i,a,o){if(e.length===0)return{outcomes:[],diagnostics:[]};if(n!==void 0&&n<=Date.now())return Jn(e);let s=e.map(e=>Xn(e,t,n,r,i,a)),c=await Promise.all(s.map(e=>e.settled)),l=[],u=[];for(let e=0;e<s.length;e++){let{outcome:n,diagnostic:r}=Zn(s[e],c[e],t,o,i,a);l.push(n),r&&u.push(r)}return Qn(l,u)}export{at as AbsolutePathSchema,Ae as BinaryNotFoundError,z as CLIENT_RUNTIME_STATUSES,je as ClientAccountRegistry,Ve as ClientBinaryJobRunner,qe as ClientBinaryManager,N as ClientBinaryStateRecordSchema,F as ClientBinaryStorageNamespace,I as ClientBinaryStorageSubjects,M as ClientBinaryVersionRecordSchema,Be as ClientBinaryVersionResolver,_t as ClientConfigPrimeService,He as ClientDefinitionRegistry,r as ClientHookHandleResponseSchema,_n as ClientHookProviderContractRegistry,Dn as ClientHookResponseRegistry,W as ClientProfileRecordSchema,yt as ClientProfileService,K as ClientProfileStorageNamespace,q as ClientProfileStorageSubjects,nt as ClientRuntimeRegistry,dt as ClientRuntimeService,V as ClientRuntimeStorageNamespace,H as ClientRuntimeStorageSubjects,Tt as ClientSessionConfigService,Et as ClientSessionTokenService,ge as ClientSubjects,lt as ClientWiringAggregatedResultSchema,st as ClientWiringApplyResponseSchema,_e as ClientWiringEntrySchema,ot as ClientWiringListResponseSchema,ct as ClientWiringRemoveResponseSchema,kn as ClientsCoreService,An as ClientsCoreToken,i as DEFAULT_HOOK_HANDLE_TIMEOUT_MS,a as NOOP_HOOK_HANDLE_RESPONSE,o as RawClientHookPayloadSchema,B as RuntimeRecordSchema,ut as assertAbsoluteProjectDir,De as atomicModifyFile,Pn as buildClientCommand,Ot as buildClientSessionBase,Fn as buildHookCommand,s as canonicalizeClientId,Lt as clientRuntimesDual,$n as collectContributions,On as createClientHookResponseContributionProcessor,It as createClientNamespace,it as createClientWiringListSubjectDef,rt as createClientWiringSubjectDef,Mn as createClientsCorePackage,c as createRawClientHookHandleSubject,l as createRawClientHookReceivedSubject,t as createStrategy,In as deriveSessionEventDescriptors,kt as emitBestEffort,A as isPathWithinBase,Ln as isSessionEventSupported,Dt as pickNonEmptyString,u as pickNonEmptyStringValue,cn as registerDrizzleClientBinaryStorage,mn as registerDrizzleProfileStorage,Ut as registerDrizzleRuntimeStorage,jn as registerStorageHandlersWithRollback,j as resolveAndValidateBasePath,Nn 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-DgGke3gW.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-CITusS9s.mjs";export{e as createStrategy,t as verifyInstalledVersion};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as CodeExecutionWorkerOutcome, u as CodeExecutionWorkerTask } from "../types-
|
|
1
|
+
import { l as CodeExecutionWorkerOutcome, u as CodeExecutionWorkerTask } from "../types-D-Q9gxe2.mjs";
|
|
2
2
|
|
|
3
3
|
//#region runtimes/node/src/code-execution/worker-entry.d.ts
|
|
4
4
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{f as e,h as t,l as n,m as r}from"../types-
|
|
1
|
+
import{f as e,h as t,l as n,m as r}from"../types-CGL_-qT6.mjs";import{builtinModules as i,registerHooks as a}from"node:module";import{JsonValueSchema as o,snapshotJsonBoundary as s}from"@makaio/framework/contracts";import{register as c}from"tsx/esm/api";const l=new Set(i),u=/^[a-z][a-z\d+.-]*:/i,d=new Set([`ERR_MODULE_NOT_FOUND`,`ERR_PACKAGE_PATH_NOT_EXPORTED`,`ERR_PACKAGE_IMPORT_NOT_DEFINED`,`ERR_UNSUPPORTED_DIR_IMPORT`]),f=new WeakSet;var p=class extends Error{code=`ERR_MODULE_NOT_FOUND`;constructor(e,t){super(`Cannot find package '${e}' imported from ${t}`),this.name=`UnsupportedImportError`}};function m(e){try{return!(e instanceof Error)||!(`code`in e)?void 0:typeof e.code==`string`?e.code:void 0}catch{return}}function h(e){return e instanceof p||(typeof e==`object`||typeof e==`function`)&&e!==null&&f.has(e)}function g(e){if(e===``||e.startsWith(`.`)||e.startsWith(`/`)||u.test(e))return;let t=e.split(`/`),n=e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]??``;return n===``||l.has(n)?void 0:n}function _(e,t){let n=new Set(t);return a({resolve(t,r,i){let a=r.parentURL;if(a!==void 0&&e.some(e=>a.startsWith(e))){let e=g(t);if(e!==void 0&&!n.has(e))throw new p(e,a)}try{return i(t,r)}catch(e){throw d.has(m(e)??``)&&(typeof e==`object`||typeof e==`function`)&&e!==null&&f.add(e),e}}})}const v={"prototype-key":`The invoked export returned a value carrying a "__proto__" own key.`,"non-plain-object":`The invoked export returned an object that is not JSON data; only plain objects and arrays are.`,"symbol-key":`The invoked export returned a value that cannot be transported as JSON.`,"non-enumerable-key":`The invoked export returned a value that cannot be transported as JSON.`,"extra-array-key":`The invoked export returned a value that cannot be transported as JSON.`,"cyclic-reference":`The invoked export returned a non-serializable cyclic value.`,"nesting-too-deep":`The invoked export returned a value exceeding the maximum JSON container nesting.`,"negative-zero":`The invoked export returned -0, which JSON would transport as 0.`,"unreadable-value":`The invoked export returned a value that cannot be read into a JSON boundary snapshot.`};function y(e,n,r){return{kind:`failed`,code:e,message:t(n,r)}}function b(e){return typeof e==`function`}function x(e){return typeof e==`object`&&!!e}async function S(t,n){try{return{ok:!0,moduleNamespace:await t(n.entryNamespaceUrl,n.parentUrl)}}catch(t){return{ok:!1,outcome:y(h(t)?`unsupported_import`:`compilation_failed`,e(t),n.redactedPaths)}}}function C(e,t){let n=s(e);if(!n.ok)return{ok:!1,message:v[n.violation.kind]};let i=o.safeParse(n.value);if(!i.success)return{ok:!1,message:n.value===void 0?`The invoked export returned a value that has no JSON representation.`:`The invoked export returned a value that is not JSON-safe.`};let a=r(i.data);return a>t?{ok:!1,message:`The invoked export returned ${a} serialized bytes, which exceeds the limit of ${t}.`}:{ok:!0,value:i.data}}async function w(e,t){try{await e.unregister()}catch(e){console.warn(`[code-execution] Failed to unregister the loader for namespace %s: %s`,t,e)}}async function T(t){let r=_(t.programRootUrls,t.allowedPackages),i=c({namespace:t.namespace,tsconfig:!1});try{let r=await S((e,t)=>i.import(e,t),t);if(!r.ok)return r.outcome;let a=r.moduleNamespace[n];if(!x(a))return y(`provider_failed`,`The entry module was not reached through a generated "${n}" export.`,t.redactedPaths);let o=a[t.exportName];if(!b(o)){let e=o===void 0?`is not exported`:`is ${typeof o}, not a function`;return y(`entrypoint_not_found`,`Export "${t.exportName}" ${e}.`,t.redactedPaths)}let s;try{s=await o(t.arguments)}catch(n){return y(`handler_failed`,e(n),t.redactedPaths)}let c=C(s,t.maxResultBytes);return c.ok?{kind:`completed`,value:c.value}:y(`invalid_result`,c.message,t.redactedPaths)}finally{await w(i,t.namespace),r.deregister()}}export{T as default,T as executeCodeInWorker};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./package-
|
|
1
|
+
import{t as e}from"./package-B6mFblgK.mjs";import{CODE_EXECUTION_CAPABILITY_ID as t,CODE_EXECUTION_IDENTIFIER_MAX_LENGTH as n,CODE_EXECUTION_TRUST_LEVELS as r,CodeExecutionOutcomeSchema as i,CodeExecutionRequestSchema as a,CodeExecutionSubjects as o,boundCodeExecutionFailureMessage as s,codeExecutionAbortOutcomeForReason as c,dep as l,extensionToken as u}from"@makaio/framework/contracts";import{BaseService as d}from"@makaio/framework/service-base";function f(e,t){if(!Number.isFinite(e)||e<0)throw TypeError(`Execution budget "timeoutMs" must be a finite, non-negative number, received ${e}.`);let n=Date.now()+e;return t===void 0||!Number.isFinite(t)?n:Math.min(n,t)}function p(e){let{timeoutMs:t,requestDeadlineEpochMs:n,callerSignal:r}=e,i=f(t,n),a=new AbortController,o,s,c=()=>void 0,l=new Promise(e=>{c=e}),u=()=>{p(`cancellation`)};function d(){clearTimeout(s),s=void 0,r?.removeEventListener(`abort`,u)}function p(e){o===void 0&&(o=e,d(),a.abort(e),c(e))}function m(){let e=i-Date.now();if(e<=0){p(`timeout`);return}s=setTimeout(m,Math.min(e,2147483647)),s.unref?.()}return r?.aborted===!0?p(`cancellation`):(r?.addEventListener(`abort`,u,{once:!0}),m()),{context:{signal:a.signal,deadlineEpochMs:i},get abortReason(){return o},aborted:l,release:d}}function m(e){return typeof e==`string`&&e.length>0}function h(e){return m(e)&&e.length<=n}function g(e){try{let{id:t,displayName:n,priority:r,runtime:i,language:a,moduleFormat:o,trust:s,execute:c}=e;return!h(t)||!m(n)||typeof r!=`number`||!Number.isFinite(r)||!h(i)||!h(a)||!h(o)||!_(s)||typeof c!=`function`?void 0:{id:t,priority:r,runtime:i,language:a,moduleFormat:o,trust:s,execute:c,provider:e}}catch{return}}function _(e){return typeof e==`string`&&r.includes(e)}function v(e,t){return t===void 0?!0:(t.providerId===void 0||t.providerId===e.id)&&(t.runtime===void 0||t.runtime===e.runtime)&&(t.language===void 0||t.language===e.language)&&(t.moduleFormat===void 0||t.moduleFormat===e.moduleFormat)&&(t.trust===void 0||t.trust===e.trust)}function y(e,t){return e.priority===t.priority?e.id===t.id?0:e.id<t.id?-1:1:t.priority-e.priority}function b(e){let t=new Set;for(let n of e){if(t.has(n.id))return!0;t.add(n.id)}return!1}function x(e,t){let n=e.map(g).filter(e=>e!==void 0),r=n.length!==e.length;if(b(n))return{admitted:!1,code:`invalid_provider`};let[i]=n.filter(e=>v(e,t)).sort(y);return i===void 0?{admitted:!1,code:r?`invalid_provider`:`provider_unavailable`}:{admitted:!0,id:i.id,execute:i.execute,provider:i.provider}}const S=`[CodeExecutionService]`,C={provider_unavailable:`No registered code-execution provider satisfies the request requirements`,invalid_provider:`A registered code-execution provider does not satisfy the provider contract`};function w(e,t){try{let n=e.safeParse(t);return n.success?{ok:!0,value:n.data}:{ok:!1,cause:n.error}}catch(e){return{ok:!1,cause:e}}}function T(e,t){return{status:`failed`,error:{code:e,message:s(t)}}}function E(e,t,n){try{return Promise.resolve(Reflect.apply(e.execute,e.provider,[t,n.context]))}catch(e){return Promise.reject(e)}}var D=class extends d{capabilities;constructor(e,t){super(e),this.capabilities=t}onInit(){this.registerHandler(o.execute,async e=>{e.setResult(await this.dispatch(e.payload,e.signal,e.deadline))})}async dispatch(e,t,n){let r=w(a,e);return r.ok?this.route(r.value,t,n):(console.error(`${S} rejected an invocation that failed request validation:`,r.cause),T(`invalid_program`,`The invocation failed request contract validation`))}async route(e,n,r){let i=p({timeoutMs:e.timeoutMs,requestDeadlineEpochMs:r,callerSignal:n});try{if(i.abortReason!==void 0)return c(i.abortReason);let n=x(this.capabilities.getProviders(t),e.requirements);if(!n.admitted)return T(n.code,C[n.code]);let r=e.invocationId,a=E(n,e,i),o=this.invoke(a,n.id,r,i);return await Promise.race([o,i.aborted.then(c)])}finally{i.release()}}async invoke(e,t,n,r){let a;try{a=await e}catch(e){return r.abortReason===void 0?(this.logDiagnostic(n,t,`execute() rejected`,e),T(`provider_failed`,`Provider '${t}' failed while executing the invocation`)):c(r.abortReason)}if(r.abortReason!==void 0)return c(r.abortReason);let o=w(i,a);return o.ok?o.value:(this.logDiagnostic(n,t,`returned a non-conforming outcome`,o.cause),T(`invalid_provider`,`Provider '${t}' returned a value that is not a terminal outcome`))}logDiagnostic(e,t,n,r){console.error(`${S} provider '${t}' ${n} for invocation '${e}':`,r)}};const O=u(`code-execution`),k={name:O.name,displayName:`Code Execution`,version:`0.1.0`,critical:!0,dependencies:[l(e.name)],create:t=>{let n=t.getService(e);if(n===void 0)throw Error(`CapabilityService is not available for CodeExecutionService`);return new D(t.bus,n)}};export{p as a,x as i,k as n,D as r,O as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as e,f as t,h as n,l as r,m as i,p as a,u as o}from"./types-wwuw7RkB.mjs";import{fileURLToPath as s,pathToFileURL as c}from"node:url";import{mkdir as l,mkdtemp as u,realpath as d,rm as f,stat as p,symlink as ee,writeFile as m}from"node:fs/promises";import{basename as te,dirname as h,extname as g,isAbsolute as _,join as v,resolve as y,sep as b}from"node:path";import{randomUUID as ne}from"node:crypto";import{NPM_PACKAGE_NAME_MAX_LENGTH as x,isNpmPackageName as re}from"@makaio/framework/utils";import{CODE_EXECUTION_IDENTIFIER_MAX_LENGTH as S,CodeExecutionProgramSchema as ie,CodeExecutionVirtualPathSchema as ae,JsonValueSchema as C,codeExecutionAbortOutcome as w,snapshotJsonBoundary as T}from"@makaio/framework/contracts";import{tmpdir as oe}from"node:os";import se from"piscina";async function E(e){if(!_(e))return[e];let t=new Set([e]);try{t.add(await d(e))}catch{}return[...t]}function D(e){return _(e)?[e,c(e).href]:[e]}async function ce(e){return(await E(e)).flatMap(D)}async function le(e){let t=new Map;for(let[n,r]of e.packageRoots)try{let e=await d(r);if(!(await p(e)).isDirectory())throw Error(`Package root is not a directory.`);t.set(n,e)}catch{throw Error(`A configured package root could not be resolved.`)}return{packageRoots:t,redactions:await ue({...e,packageRoots:new Map([...e.packageRoots,...[...t].map(([e,t])=>[`resolved:${e}`,t])])})}}async function ue(t){let n=new Set,r=t=>{let r=e(t);r.length>=4&&n.add(r)},i=t=>{let r=e(t);r.length>0&&n.add(r)};for(let e of Object.values(t.environment))r(e);for(let e of[...t.packageRoots.values(),...t.workerPaths])for(let t of await ce(e))i(t);return[...n]}const O={admitted:!1,refusal:`aborted`},de={admitted:!1,refusal:`queue_full`};var fe=class{maxQueued;available;waiting=[];constructor(e,t){this.maxQueued=t,this.available=e}acquire(e){return e.aborted?Promise.resolve(O):this.available>0?(--this.available,Promise.resolve({admitted:!0,release:this.createRelease()})):this.waiting.length>=this.maxQueued?Promise.resolve(de):new Promise(t=>{let n=()=>{e.removeEventListener(`abort`,r),t({admitted:!0,release:this.createRelease()})},r=()=>{let e=this.waiting.indexOf(n);e>=0&&this.waiting.splice(e,1),t(O)};e.addEventListener(`abort`,r,{once:!0}),this.waiting.push(n)})}createRelease(){let e=!1;return()=>{if(e)return;e=!0;let t=this.waiting.shift();t===void 0?this.available+=1:t()}}};function pe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&`program`in e&&`arguments`in e}function k(e){return{status:`failed`,error:{code:`invalid_program`,message:e}}}function me(e){let t={program:void 0,arguments:void 0},n;try{t.program=Reflect.get(e,`program`),t.arguments=Reflect.get(e,`arguments`),n=T(t)}catch{return k(`The invocation could not be read into a stable JSON boundary snapshot.`)}if(!n.ok||!pe(n.value))return k(`The invocation could not be read into a stable JSON boundary snapshot.`);let r=ie.safeParse(n.value.program);return r.success?{program:r.data,arguments:n.value.arguments}:k(`The invocation program does not satisfy the CodeExecution contract.`)}function A(e){return e instanceof Error&&e.name===`AbortError`}function he(e){return A(e)||e instanceof Error&&e.message===`Terminating worker thread`}function ge(e,t){if(!Number.isFinite(t))throw Error(`Option "${e}" must be a finite number, received ${t}.`);return t}function j(e,t,n){if(t.trim().length===0)throw Error(`Option "${e}" must be a non-empty string.`);if(n!==void 0&&t.length>n)throw Error(`Option "${e}" must contain at most ${n} characters.`);return t}function M(e,t,n){if(!Number.isInteger(t)||t<n)throw Error(`Option "${e}" must be an integer of at least ${n}, received ${t}.`);return t}const _e={"prototype-key":`The invocation arguments carry a "__proto__" key, which cannot be transported as JSON.`,"non-plain-object":`The invocation arguments are not JSON data: only plain objects and arrays are transportable, so values such as a Date, a Map, or a class instance must be converted before they are submitted.`,"symbol-key":`The invocation arguments carry a symbol-keyed property, which cannot be transported as JSON.`,"non-enumerable-key":`The invocation arguments carry a non-enumerable property that the record parse would drop.`,"extra-array-key":`The invocation arguments carry an array with extra own properties that the array rebuild would drop.`,"cyclic-reference":`The invocation arguments contain a cyclic reference and cannot be transported as JSON.`,"nesting-too-deep":`The invocation arguments exceed the maximum JSON container nesting.`,"negative-zero":`The invocation arguments contain -0, which JSON would transport as 0.`,"unreadable-value":`The invocation arguments could not be read into a stable JSON boundary snapshot.`};function ve(e){if(e.length===0)return a(`invalid_program`,`The export name must not be empty.`);if(!(e.length<=S))return a(`invalid_program`,`The export name is ${e.length} characters, which exceeds the limit of ${S}.`)}function ye(e,t){let n=T(e);if(!n.ok)return a(`invalid_program`,_e[n.violation.kind]);let r=C.safeParse(n.value);if(!r.success)return a(`invalid_program`,`The invocation arguments carry a value with no JSON form — a function, undefined, a bigint, a symbol, or a non-finite number — which cannot be transported as JSON.`);let o;try{o=i(r.data)}catch{return a(`invalid_program`,`The invocation arguments have no JSON representation.`)}if(!(o<=t))return a(`invalid_program`,`The invocation arguments serialize to ${o} bytes, which exceeds the limit of ${t}.`)}function N(e,t){return ve(e.program.exportName)??ye(e.arguments,t)}const P=`${JSON.stringify({type:`module`},null,2)}\n`,F=`package.json`,I=`node_modules`,L=`__makaio-entry-namespace.mjs`,be=new Map([[V(F),`the generated program manifest`],[V(I),`provider-configured package links`],[V(L),`the generated entry namespace module`]]),R=new Set([`.ts`,`.mts`,`.js`,`.mjs`]),xe=[...R].join(`, `);var z=class extends Error{code;constructor(e,t){super(t),this.code=e,this.name=`VirtualProgramError`}},B=class extends z{rootLease;constructor(e,t){super(e.code,e.message),this.rootLease=t,this.name=`UnreleasedProgramRootError`}};function Se(e){return e instanceof z?e:(console.warn(`[code-execution] Failed to materialize a program root: %s`,e),new z(`provider_failed`,`The program root could not be materialized.`))}function Ce(e){let t=new Map;for(let[n,r]of Object.entries(e??{})){if(!re(n))throw Error(`Configured package name "${n}" is not an ordinary bare package specifier.`);if(n.length>x)throw Error(`Configured package name is ${n.length} characters, which exceeds the limit of ${x}.`);if(!_(r))throw Error(`Configured package root for "${n}" must be an absolute path.`);t.set(n,y(r))}return t}function V(e){return e.normalize(`NFC`).toLowerCase().toUpperCase().normalize(`NFC`)}function H(e,t,n){let r=Object.keys(e.files);if(r.length>t)throw new z(`invalid_program`,`Program declares ${r.length} files, which exceeds the limit of ${t}.`);let i=0;for(let t of Object.values(e.files)){if(!t.isWellFormed())throw new z(`invalid_program`,`A program source is not well-formed Unicode (no unpaired surrogates).`);if(i+=Buffer.byteLength(t,`utf8`),i>n)throw new z(`invalid_program`,`Program sources exceed the aggregate limit of ${n} UTF-8 bytes.`)}Te([...r,e.entryFile]),we(e),Ee(r),U(r),De(r)}function we(e){if(!Object.hasOwn(e.files,e.entryFile))throw new z(`invalid_program`,`Entry file "${e.entryFile}" is not one of the declared program files.`)}function U(e){for(let t of e){let e=g(t);if(!R.has(e))throw new z(`invalid_program`,`Virtual path "${t}" ${e===``?`carries no file extension`:`carries the extension "${e}"`}; this provider executes ${xe} sources.`)}}function Te(e){for(let t of e){let e=ae.safeParse(t);if(!e.success)throw new z(`invalid_program`,`A virtual path is not canonical: ${e.error.issues[0]?.message??`it violates the virtual path rules`}.`)}}function Ee(e){for(let t of e){let e=t.split(`/`)[0]??``,n=be.get(V(e));if(n!==void 0)throw new z(`invalid_program`,`Virtual path "${t}" claims the root name "${e}", which is reserved for ${n}.`)}}function De(e){let t=e.map(e=>({original:e,originalSegments:e.split(`/`),foldedSegments:e.split(`/`).map(V)})).sort(Oe),n;for(let e of t){if(n!==void 0&&ke(n.foldedSegments,e.foldedSegments))throw new z(`invalid_program`,`Virtual paths "${n.original}" and "${e.original}" name the same file.`);if(n!==void 0&&Ae(n.foldedSegments,e.foldedSegments)){let t=e.originalSegments.slice(0,n.originalSegments.length).join(`/`);throw new z(`invalid_program`,`Virtual path "${n.original}" is declared as a file and as the directory "${t}".`)}n=e}}function Oe(e,t){for(let n=0;n<Math.min(e.foldedSegments.length,t.foldedSegments.length);n+=1){let r=e.foldedSegments[n]??``,i=t.foldedSegments[n]??``;if(r<i)return-1;if(r>i)return 1}return e.foldedSegments.length-t.foldedSegments.length}function ke(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Ae(e,t){return e.length<t.length&&e.every((e,n)=>e===t[n])}function W(e,t,n,r,i){let a=y(e),o=y(a,n);if(!o.startsWith(a+b))throw new z(i,`${r} "${n}" resolves outside the program root.`);for(let e of t){let t=y(e),a=y(t,n);if(!a.startsWith(t+b))throw new z(i,`${r} "${n}" resolves outside the program root.`);let o=Buffer.byteLength(a,`utf8`);if(o>=1024)throw new z(i,`${r} resolves to ${o} UTF-8 bytes once the program root is prepended, which leaves no room inside the 1024-byte budget.`)}return o}function G(e,t){return W(e,t,F,`Program manifest`,`provider_failed`)}function K(e,t){return W(e,t,L,`Entry namespace module`,`provider_failed`)}function je(e){return`import * as entry from ${JSON.stringify(c(e).href)};\nexport const ${r} = entry;\n`}function q(e,t,n){return W(e,t,n,`Virtual path`,`invalid_program`)}function J(e,t,n){return W(e,t,`${I}/${n}`,`Package link`,`provider_failed`)}function Me(e,t,n,r){G(e,t),K(e,t);for(let r of Object.keys(n.files))q(e,t,r);for(let n of r.keys())J(e,t,n)}async function Ne(e){let t=Pe(e.program);H(t,e.maxProgramFiles,e.maxSourceBytes);let n;try{let r=await u(v(oe(),`makaio-code-execution-`));n=r;let i=await E(r);Me(r,i,t,e.packageRoots);let a=G(r,i);await m(a,P,`utf8`),await Fe(r,i,t.files),await Ie(r,i,e.packageRoots);let o=q(r,i,t.entryFile),s=K(r,i);return await m(s,je(o),`utf8`),{root:r,rootUrls:i.map(e=>c(`${e}${b}`).href),entryNamespaceUrl:c(s).href,parentUrl:c(a).href,redactedPaths:i.flatMap(D),cleanup:()=>X(r)}}catch(e){let t=Se(e);if(n!==void 0){let e=n,r={root:e,cleanup:()=>X(e)};if(!await r.cleanup())throw console.warn(`[code-execution] Failed to remove a partially materialized program root: %s`,n),new B(t,r)}throw t}}function Pe(e){let t=e.files,n=Object.create(null);for(let e of Object.keys(t))n[e]=t[e];return{files:n,entryFile:e.entryFile,exportName:e.exportName}}async function Y(e){for(let t of await Promise.allSettled(e))if(t.status===`rejected`)throw t.reason}function Fe(e,t,n){return Y(Object.entries(n).map(async([n,r])=>{let i=q(e,t,n);await l(h(i),{recursive:!0}),await m(i,r,`utf8`)}))}function Ie(e,t,n){return Y([...n].map(async([n,r])=>{let i=J(e,t,n);await l(h(i),{recursive:!0}),await ee(r,i,`junction`)}))}async function X(e){try{return await f(e,{recursive:!0,force:!0,maxRetries:2,retryDelay:25}),!0}catch{return!1}}var Le=class{removeRoot;roots=new Map;attempts=new Map;constructor(e=X){this.removeRoot=e}get pending(){return[...this.roots.keys()]}async release(e){await this.attempt(e.root,()=>e.cleanup())||console.warn(`[code-execution] Retained a program root for a later removal attempt: %s`,e.root)}async retry(e){let t=Date.now();await this.retryRoots(e.filter(e=>{let n=this.roots.get(e);return n!==void 0&&t-n>=5e3}))}async retryAll(){return await this.retryRoots(this.pending),this.pending}async retryRoots(e){await Promise.all(e.filter(e=>this.roots.has(e)).map(e=>this.attempt(e,()=>this.removeRoot(e))))}async attempt(e,t){let n=this.attempts.get(e);if(n!==void 0)return n;let r=this.runAttempt(e,t);this.attempts.set(e,r);try{return await r}finally{this.attempts.get(e)===r&&this.attempts.delete(e)}}async runAttempt(e,t){let n=!1;try{n=await t()}catch(e){console.warn(`[code-execution] Failed to release a program root: %s`,e)}return n?this.roots.delete(e):this.roots.set(e,Date.now()),n}};const Z=`code-execution`,Re=[`--import=tsx`],ze=[],Q=Object.freeze({TSX_DISABLE_CACHE:`1`});function Be(e){return Object.freeze({...Q,TSX_TSCONFIG_PATH:e})}function Ve(e){if(e.mode===`source`){let t=v(e.moduleDir,Z,`worker-tsconfig.json`);return{filename:v(e.moduleDir,Z,`worker-entry.ts`),execArgv:Re,env:Be(t),loaderPaths:[t]}}return{filename:v(e.moduleDir,Z,`worker-entry.mjs`),execArgv:ze,env:Q,loaderPaths:[]}}function He(e){let t=s(e),n=h(t);return Ve({moduleDir:te(n)===Z?h(n):n,mode:g(t)===`.ts`?`source`:`dist`})}function $(){return a(`provider_unavailable`,`This CodeExecution provider has been disposed.`)}function Ue(e){return e instanceof B?e.rootLease:void 0}function We(e,t){return a(`provider_unavailable`,`This CodeExecution provider is at capacity: ${e} invocations are executing and ${t} are waiting.`)}var Ge=class{id;displayName;priority;runtime=`node`;language=`typescript`;moduleFormat=`esm`;trust=`trusted-code-only`;workerEntry;workerExecArgv;workerLoaderPaths;workerLoaderEnv;environment;packageRoots;maxConcurrency;maxQueuedInvocations;idleTimeoutMs;maxProgramFiles;maxSourceBytes;maxResultBytes;maxArgumentBytes;maxInvocationsPerWorker;admission;inFlight=new Set;quiescing=new Set;draining=new Set;retained=new Le;runtimeConfiguration;generation;disposed=!1;disposal;constructor(e={}){let t=He(import.meta.url);this.id=j(`id`,e.id??`piscina-code-execution`,S),this.displayName=j(`displayName`,e.displayName??`Local (Piscina)`),this.priority=ge(`priority`,e.priority??0),this.workerEntry=t.filename,this.workerExecArgv=[...t.execArgv],this.workerLoaderPaths=[...t.loaderPaths],this.workerLoaderEnv=Object.freeze({...t.env}),this.environment=Object.freeze({...e.environment}),this.packageRoots=Ce(e.packageRoots),this.maxConcurrency=M(`maxConcurrency`,e.maxConcurrency??4,1),this.maxQueuedInvocations=M(`maxQueuedInvocations`,e.maxQueuedInvocations??16,0),this.idleTimeoutMs=M(`idleTimeoutMs`,e.idleTimeoutMs??3e4,0),this.maxInvocationsPerWorker=M(`maxInvocationsPerWorker`,e.maxInvocationsPerWorker??64,1),this.maxProgramFiles=M(`maxProgramFiles`,e.maxProgramFiles??256,1),this.maxSourceBytes=M(`maxSourceBytes`,e.maxSourceBytes??5242880,1),this.maxResultBytes=M(`maxResultBytes`,e.maxResultBytes??1048576,1),this.maxArgumentBytes=M(`maxArgumentBytes`,e.maxArgumentBytes??1048576,1),this.admission=new fe(this.maxConcurrency,this.maxQueuedInvocations)}async execute(e,t){if(this.disposed)return $();let n=this.runInvocation(e,t);this.inFlight.add(n);try{return await n}finally{this.inFlight.delete(n)}}dispose(){return this.disposed=!0,this.disposal??=this.destroyPoolAndDrain(),this.disposal}async destroyPoolAndDrain(){let e=[...this.generation===void 0?[]:[this.generation],...this.draining];this.generation=void 0;let t=await Promise.allSettled(e.map(e=>this.tearDown(e)));await Promise.allSettled([...this.inFlight]),await Promise.allSettled([...this.quiescing]);let n=await this.retained.retryAll();n.length>0&&console.warn(`[code-execution] Program roots still on disk after disposal: %s`,n.join(`, `));let r=t.filter(e=>e.status===`rejected`).map(e=>e.reason);if(r.length>0)throw AggregateError(r,`The CodeExecution provider could not tear down every worker pool.`)}async runInvocation(e,t){let n=me(e);if(`status`in n)return n;let r,i,o,s,c;try{H(n.program,this.maxProgramFiles,this.maxSourceBytes);let e=N(n,this.maxArgumentBytes);if(e!==void 0)return e;let l=C.safeParse(n.arguments);if(!l.success)return a(`invalid_program`,`The invocation arguments do not satisfy the CodeExecution contract.`);let u={program:n.program,arguments:l.data},d=await this.admission.acquire(t.signal);if(!d.admitted)return d.refusal===`aborted`?w(t):We(this.maxConcurrency,this.maxQueuedInvocations);if(s=d.release,this.disposed)return $();if(t.signal.aborted)return w(t);if(r=await this.resolveRuntimeConfiguration(),this.disposed)return $();if(t.signal.aborted)return w(t);if(i=await Ne({program:u.program,packageRoots:r.packageRoots,maxProgramFiles:this.maxProgramFiles,maxSourceBytes:this.maxSourceBytes}),o=i,this.disposed)return $();if(t.signal.aborted)return w(t);let f=this.createTask(u,i,r),p=await this.dispatch(f,t.signal);return c=p.teardown,p.kind===`aborted`?w(t):p.kind===`failed`?this.toFailureOutcome(p.error,f.redactedPaths):this.toOutcome(p.value,f.redactedPaths)}catch(e){return o=Ue(e)??o,this.toFailureOutcome(e,[...i?.redactedPaths??[],...r?.redactions??[]])}finally{this.trackRelease(o,s,c)}}async quiesce(e,t,n){let r=this.retained.pending;e!==void 0&&await this.retained.release(e),n!==void 0&&await Promise.allSettled([n]),t?.(),await this.retained.retry(r)}trackRelease(e,t,n){let r=this.quiesce(e,t,n);this.quiescing.add(r),r.catch(e=>{console.warn(`[code-execution] Failed to release an invocation: %s`,e)}).finally(()=>this.quiescing.delete(r))}async dispatch(e,t){let n=this.submit(e,t);try{return{kind:`completed`,value:await n.running,teardown:n.generation.teardown}}catch(e){let r=n.generation.teardown;return t.aborted&&A(e)?{kind:`aborted`,teardown:r}:{kind:`failed`,error:e,teardown:r}}}submit(e,t){let n=this.acquireGeneration();n.submitted+=1,n.outstanding+=1;let r=n.pool.run(e,{signal:t});return n.submitted>=this.maxInvocationsPerWorker&&this.retire(n),{generation:n,running:r.finally(()=>{--n.outstanding,this.tearDownIfDrained(n)})}}retire(e){this.generation===e&&(this.generation=void 0),e.retired=!0,this.draining.add(e),this.tearDownIfDrained(e)}handlePoolError(e,t){e.failed||(e.failed=!0,this.retire(e),this.tearDown(e).catch(e=>{console.warn(`[code-execution] Failed to tear down a failed worker generation: %s`,e)}),console.warn(`[code-execution] Worker generation failed: %s`,t))}tearDownIfDrained(e){!e.retired||e.outstanding>0||this.tearDown(e).then(()=>this.draining.delete(e)).catch(e=>{console.warn(`[code-execution] Failed to tear down a drained worker generation: %s`,e)})}tearDown(e){return e.teardown??=e.pool.destroy(),e.teardown}createTask(e,t,n){return{entryNamespaceUrl:t.entryNamespaceUrl,parentUrl:t.parentUrl,programRootUrls:t.rootUrls,allowedPackages:[...n.packageRoots.keys()],exportName:e.program.exportName,arguments:e.arguments,namespace:`makaio-code-execution-${ne()}`,maxResultBytes:this.maxResultBytes,redactedPaths:[...t.redactedPaths,...n.redactions]}}resolveRuntimeConfiguration(){if(this.runtimeConfiguration!==void 0)return this.runtimeConfiguration;let e=le({environment:this.environment,packageRoots:this.packageRoots,workerPaths:[this.workerEntry,...this.workerLoaderPaths]});return this.runtimeConfiguration=e,e.catch(()=>{this.runtimeConfiguration===e&&(this.runtimeConfiguration=void 0)}),e}acquireGeneration(){if(this.generation!==void 0)return this.generation;let e=new se({filename:this.workerEntry,execArgv:[...this.workerExecArgv],env:{...this.environment,...this.workerLoaderEnv},minThreads:0,maxThreads:this.maxConcurrency,idleTimeout:this.idleTimeoutMs}),t={pool:e,submitted:0,outstanding:0,retired:!1,failed:!1};return e.on(`error`,e=>this.handlePoolError(t,e)),this.generation=t,this.generation}toOutcome(e,t){let r=o.safeParse(e);if(!r.success)return a(`invalid_provider`,`The execution worker returned a malformed outcome envelope.`);if(r.data.kind===`completed`){let e=i(r.data.value);return e>this.maxResultBytes?a(`invalid_result`,`The execution returned ${e} serialized bytes, which exceeds the limit of ${this.maxResultBytes}.`):{status:`completed`,value:r.data.value}}return a(r.data.code,n(r.data.message,t))}toFailureOutcome(e,r){return e instanceof z?a(e.code,n(e.message,r)):this.disposed&&he(e)?$():a(`provider_failed`,n(t(e),r))}};export{Ge as t};
|
|
1
|
+
import{d as e,f as t,h as n,l as r,m as i,p as a,u as o}from"./types-CGL_-qT6.mjs";import{fileURLToPath as s,pathToFileURL as c}from"node:url";import{mkdir as l,mkdtemp as u,realpath as d,rm as f,stat as p,symlink as ee,writeFile as m}from"node:fs/promises";import{basename as te,dirname as h,extname as g,isAbsolute as _,join as v,resolve as y,sep as b}from"node:path";import{randomUUID as ne}from"node:crypto";import{NPM_PACKAGE_NAME_MAX_LENGTH as x,isNpmPackageName as re}from"@makaio/framework/utils";import{CODE_EXECUTION_IDENTIFIER_MAX_LENGTH as S,CodeExecutionProgramSchema as ie,CodeExecutionVirtualPathSchema as ae,JsonValueSchema as C,codeExecutionAbortOutcome as w,snapshotJsonBoundary as T}from"@makaio/framework/contracts";import{tmpdir as oe}from"node:os";import se from"piscina";async function E(e){if(!_(e))return[e];let t=new Set([e]);try{t.add(await d(e))}catch{}return[...t]}function D(e){return _(e)?[e,c(e).href]:[e]}async function ce(e){return(await E(e)).flatMap(D)}async function le(e){let t=new Map;for(let[n,r]of e.packageRoots)try{let e=await d(r);if(!(await p(e)).isDirectory())throw Error(`Package root is not a directory.`);t.set(n,e)}catch{throw Error(`A configured package root could not be resolved.`)}return{packageRoots:t,redactions:await ue({...e,packageRoots:new Map([...e.packageRoots,...[...t].map(([e,t])=>[`resolved:${e}`,t])])})}}async function ue(t){let n=new Set,r=t=>{let r=e(t);r.length>=4&&n.add(r)},i=t=>{let r=e(t);r.length>0&&n.add(r)};for(let e of Object.values(t.environment))r(e);for(let e of[...t.packageRoots.values(),...t.workerPaths])for(let t of await ce(e))i(t);return[...n]}const O={admitted:!1,refusal:`aborted`},de={admitted:!1,refusal:`queue_full`};var fe=class{maxQueued;available;waiting=[];constructor(e,t){this.maxQueued=t,this.available=e}acquire(e){return e.aborted?Promise.resolve(O):this.available>0?(--this.available,Promise.resolve({admitted:!0,release:this.createRelease()})):this.waiting.length>=this.maxQueued?Promise.resolve(de):new Promise(t=>{let n=()=>{e.removeEventListener(`abort`,r),t({admitted:!0,release:this.createRelease()})},r=()=>{let e=this.waiting.indexOf(n);e>=0&&this.waiting.splice(e,1),t(O)};e.addEventListener(`abort`,r,{once:!0}),this.waiting.push(n)})}createRelease(){let e=!1;return()=>{if(e)return;e=!0;let t=this.waiting.shift();t===void 0?this.available+=1:t()}}};function pe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&`program`in e&&`arguments`in e}function k(e){return{status:`failed`,error:{code:`invalid_program`,message:e}}}function me(e){let t={program:void 0,arguments:void 0},n;try{t.program=Reflect.get(e,`program`),t.arguments=Reflect.get(e,`arguments`),n=T(t)}catch{return k(`The invocation could not be read into a stable JSON boundary snapshot.`)}if(!n.ok||!pe(n.value))return k(`The invocation could not be read into a stable JSON boundary snapshot.`);let r=ie.safeParse(n.value.program);return r.success?{program:r.data,arguments:n.value.arguments}:k(`The invocation program does not satisfy the CodeExecution contract.`)}function A(e){return e instanceof Error&&e.name===`AbortError`}function he(e){return A(e)||e instanceof Error&&e.message===`Terminating worker thread`}function ge(e,t){if(!Number.isFinite(t))throw Error(`Option "${e}" must be a finite number, received ${t}.`);return t}function j(e,t,n){if(t.trim().length===0)throw Error(`Option "${e}" must be a non-empty string.`);if(n!==void 0&&t.length>n)throw Error(`Option "${e}" must contain at most ${n} characters.`);return t}function M(e,t,n){if(!Number.isInteger(t)||t<n)throw Error(`Option "${e}" must be an integer of at least ${n}, received ${t}.`);return t}const _e={"prototype-key":`The invocation arguments carry a "__proto__" key, which cannot be transported as JSON.`,"non-plain-object":`The invocation arguments are not JSON data: only plain objects and arrays are transportable, so values such as a Date, a Map, or a class instance must be converted before they are submitted.`,"symbol-key":`The invocation arguments carry a symbol-keyed property, which cannot be transported as JSON.`,"non-enumerable-key":`The invocation arguments carry a non-enumerable property that the record parse would drop.`,"extra-array-key":`The invocation arguments carry an array with extra own properties that the array rebuild would drop.`,"cyclic-reference":`The invocation arguments contain a cyclic reference and cannot be transported as JSON.`,"nesting-too-deep":`The invocation arguments exceed the maximum JSON container nesting.`,"negative-zero":`The invocation arguments contain -0, which JSON would transport as 0.`,"unreadable-value":`The invocation arguments could not be read into a stable JSON boundary snapshot.`};function ve(e){if(e.length===0)return a(`invalid_program`,`The export name must not be empty.`);if(!(e.length<=S))return a(`invalid_program`,`The export name is ${e.length} characters, which exceeds the limit of ${S}.`)}function ye(e,t){let n=T(e);if(!n.ok)return a(`invalid_program`,_e[n.violation.kind]);let r=C.safeParse(n.value);if(!r.success)return a(`invalid_program`,`The invocation arguments carry a value with no JSON form — a function, undefined, a bigint, a symbol, or a non-finite number — which cannot be transported as JSON.`);let o;try{o=i(r.data)}catch{return a(`invalid_program`,`The invocation arguments have no JSON representation.`)}if(!(o<=t))return a(`invalid_program`,`The invocation arguments serialize to ${o} bytes, which exceeds the limit of ${t}.`)}function N(e,t){return ve(e.program.exportName)??ye(e.arguments,t)}const P=`${JSON.stringify({type:`module`},null,2)}\n`,F=`package.json`,I=`node_modules`,L=`__makaio-entry-namespace.mjs`,be=new Map([[V(F),`the generated program manifest`],[V(I),`provider-configured package links`],[V(L),`the generated entry namespace module`]]),R=new Set([`.ts`,`.mts`,`.js`,`.mjs`]),xe=[...R].join(`, `);var z=class extends Error{code;constructor(e,t){super(t),this.code=e,this.name=`VirtualProgramError`}},B=class extends z{rootLease;constructor(e,t){super(e.code,e.message),this.rootLease=t,this.name=`UnreleasedProgramRootError`}};function Se(e){return e instanceof z?e:(console.warn(`[code-execution] Failed to materialize a program root: %s`,e),new z(`provider_failed`,`The program root could not be materialized.`))}function Ce(e){let t=new Map;for(let[n,r]of Object.entries(e??{})){if(!re(n))throw Error(`Configured package name "${n}" is not an ordinary bare package specifier.`);if(n.length>x)throw Error(`Configured package name is ${n.length} characters, which exceeds the limit of ${x}.`);if(!_(r))throw Error(`Configured package root for "${n}" must be an absolute path.`);t.set(n,y(r))}return t}function V(e){return e.normalize(`NFC`).toLowerCase().toUpperCase().normalize(`NFC`)}function H(e,t,n){let r=Object.keys(e.files);if(r.length>t)throw new z(`invalid_program`,`Program declares ${r.length} files, which exceeds the limit of ${t}.`);let i=0;for(let t of Object.values(e.files)){if(!t.isWellFormed())throw new z(`invalid_program`,`A program source is not well-formed Unicode (no unpaired surrogates).`);if(i+=Buffer.byteLength(t,`utf8`),i>n)throw new z(`invalid_program`,`Program sources exceed the aggregate limit of ${n} UTF-8 bytes.`)}Te([...r,e.entryFile]),we(e),Ee(r),U(r),De(r)}function we(e){if(!Object.hasOwn(e.files,e.entryFile))throw new z(`invalid_program`,`Entry file "${e.entryFile}" is not one of the declared program files.`)}function U(e){for(let t of e){let e=g(t);if(!R.has(e))throw new z(`invalid_program`,`Virtual path "${t}" ${e===``?`carries no file extension`:`carries the extension "${e}"`}; this provider executes ${xe} sources.`)}}function Te(e){for(let t of e){let e=ae.safeParse(t);if(!e.success)throw new z(`invalid_program`,`A virtual path is not canonical: ${e.error.issues[0]?.message??`it violates the virtual path rules`}.`)}}function Ee(e){for(let t of e){let e=t.split(`/`)[0]??``,n=be.get(V(e));if(n!==void 0)throw new z(`invalid_program`,`Virtual path "${t}" claims the root name "${e}", which is reserved for ${n}.`)}}function De(e){let t=e.map(e=>({original:e,originalSegments:e.split(`/`),foldedSegments:e.split(`/`).map(V)})).sort(Oe),n;for(let e of t){if(n!==void 0&&ke(n.foldedSegments,e.foldedSegments))throw new z(`invalid_program`,`Virtual paths "${n.original}" and "${e.original}" name the same file.`);if(n!==void 0&&Ae(n.foldedSegments,e.foldedSegments)){let t=e.originalSegments.slice(0,n.originalSegments.length).join(`/`);throw new z(`invalid_program`,`Virtual path "${n.original}" is declared as a file and as the directory "${t}".`)}n=e}}function Oe(e,t){for(let n=0;n<Math.min(e.foldedSegments.length,t.foldedSegments.length);n+=1){let r=e.foldedSegments[n]??``,i=t.foldedSegments[n]??``;if(r<i)return-1;if(r>i)return 1}return e.foldedSegments.length-t.foldedSegments.length}function ke(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Ae(e,t){return e.length<t.length&&e.every((e,n)=>e===t[n])}function W(e,t,n,r,i){let a=y(e),o=y(a,n);if(!o.startsWith(a+b))throw new z(i,`${r} "${n}" resolves outside the program root.`);for(let e of t){let t=y(e),a=y(t,n);if(!a.startsWith(t+b))throw new z(i,`${r} "${n}" resolves outside the program root.`);let o=Buffer.byteLength(a,`utf8`);if(o>=1024)throw new z(i,`${r} resolves to ${o} UTF-8 bytes once the program root is prepended, which leaves no room inside the 1024-byte budget.`)}return o}function G(e,t){return W(e,t,F,`Program manifest`,`provider_failed`)}function K(e,t){return W(e,t,L,`Entry namespace module`,`provider_failed`)}function je(e){return`import * as entry from ${JSON.stringify(c(e).href)};\nexport const ${r} = entry;\n`}function q(e,t,n){return W(e,t,n,`Virtual path`,`invalid_program`)}function J(e,t,n){return W(e,t,`${I}/${n}`,`Package link`,`provider_failed`)}function Me(e,t,n,r){G(e,t),K(e,t);for(let r of Object.keys(n.files))q(e,t,r);for(let n of r.keys())J(e,t,n)}async function Ne(e){let t=Pe(e.program);H(t,e.maxProgramFiles,e.maxSourceBytes);let n;try{let r=await u(v(oe(),`makaio-code-execution-`));n=r;let i=await E(r);Me(r,i,t,e.packageRoots);let a=G(r,i);await m(a,P,`utf8`),await Fe(r,i,t.files),await Ie(r,i,e.packageRoots);let o=q(r,i,t.entryFile),s=K(r,i);return await m(s,je(o),`utf8`),{root:r,rootUrls:i.map(e=>c(`${e}${b}`).href),entryNamespaceUrl:c(s).href,parentUrl:c(a).href,redactedPaths:i.flatMap(D),cleanup:()=>X(r)}}catch(e){let t=Se(e);if(n!==void 0){let e=n,r={root:e,cleanup:()=>X(e)};if(!await r.cleanup())throw console.warn(`[code-execution] Failed to remove a partially materialized program root: %s`,n),new B(t,r)}throw t}}function Pe(e){let t=e.files,n=Object.create(null);for(let e of Object.keys(t))n[e]=t[e];return{files:n,entryFile:e.entryFile,exportName:e.exportName}}async function Y(e){for(let t of await Promise.allSettled(e))if(t.status===`rejected`)throw t.reason}function Fe(e,t,n){return Y(Object.entries(n).map(async([n,r])=>{let i=q(e,t,n);await l(h(i),{recursive:!0}),await m(i,r,`utf8`)}))}function Ie(e,t,n){return Y([...n].map(async([n,r])=>{let i=J(e,t,n);await l(h(i),{recursive:!0}),await ee(r,i,`junction`)}))}async function X(e){try{return await f(e,{recursive:!0,force:!0,maxRetries:2,retryDelay:25}),!0}catch{return!1}}var Le=class{removeRoot;roots=new Map;attempts=new Map;constructor(e=X){this.removeRoot=e}get pending(){return[...this.roots.keys()]}async release(e){await this.attempt(e.root,()=>e.cleanup())||console.warn(`[code-execution] Retained a program root for a later removal attempt: %s`,e.root)}async retry(e){let t=Date.now();await this.retryRoots(e.filter(e=>{let n=this.roots.get(e);return n!==void 0&&t-n>=5e3}))}async retryAll(){return await this.retryRoots(this.pending),this.pending}async retryRoots(e){await Promise.all(e.filter(e=>this.roots.has(e)).map(e=>this.attempt(e,()=>this.removeRoot(e))))}async attempt(e,t){let n=this.attempts.get(e);if(n!==void 0)return n;let r=this.runAttempt(e,t);this.attempts.set(e,r);try{return await r}finally{this.attempts.get(e)===r&&this.attempts.delete(e)}}async runAttempt(e,t){let n=!1;try{n=await t()}catch(e){console.warn(`[code-execution] Failed to release a program root: %s`,e)}return n?this.roots.delete(e):this.roots.set(e,Date.now()),n}};const Z=`code-execution`,Re=[`--import=tsx`],ze=[],Q=Object.freeze({TSX_DISABLE_CACHE:`1`});function Be(e){return Object.freeze({...Q,TSX_TSCONFIG_PATH:e})}function Ve(e){if(e.mode===`source`){let t=v(e.moduleDir,Z,`worker-tsconfig.json`);return{filename:v(e.moduleDir,Z,`worker-entry.ts`),execArgv:Re,env:Be(t),loaderPaths:[t]}}return{filename:v(e.moduleDir,Z,`worker-entry.mjs`),execArgv:ze,env:Q,loaderPaths:[]}}function He(e){let t=s(e),n=h(t);return Ve({moduleDir:te(n)===Z?h(n):n,mode:g(t)===`.ts`?`source`:`dist`})}function $(){return a(`provider_unavailable`,`This CodeExecution provider has been disposed.`)}function Ue(e){return e instanceof B?e.rootLease:void 0}function We(e,t){return a(`provider_unavailable`,`This CodeExecution provider is at capacity: ${e} invocations are executing and ${t} are waiting.`)}var Ge=class{id;displayName;priority;runtime=`node`;language=`typescript`;moduleFormat=`esm`;trust=`trusted-code-only`;workerEntry;workerExecArgv;workerLoaderPaths;workerLoaderEnv;environment;packageRoots;maxConcurrency;maxQueuedInvocations;idleTimeoutMs;maxProgramFiles;maxSourceBytes;maxResultBytes;maxArgumentBytes;maxInvocationsPerWorker;admission;inFlight=new Set;quiescing=new Set;draining=new Set;retained=new Le;runtimeConfiguration;generation;disposed=!1;disposal;constructor(e={}){let t=He(import.meta.url);this.id=j(`id`,e.id??`piscina-code-execution`,S),this.displayName=j(`displayName`,e.displayName??`Local (Piscina)`),this.priority=ge(`priority`,e.priority??0),this.workerEntry=t.filename,this.workerExecArgv=[...t.execArgv],this.workerLoaderPaths=[...t.loaderPaths],this.workerLoaderEnv=Object.freeze({...t.env}),this.environment=Object.freeze({...e.environment}),this.packageRoots=Ce(e.packageRoots),this.maxConcurrency=M(`maxConcurrency`,e.maxConcurrency??4,1),this.maxQueuedInvocations=M(`maxQueuedInvocations`,e.maxQueuedInvocations??16,0),this.idleTimeoutMs=M(`idleTimeoutMs`,e.idleTimeoutMs??3e4,0),this.maxInvocationsPerWorker=M(`maxInvocationsPerWorker`,e.maxInvocationsPerWorker??64,1),this.maxProgramFiles=M(`maxProgramFiles`,e.maxProgramFiles??256,1),this.maxSourceBytes=M(`maxSourceBytes`,e.maxSourceBytes??5242880,1),this.maxResultBytes=M(`maxResultBytes`,e.maxResultBytes??1048576,1),this.maxArgumentBytes=M(`maxArgumentBytes`,e.maxArgumentBytes??1048576,1),this.admission=new fe(this.maxConcurrency,this.maxQueuedInvocations)}async execute(e,t){if(this.disposed)return $();let n=this.runInvocation(e,t);this.inFlight.add(n);try{return await n}finally{this.inFlight.delete(n)}}dispose(){return this.disposed=!0,this.disposal??=this.destroyPoolAndDrain(),this.disposal}async destroyPoolAndDrain(){let e=[...this.generation===void 0?[]:[this.generation],...this.draining];this.generation=void 0;let t=await Promise.allSettled(e.map(e=>this.tearDown(e)));await Promise.allSettled([...this.inFlight]),await Promise.allSettled([...this.quiescing]);let n=await this.retained.retryAll();n.length>0&&console.warn(`[code-execution] Program roots still on disk after disposal: %s`,n.join(`, `));let r=t.filter(e=>e.status===`rejected`).map(e=>e.reason);if(r.length>0)throw AggregateError(r,`The CodeExecution provider could not tear down every worker pool.`)}async runInvocation(e,t){let n=me(e);if(`status`in n)return n;let r,i,o,s,c;try{H(n.program,this.maxProgramFiles,this.maxSourceBytes);let e=N(n,this.maxArgumentBytes);if(e!==void 0)return e;let l=C.safeParse(n.arguments);if(!l.success)return a(`invalid_program`,`The invocation arguments do not satisfy the CodeExecution contract.`);let u={program:n.program,arguments:l.data},d=await this.admission.acquire(t.signal);if(!d.admitted)return d.refusal===`aborted`?w(t):We(this.maxConcurrency,this.maxQueuedInvocations);if(s=d.release,this.disposed)return $();if(t.signal.aborted)return w(t);if(r=await this.resolveRuntimeConfiguration(),this.disposed)return $();if(t.signal.aborted)return w(t);if(i=await Ne({program:u.program,packageRoots:r.packageRoots,maxProgramFiles:this.maxProgramFiles,maxSourceBytes:this.maxSourceBytes}),o=i,this.disposed)return $();if(t.signal.aborted)return w(t);let f=this.createTask(u,i,r),p=await this.dispatch(f,t.signal);return c=p.teardown,p.kind===`aborted`?w(t):p.kind===`failed`?this.toFailureOutcome(p.error,f.redactedPaths):this.toOutcome(p.value,f.redactedPaths)}catch(e){return o=Ue(e)??o,this.toFailureOutcome(e,[...i?.redactedPaths??[],...r?.redactions??[]])}finally{this.trackRelease(o,s,c)}}async quiesce(e,t,n){let r=this.retained.pending;e!==void 0&&await this.retained.release(e),n!==void 0&&await Promise.allSettled([n]),t?.(),await this.retained.retry(r)}trackRelease(e,t,n){let r=this.quiesce(e,t,n);this.quiescing.add(r),r.catch(e=>{console.warn(`[code-execution] Failed to release an invocation: %s`,e)}).finally(()=>this.quiescing.delete(r))}async dispatch(e,t){let n=this.submit(e,t);try{return{kind:`completed`,value:await n.running,teardown:n.generation.teardown}}catch(e){let r=n.generation.teardown;return t.aborted&&A(e)?{kind:`aborted`,teardown:r}:{kind:`failed`,error:e,teardown:r}}}submit(e,t){let n=this.acquireGeneration();n.submitted+=1,n.outstanding+=1;let r=n.pool.run(e,{signal:t});return n.submitted>=this.maxInvocationsPerWorker&&this.retire(n),{generation:n,running:r.finally(()=>{--n.outstanding,this.tearDownIfDrained(n)})}}retire(e){this.generation===e&&(this.generation=void 0),e.retired=!0,this.draining.add(e),this.tearDownIfDrained(e)}handlePoolError(e,t){e.failed||(e.failed=!0,this.retire(e),this.tearDown(e).catch(e=>{console.warn(`[code-execution] Failed to tear down a failed worker generation: %s`,e)}),console.warn(`[code-execution] Worker generation failed: %s`,t))}tearDownIfDrained(e){!e.retired||e.outstanding>0||this.tearDown(e).then(()=>this.draining.delete(e)).catch(e=>{console.warn(`[code-execution] Failed to tear down a drained worker generation: %s`,e)})}tearDown(e){return e.teardown??=e.pool.destroy(),e.teardown}createTask(e,t,n){return{entryNamespaceUrl:t.entryNamespaceUrl,parentUrl:t.parentUrl,programRootUrls:t.rootUrls,allowedPackages:[...n.packageRoots.keys()],exportName:e.program.exportName,arguments:e.arguments,namespace:`makaio-code-execution-${ne()}`,maxResultBytes:this.maxResultBytes,redactedPaths:[...t.redactedPaths,...n.redactions]}}resolveRuntimeConfiguration(){if(this.runtimeConfiguration!==void 0)return this.runtimeConfiguration;let e=le({environment:this.environment,packageRoots:this.packageRoots,workerPaths:[this.workerEntry,...this.workerLoaderPaths]});return this.runtimeConfiguration=e,e.catch(()=>{this.runtimeConfiguration===e&&(this.runtimeConfiguration=void 0)}),e}acquireGeneration(){if(this.generation!==void 0)return this.generation;let e=new se({filename:this.workerEntry,execArgv:[...this.workerExecArgv],env:{...this.environment,...this.workerLoaderEnv},minThreads:0,maxThreads:this.maxConcurrency,idleTimeout:this.idleTimeoutMs}),t={pool:e,submitted:0,outstanding:0,retired:!1,failed:!1};return e.on(`error`,e=>this.handlePoolError(t,e)),this.generation=t,this.generation}toOutcome(e,t){let r=o.safeParse(e);if(!r.success)return a(`invalid_provider`,`The execution worker returned a malformed outcome envelope.`);if(r.data.kind===`completed`){let e=i(r.data.value);return e>this.maxResultBytes?a(`invalid_result`,`The execution returned ${e} serialized bytes, which exceeds the limit of ${this.maxResultBytes}.`):{status:`completed`,value:r.data.value}}return a(r.data.code,n(r.data.message,t))}toFailureOutcome(e,r){return e instanceof z?a(e.code,n(e.message,r)):this.disposed&&he(e)?$():a(`provider_failed`,n(t(e),r))}};export{Ge as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { A as RehydrateAgentRequest, B as AdapterSchemas, C as aggregateTeardownResults, D as AcknowledgeCallerSettlementSchema, E as AcknowledgeCallerSettlementResponse, F as StartAgentRequest, H as AdapterSubjects, I as StartAgentResponse, L as StartAgentSchema, M as RehydrateAgentSchema, N as AdapterStartDisposition, O as CallerSettlementAckRefusal, P as AdapterStartDispositionSchema, R as AdapterRuntimeOptions, S as aggregateTeardownEvidence, T as AcknowledgeCallerSettlementRequest, V as AdapterNamespace, _ as SessionUsageSchema, a as UnresolvedProviderContext, b as TeardownEvidence, c as AdapterSelectionSchema, d as AgentSelectionBaseSchema, f as AgentSelectionKindMap, g as SessionUsage, h as SessionDiscoveredSchema, i as ResolvedProviderContextSchema, j as RehydrateAgentResponse, k as CallerSettlementAckRefusalSchema, l as AgentSelection, m as SessionDiscovered, n as ProviderContextSchema, o as UnresolvedProviderContextSchema, p as AgentSelectionSchema, r as ResolvedProviderContext, s as AdapterSelection, t as ProviderContext, u as AgentSelectionBase, v as ConnectorTeardownResult, w as teardownWasObserved, x as TeardownEvidenceSchema, y as ConnectorTeardownResultSchema, z as AdapterRuntimeOptionsSchema } from "../../index-
|
|
2
|
-
import { a as ROOT_SESSION_LINEAGE_KIND, c as SUBAGENT_SESSION_LINEAGE_KIND, d as SessionLineageKindSchema, f as SessionLineageSchema, i as ForkSessionLineageSchema, l as SessionLineage, n as CompressSessionLineageSchema, o as RootSessionLineageSchema, p as SubagentSessionLineageSchema, r as FORK_SESSION_LINEAGE_KIND, s as SESSION_LINEAGE_KINDS, t as COMPRESS_SESSION_LINEAGE_KIND, u as SessionLineageKind } from "../../session-lineage-
|
|
1
|
+
import { A as RehydrateAgentRequest, B as AdapterSchemas, C as aggregateTeardownResults, D as AcknowledgeCallerSettlementSchema, E as AcknowledgeCallerSettlementResponse, F as StartAgentRequest, H as AdapterSubjects, I as StartAgentResponse, L as StartAgentSchema, M as RehydrateAgentSchema, N as AdapterStartDisposition, O as CallerSettlementAckRefusal, P as AdapterStartDispositionSchema, R as AdapterRuntimeOptions, S as aggregateTeardownEvidence, T as AcknowledgeCallerSettlementRequest, V as AdapterNamespace, _ as SessionUsageSchema, a as UnresolvedProviderContext, b as TeardownEvidence, c as AdapterSelectionSchema, d as AgentSelectionBaseSchema, f as AgentSelectionKindMap, g as SessionUsage, h as SessionDiscoveredSchema, i as ResolvedProviderContextSchema, j as RehydrateAgentResponse, k as CallerSettlementAckRefusalSchema, l as AgentSelection, m as SessionDiscovered, n as ProviderContextSchema, o as UnresolvedProviderContextSchema, p as AgentSelectionSchema, r as ResolvedProviderContext, s as AdapterSelection, t as ProviderContext, u as AgentSelectionBase, v as ConnectorTeardownResult, w as teardownWasObserved, x as TeardownEvidenceSchema, y as ConnectorTeardownResultSchema, z as AdapterRuntimeOptionsSchema } from "../../index-D_fMdJbU.mjs";
|
|
2
|
+
import { a as ROOT_SESSION_LINEAGE_KIND, c as SUBAGENT_SESSION_LINEAGE_KIND, d as SessionLineageKindSchema, f as SessionLineageSchema, i as ForkSessionLineageSchema, l as SessionLineage, n as CompressSessionLineageSchema, o as RootSessionLineageSchema, p as SubagentSessionLineageSchema, r as FORK_SESSION_LINEAGE_KIND, s as SESSION_LINEAGE_KINDS, t as COMPRESS_SESSION_LINEAGE_KIND, u as SessionLineageKind } from "../../session-lineage-CLrQb1Hz.mjs";
|
|
3
3
|
export { AcknowledgeCallerSettlementRequest, AcknowledgeCallerSettlementResponse, AcknowledgeCallerSettlementSchema, AdapterNamespace, AdapterRuntimeOptions, AdapterRuntimeOptionsSchema, AdapterSchemas, AdapterSelection, AdapterSelectionSchema, AdapterStartDisposition, AdapterStartDispositionSchema, AdapterSubjects, AgentSelection, AgentSelectionBase, AgentSelectionBaseSchema, AgentSelectionKindMap, AgentSelectionSchema, COMPRESS_SESSION_LINEAGE_KIND, CallerSettlementAckRefusal, CallerSettlementAckRefusalSchema, CompressSessionLineageSchema, ConnectorTeardownResult, ConnectorTeardownResultSchema, FORK_SESSION_LINEAGE_KIND, ForkSessionLineageSchema, ProviderContext, ProviderContextSchema, ROOT_SESSION_LINEAGE_KIND, RehydrateAgentRequest, RehydrateAgentResponse, RehydrateAgentSchema, ResolvedProviderContext, ResolvedProviderContextSchema, RootSessionLineageSchema, SESSION_LINEAGE_KINDS, SUBAGENT_SESSION_LINEAGE_KIND, SessionDiscovered, SessionDiscoveredSchema, SessionLineage, SessionLineageKind, SessionLineageKindSchema, SessionLineageSchema, SessionUsage, SessionUsageSchema, StartAgentRequest, StartAgentResponse, StartAgentSchema, SubagentSessionLineageSchema, TeardownEvidence, TeardownEvidenceSchema, UnresolvedProviderContext, UnresolvedProviderContextSchema, aggregateTeardownEvidence, aggregateTeardownResults, teardownWasObserved };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as ROOT_SESSION_LINEAGE_KIND, c as SUBAGENT_SESSION_LINEAGE_KIND, d as SessionLineageKindSchema, f as SessionLineageSchema, i as ForkSessionLineageSchema, l as SessionLineage, n as CompressSessionLineageSchema, o as RootSessionLineageSchema, p as SubagentSessionLineageSchema, r as FORK_SESSION_LINEAGE_KIND, s as SESSION_LINEAGE_KINDS, t as COMPRESS_SESSION_LINEAGE_KIND, u as SessionLineageKind } from "../../../session-lineage-
|
|
1
|
+
import { a as ROOT_SESSION_LINEAGE_KIND, c as SUBAGENT_SESSION_LINEAGE_KIND, d as SessionLineageKindSchema, f as SessionLineageSchema, i as ForkSessionLineageSchema, l as SessionLineage, n as CompressSessionLineageSchema, o as RootSessionLineageSchema, p as SubagentSessionLineageSchema, r as FORK_SESSION_LINEAGE_KIND, s as SESSION_LINEAGE_KINDS, t as COMPRESS_SESSION_LINEAGE_KIND, u as SessionLineageKind } from "../../../session-lineage-CLrQb1Hz.mjs";
|
|
2
2
|
export { COMPRESS_SESSION_LINEAGE_KIND, CompressSessionLineageSchema, FORK_SESSION_LINEAGE_KIND, ForkSessionLineageSchema, ROOT_SESSION_LINEAGE_KIND, RootSessionLineageSchema, SESSION_LINEAGE_KINDS, SUBAGENT_SESSION_LINEAGE_KIND, SessionLineage, SessionLineageKind, SessionLineageKindSchema, SessionLineageSchema, SubagentSessionLineageSchema };
|