openmeld 0.3.235 → 0.3.236

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 (68) hide show
  1. package/dist/{add-me-membership-BVt0EFQ2.js → add-me-membership-C_ytPYUu.js} +2 -2
  2. package/dist/{add-me-membership-BVt0EFQ2.js.map → add-me-membership-C_ytPYUu.js.map} +1 -1
  3. package/dist/{agents-Bl_W0SLT.js → agents-mFz8qI_p.js} +7 -7
  4. package/dist/{agents-Bl_W0SLT.js.map → agents-mFz8qI_p.js.map} +1 -1
  5. package/dist/{api-client-foundation-BHjffwwr.js → api-client-foundation-BVVqHzYr.js} +1 -1
  6. package/dist/{api-client-foundation-D6zHrrGV.js → api-client-foundation-BzGnJzcb.js} +2 -2
  7. package/dist/{api-client-foundation-D6zHrrGV.js.map → api-client-foundation-BzGnJzcb.js.map} +1 -1
  8. package/dist/{command-vUyYaeck.js → command-DApK5Fss.js} +11 -11
  9. package/dist/{command-vUyYaeck.js.map → command-DApK5Fss.js.map} +1 -1
  10. package/dist/{computer-connection-review-Bbp4nzXl.js → computer-connection-review-CSe-ljcH.js} +2 -2
  11. package/dist/{computer-connection-review-Bbp4nzXl.js.map → computer-connection-review-CSe-ljcH.js.map} +1 -1
  12. package/dist/{computer-disconnect-fbLphD7-.js → computer-disconnect-CELa6Aef.js} +3 -3
  13. package/dist/{computer-disconnect-fbLphD7-.js.map → computer-disconnect-CELa6Aef.js.map} +1 -1
  14. package/dist/{computer-setup-continuation-CcfcMexz.js → computer-setup-continuation-BfsOJDh1.js} +2 -2
  15. package/dist/{computer-setup-continuation-CcfcMexz.js.map → computer-setup-continuation-BfsOJDh1.js.map} +1 -1
  16. package/dist/{daemon-lifecycle-journal-DEQHGloF.js → daemon-lifecycle-journal-BHCda5cr.js} +2 -2
  17. package/dist/{daemon-lifecycle-journal-DEQHGloF.js.map → daemon-lifecycle-journal-BHCda5cr.js.map} +1 -1
  18. package/dist/{daemon-service-runtime-BDlPNE7y.js → daemon-service-runtime-DYq2FIVh.js} +2 -2
  19. package/dist/{daemon-service-runtime-BDlPNE7y.js.map → daemon-service-runtime-DYq2FIVh.js.map} +1 -1
  20. package/dist/{daemon-service-update-coordinator-D-yjJ2PV.js → daemon-service-update-coordinator-BUsyLme1.js} +6 -6
  21. package/dist/{daemon-service-update-coordinator-D-yjJ2PV.js.map → daemon-service-update-coordinator-BUsyLme1.js.map} +1 -1
  22. package/dist/{dispatch-owned-runtime-FNjbFwSu.js → dispatch-owned-runtime-BbFZbSCZ.js} +3 -3
  23. package/dist/{dispatch-owned-runtime-FNjbFwSu.js.map → dispatch-owned-runtime-BbFZbSCZ.js.map} +1 -1
  24. package/dist/{dist-MpN-h8da.js → dist-Be3IwaFl.js} +1 -1
  25. package/dist/{dist-CJL7LE-y.js → dist-Co4QfNdK.js} +63 -5
  26. package/dist/dist-Co4QfNdK.js.map +1 -0
  27. package/dist/{elapsed-time-1d08oEQ3.js → elapsed-time-LyPBZcr1.js} +4 -4
  28. package/dist/{elapsed-time-1d08oEQ3.js.map → elapsed-time-LyPBZcr1.js.map} +1 -1
  29. package/dist/{entry-G1LraPT2.js → entry-7fJyrzKV.js} +2 -2
  30. package/dist/{entry-G1LraPT2.js.map → entry-7fJyrzKV.js.map} +1 -1
  31. package/dist/{installation-inventory-BsOTGp_X.js → installation-inventory-UQLiccH6.js} +3 -3
  32. package/dist/{installation-inventory-BsOTGp_X.js.map → installation-inventory-UQLiccH6.js.map} +1 -1
  33. package/dist/{installer-JpCPmqGj.js → installer-nI8qVBer.js} +2 -2
  34. package/dist/{installer-JpCPmqGj.js.map → installer-nI8qVBer.js.map} +1 -1
  35. package/dist/{meta-api-ClHCkzZB.js → meta-api-JNwpu5-2.js} +3 -3
  36. package/dist/{meta-api-ClHCkzZB.js.map → meta-api-JNwpu5-2.js.map} +1 -1
  37. package/dist/{openmeld-BrAKrRtb.js → openmeld-DDUAg1-S.js} +24 -24
  38. package/dist/{openmeld-BrAKrRtb.js.map → openmeld-DDUAg1-S.js.map} +1 -1
  39. package/dist/{openmeld-maintenance-worker-BuLMqEuI.js → openmeld-maintenance-worker-BgWOmRDu.js} +9 -9
  40. package/dist/{openmeld-maintenance-worker-BuLMqEuI.js.map → openmeld-maintenance-worker-BgWOmRDu.js.map} +1 -1
  41. package/dist/{openmeld-tools-update-join-3RJrWvrr.js → openmeld-tools-update-join-CK54PNzJ.js} +4 -4
  42. package/dist/{openmeld-tools-update-join-3RJrWvrr.js.map → openmeld-tools-update-join-CK54PNzJ.js.map} +1 -1
  43. package/dist/openmeld.js +4 -4
  44. package/dist/{prepare-provider-runtime-Y2WOwFlV.js → prepare-provider-runtime-DAiq8vyv.js} +6 -6
  45. package/dist/{prepare-provider-runtime-Y2WOwFlV.js.map → prepare-provider-runtime-DAiq8vyv.js.map} +1 -1
  46. package/dist/{prepare-session-executor-B61bBZz0.js → prepare-session-executor-CFqmUlIh.js} +15 -15
  47. package/dist/{prepare-session-executor-B61bBZz0.js.map → prepare-session-executor-CFqmUlIh.js.map} +1 -1
  48. package/dist/{runtime-CW2rk7-K.js → runtime-B5qYKA19.js} +11 -11
  49. package/dist/{runtime-CW2rk7-K.js.map → runtime-B5qYKA19.js.map} +1 -1
  50. package/dist/{runtime-agent-controller-reporting-submission-DtXqZxol.js → runtime-agent-controller-reporting-submission-DLxVsqpW.js} +5 -5
  51. package/dist/{runtime-agent-controller-reporting-submission-DtXqZxol.js.map → runtime-agent-controller-reporting-submission-DLxVsqpW.js.map} +1 -1
  52. package/dist/{service-BIO-ixp9.js → service-CP8OUj6f.js} +11 -11
  53. package/dist/{service-BIO-ixp9.js.map → service-CP8OUj6f.js.map} +1 -1
  54. package/dist/{service-account-control-Ddl1E6YF.js → service-account-control-DoUzhuAB.js} +5 -5
  55. package/dist/{service-account-control-Ddl1E6YF.js.map → service-account-control-DoUzhuAB.js.map} +1 -1
  56. package/dist/{service-control-capabilities-BYmPglLN.js → service-control-capabilities-DBwPbnh8.js} +1 -1
  57. package/dist/{service-control-capabilities-CTsm5txF.js → service-control-capabilities-aDlHjg5W.js} +3 -3
  58. package/dist/{service-control-capabilities-CTsm5txF.js.map → service-control-capabilities-aDlHjg5W.js.map} +1 -1
  59. package/dist/{state-SRzkI4G2.js → state-BEY9weSc.js} +2 -2
  60. package/dist/{state-SRzkI4G2.js.map → state-BEY9weSc.js.map} +1 -1
  61. package/dist/{updates-api-B0f4KyCg.js → updates-api-D4T5RACL.js} +6 -6
  62. package/dist/{updates-api-B0f4KyCg.js.map → updates-api-D4T5RACL.js.map} +1 -1
  63. package/dist/{upgrade-BG_Irs5Q.js → upgrade-BplZgGrz.js} +6 -6
  64. package/dist/{upgrade-BG_Irs5Q.js.map → upgrade-BplZgGrz.js.map} +1 -1
  65. package/dist/upgrade-foZUS_GZ.js +4 -0
  66. package/package.json +8 -8
  67. package/dist/dist-CJL7LE-y.js.map +0 -1
  68. package/dist/upgrade-CLdAVKIb.js +0 -4
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-Y2WOwFlV.js";
4
- import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-SRzkI4G2.js";
5
- import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-BDlPNE7y.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-D-yjJ2PV.js";
3
+ import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-DAiq8vyv.js";
4
+ import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-BEY9weSc.js";
5
+ import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-DYq2FIVh.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-BUsyLme1.js";
7
7
  import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-BMI00i2F.js";
8
8
  import { g as getConfiguredSkillsConfig } from "./base-url-0AoeTi3w.js";
9
9
  import { W as withDaemonServiceReconcileLock } from "./daemon-state-Dte9re5V.js";
10
10
  import { i as readDaemonServiceContract } from "./daemon-service-contract-COPKbCy_.js";
11
- import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-DEQHGloF.js";
11
+ import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-BHCda5cr.js";
12
12
  import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-BXAp21GH.js";
13
- import { s as resolveTrackedInstallTargets } from "./installation-inventory-BsOTGp_X.js";
14
- import { t as installSkillsToTargets } from "./installer-JpCPmqGj.js";
13
+ import { s as resolveTrackedInstallTargets } from "./installation-inventory-UQLiccH6.js";
14
+ import { t as installSkillsToTargets } from "./installer-nI8qVBer.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-CcfcMexz.js");
79
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-BfsOJDh1.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-BuLMqEuI.js.map
108
+ //# sourceMappingURL=openmeld-maintenance-worker-BgWOmRDu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-BuLMqEuI.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-BgWOmRDu.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":";;;;;;;;;;;;;;;AAOA,eAAsB,2BAA0C;CAS9D,IAAI,MARkB,4BAA4B,CAAC,CAAC,OACjD,UAAmB;EAClB,QAAQ,OAAO,MACb,uCAAuC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAChG;EACA,OAAO;CACT,CACF,MACgB,iBACd;CAEF,MAAM,sBAAsB,YAAY;EACtC,MAAM,cAAc,MAAM,kBAAkB;EAC5C,MAAM,eAAe,MAAM,0BAA0B;EAWrD,MAAM,YAAW,MAJK,uBAAuB;GAC3C,QAAQ;GACR,SAAA,MARoB,6BAA6B;IACjD;IACA,UAAU,2BAA2B,YAAY;IACjD;IACA,8BAA8B;GAChC,CAAC;EAID,CAAC,EAAA,CACwB,QAAQ,WAAW,OAAO,WAAW,QAAQ;EACtE,IAAI,SAAS,QACX,MAAM,IAAI,MACR,SACG,KAAK,WAAW,GAAG,OAAO,SAAS,IAAI,OAAO,QAAQ,CAAC,CACvD,KAAK,IAAI,CACd;CAEJ,CAAC;AACH;;;ACTA,eAAsB,+BAA8C;CAClE,sCAAsC,QAAQ,GAAG;CACjD,MAAM,uBAAuB;AAC/B;AAEA,eAAe,yBAA2C;CACxD,IAAI;EAKF,OAAO,MAAM,gBAAgB;GAC3B,MAAA,MALiB,YAAY;IAC7B,mBAAmB;IACnB,KAAK;GACP,CAAC;GAGC,KAAK;GACL,gBAAgB,EAAE,WAAW,qBAAqB;EACpD,CAAC;CACH,SAAS,OAAO;EAGd,IAAI,oBAAoB,KAAK,KAAK,CAAC,4BAA4B,KAAK,GAClE,OAAO;EAET,MAAM;CACR;AACF;AAEA,eAAe,qBAAuC;CACpD,MAAM,aAAa,MAAM,+BAA+B;CACxD,MAAM,iBAAiB,MAAM,sCAAsC;CACnE,IAAI,EAAE,cAAc,iBAAiB;EACnC,MAAM,WAAW,MAAM,0BAA0B;EACjD,IAAI,CAAC,YAAY,SAAS,iBAAiB,cACzC,OAAO;CAEX;CACA,MAAM,6CAA6C;CACnD,MAAM,4BAA4B;CAClC,KAAK,MAAM,mCAAmC,EAAA,CAAG,yBAC/C,IAAI;EACF,MAAM,yBAAyB;CACjC,SAAS,OAAO;EACd,QAAQ,OAAO,MACb,0CAA0C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GACnG;CACF;CAEF,MAAM,cAAc,qCAAqC;CACzD,IAAI,CAAC,YAAY;EACf,IAAI,gBACF,MAAM,YAAY,oBAAoB;OAKtC,MAAM,sCAAqC,MAHtB,YAAY,cAAc,EAC7C,eAAe,YACjB,CAAC,EAAA,CACiD,WAAW,SAAS;EAExE,MAAM,YAAY,YAAY;CAChC;CACA,MAAM,SAAS,MAAM,8BAA8B;CACnD,IAAI,QAAQ,UAAU,WAAW;EAC/B,MAAM,EACJ,0CACA,8CACE,MAAM,OAAO;EAEjB,MAAM,wCAAwC,MAAM;EACpD,MAAM,yCAAyC;EAC/C,MAAM,+BAA+B,YAAY;GAC/C,MAAM,UAAU,MAAM,+BAA+B;GACrD,IACE,SAAS,UAAU,OAAO,SAC1B,QAAQ,UAAU,aAClB,QAAQ,kBAAkB,OAAO,eAEjC,MAAM,mCAAmC,OAAO;EAEpD,CAAC;EACD,MAAM,0CAA0C;EAChD,OAAO;CACT;CACA,IAAI,QAAQ,UAAU,cAAc,QAAQ,UAAU,cACpD,QAAQ,WAAW;CAErB,OAAO;AACT;AAEA,eAAe,qCACb,gBACe;CACf,IAAI,CAAC,gBACH;CAEF,MAAM,WAAW,MAAM,0BAA0B;CAGjD,IACE,UAAU,iBAAiB,gBAC3B,SAAS,kBAAkB,kBAE3B;CAEF,MAAM,UAAU,MAAM,4BAA4B;CAClD,IACG,MAAM,sCAAsC;EAC3C,YAAY,SAAS,cAAc;EACnC,QAAS,MAAM,SAAS,OAAO,KAAM;CACvC,CAAC,MAAO,OAER,MAAM,4BAA4B;EAChC,eAAe,SAAS;EACxB,SAAS;CACX,CAAC;AAEL"}
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-BDlPNE7y.js";
4
- import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-D-yjJ2PV.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-1d08oEQ3.js";
3
+ import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-DYq2FIVh.js";
4
+ import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BUsyLme1.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-LyPBZcr1.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-3RJrWvrr.js.map
64
+ //# sourceMappingURL=openmeld-tools-update-join-CK54PNzJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-3RJrWvrr.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-CK54PNzJ.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"}
package/dist/openmeld.js CHANGED
@@ -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-G1LraPT2.js");
14
+ const { runExecutionHost } = await import("./entry-7fJyrzKV.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,14 +21,14 @@ 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-BuLMqEuI.js");
24
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-BgWOmRDu.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-CLdAVKIb.js");
31
+ const { runMaintenanceUpgrade } = await import("./upgrade-foZUS_GZ.js");
32
32
  await runMaintenanceUpgrade(args[0] === "maintenance-align-service");
33
33
  } catch (error) {
34
34
  try {
@@ -38,7 +38,7 @@ else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] ===
38
38
  console.error("[openmeld.maintenance.upgrade_failed]", error);
39
39
  process.exitCode = 1;
40
40
  }
41
- else await import("./openmeld-BrAKrRtb.js");
41
+ else await import("./openmeld-DDUAg1-S.js");
42
42
  //#endregion
43
43
  export {};
44
44
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { F as resolveOpenMeldRootDir, P as resolveOpenMeldEnvPreset, a as accountProfileWorkspacePath, b as normalizeOpenMeldProfileId, c as deviceOpenClawProfileBootstrapPath, h as isPublishedOpenMeldHome, l as deviceOpenClawProfileDir, n as accountProfileLocalMetaPath, u as deviceOpenClawProfileWorkspaceDir } from "./paths-De9xdA2h.js";
4
- import { $t as createLocalRuntimeExpectedRoutesApi, Rt as createAgentProfileBindingApi, t as OpenMeldApiClientHttpError, wi as modelCatalogSchema } from "./dist-CJL7LE-y.js";
4
+ import { $t as createLocalRuntimeExpectedRoutesApi, Rt as createAgentProfileBindingApi, t as OpenMeldApiClientHttpError, wi as modelCatalogSchema } from "./dist-Co4QfNdK.js";
5
5
  import { G as isOriginalErrorSafeForMessageDetails, J as openMeldDaemonProviderAccessEvidenceSchema, Nr as agentInteractionResolutionSchema, W as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, X as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, Y as openMeldDaemonTaskResultEnvelopeWriteSchema, fr as normalizeMessageEnvelope, lr as formatCanonicalMentionLiteral, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH, tt as aiUsageObservationSchema, zi as resolveCommandAgentWorkActivity } from "./runtime-transport-DyBmX7ds.js";
6
6
  import { C as conversationExecutionStateSchema, D as normalizeOptionalWorkingDirectory, P as profileWorkspaceModeSchema, T as MAX_PROFILE_WORKING_DIRECTORY_LENGTH, o as openMeldDaemonControlPlaneRequestSchema, s as openMeldDaemonControlPlaneResponseSchema, x as providerDispatchRuntimeContextSchema } from "./control-plane-QqGL-jtT.js";
7
7
  import { _ as canonicalizeAgentControllerRef, b as normalizeKnownBuiltinAgentControllerId, d as resolveBuiltinAgentControllerConversationKind, f as HOSTED_CENTER_AGENT_CONTROLLER_REF, g as buildAgentControllerRoutingKey, l as buildAgentControllerConversationRef, m as HOSTED_REMOTE_AGENT_CONTROLLER_REF, p as HOSTED_CENTER_AGENT_CONTROLLER_REF_ID, s as runtimeTransportModeSchema, v as canonicalizeBuiltinAgentControllerRef, x as parseAgentControllerRef$1 } from "./controller-contract-DAOCaefz.js";
@@ -16,9 +16,9 @@ import { n as normalizeCommandEnvironment } from "./process-environment-BWSFeUu6
16
16
  import { n as writeDaemonLocalStateFile, t as readDaemonLocalStateFile } from "./daemon-local-state-file-jOXuXrky.js";
17
17
  import { m as daemonRuntimeDataPath } from "./daemon-state-Dte9re5V.js";
18
18
  import { i as readDaemonServiceContract } from "./daemon-service-contract-COPKbCy_.js";
19
- import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-DEQHGloF.js";
19
+ import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-BHCda5cr.js";
20
20
  import { i as resolveWindowsCommandPath, n as quoteWindowsProcessArgument, r as resolvePlatformCommand, t as execPlatformFile } from "./process-launch-B0pHlkV_.js";
21
- import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-D6zHrrGV.js";
21
+ import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-BzGnJzcb.js";
22
22
  import { createRequire } from "node:module";
23
23
  import { createHash, randomUUID } from "node:crypto";
24
24
  import { homedir, loadavg, tmpdir } from "node:os";
@@ -31597,9 +31597,9 @@ function createModelCatalogReadSession(input) {
31597
31597
  async function readModelCatalogOnce(baseUrl) {
31598
31598
  try {
31599
31599
  const [apiClient, baseUrlModule, clientFoundationModule] = await Promise.all([
31600
- import("./dist-MpN-h8da.js"),
31600
+ import("./dist-Be3IwaFl.js"),
31601
31601
  import("./base-url-Bdjp-5vy.js"),
31602
- import("./api-client-foundation-BHjffwwr.js")
31602
+ import("./api-client-foundation-BVVqHzYr.js")
31603
31603
  ]);
31604
31604
  if (typeof apiClient.createConfigApi !== "function") throw new Error("config api client is unavailable");
31605
31605
  const resolvedBaseUrl = baseUrl ?? await baseUrlModule.resolveBaseUrl();
@@ -33457,4 +33457,4 @@ async function prepareProviderRuntime(input, options = {}) {
33457
33457
  //#endregion
33458
33458
  export { canManageRegistryAgentSkillTargets as $, resolveExecutablePathsOnPath as $n, mergeOpenClawGatewayVisibility as $t, createExpectedRoutesReadSession as A, emitReconcileCompletedEvidence as An, ADAPTIVE_HEARTBEAT_JITTER_RATIO as Ar, ensureOpenMeldManagedProfileWorkspace as At, reconcileNewRunnableBuiltinAgentsForSetup as B, resolveConversationExecutionStateByLookupKey as Bn, createMutableRouteCatalogState as Bt, createModelCatalogReadSession as C, probeCodexAppServerAccount as Cn, resolveAgentControllerPermissionModeForController as Cr, resolveLocalProjectConnectionForPath as Ct, NO_LOCAL_AGENTS_NEED_OPENMELD_SERVICE_REASON as D, probeClaudeCodeUsageLimits as Dn, resolveNativeAgentControllerPermissionModeForController as Dr, resolveRegistryOriginLaunchCommand as Dt, resolveProfileWorkspaceRuntime as E, projectCodexUsageLimits as En, resolveEvidenceSyncHealth as Er, listBuiltinAgentsRegistryEntries as Et, listAgentRegistrations as F, buildTaskResultEnvelope as Fn, pruneStaleLeases as Fr, resolveConfiguredProfileWorkspacePathForAccount as Ft, updateAgentRegistrations as G, buildAuthenticatedControlPlaneResponse as Gn, syncRuntimeEventToInflightTaskControlRegistry as Gt, resolveAgentTargetState as H, settleInflightTask as Hn, summarizeSkippedDaemonProfiles as Ht, listAgentTargetStates as I, appendLedgerHistoryEntry as In, resolveAdaptiveHeartbeatIntervalMs as Ir, setCustomProfileWorkspace as It, normalizeAgentIds as J, createUnavailableProviderUsageLimits as Jn, isDaemonReconcileInProgressError as Jt, notifyDaemonRouteCatalogChanged as K, assertLegacyAgentContextAssociation as Kn, SPACE_ACTION_CONTEXT_GUIDANCE_LINES as Kt, manageAgentRegistrationInstallation as L, commitResolvedAgentContext as Ln, resolveCatalogSyncIntervalMs as Lr, setOpenMeldManagedProfileWorkspace as Lt, addAgentCustomTarget as M, DaemonServiceRunError as Mn, MIN_HEARTBEAT_INTERVAL_MS as Mr, readProfileWorkspaceConfig as Mt, createRegistrationFromCatalogTarget as N, runRuntimeTask as Nn, applyAcceptedLeases as Nr, readProfileWorkspaceConfigForAccount as Nt, syncDeviceRuntimeStateProjection as O, resolveInstalledClaudeCodeLaunchCandidates as On, resolveSelectableCandidates as Or, resolveRegistryRuntimeAdapterCapabilitySnapshot as Ot, listAgentCustomTargets as P, buildRuntimeWorkspaceFingerprint as Pn, applyIntervalJitterMs as Pr, resolveConfiguredProfileWorkspacePath as Pt, resolveLocalRegistryAgentIdFromAgentControllerRef as Q, materializeCliLaunchCommand as Qn, createPendingAgentInteractionRegistry as Qt, readAgentRuntimeConfigHealth as R, loadLedgerState as Rn, compareAgentControllerRefsForDisplay as Rr, validateCustomProfileWorkspacePath as Rt, syncProfileWorkspaceState as S, forkCodexAppServerThread as Sn, renderWorkingLanguagePrompt as Sr, canonicalizeLocalProjectPath as St, resolveEffectiveProfileWorkingFolderRuntime as T, verifyCodexAppServerThread as Tn, resolveAgentProfileEditCapabilities as Tr, withAgentActivityLocalStateLock as Tt, setAgentRegistrationEnabled as U, upsertConversationExecutionState as Un, syncDaemonRouteCatalogState as Ut, removeAgentCustomTarget as V, seedLegacyAgentContext as Vn, createRouteCatalogFromMutableState as Vt, updateAgentCustomTarget as W, withLedgerStateTransaction as Wn, normalizeDispatchThreadAction as Wt, sortAgentRegistrations as X, resolveDispatchSpaceActionMcpServer as Xn, buildDispatchReplyContextSummary as Xt, parseAgentEnabledOption as Y, createUnsupportedProviderUsageLimits as Yn, createSerialAgentInteractionCallback as Yt, repairBuiltinControllerInstall as Z, buildCliLaunchInvocation as Zn, normalizeDispatchPostMessageAction as Zt, loadDaemonRouteCatalog as _, probeGrokBuildAcpInterface as _n, listAgentControllerPermissionModeOptions as _r, removeProjectConnection as _t, buildOpenClawSpaceSessionKey as a, resolveDispatchContinuityObservation as an, areAgentControllerInterfaceAccountsSame as ar, isHomebrewCommandPath as at, resolveLocalController as b, resolveCodexTimeoutMs as bn, projectPeopleComputersToLegacyLocalRuntimes as br, setDefaultProjectConnection as bt, findOpenClawAgentById as c, resolveLatestScopedConversationExecutionState as cn, buildWorkingLanguagePromptPlan as cr, ProjectBindingOperationError as ct, resolveOpenClawAuthStatus as d, createLocalAdapterEntries as dn, createAuthorityOpenMeldServiceRuntimeId as dr, isProjectBound as dt, createLocalTaskInterruptSender as en, listAgentControllerSupervisedProcessIds as er, detectInstalledSkillsAgents as et, resolveOpenClawProviderRuntimeWorkingDirectory as f, parseOpenRouterUsageResponse as fn, getAgentControllerPermissionModeDisplayMetadata as fr, listProjectBindings as ft, writeDaemonRouteCatalogCache as g, GrokBuildAcpTransportError as gn, isAgentExecutionReadyOrConnecting as gr, removeMissingProjectConnections as gt, readDaemonRouteCatalogCache as h, resolveInstalledOpenCodeLaunchCandidates as hn, isAgentControllerUsageRefreshUnavailable as hr, removeAgentActivityBindingsWhileDeliveryLocked as ht, listOpenClawGatewayAgents as i, resolveDispatchQueueLogMeta as in, DEFAULT_TASK_LIFECYCLE_HEARTBEAT_INTERVAL_MS as ir, isBunGlobalCommandPath as it, resolveAgentProfilePrimaryAgentControllerReport as j, emitReconcileStartedEvidence as jn, MAX_HEARTBEAT_INTERVAL_MS as jr, normalizeCustomProfileWorkspacePath as jt, createPrimaryBindingReadSession as k, emitDriftDetectedEvidence as kn, resolveRouteRegistrationReconcileDecision as kr, resolveRegistryRuntimeAdapterContractByAgentControllerRef as kt, findOpenClawAgentsByWorkspace as l, resolveCatalogSyncSkippedProfilesLogState as ln, createAgentControllerInterfaceDisplayRows as lr, ProjectBindingStoreUpdateRequiredError as lt, resolveOpenClawLocalBootstrapPaths as m, forkOpenCodeServerSession as mn, isAgentControllerUsageAccountUnavailable as mr, migrateProjectBindingStore as mt, fetchOpenClawGatewayHealth as n, createLocalExecutionSlots as nn, DISPATCH_SPACE_ACTION_DELIVERY_ONLY_ENV as nr, EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES as nt, normalizeOpenClawSpaceIdPrefix as o, resolveCompatibleAgentContextMatch as on, buildAgentControllerRef as or, isNpmGlobalCommandPath as ot, readOpenClawLocalBootstrapState as p, parseOpenCodeGoUsageResponse as pn, getAgentControllerPermissionModeFieldLabel as pr, listProjectConnectionsWithStatus as pt, normalizeAgentId as q, buildAgentContextLookupKey as qn, SPACE_ACTION_TARGET_GUIDANCE_LINES as qt, listOpenClawAgents as r, createInflightTaskControlRegistry as rn, isDispatchSpaceActionDeliveryOnly as rr, resolveBuiltinAgentControllerDefinition as rt, slugifyOpenClawNamePart as s, resolveCompatibleConversationExecutionState as sn, buildInformationProtectionPromptPlan as sr, isPnpmGlobalCommandPath as st, prepareProviderRuntime as t, buildLocalServiceDiagnosticsPayload as tn, createProviderOriginalError as tr, resolveSkillsAgentRegistry as tt, matchesExpectedWorkspace as u, createLocalAdapterContainer as un, createAgentExecutionStatusDisplayRows as ur, bindProject as ut, buildRuntimeRouteTargets as v, resolveInstalledGrokBuildLaunchCandidates as vn, parseAgentControllerRef as vr, resolveProjectBindingForPath as vt, resolveCurrentEffectiveProfileWorkingFolderRuntime as w, resolveCodexAppServerCompletedTurn as wn, resolveAgentExecutionStatus as wr, withAgentActivityDeliveryLock as wt, resolveLocalRuntimeControllerSupport as x, resolveInstalledCodexLaunchCandidates as xn, renderInformationProtectionPrompt as xr, unbindProject as xt, readLocalEnabledControllers as y, projectCursorUsageLimits as yn, peopleComputerContainsDevice as yr, runIfAgentActivityBindingGenerationIsCurrent as yt, reconcileNewRunnableBuiltinAgentRegistrations as z, removeConversationExecutionState as zn, resolveBuiltinAgentControllerBrand as zr, describeProfileWorkspacePathValidationFailure as zt };
33459
33459
 
33460
- //# sourceMappingURL=prepare-provider-runtime-Y2WOwFlV.js.map
33460
+ //# sourceMappingURL=prepare-provider-runtime-DAiq8vyv.js.map