openmeld 0.3.246 → 0.3.247

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 (104) hide show
  1. package/dist/{add-me-membership-C7dYkfPz.js → add-me-membership-DUeJA9q4.js} +2 -2
  2. package/dist/{add-me-membership-C7dYkfPz.js.map → add-me-membership-DUeJA9q4.js.map} +1 -1
  3. package/dist/{agents-QisYIlFS.js → agents-woAcH0O6.js} +10 -10
  4. package/dist/{agents-QisYIlFS.js.map → agents-woAcH0O6.js.map} +1 -1
  5. package/dist/{api-client-foundation-CYbEdm9o.js → api-client-foundation-DMEfIARh.js} +3 -3
  6. package/dist/{api-client-foundation-CYbEdm9o.js.map → api-client-foundation-DMEfIARh.js.map} +1 -1
  7. package/dist/{api-client-foundation-B1aTRrIy.js → api-client-foundation-mqLjUunz.js} +1 -1
  8. package/dist/{auth-session-JhILeJRO.js → auth-session-D7hlE-47.js} +2 -2
  9. package/dist/{auth-session-JhILeJRO.js.map → auth-session-D7hlE-47.js.map} +1 -1
  10. package/dist/auth-session-DXxmGll1.js +4 -0
  11. package/dist/{channel-C6tm9T7P.js → channel-BeUv2bLR.js} +3 -3
  12. package/dist/{channel-C6tm9T7P.js.map → channel-BeUv2bLR.js.map} +1 -1
  13. package/dist/{cloud-computer-J2tdcTPm.js → cloud-computer-C81_vVOV.js} +4 -4
  14. package/dist/{cloud-computer-J2tdcTPm.js.map → cloud-computer-C81_vVOV.js.map} +1 -1
  15. package/dist/{command-BXJ-OwBD.js → command-qNknO9gl.js} +15 -15
  16. package/dist/{command-BXJ-OwBD.js.map → command-qNknO9gl.js.map} +1 -1
  17. package/dist/{computer-connection-BKtrn0d2.js → computer-connection-WpsIQfkh.js} +2 -2
  18. package/dist/{computer-connection-BKtrn0d2.js.map → computer-connection-WpsIQfkh.js.map} +1 -1
  19. package/dist/{computer-connection-review-bUqNKi6q.js → computer-connection-review-Df2G8VWY.js} +5 -5
  20. package/dist/{computer-connection-review-bUqNKi6q.js.map → computer-connection-review-Df2G8VWY.js.map} +1 -1
  21. package/dist/{computer-disconnect-D_Apsn9P.js → computer-disconnect-ttAH9WgN.js} +7 -7
  22. package/dist/{computer-disconnect-D_Apsn9P.js.map → computer-disconnect-ttAH9WgN.js.map} +1 -1
  23. package/dist/{computer-setup-continuation-occq0LmS.js → computer-setup-continuation-tbuUZSe5.js} +3 -3
  24. package/dist/{computer-setup-continuation-occq0LmS.js.map → computer-setup-continuation-tbuUZSe5.js.map} +1 -1
  25. package/dist/{context-M7dvalCp.js → context-x0T_qTHp.js} +4 -4
  26. package/dist/{context-M7dvalCp.js.map → context-x0T_qTHp.js.map} +1 -1
  27. package/dist/{daemon-device-id-C3gKch4E.js → daemon-device-id-DgwvQllt.js} +4 -4
  28. package/dist/{daemon-device-id-C3gKch4E.js.map → daemon-device-id-DgwvQllt.js.map} +1 -1
  29. package/dist/{daemon-lifecycle-journal-CGUuJshv.js → daemon-lifecycle-journal-C32I8p4n.js} +3 -3
  30. package/dist/{daemon-lifecycle-journal-CGUuJshv.js.map → daemon-lifecycle-journal-C32I8p4n.js.map} +1 -1
  31. package/dist/{daemon-service-runtime-CktU3ER4.js → daemon-service-runtime-DVqzJKke.js} +2 -2
  32. package/dist/{daemon-service-runtime-CktU3ER4.js.map → daemon-service-runtime-DVqzJKke.js.map} +1 -1
  33. package/dist/{daemon-service-update-coordinator-D0-15tZW.js → daemon-service-update-coordinator-BTlVzU-7.js} +14 -14
  34. package/dist/daemon-service-update-coordinator-BTlVzU-7.js.map +1 -0
  35. package/dist/{dispatch-owned-runtime-gOluDX5_.js → dispatch-owned-runtime-g2lLeYtx.js} +187 -50
  36. package/dist/dispatch-owned-runtime-g2lLeYtx.js.map +1 -0
  37. package/dist/dist-CXB_bdSS.js +4 -0
  38. package/dist/{dist-KibLweLD.js → dist-DGeoVaIx.js} +404 -279
  39. package/dist/dist-DGeoVaIx.js.map +1 -0
  40. package/dist/{dual-view-guide-catalog-0kSizTFt.js → dual-view-guide-catalog-CkcY09Kh.js} +3 -3
  41. package/dist/{dual-view-guide-catalog-0kSizTFt.js.map → dual-view-guide-catalog-CkcY09Kh.js.map} +1 -1
  42. package/dist/{elapsed-time-Bo1CJczC.js → elapsed-time-BMG1CU23.js} +3 -3
  43. package/dist/{elapsed-time-Bo1CJczC.js.map → elapsed-time-BMG1CU23.js.map} +1 -1
  44. package/dist/{entry-B11DkH2I.js → entry-CP7_Vgs4.js} +7 -7
  45. package/dist/{entry-B11DkH2I.js.map → entry-CP7_Vgs4.js.map} +1 -1
  46. package/dist/{installation-inventory-BZgQmVup.js → installation-inventory-7JOtUjyG.js} +3 -3
  47. package/dist/{installation-inventory-BZgQmVup.js.map → installation-inventory-7JOtUjyG.js.map} +1 -1
  48. package/dist/{installer-k2gOOs58.js → installer-BRpAz1X_.js} +2 -2
  49. package/dist/{installer-k2gOOs58.js.map → installer-BRpAz1X_.js.map} +1 -1
  50. package/dist/{meta-api-DruuiAx-.js → meta-api-QskBmfuf.js} +5 -5
  51. package/dist/{meta-api-DruuiAx-.js.map → meta-api-QskBmfuf.js.map} +1 -1
  52. package/dist/{open-code-permission-DHFJYc_o.js → open-code-permission-B5f1e5an.js} +2 -31
  53. package/dist/open-code-permission-B5f1e5an.js.map +1 -0
  54. package/dist/{openmeld-DUdN78WD.js → openmeld-BxTCCHMn.js} +194 -60
  55. package/dist/openmeld-BxTCCHMn.js.map +1 -0
  56. package/dist/{openmeld-maintenance-worker-DwkvZD0q.js → openmeld-maintenance-worker-BQ2YbwA9.js} +9 -9
  57. package/dist/{openmeld-maintenance-worker-DwkvZD0q.js.map → openmeld-maintenance-worker-BQ2YbwA9.js.map} +1 -1
  58. package/dist/{openmeld-tools-update-join-BNUIw_Lo.js → openmeld-tools-update-join-Dj-MEQW_.js} +4 -4
  59. package/dist/{openmeld-tools-update-join-BNUIw_Lo.js.map → openmeld-tools-update-join-Dj-MEQW_.js.map} +1 -1
  60. package/dist/openmeld.js +4 -4
  61. package/dist/{prepare-provider-runtime-_XRIioDp.js → prepare-provider-runtime-B6_dfpiZ.js} +74 -22
  62. package/dist/prepare-provider-runtime-B6_dfpiZ.js.map +1 -0
  63. package/dist/{prepare-session-executor-B5AjN0qz.js → prepare-session-executor-DA9saGAk.js} +18 -18
  64. package/dist/{prepare-session-executor-B5AjN0qz.js.map → prepare-session-executor-DA9saGAk.js.map} +1 -1
  65. package/dist/{process-channel-CTXWjlBP.js → process-channel-HthE5ehS.js} +2 -2
  66. package/dist/{process-channel-CTXWjlBP.js.map → process-channel-HthE5ehS.js.map} +1 -1
  67. package/dist/{runtime-DCBc6YOq.js → runtime-C7lY_Z2r.js} +103 -20
  68. package/dist/{runtime-DCBc6YOq.js.map → runtime-C7lY_Z2r.js.map} +1 -1
  69. package/dist/{runtime-agent-controller-reporting-submission-CGa3GGL6.js → runtime-agent-controller-reporting-submission-IhxMO4UA.js} +8 -8
  70. package/dist/{runtime-agent-controller-reporting-submission-CGa3GGL6.js.map → runtime-agent-controller-reporting-submission-IhxMO4UA.js.map} +1 -1
  71. package/dist/{runtime-transport-BzCp9hM3.js → runtime-transport-DRb5__yP.js} +188 -18
  72. package/dist/runtime-transport-DRb5__yP.js.map +1 -0
  73. package/dist/{service-BEH6-P8U.js → service-DveGEdh3.js} +312 -21
  74. package/dist/service-DveGEdh3.js.map +1 -0
  75. package/dist/{service-account-authorization-CtvSn02O.js → service-account-authorization-CAVkiKSF.js} +2 -2
  76. package/dist/{service-account-authorization-CtvSn02O.js.map → service-account-authorization-CAVkiKSF.js.map} +1 -1
  77. package/dist/{service-account-control-BUPiFEGo.js → service-account-control-BtE73wcO.js} +9 -9
  78. package/dist/{service-account-control-BUPiFEGo.js.map → service-account-control-BtE73wcO.js.map} +1 -1
  79. package/dist/{service-control-capabilities-PMvSlaJj.js → service-control-capabilities-BQrqIGBP.js} +3 -3
  80. package/dist/{service-control-capabilities-PMvSlaJj.js.map → service-control-capabilities-BQrqIGBP.js.map} +1 -1
  81. package/dist/{service-control-capabilities-D-Nhqqgo.js → service-control-capabilities-adDptMIH.js} +1 -1
  82. package/dist/{state-C_iJAzKh.js → state-DWwNdCy5.js} +2 -2
  83. package/dist/{state-C_iJAzKh.js.map → state-DWwNdCy5.js.map} +1 -1
  84. package/dist/{updates-api-s2-QB929.js → updates-api-9midbUU1.js} +12 -136
  85. package/dist/updates-api-9midbUU1.js.map +1 -0
  86. package/dist/upgrade-BvpBhL0U.js +4 -0
  87. package/dist/{upgrade-JmhCNmvs.js → upgrade-H-_QW75e.js} +8 -8
  88. package/dist/{upgrade-JmhCNmvs.js.map → upgrade-H-_QW75e.js.map} +1 -1
  89. package/package.json +12 -12
  90. package/skills/openmeld-cli/SKILL.md +2 -0
  91. package/skills/openmeld-cli/playbooks/computer.md +55 -0
  92. package/skills/openmeld-cli/playbooks/plugins.md +37 -0
  93. package/dist/auth-session-DUYOBXO3.js +0 -4
  94. package/dist/daemon-service-update-coordinator-D0-15tZW.js.map +0 -1
  95. package/dist/dispatch-owned-runtime-gOluDX5_.js.map +0 -1
  96. package/dist/dist-DMlKqjUf.js +0 -4
  97. package/dist/dist-KibLweLD.js.map +0 -1
  98. package/dist/open-code-permission-DHFJYc_o.js.map +0 -1
  99. package/dist/openmeld-DUdN78WD.js.map +0 -1
  100. package/dist/prepare-provider-runtime-_XRIioDp.js.map +0 -1
  101. package/dist/runtime-transport-BzCp9hM3.js.map +0 -1
  102. package/dist/service-BEH6-P8U.js.map +0 -1
  103. package/dist/updates-api-s2-QB929.js.map +0 -1
  104. package/dist/upgrade-Dikfgr8z.js +0 -4
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-_XRIioDp.js";
4
- import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-C_iJAzKh.js";
5
- import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-CktU3ER4.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-D0-15tZW.js";
3
+ import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-B6_dfpiZ.js";
4
+ import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-DWwNdCy5.js";
5
+ import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-DVqzJKke.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-BTlVzU-7.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-CGUuJshv.js";
11
+ import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-C32I8p4n.js";
12
12
  import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-SXQcFE9c.js";
13
- import { s as resolveTrackedInstallTargets } from "./installation-inventory-BZgQmVup.js";
14
- import { t as installSkillsToTargets } from "./installer-k2gOOs58.js";
13
+ import { s as resolveTrackedInstallTargets } from "./installation-inventory-7JOtUjyG.js";
14
+ import { t as installSkillsToTargets } from "./installer-BRpAz1X_.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-occq0LmS.js");
79
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-tbuUZSe5.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-DwkvZD0q.js.map
108
+ //# sourceMappingURL=openmeld-maintenance-worker-BQ2YbwA9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-DwkvZD0q.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-BQ2YbwA9.js","names":[],"sources":["../src/skills/maintenance.ts","../src/local-service/maintenance/openmeld-maintenance-worker.ts"],"sourcesContent":["import { getConfiguredSkillsConfig } from \"../config/runtime-config\";\nimport { resolveSkillsAgentRegistry } from \"./agents\";\nimport { resolveTrackedInstallTargets } from \"./installation-inventory\";\nimport { installSkillsToTargets, withSkillsInstallLock } from \"./installer\";\nimport { downloadOfficialSkillUpdate } from \"./official-release\";\nimport { ensureLocalSkills } from \"./store\";\n\nexport async function maintainOfficialCliSkill(): Promise<void> {\n const outcome = await downloadOfficialSkillUpdate().catch(\n (error: unknown) => {\n process.stderr.write(\n `[openmeld] Skill download deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n return \"deferred\" as const;\n }\n );\n if (outcome === \"lane_isolated\") {\n return;\n }\n await withSkillsInstallLock(async () => {\n const localSkills = await ensureLocalSkills();\n const skillsConfig = await getConfiguredSkillsConfig();\n const targets = await resolveTrackedInstallTargets({\n skillsConfig,\n registry: resolveSkillsAgentRegistry(skillsConfig),\n localSkills,\n onlyOpenMeldInstalledTargets: false,\n });\n const results = await installSkillsToTargets({\n skills: localSkills,\n targets,\n });\n const failures = results.filter((result) => result.status === \"failed\");\n if (failures.length) {\n throw new Error(\n failures\n .map((result) => `${result.targetId}: ${result.reason}`)\n .join(\"; \")\n );\n }\n });\n}\n","import { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { configureDaemonMaintenanceEnvironment } from \"../../config/daemon-service-update-worker-registration\";\nimport { withDaemonServiceReconcileLock } from \"../../config/daemon-state\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../../config/lock\";\nimport { reconcileManagedCliLauncher } from \"../../local-components/managed-install\";\nimport { OPENMELD_VERSION } from \"../../runtime/version\";\nimport { maintainOfficialCliSkill } from \"../../skills/maintenance\";\nimport {\n readDaemonServiceStartupPolicyCurrent,\n resolveDaemonServiceManager,\n} from \"../lifecycle/daemon-service-manager\";\nimport { assertDaemonMaintenanceInstallationOwnership } from \"../lifecycle/daemon-service-manager-command-match\";\nimport {\n runPendingDaemonServiceUpdate,\n scheduleDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-coordinator\";\nimport {\n completePendingDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport { prepareDaemonServiceUpdateWorkerCarrier } from \"../lifecycle/daemon-service-update-worker-manager\";\nimport { readOpenMeldToolsMaintenancePolicy } from \"./openmeld-tools-maintenance-policy\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"./openmeld-tools-update-coordinator\";\n\n// The OS owns this process. It is also the sole executor of persisted download\n// attempts; Service requests only publish an attempt and wake this worker.\nexport async function runOpenMeldMaintenanceWorker(): Promise<void> {\n configureDaemonMaintenanceEnvironment(process.env);\n await runMaintenanceWithLock();\n}\n\nasync function runMaintenanceWithLock(): Promise<boolean> {\n try {\n const lock = await acquireLock({\n openMeldProfileId: \"__system__\",\n key: \"maintenance-worker\",\n });\n return await runWithHeldLock({\n lock,\n run: runMaintenancePass,\n releaseContext: { component: \"maintenance_worker\" },\n });\n } catch (error) {\n // Setup/repair may still own the lifecycle lock when the OS first runs us.\n // Leave its state intact; the existing OS trigger will run another pass.\n if (isOpenMeldLockError(error) && !isOpenMeldOrphanedLockError(error)) {\n return false;\n }\n throw error;\n }\n}\n\nasync function runMaintenancePass(): Promise<boolean> {\n const pendingJob = await readPendingDaemonServiceUpdate();\n const pendingAttempt = await readPendingOpenMeldToolsUpdateAttempt();\n if (!(pendingJob || pendingAttempt)) {\n const contract = await readDaemonServiceContract();\n if (!contract || contract.desiredState !== \"background\") {\n return false;\n }\n }\n await assertDaemonMaintenanceInstallationOwnership();\n await reconcileManagedCliLauncher();\n if ((await readOpenMeldToolsMaintenancePolicy()).automaticUpdatesEnabled) {\n try {\n await maintainOfficialCliSkill();\n } catch (error) {\n process.stderr.write(\n `[openmeld] Skill maintenance deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n }\n }\n const coordinator = createOpenMeldToolsUpdateCoordinator();\n if (!pendingJob) {\n if (pendingAttempt) {\n await coordinator.resumePendingUpdate();\n } else {\n const update = await coordinator.requestUpdate({\n requestSource: \"automatic\",\n });\n await reconcileCurrentServiceStartupPolicy(update.status === \"current\");\n }\n await coordinator.waitForIdle();\n }\n const result = await runPendingDaemonServiceUpdate();\n if (result?.phase === \"updated\") {\n const {\n finishComputerSetupAfterBackgroundUpdate,\n recoverComputerSetupAfterBackgroundUpdate,\n } = await import(\"../../commands/computer-setup-continuation\");\n // Only a verified replacement may replace the working recovery carrier.\n await prepareDaemonServiceUpdateWorkerCarrier(result);\n await finishComputerSetupAfterBackgroundUpdate();\n await withDaemonServiceReconcileLock(async () => {\n const current = await readPendingDaemonServiceUpdate();\n if (\n current?.jobId === result.jobId &&\n current.phase === \"updated\" &&\n current.targetVersion === result.targetVersion\n ) {\n await completePendingDaemonServiceUpdate(current);\n }\n });\n await recoverComputerSetupAfterBackgroundUpdate();\n return true;\n }\n if (result?.phase === \"restored\" || result?.phase === \"needs_help\") {\n process.exitCode = 1;\n }\n return false;\n}\n\nasync function reconcileCurrentServiceStartupPolicy(\n updatesCurrent: boolean\n): Promise<void> {\n if (!updatesCurrent) {\n return;\n }\n const contract = await readDaemonServiceContract();\n // An older recovery worker must not apply its policy to a newer Service,\n // and maintenance must preserve an explicit user stop.\n if (\n contract?.desiredState !== \"background\" ||\n contract.daemonVersion !== OPENMELD_VERSION\n ) {\n return;\n }\n const manager = await resolveDaemonServiceManager();\n if (\n (await readDaemonServiceStartupPolicyCurrent({\n controller: manager?.controller ?? null,\n status: (await manager?.status()) ?? null,\n })) === false\n ) {\n await scheduleDaemonServiceUpdate({\n targetVersion: contract.daemonVersion,\n urgency: \"available\",\n });\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-CktU3ER4.js";
4
- import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-D0-15tZW.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-Bo1CJczC.js";
3
+ import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-DVqzJKke.js";
4
+ import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BTlVzU-7.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-BMG1CU23.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-BNUIw_Lo.js.map
64
+ //# sourceMappingURL=openmeld-tools-update-join-Dj-MEQW_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-BNUIw_Lo.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-Dj-MEQW_.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-B11DkH2I.js");
14
+ const { runExecutionHost } = await import("./entry-CP7_Vgs4.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-DwkvZD0q.js");
24
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-BQ2YbwA9.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-Dikfgr8z.js");
31
+ const { runMaintenanceUpgrade } = await import("./upgrade-BvpBhL0U.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-DUdN78WD.js");
41
+ else await import("./openmeld-BxTCCHMn.js");
42
42
  //#endregion
43
43
  export {};
44
44
 
@@ -1,24 +1,24 @@
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 { G as isOriginalErrorSafeForMessageDetails, Gn as agentInteractionResolutionSchema, J as openMeldDaemonProviderAccessEvidenceSchema, W as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, X as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, Xr as resolveCommandAgentWorkActivity, Y as openMeldDaemonTaskResultEnvelopeWriteSchema, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH, tt as aiUsageObservationSchema, wn as normalizeMessageEnvelope, xn as formatCanonicalMentionLiteral } from "./runtime-transport-BzCp9hM3.js";
4
+ import { G as isOriginalErrorSafeForMessageDetails, J as openMeldDaemonProviderAccessEvidenceSchema, Jn as agentInteractionResolutionSchema, W as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, X as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, Xn as agentControllerPermissionModeSchema, Y as openMeldDaemonTaskResultEnvelopeWriteSchema, ei as resolveCommandAgentWorkActivity, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH, tt as aiUsageObservationSchema, wn as normalizeMessageEnvelope, xn as formatCanonicalMentionLiteral } from "./runtime-transport-DRb5__yP.js";
5
5
  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-B93wmVS6.js";
6
- import { Ii as modelCatalogSchema, Rt as createAgentProfileBindingApi, en as createLocalRuntimeExpectedRoutesApi, t as OpenMeldApiClientHttpError } from "./dist-KibLweLD.js";
6
+ import { Ki as modelCatalogSchema, Rt as createAgentProfileBindingApi, en as createLocalRuntimeExpectedRoutesApi, t as OpenMeldApiClientHttpError } from "./dist-DGeoVaIx.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";
8
- import { J as OPENCLAW_CLI_TIMEOUT_MS$1, d as getAuthSessionState } from "./auth-session-JhILeJRO.js";
8
+ import { J as OPENCLAW_CLI_TIMEOUT_MS$1, d as getAuthSessionState } from "./auth-session-D7hlE-47.js";
9
9
  import { r as daemonServiceLaneSchema } from "./service-contract-CRyDcIIf.js";
10
- import { H as agentExecutionSteerRequestSchema, V as daemonRouteCatalogCacheSchema, _ as toErrorMessage$20, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, u as normalizeOptionalText$49, z as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME } from "./daemon-device-id-C3gKch4E.js";
11
- import { n as agentControllerPermissionModeSchema, r as agentControllerCollaborationModeSchema } from "./open-code-permission-DHFJYc_o.js";
10
+ import { H as agentExecutionSteerRequestSchema, V as daemonRouteCatalogCacheSchema, _ as toErrorMessage$20, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, u as normalizeOptionalText$49, z as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME } from "./daemon-device-id-DgwvQllt.js";
11
+ import { n as agentControllerCollaborationModeSchema } from "./open-code-permission-B5f1e5an.js";
12
12
  import { c as readWindowsProcessStartFileTime, d as resolveWindowsNativeProcessHelper, f as windowsNativeProcessRequestSchema, l as resolveWindowsPowerShellPath, o as powerShellEncodedArguments, r as isProcessIdentityAlive, t as CURRENT_PROCESS_START_IDENTITY, u as WINDOWS_NATIVE_PROCESS_REQUEST_ENV } from "./process-identity-BRbhGGTM.js";
13
13
  import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-BMI00i2F.js";
14
14
  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-0AoeTi3w.js";
15
15
  import { n as normalizeCommandEnvironment } from "./process-environment-BWSFeUu6.js";
16
- import { F as resolveCurrentOpenMeldAccountContext, _ as touchDaemonCatalogSyncSignal, d as listOpenMeldProfiles } from "./context-M7dvalCp.js";
16
+ import { F as resolveCurrentOpenMeldAccountContext, _ as touchDaemonCatalogSyncSignal, d as listOpenMeldProfiles } from "./context-x0T_qTHp.js";
17
17
  import { n as writeDaemonLocalStateFile, t as readDaemonLocalStateFile } from "./daemon-local-state-file-jOXuXrky.js";
18
18
  import { m as daemonRuntimeDataPath } from "./daemon-state-Dte9re5V.js";
19
- import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-CYbEdm9o.js";
19
+ import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-DMEfIARh.js";
20
20
  import { i as readDaemonServiceContract } from "./daemon-service-contract-COPKbCy_.js";
21
- import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-CGUuJshv.js";
21
+ import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-C32I8p4n.js";
22
22
  import { i as resolveWindowsCommandPath, n as quoteWindowsProcessArgument, r as resolvePlatformCommand, t as execPlatformFile } from "./process-launch-B0pHlkV_.js";
23
23
  import { createRequire } from "node:module";
24
24
  import { createHash, randomUUID } from "node:crypto";
@@ -1378,12 +1378,12 @@ const CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
1378
1378
  description: "Codex asks before editing files outside its working folder or using the internet.",
1379
1379
  label: "Ask for approval",
1380
1380
  requiresExplicitConfirmation: false,
1381
- technicalDetail: "codex -s workspace-write -a untrusted",
1381
+ technicalDetail: "codex -s workspace-write -a on-request -c approvals_reviewer=\"user\"",
1382
1382
  tone: "neutral",
1383
1383
  value: "codex:askForApproval"
1384
1384
  },
1385
1385
  {
1386
- description: "Codex automatically reviews eligible approval requests. It may approve or deny them; denied actions may stop or require a safer approach.",
1386
+ description: "Automatically review actions that need approval. Potentially unsafe actions may be blocked.",
1387
1387
  label: "Approve for me",
1388
1388
  requiresExplicitConfirmation: false,
1389
1389
  technicalDetail: "codex -s workspace-write -a on-request -c approvals_reviewer=\"auto_review\"",
@@ -1391,7 +1391,7 @@ const CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
1391
1391
  value: "codex:approveForMe"
1392
1392
  },
1393
1393
  {
1394
- description: "Codex bypasses its sandbox and approval prompts for this Agent. Separate file-access limits on this Computer still apply.",
1394
+ description: "Allow internet and file access without Codex approval prompts. This Computer's file-access limits still apply.",
1395
1395
  label: "Full access",
1396
1396
  requiresExplicitConfirmation: true,
1397
1397
  technicalDetail: "codex --dangerously-bypass-approvals-and-sandbox",
@@ -1399,8 +1399,8 @@ const CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
1399
1399
  value: "codex:fullAccess"
1400
1400
  },
1401
1401
  {
1402
- description: "Codex follows the permissions in config.toml. OpenMeld does not override its sandbox or approval settings.",
1403
- label: "Custom (config.toml)",
1402
+ description: "This Agent keeps its previous permission settings until you choose a mode.",
1403
+ label: "Previous settings",
1404
1404
  requiresExplicitConfirmation: false,
1405
1405
  technicalDetail: "codex (no OpenMeld permission overrides)",
1406
1406
  tone: "neutral",
@@ -1579,7 +1579,7 @@ function resolveNativeAgentControllerPermissionModeForController(value, input) {
1579
1579
  }
1580
1580
  function listAgentControllerPermissionModeOptions(input) {
1581
1581
  const controllerOptions = resolveControllerOptions(input?.agentControllerRef);
1582
- if (controllerOptions) return controllerOptions.map((option) => ({ ...option }));
1582
+ if (controllerOptions) return controllerOptions.filter((option) => option.value !== "codex:customConfig").map((option) => ({ ...option }));
1583
1583
  if (input) return [];
1584
1584
  return [
1585
1585
  ...ANTIGRAVITY_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
@@ -1587,10 +1587,10 @@ function listAgentControllerPermissionModeOptions(input) {
1587
1587
  ...CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
1588
1588
  ...CURSOR_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
1589
1589
  ...GROK_BUILD_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS
1590
- ].map((option) => ({ ...option }));
1590
+ ].filter((option) => option.value !== "codex:customConfig").map((option) => ({ ...option }));
1591
1591
  }
1592
1592
  function resolveAgentControllerPermissionModeOption(policy, input) {
1593
- return (resolveControllerOptions(input?.agentControllerRef) ?? listAgentControllerPermissionModeOptions()).find((option) => option.value === policy) ?? CLAUDE_CODE_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS[0];
1593
+ return (resolveControllerOptions(input?.agentControllerRef) ?? Object.values(AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS_BY_CONTROLLER_ID).flat()).find((option) => option.value === policy) ?? CLAUDE_CODE_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS[0];
1594
1594
  }
1595
1595
  function resolveControllerOptions(agentControllerRef) {
1596
1596
  const parsedRef = parseAgentControllerRef(agentControllerRef);
@@ -12617,7 +12617,7 @@ function buildClaudeAgentSdkOptions(input) {
12617
12617
  const options = {
12618
12618
  abortController: input.abortController,
12619
12619
  additionalDirectories: [input.claudeWorkdir],
12620
- allowDangerouslySkipPermissions: permissionMode === "bypassPermissions",
12620
+ allowDangerouslySkipPermissions: input.executionMode !== "repair",
12621
12621
  cwd: input.claudeWorkdir,
12622
12622
  env: {
12623
12623
  ...process.env,
@@ -13555,6 +13555,7 @@ const CONTROL_REQUEST_TIMEOUT_MS_BY_OPERATION = {
13555
13555
  "thread/resume": COLD_CONTROLLER_ADMISSION_TIMEOUT_MS,
13556
13556
  "thread/start": COLD_CONTROLLER_ADMISSION_TIMEOUT_MS,
13557
13557
  "turn/start": COLD_CONTROLLER_ADMISSION_TIMEOUT_MS,
13558
+ "turn/settings/update": FAST_METADATA_ADMISSION_TIMEOUT_MS,
13558
13559
  "turn/steer": FAST_METADATA_ADMISSION_TIMEOUT_MS
13559
13560
  };
13560
13561
  function resolveCodexAppServerControlRequestTimeoutMs(input) {
@@ -14384,7 +14385,7 @@ async function invokeCodexAppServerTransport(input) {
14384
14385
  instructionPrompt: input.instructionPrompt
14385
14386
  });
14386
14387
  assertFileAccessBeforeTurn(threadContext.permissionResponse, input.computerFileAccessBoundary, input.codexWorkdir, permissionExecutionMode);
14387
- await session.verifyScopedMcp(threadContext.threadId);
14388
+ await session.verifyScopedMcp(threadContext.threadId, parseCodexAppServerVersion(initialized));
14388
14389
  const collaborationMode = await resolveCodexAppServerTurnCollaborationMode({
14389
14390
  conversationPolicy: input.conversationPolicy,
14390
14391
  conversationPolicyParams,
@@ -14403,6 +14404,8 @@ async function invokeCodexAppServerTransport(input) {
14403
14404
  session.observeUsageForThread(executionThreadId, threadContext.model);
14404
14405
  throwIfCodexDispatchCancelled(input.cancellationSignal);
14405
14406
  const completedTurn = await startAndAwaitAppServerTurn({
14407
+ supportsLiveReviewer: supportsAgentControllerVersion(parseCodexAppServerVersion(initialized), ">=0.153.0-alpha.4"),
14408
+ permissionMode: resolveCodexAgentControllerPermissionMode$1(input.agentControllerPermissionMode),
14406
14409
  cancellationSignal: input.cancellationSignal,
14407
14410
  collaborationMode,
14408
14411
  conversationPolicyParams,
@@ -14461,6 +14464,44 @@ async function startAndAwaitAppServerTurn(input) {
14461
14464
  } catch {}
14462
14465
  };
14463
14466
  const unregisterActiveTurn = session.registerActiveTurn({
14467
+ updatePermissionMode: async (update) => {
14468
+ const next = update.agentControllerPermissionMode;
14469
+ const taskId = input.taskId;
14470
+ if (!next.startsWith("codex:")) return {
14471
+ status: "not_applied",
14472
+ taskId,
14473
+ reasonCode: "adapter.permission_mode_incompatible"
14474
+ };
14475
+ if (!activeTurnId || turnSettled || interruptRequested || input.cancellationSignal?.aborted) return {
14476
+ status: "not_applied",
14477
+ taskId,
14478
+ reasonCode: "adapter.task_not_active"
14479
+ };
14480
+ const reviewerMode = (mode) => mode === "codex:askForApproval" || mode === "codex:approveForMe";
14481
+ if (!input.supportsLiveReviewer || input.executionMode === "repair" || !reviewerMode(input.permissionMode) || !reviewerMode(next)) return {
14482
+ status: "not_applied",
14483
+ taskId,
14484
+ reasonCode: "adapter.permission_mode_update_unsupported"
14485
+ };
14486
+ if (toRecord$7(await session.requestControl("turn/settings/update", {
14487
+ threadId: executionThreadId,
14488
+ turnId: activeTurnId,
14489
+ approvalsReviewer: next === "codex:approveForMe" ? "auto_review" : "user"
14490
+ }, {
14491
+ code: "runtime.permission_mode_update_timeout",
14492
+ operation: "turn/settings/update",
14493
+ terminateSession: false
14494
+ }))?.status !== "applied" || turnSettled || interruptRequested) return {
14495
+ status: "not_applied",
14496
+ taskId,
14497
+ reasonCode: "adapter.task_not_active"
14498
+ };
14499
+ return {
14500
+ status: "applied",
14501
+ effectiveFrom: "subsequent_tool_requests",
14502
+ taskId
14503
+ };
14504
+ },
14464
14505
  steer: async (steeringInput) => {
14465
14506
  const targetTurnId = activeTurnId;
14466
14507
  if (!targetTurnId || turnSettled || interruptRequested || input.cancellationSignal?.aborted) return {
@@ -15362,12 +15403,13 @@ var CodexAppServerSession = class {
15362
15403
  }
15363
15404
  };
15364
15405
  }
15365
- async verifyScopedMcp(threadId) {
15406
+ async verifyScopedMcp(threadId, nativeVersion) {
15366
15407
  const scoped = this.#computerFileAccessBoundary?.executionContextAccess !== void 0 || this.deliveryOnly;
15367
15408
  if (!(scoped || this.spaceToolInvocation.enabled)) return;
15368
15409
  const inventory = await this.requestControl("mcpServerStatus/list", {
15369
15410
  threadId,
15370
15411
  detail: scoped ? "full" : "toolsAndAuthOnly",
15412
+ ...!scoped && supportsAgentControllerVersion(nativeVersion, ">=0.160.0") ? { serverName: OPENMELD_SPACE_ACTION_MCP_SERVER_ID } : {},
15371
15413
  limit: 100
15372
15414
  }, {
15373
15415
  code: "execution_context.mcp_inventory_timeout",
@@ -15527,6 +15569,7 @@ var CodexAppServerSession = class {
15527
15569
  registerActiveTurn(input) {
15528
15570
  if (!input.onActiveTurn) return null;
15529
15571
  return input.onActiveTurn({
15572
+ updatePermissionMode: input.updatePermissionMode,
15530
15573
  steer: input.steer,
15531
15574
  taskId: input.taskId,
15532
15575
  threadId: input.threadId,
@@ -17525,6 +17568,7 @@ const createCodexAdapter = (options) => {
17525
17568
  const stoppedDispatches = /* @__PURE__ */ new Map();
17526
17569
  const registerAppServerTurn = (registration) => {
17527
17570
  const activeTurn = {
17571
+ updatePermissionMode: registration.updatePermissionMode,
17528
17572
  interrupt: registration.interrupt,
17529
17573
  steer: registration.steer,
17530
17574
  threadId: registration.threadId,
@@ -17721,6 +17765,14 @@ const createCodexAdapter = (options) => {
17721
17765
  dispatch,
17722
17766
  interrupt,
17723
17767
  steer,
17768
+ updatePermissionMode: async (input) => {
17769
+ const activeTurn = activeAppServerTurns.get(input.taskId);
17770
+ return activeTurn ? await activeTurn.updatePermissionMode(input) : {
17771
+ status: "not_applied",
17772
+ taskId: input.taskId,
17773
+ reasonCode: "adapter.task_not_active"
17774
+ };
17775
+ },
17724
17776
  verifyComputerFileAccessBoundary
17725
17777
  }, { [READ_CODEX_DISPATCH_STOP_EVIDENCE]: (taskId) => stoppedDispatches.get(taskId) ?? null });
17726
17778
  };
@@ -33180,9 +33232,9 @@ function createModelCatalogReadSession(input) {
33180
33232
  async function readModelCatalogOnce(baseUrl) {
33181
33233
  try {
33182
33234
  const [apiClient, baseUrlModule, clientFoundationModule] = await Promise.all([
33183
- import("./dist-DMlKqjUf.js"),
33235
+ import("./dist-CXB_bdSS.js"),
33184
33236
  import("./base-url-Bdjp-5vy.js"),
33185
- import("./api-client-foundation-B1aTRrIy.js")
33237
+ import("./api-client-foundation-mqLjUunz.js")
33186
33238
  ]);
33187
33239
  if (typeof apiClient.createConfigApi !== "function") throw new Error("config api client is unavailable");
33188
33240
  const resolvedBaseUrl = baseUrl ?? await baseUrlModule.resolveBaseUrl();
@@ -35040,4 +35092,4 @@ async function prepareProviderRuntime(input, options = {}) {
35040
35092
  //#endregion
35041
35093
  export { canManageRegistryAgentSkillTargets as $, resolveDispatchSpaceActionMcpServer as $n, mergeOpenClawGatewayVisibility as $t, createExpectedRoutesReadSession as A, isAntigravityAcpLaunchContract as An, resolveAgentExecutionStatus as Ar, ensureOpenMeldManagedProfileWorkspace as At, reconcileNewRunnableBuiltinAgentsForSetup as B, commitResolvedAgentContext as Bn, applyIntervalJitterMs as Br, createMutableRouteCatalogState as Bt, createModelCatalogReadSession as C, forkCodexAppServerThread as Cn, parseAgentControllerRef as Cr, resolveLocalProjectConnectionForPath as Ct, NO_LOCAL_AGENTS_NEED_OPENMELD_SERVICE_REASON as D, projectCodexUsageLimits as Dn, renderTaskKnowledgeIndex as Dr, resolveRegistryOriginLaunchCommand as Dt, resolveProfileWorkspaceRuntime as E, verifyCodexAppServerThread as En, renderInformationProtectionPrompt as Er, listBuiltinAgentsRegistryEntries as Et, listAgentRegistrations as F, DaemonServiceRunError as Fn, resolveRouteRegistrationReconcileDecision as Fr, resolveConfiguredProfileWorkspacePathForAccount as Ft, updateAgentRegistrations as G, settleInflightTask as Gn, resolveBuiltinAgentControllerBrand as Gr, syncRuntimeEventToInflightTaskControlRegistry as Gt, resolveAgentTargetState as H, removeConversationExecutionState as Hn, resolveAdaptiveHeartbeatIntervalMs as Hr, summarizeSkippedDaemonProfiles as Ht, listAgentTargetStates as I, runRuntimeTask as In, ADAPTIVE_HEARTBEAT_JITTER_RATIO as Ir, setCustomProfileWorkspace as It, normalizeAgentIds as J, buildAuthenticatedControlPlaneResponse as Jn, isDaemonReconcileInProgressError as Jt, notifyDaemonRouteCatalogChanged as K, upsertConversationExecutionState as Kn, __toESM as Kr, SPACE_ACTION_CONTEXT_GUIDANCE_LINES as Kt, manageAgentRegistrationInstallation as L, buildRuntimeWorkspaceFingerprint as Ln, MAX_HEARTBEAT_INTERVAL_MS as Lr, setOpenMeldManagedProfileWorkspace as Lt, addAgentCustomTarget as M, emitDriftDetectedEvidence as Mn, resolveEvidenceSyncHealth as Mr, readProfileWorkspaceConfig as Mt, createRegistrationFromCatalogTarget as N, emitReconcileCompletedEvidence as Nn, resolveNativeAgentControllerPermissionModeForController as Nr, readProfileWorkspaceConfigForAccount as Nt, syncDeviceRuntimeStateProjection as O, probeClaudeCodeUsageLimits as On, renderWorkingLanguagePrompt as Or, resolveRegistryRuntimeAdapterCapabilitySnapshot as Ot, listAgentCustomTargets as P, emitReconcileStartedEvidence as Pn, resolveSelectableCandidates as Pr, resolveConfiguredProfileWorkspacePath as Pt, resolveLocalRegistryAgentIdFromAgentControllerRef as Q, createUnsupportedProviderUsageLimits as Qn, createPendingAgentInteractionRegistry as Qt, readAgentRuntimeConfigHealth as R, buildTaskResultEnvelope as Rn, MIN_HEARTBEAT_INTERVAL_MS as Rr, validateCustomProfileWorkspacePath as Rt, syncProfileWorkspaceState as S, resolveInstalledCodexLaunchCandidates as Sn, listAgentControllerPermissionModeOptions as Sr, canonicalizeLocalProjectPath as St, resolveEffectiveProfileWorkingFolderRuntime as T, resolveCodexAppServerCompletedTurn as Tn, projectPeopleComputersToLegacyLocalRuntimes as Tr, withAgentActivityLocalStateLock as Tt, setAgentRegistrationEnabled as U, resolveConversationExecutionStateByLookupKey as Un, resolveCatalogSyncIntervalMs as Ur, syncDaemonRouteCatalogState as Ut, removeAgentCustomTarget as V, loadLedgerState as Vn, pruneStaleLeases as Vr, createRouteCatalogFromMutableState as Vt, updateAgentCustomTarget as W, seedLegacyAgentContext as Wn, compareAgentControllerRefsForDisplay as Wr, normalizeDispatchThreadAction as Wt, sortAgentRegistrations as X, buildAgentContextLookupKey as Xn, buildDispatchReplyContextSummary as Xt, parseAgentEnabledOption as Y, assertLegacyAgentContextAssociation as Yn, createSerialAgentInteractionCallback as Yt, repairBuiltinControllerInstall as Z, createUnavailableProviderUsageLimits as Zn, normalizeDispatchPostMessageAction as Zt, loadDaemonRouteCatalog as _, GrokBuildAcpTransportError as _n, getAgentControllerPermissionModeDisplayMetadata as _r, removeProjectConnection as _t, buildOpenClawSpaceSessionKey as a, resolveDispatchContinuityObservation as an, DISPATCH_SPACE_ACTION_DELIVERY_ONLY_ENV as ar, isHomebrewCommandPath as at, resolveLocalController as b, projectCursorUsageLimits as bn, isAgentControllerUsageRefreshUnavailable as br, setDefaultProjectConnection as bt, findOpenClawAgentById as c, resolveLatestScopedConversationExecutionState as cn, TASK_KNOWLEDGE_GUIDANCE as cr, ProjectBindingOperationError as ct, resolveOpenClawAuthStatus as d, createLocalAdapterEntries as dn, buildInformationProtectionPromptPlan as dr, isProjectBound as dt, createLocalTaskInterruptSender as en, buildCliLaunchInvocation as er, detectInstalledSkillsAgents as et, resolveOpenClawProviderRuntimeWorkingDirectory as f, parseOpenRouterUsageResponse as fn, buildWorkingLanguagePromptPlan as fr, listProjectBindings as ft, writeDaemonRouteCatalogCache as g, resolveInstalledOpenCodeLaunchCandidates as gn, createAuthorityOpenMeldServiceRuntimeId as gr, removeMissingProjectConnections as gt, readDaemonRouteCatalogCache as h, readOpenCode2Inventory as hn, createAgentExecutionStatusDisplayRows as hr, removeAgentActivityBindingsWhileDeliveryLocked as ht, listOpenClawGatewayAgents as i, resolveDispatchQueueLogMeta as in, createProviderOriginalError as ir, isBunGlobalCommandPath as it, resolveAgentProfilePrimaryAgentControllerReport as j, probeAntigravityAcp as jn, resolveAgentProfileEditCapabilities as jr, normalizeCustomProfileWorkspacePath as jt, createPrimaryBindingReadSession as k, resolveInstalledClaudeCodeLaunchCandidates as kn, resolveAgentControllerPermissionModeForController as kr, resolveRegistryRuntimeAdapterContractByAgentControllerRef as kt, findOpenClawAgentsByWorkspace as l, resolveCatalogSyncSkippedProfilesLogState as ln, areAgentControllerInterfaceAccountsSame as lr, ProjectBindingStoreUpdateRequiredError as lt, resolveOpenClawLocalBootstrapPaths as m, forkOpenCodeServerSession as mn, createAgentControllerInterfaceDisplayRows as mr, migrateProjectBindingStore as mt, fetchOpenClawGatewayHealth as n, createLocalExecutionSlots as nn, resolveExecutablePathsOnPath as nr, EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES as nt, normalizeOpenClawSpaceIdPrefix as o, resolveCompatibleAgentContextMatch as on, isDispatchSpaceActionDeliveryOnly as or, isNpmGlobalCommandPath as ot, readOpenClawLocalBootstrapState as p, parseOpenCodeGoUsageResponse as pn, compareAgentControllerVersions as pr, listProjectConnectionsWithStatus as pt, normalizeAgentId as q, withLedgerStateTransaction as qn, SPACE_ACTION_TARGET_GUIDANCE_LINES as qt, listOpenClawAgents as r, createInflightTaskControlRegistry as rn, listAgentControllerSupervisedProcessIds as rr, resolveBuiltinAgentControllerDefinition as rt, slugifyOpenClawNamePart as s, resolveCompatibleConversationExecutionState as sn, DEFAULT_TASK_LIFECYCLE_HEARTBEAT_INTERVAL_MS as sr, isPnpmGlobalCommandPath as st, prepareProviderRuntime as t, buildLocalServiceDiagnosticsPayload as tn, materializeCliLaunchCommand as tr, resolveSkillsAgentRegistry as tt, matchesExpectedWorkspace as u, createLocalAdapterContainer as un, buildAgentControllerRef as ur, bindProject as ut, buildRuntimeRouteTargets as v, probeGrokBuildAcpInterface as vn, getAgentControllerPermissionModeFieldLabel as vr, resolveProjectBindingForPath as vt, resolveCurrentEffectiveProfileWorkingFolderRuntime as w, probeCodexAppServerAccount as wn, peopleComputerContainsDevice as wr, withAgentActivityDeliveryLock as wt, resolveLocalRuntimeControllerSupport as x, resolveCodexTimeoutMs as xn, isAgentExecutionReadyOrConnecting as xr, unbindProject as xt, readLocalEnabledControllers as y, resolveInstalledGrokBuildLaunchCandidates as yn, isAgentControllerUsageAccountUnavailable as yr, runIfAgentActivityBindingGenerationIsCurrent as yt, reconcileNewRunnableBuiltinAgentRegistrations as z, appendLedgerHistoryEntry as zn, applyAcceptedLeases as zr, describeProfileWorkspacePathValidationFailure as zt };
35042
35094
 
35043
- //# sourceMappingURL=prepare-provider-runtime-_XRIioDp.js.map
35095
+ //# sourceMappingURL=prepare-provider-runtime-B6_dfpiZ.js.map