openmeld 0.3.249 → 0.3.250
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-DqFVccz-.js → add-me-membership-BEv7sbS8.js} +2 -2
- package/dist/{add-me-membership-DqFVccz-.js.map → add-me-membership-BEv7sbS8.js.map} +1 -1
- package/dist/{agents-B1BGmZv8.js → agents-C0TlVbff.js} +13 -13
- package/dist/{agents-B1BGmZv8.js.map → agents-C0TlVbff.js.map} +1 -1
- package/dist/{api-client-foundation-BIYsNssD.js → api-client-foundation-BFxJALyQ.js} +5 -3
- package/dist/api-client-foundation-BFxJALyQ.js.map +1 -0
- package/dist/{api-client-foundation-35pRyFi8.js → api-client-foundation-BcqoCcfi.js} +1 -1
- package/dist/auth-session-Ba4S7jnT.js +4 -0
- package/dist/{auth-session-CQBxmN9k.js → auth-session-ClBLOWqs.js} +4 -4
- package/dist/{auth-session-CQBxmN9k.js.map → auth-session-ClBLOWqs.js.map} +1 -1
- package/dist/{base-url-DisEwU-t.js → base-url-3HAgYrum.js} +3 -3
- package/dist/{base-url-DisEwU-t.js.map → base-url-3HAgYrum.js.map} +1 -1
- package/dist/{base-url-DmBKON6A.js → base-url-4R03CCse.js} +1 -1
- package/dist/{channel-C_AttfQ8.js → channel-CFWvWoEK.js} +2 -2
- package/dist/{channel-C_AttfQ8.js.map → channel-CFWvWoEK.js.map} +1 -1
- package/dist/{cloud-computer-CDo2uMIr.js → cloud-computer-j7R51e68.js} +6 -6
- package/dist/{cloud-computer-CDo2uMIr.js.map → cloud-computer-j7R51e68.js.map} +1 -1
- package/dist/{command-CEF4dTIg.js → command-Bv9x8bj2.js} +17 -17
- package/dist/{command-CEF4dTIg.js.map → command-Bv9x8bj2.js.map} +1 -1
- package/dist/{computer-connection-review-DijvJtj7.js → computer-connection-review-zsbYpTnD.js} +6 -6
- package/dist/{computer-connection-review-DijvJtj7.js.map → computer-connection-review-zsbYpTnD.js.map} +1 -1
- package/dist/{computer-disconnect-D2L8khsX.js → computer-disconnect-BQaS96lf.js} +9 -9
- package/dist/{computer-disconnect-D2L8khsX.js.map → computer-disconnect-BQaS96lf.js.map} +1 -1
- package/dist/{computer-setup-continuation-B95_GYrc.js → computer-setup-continuation-pZ639n22.js} +3 -3
- package/dist/{computer-setup-continuation-B95_GYrc.js.map → computer-setup-continuation-pZ639n22.js.map} +1 -1
- package/dist/{context-DZmYWwYg.js → context-Gn5H-Rd_.js} +7 -7
- package/dist/{context-DZmYWwYg.js.map → context-Gn5H-Rd_.js.map} +1 -1
- package/dist/{daemon-device-id-DEKtVdHO.js → daemon-device-id-B_QfEb0j.js} +4 -4
- package/dist/{daemon-device-id-DEKtVdHO.js.map → daemon-device-id-B_QfEb0j.js.map} +1 -1
- package/dist/{daemon-lifecycle-journal-Bpkc8qjM.js → daemon-lifecycle-journal-DzTPqbOW.js} +5 -5
- package/dist/{daemon-lifecycle-journal-Bpkc8qjM.js.map → daemon-lifecycle-journal-DzTPqbOW.js.map} +1 -1
- package/dist/{daemon-runtime-lease-DRebI8eb.js → daemon-runtime-lease-CER13pyZ.js} +1 -1
- package/dist/{daemon-runtime-lease-Dxq_qGxY.js → daemon-runtime-lease-CVPdRVs4.js} +3 -3
- package/dist/{daemon-runtime-lease-Dxq_qGxY.js.map → daemon-runtime-lease-CVPdRVs4.js.map} +1 -1
- package/dist/{daemon-service-contract-HKC0wyWa.js → daemon-service-contract-RI6gkvmo.js} +3 -3
- package/dist/{daemon-service-contract-HKC0wyWa.js.map → daemon-service-contract-RI6gkvmo.js.map} +1 -1
- package/dist/{daemon-service-manager-C-9sDDa3.js → daemon-service-manager-Cqyq96f0.js} +5 -5
- package/dist/{daemon-service-manager-C-9sDDa3.js.map → daemon-service-manager-Cqyq96f0.js.map} +1 -1
- package/dist/{daemon-service-manager-DfNO3Kcg.js → daemon-service-manager-Czw0fTZ4.js} +1 -1
- package/dist/{daemon-service-runtime-DNa-5J66.js → daemon-service-runtime-DUcGKzsi.js} +14 -14
- package/dist/{daemon-service-runtime-DNa-5J66.js.map → daemon-service-runtime-DUcGKzsi.js.map} +1 -1
- package/dist/{daemon-service-update-coordinator-BEySROGi.js → daemon-service-update-coordinator-XJbPHzcl.js} +19 -19
- package/dist/{daemon-service-update-coordinator-BEySROGi.js.map → daemon-service-update-coordinator-XJbPHzcl.js.map} +1 -1
- package/dist/{daemon-state-ecGzjsoG.js → daemon-state-DLzP-fC_.js} +3 -3
- package/dist/{daemon-state-ecGzjsoG.js.map → daemon-state-DLzP-fC_.js.map} +1 -1
- package/dist/{dispatch-owned-runtime-DrCWeXik.js → dispatch-owned-runtime-DC_586ks.js} +10 -10
- package/dist/{dispatch-owned-runtime-DrCWeXik.js.map → dispatch-owned-runtime-DC_586ks.js.map} +1 -1
- package/dist/{dist-CPhE1Two.js → dist-B5iixKPM.js} +62 -3
- package/dist/dist-B5iixKPM.js.map +1 -0
- package/dist/{dist-CQWxiR6S.js → dist-BfSAh6kk.js} +1 -1
- package/dist/{dist-kySFYjFj.js → dist-CPK1cD24.js} +1 -1
- package/dist/{dist-DzkBjPsq.js → dist-D7YYztTY.js} +15 -3
- package/dist/dist-D7YYztTY.js.map +1 -0
- package/dist/{dual-view-guide-catalog-DhO6eUiM.js → dual-view-guide-catalog-Vuvl8lxB.js} +3 -3
- package/dist/{dual-view-guide-catalog-DhO6eUiM.js.map → dual-view-guide-catalog-Vuvl8lxB.js.map} +1 -1
- package/dist/{elapsed-time-HSYHZrbD.js → elapsed-time-6YUXmg1E.js} +4 -4
- package/dist/{elapsed-time-HSYHZrbD.js.map → elapsed-time-6YUXmg1E.js.map} +1 -1
- package/dist/{entry-CpaLxIIt.js → entry-CZp5kRkk.js} +12 -12
- package/dist/{entry-CpaLxIIt.js.map → entry-CZp5kRkk.js.map} +1 -1
- package/dist/{installation-inventory-hGDy13xp.js → installation-inventory-D0nx9kfs.js} +4 -4
- package/dist/{installation-inventory-hGDy13xp.js.map → installation-inventory-D0nx9kfs.js.map} +1 -1
- package/dist/{installer-B0bxqhQ_.js → installer-vQe5qDlx.js} +2 -2
- package/dist/{installer-B0bxqhQ_.js.map → installer-vQe5qDlx.js.map} +1 -1
- package/dist/{lock-BN1rO-D-.js → lock-DShA302g.js} +3 -3
- package/dist/{lock-BN1rO-D-.js.map → lock-DShA302g.js.map} +1 -1
- package/dist/{meta-api-CEOa2GHg.js → meta-api-6A5s1td4.js} +7 -7
- package/dist/{meta-api-CEOa2GHg.js.map → meta-api-6A5s1td4.js.map} +1 -1
- package/dist/{openmeld-DwqWSjwM.js → openmeld-BaF0OZ74.js} +38 -38
- package/dist/{openmeld-DwqWSjwM.js.map → openmeld-BaF0OZ74.js.map} +1 -1
- package/dist/{openmeld-dev-environment-BqU3jlVt.js → openmeld-dev-environment-Dr4g4PNW.js} +2 -2
- package/dist/{openmeld-dev-environment-BqU3jlVt.js.map → openmeld-dev-environment-Dr4g4PNW.js.map} +1 -1
- package/dist/openmeld-dev.js +1 -1
- package/dist/{openmeld-environment-target-CoU3QM-7.js → openmeld-environment-target--bimgK8H.js} +2 -2
- package/dist/{openmeld-environment-target-CoU3QM-7.js.map → openmeld-environment-target--bimgK8H.js.map} +1 -1
- package/dist/{openmeld-maintenance-worker-C9VIgZe7.js → openmeld-maintenance-worker-8LlUrfpM.js} +14 -14
- package/dist/{openmeld-maintenance-worker-C9VIgZe7.js.map → openmeld-maintenance-worker-8LlUrfpM.js.map} +1 -1
- package/dist/{openmeld-tools-update-join-D0VMtNoZ.js → openmeld-tools-update-join-DZrSWJ3g.js} +4 -4
- package/dist/{openmeld-tools-update-join-D0VMtNoZ.js.map → openmeld-tools-update-join-DZrSWJ3g.js.map} +1 -1
- package/dist/{openmeld-tools-update-process-frame-B-iNw0De.js → openmeld-tools-update-process-frame-CKx5SAZi.js} +1 -1
- package/dist/{openmeld-tools-update-process-frame-BSOvRwcz.js → openmeld-tools-update-process-frame-Cur2KUTP.js} +2 -2
- package/dist/{openmeld-tools-update-process-frame-BSOvRwcz.js.map → openmeld-tools-update-process-frame-Cur2KUTP.js.map} +1 -1
- package/dist/openmeld.js +7 -7
- package/dist/{prepare-provider-runtime-JFFwKOaX.js → prepare-provider-runtime-BIHrlPtb.js} +16 -16
- package/dist/{prepare-provider-runtime-JFFwKOaX.js.map → prepare-provider-runtime-BIHrlPtb.js.map} +1 -1
- package/dist/{prepare-session-executor-Ck1ahQoB.js → prepare-session-executor-DWrIgNhD.js} +24 -24
- package/dist/{prepare-session-executor-Ck1ahQoB.js.map → prepare-session-executor-DWrIgNhD.js.map} +1 -1
- package/dist/{process-channel-BGsFbmj9.js → process-channel-C0MM-HBm.js} +2 -2
- package/dist/{process-channel-BGsFbmj9.js.map → process-channel-C0MM-HBm.js.map} +1 -1
- package/dist/{process-identity-CUAkapyW.js → process-identity-C1tKCeQs.js} +2 -2
- package/dist/{process-identity-CUAkapyW.js.map → process-identity-C1tKCeQs.js.map} +1 -1
- package/dist/{runtime-poyPQ70m.js → runtime-B6NPV7cu.js} +17 -17
- package/dist/{runtime-poyPQ70m.js.map → runtime-B6NPV7cu.js.map} +1 -1
- package/dist/{runtime-agent-controller-reporting-submission-CfgFIJKr.js → runtime-agent-controller-reporting-submission-CnndxVOY.js} +9 -9
- package/dist/{runtime-agent-controller-reporting-submission-CfgFIJKr.js.map → runtime-agent-controller-reporting-submission-CnndxVOY.js.map} +1 -1
- package/dist/{service-DlYGXab8.js → service-C4Rfy6bx.js} +29 -29
- package/dist/{service-DlYGXab8.js.map → service-C4Rfy6bx.js.map} +1 -1
- package/dist/{service-account-authorization-ndobeDYF.js → service-account-authorization-C5js6y1z.js} +5 -5
- package/dist/{service-account-authorization-ndobeDYF.js.map → service-account-authorization-C5js6y1z.js.map} +1 -1
- package/dist/{service-account-control-CRuBb_Uw.js → service-account-control-BfZbRJFW.js} +15 -15
- package/dist/{service-account-control-CRuBb_Uw.js.map → service-account-control-BfZbRJFW.js.map} +1 -1
- package/dist/{service-control-capabilities-Datkygf_.js → service-control-capabilities-BwXLV0Nz.js} +6 -6
- package/dist/{service-control-capabilities-Datkygf_.js.map → service-control-capabilities-BwXLV0Nz.js.map} +1 -1
- package/dist/{service-control-capabilities-D6YaFdEj.js → service-control-capabilities-CulpWrMK.js} +1 -1
- package/dist/{service-control-carrier-capability-BZkjMdrp.js → service-control-carrier-capability-BgcpQ843.js} +3 -3
- package/dist/{service-control-carrier-capability-BZkjMdrp.js.map → service-control-carrier-capability-BgcpQ843.js.map} +1 -1
- package/dist/{state-B3qJCRzL.js → state-BSDbYr52.js} +3 -3
- package/dist/{state-B3qJCRzL.js.map → state-BSDbYr52.js.map} +1 -1
- package/dist/{updates-api-Z3y5_kB2.js → updates-api-BfSMatAV.js} +14 -14
- package/dist/{updates-api-Z3y5_kB2.js.map → updates-api-BfSMatAV.js.map} +1 -1
- package/dist/{upgrade-CH32ctr-.js → upgrade-1A5mV1oc.js} +9 -9
- package/dist/{upgrade-CH32ctr-.js.map → upgrade-1A5mV1oc.js.map} +1 -1
- package/dist/upgrade-DvJVz5bc.js +4 -0
- package/dist/{windows-managed-install-C_01s3E9.js → windows-managed-install-DY503Opn.js} +2 -2
- package/dist/{windows-managed-install-C_01s3E9.js.map → windows-managed-install-DY503Opn.js.map} +1 -1
- package/dist/{windows-preview-channel-tjaaQvi1.js → windows-preview-channel-DnPJSpaD.js} +3 -3
- package/dist/{windows-preview-channel-tjaaQvi1.js.map → windows-preview-channel-DnPJSpaD.js.map} +1 -1
- package/dist/{windows-task-command-DfSWC5WF.js → windows-task-command-BhNvBjQ-.js} +2 -2
- package/dist/{windows-task-command-DfSWC5WF.js.map → windows-task-command-BhNvBjQ-.js.map} +1 -1
- package/dist/{windows-task-entry-CNHG6kVI.js → windows-task-entry-C0RgF7b_.js} +3 -3
- package/dist/{windows-task-entry-CNHG6kVI.js.map → windows-task-entry-C0RgF7b_.js.map} +1 -1
- package/dist/{windows-user-task-DjvrZWhN.js → windows-user-task-BklwFGVl.js} +6 -6
- package/dist/{windows-user-task-DjvrZWhN.js.map → windows-user-task-BklwFGVl.js.map} +1 -1
- package/dist/{windows-user-task-DITX-iuM.js → windows-user-task-Cl0xT62s.js} +1 -1
- package/package.json +11 -11
- package/skills/openmeld-cli/SKILL.md +11 -1
- package/skills/openmeld-cli/playbooks/computer.md +21 -0
- package/dist/api-client-foundation-BIYsNssD.js.map +0 -1
- package/dist/auth-session-CUu-vOqn.js +0 -4
- package/dist/dist-CPhE1Two.js.map +0 -1
- package/dist/dist-DzkBjPsq.js.map +0 -1
- package/dist/upgrade-DThz5Kbl.js +0 -4
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { t as normalizeBaseUrl } from "./urls-CY2uzH2-.js";
|
|
4
4
|
import { P as resolveOpenMeldEnvPreset, _ as legacyRuntimeConfigPath, d as devicePreferencesPath, f as deviceSkillsCustomTargetsPath, m as deviceSkillsStorePath, p as deviceSkillsInstallsPath, s as deviceAgentRuntimePath } from "./paths-De9xdA2h.js";
|
|
5
5
|
import { t as isLoopbackHostname } from "./loopback-hostname-DHQPKq8N.js";
|
|
6
|
-
import { DE as runtimeAgentControllerSettingsSchema, EE as runtimeAgentControllerLaunchContractSchema } from "./dist-
|
|
7
|
-
import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-
|
|
6
|
+
import { DE as runtimeAgentControllerSettingsSchema, EE as runtimeAgentControllerLaunchContractSchema } from "./dist-B5iixKPM.js";
|
|
7
|
+
import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-DShA302g.js";
|
|
8
8
|
import { createHash } from "node:crypto";
|
|
9
9
|
import { dirname, normalize, posix, win32 } from "node:path";
|
|
10
10
|
import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
@@ -973,4 +973,4 @@ function toErrorMessage(error) {
|
|
|
973
973
|
//#endregion
|
|
974
974
|
export { updateConfiguredDeviceRuntimeState as C, updateConfiguredStartV1OnboardingState as E, setConfiguredSkillsConfig as S, updateConfiguredSkillsConfig as T, getConfiguredViewCustomization as _, resolveBaseUrl as a, setConfiguredBaseUrl as b, resolveExplicitGatewayUrlOrThrow as c, createDefaultRuntimeAgentControllerSettings as d, getConfiguredDaemonDispatchLimits as f, getConfiguredSkillsConfig as g, getConfiguredOpenMeldToolsMaintenance as h, normalizeGatewayBaseUrlOrNull as i, DEFAULT_RUNTIME_AGENT_TRANSPORT_MODE as l, getConfiguredOnboardingDisclaimerAcceptedAt as m, DEV_LOCAL_GATEWAY_BASE_URL as n, resolveBaseUrlOrNull as o, getConfiguredDeviceRuntimeState as p, normalizeGatewayBaseUrl as r, resolveDefaultGatewayBaseUrl as s, DEFAULT_GATEWAY_BASE_URL as t, alignRuntimeConfigStorage as u, getRuntimeConfigReadHealth as v, updateConfiguredOnboardingConfig as w, setConfiguredOpenMeldToolsMaintenance as x, resolveRuntimeSkillsCustomTargetId as y };
|
|
975
975
|
|
|
976
|
-
//# sourceMappingURL=base-url-
|
|
976
|
+
//# sourceMappingURL=base-url-3HAgYrum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-url-DisEwU-t.js","names":["obj"],"sources":["../src/config/compatibility/legacy-agent-registrations.ts","../src/config/runtime-config.ts","../src/config/base-url.ts"],"sourcesContent":["// Read adapter for the original config.json layout. Current files and current\n// controller settings remain authoritative; all values still use today's parser.\nexport function readLegacyAgentRegistrations(agents: unknown): unknown {\n if (!agents || typeof agents !== \"object\" || Array.isArray(agents)) {\n return undefined;\n }\n return { controllers: (agents as { registrations?: unknown }).registrations };\n}\n","import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, normalize, posix, win32 } from \"node:path\";\nimport {\n runtimeAgentControllerLaunchContractSchema,\n runtimeAgentControllerSettingsSchema,\n} from \"@openmeld/schemas\";\nimport type {\n RuntimeAgentControllerLaunchContract,\n RuntimeTransportMode,\n} from \"@openmeld/schemas/types\";\nimport { normalizeGatewayBaseUrl } from \"./base-url\";\nimport { readLegacyAgentRegistrations } from \"./compatibility/legacy-agent-registrations\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n type OpenMeldLock,\n runWithHeldLock,\n} from \"./lock\";\nimport {\n deviceAgentRuntimePath,\n devicePreferencesPath,\n deviceSkillsCustomTargetsPath,\n deviceSkillsInstallsPath,\n deviceSkillsStorePath,\n legacyRuntimeConfigPath,\n resolveOpenMeldEnvPreset,\n} from \"./paths\";\n\nexport type RuntimeViewCustomization = {\n messages?: {\n human?: Record<string, string>;\n agent?: Record<string, string>;\n };\n render?: {\n human?: {\n dataMode?: \"payload\" | \"envelope\";\n };\n agent?: {\n envelopeMode?: \"verbose\" | \"compact\";\n };\n };\n};\n\nexport type RuntimeSkillsAgentConfig = {\n skillsDir?: string;\n globalSkillsDir?: string;\n};\n\nexport type RuntimeSkillsCustomTarget = {\n id?: string;\n name: string;\n dir: string;\n};\n\nexport type RuntimeSkillsInstallRecord = {\n targetId: string;\n targetDir: string;\n mode: \"symlink\" | \"copy\";\n status: \"installed\" | \"skipped\" | \"failed\";\n skillIds: string[];\n reason?: string;\n updatedAt: string;\n};\n\nexport type RuntimeSkillsConfig = {\n storeDir?: string;\n agents?: Record<string, RuntimeSkillsAgentConfig>;\n customTargets?: RuntimeSkillsCustomTarget[];\n installs?: RuntimeSkillsInstallRecord[];\n};\n\nexport type RuntimeDaemonDispatchConfig = {\n globalConcurrency?: number;\n queueMax?: number;\n};\n\nexport type RuntimeDaemonConfig = {\n dispatch?: RuntimeDaemonDispatchConfig;\n};\n\nexport type RuntimeOpenMeldToolsMaintenanceConfig = {\n automaticUpdatesEnabled: boolean;\n};\n\nexport type RuntimeDaemonDispatchLimits = {\n globalConcurrency: number;\n queueMax: number;\n};\n\nexport type RuntimeAgentTransportMode = RuntimeTransportMode;\nexport type RuntimeAgentStreamingMode = \"final\" | \"stream\";\n\nexport type RuntimeAgentControllerConversationIdMappingSpec = {\n sourceField: string;\n mappingVersion: number;\n};\n\nexport type RuntimeAgentControllerSettings = {\n transportMode: RuntimeAgentTransportMode;\n streamingMode: RuntimeAgentStreamingMode;\n timeoutMs: number | null;\n retry: number;\n contextIdMappingSpec: RuntimeAgentControllerConversationIdMappingSpec;\n};\n\nexport const DEFAULT_RUNTIME_AGENT_TRANSPORT_MODE: RuntimeAgentTransportMode =\n \"local-cli\";\nexport const DEFAULT_RUNTIME_AGENT_STREAMING_MODE: RuntimeAgentStreamingMode =\n \"final\";\n// Normal Agent execution has no fixed wall-clock timeout. Long-running tasks\n// should end by explicit result, failure, cancellation, or stale progress\n// evidence policy, not by a hard-coded elapsed-time cutoff.\nexport const DEFAULT_LOCAL_ADAPTER_TIMEOUT_MS = null as number | null;\nexport const DEFAULT_RUNTIME_AGENT_RETRY = 0;\nexport const DEFAULT_RUNTIME_AGENT_CONTEXT_MAPPING_VERSION = 1;\nexport const DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD =\n \"OPENMELD_CLI_CONTEXT_ID\";\nexport const DEFAULT_RUNTIME_DAEMON_GLOBAL_CONCURRENCY = 10;\nexport const DEFAULT_RUNTIME_DAEMON_QUEUE_MAX = 50;\n\nexport type RuntimeAgentControllerState = {\n agentId: string;\n displayName: string;\n enabled: boolean;\n launchContract?: RuntimeAgentControllerLaunchContract;\n transportMode?: RuntimeAgentTransportMode;\n streamingMode?: RuntimeAgentStreamingMode;\n timeoutMs?: number | null;\n retry?: number;\n contextIdMappingSpec?: RuntimeAgentControllerConversationIdMappingSpec;\n registeredAt: string;\n updatedAt: string;\n};\n\nexport type RuntimeDeviceRuntimeState = {\n controllers?: RuntimeAgentControllerState[];\n};\n\nexport type RuntimeStartV1OnboardingState = {\n disclaimerAcceptedVersion?: string;\n lastCompletedAt?: string;\n localAgentsSetupCompletedAt?: string;\n};\n\nexport type RuntimeOnboardingConfig = {\n disclaimerAcceptedAt?: string;\n startV1?: RuntimeStartV1OnboardingState;\n};\n\nexport type RuntimeConfigFallbackReason = \"invalid_json\" | \"invalid_version\";\n\nexport type RuntimeConfigReadHealth = {\n parseFallback: boolean;\n reason?: RuntimeConfigFallbackReason;\n};\n\ntype RuntimeConfigV1 = {\n v: 1;\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n skills?: RuntimeSkillsConfig;\n daemon?: RuntimeDaemonConfig;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt: string;\n};\n\ntype DevicePreferencesV1 = {\n v: 1;\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n daemon?: RuntimeDaemonConfig;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt: string;\n};\n\ntype DeviceAgentRuntimeV1 = {\n v: 1;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n updatedAt: string;\n};\n\ntype DeviceSkillsStoreV1 = {\n v: 1;\n storeDir?: string;\n agents?: Record<string, RuntimeSkillsAgentConfig>;\n updatedAt: string;\n};\n\ntype DeviceSkillsCustomTargetsV1 = {\n v: 1;\n customTargets: RuntimeSkillsCustomTarget[];\n updatedAt: string;\n};\n\ntype DeviceSkillsInstallsV1 = {\n v: 1;\n installs: RuntimeSkillsInstallRecord[];\n updatedAt: string;\n};\n\ntype RuntimeMessageCustomization = RuntimeViewCustomization[\"messages\"];\ntype RuntimeRenderCustomization = RuntimeViewCustomization[\"render\"];\ntype RuntimeHumanRender = NonNullable<RuntimeRenderCustomization>[\"human\"];\ntype RuntimeAgentRender = NonNullable<RuntimeRenderCustomization>[\"agent\"];\ntype RuntimeConfigOverrides = {\n baseUrl?: string | null;\n viewCustomization?: RuntimeViewCustomization | null;\n skills?: RuntimeSkillsConfig | null;\n daemon?: RuntimeDaemonConfig | null;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig | null;\n deviceRuntimeState?: RuntimeDeviceRuntimeState | null;\n onboarding?: RuntimeOnboardingConfig | null;\n};\nconst CUSTOM_TARGET_ID_PREFIX = \"custom-\";\nconst CUSTOM_TARGET_ID_LENGTH = 12;\nconst RUNTIME_CONFIG_LOCK_PROFILE = \"__system__\";\nconst RUNTIME_CONFIG_LOCK_KEY = \"runtime-config\";\nconst RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS = 40;\nconst RUNTIME_CONFIG_LOCK_RETRY_DELAY_MS = 25;\nconst WINDOWS_DRIVE_ONLY_RE = /^[a-zA-Z]:$/;\nconst WINDOWS_DRIVE_PREFIX_RE = /^[a-zA-Z]:[\\\\/]/;\nconst WINDOWS_UNC_RE = /^[/\\\\]{2}[^/\\\\]+[/\\\\]+[^/\\\\]+/;\nconst WINDOWS_DRIVE_ANY_RE = /^[a-zA-Z]:/;\nconst TRAILING_PATH_SEPARATORS_RE = /[\\\\/]+$/;\n\nexport function resolveRuntimeSkillsCustomTargetId(input: {\n dir: string;\n id?: string;\n}): string {\n const existingId =\n typeof input.id === \"string\" && input.id.trim().length > 0\n ? input.id.trim()\n : \"\";\n if (existingId) {\n return existingId;\n }\n const normalizedDir = normalizeCustomTargetDir(input.dir);\n const digest = createHash(\"sha256\").update(normalizedDir).digest(\"hex\");\n return `${CUSTOM_TARGET_ID_PREFIX}${digest.slice(0, CUSTOM_TARGET_ID_LENGTH)}`;\n}\n\nexport function resolveDefaultAgentContextSourceField(\n _agentId: string\n): string {\n return DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD;\n}\n\nexport function createDefaultRuntimeAgentControllerSettings(\n agentId: string\n): RuntimeAgentControllerSettings {\n return {\n transportMode: DEFAULT_RUNTIME_AGENT_TRANSPORT_MODE,\n streamingMode: resolveDefaultRuntimeAgentStreamingMode(),\n timeoutMs: DEFAULT_LOCAL_ADAPTER_TIMEOUT_MS,\n retry: DEFAULT_RUNTIME_AGENT_RETRY,\n contextIdMappingSpec: {\n sourceField: resolveDefaultAgentContextSourceField(agentId),\n mappingVersion: DEFAULT_RUNTIME_AGENT_CONTEXT_MAPPING_VERSION,\n },\n };\n}\n\nconst resolveDefaultRuntimeAgentStreamingMode =\n (): RuntimeAgentStreamingMode => {\n const preset = resolveOpenMeldEnvPreset();\n if (preset === \"dev-local\" || preset === \"canary\") {\n return \"stream\";\n }\n return DEFAULT_RUNTIME_AGENT_STREAMING_MODE;\n };\n\nexport async function getConfiguredBaseUrl(): Promise<string | null> {\n const config = await readRuntimeConfig(\"preferences\");\n if (!config?.baseUrl) {\n return null;\n }\n return normalizeGatewayBaseUrl(config.baseUrl);\n}\n\nexport async function getConfiguredViewCustomization(): Promise<RuntimeViewCustomization | null> {\n const config = await readRuntimeConfig(\"preferences\");\n return config?.viewCustomization ?? null;\n}\n\nexport async function getConfiguredSkillsConfig(): Promise<RuntimeSkillsConfig | null> {\n const config = await readRuntimeConfig(\"skills\");\n return config?.skills ?? null;\n}\n\nexport async function getConfiguredDeviceRuntimeState(): Promise<RuntimeDeviceRuntimeState | null> {\n const config = await readRuntimeConfig(\"runtime\");\n return config?.deviceRuntimeState ?? null;\n}\n\nexport async function getConfiguredDaemonDispatchLimits(): Promise<RuntimeDaemonDispatchLimits> {\n const config = await readRuntimeConfig(\"preferences\");\n return resolveRuntimeDaemonDispatchLimits(config?.daemon?.dispatch);\n}\n\nexport async function getConfiguredOpenMeldToolsMaintenance(): Promise<RuntimeOpenMeldToolsMaintenanceConfig> {\n let preferencesFile = await readOptionalJsonFile(devicePreferencesPath());\n if (!preferencesFile.found) {\n preferencesFile = await readOptionalJsonFile(legacyRuntimeConfigPath());\n }\n if (\n preferencesFile.error ||\n (preferencesFile.found && !isSupportedConfigFile(preferencesFile.value))\n ) {\n throw new Error(\"OpenMeld update setting is invalid.\");\n }\n if (\n preferencesFile.found &&\n preferencesFile.value &&\n typeof preferencesFile.value === \"object\" &&\n \"openMeldToolsMaintenance\" in preferencesFile.value &&\n !parseRuntimeOpenMeldToolsMaintenanceConfig(\n (preferencesFile.value as { openMeldToolsMaintenance?: unknown })\n .openMeldToolsMaintenance\n )\n ) {\n throw new Error(\"OpenMeld update setting is invalid.\");\n }\n return (\n parseRuntimeOpenMeldToolsMaintenanceConfig(\n (preferencesFile.value as { openMeldToolsMaintenance?: unknown } | null)\n ?.openMeldToolsMaintenance\n ) ?? {\n automaticUpdatesEnabled: true,\n }\n );\n}\n\nexport async function getConfiguredOnboardingConfig(): Promise<RuntimeOnboardingConfig | null> {\n const config = await readRuntimeConfig(\"preferences\");\n return config?.onboarding ?? null;\n}\n\nexport async function getConfiguredOnboardingDisclaimerAcceptedAt(): Promise<\n string | null\n> {\n const onboarding = await getConfiguredOnboardingConfig();\n return onboarding?.disclaimerAcceptedAt ?? null;\n}\n\nexport async function getConfiguredStartV1OnboardingState(): Promise<RuntimeStartV1OnboardingState | null> {\n const onboarding = await getConfiguredOnboardingConfig();\n return onboarding?.startV1 ?? null;\n}\n\nexport async function getRuntimeConfigReadHealth(): Promise<RuntimeConfigReadHealth> {\n const result = await readRuntimeConfigDetailed();\n return result.health;\n}\n\nexport async function alignRuntimeConfigStorage(): Promise<{\n migratedLegacyConfig: boolean;\n removedLegacyConfig: boolean;\n}> {\n return await withRuntimeConfigLock(migrateLegacyRuntimeConfig);\n}\n\nexport async function setConfiguredBaseUrl(baseUrl: string): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const normalized = normalizeGatewayBaseUrl(baseUrl);\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const next = buildNextConfig(previous, { baseUrl: normalized });\n\n await writeRuntimeConfigFields(next, [\"baseUrl\"]);\n });\n}\n\nexport async function setConfiguredOpenMeldToolsMaintenance(\n maintenance: RuntimeOpenMeldToolsMaintenanceConfig\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const next = buildNextConfig(previous, {\n openMeldToolsMaintenance: maintenance,\n });\n\n await writeRuntimeConfigFields(next, [\"openMeldToolsMaintenance\"]);\n });\n}\n\nexport async function setConfiguredSkillsConfig(\n skills: RuntimeSkillsConfig\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"skills\");\n const next = buildNextConfig(previous, { skills });\n\n await writeRuntimeConfigFields(next, [\"skills\"]);\n });\n}\n\nexport async function updateConfiguredSkillsConfig(\n updater: (current: RuntimeSkillsConfig | null) => RuntimeSkillsConfig | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"skills\");\n const previousSkills = previous?.skills ?? null;\n const nextSkills = updater(previousSkills);\n\n const previousComparable = JSON.stringify(previousSkills);\n const nextComparable = JSON.stringify(nextSkills);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, { skills: nextSkills });\n\n await writeRuntimeConfigFields(next, [\"skills\"]);\n });\n}\n\nexport async function setConfiguredDeviceRuntimeState(\n deviceRuntimeState: RuntimeDeviceRuntimeState\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"runtime\");\n const next = buildNextConfig(previous, { deviceRuntimeState });\n\n await writeRuntimeConfigFields(next, [\"deviceRuntimeState\"]);\n });\n}\n\nexport async function updateConfiguredDeviceRuntimeState(\n updater: (\n current: RuntimeDeviceRuntimeState | null\n ) => RuntimeDeviceRuntimeState | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"runtime\");\n const previousDeviceRuntimeState = previous?.deviceRuntimeState ?? null;\n const nextDeviceRuntimeState = updater(previousDeviceRuntimeState);\n\n const previousComparable = JSON.stringify(previousDeviceRuntimeState);\n const nextComparable = JSON.stringify(nextDeviceRuntimeState);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, {\n deviceRuntimeState: nextDeviceRuntimeState,\n });\n\n await writeRuntimeConfigFields(next, [\"deviceRuntimeState\"]);\n });\n}\n\nexport async function updateConfiguredStartV1OnboardingState(\n updater: (\n current: RuntimeStartV1OnboardingState | null\n ) => RuntimeStartV1OnboardingState | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const previousOnboarding = previous?.onboarding ?? null;\n const previousStartV1 = previousOnboarding?.startV1 ?? null;\n const nextStartV1 = updater(previousStartV1);\n\n const previousComparable = JSON.stringify(previousStartV1);\n const nextComparable = JSON.stringify(nextStartV1);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const nextOnboarding =\n nextStartV1 || previousOnboarding?.disclaimerAcceptedAt\n ? {\n ...(previousOnboarding?.disclaimerAcceptedAt\n ? {\n disclaimerAcceptedAt: previousOnboarding.disclaimerAcceptedAt,\n }\n : {}),\n ...(nextStartV1 ? { startV1: nextStartV1 } : {}),\n }\n : null;\n const next = buildNextConfig(previous, {\n onboarding: nextOnboarding,\n });\n\n await writeRuntimeConfigFields(next, [\"onboarding\"]);\n });\n}\n\nexport async function updateConfiguredOnboardingConfig(\n updater: (\n current: RuntimeOnboardingConfig | null\n ) => RuntimeOnboardingConfig | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const previousOnboarding = previous?.onboarding ?? null;\n const nextOnboarding = updater(previousOnboarding);\n\n const previousComparable = JSON.stringify(previousOnboarding);\n const nextComparable = JSON.stringify(nextOnboarding);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, {\n onboarding: nextOnboarding,\n });\n\n await writeRuntimeConfigFields(next, [\"onboarding\"]);\n });\n}\n\nfunction buildNextConfig(\n previous: RuntimeConfigV1 | null,\n overrides: RuntimeConfigOverrides\n): RuntimeConfigV1 {\n const baseUrl = resolveBaseUrlOverride(previous?.baseUrl, overrides);\n const viewCustomization = resolveConfigOverride(\n \"viewCustomization\",\n previous?.viewCustomization,\n overrides\n );\n const skills = resolveConfigOverride(\"skills\", previous?.skills, overrides);\n const daemon = resolveConfigOverride(\"daemon\", previous?.daemon, overrides);\n const openMeldToolsMaintenance = resolveConfigOverride(\n \"openMeldToolsMaintenance\",\n previous?.openMeldToolsMaintenance,\n overrides\n );\n const deviceRuntimeState = resolveConfigOverride(\n \"deviceRuntimeState\",\n previous?.deviceRuntimeState,\n overrides\n );\n const onboarding = resolveConfigOverride(\n \"onboarding\",\n previous?.onboarding,\n overrides\n );\n\n return {\n v: 1,\n ...(baseUrl ? { baseUrl } : {}),\n ...(viewCustomization ? { viewCustomization } : {}),\n ...(skills ? { skills } : {}),\n ...(daemon ? { daemon } : {}),\n ...(openMeldToolsMaintenance ? { openMeldToolsMaintenance } : {}),\n ...(deviceRuntimeState ? { deviceRuntimeState } : {}),\n ...(onboarding ? { onboarding } : {}),\n updatedAt: new Date().toISOString(),\n };\n}\n\nfunction resolveBaseUrlOverride(\n previous: string | undefined,\n overrides: RuntimeConfigOverrides\n): string | undefined {\n if (!(\"baseUrl\" in overrides)) {\n return previous;\n }\n if (typeof overrides.baseUrl !== \"string\" || overrides.baseUrl.length === 0) {\n return undefined;\n }\n return overrides.baseUrl;\n}\n\nfunction resolveConfigOverride<T>(\n key:\n | \"viewCustomization\"\n | \"skills\"\n | \"daemon\"\n | \"openMeldToolsMaintenance\"\n | \"deviceRuntimeState\"\n | \"onboarding\",\n previous: T | undefined,\n overrides: RuntimeConfigOverrides\n): T | undefined {\n if (!(key in overrides)) {\n return previous;\n }\n const value = overrides[key] as T | null | undefined;\n return value ?? undefined;\n}\n\nasync function acquireRuntimeConfigLock(): Promise<OpenMeldLock> {\n for (\n let attempt = 0;\n attempt < RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS;\n attempt += 1\n ) {\n try {\n return await acquireLock({\n openMeldProfileId: RUNTIME_CONFIG_LOCK_PROFILE,\n key: RUNTIME_CONFIG_LOCK_KEY,\n });\n } catch (error) {\n if (\n !isOpenMeldLockError(error) ||\n isOpenMeldOrphanedLockError(error) ||\n attempt === RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS - 1\n ) {\n throw error;\n }\n await delay(RUNTIME_CONFIG_LOCK_RETRY_DELAY_MS);\n }\n }\n\n throw new Error(\"runtime config lock retries exhausted\");\n}\n\nasync function withRuntimeConfigLock<T>(run: () => Promise<T>): Promise<T> {\n const lock = await acquireRuntimeConfigLock();\n return await runWithHeldLock({\n lock,\n run,\n releaseContext: {\n component: \"runtime_config\",\n lockKey: RUNTIME_CONFIG_LOCK_KEY,\n openMeldProfileId: RUNTIME_CONFIG_LOCK_PROFILE,\n },\n });\n}\n\ntype RuntimeConfigDomain = \"preferences\" | \"runtime\" | \"skills\";\n\nasync function readRuntimeConfig(\n domain: RuntimeConfigDomain\n): Promise<RuntimeConfigV1 | null> {\n const result = await readRuntimeConfigDetailed(domain);\n return result.config;\n}\n\nasync function readRuntimeConfigDetailed(\n domain?: RuntimeConfigDomain\n): Promise<{\n config: RuntimeConfigV1 | null;\n health: RuntimeConfigReadHealth;\n}> {\n const split = await readSplitRuntimeConfigDetailed(domain);\n if (split.hasFiles) {\n return {\n config: split.config,\n health: split.health,\n };\n }\n return await readLegacyRuntimeConfigDetailed();\n}\n\nfunction parseConfiguredBaseUrl(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n try {\n return normalizeGatewayBaseUrl(value);\n } catch {\n return undefined;\n }\n}\n\nfunction parseRuntimeViewCustomization(\n value: unknown\n): RuntimeViewCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n messages?: unknown;\n render?: unknown;\n };\n\n const messages = parseMessageCustomization(obj.messages);\n const render = parseRenderCustomization(obj.render);\n\n if (!(messages || render)) {\n return undefined;\n }\n\n return {\n ...(messages ? { messages } : {}),\n ...(render ? { render } : {}),\n };\n}\n\nfunction parseRuntimeSkillsConfig(\n value: unknown\n): RuntimeSkillsConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n storeDir?: unknown;\n agents?: unknown;\n customTargets?: unknown;\n installs?: unknown;\n };\n\n const storeDir =\n typeof obj.storeDir === \"string\" && obj.storeDir.trim().length > 0\n ? obj.storeDir.trim()\n : undefined;\n const agents = parseRuntimeSkillsAgents(obj.agents);\n const installs = parseRuntimeSkillsInstallRecords(obj.installs);\n const customTargets = parseRuntimeSkillsCustomTargets(\n obj.customTargets,\n buildLegacyCustomTargetIdByDir(installs)\n );\n\n if (!(storeDir || agents || customTargets || installs)) {\n return undefined;\n }\n\n return {\n ...(storeDir ? { storeDir } : {}),\n ...(agents ? { agents } : {}),\n ...(customTargets ? { customTargets } : {}),\n ...(installs ? { installs } : {}),\n };\n}\n\nfunction parseRuntimeDaemonConfig(\n value: unknown\n): RuntimeDaemonConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n dispatch?: unknown;\n };\n const dispatch = parseRuntimeDaemonDispatchConfig(obj.dispatch);\n if (!dispatch) {\n return undefined;\n }\n return { dispatch };\n}\n\nfunction parseRuntimeOpenMeldToolsMaintenanceConfig(\n value: unknown\n): RuntimeOpenMeldToolsMaintenanceConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const automaticUpdatesEnabled = (\n value as { automaticUpdatesEnabled?: unknown }\n ).automaticUpdatesEnabled;\n if (typeof automaticUpdatesEnabled !== \"boolean\") {\n return undefined;\n }\n return { automaticUpdatesEnabled };\n}\n\nfunction parseRuntimeDaemonDispatchConfig(\n value: unknown\n): RuntimeDaemonDispatchConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n globalConcurrency?: unknown;\n queueMax?: unknown;\n };\n const globalConcurrency = parsePositiveInteger(obj.globalConcurrency);\n const queueMax = parsePositiveInteger(obj.queueMax);\n if (globalConcurrency === undefined && queueMax === undefined) {\n return undefined;\n }\n return {\n ...(globalConcurrency === undefined ? {} : { globalConcurrency }),\n ...(queueMax === undefined ? {} : { queueMax }),\n };\n}\n\nfunction parseRuntimeDeviceRuntimeState(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n const fromDeviceRuntimeState = parseRuntimeDeviceRuntimeStateObject(value);\n return fromDeviceRuntimeState;\n}\n\nfunction parseRuntimeDeviceRuntimeStateObject(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n controllers?: unknown;\n };\n const controllers = parseRuntimeAgentControllerStates(obj.controllers);\n if (!controllers) {\n return undefined;\n }\n\n return {\n controllers,\n };\n}\n\nfunction parseRuntimeOnboardingConfig(\n value: unknown\n): RuntimeOnboardingConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n disclaimerAcceptedAt?: unknown;\n startV1?: unknown;\n };\n const disclaimerAcceptedAt = toTrimmedStringOrUndefined(\n obj.disclaimerAcceptedAt\n );\n const startV1 = parseRuntimeStartV1OnboardingState(obj.startV1);\n if (!(disclaimerAcceptedAt || startV1)) {\n return undefined;\n }\n return {\n ...(disclaimerAcceptedAt ? { disclaimerAcceptedAt } : {}),\n ...(startV1 ? { startV1 } : {}),\n };\n}\n\nfunction parseRuntimeStartV1OnboardingState(\n value: unknown\n): RuntimeStartV1OnboardingState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n disclaimerAcceptedVersion?: unknown;\n lastCompletedAt?: unknown;\n localAgentsSetupCompletedAt?: unknown;\n };\n const disclaimerAcceptedVersion = toTrimmedStringOrUndefined(\n obj.disclaimerAcceptedVersion\n );\n const lastCompletedAt = toTrimmedStringOrUndefined(obj.lastCompletedAt);\n const localAgentsSetupCompletedAt = toTrimmedStringOrUndefined(\n obj.localAgentsSetupCompletedAt\n );\n if (\n !(\n disclaimerAcceptedVersion ||\n lastCompletedAt ||\n localAgentsSetupCompletedAt\n )\n ) {\n return undefined;\n }\n return {\n ...(disclaimerAcceptedVersion ? { disclaimerAcceptedVersion } : {}),\n ...(lastCompletedAt ? { lastCompletedAt } : {}),\n ...(localAgentsSetupCompletedAt ? { localAgentsSetupCompletedAt } : {}),\n };\n}\n\nfunction runtimeConfigFiles(next: RuntimeConfigV1) {\n const updatedAt = new Date().toISOString();\n return [\n {\n path: devicePreferencesPath(),\n domain: \"preferences\",\n keys: [\n \"baseUrl\",\n \"viewCustomization\",\n \"daemon\",\n \"openMeldToolsMaintenance\",\n \"onboarding\",\n ],\n value: buildDevicePreferencesState(next, updatedAt),\n },\n {\n path: deviceAgentRuntimePath(),\n domain: \"runtime\",\n keys: [\"deviceRuntimeState\"],\n value: buildDeviceAgentRuntimeState(next, updatedAt),\n },\n {\n path: deviceSkillsStorePath(),\n domain: \"skills\",\n keys: [\"storeDir\", \"agents\"],\n value: buildDeviceSkillsStoreState(next, updatedAt),\n },\n {\n path: deviceSkillsCustomTargetsPath(),\n domain: \"skills\",\n keys: [\"customTargets\"],\n value: buildDeviceSkillsCustomTargetsState(next, updatedAt),\n },\n {\n path: deviceSkillsInstallsPath(),\n domain: \"skills\",\n keys: [\"installs\"],\n value: buildDeviceSkillsInstallsState(next, updatedAt),\n },\n ] as const;\n}\n\nfunction isSupportedConfigFile(\n value: unknown\n): value is Record<string, unknown> {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"v\" in value &&\n value.v === 1\n );\n}\n\nasync function migrateLegacyRuntimeConfig(): Promise<{\n migratedLegacyConfig: boolean;\n removedLegacyConfig: boolean;\n}> {\n if (!(await pathExists(legacyRuntimeConfigPath()))) {\n return { migratedLegacyConfig: false, removedLegacyConfig: false };\n }\n const legacy = await readLegacyRuntimeConfigDetailed();\n if (legacy.health.parseFallback) {\n throw new Error(\n \"OpenMeld could not migrate the saved configuration. The original file has been preserved.\"\n );\n }\n const files = runtimeConfigFiles(\n legacy.config ?? { v: 1, updatedAt: new Date().toISOString() }\n );\n let migratedLegacyConfig = false;\n let canRemoveLegacy = true;\n for (const file of files) {\n const existing = await readOptionalJsonFile(file.path);\n if (existing.found) {\n // A partially completed migration never replaces an already-owned file.\n canRemoveLegacy &&=\n !existing.error && isSupportedConfigFile(existing.value);\n continue;\n }\n await writeRuntimeConfigFile(\n file.path,\n file.value ?? { v: 1, updatedAt: new Date().toISOString() }\n );\n migratedLegacyConfig = true;\n }\n if (canRemoveLegacy) {\n await rm(legacyRuntimeConfigPath(), { force: true });\n }\n return { migratedLegacyConfig, removedLegacyConfig: canRemoveLegacy };\n}\n\nasync function readRuntimeConfigForMutation(\n domain: RuntimeConfigDomain\n): Promise<RuntimeConfigV1 | null> {\n await migrateLegacyRuntimeConfig();\n const files = runtimeConfigFiles({ v: 1, updatedAt: \"\" }).filter(\n (file) => file.domain === domain\n );\n for (const file of files) {\n const existing = await readOptionalJsonFile(file.path);\n if (\n existing.found &&\n (existing.error || !isSupportedConfigFile(existing.value))\n ) {\n throw new Error(\n `OpenMeld cannot safely update ${file.path}. Its existing contents have been preserved.`\n );\n }\n }\n return await readRuntimeConfig(domain);\n}\n\nasync function writeRuntimeConfigFields(\n next: RuntimeConfigV1,\n fields: (keyof RuntimeConfigOverrides)[]\n): Promise<void> {\n const files = runtimeConfigFiles(next).filter((file) =>\n file.domain === \"skills\"\n ? fields.includes(\"skills\")\n : file.keys.some((key) =>\n fields.includes(key as keyof RuntimeConfigOverrides)\n )\n );\n for (const file of files) {\n const existing = await readOptionalJsonFile(file.path);\n if (\n existing.found &&\n (existing.error || !isSupportedConfigFile(existing.value))\n ) {\n throw new Error(\n `OpenMeld cannot safely update ${file.path}. Its existing contents have been preserved.`\n );\n }\n const value = {\n ...(existing.value as Record<string, unknown> | null),\n v: 1,\n } as Record<string, unknown>;\n const incoming = file.value as Record<string, unknown> | null;\n for (const key of file.keys) {\n if (\n file.domain === \"preferences\" &&\n !fields.includes(key as keyof RuntimeConfigOverrides)\n ) {\n continue;\n }\n delete value[key];\n if (incoming && key in incoming) {\n value[key] = incoming[key];\n }\n }\n value.updatedAt = new Date().toISOString();\n // Keep empty owned files: absence must not resurrect legacy values after a crash.\n await writeRuntimeConfigFile(file.path, value);\n }\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction parseMessageCustomization(\n value: unknown\n): RuntimeMessageCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n human?: unknown;\n agent?: unknown;\n };\n\n const human = toStringMap(obj.human);\n const agent = toStringMap(obj.agent);\n\n if (!(human || agent)) {\n return undefined;\n }\n\n return {\n ...(human ? { human } : {}),\n ...(agent ? { agent } : {}),\n };\n}\n\nfunction parseRenderCustomization(\n value: unknown\n): RuntimeRenderCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n human?: unknown;\n agent?: unknown;\n };\n\n const humanRaw = obj.human as { dataMode?: unknown } | undefined;\n const agentRaw = obj.agent as { envelopeMode?: unknown } | undefined;\n\n const human: RuntimeHumanRender | undefined =\n humanRaw?.dataMode === \"payload\" || humanRaw?.dataMode === \"envelope\"\n ? { dataMode: humanRaw.dataMode }\n : undefined;\n\n const agent: RuntimeAgentRender | undefined =\n agentRaw?.envelopeMode === \"verbose\" || agentRaw?.envelopeMode === \"compact\"\n ? { envelopeMode: agentRaw.envelopeMode }\n : undefined;\n\n if (!(human || agent)) {\n return undefined;\n }\n\n return {\n ...(human ? { human } : {}),\n ...(agent ? { agent } : {}),\n };\n}\n\nfunction parseRuntimeSkillsAgents(\n value: unknown\n): Record<string, RuntimeSkillsAgentConfig> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const entries = Object.entries(value).flatMap(([agentName, agentValue]) => {\n if (!agentValue || typeof agentValue !== \"object\") {\n return [];\n }\n const agentObj = agentValue as {\n skillsDir?: unknown;\n globalSkillsDir?: unknown;\n };\n const skillsDir =\n typeof agentObj.skillsDir === \"string\" &&\n agentObj.skillsDir.trim().length > 0\n ? agentObj.skillsDir.trim()\n : undefined;\n const globalSkillsDir =\n typeof agentObj.globalSkillsDir === \"string\" &&\n agentObj.globalSkillsDir.trim().length > 0\n ? agentObj.globalSkillsDir.trim()\n : undefined;\n if (!(skillsDir || globalSkillsDir)) {\n return [];\n }\n return [\n [\n agentName,\n {\n ...(skillsDir ? { skillsDir } : {}),\n ...(globalSkillsDir ? { globalSkillsDir } : {}),\n },\n ] as [string, RuntimeSkillsAgentConfig],\n ];\n });\n\n if (entries.length === 0) {\n return undefined;\n }\n\n return Object.fromEntries(entries);\n}\n\nfunction parseRuntimeSkillsCustomTargets(\n value: unknown,\n legacyCustomTargetIdByDir?: Map<string, string>\n): RuntimeSkillsCustomTarget[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const targets = value.flatMap((item) => {\n if (!item || typeof item !== \"object\") {\n return [];\n }\n const obj = item as { id?: unknown; name?: unknown; dir?: unknown };\n const name =\n typeof obj.name === \"string\" && obj.name.trim().length > 0\n ? obj.name.trim()\n : \"\";\n const dir =\n typeof obj.dir === \"string\" && obj.dir.trim().length > 0\n ? normalizeCustomTargetDir(obj.dir)\n : \"\";\n if (!(name && dir)) {\n return [];\n }\n const explicitId = toTrimmedStringOrUndefined(obj.id);\n const fallbackLegacyId = legacyCustomTargetIdByDir?.get(dir);\n const id = resolveRuntimeSkillsCustomTargetId({\n dir,\n ...(explicitId ? { id: explicitId } : {}),\n ...(!explicitId && fallbackLegacyId ? { id: fallbackLegacyId } : {}),\n });\n return [{ id, name, dir }];\n });\n\n if (targets.length === 0) {\n return undefined;\n }\n\n return targets;\n}\n\nfunction parseRuntimeSkillsInstallRecords(\n value: unknown\n): RuntimeSkillsInstallRecord[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const records = value\n .map((item) => parseRuntimeSkillsInstallRecord(item))\n .filter((record): record is RuntimeSkillsInstallRecord => record !== null);\n\n if (records.length === 0) {\n return undefined;\n }\n\n return records;\n}\n\nfunction buildLegacyCustomTargetIdByDir(\n installs: RuntimeSkillsInstallRecord[] | undefined\n): Map<string, string> {\n const byDir = new Map<string, string>();\n for (const install of installs ?? []) {\n if (!install.targetId.startsWith(CUSTOM_TARGET_ID_PREFIX)) {\n continue;\n }\n const normalizedTargetDir = normalizeCustomTargetDir(install.targetDir);\n if (!normalizedTargetDir) {\n continue;\n }\n byDir.set(normalizedTargetDir, install.targetId);\n }\n return byDir;\n}\n\nfunction parseRuntimeSkillsInstallRecord(\n value: unknown\n): RuntimeSkillsInstallRecord | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const obj = value as {\n targetId?: unknown;\n targetDir?: unknown;\n mode?: unknown;\n status?: unknown;\n skillIds?: unknown;\n reason?: unknown;\n updatedAt?: unknown;\n };\n const targetId = toTrimmedStringOrEmpty(obj.targetId);\n const rawTargetDir = toTrimmedStringOrEmpty(obj.targetDir);\n const targetDir = rawTargetDir;\n const mode = parseSkillsInstallMode(obj.mode);\n const status = parseSkillsInstallStatus(obj.status);\n const skillIds = Array.isArray(obj.skillIds)\n ? obj.skillIds\n .map((skill) => (typeof skill === \"string\" ? skill.trim() : \"\"))\n .filter((skill): skill is string => skill.length > 0)\n : [];\n const updatedAt = toTrimmedStringOrEmpty(obj.updatedAt);\n const reason = toTrimmedStringOrUndefined(obj.reason);\n\n if (!(targetId && targetDir && mode && status && updatedAt)) {\n return null;\n }\n\n return {\n targetId,\n targetDir,\n mode,\n status,\n skillIds,\n ...(reason ? { reason } : {}),\n updatedAt,\n };\n}\n\nfunction parseRuntimeAgentControllerStates(\n value: unknown\n): RuntimeAgentControllerState[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const parsed = value\n .map((entry) => parseRuntimeAgentControllerState(entry))\n .filter((entry): entry is RuntimeAgentControllerState => entry !== null);\n\n if (parsed.length === 0) {\n return undefined;\n }\n\n const deduped = new Map<string, RuntimeAgentControllerState>();\n for (const entry of parsed) {\n deduped.set(entry.agentId, entry);\n }\n\n return [...deduped.values()].sort((a, b) =>\n a.agentId.localeCompare(b.agentId)\n );\n}\n\nfunction parseRuntimeAgentControllerState(\n value: unknown\n): RuntimeAgentControllerState | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const obj = value as {\n agentId?: unknown;\n displayName?: unknown;\n enabled?: unknown;\n launchContract?: unknown;\n transportMode?: unknown;\n streamingMode?: unknown;\n timeoutMs?: unknown;\n retry?: unknown;\n contextIdMappingSpec?: unknown;\n registeredAt?: unknown;\n updatedAt?: unknown;\n };\n const agentId = toTrimmedStringOrEmpty(obj.agentId);\n const displayName = toTrimmedStringOrEmpty(obj.displayName);\n const enabled = typeof obj.enabled === \"boolean\" ? obj.enabled : null;\n const launchContract = parseRuntimeAgentControllerLaunchContract(\n obj.launchContract\n );\n const defaults = createDefaultRuntimeAgentControllerSettings(agentId);\n const controllerSettings = parseRuntimeAgentControllerSettings(\n {\n transportMode: obj.transportMode,\n streamingMode: obj.streamingMode,\n timeoutMs: obj.timeoutMs,\n retry: obj.retry,\n contextIdMappingSpec: obj.contextIdMappingSpec,\n },\n defaults\n );\n const registeredAt = toTrimmedStringOrEmpty(obj.registeredAt);\n const updatedAt = toTrimmedStringOrEmpty(obj.updatedAt);\n\n if (\n !(\n agentId &&\n displayName &&\n enabled !== null &&\n controllerSettings &&\n registeredAt &&\n updatedAt\n )\n ) {\n return null;\n }\n\n return {\n agentId,\n displayName,\n enabled,\n ...(launchContract ? { launchContract } : {}),\n transportMode: controllerSettings.transportMode,\n streamingMode: controllerSettings.streamingMode,\n timeoutMs: controllerSettings.timeoutMs,\n retry: controllerSettings.retry,\n contextIdMappingSpec: controllerSettings.contextIdMappingSpec,\n registeredAt,\n updatedAt,\n };\n}\n\nfunction parseRuntimeAgentControllerLaunchContract(\n value: unknown\n): RuntimeAgentControllerLaunchContract | undefined {\n if (!(value && typeof value === \"object\")) {\n return undefined;\n }\n const parsed = runtimeAgentControllerLaunchContractSchema.safeParse(value);\n return parsed.success ? parsed.data : undefined;\n}\n\nfunction parseRuntimeAgentControllerSettings(\n raw: {\n transportMode: unknown;\n streamingMode: unknown;\n timeoutMs: unknown;\n retry: unknown;\n contextIdMappingSpec: unknown;\n },\n defaults: RuntimeAgentControllerSettings\n): RuntimeAgentControllerSettings | null {\n const normalizedStreamingMode = normalizeRuntimeStreamingMode(\n raw.streamingMode\n );\n const parsed = runtimeAgentControllerSettingsSchema.safeParse({\n transport_mode: raw.transportMode ?? defaults.transportMode,\n streaming_mode: normalizedStreamingMode ?? defaults.streamingMode,\n timeout_ms:\n raw.timeoutMs === undefined ? defaults.timeoutMs : raw.timeoutMs,\n retry: raw.retry ?? defaults.retry,\n context_id_mapping_spec:\n raw.contextIdMappingSpec ?? defaults.contextIdMappingSpec,\n });\n if (!parsed.success) {\n return null;\n }\n\n return {\n transportMode: parsed.data.transport_mode,\n streamingMode: parsed.data.streaming_mode,\n timeoutMs: normalizeRuntimeAgentTimeoutMs({\n defaults,\n timeoutMs: parsed.data.timeout_ms,\n }),\n retry: parsed.data.retry,\n contextIdMappingSpec:\n normalizeRuntimeAgentControllerConversationIdMappingSpec({\n contextIdMappingSpec: parsed.data.context_id_mapping_spec,\n defaults,\n }),\n };\n}\n\nfunction normalizeRuntimeAgentTimeoutMs(input: {\n defaults: RuntimeAgentControllerSettings;\n timeoutMs: number | null;\n}): number | null {\n // 120s was an old persisted default. Normal Agent execution must not inherit\n // it as a fixed wall-clock cutoff.\n if (input.timeoutMs === 120_000) {\n return input.defaults.timeoutMs;\n }\n return input.timeoutMs;\n}\n\nfunction normalizeRuntimeAgentControllerConversationIdMappingSpec(input: {\n contextIdMappingSpec: RuntimeAgentControllerConversationIdMappingSpec;\n defaults: RuntimeAgentControllerSettings;\n}): RuntimeAgentControllerConversationIdMappingSpec {\n if (\n input.contextIdMappingSpec.sourceField !==\n DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD\n ) {\n return input.defaults.contextIdMappingSpec;\n }\n return input.contextIdMappingSpec;\n}\n\nfunction resolveRuntimeDaemonDispatchLimits(\n config?: RuntimeDaemonDispatchConfig\n): RuntimeDaemonDispatchLimits {\n return {\n globalConcurrency:\n parsePositiveInteger(config?.globalConcurrency) ??\n DEFAULT_RUNTIME_DAEMON_GLOBAL_CONCURRENCY,\n queueMax:\n parsePositiveInteger(config?.queueMax) ??\n DEFAULT_RUNTIME_DAEMON_QUEUE_MAX,\n };\n}\n\nfunction normalizeRuntimeStreamingMode(\n value: unknown\n): RuntimeAgentStreamingMode | null {\n if (value === \"final\" || value === \"stream\") {\n return value;\n }\n return null;\n}\n\nfunction parseSkillsInstallMode(\n value: unknown\n): RuntimeSkillsInstallRecord[\"mode\"] | null {\n if (value === \"symlink\" || value === \"copy\") {\n return value;\n }\n return null;\n}\n\nfunction parseSkillsInstallStatus(\n value: unknown\n): RuntimeSkillsInstallRecord[\"status\"] | null {\n if (value === \"installed\" || value === \"skipped\" || value === \"failed\") {\n return value;\n }\n return null;\n}\n\nfunction parsePositiveInteger(value: unknown): number | undefined {\n if (!Number.isInteger(value)) {\n return undefined;\n }\n const numericValue = Number(value);\n if (numericValue <= 0) {\n return undefined;\n }\n return numericValue;\n}\n\nfunction toTrimmedStringOrEmpty(value: unknown): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : \"\";\n}\n\nfunction toTrimmedStringOrUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeCustomTargetDir(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"\";\n }\n if (WINDOWS_DRIVE_ONLY_RE.test(trimmed)) {\n return `${trimmed[0]?.toUpperCase() ?? \"\"}:`;\n }\n const windowsLike =\n WINDOWS_DRIVE_PREFIX_RE.test(trimmed) || WINDOWS_UNC_RE.test(trimmed);\n const normalizedPath = windowsLike\n ? (() => {\n const normalizedWindowsPath = win32.normalize(trimmed);\n if (WINDOWS_DRIVE_ANY_RE.test(normalizedWindowsPath)) {\n return `${normalizedWindowsPath[0]?.toUpperCase() ?? \"\"}${normalizedWindowsPath.slice(1)}`;\n }\n return normalizedWindowsPath;\n })()\n : normalize(trimmed);\n const isPosixRoot = normalizedPath === posix.parse(normalizedPath).root;\n const isWindowsRoot = normalizedPath === win32.parse(normalizedPath).root;\n if (isPosixRoot || isWindowsRoot) {\n return normalizedPath;\n }\n return normalizedPath.replace(TRAILING_PATH_SEPARATORS_RE, \"\");\n}\n\nfunction toStringMap(value: unknown): Record<string, string> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\"\n );\n if (entries.length === 0) {\n return undefined;\n }\n\n return Object.fromEntries(entries);\n}\n\nfunction isFileNotFoundError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === \"ENOENT\"\n );\n}\n\nasync function readSplitRuntimeConfigDetailed(\n domain?: RuntimeConfigDomain\n): Promise<{\n config: RuntimeConfigV1 | null;\n hasFiles: boolean;\n health: RuntimeConfigReadHealth;\n}> {\n const [\n preferencesFile,\n agentRuntimeFile,\n skillsStoreFile,\n customTargetsFile,\n installsFile,\n ] = await Promise.all([\n readDomainFile(\"preferences\", devicePreferencesPath()),\n readDomainFile(\"runtime\", deviceAgentRuntimePath()),\n readDomainFile(\"skills\", deviceSkillsStorePath()),\n readDomainFile(\"skills\", deviceSkillsCustomTargetsPath()),\n readDomainFile(\"skills\", deviceSkillsInstallsPath()),\n ]);\n\n function readDomainFile(owner: RuntimeConfigDomain, path: string) {\n return !domain || domain === owner\n ? readOptionalJsonFile(path)\n : Promise.resolve({ found: false, value: null, error: undefined });\n }\n\n const files = [\n preferencesFile,\n agentRuntimeFile,\n skillsStoreFile,\n customTargetsFile,\n installsFile,\n ];\n const hasFiles = files.some((file) => file.found);\n if (!hasFiles) {\n return {\n config: null,\n hasFiles: false,\n health: {\n parseFallback: false,\n },\n };\n }\n\n const invalidFile = files.find((file) => file.error);\n const preferences = parseDevicePreferencesConfig(preferencesFile.value);\n const agentRuntime = parseDeviceAgentRuntimeConfig(agentRuntimeFile.value);\n const skillsStore = parseDeviceSkillsStoreConfig(skillsStoreFile.value);\n const customTargets = parseDeviceSkillsCustomTargetsConfig(\n customTargetsFile.value\n );\n const installs = parseDeviceSkillsInstallsConfig(installsFile.value);\n\n const skills = mergeRuntimeSkillsConfig({\n store: skillsStore,\n customTargets,\n installs,\n });\n const config = buildRuntimeConfigFromParts({\n baseUrl: preferences.baseUrl,\n viewCustomization: preferences.viewCustomization,\n daemon: preferences.daemon,\n openMeldToolsMaintenance: preferences.openMeldToolsMaintenance,\n onboarding: preferences.onboarding,\n deviceRuntimeState: agentRuntime,\n skills,\n });\n\n return {\n config,\n hasFiles: true,\n health: invalidFile\n ? {\n parseFallback: true,\n reason: invalidFile.error ?? \"invalid_json\",\n }\n : {\n parseFallback: false,\n },\n };\n}\n\nasync function readLegacyRuntimeConfigDetailed(): Promise<{\n config: RuntimeConfigV1 | null;\n health: RuntimeConfigReadHealth;\n}> {\n let raw: string;\n try {\n raw = await readFile(legacyRuntimeConfigPath(), \"utf8\");\n } catch (error) {\n if (isFileNotFoundError(error)) {\n return {\n config: null,\n health: {\n parseFallback: false,\n },\n };\n }\n throw error;\n }\n\n if (raw.trim().length === 0) {\n return {\n config: null,\n health: {\n parseFallback: false,\n },\n };\n }\n\n let parsed: Partial<RuntimeConfigV1> & {\n agents?: unknown;\n daemon?: unknown;\n onboarding?: unknown;\n openMeldToolsMaintenance?: unknown;\n };\n try {\n parsed = JSON.parse(raw) as Partial<RuntimeConfigV1> & {\n agents?: unknown;\n daemon?: unknown;\n onboarding?: unknown;\n };\n } catch {\n return {\n config: null,\n health: {\n parseFallback: true,\n reason: \"invalid_json\",\n },\n };\n }\n\n if (parsed.v !== 1) {\n return {\n config: null,\n health: {\n parseFallback: true,\n reason: \"invalid_version\",\n },\n };\n }\n\n return {\n config: buildRuntimeConfigFromParts({\n baseUrl: parseConfiguredBaseUrl(parsed.baseUrl),\n viewCustomization: parseRuntimeViewCustomization(\n parsed.viewCustomization\n ),\n skills: parseRuntimeSkillsConfig(parsed.skills),\n daemon: parseRuntimeDaemonConfig(parsed.daemon),\n openMeldToolsMaintenance: parseRuntimeOpenMeldToolsMaintenanceConfig(\n parsed.openMeldToolsMaintenance\n ),\n deviceRuntimeState: parseRuntimeDeviceRuntimeState(\n parsed.deviceRuntimeState === undefined\n ? readLegacyAgentRegistrations(parsed.agents)\n : parsed.deviceRuntimeState\n ),\n onboarding: parseRuntimeOnboardingConfig(parsed.onboarding),\n updatedAt:\n typeof parsed.updatedAt === \"string\"\n ? parsed.updatedAt\n : new Date().toISOString(),\n }),\n health: {\n parseFallback: false,\n },\n };\n}\n\nfunction buildRuntimeConfigFromParts(input: {\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n skills?: RuntimeSkillsConfig;\n daemon?: RuntimeDaemonConfig;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt?: string;\n}): RuntimeConfigV1 | null {\n const updatedAt = input.updatedAt ?? new Date().toISOString();\n if (\n !(\n input.baseUrl ||\n input.viewCustomization ||\n input.skills ||\n input.daemon ||\n input.openMeldToolsMaintenance ||\n input.deviceRuntimeState ||\n input.onboarding\n )\n ) {\n return null;\n }\n\n return {\n v: 1,\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n ...(input.viewCustomization\n ? { viewCustomization: input.viewCustomization }\n : {}),\n ...(input.skills ? { skills: input.skills } : {}),\n ...(input.daemon ? { daemon: input.daemon } : {}),\n ...(input.openMeldToolsMaintenance\n ? { openMeldToolsMaintenance: input.openMeldToolsMaintenance }\n : {}),\n ...(input.deviceRuntimeState\n ? { deviceRuntimeState: input.deviceRuntimeState }\n : {}),\n ...(input.onboarding ? { onboarding: input.onboarding } : {}),\n updatedAt,\n };\n}\n\nfunction parseDevicePreferencesConfig(\n value: unknown\n): Pick<\n RuntimeConfigV1,\n | \"baseUrl\"\n | \"viewCustomization\"\n | \"daemon\"\n | \"openMeldToolsMaintenance\"\n | \"onboarding\"\n> {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n const parsed = value as Partial<DevicePreferencesV1>;\n if (parsed.v !== 1) {\n return {};\n }\n return {\n ...(parseConfiguredBaseUrl(parsed.baseUrl)\n ? { baseUrl: parseConfiguredBaseUrl(parsed.baseUrl) }\n : {}),\n ...(parseRuntimeViewCustomization(parsed.viewCustomization)\n ? {\n viewCustomization: parseRuntimeViewCustomization(\n parsed.viewCustomization\n ),\n }\n : {}),\n ...(parseRuntimeDaemonConfig(parsed.daemon)\n ? { daemon: parseRuntimeDaemonConfig(parsed.daemon) }\n : {}),\n ...(parseRuntimeOpenMeldToolsMaintenanceConfig(\n parsed.openMeldToolsMaintenance\n )\n ? {\n openMeldToolsMaintenance: parseRuntimeOpenMeldToolsMaintenanceConfig(\n parsed.openMeldToolsMaintenance\n ),\n }\n : {}),\n ...(parseRuntimeOnboardingConfig(parsed.onboarding)\n ? { onboarding: parseRuntimeOnboardingConfig(parsed.onboarding) }\n : {}),\n };\n}\n\nfunction parseDeviceAgentRuntimeConfig(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceAgentRuntimeV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeDeviceRuntimeState(parsed.deviceRuntimeState);\n}\n\nfunction parseDeviceSkillsStoreConfig(\n value: unknown\n): Pick<RuntimeSkillsConfig, \"storeDir\" | \"agents\"> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsStoreV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n const storeDir =\n typeof parsed.storeDir === \"string\" && parsed.storeDir.trim().length > 0\n ? parsed.storeDir.trim()\n : undefined;\n const agents = parseRuntimeSkillsAgents(parsed.agents);\n if (!(storeDir || agents)) {\n return undefined;\n }\n return {\n ...(storeDir ? { storeDir } : {}),\n ...(agents ? { agents } : {}),\n };\n}\n\nfunction parseDeviceSkillsCustomTargetsConfig(\n value: unknown\n): RuntimeSkillsCustomTarget[] | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsCustomTargetsV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeSkillsCustomTargets(parsed.customTargets, undefined);\n}\n\nfunction parseDeviceSkillsInstallsConfig(\n value: unknown\n): RuntimeSkillsInstallRecord[] | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsInstallsV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeSkillsInstallRecords(parsed.installs);\n}\n\nfunction mergeRuntimeSkillsConfig(input: {\n store?: Pick<RuntimeSkillsConfig, \"storeDir\" | \"agents\">;\n customTargets?: RuntimeSkillsCustomTarget[];\n installs?: RuntimeSkillsInstallRecord[];\n}): RuntimeSkillsConfig | undefined {\n if (!(input.store || input.customTargets || input.installs)) {\n return undefined;\n }\n return {\n ...(input.store?.storeDir ? { storeDir: input.store.storeDir } : {}),\n ...(input.store?.agents ? { agents: input.store.agents } : {}),\n ...(input.customTargets ? { customTargets: input.customTargets } : {}),\n ...(input.installs ? { installs: input.installs } : {}),\n };\n}\n\nfunction buildDevicePreferencesState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DevicePreferencesV1 | null {\n if (\n !(\n next.baseUrl ||\n next.viewCustomization ||\n next.daemon ||\n next.openMeldToolsMaintenance ||\n next.onboarding\n )\n ) {\n return null;\n }\n return {\n v: 1,\n ...(next.baseUrl ? { baseUrl: next.baseUrl } : {}),\n ...(next.viewCustomization\n ? { viewCustomization: next.viewCustomization }\n : {}),\n ...(next.daemon ? { daemon: next.daemon } : {}),\n ...(next.openMeldToolsMaintenance\n ? { openMeldToolsMaintenance: next.openMeldToolsMaintenance }\n : {}),\n ...(next.onboarding ? { onboarding: next.onboarding } : {}),\n updatedAt,\n };\n}\n\nfunction buildDeviceAgentRuntimeState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceAgentRuntimeV1 | null {\n if (!next.deviceRuntimeState) {\n return null;\n }\n return {\n v: 1,\n deviceRuntimeState: next.deviceRuntimeState,\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsStoreState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsStoreV1 | null {\n if (!(next.skills?.storeDir || next.skills?.agents)) {\n return null;\n }\n return {\n v: 1,\n ...(next.skills?.storeDir ? { storeDir: next.skills.storeDir } : {}),\n ...(next.skills?.agents ? { agents: next.skills.agents } : {}),\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsCustomTargetsState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsCustomTargetsV1 | null {\n if (!(next.skills?.customTargets && next.skills.customTargets.length > 0)) {\n return null;\n }\n return {\n v: 1,\n customTargets: next.skills.customTargets,\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsInstallsState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsInstallsV1 | null {\n if (!(next.skills?.installs && next.skills.installs.length > 0)) {\n return null;\n }\n return {\n v: 1,\n installs: next.skills.installs,\n updatedAt,\n };\n}\n\nasync function writeRuntimeConfigFile(\n path: string,\n payload: object\n): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n await writeFile(tempPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n try {\n await rename(tempPath, path);\n } catch (error) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n}\n\nasync function readOptionalJsonFile(path: string): Promise<{\n found: boolean;\n value: unknown;\n error?: RuntimeConfigFallbackReason;\n}> {\n const raw = await readFile(path, \"utf8\").catch((error) => {\n if (isFileNotFoundError(error)) {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return {\n found: false,\n value: null,\n };\n }\n if (raw.trim().length === 0) {\n return {\n found: true,\n value: null,\n };\n }\n try {\n return {\n found: true,\n value: JSON.parse(raw),\n };\n } catch {\n return {\n found: true,\n value: null,\n error: \"invalid_json\",\n };\n }\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n return await readFile(path, \"utf8\")\n .then(() => true)\n .catch((error) => {\n if (isFileNotFoundError(error)) {\n return false;\n }\n throw error;\n });\n}\n","import { normalizeBaseUrl } from \"../protocol/urls\";\nimport { isLoopbackHostname } from \"./loopback-hostname\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\nimport { getConfiguredBaseUrl } from \"./runtime-config\";\n\nexport const DEFAULT_GATEWAY_BASE_URL = \"https://gateway.openmeld.ai\";\nexport const DEV_LOCAL_GATEWAY_BASE_URL = \"http://localhost:8080\";\nconst AUTH_HOST_LABEL = \"auth\";\nconst AUTH_HOST_PREFIX = \"auth-\";\nconst LOCAL_AUTH_PORT = \"8788\";\n\nexport async function resolveBaseUrl(\n cliValue?: string,\n input: { env?: NodeJS.ProcessEnv } = {}\n): Promise<string> {\n const env = input.env ?? process.env;\n const fromCli = String(cliValue ?? \"\").trim();\n if (fromCli) {\n return normalizeGatewayBaseUrl(fromCli);\n }\n\n // False-positive guard: OPENMELD_BASE_URL fallback is intentionally removed.\n // We only support OPENMELD_GATEWAY_URL to avoid ambiguous env precedence.\n const fromEnv = String(env.OPENMELD_GATEWAY_URL ?? \"\").trim();\n if (fromEnv) {\n return normalizeGatewayBaseUrl(fromEnv);\n }\n\n const fromConfig = await getConfiguredBaseUrl();\n if (fromConfig) {\n return normalizeGatewayBaseUrl(fromConfig);\n }\n\n return normalizeGatewayBaseUrl(resolveDefaultGatewayBaseUrl({ env }));\n}\n\nexport async function resolveBaseUrlOrNull(\n cliValue?: string\n): Promise<string | null> {\n try {\n return await resolveBaseUrl(cliValue);\n } catch {\n return null;\n }\n}\n\nexport async function resolveExplicitGatewayUrlOrThrow(\n cliValue?: string\n): Promise<string | undefined> {\n const explicitGatewayUrl = normalizeOptionalString(cliValue);\n if (!explicitGatewayUrl) {\n return undefined;\n }\n\n try {\n return await Promise.resolve().then(() =>\n normalizeGatewayBaseUrl(explicitGatewayUrl)\n );\n } catch (error) {\n throw new Error(\n `Invalid explicit gateway URL \"${explicitGatewayUrl}\": ${toErrorMessage(error)}`\n );\n }\n}\n\nexport function normalizeGatewayBaseUrl(gatewayUrl: string): string {\n const normalizedGatewayUrl = normalizeBaseUrl(gatewayUrl);\n const parsedGatewayUrl = new URL(normalizedGatewayUrl);\n if (isAuthWorkerUrl(parsedGatewayUrl)) {\n throw new Error(\n \"gateway URL must point to the OpenMeld gateway, not the OpenMeld auth worker\"\n );\n }\n return normalizedGatewayUrl;\n}\n\nexport function normalizeGatewayBaseUrlOrNull(\n gatewayUrl?: string | null\n): string | null {\n const normalizedGatewayUrl = normalizeOptionalString(gatewayUrl);\n if (!normalizedGatewayUrl) {\n return null;\n }\n try {\n return normalizeGatewayBaseUrl(normalizedGatewayUrl);\n } catch {\n return null;\n }\n}\n\nfunction normalizeOptionalString(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nexport function resolveDefaultGatewayBaseUrl(\n input: { env?: NodeJS.ProcessEnv } = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(input);\n if (preset === \"dev-local\" || preset === \"canary\") {\n return DEV_LOCAL_GATEWAY_BASE_URL;\n }\n return DEFAULT_GATEWAY_BASE_URL;\n}\n\nfunction isAuthWorkerUrl(url: URL): boolean {\n if (isLoopbackHostname(url.hostname)) {\n return resolveUrlPort(url) === LOCAL_AUTH_PORT;\n }\n\n const [firstLabel = \"\"] = url.hostname.toLowerCase().split(\".\");\n return (\n firstLabel === AUTH_HOST_LABEL || firstLabel.startsWith(AUTH_HOST_PREFIX)\n );\n}\n\nfunction resolveUrlPort(url: URL): string {\n if (url.port) {\n return url.port;\n }\n if (url.protocol === \"http:\" || url.protocol === \"ws:\") {\n return \"80\";\n }\n if (url.protocol === \"https:\" || url.protocol === \"wss:\") {\n return \"443\";\n }\n return \"\";\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base-url-3HAgYrum.js","names":["obj"],"sources":["../src/config/compatibility/legacy-agent-registrations.ts","../src/config/runtime-config.ts","../src/config/base-url.ts"],"sourcesContent":["// Read adapter for the original config.json layout. Current files and current\n// controller settings remain authoritative; all values still use today's parser.\nexport function readLegacyAgentRegistrations(agents: unknown): unknown {\n if (!agents || typeof agents !== \"object\" || Array.isArray(agents)) {\n return undefined;\n }\n return { controllers: (agents as { registrations?: unknown }).registrations };\n}\n","import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, normalize, posix, win32 } from \"node:path\";\nimport {\n runtimeAgentControllerLaunchContractSchema,\n runtimeAgentControllerSettingsSchema,\n} from \"@openmeld/schemas\";\nimport type {\n RuntimeAgentControllerLaunchContract,\n RuntimeTransportMode,\n} from \"@openmeld/schemas/types\";\nimport { normalizeGatewayBaseUrl } from \"./base-url\";\nimport { readLegacyAgentRegistrations } from \"./compatibility/legacy-agent-registrations\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n type OpenMeldLock,\n runWithHeldLock,\n} from \"./lock\";\nimport {\n deviceAgentRuntimePath,\n devicePreferencesPath,\n deviceSkillsCustomTargetsPath,\n deviceSkillsInstallsPath,\n deviceSkillsStorePath,\n legacyRuntimeConfigPath,\n resolveOpenMeldEnvPreset,\n} from \"./paths\";\n\nexport type RuntimeViewCustomization = {\n messages?: {\n human?: Record<string, string>;\n agent?: Record<string, string>;\n };\n render?: {\n human?: {\n dataMode?: \"payload\" | \"envelope\";\n };\n agent?: {\n envelopeMode?: \"verbose\" | \"compact\";\n };\n };\n};\n\nexport type RuntimeSkillsAgentConfig = {\n skillsDir?: string;\n globalSkillsDir?: string;\n};\n\nexport type RuntimeSkillsCustomTarget = {\n id?: string;\n name: string;\n dir: string;\n};\n\nexport type RuntimeSkillsInstallRecord = {\n targetId: string;\n targetDir: string;\n mode: \"symlink\" | \"copy\";\n status: \"installed\" | \"skipped\" | \"failed\";\n skillIds: string[];\n reason?: string;\n updatedAt: string;\n};\n\nexport type RuntimeSkillsConfig = {\n storeDir?: string;\n agents?: Record<string, RuntimeSkillsAgentConfig>;\n customTargets?: RuntimeSkillsCustomTarget[];\n installs?: RuntimeSkillsInstallRecord[];\n};\n\nexport type RuntimeDaemonDispatchConfig = {\n globalConcurrency?: number;\n queueMax?: number;\n};\n\nexport type RuntimeDaemonConfig = {\n dispatch?: RuntimeDaemonDispatchConfig;\n};\n\nexport type RuntimeOpenMeldToolsMaintenanceConfig = {\n automaticUpdatesEnabled: boolean;\n};\n\nexport type RuntimeDaemonDispatchLimits = {\n globalConcurrency: number;\n queueMax: number;\n};\n\nexport type RuntimeAgentTransportMode = RuntimeTransportMode;\nexport type RuntimeAgentStreamingMode = \"final\" | \"stream\";\n\nexport type RuntimeAgentControllerConversationIdMappingSpec = {\n sourceField: string;\n mappingVersion: number;\n};\n\nexport type RuntimeAgentControllerSettings = {\n transportMode: RuntimeAgentTransportMode;\n streamingMode: RuntimeAgentStreamingMode;\n timeoutMs: number | null;\n retry: number;\n contextIdMappingSpec: RuntimeAgentControllerConversationIdMappingSpec;\n};\n\nexport const DEFAULT_RUNTIME_AGENT_TRANSPORT_MODE: RuntimeAgentTransportMode =\n \"local-cli\";\nexport const DEFAULT_RUNTIME_AGENT_STREAMING_MODE: RuntimeAgentStreamingMode =\n \"final\";\n// Normal Agent execution has no fixed wall-clock timeout. Long-running tasks\n// should end by explicit result, failure, cancellation, or stale progress\n// evidence policy, not by a hard-coded elapsed-time cutoff.\nexport const DEFAULT_LOCAL_ADAPTER_TIMEOUT_MS = null as number | null;\nexport const DEFAULT_RUNTIME_AGENT_RETRY = 0;\nexport const DEFAULT_RUNTIME_AGENT_CONTEXT_MAPPING_VERSION = 1;\nexport const DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD =\n \"OPENMELD_CLI_CONTEXT_ID\";\nexport const DEFAULT_RUNTIME_DAEMON_GLOBAL_CONCURRENCY = 10;\nexport const DEFAULT_RUNTIME_DAEMON_QUEUE_MAX = 50;\n\nexport type RuntimeAgentControllerState = {\n agentId: string;\n displayName: string;\n enabled: boolean;\n launchContract?: RuntimeAgentControllerLaunchContract;\n transportMode?: RuntimeAgentTransportMode;\n streamingMode?: RuntimeAgentStreamingMode;\n timeoutMs?: number | null;\n retry?: number;\n contextIdMappingSpec?: RuntimeAgentControllerConversationIdMappingSpec;\n registeredAt: string;\n updatedAt: string;\n};\n\nexport type RuntimeDeviceRuntimeState = {\n controllers?: RuntimeAgentControllerState[];\n};\n\nexport type RuntimeStartV1OnboardingState = {\n disclaimerAcceptedVersion?: string;\n lastCompletedAt?: string;\n localAgentsSetupCompletedAt?: string;\n};\n\nexport type RuntimeOnboardingConfig = {\n disclaimerAcceptedAt?: string;\n startV1?: RuntimeStartV1OnboardingState;\n};\n\nexport type RuntimeConfigFallbackReason = \"invalid_json\" | \"invalid_version\";\n\nexport type RuntimeConfigReadHealth = {\n parseFallback: boolean;\n reason?: RuntimeConfigFallbackReason;\n};\n\ntype RuntimeConfigV1 = {\n v: 1;\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n skills?: RuntimeSkillsConfig;\n daemon?: RuntimeDaemonConfig;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt: string;\n};\n\ntype DevicePreferencesV1 = {\n v: 1;\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n daemon?: RuntimeDaemonConfig;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt: string;\n};\n\ntype DeviceAgentRuntimeV1 = {\n v: 1;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n updatedAt: string;\n};\n\ntype DeviceSkillsStoreV1 = {\n v: 1;\n storeDir?: string;\n agents?: Record<string, RuntimeSkillsAgentConfig>;\n updatedAt: string;\n};\n\ntype DeviceSkillsCustomTargetsV1 = {\n v: 1;\n customTargets: RuntimeSkillsCustomTarget[];\n updatedAt: string;\n};\n\ntype DeviceSkillsInstallsV1 = {\n v: 1;\n installs: RuntimeSkillsInstallRecord[];\n updatedAt: string;\n};\n\ntype RuntimeMessageCustomization = RuntimeViewCustomization[\"messages\"];\ntype RuntimeRenderCustomization = RuntimeViewCustomization[\"render\"];\ntype RuntimeHumanRender = NonNullable<RuntimeRenderCustomization>[\"human\"];\ntype RuntimeAgentRender = NonNullable<RuntimeRenderCustomization>[\"agent\"];\ntype RuntimeConfigOverrides = {\n baseUrl?: string | null;\n viewCustomization?: RuntimeViewCustomization | null;\n skills?: RuntimeSkillsConfig | null;\n daemon?: RuntimeDaemonConfig | null;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig | null;\n deviceRuntimeState?: RuntimeDeviceRuntimeState | null;\n onboarding?: RuntimeOnboardingConfig | null;\n};\nconst CUSTOM_TARGET_ID_PREFIX = \"custom-\";\nconst CUSTOM_TARGET_ID_LENGTH = 12;\nconst RUNTIME_CONFIG_LOCK_PROFILE = \"__system__\";\nconst RUNTIME_CONFIG_LOCK_KEY = \"runtime-config\";\nconst RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS = 40;\nconst RUNTIME_CONFIG_LOCK_RETRY_DELAY_MS = 25;\nconst WINDOWS_DRIVE_ONLY_RE = /^[a-zA-Z]:$/;\nconst WINDOWS_DRIVE_PREFIX_RE = /^[a-zA-Z]:[\\\\/]/;\nconst WINDOWS_UNC_RE = /^[/\\\\]{2}[^/\\\\]+[/\\\\]+[^/\\\\]+/;\nconst WINDOWS_DRIVE_ANY_RE = /^[a-zA-Z]:/;\nconst TRAILING_PATH_SEPARATORS_RE = /[\\\\/]+$/;\n\nexport function resolveRuntimeSkillsCustomTargetId(input: {\n dir: string;\n id?: string;\n}): string {\n const existingId =\n typeof input.id === \"string\" && input.id.trim().length > 0\n ? input.id.trim()\n : \"\";\n if (existingId) {\n return existingId;\n }\n const normalizedDir = normalizeCustomTargetDir(input.dir);\n const digest = createHash(\"sha256\").update(normalizedDir).digest(\"hex\");\n return `${CUSTOM_TARGET_ID_PREFIX}${digest.slice(0, CUSTOM_TARGET_ID_LENGTH)}`;\n}\n\nexport function resolveDefaultAgentContextSourceField(\n _agentId: string\n): string {\n return DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD;\n}\n\nexport function createDefaultRuntimeAgentControllerSettings(\n agentId: string\n): RuntimeAgentControllerSettings {\n return {\n transportMode: DEFAULT_RUNTIME_AGENT_TRANSPORT_MODE,\n streamingMode: resolveDefaultRuntimeAgentStreamingMode(),\n timeoutMs: DEFAULT_LOCAL_ADAPTER_TIMEOUT_MS,\n retry: DEFAULT_RUNTIME_AGENT_RETRY,\n contextIdMappingSpec: {\n sourceField: resolveDefaultAgentContextSourceField(agentId),\n mappingVersion: DEFAULT_RUNTIME_AGENT_CONTEXT_MAPPING_VERSION,\n },\n };\n}\n\nconst resolveDefaultRuntimeAgentStreamingMode =\n (): RuntimeAgentStreamingMode => {\n const preset = resolveOpenMeldEnvPreset();\n if (preset === \"dev-local\" || preset === \"canary\") {\n return \"stream\";\n }\n return DEFAULT_RUNTIME_AGENT_STREAMING_MODE;\n };\n\nexport async function getConfiguredBaseUrl(): Promise<string | null> {\n const config = await readRuntimeConfig(\"preferences\");\n if (!config?.baseUrl) {\n return null;\n }\n return normalizeGatewayBaseUrl(config.baseUrl);\n}\n\nexport async function getConfiguredViewCustomization(): Promise<RuntimeViewCustomization | null> {\n const config = await readRuntimeConfig(\"preferences\");\n return config?.viewCustomization ?? null;\n}\n\nexport async function getConfiguredSkillsConfig(): Promise<RuntimeSkillsConfig | null> {\n const config = await readRuntimeConfig(\"skills\");\n return config?.skills ?? null;\n}\n\nexport async function getConfiguredDeviceRuntimeState(): Promise<RuntimeDeviceRuntimeState | null> {\n const config = await readRuntimeConfig(\"runtime\");\n return config?.deviceRuntimeState ?? null;\n}\n\nexport async function getConfiguredDaemonDispatchLimits(): Promise<RuntimeDaemonDispatchLimits> {\n const config = await readRuntimeConfig(\"preferences\");\n return resolveRuntimeDaemonDispatchLimits(config?.daemon?.dispatch);\n}\n\nexport async function getConfiguredOpenMeldToolsMaintenance(): Promise<RuntimeOpenMeldToolsMaintenanceConfig> {\n let preferencesFile = await readOptionalJsonFile(devicePreferencesPath());\n if (!preferencesFile.found) {\n preferencesFile = await readOptionalJsonFile(legacyRuntimeConfigPath());\n }\n if (\n preferencesFile.error ||\n (preferencesFile.found && !isSupportedConfigFile(preferencesFile.value))\n ) {\n throw new Error(\"OpenMeld update setting is invalid.\");\n }\n if (\n preferencesFile.found &&\n preferencesFile.value &&\n typeof preferencesFile.value === \"object\" &&\n \"openMeldToolsMaintenance\" in preferencesFile.value &&\n !parseRuntimeOpenMeldToolsMaintenanceConfig(\n (preferencesFile.value as { openMeldToolsMaintenance?: unknown })\n .openMeldToolsMaintenance\n )\n ) {\n throw new Error(\"OpenMeld update setting is invalid.\");\n }\n return (\n parseRuntimeOpenMeldToolsMaintenanceConfig(\n (preferencesFile.value as { openMeldToolsMaintenance?: unknown } | null)\n ?.openMeldToolsMaintenance\n ) ?? {\n automaticUpdatesEnabled: true,\n }\n );\n}\n\nexport async function getConfiguredOnboardingConfig(): Promise<RuntimeOnboardingConfig | null> {\n const config = await readRuntimeConfig(\"preferences\");\n return config?.onboarding ?? null;\n}\n\nexport async function getConfiguredOnboardingDisclaimerAcceptedAt(): Promise<\n string | null\n> {\n const onboarding = await getConfiguredOnboardingConfig();\n return onboarding?.disclaimerAcceptedAt ?? null;\n}\n\nexport async function getConfiguredStartV1OnboardingState(): Promise<RuntimeStartV1OnboardingState | null> {\n const onboarding = await getConfiguredOnboardingConfig();\n return onboarding?.startV1 ?? null;\n}\n\nexport async function getRuntimeConfigReadHealth(): Promise<RuntimeConfigReadHealth> {\n const result = await readRuntimeConfigDetailed();\n return result.health;\n}\n\nexport async function alignRuntimeConfigStorage(): Promise<{\n migratedLegacyConfig: boolean;\n removedLegacyConfig: boolean;\n}> {\n return await withRuntimeConfigLock(migrateLegacyRuntimeConfig);\n}\n\nexport async function setConfiguredBaseUrl(baseUrl: string): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const normalized = normalizeGatewayBaseUrl(baseUrl);\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const next = buildNextConfig(previous, { baseUrl: normalized });\n\n await writeRuntimeConfigFields(next, [\"baseUrl\"]);\n });\n}\n\nexport async function setConfiguredOpenMeldToolsMaintenance(\n maintenance: RuntimeOpenMeldToolsMaintenanceConfig\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const next = buildNextConfig(previous, {\n openMeldToolsMaintenance: maintenance,\n });\n\n await writeRuntimeConfigFields(next, [\"openMeldToolsMaintenance\"]);\n });\n}\n\nexport async function setConfiguredSkillsConfig(\n skills: RuntimeSkillsConfig\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"skills\");\n const next = buildNextConfig(previous, { skills });\n\n await writeRuntimeConfigFields(next, [\"skills\"]);\n });\n}\n\nexport async function updateConfiguredSkillsConfig(\n updater: (current: RuntimeSkillsConfig | null) => RuntimeSkillsConfig | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"skills\");\n const previousSkills = previous?.skills ?? null;\n const nextSkills = updater(previousSkills);\n\n const previousComparable = JSON.stringify(previousSkills);\n const nextComparable = JSON.stringify(nextSkills);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, { skills: nextSkills });\n\n await writeRuntimeConfigFields(next, [\"skills\"]);\n });\n}\n\nexport async function setConfiguredDeviceRuntimeState(\n deviceRuntimeState: RuntimeDeviceRuntimeState\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"runtime\");\n const next = buildNextConfig(previous, { deviceRuntimeState });\n\n await writeRuntimeConfigFields(next, [\"deviceRuntimeState\"]);\n });\n}\n\nexport async function updateConfiguredDeviceRuntimeState(\n updater: (\n current: RuntimeDeviceRuntimeState | null\n ) => RuntimeDeviceRuntimeState | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"runtime\");\n const previousDeviceRuntimeState = previous?.deviceRuntimeState ?? null;\n const nextDeviceRuntimeState = updater(previousDeviceRuntimeState);\n\n const previousComparable = JSON.stringify(previousDeviceRuntimeState);\n const nextComparable = JSON.stringify(nextDeviceRuntimeState);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, {\n deviceRuntimeState: nextDeviceRuntimeState,\n });\n\n await writeRuntimeConfigFields(next, [\"deviceRuntimeState\"]);\n });\n}\n\nexport async function updateConfiguredStartV1OnboardingState(\n updater: (\n current: RuntimeStartV1OnboardingState | null\n ) => RuntimeStartV1OnboardingState | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const previousOnboarding = previous?.onboarding ?? null;\n const previousStartV1 = previousOnboarding?.startV1 ?? null;\n const nextStartV1 = updater(previousStartV1);\n\n const previousComparable = JSON.stringify(previousStartV1);\n const nextComparable = JSON.stringify(nextStartV1);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const nextOnboarding =\n nextStartV1 || previousOnboarding?.disclaimerAcceptedAt\n ? {\n ...(previousOnboarding?.disclaimerAcceptedAt\n ? {\n disclaimerAcceptedAt: previousOnboarding.disclaimerAcceptedAt,\n }\n : {}),\n ...(nextStartV1 ? { startV1: nextStartV1 } : {}),\n }\n : null;\n const next = buildNextConfig(previous, {\n onboarding: nextOnboarding,\n });\n\n await writeRuntimeConfigFields(next, [\"onboarding\"]);\n });\n}\n\nexport async function updateConfiguredOnboardingConfig(\n updater: (\n current: RuntimeOnboardingConfig | null\n ) => RuntimeOnboardingConfig | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfigForMutation(\"preferences\");\n const previousOnboarding = previous?.onboarding ?? null;\n const nextOnboarding = updater(previousOnboarding);\n\n const previousComparable = JSON.stringify(previousOnboarding);\n const nextComparable = JSON.stringify(nextOnboarding);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, {\n onboarding: nextOnboarding,\n });\n\n await writeRuntimeConfigFields(next, [\"onboarding\"]);\n });\n}\n\nfunction buildNextConfig(\n previous: RuntimeConfigV1 | null,\n overrides: RuntimeConfigOverrides\n): RuntimeConfigV1 {\n const baseUrl = resolveBaseUrlOverride(previous?.baseUrl, overrides);\n const viewCustomization = resolveConfigOverride(\n \"viewCustomization\",\n previous?.viewCustomization,\n overrides\n );\n const skills = resolveConfigOverride(\"skills\", previous?.skills, overrides);\n const daemon = resolveConfigOverride(\"daemon\", previous?.daemon, overrides);\n const openMeldToolsMaintenance = resolveConfigOverride(\n \"openMeldToolsMaintenance\",\n previous?.openMeldToolsMaintenance,\n overrides\n );\n const deviceRuntimeState = resolveConfigOverride(\n \"deviceRuntimeState\",\n previous?.deviceRuntimeState,\n overrides\n );\n const onboarding = resolveConfigOverride(\n \"onboarding\",\n previous?.onboarding,\n overrides\n );\n\n return {\n v: 1,\n ...(baseUrl ? { baseUrl } : {}),\n ...(viewCustomization ? { viewCustomization } : {}),\n ...(skills ? { skills } : {}),\n ...(daemon ? { daemon } : {}),\n ...(openMeldToolsMaintenance ? { openMeldToolsMaintenance } : {}),\n ...(deviceRuntimeState ? { deviceRuntimeState } : {}),\n ...(onboarding ? { onboarding } : {}),\n updatedAt: new Date().toISOString(),\n };\n}\n\nfunction resolveBaseUrlOverride(\n previous: string | undefined,\n overrides: RuntimeConfigOverrides\n): string | undefined {\n if (!(\"baseUrl\" in overrides)) {\n return previous;\n }\n if (typeof overrides.baseUrl !== \"string\" || overrides.baseUrl.length === 0) {\n return undefined;\n }\n return overrides.baseUrl;\n}\n\nfunction resolveConfigOverride<T>(\n key:\n | \"viewCustomization\"\n | \"skills\"\n | \"daemon\"\n | \"openMeldToolsMaintenance\"\n | \"deviceRuntimeState\"\n | \"onboarding\",\n previous: T | undefined,\n overrides: RuntimeConfigOverrides\n): T | undefined {\n if (!(key in overrides)) {\n return previous;\n }\n const value = overrides[key] as T | null | undefined;\n return value ?? undefined;\n}\n\nasync function acquireRuntimeConfigLock(): Promise<OpenMeldLock> {\n for (\n let attempt = 0;\n attempt < RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS;\n attempt += 1\n ) {\n try {\n return await acquireLock({\n openMeldProfileId: RUNTIME_CONFIG_LOCK_PROFILE,\n key: RUNTIME_CONFIG_LOCK_KEY,\n });\n } catch (error) {\n if (\n !isOpenMeldLockError(error) ||\n isOpenMeldOrphanedLockError(error) ||\n attempt === RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS - 1\n ) {\n throw error;\n }\n await delay(RUNTIME_CONFIG_LOCK_RETRY_DELAY_MS);\n }\n }\n\n throw new Error(\"runtime config lock retries exhausted\");\n}\n\nasync function withRuntimeConfigLock<T>(run: () => Promise<T>): Promise<T> {\n const lock = await acquireRuntimeConfigLock();\n return await runWithHeldLock({\n lock,\n run,\n releaseContext: {\n component: \"runtime_config\",\n lockKey: RUNTIME_CONFIG_LOCK_KEY,\n openMeldProfileId: RUNTIME_CONFIG_LOCK_PROFILE,\n },\n });\n}\n\ntype RuntimeConfigDomain = \"preferences\" | \"runtime\" | \"skills\";\n\nasync function readRuntimeConfig(\n domain: RuntimeConfigDomain\n): Promise<RuntimeConfigV1 | null> {\n const result = await readRuntimeConfigDetailed(domain);\n return result.config;\n}\n\nasync function readRuntimeConfigDetailed(\n domain?: RuntimeConfigDomain\n): Promise<{\n config: RuntimeConfigV1 | null;\n health: RuntimeConfigReadHealth;\n}> {\n const split = await readSplitRuntimeConfigDetailed(domain);\n if (split.hasFiles) {\n return {\n config: split.config,\n health: split.health,\n };\n }\n return await readLegacyRuntimeConfigDetailed();\n}\n\nfunction parseConfiguredBaseUrl(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n try {\n return normalizeGatewayBaseUrl(value);\n } catch {\n return undefined;\n }\n}\n\nfunction parseRuntimeViewCustomization(\n value: unknown\n): RuntimeViewCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n messages?: unknown;\n render?: unknown;\n };\n\n const messages = parseMessageCustomization(obj.messages);\n const render = parseRenderCustomization(obj.render);\n\n if (!(messages || render)) {\n return undefined;\n }\n\n return {\n ...(messages ? { messages } : {}),\n ...(render ? { render } : {}),\n };\n}\n\nfunction parseRuntimeSkillsConfig(\n value: unknown\n): RuntimeSkillsConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n storeDir?: unknown;\n agents?: unknown;\n customTargets?: unknown;\n installs?: unknown;\n };\n\n const storeDir =\n typeof obj.storeDir === \"string\" && obj.storeDir.trim().length > 0\n ? obj.storeDir.trim()\n : undefined;\n const agents = parseRuntimeSkillsAgents(obj.agents);\n const installs = parseRuntimeSkillsInstallRecords(obj.installs);\n const customTargets = parseRuntimeSkillsCustomTargets(\n obj.customTargets,\n buildLegacyCustomTargetIdByDir(installs)\n );\n\n if (!(storeDir || agents || customTargets || installs)) {\n return undefined;\n }\n\n return {\n ...(storeDir ? { storeDir } : {}),\n ...(agents ? { agents } : {}),\n ...(customTargets ? { customTargets } : {}),\n ...(installs ? { installs } : {}),\n };\n}\n\nfunction parseRuntimeDaemonConfig(\n value: unknown\n): RuntimeDaemonConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n dispatch?: unknown;\n };\n const dispatch = parseRuntimeDaemonDispatchConfig(obj.dispatch);\n if (!dispatch) {\n return undefined;\n }\n return { dispatch };\n}\n\nfunction parseRuntimeOpenMeldToolsMaintenanceConfig(\n value: unknown\n): RuntimeOpenMeldToolsMaintenanceConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const automaticUpdatesEnabled = (\n value as { automaticUpdatesEnabled?: unknown }\n ).automaticUpdatesEnabled;\n if (typeof automaticUpdatesEnabled !== \"boolean\") {\n return undefined;\n }\n return { automaticUpdatesEnabled };\n}\n\nfunction parseRuntimeDaemonDispatchConfig(\n value: unknown\n): RuntimeDaemonDispatchConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n globalConcurrency?: unknown;\n queueMax?: unknown;\n };\n const globalConcurrency = parsePositiveInteger(obj.globalConcurrency);\n const queueMax = parsePositiveInteger(obj.queueMax);\n if (globalConcurrency === undefined && queueMax === undefined) {\n return undefined;\n }\n return {\n ...(globalConcurrency === undefined ? {} : { globalConcurrency }),\n ...(queueMax === undefined ? {} : { queueMax }),\n };\n}\n\nfunction parseRuntimeDeviceRuntimeState(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n const fromDeviceRuntimeState = parseRuntimeDeviceRuntimeStateObject(value);\n return fromDeviceRuntimeState;\n}\n\nfunction parseRuntimeDeviceRuntimeStateObject(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n controllers?: unknown;\n };\n const controllers = parseRuntimeAgentControllerStates(obj.controllers);\n if (!controllers) {\n return undefined;\n }\n\n return {\n controllers,\n };\n}\n\nfunction parseRuntimeOnboardingConfig(\n value: unknown\n): RuntimeOnboardingConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n disclaimerAcceptedAt?: unknown;\n startV1?: unknown;\n };\n const disclaimerAcceptedAt = toTrimmedStringOrUndefined(\n obj.disclaimerAcceptedAt\n );\n const startV1 = parseRuntimeStartV1OnboardingState(obj.startV1);\n if (!(disclaimerAcceptedAt || startV1)) {\n return undefined;\n }\n return {\n ...(disclaimerAcceptedAt ? { disclaimerAcceptedAt } : {}),\n ...(startV1 ? { startV1 } : {}),\n };\n}\n\nfunction parseRuntimeStartV1OnboardingState(\n value: unknown\n): RuntimeStartV1OnboardingState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n disclaimerAcceptedVersion?: unknown;\n lastCompletedAt?: unknown;\n localAgentsSetupCompletedAt?: unknown;\n };\n const disclaimerAcceptedVersion = toTrimmedStringOrUndefined(\n obj.disclaimerAcceptedVersion\n );\n const lastCompletedAt = toTrimmedStringOrUndefined(obj.lastCompletedAt);\n const localAgentsSetupCompletedAt = toTrimmedStringOrUndefined(\n obj.localAgentsSetupCompletedAt\n );\n if (\n !(\n disclaimerAcceptedVersion ||\n lastCompletedAt ||\n localAgentsSetupCompletedAt\n )\n ) {\n return undefined;\n }\n return {\n ...(disclaimerAcceptedVersion ? { disclaimerAcceptedVersion } : {}),\n ...(lastCompletedAt ? { lastCompletedAt } : {}),\n ...(localAgentsSetupCompletedAt ? { localAgentsSetupCompletedAt } : {}),\n };\n}\n\nfunction runtimeConfigFiles(next: RuntimeConfigV1) {\n const updatedAt = new Date().toISOString();\n return [\n {\n path: devicePreferencesPath(),\n domain: \"preferences\",\n keys: [\n \"baseUrl\",\n \"viewCustomization\",\n \"daemon\",\n \"openMeldToolsMaintenance\",\n \"onboarding\",\n ],\n value: buildDevicePreferencesState(next, updatedAt),\n },\n {\n path: deviceAgentRuntimePath(),\n domain: \"runtime\",\n keys: [\"deviceRuntimeState\"],\n value: buildDeviceAgentRuntimeState(next, updatedAt),\n },\n {\n path: deviceSkillsStorePath(),\n domain: \"skills\",\n keys: [\"storeDir\", \"agents\"],\n value: buildDeviceSkillsStoreState(next, updatedAt),\n },\n {\n path: deviceSkillsCustomTargetsPath(),\n domain: \"skills\",\n keys: [\"customTargets\"],\n value: buildDeviceSkillsCustomTargetsState(next, updatedAt),\n },\n {\n path: deviceSkillsInstallsPath(),\n domain: \"skills\",\n keys: [\"installs\"],\n value: buildDeviceSkillsInstallsState(next, updatedAt),\n },\n ] as const;\n}\n\nfunction isSupportedConfigFile(\n value: unknown\n): value is Record<string, unknown> {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"v\" in value &&\n value.v === 1\n );\n}\n\nasync function migrateLegacyRuntimeConfig(): Promise<{\n migratedLegacyConfig: boolean;\n removedLegacyConfig: boolean;\n}> {\n if (!(await pathExists(legacyRuntimeConfigPath()))) {\n return { migratedLegacyConfig: false, removedLegacyConfig: false };\n }\n const legacy = await readLegacyRuntimeConfigDetailed();\n if (legacy.health.parseFallback) {\n throw new Error(\n \"OpenMeld could not migrate the saved configuration. The original file has been preserved.\"\n );\n }\n const files = runtimeConfigFiles(\n legacy.config ?? { v: 1, updatedAt: new Date().toISOString() }\n );\n let migratedLegacyConfig = false;\n let canRemoveLegacy = true;\n for (const file of files) {\n const existing = await readOptionalJsonFile(file.path);\n if (existing.found) {\n // A partially completed migration never replaces an already-owned file.\n canRemoveLegacy &&=\n !existing.error && isSupportedConfigFile(existing.value);\n continue;\n }\n await writeRuntimeConfigFile(\n file.path,\n file.value ?? { v: 1, updatedAt: new Date().toISOString() }\n );\n migratedLegacyConfig = true;\n }\n if (canRemoveLegacy) {\n await rm(legacyRuntimeConfigPath(), { force: true });\n }\n return { migratedLegacyConfig, removedLegacyConfig: canRemoveLegacy };\n}\n\nasync function readRuntimeConfigForMutation(\n domain: RuntimeConfigDomain\n): Promise<RuntimeConfigV1 | null> {\n await migrateLegacyRuntimeConfig();\n const files = runtimeConfigFiles({ v: 1, updatedAt: \"\" }).filter(\n (file) => file.domain === domain\n );\n for (const file of files) {\n const existing = await readOptionalJsonFile(file.path);\n if (\n existing.found &&\n (existing.error || !isSupportedConfigFile(existing.value))\n ) {\n throw new Error(\n `OpenMeld cannot safely update ${file.path}. Its existing contents have been preserved.`\n );\n }\n }\n return await readRuntimeConfig(domain);\n}\n\nasync function writeRuntimeConfigFields(\n next: RuntimeConfigV1,\n fields: (keyof RuntimeConfigOverrides)[]\n): Promise<void> {\n const files = runtimeConfigFiles(next).filter((file) =>\n file.domain === \"skills\"\n ? fields.includes(\"skills\")\n : file.keys.some((key) =>\n fields.includes(key as keyof RuntimeConfigOverrides)\n )\n );\n for (const file of files) {\n const existing = await readOptionalJsonFile(file.path);\n if (\n existing.found &&\n (existing.error || !isSupportedConfigFile(existing.value))\n ) {\n throw new Error(\n `OpenMeld cannot safely update ${file.path}. Its existing contents have been preserved.`\n );\n }\n const value = {\n ...(existing.value as Record<string, unknown> | null),\n v: 1,\n } as Record<string, unknown>;\n const incoming = file.value as Record<string, unknown> | null;\n for (const key of file.keys) {\n if (\n file.domain === \"preferences\" &&\n !fields.includes(key as keyof RuntimeConfigOverrides)\n ) {\n continue;\n }\n delete value[key];\n if (incoming && key in incoming) {\n value[key] = incoming[key];\n }\n }\n value.updatedAt = new Date().toISOString();\n // Keep empty owned files: absence must not resurrect legacy values after a crash.\n await writeRuntimeConfigFile(file.path, value);\n }\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction parseMessageCustomization(\n value: unknown\n): RuntimeMessageCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n human?: unknown;\n agent?: unknown;\n };\n\n const human = toStringMap(obj.human);\n const agent = toStringMap(obj.agent);\n\n if (!(human || agent)) {\n return undefined;\n }\n\n return {\n ...(human ? { human } : {}),\n ...(agent ? { agent } : {}),\n };\n}\n\nfunction parseRenderCustomization(\n value: unknown\n): RuntimeRenderCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n human?: unknown;\n agent?: unknown;\n };\n\n const humanRaw = obj.human as { dataMode?: unknown } | undefined;\n const agentRaw = obj.agent as { envelopeMode?: unknown } | undefined;\n\n const human: RuntimeHumanRender | undefined =\n humanRaw?.dataMode === \"payload\" || humanRaw?.dataMode === \"envelope\"\n ? { dataMode: humanRaw.dataMode }\n : undefined;\n\n const agent: RuntimeAgentRender | undefined =\n agentRaw?.envelopeMode === \"verbose\" || agentRaw?.envelopeMode === \"compact\"\n ? { envelopeMode: agentRaw.envelopeMode }\n : undefined;\n\n if (!(human || agent)) {\n return undefined;\n }\n\n return {\n ...(human ? { human } : {}),\n ...(agent ? { agent } : {}),\n };\n}\n\nfunction parseRuntimeSkillsAgents(\n value: unknown\n): Record<string, RuntimeSkillsAgentConfig> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const entries = Object.entries(value).flatMap(([agentName, agentValue]) => {\n if (!agentValue || typeof agentValue !== \"object\") {\n return [];\n }\n const agentObj = agentValue as {\n skillsDir?: unknown;\n globalSkillsDir?: unknown;\n };\n const skillsDir =\n typeof agentObj.skillsDir === \"string\" &&\n agentObj.skillsDir.trim().length > 0\n ? agentObj.skillsDir.trim()\n : undefined;\n const globalSkillsDir =\n typeof agentObj.globalSkillsDir === \"string\" &&\n agentObj.globalSkillsDir.trim().length > 0\n ? agentObj.globalSkillsDir.trim()\n : undefined;\n if (!(skillsDir || globalSkillsDir)) {\n return [];\n }\n return [\n [\n agentName,\n {\n ...(skillsDir ? { skillsDir } : {}),\n ...(globalSkillsDir ? { globalSkillsDir } : {}),\n },\n ] as [string, RuntimeSkillsAgentConfig],\n ];\n });\n\n if (entries.length === 0) {\n return undefined;\n }\n\n return Object.fromEntries(entries);\n}\n\nfunction parseRuntimeSkillsCustomTargets(\n value: unknown,\n legacyCustomTargetIdByDir?: Map<string, string>\n): RuntimeSkillsCustomTarget[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const targets = value.flatMap((item) => {\n if (!item || typeof item !== \"object\") {\n return [];\n }\n const obj = item as { id?: unknown; name?: unknown; dir?: unknown };\n const name =\n typeof obj.name === \"string\" && obj.name.trim().length > 0\n ? obj.name.trim()\n : \"\";\n const dir =\n typeof obj.dir === \"string\" && obj.dir.trim().length > 0\n ? normalizeCustomTargetDir(obj.dir)\n : \"\";\n if (!(name && dir)) {\n return [];\n }\n const explicitId = toTrimmedStringOrUndefined(obj.id);\n const fallbackLegacyId = legacyCustomTargetIdByDir?.get(dir);\n const id = resolveRuntimeSkillsCustomTargetId({\n dir,\n ...(explicitId ? { id: explicitId } : {}),\n ...(!explicitId && fallbackLegacyId ? { id: fallbackLegacyId } : {}),\n });\n return [{ id, name, dir }];\n });\n\n if (targets.length === 0) {\n return undefined;\n }\n\n return targets;\n}\n\nfunction parseRuntimeSkillsInstallRecords(\n value: unknown\n): RuntimeSkillsInstallRecord[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const records = value\n .map((item) => parseRuntimeSkillsInstallRecord(item))\n .filter((record): record is RuntimeSkillsInstallRecord => record !== null);\n\n if (records.length === 0) {\n return undefined;\n }\n\n return records;\n}\n\nfunction buildLegacyCustomTargetIdByDir(\n installs: RuntimeSkillsInstallRecord[] | undefined\n): Map<string, string> {\n const byDir = new Map<string, string>();\n for (const install of installs ?? []) {\n if (!install.targetId.startsWith(CUSTOM_TARGET_ID_PREFIX)) {\n continue;\n }\n const normalizedTargetDir = normalizeCustomTargetDir(install.targetDir);\n if (!normalizedTargetDir) {\n continue;\n }\n byDir.set(normalizedTargetDir, install.targetId);\n }\n return byDir;\n}\n\nfunction parseRuntimeSkillsInstallRecord(\n value: unknown\n): RuntimeSkillsInstallRecord | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const obj = value as {\n targetId?: unknown;\n targetDir?: unknown;\n mode?: unknown;\n status?: unknown;\n skillIds?: unknown;\n reason?: unknown;\n updatedAt?: unknown;\n };\n const targetId = toTrimmedStringOrEmpty(obj.targetId);\n const rawTargetDir = toTrimmedStringOrEmpty(obj.targetDir);\n const targetDir = rawTargetDir;\n const mode = parseSkillsInstallMode(obj.mode);\n const status = parseSkillsInstallStatus(obj.status);\n const skillIds = Array.isArray(obj.skillIds)\n ? obj.skillIds\n .map((skill) => (typeof skill === \"string\" ? skill.trim() : \"\"))\n .filter((skill): skill is string => skill.length > 0)\n : [];\n const updatedAt = toTrimmedStringOrEmpty(obj.updatedAt);\n const reason = toTrimmedStringOrUndefined(obj.reason);\n\n if (!(targetId && targetDir && mode && status && updatedAt)) {\n return null;\n }\n\n return {\n targetId,\n targetDir,\n mode,\n status,\n skillIds,\n ...(reason ? { reason } : {}),\n updatedAt,\n };\n}\n\nfunction parseRuntimeAgentControllerStates(\n value: unknown\n): RuntimeAgentControllerState[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const parsed = value\n .map((entry) => parseRuntimeAgentControllerState(entry))\n .filter((entry): entry is RuntimeAgentControllerState => entry !== null);\n\n if (parsed.length === 0) {\n return undefined;\n }\n\n const deduped = new Map<string, RuntimeAgentControllerState>();\n for (const entry of parsed) {\n deduped.set(entry.agentId, entry);\n }\n\n return [...deduped.values()].sort((a, b) =>\n a.agentId.localeCompare(b.agentId)\n );\n}\n\nfunction parseRuntimeAgentControllerState(\n value: unknown\n): RuntimeAgentControllerState | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const obj = value as {\n agentId?: unknown;\n displayName?: unknown;\n enabled?: unknown;\n launchContract?: unknown;\n transportMode?: unknown;\n streamingMode?: unknown;\n timeoutMs?: unknown;\n retry?: unknown;\n contextIdMappingSpec?: unknown;\n registeredAt?: unknown;\n updatedAt?: unknown;\n };\n const agentId = toTrimmedStringOrEmpty(obj.agentId);\n const displayName = toTrimmedStringOrEmpty(obj.displayName);\n const enabled = typeof obj.enabled === \"boolean\" ? obj.enabled : null;\n const launchContract = parseRuntimeAgentControllerLaunchContract(\n obj.launchContract\n );\n const defaults = createDefaultRuntimeAgentControllerSettings(agentId);\n const controllerSettings = parseRuntimeAgentControllerSettings(\n {\n transportMode: obj.transportMode,\n streamingMode: obj.streamingMode,\n timeoutMs: obj.timeoutMs,\n retry: obj.retry,\n contextIdMappingSpec: obj.contextIdMappingSpec,\n },\n defaults\n );\n const registeredAt = toTrimmedStringOrEmpty(obj.registeredAt);\n const updatedAt = toTrimmedStringOrEmpty(obj.updatedAt);\n\n if (\n !(\n agentId &&\n displayName &&\n enabled !== null &&\n controllerSettings &&\n registeredAt &&\n updatedAt\n )\n ) {\n return null;\n }\n\n return {\n agentId,\n displayName,\n enabled,\n ...(launchContract ? { launchContract } : {}),\n transportMode: controllerSettings.transportMode,\n streamingMode: controllerSettings.streamingMode,\n timeoutMs: controllerSettings.timeoutMs,\n retry: controllerSettings.retry,\n contextIdMappingSpec: controllerSettings.contextIdMappingSpec,\n registeredAt,\n updatedAt,\n };\n}\n\nfunction parseRuntimeAgentControllerLaunchContract(\n value: unknown\n): RuntimeAgentControllerLaunchContract | undefined {\n if (!(value && typeof value === \"object\")) {\n return undefined;\n }\n const parsed = runtimeAgentControllerLaunchContractSchema.safeParse(value);\n return parsed.success ? parsed.data : undefined;\n}\n\nfunction parseRuntimeAgentControllerSettings(\n raw: {\n transportMode: unknown;\n streamingMode: unknown;\n timeoutMs: unknown;\n retry: unknown;\n contextIdMappingSpec: unknown;\n },\n defaults: RuntimeAgentControllerSettings\n): RuntimeAgentControllerSettings | null {\n const normalizedStreamingMode = normalizeRuntimeStreamingMode(\n raw.streamingMode\n );\n const parsed = runtimeAgentControllerSettingsSchema.safeParse({\n transport_mode: raw.transportMode ?? defaults.transportMode,\n streaming_mode: normalizedStreamingMode ?? defaults.streamingMode,\n timeout_ms:\n raw.timeoutMs === undefined ? defaults.timeoutMs : raw.timeoutMs,\n retry: raw.retry ?? defaults.retry,\n context_id_mapping_spec:\n raw.contextIdMappingSpec ?? defaults.contextIdMappingSpec,\n });\n if (!parsed.success) {\n return null;\n }\n\n return {\n transportMode: parsed.data.transport_mode,\n streamingMode: parsed.data.streaming_mode,\n timeoutMs: normalizeRuntimeAgentTimeoutMs({\n defaults,\n timeoutMs: parsed.data.timeout_ms,\n }),\n retry: parsed.data.retry,\n contextIdMappingSpec:\n normalizeRuntimeAgentControllerConversationIdMappingSpec({\n contextIdMappingSpec: parsed.data.context_id_mapping_spec,\n defaults,\n }),\n };\n}\n\nfunction normalizeRuntimeAgentTimeoutMs(input: {\n defaults: RuntimeAgentControllerSettings;\n timeoutMs: number | null;\n}): number | null {\n // 120s was an old persisted default. Normal Agent execution must not inherit\n // it as a fixed wall-clock cutoff.\n if (input.timeoutMs === 120_000) {\n return input.defaults.timeoutMs;\n }\n return input.timeoutMs;\n}\n\nfunction normalizeRuntimeAgentControllerConversationIdMappingSpec(input: {\n contextIdMappingSpec: RuntimeAgentControllerConversationIdMappingSpec;\n defaults: RuntimeAgentControllerSettings;\n}): RuntimeAgentControllerConversationIdMappingSpec {\n if (\n input.contextIdMappingSpec.sourceField !==\n DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD\n ) {\n return input.defaults.contextIdMappingSpec;\n }\n return input.contextIdMappingSpec;\n}\n\nfunction resolveRuntimeDaemonDispatchLimits(\n config?: RuntimeDaemonDispatchConfig\n): RuntimeDaemonDispatchLimits {\n return {\n globalConcurrency:\n parsePositiveInteger(config?.globalConcurrency) ??\n DEFAULT_RUNTIME_DAEMON_GLOBAL_CONCURRENCY,\n queueMax:\n parsePositiveInteger(config?.queueMax) ??\n DEFAULT_RUNTIME_DAEMON_QUEUE_MAX,\n };\n}\n\nfunction normalizeRuntimeStreamingMode(\n value: unknown\n): RuntimeAgentStreamingMode | null {\n if (value === \"final\" || value === \"stream\") {\n return value;\n }\n return null;\n}\n\nfunction parseSkillsInstallMode(\n value: unknown\n): RuntimeSkillsInstallRecord[\"mode\"] | null {\n if (value === \"symlink\" || value === \"copy\") {\n return value;\n }\n return null;\n}\n\nfunction parseSkillsInstallStatus(\n value: unknown\n): RuntimeSkillsInstallRecord[\"status\"] | null {\n if (value === \"installed\" || value === \"skipped\" || value === \"failed\") {\n return value;\n }\n return null;\n}\n\nfunction parsePositiveInteger(value: unknown): number | undefined {\n if (!Number.isInteger(value)) {\n return undefined;\n }\n const numericValue = Number(value);\n if (numericValue <= 0) {\n return undefined;\n }\n return numericValue;\n}\n\nfunction toTrimmedStringOrEmpty(value: unknown): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : \"\";\n}\n\nfunction toTrimmedStringOrUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeCustomTargetDir(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"\";\n }\n if (WINDOWS_DRIVE_ONLY_RE.test(trimmed)) {\n return `${trimmed[0]?.toUpperCase() ?? \"\"}:`;\n }\n const windowsLike =\n WINDOWS_DRIVE_PREFIX_RE.test(trimmed) || WINDOWS_UNC_RE.test(trimmed);\n const normalizedPath = windowsLike\n ? (() => {\n const normalizedWindowsPath = win32.normalize(trimmed);\n if (WINDOWS_DRIVE_ANY_RE.test(normalizedWindowsPath)) {\n return `${normalizedWindowsPath[0]?.toUpperCase() ?? \"\"}${normalizedWindowsPath.slice(1)}`;\n }\n return normalizedWindowsPath;\n })()\n : normalize(trimmed);\n const isPosixRoot = normalizedPath === posix.parse(normalizedPath).root;\n const isWindowsRoot = normalizedPath === win32.parse(normalizedPath).root;\n if (isPosixRoot || isWindowsRoot) {\n return normalizedPath;\n }\n return normalizedPath.replace(TRAILING_PATH_SEPARATORS_RE, \"\");\n}\n\nfunction toStringMap(value: unknown): Record<string, string> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\"\n );\n if (entries.length === 0) {\n return undefined;\n }\n\n return Object.fromEntries(entries);\n}\n\nfunction isFileNotFoundError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === \"ENOENT\"\n );\n}\n\nasync function readSplitRuntimeConfigDetailed(\n domain?: RuntimeConfigDomain\n): Promise<{\n config: RuntimeConfigV1 | null;\n hasFiles: boolean;\n health: RuntimeConfigReadHealth;\n}> {\n const [\n preferencesFile,\n agentRuntimeFile,\n skillsStoreFile,\n customTargetsFile,\n installsFile,\n ] = await Promise.all([\n readDomainFile(\"preferences\", devicePreferencesPath()),\n readDomainFile(\"runtime\", deviceAgentRuntimePath()),\n readDomainFile(\"skills\", deviceSkillsStorePath()),\n readDomainFile(\"skills\", deviceSkillsCustomTargetsPath()),\n readDomainFile(\"skills\", deviceSkillsInstallsPath()),\n ]);\n\n function readDomainFile(owner: RuntimeConfigDomain, path: string) {\n return !domain || domain === owner\n ? readOptionalJsonFile(path)\n : Promise.resolve({ found: false, value: null, error: undefined });\n }\n\n const files = [\n preferencesFile,\n agentRuntimeFile,\n skillsStoreFile,\n customTargetsFile,\n installsFile,\n ];\n const hasFiles = files.some((file) => file.found);\n if (!hasFiles) {\n return {\n config: null,\n hasFiles: false,\n health: {\n parseFallback: false,\n },\n };\n }\n\n const invalidFile = files.find((file) => file.error);\n const preferences = parseDevicePreferencesConfig(preferencesFile.value);\n const agentRuntime = parseDeviceAgentRuntimeConfig(agentRuntimeFile.value);\n const skillsStore = parseDeviceSkillsStoreConfig(skillsStoreFile.value);\n const customTargets = parseDeviceSkillsCustomTargetsConfig(\n customTargetsFile.value\n );\n const installs = parseDeviceSkillsInstallsConfig(installsFile.value);\n\n const skills = mergeRuntimeSkillsConfig({\n store: skillsStore,\n customTargets,\n installs,\n });\n const config = buildRuntimeConfigFromParts({\n baseUrl: preferences.baseUrl,\n viewCustomization: preferences.viewCustomization,\n daemon: preferences.daemon,\n openMeldToolsMaintenance: preferences.openMeldToolsMaintenance,\n onboarding: preferences.onboarding,\n deviceRuntimeState: agentRuntime,\n skills,\n });\n\n return {\n config,\n hasFiles: true,\n health: invalidFile\n ? {\n parseFallback: true,\n reason: invalidFile.error ?? \"invalid_json\",\n }\n : {\n parseFallback: false,\n },\n };\n}\n\nasync function readLegacyRuntimeConfigDetailed(): Promise<{\n config: RuntimeConfigV1 | null;\n health: RuntimeConfigReadHealth;\n}> {\n let raw: string;\n try {\n raw = await readFile(legacyRuntimeConfigPath(), \"utf8\");\n } catch (error) {\n if (isFileNotFoundError(error)) {\n return {\n config: null,\n health: {\n parseFallback: false,\n },\n };\n }\n throw error;\n }\n\n if (raw.trim().length === 0) {\n return {\n config: null,\n health: {\n parseFallback: false,\n },\n };\n }\n\n let parsed: Partial<RuntimeConfigV1> & {\n agents?: unknown;\n daemon?: unknown;\n onboarding?: unknown;\n openMeldToolsMaintenance?: unknown;\n };\n try {\n parsed = JSON.parse(raw) as Partial<RuntimeConfigV1> & {\n agents?: unknown;\n daemon?: unknown;\n onboarding?: unknown;\n };\n } catch {\n return {\n config: null,\n health: {\n parseFallback: true,\n reason: \"invalid_json\",\n },\n };\n }\n\n if (parsed.v !== 1) {\n return {\n config: null,\n health: {\n parseFallback: true,\n reason: \"invalid_version\",\n },\n };\n }\n\n return {\n config: buildRuntimeConfigFromParts({\n baseUrl: parseConfiguredBaseUrl(parsed.baseUrl),\n viewCustomization: parseRuntimeViewCustomization(\n parsed.viewCustomization\n ),\n skills: parseRuntimeSkillsConfig(parsed.skills),\n daemon: parseRuntimeDaemonConfig(parsed.daemon),\n openMeldToolsMaintenance: parseRuntimeOpenMeldToolsMaintenanceConfig(\n parsed.openMeldToolsMaintenance\n ),\n deviceRuntimeState: parseRuntimeDeviceRuntimeState(\n parsed.deviceRuntimeState === undefined\n ? readLegacyAgentRegistrations(parsed.agents)\n : parsed.deviceRuntimeState\n ),\n onboarding: parseRuntimeOnboardingConfig(parsed.onboarding),\n updatedAt:\n typeof parsed.updatedAt === \"string\"\n ? parsed.updatedAt\n : new Date().toISOString(),\n }),\n health: {\n parseFallback: false,\n },\n };\n}\n\nfunction buildRuntimeConfigFromParts(input: {\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n skills?: RuntimeSkillsConfig;\n daemon?: RuntimeDaemonConfig;\n openMeldToolsMaintenance?: RuntimeOpenMeldToolsMaintenanceConfig;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt?: string;\n}): RuntimeConfigV1 | null {\n const updatedAt = input.updatedAt ?? new Date().toISOString();\n if (\n !(\n input.baseUrl ||\n input.viewCustomization ||\n input.skills ||\n input.daemon ||\n input.openMeldToolsMaintenance ||\n input.deviceRuntimeState ||\n input.onboarding\n )\n ) {\n return null;\n }\n\n return {\n v: 1,\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n ...(input.viewCustomization\n ? { viewCustomization: input.viewCustomization }\n : {}),\n ...(input.skills ? { skills: input.skills } : {}),\n ...(input.daemon ? { daemon: input.daemon } : {}),\n ...(input.openMeldToolsMaintenance\n ? { openMeldToolsMaintenance: input.openMeldToolsMaintenance }\n : {}),\n ...(input.deviceRuntimeState\n ? { deviceRuntimeState: input.deviceRuntimeState }\n : {}),\n ...(input.onboarding ? { onboarding: input.onboarding } : {}),\n updatedAt,\n };\n}\n\nfunction parseDevicePreferencesConfig(\n value: unknown\n): Pick<\n RuntimeConfigV1,\n | \"baseUrl\"\n | \"viewCustomization\"\n | \"daemon\"\n | \"openMeldToolsMaintenance\"\n | \"onboarding\"\n> {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n const parsed = value as Partial<DevicePreferencesV1>;\n if (parsed.v !== 1) {\n return {};\n }\n return {\n ...(parseConfiguredBaseUrl(parsed.baseUrl)\n ? { baseUrl: parseConfiguredBaseUrl(parsed.baseUrl) }\n : {}),\n ...(parseRuntimeViewCustomization(parsed.viewCustomization)\n ? {\n viewCustomization: parseRuntimeViewCustomization(\n parsed.viewCustomization\n ),\n }\n : {}),\n ...(parseRuntimeDaemonConfig(parsed.daemon)\n ? { daemon: parseRuntimeDaemonConfig(parsed.daemon) }\n : {}),\n ...(parseRuntimeOpenMeldToolsMaintenanceConfig(\n parsed.openMeldToolsMaintenance\n )\n ? {\n openMeldToolsMaintenance: parseRuntimeOpenMeldToolsMaintenanceConfig(\n parsed.openMeldToolsMaintenance\n ),\n }\n : {}),\n ...(parseRuntimeOnboardingConfig(parsed.onboarding)\n ? { onboarding: parseRuntimeOnboardingConfig(parsed.onboarding) }\n : {}),\n };\n}\n\nfunction parseDeviceAgentRuntimeConfig(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceAgentRuntimeV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeDeviceRuntimeState(parsed.deviceRuntimeState);\n}\n\nfunction parseDeviceSkillsStoreConfig(\n value: unknown\n): Pick<RuntimeSkillsConfig, \"storeDir\" | \"agents\"> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsStoreV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n const storeDir =\n typeof parsed.storeDir === \"string\" && parsed.storeDir.trim().length > 0\n ? parsed.storeDir.trim()\n : undefined;\n const agents = parseRuntimeSkillsAgents(parsed.agents);\n if (!(storeDir || agents)) {\n return undefined;\n }\n return {\n ...(storeDir ? { storeDir } : {}),\n ...(agents ? { agents } : {}),\n };\n}\n\nfunction parseDeviceSkillsCustomTargetsConfig(\n value: unknown\n): RuntimeSkillsCustomTarget[] | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsCustomTargetsV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeSkillsCustomTargets(parsed.customTargets, undefined);\n}\n\nfunction parseDeviceSkillsInstallsConfig(\n value: unknown\n): RuntimeSkillsInstallRecord[] | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsInstallsV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeSkillsInstallRecords(parsed.installs);\n}\n\nfunction mergeRuntimeSkillsConfig(input: {\n store?: Pick<RuntimeSkillsConfig, \"storeDir\" | \"agents\">;\n customTargets?: RuntimeSkillsCustomTarget[];\n installs?: RuntimeSkillsInstallRecord[];\n}): RuntimeSkillsConfig | undefined {\n if (!(input.store || input.customTargets || input.installs)) {\n return undefined;\n }\n return {\n ...(input.store?.storeDir ? { storeDir: input.store.storeDir } : {}),\n ...(input.store?.agents ? { agents: input.store.agents } : {}),\n ...(input.customTargets ? { customTargets: input.customTargets } : {}),\n ...(input.installs ? { installs: input.installs } : {}),\n };\n}\n\nfunction buildDevicePreferencesState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DevicePreferencesV1 | null {\n if (\n !(\n next.baseUrl ||\n next.viewCustomization ||\n next.daemon ||\n next.openMeldToolsMaintenance ||\n next.onboarding\n )\n ) {\n return null;\n }\n return {\n v: 1,\n ...(next.baseUrl ? { baseUrl: next.baseUrl } : {}),\n ...(next.viewCustomization\n ? { viewCustomization: next.viewCustomization }\n : {}),\n ...(next.daemon ? { daemon: next.daemon } : {}),\n ...(next.openMeldToolsMaintenance\n ? { openMeldToolsMaintenance: next.openMeldToolsMaintenance }\n : {}),\n ...(next.onboarding ? { onboarding: next.onboarding } : {}),\n updatedAt,\n };\n}\n\nfunction buildDeviceAgentRuntimeState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceAgentRuntimeV1 | null {\n if (!next.deviceRuntimeState) {\n return null;\n }\n return {\n v: 1,\n deviceRuntimeState: next.deviceRuntimeState,\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsStoreState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsStoreV1 | null {\n if (!(next.skills?.storeDir || next.skills?.agents)) {\n return null;\n }\n return {\n v: 1,\n ...(next.skills?.storeDir ? { storeDir: next.skills.storeDir } : {}),\n ...(next.skills?.agents ? { agents: next.skills.agents } : {}),\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsCustomTargetsState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsCustomTargetsV1 | null {\n if (!(next.skills?.customTargets && next.skills.customTargets.length > 0)) {\n return null;\n }\n return {\n v: 1,\n customTargets: next.skills.customTargets,\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsInstallsState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsInstallsV1 | null {\n if (!(next.skills?.installs && next.skills.installs.length > 0)) {\n return null;\n }\n return {\n v: 1,\n installs: next.skills.installs,\n updatedAt,\n };\n}\n\nasync function writeRuntimeConfigFile(\n path: string,\n payload: object\n): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n await writeFile(tempPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n try {\n await rename(tempPath, path);\n } catch (error) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n}\n\nasync function readOptionalJsonFile(path: string): Promise<{\n found: boolean;\n value: unknown;\n error?: RuntimeConfigFallbackReason;\n}> {\n const raw = await readFile(path, \"utf8\").catch((error) => {\n if (isFileNotFoundError(error)) {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return {\n found: false,\n value: null,\n };\n }\n if (raw.trim().length === 0) {\n return {\n found: true,\n value: null,\n };\n }\n try {\n return {\n found: true,\n value: JSON.parse(raw),\n };\n } catch {\n return {\n found: true,\n value: null,\n error: \"invalid_json\",\n };\n }\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n return await readFile(path, \"utf8\")\n .then(() => true)\n .catch((error) => {\n if (isFileNotFoundError(error)) {\n return false;\n }\n throw error;\n });\n}\n","import { normalizeBaseUrl } from \"../protocol/urls\";\nimport { isLoopbackHostname } from \"./loopback-hostname\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\nimport { getConfiguredBaseUrl } from \"./runtime-config\";\n\nexport const DEFAULT_GATEWAY_BASE_URL = \"https://gateway.openmeld.ai\";\nexport const DEV_LOCAL_GATEWAY_BASE_URL = \"http://localhost:8080\";\nconst AUTH_HOST_LABEL = \"auth\";\nconst AUTH_HOST_PREFIX = \"auth-\";\nconst LOCAL_AUTH_PORT = \"8788\";\n\nexport async function resolveBaseUrl(\n cliValue?: string,\n input: { env?: NodeJS.ProcessEnv } = {}\n): Promise<string> {\n const env = input.env ?? process.env;\n const fromCli = String(cliValue ?? \"\").trim();\n if (fromCli) {\n return normalizeGatewayBaseUrl(fromCli);\n }\n\n // False-positive guard: OPENMELD_BASE_URL fallback is intentionally removed.\n // We only support OPENMELD_GATEWAY_URL to avoid ambiguous env precedence.\n const fromEnv = String(env.OPENMELD_GATEWAY_URL ?? \"\").trim();\n if (fromEnv) {\n return normalizeGatewayBaseUrl(fromEnv);\n }\n\n const fromConfig = await getConfiguredBaseUrl();\n if (fromConfig) {\n return normalizeGatewayBaseUrl(fromConfig);\n }\n\n return normalizeGatewayBaseUrl(resolveDefaultGatewayBaseUrl({ env }));\n}\n\nexport async function resolveBaseUrlOrNull(\n cliValue?: string\n): Promise<string | null> {\n try {\n return await resolveBaseUrl(cliValue);\n } catch {\n return null;\n }\n}\n\nexport async function resolveExplicitGatewayUrlOrThrow(\n cliValue?: string\n): Promise<string | undefined> {\n const explicitGatewayUrl = normalizeOptionalString(cliValue);\n if (!explicitGatewayUrl) {\n return undefined;\n }\n\n try {\n return await Promise.resolve().then(() =>\n normalizeGatewayBaseUrl(explicitGatewayUrl)\n );\n } catch (error) {\n throw new Error(\n `Invalid explicit gateway URL \"${explicitGatewayUrl}\": ${toErrorMessage(error)}`\n );\n }\n}\n\nexport function normalizeGatewayBaseUrl(gatewayUrl: string): string {\n const normalizedGatewayUrl = normalizeBaseUrl(gatewayUrl);\n const parsedGatewayUrl = new URL(normalizedGatewayUrl);\n if (isAuthWorkerUrl(parsedGatewayUrl)) {\n throw new Error(\n \"gateway URL must point to the OpenMeld gateway, not the OpenMeld auth worker\"\n );\n }\n return normalizedGatewayUrl;\n}\n\nexport function normalizeGatewayBaseUrlOrNull(\n gatewayUrl?: string | null\n): string | null {\n const normalizedGatewayUrl = normalizeOptionalString(gatewayUrl);\n if (!normalizedGatewayUrl) {\n return null;\n }\n try {\n return normalizeGatewayBaseUrl(normalizedGatewayUrl);\n } catch {\n return null;\n }\n}\n\nfunction normalizeOptionalString(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nexport function resolveDefaultGatewayBaseUrl(\n input: { env?: NodeJS.ProcessEnv } = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(input);\n if (preset === \"dev-local\" || preset === \"canary\") {\n return DEV_LOCAL_GATEWAY_BASE_URL;\n }\n return DEFAULT_GATEWAY_BASE_URL;\n}\n\nfunction isAuthWorkerUrl(url: URL): boolean {\n if (isLoopbackHostname(url.hostname)) {\n return resolveUrlPort(url) === LOCAL_AUTH_PORT;\n }\n\n const [firstLabel = \"\"] = url.hostname.toLowerCase().split(\".\");\n return (\n firstLabel === AUTH_HOST_LABEL || firstLabel.startsWith(AUTH_HOST_PREFIX)\n );\n}\n\nfunction resolveUrlPort(url: URL): string {\n if (url.port) {\n return url.port;\n }\n if (url.protocol === \"http:\" || url.protocol === \"ws:\") {\n return \"80\";\n }\n if (url.protocol === \"https:\" || url.protocol === \"wss:\") {\n return \"443\";\n }\n return \"\";\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { a as resolveBaseUrl, c as resolveExplicitGatewayUrlOrThrow, i as normalizeGatewayBaseUrlOrNull, n as DEV_LOCAL_GATEWAY_BASE_URL, o as resolveBaseUrlOrNull, r as normalizeGatewayBaseUrl, s as resolveDefaultGatewayBaseUrl, t as DEFAULT_GATEWAY_BASE_URL } from "./base-url-
|
|
3
|
+
import { a as resolveBaseUrl, c as resolveExplicitGatewayUrlOrThrow, i as normalizeGatewayBaseUrlOrNull, n as DEV_LOCAL_GATEWAY_BASE_URL, o as resolveBaseUrlOrNull, r as normalizeGatewayBaseUrl, s as resolveDefaultGatewayBaseUrl, t as DEFAULT_GATEWAY_BASE_URL } from "./base-url-3HAgYrum.js";
|
|
4
4
|
export { DEFAULT_GATEWAY_BASE_URL, DEV_LOCAL_GATEWAY_BASE_URL, normalizeGatewayBaseUrl, normalizeGatewayBaseUrlOrNull, resolveBaseUrl, resolveBaseUrlOrNull, resolveDefaultGatewayBaseUrl, resolveExplicitGatewayUrlOrThrow };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { _ as serviceExecutionHostRequestSchema, h as serviceExecutionHostMethods, m as serviceExecutionHostMessageSchema, u as SERVICE_EXECUTION_HOST_PROTOCOL } from "./dist-
|
|
3
|
+
import { _ as serviceExecutionHostRequestSchema, h as serviceExecutionHostMethods, m as serviceExecutionHostMessageSchema, u as SERVICE_EXECUTION_HOST_PROTOCOL } from "./dist-B5iixKPM.js";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
//#region src/local-service/execution-host/channel.ts
|
|
6
6
|
var ExecutionHostError = class extends Error {
|
|
@@ -235,4 +235,4 @@ function serveExecutionHost(input) {
|
|
|
235
235
|
//#endregion
|
|
236
236
|
export { createExecutionHostClient as n, serveExecutionHost as r, ExecutionHostError as t };
|
|
237
237
|
|
|
238
|
-
//# sourceMappingURL=channel-
|
|
238
|
+
//# sourceMappingURL=channel-CFWvWoEK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-C_AttfQ8.js","names":[],"sources":["../src/local-service/execution-host/channel.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES,\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS,\n SERVICE_EXECUTION_HOST_PROTOCOL,\n type ServiceExecutionHostArguments,\n type ServiceExecutionHostInput,\n type ServiceExecutionHostMessage,\n type ServiceExecutionHostMethod,\n type ServiceExecutionHostOutput,\n serviceExecutionHostMessageSchema,\n serviceExecutionHostMethods,\n serviceExecutionHostRequestSchema,\n} from \"@openmeld/schemas\";\n\nexport type ExecutionHostChannel = {\n connected(): boolean;\n send(message: object, completed: (error: Error | null) => void): void;\n onMessage(listener: (message: unknown) => void): () => void;\n onDisconnect(listener: (error?: Error) => void): () => void;\n};\n\nexport class ExecutionHostError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.name = \"ExecutionHostError\";\n this.code = code;\n }\n}\n\nconst RESERVED_CONTROL_REQUESTS = 4;\nconst controlMethods = new Set<ServiceExecutionHostMethod>([\n \"health\",\n \"beginDrain\",\n \"detachConnection\",\n \"stop\",\n]);\n\nfunction assertFrameSize(message: unknown): number {\n const serialized = JSON.stringify(message);\n if (serialized === undefined) {\n throw new ExecutionHostError(\n \"host.invalid_frame\",\n \"Host IPC requires JSON.\"\n );\n }\n const size = Buffer.byteLength(serialized);\n if (size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES) {\n throw new ExecutionHostError(\n \"host.frame_too_large\",\n \"The local execution message exceeds the IPC limit.\"\n );\n }\n return size;\n}\n\nfunction createSender(channel: ExecutionHostChannel) {\n let queuedBytes = 0;\n return (message: object, completed: (error: Error | null) => void): void => {\n const size = assertFrameSize(message);\n if (!channel.connected()) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The Host IPC channel is closed.\"\n );\n }\n if (queuedBytes + size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES * 2) {\n throw new ExecutionHostError(\n \"host.backpressure\",\n \"Host IPC is full; no new message was queued.\"\n );\n }\n queuedBytes += size;\n let settled = false;\n const settle = (error: Error | null) => {\n if (settled) {\n return;\n }\n settled = true;\n queuedBytes -= size;\n completed(error);\n };\n try {\n channel.send(message, settle);\n } catch (error) {\n settle(error instanceof Error ? error : new Error(String(error)));\n }\n };\n}\n\ntype PendingRequest = {\n method: ServiceExecutionHostMethod;\n resolve(value: unknown): void;\n reject(error: Error): void;\n timer: ReturnType<typeof setTimeout> | null;\n};\n\nfunction resolveReply(\n request: PendingRequest,\n message: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>\n): void {\n if (!message.result.ok) {\n request.reject(\n new ExecutionHostError(\n message.result.error.code,\n message.result.error.message\n )\n );\n return;\n }\n const result = serviceExecutionHostMethods[request.method].output.safeParse(\n message.result.payload\n );\n if (!result.success) {\n const error = new ExecutionHostError(\n \"host.invalid_response\",\n `Invalid ${request.method} response from the execution host.`\n );\n request.reject(error);\n throw error;\n }\n request.resolve(result.data);\n}\n\nexport function createExecutionHostClient(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n onEvent?(\n event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>\n ): void;\n onFailure?(error: Error): void;\n}) {\n const pending = new Map<string, PendingRequest>();\n const send = createSender(input.channel);\n let failure: Error | null = null;\n\n const fail = (error: Error) => {\n if (failure) {\n return;\n }\n failure = error;\n for (const request of pending.values()) {\n if (request.timer) {\n clearTimeout(request.timer);\n }\n request.reject(error);\n }\n pending.clear();\n input.onFailure?.(error);\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (failure) {\n return;\n }\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostMessageSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response does not match this process incarnation.\"\n );\n }\n const message = parsed.data;\n if (message.type !== \"reply\") {\n input.onEvent?.(message);\n return;\n }\n const request = pending.get(message.requestId);\n // A timed-out observer is gone, not the accepted operation. Do not retry it\n // or turn its late result into the outcome of a newer request.\n if (!request) {\n return;\n }\n if (request.method !== message.method) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response method does not match its request.\"\n );\n }\n pending.delete(message.requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n resolveReply(request, message);\n } catch (error) {\n fail(error instanceof Error ? error : new Error(String(error)));\n }\n });\n const stopDisconnect = input.channel.onDisconnect((cause) => {\n fail(\n new ExecutionHostError(\n \"host.disconnected\",\n cause\n ? `The execution host disconnected: ${cause.message}. In-flight outcomes are unconfirmed.`\n : \"The execution host disconnected; in-flight outcomes are unconfirmed.\"\n )\n );\n });\n\n return {\n call<M extends ServiceExecutionHostMethod>(\n method: M,\n value: ServiceExecutionHostInput<M>,\n options: { timeoutMs?: number | null } = {}\n ): Promise<ServiceExecutionHostOutput<M>> {\n if (failure) {\n return Promise.reject(failure);\n }\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (pending.size >= limit) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Too many outstanding Host requests; no new request was sent.\"\n )\n );\n }\n const payload =\n serviceExecutionHostMethods[method].input.safeParse(value);\n if (!payload.success) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${method} request.`\n )\n );\n }\n const requestId = randomUUID();\n const timeoutMs =\n options.timeoutMs === undefined ? 30_000 : options.timeoutMs;\n if (\n timeoutMs !== null &&\n (!Number.isFinite(timeoutMs) || timeoutMs <= 0)\n ) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_timeout\",\n \"The observer deadline must be positive or absent.\"\n )\n );\n }\n return new Promise<ServiceExecutionHostOutput<M>>((resolve, reject) => {\n const request: PendingRequest = {\n method,\n resolve: (result) => resolve(result as ServiceExecutionHostOutput<M>),\n reject,\n timer: null,\n };\n if (timeoutMs !== null) {\n request.timer = setTimeout(() => {\n pending.delete(requestId);\n reject(\n new ExecutionHostError(\n \"host.observation_timeout\",\n `The ${method} response is unconfirmed. No operation was cancelled or retried.`\n )\n );\n }, timeoutMs);\n request.timer.unref?.();\n }\n pending.set(requestId, request);\n try {\n send(\n {\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n requestId,\n method,\n payload: payload.data,\n },\n (error) => {\n if (error) {\n fail(error);\n }\n }\n );\n } catch (error) {\n pending.delete(requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n reject(error);\n }\n });\n },\n pendingCount: () => pending.size,\n dispose(): void {\n stopMessages();\n stopDisconnect();\n fail(\n new ExecutionHostError(\n \"host.observer_closed\",\n \"The Host observer closed; accepted work was not cancelled.\"\n )\n );\n },\n };\n}\n\nexport type ExecutionHostHandlers = {\n [M in ServiceExecutionHostMethod]: (\n input: ServiceExecutionHostArguments<M>\n ) => Promise<ServiceExecutionHostOutput<M>> | ServiceExecutionHostOutput<M>;\n};\n\nexport function serveExecutionHost(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n handlers: ExecutionHostHandlers;\n onFailure(error: Error): void;\n onDisconnect(): void;\n}) {\n const activeIds = new Set<string>();\n const send = createSender(input.channel);\n let closed = false;\n\n const sendMessage = (message: ServiceExecutionHostMessage) => {\n if (closed) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The connector is no longer observing this Host.\"\n );\n }\n send(message, (error) => {\n if (error) {\n input.onFailure(error);\n }\n });\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (closed) {\n return;\n }\n let request: ReturnType<typeof serviceExecutionHostRequestSchema.parse>;\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostRequestSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_request\",\n \"Host request does not match this process incarnation.\"\n );\n }\n request = parsed.data;\n } catch (error) {\n input.onFailure(\n error instanceof Error ? error : new Error(String(error))\n );\n return;\n }\n\n const respond = (\n result: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>[\"result\"]\n ) => {\n if (!closed) {\n sendMessage({\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n type: \"reply\",\n requestId: request.requestId,\n method: request.method,\n result,\n });\n }\n };\n const reject = (error: unknown) => {\n try {\n respond({\n ok: false,\n error: {\n code:\n error instanceof ExecutionHostError\n ? error.code\n : \"host.operation_failed\",\n message:\n (error instanceof Error ? error.message : String(error)).slice(\n 0,\n 4096\n ) || \"Host operation failed.\",\n },\n });\n } catch (sendError) {\n input.onFailure(\n sendError instanceof Error ? sendError : new Error(String(sendError))\n );\n }\n };\n\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(request.method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (activeIds.has(request.requestId) || activeIds.size >= limit) {\n reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Host request is duplicate or capacity is exhausted; it was not admitted again.\"\n )\n );\n return;\n }\n const method = serviceExecutionHostMethods[request.method];\n const payload = method.input.safeParse(request.payload);\n if (!payload.success) {\n reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${request.method} payload.`\n )\n );\n return;\n }\n activeIds.add(request.requestId);\n // This cast connects the fixed schema table to its corresponding handler.\n // Both request and response are runtime-validated, including local callers.\n const handler = input.handlers[request.method] as (\n value: unknown\n ) => unknown;\n Promise.resolve()\n .then(() => handler(payload.data))\n .then((result) => {\n const parsed = method.output.safeParse(result);\n if (!parsed.success) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n `The ${request.method} owner returned an invalid response.`\n );\n }\n respond({ ok: true, payload: parsed.data });\n })\n .catch(reject)\n .finally(() => activeIds.delete(request.requestId));\n });\n const stopDisconnect = input.channel.onDisconnect(() => {\n if (closed) {\n return;\n }\n closed = true;\n input.onDisconnect();\n });\n return {\n emit(event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>): void {\n const parsed = serviceExecutionHostMessageSchema.safeParse(event);\n if (!parsed.success || event.hostInstanceId !== input.hostInstanceId) {\n throw new ExecutionHostError(\n \"host.invalid_event\",\n \"Invalid execution-host event.\"\n );\n }\n sendMessage(parsed.data);\n },\n dispose(): void {\n closed = true;\n stopMessages();\n stopDisconnect();\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channel-CFWvWoEK.js","names":[],"sources":["../src/local-service/execution-host/channel.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES,\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS,\n SERVICE_EXECUTION_HOST_PROTOCOL,\n type ServiceExecutionHostArguments,\n type ServiceExecutionHostInput,\n type ServiceExecutionHostMessage,\n type ServiceExecutionHostMethod,\n type ServiceExecutionHostOutput,\n serviceExecutionHostMessageSchema,\n serviceExecutionHostMethods,\n serviceExecutionHostRequestSchema,\n} from \"@openmeld/schemas\";\n\nexport type ExecutionHostChannel = {\n connected(): boolean;\n send(message: object, completed: (error: Error | null) => void): void;\n onMessage(listener: (message: unknown) => void): () => void;\n onDisconnect(listener: (error?: Error) => void): () => void;\n};\n\nexport class ExecutionHostError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.name = \"ExecutionHostError\";\n this.code = code;\n }\n}\n\nconst RESERVED_CONTROL_REQUESTS = 4;\nconst controlMethods = new Set<ServiceExecutionHostMethod>([\n \"health\",\n \"beginDrain\",\n \"detachConnection\",\n \"stop\",\n]);\n\nfunction assertFrameSize(message: unknown): number {\n const serialized = JSON.stringify(message);\n if (serialized === undefined) {\n throw new ExecutionHostError(\n \"host.invalid_frame\",\n \"Host IPC requires JSON.\"\n );\n }\n const size = Buffer.byteLength(serialized);\n if (size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES) {\n throw new ExecutionHostError(\n \"host.frame_too_large\",\n \"The local execution message exceeds the IPC limit.\"\n );\n }\n return size;\n}\n\nfunction createSender(channel: ExecutionHostChannel) {\n let queuedBytes = 0;\n return (message: object, completed: (error: Error | null) => void): void => {\n const size = assertFrameSize(message);\n if (!channel.connected()) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The Host IPC channel is closed.\"\n );\n }\n if (queuedBytes + size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES * 2) {\n throw new ExecutionHostError(\n \"host.backpressure\",\n \"Host IPC is full; no new message was queued.\"\n );\n }\n queuedBytes += size;\n let settled = false;\n const settle = (error: Error | null) => {\n if (settled) {\n return;\n }\n settled = true;\n queuedBytes -= size;\n completed(error);\n };\n try {\n channel.send(message, settle);\n } catch (error) {\n settle(error instanceof Error ? error : new Error(String(error)));\n }\n };\n}\n\ntype PendingRequest = {\n method: ServiceExecutionHostMethod;\n resolve(value: unknown): void;\n reject(error: Error): void;\n timer: ReturnType<typeof setTimeout> | null;\n};\n\nfunction resolveReply(\n request: PendingRequest,\n message: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>\n): void {\n if (!message.result.ok) {\n request.reject(\n new ExecutionHostError(\n message.result.error.code,\n message.result.error.message\n )\n );\n return;\n }\n const result = serviceExecutionHostMethods[request.method].output.safeParse(\n message.result.payload\n );\n if (!result.success) {\n const error = new ExecutionHostError(\n \"host.invalid_response\",\n `Invalid ${request.method} response from the execution host.`\n );\n request.reject(error);\n throw error;\n }\n request.resolve(result.data);\n}\n\nexport function createExecutionHostClient(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n onEvent?(\n event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>\n ): void;\n onFailure?(error: Error): void;\n}) {\n const pending = new Map<string, PendingRequest>();\n const send = createSender(input.channel);\n let failure: Error | null = null;\n\n const fail = (error: Error) => {\n if (failure) {\n return;\n }\n failure = error;\n for (const request of pending.values()) {\n if (request.timer) {\n clearTimeout(request.timer);\n }\n request.reject(error);\n }\n pending.clear();\n input.onFailure?.(error);\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (failure) {\n return;\n }\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostMessageSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response does not match this process incarnation.\"\n );\n }\n const message = parsed.data;\n if (message.type !== \"reply\") {\n input.onEvent?.(message);\n return;\n }\n const request = pending.get(message.requestId);\n // A timed-out observer is gone, not the accepted operation. Do not retry it\n // or turn its late result into the outcome of a newer request.\n if (!request) {\n return;\n }\n if (request.method !== message.method) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response method does not match its request.\"\n );\n }\n pending.delete(message.requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n resolveReply(request, message);\n } catch (error) {\n fail(error instanceof Error ? error : new Error(String(error)));\n }\n });\n const stopDisconnect = input.channel.onDisconnect((cause) => {\n fail(\n new ExecutionHostError(\n \"host.disconnected\",\n cause\n ? `The execution host disconnected: ${cause.message}. In-flight outcomes are unconfirmed.`\n : \"The execution host disconnected; in-flight outcomes are unconfirmed.\"\n )\n );\n });\n\n return {\n call<M extends ServiceExecutionHostMethod>(\n method: M,\n value: ServiceExecutionHostInput<M>,\n options: { timeoutMs?: number | null } = {}\n ): Promise<ServiceExecutionHostOutput<M>> {\n if (failure) {\n return Promise.reject(failure);\n }\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (pending.size >= limit) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Too many outstanding Host requests; no new request was sent.\"\n )\n );\n }\n const payload =\n serviceExecutionHostMethods[method].input.safeParse(value);\n if (!payload.success) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${method} request.`\n )\n );\n }\n const requestId = randomUUID();\n const timeoutMs =\n options.timeoutMs === undefined ? 30_000 : options.timeoutMs;\n if (\n timeoutMs !== null &&\n (!Number.isFinite(timeoutMs) || timeoutMs <= 0)\n ) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_timeout\",\n \"The observer deadline must be positive or absent.\"\n )\n );\n }\n return new Promise<ServiceExecutionHostOutput<M>>((resolve, reject) => {\n const request: PendingRequest = {\n method,\n resolve: (result) => resolve(result as ServiceExecutionHostOutput<M>),\n reject,\n timer: null,\n };\n if (timeoutMs !== null) {\n request.timer = setTimeout(() => {\n pending.delete(requestId);\n reject(\n new ExecutionHostError(\n \"host.observation_timeout\",\n `The ${method} response is unconfirmed. No operation was cancelled or retried.`\n )\n );\n }, timeoutMs);\n request.timer.unref?.();\n }\n pending.set(requestId, request);\n try {\n send(\n {\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n requestId,\n method,\n payload: payload.data,\n },\n (error) => {\n if (error) {\n fail(error);\n }\n }\n );\n } catch (error) {\n pending.delete(requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n reject(error);\n }\n });\n },\n pendingCount: () => pending.size,\n dispose(): void {\n stopMessages();\n stopDisconnect();\n fail(\n new ExecutionHostError(\n \"host.observer_closed\",\n \"The Host observer closed; accepted work was not cancelled.\"\n )\n );\n },\n };\n}\n\nexport type ExecutionHostHandlers = {\n [M in ServiceExecutionHostMethod]: (\n input: ServiceExecutionHostArguments<M>\n ) => Promise<ServiceExecutionHostOutput<M>> | ServiceExecutionHostOutput<M>;\n};\n\nexport function serveExecutionHost(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n handlers: ExecutionHostHandlers;\n onFailure(error: Error): void;\n onDisconnect(): void;\n}) {\n const activeIds = new Set<string>();\n const send = createSender(input.channel);\n let closed = false;\n\n const sendMessage = (message: ServiceExecutionHostMessage) => {\n if (closed) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The connector is no longer observing this Host.\"\n );\n }\n send(message, (error) => {\n if (error) {\n input.onFailure(error);\n }\n });\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (closed) {\n return;\n }\n let request: ReturnType<typeof serviceExecutionHostRequestSchema.parse>;\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostRequestSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_request\",\n \"Host request does not match this process incarnation.\"\n );\n }\n request = parsed.data;\n } catch (error) {\n input.onFailure(\n error instanceof Error ? error : new Error(String(error))\n );\n return;\n }\n\n const respond = (\n result: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>[\"result\"]\n ) => {\n if (!closed) {\n sendMessage({\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n type: \"reply\",\n requestId: request.requestId,\n method: request.method,\n result,\n });\n }\n };\n const reject = (error: unknown) => {\n try {\n respond({\n ok: false,\n error: {\n code:\n error instanceof ExecutionHostError\n ? error.code\n : \"host.operation_failed\",\n message:\n (error instanceof Error ? error.message : String(error)).slice(\n 0,\n 4096\n ) || \"Host operation failed.\",\n },\n });\n } catch (sendError) {\n input.onFailure(\n sendError instanceof Error ? sendError : new Error(String(sendError))\n );\n }\n };\n\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(request.method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (activeIds.has(request.requestId) || activeIds.size >= limit) {\n reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Host request is duplicate or capacity is exhausted; it was not admitted again.\"\n )\n );\n return;\n }\n const method = serviceExecutionHostMethods[request.method];\n const payload = method.input.safeParse(request.payload);\n if (!payload.success) {\n reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${request.method} payload.`\n )\n );\n return;\n }\n activeIds.add(request.requestId);\n // This cast connects the fixed schema table to its corresponding handler.\n // Both request and response are runtime-validated, including local callers.\n const handler = input.handlers[request.method] as (\n value: unknown\n ) => unknown;\n Promise.resolve()\n .then(() => handler(payload.data))\n .then((result) => {\n const parsed = method.output.safeParse(result);\n if (!parsed.success) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n `The ${request.method} owner returned an invalid response.`\n );\n }\n respond({ ok: true, payload: parsed.data });\n })\n .catch(reject)\n .finally(() => activeIds.delete(request.requestId));\n });\n const stopDisconnect = input.channel.onDisconnect(() => {\n if (closed) {\n return;\n }\n closed = true;\n input.onDisconnect();\n });\n return {\n emit(event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>): void {\n const parsed = serviceExecutionHostMessageSchema.safeParse(event);\n if (!parsed.success || event.hostInstanceId !== input.hostInstanceId) {\n throw new ExecutionHostError(\n \"host.invalid_event\",\n \"Invalid execution-host event.\"\n );\n }\n sendMessage(parsed.data);\n },\n dispose(): void {\n closed = true;\n stopMessages();\n stopDisconnect();\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { S as cloudComputerOperationSchema } from "./dist-
|
|
4
|
-
import { a as resolveBaseUrl } from "./base-url-
|
|
5
|
-
import { Gt as createCloudComputerApi } from "./dist-
|
|
6
|
-
import { n as resolveRuntimeContext } from "./context-
|
|
3
|
+
import { S as cloudComputerOperationSchema } from "./dist-B5iixKPM.js";
|
|
4
|
+
import { a as resolveBaseUrl } from "./base-url-3HAgYrum.js";
|
|
5
|
+
import { Gt as createCloudComputerApi } from "./dist-D7YYztTY.js";
|
|
6
|
+
import { n as resolveRuntimeContext } from "./context-Gn5H-Rd_.js";
|
|
7
7
|
import { t as createPresenter } from "./presenter-BcxiQyJg.js";
|
|
8
|
-
import { t as createCliApiClientFoundation } from "./api-client-foundation-
|
|
8
|
+
import { t as createCliApiClientFoundation } from "./api-client-foundation-BFxJALyQ.js";
|
|
9
9
|
//#region src/commands/cloud-computer.ts
|
|
10
10
|
async function runCloudComputer(input) {
|
|
11
11
|
const presenter = createPresenter(await resolveRuntimeContext({ view: input.view }));
|
|
@@ -19,4 +19,4 @@ async function runCloudComputer(input) {
|
|
|
19
19
|
//#endregion
|
|
20
20
|
export { runCloudComputer };
|
|
21
21
|
|
|
22
|
-
//# sourceMappingURL=cloud-computer-
|
|
22
|
+
//# sourceMappingURL=cloud-computer-j7R51e68.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-computer-
|
|
1
|
+
{"version":3,"file":"cloud-computer-j7R51e68.js","names":[],"sources":["../src/commands/cloud-computer.ts"],"sourcesContent":["import { createCloudComputerApi } from \"@openmeld/api-client\";\nimport { cloudComputerOperationSchema } from \"@openmeld/schemas\";\nimport { resolveBaseUrl } from \"../config/base-url\";\nimport { resolveRuntimeContext } from \"../runtime/context\";\nimport { createPresenter } from \"../runtime/presenter/index\";\nimport { createCliApiClientFoundation } from \"../space/api-client-foundation\";\n\nexport async function runCloudComputer(input: {\n operation?: string;\n view?: string;\n}) {\n const runtime = await resolveRuntimeContext({ view: input.view });\n const presenter = createPresenter(runtime);\n const api = createCloudComputerApi(\n createCliApiClientFoundation(await resolveBaseUrl())\n );\n const response = input.operation\n ? await api.execute(\n cloudComputerOperationSchema.parse(JSON.parse(input.operation))\n )\n : await api.read();\n presenter.data({ code: \"computer.cloud.completed\", payload: response });\n}\n"],"mappings":";;;;;;;;;AAOA,eAAsB,iBAAiB,OAGpC;CAED,MAAM,YAAY,gBAAgB,MADZ,sBAAsB,EAAE,MAAM,MAAM,KAAK,CAAC,CACvB;CACzC,MAAM,MAAM,uBACV,6BAA6B,MAAM,eAAe,CAAC,CACrD;CACA,MAAM,WAAW,MAAM,YACnB,MAAM,IAAI,QACR,6BAA6B,MAAM,KAAK,MAAM,MAAM,SAAS,CAAC,CAChE,IACA,MAAM,IAAI,KAAK;CACnB,UAAU,KAAK;EAAE,MAAM;EAA4B,SAAS;CAAS,CAAC;AACxE"}
|