openmeld 0.3.221 → 0.3.222

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 (93) hide show
  1. package/dist/{add-me-membership-DpckwGof.js → add-me-membership-Wc69O6rA.js} +2 -2
  2. package/dist/{add-me-membership-DpckwGof.js.map → add-me-membership-Wc69O6rA.js.map} +1 -1
  3. package/dist/{agents-2TzCubpV.js → agents-B8zhQnGw.js} +9 -9
  4. package/dist/{agents-2TzCubpV.js.map → agents-B8zhQnGw.js.map} +1 -1
  5. package/dist/{api-client-foundation-CGImd4c8.js → api-client-foundation-DTiFoGpI.js} +1 -1
  6. package/dist/{api-client-foundation-D-Cb6EVg.js → api-client-foundation-DnJ_JYli.js} +3 -3
  7. package/dist/{api-client-foundation-D-Cb6EVg.js.map → api-client-foundation-DnJ_JYli.js.map} +1 -1
  8. package/dist/auth-session-D8dbMpaK.js +4 -0
  9. package/dist/{auth-session-CDhQANWx.js → auth-session-nhS8jyux.js} +2 -2
  10. package/dist/{auth-session-CDhQANWx.js.map → auth-session-nhS8jyux.js.map} +1 -1
  11. package/dist/{channel-D5ABuavH.js → channel-ggx0o_aG.js} +4 -4
  12. package/dist/{channel-D5ABuavH.js.map → channel-ggx0o_aG.js.map} +1 -1
  13. package/dist/{cli-space-api-B2l1xMPn.js → cli-space-api-CQtKu9Zt.js} +6 -6
  14. package/dist/{cli-space-api-B2l1xMPn.js.map → cli-space-api-CQtKu9Zt.js.map} +1 -1
  15. package/dist/{command-MlrjQYq5.js → command-Bz9x7V2T.js} +16 -16
  16. package/dist/{command-MlrjQYq5.js.map → command-Bz9x7V2T.js.map} +1 -1
  17. package/dist/{computer-connection-DYnof5Xw.js → computer-connection-M3N6plkj.js} +2 -2
  18. package/dist/{computer-connection-DYnof5Xw.js.map → computer-connection-M3N6plkj.js.map} +1 -1
  19. package/dist/{computer-connection-review-mO6vn3C3.js → computer-connection-review-DY5BK_27.js} +5 -5
  20. package/dist/{computer-connection-review-mO6vn3C3.js.map → computer-connection-review-DY5BK_27.js.map} +1 -1
  21. package/dist/{computer-disconnect-CLtQwKDS.js → computer-disconnect-DR1WDSPK.js} +7 -7
  22. package/dist/{computer-disconnect-CLtQwKDS.js.map → computer-disconnect-DR1WDSPK.js.map} +1 -1
  23. package/dist/{computer-setup-continuation-PVwPXc5i.js → computer-setup-continuation-2gs8z-nB.js} +3 -3
  24. package/dist/{computer-setup-continuation-PVwPXc5i.js.map → computer-setup-continuation-2gs8z-nB.js.map} +1 -1
  25. package/dist/{context-D9Ebb5wl.js → context-l_31Mn4X.js} +4 -4
  26. package/dist/{context-D9Ebb5wl.js.map → context-l_31Mn4X.js.map} +1 -1
  27. package/dist/{control-plane-BDS63N7Y.js → control-plane-e3W6PD2M.js} +3 -1
  28. package/dist/control-plane-e3W6PD2M.js.map +1 -0
  29. package/dist/{daemon-device-id-YnLMx1kN.js → daemon-device-id-DWO9_QW6.js} +5 -5
  30. package/dist/{daemon-device-id-YnLMx1kN.js.map → daemon-device-id-DWO9_QW6.js.map} +1 -1
  31. package/dist/{daemon-frame-transport-D-4StENt.js → daemon-frame-transport-D2-tazuK.js} +7 -7
  32. package/dist/{daemon-frame-transport-D-4StENt.js.map → daemon-frame-transport-D2-tazuK.js.map} +1 -1
  33. package/dist/{daemon-lifecycle-journal-DcrVY0xb.js → daemon-lifecycle-journal-DyKx1xzm.js} +4 -4
  34. package/dist/{daemon-lifecycle-journal-DcrVY0xb.js.map → daemon-lifecycle-journal-DyKx1xzm.js.map} +1 -1
  35. package/dist/{daemon-service-runtime-Kr6Bs2J2.js → daemon-service-runtime-bKt0YjC7.js} +2 -2
  36. package/dist/{daemon-service-runtime-Kr6Bs2J2.js.map → daemon-service-runtime-bKt0YjC7.js.map} +1 -1
  37. package/dist/{daemon-service-update-coordinator-RJO997me.js → daemon-service-update-coordinator-D8O1uTtu.js} +11 -11
  38. package/dist/{daemon-service-update-coordinator-RJO997me.js.map → daemon-service-update-coordinator-D8O1uTtu.js.map} +1 -1
  39. package/dist/{dist-BewA9srP.js → dist-B07ziN_u.js} +78 -12
  40. package/dist/dist-B07ziN_u.js.map +1 -0
  41. package/dist/{dist-ChS52b_E.js → dist-B2EauBG6.js} +3 -3
  42. package/dist/{dist-ChS52b_E.js.map → dist-B2EauBG6.js.map} +1 -1
  43. package/dist/{dist-B6VsppM7.js → dist-DhWI1iyi.js} +1 -1
  44. package/dist/{elapsed-time-Cw6b9rYy.js → elapsed-time-Ooo4IC25.js} +5 -5
  45. package/dist/{elapsed-time-Cw6b9rYy.js.map → elapsed-time-Ooo4IC25.js.map} +1 -1
  46. package/dist/{entry-BE8uqbkD.js → entry-DeIRMCiW.js} +7 -7
  47. package/dist/{entry-BE8uqbkD.js.map → entry-DeIRMCiW.js.map} +1 -1
  48. package/dist/{installation-inventory-Dwn8FoKT.js → installation-inventory-DThnBEhV.js} +3 -3
  49. package/dist/{installation-inventory-Dwn8FoKT.js.map → installation-inventory-DThnBEhV.js.map} +1 -1
  50. package/dist/{installer-CsQ4vNjT.js → installer-D2bWZT88.js} +2 -2
  51. package/dist/{installer-CsQ4vNjT.js.map → installer-D2bWZT88.js.map} +1 -1
  52. package/dist/{openmeld-Tkp17vPg.js → openmeld-BQy0nMox.js} +42 -33
  53. package/dist/{openmeld-Tkp17vPg.js.map → openmeld-BQy0nMox.js.map} +1 -1
  54. package/dist/{openmeld-maintenance-worker-C1J_ISOh.js → openmeld-maintenance-worker-BSODPHbn.js} +9 -9
  55. package/dist/{openmeld-maintenance-worker-C1J_ISOh.js.map → openmeld-maintenance-worker-BSODPHbn.js.map} +1 -1
  56. package/dist/{openmeld-tools-update-join-ZLpRTHO3.js → openmeld-tools-update-join-BfY0GnDs.js} +4 -4
  57. package/dist/{openmeld-tools-update-join-ZLpRTHO3.js.map → openmeld-tools-update-join-BfY0GnDs.js.map} +1 -1
  58. package/dist/openmeld.js +4 -4
  59. package/dist/{prepare-provider-runtime-CD5ZI-ct.js → prepare-provider-runtime-CWZcuMF6.js} +64 -30
  60. package/dist/prepare-provider-runtime-CWZcuMF6.js.map +1 -0
  61. package/dist/{prepare-session-executor-C2nNM2yb.js → prepare-session-executor-CkDxstsf.js} +18 -18
  62. package/dist/{prepare-session-executor-C2nNM2yb.js.map → prepare-session-executor-CkDxstsf.js.map} +1 -1
  63. package/dist/{process-channel-B2BU2X7x.js → process-channel-BQwtOlRc.js} +2 -2
  64. package/dist/{process-channel-B2BU2X7x.js.map → process-channel-BQwtOlRc.js.map} +1 -1
  65. package/dist/{runtime-DMYoB5_x.js → runtime-BYaFkkLK.js} +17 -17
  66. package/dist/{runtime-DMYoB5_x.js.map → runtime-BYaFkkLK.js.map} +1 -1
  67. package/dist/{runtime-agent-controller-reporting-submission-DGm8O4q_.js → runtime-agent-controller-reporting-submission-BUUub9_1.js} +10 -9
  68. package/dist/{runtime-agent-controller-reporting-submission-DGm8O4q_.js.map → runtime-agent-controller-reporting-submission-BUUub9_1.js.map} +1 -1
  69. package/dist/{runtime-reporting-health-state-BWZgy4pF.js → runtime-reporting-health-state-BgwfrH7f.js} +9 -9
  70. package/dist/{runtime-reporting-health-state-BWZgy4pF.js.map → runtime-reporting-health-state-BgwfrH7f.js.map} +1 -1
  71. package/dist/{runtime-transport-0F5E6So6.js → runtime-transport-Cc_RN-PL.js} +26 -7
  72. package/dist/runtime-transport-Cc_RN-PL.js.map +1 -0
  73. package/dist/{service-C72KhNft.js → service-CfO38_a-.js} +19 -19
  74. package/dist/{service-C72KhNft.js.map → service-CfO38_a-.js.map} +1 -1
  75. package/dist/{service-account-authorization-DAPQy2yP.js → service-account-authorization-DKpIpxXo.js} +2 -2
  76. package/dist/{service-account-authorization-DAPQy2yP.js.map → service-account-authorization-DKpIpxXo.js.map} +1 -1
  77. package/dist/{service-account-control-DZjUR3I_.js → service-account-control-CCPQAZzn.js} +9 -9
  78. package/dist/{service-account-control-DZjUR3I_.js.map → service-account-control-CCPQAZzn.js.map} +1 -1
  79. package/dist/{service-control-capabilities-Y4CGrchz.js → service-control-capabilities-C9UHSMPz.js} +1 -1
  80. package/dist/{service-control-capabilities-C2MF5FUD.js → service-control-capabilities-xGylBNoH.js} +3 -3
  81. package/dist/{service-control-capabilities-C2MF5FUD.js.map → service-control-capabilities-xGylBNoH.js.map} +1 -1
  82. package/dist/{state-CK1WXIsI.js → state-CQG3k9eh.js} +2 -2
  83. package/dist/{state-CK1WXIsI.js.map → state-CQG3k9eh.js.map} +1 -1
  84. package/dist/{upgrade-BTIKVek7.js → upgrade-D5FxGbh1.js} +7 -7
  85. package/dist/{upgrade-BTIKVek7.js.map → upgrade-D5FxGbh1.js.map} +1 -1
  86. package/dist/upgrade-DhFEu0k6.js +4 -0
  87. package/package.json +11 -11
  88. package/dist/auth-session-DsBkEFct.js +0 -4
  89. package/dist/control-plane-BDS63N7Y.js.map +0 -1
  90. package/dist/dist-BewA9srP.js.map +0 -1
  91. package/dist/prepare-provider-runtime-CD5ZI-ct.js.map +0 -1
  92. package/dist/runtime-transport-0F5E6So6.js.map +0 -1
  93. package/dist/upgrade-DTB0ZmxI.js +0 -4
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-Bsl_ElWy.js";
4
- import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-CD5ZI-ct.js";
5
- import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-CK1WXIsI.js";
6
- import { Q as readPendingDaemonServiceUpdate, Y as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, tt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-Kr6Bs2J2.js";
7
- import { at as readPendingOpenMeldToolsUpdateAttempt, n as scheduleDaemonServiceUpdate, nt as createOpenMeldToolsUpdateCoordinator, ot as readOpenMeldToolsMaintenancePolicy, t as runPendingDaemonServiceUpdate, ut as prepareDaemonServiceUpdateWorkerCarrier } from "./daemon-service-update-coordinator-RJO997me.js";
4
+ import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-CWZcuMF6.js";
5
+ import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-CQG3k9eh.js";
6
+ import { Q as readPendingDaemonServiceUpdate, Y as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, tt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-bKt0YjC7.js";
7
+ import { at as readPendingOpenMeldToolsUpdateAttempt, n as scheduleDaemonServiceUpdate, nt as createOpenMeldToolsUpdateCoordinator, ot as readOpenMeldToolsMaintenancePolicy, t as runPendingDaemonServiceUpdate, ut as prepareDaemonServiceUpdateWorkerCarrier } from "./daemon-service-update-coordinator-D8O1uTtu.js";
8
8
  import { g as getConfiguredSkillsConfig } from "./base-url-D7uE_xTo.js";
9
9
  import { W as withDaemonServiceReconcileLock } from "./daemon-state-B44aq2nm.js";
10
10
  import { i as readDaemonServiceContract } from "./daemon-service-contract-BpOBMGX0.js";
11
- import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-DcrVY0xb.js";
11
+ import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-DyKx1xzm.js";
12
12
  import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-HL4VKbIU.js";
13
- import { s as resolveTrackedInstallTargets } from "./installation-inventory-Dwn8FoKT.js";
14
- import { t as installSkillsToTargets } from "./installer-CsQ4vNjT.js";
13
+ import { s as resolveTrackedInstallTargets } from "./installation-inventory-DThnBEhV.js";
14
+ import { t as installSkillsToTargets } from "./installer-D2bWZT88.js";
15
15
  //#region src/skills/maintenance.ts
16
16
  async function maintainOfficialCliSkill() {
17
17
  if (await downloadOfficialSkillUpdate().catch((error) => {
@@ -75,7 +75,7 @@ async function runMaintenancePass() {
75
75
  }
76
76
  const result = await runPendingDaemonServiceUpdate();
77
77
  if (result?.phase === "updated") {
78
- const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-PVwPXc5i.js");
78
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-2gs8z-nB.js");
79
79
  await prepareDaemonServiceUpdateWorkerCarrier(result);
80
80
  await finishComputerSetupAfterBackgroundUpdate();
81
81
  await withDaemonServiceReconcileLock(async () => {
@@ -104,4 +104,4 @@ async function reconcileCurrentServiceStartupPolicy(updatesCurrent) {
104
104
  //#endregion
105
105
  export { runOpenMeldMaintenanceWorker };
106
106
 
107
- //# sourceMappingURL=openmeld-maintenance-worker-C1J_ISOh.js.map
107
+ //# sourceMappingURL=openmeld-maintenance-worker-BSODPHbn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-C1J_ISOh.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 { 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 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-BSODPHbn.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 { 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 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 { Q as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-Kr6Bs2J2.js";
4
- import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-RJO997me.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-Cw6b9rYy.js";
3
+ import { Q as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-bKt0YjC7.js";
4
+ import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-D8O1uTtu.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-Ooo4IC25.js";
6
6
  import { setTimeout } from "node:timers/promises";
7
7
  //#region src/local-service/maintenance/openmeld-tools-update-join.ts
8
8
  const DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;
@@ -53,4 +53,4 @@ async function waitForExternalOpenMeldToolsUpdate(input = {}) {
53
53
  //#endregion
54
54
  export { waitForExternalOpenMeldToolsUpdate as n, waitForOpenMeldToolsUpdateCompletion as r, resolveExternalOpenMeldToolsUpdate as t };
55
55
 
56
- //# sourceMappingURL=openmeld-tools-update-join-ZLpRTHO3.js.map
56
+ //# sourceMappingURL=openmeld-tools-update-join-BfY0GnDs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-ZLpRTHO3.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import { setTimeout as sleep } from \"node:timers/promises\";\nimport type { OpenMeldToolsUpdateOperation } from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (reportedOperationId !== operation.operationId) {\n reportedOperationId = operation.operationId;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAMI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;CACF,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,GAAI,WAAW,mBACX,EAAE,kBAAkB,WAAW,iBAAiB,IAChD,CAAC;EACL,GAAI,WAAW,uBACX,EAAE,sBAAsB,WAAW,qBAAqB,IACxD,CAAC;EACL,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAOI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,wBAAwB,UAAU,aAAa;GACjD,sBAAsB,UAAU;GAChC,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF"}
1
+ {"version":3,"file":"openmeld-tools-update-join-BfY0GnDs.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import { setTimeout as sleep } from \"node:timers/promises\";\nimport type { OpenMeldToolsUpdateOperation } from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (reportedOperationId !== operation.operationId) {\n reportedOperationId = operation.operationId;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAMI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;CACF,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,GAAI,WAAW,mBACX,EAAE,kBAAkB,WAAW,iBAAiB,IAChD,CAAC;EACL,GAAI,WAAW,uBACX,EAAE,sBAAsB,WAAW,qBAAqB,IACxD,CAAC;EACL,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAOI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,wBAAwB,UAAU,aAAa;GACjD,sBAAsB,UAAU;GAChC,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF"}
package/dist/openmeld.js CHANGED
@@ -3,7 +3,7 @@
3
3
  //#region src/openmeld-entry.ts
4
4
  const args = process.argv.slice(2);
5
5
  if (args.length === 3 && args[0] === "service" && args[1] === "execution-host") try {
6
- const { runExecutionHost } = await import("./entry-BE8uqbkD.js");
6
+ const { runExecutionHost } = await import("./entry-DeIRMCiW.js");
7
7
  const hostInstanceId = args[2];
8
8
  if (!hostInstanceId) throw new Error("The Host incarnation is required.");
9
9
  await runExecutionHost(hostInstanceId);
@@ -13,14 +13,14 @@ if (args.length === 3 && args[0] === "service" && args[1] === "execution-host")
13
13
  if (process.connected) process.disconnect();
14
14
  }
15
15
  else if (args.length === 2 && args[0] === "service" && args[1] === "update-worker") try {
16
- const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-C1J_ISOh.js");
16
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-BSODPHbn.js");
17
17
  await runOpenMeldMaintenanceWorker();
18
18
  } catch (error) {
19
19
  console.error("[openmeld.maintenance.failed]", error);
20
20
  process.exitCode = 1;
21
21
  }
22
22
  else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] === "maintenance-align-service")) try {
23
- const { runMaintenanceUpgrade } = await import("./upgrade-DTB0ZmxI.js");
23
+ const { runMaintenanceUpgrade } = await import("./upgrade-DhFEu0k6.js");
24
24
  await runMaintenanceUpgrade(args[0] === "maintenance-align-service");
25
25
  } catch (error) {
26
26
  try {
@@ -30,7 +30,7 @@ else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] ===
30
30
  console.error("[openmeld.maintenance.upgrade_failed]", error);
31
31
  process.exitCode = 1;
32
32
  }
33
- else await import("./openmeld-Tkp17vPg.js");
33
+ else await import("./openmeld-BQy0nMox.js");
34
34
  //#endregion
35
35
  export {};
36
36
 
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { J as normalizeOpenMeldProfileId, L as deviceOpenClawProfileBootstrapPath, P as accountProfileWorkspacePath, R as deviceOpenClawProfileDir, W as isPublishedOpenMeldHome, a as isOpenMeldOrphanedLockError, ct as resolveOpenMeldEnvPreset, d as runWithHeldLock, i as isOpenMeldLockError, j as accountProfileLocalMetaPath, lt as resolveOpenMeldRootDir, t as acquireLock, z as deviceOpenClawProfileWorkspaceDir } from "./lock-Bsl_ElWy.js";
4
- import { Kt as createLocalRuntimeExpectedRoutesApi, Mt as createAgentProfileBindingApi, mi as modelCatalogSchema, t as OpenMeldApiClientHttpError } from "./dist-BewA9srP.js";
4
+ import { Kt as createLocalRuntimeExpectedRoutesApi, Mt as createAgentProfileBindingApi, mi as modelCatalogSchema, t as OpenMeldApiClientHttpError } from "./dist-B07ziN_u.js";
5
5
  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";
6
- import { Bn as formatCanonicalMentionLiteral, H as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, J as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, K as openMeldDaemonProviderAccessEvidenceSchema, U as isOriginalErrorSafeForMessageDetails, Un as normalizeMessageEnvelope, di as resolveCommandAgentWorkActivity, q as openMeldDaemonTaskResultEnvelopeWriteSchema, sr as agentInteractionResolutionSchema, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH } from "./runtime-transport-0F5E6So6.js";
7
- import { d as getAuthSessionState, q as OPENCLAW_CLI_TIMEOUT_MS$1 } from "./auth-session-CDhQANWx.js";
8
- 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-BDS63N7Y.js";
6
+ import { Bn as formatCanonicalMentionLiteral, H as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, J as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, K as openMeldDaemonProviderAccessEvidenceSchema, U as isOriginalErrorSafeForMessageDetails, Un as normalizeMessageEnvelope, di as resolveCommandAgentWorkActivity, q as openMeldDaemonTaskResultEnvelopeWriteSchema, sr as agentInteractionResolutionSchema, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH } from "./runtime-transport-Cc_RN-PL.js";
7
+ import { d as getAuthSessionState, q as OPENCLAW_CLI_TIMEOUT_MS$1 } from "./auth-session-nhS8jyux.js";
8
+ 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-e3W6PD2M.js";
9
9
  import { r as daemonServiceLaneSchema } from "./service-contract-CRyDcIIf.js";
10
10
  import { n as agentControllerPermissionModeSchema, r as agentControllerCollaborationModeSchema } from "./open-code-permission-DHFJYc_o.js";
11
- import { U as listOpenMeldProfiles, X as touchDaemonCatalogSyncSignal, _ as toErrorMessage$20, ct as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, st as resolveCurrentOpenMeldAccountContext, u as normalizeOptionalText$52, ut as daemonRouteCatalogCacheSchema } from "./daemon-device-id-YnLMx1kN.js";
11
+ import { U as listOpenMeldProfiles, X as touchDaemonCatalogSyncSignal, _ as toErrorMessage$20, ct as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, st as resolveCurrentOpenMeldAccountContext, u as normalizeOptionalText$52, ut as daemonRouteCatalogCacheSchema } from "./daemon-device-id-DWO9_QW6.js";
12
12
  import { C as updateConfiguredDeviceRuntimeState, T as updateConfiguredSkillsConfig, a as resolveBaseUrl, d as createDefaultRuntimeAgentControllerSettings, g as getConfiguredSkillsConfig, p as getConfiguredDeviceRuntimeState, v as getRuntimeConfigReadHealth, y as resolveRuntimeSkillsCustomTargetId } from "./base-url-D7uE_xTo.js";
13
13
  import { a as powerShellEncodedArguments, l as normalizeCommandEnvironment, o as readWindowsProcessStartFileTime, r as isProcessIdentityAlive, s as resolveWindowsPowerShellPath, t as CURRENT_PROCESS_START_IDENTITY } from "./process-identity-CNus0e6E.js";
14
14
  import { n as writeDaemonLocalStateFile, t as readDaemonLocalStateFile } from "./daemon-local-state-file-jOXuXrky.js";
15
15
  import { m as daemonRuntimeDataPath } from "./daemon-state-B44aq2nm.js";
16
16
  import { i as readDaemonServiceContract } from "./daemon-service-contract-BpOBMGX0.js";
17
- import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-DcrVY0xb.js";
18
- import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-D-Cb6EVg.js";
17
+ import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-DyKx1xzm.js";
18
+ import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-DnJ_JYli.js";
19
19
  import { createRequire } from "node:module";
20
20
  import { createHash, randomUUID } from "node:crypto";
21
21
  import { homedir, loadavg, tmpdir } from "node:os";
@@ -1104,7 +1104,7 @@ function resolveServicePrimaryAction(input) {
1104
1104
  }
1105
1105
  function resolveRuntimeRoutePrimaryAction(input) {
1106
1106
  if (!(input.localService.reachable || input.route.online)) return "run_prepare";
1107
- if (input.runtime.reasonCodes.includes("usage_exhausted")) return "check_status";
1107
+ if (input.runtime.reasonCodes.some((reason) => reason === "usage_exhausted" || reason === "model.retired" || reason === "model.unavailable")) return "check_status";
1108
1108
  if (!input.runtime.ready) return resolveRuntimeNotReadyPrimaryAction({
1109
1109
  localService: input.localService,
1110
1110
  runtime: input.runtime
@@ -2996,6 +2996,24 @@ function readRegistryLifecycleStatus(value) {
2996
2996
  function isNonEmptyString(value) {
2997
2997
  return typeof value === "string" && value.trim().length > 0;
2998
2998
  }
2999
+ /** Unknown account/provider evidence cannot establish a scoped withdrawal. */
3000
+ function matchesModelRetirementScope(notice, context) {
3001
+ return notice.scope.controllerRef === context.agentControllerRef && (!notice.scope.authType || notice.scope.authType === context.authType) && (!notice.scope.providerId || notice.scope.providerId === context.providerId);
3002
+ }
3003
+ /** Deliberately has no clock: only a reviewed withdrawal can block a model. */
3004
+ function resolveModelAvailability(model, context) {
3005
+ if (model?.retirement?.status === "withdrawn" && matchesModelRetirementScope(model.retirement, context)) return {
3006
+ available: false,
3007
+ reasonCode: "model.retired",
3008
+ message: "This model is no longer offered. Change this agent's model to continue."
3009
+ };
3010
+ if (!model || model.unavailable) return {
3011
+ available: false,
3012
+ reasonCode: "model.unavailable",
3013
+ message: "This model is unavailable. Check this agent's model settings."
3014
+ };
3015
+ return { available: true };
3016
+ }
2999
3017
  function resolveConversationPolicyFromModelSelection(input) {
3000
3018
  const selection = createAgentProfileBindingModelSelection(input.modelSelection);
3001
3019
  const parsedRef = parseAgentControllerRef(input.agentControllerRef);
@@ -3004,38 +3022,42 @@ function resolveConversationPolicyFromModelSelection(input) {
3004
3022
  conversationPolicy: {}
3005
3023
  };
3006
3024
  const controller = input.catalog.agentControllers[parsedRef.id];
3025
+ if (selection) {
3026
+ const selectedModel = controller?.models.find((model) => model.id === selection.modelId);
3027
+ const availability = resolveModelAvailability(selectedModel, input);
3028
+ if (!availability.available) return {
3029
+ status: "rejected",
3030
+ reasonCode: availability.reasonCode,
3031
+ message: availability.message
3032
+ };
3033
+ const reasoningLevel = selection.reasoningLevel && selectedModel?.supportedReasoningLevels.includes(selection.reasoningLevel) ? selection.reasoningLevel : null;
3034
+ return {
3035
+ status: "accepted",
3036
+ conversationPolicy: {
3037
+ model: selection.modelId,
3038
+ ...reasoningLevel ? { reasoningLevel } : {}
3039
+ }
3040
+ };
3041
+ }
3007
3042
  if (!controller) return {
3008
3043
  status: "accepted",
3009
3044
  conversationPolicy: {}
3010
3045
  };
3011
- const availableModels = controller.models.filter((model) => !model.unavailable);
3046
+ const availableModels = controller.models.filter((model) => resolveModelAvailability(model, input).available);
3012
3047
  const defaultModel = availableModels.find((model) => model.id === controller.defaultModelId) ?? availableModels[0] ?? null;
3013
3048
  if (!defaultModel) return {
3014
3049
  status: "accepted",
3015
3050
  conversationPolicy: {}
3016
3051
  };
3017
- if (!selection) {
3018
- if (parsedRef.kind === "builtin" && parsedRef.id === "codex" && normalizeOptionalText$51(input.agentControllerConversationId)) return {
3019
- status: "accepted",
3020
- conversationPolicy: {}
3021
- };
3022
- return {
3023
- status: "accepted",
3024
- conversationPolicy: {
3025
- fallbackModel: defaultModel.id,
3026
- model: defaultModel.id
3027
- }
3028
- };
3029
- }
3030
- const selectedModel = availableModels.find((model) => model.id === selection.modelId) ?? null;
3031
- const model = selectedModel ?? defaultModel;
3032
- const reasoningLevel = selectedModel && selection.reasoningLevel && selectedModel.supportedReasoningLevels.includes(selection.reasoningLevel) ? selection.reasoningLevel : null;
3052
+ if (parsedRef.kind === "builtin" && parsedRef.id === "codex" && normalizeOptionalText$51(input.agentControllerConversationId)) return {
3053
+ status: "accepted",
3054
+ conversationPolicy: {}
3055
+ };
3033
3056
  return {
3034
3057
  status: "accepted",
3035
3058
  conversationPolicy: {
3036
3059
  fallbackModel: defaultModel.id,
3037
- model: model.id,
3038
- ...reasoningLevel ? { reasoningLevel } : {}
3060
+ model: defaultModel.id
3039
3061
  }
3040
3062
  };
3041
3063
  }
@@ -11656,6 +11678,8 @@ function isCodexSubscriptionAccessFailure(value) {
11656
11678
  * through to message-based classification so an unverified enum never silently
11657
11679
  * changes behavior.
11658
11680
  */
11681
+ const MODEL_NOT_FOUND = /^model not found [a-z0-9_./-]+$/i;
11682
+ const CHATGPT_MODEL_NOT_SUPPORTED = /^the '[a-z0-9_./-]+' model is not supported when using codex with a chatgpt account\.?$/i;
11659
11683
  function classifyCodexProviderAccountFailure(input) {
11660
11684
  if (normalizeOptionalText$33(input.codexErrorInfo)?.toLowerCase() === "usagelimitexceeded") return buildHardProviderFailure({
11661
11685
  code: "usage_exhausted",
@@ -11676,6 +11700,10 @@ function classifyCodexProviderAccountFailure(input) {
11676
11700
  code: "usage_exhausted",
11677
11701
  errorType: "adapter"
11678
11702
  }, input.message);
11703
+ if (MODEL_NOT_FOUND.test(input.message.trim()) || CHATGPT_MODEL_NOT_SUPPORTED.test(input.message.trim())) return withOriginalError({
11704
+ code: "model.unavailable",
11705
+ errorType: "adapter"
11706
+ }, input.message);
11679
11707
  if (isCodexAuthFailure(lowered)) return withOriginalError({
11680
11708
  code: "auth.required",
11681
11709
  errorType: "auth"
@@ -23306,6 +23334,8 @@ function summarizeSkippedDaemonProfiles(skippedProfiles) {
23306
23334
  }
23307
23335
  function formatDaemonProfileSkipReason(skipReason) {
23308
23336
  switch (skipReason) {
23337
+ case "model.retired": return "model retired; change this agent's model";
23338
+ case "model.unavailable": return "model unavailable; check this agent's model settings";
23309
23339
  case "projection.missing": return "local device runtime projection is missing";
23310
23340
  case "controller.registry.disabled": return "controller is disabled in the local agents registry";
23311
23341
  case "controller.launch.needs_repair": return "controller launch needs repair on this device";
@@ -29157,9 +29187,9 @@ function createModelCatalogReadSession(input) {
29157
29187
  async function readModelCatalogOnce(baseUrl) {
29158
29188
  try {
29159
29189
  const [apiClient, baseUrlModule, clientFoundationModule] = await Promise.all([
29160
- import("./dist-B6VsppM7.js"),
29190
+ import("./dist-DhWI1iyi.js"),
29161
29191
  import("./base-url-CMBApK1J.js"),
29162
- import("./api-client-foundation-CGImd4c8.js")
29192
+ import("./api-client-foundation-DTiFoGpI.js")
29163
29193
  ]);
29164
29194
  if (typeof apiClient.createConfigApi !== "function") throw new Error("config api client is unavailable");
29165
29195
  const resolvedBaseUrl = baseUrl ?? await baseUrlModule.resolveBaseUrl();
@@ -29482,6 +29512,10 @@ function buildAcceptedLocalDaemonRouteCandidate(input) {
29482
29512
  catalog: input.modelCatalog,
29483
29513
  modelSelection: input.modelSelection
29484
29514
  });
29515
+ if (conversationPolicyResolution.status === "rejected") return buildSkippedLocalDaemonRouteCandidate({
29516
+ profileId: input.profileId,
29517
+ skipReason: conversationPolicyResolution.reasonCode
29518
+ });
29485
29519
  return {
29486
29520
  profileId: input.profileId,
29487
29521
  route: {
@@ -31013,4 +31047,4 @@ async function prepareProviderRuntime(input, options = {}) {
31013
31047
  //#endregion
31014
31048
  export { canManageRegistryAgentSkillTargets as $, areAgentControllerInterfaceAccountsSame as $n, mergeOpenClawGatewayVisibility as $t, createExpectedRoutesReadSession as A, runRuntimeTask as An, compareAgentControllerRefsForDisplay as Ar, ensureOpenMeldManagedProfileWorkspace as At, reconcileNewRunnableBuiltinAgentsForSetup as B, upsertConversationExecutionState as Bn, createMutableRouteCatalogState as Bt, createModelCatalogReadSession as C, verifyCodexAppServerThread as Cn, MAX_HEARTBEAT_INTERVAL_MS as Cr, resolveLocalProjectConnectionForPath as Ct, NO_LOCAL_AGENTS_NEED_OPENMELD_SERVICE_REASON as D, emitReconcileCompletedEvidence as Dn, pruneStaleLeases as Dr, resolveRegistryOriginLaunchCommand as Dt, resolveProfileWorkspaceRuntime as E, emitDriftDetectedEvidence as En, applyIntervalJitterMs as Er, listBuiltinAgentsRegistryEntries as Et, listAgentRegistrations as F, loadLedgerState as Fn, resolveConfiguredProfileWorkspacePathForAccount as Ft, updateAgentRegistrations as G, createUnavailableProviderUsageLimits as Gn, syncRuntimeEventToInflightTaskControlRegistry as Gt, resolveAgentTargetState as H, buildAuthenticatedControlPlaneResponse as Hn, summarizeSkippedDaemonProfiles as Ht, listAgentTargetStates as I, removeConversationExecutionState as In, setCustomProfileWorkspace as It, normalizeAgentIds as J, buildCliLaunchInvocation as Jn, isDaemonReconcileInProgressError as Jt, notifyDaemonRouteCatalogChanged as K, createUnsupportedProviderUsageLimits as Kn, SPACE_ACTION_CONTEXT_GUIDANCE_LINES as Kt, manageAgentRegistrationInstallation as L, resolveConversationExecutionStateByLookupKey as Ln, setOpenMeldManagedProfileWorkspace as Lt, addAgentCustomTarget as M, buildTaskResultEnvelope as Mn, readProfileWorkspaceConfig as Mt, createRegistrationFromCatalogTarget as N, appendLedgerHistoryEntry as Nn, readProfileWorkspaceConfigForAccount as Nt, syncDeviceRuntimeStateProjection as O, emitReconcileStartedEvidence as On, resolveAdaptiveHeartbeatIntervalMs as Or, resolveRegistryRuntimeAdapterCapabilitySnapshot as Ot, listAgentCustomTargets as P, commitResolvedAgentContext as Pn, resolveConfiguredProfileWorkspacePath as Pt, resolveLocalRegistryAgentIdFromAgentControllerRef as Q, DEFAULT_TASK_LIFECYCLE_HEARTBEAT_INTERVAL_MS as Qn, createPendingAgentInteractionRegistry as Qt, readAgentRuntimeConfigHealth as R, seedLegacyAgentContext as Rn, validateCustomProfileWorkspacePath as Rt, syncProfileWorkspaceState as S, resolveCodexAppServerCompletedTurn as Sn, ADAPTIVE_HEARTBEAT_JITTER_RATIO as Sr, canonicalizeLocalProjectPath as St, resolveEffectiveProfileWorkingFolderRuntime as T, parseAntigravityUsageLimits as Tn, applyAcceptedLeases as Tr, withAgentActivityLocalStateLock as Tt, setAgentRegistrationEnabled as U, assertLegacyAgentContextAssociation as Un, syncDaemonRouteCatalogState as Ut, removeAgentCustomTarget as V, withLedgerStateTransaction as Vn, createRouteCatalogFromMutableState as Vt, updateAgentCustomTarget as W, buildAgentContextLookupKey as Wn, normalizeDispatchThreadAction as Wt, sortAgentRegistrations as X, listAgentControllerSupervisedProcessIds as Xn, buildDispatchReplyContextSummary as Xt, parseAgentEnabledOption as Y, materializeCliLaunchCommand as Yn, createSerialAgentInteractionCallback as Yt, repairBuiltinControllerInstall as Z, createProviderOriginalError as Zn, normalizeDispatchPostMessageAction as Zt, loadDaemonRouteCatalog as _, resolveInstalledGrokBuildLaunchCandidates as _n, resolveAgentProfileEditCapabilities as _r, removeProjectConnection as _t, buildOpenClawSpaceSessionKey as a, resolveDispatchContinuityObservation as an, createAuthorityOpenMeldServiceRuntimeId as ar, isHomebrewCommandPath as at, resolveLocalController as b, resolveInstalledCodexLaunchCandidates as bn, resolveSelectableCandidates as br, setDefaultProjectConnection as bt, findOpenClawAgentById as c, resolveLatestScopedConversationExecutionState as cn, isAgentExecutionReadyOrConnecting as cr, ProjectBindingOperationError as ct, resolveOpenClawAuthStatus as d, createLocalAdapterEntries as dn, peopleComputerContainsDevice as dr, isProjectBound as dt, createLocalTaskInterruptSender as en, buildAgentControllerRef as er, detectInstalledSkillsAgents as et, resolveOpenClawProviderRuntimeWorkingDirectory as f, parseOpenCodeGoUsageResponse as fn, projectPeopleComputersToLegacyLocalRuntimes as fr, listProjectBindings as ft, writeDaemonRouteCatalogCache as g, probeGrokBuildAcpInterface as gn, resolveAgentExecutionStatus as gr, removeMissingProjectConnections as gt, readDaemonRouteCatalogCache as h, GrokBuildAcpTransportError as hn, resolveAgentControllerPermissionModeForController as hr, removeAgentActivityBindingsWhileDeliveryLocked as ht, listOpenClawGatewayAgents as i, resolveDispatchQueueLogMeta as in, createAgentExecutionStatusDisplayRows as ir, isBunGlobalCommandPath as it, resolveAgentProfilePrimaryAgentControllerReport as j, buildRuntimeWorkspaceFingerprint as jn, resolveBuiltinAgentControllerBrand as jr, normalizeCustomProfileWorkspacePath as jt, createPrimaryBindingReadSession as k, DaemonServiceRunError as kn, resolveCatalogSyncIntervalMs as kr, resolveRegistryRuntimeAdapterContractByAgentControllerRef as kt, findOpenClawAgentsByWorkspace as l, resolveCatalogSyncSkippedProfilesLogState as ln, listAgentControllerPermissionModeOptions as lr, ProjectBindingStoreUpdateRequiredError as lt, resolveOpenClawLocalBootstrapPaths as m, resolveInstalledOpenCodeLaunchCandidates as mn, renderWorkingLanguagePrompt as mr, migrateProjectBindingStore as mt, fetchOpenClawGatewayHealth as n, createLocalExecutionSlots as nn, buildWorkingLanguagePromptPlan as nr, EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES as nt, normalizeOpenClawSpaceIdPrefix as o, resolveCompatibleAgentContextMatch as on, getAgentControllerPermissionModeDisplayMetadata as or, isNpmGlobalCommandPath as ot, readOpenClawLocalBootstrapState as p, forkOpenCodeServerSession as pn, renderInformationProtectionPrompt as pr, listProjectConnectionsWithStatus as pt, normalizeAgentId as q, resolveDispatchSpaceActionMcpServer as qn, SPACE_ACTION_TARGET_GUIDANCE_LINES as qt, listOpenClawAgents as r, createInflightTaskControlRegistry as rn, createAgentControllerInterfaceDisplayRows as rr, resolveBuiltinAgentControllerDefinition as rt, slugifyOpenClawNamePart as s, resolveCompatibleConversationExecutionState as sn, getAgentControllerPermissionModeFieldLabel as sr, isPnpmGlobalCommandPath as st, prepareProviderRuntime as t, buildLocalServiceDiagnosticsPayload as tn, buildInformationProtectionPromptPlan as tr, resolveSkillsAgentRegistry as tt, matchesExpectedWorkspace as u, createLocalAdapterContainer as un, parseAgentControllerRef as ur, bindProject as ut, buildRuntimeRouteTargets as v, projectCodexUsageLimits as vn, resolveEvidenceSyncHealth as vr, resolveProjectBindingForPath as vt, resolveCurrentEffectiveProfileWorkingFolderRuntime as w, resolveInstalledClaudeCodeLaunchCandidates as wn, MIN_HEARTBEAT_INTERVAL_MS as wr, withAgentActivityDeliveryLock as wt, resolveLocalRuntimeControllerSupport as x, forkCodexAppServerThread as xn, resolveRouteRegistrationReconcileDecision as xr, unbindProject as xt, readLocalEnabledControllers as y, resolveCodexTimeoutMs as yn, resolveNativeAgentControllerPermissionModeForController as yr, runIfAgentActivityBindingGenerationIsCurrent as yt, reconcileNewRunnableBuiltinAgentRegistrations as z, settleInflightTask as zn, describeProfileWorkspacePathValidationFailure as zt };
31015
31049
 
31016
- //# sourceMappingURL=prepare-provider-runtime-CD5ZI-ct.js.map
31050
+ //# sourceMappingURL=prepare-provider-runtime-CWZcuMF6.js.map