openmeld 0.3.231 → 0.3.233

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 (144) hide show
  1. package/dist/{add-me-membership-0KyMk1wi.js → add-me-membership-_O3IzRLn.js} +2 -2
  2. package/dist/{add-me-membership-0KyMk1wi.js.map → add-me-membership-_O3IzRLn.js.map} +1 -1
  3. package/dist/{agents-Bkx6ldpV.js → agents-B5E7c7sQ.js} +11 -11
  4. package/dist/{agents-Bkx6ldpV.js.map → agents-B5E7c7sQ.js.map} +1 -1
  5. package/dist/{api-client-foundation-d4E5XWdJ.js → api-client-foundation-1p1VVFJ_.js} +1 -1
  6. package/dist/{api-client-foundation-DgTXf3Gb.js → api-client-foundation-C-RPnq_p.js} +3 -3
  7. package/dist/{api-client-foundation-DgTXf3Gb.js.map → api-client-foundation-C-RPnq_p.js.map} +1 -1
  8. package/dist/auth-session-CmjjkLiB.js +4 -0
  9. package/dist/{auth-session-pLaN5cnC.js → auth-session-iXCJO5oB.js} +6 -6
  10. package/dist/{auth-session-pLaN5cnC.js.map → auth-session-iXCJO5oB.js.map} +1 -1
  11. package/dist/auth-url-6Bb6YdNm.js +24 -0
  12. package/dist/auth-url-6Bb6YdNm.js.map +1 -0
  13. package/dist/{base-url-eck31vC8.js → base-url-0AoeTi3w.js} +3 -3
  14. package/dist/{base-url-eck31vC8.js.map → base-url-0AoeTi3w.js.map} +1 -1
  15. package/dist/{base-url-B8eWb2md.js → base-url-Bdjp-5vy.js} +1 -1
  16. package/dist/{channel-DppbHxHw.js → channel-BciBrA3Y.js} +25 -5
  17. package/dist/channel-BciBrA3Y.js.map +1 -0
  18. package/dist/{cli-binary-manifest-Bjf6T7Ef.js → cli-binary-manifest-ETxqCzfS.js} +8 -1
  19. package/dist/cli-binary-manifest-ETxqCzfS.js.map +1 -0
  20. package/dist/{command-CBWv24uj.js → command-D0pcAIoE.js} +19 -19
  21. package/dist/{command-CBWv24uj.js.map → command-D0pcAIoE.js.map} +1 -1
  22. package/dist/{computer-connection-DMkamVpB.js → computer-connection-CHP1-0rK.js} +2 -2
  23. package/dist/{computer-connection-DMkamVpB.js.map → computer-connection-CHP1-0rK.js.map} +1 -1
  24. package/dist/{computer-connection-review-BSPMGVhN.js → computer-connection-review-dHotFqmD.js} +6 -6
  25. package/dist/{computer-connection-review-BSPMGVhN.js.map → computer-connection-review-dHotFqmD.js.map} +1 -1
  26. package/dist/{computer-disconnect-BQ_MDeeA.js → computer-disconnect-B2DLDxWx.js} +9 -9
  27. package/dist/{computer-disconnect-BQ_MDeeA.js.map → computer-disconnect-B2DLDxWx.js.map} +1 -1
  28. package/dist/{computer-setup-continuation-Cd293Yzi.js → computer-setup-continuation-Cv_c1B-7.js} +3 -3
  29. package/dist/{computer-setup-continuation-Cd293Yzi.js.map → computer-setup-continuation-Cv_c1B-7.js.map} +1 -1
  30. package/dist/{context-qbQXVLF5.js → context-BnhlFS8m.js} +5 -5
  31. package/dist/{context-qbQXVLF5.js.map → context-BnhlFS8m.js.map} +1 -1
  32. package/dist/{control-plane-rTE2rHZ5.js → control-plane-QqGL-jtT.js} +2 -2
  33. package/dist/{control-plane-rTE2rHZ5.js.map → control-plane-QqGL-jtT.js.map} +1 -1
  34. package/dist/{daemon-device-id-B6iDyQEs.js → daemon-device-id-DbSIqHoZ.js} +8 -8
  35. package/dist/{daemon-device-id-B6iDyQEs.js.map → daemon-device-id-DbSIqHoZ.js.map} +1 -1
  36. package/dist/{daemon-lifecycle-journal-DrwEygzu.js → daemon-lifecycle-journal-DsVVvKJe.js} +10 -10
  37. package/dist/{daemon-lifecycle-journal-DrwEygzu.js.map → daemon-lifecycle-journal-DsVVvKJe.js.map} +1 -1
  38. package/dist/{daemon-runtime-lease-C1wkT4Bi.js → daemon-runtime-lease-Bv6vhqOe.js} +2 -2
  39. package/dist/{daemon-runtime-lease-C1wkT4Bi.js.map → daemon-runtime-lease-Bv6vhqOe.js.map} +1 -1
  40. package/dist/{daemon-runtime-lease-DAQyRUc5.js → daemon-runtime-lease-ZjP0urJt.js} +1 -1
  41. package/dist/{daemon-service-contract-DhEfbzHt.js → daemon-service-contract-COPKbCy_.js} +4 -4
  42. package/dist/{daemon-service-contract-DhEfbzHt.js.map → daemon-service-contract-COPKbCy_.js.map} +1 -1
  43. package/dist/{daemon-service-manager-CRnFxPKA.js → daemon-service-manager-BXAp21GH.js} +6 -6
  44. package/dist/{daemon-service-manager-CRnFxPKA.js.map → daemon-service-manager-BXAp21GH.js.map} +1 -1
  45. package/dist/{daemon-service-manager-l0unaDGa.js → daemon-service-manager-C_ny0JhB.js} +1 -1
  46. package/dist/{daemon-service-runtime-B4nWB2Qx.js → daemon-service-runtime-DZI6Ke3_.js} +16 -15
  47. package/dist/{daemon-service-runtime-B4nWB2Qx.js.map → daemon-service-runtime-DZI6Ke3_.js.map} +1 -1
  48. package/dist/{daemon-service-update-coordinator-C8cW7Vn_.js → daemon-service-update-coordinator-BgVBlJ4d.js} +29 -24
  49. package/dist/daemon-service-update-coordinator-BgVBlJ4d.js.map +1 -0
  50. package/dist/{daemon-state-B6G5xe7f.js → daemon-state-Dte9re5V.js} +4 -4
  51. package/dist/{daemon-state-B6G5xe7f.js.map → daemon-state-Dte9re5V.js.map} +1 -1
  52. package/dist/{daemon-frame-transport-xQnNyg6E.js → dispatch-owned-runtime-BeIQetEt.js} +550 -53
  53. package/dist/dispatch-owned-runtime-BeIQetEt.js.map +1 -0
  54. package/dist/{dist-CAypwFRu.js → dist-BgYBvEBB.js} +206 -190
  55. package/dist/dist-BgYBvEBB.js.map +1 -0
  56. package/dist/{dist-DFhd6JmQ.js → dist-DQS0XYkb.js} +3 -3
  57. package/dist/{dist-DFhd6JmQ.js.map → dist-DQS0XYkb.js.map} +1 -1
  58. package/dist/{dist-olOaAWkl.js → dist-z72xYz5Z.js} +1 -1
  59. package/dist/{elapsed-time-COv3bjEl.js → elapsed-time-C7S-6bWV.js} +6 -6
  60. package/dist/{elapsed-time-COv3bjEl.js.map → elapsed-time-C7S-6bWV.js.map} +1 -1
  61. package/dist/{entry-DIjUKIep.js → entry-CX24qHnm.js} +81 -17
  62. package/dist/entry-CX24qHnm.js.map +1 -0
  63. package/dist/{installation-inventory-DllgoKT1.js → installation-inventory-B3mwQFEA.js} +5 -5
  64. package/dist/{installation-inventory-DllgoKT1.js.map → installation-inventory-B3mwQFEA.js.map} +1 -1
  65. package/dist/{installer-Sc79LhuA.js → installer-DnIJ4y3l.js} +2 -2
  66. package/dist/{installer-Sc79LhuA.js.map → installer-DnIJ4y3l.js.map} +1 -1
  67. package/dist/{local-components-DleLEzSU.js → local-components-DJiMS67S.js} +36 -3
  68. package/dist/local-components-DJiMS67S.js.map +1 -0
  69. package/dist/{lock-CMH9eoS7.js → lock-BMI00i2F.js} +2 -2
  70. package/dist/{lock-CMH9eoS7.js.map → lock-BMI00i2F.js.map} +1 -1
  71. package/dist/meta-api-DgHkiIdr.js +371 -0
  72. package/dist/meta-api-DgHkiIdr.js.map +1 -0
  73. package/dist/openmeld-dev.js +17 -9
  74. package/dist/openmeld-dev.js.map +1 -1
  75. package/dist/{openmeld-environment-target-Cw3V0WnE.js → openmeld-environment-target-BgYR6ozy.js} +8 -25
  76. package/dist/openmeld-environment-target-BgYR6ozy.js.map +1 -0
  77. package/dist/{openmeld-BUYFXSyY.js → openmeld-kYp99hOl.js} +41 -39
  78. package/dist/{openmeld-BUYFXSyY.js.map → openmeld-kYp99hOl.js.map} +1 -1
  79. package/dist/{openmeld-maintenance-worker-Br6WIhhe.js → openmeld-maintenance-worker-BqU1Asrm.js} +14 -14
  80. package/dist/{openmeld-maintenance-worker-Br6WIhhe.js.map → openmeld-maintenance-worker-BqU1Asrm.js.map} +1 -1
  81. package/dist/{openmeld-tools-update-join-B1l6RER6.js → openmeld-tools-update-join-BKJnGR5h.js} +4 -4
  82. package/dist/{openmeld-tools-update-join-B1l6RER6.js.map → openmeld-tools-update-join-BKJnGR5h.js.map} +1 -1
  83. package/dist/{openmeld-tools-update-process-frame-DbEZ3fEh.js → openmeld-tools-update-process-frame-Csy2XKUf.js} +1 -1
  84. package/dist/{openmeld-tools-update-process-frame-BtFKp70p.js → openmeld-tools-update-process-frame-YLOS82E3.js} +2 -2
  85. package/dist/{openmeld-tools-update-process-frame-BtFKp70p.js.map → openmeld-tools-update-process-frame-YLOS82E3.js.map} +1 -1
  86. package/dist/openmeld.js +6 -6
  87. package/dist/{paths-DSkUuEu3.js → paths-De9xdA2h.js} +11 -6
  88. package/dist/paths-De9xdA2h.js.map +1 -0
  89. package/dist/{prepare-provider-runtime-DfsSj_N_.js → prepare-provider-runtime-CD6XRt7X.js} +385 -181
  90. package/dist/prepare-provider-runtime-CD6XRt7X.js.map +1 -0
  91. package/dist/{prepare-session-executor-CrYpWljb.js → prepare-session-executor-DY2s4FuY.js} +26 -26
  92. package/dist/{prepare-session-executor-CrYpWljb.js.map → prepare-session-executor-DY2s4FuY.js.map} +1 -1
  93. package/dist/{process-channel-DmTb_kO4.js → process-channel-CzgOWiuh.js} +2 -2
  94. package/dist/{process-channel-DmTb_kO4.js.map → process-channel-CzgOWiuh.js.map} +1 -1
  95. package/dist/{published-production-safety-CgXxtdMK.js → published-production-safety-zANGAGDI.js} +5 -6
  96. package/dist/published-production-safety-zANGAGDI.js.map +1 -0
  97. package/dist/{runtime-ZLBVtFFY.js → runtime-Br4Ga0rJ.js} +77 -23
  98. package/dist/runtime-Br4Ga0rJ.js.map +1 -0
  99. package/dist/{runtime-agent-controller-reporting-submission-CbaUsNTF.js → runtime-agent-controller-reporting-submission-CQjbBiHh.js} +146 -37
  100. package/dist/runtime-agent-controller-reporting-submission-CQjbBiHh.js.map +1 -0
  101. package/dist/{runtime-reporting-health-state-DOg9iwwO.js → runtime-reporting-health-state-a1FUE1S-.js} +120 -25
  102. package/dist/runtime-reporting-health-state-a1FUE1S-.js.map +1 -0
  103. package/dist/{runtime-transport-D4x8_AmR.js → runtime-transport-D4CVffnp.js} +88 -8
  104. package/dist/runtime-transport-D4CVffnp.js.map +1 -0
  105. package/dist/{service-B9y1SQlB.js → service-D9QVc4_y.js} +99 -30
  106. package/dist/service-D9QVc4_y.js.map +1 -0
  107. package/dist/{service-account-authorization-Di59Cjth.js → service-account-authorization-DLhUgGDb.js} +6 -6
  108. package/dist/{service-account-authorization-Di59Cjth.js.map → service-account-authorization-DLhUgGDb.js.map} +1 -1
  109. package/dist/{service-account-control-DALO1USM.js → service-account-control-DIdQILmo.js} +13 -13
  110. package/dist/{service-account-control-DALO1USM.js.map → service-account-control-DIdQILmo.js.map} +1 -1
  111. package/dist/{service-control-capabilities-B9ZxDPOJ.js → service-control-capabilities-BvHU_NcX.js} +1 -1
  112. package/dist/{service-control-capabilities-CKwU9Er5.js → service-control-capabilities-CGv5Cuxo.js} +5 -5
  113. package/dist/{service-control-capabilities-CKwU9Er5.js.map → service-control-capabilities-CGv5Cuxo.js.map} +1 -1
  114. package/dist/{state-CdSbKM0J.js → state-AWe5DSV8.js} +3 -3
  115. package/dist/{state-CdSbKM0J.js.map → state-AWe5DSV8.js.map} +1 -1
  116. package/dist/upgrade-CLnZ4WBF.js +4 -0
  117. package/dist/{upgrade-DLJJlkbf.js → upgrade-CcnlL7FH.js} +9 -9
  118. package/dist/{upgrade-DLJJlkbf.js.map → upgrade-CcnlL7FH.js.map} +1 -1
  119. package/dist/{windows-preview-channel-DPrYuLyY.js → windows-preview-channel-BPhfSwji.js} +2 -2
  120. package/dist/{windows-preview-channel-DPrYuLyY.js.map → windows-preview-channel-BPhfSwji.js.map} +1 -1
  121. package/dist/{windows-user-task-BR-WB7hr.js → windows-user-task-CTsMnmD4.js} +3 -3
  122. package/dist/{windows-user-task-BR-WB7hr.js.map → windows-user-task-CTsMnmD4.js.map} +1 -1
  123. package/dist/{windows-user-task-m9eMEUEq.js → windows-user-task-DnxKO3oB.js} +1 -1
  124. package/package.json +10 -10
  125. package/dist/auth-session-DExyUwLo.js +0 -4
  126. package/dist/channel-DppbHxHw.js.map +0 -1
  127. package/dist/cli-binary-manifest-Bjf6T7Ef.js.map +0 -1
  128. package/dist/daemon-frame-transport-xQnNyg6E.js.map +0 -1
  129. package/dist/daemon-service-update-coordinator-C8cW7Vn_.js.map +0 -1
  130. package/dist/dist-CAypwFRu.js.map +0 -1
  131. package/dist/entry-DIjUKIep.js.map +0 -1
  132. package/dist/local-components-DleLEzSU.js.map +0 -1
  133. package/dist/meta-api-CEw8eOeN.js +0 -845
  134. package/dist/meta-api-CEw8eOeN.js.map +0 -1
  135. package/dist/openmeld-environment-target-Cw3V0WnE.js.map +0 -1
  136. package/dist/paths-DSkUuEu3.js.map +0 -1
  137. package/dist/prepare-provider-runtime-DfsSj_N_.js.map +0 -1
  138. package/dist/published-production-safety-CgXxtdMK.js.map +0 -1
  139. package/dist/runtime-ZLBVtFFY.js.map +0 -1
  140. package/dist/runtime-agent-controller-reporting-submission-CbaUsNTF.js.map +0 -1
  141. package/dist/runtime-reporting-health-state-DOg9iwwO.js.map +0 -1
  142. package/dist/runtime-transport-D4x8_AmR.js.map +0 -1
  143. package/dist/service-B9y1SQlB.js.map +0 -1
  144. package/dist/upgrade-BFWUxFpJ.js +0 -4
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-DfsSj_N_.js";
4
- import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-CdSbKM0J.js";
5
- import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-B4nWB2Qx.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-C8cW7Vn_.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-DrwEygzu.js";
12
- import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-CRnFxPKA.js";
13
- import { s as resolveTrackedInstallTargets } from "./installation-inventory-DllgoKT1.js";
14
- import { t as installSkillsToTargets } from "./installer-Sc79LhuA.js";
3
+ import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-CD6XRt7X.js";
4
+ import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-AWe5DSV8.js";
5
+ import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-DZI6Ke3_.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-BgVBlJ4d.js";
7
+ import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-BMI00i2F.js";
8
+ import { g as getConfiguredSkillsConfig } from "./base-url-0AoeTi3w.js";
9
+ import { W as withDaemonServiceReconcileLock } from "./daemon-state-Dte9re5V.js";
10
+ import { i as readDaemonServiceContract } from "./daemon-service-contract-COPKbCy_.js";
11
+ import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-DsVVvKJe.js";
12
+ import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-BXAp21GH.js";
13
+ import { s as resolveTrackedInstallTargets } from "./installation-inventory-B3mwQFEA.js";
14
+ import { t as installSkillsToTargets } from "./installer-DnIJ4y3l.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-Cd293Yzi.js");
79
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-Cv_c1B-7.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-Br6WIhhe.js.map
108
+ //# sourceMappingURL=openmeld-maintenance-worker-BqU1Asrm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-Br6WIhhe.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-BqU1Asrm.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-B4nWB2Qx.js";
4
- import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-C8cW7Vn_.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-COv3bjEl.js";
3
+ import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-DZI6Ke3_.js";
4
+ import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BgVBlJ4d.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-C7S-6bWV.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;
@@ -61,4 +61,4 @@ async function waitForExternalOpenMeldToolsUpdate(input = {}) {
61
61
  //#endregion
62
62
  export { waitForExternalOpenMeldToolsUpdate as n, waitForOpenMeldToolsUpdateCompletion as r, resolveExternalOpenMeldToolsUpdate as t };
63
63
 
64
- //# sourceMappingURL=openmeld-tools-update-join-B1l6RER6.js.map
64
+ //# sourceMappingURL=openmeld-tools-update-join-BKJnGR5h.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-B1l6RER6.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 unclaimedTimeoutMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n let unclaimedSince: number | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (input.unclaimedTimeoutMs !== undefined) {\n const pending = await readPendingOpenMeldToolsUpdateAttempt(input);\n if (\n pending?.operation.operationId === operation.operationId &&\n pending.attempts === 0\n ) {\n unclaimedSince ??= Date.now();\n if (Date.now() - unclaimedSince >= input.unclaimedTimeoutMs) {\n throw new Error(\n \"OpenMeld's background updater did not start. Run openmeld doctor to check the background service, then try setup again.\"\n );\n }\n } else {\n unclaimedSince = null;\n }\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,QAQI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,IAAI,iBAAgC;CACpC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,MAAM,uBAAuB,KAAA,GAAW;GAC1C,MAAM,UAAU,MAAM,sCAAsC,KAAK;GACjE,IACE,SAAS,UAAU,gBAAgB,UAAU,eAC7C,QAAQ,aAAa,GACrB;IACA,mBAAmB,KAAK,IAAI;IAC5B,IAAI,KAAK,IAAI,IAAI,kBAAkB,MAAM,oBACvC,MAAM,IAAI,MACR,yHACF;GAEJ,OACE,iBAAiB;EAErB;EACA,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-BKJnGR5h.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 unclaimedTimeoutMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n let unclaimedSince: number | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (input.unclaimedTimeoutMs !== undefined) {\n const pending = await readPendingOpenMeldToolsUpdateAttempt(input);\n if (\n pending?.operation.operationId === operation.operationId &&\n pending.attempts === 0\n ) {\n unclaimedSince ??= Date.now();\n if (Date.now() - unclaimedSince >= input.unclaimedTimeoutMs) {\n throw new Error(\n \"OpenMeld's background updater did not start. Run openmeld doctor to check the background service, then try setup again.\"\n );\n }\n } else {\n unclaimedSince = null;\n }\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,QAQI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,IAAI,iBAAgC;CACpC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,MAAM,uBAAuB,KAAA,GAAW;GAC1C,MAAM,UAAU,MAAM,sCAAsC,KAAK;GACjE,IACE,SAAS,UAAU,gBAAgB,UAAU,eAC7C,QAAQ,aAAa,GACrB;IACA,mBAAmB,KAAK,IAAI;IAC5B,IAAI,KAAK,IAAI,IAAI,kBAAkB,MAAM,oBACvC,MAAM,IAAI,MACR,yHACF;GAEJ,OACE,iBAAiB;EAErB;EACA,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,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as emitOpenMeldToolsUpdateFailureFrame } from "./openmeld-tools-update-process-frame-BtFKp70p.js";
3
+ import { n as emitOpenMeldToolsUpdateFailureFrame } from "./openmeld-tools-update-process-frame-YLOS82E3.js";
4
4
  export { emitOpenMeldToolsUpdateFailureFrame };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { S as openMeldToolsUpdateProcessFailureFrameSchema, t as OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS, y as openMeldToolsUpdateFailureCodeSchema } from "./local-components-DleLEzSU.js";
3
+ import { C as openMeldToolsUpdateProcessFailureFrameSchema, b as openMeldToolsUpdateFailureCodeSchema, t as OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS } from "./local-components-DJiMS67S.js";
4
4
  import { n as toErrorMessage } from "./dist-BLuEEVHh.js";
5
5
  //#region src/local-service/maintenance/openmeld-tools-update-failure.ts
6
6
  const PERSISTED_FAILURE_PREFIX = "openmeld.tools.update.failure=";
@@ -90,4 +90,4 @@ function truncateText(value, maxChars, side = "head") {
90
90
  //#endregion
91
91
  export { encodePersistedOpenMeldToolsUpdateFailure as a, withOpenMeldToolsUpdateFailure as c, OpenMeldToolsUpdateFailureError as i, emitOpenMeldToolsUpdateFailureFrame as n, resolveOpenMeldToolsUpdateFailure as o, parseOpenMeldToolsUpdateFailureFrame as r, resolvePersistedOpenMeldToolsUpdateFailure as s, appendBoundedOpenMeldToolsUpdateProcessOutput as t };
92
92
 
93
- //# sourceMappingURL=openmeld-tools-update-process-frame-BtFKp70p.js.map
93
+ //# sourceMappingURL=openmeld-tools-update-process-frame-YLOS82E3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-process-frame-BtFKp70p.js","names":["LINE_SPLIT_RE"],"sources":["../src/local-service/maintenance/openmeld-tools-update-failure.ts","../src/local-service/maintenance/openmeld-tools-update-process-frame.ts"],"sourcesContent":["import { openMeldToolsUpdateFailureCodeSchema } from \"@openmeld/schemas\";\nimport type { OpenMeldToolsUpdateFailureCode } from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\n\nconst PERSISTED_FAILURE_PREFIX = \"openmeld.tools.update.failure=\";\nconst INTERNAL_FAILURE_PREFIX = \"openmeld.tools.update.\";\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport class OpenMeldToolsUpdateFailureError extends Error {\n readonly failureCode: OpenMeldToolsUpdateFailureCode;\n\n constructor(input: {\n cause?: unknown;\n failureCode: OpenMeldToolsUpdateFailureCode;\n message: string;\n }) {\n super(\n input.message,\n input.cause === undefined ? undefined : { cause: input.cause }\n );\n this.name = \"OpenMeldToolsUpdateFailureError\";\n this.failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n }\n}\n\nexport function withOpenMeldToolsUpdateFailure(\n error: unknown,\n fallbackCode: OpenMeldToolsUpdateFailureCode\n): OpenMeldToolsUpdateFailureError {\n const existing = resolveOpenMeldToolsUpdateFailure(error);\n if (error instanceof OpenMeldToolsUpdateFailureError && existing) {\n return error;\n }\n return new OpenMeldToolsUpdateFailureError({\n cause: error,\n failureCode: existing ?? fallbackCode,\n message: toErrorMessage(error),\n });\n}\n\nexport function resolveOpenMeldToolsUpdateFailure(\n error: unknown\n): OpenMeldToolsUpdateFailureCode | null {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n const direct = openMeldToolsUpdateFailureCodeSchema.safeParse(\n (current as { failureCode?: unknown }).failureCode\n );\n if (direct.success) {\n return direct.data;\n }\n const internalCode = (current as { code?: unknown }).code;\n if (typeof internalCode === \"string\") {\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n internalCode.startsWith(INTERNAL_FAILURE_PREFIX)\n ? `cli.update.${internalCode.slice(INTERNAL_FAILURE_PREFIX.length)}`\n : internalCode\n );\n if (parsed.success) {\n return parsed.data;\n }\n }\n current = (current as { cause?: unknown }).cause;\n }\n return null;\n}\n\nexport function encodePersistedOpenMeldToolsUpdateFailure(input: {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n}): string {\n const failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n const detail = input.detail.trim();\n return `${PERSISTED_FAILURE_PREFIX}${failureCode}${\n detail ? `\\n${detail}` : \"\"\n }`;\n}\n\nexport function resolvePersistedOpenMeldToolsUpdateFailure(\n errorMessage: string | null\n): OpenMeldToolsUpdateFailureCode | null {\n if (!errorMessage?.startsWith(PERSISTED_FAILURE_PREFIX)) {\n return null;\n }\n const firstLine = errorMessage.split(LINE_SPLIT_RE, 1)[0] ?? \"\";\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n firstLine.slice(PERSISTED_FAILURE_PREFIX.length)\n );\n return parsed.success ? parsed.data : null;\n}\n","import {\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS,\n openMeldToolsUpdateProcessFailureFrameSchema,\n} from \"@openmeld/schemas\";\nimport type {\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateProcessFailureFrame,\n} from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\nimport { resolveOpenMeldToolsUpdateFailure } from \"./openmeld-tools-update-failure\";\n\nconst FAILURE_FRAME_OUTPUT_MAX_CHARS = 64 * 1024;\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport type OpenMeldToolsUpdateProcessFailure = {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n};\n\nexport function emitOpenMeldToolsUpdateFailureFrame(error: unknown): void {\n const detail = truncateText(\n toErrorMessage(error),\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS\n );\n const frame: OpenMeldToolsUpdateProcessFailureFrame =\n openMeldToolsUpdateProcessFailureFrameSchema.parse({\n detail: detail || \"OpenMeld update process failed.\",\n failureCode:\n resolveOpenMeldToolsUpdateFailure(error) ?? \"cli.update.failed\",\n schema: \"openmeld-tools-update-process-failure-v1\",\n v: 1,\n });\n // The leading newline keeps the frame parseable even when prior presenter\n // output ended mid-line.\n process.stdout.write(`\\n${JSON.stringify(frame)}\\n`);\n}\n\nexport function appendBoundedOpenMeldToolsUpdateProcessOutput(\n current: string,\n chunk: string\n): string {\n return truncateText(\n `${current}${chunk}`,\n FAILURE_FRAME_OUTPUT_MAX_CHARS,\n \"tail\"\n );\n}\n\nexport function parseOpenMeldToolsUpdateFailureFrame(\n output: string\n): OpenMeldToolsUpdateProcessFailure | null {\n const lines = output.split(LINE_SPLIT_RE);\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n const line = lines[index]?.trim();\n if (!line?.startsWith(\"{\")) {\n continue;\n }\n try {\n const parsed = openMeldToolsUpdateProcessFailureFrameSchema.safeParse(\n JSON.parse(line) as unknown\n );\n if (parsed.success) {\n return {\n detail: parsed.data.detail,\n failureCode: parsed.data.failureCode,\n };\n }\n } catch {\n // Other agent-view output and truncated lines are not update frames.\n }\n }\n return null;\n}\n\nfunction truncateText(\n value: string,\n maxChars: number,\n side: \"head\" | \"tail\" = \"head\"\n): string {\n if (value.length <= maxChars) {\n return value;\n }\n if (side === \"tail\") {\n return value.slice(-maxChars);\n }\n const suffix = \"…\";\n return value.slice(0, Math.max(0, maxChars - suffix.length)) + suffix;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openmeld-tools-update-process-frame-YLOS82E3.js","names":["LINE_SPLIT_RE"],"sources":["../src/local-service/maintenance/openmeld-tools-update-failure.ts","../src/local-service/maintenance/openmeld-tools-update-process-frame.ts"],"sourcesContent":["import { openMeldToolsUpdateFailureCodeSchema } from \"@openmeld/schemas\";\nimport type { OpenMeldToolsUpdateFailureCode } from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\n\nconst PERSISTED_FAILURE_PREFIX = \"openmeld.tools.update.failure=\";\nconst INTERNAL_FAILURE_PREFIX = \"openmeld.tools.update.\";\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport class OpenMeldToolsUpdateFailureError extends Error {\n readonly failureCode: OpenMeldToolsUpdateFailureCode;\n\n constructor(input: {\n cause?: unknown;\n failureCode: OpenMeldToolsUpdateFailureCode;\n message: string;\n }) {\n super(\n input.message,\n input.cause === undefined ? undefined : { cause: input.cause }\n );\n this.name = \"OpenMeldToolsUpdateFailureError\";\n this.failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n }\n}\n\nexport function withOpenMeldToolsUpdateFailure(\n error: unknown,\n fallbackCode: OpenMeldToolsUpdateFailureCode\n): OpenMeldToolsUpdateFailureError {\n const existing = resolveOpenMeldToolsUpdateFailure(error);\n if (error instanceof OpenMeldToolsUpdateFailureError && existing) {\n return error;\n }\n return new OpenMeldToolsUpdateFailureError({\n cause: error,\n failureCode: existing ?? fallbackCode,\n message: toErrorMessage(error),\n });\n}\n\nexport function resolveOpenMeldToolsUpdateFailure(\n error: unknown\n): OpenMeldToolsUpdateFailureCode | null {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n const direct = openMeldToolsUpdateFailureCodeSchema.safeParse(\n (current as { failureCode?: unknown }).failureCode\n );\n if (direct.success) {\n return direct.data;\n }\n const internalCode = (current as { code?: unknown }).code;\n if (typeof internalCode === \"string\") {\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n internalCode.startsWith(INTERNAL_FAILURE_PREFIX)\n ? `cli.update.${internalCode.slice(INTERNAL_FAILURE_PREFIX.length)}`\n : internalCode\n );\n if (parsed.success) {\n return parsed.data;\n }\n }\n current = (current as { cause?: unknown }).cause;\n }\n return null;\n}\n\nexport function encodePersistedOpenMeldToolsUpdateFailure(input: {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n}): string {\n const failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n const detail = input.detail.trim();\n return `${PERSISTED_FAILURE_PREFIX}${failureCode}${\n detail ? `\\n${detail}` : \"\"\n }`;\n}\n\nexport function resolvePersistedOpenMeldToolsUpdateFailure(\n errorMessage: string | null\n): OpenMeldToolsUpdateFailureCode | null {\n if (!errorMessage?.startsWith(PERSISTED_FAILURE_PREFIX)) {\n return null;\n }\n const firstLine = errorMessage.split(LINE_SPLIT_RE, 1)[0] ?? \"\";\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n firstLine.slice(PERSISTED_FAILURE_PREFIX.length)\n );\n return parsed.success ? parsed.data : null;\n}\n","import {\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS,\n openMeldToolsUpdateProcessFailureFrameSchema,\n} from \"@openmeld/schemas\";\nimport type {\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateProcessFailureFrame,\n} from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\nimport { resolveOpenMeldToolsUpdateFailure } from \"./openmeld-tools-update-failure\";\n\nconst FAILURE_FRAME_OUTPUT_MAX_CHARS = 64 * 1024;\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport type OpenMeldToolsUpdateProcessFailure = {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n};\n\nexport function emitOpenMeldToolsUpdateFailureFrame(error: unknown): void {\n const detail = truncateText(\n toErrorMessage(error),\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS\n );\n const frame: OpenMeldToolsUpdateProcessFailureFrame =\n openMeldToolsUpdateProcessFailureFrameSchema.parse({\n detail: detail || \"OpenMeld update process failed.\",\n failureCode:\n resolveOpenMeldToolsUpdateFailure(error) ?? \"cli.update.failed\",\n schema: \"openmeld-tools-update-process-failure-v1\",\n v: 1,\n });\n // The leading newline keeps the frame parseable even when prior presenter\n // output ended mid-line.\n process.stdout.write(`\\n${JSON.stringify(frame)}\\n`);\n}\n\nexport function appendBoundedOpenMeldToolsUpdateProcessOutput(\n current: string,\n chunk: string\n): string {\n return truncateText(\n `${current}${chunk}`,\n FAILURE_FRAME_OUTPUT_MAX_CHARS,\n \"tail\"\n );\n}\n\nexport function parseOpenMeldToolsUpdateFailureFrame(\n output: string\n): OpenMeldToolsUpdateProcessFailure | null {\n const lines = output.split(LINE_SPLIT_RE);\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n const line = lines[index]?.trim();\n if (!line?.startsWith(\"{\")) {\n continue;\n }\n try {\n const parsed = openMeldToolsUpdateProcessFailureFrameSchema.safeParse(\n JSON.parse(line) as unknown\n );\n if (parsed.success) {\n return {\n detail: parsed.data.detail,\n failureCode: parsed.data.failureCode,\n };\n }\n } catch {\n // Other agent-view output and truncated lines are not update frames.\n }\n }\n return null;\n}\n\nfunction truncateText(\n value: string,\n maxChars: number,\n side: \"head\" | \"tail\" = \"head\"\n): string {\n if (value.length <= maxChars) {\n return value;\n }\n if (side === \"tail\") {\n return value.slice(-maxChars);\n }\n const suffix = \"…\";\n return value.slice(0, Math.max(0, maxChars - suffix.length)) + suffix;\n}\n"],"mappings":"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"}
package/dist/openmeld.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  //#region src/openmeld-entry.ts
4
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");
5
+ const { restoreWindowsPreviewChannel } = await import("./windows-preview-channel-BPhfSwji.js");
6
6
  await restoreWindowsPreviewChannel();
7
7
  }
8
8
  if (process.argv.includes("--openmeld-windows-task")) {
@@ -11,7 +11,7 @@ if (process.argv.includes("--openmeld-windows-task")) {
11
11
  }
12
12
  const args = process.argv.slice(2);
13
13
  if (args.length === 3 && args[0] === "service" && args[1] === "execution-host") try {
14
- const { runExecutionHost } = await import("./entry-DIjUKIep.js");
14
+ const { runExecutionHost } = await import("./entry-CX24qHnm.js");
15
15
  const hostInstanceId = args[2];
16
16
  if (!hostInstanceId) throw new Error("The Host incarnation is required.");
17
17
  await runExecutionHost(hostInstanceId);
@@ -21,24 +21,24 @@ if (args.length === 3 && args[0] === "service" && args[1] === "execution-host")
21
21
  if (process.connected) process.disconnect();
22
22
  }
23
23
  else if (args.length === 2 && args[0] === "service" && args[1] === "update-worker") try {
24
- const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-Br6WIhhe.js");
24
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-BqU1Asrm.js");
25
25
  await runOpenMeldMaintenanceWorker();
26
26
  } catch (error) {
27
27
  console.error("[openmeld.maintenance.failed]", error);
28
28
  process.exitCode = 1;
29
29
  }
30
30
  else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] === "maintenance-align-service")) try {
31
- const { runMaintenanceUpgrade } = await import("./upgrade-BFWUxFpJ.js");
31
+ const { runMaintenanceUpgrade } = await import("./upgrade-CLnZ4WBF.js");
32
32
  await runMaintenanceUpgrade(args[0] === "maintenance-align-service");
33
33
  } catch (error) {
34
34
  try {
35
- const { emitOpenMeldToolsUpdateFailureFrame } = await import("./openmeld-tools-update-process-frame-DbEZ3fEh.js");
35
+ const { emitOpenMeldToolsUpdateFailureFrame } = await import("./openmeld-tools-update-process-frame-Csy2XKUf.js");
36
36
  emitOpenMeldToolsUpdateFailureFrame(error);
37
37
  } catch {}
38
38
  console.error("[openmeld.maintenance.upgrade_failed]", error);
39
39
  process.exitCode = 1;
40
40
  }
41
- else await import("./openmeld-BUYFXSyY.js");
41
+ else await import("./openmeld-kYp99hOl.js");
42
42
  //#endregion
43
43
  export {};
44
44
 
@@ -10,6 +10,7 @@ const FALLBACK_ACCOUNT_HOST_KEY = "unauthenticated";
10
10
  const FALLBACK_ACCOUNT_USER_KEY = "local";
11
11
  const OPENMELD_HOME_ENV_KEY = "OPENMELD_HOME";
12
12
  const OPENMELD_ENV_PRESET_ENV_KEY = "OPENMELD_ENV_PRESET";
13
+ const OPENMELD_LEGACY_ENV_KEY = "OPENMELD_ENV";
13
14
  const DEFAULT_OPENMELD_ENV_PRESET = "prod";
14
15
  const OPENMELD_DEFAULT_HOME_DIR_BY_PRESET = {
15
16
  prod: ".openmeld",
@@ -30,13 +31,10 @@ function normalizeOpenMeldProfileId(value) {
30
31
  return safe;
31
32
  }
32
33
  function resolveOpenMeldEnvPreset(input = {}) {
33
- const fromEnv = normalizeOpenMeldEnvPreset((input.env ?? process.env)[OPENMELD_ENV_PRESET_ENV_KEY]);
34
+ const fromEnv = resolveOpenMeldEnvPresetFromEnvironment(input.env ?? process.env);
34
35
  if (fromEnv) return fromEnv;
35
36
  return resolveOpenMeldEnvPresetFromArgv(input.argv ?? process.argv);
36
37
  }
37
- function resolveExplicitOpenMeldEnvPreset(input = {}) {
38
- return normalizeOpenMeldEnvPreset((input.env ?? process.env)[OPENMELD_ENV_PRESET_ENV_KEY]);
39
- }
40
38
  function resolveDefaultOpenMeldHomeDirname(preset) {
41
39
  return OPENMELD_DEFAULT_HOME_DIR_BY_PRESET[preset];
42
40
  }
@@ -260,6 +258,13 @@ function normalizeOpenMeldEnvPreset(value) {
260
258
  if (normalized === "prod" || normalized === "dev-local" || normalized === "canary") return normalized;
261
259
  return null;
262
260
  }
261
+ function resolveOpenMeldEnvPresetFromEnvironment(env) {
262
+ const preset = normalizeOpenMeldEnvPreset(env[OPENMELD_ENV_PRESET_ENV_KEY]);
263
+ const legacyValue = String(env[OPENMELD_LEGACY_ENV_KEY] ?? "").trim().toLowerCase();
264
+ const legacyPreset = legacyValue === "dev" ? "dev-local" : normalizeOpenMeldEnvPreset(legacyValue || void 0);
265
+ if (preset && legacyPreset && preset !== legacyPreset) throw new Error(`OPENMELD_ENV_PRESET=${preset} conflicts with OPENMELD_ENV=${legacyValue}. Use one matching lane selection.`);
266
+ return preset ?? legacyPreset;
267
+ }
263
268
  function resolveHomeDirectory(input) {
264
269
  if (input.homeDir) return input.homeDir;
265
270
  const env = input.env ?? process.env;
@@ -268,6 +273,6 @@ function resolveHomeDirectory(input) {
268
273
  return homedir();
269
274
  }
270
275
  //#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 };
276
+ export { profileDir as A, sessionsDir as B, openMeldManagedBinaryName as C, openMeldRootDir as D, openMeldManagedVersionDir as E, resolveOpenMeldRootDir as F, spacesDir as H, resolveOpenMeldServiceOwnedPathInput as I, resolveOpenMeldServiceScope as L, resolveDefaultOpenMeldHomeDirname as M, resolveOpenMeldCliEntryNameFromArgv as N, openMeldVersionsDir as O, resolveOpenMeldEnvPreset as P, runtimeDir as R, openMeldBinDir as S, openMeldManagedVersionBinaryPath as T, systemDir as U, skillsDir as V, 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, runtimeLogsDir as z };
272
277
 
273
- //# sourceMappingURL=paths-DSkUuEu3.js.map
278
+ //# sourceMappingURL=paths-De9xdA2h.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths-De9xdA2h.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 OPENMELD_LEGACY_ENV_KEY = \"OPENMELD_ENV\";\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 = resolveOpenMeldEnvPresetFromEnvironment(env);\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 resolveOpenMeldEnvPresetFromEnvironment(env);\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 resolveOpenMeldEnvPresetFromEnvironment(\n env: NodeJS.ProcessEnv\n): OpenMeldEnvPreset | null {\n const preset = normalizeOpenMeldEnvPreset(env[OPENMELD_ENV_PRESET_ENV_KEY]);\n const legacyValue = String(env[OPENMELD_LEGACY_ENV_KEY] ?? \"\")\n .trim()\n .toLowerCase();\n const legacyPreset =\n legacyValue === \"dev\"\n ? \"dev-local\"\n : normalizeOpenMeldEnvPreset(legacyValue || undefined);\n if (preset && legacyPreset && preset !== legacyPreset) {\n throw new Error(\n `OPENMELD_ENV_PRESET=${preset} conflicts with OPENMELD_ENV=${legacyValue}. Use one matching lane selection.`\n );\n }\n return preset ?? legacyPreset;\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":"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"}