openmeld 0.3.291 → 0.3.293
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-CyjPMpL8.js → add-me-membership-CCs8sUQS.js} +2 -2
- package/dist/{add-me-membership-CyjPMpL8.js.map → add-me-membership-CCs8sUQS.js.map} +1 -1
- package/dist/{agents-TD36Nt36.js → agents-Ow9keQaE.js} +5 -5
- package/dist/{agents-TD36Nt36.js.map → agents-Ow9keQaE.js.map} +1 -1
- package/dist/{channel--QXaQfMz.js → channel-DfaHRitM.js} +2 -2
- package/dist/{channel--QXaQfMz.js.map → channel-DfaHRitM.js.map} +1 -1
- package/dist/{command-B-lmrdLm.js → command-Bjok_ELo.js} +9 -9
- package/dist/{command-B-lmrdLm.js.map → command-Bjok_ELo.js.map} +1 -1
- package/dist/{computer-connection-review-B6Ugk2EF.js → computer-connection-review-EUXp_Wi8.js} +2 -2
- package/dist/{computer-connection-review-B6Ugk2EF.js.map → computer-connection-review-EUXp_Wi8.js.map} +1 -1
- package/dist/{computer-disconnect-D6KKrGlt.js → computer-disconnect-BkFLO8pE.js} +3 -3
- package/dist/{computer-disconnect-D6KKrGlt.js.map → computer-disconnect-BkFLO8pE.js.map} +1 -1
- package/dist/{computer-setup-continuation-M-93Wtan.js → computer-setup-continuation-twvv8WGB.js} +3 -3
- package/dist/{computer-setup-continuation-M-93Wtan.js.map → computer-setup-continuation-twvv8WGB.js.map} +1 -1
- package/dist/{daemon-device-id-esUdfenn.js → daemon-device-id-B-iuoFzM.js} +32 -2
- package/dist/daemon-device-id-B-iuoFzM.js.map +1 -0
- package/dist/{daemon-lifecycle-journal-YJs8sCNg.js → daemon-lifecycle-journal-ywEIaUn3.js} +2 -2
- package/dist/{daemon-lifecycle-journal-YJs8sCNg.js.map → daemon-lifecycle-journal-ywEIaUn3.js.map} +1 -1
- package/dist/{daemon-service-runtime-DZ_032oj.js → daemon-service-runtime-Dg8V-t-u.js} +2 -2
- package/dist/{daemon-service-runtime-DZ_032oj.js.map → daemon-service-runtime-Dg8V-t-u.js.map} +1 -1
- package/dist/{dispatch-owned-runtime-BqSvsAjN.js → dispatch-owned-runtime-DlpQwB6N.js} +3 -3
- package/dist/{dispatch-owned-runtime-BqSvsAjN.js.map → dispatch-owned-runtime-DlpQwB6N.js.map} +1 -1
- package/dist/{dist-lfiZbuqV.js → dist-B6YM6pO6.js} +13 -13
- package/dist/{dist-ChSkwbjI.js → dist-W42Tu_IN.js} +2 -2
- package/dist/{dual-view-guide-catalog-C9aFCiSE.js → dual-view-guide-catalog-DE3NLJFV.js} +2 -2
- package/dist/{dual-view-guide-catalog-C9aFCiSE.js.map → dual-view-guide-catalog-DE3NLJFV.js.map} +1 -1
- package/dist/{entry-BnsP9JAM.js → entry-CVzIpV2o.js} +5 -5
- package/dist/{entry-BnsP9JAM.js.map → entry-CVzIpV2o.js.map} +1 -1
- package/dist/{installation-inventory-hq8m9ORg.js → installation-inventory-C0tUL2nW.js} +3 -3
- package/dist/{installation-inventory-hq8m9ORg.js.map → installation-inventory-C0tUL2nW.js.map} +1 -1
- package/dist/{installer-DzxFdbnD.js → installer-BDOyjY1v.js} +2 -2
- package/dist/{installer-DzxFdbnD.js.map → installer-BDOyjY1v.js.map} +1 -1
- package/dist/{meta-api-BymC6Zst.js → meta-api-tolnQVpU.js} +3 -3
- package/dist/{meta-api-BymC6Zst.js.map → meta-api-tolnQVpU.js.map} +1 -1
- package/dist/{openmeld-YyY3x2Gv.js → openmeld-ClgSnNPJ.js} +23 -23
- package/dist/{openmeld-YyY3x2Gv.js.map → openmeld-ClgSnNPJ.js.map} +1 -1
- package/dist/{openmeld-maintenance-worker-BiziGPdh.js → openmeld-maintenance-worker-Btj47phf.js} +9 -9
- package/dist/{openmeld-maintenance-worker-BiziGPdh.js.map → openmeld-maintenance-worker-Btj47phf.js.map} +1 -1
- package/dist/{openmeld-tools-update-coordinator-DCzOm9qr.js → openmeld-tools-update-coordinator-C3W6sFnm.js} +5 -5
- package/dist/{openmeld-tools-update-coordinator-DCzOm9qr.js.map → openmeld-tools-update-coordinator-C3W6sFnm.js.map} +1 -1
- package/dist/openmeld.js +5 -5
- package/dist/{prepare-provider-runtime-BnzroQaJ.js → prepare-provider-runtime-CQ7ZJMG8.js} +6 -3
- package/dist/{prepare-provider-runtime-BnzroQaJ.js.map → prepare-provider-runtime-CQ7ZJMG8.js.map} +1 -1
- package/dist/{prepare-session-executor-CDA2_-ZD.js → prepare-session-executor-Cum_2pFY.js} +12 -12
- package/dist/{prepare-session-executor-CDA2_-ZD.js.map → prepare-session-executor-Cum_2pFY.js.map} +1 -1
- package/dist/{process-channel-DkFUtjSM.js → process-channel-Dx1KqiZj.js} +2 -2
- package/dist/{process-channel-DkFUtjSM.js.map → process-channel-Dx1KqiZj.js.map} +1 -1
- package/dist/{runtime-agent-controller-reporting-submission-DoS9pSCE.js → runtime-agent-controller-reporting-submission-BgAI8B4L.js} +4 -4
- package/dist/{runtime-agent-controller-reporting-submission-DoS9pSCE.js.map → runtime-agent-controller-reporting-submission-BgAI8B4L.js.map} +1 -1
- package/dist/{runtime-B5tB_LmO.js → runtime-ogScfw4m.js} +22 -16
- package/dist/{runtime-B5tB_LmO.js.map → runtime-ogScfw4m.js.map} +1 -1
- package/dist/{service-BrVsNzfj.js → service-CML_ZTQ7.js} +135 -55
- package/dist/service-CML_ZTQ7.js.map +1 -0
- package/dist/{service-account-control-11SOgZGs.js → service-account-control-Bkgjt8Hs.js} +5 -5
- package/dist/{service-account-control-11SOgZGs.js.map → service-account-control-Bkgjt8Hs.js.map} +1 -1
- package/dist/{service-control-capabilities-2ubvfkoo.js → service-control-capabilities-Bvhzddzv.js} +2 -2
- package/dist/{service-control-capabilities-2ubvfkoo.js.map → service-control-capabilities-Bvhzddzv.js.map} +1 -1
- package/dist/{service-control-capabilities-DgrNCUxS.js → service-control-capabilities-CUfHlN2t.js} +1 -1
- package/dist/{state-BvUx6rev.js → state-DI3VCm3Z.js} +2 -2
- package/dist/{state-BvUx6rev.js.map → state-DI3VCm3Z.js.map} +1 -1
- package/dist/{updates-api-DPoJOTdk.js → updates-api-C0n06BJr.js} +5 -5
- package/dist/{updates-api-DPoJOTdk.js.map → updates-api-C0n06BJr.js.map} +1 -1
- package/dist/upgrade-DVlicVyI.js +3 -0
- package/dist/{upgrade-DAKyvk3S.js → upgrade-wV53HJsz.js} +5 -5
- package/dist/{upgrade-DAKyvk3S.js.map → upgrade-wV53HJsz.js.map} +1 -1
- package/dist/windows/openmeld-windows-process.exe +0 -0
- package/package.json +7 -7
- package/dist/daemon-device-id-esUdfenn.js.map +0 -1
- package/dist/service-BrVsNzfj.js.map +0 -1
- package/dist/upgrade-ch0Td9W0.js +0 -3
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { P as resolveOpenMeldEnvPreset } from "./paths-De9xdA2h.js";
|
|
4
|
-
import { $ as hasIndependentMaintenanceRegistration, ct as downloadCliBinaryUpdateArtifact, dt as verifyCliBinaryCodeSignature, lt as prepareCliBinaryProcessHelper, ot as DEFAULT_CLI_BINARY_DOWNLOAD_POLICY, st as allowUnsignedWindowsInternalPreview, ut as resolveCliBinaryUpdatePlan } from "./daemon-service-runtime-
|
|
5
|
-
import { Et as resolveCurrentDaemonExpectedVersion, Ft as resolveVersionChangeDirection, Mt as buildDaemonServiceTargetSpec, Nt as resolveDaemonServiceAlignmentDecision, a as resolveServiceUpdateUrgency, h as scheduleDaemonServiceUpdate, k as formatDaemonFailureContextText, mt as inspectDaemonServiceInventory, p as readOpenMeldToolsUpdateContextFromEnv, t as createOpenMeldToolsUpdateCoordinator } from "./openmeld-tools-update-coordinator-
|
|
4
|
+
import { $ as hasIndependentMaintenanceRegistration, ct as downloadCliBinaryUpdateArtifact, dt as verifyCliBinaryCodeSignature, lt as prepareCliBinaryProcessHelper, ot as DEFAULT_CLI_BINARY_DOWNLOAD_POLICY, st as allowUnsignedWindowsInternalPreview, ut as resolveCliBinaryUpdatePlan } from "./daemon-service-runtime-Dg8V-t-u.js";
|
|
5
|
+
import { Et as resolveCurrentDaemonExpectedVersion, Ft as resolveVersionChangeDirection, Mt as buildDaemonServiceTargetSpec, Nt as resolveDaemonServiceAlignmentDecision, a as resolveServiceUpdateUrgency, h as scheduleDaemonServiceUpdate, k as formatDaemonFailureContextText, mt as inspectDaemonServiceInventory, p as readOpenMeldToolsUpdateContextFromEnv, t as createOpenMeldToolsUpdateCoordinator } from "./openmeld-tools-update-coordinator-C3W6sFnm.js";
|
|
6
6
|
import { ot as formatInlineOpenMeldCliCommands, ut as formatOpenMeldCliTextBlock } from "./auth-session-GYsWoDuJ.js";
|
|
7
7
|
import { n as resolveRuntimeContext } from "./context-CPKBlAps.js";
|
|
8
8
|
import { t as isBinaryDistribution } from "./distribution-BDQT2ilb.js";
|
|
9
9
|
import { a as outJsonLine, t as createPresenter } from "./presenter-BIwIweT9.js";
|
|
10
|
-
import { _ as writeVersionState, g as readVersionState, l as OPENMELD_VERSION, m as fetchLatestPackageInfo, p as fetchLatestCliBinaryRelease, u as buildNextVersionState } from "./daemon-lifecycle-journal-
|
|
11
|
-
import { N as createUpgradeConfirmationGuideError, P as getCommandEntryContract, at as buildAgentOverviewFromContract } from "./dual-view-guide-catalog-
|
|
10
|
+
import { _ as writeVersionState, g as readVersionState, l as OPENMELD_VERSION, m as fetchLatestPackageInfo, p as fetchLatestCliBinaryRelease, u as buildNextVersionState } from "./daemon-lifecycle-journal-ywEIaUn3.js";
|
|
11
|
+
import { N as createUpgradeConfirmationGuideError, P as getCommandEntryContract, at as buildAgentOverviewFromContract } from "./dual-view-guide-catalog-DE3NLJFV.js";
|
|
12
12
|
import { a as formatDaemonServiceDowngradeBlockedRecommendation, c as formatDaemonServiceMissingRecommendation, m as canUseInteractivePrompts, n as resolveElapsedTimeMs, t as formatElapsedTime } from "./elapsed-time-FUf-2Hna.js";
|
|
13
13
|
import { a as withOpenMeldToolsUpdateFailure, t as OpenMeldToolsUpdateFailureError } from "./openmeld-tools-update-failure-2jySZ04B.js";
|
|
14
14
|
import { t as resolveExternalOpenMeldToolsUpdate } from "./openmeld-tools-update-join-CDWWs9KY.js";
|
|
@@ -1116,4 +1116,4 @@ function toErrorMessage(error) {
|
|
|
1116
1116
|
//#endregion
|
|
1117
1117
|
export { runUpgrade as a, OPENMELD_UPGRADE_FAILURE_HINTS as c, runMaintenanceUpgrade as i, OPENMELD_UPGRADE_METADATA_RECOVERY_HINTS as l, isUpgradeOutputHandledError as n, emitTopLevelAgentOverview as o, resolveBinaryUpgradeRecoveryUrl as r, emitTopLevelCliAgentOverview as s, UPGRADE_INTERNAL_ALIGN_SERVICE_FLAG as t };
|
|
1118
1118
|
|
|
1119
|
-
//# sourceMappingURL=upgrade-
|
|
1119
|
+
//# sourceMappingURL=upgrade-wV53HJsz.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade-DAKyvk3S.js","names":[],"sources":["../src/runtime/current-npm-global-install.ts","../src/runtime/manual-upgrade.ts","../src/runtime/npm-package-acquisition-diagnostics.ts","../src/commands/top-level-agent-overview.ts","../src/commands/upgrade.ts"],"sourcesContent":["import { realpath, stat } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\n\nexport type NpmCommandSpec = {\n command: string;\n argsPrefix: string[];\n};\n\nexport type CurrentNpmGlobalPackageInstall = {\n cliScriptPath: string;\n globalPrefixPath: string;\n packageRootPath: string;\n};\n\nexport async function resolveCurrentNpmCommandSpec(\n input: { nodeExecutablePath?: string; platform?: NodeJS.Platform } = {}\n): Promise<NpmCommandSpec> {\n const nodeExecutablePath = input.nodeExecutablePath ?? process.execPath;\n const platform = input.platform ?? process.platform;\n const nodeExecutableDir = dirname(nodeExecutablePath);\n const npmWrapperPath = join(\n nodeExecutableDir,\n platform === \"win32\" ? \"npm.cmd\" : \"npm\"\n );\n // Windows .cmd files cannot be spawned directly without a command shell.\n // Run npm's JavaScript with the selected Node instead of adding shell parsing.\n if (platform !== \"win32\" && (await pathExists(npmWrapperPath))) {\n return {\n command: npmWrapperPath,\n argsPrefix: [],\n };\n }\n\n for (const candidate of resolveNpmCliScriptCandidates({\n nodeExecutableDir,\n platform,\n })) {\n if (await pathExists(candidate)) {\n return {\n command: nodeExecutablePath,\n argsPrefix: [candidate],\n };\n }\n }\n\n throw new Error(\n `OpenMeld could not locate npm for the current CLI runtime at ${nodeExecutablePath}.`\n );\n}\n\nexport async function resolveCurrentNpmGlobalPackageInstall(input: {\n packageName: string;\n cliScriptPath?: string;\n}): Promise<CurrentNpmGlobalPackageInstall | null> {\n const cliScriptPath = await resolveCurrentCliScriptPath(input.cliScriptPath);\n if (!cliScriptPath) {\n return null;\n }\n\n const packageRootPath = dirname(dirname(cliScriptPath));\n if (basename(packageRootPath) !== input.packageName) {\n return null;\n }\n\n const globalNodeModulesRootPath = dirname(packageRootPath);\n if (basename(globalNodeModulesRootPath) !== \"node_modules\") {\n return null;\n }\n\n const nodeModulesParentPath = dirname(globalNodeModulesRootPath);\n const globalPrefixPath =\n basename(nodeModulesParentPath) === \"lib\"\n ? dirname(nodeModulesParentPath)\n : nodeModulesParentPath;\n\n return {\n cliScriptPath,\n globalPrefixPath,\n packageRootPath,\n };\n}\n\nasync function resolveCurrentCliScriptPath(\n cliScriptPath?: string\n): Promise<string | null> {\n const rawCliScriptPath = cliScriptPath ?? process.argv[1];\n if (!rawCliScriptPath) {\n return null;\n }\n\n const resolvedCliScriptPath = await realpath(rawCliScriptPath).catch(() => {\n return rawCliScriptPath;\n });\n\n return normalizePathForComparison(resolvedCliScriptPath).endsWith(\n \"/dist/openmeld.js\"\n )\n ? resolvedCliScriptPath\n : null;\n}\n\nfunction resolveNpmCliScriptCandidates(input: {\n nodeExecutableDir: string;\n platform: NodeJS.Platform;\n}): string[] {\n if (input.platform === \"win32\") {\n return [\n join(input.nodeExecutableDir, \"node_modules\", \"npm\", \"bin\", \"npm-cli.js\"),\n ];\n }\n\n return [\n join(\n input.nodeExecutableDir,\n \"..\",\n \"lib\",\n \"node_modules\",\n \"npm\",\n \"bin\",\n \"npm-cli.js\"\n ),\n ];\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction normalizePathForComparison(path: string): string {\n return path.replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n","export const MANUAL_OPENMELD_UPGRADE_COMMAND = \"npm install -g openmeld@latest\";\nconst SAFE_SHELL_ARGUMENT_PATTERN = /^[A-Za-z0-9_./:@%+=,-]+$/;\n\nexport function buildManualOpenMeldUpgradeCommand(\n input: { globalPrefixPath?: string | null } = {}\n): string {\n const globalPrefixPath = input.globalPrefixPath?.trim();\n if (!globalPrefixPath) {\n return MANUAL_OPENMELD_UPGRADE_COMMAND;\n }\n return `npm install -g --prefix ${formatShellArgument(globalPrefixPath)} openmeld@latest`;\n}\n\nexport const OPENMELD_UPGRADE_METADATA_RECOVERY_HINTS = [\n MANUAL_OPENMELD_UPGRADE_COMMAND,\n \"openmeld reset --yes\",\n \"openmeld start\",\n \"openmeld upgrade --check\",\n] as const;\n\nexport const OPENMELD_UPGRADE_FAILURE_HINTS = [\n MANUAL_OPENMELD_UPGRADE_COMMAND,\n \"openmeld upgrade --check\",\n \"openmeld upgrade --yes\",\n] as const;\n\nfunction formatShellArgument(value: string): string {\n if (SAFE_SHELL_ARGUMENT_PATTERN.test(value)) {\n return value;\n }\n return JSON.stringify(value);\n}\n","const DEFAULT_PACKAGE_NAME = \"openmeld\";\n\nconst UNRESOLVED_PACKAGE_DEPENDENCY_PATTERN =\n /Unsupported URL Type [\"'](?:catalog|workspace):[\"']/iu;\n\nconst LOCAL_PROXY_FAILURE_PATTERN =\n /\\b(?:connect\\s+(?:EPERM|ECONNREFUSED|ECONNRESET|ETIMEDOUT)\\s+(?:127\\.0\\.0\\.1|localhost)(?::\\d+)?|reason:\\s*connect\\s+(?:EPERM|ECONNREFUSED|ECONNRESET|ETIMEDOUT)\\s+(?:127\\.0\\.0\\.1|localhost)(?::\\d+)?)/iu;\nconst NPM_CACHE_OR_LOG_PERMISSION_PATTERN =\n /(?:log files were not written|(?:EACCES|EPERM)[\\s\\S]{0,160}\\.npm|\\.npm[\\s\\S]{0,160}(?:EACCES|EPERM))/iu;\nconst NPM_REGISTRY_FAILURE_PATTERN = /registry\\.npmjs\\.org/iu;\n\nexport type NpmPackageAcquisitionFailureDiagnosis = {\n code:\n | \"npm_package_dependency_invalid\"\n | \"npm_local_proxy_unreachable\"\n | \"npm_cache_or_log_unwritable\"\n | \"npm_registry_fetch_failed\";\n message: string;\n nextSteps: string[];\n};\n\nexport function diagnoseNpmPackageAcquisitionFailure(input: {\n packageName?: string;\n text: string;\n}): NpmPackageAcquisitionFailureDiagnosis | null {\n const text = input.text.trim();\n if (!text) {\n return null;\n }\n const packageName = input.packageName ?? DEFAULT_PACKAGE_NAME;\n\n if (UNRESOLVED_PACKAGE_DEPENDENCY_PATTERN.test(text)) {\n return {\n code: \"npm_package_dependency_invalid\",\n message:\n \"npm found a dependency reference that cannot be installed outside its development workspace.\",\n nextSteps: [\n \"Share the package version and the npm error above with OpenMeld support. Remove device codes and other credentials from the log first.\",\n \"Retry with a fresh setup command after the corrected CLI release is available. Reinstalling Node.js or resetting OpenMeld does not fix this dependency error.\",\n ],\n };\n }\n\n if (LOCAL_PROXY_FAILURE_PATTERN.test(text)) {\n return {\n code: \"npm_local_proxy_unreachable\",\n message:\n \"npm is trying to download the OpenMeld CLI through a local proxy, but that proxy is not reachable.\",\n nextSteps: [\n \"Start the local proxy app or turn off the npm proxy setting.\",\n \"Check npm proxy settings with `npm config get proxy` and `npm config get https-proxy`.\",\n `Retry the OpenMeld setup or upgrade command after npm can reach ${packageName}.`,\n ],\n };\n }\n\n if (NPM_CACHE_OR_LOG_PERMISSION_PATTERN.test(text)) {\n return {\n code: \"npm_cache_or_log_unwritable\",\n message:\n \"npm cannot write to its local cache or log directory, so it cannot install the OpenMeld CLI.\",\n nextSteps: [\n \"Check ownership and permissions for `~/.npm` and `~/.npm/_logs`.\",\n \"Create the missing npm log directory if needed with `mkdir -p ~/.npm/_logs`.\",\n `Retry the OpenMeld setup or upgrade command after npm can install ${packageName}.`,\n ],\n };\n }\n\n if (NPM_REGISTRY_FAILURE_PATTERN.test(text) || text.includes(packageName)) {\n return {\n code: \"npm_registry_fetch_failed\",\n message:\n \"npm could not download the latest OpenMeld CLI from the npm registry.\",\n nextSteps: [\n \"Check that this computer can reach `https://registry.npmjs.org`.\",\n \"Fix the npm/network error shown above, then retry the OpenMeld setup or upgrade command.\",\n ],\n };\n }\n\n return null;\n}\n\nexport function formatNpmPackageAcquisitionFailureDiagnosis(\n diagnosis: NpmPackageAcquisitionFailureDiagnosis\n): string {\n return [\n `Detected cause: ${diagnosis.message}`,\n \"Next steps:\",\n ...diagnosis.nextSteps.map((step) => `- ${step}`),\n ].join(\"\\n\");\n}\n","import { buildAgentOverviewFromContract } from \"../command-contracts/helpers\";\nimport { getCommandEntryContract } from \"../command-contracts/registry\";\nimport type { Presenter } from \"../runtime/presenter\";\nimport { outJsonLine } from \"../ui/io\";\n\nexport type TopLevelAgentOverviewCommand =\n | \"root\"\n | \"view\"\n | \"doctor\"\n | \"whoami\"\n | \"upgrade\"\n | \"repair.local_state\"\n | \"uninstall\"\n | \"reset\";\n\nexport function emitTopLevelAgentOverview(input: {\n presenter: Presenter;\n command: TopLevelAgentOverviewCommand;\n}): void {\n input.presenter.data({\n code: `${input.command}.agent_overview`,\n payload: buildTopLevelAgentOverviewPayload(input.command),\n });\n}\n\nexport function emitTopLevelCliAgentOverview(\n command: TopLevelAgentOverviewCommand\n): void {\n outJsonLine({\n type: \"result\",\n code: `${command}.agent_overview`,\n payload: buildTopLevelAgentOverviewPayload(command),\n });\n}\n\nfunction buildTopLevelAgentOverviewPayload(\n command: TopLevelAgentOverviewCommand\n): Record<string, unknown> {\n const contract = getCommandEntryContract(resolveTopLevelEntryName(command));\n if (!contract?.agentOverview) {\n throw new Error(`missing ${command} command contract`);\n }\n return buildAgentOverviewFromContract({\n context: {},\n overview: contract.agentOverview,\n });\n}\n\nfunction resolveTopLevelEntryName(command: TopLevelAgentOverviewCommand) {\n switch (command) {\n case \"repair.local_state\":\n return \"repair.local-state\" as const;\n default:\n return command;\n }\n}\n","import { spawn } from \"node:child_process\";\nimport { chmod, mkdtemp, rm, stat, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { cancel, confirm, isCancel } from \"@clack/prompts\";\nimport {\n allowUnsignedWindowsInternalPreview,\n type CliBinaryUpdatePlan,\n DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n downloadCliBinaryUpdateArtifact,\n prepareCliBinaryProcessHelper,\n resolveCliBinaryUpdatePlan,\n verifyCliBinaryCodeSignature,\n} from \"@openmeld/local-service/cli-binary-update-artifact\";\nimport type {\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateOperation,\n} from \"@openmeld/schemas/types\";\nimport { resolveServiceUpdateUrgency } from \"../command-entry-checks/service-update-urgency\";\nimport { hasIndependentMaintenanceRegistration } from \"../config/daemon-service-update-worker-registration\";\nimport { resolveOpenMeldEnvPreset } from \"../config/paths\";\nimport {\n buildNextVersionState,\n type CliBinaryReleaseInfo,\n fetchLatestCliBinaryRelease,\n fetchLatestPackageInfo,\n type OpenMeldVersionStateV1,\n readVersionState,\n writeVersionState,\n} from \"../config/version-state\";\nimport { resolveCurrentDaemonExpectedVersion } from \"../local-service/lifecycle/current-daemon-version\";\nimport {\n buildDaemonServiceTargetSpec,\n resolveDaemonServiceAlignmentDecision,\n} from \"../local-service/lifecycle/daemon-service-alignment-target\";\nimport {\n type DaemonServiceFailureStage,\n formatDaemonFailureContextText,\n} from \"../local-service/lifecycle/daemon-service-evidence\";\nimport { inspectDaemonServiceInventory } from \"../local-service/lifecycle/daemon-service-inventory\";\nimport { scheduleDaemonServiceUpdate } from \"../local-service/lifecycle/daemon-service-update-coordinator\";\nimport { resolveVersionChangeDirection } from \"../local-service/lifecycle/version-change-direction\";\nimport { readOpenMeldToolsUpdateContextFromEnv } from \"../local-service/maintenance/openmeld-tools-update-context\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"../local-service/maintenance/openmeld-tools-update-coordinator\";\nimport {\n OpenMeldToolsUpdateFailureError,\n withOpenMeldToolsUpdateFailure,\n} from \"../local-service/maintenance/openmeld-tools-update-failure\";\nimport { resolveExternalOpenMeldToolsUpdate } from \"../local-service/maintenance/openmeld-tools-update-join\";\nimport { parseOpenMeldToolsUpdateFailureFrame } from \"../local-service/maintenance/openmeld-tools-update-process-frame\";\nimport {\n formatInlineOpenMeldCliCommands,\n formatOpenMeldCliTextBlock,\n} from \"../runtime/cli-entry-command\";\nimport { type RuntimeContext, resolveRuntimeContext } from \"../runtime/context\";\nimport {\n type NpmCommandSpec,\n resolveCurrentNpmCommandSpec,\n resolveCurrentNpmGlobalPackageInstall,\n} from \"../runtime/current-npm-global-install\";\nimport { isBinaryDistribution } from \"../runtime/distribution\";\nimport { createUpgradeConfirmationGuideError } from \"../runtime/dual-view-guide-catalog\";\nimport { canUseInteractivePrompts } from \"../runtime/interaction\";\nimport { buildManualOpenMeldUpgradeCommand } from \"../runtime/manual-upgrade\";\nimport {\n diagnoseNpmPackageAcquisitionFailure,\n formatNpmPackageAcquisitionFailureDiagnosis,\n} from \"../runtime/npm-package-acquisition-diagnostics\";\nimport { createPresenter } from \"../runtime/presenter/index\";\nimport { OPENMELD_VERSION } from \"../runtime/version\";\nimport {\n formatDaemonServiceDowngradeBlockedRecommendation,\n formatDaemonServiceMissingRecommendation,\n} from \"../system/local-service-install-attention\";\nimport { formatElapsedTime, resolveElapsedTimeMs } from \"../ui/elapsed-time\";\nimport { emitTopLevelAgentOverview } from \"./top-level-agent-overview\";\n\nconst OPENMELD_PACKAGE_NAME = \"openmeld\";\nconst BINARY_UPGRADE_RECOVERY_URL = \"https://openmeld.ai\";\nconst STAGING_BINARY_MANIFEST_URL =\n \"https://staging.openmeld.ai/cli/manifest.json\";\nconst STAGING_BINARY_UPGRADE_RECOVERY_URL = \"https://staging.openmeld.ai\";\nconst INSTALL_SELF_JSON_LINE_SPLIT_RE = /\\r?\\n/u;\nconst SERVICE_CHECK_STARTED_TEXT = \"Checking OpenMeld Service\";\nconst SERVICE_CHECK_COMPLETED_TEXT = \"OpenMeld Service check finished.\";\nexport const UPGRADE_INTERNAL_ALIGN_SERVICE_FLAG = \"--internal-align-service\";\n\nclass UpgradeOutputHandledError extends Error {\n readonly code = \"openmeld.upgrade.output_handled\";\n\n constructor(message: string) {\n super(message);\n this.name = \"UpgradeOutputHandledError\";\n }\n}\n\nexport function isUpgradeOutputHandledError(\n error: unknown\n): error is UpgradeOutputHandledError {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n if (\n current instanceof UpgradeOutputHandledError ||\n (current as { code?: unknown }).code === \"openmeld.upgrade.output_handled\"\n ) {\n return true;\n }\n current = (current as { cause?: unknown }).cause;\n }\n return false;\n}\n\ntype UpgradeDistribution = \"npm\" | \"binary\";\ntype ManualUpgradeRecovery =\n | { kind: \"command\"; value: string }\n | { kind: \"web\"; value: string };\n\ntype ResolvedUpgradeStatusBase = {\n distribution: UpgradeDistribution;\n currentVersion: string;\n latestVersion: string;\n requiredFloor: string | null;\n checkedAt: string;\n binaryRelease?: CliBinaryReleaseInfo;\n};\n\ntype InstallableUpgradeStatus = ResolvedUpgradeStatusBase & {\n status: \"outdated\";\n};\n\ntype TerminalUpgradeStatus = ResolvedUpgradeStatusBase & {\n status: \"up_to_date\" | \"downgrade_blocked\";\n};\n\ntype UpgradeStatus =\n | InstallableUpgradeStatus\n | TerminalUpgradeStatus\n | {\n status: \"check_failed\";\n distribution: UpgradeDistribution;\n currentVersion: string;\n checkedAt: string;\n error: string;\n };\n\ntype CurrentGlobalInstall = Awaited<\n ReturnType<typeof resolveCurrentNpmGlobalPackageInstall>\n>;\n\nexport async function runUpgrade(input: {\n view?: string;\n yes?: boolean;\n check?: boolean;\n internalAlignService?: boolean;\n}): Promise<void> {\n const runtime = await resolveRuntimeContext({\n view: input.view,\n });\n await runUpgradeWithRuntime(input, runtime);\n}\n\nexport async function runMaintenanceUpgrade(\n internalAlignService = false\n): Promise<void> {\n if (!readOpenMeldToolsUpdateContextFromEnv()) {\n throw new Error(\"OpenMeld maintenance requires a saved update operation.\");\n }\n await runUpgradeWithRuntime(\n { yes: true, internalAlignService },\n {\n viewMode: \"agent\",\n resolvedView: \"agent\",\n interactive: false,\n }\n );\n}\n\nasync function runUpgradeWithRuntime(\n input: {\n yes?: boolean;\n check?: boolean;\n internalAlignService?: boolean;\n },\n runtime: RuntimeContext\n): Promise<void> {\n const presenter = createPresenter(runtime);\n if (runtime.resolvedView === \"agent\") {\n emitTopLevelAgentOverview({\n presenter,\n command: \"upgrade\",\n });\n }\n\n const currentUpdate = readOpenMeldToolsUpdateContextFromEnv();\n if (!input.check) {\n const existingUpdate = await resolveExternalOpenMeldToolsUpdate({\n currentOperationId: currentUpdate?.operationId,\n });\n if (existingUpdate) {\n emitUpgradeAlreadyRunning({\n operation: existingUpdate,\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n }\n\n if (input.internalAlignService) {\n await alignServiceWithCurrentCli({\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n\n const allowPrompt = canUseInteractivePrompts(runtime);\n const currentVersion = OPENMELD_VERSION;\n const { currentGlobalInstall, manualUpgradeRecovery } =\n await resolveUpgradeInstallContext();\n const previousVersionState = await readVersionState();\n if (!previousVersionState) {\n handleMissingVersionMetadata({\n presenter,\n resolvedView: runtime.resolvedView,\n manualUpgradeRecovery,\n });\n }\n\n const checkedAt = new Date().toISOString();\n const checkingStage = startUpgradeStage({\n presenter,\n resolvedView: runtime.resolvedView,\n code: \"upgrade.checking\",\n startedText: \"Checking for OpenMeld updates\",\n });\n const upgradeStatus = await resolveUpgradeStatus({\n currentVersion,\n checkedAt,\n });\n if (upgradeStatus.status === \"check_failed\") {\n checkingStage.fail(\"Could not check for OpenMeld updates.\");\n } else {\n checkingStage.complete(\"Update check finished.\");\n }\n if (upgradeStatus.status !== \"check_failed\") {\n await writeVersionState(\n buildNextVersionState({\n previous: previousVersionState,\n currentVersion,\n latestVersion: upgradeStatus.latestVersion,\n requiredFloor: upgradeStatus.requiredFloor,\n checkedAt,\n })\n );\n }\n\n if (input.check) {\n emitUpgradeCheckStatus({\n presenter,\n resolvedView: runtime.resolvedView,\n upgradeStatus,\n });\n return;\n }\n\n if (\n emitTerminalUpgradeStatus({\n presenter,\n resolvedView: runtime.resolvedView,\n upgradeStatus,\n })\n ) {\n await alignServiceWithCurrentCli({\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n\n if (\n upgradeStatus.status === \"outdated\" &&\n !(await resolveUpgradeConfirmation({\n allowPrompt,\n yes: Boolean(input.yes),\n message: `Upgrade OpenMeld CLI from ${upgradeStatus.currentVersion} to ${upgradeStatus.latestVersion}?`,\n nonInteractiveError:\n \"openmeld upgrade requires --yes in non-interactive mode when upgrade is available\",\n resolvedView: runtime.resolvedView,\n scenario: \"outdated\",\n }))\n ) {\n return;\n }\n\n if (upgradeStatus.status === \"check_failed\") {\n handleUpgradeCheckFailure({\n presenter,\n resolvedView: runtime.resolvedView,\n upgradeStatus,\n manualUpgradeRecovery,\n });\n }\n\n const installableUpgradeStatus =\n requireInstallableUpgradeStatus(upgradeStatus);\n if (!currentUpdate && (await hasIndependentMaintenanceRegistration())) {\n await requestMaintainedUpgrade({\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n if (installableUpgradeStatus.distribution === \"binary\") {\n await installAndReconcileBinaryUpgrade({\n upgradeStatus: installableUpgradeStatus,\n previousVersionState,\n manualUpgradeRecovery,\n resolvedView: runtime.resolvedView,\n currentVersion,\n presenter,\n });\n return;\n }\n\n await installAndReconcileNpmUpgrade({\n upgradeStatus: installableUpgradeStatus,\n previousVersionState,\n currentGlobalInstall,\n manualUpgradeRecovery,\n resolvedView: runtime.resolvedView,\n currentVersion,\n presenter,\n });\n}\n\nasync function alignServiceWithCurrentCli(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n}): Promise<void> {\n try {\n await runInternalUpgradeServiceAlignment({\n ...input,\n daemonVersion: await resolveCurrentDaemonExpectedVersion(),\n ...(process.argv[1] && !isBinaryDistribution()\n ? { cliScriptPath: process.argv[1] }\n : {}),\n });\n } catch (error) {\n throw withOpenMeldToolsUpdateFailure(\n error,\n \"cli.update.service_alignment_failed\"\n );\n }\n}\n\nasync function requestMaintainedUpgrade(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n}): Promise<void> {\n const coordinator = createOpenMeldToolsUpdateCoordinator(\n {},\n { executeUpdates: false }\n );\n const result = await coordinator.requestUpdate({ requestSource: \"cli\" });\n if (result.status === \"already_running\") {\n emitUpgradeAlreadyRunning({ ...input, operation: result.operation });\n return;\n }\n if (result.status !== \"started\" && result.status !== \"current\") {\n throw new Error(\n \"OpenMeld could not start the update. Try again when the update channel is available.\"\n );\n }\n if (input.resolvedView === \"agent\") {\n input.presenter.data({ code: \"upgrade.maintenance\", payload: result });\n return;\n }\n input.presenter.line({\n code: \"upgrade.maintenance\",\n text:\n result.status === \"current\"\n ? \"OpenMeld is up to date.\"\n : \"OpenMeld is updating in the background. You can close this Terminal.\",\n });\n}\n\nfunction emitUpgradeAlreadyRunning(input: {\n operation: OpenMeldToolsUpdateOperation;\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n}): void {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.already_running\",\n payload: {\n status: \"already_running\",\n operation: input.operation,\n },\n });\n return;\n }\n input.presenter.line({\n code: \"upgrade.already_running\",\n text: \"An OpenMeld update is already in progress. OpenMeld will keep working in the background, so this command did not start another update. You can close this Terminal.\",\n data: {\n operationId: input.operation.operationId,\n phase: input.operation.phase,\n targetVersion: input.operation.targetVersion,\n },\n });\n}\n\nfunction emitUpgradeCheckStatus(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n upgradeStatus: UpgradeStatus;\n}): void {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.check\",\n payload: input.upgradeStatus,\n });\n return;\n }\n\n switch (input.upgradeStatus.status) {\n case \"up_to_date\":\n case \"downgrade_blocked\":\n emitTerminalUpgradeStatus(input);\n return;\n case \"outdated\":\n input.presenter.line({\n code: \"upgrade.update_available\",\n text: formatInlineOpenMeldCliCommands(\n `OpenMeld CLI ${input.upgradeStatus.latestVersion} is available (current ${input.upgradeStatus.currentVersion}). Run \\`openmeld upgrade\\` to install it.`\n ),\n });\n return;\n case \"check_failed\":\n input.presenter.line({\n code: \"upgrade.check_failed\",\n text: formatInlineOpenMeldCliCommands(\n \"OpenMeld couldn't check for CLI updates. Check your internet connection, then run `openmeld upgrade --check` again.\"\n ),\n });\n return;\n default: {\n const exhaustiveStatus: never = input.upgradeStatus;\n throw new Error(\n `unsupported upgrade status: ${String(exhaustiveStatus)}`\n );\n }\n }\n}\n\nfunction emitTerminalUpgradeStatus(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n upgradeStatus: UpgradeStatus;\n}): boolean {\n if (input.upgradeStatus.status === \"up_to_date\") {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.up_to_date\",\n payload: input.upgradeStatus,\n });\n } else {\n input.presenter.line({\n code: \"upgrade.up_to_date\",\n text: `OpenMeld CLI is already up to date (${input.upgradeStatus.currentVersion}).`,\n });\n }\n return true;\n }\n\n if (input.upgradeStatus.status === \"downgrade_blocked\") {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.downgrade_blocked\",\n payload: input.upgradeStatus,\n });\n } else {\n input.presenter.line({\n code: \"upgrade.downgrade_blocked\",\n text: `OpenMeld CLI is already newer than ${formatUpgradeLatestSource(\n input.upgradeStatus.distribution\n )} (current v${input.upgradeStatus.currentVersion}, latest v${input.upgradeStatus.latestVersion}). Downgrade is blocked.`,\n });\n }\n return true;\n }\n\n return false;\n}\n\nfunction requireInstallableUpgradeStatus(\n upgradeStatus: UpgradeStatus\n): InstallableUpgradeStatus {\n if (upgradeStatus.status !== \"outdated\") {\n throw new Error(\n `internal upgrade error: ${upgradeStatus.status} status reached install`\n );\n }\n return upgradeStatus;\n}\n\nasync function installAndReconcileBinaryUpgrade(input: {\n upgradeStatus: InstallableUpgradeStatus;\n previousVersionState: OpenMeldVersionStateV1 | null;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n resolvedView: \"human\" | \"agent\";\n currentVersion: string;\n presenter: ReturnType<typeof createPresenter>;\n}): Promise<void> {\n if (!input.upgradeStatus.binaryRelease) {\n throw new Error(\n \"Binary upgrade failed before install: missing binary release metadata.\"\n );\n }\n const binaryRelease = input.upgradeStatus.binaryRelease;\n const updatePlan = await resolveCliBinaryUpdatePlan({\n baseBinaryPath: resolveBinaryUpgradeBasePath(),\n currentVersion: input.currentVersion,\n onDeltaFallback: (error) => {\n process.stderr.write(\n `Small update could not inspect the current CLI; downloading the full update instead. (${error.message})\\n`\n );\n },\n release: binaryRelease,\n });\n const binaryInstall = await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.installing\",\n startedCode: \"upgrade.installing\",\n startedText: `Downloading and installing OpenMeld CLI (about ${bytesToRoundedMb(updatePlan.downloadSizeBytes)} MB)`,\n completedText: `OpenMeld CLI ${input.upgradeStatus.latestVersion} installed.`,\n data: {\n recoveryUrl: input.manualUpgradeRecovery.value,\n downloadSizeBytes: updatePlan.downloadSizeBytes,\n distribution: input.upgradeStatus.distribution,\n preferredTransport: updatePlan.transport,\n },\n failureCode: \"cli.update.install_failed\",\n run: async () =>\n await installLatestCliBinary({\n release: binaryRelease,\n manualUpgradeRecovery: input.manualUpgradeRecovery,\n updatePlan,\n }),\n });\n const latestVersion = binaryInstall.version;\n await writeVersionState(\n buildNextVersionState({\n previous: input.previousVersionState,\n currentVersion: latestVersion,\n latestVersion,\n requiredFloor: input.upgradeStatus.requiredFloor,\n checkedAt: new Date().toISOString(),\n })\n );\n\n await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.service_alignment\",\n startedText: SERVICE_CHECK_STARTED_TEXT,\n completedText: SERVICE_CHECK_COMPLETED_TEXT,\n failureCode: \"cli.update.service_alignment_failed\",\n run: async () =>\n await handoffUpgradeServiceAlignmentToLatestBinary({\n resolvedView: input.resolvedView,\n command: binaryInstall.managedBinaryPath,\n argsPrefix: [],\n }),\n });\n\n emitUpgradeCompleted({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n previousVersion: input.currentVersion,\n currentVersion: latestVersion,\n });\n}\n\nfunction bytesToRoundedMb(sizeBytes: number): number {\n return Math.max(1, Math.round(sizeBytes / (1024 * 1024)));\n}\n\nasync function installAndReconcileNpmUpgrade(input: {\n upgradeStatus: InstallableUpgradeStatus;\n previousVersionState: OpenMeldVersionStateV1 | null;\n currentGlobalInstall: CurrentGlobalInstall | null;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n resolvedView: \"human\" | \"agent\";\n currentVersion: string;\n presenter: ReturnType<typeof createPresenter>;\n}): Promise<void> {\n const npmCommandSpec = await resolveCurrentNpmCommandSpec();\n await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.installing\",\n startedCode: \"upgrade.installing\",\n startedText: \"Downloading and installing OpenMeld CLI with npm\",\n completedText: `OpenMeld CLI ${input.upgradeStatus.latestVersion} installed.`,\n data: {\n command: input.manualUpgradeRecovery.value,\n distribution: input.upgradeStatus.distribution,\n },\n failureCode: \"cli.update.install_failed\",\n run: async () =>\n await installLatestPackage({\n npmCommandSpec,\n currentGlobalInstall: input.currentGlobalInstall,\n manualUpgradeCommand: input.manualUpgradeRecovery.value,\n }),\n });\n\n const latestVersion = input.upgradeStatus.latestVersion;\n await writeVersionState(\n buildNextVersionState({\n previous: input.previousVersionState,\n currentVersion: latestVersion,\n latestVersion,\n requiredFloor: input.upgradeStatus.requiredFloor,\n checkedAt: new Date().toISOString(),\n })\n );\n\n await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.service_alignment\",\n startedText: SERVICE_CHECK_STARTED_TEXT,\n completedText: SERVICE_CHECK_COMPLETED_TEXT,\n failureCode: \"cli.update.service_alignment_failed\",\n run: async () =>\n await handoffUpgradeServiceAlignmentToLatestBinary({\n resolvedView: input.resolvedView,\n command: process.execPath,\n argsPrefix: [\n input.currentGlobalInstall?.cliScriptPath ??\n (await resolveLatestInstalledCliScriptPath({\n npmCommandSpec,\n })),\n ],\n }),\n });\n\n emitUpgradeCompleted({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n previousVersion: input.currentVersion,\n currentVersion: latestVersion,\n });\n}\n\nasync function resolveUpgradeInstallContext(): Promise<{\n currentGlobalInstall: Awaited<\n ReturnType<typeof resolveCurrentNpmGlobalPackageInstall>\n > | null;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n}> {\n if (isBinaryDistribution()) {\n return {\n currentGlobalInstall: null,\n manualUpgradeRecovery: {\n kind: \"web\",\n value: resolveBinaryUpgradeRecoveryUrl(),\n },\n };\n }\n const currentGlobalInstall = await resolveCurrentNpmGlobalPackageInstall({\n packageName: OPENMELD_PACKAGE_NAME,\n ...(readOpenMeldToolsUpdateContextFromEnv() &&\n process.env.OPENMELD_INTERNAL_NPM_INSTALL_ENTRY\n ? { cliScriptPath: process.env.OPENMELD_INTERNAL_NPM_INSTALL_ENTRY }\n : {}),\n });\n if (\n process.env.OPENMELD_INTERNAL_MAINTENANCE_WORKER === \"1\" &&\n !currentGlobalInstall\n ) {\n throw new Error(\n \"OpenMeld could not identify the original npm installation. Automatic update stopped to preserve the current installation.\"\n );\n }\n return {\n currentGlobalInstall,\n manualUpgradeRecovery: {\n kind: \"command\",\n value: buildManualOpenMeldUpgradeCommand({\n globalPrefixPath: currentGlobalInstall?.globalPrefixPath ?? null,\n }),\n },\n };\n}\n\nexport function resolveBinaryUpgradeRecoveryUrl(\n env: NodeJS.ProcessEnv = process.env\n): string {\n return env.OPENMELD_ENV_PRESET === \"canary\" &&\n env.OPENMELD_CLI_BINARY_MANIFEST_URL === STAGING_BINARY_MANIFEST_URL\n ? STAGING_BINARY_UPGRADE_RECOVERY_URL\n : BINARY_UPGRADE_RECOVERY_URL;\n}\n\nfunction formatManualUpgradeRecovery(recovery: ManualUpgradeRecovery): string {\n return recovery.kind === \"web\"\n ? `Open ${recovery.value}, go to Computers, and use Update manually or Connect Computer to get a fresh setup command. Run that command on this Mac.`\n : `Run \\`${recovery.value}\\`.`;\n}\n\nfunction handleMissingVersionMetadata(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n manualUpgradeRecovery: ManualUpgradeRecovery;\n}): never {\n const errorMessage = formatOpenMeldCliTextBlock(\n `OpenMeld version metadata is missing, so automatic upgrade cannot continue.\\nManual fallback: ${formatManualUpgradeRecovery(input.manualUpgradeRecovery)}\\nIf you want to repair local OpenMeld state first, run \\`openmeld reset --yes\\` before \\`openmeld upgrade\\`.`\n );\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.metadata.missing\",\n payload: {\n summary:\n \"Local OpenMeld version metadata is missing, so automatic upgrade cannot verify downgrade safety.\",\n nextSteps: [\n formatManualUpgradeRecovery(input.manualUpgradeRecovery),\n \"openmeld-dev reset --yes --view agent\",\n \"openmeld-dev start\",\n \"openmeld-dev upgrade --check --view agent\",\n ],\n humanActionRequired: input.manualUpgradeRecovery.kind === \"web\",\n },\n });\n throw new UpgradeOutputHandledError(errorMessage);\n }\n throw new Error(errorMessage);\n}\n\nfunction handleUpgradeCheckFailure(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n upgradeStatus: Extract<UpgradeStatus, { status: \"check_failed\" }>;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n}): never {\n const errorMessage = formatOpenMeldCliTextBlock(\n `Version check failed (${input.upgradeStatus.error}). Upgrade stopped because downgrade protection requires confirming that ${formatUpgradeLatestSource(\n input.upgradeStatus.distribution\n )} is newer than the current CLI.\\nManual fallback: ${formatManualUpgradeRecovery(input.manualUpgradeRecovery)}`\n );\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.check_failed\",\n payload: {\n ...input.upgradeStatus,\n nextSteps: [\n formatManualUpgradeRecovery(input.manualUpgradeRecovery),\n \"openmeld-dev upgrade --check --view agent\",\n \"openmeld-dev upgrade --yes --view agent\",\n ],\n humanActionRequired: input.manualUpgradeRecovery.kind === \"web\",\n },\n });\n throw new UpgradeOutputHandledError(errorMessage);\n }\n throw new Error(errorMessage);\n}\n\nasync function resolveUpgradeStatus(input: {\n currentVersion: string;\n checkedAt: string;\n}): Promise<UpgradeStatus> {\n const distribution = resolveCurrentUpgradeDistribution();\n try {\n if (distribution === \"binary\") {\n const latestInfo = await fetchLatestCliBinaryRelease();\n const latestVersion = latestInfo.version;\n return {\n status: resolveUpgradeStatusKind(\n resolveVersionChangeDirection({\n fromVersion: input.currentVersion,\n toVersion: latestVersion,\n })\n ),\n distribution,\n currentVersion: input.currentVersion,\n latestVersion,\n requiredFloor: latestInfo.minRequiredCliVersion,\n checkedAt: input.checkedAt,\n binaryRelease: latestInfo,\n };\n }\n\n const latestInfo = await fetchLatestPackageInfo(OPENMELD_PACKAGE_NAME);\n const latestVersion = latestInfo.version;\n return {\n status: resolveUpgradeStatusKind(\n resolveVersionChangeDirection({\n fromVersion: input.currentVersion,\n toVersion: latestVersion,\n })\n ),\n distribution,\n currentVersion: input.currentVersion,\n latestVersion,\n requiredFloor: latestInfo.minRequiredCliVersion,\n checkedAt: input.checkedAt,\n };\n } catch (error) {\n return {\n status: \"check_failed\",\n distribution,\n currentVersion: input.currentVersion,\n checkedAt: input.checkedAt,\n error: toErrorMessage(error),\n };\n }\n}\n\nfunction resolveUpgradeStatusKind(\n direction: ReturnType<typeof resolveVersionChangeDirection>\n): \"up_to_date\" | \"outdated\" | \"downgrade_blocked\" {\n if (direction === \"upgrade\") {\n return \"outdated\";\n }\n if (direction === \"downgrade\") {\n return \"downgrade_blocked\";\n }\n return \"up_to_date\";\n}\n\nfunction resolveCurrentUpgradeDistribution(): UpgradeDistribution {\n return isBinaryDistribution() ? \"binary\" : \"npm\";\n}\n\nfunction formatUpgradeLatestSource(distribution: UpgradeDistribution): string {\n return distribution === \"binary\" ? \"published binary latest\" : \"npm latest\";\n}\n\nasync function resolveUpgradeConfirmation(input: {\n allowPrompt: boolean;\n yes: boolean;\n message: string;\n nonInteractiveError: string;\n resolvedView: \"human\" | \"agent\";\n scenario: \"outdated\" | \"check_failed\";\n}): Promise<boolean> {\n if (input.yes) {\n return true;\n }\n if (!input.allowPrompt) {\n if (input.resolvedView === \"agent\") {\n throw createUpgradeConfirmationGuideError(input.scenario);\n }\n throw new Error(\n formatOpenMeldCliTextBlock(\n `${input.nonInteractiveError}\\nexample: \\`openmeld upgrade --yes\\``\n )\n );\n }\n\n const choice = await confirm({\n message: input.message,\n initialValue: true,\n });\n if (isCancel(choice) || !choice) {\n cancel(\"Cancelled.\");\n return false;\n }\n return true;\n}\n\nasync function installLatestCliBinary(input: {\n release: CliBinaryReleaseInfo;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n updatePlan: CliBinaryUpdatePlan;\n}): Promise<{\n version: string;\n managedBinaryPath: string;\n}> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"openmeld-cli-upgrade-\"));\n try {\n const artifactBytes = await downloadCliBinaryUpdateArtifact({\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n onDeltaFallback: (error) => {\n process.stderr.write(\n `Small update could not be used; downloading the full update instead. (${error.message})\\n`\n );\n },\n plan: input.updatePlan,\n release: input.release,\n });\n const artifactPath = join(\n tmpDir,\n resolveCliBinaryArtifactName(input.release)\n );\n await writeFile(artifactPath, artifactBytes);\n await chmod(artifactPath, 0o755);\n await verifyCliBinaryCodeSignature({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath,\n allowUnsignedForDevelopment: resolveOpenMeldEnvPreset() === \"dev-local\",\n release: input.release,\n runCommand,\n });\n await prepareCliBinaryProcessHelper({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath,\n release: input.release,\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n });\n\n const installResult = await runCommand(artifactPath, [\n \"install-self\",\n \"--force\",\n \"--json\",\n ]);\n if (installResult.code !== 0) {\n const details =\n installResult.stderr.trim() || installResult.stdout.trim();\n throw new Error(\n formatOpenMeldCliTextBlock(\n `binary install-self failed (exit ${installResult.code})${\n details ? `: ${details}` : \"\"\n }\\nManual fallback: ${formatManualUpgradeRecovery(input.manualUpgradeRecovery)}`\n )\n );\n }\n\n const installed = parseInstallSelfJsonOutput(installResult.stdout);\n if (installed.version !== input.release.version) {\n throw new Error(\n `binary install-self returned version ${installed.version}, expected ${input.release.version}`\n );\n }\n return installed;\n } finally {\n await rm(tmpDir, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\nfunction resolveBinaryUpgradeBasePath(): string {\n return (\n process.env.OPENMELD_INTERNAL_UPGRADE_BASE_BINARY_PATH?.trim() ||\n process.execPath\n );\n}\n\nfunction resolveCliBinaryArtifactName(release: CliBinaryReleaseInfo): string {\n const pathName = new URL(release.url).pathname;\n return (\n basename(pathName) || `openmeld-cli-${release.platform}-${release.version}`\n );\n}\n\nfunction parseInstallSelfJsonOutput(output: string): {\n version: string;\n managedBinaryPath: string;\n} {\n const jsonLine = output\n .split(INSTALL_SELF_JSON_LINE_SPLIT_RE)\n .map((line) => line.trim())\n .find((line) => line.startsWith(\"{\"));\n if (!jsonLine) {\n throw new Error(\"binary install-self did not emit JSON output\");\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonLine);\n } catch (error) {\n throw new Error(\n `binary install-self emitted invalid JSON: ${toErrorMessage(error)}`\n );\n }\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"binary install-self emitted an invalid JSON payload\");\n }\n const record = parsed as Record<string, unknown>;\n if (record.type !== \"cli.install_self\") {\n throw new Error(\"binary install-self emitted an unexpected payload type\");\n }\n const version =\n typeof record.version === \"string\" ? record.version.trim() : \"\";\n const managedBinaryPath =\n typeof record.managedBinaryPath === \"string\"\n ? record.managedBinaryPath.trim()\n : \"\";\n if (!(version && managedBinaryPath)) {\n throw new Error(\"binary install-self emitted an incomplete JSON payload\");\n }\n return { version, managedBinaryPath };\n}\n\nasync function installLatestPackage(input: {\n npmCommandSpec: NpmCommandSpec;\n currentGlobalInstall: Awaited<\n ReturnType<typeof resolveCurrentNpmGlobalPackageInstall>\n >;\n manualUpgradeCommand: string;\n}): Promise<void> {\n const args = input.currentGlobalInstall\n ? [\n \"install\",\n \"-g\",\n \"--prefix\",\n input.currentGlobalInstall.globalPrefixPath,\n `${OPENMELD_PACKAGE_NAME}@latest`,\n ]\n : [\"install\", \"-g\", `${OPENMELD_PACKAGE_NAME}@latest`];\n const result = await runCommandSpec(input.npmCommandSpec, args);\n\n if (result.code !== 0) {\n const stderr = result.stderr.trim();\n const stdout = result.stdout.trim();\n const details = stderr || stdout;\n const diagnosis = diagnoseNpmPackageAcquisitionFailure({\n packageName: OPENMELD_PACKAGE_NAME,\n text: [stderr, stdout].filter(Boolean).join(\"\\n\"),\n });\n const diagnosisText = diagnosis\n ? `\\n${formatNpmPackageAcquisitionFailureDiagnosis(diagnosis)}`\n : \"\";\n throw new Error(\n formatOpenMeldCliTextBlock(\n `upgrade failed (exit ${result.code})${details ? `: ${details}` : \"\"}${diagnosisText}\\nManual fallback: \\`${input.manualUpgradeCommand}\\``\n )\n );\n }\n}\n\nasync function runInternalUpgradeServiceAlignment(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n daemonVersion: string;\n cliScriptPath?: string;\n}): Promise<void> {\n const publishedRelease = isBinaryDistribution()\n ? await fetchLatestCliBinaryRelease()\n : null;\n const binaryRelease = publishedRelease?.service\n ? { ...publishedRelease.service, minRequiredCliVersion: null }\n : undefined;\n const daemonVersion = await resolveCurrentDaemonExpectedVersion(\n binaryRelease?.version ?? input.daemonVersion\n );\n const inventory = await inspectDaemonServiceInventory({\n expectedVersion: daemonVersion,\n intendedMode: \"background\",\n intent: \"upgrade_reconcile\",\n });\n const target = buildDaemonServiceTargetSpec({\n daemonVersion,\n });\n const decision = resolveDaemonServiceAlignmentDecision({\n inventory,\n target,\n });\n\n if (decision.status === \"already_aligned\") {\n emitUpgradeReconcileAlreadyCurrent({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n expectedVersion: daemonVersion,\n });\n return;\n }\n\n if (decision.status === \"not_installed\") {\n emitUpgradeReconcileSkipped({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n reason: \"not_installed\",\n });\n return;\n }\n\n if (decision.status === \"blocked\") {\n const errorMessage = buildUpgradeAlignmentBlockedMessage(\n decision.reasonCodes\n );\n emitUpgradeReconcileFailure({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n message: errorMessage,\n errorMessage,\n backupDataPath: null,\n failureStage: null,\n evidencePath: null,\n });\n throw new UpgradeOutputHandledError(errorMessage);\n }\n\n const updateContext = readOpenMeldToolsUpdateContextFromEnv();\n const scheduled = await scheduleDaemonServiceUpdate({\n targetVersion: daemonVersion,\n ...(binaryRelease?.version === daemonVersion ? { binaryRelease } : {}),\n urgency: await resolveServiceUpdateUrgency(),\n ...(updateContext ?? {}),\n targetCliVersion: OPENMELD_VERSION,\n targetServiceVersion: daemonVersion,\n ...(input.cliScriptPath ? { cliScriptPath: input.cliScriptPath } : {}),\n });\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.scheduled\",\n text: \"OpenMeld will finish updating the Service in the background. You can close this Terminal.\",\n });\n return;\n }\n input.presenter.data({\n code: \"upgrade.reconcile.scheduled\",\n payload: {\n status: scheduled.status,\n jobId: scheduled.job.jobId,\n targetVersion: scheduled.job.targetVersion,\n },\n });\n}\n\nasync function handoffUpgradeServiceAlignmentToLatestBinary(input: {\n resolvedView: \"human\" | \"agent\";\n command: string;\n argsPrefix: string[];\n}): Promise<void> {\n const useInheritedOutput =\n input.resolvedView === \"human\" &&\n process.stdout.isTTY === true &&\n process.stderr.isTTY === true;\n const handoffResult = await runStreamingCommand(\n input.command,\n process.env.OPENMELD_INTERNAL_MAINTENANCE_WORKER === \"1\"\n ? [...input.argsPrefix, \"maintenance-align-service\"]\n : [\n ...input.argsPrefix,\n \"--view\",\n input.resolvedView,\n \"upgrade\",\n UPGRADE_INTERNAL_ALIGN_SERVICE_FLAG,\n ],\n {\n OPENMELD_INTERNAL_SKIP_STARTUP_UPGRADE: \"1\",\n },\n useInheritedOutput\n );\n if (handoffResult.code !== 0) {\n const processFailure = parseOpenMeldToolsUpdateFailureFrame(\n handoffResult.stdout\n );\n if (processFailure) {\n throw new OpenMeldToolsUpdateFailureError({\n failureCode: processFailure.failureCode,\n message: processFailure.detail,\n });\n }\n if (useInheritedOutput) {\n throw new Error(\n formatUpgradeReconcileFailureMessage({\n errorMessage: `latest CLI handoff exited with status ${String(\n handoffResult.code\n )}`,\n backupDataPath: null,\n failureStage: null,\n evidencePath: null,\n })\n );\n }\n const hasForwardedOutput =\n handoffResult.stderr.trim().length > 0 ||\n handoffResult.stdout.trim().length > 0;\n if (hasForwardedOutput) {\n throw new UpgradeOutputHandledError(\n \"Latest OpenMeld CLI handoff reported a service alignment failure.\"\n );\n }\n throw new Error(\n formatUpgradeReconcileFailureMessage({\n errorMessage: `latest CLI handoff exited with status ${String(handoffResult.code)}`,\n backupDataPath: null,\n failureStage: null,\n evidencePath: null,\n })\n );\n }\n}\n\nasync function resolveLatestInstalledCliScriptPath(input: {\n npmCommandSpec: NpmCommandSpec;\n}): Promise<string> {\n const npmRootResult = await runCommandSpec(input.npmCommandSpec, [\n \"root\",\n \"-g\",\n ]);\n if (npmRootResult.code !== 0) {\n throw new Error(\n npmRootResult.stderr.trim() ||\n npmRootResult.stdout.trim() ||\n \"npm root -g failed\"\n );\n }\n const cliScriptPath = join(\n npmRootResult.stdout.trim(),\n OPENMELD_PACKAGE_NAME,\n \"dist\",\n \"openmeld.js\"\n );\n await stat(cliScriptPath);\n return cliScriptPath;\n}\n\nasync function runCommand(\n command: string,\n args: string[]\n): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await runSpawnedCommand({\n command,\n args,\n forwardOutput: false,\n });\n}\n\nasync function runCommandSpec(\n commandSpec: NpmCommandSpec,\n args: string[]\n): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await runCommand(commandSpec.command, [\n ...commandSpec.argsPrefix,\n ...args,\n ]);\n}\n\nasync function runStreamingCommand(\n command: string,\n args: string[],\n envOverrides: NodeJS.ProcessEnv = {},\n useInheritedOutput = false\n): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await runSpawnedCommand({\n command,\n args,\n forwardOutput: true,\n envOverrides,\n useInheritedOutput,\n });\n}\n\nasync function runSpawnedCommand(input: {\n command: string;\n args: string[];\n forwardOutput: boolean;\n envOverrides?: NodeJS.ProcessEnv;\n useInheritedOutput?: boolean;\n}): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await new Promise((resolve, reject) => {\n const child = spawn(input.command, input.args, {\n // Preserve inherited terminal output, but never allocate a new console\n // when the same upgrade path runs under the background maintenance task.\n windowsHide: true,\n stdio:\n input.forwardOutput && input.useInheritedOutput\n ? [\"ignore\", \"inherit\", \"inherit\"]\n : [\"ignore\", \"pipe\", \"pipe\"],\n env: {\n ...process.env,\n ...(input.envOverrides ?? {}),\n },\n });\n let stdout = \"\";\n let stderr = \"\";\n\n if (child.stdout) {\n child.stdout.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n stdout += text;\n if (input.forwardOutput) {\n process.stdout.write(text);\n }\n });\n }\n if (child.stderr) {\n child.stderr.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n stderr += text;\n if (input.forwardOutput) {\n process.stderr.write(text);\n }\n });\n }\n child.on(\"error\", (error) => {\n reject(error);\n });\n child.on(\"close\", (code) => {\n resolve({\n code: Number(code ?? 1),\n stdout,\n stderr,\n });\n });\n });\n}\n\nfunction formatUpgradeReconcileFailureMessage(input: {\n errorMessage: string;\n backupDataPath: string | null;\n failureStage?: DaemonServiceFailureStage | null;\n evidencePath: string | null;\n}): string {\n const failureContext = formatDaemonFailureContextText({\n backupDataPath: input.backupDataPath,\n evidencePath: input.evidencePath,\n failureStage: input.failureStage ?? null,\n });\n return formatInlineOpenMeldCliCommands(\n `Service reconcile failed: ${input.errorMessage}. Please run \\`openmeld service repair\\` manually.${\n failureContext.length > 0 ? ` ${failureContext}` : \"\"\n }`\n );\n}\n\nfunction buildUpgradeAlignmentBlockedMessage(\n reasonCodes: readonly string[]\n): string {\n if (reasonCodes.includes(\"downgrade_blocked\")) {\n return formatDaemonServiceDowngradeBlockedRecommendation({\n expectedVersion: OPENMELD_VERSION,\n });\n }\n const reasonText =\n reasonCodes.length > 0 ? reasonCodes.join(\", \") : \"unknown\";\n return formatInlineOpenMeldCliCommands(\n `Service alignment is blocked (${reasonText}). Please run \\`openmeld service status\\` or \\`openmeld service repair\\` manually.`\n );\n}\n\nfunction emitUpgradeReconcileAlreadyCurrent(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n expectedVersion: string;\n}): void {\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.already_current\",\n text: `OpenMeld Service is already current (v${input.expectedVersion}).`,\n });\n return;\n }\n\n input.presenter.data({\n code: \"upgrade.reconcile.already_current\",\n payload: {\n status: \"already_current\",\n expectedVersion: input.expectedVersion,\n },\n });\n}\n\nfunction emitUpgradeReconcileFailure(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n message: string;\n errorMessage: string;\n backupDataPath: string | null;\n failureStage?: string | null;\n evidencePath: string | null;\n}): void {\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.failed\",\n text: input.message,\n });\n return;\n }\n\n input.presenter.data({\n code: \"upgrade.reconcile.failed\",\n payload: {\n ok: false,\n message: input.message,\n errorMessage: input.errorMessage,\n ...(input.backupDataPath ? { backupDataPath: input.backupDataPath } : {}),\n ...(input.failureStage ? { failureStage: input.failureStage } : {}),\n ...(input.evidencePath ? { evidencePath: input.evidencePath } : {}),\n command: \"openmeld service repair\",\n },\n });\n}\n\nfunction resolveUpgradeReconcileSkipMessage(reason: string): {\n text: string;\n command: string;\n} {\n if (reason === \"not_installed\") {\n return {\n text: formatDaemonServiceMissingRecommendation(),\n command: \"openmeld service install\",\n };\n }\n if (reason === \"downgrade_blocked\") {\n return {\n text: formatDaemonServiceDowngradeBlockedRecommendation({\n expectedVersion: OPENMELD_VERSION,\n }),\n command: \"openmeld upgrade\",\n };\n }\n return {\n text: formatInlineOpenMeldCliCommands(\n \"Skipped service reconcile. You can run `openmeld service update` later.\"\n ),\n command: \"openmeld service update\",\n };\n}\n\nfunction emitUpgradeReconcileSkipped(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n reason: string;\n}): void {\n const { text, command } = resolveUpgradeReconcileSkipMessage(input.reason);\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.skipped\",\n text,\n });\n return;\n }\n\n input.presenter.data({\n code: \"upgrade.reconcile.skipped\",\n payload: {\n skipped: true,\n reason: input.reason,\n command,\n },\n });\n}\n\ntype UpgradeStageHandle = {\n complete: (text: string) => void;\n fail: (text: string) => void;\n};\n\nfunction startUpgradeStage(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n code: string;\n startedCode?: string;\n startedText: string;\n data?: Record<string, unknown>;\n}): UpgradeStageHandle {\n const startedAtMs = Date.now();\n const startedCode = input.startedCode ?? `${input.code}.started`;\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: startedCode,\n payload: {\n ...(input.data ?? {}),\n message: `${input.startedText}...`,\n state: \"started\",\n },\n });\n } else {\n input.presenter.line({\n code: startedCode,\n text: `• ${input.startedText}...`,\n });\n }\n\n const finish = (state: \"completed\" | \"failed\", text: string): void => {\n const durationMs = resolveElapsedTimeMs(startedAtMs);\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: `${input.code}.${state}`,\n payload: {\n ...(input.data ?? {}),\n durationMs,\n message: text,\n state,\n },\n });\n return;\n }\n input.presenter.line({\n code: `${input.code}.${state}`,\n text: `${state === \"completed\" ? \"✓\" : \"!\"} ${text} · ${formatElapsedTime(durationMs)}`,\n });\n };\n\n return {\n complete: (text) => finish(\"completed\", text),\n fail: (text) => finish(\"failed\", text),\n };\n}\n\nasync function runUpgradeStage<T>(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n code: string;\n startedCode?: string;\n startedText: string;\n completedText: string;\n failedText?: string;\n failureCode?: OpenMeldToolsUpdateFailureCode;\n data?: Record<string, unknown>;\n run: () => Promise<T>;\n}): Promise<T> {\n const stage = startUpgradeStage(input);\n try {\n const result = await input.run();\n stage.complete(input.completedText);\n return result;\n } catch (error) {\n stage.fail(input.failedText ?? `${input.startedText} failed.`);\n throw input.failureCode\n ? withOpenMeldToolsUpdateFailure(error, input.failureCode)\n : error;\n }\n}\n\nfunction emitUpgradeCompleted(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n previousVersion: string;\n currentVersion: string;\n}): void {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.completed\",\n payload: {\n previousVersion: input.previousVersion,\n currentVersion: input.currentVersion,\n },\n });\n return;\n }\n input.presenter.line({\n code: \"upgrade.completed\",\n text: \"OpenMeld CLI upgrade completed.\",\n });\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upgrade-wV53HJsz.js","names":[],"sources":["../src/runtime/current-npm-global-install.ts","../src/runtime/manual-upgrade.ts","../src/runtime/npm-package-acquisition-diagnostics.ts","../src/commands/top-level-agent-overview.ts","../src/commands/upgrade.ts"],"sourcesContent":["import { realpath, stat } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\n\nexport type NpmCommandSpec = {\n command: string;\n argsPrefix: string[];\n};\n\nexport type CurrentNpmGlobalPackageInstall = {\n cliScriptPath: string;\n globalPrefixPath: string;\n packageRootPath: string;\n};\n\nexport async function resolveCurrentNpmCommandSpec(\n input: { nodeExecutablePath?: string; platform?: NodeJS.Platform } = {}\n): Promise<NpmCommandSpec> {\n const nodeExecutablePath = input.nodeExecutablePath ?? process.execPath;\n const platform = input.platform ?? process.platform;\n const nodeExecutableDir = dirname(nodeExecutablePath);\n const npmWrapperPath = join(\n nodeExecutableDir,\n platform === \"win32\" ? \"npm.cmd\" : \"npm\"\n );\n // Windows .cmd files cannot be spawned directly without a command shell.\n // Run npm's JavaScript with the selected Node instead of adding shell parsing.\n if (platform !== \"win32\" && (await pathExists(npmWrapperPath))) {\n return {\n command: npmWrapperPath,\n argsPrefix: [],\n };\n }\n\n for (const candidate of resolveNpmCliScriptCandidates({\n nodeExecutableDir,\n platform,\n })) {\n if (await pathExists(candidate)) {\n return {\n command: nodeExecutablePath,\n argsPrefix: [candidate],\n };\n }\n }\n\n throw new Error(\n `OpenMeld could not locate npm for the current CLI runtime at ${nodeExecutablePath}.`\n );\n}\n\nexport async function resolveCurrentNpmGlobalPackageInstall(input: {\n packageName: string;\n cliScriptPath?: string;\n}): Promise<CurrentNpmGlobalPackageInstall | null> {\n const cliScriptPath = await resolveCurrentCliScriptPath(input.cliScriptPath);\n if (!cliScriptPath) {\n return null;\n }\n\n const packageRootPath = dirname(dirname(cliScriptPath));\n if (basename(packageRootPath) !== input.packageName) {\n return null;\n }\n\n const globalNodeModulesRootPath = dirname(packageRootPath);\n if (basename(globalNodeModulesRootPath) !== \"node_modules\") {\n return null;\n }\n\n const nodeModulesParentPath = dirname(globalNodeModulesRootPath);\n const globalPrefixPath =\n basename(nodeModulesParentPath) === \"lib\"\n ? dirname(nodeModulesParentPath)\n : nodeModulesParentPath;\n\n return {\n cliScriptPath,\n globalPrefixPath,\n packageRootPath,\n };\n}\n\nasync function resolveCurrentCliScriptPath(\n cliScriptPath?: string\n): Promise<string | null> {\n const rawCliScriptPath = cliScriptPath ?? process.argv[1];\n if (!rawCliScriptPath) {\n return null;\n }\n\n const resolvedCliScriptPath = await realpath(rawCliScriptPath).catch(() => {\n return rawCliScriptPath;\n });\n\n return normalizePathForComparison(resolvedCliScriptPath).endsWith(\n \"/dist/openmeld.js\"\n )\n ? resolvedCliScriptPath\n : null;\n}\n\nfunction resolveNpmCliScriptCandidates(input: {\n nodeExecutableDir: string;\n platform: NodeJS.Platform;\n}): string[] {\n if (input.platform === \"win32\") {\n return [\n join(input.nodeExecutableDir, \"node_modules\", \"npm\", \"bin\", \"npm-cli.js\"),\n ];\n }\n\n return [\n join(\n input.nodeExecutableDir,\n \"..\",\n \"lib\",\n \"node_modules\",\n \"npm\",\n \"bin\",\n \"npm-cli.js\"\n ),\n ];\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction normalizePathForComparison(path: string): string {\n return path.replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n","export const MANUAL_OPENMELD_UPGRADE_COMMAND = \"npm install -g openmeld@latest\";\nconst SAFE_SHELL_ARGUMENT_PATTERN = /^[A-Za-z0-9_./:@%+=,-]+$/;\n\nexport function buildManualOpenMeldUpgradeCommand(\n input: { globalPrefixPath?: string | null } = {}\n): string {\n const globalPrefixPath = input.globalPrefixPath?.trim();\n if (!globalPrefixPath) {\n return MANUAL_OPENMELD_UPGRADE_COMMAND;\n }\n return `npm install -g --prefix ${formatShellArgument(globalPrefixPath)} openmeld@latest`;\n}\n\nexport const OPENMELD_UPGRADE_METADATA_RECOVERY_HINTS = [\n MANUAL_OPENMELD_UPGRADE_COMMAND,\n \"openmeld reset --yes\",\n \"openmeld start\",\n \"openmeld upgrade --check\",\n] as const;\n\nexport const OPENMELD_UPGRADE_FAILURE_HINTS = [\n MANUAL_OPENMELD_UPGRADE_COMMAND,\n \"openmeld upgrade --check\",\n \"openmeld upgrade --yes\",\n] as const;\n\nfunction formatShellArgument(value: string): string {\n if (SAFE_SHELL_ARGUMENT_PATTERN.test(value)) {\n return value;\n }\n return JSON.stringify(value);\n}\n","const DEFAULT_PACKAGE_NAME = \"openmeld\";\n\nconst UNRESOLVED_PACKAGE_DEPENDENCY_PATTERN =\n /Unsupported URL Type [\"'](?:catalog|workspace):[\"']/iu;\n\nconst LOCAL_PROXY_FAILURE_PATTERN =\n /\\b(?:connect\\s+(?:EPERM|ECONNREFUSED|ECONNRESET|ETIMEDOUT)\\s+(?:127\\.0\\.0\\.1|localhost)(?::\\d+)?|reason:\\s*connect\\s+(?:EPERM|ECONNREFUSED|ECONNRESET|ETIMEDOUT)\\s+(?:127\\.0\\.0\\.1|localhost)(?::\\d+)?)/iu;\nconst NPM_CACHE_OR_LOG_PERMISSION_PATTERN =\n /(?:log files were not written|(?:EACCES|EPERM)[\\s\\S]{0,160}\\.npm|\\.npm[\\s\\S]{0,160}(?:EACCES|EPERM))/iu;\nconst NPM_REGISTRY_FAILURE_PATTERN = /registry\\.npmjs\\.org/iu;\n\nexport type NpmPackageAcquisitionFailureDiagnosis = {\n code:\n | \"npm_package_dependency_invalid\"\n | \"npm_local_proxy_unreachable\"\n | \"npm_cache_or_log_unwritable\"\n | \"npm_registry_fetch_failed\";\n message: string;\n nextSteps: string[];\n};\n\nexport function diagnoseNpmPackageAcquisitionFailure(input: {\n packageName?: string;\n text: string;\n}): NpmPackageAcquisitionFailureDiagnosis | null {\n const text = input.text.trim();\n if (!text) {\n return null;\n }\n const packageName = input.packageName ?? DEFAULT_PACKAGE_NAME;\n\n if (UNRESOLVED_PACKAGE_DEPENDENCY_PATTERN.test(text)) {\n return {\n code: \"npm_package_dependency_invalid\",\n message:\n \"npm found a dependency reference that cannot be installed outside its development workspace.\",\n nextSteps: [\n \"Share the package version and the npm error above with OpenMeld support. Remove device codes and other credentials from the log first.\",\n \"Retry with a fresh setup command after the corrected CLI release is available. Reinstalling Node.js or resetting OpenMeld does not fix this dependency error.\",\n ],\n };\n }\n\n if (LOCAL_PROXY_FAILURE_PATTERN.test(text)) {\n return {\n code: \"npm_local_proxy_unreachable\",\n message:\n \"npm is trying to download the OpenMeld CLI through a local proxy, but that proxy is not reachable.\",\n nextSteps: [\n \"Start the local proxy app or turn off the npm proxy setting.\",\n \"Check npm proxy settings with `npm config get proxy` and `npm config get https-proxy`.\",\n `Retry the OpenMeld setup or upgrade command after npm can reach ${packageName}.`,\n ],\n };\n }\n\n if (NPM_CACHE_OR_LOG_PERMISSION_PATTERN.test(text)) {\n return {\n code: \"npm_cache_or_log_unwritable\",\n message:\n \"npm cannot write to its local cache or log directory, so it cannot install the OpenMeld CLI.\",\n nextSteps: [\n \"Check ownership and permissions for `~/.npm` and `~/.npm/_logs`.\",\n \"Create the missing npm log directory if needed with `mkdir -p ~/.npm/_logs`.\",\n `Retry the OpenMeld setup or upgrade command after npm can install ${packageName}.`,\n ],\n };\n }\n\n if (NPM_REGISTRY_FAILURE_PATTERN.test(text) || text.includes(packageName)) {\n return {\n code: \"npm_registry_fetch_failed\",\n message:\n \"npm could not download the latest OpenMeld CLI from the npm registry.\",\n nextSteps: [\n \"Check that this computer can reach `https://registry.npmjs.org`.\",\n \"Fix the npm/network error shown above, then retry the OpenMeld setup or upgrade command.\",\n ],\n };\n }\n\n return null;\n}\n\nexport function formatNpmPackageAcquisitionFailureDiagnosis(\n diagnosis: NpmPackageAcquisitionFailureDiagnosis\n): string {\n return [\n `Detected cause: ${diagnosis.message}`,\n \"Next steps:\",\n ...diagnosis.nextSteps.map((step) => `- ${step}`),\n ].join(\"\\n\");\n}\n","import { buildAgentOverviewFromContract } from \"../command-contracts/helpers\";\nimport { getCommandEntryContract } from \"../command-contracts/registry\";\nimport type { Presenter } from \"../runtime/presenter\";\nimport { outJsonLine } from \"../ui/io\";\n\nexport type TopLevelAgentOverviewCommand =\n | \"root\"\n | \"view\"\n | \"doctor\"\n | \"whoami\"\n | \"upgrade\"\n | \"repair.local_state\"\n | \"uninstall\"\n | \"reset\";\n\nexport function emitTopLevelAgentOverview(input: {\n presenter: Presenter;\n command: TopLevelAgentOverviewCommand;\n}): void {\n input.presenter.data({\n code: `${input.command}.agent_overview`,\n payload: buildTopLevelAgentOverviewPayload(input.command),\n });\n}\n\nexport function emitTopLevelCliAgentOverview(\n command: TopLevelAgentOverviewCommand\n): void {\n outJsonLine({\n type: \"result\",\n code: `${command}.agent_overview`,\n payload: buildTopLevelAgentOverviewPayload(command),\n });\n}\n\nfunction buildTopLevelAgentOverviewPayload(\n command: TopLevelAgentOverviewCommand\n): Record<string, unknown> {\n const contract = getCommandEntryContract(resolveTopLevelEntryName(command));\n if (!contract?.agentOverview) {\n throw new Error(`missing ${command} command contract`);\n }\n return buildAgentOverviewFromContract({\n context: {},\n overview: contract.agentOverview,\n });\n}\n\nfunction resolveTopLevelEntryName(command: TopLevelAgentOverviewCommand) {\n switch (command) {\n case \"repair.local_state\":\n return \"repair.local-state\" as const;\n default:\n return command;\n }\n}\n","import { spawn } from \"node:child_process\";\nimport { chmod, mkdtemp, rm, stat, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { cancel, confirm, isCancel } from \"@clack/prompts\";\nimport {\n allowUnsignedWindowsInternalPreview,\n type CliBinaryUpdatePlan,\n DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n downloadCliBinaryUpdateArtifact,\n prepareCliBinaryProcessHelper,\n resolveCliBinaryUpdatePlan,\n verifyCliBinaryCodeSignature,\n} from \"@openmeld/local-service/cli-binary-update-artifact\";\nimport type {\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateOperation,\n} from \"@openmeld/schemas/types\";\nimport { resolveServiceUpdateUrgency } from \"../command-entry-checks/service-update-urgency\";\nimport { hasIndependentMaintenanceRegistration } from \"../config/daemon-service-update-worker-registration\";\nimport { resolveOpenMeldEnvPreset } from \"../config/paths\";\nimport {\n buildNextVersionState,\n type CliBinaryReleaseInfo,\n fetchLatestCliBinaryRelease,\n fetchLatestPackageInfo,\n type OpenMeldVersionStateV1,\n readVersionState,\n writeVersionState,\n} from \"../config/version-state\";\nimport { resolveCurrentDaemonExpectedVersion } from \"../local-service/lifecycle/current-daemon-version\";\nimport {\n buildDaemonServiceTargetSpec,\n resolveDaemonServiceAlignmentDecision,\n} from \"../local-service/lifecycle/daemon-service-alignment-target\";\nimport {\n type DaemonServiceFailureStage,\n formatDaemonFailureContextText,\n} from \"../local-service/lifecycle/daemon-service-evidence\";\nimport { inspectDaemonServiceInventory } from \"../local-service/lifecycle/daemon-service-inventory\";\nimport { scheduleDaemonServiceUpdate } from \"../local-service/lifecycle/daemon-service-update-coordinator\";\nimport { resolveVersionChangeDirection } from \"../local-service/lifecycle/version-change-direction\";\nimport { readOpenMeldToolsUpdateContextFromEnv } from \"../local-service/maintenance/openmeld-tools-update-context\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"../local-service/maintenance/openmeld-tools-update-coordinator\";\nimport {\n OpenMeldToolsUpdateFailureError,\n withOpenMeldToolsUpdateFailure,\n} from \"../local-service/maintenance/openmeld-tools-update-failure\";\nimport { resolveExternalOpenMeldToolsUpdate } from \"../local-service/maintenance/openmeld-tools-update-join\";\nimport { parseOpenMeldToolsUpdateFailureFrame } from \"../local-service/maintenance/openmeld-tools-update-process-frame\";\nimport {\n formatInlineOpenMeldCliCommands,\n formatOpenMeldCliTextBlock,\n} from \"../runtime/cli-entry-command\";\nimport { type RuntimeContext, resolveRuntimeContext } from \"../runtime/context\";\nimport {\n type NpmCommandSpec,\n resolveCurrentNpmCommandSpec,\n resolveCurrentNpmGlobalPackageInstall,\n} from \"../runtime/current-npm-global-install\";\nimport { isBinaryDistribution } from \"../runtime/distribution\";\nimport { createUpgradeConfirmationGuideError } from \"../runtime/dual-view-guide-catalog\";\nimport { canUseInteractivePrompts } from \"../runtime/interaction\";\nimport { buildManualOpenMeldUpgradeCommand } from \"../runtime/manual-upgrade\";\nimport {\n diagnoseNpmPackageAcquisitionFailure,\n formatNpmPackageAcquisitionFailureDiagnosis,\n} from \"../runtime/npm-package-acquisition-diagnostics\";\nimport { createPresenter } from \"../runtime/presenter/index\";\nimport { OPENMELD_VERSION } from \"../runtime/version\";\nimport {\n formatDaemonServiceDowngradeBlockedRecommendation,\n formatDaemonServiceMissingRecommendation,\n} from \"../system/local-service-install-attention\";\nimport { formatElapsedTime, resolveElapsedTimeMs } from \"../ui/elapsed-time\";\nimport { emitTopLevelAgentOverview } from \"./top-level-agent-overview\";\n\nconst OPENMELD_PACKAGE_NAME = \"openmeld\";\nconst BINARY_UPGRADE_RECOVERY_URL = \"https://openmeld.ai\";\nconst STAGING_BINARY_MANIFEST_URL =\n \"https://staging.openmeld.ai/cli/manifest.json\";\nconst STAGING_BINARY_UPGRADE_RECOVERY_URL = \"https://staging.openmeld.ai\";\nconst INSTALL_SELF_JSON_LINE_SPLIT_RE = /\\r?\\n/u;\nconst SERVICE_CHECK_STARTED_TEXT = \"Checking OpenMeld Service\";\nconst SERVICE_CHECK_COMPLETED_TEXT = \"OpenMeld Service check finished.\";\nexport const UPGRADE_INTERNAL_ALIGN_SERVICE_FLAG = \"--internal-align-service\";\n\nclass UpgradeOutputHandledError extends Error {\n readonly code = \"openmeld.upgrade.output_handled\";\n\n constructor(message: string) {\n super(message);\n this.name = \"UpgradeOutputHandledError\";\n }\n}\n\nexport function isUpgradeOutputHandledError(\n error: unknown\n): error is UpgradeOutputHandledError {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n if (\n current instanceof UpgradeOutputHandledError ||\n (current as { code?: unknown }).code === \"openmeld.upgrade.output_handled\"\n ) {\n return true;\n }\n current = (current as { cause?: unknown }).cause;\n }\n return false;\n}\n\ntype UpgradeDistribution = \"npm\" | \"binary\";\ntype ManualUpgradeRecovery =\n | { kind: \"command\"; value: string }\n | { kind: \"web\"; value: string };\n\ntype ResolvedUpgradeStatusBase = {\n distribution: UpgradeDistribution;\n currentVersion: string;\n latestVersion: string;\n requiredFloor: string | null;\n checkedAt: string;\n binaryRelease?: CliBinaryReleaseInfo;\n};\n\ntype InstallableUpgradeStatus = ResolvedUpgradeStatusBase & {\n status: \"outdated\";\n};\n\ntype TerminalUpgradeStatus = ResolvedUpgradeStatusBase & {\n status: \"up_to_date\" | \"downgrade_blocked\";\n};\n\ntype UpgradeStatus =\n | InstallableUpgradeStatus\n | TerminalUpgradeStatus\n | {\n status: \"check_failed\";\n distribution: UpgradeDistribution;\n currentVersion: string;\n checkedAt: string;\n error: string;\n };\n\ntype CurrentGlobalInstall = Awaited<\n ReturnType<typeof resolveCurrentNpmGlobalPackageInstall>\n>;\n\nexport async function runUpgrade(input: {\n view?: string;\n yes?: boolean;\n check?: boolean;\n internalAlignService?: boolean;\n}): Promise<void> {\n const runtime = await resolveRuntimeContext({\n view: input.view,\n });\n await runUpgradeWithRuntime(input, runtime);\n}\n\nexport async function runMaintenanceUpgrade(\n internalAlignService = false\n): Promise<void> {\n if (!readOpenMeldToolsUpdateContextFromEnv()) {\n throw new Error(\"OpenMeld maintenance requires a saved update operation.\");\n }\n await runUpgradeWithRuntime(\n { yes: true, internalAlignService },\n {\n viewMode: \"agent\",\n resolvedView: \"agent\",\n interactive: false,\n }\n );\n}\n\nasync function runUpgradeWithRuntime(\n input: {\n yes?: boolean;\n check?: boolean;\n internalAlignService?: boolean;\n },\n runtime: RuntimeContext\n): Promise<void> {\n const presenter = createPresenter(runtime);\n if (runtime.resolvedView === \"agent\") {\n emitTopLevelAgentOverview({\n presenter,\n command: \"upgrade\",\n });\n }\n\n const currentUpdate = readOpenMeldToolsUpdateContextFromEnv();\n if (!input.check) {\n const existingUpdate = await resolveExternalOpenMeldToolsUpdate({\n currentOperationId: currentUpdate?.operationId,\n });\n if (existingUpdate) {\n emitUpgradeAlreadyRunning({\n operation: existingUpdate,\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n }\n\n if (input.internalAlignService) {\n await alignServiceWithCurrentCli({\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n\n const allowPrompt = canUseInteractivePrompts(runtime);\n const currentVersion = OPENMELD_VERSION;\n const { currentGlobalInstall, manualUpgradeRecovery } =\n await resolveUpgradeInstallContext();\n const previousVersionState = await readVersionState();\n if (!previousVersionState) {\n handleMissingVersionMetadata({\n presenter,\n resolvedView: runtime.resolvedView,\n manualUpgradeRecovery,\n });\n }\n\n const checkedAt = new Date().toISOString();\n const checkingStage = startUpgradeStage({\n presenter,\n resolvedView: runtime.resolvedView,\n code: \"upgrade.checking\",\n startedText: \"Checking for OpenMeld updates\",\n });\n const upgradeStatus = await resolveUpgradeStatus({\n currentVersion,\n checkedAt,\n });\n if (upgradeStatus.status === \"check_failed\") {\n checkingStage.fail(\"Could not check for OpenMeld updates.\");\n } else {\n checkingStage.complete(\"Update check finished.\");\n }\n if (upgradeStatus.status !== \"check_failed\") {\n await writeVersionState(\n buildNextVersionState({\n previous: previousVersionState,\n currentVersion,\n latestVersion: upgradeStatus.latestVersion,\n requiredFloor: upgradeStatus.requiredFloor,\n checkedAt,\n })\n );\n }\n\n if (input.check) {\n emitUpgradeCheckStatus({\n presenter,\n resolvedView: runtime.resolvedView,\n upgradeStatus,\n });\n return;\n }\n\n if (\n emitTerminalUpgradeStatus({\n presenter,\n resolvedView: runtime.resolvedView,\n upgradeStatus,\n })\n ) {\n await alignServiceWithCurrentCli({\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n\n if (\n upgradeStatus.status === \"outdated\" &&\n !(await resolveUpgradeConfirmation({\n allowPrompt,\n yes: Boolean(input.yes),\n message: `Upgrade OpenMeld CLI from ${upgradeStatus.currentVersion} to ${upgradeStatus.latestVersion}?`,\n nonInteractiveError:\n \"openmeld upgrade requires --yes in non-interactive mode when upgrade is available\",\n resolvedView: runtime.resolvedView,\n scenario: \"outdated\",\n }))\n ) {\n return;\n }\n\n if (upgradeStatus.status === \"check_failed\") {\n handleUpgradeCheckFailure({\n presenter,\n resolvedView: runtime.resolvedView,\n upgradeStatus,\n manualUpgradeRecovery,\n });\n }\n\n const installableUpgradeStatus =\n requireInstallableUpgradeStatus(upgradeStatus);\n if (!currentUpdate && (await hasIndependentMaintenanceRegistration())) {\n await requestMaintainedUpgrade({\n presenter,\n resolvedView: runtime.resolvedView,\n });\n return;\n }\n if (installableUpgradeStatus.distribution === \"binary\") {\n await installAndReconcileBinaryUpgrade({\n upgradeStatus: installableUpgradeStatus,\n previousVersionState,\n manualUpgradeRecovery,\n resolvedView: runtime.resolvedView,\n currentVersion,\n presenter,\n });\n return;\n }\n\n await installAndReconcileNpmUpgrade({\n upgradeStatus: installableUpgradeStatus,\n previousVersionState,\n currentGlobalInstall,\n manualUpgradeRecovery,\n resolvedView: runtime.resolvedView,\n currentVersion,\n presenter,\n });\n}\n\nasync function alignServiceWithCurrentCli(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n}): Promise<void> {\n try {\n await runInternalUpgradeServiceAlignment({\n ...input,\n daemonVersion: await resolveCurrentDaemonExpectedVersion(),\n ...(process.argv[1] && !isBinaryDistribution()\n ? { cliScriptPath: process.argv[1] }\n : {}),\n });\n } catch (error) {\n throw withOpenMeldToolsUpdateFailure(\n error,\n \"cli.update.service_alignment_failed\"\n );\n }\n}\n\nasync function requestMaintainedUpgrade(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n}): Promise<void> {\n const coordinator = createOpenMeldToolsUpdateCoordinator(\n {},\n { executeUpdates: false }\n );\n const result = await coordinator.requestUpdate({ requestSource: \"cli\" });\n if (result.status === \"already_running\") {\n emitUpgradeAlreadyRunning({ ...input, operation: result.operation });\n return;\n }\n if (result.status !== \"started\" && result.status !== \"current\") {\n throw new Error(\n \"OpenMeld could not start the update. Try again when the update channel is available.\"\n );\n }\n if (input.resolvedView === \"agent\") {\n input.presenter.data({ code: \"upgrade.maintenance\", payload: result });\n return;\n }\n input.presenter.line({\n code: \"upgrade.maintenance\",\n text:\n result.status === \"current\"\n ? \"OpenMeld is up to date.\"\n : \"OpenMeld is updating in the background. You can close this Terminal.\",\n });\n}\n\nfunction emitUpgradeAlreadyRunning(input: {\n operation: OpenMeldToolsUpdateOperation;\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n}): void {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.already_running\",\n payload: {\n status: \"already_running\",\n operation: input.operation,\n },\n });\n return;\n }\n input.presenter.line({\n code: \"upgrade.already_running\",\n text: \"An OpenMeld update is already in progress. OpenMeld will keep working in the background, so this command did not start another update. You can close this Terminal.\",\n data: {\n operationId: input.operation.operationId,\n phase: input.operation.phase,\n targetVersion: input.operation.targetVersion,\n },\n });\n}\n\nfunction emitUpgradeCheckStatus(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n upgradeStatus: UpgradeStatus;\n}): void {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.check\",\n payload: input.upgradeStatus,\n });\n return;\n }\n\n switch (input.upgradeStatus.status) {\n case \"up_to_date\":\n case \"downgrade_blocked\":\n emitTerminalUpgradeStatus(input);\n return;\n case \"outdated\":\n input.presenter.line({\n code: \"upgrade.update_available\",\n text: formatInlineOpenMeldCliCommands(\n `OpenMeld CLI ${input.upgradeStatus.latestVersion} is available (current ${input.upgradeStatus.currentVersion}). Run \\`openmeld upgrade\\` to install it.`\n ),\n });\n return;\n case \"check_failed\":\n input.presenter.line({\n code: \"upgrade.check_failed\",\n text: formatInlineOpenMeldCliCommands(\n \"OpenMeld couldn't check for CLI updates. Check your internet connection, then run `openmeld upgrade --check` again.\"\n ),\n });\n return;\n default: {\n const exhaustiveStatus: never = input.upgradeStatus;\n throw new Error(\n `unsupported upgrade status: ${String(exhaustiveStatus)}`\n );\n }\n }\n}\n\nfunction emitTerminalUpgradeStatus(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n upgradeStatus: UpgradeStatus;\n}): boolean {\n if (input.upgradeStatus.status === \"up_to_date\") {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.up_to_date\",\n payload: input.upgradeStatus,\n });\n } else {\n input.presenter.line({\n code: \"upgrade.up_to_date\",\n text: `OpenMeld CLI is already up to date (${input.upgradeStatus.currentVersion}).`,\n });\n }\n return true;\n }\n\n if (input.upgradeStatus.status === \"downgrade_blocked\") {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.downgrade_blocked\",\n payload: input.upgradeStatus,\n });\n } else {\n input.presenter.line({\n code: \"upgrade.downgrade_blocked\",\n text: `OpenMeld CLI is already newer than ${formatUpgradeLatestSource(\n input.upgradeStatus.distribution\n )} (current v${input.upgradeStatus.currentVersion}, latest v${input.upgradeStatus.latestVersion}). Downgrade is blocked.`,\n });\n }\n return true;\n }\n\n return false;\n}\n\nfunction requireInstallableUpgradeStatus(\n upgradeStatus: UpgradeStatus\n): InstallableUpgradeStatus {\n if (upgradeStatus.status !== \"outdated\") {\n throw new Error(\n `internal upgrade error: ${upgradeStatus.status} status reached install`\n );\n }\n return upgradeStatus;\n}\n\nasync function installAndReconcileBinaryUpgrade(input: {\n upgradeStatus: InstallableUpgradeStatus;\n previousVersionState: OpenMeldVersionStateV1 | null;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n resolvedView: \"human\" | \"agent\";\n currentVersion: string;\n presenter: ReturnType<typeof createPresenter>;\n}): Promise<void> {\n if (!input.upgradeStatus.binaryRelease) {\n throw new Error(\n \"Binary upgrade failed before install: missing binary release metadata.\"\n );\n }\n const binaryRelease = input.upgradeStatus.binaryRelease;\n const updatePlan = await resolveCliBinaryUpdatePlan({\n baseBinaryPath: resolveBinaryUpgradeBasePath(),\n currentVersion: input.currentVersion,\n onDeltaFallback: (error) => {\n process.stderr.write(\n `Small update could not inspect the current CLI; downloading the full update instead. (${error.message})\\n`\n );\n },\n release: binaryRelease,\n });\n const binaryInstall = await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.installing\",\n startedCode: \"upgrade.installing\",\n startedText: `Downloading and installing OpenMeld CLI (about ${bytesToRoundedMb(updatePlan.downloadSizeBytes)} MB)`,\n completedText: `OpenMeld CLI ${input.upgradeStatus.latestVersion} installed.`,\n data: {\n recoveryUrl: input.manualUpgradeRecovery.value,\n downloadSizeBytes: updatePlan.downloadSizeBytes,\n distribution: input.upgradeStatus.distribution,\n preferredTransport: updatePlan.transport,\n },\n failureCode: \"cli.update.install_failed\",\n run: async () =>\n await installLatestCliBinary({\n release: binaryRelease,\n manualUpgradeRecovery: input.manualUpgradeRecovery,\n updatePlan,\n }),\n });\n const latestVersion = binaryInstall.version;\n await writeVersionState(\n buildNextVersionState({\n previous: input.previousVersionState,\n currentVersion: latestVersion,\n latestVersion,\n requiredFloor: input.upgradeStatus.requiredFloor,\n checkedAt: new Date().toISOString(),\n })\n );\n\n await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.service_alignment\",\n startedText: SERVICE_CHECK_STARTED_TEXT,\n completedText: SERVICE_CHECK_COMPLETED_TEXT,\n failureCode: \"cli.update.service_alignment_failed\",\n run: async () =>\n await handoffUpgradeServiceAlignmentToLatestBinary({\n resolvedView: input.resolvedView,\n command: binaryInstall.managedBinaryPath,\n argsPrefix: [],\n }),\n });\n\n emitUpgradeCompleted({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n previousVersion: input.currentVersion,\n currentVersion: latestVersion,\n });\n}\n\nfunction bytesToRoundedMb(sizeBytes: number): number {\n return Math.max(1, Math.round(sizeBytes / (1024 * 1024)));\n}\n\nasync function installAndReconcileNpmUpgrade(input: {\n upgradeStatus: InstallableUpgradeStatus;\n previousVersionState: OpenMeldVersionStateV1 | null;\n currentGlobalInstall: CurrentGlobalInstall | null;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n resolvedView: \"human\" | \"agent\";\n currentVersion: string;\n presenter: ReturnType<typeof createPresenter>;\n}): Promise<void> {\n const npmCommandSpec = await resolveCurrentNpmCommandSpec();\n await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.installing\",\n startedCode: \"upgrade.installing\",\n startedText: \"Downloading and installing OpenMeld CLI with npm\",\n completedText: `OpenMeld CLI ${input.upgradeStatus.latestVersion} installed.`,\n data: {\n command: input.manualUpgradeRecovery.value,\n distribution: input.upgradeStatus.distribution,\n },\n failureCode: \"cli.update.install_failed\",\n run: async () =>\n await installLatestPackage({\n npmCommandSpec,\n currentGlobalInstall: input.currentGlobalInstall,\n manualUpgradeCommand: input.manualUpgradeRecovery.value,\n }),\n });\n\n const latestVersion = input.upgradeStatus.latestVersion;\n await writeVersionState(\n buildNextVersionState({\n previous: input.previousVersionState,\n currentVersion: latestVersion,\n latestVersion,\n requiredFloor: input.upgradeStatus.requiredFloor,\n checkedAt: new Date().toISOString(),\n })\n );\n\n await runUpgradeStage({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n code: \"upgrade.service_alignment\",\n startedText: SERVICE_CHECK_STARTED_TEXT,\n completedText: SERVICE_CHECK_COMPLETED_TEXT,\n failureCode: \"cli.update.service_alignment_failed\",\n run: async () =>\n await handoffUpgradeServiceAlignmentToLatestBinary({\n resolvedView: input.resolvedView,\n command: process.execPath,\n argsPrefix: [\n input.currentGlobalInstall?.cliScriptPath ??\n (await resolveLatestInstalledCliScriptPath({\n npmCommandSpec,\n })),\n ],\n }),\n });\n\n emitUpgradeCompleted({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n previousVersion: input.currentVersion,\n currentVersion: latestVersion,\n });\n}\n\nasync function resolveUpgradeInstallContext(): Promise<{\n currentGlobalInstall: Awaited<\n ReturnType<typeof resolveCurrentNpmGlobalPackageInstall>\n > | null;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n}> {\n if (isBinaryDistribution()) {\n return {\n currentGlobalInstall: null,\n manualUpgradeRecovery: {\n kind: \"web\",\n value: resolveBinaryUpgradeRecoveryUrl(),\n },\n };\n }\n const currentGlobalInstall = await resolveCurrentNpmGlobalPackageInstall({\n packageName: OPENMELD_PACKAGE_NAME,\n ...(readOpenMeldToolsUpdateContextFromEnv() &&\n process.env.OPENMELD_INTERNAL_NPM_INSTALL_ENTRY\n ? { cliScriptPath: process.env.OPENMELD_INTERNAL_NPM_INSTALL_ENTRY }\n : {}),\n });\n if (\n process.env.OPENMELD_INTERNAL_MAINTENANCE_WORKER === \"1\" &&\n !currentGlobalInstall\n ) {\n throw new Error(\n \"OpenMeld could not identify the original npm installation. Automatic update stopped to preserve the current installation.\"\n );\n }\n return {\n currentGlobalInstall,\n manualUpgradeRecovery: {\n kind: \"command\",\n value: buildManualOpenMeldUpgradeCommand({\n globalPrefixPath: currentGlobalInstall?.globalPrefixPath ?? null,\n }),\n },\n };\n}\n\nexport function resolveBinaryUpgradeRecoveryUrl(\n env: NodeJS.ProcessEnv = process.env\n): string {\n return env.OPENMELD_ENV_PRESET === \"canary\" &&\n env.OPENMELD_CLI_BINARY_MANIFEST_URL === STAGING_BINARY_MANIFEST_URL\n ? STAGING_BINARY_UPGRADE_RECOVERY_URL\n : BINARY_UPGRADE_RECOVERY_URL;\n}\n\nfunction formatManualUpgradeRecovery(recovery: ManualUpgradeRecovery): string {\n return recovery.kind === \"web\"\n ? `Open ${recovery.value}, go to Computers, and use Update manually or Connect Computer to get a fresh setup command. Run that command on this Mac.`\n : `Run \\`${recovery.value}\\`.`;\n}\n\nfunction handleMissingVersionMetadata(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n manualUpgradeRecovery: ManualUpgradeRecovery;\n}): never {\n const errorMessage = formatOpenMeldCliTextBlock(\n `OpenMeld version metadata is missing, so automatic upgrade cannot continue.\\nManual fallback: ${formatManualUpgradeRecovery(input.manualUpgradeRecovery)}\\nIf you want to repair local OpenMeld state first, run \\`openmeld reset --yes\\` before \\`openmeld upgrade\\`.`\n );\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.metadata.missing\",\n payload: {\n summary:\n \"Local OpenMeld version metadata is missing, so automatic upgrade cannot verify downgrade safety.\",\n nextSteps: [\n formatManualUpgradeRecovery(input.manualUpgradeRecovery),\n \"openmeld-dev reset --yes --view agent\",\n \"openmeld-dev start\",\n \"openmeld-dev upgrade --check --view agent\",\n ],\n humanActionRequired: input.manualUpgradeRecovery.kind === \"web\",\n },\n });\n throw new UpgradeOutputHandledError(errorMessage);\n }\n throw new Error(errorMessage);\n}\n\nfunction handleUpgradeCheckFailure(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n upgradeStatus: Extract<UpgradeStatus, { status: \"check_failed\" }>;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n}): never {\n const errorMessage = formatOpenMeldCliTextBlock(\n `Version check failed (${input.upgradeStatus.error}). Upgrade stopped because downgrade protection requires confirming that ${formatUpgradeLatestSource(\n input.upgradeStatus.distribution\n )} is newer than the current CLI.\\nManual fallback: ${formatManualUpgradeRecovery(input.manualUpgradeRecovery)}`\n );\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.check_failed\",\n payload: {\n ...input.upgradeStatus,\n nextSteps: [\n formatManualUpgradeRecovery(input.manualUpgradeRecovery),\n \"openmeld-dev upgrade --check --view agent\",\n \"openmeld-dev upgrade --yes --view agent\",\n ],\n humanActionRequired: input.manualUpgradeRecovery.kind === \"web\",\n },\n });\n throw new UpgradeOutputHandledError(errorMessage);\n }\n throw new Error(errorMessage);\n}\n\nasync function resolveUpgradeStatus(input: {\n currentVersion: string;\n checkedAt: string;\n}): Promise<UpgradeStatus> {\n const distribution = resolveCurrentUpgradeDistribution();\n try {\n if (distribution === \"binary\") {\n const latestInfo = await fetchLatestCliBinaryRelease();\n const latestVersion = latestInfo.version;\n return {\n status: resolveUpgradeStatusKind(\n resolveVersionChangeDirection({\n fromVersion: input.currentVersion,\n toVersion: latestVersion,\n })\n ),\n distribution,\n currentVersion: input.currentVersion,\n latestVersion,\n requiredFloor: latestInfo.minRequiredCliVersion,\n checkedAt: input.checkedAt,\n binaryRelease: latestInfo,\n };\n }\n\n const latestInfo = await fetchLatestPackageInfo(OPENMELD_PACKAGE_NAME);\n const latestVersion = latestInfo.version;\n return {\n status: resolveUpgradeStatusKind(\n resolveVersionChangeDirection({\n fromVersion: input.currentVersion,\n toVersion: latestVersion,\n })\n ),\n distribution,\n currentVersion: input.currentVersion,\n latestVersion,\n requiredFloor: latestInfo.minRequiredCliVersion,\n checkedAt: input.checkedAt,\n };\n } catch (error) {\n return {\n status: \"check_failed\",\n distribution,\n currentVersion: input.currentVersion,\n checkedAt: input.checkedAt,\n error: toErrorMessage(error),\n };\n }\n}\n\nfunction resolveUpgradeStatusKind(\n direction: ReturnType<typeof resolveVersionChangeDirection>\n): \"up_to_date\" | \"outdated\" | \"downgrade_blocked\" {\n if (direction === \"upgrade\") {\n return \"outdated\";\n }\n if (direction === \"downgrade\") {\n return \"downgrade_blocked\";\n }\n return \"up_to_date\";\n}\n\nfunction resolveCurrentUpgradeDistribution(): UpgradeDistribution {\n return isBinaryDistribution() ? \"binary\" : \"npm\";\n}\n\nfunction formatUpgradeLatestSource(distribution: UpgradeDistribution): string {\n return distribution === \"binary\" ? \"published binary latest\" : \"npm latest\";\n}\n\nasync function resolveUpgradeConfirmation(input: {\n allowPrompt: boolean;\n yes: boolean;\n message: string;\n nonInteractiveError: string;\n resolvedView: \"human\" | \"agent\";\n scenario: \"outdated\" | \"check_failed\";\n}): Promise<boolean> {\n if (input.yes) {\n return true;\n }\n if (!input.allowPrompt) {\n if (input.resolvedView === \"agent\") {\n throw createUpgradeConfirmationGuideError(input.scenario);\n }\n throw new Error(\n formatOpenMeldCliTextBlock(\n `${input.nonInteractiveError}\\nexample: \\`openmeld upgrade --yes\\``\n )\n );\n }\n\n const choice = await confirm({\n message: input.message,\n initialValue: true,\n });\n if (isCancel(choice) || !choice) {\n cancel(\"Cancelled.\");\n return false;\n }\n return true;\n}\n\nasync function installLatestCliBinary(input: {\n release: CliBinaryReleaseInfo;\n manualUpgradeRecovery: ManualUpgradeRecovery;\n updatePlan: CliBinaryUpdatePlan;\n}): Promise<{\n version: string;\n managedBinaryPath: string;\n}> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"openmeld-cli-upgrade-\"));\n try {\n const artifactBytes = await downloadCliBinaryUpdateArtifact({\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n onDeltaFallback: (error) => {\n process.stderr.write(\n `Small update could not be used; downloading the full update instead. (${error.message})\\n`\n );\n },\n plan: input.updatePlan,\n release: input.release,\n });\n const artifactPath = join(\n tmpDir,\n resolveCliBinaryArtifactName(input.release)\n );\n await writeFile(artifactPath, artifactBytes);\n await chmod(artifactPath, 0o755);\n await verifyCliBinaryCodeSignature({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath,\n allowUnsignedForDevelopment: resolveOpenMeldEnvPreset() === \"dev-local\",\n release: input.release,\n runCommand,\n });\n await prepareCliBinaryProcessHelper({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath,\n release: input.release,\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n });\n\n const installResult = await runCommand(artifactPath, [\n \"install-self\",\n \"--force\",\n \"--json\",\n ]);\n if (installResult.code !== 0) {\n const details =\n installResult.stderr.trim() || installResult.stdout.trim();\n throw new Error(\n formatOpenMeldCliTextBlock(\n `binary install-self failed (exit ${installResult.code})${\n details ? `: ${details}` : \"\"\n }\\nManual fallback: ${formatManualUpgradeRecovery(input.manualUpgradeRecovery)}`\n )\n );\n }\n\n const installed = parseInstallSelfJsonOutput(installResult.stdout);\n if (installed.version !== input.release.version) {\n throw new Error(\n `binary install-self returned version ${installed.version}, expected ${input.release.version}`\n );\n }\n return installed;\n } finally {\n await rm(tmpDir, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\nfunction resolveBinaryUpgradeBasePath(): string {\n return (\n process.env.OPENMELD_INTERNAL_UPGRADE_BASE_BINARY_PATH?.trim() ||\n process.execPath\n );\n}\n\nfunction resolveCliBinaryArtifactName(release: CliBinaryReleaseInfo): string {\n const pathName = new URL(release.url).pathname;\n return (\n basename(pathName) || `openmeld-cli-${release.platform}-${release.version}`\n );\n}\n\nfunction parseInstallSelfJsonOutput(output: string): {\n version: string;\n managedBinaryPath: string;\n} {\n const jsonLine = output\n .split(INSTALL_SELF_JSON_LINE_SPLIT_RE)\n .map((line) => line.trim())\n .find((line) => line.startsWith(\"{\"));\n if (!jsonLine) {\n throw new Error(\"binary install-self did not emit JSON output\");\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonLine);\n } catch (error) {\n throw new Error(\n `binary install-self emitted invalid JSON: ${toErrorMessage(error)}`\n );\n }\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"binary install-self emitted an invalid JSON payload\");\n }\n const record = parsed as Record<string, unknown>;\n if (record.type !== \"cli.install_self\") {\n throw new Error(\"binary install-self emitted an unexpected payload type\");\n }\n const version =\n typeof record.version === \"string\" ? record.version.trim() : \"\";\n const managedBinaryPath =\n typeof record.managedBinaryPath === \"string\"\n ? record.managedBinaryPath.trim()\n : \"\";\n if (!(version && managedBinaryPath)) {\n throw new Error(\"binary install-self emitted an incomplete JSON payload\");\n }\n return { version, managedBinaryPath };\n}\n\nasync function installLatestPackage(input: {\n npmCommandSpec: NpmCommandSpec;\n currentGlobalInstall: Awaited<\n ReturnType<typeof resolveCurrentNpmGlobalPackageInstall>\n >;\n manualUpgradeCommand: string;\n}): Promise<void> {\n const args = input.currentGlobalInstall\n ? [\n \"install\",\n \"-g\",\n \"--prefix\",\n input.currentGlobalInstall.globalPrefixPath,\n `${OPENMELD_PACKAGE_NAME}@latest`,\n ]\n : [\"install\", \"-g\", `${OPENMELD_PACKAGE_NAME}@latest`];\n const result = await runCommandSpec(input.npmCommandSpec, args);\n\n if (result.code !== 0) {\n const stderr = result.stderr.trim();\n const stdout = result.stdout.trim();\n const details = stderr || stdout;\n const diagnosis = diagnoseNpmPackageAcquisitionFailure({\n packageName: OPENMELD_PACKAGE_NAME,\n text: [stderr, stdout].filter(Boolean).join(\"\\n\"),\n });\n const diagnosisText = diagnosis\n ? `\\n${formatNpmPackageAcquisitionFailureDiagnosis(diagnosis)}`\n : \"\";\n throw new Error(\n formatOpenMeldCliTextBlock(\n `upgrade failed (exit ${result.code})${details ? `: ${details}` : \"\"}${diagnosisText}\\nManual fallback: \\`${input.manualUpgradeCommand}\\``\n )\n );\n }\n}\n\nasync function runInternalUpgradeServiceAlignment(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n daemonVersion: string;\n cliScriptPath?: string;\n}): Promise<void> {\n const publishedRelease = isBinaryDistribution()\n ? await fetchLatestCliBinaryRelease()\n : null;\n const binaryRelease = publishedRelease?.service\n ? { ...publishedRelease.service, minRequiredCliVersion: null }\n : undefined;\n const daemonVersion = await resolveCurrentDaemonExpectedVersion(\n binaryRelease?.version ?? input.daemonVersion\n );\n const inventory = await inspectDaemonServiceInventory({\n expectedVersion: daemonVersion,\n intendedMode: \"background\",\n intent: \"upgrade_reconcile\",\n });\n const target = buildDaemonServiceTargetSpec({\n daemonVersion,\n });\n const decision = resolveDaemonServiceAlignmentDecision({\n inventory,\n target,\n });\n\n if (decision.status === \"already_aligned\") {\n emitUpgradeReconcileAlreadyCurrent({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n expectedVersion: daemonVersion,\n });\n return;\n }\n\n if (decision.status === \"not_installed\") {\n emitUpgradeReconcileSkipped({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n reason: \"not_installed\",\n });\n return;\n }\n\n if (decision.status === \"blocked\") {\n const errorMessage = buildUpgradeAlignmentBlockedMessage(\n decision.reasonCodes\n );\n emitUpgradeReconcileFailure({\n presenter: input.presenter,\n resolvedView: input.resolvedView,\n message: errorMessage,\n errorMessage,\n backupDataPath: null,\n failureStage: null,\n evidencePath: null,\n });\n throw new UpgradeOutputHandledError(errorMessage);\n }\n\n const updateContext = readOpenMeldToolsUpdateContextFromEnv();\n const scheduled = await scheduleDaemonServiceUpdate({\n targetVersion: daemonVersion,\n ...(binaryRelease?.version === daemonVersion ? { binaryRelease } : {}),\n urgency: await resolveServiceUpdateUrgency(),\n ...(updateContext ?? {}),\n targetCliVersion: OPENMELD_VERSION,\n targetServiceVersion: daemonVersion,\n ...(input.cliScriptPath ? { cliScriptPath: input.cliScriptPath } : {}),\n });\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.scheduled\",\n text: \"OpenMeld will finish updating the Service in the background. You can close this Terminal.\",\n });\n return;\n }\n input.presenter.data({\n code: \"upgrade.reconcile.scheduled\",\n payload: {\n status: scheduled.status,\n jobId: scheduled.job.jobId,\n targetVersion: scheduled.job.targetVersion,\n },\n });\n}\n\nasync function handoffUpgradeServiceAlignmentToLatestBinary(input: {\n resolvedView: \"human\" | \"agent\";\n command: string;\n argsPrefix: string[];\n}): Promise<void> {\n const useInheritedOutput =\n input.resolvedView === \"human\" &&\n process.stdout.isTTY === true &&\n process.stderr.isTTY === true;\n const handoffResult = await runStreamingCommand(\n input.command,\n process.env.OPENMELD_INTERNAL_MAINTENANCE_WORKER === \"1\"\n ? [...input.argsPrefix, \"maintenance-align-service\"]\n : [\n ...input.argsPrefix,\n \"--view\",\n input.resolvedView,\n \"upgrade\",\n UPGRADE_INTERNAL_ALIGN_SERVICE_FLAG,\n ],\n {\n OPENMELD_INTERNAL_SKIP_STARTUP_UPGRADE: \"1\",\n },\n useInheritedOutput\n );\n if (handoffResult.code !== 0) {\n const processFailure = parseOpenMeldToolsUpdateFailureFrame(\n handoffResult.stdout\n );\n if (processFailure) {\n throw new OpenMeldToolsUpdateFailureError({\n failureCode: processFailure.failureCode,\n message: processFailure.detail,\n });\n }\n if (useInheritedOutput) {\n throw new Error(\n formatUpgradeReconcileFailureMessage({\n errorMessage: `latest CLI handoff exited with status ${String(\n handoffResult.code\n )}`,\n backupDataPath: null,\n failureStage: null,\n evidencePath: null,\n })\n );\n }\n const hasForwardedOutput =\n handoffResult.stderr.trim().length > 0 ||\n handoffResult.stdout.trim().length > 0;\n if (hasForwardedOutput) {\n throw new UpgradeOutputHandledError(\n \"Latest OpenMeld CLI handoff reported a service alignment failure.\"\n );\n }\n throw new Error(\n formatUpgradeReconcileFailureMessage({\n errorMessage: `latest CLI handoff exited with status ${String(handoffResult.code)}`,\n backupDataPath: null,\n failureStage: null,\n evidencePath: null,\n })\n );\n }\n}\n\nasync function resolveLatestInstalledCliScriptPath(input: {\n npmCommandSpec: NpmCommandSpec;\n}): Promise<string> {\n const npmRootResult = await runCommandSpec(input.npmCommandSpec, [\n \"root\",\n \"-g\",\n ]);\n if (npmRootResult.code !== 0) {\n throw new Error(\n npmRootResult.stderr.trim() ||\n npmRootResult.stdout.trim() ||\n \"npm root -g failed\"\n );\n }\n const cliScriptPath = join(\n npmRootResult.stdout.trim(),\n OPENMELD_PACKAGE_NAME,\n \"dist\",\n \"openmeld.js\"\n );\n await stat(cliScriptPath);\n return cliScriptPath;\n}\n\nasync function runCommand(\n command: string,\n args: string[]\n): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await runSpawnedCommand({\n command,\n args,\n forwardOutput: false,\n });\n}\n\nasync function runCommandSpec(\n commandSpec: NpmCommandSpec,\n args: string[]\n): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await runCommand(commandSpec.command, [\n ...commandSpec.argsPrefix,\n ...args,\n ]);\n}\n\nasync function runStreamingCommand(\n command: string,\n args: string[],\n envOverrides: NodeJS.ProcessEnv = {},\n useInheritedOutput = false\n): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await runSpawnedCommand({\n command,\n args,\n forwardOutput: true,\n envOverrides,\n useInheritedOutput,\n });\n}\n\nasync function runSpawnedCommand(input: {\n command: string;\n args: string[];\n forwardOutput: boolean;\n envOverrides?: NodeJS.ProcessEnv;\n useInheritedOutput?: boolean;\n}): Promise<{\n code: number;\n stdout: string;\n stderr: string;\n}> {\n return await new Promise((resolve, reject) => {\n const child = spawn(input.command, input.args, {\n // Preserve inherited terminal output, but never allocate a new console\n // when the same upgrade path runs under the background maintenance task.\n windowsHide: true,\n stdio:\n input.forwardOutput && input.useInheritedOutput\n ? [\"ignore\", \"inherit\", \"inherit\"]\n : [\"ignore\", \"pipe\", \"pipe\"],\n env: {\n ...process.env,\n ...(input.envOverrides ?? {}),\n },\n });\n let stdout = \"\";\n let stderr = \"\";\n\n if (child.stdout) {\n child.stdout.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n stdout += text;\n if (input.forwardOutput) {\n process.stdout.write(text);\n }\n });\n }\n if (child.stderr) {\n child.stderr.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n stderr += text;\n if (input.forwardOutput) {\n process.stderr.write(text);\n }\n });\n }\n child.on(\"error\", (error) => {\n reject(error);\n });\n child.on(\"close\", (code) => {\n resolve({\n code: Number(code ?? 1),\n stdout,\n stderr,\n });\n });\n });\n}\n\nfunction formatUpgradeReconcileFailureMessage(input: {\n errorMessage: string;\n backupDataPath: string | null;\n failureStage?: DaemonServiceFailureStage | null;\n evidencePath: string | null;\n}): string {\n const failureContext = formatDaemonFailureContextText({\n backupDataPath: input.backupDataPath,\n evidencePath: input.evidencePath,\n failureStage: input.failureStage ?? null,\n });\n return formatInlineOpenMeldCliCommands(\n `Service reconcile failed: ${input.errorMessage}. Please run \\`openmeld service repair\\` manually.${\n failureContext.length > 0 ? ` ${failureContext}` : \"\"\n }`\n );\n}\n\nfunction buildUpgradeAlignmentBlockedMessage(\n reasonCodes: readonly string[]\n): string {\n if (reasonCodes.includes(\"downgrade_blocked\")) {\n return formatDaemonServiceDowngradeBlockedRecommendation({\n expectedVersion: OPENMELD_VERSION,\n });\n }\n const reasonText =\n reasonCodes.length > 0 ? reasonCodes.join(\", \") : \"unknown\";\n return formatInlineOpenMeldCliCommands(\n `Service alignment is blocked (${reasonText}). Please run \\`openmeld service status\\` or \\`openmeld service repair\\` manually.`\n );\n}\n\nfunction emitUpgradeReconcileAlreadyCurrent(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n expectedVersion: string;\n}): void {\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.already_current\",\n text: `OpenMeld Service is already current (v${input.expectedVersion}).`,\n });\n return;\n }\n\n input.presenter.data({\n code: \"upgrade.reconcile.already_current\",\n payload: {\n status: \"already_current\",\n expectedVersion: input.expectedVersion,\n },\n });\n}\n\nfunction emitUpgradeReconcileFailure(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n message: string;\n errorMessage: string;\n backupDataPath: string | null;\n failureStage?: string | null;\n evidencePath: string | null;\n}): void {\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.failed\",\n text: input.message,\n });\n return;\n }\n\n input.presenter.data({\n code: \"upgrade.reconcile.failed\",\n payload: {\n ok: false,\n message: input.message,\n errorMessage: input.errorMessage,\n ...(input.backupDataPath ? { backupDataPath: input.backupDataPath } : {}),\n ...(input.failureStage ? { failureStage: input.failureStage } : {}),\n ...(input.evidencePath ? { evidencePath: input.evidencePath } : {}),\n command: \"openmeld service repair\",\n },\n });\n}\n\nfunction resolveUpgradeReconcileSkipMessage(reason: string): {\n text: string;\n command: string;\n} {\n if (reason === \"not_installed\") {\n return {\n text: formatDaemonServiceMissingRecommendation(),\n command: \"openmeld service install\",\n };\n }\n if (reason === \"downgrade_blocked\") {\n return {\n text: formatDaemonServiceDowngradeBlockedRecommendation({\n expectedVersion: OPENMELD_VERSION,\n }),\n command: \"openmeld upgrade\",\n };\n }\n return {\n text: formatInlineOpenMeldCliCommands(\n \"Skipped service reconcile. You can run `openmeld service update` later.\"\n ),\n command: \"openmeld service update\",\n };\n}\n\nfunction emitUpgradeReconcileSkipped(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n reason: string;\n}): void {\n const { text, command } = resolveUpgradeReconcileSkipMessage(input.reason);\n if (input.resolvedView === \"human\") {\n input.presenter.line({\n code: \"upgrade.reconcile.skipped\",\n text,\n });\n return;\n }\n\n input.presenter.data({\n code: \"upgrade.reconcile.skipped\",\n payload: {\n skipped: true,\n reason: input.reason,\n command,\n },\n });\n}\n\ntype UpgradeStageHandle = {\n complete: (text: string) => void;\n fail: (text: string) => void;\n};\n\nfunction startUpgradeStage(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n code: string;\n startedCode?: string;\n startedText: string;\n data?: Record<string, unknown>;\n}): UpgradeStageHandle {\n const startedAtMs = Date.now();\n const startedCode = input.startedCode ?? `${input.code}.started`;\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: startedCode,\n payload: {\n ...(input.data ?? {}),\n message: `${input.startedText}...`,\n state: \"started\",\n },\n });\n } else {\n input.presenter.line({\n code: startedCode,\n text: `• ${input.startedText}...`,\n });\n }\n\n const finish = (state: \"completed\" | \"failed\", text: string): void => {\n const durationMs = resolveElapsedTimeMs(startedAtMs);\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: `${input.code}.${state}`,\n payload: {\n ...(input.data ?? {}),\n durationMs,\n message: text,\n state,\n },\n });\n return;\n }\n input.presenter.line({\n code: `${input.code}.${state}`,\n text: `${state === \"completed\" ? \"✓\" : \"!\"} ${text} · ${formatElapsedTime(durationMs)}`,\n });\n };\n\n return {\n complete: (text) => finish(\"completed\", text),\n fail: (text) => finish(\"failed\", text),\n };\n}\n\nasync function runUpgradeStage<T>(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n code: string;\n startedCode?: string;\n startedText: string;\n completedText: string;\n failedText?: string;\n failureCode?: OpenMeldToolsUpdateFailureCode;\n data?: Record<string, unknown>;\n run: () => Promise<T>;\n}): Promise<T> {\n const stage = startUpgradeStage(input);\n try {\n const result = await input.run();\n stage.complete(input.completedText);\n return result;\n } catch (error) {\n stage.fail(input.failedText ?? `${input.startedText} failed.`);\n throw input.failureCode\n ? withOpenMeldToolsUpdateFailure(error, input.failureCode)\n : error;\n }\n}\n\nfunction emitUpgradeCompleted(input: {\n presenter: ReturnType<typeof createPresenter>;\n resolvedView: \"human\" | \"agent\";\n previousVersion: string;\n currentVersion: string;\n}): void {\n if (input.resolvedView === \"agent\") {\n input.presenter.data({\n code: \"upgrade.completed\",\n payload: {\n previousVersion: input.previousVersion,\n currentVersion: input.currentVersion,\n },\n });\n return;\n }\n input.presenter.line({\n code: \"upgrade.completed\",\n text: \"OpenMeld CLI upgrade completed.\",\n });\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n"],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://www.schemastore.org/package.json",
|
|
3
3
|
"name": "openmeld",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.293",
|
|
5
5
|
"openMeldReleaseDate": "2026-11-06",
|
|
6
6
|
"description": "OpenMeld CLI - https://openmeld.ai",
|
|
7
7
|
"license": "MIT",
|
|
@@ -48,26 +48,26 @@
|
|
|
48
48
|
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
49
49
|
"unplugin-lightningcss": "^0.4.0",
|
|
50
50
|
"vitest": "4.1.11",
|
|
51
|
+
"@openmeld/adapter-antigravity": "0.0.1",
|
|
51
52
|
"@openmeld/adapter-claude-code": "0.0.1",
|
|
52
53
|
"@openmeld/adapter-codex": "0.0.1",
|
|
53
|
-
"@openmeld/adapter-antigravity": "0.0.1",
|
|
54
54
|
"@openmeld/adapter-core": "0.0.1",
|
|
55
55
|
"@openmeld/adapter-cursor": "0.0.1",
|
|
56
56
|
"@openmeld/adapter-grok-bot": "0.0.1",
|
|
57
57
|
"@openmeld/adapter-grok-build": "0.0.1",
|
|
58
58
|
"@openmeld/adapter-openclaw": "0.0.1",
|
|
59
59
|
"@openmeld/adapter-opencode": "0.0.1",
|
|
60
|
-
"@openmeld/api-client": "0.0.1",
|
|
61
60
|
"@openmeld/agent-runtime": "0.0.1",
|
|
61
|
+
"@openmeld/api-client": "0.0.1",
|
|
62
62
|
"@openmeld/gateway-contract": "0.0.1",
|
|
63
|
-
"@openmeld/local-execution": "0.0.1",
|
|
64
63
|
"@openmeld/local-service": "0.0.1",
|
|
64
|
+
"@openmeld/local-execution": "0.0.1",
|
|
65
65
|
"@openmeld/projects": "0.0.1",
|
|
66
|
-
"@openmeld/protocol": "0.0.1",
|
|
67
66
|
"@openmeld/routine-schedule": "0.0.1",
|
|
67
|
+
"@openmeld/protocol": "0.0.1",
|
|
68
68
|
"@openmeld/schemas": "0.0.1",
|
|
69
|
-
"@openmeld/space": "0.0.1",
|
|
70
69
|
"@openmeld/space-mesh": "0.0.1",
|
|
70
|
+
"@openmeld/space": "0.0.1",
|
|
71
71
|
"@openmeld/start": "0.0.1",
|
|
72
72
|
"@openmeld/utils": "0.0.1"
|
|
73
73
|
},
|
|
@@ -87,5 +87,5 @@
|
|
|
87
87
|
"test:local-service": "vitest run --config vitest.integration.config.ts tests/local-service-state.integration.test.ts tests/local-service-command.integration.test.ts tests/local-service-menu.integration.test.ts tests/local-service-run.integration.test.ts tests/local-service-bootstrap-recommendation.test.ts",
|
|
88
88
|
"test:watch": "vitest"
|
|
89
89
|
},
|
|
90
|
-
"gitHead": "
|
|
90
|
+
"gitHead": "89bb7bd86a2bf614d0bf310117aa7bd9fe21dfaa"
|
|
91
91
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-device-id-esUdfenn.js","names":["STRATEGY_CATALOG_SYNC_RETRY_INTERVAL_MS","STRATEGY_CATALOG_SYNC_SIGNAL_POLL_INTERVAL_MS","STRATEGY_DAEMON_RUNTIME_CONTRACT_EPOCH","STRATEGY_DAEMON_STREAM_CONNECT_TIMEOUT_MS","STRATEGY_DAEMON_STREAM_KEEPALIVE_INTERVAL_MS","STRATEGY_DAEMON_STREAM_KEEPALIVE_PONG_TIMEOUT_MS","STRATEGY_DEFAULT_HEARTBEAT_INTERVAL_MS","STRATEGY_HEARTBEAT_RESPONSE_TIMEOUT_MS","STRATEGY_MAX_HEARTBEAT_INTERVAL_MS","STRATEGY_MIN_HEARTBEAT_INTERVAL_MS","STRATEGY_PROVIDER_CONVERSATION_PROOF_SYNC_INTERVAL_MS","STRATEGY_PROVIDER_CONVERSATION_PROOF_SYNC_RETRY_INTERVAL_MS","STRATEGY_REGISTER_RESPONSE_TIMEOUT_MS","STRATEGY_RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_INTERVAL_MS","STRATEGY_RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_RETRY_INTERVAL_MS","STRATEGY_RUNTIME_STATE_PERSIST_MIN_INTERVAL_MS","sharedToErrorMessage"],"sources":["../../../packages/schemas/dist/schemas/runtime/agent-execution-steer.js","../../../packages/schemas/dist/schemas/daemon/route-catalog-cache.js","../src/local-service/core/constants.ts","../src/local-service/core/logger.ts","../src/local-service/state/daemon-device-id.ts"],"sourcesContent":["import * as z$1 from \"zod/v4\";\n//#region src/schemas/runtime/agent-execution-steer.ts\n/** The caller must resolve and authorize the exact live execution's task. */\nconst agentExecutionSteerRequestSchema = z$1.strictObject({\n\ttaskId: z$1.string().min(1),\n\tinputId: z$1.string().min(1),\n\ttext: z$1.string().trim().min(1).max(1e5)\n});\nconst agentExecutionSteerResponseSchema = z$1.discriminatedUnion(\"status\", [\n\tz$1.strictObject({\n\t\tstatus: z$1.literal(\"applied\"),\n\t\ttaskId: z$1.string().min(1),\n\t\tthreadId: z$1.string().min(1),\n\t\tturnId: z$1.string().min(1)\n\t}),\n\tz$1.strictObject({\n\t\tstatus: z$1.literal(\"not_applied\"),\n\t\ttaskId: z$1.string().min(1),\n\t\treasonCode: z$1.enum([\n\t\t\t\"execution_input.target_unavailable\",\n\t\t\t\"execution_input.unsupported\",\n\t\t\t\"execution_input.rejected\"\n\t\t])\n\t}),\n\tz$1.strictObject({\n\t\tstatus: z$1.literal(\"unconfirmed\"),\n\t\ttaskId: z$1.string().min(1),\n\t\treasonCode: z$1.literal(\"execution_input.application_unconfirmed\"),\n\t\tdiagnosticCode: z$1.string().min(1).max(160),\n\t\tnativeErrorCode: z$1.number().int().optional()\n\t})\n]);\n//#endregion\nexport { agentExecutionSteerRequestSchema, agentExecutionSteerResponseSchema };\n\n//# sourceMappingURL=agent-execution-steer.js.map","import { agentProfileIdSchema } from \"../protocol/profile.js\";\nimport { agentControllerCollaborationModeSchema } from \"../agent-controller-collaboration-mode.js\";\nimport { agentControllerPermissionModeSchema } from \"../agent-controller-permission-mode.js\";\nimport { openCodePermissionConfigSchema } from \"../open-code-permission.js\";\nimport { daemonServiceLaneSchema } from \"./service-contract.js\";\nimport { conversationPolicySchema } from \"./conversation-contract.js\";\nimport { runtimeAgentControllerConversationIdMappingSpecSchema, runtimeAgentControllerLaunchContractSchema, runtimeStreamingModeSchema, runtimeTransportModeSchema } from \"./controller-contract.js\";\nimport { skippedDaemonProfileSchema } from \"./control-plane.js\";\nimport { CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH } from \"./runtime-transport.js\";\nimport * as z$1 from \"zod/v4\";\n//#region src/schemas/daemon/route-catalog-cache.ts\nconst DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_VERSION = 4;\nconst DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME = \"openmeld-daemon-route-catalog-cache-v4\";\nconst cachedDaemonRouteConfigSchema = z$1.strictObject({\n\tagentControllerRef: z$1.string().trim().min(1),\n\tbindingId: z$1.string().trim().min(1).optional(),\n\tagentControllerCollaborationMode: agentControllerCollaborationModeSchema.optional(),\n\tagentControllerPermissionMode: agentControllerPermissionModeSchema.optional(),\n\tconfigurationRevision: z$1.number().int().positive().optional(),\n\tcontextIdMappingSpec: runtimeAgentControllerConversationIdMappingSpecSchema,\n\tconversationPolicy: conversationPolicySchema.optional(),\n\topenCodePermission: openCodePermissionConfigSchema.optional(),\n\tlaunchContract: runtimeAgentControllerLaunchContractSchema.nullable().optional(),\n\tprofileId: agentProfileIdSchema,\n\tstreamingMode: runtimeStreamingModeSchema,\n\ttransportMode: runtimeTransportModeSchema,\n\topenMeldServiceRuntimeId: z$1.string().trim().min(1).optional()\n});\nconst daemonRouteCatalogCacheBodySchema = z$1.strictObject({\n\tcachedAt: z$1.iso.datetime({ offset: true }),\n\truntimeContractEpoch: z$1.literal(CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH),\n\townerUserId: z$1.string().trim().min(1),\n\tlane: daemonServiceLaneSchema,\n\tserviceBundleId: z$1.string().trim().min(1),\n\tprofileIds: z$1.array(agentProfileIdSchema),\n\troutes: z$1.array(cachedDaemonRouteConfigSchema),\n\tskippedProfiles: z$1.array(skippedDaemonProfileSchema)\n});\nconst daemonRouteCatalogCacheSchema = z$1.discriminatedUnion(\"v\", [\n\tdaemonRouteCatalogCacheBodySchema.extend({\n\t\tv: z$1.literal(2),\n\t\tschema: z$1.literal(\"openmeld-daemon-route-catalog-cache-v2\")\n\t}),\n\tdaemonRouteCatalogCacheBodySchema.extend({\n\t\tv: z$1.literal(3),\n\t\tschema: z$1.literal(\"openmeld-daemon-route-catalog-cache-v3\")\n\t}),\n\tdaemonRouteCatalogCacheBodySchema.extend({\n\t\tv: z$1.literal(4),\n\t\tschema: z$1.literal(DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME)\n\t})\n]).superRefine((value, ctx) => {\n\tconst routeIds = new Set(value.routes.map((route) => route.profileId));\n\tfor (const profileId of value.profileIds) if (!routeIds.has(profileId)) ctx.addIssue({\n\t\tcode: \"custom\",\n\t\tmessage: \"route catalog cache profileIds must match routes\",\n\t\tpath: [\"profileIds\"]\n\t});\n});\n//#endregion\nexport { DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME, DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_VERSION, cachedDaemonRouteConfigSchema, daemonRouteCatalogCacheSchema };\n\n//# sourceMappingURL=route-catalog-cache.js.map","import {\n CATALOG_SYNC_INTERVAL_MULTIPLIER as STRATEGY_CATALOG_SYNC_INTERVAL_MULTIPLIER,\n CATALOG_SYNC_RETRY_INTERVAL_MS as STRATEGY_CATALOG_SYNC_RETRY_INTERVAL_MS,\n CATALOG_SYNC_SIGNAL_POLL_INTERVAL_MS as STRATEGY_CATALOG_SYNC_SIGNAL_POLL_INTERVAL_MS,\n DAEMON_RUNTIME_CONTRACT_EPOCH as STRATEGY_DAEMON_RUNTIME_CONTRACT_EPOCH,\n DAEMON_STREAM_CONNECT_TIMEOUT_MS as STRATEGY_DAEMON_STREAM_CONNECT_TIMEOUT_MS,\n DAEMON_STREAM_KEEPALIVE_INTERVAL_MS as STRATEGY_DAEMON_STREAM_KEEPALIVE_INTERVAL_MS,\n DAEMON_STREAM_KEEPALIVE_PONG_TIMEOUT_MS as STRATEGY_DAEMON_STREAM_KEEPALIVE_PONG_TIMEOUT_MS,\n DEFAULT_HEARTBEAT_INTERVAL_MS as STRATEGY_DEFAULT_HEARTBEAT_INTERVAL_MS,\n HEARTBEAT_RESPONSE_TIMEOUT_MS as STRATEGY_HEARTBEAT_RESPONSE_TIMEOUT_MS,\n MAX_CATALOG_SYNC_INTERVAL_MS as STRATEGY_MAX_CATALOG_SYNC_INTERVAL_MS,\n MAX_HEARTBEAT_INTERVAL_MS as STRATEGY_MAX_HEARTBEAT_INTERVAL_MS,\n MIN_CATALOG_SYNC_INTERVAL_MS as STRATEGY_MIN_CATALOG_SYNC_INTERVAL_MS,\n MIN_HEARTBEAT_INTERVAL_MS as STRATEGY_MIN_HEARTBEAT_INTERVAL_MS,\n PROVIDER_CONVERSATION_PROOF_SYNC_INTERVAL_MS as STRATEGY_PROVIDER_CONVERSATION_PROOF_SYNC_INTERVAL_MS,\n PROVIDER_CONVERSATION_PROOF_SYNC_RETRY_INTERVAL_MS as STRATEGY_PROVIDER_CONVERSATION_PROOF_SYNC_RETRY_INTERVAL_MS,\n REGISTER_RESPONSE_TIMEOUT_MS as STRATEGY_REGISTER_RESPONSE_TIMEOUT_MS,\n RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_INTERVAL_MS as STRATEGY_RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_INTERVAL_MS,\n RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_RETRY_INTERVAL_MS as STRATEGY_RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_RETRY_INTERVAL_MS,\n RUNTIME_STATE_PERSIST_MIN_INTERVAL_MS as STRATEGY_RUNTIME_STATE_PERSIST_MIN_INTERVAL_MS,\n} from \"../../strategy-constants\";\n\nexport const ADAPTIVE_HEARTBEAT_GROWTH_FACTOR = 1.35;\nexport const ADAPTIVE_HEARTBEAT_JITTER_RATIO = 0.1;\nexport const CATALOG_SYNC_INTERVAL_MULTIPLIER =\n STRATEGY_CATALOG_SYNC_INTERVAL_MULTIPLIER;\nexport const CATALOG_SYNC_RETRY_INTERVAL_MS =\n STRATEGY_CATALOG_SYNC_RETRY_INTERVAL_MS;\nexport const CATALOG_SYNC_SIGNAL_POLL_INTERVAL_MS =\n STRATEGY_CATALOG_SYNC_SIGNAL_POLL_INTERVAL_MS;\nexport const DAEMON_RUNTIME_CONTRACT_EPOCH =\n STRATEGY_DAEMON_RUNTIME_CONTRACT_EPOCH;\nexport const DAEMON_STREAM_CONNECT_TIMEOUT_MS =\n STRATEGY_DAEMON_STREAM_CONNECT_TIMEOUT_MS;\nexport const DAEMON_STREAM_KEEPALIVE_INTERVAL_MS =\n STRATEGY_DAEMON_STREAM_KEEPALIVE_INTERVAL_MS;\nexport const DAEMON_STREAM_KEEPALIVE_PONG_TIMEOUT_MS =\n STRATEGY_DAEMON_STREAM_KEEPALIVE_PONG_TIMEOUT_MS;\nexport const DEFAULT_HEARTBEAT_INTERVAL_MS =\n STRATEGY_DEFAULT_HEARTBEAT_INTERVAL_MS;\nexport const HEARTBEAT_RESPONSE_TIMEOUT_MS =\n STRATEGY_HEARTBEAT_RESPONSE_TIMEOUT_MS;\nexport const MAX_CATALOG_SYNC_INTERVAL_MS =\n STRATEGY_MAX_CATALOG_SYNC_INTERVAL_MS;\nexport const MAX_HEARTBEAT_INTERVAL_MS = STRATEGY_MAX_HEARTBEAT_INTERVAL_MS;\nexport const MIN_CATALOG_SYNC_INTERVAL_MS =\n STRATEGY_MIN_CATALOG_SYNC_INTERVAL_MS;\nexport const MIN_HEARTBEAT_INTERVAL_MS = STRATEGY_MIN_HEARTBEAT_INTERVAL_MS;\nexport const PROVIDER_CONVERSATION_PROOF_SYNC_INTERVAL_MS =\n STRATEGY_PROVIDER_CONVERSATION_PROOF_SYNC_INTERVAL_MS;\nexport const PROVIDER_CONVERSATION_PROOF_SYNC_RETRY_INTERVAL_MS =\n STRATEGY_PROVIDER_CONVERSATION_PROOF_SYNC_RETRY_INTERVAL_MS;\nexport const REGISTER_RESPONSE_TIMEOUT_MS =\n STRATEGY_REGISTER_RESPONSE_TIMEOUT_MS;\nexport const RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_INTERVAL_MS =\n STRATEGY_RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_INTERVAL_MS;\nexport const RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_RETRY_INTERVAL_MS =\n STRATEGY_RUNTIME_AGENT_CONTROLLER_REPORT_SYNC_RETRY_INTERVAL_MS;\nexport const RUNTIME_STATE_PERSIST_MIN_INTERVAL_MS =\n STRATEGY_RUNTIME_STATE_PERSIST_MIN_INTERVAL_MS;\nexport const DEFAULT_RECONNECT_DELAY_MS = 1000;\nexport const MAX_RECONNECT_DELAY_MS = 10_000;\nexport const HEARTBEAT_CONSECUTIVE_FAILURES_BEFORE_CLOSE = 3;\nexport const CONTROLLED_SHUTDOWN_RESULT_ACK_TIMEOUT_MS = 5000;\nexport const CONTROLLED_SHUTDOWN_SOCKET_CLOSE_TIMEOUT_MS = 5000;\nexport const CONTROLLED_SHUTDOWN_REQUEST_TIMEOUT_MS = 15_000;\nexport const DAEMON_DEVICE_ID_FILE = \"daemon-device-id.txt\";\nexport const CONTEXT_STORE_FILE = \"daemon-context-map.json\";\nexport const LEDGER_DIR_NAME = \"openMeldDaemon-ledger\";\nexport const DAEMON_RUNTIME_CONTRACT_META_FILE = \"runtime-contract-meta.json\";\nexport const DAEMON_RUNTIME_CONTRACT_REPAIR_REPORT_FILE =\n \"runtime-contract-repair-report.json\";\nexport const OPENMELD_CLI_NPX_COMMAND = \"npx -y openmeld@latest\";\nexport const SPACE_HISTORY_BOOTSTRAP_LIMIT = 200;\nexport const BOOTSTRAP_INJECTION_KEY_SEPARATOR = \"::\";\n","import { runtimeTransportModeSchema } from \"@openmeld/schemas\";\nimport type { RuntimeTransportMode } from \"@openmeld/schemas/types\";\nimport {\n sleep as sharedSleep,\n toErrorMessage as sharedToErrorMessage,\n} from \"@openmeld/utils\";\n\nimport type {\n RuntimeAgentControllerConversationIdMappingSpec,\n RuntimeAgentStreamingMode,\n RuntimeAgentTransportMode,\n} from \"../../config/runtime-config\";\nimport type { Presenter } from \"../../runtime/presenter/types\";\nimport {\n DEFAULT_HEARTBEAT_INTERVAL_MS,\n MAX_HEARTBEAT_INTERVAL_MS,\n MIN_HEARTBEAT_INTERVAL_MS,\n} from \"./constants\";\n\nexport function emitRunLine(input: {\n code: string;\n payload?: unknown;\n presenter: Presenter;\n text: string;\n}): void {\n if (input.presenter.view === \"agent\") {\n input.presenter.data({\n code: input.code,\n payload: {\n message: input.text,\n ...(input.payload === undefined ? {} : { payload: input.payload }),\n },\n });\n return;\n }\n input.presenter.line({\n code: input.code,\n text: input.text,\n });\n}\n\nexport function clampInteger(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, Math.trunc(value)));\n}\n\nexport function normalizeHeartbeatIntervalMs(\n value: number | undefined\n): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return DEFAULT_HEARTBEAT_INTERVAL_MS;\n }\n return clampInteger(\n value,\n MIN_HEARTBEAT_INTERVAL_MS,\n MAX_HEARTBEAT_INTERVAL_MS\n );\n}\n\nexport function parseTransportMode(\n value: unknown\n): RuntimeAgentTransportMode | null {\n const parsed = runtimeTransportModeSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\nexport function parseStreamingMode(\n value: unknown\n): RuntimeAgentStreamingMode | null {\n if (value === \"final\" || value === \"stream\") {\n return value;\n }\n return null;\n}\n\nexport function parseRuntimeTransportMode(\n value: unknown\n): RuntimeTransportMode | null {\n return parseTransportMode(value);\n}\n\nexport function parseDispatchSourceProfileKind(\n value: unknown\n): \"agent\" | \"human\" | \"system\" | null {\n const normalized = normalizeText(value).toLowerCase();\n if (\n normalized === \"agent\" ||\n normalized === \"human\" ||\n normalized === \"system\"\n ) {\n return normalized;\n }\n return null;\n}\n\nexport function parseContextIdMappingSpec(\n value: unknown\n): RuntimeAgentControllerConversationIdMappingSpec | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n const sourceField = normalizeOptionalText(record.sourceField);\n const mappingVersion = normalizePositiveInteger(record.mappingVersion);\n if (!(sourceField && mappingVersion)) {\n return null;\n }\n return {\n sourceField,\n mappingVersion,\n };\n}\n\nexport function parsePositiveInteger(value: unknown): number | null {\n if (!(typeof value === \"number\" && Number.isInteger(value) && value > 0)) {\n return null;\n }\n return value;\n}\n\nexport function normalizeNonNegativeInteger(value: unknown): number | null {\n if (!(typeof value === \"number\" && Number.isInteger(value) && value >= 0)) {\n return null;\n }\n return value;\n}\n\nexport function normalizePositiveInteger(value: unknown): number | null {\n return parsePositiveInteger(value);\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nexport function normalizeText(value: unknown): string {\n return String(value ?? \"\").trim();\n}\n\nexport function normalizeOptionalText(value: unknown): string | null {\n const normalized = normalizeText(value);\n return normalized.length > 0 ? normalized : null;\n}\n\nexport function nowIsoString(): string {\n return new Date().toISOString();\n}\n\ntype DaemonLogField =\n | string\n | number\n | boolean\n | null\n | readonly (string | number | boolean | null)[];\n\nexport function warnDaemonEvent(\n eventName: string,\n fields: Record<string, DaemonLogField | undefined>\n): void {\n const definedFields = Object.fromEntries(\n Object.entries(fields).filter((entry) => entry[1] !== undefined)\n );\n console.warn(\n `${nowIsoString()} ${eventName} ${JSON.stringify(definedFields)}`\n );\n}\n\nexport const toErrorMessage: (error: unknown) => string = sharedToErrorMessage;\n\nexport const sleep: (delayMs: number) => Promise<void> = sharedSleep;\n\nexport function dirnamePath(path: string): string {\n const lastSlash = Math.max(path.lastIndexOf(\"/\"), path.lastIndexOf(\"\\\\\"));\n if (lastSlash <= 0) {\n return \".\";\n }\n return path.slice(0, lastSlash);\n}\n","import { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { daemonRuntimeRootPath } from \"../../config/daemon-state\";\nimport { systemDir } from \"../../config/paths\";\nimport {\n CONTEXT_STORE_FILE,\n DAEMON_DEVICE_ID_FILE,\n DAEMON_RUNTIME_CONTRACT_META_FILE,\n DAEMON_RUNTIME_CONTRACT_REPAIR_REPORT_FILE,\n LEDGER_DIR_NAME,\n} from \"../core/constants\";\nimport { dirnamePath, normalizeOptionalText } from \"../core/logger\";\nimport type { DaemonRuntimePaths, LedgerPaths } from \"../core/types\";\n\nexport function resolvePreferredDaemonDeviceId(input: {\n explicitDeviceId?: string;\n contractDeviceId?: string | null;\n}): string | undefined {\n return (\n normalizeOptionalText(input.explicitDeviceId) ??\n normalizeOptionalText(input.contractDeviceId) ??\n undefined\n );\n}\n\nexport async function resolveDaemonDeviceId(input: {\n deviceId?: string;\n deviceIdPath: string;\n shouldDiscardPersistedDeviceId?: (deviceId: string) => boolean;\n}): Promise<string> {\n const explicit = normalizeOptionalText(input.deviceId);\n if (explicit) {\n await persistDaemonDeviceIdIfNeeded({\n deviceId: explicit,\n deviceIdPath: input.deviceIdPath,\n });\n return explicit;\n }\n\n const persisted = normalizeOptionalText(\n await readFile(input.deviceIdPath, \"utf8\").catch(() => \"\")\n );\n if (\n persisted &&\n !(input.shouldDiscardPersistedDeviceId?.(persisted) ?? false)\n ) {\n return persisted;\n }\n\n const generated = randomUUID();\n await writeDaemonDeviceId({\n deviceId: generated,\n deviceIdPath: input.deviceIdPath,\n });\n return generated;\n}\n\nexport async function ensureDaemonRuntimePaths(): Promise<DaemonRuntimePaths> {\n const dataRootPath = join(daemonRuntimeRootPath(), \"data\");\n const contextStorePath = join(dataRootPath, CONTEXT_STORE_FILE);\n const deviceIdPath = daemonDeviceIdPath();\n const legacyDeviceIdPath = join(dataRootPath, DAEMON_DEVICE_ID_FILE);\n const ledgerRootPath = join(dataRootPath, LEDGER_DIR_NAME);\n await mkdir(dataRootPath, {\n recursive: true,\n });\n await mkdir(ledgerRootPath, {\n recursive: true,\n });\n await mkdir(dirnamePath(deviceIdPath), { recursive: true });\n await migrateLegacyDaemonDeviceId({ deviceIdPath, legacyDeviceIdPath });\n return {\n contractMetaPath: join(dataRootPath, DAEMON_RUNTIME_CONTRACT_META_FILE),\n contractRepairReportPath: join(\n dataRootPath,\n DAEMON_RUNTIME_CONTRACT_REPAIR_REPORT_FILE\n ),\n contextStorePath,\n dataRootPath,\n deviceIdPath,\n ledgerRootPath,\n };\n}\n\nexport function daemonDeviceIdPath(): string {\n return join(systemDir(), DAEMON_DEVICE_ID_FILE);\n}\n\nexport function buildLedgerPaths(ledgerRootPath: string): LedgerPaths {\n return {\n backupStateFilePath: join(ledgerRootPath, \"state.backup.json\"),\n historyFilePath: join(ledgerRootPath, \"history.ndjson\"),\n historyTempFilePath: join(ledgerRootPath, \"history.tmp\"),\n rootDirPath: ledgerRootPath,\n stateFilePath: join(ledgerRootPath, \"state.json\"),\n stateTempFilePath: join(ledgerRootPath, \"state.tmp\"),\n };\n}\n\nasync function persistDaemonDeviceIdIfNeeded(input: {\n deviceId: string;\n deviceIdPath: string;\n}): Promise<void> {\n const persisted = normalizeOptionalText(\n await readFile(input.deviceIdPath, \"utf8\").catch(() => \"\")\n );\n if (persisted === input.deviceId) {\n return;\n }\n await writeDaemonDeviceId(input);\n}\n\nasync function writeDaemonDeviceId(input: {\n deviceId: string;\n deviceIdPath: string;\n}): Promise<void> {\n await mkdir(dirnamePath(input.deviceIdPath), { recursive: true });\n await writeFile(input.deviceIdPath, `${input.deviceId}\\n`, \"utf8\");\n}\n\nasync function migrateLegacyDaemonDeviceId(input: {\n deviceIdPath: string;\n legacyDeviceIdPath: string;\n}): Promise<void> {\n const current = normalizeOptionalText(\n await readFile(input.deviceIdPath, \"utf8\").catch(() => \"\")\n );\n if (current) {\n return;\n }\n const legacy = normalizeOptionalText(\n await readFile(input.legacyDeviceIdPath, \"utf8\").catch(() => \"\")\n );\n if (!legacy) {\n return;\n }\n await writeDaemonDeviceId({\n deviceId: legacy,\n deviceIdPath: input.deviceIdPath,\n });\n}\n"],"mappings":"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"}
|