openmeld 0.3.246 → 0.3.247
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-me-membership-C7dYkfPz.js → add-me-membership-DUeJA9q4.js} +2 -2
- package/dist/{add-me-membership-C7dYkfPz.js.map → add-me-membership-DUeJA9q4.js.map} +1 -1
- package/dist/{agents-QisYIlFS.js → agents-woAcH0O6.js} +10 -10
- package/dist/{agents-QisYIlFS.js.map → agents-woAcH0O6.js.map} +1 -1
- package/dist/{api-client-foundation-CYbEdm9o.js → api-client-foundation-DMEfIARh.js} +3 -3
- package/dist/{api-client-foundation-CYbEdm9o.js.map → api-client-foundation-DMEfIARh.js.map} +1 -1
- package/dist/{api-client-foundation-B1aTRrIy.js → api-client-foundation-mqLjUunz.js} +1 -1
- package/dist/{auth-session-JhILeJRO.js → auth-session-D7hlE-47.js} +2 -2
- package/dist/{auth-session-JhILeJRO.js.map → auth-session-D7hlE-47.js.map} +1 -1
- package/dist/auth-session-DXxmGll1.js +4 -0
- package/dist/{channel-C6tm9T7P.js → channel-BeUv2bLR.js} +3 -3
- package/dist/{channel-C6tm9T7P.js.map → channel-BeUv2bLR.js.map} +1 -1
- package/dist/{cloud-computer-J2tdcTPm.js → cloud-computer-C81_vVOV.js} +4 -4
- package/dist/{cloud-computer-J2tdcTPm.js.map → cloud-computer-C81_vVOV.js.map} +1 -1
- package/dist/{command-BXJ-OwBD.js → command-qNknO9gl.js} +15 -15
- package/dist/{command-BXJ-OwBD.js.map → command-qNknO9gl.js.map} +1 -1
- package/dist/{computer-connection-BKtrn0d2.js → computer-connection-WpsIQfkh.js} +2 -2
- package/dist/{computer-connection-BKtrn0d2.js.map → computer-connection-WpsIQfkh.js.map} +1 -1
- package/dist/{computer-connection-review-bUqNKi6q.js → computer-connection-review-Df2G8VWY.js} +5 -5
- package/dist/{computer-connection-review-bUqNKi6q.js.map → computer-connection-review-Df2G8VWY.js.map} +1 -1
- package/dist/{computer-disconnect-D_Apsn9P.js → computer-disconnect-ttAH9WgN.js} +7 -7
- package/dist/{computer-disconnect-D_Apsn9P.js.map → computer-disconnect-ttAH9WgN.js.map} +1 -1
- package/dist/{computer-setup-continuation-occq0LmS.js → computer-setup-continuation-tbuUZSe5.js} +3 -3
- package/dist/{computer-setup-continuation-occq0LmS.js.map → computer-setup-continuation-tbuUZSe5.js.map} +1 -1
- package/dist/{context-M7dvalCp.js → context-x0T_qTHp.js} +4 -4
- package/dist/{context-M7dvalCp.js.map → context-x0T_qTHp.js.map} +1 -1
- package/dist/{daemon-device-id-C3gKch4E.js → daemon-device-id-DgwvQllt.js} +4 -4
- package/dist/{daemon-device-id-C3gKch4E.js.map → daemon-device-id-DgwvQllt.js.map} +1 -1
- package/dist/{daemon-lifecycle-journal-CGUuJshv.js → daemon-lifecycle-journal-C32I8p4n.js} +3 -3
- package/dist/{daemon-lifecycle-journal-CGUuJshv.js.map → daemon-lifecycle-journal-C32I8p4n.js.map} +1 -1
- package/dist/{daemon-service-runtime-CktU3ER4.js → daemon-service-runtime-DVqzJKke.js} +2 -2
- package/dist/{daemon-service-runtime-CktU3ER4.js.map → daemon-service-runtime-DVqzJKke.js.map} +1 -1
- package/dist/{daemon-service-update-coordinator-D0-15tZW.js → daemon-service-update-coordinator-BTlVzU-7.js} +14 -14
- package/dist/daemon-service-update-coordinator-BTlVzU-7.js.map +1 -0
- package/dist/{dispatch-owned-runtime-gOluDX5_.js → dispatch-owned-runtime-g2lLeYtx.js} +187 -50
- package/dist/dispatch-owned-runtime-g2lLeYtx.js.map +1 -0
- package/dist/dist-CXB_bdSS.js +4 -0
- package/dist/{dist-KibLweLD.js → dist-DGeoVaIx.js} +404 -279
- package/dist/dist-DGeoVaIx.js.map +1 -0
- package/dist/{dual-view-guide-catalog-0kSizTFt.js → dual-view-guide-catalog-CkcY09Kh.js} +3 -3
- package/dist/{dual-view-guide-catalog-0kSizTFt.js.map → dual-view-guide-catalog-CkcY09Kh.js.map} +1 -1
- package/dist/{elapsed-time-Bo1CJczC.js → elapsed-time-BMG1CU23.js} +3 -3
- package/dist/{elapsed-time-Bo1CJczC.js.map → elapsed-time-BMG1CU23.js.map} +1 -1
- package/dist/{entry-B11DkH2I.js → entry-CP7_Vgs4.js} +7 -7
- package/dist/{entry-B11DkH2I.js.map → entry-CP7_Vgs4.js.map} +1 -1
- package/dist/{installation-inventory-BZgQmVup.js → installation-inventory-7JOtUjyG.js} +3 -3
- package/dist/{installation-inventory-BZgQmVup.js.map → installation-inventory-7JOtUjyG.js.map} +1 -1
- package/dist/{installer-k2gOOs58.js → installer-BRpAz1X_.js} +2 -2
- package/dist/{installer-k2gOOs58.js.map → installer-BRpAz1X_.js.map} +1 -1
- package/dist/{meta-api-DruuiAx-.js → meta-api-QskBmfuf.js} +5 -5
- package/dist/{meta-api-DruuiAx-.js.map → meta-api-QskBmfuf.js.map} +1 -1
- package/dist/{open-code-permission-DHFJYc_o.js → open-code-permission-B5f1e5an.js} +2 -31
- package/dist/open-code-permission-B5f1e5an.js.map +1 -0
- package/dist/{openmeld-DUdN78WD.js → openmeld-BxTCCHMn.js} +194 -60
- package/dist/openmeld-BxTCCHMn.js.map +1 -0
- package/dist/{openmeld-maintenance-worker-DwkvZD0q.js → openmeld-maintenance-worker-BQ2YbwA9.js} +9 -9
- package/dist/{openmeld-maintenance-worker-DwkvZD0q.js.map → openmeld-maintenance-worker-BQ2YbwA9.js.map} +1 -1
- package/dist/{openmeld-tools-update-join-BNUIw_Lo.js → openmeld-tools-update-join-Dj-MEQW_.js} +4 -4
- package/dist/{openmeld-tools-update-join-BNUIw_Lo.js.map → openmeld-tools-update-join-Dj-MEQW_.js.map} +1 -1
- package/dist/openmeld.js +4 -4
- package/dist/{prepare-provider-runtime-_XRIioDp.js → prepare-provider-runtime-B6_dfpiZ.js} +74 -22
- package/dist/prepare-provider-runtime-B6_dfpiZ.js.map +1 -0
- package/dist/{prepare-session-executor-B5AjN0qz.js → prepare-session-executor-DA9saGAk.js} +18 -18
- package/dist/{prepare-session-executor-B5AjN0qz.js.map → prepare-session-executor-DA9saGAk.js.map} +1 -1
- package/dist/{process-channel-CTXWjlBP.js → process-channel-HthE5ehS.js} +2 -2
- package/dist/{process-channel-CTXWjlBP.js.map → process-channel-HthE5ehS.js.map} +1 -1
- package/dist/{runtime-DCBc6YOq.js → runtime-C7lY_Z2r.js} +103 -20
- package/dist/{runtime-DCBc6YOq.js.map → runtime-C7lY_Z2r.js.map} +1 -1
- package/dist/{runtime-agent-controller-reporting-submission-CGa3GGL6.js → runtime-agent-controller-reporting-submission-IhxMO4UA.js} +8 -8
- package/dist/{runtime-agent-controller-reporting-submission-CGa3GGL6.js.map → runtime-agent-controller-reporting-submission-IhxMO4UA.js.map} +1 -1
- package/dist/{runtime-transport-BzCp9hM3.js → runtime-transport-DRb5__yP.js} +188 -18
- package/dist/runtime-transport-DRb5__yP.js.map +1 -0
- package/dist/{service-BEH6-P8U.js → service-DveGEdh3.js} +312 -21
- package/dist/service-DveGEdh3.js.map +1 -0
- package/dist/{service-account-authorization-CtvSn02O.js → service-account-authorization-CAVkiKSF.js} +2 -2
- package/dist/{service-account-authorization-CtvSn02O.js.map → service-account-authorization-CAVkiKSF.js.map} +1 -1
- package/dist/{service-account-control-BUPiFEGo.js → service-account-control-BtE73wcO.js} +9 -9
- package/dist/{service-account-control-BUPiFEGo.js.map → service-account-control-BtE73wcO.js.map} +1 -1
- package/dist/{service-control-capabilities-PMvSlaJj.js → service-control-capabilities-BQrqIGBP.js} +3 -3
- package/dist/{service-control-capabilities-PMvSlaJj.js.map → service-control-capabilities-BQrqIGBP.js.map} +1 -1
- package/dist/{service-control-capabilities-D-Nhqqgo.js → service-control-capabilities-adDptMIH.js} +1 -1
- package/dist/{state-C_iJAzKh.js → state-DWwNdCy5.js} +2 -2
- package/dist/{state-C_iJAzKh.js.map → state-DWwNdCy5.js.map} +1 -1
- package/dist/{updates-api-s2-QB929.js → updates-api-9midbUU1.js} +12 -136
- package/dist/updates-api-9midbUU1.js.map +1 -0
- package/dist/upgrade-BvpBhL0U.js +4 -0
- package/dist/{upgrade-JmhCNmvs.js → upgrade-H-_QW75e.js} +8 -8
- package/dist/{upgrade-JmhCNmvs.js.map → upgrade-H-_QW75e.js.map} +1 -1
- package/package.json +12 -12
- package/skills/openmeld-cli/SKILL.md +2 -0
- package/skills/openmeld-cli/playbooks/computer.md +55 -0
- package/skills/openmeld-cli/playbooks/plugins.md +37 -0
- package/dist/auth-session-DUYOBXO3.js +0 -4
- package/dist/daemon-service-update-coordinator-D0-15tZW.js.map +0 -1
- package/dist/dispatch-owned-runtime-gOluDX5_.js.map +0 -1
- package/dist/dist-DMlKqjUf.js +0 -4
- package/dist/dist-KibLweLD.js.map +0 -1
- package/dist/open-code-permission-DHFJYc_o.js.map +0 -1
- package/dist/openmeld-DUdN78WD.js.map +0 -1
- package/dist/prepare-provider-runtime-_XRIioDp.js.map +0 -1
- package/dist/runtime-transport-BzCp9hM3.js.map +0 -1
- package/dist/service-BEH6-P8U.js.map +0 -1
- package/dist/updates-api-s2-QB929.js.map +0 -1
- package/dist/upgrade-Dikfgr8z.js +0 -4
package/dist/{openmeld-maintenance-worker-DwkvZD0q.js → openmeld-maintenance-worker-BQ2YbwA9.js}
RENAMED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-
|
|
4
|
-
import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-
|
|
5
|
-
import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-
|
|
6
|
-
import { at as readPendingOpenMeldToolsUpdateAttempt, n as scheduleDaemonServiceUpdate, nt as createOpenMeldToolsUpdateCoordinator, ot as readOpenMeldToolsMaintenancePolicy, t as runPendingDaemonServiceUpdate, ut as prepareDaemonServiceUpdateWorkerCarrier } from "./daemon-service-update-coordinator-
|
|
3
|
+
import { tt as resolveSkillsAgentRegistry } from "./prepare-provider-runtime-B6_dfpiZ.js";
|
|
4
|
+
import { f as withSkillsInstallLock, l as downloadOfficialSkillUpdate, r as ensureLocalSkills } from "./state-DWwNdCy5.js";
|
|
5
|
+
import { $ as readPendingDaemonServiceUpdate, K as reconcileManagedCliLauncher, X as completePendingDaemonServiceUpdate, g as assertDaemonMaintenanceInstallationOwnership, nt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-DVqzJKke.js";
|
|
6
|
+
import { at as readPendingOpenMeldToolsUpdateAttempt, n as scheduleDaemonServiceUpdate, nt as createOpenMeldToolsUpdateCoordinator, ot as readOpenMeldToolsMaintenancePolicy, t as runPendingDaemonServiceUpdate, ut as prepareDaemonServiceUpdateWorkerCarrier } from "./daemon-service-update-coordinator-BTlVzU-7.js";
|
|
7
7
|
import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-BMI00i2F.js";
|
|
8
8
|
import { g as getConfiguredSkillsConfig } from "./base-url-0AoeTi3w.js";
|
|
9
9
|
import { W as withDaemonServiceReconcileLock } from "./daemon-state-Dte9re5V.js";
|
|
10
10
|
import { i as readDaemonServiceContract } from "./daemon-service-contract-COPKbCy_.js";
|
|
11
|
-
import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-
|
|
11
|
+
import { l as OPENMELD_VERSION } from "./daemon-lifecycle-journal-C32I8p4n.js";
|
|
12
12
|
import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-SXQcFE9c.js";
|
|
13
|
-
import { s as resolveTrackedInstallTargets } from "./installation-inventory-
|
|
14
|
-
import { t as installSkillsToTargets } from "./installer-
|
|
13
|
+
import { s as resolveTrackedInstallTargets } from "./installation-inventory-7JOtUjyG.js";
|
|
14
|
+
import { t as installSkillsToTargets } from "./installer-BRpAz1X_.js";
|
|
15
15
|
//#region src/skills/maintenance.ts
|
|
16
16
|
async function maintainOfficialCliSkill() {
|
|
17
17
|
if (await downloadOfficialSkillUpdate().catch((error) => {
|
|
@@ -76,7 +76,7 @@ async function runMaintenancePass() {
|
|
|
76
76
|
}
|
|
77
77
|
const result = await runPendingDaemonServiceUpdate();
|
|
78
78
|
if (result?.phase === "updated") {
|
|
79
|
-
const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-
|
|
79
|
+
const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-tbuUZSe5.js");
|
|
80
80
|
await prepareDaemonServiceUpdateWorkerCarrier(result);
|
|
81
81
|
await finishComputerSetupAfterBackgroundUpdate();
|
|
82
82
|
await withDaemonServiceReconcileLock(async () => {
|
|
@@ -105,4 +105,4 @@ async function reconcileCurrentServiceStartupPolicy(updatesCurrent) {
|
|
|
105
105
|
//#endregion
|
|
106
106
|
export { runOpenMeldMaintenanceWorker };
|
|
107
107
|
|
|
108
|
-
//# sourceMappingURL=openmeld-maintenance-worker-
|
|
108
|
+
//# sourceMappingURL=openmeld-maintenance-worker-BQ2YbwA9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openmeld-maintenance-worker-
|
|
1
|
+
{"version":3,"file":"openmeld-maintenance-worker-BQ2YbwA9.js","names":[],"sources":["../src/skills/maintenance.ts","../src/local-service/maintenance/openmeld-maintenance-worker.ts"],"sourcesContent":["import { getConfiguredSkillsConfig } from \"../config/runtime-config\";\nimport { resolveSkillsAgentRegistry } from \"./agents\";\nimport { resolveTrackedInstallTargets } from \"./installation-inventory\";\nimport { installSkillsToTargets, withSkillsInstallLock } from \"./installer\";\nimport { downloadOfficialSkillUpdate } from \"./official-release\";\nimport { ensureLocalSkills } from \"./store\";\n\nexport async function maintainOfficialCliSkill(): Promise<void> {\n const outcome = await downloadOfficialSkillUpdate().catch(\n (error: unknown) => {\n process.stderr.write(\n `[openmeld] Skill download deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n return \"deferred\" as const;\n }\n );\n if (outcome === \"lane_isolated\") {\n return;\n }\n await withSkillsInstallLock(async () => {\n const localSkills = await ensureLocalSkills();\n const skillsConfig = await getConfiguredSkillsConfig();\n const targets = await resolveTrackedInstallTargets({\n skillsConfig,\n registry: resolveSkillsAgentRegistry(skillsConfig),\n localSkills,\n onlyOpenMeldInstalledTargets: false,\n });\n const results = await installSkillsToTargets({\n skills: localSkills,\n targets,\n });\n const failures = results.filter((result) => result.status === \"failed\");\n if (failures.length) {\n throw new Error(\n failures\n .map((result) => `${result.targetId}: ${result.reason}`)\n .join(\"; \")\n );\n }\n });\n}\n","import { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { configureDaemonMaintenanceEnvironment } from \"../../config/daemon-service-update-worker-registration\";\nimport { withDaemonServiceReconcileLock } from \"../../config/daemon-state\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../../config/lock\";\nimport { reconcileManagedCliLauncher } from \"../../local-components/managed-install\";\nimport { OPENMELD_VERSION } from \"../../runtime/version\";\nimport { maintainOfficialCliSkill } from \"../../skills/maintenance\";\nimport {\n readDaemonServiceStartupPolicyCurrent,\n resolveDaemonServiceManager,\n} from \"../lifecycle/daemon-service-manager\";\nimport { assertDaemonMaintenanceInstallationOwnership } from \"../lifecycle/daemon-service-manager-command-match\";\nimport {\n runPendingDaemonServiceUpdate,\n scheduleDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-coordinator\";\nimport {\n completePendingDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport { prepareDaemonServiceUpdateWorkerCarrier } from \"../lifecycle/daemon-service-update-worker-manager\";\nimport { readOpenMeldToolsMaintenancePolicy } from \"./openmeld-tools-maintenance-policy\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"./openmeld-tools-update-coordinator\";\n\n// The OS owns this process. It is also the sole executor of persisted download\n// attempts; Service requests only publish an attempt and wake this worker.\nexport async function runOpenMeldMaintenanceWorker(): Promise<void> {\n configureDaemonMaintenanceEnvironment(process.env);\n await runMaintenanceWithLock();\n}\n\nasync function runMaintenanceWithLock(): Promise<boolean> {\n try {\n const lock = await acquireLock({\n openMeldProfileId: \"__system__\",\n key: \"maintenance-worker\",\n });\n return await runWithHeldLock({\n lock,\n run: runMaintenancePass,\n releaseContext: { component: \"maintenance_worker\" },\n });\n } catch (error) {\n // Setup/repair may still own the lifecycle lock when the OS first runs us.\n // Leave its state intact; the existing OS trigger will run another pass.\n if (isOpenMeldLockError(error) && !isOpenMeldOrphanedLockError(error)) {\n return false;\n }\n throw error;\n }\n}\n\nasync function runMaintenancePass(): Promise<boolean> {\n const pendingJob = await readPendingDaemonServiceUpdate();\n const pendingAttempt = await readPendingOpenMeldToolsUpdateAttempt();\n if (!(pendingJob || pendingAttempt)) {\n const contract = await readDaemonServiceContract();\n if (!contract || contract.desiredState !== \"background\") {\n return false;\n }\n }\n await assertDaemonMaintenanceInstallationOwnership();\n await reconcileManagedCliLauncher();\n if ((await readOpenMeldToolsMaintenancePolicy()).automaticUpdatesEnabled) {\n try {\n await maintainOfficialCliSkill();\n } catch (error) {\n process.stderr.write(\n `[openmeld] Skill maintenance deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n }\n }\n const coordinator = createOpenMeldToolsUpdateCoordinator();\n if (!pendingJob) {\n if (pendingAttempt) {\n await coordinator.resumePendingUpdate();\n } else {\n const update = await coordinator.requestUpdate({\n requestSource: \"automatic\",\n });\n await reconcileCurrentServiceStartupPolicy(update.status === \"current\");\n }\n await coordinator.waitForIdle();\n }\n const result = await runPendingDaemonServiceUpdate();\n if (result?.phase === \"updated\") {\n const {\n finishComputerSetupAfterBackgroundUpdate,\n recoverComputerSetupAfterBackgroundUpdate,\n } = await import(\"../../commands/computer-setup-continuation\");\n // Only a verified replacement may replace the working recovery carrier.\n await prepareDaemonServiceUpdateWorkerCarrier(result);\n await finishComputerSetupAfterBackgroundUpdate();\n await withDaemonServiceReconcileLock(async () => {\n const current = await readPendingDaemonServiceUpdate();\n if (\n current?.jobId === result.jobId &&\n current.phase === \"updated\" &&\n current.targetVersion === result.targetVersion\n ) {\n await completePendingDaemonServiceUpdate(current);\n }\n });\n await recoverComputerSetupAfterBackgroundUpdate();\n return true;\n }\n if (result?.phase === \"restored\" || result?.phase === \"needs_help\") {\n process.exitCode = 1;\n }\n return false;\n}\n\nasync function reconcileCurrentServiceStartupPolicy(\n updatesCurrent: boolean\n): Promise<void> {\n if (!updatesCurrent) {\n return;\n }\n const contract = await readDaemonServiceContract();\n // An older recovery worker must not apply its policy to a newer Service,\n // and maintenance must preserve an explicit user stop.\n if (\n contract?.desiredState !== \"background\" ||\n contract.daemonVersion !== OPENMELD_VERSION\n ) {\n return;\n }\n const manager = await resolveDaemonServiceManager();\n if (\n (await readDaemonServiceStartupPolicyCurrent({\n controller: manager?.controller ?? null,\n status: (await manager?.status()) ?? null,\n })) === false\n ) {\n await scheduleDaemonServiceUpdate({\n targetVersion: contract.daemonVersion,\n urgency: \"available\",\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAOA,eAAsB,2BAA0C;CAS9D,IAAI,MARkB,4BAA4B,CAAC,CAAC,OACjD,UAAmB;EAClB,QAAQ,OAAO,MACb,uCAAuC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAChG;EACA,OAAO;CACT,CACF,MACgB,iBACd;CAEF,MAAM,sBAAsB,YAAY;EACtC,MAAM,cAAc,MAAM,kBAAkB;EAC5C,MAAM,eAAe,MAAM,0BAA0B;EAWrD,MAAM,YAAW,MAJK,uBAAuB;GAC3C,QAAQ;GACR,SAAA,MARoB,6BAA6B;IACjD;IACA,UAAU,2BAA2B,YAAY;IACjD;IACA,8BAA8B;GAChC,CAAC;EAID,CAAC,EAAA,CACwB,QAAQ,WAAW,OAAO,WAAW,QAAQ;EACtE,IAAI,SAAS,QACX,MAAM,IAAI,MACR,SACG,KAAK,WAAW,GAAG,OAAO,SAAS,IAAI,OAAO,QAAQ,CAAC,CACvD,KAAK,IAAI,CACd;CAEJ,CAAC;AACH;;;ACTA,eAAsB,+BAA8C;CAClE,sCAAsC,QAAQ,GAAG;CACjD,MAAM,uBAAuB;AAC/B;AAEA,eAAe,yBAA2C;CACxD,IAAI;EAKF,OAAO,MAAM,gBAAgB;GAC3B,MAAA,MALiB,YAAY;IAC7B,mBAAmB;IACnB,KAAK;GACP,CAAC;GAGC,KAAK;GACL,gBAAgB,EAAE,WAAW,qBAAqB;EACpD,CAAC;CACH,SAAS,OAAO;EAGd,IAAI,oBAAoB,KAAK,KAAK,CAAC,4BAA4B,KAAK,GAClE,OAAO;EAET,MAAM;CACR;AACF;AAEA,eAAe,qBAAuC;CACpD,MAAM,aAAa,MAAM,+BAA+B;CACxD,MAAM,iBAAiB,MAAM,sCAAsC;CACnE,IAAI,EAAE,cAAc,iBAAiB;EACnC,MAAM,WAAW,MAAM,0BAA0B;EACjD,IAAI,CAAC,YAAY,SAAS,iBAAiB,cACzC,OAAO;CAEX;CACA,MAAM,6CAA6C;CACnD,MAAM,4BAA4B;CAClC,KAAK,MAAM,mCAAmC,EAAA,CAAG,yBAC/C,IAAI;EACF,MAAM,yBAAyB;CACjC,SAAS,OAAO;EACd,QAAQ,OAAO,MACb,0CAA0C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GACnG;CACF;CAEF,MAAM,cAAc,qCAAqC;CACzD,IAAI,CAAC,YAAY;EACf,IAAI,gBACF,MAAM,YAAY,oBAAoB;OAKtC,MAAM,sCAAqC,MAHtB,YAAY,cAAc,EAC7C,eAAe,YACjB,CAAC,EAAA,CACiD,WAAW,SAAS;EAExE,MAAM,YAAY,YAAY;CAChC;CACA,MAAM,SAAS,MAAM,8BAA8B;CACnD,IAAI,QAAQ,UAAU,WAAW;EAC/B,MAAM,EACJ,0CACA,8CACE,MAAM,OAAO;EAEjB,MAAM,wCAAwC,MAAM;EACpD,MAAM,yCAAyC;EAC/C,MAAM,+BAA+B,YAAY;GAC/C,MAAM,UAAU,MAAM,+BAA+B;GACrD,IACE,SAAS,UAAU,OAAO,SAC1B,QAAQ,UAAU,aAClB,QAAQ,kBAAkB,OAAO,eAEjC,MAAM,mCAAmC,OAAO;EAEpD,CAAC;EACD,MAAM,0CAA0C;EAChD,OAAO;CACT;CACA,IAAI,QAAQ,UAAU,cAAc,QAAQ,UAAU,cACpD,QAAQ,WAAW;CAErB,OAAO;AACT;AAEA,eAAe,qCACb,gBACe;CACf,IAAI,CAAC,gBACH;CAEF,MAAM,WAAW,MAAM,0BAA0B;CAGjD,IACE,UAAU,iBAAiB,gBAC3B,SAAS,kBAAkB,kBAE3B;CAEF,MAAM,UAAU,MAAM,4BAA4B;CAClD,IACG,MAAM,sCAAsC;EAC3C,YAAY,SAAS,cAAc;EACnC,QAAS,MAAM,SAAS,OAAO,KAAM;CACvC,CAAC,MAAO,OAER,MAAM,4BAA4B;EAChC,eAAe,SAAS;EACxB,SAAS;CACX,CAAC;AAEL"}
|
package/dist/{openmeld-tools-update-join-BNUIw_Lo.js → openmeld-tools-update-join-Dj-MEQW_.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-
|
|
4
|
-
import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-
|
|
5
|
-
import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-
|
|
3
|
+
import { $ as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-DVqzJKke.js";
|
|
4
|
+
import { at as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-BTlVzU-7.js";
|
|
5
|
+
import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-BMG1CU23.js";
|
|
6
6
|
import { setTimeout } from "node:timers/promises";
|
|
7
7
|
//#region src/local-service/maintenance/openmeld-tools-update-join.ts
|
|
8
8
|
const DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;
|
|
@@ -61,4 +61,4 @@ async function waitForExternalOpenMeldToolsUpdate(input = {}) {
|
|
|
61
61
|
//#endregion
|
|
62
62
|
export { waitForExternalOpenMeldToolsUpdate as n, waitForOpenMeldToolsUpdateCompletion as r, resolveExternalOpenMeldToolsUpdate as t };
|
|
63
63
|
|
|
64
|
-
//# sourceMappingURL=openmeld-tools-update-join-
|
|
64
|
+
//# sourceMappingURL=openmeld-tools-update-join-Dj-MEQW_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openmeld-tools-update-join-
|
|
1
|
+
{"version":3,"file":"openmeld-tools-update-join-Dj-MEQW_.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import { setTimeout as sleep } from \"node:timers/promises\";\nimport type { OpenMeldToolsUpdateOperation } from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n unclaimedTimeoutMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n let unclaimedSince: number | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (input.unclaimedTimeoutMs !== undefined) {\n const pending = await readPendingOpenMeldToolsUpdateAttempt(input);\n if (\n pending?.operation.operationId === operation.operationId &&\n pending.attempts === 0\n ) {\n unclaimedSince ??= Date.now();\n if (Date.now() - unclaimedSince >= input.unclaimedTimeoutMs) {\n throw new Error(\n \"OpenMeld's background updater did not start. Run openmeld doctor to check the background service, then try setup again.\"\n );\n }\n } else {\n unclaimedSince = null;\n }\n }\n if (reportedOperationId !== operation.operationId) {\n reportedOperationId = operation.operationId;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAMI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;CACF,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,GAAI,WAAW,mBACX,EAAE,kBAAkB,WAAW,iBAAiB,IAChD,CAAC;EACL,GAAI,WAAW,uBACX,EAAE,sBAAsB,WAAW,qBAAqB,IACxD,CAAC;EACL,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAQI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,IAAI,iBAAgC;CACpC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,MAAM,uBAAuB,KAAA,GAAW;GAC1C,MAAM,UAAU,MAAM,sCAAsC,KAAK;GACjE,IACE,SAAS,UAAU,gBAAgB,UAAU,eAC7C,QAAQ,aAAa,GACrB;IACA,mBAAmB,KAAK,IAAI;IAC5B,IAAI,KAAK,IAAI,IAAI,kBAAkB,MAAM,oBACvC,MAAM,IAAI,MACR,yHACF;GAEJ,OACE,iBAAiB;EAErB;EACA,IAAI,wBAAwB,UAAU,aAAa;GACjD,sBAAsB,UAAU;GAChC,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF"}
|
package/dist/openmeld.js
CHANGED
|
@@ -11,7 +11,7 @@ if (process.argv.includes("--openmeld-windows-task")) {
|
|
|
11
11
|
}
|
|
12
12
|
const args = process.argv.slice(2);
|
|
13
13
|
if (args.length === 3 && args[0] === "service" && args[1] === "execution-host") try {
|
|
14
|
-
const { runExecutionHost } = await import("./entry-
|
|
14
|
+
const { runExecutionHost } = await import("./entry-CP7_Vgs4.js");
|
|
15
15
|
const hostInstanceId = args[2];
|
|
16
16
|
if (!hostInstanceId) throw new Error("The Host incarnation is required.");
|
|
17
17
|
await runExecutionHost(hostInstanceId);
|
|
@@ -21,14 +21,14 @@ if (args.length === 3 && args[0] === "service" && args[1] === "execution-host")
|
|
|
21
21
|
if (process.connected) process.disconnect();
|
|
22
22
|
}
|
|
23
23
|
else if (args.length === 2 && args[0] === "service" && args[1] === "update-worker") try {
|
|
24
|
-
const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-
|
|
24
|
+
const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-BQ2YbwA9.js");
|
|
25
25
|
await runOpenMeldMaintenanceWorker();
|
|
26
26
|
} catch (error) {
|
|
27
27
|
console.error("[openmeld.maintenance.failed]", error);
|
|
28
28
|
process.exitCode = 1;
|
|
29
29
|
}
|
|
30
30
|
else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] === "maintenance-align-service")) try {
|
|
31
|
-
const { runMaintenanceUpgrade } = await import("./upgrade-
|
|
31
|
+
const { runMaintenanceUpgrade } = await import("./upgrade-BvpBhL0U.js");
|
|
32
32
|
await runMaintenanceUpgrade(args[0] === "maintenance-align-service");
|
|
33
33
|
} catch (error) {
|
|
34
34
|
try {
|
|
@@ -38,7 +38,7 @@ else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] ===
|
|
|
38
38
|
console.error("[openmeld.maintenance.upgrade_failed]", error);
|
|
39
39
|
process.exitCode = 1;
|
|
40
40
|
}
|
|
41
|
-
else await import("./openmeld-
|
|
41
|
+
else await import("./openmeld-BxTCCHMn.js");
|
|
42
42
|
//#endregion
|
|
43
43
|
export {};
|
|
44
44
|
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { F as resolveOpenMeldRootDir, P as resolveOpenMeldEnvPreset, a as accountProfileWorkspacePath, b as normalizeOpenMeldProfileId, c as deviceOpenClawProfileBootstrapPath, h as isPublishedOpenMeldHome, l as deviceOpenClawProfileDir, n as accountProfileLocalMetaPath, u as deviceOpenClawProfileWorkspaceDir } from "./paths-De9xdA2h.js";
|
|
4
|
-
import { G as isOriginalErrorSafeForMessageDetails,
|
|
4
|
+
import { G as isOriginalErrorSafeForMessageDetails, J as openMeldDaemonProviderAccessEvidenceSchema, Jn as agentInteractionResolutionSchema, W as OPENMELD_ORIGINAL_ERROR_MAX_LENGTH, X as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema, Xn as agentControllerPermissionModeSchema, Y as openMeldDaemonTaskResultEnvelopeWriteSchema, ei as resolveCommandAgentWorkActivity, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH, tt as aiUsageObservationSchema, wn as normalizeMessageEnvelope, xn as formatCanonicalMentionLiteral } from "./runtime-transport-DRb5__yP.js";
|
|
5
5
|
import { C as conversationExecutionStateSchema, D as normalizeOptionalWorkingDirectory, P as profileWorkspaceModeSchema, T as MAX_PROFILE_WORKING_DIRECTORY_LENGTH, o as openMeldDaemonControlPlaneRequestSchema, s as openMeldDaemonControlPlaneResponseSchema, x as providerDispatchRuntimeContextSchema } from "./control-plane-B93wmVS6.js";
|
|
6
|
-
import {
|
|
6
|
+
import { Ki as modelCatalogSchema, Rt as createAgentProfileBindingApi, en as createLocalRuntimeExpectedRoutesApi, t as OpenMeldApiClientHttpError } from "./dist-DGeoVaIx.js";
|
|
7
7
|
import { _ as canonicalizeAgentControllerRef, b as normalizeKnownBuiltinAgentControllerId, d as resolveBuiltinAgentControllerConversationKind, f as HOSTED_CENTER_AGENT_CONTROLLER_REF, g as buildAgentControllerRoutingKey, l as buildAgentControllerConversationRef, m as HOSTED_REMOTE_AGENT_CONTROLLER_REF, p as HOSTED_CENTER_AGENT_CONTROLLER_REF_ID, s as runtimeTransportModeSchema, v as canonicalizeBuiltinAgentControllerRef, x as parseAgentControllerRef$1 } from "./controller-contract-DAOCaefz.js";
|
|
8
|
-
import { J as OPENCLAW_CLI_TIMEOUT_MS$1, d as getAuthSessionState } from "./auth-session-
|
|
8
|
+
import { J as OPENCLAW_CLI_TIMEOUT_MS$1, d as getAuthSessionState } from "./auth-session-D7hlE-47.js";
|
|
9
9
|
import { r as daemonServiceLaneSchema } from "./service-contract-CRyDcIIf.js";
|
|
10
|
-
import { H as agentExecutionSteerRequestSchema, V as daemonRouteCatalogCacheSchema, _ as toErrorMessage$20, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, u as normalizeOptionalText$49, z as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME } from "./daemon-device-id-
|
|
11
|
-
import { n as
|
|
10
|
+
import { H as agentExecutionSteerRequestSchema, V as daemonRouteCatalogCacheSchema, _ as toErrorMessage$20, d as normalizeText$11, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, u as normalizeOptionalText$49, z as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME } from "./daemon-device-id-DgwvQllt.js";
|
|
11
|
+
import { n as agentControllerCollaborationModeSchema } from "./open-code-permission-B5f1e5an.js";
|
|
12
12
|
import { c as readWindowsProcessStartFileTime, d as resolveWindowsNativeProcessHelper, f as windowsNativeProcessRequestSchema, l as resolveWindowsPowerShellPath, o as powerShellEncodedArguments, r as isProcessIdentityAlive, t as CURRENT_PROCESS_START_IDENTITY, u as WINDOWS_NATIVE_PROCESS_REQUEST_ENV } from "./process-identity-BRbhGGTM.js";
|
|
13
13
|
import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-BMI00i2F.js";
|
|
14
14
|
import { C as updateConfiguredDeviceRuntimeState, T as updateConfiguredSkillsConfig, a as resolveBaseUrl, d as createDefaultRuntimeAgentControllerSettings, g as getConfiguredSkillsConfig, p as getConfiguredDeviceRuntimeState, v as getRuntimeConfigReadHealth, y as resolveRuntimeSkillsCustomTargetId } from "./base-url-0AoeTi3w.js";
|
|
15
15
|
import { n as normalizeCommandEnvironment } from "./process-environment-BWSFeUu6.js";
|
|
16
|
-
import { F as resolveCurrentOpenMeldAccountContext, _ as touchDaemonCatalogSyncSignal, d as listOpenMeldProfiles } from "./context-
|
|
16
|
+
import { F as resolveCurrentOpenMeldAccountContext, _ as touchDaemonCatalogSyncSignal, d as listOpenMeldProfiles } from "./context-x0T_qTHp.js";
|
|
17
17
|
import { n as writeDaemonLocalStateFile, t as readDaemonLocalStateFile } from "./daemon-local-state-file-jOXuXrky.js";
|
|
18
18
|
import { m as daemonRuntimeDataPath } from "./daemon-state-Dte9re5V.js";
|
|
19
|
-
import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-
|
|
19
|
+
import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-DMEfIARh.js";
|
|
20
20
|
import { i as readDaemonServiceContract } from "./daemon-service-contract-COPKbCy_.js";
|
|
21
|
-
import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-
|
|
21
|
+
import { C as requestLocalSyncRouteCatalog } from "./daemon-lifecycle-journal-C32I8p4n.js";
|
|
22
22
|
import { i as resolveWindowsCommandPath, n as quoteWindowsProcessArgument, r as resolvePlatformCommand, t as execPlatformFile } from "./process-launch-B0pHlkV_.js";
|
|
23
23
|
import { createRequire } from "node:module";
|
|
24
24
|
import { createHash, randomUUID } from "node:crypto";
|
|
@@ -1378,12 +1378,12 @@ const CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
|
|
|
1378
1378
|
description: "Codex asks before editing files outside its working folder or using the internet.",
|
|
1379
1379
|
label: "Ask for approval",
|
|
1380
1380
|
requiresExplicitConfirmation: false,
|
|
1381
|
-
technicalDetail: "codex -s workspace-write -a
|
|
1381
|
+
technicalDetail: "codex -s workspace-write -a on-request -c approvals_reviewer=\"user\"",
|
|
1382
1382
|
tone: "neutral",
|
|
1383
1383
|
value: "codex:askForApproval"
|
|
1384
1384
|
},
|
|
1385
1385
|
{
|
|
1386
|
-
description: "
|
|
1386
|
+
description: "Automatically review actions that need approval. Potentially unsafe actions may be blocked.",
|
|
1387
1387
|
label: "Approve for me",
|
|
1388
1388
|
requiresExplicitConfirmation: false,
|
|
1389
1389
|
technicalDetail: "codex -s workspace-write -a on-request -c approvals_reviewer=\"auto_review\"",
|
|
@@ -1391,7 +1391,7 @@ const CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
|
|
|
1391
1391
|
value: "codex:approveForMe"
|
|
1392
1392
|
},
|
|
1393
1393
|
{
|
|
1394
|
-
description: "
|
|
1394
|
+
description: "Allow internet and file access without Codex approval prompts. This Computer's file-access limits still apply.",
|
|
1395
1395
|
label: "Full access",
|
|
1396
1396
|
requiresExplicitConfirmation: true,
|
|
1397
1397
|
technicalDetail: "codex --dangerously-bypass-approvals-and-sandbox",
|
|
@@ -1399,8 +1399,8 @@ const CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS = [
|
|
|
1399
1399
|
value: "codex:fullAccess"
|
|
1400
1400
|
},
|
|
1401
1401
|
{
|
|
1402
|
-
description: "
|
|
1403
|
-
label: "
|
|
1402
|
+
description: "This Agent keeps its previous permission settings until you choose a mode.",
|
|
1403
|
+
label: "Previous settings",
|
|
1404
1404
|
requiresExplicitConfirmation: false,
|
|
1405
1405
|
technicalDetail: "codex (no OpenMeld permission overrides)",
|
|
1406
1406
|
tone: "neutral",
|
|
@@ -1579,7 +1579,7 @@ function resolveNativeAgentControllerPermissionModeForController(value, input) {
|
|
|
1579
1579
|
}
|
|
1580
1580
|
function listAgentControllerPermissionModeOptions(input) {
|
|
1581
1581
|
const controllerOptions = resolveControllerOptions(input?.agentControllerRef);
|
|
1582
|
-
if (controllerOptions) return controllerOptions.map((option) => ({ ...option }));
|
|
1582
|
+
if (controllerOptions) return controllerOptions.filter((option) => option.value !== "codex:customConfig").map((option) => ({ ...option }));
|
|
1583
1583
|
if (input) return [];
|
|
1584
1584
|
return [
|
|
1585
1585
|
...ANTIGRAVITY_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
|
|
@@ -1587,10 +1587,10 @@ function listAgentControllerPermissionModeOptions(input) {
|
|
|
1587
1587
|
...CODEX_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
|
|
1588
1588
|
...CURSOR_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS,
|
|
1589
1589
|
...GROK_BUILD_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS
|
|
1590
|
-
].map((option) => ({ ...option }));
|
|
1590
|
+
].filter((option) => option.value !== "codex:customConfig").map((option) => ({ ...option }));
|
|
1591
1591
|
}
|
|
1592
1592
|
function resolveAgentControllerPermissionModeOption(policy, input) {
|
|
1593
|
-
return (resolveControllerOptions(input?.agentControllerRef) ??
|
|
1593
|
+
return (resolveControllerOptions(input?.agentControllerRef) ?? Object.values(AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS_BY_CONTROLLER_ID).flat()).find((option) => option.value === policy) ?? CLAUDE_CODE_AGENT_CONTROLLER_PERMISSION_MODE_OPTIONS[0];
|
|
1594
1594
|
}
|
|
1595
1595
|
function resolveControllerOptions(agentControllerRef) {
|
|
1596
1596
|
const parsedRef = parseAgentControllerRef(agentControllerRef);
|
|
@@ -12617,7 +12617,7 @@ function buildClaudeAgentSdkOptions(input) {
|
|
|
12617
12617
|
const options = {
|
|
12618
12618
|
abortController: input.abortController,
|
|
12619
12619
|
additionalDirectories: [input.claudeWorkdir],
|
|
12620
|
-
allowDangerouslySkipPermissions:
|
|
12620
|
+
allowDangerouslySkipPermissions: input.executionMode !== "repair",
|
|
12621
12621
|
cwd: input.claudeWorkdir,
|
|
12622
12622
|
env: {
|
|
12623
12623
|
...process.env,
|
|
@@ -13555,6 +13555,7 @@ const CONTROL_REQUEST_TIMEOUT_MS_BY_OPERATION = {
|
|
|
13555
13555
|
"thread/resume": COLD_CONTROLLER_ADMISSION_TIMEOUT_MS,
|
|
13556
13556
|
"thread/start": COLD_CONTROLLER_ADMISSION_TIMEOUT_MS,
|
|
13557
13557
|
"turn/start": COLD_CONTROLLER_ADMISSION_TIMEOUT_MS,
|
|
13558
|
+
"turn/settings/update": FAST_METADATA_ADMISSION_TIMEOUT_MS,
|
|
13558
13559
|
"turn/steer": FAST_METADATA_ADMISSION_TIMEOUT_MS
|
|
13559
13560
|
};
|
|
13560
13561
|
function resolveCodexAppServerControlRequestTimeoutMs(input) {
|
|
@@ -14384,7 +14385,7 @@ async function invokeCodexAppServerTransport(input) {
|
|
|
14384
14385
|
instructionPrompt: input.instructionPrompt
|
|
14385
14386
|
});
|
|
14386
14387
|
assertFileAccessBeforeTurn(threadContext.permissionResponse, input.computerFileAccessBoundary, input.codexWorkdir, permissionExecutionMode);
|
|
14387
|
-
await session.verifyScopedMcp(threadContext.threadId);
|
|
14388
|
+
await session.verifyScopedMcp(threadContext.threadId, parseCodexAppServerVersion(initialized));
|
|
14388
14389
|
const collaborationMode = await resolveCodexAppServerTurnCollaborationMode({
|
|
14389
14390
|
conversationPolicy: input.conversationPolicy,
|
|
14390
14391
|
conversationPolicyParams,
|
|
@@ -14403,6 +14404,8 @@ async function invokeCodexAppServerTransport(input) {
|
|
|
14403
14404
|
session.observeUsageForThread(executionThreadId, threadContext.model);
|
|
14404
14405
|
throwIfCodexDispatchCancelled(input.cancellationSignal);
|
|
14405
14406
|
const completedTurn = await startAndAwaitAppServerTurn({
|
|
14407
|
+
supportsLiveReviewer: supportsAgentControllerVersion(parseCodexAppServerVersion(initialized), ">=0.153.0-alpha.4"),
|
|
14408
|
+
permissionMode: resolveCodexAgentControllerPermissionMode$1(input.agentControllerPermissionMode),
|
|
14406
14409
|
cancellationSignal: input.cancellationSignal,
|
|
14407
14410
|
collaborationMode,
|
|
14408
14411
|
conversationPolicyParams,
|
|
@@ -14461,6 +14464,44 @@ async function startAndAwaitAppServerTurn(input) {
|
|
|
14461
14464
|
} catch {}
|
|
14462
14465
|
};
|
|
14463
14466
|
const unregisterActiveTurn = session.registerActiveTurn({
|
|
14467
|
+
updatePermissionMode: async (update) => {
|
|
14468
|
+
const next = update.agentControllerPermissionMode;
|
|
14469
|
+
const taskId = input.taskId;
|
|
14470
|
+
if (!next.startsWith("codex:")) return {
|
|
14471
|
+
status: "not_applied",
|
|
14472
|
+
taskId,
|
|
14473
|
+
reasonCode: "adapter.permission_mode_incompatible"
|
|
14474
|
+
};
|
|
14475
|
+
if (!activeTurnId || turnSettled || interruptRequested || input.cancellationSignal?.aborted) return {
|
|
14476
|
+
status: "not_applied",
|
|
14477
|
+
taskId,
|
|
14478
|
+
reasonCode: "adapter.task_not_active"
|
|
14479
|
+
};
|
|
14480
|
+
const reviewerMode = (mode) => mode === "codex:askForApproval" || mode === "codex:approveForMe";
|
|
14481
|
+
if (!input.supportsLiveReviewer || input.executionMode === "repair" || !reviewerMode(input.permissionMode) || !reviewerMode(next)) return {
|
|
14482
|
+
status: "not_applied",
|
|
14483
|
+
taskId,
|
|
14484
|
+
reasonCode: "adapter.permission_mode_update_unsupported"
|
|
14485
|
+
};
|
|
14486
|
+
if (toRecord$7(await session.requestControl("turn/settings/update", {
|
|
14487
|
+
threadId: executionThreadId,
|
|
14488
|
+
turnId: activeTurnId,
|
|
14489
|
+
approvalsReviewer: next === "codex:approveForMe" ? "auto_review" : "user"
|
|
14490
|
+
}, {
|
|
14491
|
+
code: "runtime.permission_mode_update_timeout",
|
|
14492
|
+
operation: "turn/settings/update",
|
|
14493
|
+
terminateSession: false
|
|
14494
|
+
}))?.status !== "applied" || turnSettled || interruptRequested) return {
|
|
14495
|
+
status: "not_applied",
|
|
14496
|
+
taskId,
|
|
14497
|
+
reasonCode: "adapter.task_not_active"
|
|
14498
|
+
};
|
|
14499
|
+
return {
|
|
14500
|
+
status: "applied",
|
|
14501
|
+
effectiveFrom: "subsequent_tool_requests",
|
|
14502
|
+
taskId
|
|
14503
|
+
};
|
|
14504
|
+
},
|
|
14464
14505
|
steer: async (steeringInput) => {
|
|
14465
14506
|
const targetTurnId = activeTurnId;
|
|
14466
14507
|
if (!targetTurnId || turnSettled || interruptRequested || input.cancellationSignal?.aborted) return {
|
|
@@ -15362,12 +15403,13 @@ var CodexAppServerSession = class {
|
|
|
15362
15403
|
}
|
|
15363
15404
|
};
|
|
15364
15405
|
}
|
|
15365
|
-
async verifyScopedMcp(threadId) {
|
|
15406
|
+
async verifyScopedMcp(threadId, nativeVersion) {
|
|
15366
15407
|
const scoped = this.#computerFileAccessBoundary?.executionContextAccess !== void 0 || this.deliveryOnly;
|
|
15367
15408
|
if (!(scoped || this.spaceToolInvocation.enabled)) return;
|
|
15368
15409
|
const inventory = await this.requestControl("mcpServerStatus/list", {
|
|
15369
15410
|
threadId,
|
|
15370
15411
|
detail: scoped ? "full" : "toolsAndAuthOnly",
|
|
15412
|
+
...!scoped && supportsAgentControllerVersion(nativeVersion, ">=0.160.0") ? { serverName: OPENMELD_SPACE_ACTION_MCP_SERVER_ID } : {},
|
|
15371
15413
|
limit: 100
|
|
15372
15414
|
}, {
|
|
15373
15415
|
code: "execution_context.mcp_inventory_timeout",
|
|
@@ -15527,6 +15569,7 @@ var CodexAppServerSession = class {
|
|
|
15527
15569
|
registerActiveTurn(input) {
|
|
15528
15570
|
if (!input.onActiveTurn) return null;
|
|
15529
15571
|
return input.onActiveTurn({
|
|
15572
|
+
updatePermissionMode: input.updatePermissionMode,
|
|
15530
15573
|
steer: input.steer,
|
|
15531
15574
|
taskId: input.taskId,
|
|
15532
15575
|
threadId: input.threadId,
|
|
@@ -17525,6 +17568,7 @@ const createCodexAdapter = (options) => {
|
|
|
17525
17568
|
const stoppedDispatches = /* @__PURE__ */ new Map();
|
|
17526
17569
|
const registerAppServerTurn = (registration) => {
|
|
17527
17570
|
const activeTurn = {
|
|
17571
|
+
updatePermissionMode: registration.updatePermissionMode,
|
|
17528
17572
|
interrupt: registration.interrupt,
|
|
17529
17573
|
steer: registration.steer,
|
|
17530
17574
|
threadId: registration.threadId,
|
|
@@ -17721,6 +17765,14 @@ const createCodexAdapter = (options) => {
|
|
|
17721
17765
|
dispatch,
|
|
17722
17766
|
interrupt,
|
|
17723
17767
|
steer,
|
|
17768
|
+
updatePermissionMode: async (input) => {
|
|
17769
|
+
const activeTurn = activeAppServerTurns.get(input.taskId);
|
|
17770
|
+
return activeTurn ? await activeTurn.updatePermissionMode(input) : {
|
|
17771
|
+
status: "not_applied",
|
|
17772
|
+
taskId: input.taskId,
|
|
17773
|
+
reasonCode: "adapter.task_not_active"
|
|
17774
|
+
};
|
|
17775
|
+
},
|
|
17724
17776
|
verifyComputerFileAccessBoundary
|
|
17725
17777
|
}, { [READ_CODEX_DISPATCH_STOP_EVIDENCE]: (taskId) => stoppedDispatches.get(taskId) ?? null });
|
|
17726
17778
|
};
|
|
@@ -33180,9 +33232,9 @@ function createModelCatalogReadSession(input) {
|
|
|
33180
33232
|
async function readModelCatalogOnce(baseUrl) {
|
|
33181
33233
|
try {
|
|
33182
33234
|
const [apiClient, baseUrlModule, clientFoundationModule] = await Promise.all([
|
|
33183
|
-
import("./dist-
|
|
33235
|
+
import("./dist-CXB_bdSS.js"),
|
|
33184
33236
|
import("./base-url-Bdjp-5vy.js"),
|
|
33185
|
-
import("./api-client-foundation-
|
|
33237
|
+
import("./api-client-foundation-mqLjUunz.js")
|
|
33186
33238
|
]);
|
|
33187
33239
|
if (typeof apiClient.createConfigApi !== "function") throw new Error("config api client is unavailable");
|
|
33188
33240
|
const resolvedBaseUrl = baseUrl ?? await baseUrlModule.resolveBaseUrl();
|
|
@@ -35040,4 +35092,4 @@ async function prepareProviderRuntime(input, options = {}) {
|
|
|
35040
35092
|
//#endregion
|
|
35041
35093
|
export { canManageRegistryAgentSkillTargets as $, resolveDispatchSpaceActionMcpServer as $n, mergeOpenClawGatewayVisibility as $t, createExpectedRoutesReadSession as A, isAntigravityAcpLaunchContract as An, resolveAgentExecutionStatus as Ar, ensureOpenMeldManagedProfileWorkspace as At, reconcileNewRunnableBuiltinAgentsForSetup as B, commitResolvedAgentContext as Bn, applyIntervalJitterMs as Br, createMutableRouteCatalogState as Bt, createModelCatalogReadSession as C, forkCodexAppServerThread as Cn, parseAgentControllerRef as Cr, resolveLocalProjectConnectionForPath as Ct, NO_LOCAL_AGENTS_NEED_OPENMELD_SERVICE_REASON as D, projectCodexUsageLimits as Dn, renderTaskKnowledgeIndex as Dr, resolveRegistryOriginLaunchCommand as Dt, resolveProfileWorkspaceRuntime as E, verifyCodexAppServerThread as En, renderInformationProtectionPrompt as Er, listBuiltinAgentsRegistryEntries as Et, listAgentRegistrations as F, DaemonServiceRunError as Fn, resolveRouteRegistrationReconcileDecision as Fr, resolveConfiguredProfileWorkspacePathForAccount as Ft, updateAgentRegistrations as G, settleInflightTask as Gn, resolveBuiltinAgentControllerBrand as Gr, syncRuntimeEventToInflightTaskControlRegistry as Gt, resolveAgentTargetState as H, removeConversationExecutionState as Hn, resolveAdaptiveHeartbeatIntervalMs as Hr, summarizeSkippedDaemonProfiles as Ht, listAgentTargetStates as I, runRuntimeTask as In, ADAPTIVE_HEARTBEAT_JITTER_RATIO as Ir, setCustomProfileWorkspace as It, normalizeAgentIds as J, buildAuthenticatedControlPlaneResponse as Jn, isDaemonReconcileInProgressError as Jt, notifyDaemonRouteCatalogChanged as K, upsertConversationExecutionState as Kn, __toESM as Kr, SPACE_ACTION_CONTEXT_GUIDANCE_LINES as Kt, manageAgentRegistrationInstallation as L, buildRuntimeWorkspaceFingerprint as Ln, MAX_HEARTBEAT_INTERVAL_MS as Lr, setOpenMeldManagedProfileWorkspace as Lt, addAgentCustomTarget as M, emitDriftDetectedEvidence as Mn, resolveEvidenceSyncHealth as Mr, readProfileWorkspaceConfig as Mt, createRegistrationFromCatalogTarget as N, emitReconcileCompletedEvidence as Nn, resolveNativeAgentControllerPermissionModeForController as Nr, readProfileWorkspaceConfigForAccount as Nt, syncDeviceRuntimeStateProjection as O, probeClaudeCodeUsageLimits as On, renderWorkingLanguagePrompt as Or, resolveRegistryRuntimeAdapterCapabilitySnapshot as Ot, listAgentCustomTargets as P, emitReconcileStartedEvidence as Pn, resolveSelectableCandidates as Pr, resolveConfiguredProfileWorkspacePath as Pt, resolveLocalRegistryAgentIdFromAgentControllerRef as Q, createUnsupportedProviderUsageLimits as Qn, createPendingAgentInteractionRegistry as Qt, readAgentRuntimeConfigHealth as R, buildTaskResultEnvelope as Rn, MIN_HEARTBEAT_INTERVAL_MS as Rr, validateCustomProfileWorkspacePath as Rt, syncProfileWorkspaceState as S, resolveInstalledCodexLaunchCandidates as Sn, listAgentControllerPermissionModeOptions as Sr, canonicalizeLocalProjectPath as St, resolveEffectiveProfileWorkingFolderRuntime as T, resolveCodexAppServerCompletedTurn as Tn, projectPeopleComputersToLegacyLocalRuntimes as Tr, withAgentActivityLocalStateLock as Tt, setAgentRegistrationEnabled as U, resolveConversationExecutionStateByLookupKey as Un, resolveCatalogSyncIntervalMs as Ur, syncDaemonRouteCatalogState as Ut, removeAgentCustomTarget as V, loadLedgerState as Vn, pruneStaleLeases as Vr, createRouteCatalogFromMutableState as Vt, updateAgentCustomTarget as W, seedLegacyAgentContext as Wn, compareAgentControllerRefsForDisplay as Wr, normalizeDispatchThreadAction as Wt, sortAgentRegistrations as X, buildAgentContextLookupKey as Xn, buildDispatchReplyContextSummary as Xt, parseAgentEnabledOption as Y, assertLegacyAgentContextAssociation as Yn, createSerialAgentInteractionCallback as Yt, repairBuiltinControllerInstall as Z, createUnavailableProviderUsageLimits as Zn, normalizeDispatchPostMessageAction as Zt, loadDaemonRouteCatalog as _, GrokBuildAcpTransportError as _n, getAgentControllerPermissionModeDisplayMetadata as _r, removeProjectConnection as _t, buildOpenClawSpaceSessionKey as a, resolveDispatchContinuityObservation as an, DISPATCH_SPACE_ACTION_DELIVERY_ONLY_ENV as ar, isHomebrewCommandPath as at, resolveLocalController as b, projectCursorUsageLimits as bn, isAgentControllerUsageRefreshUnavailable as br, setDefaultProjectConnection as bt, findOpenClawAgentById as c, resolveLatestScopedConversationExecutionState as cn, TASK_KNOWLEDGE_GUIDANCE as cr, ProjectBindingOperationError as ct, resolveOpenClawAuthStatus as d, createLocalAdapterEntries as dn, buildInformationProtectionPromptPlan as dr, isProjectBound as dt, createLocalTaskInterruptSender as en, buildCliLaunchInvocation as er, detectInstalledSkillsAgents as et, resolveOpenClawProviderRuntimeWorkingDirectory as f, parseOpenRouterUsageResponse as fn, buildWorkingLanguagePromptPlan as fr, listProjectBindings as ft, writeDaemonRouteCatalogCache as g, resolveInstalledOpenCodeLaunchCandidates as gn, createAuthorityOpenMeldServiceRuntimeId as gr, removeMissingProjectConnections as gt, readDaemonRouteCatalogCache as h, readOpenCode2Inventory as hn, createAgentExecutionStatusDisplayRows as hr, removeAgentActivityBindingsWhileDeliveryLocked as ht, listOpenClawGatewayAgents as i, resolveDispatchQueueLogMeta as in, createProviderOriginalError as ir, isBunGlobalCommandPath as it, resolveAgentProfilePrimaryAgentControllerReport as j, probeAntigravityAcp as jn, resolveAgentProfileEditCapabilities as jr, normalizeCustomProfileWorkspacePath as jt, createPrimaryBindingReadSession as k, resolveInstalledClaudeCodeLaunchCandidates as kn, resolveAgentControllerPermissionModeForController as kr, resolveRegistryRuntimeAdapterContractByAgentControllerRef as kt, findOpenClawAgentsByWorkspace as l, resolveCatalogSyncSkippedProfilesLogState as ln, areAgentControllerInterfaceAccountsSame as lr, ProjectBindingStoreUpdateRequiredError as lt, resolveOpenClawLocalBootstrapPaths as m, forkOpenCodeServerSession as mn, createAgentControllerInterfaceDisplayRows as mr, migrateProjectBindingStore as mt, fetchOpenClawGatewayHealth as n, createLocalExecutionSlots as nn, resolveExecutablePathsOnPath as nr, EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES as nt, normalizeOpenClawSpaceIdPrefix as o, resolveCompatibleAgentContextMatch as on, isDispatchSpaceActionDeliveryOnly as or, isNpmGlobalCommandPath as ot, readOpenClawLocalBootstrapState as p, parseOpenCodeGoUsageResponse as pn, compareAgentControllerVersions as pr, listProjectConnectionsWithStatus as pt, normalizeAgentId as q, withLedgerStateTransaction as qn, SPACE_ACTION_TARGET_GUIDANCE_LINES as qt, listOpenClawAgents as r, createInflightTaskControlRegistry as rn, listAgentControllerSupervisedProcessIds as rr, resolveBuiltinAgentControllerDefinition as rt, slugifyOpenClawNamePart as s, resolveCompatibleConversationExecutionState as sn, DEFAULT_TASK_LIFECYCLE_HEARTBEAT_INTERVAL_MS as sr, isPnpmGlobalCommandPath as st, prepareProviderRuntime as t, buildLocalServiceDiagnosticsPayload as tn, materializeCliLaunchCommand as tr, resolveSkillsAgentRegistry as tt, matchesExpectedWorkspace as u, createLocalAdapterContainer as un, buildAgentControllerRef as ur, bindProject as ut, buildRuntimeRouteTargets as v, probeGrokBuildAcpInterface as vn, getAgentControllerPermissionModeFieldLabel as vr, resolveProjectBindingForPath as vt, resolveCurrentEffectiveProfileWorkingFolderRuntime as w, probeCodexAppServerAccount as wn, peopleComputerContainsDevice as wr, withAgentActivityDeliveryLock as wt, resolveLocalRuntimeControllerSupport as x, resolveCodexTimeoutMs as xn, isAgentExecutionReadyOrConnecting as xr, unbindProject as xt, readLocalEnabledControllers as y, resolveInstalledGrokBuildLaunchCandidates as yn, isAgentControllerUsageAccountUnavailable as yr, runIfAgentActivityBindingGenerationIsCurrent as yt, reconcileNewRunnableBuiltinAgentRegistrations as z, appendLedgerHistoryEntry as zn, applyAcceptedLeases as zr, describeProfileWorkspacePathValidationFailure as zt };
|
|
35042
35094
|
|
|
35043
|
-
//# sourceMappingURL=prepare-provider-runtime-
|
|
35095
|
+
//# sourceMappingURL=prepare-provider-runtime-B6_dfpiZ.js.map
|