openmeld 0.3.215 → 0.3.216

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 (110) hide show
  1. package/dist/{add-me-membership-DIICpPeD.js → add-me-membership-CxgkT6ht.js} +2 -2
  2. package/dist/{add-me-membership-DIICpPeD.js.map → add-me-membership-CxgkT6ht.js.map} +1 -1
  3. package/dist/{agents-DkDhCPDQ.js → agents-B_qjzGkQ.js} +11 -11
  4. package/dist/{agents-DkDhCPDQ.js.map → agents-B_qjzGkQ.js.map} +1 -1
  5. package/dist/{api-client-foundation-DwFyNNaC.js → api-client-foundation-DdtV7aF-.js} +1 -1
  6. package/dist/{api-client-foundation-y_0cvP4z.js → api-client-foundation-XILCNkrF.js} +2 -2
  7. package/dist/{api-client-foundation-y_0cvP4z.js.map → api-client-foundation-XILCNkrF.js.map} +1 -1
  8. package/dist/{auth-session-CunWE9Up.js → auth-session-B9Whm1hq.js} +3 -3
  9. package/dist/{auth-session-CunWE9Up.js.map → auth-session-B9Whm1hq.js.map} +1 -1
  10. package/dist/auth-session-DXKHtGTr.js +4 -0
  11. package/dist/{base-url-CfyKRz89.js → base-url-CiSsUvmr.js} +1 -1
  12. package/dist/{base-url-BczddvzH.js → base-url-jdL78gyl.js} +2 -2
  13. package/dist/{base-url-BczddvzH.js.map → base-url-jdL78gyl.js.map} +1 -1
  14. package/dist/{channel-D7RQQwTe.js → channel-CKmbucdt.js} +2 -2
  15. package/dist/{channel-D7RQQwTe.js.map → channel-CKmbucdt.js.map} +1 -1
  16. package/dist/{cli-space-api-BSpnKocX.js → cli-space-api-DlDztj9O.js} +5 -5
  17. package/dist/{cli-space-api-BSpnKocX.js.map → cli-space-api-DlDztj9O.js.map} +1 -1
  18. package/dist/{command-DJDcTWMC.js → command-Cbp4ZeZs.js} +15 -15
  19. package/dist/{command-DJDcTWMC.js.map → command-Cbp4ZeZs.js.map} +1 -1
  20. package/dist/{computer-connection-jb6uriyR.js → computer-connection-CVE1MAqF.js} +2 -2
  21. package/dist/{computer-connection-jb6uriyR.js.map → computer-connection-CVE1MAqF.js.map} +1 -1
  22. package/dist/{computer-connection-review-BKbEyl1P.js → computer-connection-review-CfFmjZLP.js} +6 -6
  23. package/dist/{computer-connection-review-BKbEyl1P.js.map → computer-connection-review-CfFmjZLP.js.map} +1 -1
  24. package/dist/{computer-disconnect-CI-FglTs.js → computer-disconnect-B5nMRe9T.js} +9 -9
  25. package/dist/{computer-disconnect-CI-FglTs.js.map → computer-disconnect-B5nMRe9T.js.map} +1 -1
  26. package/dist/{computer-setup-continuation-F8hRRORE.js → computer-setup-continuation-Bd3BIgdU.js} +3 -3
  27. package/dist/{computer-setup-continuation-F8hRRORE.js.map → computer-setup-continuation-Bd3BIgdU.js.map} +1 -1
  28. package/dist/{context-BfxDJBzm.js → context-Cz5nJnDe.js} +5 -5
  29. package/dist/{context-BfxDJBzm.js.map → context-Cz5nJnDe.js.map} +1 -1
  30. package/dist/{daemon-device-id-DCsEEIDx.js → daemon-device-id-KgO7zcEr.js} +5 -5
  31. package/dist/{daemon-device-id-DCsEEIDx.js.map → daemon-device-id-KgO7zcEr.js.map} +1 -1
  32. package/dist/{daemon-frame-transport-BI53VLpj.js → daemon-frame-transport-DUDAgNbO.js} +6 -6
  33. package/dist/{daemon-frame-transport-BI53VLpj.js.map → daemon-frame-transport-DUDAgNbO.js.map} +1 -1
  34. package/dist/{daemon-lifecycle-journal-CoWJG0xk.js → daemon-lifecycle-journal-Bj-fw052.js} +6 -6
  35. package/dist/{daemon-lifecycle-journal-CoWJG0xk.js.map → daemon-lifecycle-journal-Bj-fw052.js.map} +1 -1
  36. package/dist/{daemon-runtime-lease-CIzOT1zx.js → daemon-runtime-lease-BUr4qsLo.js} +2 -2
  37. package/dist/{daemon-runtime-lease-CIzOT1zx.js.map → daemon-runtime-lease-BUr4qsLo.js.map} +1 -1
  38. package/dist/{daemon-runtime-lease-_M6hW8Mg.js → daemon-runtime-lease-C9X8xV_F.js} +1 -1
  39. package/dist/{daemon-service-contract-XfV9t96H.js → daemon-service-contract-BpOBMGX0.js} +4 -4
  40. package/dist/{daemon-service-contract-XfV9t96H.js.map → daemon-service-contract-BpOBMGX0.js.map} +1 -1
  41. package/dist/{daemon-service-manager-CyEK02Yv.js → daemon-service-manager-CZY8Bin4.js} +5 -5
  42. package/dist/{daemon-service-manager-CyEK02Yv.js.map → daemon-service-manager-CZY8Bin4.js.map} +1 -1
  43. package/dist/{daemon-service-manager-BdYZkRIa.js → daemon-service-manager-Cq3ANgn8.js} +1 -1
  44. package/dist/{daemon-service-runtime-DNBMVcCI.js → daemon-service-runtime-yD-w1dQw.js} +11 -11
  45. package/dist/{daemon-service-runtime-DNBMVcCI.js.map → daemon-service-runtime-yD-w1dQw.js.map} +1 -1
  46. package/dist/{daemon-service-update-coordinator-BXLsu_wO.js → daemon-service-update-coordinator-BATuKmZA.js} +18 -18
  47. package/dist/{daemon-service-update-coordinator-BXLsu_wO.js.map → daemon-service-update-coordinator-BATuKmZA.js.map} +1 -1
  48. package/dist/{daemon-state-CoAZLwpi.js → daemon-state-B44aq2nm.js} +3 -3
  49. package/dist/{daemon-state-CoAZLwpi.js.map → daemon-state-B44aq2nm.js.map} +1 -1
  50. package/dist/dist-CkGG099H.js.map +1 -1
  51. package/dist/{elapsed-time-CtNv_azD.js → elapsed-time-DGQ63StD.js} +4 -4
  52. package/dist/{elapsed-time-CtNv_azD.js.map → elapsed-time-DGQ63StD.js.map} +1 -1
  53. package/dist/{entry-D8cla8ZV.js → entry-Dhify7h7.js} +11 -11
  54. package/dist/{entry-D8cla8ZV.js.map → entry-Dhify7h7.js.map} +1 -1
  55. package/dist/{installation-inventory-DDLKowYl.js → installation-inventory-BJe8fC9k.js} +5 -5
  56. package/dist/{installation-inventory-DDLKowYl.js.map → installation-inventory-BJe8fC9k.js.map} +1 -1
  57. package/dist/{installer-DWcT57F5.js → installer-CWgaNzfE.js} +2 -2
  58. package/dist/{installer-DWcT57F5.js.map → installer-CWgaNzfE.js.map} +1 -1
  59. package/dist/{lock-CAt9uTnZ.js → lock-Bsl_ElWy.js} +2 -2
  60. package/dist/{lock-CAt9uTnZ.js.map → lock-Bsl_ElWy.js.map} +1 -1
  61. package/dist/openmeld-dev.js +1 -1
  62. package/dist/{openmeld-environment-target-dXGKoZuo.js → openmeld-environment-target-Dn2rJCa7.js} +3 -3
  63. package/dist/{openmeld-environment-target-dXGKoZuo.js.map → openmeld-environment-target-Dn2rJCa7.js.map} +1 -1
  64. package/dist/{openmeld-B3fWugAi.js → openmeld-koCpjXo7.js} +34 -34
  65. package/dist/{openmeld-B3fWugAi.js.map → openmeld-koCpjXo7.js.map} +1 -1
  66. package/dist/{openmeld-maintenance-worker-DWaFW0td.js → openmeld-maintenance-worker-DdsIYpG-.js} +14 -14
  67. package/dist/{openmeld-maintenance-worker-DWaFW0td.js.map → openmeld-maintenance-worker-DdsIYpG-.js.map} +1 -1
  68. package/dist/{openmeld-tools-update-join-C5OotAUF.js → openmeld-tools-update-join-Clgm1ix5.js} +4 -4
  69. package/dist/{openmeld-tools-update-join-C5OotAUF.js.map → openmeld-tools-update-join-Clgm1ix5.js.map} +1 -1
  70. package/dist/openmeld.js +4 -4
  71. package/dist/{prepare-provider-runtime-CMX59Gmv.js → prepare-provider-runtime-CeGzeQbD.js} +98 -46
  72. package/dist/{prepare-provider-runtime-CMX59Gmv.js.map → prepare-provider-runtime-CeGzeQbD.js.map} +1 -1
  73. package/dist/{prepare-session-executor-BfYmxM6n.js → prepare-session-executor-CsxnDFgS.js} +23 -23
  74. package/dist/{prepare-session-executor-BfYmxM6n.js.map → prepare-session-executor-CsxnDFgS.js.map} +1 -1
  75. package/dist/{process-channel-8KzXhiJa.js → process-channel-BTxB9zK-.js} +2 -2
  76. package/dist/{process-channel-8KzXhiJa.js.map → process-channel-BTxB9zK-.js.map} +1 -1
  77. package/dist/{process-identity-Clby123a.js → process-identity-CNus0e6E.js} +3 -2
  78. package/dist/process-identity-CNus0e6E.js.map +1 -0
  79. package/dist/{published-production-safety-C4uPjpYe.js → published-production-safety-dp-fOmmB.js} +2 -2
  80. package/dist/{published-production-safety-C4uPjpYe.js.map → published-production-safety-dp-fOmmB.js.map} +1 -1
  81. package/dist/{runtime-CbAkLHoN.js → runtime-CesmzZ2L.js} +15 -15
  82. package/dist/{runtime-CbAkLHoN.js.map → runtime-CesmzZ2L.js.map} +1 -1
  83. package/dist/{runtime-agent-controller-reporting-submission-C0ZsJp2Y.js → runtime-agent-controller-reporting-submission-B6cDV_zW.js} +7 -7
  84. package/dist/{runtime-agent-controller-reporting-submission-C0ZsJp2Y.js.map → runtime-agent-controller-reporting-submission-B6cDV_zW.js.map} +1 -1
  85. package/dist/{runtime-reporting-health-state-za-84KvT.js → runtime-reporting-health-state-Cjavvccq.js} +10 -10
  86. package/dist/{runtime-reporting-health-state-za-84KvT.js.map → runtime-reporting-health-state-Cjavvccq.js.map} +1 -1
  87. package/dist/{service-DDYwhWFs.js → service-Cgat7nEE.js} +25 -25
  88. package/dist/service-Cgat7nEE.js.map +1 -0
  89. package/dist/{service-account-authorization-CI_QP6KS.js → service-account-authorization-Ct0OZwbr.js} +6 -6
  90. package/dist/{service-account-authorization-CI_QP6KS.js.map → service-account-authorization-Ct0OZwbr.js.map} +1 -1
  91. package/dist/{service-account-control-BAfBFVMv.js → service-account-control-DefN0EOY.js} +14 -14
  92. package/dist/{service-account-control-BAfBFVMv.js.map → service-account-control-DefN0EOY.js.map} +1 -1
  93. package/dist/{service-control-capabilities-BpjxqSzo.js → service-control-capabilities-BsCCHsUg.js} +5 -5
  94. package/dist/{service-control-capabilities-BpjxqSzo.js.map → service-control-capabilities-BsCCHsUg.js.map} +1 -1
  95. package/dist/{service-control-capabilities-CAvcBYz7.js → service-control-capabilities-m7mmxVOi.js} +1 -1
  96. package/dist/{service-control-carrier-capability-hvpD7hGf.js → service-control-carrier-capability-DDNyE5cB.js} +2 -2
  97. package/dist/{service-control-carrier-capability-hvpD7hGf.js.map → service-control-carrier-capability-DDNyE5cB.js.map} +1 -1
  98. package/dist/{state-1l1SJPpK.js → state-C2ztY4iq.js} +3 -3
  99. package/dist/{state-1l1SJPpK.js.map → state-C2ztY4iq.js.map} +1 -1
  100. package/dist/{upgrade-Bz8rRQiA.js → upgrade-O_blyOta.js} +7 -7
  101. package/dist/{upgrade-Bz8rRQiA.js.map → upgrade-O_blyOta.js.map} +1 -1
  102. package/dist/upgrade-axb9z2uy.js +4 -0
  103. package/dist/{windows-user-task-i0oHCBc0.js → windows-user-task-CSJpDs-S.js} +4 -4
  104. package/dist/{windows-user-task-i0oHCBc0.js.map → windows-user-task-CSJpDs-S.js.map} +1 -1
  105. package/dist/{windows-user-task-FdycoSb4.js → windows-user-task-CWDzkJCq.js} +1 -1
  106. package/package.json +2 -2
  107. package/dist/auth-session-DxQxcD2e.js +0 -4
  108. package/dist/process-identity-Clby123a.js.map +0 -1
  109. package/dist/service-DDYwhWFs.js.map +0 -1
  110. package/dist/upgrade-DhFOD8dL.js +0 -4
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-CAt9uTnZ.js";
4
- import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-CMX59Gmv.js";
5
- import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-1l1SJPpK.js";
6
- import { Q as readPendingDaemonServiceUpdate, Y as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, tt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-DNBMVcCI.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-BXLsu_wO.js";
8
- import { g as getConfiguredSkillsConfig } from "./base-url-BczddvzH.js";
9
- import { W as withDaemonServiceReconcileLock } from "./daemon-state-CoAZLwpi.js";
10
- import { i as readDaemonServiceContract } from "./daemon-service-contract-XfV9t96H.js";
11
- import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-CoWJG0xk.js";
12
- import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-CyEK02Yv.js";
13
- import { s as resolveTrackedInstallTargets } from "./installation-inventory-DDLKowYl.js";
14
- import { t as installSkillsToTargets } from "./installer-DWcT57F5.js";
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-CeGzeQbD.js";
5
+ import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-C2ztY4iq.js";
6
+ import { Q as readPendingDaemonServiceUpdate, Y as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, tt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-yD-w1dQw.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-BATuKmZA.js";
8
+ import { g as getConfiguredSkillsConfig } from "./base-url-jdL78gyl.js";
9
+ import { W as withDaemonServiceReconcileLock } from "./daemon-state-B44aq2nm.js";
10
+ import { i as readDaemonServiceContract } from "./daemon-service-contract-BpOBMGX0.js";
11
+ import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-Bj-fw052.js";
12
+ import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-CZY8Bin4.js";
13
+ import { s as resolveTrackedInstallTargets } from "./installation-inventory-BJe8fC9k.js";
14
+ import { t as installSkillsToTargets } from "./installer-CWgaNzfE.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-F8hRRORE.js");
78
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-Bd3BIgdU.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-DWaFW0td.js.map
107
+ //# sourceMappingURL=openmeld-maintenance-worker-DdsIYpG-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-DWaFW0td.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-DdsIYpG-.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-DNBMVcCI.js";
4
- import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BXLsu_wO.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-CtNv_azD.js";
3
+ import { Q as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-yD-w1dQw.js";
4
+ import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BATuKmZA.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-DGQ63StD.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-C5OotAUF.js.map
56
+ //# sourceMappingURL=openmeld-tools-update-join-Clgm1ix5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-C5OotAUF.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-Clgm1ix5.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-D8cla8ZV.js");
6
+ const { runExecutionHost } = await import("./entry-Dhify7h7.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-DWaFW0td.js");
16
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-DdsIYpG-.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-DhFOD8dL.js");
23
+ const { runMaintenanceUpgrade } = await import("./upgrade-axb9z2uy.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-B3fWugAi.js");
33
+ else await import("./openmeld-koCpjXo7.js");
34
34
  //#endregion
35
35
  export {};
36
36
 
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
 
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-CAt9uTnZ.js";
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
4
  import { Kt as createLocalRuntimeExpectedRoutesApi, Mr as modelCatalogSchema, Mt as createAgentProfileBindingApi, t as OpenMeldApiClientHttpError } from "./dist-CkGG099H.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-pe3_Re-c.js";
6
6
  import { H as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, Hn as normalizeMessageEnvelope, J as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, K as openMeldDaemonProviderAccessEvidenceSchema, U as isOriginalErrorSafeForMessageDetails, or as agentInteractionResolutionSchema, q as openMeldDaemonTaskResultEnvelopeWriteSchema, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH, ui as resolveCommandAgentWorkActivity, zn as formatCanonicalMentionLiteral } from "./runtime-transport-CVtBXzIp.js";
7
- import { d as getAuthSessionState, q as OPENCLAW_CLI_TIMEOUT_MS$1 } from "./auth-session-CunWE9Up.js";
7
+ import { d as getAuthSessionState, q as OPENCLAW_CLI_TIMEOUT_MS$1 } from "./auth-session-B9Whm1hq.js";
8
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-DKPz7DMv.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-Doem1R2N.js";
11
- import { U as listOpenMeldProfiles, X as touchDaemonCatalogSyncSignal, _ as toErrorMessage$19, 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$49, ut as daemonRouteCatalogCacheSchema } from "./daemon-device-id-DCsEEIDx.js";
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-BczddvzH.js";
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-Clby123a.js";
11
+ import { U as listOpenMeldProfiles, X as touchDaemonCatalogSyncSignal, _ as toErrorMessage$19, 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$49, ut as daemonRouteCatalogCacheSchema } from "./daemon-device-id-KgO7zcEr.js";
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-jdL78gyl.js";
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
- import { m as daemonRuntimeDataPath } from "./daemon-state-CoAZLwpi.js";
16
- import { i as readDaemonServiceContract } from "./daemon-service-contract-XfV9t96H.js";
17
- import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-CoWJG0xk.js";
18
- import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-y_0cvP4z.js";
15
+ import { m as daemonRuntimeDataPath } from "./daemon-state-B44aq2nm.js";
16
+ import { i as readDaemonServiceContract } from "./daemon-service-contract-BpOBMGX0.js";
17
+ import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-Bj-fw052.js";
18
+ import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-XILCNkrF.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";
@@ -19149,18 +19149,22 @@ async function invokeOpenCodeCliTransport(input) {
19149
19149
  errorType: "config",
19150
19150
  message: "schema.invalid: prompt is required"
19151
19151
  });
19152
+ if (normalizeOptionalText$10(input.sessionId)) throw new OpenCodeCliTransportError({
19153
+ code: "context.resume_requires_server",
19154
+ errorType: "adapter",
19155
+ message: "An existing OpenCode conversation requires the server connection to verify its working folder."
19156
+ });
19152
19157
  const invocation = buildCliLaunchInvocation({
19153
19158
  args: buildOpenCodeArgs({
19154
19159
  conversationPolicy: input.conversationPolicy,
19155
19160
  prompt,
19156
- sessionId: normalizeOptionalText$10(input.sessionId),
19157
19161
  workdir: input.openCodeWorkdir
19158
19162
  }),
19159
19163
  launchContract: input.launchContract
19160
19164
  });
19161
19165
  let latestOutput = "";
19162
19166
  let latestResultIsError = false;
19163
- let resolvedSessionId = normalizeOptionalText$10(input.sessionId);
19167
+ let resolvedSessionId = null;
19164
19168
  const providerErrorMessages = [];
19165
19169
  const invokedAtMs = Date.now();
19166
19170
  let firstStdoutAtMs = null;
@@ -19295,7 +19299,7 @@ async function invokeOpenCodeCliTransport(input) {
19295
19299
  firstStderrAtMs,
19296
19300
  firstStdoutAtMs,
19297
19301
  invokedAtMs,
19298
- resumedContext: normalizeOptionalText$10(input.sessionId) !== null
19302
+ resumedContext: false
19299
19303
  })
19300
19304
  };
19301
19305
  }
@@ -19308,7 +19312,6 @@ const buildOpenCodeArgs = (input) => {
19308
19312
  "--dir",
19309
19313
  input.workdir
19310
19314
  ];
19311
- if (input.sessionId) args.push("--session", input.sessionId);
19312
19315
  const model = normalizeOptionalText$10(input.conversationPolicy?.model);
19313
19316
  if (model) args.push("--model", model);
19314
19317
  const reasoningLevel = normalizeOptionalText$10(input.conversationPolicy?.reasoningLevel);
@@ -19732,13 +19735,26 @@ async function forkOpenCodeServerSession(input) {
19732
19735
  }
19733
19736
  }
19734
19737
  async function forkOpenCodeSessionWithClient(input) {
19735
- return readOpenCodeSessionId(await input.client.session.fork({
19736
- directory: input.openCodeWorkdir,
19737
- sessionID: input.sourceSessionId
19738
- }, {
19739
- responseStyle: "data",
19740
- throwOnError: true
19741
- }));
19738
+ const { directory } = await readOpenCodeSessionForWorkingDirectory({
19739
+ session: await input.client.session.get({
19740
+ directory: input.openCodeWorkdir,
19741
+ sessionID: input.sourceSessionId
19742
+ }, {
19743
+ responseStyle: "data",
19744
+ throwOnError: true
19745
+ }),
19746
+ workingDirectory: input.openCodeWorkdir
19747
+ });
19748
+ return (await readOpenCodeSessionForWorkingDirectory({
19749
+ session: await input.client.session.fork({
19750
+ directory,
19751
+ sessionID: input.sourceSessionId
19752
+ }, {
19753
+ responseStyle: "data",
19754
+ throwOnError: true
19755
+ }),
19756
+ workingDirectory: input.openCodeWorkdir
19757
+ })).sessionId;
19742
19758
  }
19743
19759
  async function startHealthyOpenCodeServer(input) {
19744
19760
  let lastError = null;
@@ -19873,11 +19889,11 @@ function readRemainingTimeoutMs(deadlineMs) {
19873
19889
  return deadlineMs === null ? null : Math.max(0, deadlineMs - Date.now());
19874
19890
  }
19875
19891
  async function runOpenCodeServerTurn(input) {
19876
- const sessionId = await resolveOpenCodeSessionId(input);
19892
+ const { directory, sessionId } = await resolveOpenCodeSession(input);
19877
19893
  input.server.emitProviderConversationObserved(normalizeOptionalText$9(input.observedSessionId) ?? sessionId);
19878
19894
  const interactionHandler = new OpenCodeInteractionHandler({
19879
19895
  client: input.client,
19880
- directory: input.openCodeWorkdir,
19896
+ directory,
19881
19897
  onInteractionRequest: input.onInteractionRequest
19882
19898
  });
19883
19899
  const eventAbortController = new AbortController();
@@ -19897,7 +19913,7 @@ async function runOpenCodeServerTurn(input) {
19897
19913
  };
19898
19914
  const textByPartId = /* @__PURE__ */ new Map();
19899
19915
  let previewEmitted = false;
19900
- const subscription = await input.client.event.subscribe({ directory: input.openCodeWorkdir }, { signal: eventAbortController.signal });
19916
+ const subscription = await input.client.event.subscribe({ directory }, { signal: eventAbortController.signal });
19901
19917
  const eventLoop = consumeOpenCodeEvents({
19902
19918
  onRuntimeEvent: input.onRuntimeEvent,
19903
19919
  reasoningPartIds: /* @__PURE__ */ new Set(),
@@ -19927,7 +19943,7 @@ async function runOpenCodeServerTurn(input) {
19927
19943
  turnState.promptDispatchStarted = true;
19928
19944
  await Promise.race([
19929
19945
  input.client.session.promptAsync({
19930
- directory: input.openCodeWorkdir,
19946
+ directory,
19931
19947
  ...model ? { model } : {},
19932
19948
  parts: [{
19933
19949
  text: input.instructionPrompt?.userPrompt ?? input.prompt,
@@ -19951,7 +19967,7 @@ async function runOpenCodeServerTurn(input) {
19951
19967
  ]);
19952
19968
  } catch (error) {
19953
19969
  await input.client.session.abort({
19954
- directory: input.openCodeWorkdir,
19970
+ directory,
19955
19971
  sessionID: sessionId
19956
19972
  }, {
19957
19973
  responseStyle: "data",
@@ -19969,7 +19985,7 @@ async function runOpenCodeServerTurn(input) {
19969
19985
  });
19970
19986
  const output = await readOpenCodeTurnOutput({
19971
19987
  client: input.client,
19972
- directory: input.openCodeWorkdir,
19988
+ directory,
19973
19989
  promptMessageId,
19974
19990
  sessionId
19975
19991
  });
@@ -19998,23 +20014,59 @@ async function waitForOpenCodeEventLoopCleanup(eventLoop) {
19998
20014
  setTimeout(resolve, 250).unref?.();
19999
20015
  })]);
20000
20016
  }
20001
- async function resolveOpenCodeSessionId(input) {
20002
- if (input.sessionId) return readOpenCodeSessionId(await input.client.session.get({
20003
- directory: input.openCodeWorkdir,
20004
- sessionID: input.sessionId
20005
- }, {
20006
- responseStyle: "data",
20007
- throwOnError: true
20008
- }));
20017
+ async function resolveOpenCodeSession(input) {
20018
+ if (input.sessionId) return readOpenCodeSessionForWorkingDirectory({
20019
+ session: await input.client.session.get({
20020
+ directory: input.openCodeWorkdir,
20021
+ sessionID: input.sessionId
20022
+ }, {
20023
+ responseStyle: "data",
20024
+ throwOnError: true
20025
+ }),
20026
+ workingDirectory: input.openCodeWorkdir
20027
+ });
20009
20028
  const parsedModel = parseOpenCodeSessionModel(input.conversationPolicy);
20010
- return readOpenCodeSessionId(await input.client.session.create({
20011
- directory: input.openCodeWorkdir,
20012
- ...parsedModel ? { model: parsedModel } : {},
20013
- title: "OpenMeld"
20014
- }, {
20015
- responseStyle: "data",
20016
- throwOnError: true
20017
- }));
20029
+ return readOpenCodeSessionForWorkingDirectory({
20030
+ session: await input.client.session.create({
20031
+ directory: input.openCodeWorkdir,
20032
+ ...parsedModel ? { model: parsedModel } : {},
20033
+ title: "OpenMeld"
20034
+ }, {
20035
+ responseStyle: "data",
20036
+ throwOnError: true
20037
+ }),
20038
+ workingDirectory: input.openCodeWorkdir
20039
+ });
20040
+ }
20041
+ async function readOpenCodeSessionForWorkingDirectory(input) {
20042
+ const session = toRecord$1(unwrapSdkData(input.session));
20043
+ const sessionId = readOpenCodeSessionId(input.session);
20044
+ const directory = normalizeOptionalText$9(session?.directory);
20045
+ if (!directory) throw new OpenCodeServerTransportError({
20046
+ code: "protocol.invalid",
20047
+ errorType: "adapter",
20048
+ message: "OpenCode did not return the conversation's working folder."
20049
+ });
20050
+ let sameDirectory;
20051
+ try {
20052
+ const [sessionPath, workingPath] = await Promise.all([realpath(directory), realpath(input.workingDirectory)]);
20053
+ sameDirectory = sessionPath === workingPath;
20054
+ } catch {
20055
+ throw new OpenCodeServerTransportError({
20056
+ code: "context.workspace_unavailable",
20057
+ errorType: "adapter",
20058
+ message: "This OpenCode session's working folder is unavailable. Restore that folder, or create a new Agent with a new session here."
20059
+ });
20060
+ }
20061
+ if (!sameDirectory) throw new OpenCodeServerTransportError({
20062
+ code: "context.workspace_mismatch",
20063
+ errorType: "adapter",
20064
+ message: "This OpenCode session uses another working folder. Restore that folder for this Agent, or create a new Agent with a new session here."
20065
+ });
20066
+ return {
20067
+ directory,
20068
+ sessionId
20069
+ };
20018
20070
  }
20019
20071
  async function consumeOpenCodeEvents(input) {
20020
20072
  let ready = false;
@@ -20760,7 +20812,7 @@ async function invokeOpenCodeWithSingleContextHeal(input) {
20760
20812
  }
20761
20813
  async function invokeOpenCodeOnce(input) {
20762
20814
  try {
20763
- if (input.onInteractionRequest || input.executionMode === "repair" && input.sessionId) return await invokeOpenCodeServerTransport({
20815
+ if (input.onInteractionRequest || input.sessionId) return await invokeOpenCodeServerTransport({
20764
20816
  launchContract: input.launchContract,
20765
20817
  openCodeTimeoutMs: input.openCodeTimeoutMs,
20766
20818
  openCodeWorkdir: input.openCodeWorkdir,
@@ -28072,8 +28124,8 @@ async function readModelCatalogOnce(baseUrl) {
28072
28124
  try {
28073
28125
  const [apiClient, baseUrlModule, clientFoundationModule] = await Promise.all([
28074
28126
  import("./dist-DZYJ8yLA.js"),
28075
- import("./base-url-CfyKRz89.js"),
28076
- import("./api-client-foundation-DwFyNNaC.js")
28127
+ import("./base-url-CiSsUvmr.js"),
28128
+ import("./api-client-foundation-DdtV7aF-.js")
28077
28129
  ]);
28078
28130
  if (typeof apiClient.createConfigApi !== "function") throw new Error("config api client is unavailable");
28079
28131
  const resolvedBaseUrl = baseUrl ?? await baseUrlModule.resolveBaseUrl();
@@ -29927,4 +29979,4 @@ async function prepareProviderRuntime(input, options = {}) {
29927
29979
  //#endregion
29928
29980
  export { canManageRegistryAgentSkillTargets as $, buildAgentControllerRef as $n, mergeOpenClawGatewayVisibility as $t, createExpectedRoutesReadSession as A, buildRuntimeWorkspaceFingerprint as An, resolveBuiltinAgentControllerBrand as Ar, ensureOpenMeldManagedProfileWorkspace as At, reconcileNewRunnableBuiltinAgentsForSetup as B, withLedgerStateTransaction as Bn, createMutableRouteCatalogState as Bt, createModelCatalogReadSession as C, verifyCodexAppServerThread as Cn, MIN_HEARTBEAT_INTERVAL_MS as Cr, resolveLocalProjectConnectionForPath as Ct, NO_LOCAL_AGENTS_NEED_OPENMELD_SERVICE_REASON as D, emitReconcileStartedEvidence as Dn, resolveAdaptiveHeartbeatIntervalMs as Dr, resolveRegistryOriginLaunchCommand as Dt, resolveProfileWorkspaceRuntime as E, emitReconcileCompletedEvidence as En, pruneStaleLeases as Er, listBuiltinAgentsRegistryEntries as Et, listAgentRegistrations as F, removeConversationExecutionState as Fn, resolveConfiguredProfileWorkspacePathForAccount as Ft, updateAgentRegistrations as G, createUnsupportedProviderUsageLimits as Gn, syncRuntimeEventToInflightTaskControlRegistry as Gt, resolveAgentTargetState as H, assertLegacyAgentContextAssociation as Hn, summarizeSkippedDaemonProfiles as Ht, listAgentTargetStates as I, resolveConversationExecutionStateByLookupKey as In, setCustomProfileWorkspace as It, normalizeAgentIds as J, materializeCliLaunchCommand as Jn, isDaemonReconcileInProgressError as Jt, notifyDaemonRouteCatalogChanged as K, resolveDispatchSpaceActionMcpServer as Kn, SPACE_ACTION_CONTEXT_GUIDANCE_LINES as Kt, manageAgentRegistrationInstallation as L, seedLegacyAgentContext as Ln, setOpenMeldManagedProfileWorkspace as Lt, addAgentCustomTarget as M, appendLedgerHistoryEntry as Mn, readProfileWorkspaceConfig as Mt, createRegistrationFromCatalogTarget as N, commitResolvedAgentContext as Nn, readProfileWorkspaceConfigForAccount as Nt, syncDeviceRuntimeStateProjection as O, DaemonServiceRunError as On, resolveCatalogSyncIntervalMs as Or, resolveRegistryRuntimeAdapterCapabilitySnapshot as Ot, listAgentCustomTargets as P, loadLedgerState as Pn, resolveConfiguredProfileWorkspacePath as Pt, resolveLocalRegistryAgentIdFromAgentControllerRef as Q, areAgentControllerInterfaceAccountsSame as Qn, createPendingAgentInteractionRegistry as Qt, readAgentRuntimeConfigHealth as R, settleInflightTask as Rn, validateCustomProfileWorkspacePath as Rt, syncProfileWorkspaceState as S, resolveCodexAppServerCompletedTurn as Sn, MAX_HEARTBEAT_INTERVAL_MS as Sr, canonicalizeLocalProjectPath as St, resolveEffectiveProfileWorkingFolderRuntime as T, emitDriftDetectedEvidence as Tn, applyIntervalJitterMs as Tr, withAgentActivityLocalStateLock as Tt, setAgentRegistrationEnabled as U, buildAgentContextLookupKey as Un, syncDaemonRouteCatalogState as Ut, removeAgentCustomTarget as V, buildAuthenticatedControlPlaneResponse as Vn, createRouteCatalogFromMutableState as Vt, updateAgentCustomTarget as W, createUnavailableProviderUsageLimits as Wn, normalizeDispatchThreadAction as Wt, sortAgentRegistrations as X, createProviderOriginalError as Xn, buildDispatchReplyContextSummary as Xt, parseAgentEnabledOption as Y, listAgentControllerSupervisedProcessIds as Yn, createSerialAgentInteractionCallback as Yt, repairBuiltinControllerInstall as Z, DEFAULT_TASK_LIFECYCLE_HEARTBEAT_INTERVAL_MS as Zn, normalizeDispatchPostMessageAction as Zt, loadDaemonRouteCatalog as _, resolveInstalledGrokBuildLaunchCandidates as _n, resolveEvidenceSyncHealth as _r, removeProjectConnection as _t, buildOpenClawSpaceSessionKey as a, resolveDispatchContinuityObservation as an, getAgentControllerPermissionModeDisplayMetadata as ar, isHomebrewCommandPath as at, resolveLocalController as b, resolveInstalledCodexLaunchCandidates as bn, resolveRouteRegistrationReconcileDecision as br, setDefaultProjectConnection as bt, findOpenClawAgentById as c, resolveLatestScopedConversationExecutionState as cn, listAgentControllerPermissionModeOptions as cr, ProjectBindingOperationError as ct, resolveOpenClawAuthStatus as d, createLocalAdapterEntries as dn, projectPeopleComputersToLegacyLocalRuntimes as dr, isProjectBound as dt, createLocalTaskInterruptSender as en, buildInformationProtectionPromptPlan as er, detectInstalledSkillsAgents as et, resolveOpenClawProviderRuntimeWorkingDirectory as f, parseOpenCodeGoUsageResponse as fn, renderInformationProtectionPrompt as fr, listProjectBindings as ft, writeDaemonRouteCatalogCache as g, probeGrokBuildAcpInterface as gn, resolveAgentProfileEditCapabilities as gr, removeMissingProjectConnections as gt, readDaemonRouteCatalogCache as h, GrokBuildAcpTransportError as hn, resolveAgentExecutionStatus as hr, removeAgentActivityBindingsWhileDeliveryLocked as ht, listOpenClawGatewayAgents as i, resolveDispatchQueueLogMeta as in, createAuthorityOpenMeldServiceRuntimeId as ir, isBunGlobalCommandPath as it, resolveAgentProfilePrimaryAgentControllerReport as j, buildTaskResultEnvelope as jn, normalizeCustomProfileWorkspacePath as jt, createPrimaryBindingReadSession as k, runRuntimeTask as kn, compareAgentControllerRefsForDisplay as kr, resolveRegistryRuntimeAdapterContractByAgentControllerRef as kt, findOpenClawAgentsByWorkspace as l, resolveCatalogSyncSkippedProfilesLogState as ln, parseAgentControllerRef as lr, ProjectBindingStoreUpdateRequiredError as lt, resolveOpenClawLocalBootstrapPaths as m, resolveInstalledOpenCodeLaunchCandidates as mn, resolveAgentControllerPermissionModeForController as mr, migrateProjectBindingStore as mt, fetchOpenClawGatewayHealth as n, createLocalExecutionSlots as nn, createAgentControllerInterfaceDisplayRows as nr, EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES as nt, normalizeOpenClawSpaceIdPrefix as o, resolveCompatibleAgentContextMatch as on, getAgentControllerPermissionModeFieldLabel as or, isNpmGlobalCommandPath as ot, readOpenClawLocalBootstrapState as p, forkOpenCodeServerSession as pn, renderWorkingLanguagePrompt as pr, listProjectConnectionsWithStatus as pt, normalizeAgentId as q, buildCliLaunchInvocation as qn, SPACE_ACTION_TARGET_GUIDANCE_LINES as qt, listOpenClawAgents as r, createInflightTaskControlRegistry as rn, createAgentExecutionStatusDisplayRows as rr, resolveBuiltinAgentControllerDefinition as rt, slugifyOpenClawNamePart as s, resolveCompatibleConversationExecutionState as sn, isAgentExecutionReadyOrConnecting as sr, isPnpmGlobalCommandPath as st, prepareProviderRuntime as t, buildLocalServiceDiagnosticsPayload as tn, buildWorkingLanguagePromptPlan as tr, resolveSkillsAgentRegistry as tt, matchesExpectedWorkspace as u, createLocalAdapterContainer as un, peopleComputerContainsDevice as ur, bindProject as ut, buildRuntimeRouteTargets as v, projectCodexUsageLimits as vn, resolveNativeAgentControllerPermissionModeForController as vr, resolveProjectBindingForPath as vt, resolveCurrentEffectiveProfileWorkingFolderRuntime as w, resolveInstalledClaudeCodeLaunchCandidates as wn, applyAcceptedLeases as wr, withAgentActivityDeliveryLock as wt, resolveLocalRuntimeControllerSupport as x, forkCodexAppServerThread as xn, ADAPTIVE_HEARTBEAT_JITTER_RATIO as xr, unbindProject as xt, readLocalEnabledControllers as y, resolveCodexTimeoutMs as yn, resolveSelectableCandidates as yr, runIfAgentActivityBindingGenerationIsCurrent as yt, reconcileNewRunnableBuiltinAgentRegistrations as z, upsertConversationExecutionState as zn, describeProfileWorkspacePathValidationFailure as zt };
29929
29981
 
29930
- //# sourceMappingURL=prepare-provider-runtime-CMX59Gmv.js.map
29982
+ //# sourceMappingURL=prepare-provider-runtime-CeGzeQbD.js.map