openmeld 0.3.225 → 0.3.227

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.
Files changed (136) hide show
  1. package/dist/{add-me-membership-BUuys3IZ.js → add-me-membership-pkREbEJG.js} +2 -2
  2. package/dist/{add-me-membership-BUuys3IZ.js.map → add-me-membership-pkREbEJG.js.map} +1 -1
  3. package/dist/{agents-Blvf8wC0.js → agents-D_RojMEE.js} +11 -11
  4. package/dist/{agents-Blvf8wC0.js.map → agents-D_RojMEE.js.map} +1 -1
  5. package/dist/{api-client-foundation-CqbIn_de.js → api-client-foundation-CEScBsM7.js} +1 -1
  6. package/dist/{api-client-foundation-DpVwrgh-.js → api-client-foundation-Czb9hJvA.js} +3 -3
  7. package/dist/{api-client-foundation-DpVwrgh-.js.map → api-client-foundation-Czb9hJvA.js.map} +1 -1
  8. package/dist/{auth-session-uEk_Tx6T.js → auth-session-Q0B3Nfae.js} +5 -4
  9. package/dist/{auth-session-uEk_Tx6T.js.map → auth-session-Q0B3Nfae.js.map} +1 -1
  10. package/dist/auth-session-ga82_Wa9.js +4 -0
  11. package/dist/{base-url-DXrUiSMI.js → base-url-B8eWb2md.js} +1 -1
  12. package/dist/{base-url-DvjOkKPs.js → base-url-eck31vC8.js} +3 -2
  13. package/dist/{base-url-DvjOkKPs.js.map → base-url-eck31vC8.js.map} +1 -1
  14. package/dist/{channel-B2fD2_be.js → channel-B1gMWx__.js} +3 -3
  15. package/dist/{channel-B2fD2_be.js.map → channel-B1gMWx__.js.map} +1 -1
  16. package/dist/{cli-binary-manifest-CT5X05lk.js → cli-binary-manifest-Bjf6T7Ef.js} +2 -2
  17. package/dist/{cli-binary-manifest-CT5X05lk.js.map → cli-binary-manifest-Bjf6T7Ef.js.map} +1 -1
  18. package/dist/{command-Cjxx-f4g.js → command-B5E_YSAY.js} +18 -17
  19. package/dist/{command-Cjxx-f4g.js.map → command-B5E_YSAY.js.map} +1 -1
  20. package/dist/{computer-connection-Dm7iTnRK.js → computer-connection-BbDdF_MD.js} +2 -2
  21. package/dist/{computer-connection-Dm7iTnRK.js.map → computer-connection-BbDdF_MD.js.map} +1 -1
  22. package/dist/{computer-connection-review-De0X_5c4.js → computer-connection-review-Dop02mby.js} +6 -6
  23. package/dist/{computer-connection-review-De0X_5c4.js.map → computer-connection-review-Dop02mby.js.map} +1 -1
  24. package/dist/{computer-disconnect-CvBzCJF9.js → computer-disconnect-pH6HaHQq.js} +9 -9
  25. package/dist/{computer-disconnect-CvBzCJF9.js.map → computer-disconnect-pH6HaHQq.js.map} +1 -1
  26. package/dist/{computer-setup-continuation-CaUPhhdb.js → computer-setup-continuation-BhM3HsRI.js} +3 -3
  27. package/dist/{computer-setup-continuation-CaUPhhdb.js.map → computer-setup-continuation-BhM3HsRI.js.map} +1 -1
  28. package/dist/{context-Bdh3nAzw.js → context-D3kAC8RG.js} +5 -5
  29. package/dist/{context-Bdh3nAzw.js.map → context-D3kAC8RG.js.map} +1 -1
  30. package/dist/{daemon-device-id-B1Af2Zmn.js → daemon-device-id-DEGf1fm6.js} +7 -6
  31. package/dist/{daemon-device-id-B1Af2Zmn.js.map → daemon-device-id-DEGf1fm6.js.map} +1 -1
  32. package/dist/{daemon-frame-transport-CSvV88PL.js → daemon-frame-transport-BMZP90f0.js} +10 -9
  33. package/dist/{daemon-frame-transport-CSvV88PL.js.map → daemon-frame-transport-BMZP90f0.js.map} +1 -1
  34. package/dist/{daemon-lifecycle-journal-ChhAF8yX.js → daemon-lifecycle-journal-NeBAn_SY.js} +27 -12
  35. package/dist/daemon-lifecycle-journal-NeBAn_SY.js.map +1 -0
  36. package/dist/{daemon-runtime-lease-1LMeZ6IS.js → daemon-runtime-lease-C1wkT4Bi.js} +2 -2
  37. package/dist/{daemon-runtime-lease-1LMeZ6IS.js.map → daemon-runtime-lease-C1wkT4Bi.js.map} +1 -1
  38. package/dist/{daemon-runtime-lease-Bz0ucJj3.js → daemon-runtime-lease-DAQyRUc5.js} +1 -1
  39. package/dist/{daemon-service-contract-GLmAxsq-.js → daemon-service-contract-DhEfbzHt.js} +4 -4
  40. package/dist/{daemon-service-contract-GLmAxsq-.js.map → daemon-service-contract-DhEfbzHt.js.map} +1 -1
  41. package/dist/{daemon-service-manager-C8RUCMDo.js → daemon-service-manager-CRnFxPKA.js} +6 -5
  42. package/dist/{daemon-service-manager-C8RUCMDo.js.map → daemon-service-manager-CRnFxPKA.js.map} +1 -1
  43. package/dist/{daemon-service-manager-CU-79a4z.js → daemon-service-manager-l0unaDGa.js} +1 -1
  44. package/dist/{daemon-service-runtime-BtqJMt8J.js → daemon-service-runtime-nIBQreis.js} +27 -153
  45. package/dist/daemon-service-runtime-nIBQreis.js.map +1 -0
  46. package/dist/{daemon-service-update-coordinator-BczvSdXA.js → daemon-service-update-coordinator-BdcEl-QC.js} +22 -20
  47. package/dist/daemon-service-update-coordinator-BdcEl-QC.js.map +1 -0
  48. package/dist/{daemon-state-Ca0WK5x0.js → daemon-state-B6G5xe7f.js} +4 -3
  49. package/dist/{daemon-state-Ca0WK5x0.js.map → daemon-state-B6G5xe7f.js.map} +1 -1
  50. package/dist/{dist-C32frPV2.js → dist-C5emSnFG.js} +1 -1
  51. package/dist/{dist-BeJcIdCZ.js → dist-DkN9tKMX.js} +127 -284
  52. package/dist/dist-DkN9tKMX.js.map +1 -0
  53. package/dist/{dist-YbTZ-Y-2.js → dist-vpxgF6Lp.js} +2 -2
  54. package/dist/{dist-YbTZ-Y-2.js.map → dist-vpxgF6Lp.js.map} +1 -1
  55. package/dist/{elapsed-time-Dvn2LxSm.js → elapsed-time-BxMWSsxC.js} +5 -5
  56. package/dist/{elapsed-time-Dvn2LxSm.js.map → elapsed-time-BxMWSsxC.js.map} +1 -1
  57. package/dist/{entry-B19Dcymp.js → entry-jvTvDBr-.js} +12 -11
  58. package/dist/{entry-B19Dcymp.js.map → entry-jvTvDBr-.js.map} +1 -1
  59. package/dist/{installation-inventory-BmZVMUzJ.js → installation-inventory-Bf1SvGVh.js} +5 -5
  60. package/dist/{installation-inventory-BmZVMUzJ.js.map → installation-inventory-Bf1SvGVh.js.map} +1 -1
  61. package/dist/{installer-DAZpeNXo.js → installer-IVAr1ZD-.js} +2 -2
  62. package/dist/{installer-DAZpeNXo.js.map → installer-IVAr1ZD-.js.map} +1 -1
  63. package/dist/{lock-iue1J2xy.js → lock-CMH9eoS7.js} +5 -270
  64. package/dist/lock-CMH9eoS7.js.map +1 -0
  65. package/dist/{meta-api-eV9exiaO.js → meta-api-BYB9vhya.js} +8 -8
  66. package/dist/{meta-api-eV9exiaO.js.map → meta-api-BYB9vhya.js.map} +1 -1
  67. package/dist/{openmeld-DEbL_TIZ.js → openmeld-0pnb6g3R.js} +63 -38
  68. package/dist/{openmeld-DEbL_TIZ.js.map → openmeld-0pnb6g3R.js.map} +1 -1
  69. package/dist/openmeld-dev.js +1 -1
  70. package/dist/{openmeld-environment-target-BBn5Ko6p.js → openmeld-environment-target-Cw3V0WnE.js} +3 -3
  71. package/dist/{openmeld-environment-target-BBn5Ko6p.js.map → openmeld-environment-target-Cw3V0WnE.js.map} +1 -1
  72. package/dist/{openmeld-maintenance-worker-Ds8LpQ1c.js → openmeld-maintenance-worker-CSes51Vp.js} +14 -14
  73. package/dist/{openmeld-maintenance-worker-Ds8LpQ1c.js.map → openmeld-maintenance-worker-CSes51Vp.js.map} +1 -1
  74. package/dist/{openmeld-tools-update-join-DV_THLes.js → openmeld-tools-update-join-BlPynw_v.js} +4 -4
  75. package/dist/{openmeld-tools-update-join-DV_THLes.js.map → openmeld-tools-update-join-BlPynw_v.js.map} +1 -1
  76. package/dist/openmeld.js +8 -4
  77. package/dist/openmeld.js.map +1 -1
  78. package/dist/paths-DSkUuEu3.js +273 -0
  79. package/dist/paths-DSkUuEu3.js.map +1 -0
  80. package/dist/{prepare-provider-runtime-CP88BnLy.js → prepare-provider-runtime-DSKQFj-R.js} +94 -28
  81. package/dist/prepare-provider-runtime-DSKQFj-R.js.map +1 -0
  82. package/dist/{prepare-session-executor-Dt5hHfsR.js → prepare-session-executor-DEJ9OaJh.js} +25 -24
  83. package/dist/{prepare-session-executor-Dt5hHfsR.js.map → prepare-session-executor-DEJ9OaJh.js.map} +1 -1
  84. package/dist/{process-channel-CgbduFCz.js → process-channel-BIumgluJ.js} +2 -2
  85. package/dist/{process-channel-CgbduFCz.js.map → process-channel-BIumgluJ.js.map} +1 -1
  86. package/dist/{process-identity-BQLdaZdB.js → process-identity-BRbhGGTM.js} +2 -2
  87. package/dist/{process-identity-BQLdaZdB.js.map → process-identity-BRbhGGTM.js.map} +1 -1
  88. package/dist/{published-production-safety-C40hKrBA.js → published-production-safety-CgXxtdMK.js} +2 -2
  89. package/dist/{published-production-safety-C40hKrBA.js.map → published-production-safety-CgXxtdMK.js.map} +1 -1
  90. package/dist/{runtime-4_VPSImW.js → runtime-Du3Az4wt.js} +18 -18
  91. package/dist/{runtime-4_VPSImW.js.map → runtime-Du3Az4wt.js.map} +1 -1
  92. package/dist/{runtime-agent-controller-reporting-submission-OpySJXCT.js → runtime-agent-controller-reporting-submission-Bl2CWQ96.js} +12 -10
  93. package/dist/runtime-agent-controller-reporting-submission-Bl2CWQ96.js.map +1 -0
  94. package/dist/{runtime-reporting-health-state-B14XCJQF.js → runtime-reporting-health-state-CKmph14R.js} +14 -13
  95. package/dist/{runtime-reporting-health-state-B14XCJQF.js.map → runtime-reporting-health-state-CKmph14R.js.map} +1 -1
  96. package/dist/{runtime-transport-YIYHSJPn.js → runtime-transport-DUR91mKK.js} +205 -5
  97. package/dist/runtime-transport-DUR91mKK.js.map +1 -0
  98. package/dist/{service-v9KNVG7t.js → service-Bh1iD84k.js} +30 -29
  99. package/dist/service-Bh1iD84k.js.map +1 -0
  100. package/dist/{service-account-authorization-DZbUOD29.js → service-account-authorization-CyV8YFAw.js} +6 -6
  101. package/dist/{service-account-authorization-DZbUOD29.js.map → service-account-authorization-CyV8YFAw.js.map} +1 -1
  102. package/dist/{service-account-control-DguBlRfW.js → service-account-control-Cc6qVa0m.js} +14 -14
  103. package/dist/{service-account-control-DguBlRfW.js.map → service-account-control-Cc6qVa0m.js.map} +1 -1
  104. package/dist/{service-control-capabilities-fFuX3GbE.js → service-control-capabilities-CdVTTNRK.js} +1 -1
  105. package/dist/{service-control-capabilities-CQb9zWvz.js → service-control-capabilities-D4W3WTHS.js} +5 -5
  106. package/dist/{service-control-capabilities-CQb9zWvz.js.map → service-control-capabilities-D4W3WTHS.js.map} +1 -1
  107. package/dist/{service-control-carrier-capability-gMk5gMKU.js → service-control-carrier-capability-SuKbNKaR.js} +2 -2
  108. package/dist/{service-control-carrier-capability-gMk5gMKU.js.map → service-control-carrier-capability-SuKbNKaR.js.map} +1 -1
  109. package/dist/{state-B7JOni3p.js → state-ClTXLNB3.js} +3 -3
  110. package/dist/{state-B7JOni3p.js.map → state-ClTXLNB3.js.map} +1 -1
  111. package/dist/{upgrade-DnWyXA1G.js → upgrade-B07Dh83M.js} +8 -8
  112. package/dist/{upgrade-DnWyXA1G.js.map → upgrade-B07Dh83M.js.map} +1 -1
  113. package/dist/upgrade-DgTfV7-m.js +4 -0
  114. package/dist/windows/openmeld-windows-process.exe +0 -0
  115. package/dist/{windows-artifact-DJ9DKjfc.js → windows-artifact-D99JU1ll.js} +3 -2
  116. package/dist/{windows-artifact-DJ9DKjfc.js.map → windows-artifact-D99JU1ll.js.map} +1 -1
  117. package/dist/windows-managed-install-BVlswqjA.js +146 -0
  118. package/dist/windows-managed-install-BVlswqjA.js.map +1 -0
  119. package/dist/windows-preview-channel-DPrYuLyY.js +32 -0
  120. package/dist/windows-preview-channel-DPrYuLyY.js.map +1 -0
  121. package/dist/{windows-user-task-Io5QuEVR.js → windows-user-task-BR-WB7hr.js} +5 -5
  122. package/dist/{windows-user-task-Io5QuEVR.js.map → windows-user-task-BR-WB7hr.js.map} +1 -1
  123. package/dist/{windows-user-task-B8NcRg_u.js → windows-user-task-m9eMEUEq.js} +1 -1
  124. package/package.json +11 -11
  125. package/skills/openmeld-cli/playbooks/plugins.md +12 -0
  126. package/dist/auth-session-BJfKu74u.js +0 -4
  127. package/dist/daemon-lifecycle-journal-ChhAF8yX.js.map +0 -1
  128. package/dist/daemon-service-runtime-BtqJMt8J.js.map +0 -1
  129. package/dist/daemon-service-update-coordinator-BczvSdXA.js.map +0 -1
  130. package/dist/dist-BeJcIdCZ.js.map +0 -1
  131. package/dist/lock-iue1J2xy.js.map +0 -1
  132. package/dist/prepare-provider-runtime-CP88BnLy.js.map +0 -1
  133. package/dist/runtime-agent-controller-reporting-submission-OpySJXCT.js.map +0 -1
  134. package/dist/runtime-transport-YIYHSJPn.js.map +0 -1
  135. package/dist/service-v9KNVG7t.js.map +0 -1
  136. package/dist/upgrade-Cy4bMox8.js +0 -4
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as DEV_LOCAL_GATEWAY_BASE_URL } from "./base-url-DvjOkKPs.js";
3
+ import { n as DEV_LOCAL_GATEWAY_BASE_URL } from "./base-url-eck31vC8.js";
4
4
  //#region src/openmeld-dev.ts
5
5
  const LOCAL_GATEWAY_URL = DEV_LOCAL_GATEWAY_BASE_URL;
6
6
  const LOCAL_AUTH_URL = "http://localhost:8788";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { t as normalizeBaseUrl } from "./urls-CY2uzH2-.js";
4
- import { lt as resolveOpenMeldEnvPreset } from "./lock-iue1J2xy.js";
5
- import { a as resolveBaseUrl, r as normalizeGatewayBaseUrl, s as resolveDefaultGatewayBaseUrl } from "./base-url-DvjOkKPs.js";
4
+ import { F as resolveOpenMeldEnvPreset } from "./paths-DSkUuEu3.js";
5
+ import { a as resolveBaseUrl, r as normalizeGatewayBaseUrl, s as resolveDefaultGatewayBaseUrl } from "./base-url-eck31vC8.js";
6
6
  import { l as resolveUserFacingCliEntryCommand } from "./cli-entry-command-CR_9QU1i.js";
7
7
  import process$1 from "node:process";
8
8
  //#region src/config/auth-url.ts
@@ -74,4 +74,4 @@ function normalizeOptionalText(value) {
74
74
  //#endregion
75
75
  export { resolveOpenMeldEnvironmentTargetFromEnv as n, resolveAuthBaseUrl as r, resolveOpenMeldEnvironmentTarget as t };
76
76
 
77
- //# sourceMappingURL=openmeld-environment-target-BBn5Ko6p.js.map
77
+ //# sourceMappingURL=openmeld-environment-target-Cw3V0WnE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-environment-target-BBn5Ko6p.js","names":["process"],"sources":["../src/config/auth-url.ts","../src/config/openmeld-environment-target.ts"],"sourcesContent":["import { normalizeBaseUrl } from \"../protocol/urls\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nexport const DEFAULT_AUTH_BASE_URL = \"https://auth.openmeld.ai\";\nexport const DEV_LOCAL_AUTH_BASE_URL = \"http://localhost:8788\";\n\nexport function resolveAuthBaseUrl(\n cliValue?: string,\n input: { env?: NodeJS.ProcessEnv } = {}\n): string {\n const env = input.env ?? process.env;\n const fromCli = String(cliValue ?? \"\").trim();\n if (fromCli) {\n return normalizeBaseUrl(fromCli);\n }\n\n const fromEnv = String(env.OPENMELD_AUTH_URL ?? \"\").trim();\n if (fromEnv) {\n return normalizeBaseUrl(fromEnv);\n }\n\n return normalizeBaseUrl(resolveDefaultAuthBaseUrl(env));\n}\n\nfunction resolveDefaultAuthBaseUrl(env: NodeJS.ProcessEnv): string {\n const preset = resolveOpenMeldEnvPreset({ env });\n if (preset === \"dev-local\" || preset === \"canary\") {\n return DEV_LOCAL_AUTH_BASE_URL;\n }\n return DEFAULT_AUTH_BASE_URL;\n}\n","import process from \"node:process\";\nimport { resolveUserFacingCliEntryCommand } from \"../runtime/cli-entry-command\";\nimport { resolveAuthBaseUrl } from \"./auth-url\";\nimport {\n normalizeGatewayBaseUrl,\n resolveBaseUrl,\n resolveDefaultGatewayBaseUrl,\n} from \"./base-url\";\nimport type { OpenMeldEnvPreset } from \"./paths\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nconst OPENMELD_USER_FACING_CLI_COMMAND_ENV = \"OPENMELD_USER_FACING_CLI_COMMAND\";\n\nexport type OpenMeldEnvironmentTarget = {\n preset: OpenMeldEnvPreset;\n gatewayUrl: string;\n authBaseUrl: string;\n userFacingCommand: string;\n};\n\ntype OpenMeldEnvironmentTargetInput = {\n gatewayUrl?: string;\n authUrl?: string;\n env?: NodeJS.ProcessEnv;\n};\n\nexport async function resolveOpenMeldEnvironmentTarget(\n input: OpenMeldEnvironmentTargetInput = {}\n): Promise<OpenMeldEnvironmentTarget> {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: await resolveBaseUrl(input.gatewayUrl, { env }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nexport function resolveOpenMeldEnvironmentTargetFromEnv(\n input: OpenMeldEnvironmentTargetInput = {}\n): OpenMeldEnvironmentTarget {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: resolveGatewayUrlFromEnvOnly({\n env,\n gatewayUrl: input.gatewayUrl,\n }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nfunction resolveUserFacingCommandForPreset(input: {\n env: NodeJS.ProcessEnv;\n preset: OpenMeldEnvPreset;\n}): string {\n const explicitCommand = normalizeOptionalText(\n input.env[OPENMELD_USER_FACING_CLI_COMMAND_ENV]\n );\n if (explicitCommand) {\n return explicitCommand;\n }\n if (input.preset === \"dev-local\") {\n return \"openmeld-dev\";\n }\n if (input.preset === \"canary\") {\n return \"openmeld-canary\";\n }\n return resolveUserFacingCliEntryCommand({ env: input.env });\n}\n\nfunction resolveGatewayUrlFromEnvOnly(input: {\n env: NodeJS.ProcessEnv;\n gatewayUrl?: string;\n}): string {\n const fromInput = normalizeOptionalText(input.gatewayUrl);\n if (fromInput) {\n return normalizeGatewayBaseUrl(fromInput);\n }\n const fromEnv = normalizeOptionalText(input.env.OPENMELD_GATEWAY_URL);\n if (fromEnv) {\n return normalizeGatewayBaseUrl(fromEnv);\n }\n return normalizeGatewayBaseUrl(\n resolveDefaultGatewayBaseUrl({ env: input.env })\n );\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n"],"mappings":";;;;;;;;AAGA,MAAa,wBAAwB;AACrC,MAAa,0BAA0B;AAEvC,SAAgB,mBACd,UACA,QAAqC,CAAC,GAC9B;CACR,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,MAAM,UAAU,OAAO,YAAY,EAAE,CAAC,CAAC,KAAK;CAC5C,IAAI,SACF,OAAO,iBAAiB,OAAO;CAGjC,MAAM,UAAU,OAAO,IAAI,qBAAqB,EAAE,CAAC,CAAC,KAAK;CACzD,IAAI,SACF,OAAO,iBAAiB,OAAO;CAGjC,OAAO,iBAAiB,0BAA0B,GAAG,CAAC;AACxD;AAEA,SAAS,0BAA0B,KAAgC;CACjE,MAAM,SAAS,yBAAyB,EAAE,IAAI,CAAC;CAC/C,IAAI,WAAW,eAAe,WAAW,UACvC,OAAO;CAET,OAAO;AACT;;;ACnBA,MAAM,uCAAuC;AAe7C,eAAsB,iCACpB,QAAwC,CAAC,GACL;CACpC,MAAM,MAAM,MAAM,OAAOA,UAAQ;CACjC,MAAM,SAAS,yBAAyB,EAAE,IAAI,CAAC;CAC/C,OAAO;EACL;EACA,YAAY,MAAM,eAAe,MAAM,YAAY,EAAE,IAAI,CAAC;EAC1D,aAAa,mBAAmB,MAAM,SAAS,EAAE,IAAI,CAAC;EACtD,mBAAmB,kCAAkC;GAAE;GAAK;EAAO,CAAC;CACtE;AACF;AAEA,SAAgB,wCACd,QAAwC,CAAC,GACd;CAC3B,MAAM,MAAM,MAAM,OAAOA,UAAQ;CACjC,MAAM,SAAS,yBAAyB,EAAE,IAAI,CAAC;CAC/C,OAAO;EACL;EACA,YAAY,6BAA6B;GACvC;GACA,YAAY,MAAM;EACpB,CAAC;EACD,aAAa,mBAAmB,MAAM,SAAS,EAAE,IAAI,CAAC;EACtD,mBAAmB,kCAAkC;GAAE;GAAK;EAAO,CAAC;CACtE;AACF;AAEA,SAAS,kCAAkC,OAGhC;CACT,MAAM,kBAAkB,sBACtB,MAAM,IAAI,qCACZ;CACA,IAAI,iBACF,OAAO;CAET,IAAI,MAAM,WAAW,aACnB,OAAO;CAET,IAAI,MAAM,WAAW,UACnB,OAAO;CAET,OAAO,iCAAiC,EAAE,KAAK,MAAM,IAAI,CAAC;AAC5D;AAEA,SAAS,6BAA6B,OAG3B;CACT,MAAM,YAAY,sBAAsB,MAAM,UAAU;CACxD,IAAI,WACF,OAAO,wBAAwB,SAAS;CAE1C,MAAM,UAAU,sBAAsB,MAAM,IAAI,oBAAoB;CACpE,IAAI,SACF,OAAO,wBAAwB,OAAO;CAExC,OAAO,wBACL,6BAA6B,EAAE,KAAK,MAAM,IAAI,CAAC,CACjD;AACF;AAEA,SAAS,sBAAsB,OAA+B;CAC5D,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CAC5C,OAAO,WAAW,SAAS,IAAI,aAAa;AAC9C"}
1
+ {"version":3,"file":"openmeld-environment-target-Cw3V0WnE.js","names":["process"],"sources":["../src/config/auth-url.ts","../src/config/openmeld-environment-target.ts"],"sourcesContent":["import { normalizeBaseUrl } from \"../protocol/urls\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nexport const DEFAULT_AUTH_BASE_URL = \"https://auth.openmeld.ai\";\nexport const DEV_LOCAL_AUTH_BASE_URL = \"http://localhost:8788\";\n\nexport function resolveAuthBaseUrl(\n cliValue?: string,\n input: { env?: NodeJS.ProcessEnv } = {}\n): string {\n const env = input.env ?? process.env;\n const fromCli = String(cliValue ?? \"\").trim();\n if (fromCli) {\n return normalizeBaseUrl(fromCli);\n }\n\n const fromEnv = String(env.OPENMELD_AUTH_URL ?? \"\").trim();\n if (fromEnv) {\n return normalizeBaseUrl(fromEnv);\n }\n\n return normalizeBaseUrl(resolveDefaultAuthBaseUrl(env));\n}\n\nfunction resolveDefaultAuthBaseUrl(env: NodeJS.ProcessEnv): string {\n const preset = resolveOpenMeldEnvPreset({ env });\n if (preset === \"dev-local\" || preset === \"canary\") {\n return DEV_LOCAL_AUTH_BASE_URL;\n }\n return DEFAULT_AUTH_BASE_URL;\n}\n","import process from \"node:process\";\nimport { resolveUserFacingCliEntryCommand } from \"../runtime/cli-entry-command\";\nimport { resolveAuthBaseUrl } from \"./auth-url\";\nimport {\n normalizeGatewayBaseUrl,\n resolveBaseUrl,\n resolveDefaultGatewayBaseUrl,\n} from \"./base-url\";\nimport type { OpenMeldEnvPreset } from \"./paths\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nconst OPENMELD_USER_FACING_CLI_COMMAND_ENV = \"OPENMELD_USER_FACING_CLI_COMMAND\";\n\nexport type OpenMeldEnvironmentTarget = {\n preset: OpenMeldEnvPreset;\n gatewayUrl: string;\n authBaseUrl: string;\n userFacingCommand: string;\n};\n\ntype OpenMeldEnvironmentTargetInput = {\n gatewayUrl?: string;\n authUrl?: string;\n env?: NodeJS.ProcessEnv;\n};\n\nexport async function resolveOpenMeldEnvironmentTarget(\n input: OpenMeldEnvironmentTargetInput = {}\n): Promise<OpenMeldEnvironmentTarget> {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: await resolveBaseUrl(input.gatewayUrl, { env }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nexport function resolveOpenMeldEnvironmentTargetFromEnv(\n input: OpenMeldEnvironmentTargetInput = {}\n): OpenMeldEnvironmentTarget {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: resolveGatewayUrlFromEnvOnly({\n env,\n gatewayUrl: input.gatewayUrl,\n }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nfunction resolveUserFacingCommandForPreset(input: {\n env: NodeJS.ProcessEnv;\n preset: OpenMeldEnvPreset;\n}): string {\n const explicitCommand = normalizeOptionalText(\n input.env[OPENMELD_USER_FACING_CLI_COMMAND_ENV]\n );\n if (explicitCommand) {\n return explicitCommand;\n }\n if (input.preset === \"dev-local\") {\n return \"openmeld-dev\";\n }\n if (input.preset === \"canary\") {\n return \"openmeld-canary\";\n }\n return resolveUserFacingCliEntryCommand({ env: input.env });\n}\n\nfunction resolveGatewayUrlFromEnvOnly(input: {\n env: NodeJS.ProcessEnv;\n gatewayUrl?: string;\n}): string {\n const fromInput = normalizeOptionalText(input.gatewayUrl);\n if (fromInput) {\n return normalizeGatewayBaseUrl(fromInput);\n }\n const fromEnv = normalizeOptionalText(input.env.OPENMELD_GATEWAY_URL);\n if (fromEnv) {\n return normalizeGatewayBaseUrl(fromEnv);\n }\n return normalizeGatewayBaseUrl(\n resolveDefaultGatewayBaseUrl({ env: input.env })\n );\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n"],"mappings":";;;;;;;;AAGA,MAAa,wBAAwB;AACrC,MAAa,0BAA0B;AAEvC,SAAgB,mBACd,UACA,QAAqC,CAAC,GAC9B;CACR,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,MAAM,UAAU,OAAO,YAAY,EAAE,CAAC,CAAC,KAAK;CAC5C,IAAI,SACF,OAAO,iBAAiB,OAAO;CAGjC,MAAM,UAAU,OAAO,IAAI,qBAAqB,EAAE,CAAC,CAAC,KAAK;CACzD,IAAI,SACF,OAAO,iBAAiB,OAAO;CAGjC,OAAO,iBAAiB,0BAA0B,GAAG,CAAC;AACxD;AAEA,SAAS,0BAA0B,KAAgC;CACjE,MAAM,SAAS,yBAAyB,EAAE,IAAI,CAAC;CAC/C,IAAI,WAAW,eAAe,WAAW,UACvC,OAAO;CAET,OAAO;AACT;;;ACnBA,MAAM,uCAAuC;AAe7C,eAAsB,iCACpB,QAAwC,CAAC,GACL;CACpC,MAAM,MAAM,MAAM,OAAOA,UAAQ;CACjC,MAAM,SAAS,yBAAyB,EAAE,IAAI,CAAC;CAC/C,OAAO;EACL;EACA,YAAY,MAAM,eAAe,MAAM,YAAY,EAAE,IAAI,CAAC;EAC1D,aAAa,mBAAmB,MAAM,SAAS,EAAE,IAAI,CAAC;EACtD,mBAAmB,kCAAkC;GAAE;GAAK;EAAO,CAAC;CACtE;AACF;AAEA,SAAgB,wCACd,QAAwC,CAAC,GACd;CAC3B,MAAM,MAAM,MAAM,OAAOA,UAAQ;CACjC,MAAM,SAAS,yBAAyB,EAAE,IAAI,CAAC;CAC/C,OAAO;EACL;EACA,YAAY,6BAA6B;GACvC;GACA,YAAY,MAAM;EACpB,CAAC;EACD,aAAa,mBAAmB,MAAM,SAAS,EAAE,IAAI,CAAC;EACtD,mBAAmB,kCAAkC;GAAE;GAAK;EAAO,CAAC;CACtE;AACF;AAEA,SAAS,kCAAkC,OAGhC;CACT,MAAM,kBAAkB,sBACtB,MAAM,IAAI,qCACZ;CACA,IAAI,iBACF,OAAO;CAET,IAAI,MAAM,WAAW,aACnB,OAAO;CAET,IAAI,MAAM,WAAW,UACnB,OAAO;CAET,OAAO,iCAAiC,EAAE,KAAK,MAAM,IAAI,CAAC;AAC5D;AAEA,SAAS,6BAA6B,OAG3B;CACT,MAAM,YAAY,sBAAsB,MAAM,UAAU;CACxD,IAAI,WACF,OAAO,wBAAwB,SAAS;CAE1C,MAAM,UAAU,sBAAsB,MAAM,IAAI,oBAAoB;CACpE,IAAI,SACF,OAAO,wBAAwB,OAAO;CAExC,OAAO,wBACL,6BAA6B,EAAE,KAAK,MAAM,IAAI,CAAC,CACjD;AACF;AAEA,SAAS,sBAAsB,OAA+B;CAC5D,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CAC5C,OAAO,WAAW,SAAS,IAAI,aAAa;AAC9C"}
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-iue1J2xy.js";
4
- import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-CP88BnLy.js";
5
- import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-B7JOni3p.js";
6
- import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-BtqJMt8J.js";
7
- import { at as readPendingOpenMeldToolsUpdateAttempt, n as scheduleDaemonServiceUpdate, nt as createOpenMeldToolsUpdateCoordinator, ot as readOpenMeldToolsMaintenancePolicy, t as runPendingDaemonServiceUpdate, ut as prepareDaemonServiceUpdateWorkerCarrier } from "./daemon-service-update-coordinator-BczvSdXA.js";
8
- import { g as getConfiguredSkillsConfig } from "./base-url-DvjOkKPs.js";
9
- import { W as withDaemonServiceReconcileLock } from "./daemon-state-Ca0WK5x0.js";
10
- import { i as readDaemonServiceContract } from "./daemon-service-contract-GLmAxsq-.js";
11
- import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-ChhAF8yX.js";
12
- import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-C8RUCMDo.js";
13
- import { s as resolveTrackedInstallTargets } from "./installation-inventory-BmZVMUzJ.js";
14
- import { t as installSkillsToTargets } from "./installer-DAZpeNXo.js";
3
+ import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-DSKQFj-R.js";
4
+ import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-ClTXLNB3.js";
5
+ import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-nIBQreis.js";
6
+ import { at as readPendingOpenMeldToolsUpdateAttempt, n as scheduleDaemonServiceUpdate, nt as createOpenMeldToolsUpdateCoordinator, ot as readOpenMeldToolsMaintenancePolicy, t as runPendingDaemonServiceUpdate, ut as prepareDaemonServiceUpdateWorkerCarrier } from "./daemon-service-update-coordinator-BdcEl-QC.js";
7
+ import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-CMH9eoS7.js";
8
+ import { g as getConfiguredSkillsConfig } from "./base-url-eck31vC8.js";
9
+ import { W as withDaemonServiceReconcileLock } from "./daemon-state-B6G5xe7f.js";
10
+ import { i as readDaemonServiceContract } from "./daemon-service-contract-DhEfbzHt.js";
11
+ import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-NeBAn_SY.js";
12
+ import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-CRnFxPKA.js";
13
+ import { s as resolveTrackedInstallTargets } from "./installation-inventory-Bf1SvGVh.js";
14
+ import { t as installSkillsToTargets } from "./installer-IVAr1ZD-.js";
15
15
  //#region src/skills/maintenance.ts
16
16
  async function maintainOfficialCliSkill() {
17
17
  if (await downloadOfficialSkillUpdate().catch((error) => {
@@ -76,7 +76,7 @@ async function runMaintenancePass() {
76
76
  }
77
77
  const result = await runPendingDaemonServiceUpdate();
78
78
  if (result?.phase === "updated") {
79
- const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-CaUPhhdb.js");
79
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-BhM3HsRI.js");
80
80
  await prepareDaemonServiceUpdateWorkerCarrier(result);
81
81
  await finishComputerSetupAfterBackgroundUpdate();
82
82
  await withDaemonServiceReconcileLock(async () => {
@@ -105,4 +105,4 @@ async function reconcileCurrentServiceStartupPolicy(updatesCurrent) {
105
105
  //#endregion
106
106
  export { runOpenMeldMaintenanceWorker };
107
107
 
108
- //# sourceMappingURL=openmeld-maintenance-worker-Ds8LpQ1c.js.map
108
+ //# sourceMappingURL=openmeld-maintenance-worker-CSes51Vp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-Ds8LpQ1c.js","names":[],"sources":["../src/skills/maintenance.ts","../src/local-service/maintenance/openmeld-maintenance-worker.ts"],"sourcesContent":["import { getConfiguredSkillsConfig } from \"../config/runtime-config\";\nimport { resolveSkillsAgentRegistry } from \"./agents\";\nimport { resolveTrackedInstallTargets } from \"./installation-inventory\";\nimport { installSkillsToTargets, withSkillsInstallLock } from \"./installer\";\nimport { downloadOfficialSkillUpdate } from \"./official-release\";\nimport { ensureLocalSkills } from \"./store\";\n\nexport async function maintainOfficialCliSkill(): Promise<void> {\n const outcome = await downloadOfficialSkillUpdate().catch(\n (error: unknown) => {\n process.stderr.write(\n `[openmeld] Skill download deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n return \"deferred\" as const;\n }\n );\n if (outcome === \"lane_isolated\") {\n return;\n }\n await withSkillsInstallLock(async () => {\n const localSkills = await ensureLocalSkills();\n const skillsConfig = await getConfiguredSkillsConfig();\n const targets = await resolveTrackedInstallTargets({\n skillsConfig,\n registry: resolveSkillsAgentRegistry(skillsConfig),\n localSkills,\n onlyOpenMeldInstalledTargets: false,\n });\n const results = await installSkillsToTargets({\n skills: localSkills,\n targets,\n });\n const failures = results.filter((result) => result.status === \"failed\");\n if (failures.length) {\n throw new Error(\n failures\n .map((result) => `${result.targetId}: ${result.reason}`)\n .join(\"; \")\n );\n }\n });\n}\n","import { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { configureDaemonMaintenanceEnvironment } from \"../../config/daemon-service-update-worker-registration\";\nimport { withDaemonServiceReconcileLock } from \"../../config/daemon-state\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../../config/lock\";\nimport { reconcileManagedCliLauncher } from \"../../local-components/managed-install\";\nimport { OPENMELD_VERSION } from \"../../runtime/version\";\nimport { maintainOfficialCliSkill } from \"../../skills/maintenance\";\nimport {\n readDaemonServiceStartupPolicyCurrent,\n resolveDaemonServiceManager,\n} from \"../lifecycle/daemon-service-manager\";\nimport { assertDaemonMaintenanceInstallationOwnership } from \"../lifecycle/daemon-service-manager-command-match\";\nimport {\n runPendingDaemonServiceUpdate,\n scheduleDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-coordinator\";\nimport {\n completePendingDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport { prepareDaemonServiceUpdateWorkerCarrier } from \"../lifecycle/daemon-service-update-worker-manager\";\nimport { readOpenMeldToolsMaintenancePolicy } from \"./openmeld-tools-maintenance-policy\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"./openmeld-tools-update-coordinator\";\n\n// The OS owns this process. It is also the sole executor of persisted download\n// attempts; Service requests only publish an attempt and wake this worker.\nexport async function runOpenMeldMaintenanceWorker(): Promise<void> {\n configureDaemonMaintenanceEnvironment(process.env);\n await runMaintenanceWithLock();\n}\n\nasync function runMaintenanceWithLock(): Promise<boolean> {\n try {\n const lock = await acquireLock({\n openMeldProfileId: \"__system__\",\n key: \"maintenance-worker\",\n });\n return await runWithHeldLock({\n lock,\n run: runMaintenancePass,\n releaseContext: { component: \"maintenance_worker\" },\n });\n } catch (error) {\n // Setup/repair may still own the lifecycle lock when the OS first runs us.\n // Leave its state intact; the existing OS trigger will run another pass.\n if (isOpenMeldLockError(error) && !isOpenMeldOrphanedLockError(error)) {\n return false;\n }\n throw error;\n }\n}\n\nasync function runMaintenancePass(): Promise<boolean> {\n const pendingJob = await readPendingDaemonServiceUpdate();\n const pendingAttempt = await readPendingOpenMeldToolsUpdateAttempt();\n if (!(pendingJob || pendingAttempt)) {\n const contract = await readDaemonServiceContract();\n if (!contract || contract.desiredState !== \"background\") {\n return false;\n }\n }\n await assertDaemonMaintenanceInstallationOwnership();\n await reconcileManagedCliLauncher();\n if ((await readOpenMeldToolsMaintenancePolicy()).automaticUpdatesEnabled) {\n try {\n await maintainOfficialCliSkill();\n } catch (error) {\n process.stderr.write(\n `[openmeld] Skill maintenance deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n }\n }\n const coordinator = createOpenMeldToolsUpdateCoordinator();\n if (!pendingJob) {\n if (pendingAttempt) {\n await coordinator.resumePendingUpdate();\n } else {\n const update = await coordinator.requestUpdate({\n requestSource: \"automatic\",\n });\n await reconcileCurrentServiceStartupPolicy(update.status === \"current\");\n }\n await coordinator.waitForIdle();\n }\n const result = await runPendingDaemonServiceUpdate();\n if (result?.phase === \"updated\") {\n const {\n finishComputerSetupAfterBackgroundUpdate,\n recoverComputerSetupAfterBackgroundUpdate,\n } = await import(\"../../commands/computer-setup-continuation\");\n // Only a verified replacement may replace the working recovery carrier.\n await prepareDaemonServiceUpdateWorkerCarrier(result);\n await finishComputerSetupAfterBackgroundUpdate();\n await withDaemonServiceReconcileLock(async () => {\n const current = await readPendingDaemonServiceUpdate();\n if (\n current?.jobId === result.jobId &&\n current.phase === \"updated\" &&\n current.targetVersion === result.targetVersion\n ) {\n await completePendingDaemonServiceUpdate(current);\n }\n });\n await recoverComputerSetupAfterBackgroundUpdate();\n return true;\n }\n if (result?.phase === \"restored\" || result?.phase === \"needs_help\") {\n process.exitCode = 1;\n }\n return false;\n}\n\nasync function reconcileCurrentServiceStartupPolicy(\n updatesCurrent: boolean\n): Promise<void> {\n if (!updatesCurrent) {\n return;\n }\n const contract = await readDaemonServiceContract();\n // An older recovery worker must not apply its policy to a newer Service,\n // and maintenance must preserve an explicit user stop.\n if (\n contract?.desiredState !== \"background\" ||\n contract.daemonVersion !== OPENMELD_VERSION\n ) {\n return;\n }\n const manager = await resolveDaemonServiceManager();\n if (\n (await readDaemonServiceStartupPolicyCurrent({\n controller: manager?.controller ?? null,\n status: (await manager?.status()) ?? null,\n })) === false\n ) {\n await scheduleDaemonServiceUpdate({\n targetVersion: contract.daemonVersion,\n urgency: \"available\",\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openmeld-maintenance-worker-CSes51Vp.js","names":[],"sources":["../src/skills/maintenance.ts","../src/local-service/maintenance/openmeld-maintenance-worker.ts"],"sourcesContent":["import { getConfiguredSkillsConfig } from \"../config/runtime-config\";\nimport { resolveSkillsAgentRegistry } from \"./agents\";\nimport { resolveTrackedInstallTargets } from \"./installation-inventory\";\nimport { installSkillsToTargets, withSkillsInstallLock } from \"./installer\";\nimport { downloadOfficialSkillUpdate } from \"./official-release\";\nimport { ensureLocalSkills } from \"./store\";\n\nexport async function maintainOfficialCliSkill(): Promise<void> {\n const outcome = await downloadOfficialSkillUpdate().catch(\n (error: unknown) => {\n process.stderr.write(\n `[openmeld] Skill download deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n return \"deferred\" as const;\n }\n );\n if (outcome === \"lane_isolated\") {\n return;\n }\n await withSkillsInstallLock(async () => {\n const localSkills = await ensureLocalSkills();\n const skillsConfig = await getConfiguredSkillsConfig();\n const targets = await resolveTrackedInstallTargets({\n skillsConfig,\n registry: resolveSkillsAgentRegistry(skillsConfig),\n localSkills,\n onlyOpenMeldInstalledTargets: false,\n });\n const results = await installSkillsToTargets({\n skills: localSkills,\n targets,\n });\n const failures = results.filter((result) => result.status === \"failed\");\n if (failures.length) {\n throw new Error(\n failures\n .map((result) => `${result.targetId}: ${result.reason}`)\n .join(\"; \")\n );\n }\n });\n}\n","import { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { configureDaemonMaintenanceEnvironment } from \"../../config/daemon-service-update-worker-registration\";\nimport { withDaemonServiceReconcileLock } from \"../../config/daemon-state\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../../config/lock\";\nimport { reconcileManagedCliLauncher } from \"../../local-components/managed-install\";\nimport { OPENMELD_VERSION } from \"../../runtime/version\";\nimport { maintainOfficialCliSkill } from \"../../skills/maintenance\";\nimport {\n readDaemonServiceStartupPolicyCurrent,\n resolveDaemonServiceManager,\n} from \"../lifecycle/daemon-service-manager\";\nimport { assertDaemonMaintenanceInstallationOwnership } from \"../lifecycle/daemon-service-manager-command-match\";\nimport {\n runPendingDaemonServiceUpdate,\n scheduleDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-coordinator\";\nimport {\n completePendingDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport { prepareDaemonServiceUpdateWorkerCarrier } from \"../lifecycle/daemon-service-update-worker-manager\";\nimport { readOpenMeldToolsMaintenancePolicy } from \"./openmeld-tools-maintenance-policy\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"./openmeld-tools-update-coordinator\";\n\n// The OS owns this process. It is also the sole executor of persisted download\n// attempts; Service requests only publish an attempt and wake this worker.\nexport async function runOpenMeldMaintenanceWorker(): Promise<void> {\n configureDaemonMaintenanceEnvironment(process.env);\n await runMaintenanceWithLock();\n}\n\nasync function runMaintenanceWithLock(): Promise<boolean> {\n try {\n const lock = await acquireLock({\n openMeldProfileId: \"__system__\",\n key: \"maintenance-worker\",\n });\n return await runWithHeldLock({\n lock,\n run: runMaintenancePass,\n releaseContext: { component: \"maintenance_worker\" },\n });\n } catch (error) {\n // Setup/repair may still own the lifecycle lock when the OS first runs us.\n // Leave its state intact; the existing OS trigger will run another pass.\n if (isOpenMeldLockError(error) && !isOpenMeldOrphanedLockError(error)) {\n return false;\n }\n throw error;\n }\n}\n\nasync function runMaintenancePass(): Promise<boolean> {\n const pendingJob = await readPendingDaemonServiceUpdate();\n const pendingAttempt = await readPendingOpenMeldToolsUpdateAttempt();\n if (!(pendingJob || pendingAttempt)) {\n const contract = await readDaemonServiceContract();\n if (!contract || contract.desiredState !== \"background\") {\n return false;\n }\n }\n await assertDaemonMaintenanceInstallationOwnership();\n await reconcileManagedCliLauncher();\n if ((await readOpenMeldToolsMaintenancePolicy()).automaticUpdatesEnabled) {\n try {\n await maintainOfficialCliSkill();\n } catch (error) {\n process.stderr.write(\n `[openmeld] Skill maintenance deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n }\n }\n const coordinator = createOpenMeldToolsUpdateCoordinator();\n if (!pendingJob) {\n if (pendingAttempt) {\n await coordinator.resumePendingUpdate();\n } else {\n const update = await coordinator.requestUpdate({\n requestSource: \"automatic\",\n });\n await reconcileCurrentServiceStartupPolicy(update.status === \"current\");\n }\n await coordinator.waitForIdle();\n }\n const result = await runPendingDaemonServiceUpdate();\n if (result?.phase === \"updated\") {\n const {\n finishComputerSetupAfterBackgroundUpdate,\n recoverComputerSetupAfterBackgroundUpdate,\n } = await import(\"../../commands/computer-setup-continuation\");\n // Only a verified replacement may replace the working recovery carrier.\n await prepareDaemonServiceUpdateWorkerCarrier(result);\n await finishComputerSetupAfterBackgroundUpdate();\n await withDaemonServiceReconcileLock(async () => {\n const current = await readPendingDaemonServiceUpdate();\n if (\n current?.jobId === result.jobId &&\n current.phase === \"updated\" &&\n current.targetVersion === result.targetVersion\n ) {\n await completePendingDaemonServiceUpdate(current);\n }\n });\n await recoverComputerSetupAfterBackgroundUpdate();\n return true;\n }\n if (result?.phase === \"restored\" || result?.phase === \"needs_help\") {\n process.exitCode = 1;\n }\n return false;\n}\n\nasync function reconcileCurrentServiceStartupPolicy(\n updatesCurrent: boolean\n): Promise<void> {\n if (!updatesCurrent) {\n return;\n }\n const contract = await readDaemonServiceContract();\n // An older recovery worker must not apply its policy to a newer Service,\n // and maintenance must preserve an explicit user stop.\n if (\n contract?.desiredState !== \"background\" ||\n contract.daemonVersion !== OPENMELD_VERSION\n ) {\n return;\n }\n const manager = await resolveDaemonServiceManager();\n if (\n (await readDaemonServiceStartupPolicyCurrent({\n controller: manager?.controller ?? null,\n status: (await manager?.status()) ?? null,\n })) === false\n ) {\n await scheduleDaemonServiceUpdate({\n targetVersion: contract.daemonVersion,\n urgency: \"available\",\n });\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-BtqJMt8J.js";
4
- import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BczvSdXA.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-Dvn2LxSm.js";
3
+ import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-nIBQreis.js";
4
+ import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BdcEl-QC.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-BxMWSsxC.js";
6
6
  import { setTimeout } from "node:timers/promises";
7
7
  //#region src/local-service/maintenance/openmeld-tools-update-join.ts
8
8
  const DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;
@@ -53,4 +53,4 @@ async function waitForExternalOpenMeldToolsUpdate(input = {}) {
53
53
  //#endregion
54
54
  export { waitForExternalOpenMeldToolsUpdate as n, waitForOpenMeldToolsUpdateCompletion as r, resolveExternalOpenMeldToolsUpdate as t };
55
55
 
56
- //# sourceMappingURL=openmeld-tools-update-join-DV_THLes.js.map
56
+ //# sourceMappingURL=openmeld-tools-update-join-BlPynw_v.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-DV_THLes.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import { setTimeout as sleep } from \"node:timers/promises\";\nimport type { OpenMeldToolsUpdateOperation } from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (reportedOperationId !== operation.operationId) {\n reportedOperationId = operation.operationId;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAMI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;CACF,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,GAAI,WAAW,mBACX,EAAE,kBAAkB,WAAW,iBAAiB,IAChD,CAAC;EACL,GAAI,WAAW,uBACX,EAAE,sBAAsB,WAAW,qBAAqB,IACxD,CAAC;EACL,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAOI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,wBAAwB,UAAU,aAAa;GACjD,sBAAsB,UAAU;GAChC,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF"}
1
+ {"version":3,"file":"openmeld-tools-update-join-BlPynw_v.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import { setTimeout as sleep } from \"node:timers/promises\";\nimport type { OpenMeldToolsUpdateOperation } from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (reportedOperationId !== operation.operationId) {\n reportedOperationId = operation.operationId;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAMI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;CACF,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,GAAI,WAAW,mBACX,EAAE,kBAAkB,WAAW,iBAAiB,IAChD,CAAC;EACL,GAAI,WAAW,uBACX,EAAE,sBAAsB,WAAW,qBAAqB,IACxD,CAAC;EACL,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAOI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,wBAAwB,UAAU,aAAa;GACjD,sBAAsB,UAAU;GAChC,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF"}
package/dist/openmeld.js CHANGED
@@ -1,13 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  //#region src/openmeld-entry.ts
4
+ if (process.platform === "win32" && /[\\/]openmeld\.exe$/iu.test(process.execPath) && !process.argv.includes("--openmeld-windows-task")) {
5
+ const { restoreWindowsPreviewChannel } = await import("./windows-preview-channel-DPrYuLyY.js");
6
+ await restoreWindowsPreviewChannel();
7
+ }
4
8
  if (process.argv.includes("--openmeld-windows-task")) {
5
9
  const { initializeWindowsTaskEntry } = await import("./windows-task-entry-CtRpUbiK.js");
6
10
  initializeWindowsTaskEntry();
7
11
  }
8
12
  const args = process.argv.slice(2);
9
13
  if (args.length === 3 && args[0] === "service" && args[1] === "execution-host") try {
10
- const { runExecutionHost } = await import("./entry-B19Dcymp.js");
14
+ const { runExecutionHost } = await import("./entry-jvTvDBr-.js");
11
15
  const hostInstanceId = args[2];
12
16
  if (!hostInstanceId) throw new Error("The Host incarnation is required.");
13
17
  await runExecutionHost(hostInstanceId);
@@ -17,14 +21,14 @@ if (args.length === 3 && args[0] === "service" && args[1] === "execution-host")
17
21
  if (process.connected) process.disconnect();
18
22
  }
19
23
  else if (args.length === 2 && args[0] === "service" && args[1] === "update-worker") try {
20
- const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-Ds8LpQ1c.js");
24
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-CSes51Vp.js");
21
25
  await runOpenMeldMaintenanceWorker();
22
26
  } catch (error) {
23
27
  console.error("[openmeld.maintenance.failed]", error);
24
28
  process.exitCode = 1;
25
29
  }
26
30
  else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] === "maintenance-align-service")) try {
27
- const { runMaintenanceUpgrade } = await import("./upgrade-Cy4bMox8.js");
31
+ const { runMaintenanceUpgrade } = await import("./upgrade-DgTfV7-m.js");
28
32
  await runMaintenanceUpgrade(args[0] === "maintenance-align-service");
29
33
  } catch (error) {
30
34
  try {
@@ -34,7 +38,7 @@ else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] ===
34
38
  console.error("[openmeld.maintenance.upgrade_failed]", error);
35
39
  process.exitCode = 1;
36
40
  }
37
- else await import("./openmeld-DEbL_TIZ.js");
41
+ else await import("./openmeld-0pnb6g3R.js");
38
42
  //#endregion
39
43
  export {};
40
44
 
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld.js","names":[],"sources":["../src/openmeld-entry.ts"],"sourcesContent":["// Maintenance must remain loadable when the business command graph cannot start.\n// Both distributions use this entry; normal commands keep their existing parser.\nif (process.argv.includes(\"--openmeld-windows-task\")) {\n const { initializeWindowsTaskEntry } = await import(\n \"./local-service/lifecycle/windows-task-entry\"\n );\n initializeWindowsTaskEntry();\n}\nconst args = process.argv.slice(2);\n\nif (\n args.length === 3 &&\n args[0] === \"service\" &&\n args[1] === \"execution-host\"\n) {\n try {\n const { runExecutionHost } = await import(\n \"./local-service/execution-host/entry\"\n );\n const hostInstanceId = args[2];\n if (!hostInstanceId) {\n throw new Error(\"The Host incarnation is required.\");\n }\n await runExecutionHost(hostInstanceId);\n } catch (error) {\n console.error(\"[openmeld.execution_host.failed]\", error);\n process.exitCode = 1;\n if (process.connected) {\n process.disconnect();\n }\n }\n} else if (\n args.length === 2 &&\n args[0] === \"service\" &&\n args[1] === \"update-worker\"\n) {\n try {\n const { runOpenMeldMaintenanceWorker } = await import(\n \"./local-service/maintenance/openmeld-maintenance-worker\"\n );\n await runOpenMeldMaintenanceWorker();\n } catch (error) {\n console.error(\"[openmeld.maintenance.failed]\", error);\n process.exitCode = 1;\n }\n} else if (\n args.length === 1 &&\n (args[0] === \"maintenance-upgrade\" || args[0] === \"maintenance-align-service\")\n) {\n try {\n const { runMaintenanceUpgrade } = await import(\"./commands/upgrade\");\n await runMaintenanceUpgrade(args[0] === \"maintenance-align-service\");\n } catch (error) {\n try {\n const { emitOpenMeldToolsUpdateFailureFrame } = await import(\n \"./local-service/maintenance/openmeld-tools-update-process-frame\"\n );\n emitOpenMeldToolsUpdateFailureFrame(error);\n } catch {\n // The local worker log below remains the fallback when framing fails.\n }\n console.error(\"[openmeld.maintenance.upgrade_failed]\", error);\n process.exitCode = 1;\n }\n} else {\n await import(\"./openmeld\");\n}\n"],"mappings":";;;AAEA,IAAI,QAAQ,KAAK,SAAS,yBAAyB,GAAG;CACpD,MAAM,EAAE,+BAA+B,MAAM,OAC3C;CAEF,2BAA2B;AAC7B;AACA,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAEjC,IACE,KAAK,WAAW,KAChB,KAAK,OAAO,aACZ,KAAK,OAAO,kBAEZ,IAAI;CACF,MAAM,EAAE,qBAAqB,MAAM,OACjC;CAEF,MAAM,iBAAiB,KAAK;CAC5B,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,mCAAmC;CAErD,MAAM,iBAAiB,cAAc;AACvC,SAAS,OAAO;CACd,QAAQ,MAAM,oCAAoC,KAAK;CACvD,QAAQ,WAAW;CACnB,IAAI,QAAQ,WACV,QAAQ,WAAW;AAEvB;KACK,IACL,KAAK,WAAW,KAChB,KAAK,OAAO,aACZ,KAAK,OAAO,iBAEZ,IAAI;CACF,MAAM,EAAE,iCAAiC,MAAM,OAC7C;CAEF,MAAM,6BAA6B;AACrC,SAAS,OAAO;CACd,QAAQ,MAAM,iCAAiC,KAAK;CACpD,QAAQ,WAAW;AACrB;KACK,IACL,KAAK,WAAW,MACf,KAAK,OAAO,yBAAyB,KAAK,OAAO,8BAElD,IAAI;CACF,MAAM,EAAE,0BAA0B,MAAM,OAAO;CAC/C,MAAM,sBAAsB,KAAK,OAAO,2BAA2B;AACrE,SAAS,OAAO;CACd,IAAI;EACF,MAAM,EAAE,wCAAwC,MAAM,OACpD;EAEF,oCAAoC,KAAK;CAC3C,QAAQ,CAER;CACA,QAAQ,MAAM,yCAAyC,KAAK;CAC5D,QAAQ,WAAW;AACrB;KAEA,MAAM,OAAO"}
1
+ {"version":3,"file":"openmeld.js","names":[],"sources":["../src/openmeld-entry.ts"],"sourcesContent":["// Maintenance must remain loadable when the business command graph cannot start.\n// Both distributions use this entry; normal commands keep their existing parser.\nif (\n process.platform === \"win32\" &&\n /[\\\\/]openmeld\\.exe$/iu.test(process.execPath) &&\n !process.argv.includes(\"--openmeld-windows-task\")\n) {\n const { restoreWindowsPreviewChannel } = await import(\n \"./local-components/windows-preview-channel\"\n );\n await restoreWindowsPreviewChannel();\n}\nif (process.argv.includes(\"--openmeld-windows-task\")) {\n const { initializeWindowsTaskEntry } = await import(\n \"./local-service/lifecycle/windows-task-entry\"\n );\n initializeWindowsTaskEntry();\n}\nconst args = process.argv.slice(2);\n\nif (\n args.length === 3 &&\n args[0] === \"service\" &&\n args[1] === \"execution-host\"\n) {\n try {\n const { runExecutionHost } = await import(\n \"./local-service/execution-host/entry\"\n );\n const hostInstanceId = args[2];\n if (!hostInstanceId) {\n throw new Error(\"The Host incarnation is required.\");\n }\n await runExecutionHost(hostInstanceId);\n } catch (error) {\n console.error(\"[openmeld.execution_host.failed]\", error);\n process.exitCode = 1;\n if (process.connected) {\n process.disconnect();\n }\n }\n} else if (\n args.length === 2 &&\n args[0] === \"service\" &&\n args[1] === \"update-worker\"\n) {\n try {\n const { runOpenMeldMaintenanceWorker } = await import(\n \"./local-service/maintenance/openmeld-maintenance-worker\"\n );\n await runOpenMeldMaintenanceWorker();\n } catch (error) {\n console.error(\"[openmeld.maintenance.failed]\", error);\n process.exitCode = 1;\n }\n} else if (\n args.length === 1 &&\n (args[0] === \"maintenance-upgrade\" || args[0] === \"maintenance-align-service\")\n) {\n try {\n const { runMaintenanceUpgrade } = await import(\"./commands/upgrade\");\n await runMaintenanceUpgrade(args[0] === \"maintenance-align-service\");\n } catch (error) {\n try {\n const { emitOpenMeldToolsUpdateFailureFrame } = await import(\n \"./local-service/maintenance/openmeld-tools-update-process-frame\"\n );\n emitOpenMeldToolsUpdateFailureFrame(error);\n } catch {\n // The local worker log below remains the fallback when framing fails.\n }\n console.error(\"[openmeld.maintenance.upgrade_failed]\", error);\n process.exitCode = 1;\n }\n} else {\n await import(\"./openmeld\");\n}\n"],"mappings":";;;AAEA,IACE,QAAQ,aAAa,WACrB,wBAAwB,KAAK,QAAQ,QAAQ,KAC7C,CAAC,QAAQ,KAAK,SAAS,yBAAyB,GAChD;CACA,MAAM,EAAE,iCAAiC,MAAM,OAC7C;CAEF,MAAM,6BAA6B;AACrC;AACA,IAAI,QAAQ,KAAK,SAAS,yBAAyB,GAAG;CACpD,MAAM,EAAE,+BAA+B,MAAM,OAC3C;CAEF,2BAA2B;AAC7B;AACA,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAEjC,IACE,KAAK,WAAW,KAChB,KAAK,OAAO,aACZ,KAAK,OAAO,kBAEZ,IAAI;CACF,MAAM,EAAE,qBAAqB,MAAM,OACjC;CAEF,MAAM,iBAAiB,KAAK;CAC5B,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,mCAAmC;CAErD,MAAM,iBAAiB,cAAc;AACvC,SAAS,OAAO;CACd,QAAQ,MAAM,oCAAoC,KAAK;CACvD,QAAQ,WAAW;CACnB,IAAI,QAAQ,WACV,QAAQ,WAAW;AAEvB;KACK,IACL,KAAK,WAAW,KAChB,KAAK,OAAO,aACZ,KAAK,OAAO,iBAEZ,IAAI;CACF,MAAM,EAAE,iCAAiC,MAAM,OAC7C;CAEF,MAAM,6BAA6B;AACrC,SAAS,OAAO;CACd,QAAQ,MAAM,iCAAiC,KAAK;CACpD,QAAQ,WAAW;AACrB;KACK,IACL,KAAK,WAAW,MACf,KAAK,OAAO,yBAAyB,KAAK,OAAO,8BAElD,IAAI;CACF,MAAM,EAAE,0BAA0B,MAAM,OAAO;CAC/C,MAAM,sBAAsB,KAAK,OAAO,2BAA2B;AACrE,SAAS,OAAO;CACd,IAAI;EACF,MAAM,EAAE,wCAAwC,MAAM,OACpD;EAEF,oCAAoC,KAAK;CAC3C,QAAQ,CAER;CACA,QAAQ,MAAM,yCAAyC,KAAK;CAC5D,QAAQ,WAAW;AACrB;KAEA,MAAM,OAAO"}
@@ -0,0 +1,273 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { createHash } from "node:crypto";
4
+ import { homedir } from "node:os";
5
+ import { basename, dirname, join, parse, resolve } from "node:path";
6
+ //#region src/config/paths.ts
7
+ const MAX_ACCOUNT_PATH_SEGMENT_LENGTH = 128;
8
+ const OPAQUE_CACHE_PATH_SEGMENT_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u;
9
+ const FALLBACK_ACCOUNT_HOST_KEY = "unauthenticated";
10
+ const FALLBACK_ACCOUNT_USER_KEY = "local";
11
+ const OPENMELD_HOME_ENV_KEY = "OPENMELD_HOME";
12
+ const OPENMELD_ENV_PRESET_ENV_KEY = "OPENMELD_ENV_PRESET";
13
+ const DEFAULT_OPENMELD_ENV_PRESET = "prod";
14
+ const OPENMELD_DEFAULT_HOME_DIR_BY_PRESET = {
15
+ prod: ".openmeld",
16
+ "dev-local": ".openmeld-dev",
17
+ canary: ".openmeld-canary"
18
+ };
19
+ const OPENMELD_ENV_PRESET_BY_ENTRY_NAME = {
20
+ openmeld: "prod",
21
+ "openmeld-dev": "dev-local",
22
+ "openmeld-canary": "canary"
23
+ };
24
+ function normalizeOpenMeldProfileId(value) {
25
+ const raw = String(value ?? "").trim();
26
+ if (raw.length === 0) throw new Error("openMeldProfileId is required");
27
+ const safe = raw.replace(/[^a-zA-Z0-9._-]+/g, "_").toLowerCase();
28
+ if (!safe || safe === "." || safe === "..") throw new Error("openMeldProfileId is invalid");
29
+ if (safe.length > MAX_ACCOUNT_PATH_SEGMENT_LENGTH) throw new Error("openMeldProfileId is too long");
30
+ return safe;
31
+ }
32
+ function resolveOpenMeldEnvPreset(input = {}) {
33
+ const fromEnv = normalizeOpenMeldEnvPreset((input.env ?? process.env)[OPENMELD_ENV_PRESET_ENV_KEY]);
34
+ if (fromEnv) return fromEnv;
35
+ return resolveOpenMeldEnvPresetFromArgv(input.argv ?? process.argv);
36
+ }
37
+ function resolveExplicitOpenMeldEnvPreset(input = {}) {
38
+ return normalizeOpenMeldEnvPreset((input.env ?? process.env)[OPENMELD_ENV_PRESET_ENV_KEY]);
39
+ }
40
+ function resolveDefaultOpenMeldHomeDirname(preset) {
41
+ return OPENMELD_DEFAULT_HOME_DIR_BY_PRESET[preset];
42
+ }
43
+ function resolveOpenMeldRootDir(input = {}) {
44
+ const env = input.env ?? process.env;
45
+ const fromEnv = String(env["OPENMELD_HOME"] ?? "").trim();
46
+ if (fromEnv) return fromEnv;
47
+ const preset = resolveOpenMeldEnvPreset(input);
48
+ return join(resolveHomeDirectory(input), resolveDefaultOpenMeldHomeDirname(preset));
49
+ }
50
+ /** Development OS resources follow the same root already carried by setup
51
+ * and persisted in service registrations. No cwd or transient lane variable
52
+ * may change the identity of an installed service. */
53
+ function resolveOpenMeldServiceScope(input = {}) {
54
+ if (resolveOpenMeldEnvPreset(input) !== "dev-local") return null;
55
+ const root = resolve(resolveOpenMeldRootDir(input));
56
+ return createHash("sha256").update(root).digest("hex").slice(0, 16);
57
+ }
58
+ function resolveOpenMeldServiceOwnedPathInput(input = {}) {
59
+ const env = { ...input.env ?? process.env };
60
+ if (resolveOpenMeldServiceScope(input)) return {
61
+ ...input,
62
+ env
63
+ };
64
+ delete env[OPENMELD_HOME_ENV_KEY];
65
+ return {
66
+ ...input,
67
+ env
68
+ };
69
+ }
70
+ function openMeldRootDir() {
71
+ return resolveOpenMeldRootDir();
72
+ }
73
+ /**
74
+ * Whether the effective OpenMeld home is the published `~/.openmeld` user lane.
75
+ * Lane-specific homes (`openmeld-dev`, `openmeld-canary`, isolated dev lanes,
76
+ * and other `OPENMELD_HOME` overrides) resolve elsewhere and must not manage
77
+ * shared real-user state that the published lane owns.
78
+ */
79
+ function isPublishedOpenMeldHome(input = {}) {
80
+ const publishedRootDir = join(resolveHomeDirectory(input), OPENMELD_DEFAULT_HOME_DIR_BY_PRESET.prod);
81
+ return resolve(resolveOpenMeldRootDir(input)) === resolve(publishedRootDir);
82
+ }
83
+ function openMeldBackupsDir() {
84
+ const root = openMeldRootDir();
85
+ return join(dirname(root), `${basename(root)}-backups`);
86
+ }
87
+ function openMeldManagedBinaryName() {
88
+ return process.platform === "win32" ? "openmeld.exe" : "openmeld";
89
+ }
90
+ function openMeldVersionsDir(input = {}) {
91
+ return join(resolveOpenMeldRootDir(input), "versions");
92
+ }
93
+ function openMeldManagedVersionDir(version, input = {}) {
94
+ return join(openMeldVersionsDir(input), normalizePathSegment(version, "unknown"));
95
+ }
96
+ function openMeldManagedVersionBinaryPath(version, input = {}) {
97
+ return join(openMeldManagedVersionDir(version, input), openMeldManagedBinaryName());
98
+ }
99
+ function openMeldBinDir(input = {}) {
100
+ return join(resolveOpenMeldRootDir(input), "bin");
101
+ }
102
+ function openMeldManagedBinaryPath(input = {}) {
103
+ return join(openMeldBinDir(input), openMeldManagedBinaryName());
104
+ }
105
+ function accountsDir() {
106
+ return join(openMeldRootDir(), "accounts");
107
+ }
108
+ function deviceDir(input = {}) {
109
+ return join(resolveOpenMeldRootDir(input), "device");
110
+ }
111
+ function deviceSkillsDir(input = {}) {
112
+ return join(deviceDir(input), "skills");
113
+ }
114
+ function devicePreferencesPath(input = {}) {
115
+ return join(deviceDir(input), "preferences.json");
116
+ }
117
+ function deviceAgentRuntimePath(input = {}) {
118
+ return join(deviceDir(input), "agent-runtime.json");
119
+ }
120
+ function deviceProvidersDir(input = {}) {
121
+ return join(deviceDir(input), "providers");
122
+ }
123
+ function deviceProviderDir(providerId, input = {}) {
124
+ return join(deviceProvidersDir(input), normalizePathSegment(providerId, "unknown"));
125
+ }
126
+ function deviceProviderProfilesDir(providerId, input = {}) {
127
+ return join(deviceProviderDir(providerId, input), "profiles");
128
+ }
129
+ function deviceProviderProfileDir(providerId, profileId, input = {}) {
130
+ return join(deviceProviderProfilesDir(providerId, input), normalizePathSegment(profileId, "unknown"));
131
+ }
132
+ function deviceOpenClawProfileDir(profileId, input = {}) {
133
+ return deviceProviderProfileDir("openclaw", profileId, input);
134
+ }
135
+ function deviceOpenClawProfileWorkspaceDir(profileId, input = {}) {
136
+ return join(deviceOpenClawProfileDir(profileId, input), "workspace");
137
+ }
138
+ function deviceOpenClawProfileBootstrapPath(profileId, input = {}) {
139
+ return join(deviceOpenClawProfileDir(profileId, input), "bootstrap.json");
140
+ }
141
+ function deviceSkillsStorePath(input = {}) {
142
+ return join(deviceSkillsDir(input), "store.json");
143
+ }
144
+ function deviceSkillsCustomTargetsPath(input = {}) {
145
+ return join(deviceSkillsDir(input), "custom-targets.json");
146
+ }
147
+ function deviceSkillsInstallsPath(input = {}) {
148
+ return join(deviceSkillsDir(input), "installs.json");
149
+ }
150
+ function legacyRuntimeConfigPath(input = {}) {
151
+ return join(resolveOpenMeldRootDir(input), "config.json");
152
+ }
153
+ function normalizeAccountHostKey(value) {
154
+ return normalizePathSegment(value, FALLBACK_ACCOUNT_HOST_KEY);
155
+ }
156
+ function normalizeAccountUserKey(value) {
157
+ return normalizePathSegment(value, FALLBACK_ACCOUNT_USER_KEY);
158
+ }
159
+ function normalizeAccountKey(input) {
160
+ return {
161
+ hostKey: normalizeAccountHostKey(input.hostKey),
162
+ userKey: normalizeAccountUserKey(input.userKey)
163
+ };
164
+ }
165
+ function accountDir(account) {
166
+ const normalized = normalizeAccountKey(account);
167
+ return join(accountsDir(), normalized.hostKey, normalized.userKey);
168
+ }
169
+ function accountProfilesDir(account) {
170
+ return join(accountDir(account), "profiles");
171
+ }
172
+ function accountProfileDir(account, openMeldProfileId) {
173
+ return join(accountProfilesDir(account), normalizeOpenMeldProfileId(openMeldProfileId));
174
+ }
175
+ function accountProfileViewPath(account, openMeldProfileId) {
176
+ return join(accountProfileDir(account, openMeldProfileId), "view.json");
177
+ }
178
+ function accountProfileLocalMetaPath(account, openMeldProfileId) {
179
+ return join(accountProfileDir(account, openMeldProfileId), "local-meta.json");
180
+ }
181
+ function accountProfileWorkspacePath(account, openMeldProfileId) {
182
+ return join(accountProfileDir(account, openMeldProfileId), "workspace");
183
+ }
184
+ function accountProfileSpaceCacheDir(account, openMeldProfileId) {
185
+ return join(accountProfileDir(account, openMeldProfileId), "space-cache");
186
+ }
187
+ function legacyAccountProfileSpacesDir(account, openMeldProfileId) {
188
+ return join(accountProfileDir(account, openMeldProfileId), "spaces");
189
+ }
190
+ function profileDir(openMeldProfileId) {
191
+ return join(openMeldRootDir(), "profiles", openMeldProfileId);
192
+ }
193
+ function runtimeDir(input = {}) {
194
+ return join(resolveOpenMeldRootDir(input), "runtime");
195
+ }
196
+ function runtimeLogsDir() {
197
+ return join(runtimeDir(), "logs");
198
+ }
199
+ function sessionsDir() {
200
+ return join(runtimeDir(), "sessions");
201
+ }
202
+ function systemDir(input = {}) {
203
+ return join(resolveOpenMeldRootDir(input), "system");
204
+ }
205
+ function skillsDir() {
206
+ return join(openMeldRootDir(), "skills");
207
+ }
208
+ function organizationSkillsDir(input = {}) {
209
+ return join(resolveOpenMeldRootDir(input), "organization-skills");
210
+ }
211
+ function organizationSkillReleaseDir(organizationId, skillId, releaseId, input = {}) {
212
+ return join(organizationSkillsDir(input), requireOpaqueCachePathSegment(organizationId, "organizationId"), requireOpaqueCachePathSegment(skillId, "skillId"), requireOpaqueCachePathSegment(releaseId, "releaseId"));
213
+ }
214
+ function spacesDir(openMeldProfileId) {
215
+ return join(profileDir(openMeldProfileId), "spaces");
216
+ }
217
+ function locksDir(openMeldProfileId, input = {}) {
218
+ return join(runtimeDir(input), "locks", openMeldProfileId);
219
+ }
220
+ function profileViewPath(openMeldProfileId) {
221
+ return join(profileDir(openMeldProfileId), "view.json");
222
+ }
223
+ function normalizePathSegment(value, fallback) {
224
+ const normalized = String(value ?? "").trim().toLowerCase();
225
+ if (!normalized) return fallback;
226
+ const safe = normalized.replace(/[^a-z0-9._-]+/g, "_");
227
+ if (!safe) return fallback;
228
+ if (safe === "." || safe === "..") return fallback;
229
+ return safe.slice(0, MAX_ACCOUNT_PATH_SEGMENT_LENGTH);
230
+ }
231
+ function requireOpaqueCachePathSegment(value, label) {
232
+ const normalized = String(value ?? "").trim();
233
+ if (normalized.length === 0 || normalized.length > 256 || normalized === "." || normalized === ".." || !OPAQUE_CACHE_PATH_SEGMENT_RE.test(normalized)) throw new Error(`${label} is not safe for the Organization Skills cache`);
234
+ return normalized;
235
+ }
236
+ function resolveOpenMeldEnvPresetFromArgv(argv) {
237
+ return resolveKnownOpenMeldEnvPresetFromArgv(argv) ?? DEFAULT_OPENMELD_ENV_PRESET;
238
+ }
239
+ function resolveKnownOpenMeldEnvPresetFromArgv(argv) {
240
+ const entryName = resolveOpenMeldCliEntryNameFromArgv(argv);
241
+ if (!entryName) return null;
242
+ return OPENMELD_ENV_PRESET_BY_ENTRY_NAME[entryName] ?? null;
243
+ }
244
+ function resolveOpenMeldCliEntryNameFromArgv(argv) {
245
+ return resolveCliEntryName(argv[1]);
246
+ }
247
+ function resolveCliEntryName(value) {
248
+ const raw = String(value ?? "").trim();
249
+ if (!raw) return null;
250
+ const normalizedName = parse(raw).name.trim().toLowerCase();
251
+ if (!normalizedName) return null;
252
+ if (!isOpenMeldCliEntryName(normalizedName)) return null;
253
+ return normalizedName;
254
+ }
255
+ function isOpenMeldCliEntryName(value) {
256
+ return value in OPENMELD_ENV_PRESET_BY_ENTRY_NAME;
257
+ }
258
+ function normalizeOpenMeldEnvPreset(value) {
259
+ const normalized = String(value ?? "").trim().toLowerCase();
260
+ if (normalized === "prod" || normalized === "dev-local" || normalized === "canary") return normalized;
261
+ return null;
262
+ }
263
+ function resolveHomeDirectory(input) {
264
+ if (input.homeDir) return input.homeDir;
265
+ const env = input.env ?? process.env;
266
+ const fromEnv = String(env.HOME ?? "").trim();
267
+ if (fromEnv) return fromEnv;
268
+ return homedir();
269
+ }
270
+ //#endregion
271
+ export { profileDir as A, runtimeLogsDir as B, openMeldManagedBinaryName as C, openMeldRootDir as D, openMeldManagedVersionDir as E, resolveOpenMeldEnvPreset as F, skillsDir as H, resolveOpenMeldRootDir as I, resolveOpenMeldServiceOwnedPathInput as L, resolveDefaultOpenMeldHomeDirname as M, resolveExplicitOpenMeldEnvPreset as N, openMeldVersionsDir as O, resolveOpenMeldCliEntryNameFromArgv as P, resolveOpenMeldServiceScope as R, openMeldBinDir as S, openMeldManagedVersionBinaryPath as T, spacesDir as U, sessionsDir as V, systemDir as W, legacyRuntimeConfigPath as _, accountProfileWorkspacePath as a, normalizeOpenMeldProfileId as b, deviceOpenClawProfileBootstrapPath as c, devicePreferencesPath as d, deviceSkillsCustomTargetsPath as f, legacyAccountProfileSpacesDir as g, isPublishedOpenMeldHome as h, accountProfileViewPath as i, profileViewPath as j, organizationSkillReleaseDir as k, deviceOpenClawProfileDir as l, deviceSkillsStorePath as m, accountProfileLocalMetaPath as n, accountsDir as o, deviceSkillsInstallsPath as p, accountProfileSpaceCacheDir as r, deviceAgentRuntimePath as s, OPENMELD_HOME_ENV_KEY as t, deviceOpenClawProfileWorkspaceDir as u, locksDir as v, openMeldManagedBinaryPath as w, openMeldBackupsDir as x, normalizeAccountKey as y, runtimeDir as z };
272
+
273
+ //# sourceMappingURL=paths-DSkUuEu3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths-DSkUuEu3.js","names":[],"sources":["../src/config/paths.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, parse, resolve } from \"node:path\";\n\nexport type OpenMeldProfileId = string;\nexport type OpenMeldAccountKey = {\n hostKey: string;\n userKey: string;\n};\nexport type OpenMeldEnvPreset = \"prod\" | \"dev-local\" | \"canary\";\ntype OpenMeldPathResolutionInput = {\n env?: NodeJS.ProcessEnv;\n argv?: string[];\n homeDir?: string;\n};\n\nexport type { OpenMeldPathResolutionInput };\n\nconst MAX_ACCOUNT_PATH_SEGMENT_LENGTH = 128;\nconst OPAQUE_CACHE_PATH_SEGMENT_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u;\nconst FALLBACK_ACCOUNT_HOST_KEY = \"unauthenticated\";\nconst FALLBACK_ACCOUNT_USER_KEY = \"local\";\nexport const OPENMELD_HOME_ENV_KEY = \"OPENMELD_HOME\";\nconst OPENMELD_ENV_PRESET_ENV_KEY = \"OPENMELD_ENV_PRESET\";\nconst DEFAULT_OPENMELD_ENV_PRESET: OpenMeldEnvPreset = \"prod\";\nconst OPENMELD_DEFAULT_HOME_DIR_BY_PRESET = {\n prod: \".openmeld\",\n \"dev-local\": \".openmeld-dev\",\n canary: \".openmeld-canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst OPENMELD_ENV_PRESET_BY_ENTRY_NAME = {\n openmeld: \"prod\",\n \"openmeld-dev\": \"dev-local\",\n \"openmeld-canary\": \"canary\",\n} as const satisfies Record<string, OpenMeldEnvPreset>;\nexport type OpenMeldCliEntryName =\n keyof typeof OPENMELD_ENV_PRESET_BY_ENTRY_NAME;\n\nexport function normalizeOpenMeldProfileId(value: unknown): OpenMeldProfileId {\n const raw = String(value ?? \"\").trim();\n if (raw.length === 0) {\n throw new Error(\"openMeldProfileId is required\");\n }\n // Keep filenames stable and safe.\n const safe = raw.replace(/[^a-zA-Z0-9._-]+/g, \"_\").toLowerCase();\n if (!safe || safe === \".\" || safe === \"..\") {\n throw new Error(\"openMeldProfileId is invalid\");\n }\n if (safe.length > MAX_ACCOUNT_PATH_SEGMENT_LENGTH) {\n throw new Error(\"openMeldProfileId is too long\");\n }\n return safe;\n}\n\nexport function resolveOpenMeldEnvPreset(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldEnvPreset {\n const env = input.env ?? process.env;\n const fromEnv = normalizeOpenMeldEnvPreset(env[OPENMELD_ENV_PRESET_ENV_KEY]);\n if (fromEnv) {\n return fromEnv;\n }\n return resolveOpenMeldEnvPresetFromArgv(input.argv ?? process.argv);\n}\n\nexport function resolveExplicitOpenMeldEnvPreset(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldEnvPreset | null {\n const env = input.env ?? process.env;\n return normalizeOpenMeldEnvPreset(env[OPENMELD_ENV_PRESET_ENV_KEY]);\n}\n\nexport function resolveDefaultOpenMeldHomeDirname(\n preset: OpenMeldEnvPreset\n): string {\n return OPENMELD_DEFAULT_HOME_DIR_BY_PRESET[preset];\n}\n\nexport function resolveOpenMeldRootDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n const env = input.env ?? process.env;\n const fromEnv = String(env[OPENMELD_HOME_ENV_KEY] ?? \"\").trim();\n if (fromEnv) {\n return fromEnv;\n }\n const preset = resolveOpenMeldEnvPreset(input);\n return join(\n resolveHomeDirectory(input),\n resolveDefaultOpenMeldHomeDirname(preset)\n );\n}\n\n/** Development OS resources follow the same root already carried by setup\n * and persisted in service registrations. No cwd or transient lane variable\n * may change the identity of an installed service. */\nexport function resolveOpenMeldServiceScope(\n input: OpenMeldPathResolutionInput = {}\n): string | null {\n if (resolveOpenMeldEnvPreset(input) !== \"dev-local\") {\n return null;\n }\n const root = resolve(resolveOpenMeldRootDir(input));\n return createHash(\"sha256\").update(root).digest(\"hex\").slice(0, 16);\n}\n\nexport function resolveOpenMeldServiceOwnedPathInput(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldPathResolutionInput {\n const env = { ...(input.env ?? process.env) };\n if (resolveOpenMeldServiceScope(input)) {\n return { ...input, env };\n }\n delete env[OPENMELD_HOME_ENV_KEY];\n return {\n ...input,\n env,\n };\n}\n\nexport function openMeldRootDir(): string {\n return resolveOpenMeldRootDir();\n}\n\n/**\n * Whether the effective OpenMeld home is the published `~/.openmeld` user lane.\n * Lane-specific homes (`openmeld-dev`, `openmeld-canary`, isolated dev lanes,\n * and other `OPENMELD_HOME` overrides) resolve elsewhere and must not manage\n * shared real-user state that the published lane owns.\n */\nexport function isPublishedOpenMeldHome(\n input: OpenMeldPathResolutionInput = {}\n): boolean {\n const publishedRootDir = join(\n resolveHomeDirectory(input),\n OPENMELD_DEFAULT_HOME_DIR_BY_PRESET.prod\n );\n return resolve(resolveOpenMeldRootDir(input)) === resolve(publishedRootDir);\n}\n\nexport function openMeldBackupsDir(): string {\n const root = openMeldRootDir();\n return join(dirname(root), `${basename(root)}-backups`);\n}\n\n// Managed binary layout (binary distribution only). Each installed version\n// lives under versions/<version> with its platform executable. POSIX uses a\n// symlink; Windows uses a native console launcher and one activation record. The layout is\n// lane-aware through resolveOpenMeldRootDir, so the dev lane uses\n// ~/.openmeld-dev/versions and ~/.openmeld-dev/bin.\nexport function openMeldManagedBinaryName(): string {\n return process.platform === \"win32\" ? \"openmeld.exe\" : \"openmeld\";\n}\n\nexport function openMeldVersionsDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"versions\");\n}\n\nexport function openMeldManagedVersionDir(\n version: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n openMeldVersionsDir(input),\n normalizePathSegment(version, \"unknown\")\n );\n}\n\nexport function openMeldManagedVersionBinaryPath(\n version: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n openMeldManagedVersionDir(version, input),\n openMeldManagedBinaryName()\n );\n}\n\nexport function openMeldBinDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"bin\");\n}\n\nexport function openMeldManagedBinaryPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(openMeldBinDir(input), openMeldManagedBinaryName());\n}\n\nexport function accountsDir(): string {\n return join(openMeldRootDir(), \"accounts\");\n}\n\nexport function deviceDir(input: OpenMeldPathResolutionInput = {}): string {\n return join(resolveOpenMeldRootDir(input), \"device\");\n}\n\nexport function deviceDaemonDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"daemon\");\n}\n\nexport function deviceSkillsDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"skills\");\n}\n\nexport function devicePreferencesPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"preferences.json\");\n}\n\nexport function deviceAgentRuntimePath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"agent-runtime.json\");\n}\n\nexport function deviceProvidersDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"providers\");\n}\n\nexport function deviceProviderDir(\n providerId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n deviceProvidersDir(input),\n normalizePathSegment(providerId, \"unknown\")\n );\n}\n\nexport function deviceProviderProfilesDir(\n providerId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceProviderDir(providerId, input), \"profiles\");\n}\n\nexport function deviceProviderProfileDir(\n providerId: string,\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n deviceProviderProfilesDir(providerId, input),\n normalizePathSegment(profileId, \"unknown\")\n );\n}\n\nexport function deviceOpenClawProfilesDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return deviceProviderProfilesDir(\"openclaw\", input);\n}\n\nexport function deviceOpenClawProfileDir(\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return deviceProviderProfileDir(\"openclaw\", profileId, input);\n}\n\nexport function deviceOpenClawProfileWorkspaceDir(\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceOpenClawProfileDir(profileId, input), \"workspace\");\n}\n\nexport function deviceOpenClawProfileBootstrapPath(\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceOpenClawProfileDir(profileId, input), \"bootstrap.json\");\n}\n\nexport function deviceSkillsStorePath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceSkillsDir(input), \"store.json\");\n}\n\nexport function deviceSkillsCustomTargetsPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceSkillsDir(input), \"custom-targets.json\");\n}\n\nexport function deviceSkillsInstallsPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceSkillsDir(input), \"installs.json\");\n}\n\nexport function legacyRuntimeConfigPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"config.json\");\n}\n\nexport function normalizeAccountHostKey(value: unknown): string {\n return normalizePathSegment(value, FALLBACK_ACCOUNT_HOST_KEY);\n}\n\nexport function normalizeAccountUserKey(value: unknown): string {\n return normalizePathSegment(value, FALLBACK_ACCOUNT_USER_KEY);\n}\n\nexport function normalizeAccountKey(\n input: Partial<OpenMeldAccountKey>\n): OpenMeldAccountKey {\n return {\n hostKey: normalizeAccountHostKey(input.hostKey),\n userKey: normalizeAccountUserKey(input.userKey),\n };\n}\n\nexport function accountDir(account: OpenMeldAccountKey): string {\n const normalized = normalizeAccountKey(account);\n return join(accountsDir(), normalized.hostKey, normalized.userKey);\n}\n\nexport function accountProfilesDir(account: OpenMeldAccountKey): string {\n // TODO(v-next): optional `index/profiles.json` for write-through + read-through\n // refresh cache when profile listing becomes a local performance bottleneck.\n return join(accountDir(account), \"profiles\");\n}\n\nexport function accountProfileDir(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n // `local-meta.json` is the profile-local device envelope; workspace is one\n // section within it.\n return join(\n accountProfilesDir(account),\n normalizeOpenMeldProfileId(openMeldProfileId)\n );\n}\n\nexport function accountProfileViewPath(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"view.json\");\n}\n\nexport function accountProfileLocalMetaPath(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"local-meta.json\");\n}\n\nexport function accountProfileWorkspacePath(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"workspace\");\n}\n\nexport function accountProfileSpaceCacheDir(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"space-cache\");\n}\n\nexport function legacyAccountProfileSpacesDir(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"spaces\");\n}\n\nexport function profileDir(openMeldProfileId: OpenMeldProfileId): string {\n return join(openMeldRootDir(), \"profiles\", openMeldProfileId);\n}\n\nexport function runtimeDir(input: OpenMeldPathResolutionInput = {}): string {\n return join(resolveOpenMeldRootDir(input), \"runtime\");\n}\n\nexport function runtimeLogsDir(): string {\n return join(runtimeDir(), \"logs\");\n}\n\nexport function sessionsDir(): string {\n return join(runtimeDir(), \"sessions\");\n}\n\nexport function systemDir(input: OpenMeldPathResolutionInput = {}): string {\n return join(resolveOpenMeldRootDir(input), \"system\");\n}\n\nexport function skillsDir(): string {\n return join(openMeldRootDir(), \"skills\");\n}\n\nexport function organizationSkillsDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"organization-skills\");\n}\n\nexport function organizationSkillReleaseDir(\n organizationId: string,\n skillId: string,\n releaseId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n organizationSkillsDir(input),\n requireOpaqueCachePathSegment(organizationId, \"organizationId\"),\n requireOpaqueCachePathSegment(skillId, \"skillId\"),\n requireOpaqueCachePathSegment(releaseId, \"releaseId\")\n );\n}\n\nexport function profileIdentityPath(\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(profileDir(openMeldProfileId), \"profile.json\");\n}\n\nexport function spacesDir(openMeldProfileId: OpenMeldProfileId): string {\n return join(profileDir(openMeldProfileId), \"spaces\");\n}\n\nexport function locksDir(\n openMeldProfileId: OpenMeldProfileId,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(runtimeDir(input), \"locks\", openMeldProfileId);\n}\n\nexport function profileViewPath(openMeldProfileId: OpenMeldProfileId): string {\n return join(profileDir(openMeldProfileId), \"view.json\");\n}\n\nfunction normalizePathSegment(value: unknown, fallback: string): string {\n const normalized = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if (!normalized) {\n return fallback;\n }\n\n const safe = normalized.replace(/[^a-z0-9._-]+/g, \"_\");\n if (!safe) {\n return fallback;\n }\n\n if (safe === \".\" || safe === \"..\") {\n return fallback;\n }\n\n return safe.slice(0, MAX_ACCOUNT_PATH_SEGMENT_LENGTH);\n}\n\nfunction requireOpaqueCachePathSegment(value: unknown, label: string): string {\n const normalized = String(value ?? \"\").trim();\n if (\n normalized.length === 0 ||\n normalized.length > 256 ||\n normalized === \".\" ||\n normalized === \"..\" ||\n !OPAQUE_CACHE_PATH_SEGMENT_RE.test(normalized)\n ) {\n throw new Error(`${label} is not safe for the Organization Skills cache`);\n }\n return normalized;\n}\n\nfunction resolveOpenMeldEnvPresetFromArgv(argv: string[]): OpenMeldEnvPreset {\n return (\n resolveKnownOpenMeldEnvPresetFromArgv(argv) ?? DEFAULT_OPENMELD_ENV_PRESET\n );\n}\n\nexport function resolveKnownOpenMeldEnvPresetFromArgv(\n argv: string[]\n): OpenMeldEnvPreset | null {\n const entryName = resolveOpenMeldCliEntryNameFromArgv(argv);\n if (!entryName) {\n return null;\n }\n return OPENMELD_ENV_PRESET_BY_ENTRY_NAME[entryName] ?? null;\n}\n\nexport function resolveOpenMeldCliEntryNameFromArgv(\n argv: string[]\n): OpenMeldCliEntryName | null {\n return resolveCliEntryName(argv[1]);\n}\n\nfunction resolveCliEntryName(\n value: string | undefined\n): OpenMeldCliEntryName | null {\n const raw = String(value ?? \"\").trim();\n if (!raw) {\n return null;\n }\n const parsed = parse(raw);\n const normalizedName = parsed.name.trim().toLowerCase();\n if (!normalizedName) {\n return null;\n }\n if (!isOpenMeldCliEntryName(normalizedName)) {\n return null;\n }\n return normalizedName;\n}\n\nfunction isOpenMeldCliEntryName(value: string): value is OpenMeldCliEntryName {\n return value in OPENMELD_ENV_PRESET_BY_ENTRY_NAME;\n}\n\nfunction normalizeOpenMeldEnvPreset(\n value: string | undefined\n): OpenMeldEnvPreset | null {\n const normalized = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if (\n normalized === \"prod\" ||\n normalized === \"dev-local\" ||\n normalized === \"canary\"\n ) {\n return normalized;\n }\n return null;\n}\n\nfunction resolveHomeDirectory(input: OpenMeldPathResolutionInput): string {\n if (input.homeDir) {\n return input.homeDir;\n }\n const env = input.env ?? process.env;\n const fromEnv = String(env.HOME ?? \"\").trim();\n if (fromEnv) {\n return fromEnv;\n }\n return homedir();\n}\n"],"mappings":";;;;;;AAkBA,MAAM,kCAAkC;AACxC,MAAM,+BAA+B;AACrC,MAAM,4BAA4B;AAClC,MAAM,4BAA4B;AAClC,MAAa,wBAAwB;AACrC,MAAM,8BAA8B;AACpC,MAAM,8BAAiD;AACvD,MAAM,sCAAsC;CAC1C,MAAM;CACN,aAAa;CACb,QAAQ;AACV;AACA,MAAM,oCAAoC;CACxC,UAAU;CACV,gBAAgB;CAChB,mBAAmB;AACrB;AAIA,SAAgB,2BAA2B,OAAmC;CAC5E,MAAM,MAAM,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CACrC,IAAI,IAAI,WAAW,GACjB,MAAM,IAAI,MAAM,+BAA+B;CAGjD,MAAM,OAAO,IAAI,QAAQ,qBAAqB,GAAG,CAAC,CAAC,YAAY;CAC/D,IAAI,CAAC,QAAQ,SAAS,OAAO,SAAS,MACpC,MAAM,IAAI,MAAM,8BAA8B;CAEhD,IAAI,KAAK,SAAS,iCAChB,MAAM,IAAI,MAAM,+BAA+B;CAEjD,OAAO;AACT;AAEA,SAAgB,yBACd,QAAqC,CAAC,GACnB;CAEnB,MAAM,UAAU,4BADJ,MAAM,OAAO,QAAQ,IAAA,CACc,4BAA4B;CAC3E,IAAI,SACF,OAAO;CAET,OAAO,iCAAiC,MAAM,QAAQ,QAAQ,IAAI;AACpE;AAEA,SAAgB,iCACd,QAAqC,CAAC,GACZ;CAE1B,OAAO,4BADK,MAAM,OAAO,QAAQ,IAAA,CACK,4BAA4B;AACpE;AAEA,SAAgB,kCACd,QACQ;CACR,OAAO,oCAAoC;AAC7C;AAEA,SAAgB,uBACd,QAAqC,CAAC,GAC9B;CACR,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,MAAM,UAAU,OAAO,IAAA,oBAA8B,EAAE,CAAC,CAAC,KAAK;CAC9D,IAAI,SACF,OAAO;CAET,MAAM,SAAS,yBAAyB,KAAK;CAC7C,OAAO,KACL,qBAAqB,KAAK,GAC1B,kCAAkC,MAAM,CAC1C;AACF;;;;AAKA,SAAgB,4BACd,QAAqC,CAAC,GACvB;CACf,IAAI,yBAAyB,KAAK,MAAM,aACtC,OAAO;CAET,MAAM,OAAO,QAAQ,uBAAuB,KAAK,CAAC;CAClD,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;AACpE;AAEA,SAAgB,qCACd,QAAqC,CAAC,GACT;CAC7B,MAAM,MAAM,EAAE,GAAI,MAAM,OAAO,QAAQ,IAAK;CAC5C,IAAI,4BAA4B,KAAK,GACnC,OAAO;EAAE,GAAG;EAAO;CAAI;CAEzB,OAAO,IAAI;CACX,OAAO;EACL,GAAG;EACH;CACF;AACF;AAEA,SAAgB,kBAA0B;CACxC,OAAO,uBAAuB;AAChC;;;;;;;AAQA,SAAgB,wBACd,QAAqC,CAAC,GAC7B;CACT,MAAM,mBAAmB,KACvB,qBAAqB,KAAK,GAC1B,oCAAoC,IACtC;CACA,OAAO,QAAQ,uBAAuB,KAAK,CAAC,MAAM,QAAQ,gBAAgB;AAC5E;AAEA,SAAgB,qBAA6B;CAC3C,MAAM,OAAO,gBAAgB;CAC7B,OAAO,KAAK,QAAQ,IAAI,GAAG,GAAG,SAAS,IAAI,EAAE,SAAS;AACxD;AAOA,SAAgB,4BAAoC;CAClD,OAAO,QAAQ,aAAa,UAAU,iBAAiB;AACzD;AAEA,SAAgB,oBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,UAAU;AACvD;AAEA,SAAgB,0BACd,SACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,oBAAoB,KAAK,GACzB,qBAAqB,SAAS,SAAS,CACzC;AACF;AAEA,SAAgB,iCACd,SACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,0BAA0B,SAAS,KAAK,GACxC,0BAA0B,CAC5B;AACF;AAEA,SAAgB,eACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,KAAK;AAClD;AAEA,SAAgB,0BACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,eAAe,KAAK,GAAG,0BAA0B,CAAC;AAChE;AAEA,SAAgB,cAAsB;CACpC,OAAO,KAAK,gBAAgB,GAAG,UAAU;AAC3C;AAEA,SAAgB,UAAU,QAAqC,CAAC,GAAW;CACzE,OAAO,KAAK,uBAAuB,KAAK,GAAG,QAAQ;AACrD;AAQA,SAAgB,gBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,QAAQ;AACxC;AAEA,SAAgB,sBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,kBAAkB;AAClD;AAEA,SAAgB,uBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,oBAAoB;AACpD;AAEA,SAAgB,mBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,WAAW;AAC3C;AAEA,SAAgB,kBACd,YACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,mBAAmB,KAAK,GACxB,qBAAqB,YAAY,SAAS,CAC5C;AACF;AAEA,SAAgB,0BACd,YACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,kBAAkB,YAAY,KAAK,GAAG,UAAU;AAC9D;AAEA,SAAgB,yBACd,YACA,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,0BAA0B,YAAY,KAAK,GAC3C,qBAAqB,WAAW,SAAS,CAC3C;AACF;AAQA,SAAgB,yBACd,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,yBAAyB,YAAY,WAAW,KAAK;AAC9D;AAEA,SAAgB,kCACd,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,yBAAyB,WAAW,KAAK,GAAG,WAAW;AACrE;AAEA,SAAgB,mCACd,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,yBAAyB,WAAW,KAAK,GAAG,gBAAgB;AAC1E;AAEA,SAAgB,sBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,gBAAgB,KAAK,GAAG,YAAY;AAClD;AAEA,SAAgB,8BACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,gBAAgB,KAAK,GAAG,qBAAqB;AAC3D;AAEA,SAAgB,yBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,gBAAgB,KAAK,GAAG,eAAe;AACrD;AAEA,SAAgB,wBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,aAAa;AAC1D;AAEA,SAAgB,wBAAwB,OAAwB;CAC9D,OAAO,qBAAqB,OAAO,yBAAyB;AAC9D;AAEA,SAAgB,wBAAwB,OAAwB;CAC9D,OAAO,qBAAqB,OAAO,yBAAyB;AAC9D;AAEA,SAAgB,oBACd,OACoB;CACpB,OAAO;EACL,SAAS,wBAAwB,MAAM,OAAO;EAC9C,SAAS,wBAAwB,MAAM,OAAO;CAChD;AACF;AAEA,SAAgB,WAAW,SAAqC;CAC9D,MAAM,aAAa,oBAAoB,OAAO;CAC9C,OAAO,KAAK,YAAY,GAAG,WAAW,SAAS,WAAW,OAAO;AACnE;AAEA,SAAgB,mBAAmB,SAAqC;CAGtE,OAAO,KAAK,WAAW,OAAO,GAAG,UAAU;AAC7C;AAEA,SAAgB,kBACd,SACA,mBACQ;CAGR,OAAO,KACL,mBAAmB,OAAO,GAC1B,2BAA2B,iBAAiB,CAC9C;AACF;AAEA,SAAgB,uBACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,WAAW;AACxE;AAEA,SAAgB,4BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,iBAAiB;AAC9E;AAEA,SAAgB,4BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,WAAW;AACxE;AAEA,SAAgB,4BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,aAAa;AAC1E;AAEA,SAAgB,8BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,QAAQ;AACrE;AAEA,SAAgB,WAAW,mBAA8C;CACvE,OAAO,KAAK,gBAAgB,GAAG,YAAY,iBAAiB;AAC9D;AAEA,SAAgB,WAAW,QAAqC,CAAC,GAAW;CAC1E,OAAO,KAAK,uBAAuB,KAAK,GAAG,SAAS;AACtD;AAEA,SAAgB,iBAAyB;CACvC,OAAO,KAAK,WAAW,GAAG,MAAM;AAClC;AAEA,SAAgB,cAAsB;CACpC,OAAO,KAAK,WAAW,GAAG,UAAU;AACtC;AAEA,SAAgB,UAAU,QAAqC,CAAC,GAAW;CACzE,OAAO,KAAK,uBAAuB,KAAK,GAAG,QAAQ;AACrD;AAEA,SAAgB,YAAoB;CAClC,OAAO,KAAK,gBAAgB,GAAG,QAAQ;AACzC;AAEA,SAAgB,sBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,qBAAqB;AAClE;AAEA,SAAgB,4BACd,gBACA,SACA,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,sBAAsB,KAAK,GAC3B,8BAA8B,gBAAgB,gBAAgB,GAC9D,8BAA8B,SAAS,SAAS,GAChD,8BAA8B,WAAW,WAAW,CACtD;AACF;AAQA,SAAgB,UAAU,mBAA8C;CACtE,OAAO,KAAK,WAAW,iBAAiB,GAAG,QAAQ;AACrD;AAEA,SAAgB,SACd,mBACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,WAAW,KAAK,GAAG,SAAS,iBAAiB;AAC3D;AAEA,SAAgB,gBAAgB,mBAA8C;CAC5E,OAAO,KAAK,WAAW,iBAAiB,GAAG,WAAW;AACxD;AAEA,SAAS,qBAAqB,OAAgB,UAA0B;CACtE,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CACnC,KAAK,CAAC,CACN,YAAY;CACf,IAAI,CAAC,YACH,OAAO;CAGT,MAAM,OAAO,WAAW,QAAQ,kBAAkB,GAAG;CACrD,IAAI,CAAC,MACH,OAAO;CAGT,IAAI,SAAS,OAAO,SAAS,MAC3B,OAAO;CAGT,OAAO,KAAK,MAAM,GAAG,+BAA+B;AACtD;AAEA,SAAS,8BAA8B,OAAgB,OAAuB;CAC5E,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CAC5C,IACE,WAAW,WAAW,KACtB,WAAW,SAAS,OACpB,eAAe,OACf,eAAe,QACf,CAAC,6BAA6B,KAAK,UAAU,GAE7C,MAAM,IAAI,MAAM,GAAG,MAAM,+CAA+C;CAE1E,OAAO;AACT;AAEA,SAAS,iCAAiC,MAAmC;CAC3E,OACE,sCAAsC,IAAI,KAAK;AAEnD;AAEA,SAAgB,sCACd,MAC0B;CAC1B,MAAM,YAAY,oCAAoC,IAAI;CAC1D,IAAI,CAAC,WACH,OAAO;CAET,OAAO,kCAAkC,cAAc;AACzD;AAEA,SAAgB,oCACd,MAC6B;CAC7B,OAAO,oBAAoB,KAAK,EAAE;AACpC;AAEA,SAAS,oBACP,OAC6B;CAC7B,MAAM,MAAM,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CACrC,IAAI,CAAC,KACH,OAAO;CAGT,MAAM,iBADS,MAAM,GACO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,YAAY;CACtD,IAAI,CAAC,gBACH,OAAO;CAET,IAAI,CAAC,uBAAuB,cAAc,GACxC,OAAO;CAET,OAAO;AACT;AAEA,SAAS,uBAAuB,OAA8C;CAC5E,OAAO,SAAS;AAClB;AAEA,SAAS,2BACP,OAC0B;CAC1B,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CACnC,KAAK,CAAC,CACN,YAAY;CACf,IACE,eAAe,UACf,eAAe,eACf,eAAe,UAEf,OAAO;CAET,OAAO;AACT;AAEA,SAAS,qBAAqB,OAA4C;CACxE,IAAI,MAAM,SACR,OAAO,MAAM;CAEf,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,MAAM,UAAU,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK;CAC5C,IAAI,SACF,OAAO;CAET,OAAO,QAAQ;AACjB"}