openmeld 0.3.217 → 0.3.219

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/dist/{add-me-membership-C2Ys6Gq2.js → add-me-membership-DUspkb62.js} +2 -2
  3. package/dist/{add-me-membership-C2Ys6Gq2.js.map → add-me-membership-DUspkb62.js.map} +1 -1
  4. package/dist/{agents-ClqMS9aO.js → agents-B0LFMdki.js} +9 -9
  5. package/dist/{agents-ClqMS9aO.js.map → agents-B0LFMdki.js.map} +1 -1
  6. package/dist/{api-client-foundation-CMVD057A.js → api-client-foundation-DJ9KlXwz.js} +1 -1
  7. package/dist/{api-client-foundation-Cib1elkI.js → api-client-foundation-Dmjk9vVk.js} +3 -3
  8. package/dist/{api-client-foundation-Cib1elkI.js.map → api-client-foundation-Dmjk9vVk.js.map} +1 -1
  9. package/dist/{auth-session-DOjVKRI_.js → auth-session-CDhQANWx.js} +22 -6
  10. package/dist/auth-session-CDhQANWx.js.map +1 -0
  11. package/dist/auth-session-DsBkEFct.js +4 -0
  12. package/dist/{channel-BfTy6fDo.js → channel-D5ABuavH.js} +3 -3
  13. package/dist/{channel-BfTy6fDo.js.map → channel-D5ABuavH.js.map} +1 -1
  14. package/dist/{cli-space-api-BT_Pu9Yg.js → cli-space-api-DVfyQOhC.js} +6 -6
  15. package/dist/{cli-space-api-BT_Pu9Yg.js.map → cli-space-api-DVfyQOhC.js.map} +1 -1
  16. package/dist/{command-C1w0UpIu.js → command-CFDUoorG.js} +15 -15
  17. package/dist/{command-C1w0UpIu.js.map → command-CFDUoorG.js.map} +1 -1
  18. package/dist/{computer-connection-DsjsjmPp.js → computer-connection-DYnof5Xw.js} +2 -2
  19. package/dist/{computer-connection-DsjsjmPp.js.map → computer-connection-DYnof5Xw.js.map} +1 -1
  20. package/dist/{computer-connection-review-RXJyryCh.js → computer-connection-review-Brrrl6Hk.js} +5 -5
  21. package/dist/{computer-connection-review-RXJyryCh.js.map → computer-connection-review-Brrrl6Hk.js.map} +1 -1
  22. package/dist/{computer-disconnect-B_LZM2QE.js → computer-disconnect-B0BqUt8x.js} +7 -7
  23. package/dist/{computer-disconnect-B_LZM2QE.js.map → computer-disconnect-B0BqUt8x.js.map} +1 -1
  24. package/dist/{computer-setup-continuation-BVI7SD0M.js → computer-setup-continuation-BWwd7hfl.js} +3 -3
  25. package/dist/{computer-setup-continuation-BVI7SD0M.js.map → computer-setup-continuation-BWwd7hfl.js.map} +1 -1
  26. package/dist/{context-Di5R4iik.js → context-D9Ebb5wl.js} +4 -4
  27. package/dist/{context-Di5R4iik.js.map → context-D9Ebb5wl.js.map} +1 -1
  28. package/dist/{daemon-device-id-bfkbZj9G.js → daemon-device-id-YnLMx1kN.js} +5 -5
  29. package/dist/{daemon-device-id-bfkbZj9G.js.map → daemon-device-id-YnLMx1kN.js.map} +1 -1
  30. package/dist/{daemon-frame-transport-saNQVOyi.js → daemon-frame-transport-BOZpAMMJ.js} +34 -7
  31. package/dist/daemon-frame-transport-BOZpAMMJ.js.map +1 -0
  32. package/dist/{daemon-lifecycle-journal-DP01txRB.js → daemon-lifecycle-journal-Bp0fPeui.js} +7 -8
  33. package/dist/{daemon-lifecycle-journal-DP01txRB.js.map → daemon-lifecycle-journal-Bp0fPeui.js.map} +1 -1
  34. package/dist/{daemon-service-manager-CRHq3YSj.js → daemon-service-manager-ReGjcyjq.js} +1 -1
  35. package/dist/{daemon-service-manager-CXbN836B.js → daemon-service-manager-rNRRVrj1.js} +2 -2
  36. package/dist/{daemon-service-manager-CXbN836B.js.map → daemon-service-manager-rNRRVrj1.js.map} +1 -1
  37. package/dist/{daemon-service-runtime-DpiD8oap.js → daemon-service-runtime-BYWOcDb7.js} +5 -5
  38. package/dist/{daemon-service-runtime-DpiD8oap.js.map → daemon-service-runtime-BYWOcDb7.js.map} +1 -1
  39. package/dist/{daemon-service-update-coordinator-BuCEBJoe.js → daemon-service-update-coordinator-Cf4NtdK7.js} +16 -12
  40. package/dist/daemon-service-update-coordinator-Cf4NtdK7.js.map +1 -0
  41. package/dist/{dist-DkRliHib.js → dist-B6Z-8B4v.js} +44 -4
  42. package/dist/dist-B6Z-8B4v.js.map +1 -0
  43. package/dist/{dist-BdibASYs.js → dist-ChS52b_E.js} +2 -2
  44. package/dist/{dist-BdibASYs.js.map → dist-ChS52b_E.js.map} +1 -1
  45. package/dist/{dist-RR7jryeV.js → dist-uyFidGQU.js} +1 -1
  46. package/dist/{elapsed-time-CR9OIZSD.js → elapsed-time-BP84Tz_l.js} +5 -5
  47. package/dist/{elapsed-time-CR9OIZSD.js.map → elapsed-time-BP84Tz_l.js.map} +1 -1
  48. package/dist/{entry-CSoHtCQ9.js → entry-B4G_hqId.js} +7 -7
  49. package/dist/{entry-CSoHtCQ9.js.map → entry-B4G_hqId.js.map} +1 -1
  50. package/dist/{installation-inventory-CscX0nmD.js → installation-inventory-vyAkTNzT.js} +3 -3
  51. package/dist/{installation-inventory-CscX0nmD.js.map → installation-inventory-vyAkTNzT.js.map} +1 -1
  52. package/dist/{installer-CkF3gSdD.js → installer-Cw05xb5l.js} +2 -2
  53. package/dist/{installer-CkF3gSdD.js.map → installer-Cw05xb5l.js.map} +1 -1
  54. package/dist/native/openmeld-keychain.node +0 -0
  55. package/dist/{open-code-permission-Doem1R2N.js → open-code-permission-DHFJYc_o.js} +5 -1
  56. package/dist/open-code-permission-DHFJYc_o.js.map +1 -0
  57. package/dist/{openmeld-BcyBlby4.js → openmeld-CheYNGUc.js} +238 -43
  58. package/dist/openmeld-CheYNGUc.js.map +1 -0
  59. package/dist/openmeld-dev.js +0 -0
  60. package/dist/{openmeld-maintenance-worker-Brsfy22C.js → openmeld-maintenance-worker-BlGoUmXC.js} +10 -10
  61. package/dist/{openmeld-maintenance-worker-Brsfy22C.js.map → openmeld-maintenance-worker-BlGoUmXC.js.map} +1 -1
  62. package/dist/{openmeld-tools-update-join-CUh0JERe.js → openmeld-tools-update-join-BZp2dx06.js} +4 -4
  63. package/dist/{openmeld-tools-update-join-CUh0JERe.js.map → openmeld-tools-update-join-BZp2dx06.js.map} +1 -1
  64. package/dist/openmeld.js +4 -4
  65. package/dist/{prepare-provider-runtime-DxaGSe3R.js → prepare-provider-runtime-niE5QEAv.js} +100 -74
  66. package/dist/prepare-provider-runtime-niE5QEAv.js.map +1 -0
  67. package/dist/{prepare-session-executor-CyouBl49.js → prepare-session-executor-DhWSYpJX.js} +19 -19
  68. package/dist/{prepare-session-executor-CyouBl49.js.map → prepare-session-executor-DhWSYpJX.js.map} +1 -1
  69. package/dist/{process-channel-Cocpv3Br.js → process-channel-B2BU2X7x.js} +2 -2
  70. package/dist/{process-channel-Cocpv3Br.js.map → process-channel-B2BU2X7x.js.map} +1 -1
  71. package/dist/{runtime-DGT66AR-.js → runtime-COI2XGXX.js} +142 -21
  72. package/dist/runtime-COI2XGXX.js.map +1 -0
  73. package/dist/{runtime-agent-controller-reporting-submission-C1Vc_JWm.js → runtime-agent-controller-reporting-submission-BgkhnPU5.js} +8 -8
  74. package/dist/{runtime-agent-controller-reporting-submission-C1Vc_JWm.js.map → runtime-agent-controller-reporting-submission-BgkhnPU5.js.map} +1 -1
  75. package/dist/{runtime-reporting-health-state-CPWlQ5IX.js → runtime-reporting-health-state-HhsHeySN.js} +9 -36
  76. package/dist/runtime-reporting-health-state-HhsHeySN.js.map +1 -0
  77. package/dist/{runtime-transport-BLtOFrtv.js → runtime-transport-0F5E6So6.js} +73 -2
  78. package/dist/runtime-transport-0F5E6So6.js.map +1 -0
  79. package/dist/{service-ClETdJbz.js → service-CgAFfq0Y.js} +21 -21
  80. package/dist/service-CgAFfq0Y.js.map +1 -0
  81. package/dist/{service-account-authorization-kciEaW5t.js → service-account-authorization-DAPQy2yP.js} +2 -2
  82. package/dist/{service-account-authorization-kciEaW5t.js.map → service-account-authorization-DAPQy2yP.js.map} +1 -1
  83. package/dist/{service-account-control-3n_YwNsF.js → service-account-control-DiLG-w18.js} +10 -10
  84. package/dist/{service-account-control-3n_YwNsF.js.map → service-account-control-DiLG-w18.js.map} +1 -1
  85. package/dist/{service-control-capabilities-DoW5MW7A.js → service-control-capabilities-BP8sLHBA.js} +1 -1
  86. package/dist/{service-control-capabilities-C2tMMuFl.js → service-control-capabilities-DEiDpmzc.js} +4 -4
  87. package/dist/{service-control-capabilities-C2tMMuFl.js.map → service-control-capabilities-DEiDpmzc.js.map} +1 -1
  88. package/dist/{state-CMs4p0wo.js → state-Cwf0cTLu.js} +2 -2
  89. package/dist/{state-CMs4p0wo.js.map → state-Cwf0cTLu.js.map} +1 -1
  90. package/dist/{upgrade-2epQATRq.js → upgrade-CaPzHLuW.js} +14 -7
  91. package/dist/upgrade-CaPzHLuW.js.map +1 -0
  92. package/dist/upgrade-DYxQKdbJ.js +4 -0
  93. package/dist/{windows-user-task-CSJpDs-S.js → windows-user-task-D4uMvea3.js} +84 -3
  94. package/dist/windows-user-task-D4uMvea3.js.map +1 -0
  95. package/dist/{windows-user-task-CWDzkJCq.js → windows-user-task-hNE24Gqr.js} +1 -1
  96. package/package.json +41 -43
  97. package/dist/auth-session-D7oAIuHk.js +0 -4
  98. package/dist/auth-session-DOjVKRI_.js.map +0 -1
  99. package/dist/daemon-frame-transport-saNQVOyi.js.map +0 -1
  100. package/dist/daemon-service-update-coordinator-BuCEBJoe.js.map +0 -1
  101. package/dist/dist-DkRliHib.js.map +0 -1
  102. package/dist/open-code-permission-Doem1R2N.js.map +0 -1
  103. package/dist/openmeld-BcyBlby4.js.map +0 -1
  104. package/dist/prepare-provider-runtime-DxaGSe3R.js.map +0 -1
  105. package/dist/runtime-DGT66AR-.js.map +0 -1
  106. package/dist/runtime-reporting-health-state-CPWlQ5IX.js.map +0 -1
  107. package/dist/runtime-transport-BLtOFrtv.js.map +0 -1
  108. package/dist/service-ClETdJbz.js.map +0 -1
  109. package/dist/upgrade-2epQATRq.js.map +0 -1
  110. package/dist/upgrade-BVIot_cP.js +0 -4
  111. package/dist/windows-user-task-CSJpDs-S.js.map +0 -1
File without changes
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-Bsl_ElWy.js";
4
- import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-DxaGSe3R.js";
5
- import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-CMs4p0wo.js";
6
- import { Q as readPendingDaemonServiceUpdate, Y as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, tt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-DpiD8oap.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-BuCEBJoe.js";
4
+ import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-niE5QEAv.js";
5
+ import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-Cwf0cTLu.js";
6
+ import { Q as readPendingDaemonServiceUpdate, Y as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, tt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-BYWOcDb7.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-Cf4NtdK7.js";
8
8
  import { g as getConfiguredSkillsConfig } from "./base-url-D7uE_xTo.js";
9
9
  import { W as withDaemonServiceReconcileLock } from "./daemon-state-B44aq2nm.js";
10
10
  import { i as readDaemonServiceContract } from "./daemon-service-contract-BpOBMGX0.js";
11
- import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-DP01txRB.js";
12
- import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-CXbN836B.js";
13
- import { s as resolveTrackedInstallTargets } from "./installation-inventory-CscX0nmD.js";
14
- import { t as installSkillsToTargets } from "./installer-CkF3gSdD.js";
11
+ import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-Bp0fPeui.js";
12
+ import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-rNRRVrj1.js";
13
+ import { s as resolveTrackedInstallTargets } from "./installation-inventory-vyAkTNzT.js";
14
+ import { t as installSkillsToTargets } from "./installer-Cw05xb5l.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-BVI7SD0M.js");
78
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-BWwd7hfl.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-Brsfy22C.js.map
107
+ //# sourceMappingURL=openmeld-maintenance-worker-BlGoUmXC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-Brsfy22C.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-BlGoUmXC.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-DpiD8oap.js";
4
- import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BuCEBJoe.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-CR9OIZSD.js";
3
+ import { Q as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-BYWOcDb7.js";
4
+ import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-Cf4NtdK7.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-BP84Tz_l.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-CUh0JERe.js.map
56
+ //# sourceMappingURL=openmeld-tools-update-join-BZp2dx06.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-CUh0JERe.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-BZp2dx06.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-CSoHtCQ9.js");
6
+ const { runExecutionHost } = await import("./entry-B4G_hqId.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-Brsfy22C.js");
16
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-BlGoUmXC.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-BVIot_cP.js");
23
+ const { runMaintenanceUpgrade } = await import("./upgrade-DYxQKdbJ.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-BcyBlby4.js");
33
+ else await import("./openmeld-CheYNGUc.js");
34
34
  //#endregion
35
35
  export {};
36
36
 
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { J as normalizeOpenMeldProfileId, L as deviceOpenClawProfileBootstrapPath, P as accountProfileWorkspacePath, R as deviceOpenClawProfileDir, W as isPublishedOpenMeldHome, a as isOpenMeldOrphanedLockError, ct as resolveOpenMeldEnvPreset, d as runWithHeldLock, i as isOpenMeldLockError, j as accountProfileLocalMetaPath, lt as resolveOpenMeldRootDir, t as acquireLock, z as deviceOpenClawProfileWorkspaceDir } from "./lock-Bsl_ElWy.js";
4
- import { Kt as createLocalRuntimeExpectedRoutesApi, Mt as createAgentProfileBindingApi, mi as modelCatalogSchema, t as OpenMeldApiClientHttpError } from "./dist-DkRliHib.js";
4
+ import { Kt as createLocalRuntimeExpectedRoutesApi, Mt as createAgentProfileBindingApi, mi as modelCatalogSchema, t as OpenMeldApiClientHttpError } from "./dist-B6Z-8B4v.js";
5
5
  import { _ as canonicalizeAgentControllerRef, b as normalizeKnownBuiltinAgentControllerId, d as resolveBuiltinAgentControllerConversationKind, f as HOSTED_CENTER_AGENT_CONTROLLER_REF, g as buildAgentControllerRoutingKey, l as buildAgentControllerConversationRef, m as HOSTED_REMOTE_AGENT_CONTROLLER_REF, p as HOSTED_CENTER_AGENT_CONTROLLER_REF_ID, s as runtimeTransportModeSchema, v as canonicalizeBuiltinAgentControllerRef, x as parseAgentControllerRef$1 } from "./controller-contract-DAOCaefz.js";
6
- import { Bn as formatCanonicalMentionLiteral, H as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, J as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, K as openMeldDaemonProviderAccessEvidenceSchema, U as isOriginalErrorSafeForMessageDetails, Un as normalizeMessageEnvelope, di as resolveCommandAgentWorkActivity, q as openMeldDaemonTaskResultEnvelopeWriteSchema, sr as agentInteractionResolutionSchema, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH } from "./runtime-transport-BLtOFrtv.js";
7
- import { d as getAuthSessionState, q as OPENCLAW_CLI_TIMEOUT_MS$1 } from "./auth-session-DOjVKRI_.js";
6
+ import { Bn as formatCanonicalMentionLiteral, H as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, J as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, K as openMeldDaemonProviderAccessEvidenceSchema, U as isOriginalErrorSafeForMessageDetails, Un as normalizeMessageEnvelope, di as resolveCommandAgentWorkActivity, q as openMeldDaemonTaskResultEnvelopeWriteSchema, sr as agentInteractionResolutionSchema, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH } from "./runtime-transport-0F5E6So6.js";
7
+ import { d as getAuthSessionState, q as OPENCLAW_CLI_TIMEOUT_MS$1 } from "./auth-session-CDhQANWx.js";
8
8
  import { C as conversationExecutionStateSchema, D as normalizeOptionalWorkingDirectory, P as profileWorkspaceModeSchema, T as MAX_PROFILE_WORKING_DIRECTORY_LENGTH, o as openMeldDaemonControlPlaneRequestSchema, s as openMeldDaemonControlPlaneResponseSchema, x as providerDispatchRuntimeContextSchema } from "./control-plane-BDS63N7Y.js";
9
9
  import { r as daemonServiceLaneSchema } from "./service-contract-CRyDcIIf.js";
10
- import { n as agentControllerPermissionModeSchema, r as agentControllerCollaborationModeSchema } from "./open-code-permission-Doem1R2N.js";
11
- import { U as listOpenMeldProfiles, X as touchDaemonCatalogSyncSignal, _ as toErrorMessage$20, ct as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, st as resolveCurrentOpenMeldAccountContext, u as normalizeOptionalText$52, ut as daemonRouteCatalogCacheSchema } from "./daemon-device-id-bfkbZj9G.js";
10
+ import { n as agentControllerPermissionModeSchema, r as agentControllerCollaborationModeSchema } from "./open-code-permission-DHFJYc_o.js";
11
+ import { U as listOpenMeldProfiles, X as touchDaemonCatalogSyncSignal, _ as toErrorMessage$20, ct as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, st as resolveCurrentOpenMeldAccountContext, u as normalizeOptionalText$52, ut as daemonRouteCatalogCacheSchema } from "./daemon-device-id-YnLMx1kN.js";
12
12
  import { C as updateConfiguredDeviceRuntimeState, T as updateConfiguredSkillsConfig, a as resolveBaseUrl, d as createDefaultRuntimeAgentControllerSettings, g as getConfiguredSkillsConfig, p as getConfiguredDeviceRuntimeState, v as getRuntimeConfigReadHealth, y as resolveRuntimeSkillsCustomTargetId } from "./base-url-D7uE_xTo.js";
13
13
  import { a as powerShellEncodedArguments, l as normalizeCommandEnvironment, o as readWindowsProcessStartFileTime, r as isProcessIdentityAlive, s as resolveWindowsPowerShellPath, t as CURRENT_PROCESS_START_IDENTITY } from "./process-identity-CNus0e6E.js";
14
14
  import { n as writeDaemonLocalStateFile, t as readDaemonLocalStateFile } from "./daemon-local-state-file-jOXuXrky.js";
15
15
  import { m as daemonRuntimeDataPath } from "./daemon-state-B44aq2nm.js";
16
16
  import { i as readDaemonServiceContract } from "./daemon-service-contract-BpOBMGX0.js";
17
- import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-DP01txRB.js";
18
- import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-Cib1elkI.js";
17
+ import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-Bp0fPeui.js";
18
+ import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-Dmjk9vVk.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";
@@ -664,13 +664,49 @@ const GROK_BUILD_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
664
664
  value: "grok-build:bypassPermissions"
665
665
  }
666
666
  ];
667
+ const ANTIGRAVITY_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
668
+ {
669
+ description: "Use Antigravity's configured tool permissions. Actions that need approval are blocked during unattended runs.",
670
+ label: "Default",
671
+ requiresExplicitConfirmation: false,
672
+ technicalDetail: "agy (no OpenMeld permission overrides)",
673
+ tone: "neutral",
674
+ value: "antigravity:default"
675
+ },
676
+ {
677
+ description: "Automatically accept file edits. Shell commands still follow Antigravity's configured tool permissions.",
678
+ label: "Accept edits",
679
+ requiresExplicitConfirmation: false,
680
+ technicalDetail: "agy --mode accept-edits",
681
+ tone: "neutral",
682
+ value: "antigravity:acceptEdits"
683
+ },
684
+ {
685
+ description: "Ask Antigravity to investigate and propose a plan before making changes. This is not a read-only sandbox.",
686
+ label: "Plan",
687
+ requiresExplicitConfirmation: false,
688
+ technicalDetail: "agy --mode plan",
689
+ tone: "neutral",
690
+ value: "antigravity:plan"
691
+ },
692
+ {
693
+ description: "Automatically approve all tool requests, including file changes and shell commands.",
694
+ label: "Bypass permissions",
695
+ requiresExplicitConfirmation: true,
696
+ technicalDetail: "agy --dangerously-skip-permissions",
697
+ tone: "warning",
698
+ value: "antigravity:bypassPermissions"
699
+ }
700
+ ];
667
701
  const AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS_BY_CONTROLLER_ID = {
702
+ antigravity: ANTIGRAVITY_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
668
703
  "claude-code": CLAUDE_CODE_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
669
704
  codex: CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
670
705
  cursor: CURSOR_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
671
706
  "grok-build": GROK_BUILD_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS
672
707
  };
673
708
  const AGENT_CONTROLLER_PERMISSION_MODE_FIELD_LABEL_BY_CONTROLLER_ID = {
709
+ antigravity: "Antigravity permissions mode",
674
710
  "claude-code": "Claude Code permissions mode",
675
711
  codex: "Codex permissions mode",
676
712
  cursor: "Cursor permissions mode",
@@ -711,6 +747,7 @@ function listAgentControllerPermissionModeOptions(input) {
711
747
  if (controllerOptions) return controllerOptions.map((option) => ({ ...option }));
712
748
  if (input) return [];
713
749
  return [
750
+ ...ANTIGRAVITY_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
714
751
  ...CLAUDE_CODE_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
715
752
  ...CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
716
753
  ...CURSOR_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
@@ -1392,14 +1429,19 @@ const createAgentProfileBindingModelSelection = (input) => {
1392
1429
  ...reasoningLevel ? { reasoningLevel } : {}
1393
1430
  };
1394
1431
  };
1432
+ /** Personal Remote Agents share the hosted catalog without changing identity. */
1433
+ function getAgentControllerModelCatalogId(controller) {
1434
+ return controller.kind === "hosted:remote-agent" ? HOSTED_CENTER_AGENT_CONTROLLER_REF_ID : controller.id;
1435
+ }
1395
1436
  function resolveAgentProfileEditCapabilities(input) {
1396
1437
  const parsedRef = parseAgentControllerRef(input.agentControllerRef);
1438
+ const catalogId = parsedRef ? getAgentControllerModelCatalogId(parsedRef) : null;
1397
1439
  const unavailableReason = resolveModelCatalogUnavailableReason({
1398
1440
  hasCatalog: input.modelCatalog !== null,
1399
1441
  hasParsedRef: parsedRef !== null,
1400
- hasController: parsedRef ? Object.hasOwn(input.modelCatalog?.agentControllers ?? {}, parsedRef.id) : false
1442
+ hasController: catalogId ? Object.hasOwn(input.modelCatalog?.agentControllers ?? {}, catalogId) : false
1401
1443
  });
1402
- const models = ((parsedRef && input.modelCatalog ? input.modelCatalog.agentControllers[parsedRef.id] ?? null : null)?.models ?? []).filter((model) => !model.unavailable).map(cloneModelCatalogModel);
1444
+ const models = ((catalogId && input.modelCatalog ? input.modelCatalog.agentControllers[catalogId] ?? null : null)?.models ?? []).filter((model) => !model.unavailable).map(cloneModelCatalogModel);
1403
1445
  const modelSelectionUnavailableReason = unavailableReason ?? (models.length === 0 ? "no_models" : void 0);
1404
1446
  const reasoningLevelModels = models.map((model) => {
1405
1447
  const levels = [...model.supportedReasoningLevels];
@@ -8212,6 +8254,10 @@ const shouldCommitAgentContextLifecycle = (input) => {
8212
8254
  if ("routeFailure" in input.dispatchResult) return input.dispatchResult.routeFailure === void 0;
8213
8255
  return true;
8214
8256
  };
8257
+ const shouldRetainResolvedLedgerContext = (input) => {
8258
+ if (isRepairExecutionMode(input.executionMode)) return false;
8259
+ return input.agentContextOverride === void 0 || input.agentContextOverride.agentControllerConversationId === (input.agentContextResolution?.resolvedAgentControllerConversationId ?? null);
8260
+ };
8215
8261
  const resolveCommittedAgentContextResolution = (input) => {
8216
8262
  if (!input.agentContextResolution) return null;
8217
8263
  if (!shouldCommitAgentContextLifecycle({
@@ -8521,18 +8567,23 @@ const runRuntimeTask = async (input) => {
8521
8567
  } } : {},
8522
8568
  task: input.task
8523
8569
  });
8524
- const committedAgentContextResolution = isRepairExecutionMode(input.task.executionMode) ? null : resolveCommittedAgentContextResolution({
8570
+ const retainResolvedLedgerContext = shouldRetainResolvedLedgerContext({
8571
+ executionMode: input.task.executionMode,
8572
+ agentContextOverride: input.agentContextOverride,
8573
+ agentContextResolution
8574
+ });
8575
+ const committedAgentContextResolution = retainResolvedLedgerContext ? resolveCommittedAgentContextResolution({
8525
8576
  deduped,
8526
8577
  dispatchResult,
8527
8578
  agentContextResolution
8528
- });
8529
- const postDispatchAgentContext = isRepairExecutionMode(input.task.executionMode) ? null : resolvePostDispatchAgentContextInput({
8579
+ }) : null;
8580
+ const postDispatchAgentContext = retainResolvedLedgerContext ? resolvePostDispatchAgentContextInput({
8530
8581
  committedAgentContextResolution,
8531
8582
  dispatchResult,
8532
8583
  nowMs,
8533
8584
  route: input.route,
8534
8585
  task: input.task
8535
- });
8586
+ }) : null;
8536
8587
  const runtimeTaskOutcome = resolveRuntimeTaskOutcomeResult({
8537
8588
  agentId: input.task.agentId,
8538
8589
  attemptId: input.task.attemptId,
@@ -8787,7 +8838,7 @@ async function invokeAntigravityCliTransport(input) {
8787
8838
  });
8788
8839
  const invocation = buildCliLaunchInvocation({
8789
8840
  args: buildAntigravityArgs({
8790
- addDir: input.addDir,
8841
+ agentControllerPermissionMode: input.agentControllerPermissionMode,
8791
8842
  conversationPolicy: input.conversationPolicy,
8792
8843
  jsonSchema: input.jsonSchema,
8793
8844
  prompt,
@@ -8911,8 +8962,6 @@ function buildAntigravityArgs(input) {
8911
8962
  "--print-timeout",
8912
8963
  "0"
8913
8964
  ];
8914
- const addDir = normalizeOptionalText$42(input.addDir);
8915
- if (addDir) args.push("--add-dir", addDir);
8916
8965
  const jsonSchema = normalizeOptionalText$42(input.jsonSchema);
8917
8966
  if (jsonSchema) args.push("--json-schema", jsonSchema);
8918
8967
  if (input.sessionId) args.push("--conversation", input.sessionId);
@@ -8927,7 +8976,16 @@ function buildAntigravityArgs(input) {
8927
8976
  });
8928
8977
  args.push("--effort", effort);
8929
8978
  }
8930
- if (input.conversationPolicy?.collaborationMode === "plan") args.push("--mode", "plan");
8979
+ const permissionMode = input.agentControllerPermissionMode;
8980
+ if (permissionMode === "antigravity:acceptEdits") args.push("--mode", "accept-edits");
8981
+ else if (permissionMode === "antigravity:plan") args.push("--mode", "plan");
8982
+ else if (permissionMode === "antigravity:bypassPermissions") args.push("--dangerously-skip-permissions");
8983
+ else if (permissionMode && permissionMode !== "antigravity:default") throw new AntigravityCliTransportError({
8984
+ code: "permission.mode.unsupported",
8985
+ errorType: "config",
8986
+ message: `permission.mode.unsupported: Antigravity cannot apply '${permissionMode}'`
8987
+ });
8988
+ else if (input.conversationPolicy?.collaborationMode === "plan") args.push("--mode", "plan");
8931
8989
  return args;
8932
8990
  }
8933
8991
  const ANTIGRAVITY_EFFORTS = /* @__PURE__ */ new Set([
@@ -8989,8 +9047,7 @@ function normalizeOptionalText$42(value) {
8989
9047
  return normalized.length > 0 ? normalized : null;
8990
9048
  }
8991
9049
  //#endregion
8992
- //#region ../../runtime/adapters/antigravity/dist/transport/antigravity-space-action-plugin.js
8993
- const PLUGIN_DIRECTORY_PREFIX = "openmeld_dispatch_";
9050
+ //#region ../../runtime/adapters/antigravity/dist/transport/antigravity-space-action.js
8994
9051
  const FINAL_STATUSES = /* @__PURE__ */ new Set([
8995
9052
  "done",
8996
9053
  "blocked",
@@ -9048,57 +9105,25 @@ const ANTIGRAVITY_SPACE_ACTION_JSON_SCHEMA = JSON.stringify({
9048
9105
  async function withAntigravityDispatchSpaceAction(input) {
9049
9106
  const actionServer = resolveDispatchSpaceActionMcpServer(input.env);
9050
9107
  if (!actionServer) return await input.run({
9051
- addDir: null,
9108
+ prompt: input.prompt,
9052
9109
  jsonSchema: null
9053
9110
  });
9054
- const pluginId = `${PLUGIN_DIRECTORY_PREFIX}${randomUUID().replaceAll("-", "")}`;
9055
- const root = join(tmpdir(), pluginId);
9056
- const pluginDir = join(root, ".agents", "plugins", pluginId);
9057
- try {
9058
- await mkdir(pluginDir, {
9059
- recursive: true,
9060
- mode: 448
9061
- });
9062
- await Promise.all([
9063
- writeJson(join(pluginDir, "plugin.json"), {
9064
- description: "Records one structured Space outcome for the active OpenMeld Wake.",
9065
- name: pluginId
9066
- }),
9067
- writeJson(join(pluginDir, "hooks.json"), { "openmeld-space-action": { PreInvocation: [{
9068
- command: "node ./inject-space-action.mjs",
9069
- timeout: 5,
9070
- type: "command"
9071
- }] } }),
9072
- writeFile(join(pluginDir, "inject-space-action.mjs"), buildInstructionHookSource(), {
9073
- encoding: "utf8",
9074
- mode: 384
9075
- })
9076
- ]);
9077
- const result = await input.run({
9078
- addDir: root,
9079
- jsonSchema: ANTIGRAVITY_SPACE_ACTION_JSON_SCHEMA
9080
- });
9081
- await recordStructuredSpaceAction({
9082
- action: parseStructuredSpaceAction(result.structuredOutput),
9083
- actionServer
9084
- });
9085
- return result;
9086
- } finally {
9087
- await rm(root, {
9088
- force: true,
9089
- recursive: true
9090
- }).catch(() => void 0);
9091
- }
9092
- }
9093
- function writeJson(path, value) {
9094
- return writeFile(path, `${JSON.stringify(value, null, 2)}\n`, {
9095
- encoding: "utf8",
9096
- mode: 384
9111
+ const result = await input.run({
9112
+ prompt: `${input.prompt}\n\n${buildSpaceActionInstructions(input.workdir)}`,
9113
+ jsonSchema: ANTIGRAVITY_SPACE_ACTION_JSON_SCHEMA
9097
9114
  });
9115
+ await recordStructuredSpaceAction({
9116
+ action: parseStructuredSpaceAction(result.structuredOutput),
9117
+ actionServer
9118
+ });
9119
+ return result;
9098
9120
  }
9099
- function buildInstructionHookSource() {
9100
- const instruction = [
9121
+ function buildSpaceActionInstructions(workdir) {
9122
+ return [
9123
+ "OpenMeld Antigravity invocation contract:",
9124
+ `The working folder for this invocation is ${JSON.stringify(workdir)}. Resolve relative task paths there.`,
9101
9125
  "For this OpenMeld Wake, do not run a Space Action CLI command and do not inspect its environment variables.",
9126
+ "The structured outcome below is the complete reply/publication contract. Reading the OpenMeld CLI Skill is not required to reply; consult it only for additional OpenMeld operations requested by the user.",
9102
9127
  "If the request can be answered without tools, return the structured outcome immediately; do not inspect the workspace or run a command just to orient yourself.",
9103
9128
  "Complete the user's work under the normal Antigravity permission policy.",
9104
9129
  "At the end, return exactly one structured outcome using the required JSON schema: reply for a public message, status for a short final status, or silent when no public reply is appropriate.",
@@ -9106,7 +9131,6 @@ function buildInstructionHookSource() {
9106
9131
  "Use status=none unless action=status. Include only validated profile IDs from the provided target reference lists; otherwise leave all target arrays empty.",
9107
9132
  "OpenMeld will validate and record this outcome for the current dispatch."
9108
9133
  ].join(" ");
9109
- return `process.stdout.write(JSON.stringify({ injectSteps: [{ ephemeralMessage: ${JSON.stringify(instruction)} }] }));\n`;
9110
9134
  }
9111
9135
  function parseStructuredSpaceAction(value) {
9112
9136
  const record = toRecord$13(value);
@@ -9309,8 +9333,10 @@ function createDefaultAntigravityInvoke(input) {
9309
9333
  invokeOnce: async (sessionId) => {
9310
9334
  const transportResult = await withAntigravityDispatchSpaceAction({
9311
9335
  env: request.env,
9312
- run: async ({ addDir, jsonSchema }) => await invokeAntigravityCliTransport({
9313
- addDir,
9336
+ prompt: request.prompt,
9337
+ workdir: request.runtimeContext.providerRuntimeWorkingDirectory,
9338
+ run: async ({ prompt, jsonSchema }) => await invokeAntigravityCliTransport({
9339
+ agentControllerPermissionMode: request.agentControllerPermissionMode,
9314
9340
  conversationPolicy: request.conversationPolicy,
9315
9341
  env: request.env,
9316
9342
  jsonSchema,
@@ -9325,7 +9351,7 @@ function createDefaultAntigravityInvoke(input) {
9325
9351
  });
9326
9352
  },
9327
9353
  onRuntimeEvent: request.onRuntimeEvent,
9328
- prompt: request.prompt,
9354
+ prompt,
9329
9355
  sessionId,
9330
9356
  timeoutMs: request.timeoutMs ?? null,
9331
9357
  workdir: request.runtimeContext.providerRuntimeWorkingDirectory
@@ -24920,7 +24946,7 @@ var offline_catalog_default = {
24920
24946
  },
24921
24947
  {
24922
24948
  "id": "claude-opus-4-6-thinking",
24923
- "displayName": "Claude Opus 4.6 Thinking",
24949
+ "displayName": "Claude Opus 4.6 (Thinking)",
24924
24950
  "unavailable": false,
24925
24951
  "supportedReasoningLevels": [],
24926
24952
  "minCliVersion": "1.2.7"
@@ -27075,7 +27101,7 @@ const BUILTIN_AGENT_CONTROLLER_DEFINITIONS = [
27075
27101
  interrupt: true,
27076
27102
  modelSelection: true,
27077
27103
  nativeEventStream: true,
27078
- permissionModes: false,
27104
+ permissionModes: true,
27079
27105
  structuredUserInput: false
27080
27106
  },
27081
27107
  conversationOccupancy: {
@@ -29131,9 +29157,9 @@ function createModelCatalogReadSession(input) {
29131
29157
  async function readModelCatalogOnce(baseUrl) {
29132
29158
  try {
29133
29159
  const [apiClient, baseUrlModule, clientFoundationModule] = await Promise.all([
29134
- import("./dist-RR7jryeV.js"),
29160
+ import("./dist-uyFidGQU.js"),
29135
29161
  import("./base-url-CMBApK1J.js"),
29136
- import("./api-client-foundation-CMVD057A.js")
29162
+ import("./api-client-foundation-DJ9KlXwz.js")
29137
29163
  ]);
29138
29164
  if (typeof apiClient.createConfigApi !== "function") throw new Error("config api client is unavailable");
29139
29165
  const resolvedBaseUrl = baseUrl ?? await baseUrlModule.resolveBaseUrl();
@@ -30987,4 +31013,4 @@ async function prepareProviderRuntime(input, options = {}) {
30987
31013
  //#endregion
30988
31014
  export { canManageRegistryAgentSkillTargets as $, areAgentControllerInterfaceAccountsSame as $n, mergeOpenClawGatewayVisibility as $t, createExpectedRoutesReadSession as A, runRuntimeTask as An, compareAgentControllerRefsForDisplay as Ar, ensureOpenMeldManagedProfileWorkspace as At, reconcileNewRunnableBuiltinAgentsForSetup as B, upsertConversationExecutionState as Bn, createMutableRouteCatalogState as Bt, createModelCatalogReadSession as C, verifyCodexAppServerThread as Cn, MAX_HEARTBEAT_INTERVAL_MS as Cr, resolveLocalProjectConnectionForPath as Ct, NO_LOCAL_AGENTS_NEED_OPENMELD_SERVICE_REASON as D, emitReconcileCompletedEvidence as Dn, pruneStaleLeases as Dr, resolveRegistryOriginLaunchCommand as Dt, resolveProfileWorkspaceRuntime as E, emitDriftDetectedEvidence as En, applyIntervalJitterMs as Er, listBuiltinAgentsRegistryEntries as Et, listAgentRegistrations as F, loadLedgerState as Fn, resolveConfiguredProfileWorkspacePathForAccount as Ft, updateAgentRegistrations as G, createUnavailableProviderUsageLimits as Gn, syncRuntimeEventToInflightTaskControlRegistry as Gt, resolveAgentTargetState as H, buildAuthenticatedControlPlaneResponse as Hn, summarizeSkippedDaemonProfiles as Ht, listAgentTargetStates as I, removeConversationExecutionState as In, setCustomProfileWorkspace as It, normalizeAgentIds as J, buildCliLaunchInvocation as Jn, isDaemonReconcileInProgressError as Jt, notifyDaemonRouteCatalogChanged as K, createUnsupportedProviderUsageLimits as Kn, SPACE_ACTION_CONTEXT_GUIDANCE_LINES as Kt, manageAgentRegistrationInstallation as L, resolveConversationExecutionStateByLookupKey as Ln, setOpenMeldManagedProfileWorkspace as Lt, addAgentCustomTarget as M, buildTaskResultEnvelope as Mn, readProfileWorkspaceConfig as Mt, createRegistrationFromCatalogTarget as N, appendLedgerHistoryEntry as Nn, readProfileWorkspaceConfigForAccount as Nt, syncDeviceRuntimeStateProjection as O, emitReconcileStartedEvidence as On, resolveAdaptiveHeartbeatIntervalMs as Or, resolveRegistryRuntimeAdapterCapabilitySnapshot as Ot, listAgentCustomTargets as P, commitResolvedAgentContext as Pn, resolveConfiguredProfileWorkspacePath as Pt, resolveLocalRegistryAgentIdFromAgentControllerRef as Q, DEFAULT_TASK_LIFECYCLE_HEARTBEAT_INTERVAL_MS as Qn, createPendingAgentInteractionRegistry as Qt, readAgentRuntimeConfigHealth as R, seedLegacyAgentContext as Rn, validateCustomProfileWorkspacePath as Rt, syncProfileWorkspaceState as S, resolveCodexAppServerCompletedTurn as Sn, ADAPTIVE_HEARTBEAT_JITTER_RATIO as Sr, canonicalizeLocalProjectPath as St, resolveEffectiveProfileWorkingFolderRuntime as T, parseAntigravityUsageLimits as Tn, applyAcceptedLeases as Tr, withAgentActivityLocalStateLock as Tt, setAgentRegistrationEnabled as U, assertLegacyAgentContextAssociation as Un, syncDaemonRouteCatalogState as Ut, removeAgentCustomTarget as V, withLedgerStateTransaction as Vn, createRouteCatalogFromMutableState as Vt, updateAgentCustomTarget as W, buildAgentContextLookupKey as Wn, normalizeDispatchThreadAction as Wt, sortAgentRegistrations as X, listAgentControllerSupervisedProcessIds as Xn, buildDispatchReplyContextSummary as Xt, parseAgentEnabledOption as Y, materializeCliLaunchCommand as Yn, createSerialAgentInteractionCallback as Yt, repairBuiltinControllerInstall as Z, createProviderOriginalError as Zn, normalizeDispatchPostMessageAction as Zt, loadDaemonRouteCatalog as _, resolveInstalledGrokBuildLaunchCandidates as _n, resolveAgentProfileEditCapabilities as _r, removeProjectConnection as _t, buildOpenClawSpaceSessionKey as a, resolveDispatchContinuityObservation as an, createAuthorityOpenMeldServiceRuntimeId as ar, isHomebrewCommandPath as at, resolveLocalController as b, resolveInstalledCodexLaunchCandidates as bn, resolveSelectableCandidates as br, setDefaultProjectConnection as bt, findOpenClawAgentById as c, resolveLatestScopedConversationExecutionState as cn, isAgentExecutionReadyOrConnecting as cr, ProjectBindingOperationError as ct, resolveOpenClawAuthStatus as d, createLocalAdapterEntries as dn, peopleComputerContainsDevice as dr, isProjectBound as dt, createLocalTaskInterruptSender as en, buildAgentControllerRef as er, detectInstalledSkillsAgents as et, resolveOpenClawProviderRuntimeWorkingDirectory as f, parseOpenCodeGoUsageResponse as fn, projectPeopleComputersToLegacyLocalRuntimes as fr, listProjectBindings as ft, writeDaemonRouteCatalogCache as g, probeGrokBuildAcpInterface as gn, resolveAgentExecutionStatus as gr, removeMissingProjectConnections as gt, readDaemonRouteCatalogCache as h, GrokBuildAcpTransportError as hn, resolveAgentControllerPermissionModeForController as hr, removeAgentActivityBindingsWhileDeliveryLocked as ht, listOpenClawGatewayAgents as i, resolveDispatchQueueLogMeta as in, createAgentExecutionStatusDisplayRows as ir, isBunGlobalCommandPath as it, resolveAgentProfilePrimaryAgentControllerReport as j, buildRuntimeWorkspaceFingerprint as jn, resolveBuiltinAgentControllerBrand as jr, normalizeCustomProfileWorkspacePath as jt, createPrimaryBindingReadSession as k, DaemonServiceRunError as kn, resolveCatalogSyncIntervalMs as kr, resolveRegistryRuntimeAdapterContractByAgentControllerRef as kt, findOpenClawAgentsByWorkspace as l, resolveCatalogSyncSkippedProfilesLogState as ln, listAgentControllerPermissionModeOptions as lr, ProjectBindingStoreUpdateRequiredError as lt, resolveOpenClawLocalBootstrapPaths as m, resolveInstalledOpenCodeLaunchCandidates as mn, renderWorkingLanguagePrompt as mr, migrateProjectBindingStore as mt, fetchOpenClawGatewayHealth as n, createLocalExecutionSlots as nn, buildWorkingLanguagePromptPlan as nr, EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES as nt, normalizeOpenClawSpaceIdPrefix as o, resolveCompatibleAgentContextMatch as on, getAgentControllerPermissionModeDisplayMetadata as or, isNpmGlobalCommandPath as ot, readOpenClawLocalBootstrapState as p, forkOpenCodeServerSession as pn, renderInformationProtectionPrompt as pr, listProjectConnectionsWithStatus as pt, normalizeAgentId as q, resolveDispatchSpaceActionMcpServer as qn, SPACE_ACTION_TARGET_GUIDANCE_LINES as qt, listOpenClawAgents as r, createInflightTaskControlRegistry as rn, createAgentControllerInterfaceDisplayRows as rr, resolveBuiltinAgentControllerDefinition as rt, slugifyOpenClawNamePart as s, resolveCompatibleConversationExecutionState as sn, getAgentControllerPermissionModeFieldLabel as sr, isPnpmGlobalCommandPath as st, prepareProviderRuntime as t, buildLocalServiceDiagnosticsPayload as tn, buildInformationProtectionPromptPlan as tr, resolveSkillsAgentRegistry as tt, matchesExpectedWorkspace as u, createLocalAdapterContainer as un, parseAgentControllerRef as ur, bindProject as ut, buildRuntimeRouteTargets as v, projectCodexUsageLimits as vn, resolveEvidenceSyncHealth as vr, resolveProjectBindingForPath as vt, resolveCurrentEffectiveProfileWorkingFolderRuntime as w, resolveInstalledClaudeCodeLaunchCandidates as wn, MIN_HEARTBEAT_INTERVAL_MS as wr, withAgentActivityDeliveryLock as wt, resolveLocalRuntimeControllerSupport as x, forkCodexAppServerThread as xn, resolveRouteRegistrationReconcileDecision as xr, unbindProject as xt, readLocalEnabledControllers as y, resolveCodexTimeoutMs as yn, resolveNativeAgentControllerPermissionModeForController as yr, runIfAgentActivityBindingGenerationIsCurrent as yt, reconcileNewRunnableBuiltinAgentRegistrations as z, settleInflightTask as zn, describeProfileWorkspacePathValidationFailure as zt };
30989
31015
 
30990
- //# sourceMappingURL=prepare-provider-runtime-DxaGSe3R.js.map
31016
+ //# sourceMappingURL=prepare-provider-runtime-niE5QEAv.js.map