openmeld 0.3.237 → 0.3.238

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/{add-me-membership-BEqSnfgo.js → add-me-membership-_7nC0hkr.js} +2 -2
  2. package/dist/{add-me-membership-BEqSnfgo.js.map → add-me-membership-_7nC0hkr.js.map} +1 -1
  3. package/dist/{agents-_Hh6L3Fi.js → agents-kG9UvazC.js} +10 -10
  4. package/dist/{agents-_Hh6L3Fi.js.map → agents-kG9UvazC.js.map} +1 -1
  5. package/dist/{api-client-foundation-ZuYF2Uah.js → api-client-foundation-DIcNjG9w.js} +1 -1
  6. package/dist/{api-client-foundation-CGc8AuMo.js → api-client-foundation-DNbvvZW2.js} +3 -3
  7. package/dist/{api-client-foundation-CGc8AuMo.js.map → api-client-foundation-DNbvvZW2.js.map} +1 -1
  8. package/dist/{auth-session-B3oyTcSI.js → auth-session-BTRu2Kc5.js} +2 -2
  9. package/dist/{auth-session-B3oyTcSI.js.map → auth-session-BTRu2Kc5.js.map} +1 -1
  10. package/dist/auth-session-D2f7Lud02.js +4 -0
  11. package/dist/{channel-BB6aEY--.js → channel-BxlX3o3i.js} +78 -4
  12. package/dist/channel-BxlX3o3i.js.map +1 -0
  13. package/dist/{command-D71NHS4j.js → command-Cyw5Gj59.js} +37 -123
  14. package/dist/command-Cyw5Gj59.js.map +1 -0
  15. package/dist/{computer-connection-DyL3C3HO.js → computer-connection-Sntn_-XO.js} +2 -2
  16. package/dist/{computer-connection-DyL3C3HO.js.map → computer-connection-Sntn_-XO.js.map} +1 -1
  17. package/dist/{computer-connection-review-BXuXP6KH.js → computer-connection-review-DWiapsro.js} +5 -5
  18. package/dist/{computer-connection-review-BXuXP6KH.js.map → computer-connection-review-DWiapsro.js.map} +1 -1
  19. package/dist/{computer-disconnect-BXZKVvxj.js → computer-disconnect-Bxxreumk.js} +8 -8
  20. package/dist/{computer-disconnect-BXZKVvxj.js.map → computer-disconnect-Bxxreumk.js.map} +1 -1
  21. package/dist/{computer-setup-continuation-DOvxRtAh.js → computer-setup-continuation-DkPRFlA1.js} +4 -4
  22. package/dist/{computer-setup-continuation-DOvxRtAh.js.map → computer-setup-continuation-DkPRFlA1.js.map} +1 -1
  23. package/dist/{daemon-device-id-Dwm7CHtX.js → daemon-device-id-D7lbw6c4.js} +226 -42
  24. package/dist/daemon-device-id-D7lbw6c4.js.map +1 -0
  25. package/dist/{daemon-lifecycle-journal-DrDyXoUO.js → daemon-lifecycle-journal-C0P8xFTk.js} +3 -3
  26. package/dist/{daemon-lifecycle-journal-DrDyXoUO.js.map → daemon-lifecycle-journal-C0P8xFTk.js.map} +1 -1
  27. package/dist/{daemon-service-runtime-D-tDDWWf.js → daemon-service-runtime-DhV7AKAv.js} +2 -2
  28. package/dist/{daemon-service-runtime-D-tDDWWf.js.map → daemon-service-runtime-DhV7AKAv.js.map} +1 -1
  29. package/dist/{daemon-service-update-coordinator-ykoOjGCd.js → daemon-service-update-coordinator-BM4ha5Nj.js} +9 -10
  30. package/dist/{daemon-service-update-coordinator-ykoOjGCd.js.map → daemon-service-update-coordinator-BM4ha5Nj.js.map} +1 -1
  31. package/dist/{dispatch-owned-runtime-eRa3wkl9.js → dispatch-owned-runtime-CfPwparq.js} +7 -7
  32. package/dist/{dispatch-owned-runtime-eRa3wkl9.js.map → dispatch-owned-runtime-CfPwparq.js.map} +1 -1
  33. package/dist/dist-Bfz_GJ0l.js +4 -0
  34. package/dist/{dist-DEjtwiDJ.js → dist-s_YTHAIc.js} +307 -16
  35. package/dist/dist-s_YTHAIc.js.map +1 -0
  36. package/dist/{elapsed-time-BnibmBPb.js → dual-view-guide-catalog-DDYa38RT.js} +215 -164
  37. package/dist/dual-view-guide-catalog-DDYa38RT.js.map +1 -0
  38. package/dist/elapsed-time-Ck4GiT9P.js +165 -0
  39. package/dist/elapsed-time-Ck4GiT9P.js.map +1 -0
  40. package/dist/{entry-CVxgr9uQ.js → entry-CTw122mn.js} +7 -8
  41. package/dist/{entry-CVxgr9uQ.js.map → entry-CTw122mn.js.map} +1 -1
  42. package/dist/{installation-inventory-HHLOQ2g7.js → installation-inventory-CSNq9dzc.js} +3 -3
  43. package/dist/{installation-inventory-HHLOQ2g7.js.map → installation-inventory-CSNq9dzc.js.map} +1 -1
  44. package/dist/{installer-Bg4KA0DR.js → installer-B4MjFlzg.js} +2 -2
  45. package/dist/{installer-Bg4KA0DR.js.map → installer-B4MjFlzg.js.map} +1 -1
  46. package/dist/{meta-api-CjvtAPvQ.js → meta-api-tg1rD8mP.js} +117 -6
  47. package/dist/meta-api-tg1rD8mP.js.map +1 -0
  48. package/dist/{openmeld-o_rTSEOO.js → openmeld-MSrVnYw0.js} +128 -88
  49. package/dist/openmeld-MSrVnYw0.js.map +1 -0
  50. package/dist/{openmeld-maintenance-worker-Cwv6_5UL.js → openmeld-maintenance-worker-CQGwuIl9.js} +9 -9
  51. package/dist/{openmeld-maintenance-worker-Cwv6_5UL.js.map → openmeld-maintenance-worker-CQGwuIl9.js.map} +1 -1
  52. package/dist/{openmeld-tools-update-join-IFQf70sm.js → openmeld-tools-update-join-CzBRWKVT.js} +4 -4
  53. package/dist/{openmeld-tools-update-join-IFQf70sm.js.map → openmeld-tools-update-join-CzBRWKVT.js.map} +1 -1
  54. package/dist/openmeld.js +4 -4
  55. package/dist/{prepare-provider-runtime-B_huS5DY.js → prepare-provider-runtime-L7u8iHAb.js} +94 -11
  56. package/dist/{prepare-provider-runtime-B_huS5DY.js.map → prepare-provider-runtime-L7u8iHAb.js.map} +1 -1
  57. package/dist/{prepare-session-executor-WWjgnqsh.js → prepare-session-executor-D8LvC1d8.js} +19 -20
  58. package/dist/{prepare-session-executor-WWjgnqsh.js.map → prepare-session-executor-D8LvC1d8.js.map} +1 -1
  59. package/dist/{presenter-MJ5YgsOT.js → presenter-BcxiQyJg.js} +13 -3
  60. package/dist/presenter-BcxiQyJg.js.map +1 -0
  61. package/dist/{process-channel-C2dB41fO.js → process-channel-QRugdtrY.js} +2 -2
  62. package/dist/{process-channel-C2dB41fO.js.map → process-channel-QRugdtrY.js.map} +1 -1
  63. package/dist/{runtime-DjEQja8c.js → runtime-C2v7iKNY.js} +126 -16
  64. package/dist/runtime-C2v7iKNY.js.map +1 -0
  65. package/dist/{runtime-agent-controller-reporting-submission-CRS5CwMp.js → runtime-agent-controller-reporting-submission-BFXtOHAU.js} +8 -8
  66. package/dist/{runtime-agent-controller-reporting-submission-CRS5CwMp.js.map → runtime-agent-controller-reporting-submission-BFXtOHAU.js.map} +1 -1
  67. package/dist/{runtime-transport-B-GZhwVt.js → runtime-transport-BVCHi4qM.js} +10 -6
  68. package/dist/runtime-transport-BVCHi4qM.js.map +1 -0
  69. package/dist/{service-CleUczqJ.js → service-6waBVmON.js} +43 -20
  70. package/dist/service-6waBVmON.js.map +1 -0
  71. package/dist/{service-account-authorization-s1bXEswT.js → service-account-authorization-C1CdX1P3.js} +2 -2
  72. package/dist/{service-account-authorization-s1bXEswT.js.map → service-account-authorization-C1CdX1P3.js.map} +1 -1
  73. package/dist/{service-account-control-CjZ5uqK4.js → service-account-control-BBY6pX86.js} +8 -9
  74. package/dist/{service-account-control-CjZ5uqK4.js.map → service-account-control-BBY6pX86.js.map} +1 -1
  75. package/dist/{service-control-capabilities-D5izhuhD.js → service-control-capabilities-BP9UE3a7.js} +3 -3
  76. package/dist/{service-control-capabilities-D5izhuhD.js.map → service-control-capabilities-BP9UE3a7.js.map} +1 -1
  77. package/dist/{service-control-capabilities-Bcho1Rwq.js → service-control-capabilities-CQjhvDFx.js} +1 -1
  78. package/dist/{state-CbrhgfNh.js → state-BJJLEoJY.js} +2 -2
  79. package/dist/{state-CbrhgfNh.js.map → state-BJJLEoJY.js.map} +1 -1
  80. package/dist/{updates-api-B7x39-DR.js → updates-api-dsNUTfpa.js} +142 -11
  81. package/dist/updates-api-dsNUTfpa.js.map +1 -0
  82. package/dist/upgrade-CUyMj35o.js +4 -0
  83. package/dist/{upgrade-BQSA2LfT.js → upgrade-DwlRN4_U.js} +9 -9
  84. package/dist/{upgrade-BQSA2LfT.js.map → upgrade-DwlRN4_U.js.map} +1 -1
  85. package/dist/windows/openmeld-windows-process.exe +0 -0
  86. package/package.json +12 -12
  87. package/skills/openmeld-cli/playbooks/space-ops.md +24 -2
  88. package/skills/openmeld-cli/references/commands.md +9 -2
  89. package/dist/auth-session-CoFlCq7_.js +0 -4
  90. package/dist/channel-BB6aEY--.js.map +0 -1
  91. package/dist/command-D71NHS4j.js.map +0 -1
  92. package/dist/context-43g3bIde.js +0 -162
  93. package/dist/context-43g3bIde.js.map +0 -1
  94. package/dist/daemon-device-id-Dwm7CHtX.js.map +0 -1
  95. package/dist/dist-CaCD0K8a.js +0 -216
  96. package/dist/dist-CaCD0K8a.js.map +0 -1
  97. package/dist/dist-DEjtwiDJ.js.map +0 -1
  98. package/dist/dist-DGNsLSYJ.js +0 -4
  99. package/dist/elapsed-time-BnibmBPb.js.map +0 -1
  100. package/dist/io-DT66typ4.js +0 -16
  101. package/dist/io-DT66typ4.js.map +0 -1
  102. package/dist/meta-api-CjvtAPvQ.js.map +0 -1
  103. package/dist/openmeld-o_rTSEOO.js.map +0 -1
  104. package/dist/presenter-MJ5YgsOT.js.map +0 -1
  105. package/dist/runtime-DjEQja8c.js.map +0 -1
  106. package/dist/runtime-transport-B-GZhwVt.js.map +0 -1
  107. package/dist/service-CleUczqJ.js.map +0 -1
  108. package/dist/updates-api-B7x39-DR.js.map +0 -1
  109. package/dist/upgrade-636PQBli.js +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-service-runtime-D-tDDWWf.js","names":["process","getErrorCode","packageJson","exhaustive","getErrorCode","fsConstants","process","fsConstants","delay","resolveDaemonServiceExecutableWrapperPaths","resolveDaemonServiceRecognizedExecutablePaths","process","daemonServiceRecognizedExecutablePaths","process","process"],"sources":["../../../packages/schemas/dist/schemas/daemon/cli-install-self.js","../../../packages/schemas/dist/schemas/daemon/service-update-job.js","../../../runtime/local-service/src/cli-binary-delta.ts","../../../runtime/local-service/src/windows-artifact-script.ts","../../../runtime/local-service/src/windows-artifact-signature.ts","../../../runtime/local-service/src/cli-binary-update-artifact.ts","../src/config/daemon-service-update-worker-registration.ts","../src/config/service-release.ts","../src/local-service/lifecycle/daemon-service-update-state.ts","../src/local-components/managed-version-pruning.ts","../src/local-components/managed-install.ts","../src/system/local-operation-diagnostics.ts","../src/local-service/lifecycle/daemon-service-artifact.ts","../src/local-service/lifecycle/daemon-service-bundle.ts","../src/local-service/lifecycle/daemon-managed-binary-path.ts","../src/local-service/lifecycle/daemon-service-manager-command-match.ts","../src/local-service/lifecycle/daemon-service-command-path.ts","../src/local-service/lifecycle/daemon-service-process-inventory.ts","../src/local-service/lifecycle/daemon-service-legacy-shared.ts","../src/local-service/lifecycle/daemon-service-runtime-observer.ts","../src/local-service/lifecycle/daemon-service-runtime.ts"],"sourcesContent":["import * as z$1 from \"zod/v4\";\n//#region src/schemas/daemon/cli-install-self.ts\nconst cliInstallSelfResultSchema = z$1.strictObject({\n\tschemaVersion: z$1.literal(1),\n\ttype: z$1.literal(\"cli.install_self\"),\n\tresult: z$1.enum([\n\t\t\"installed\",\n\t\t\"noop_same_version\",\n\t\t\"noop_newer_present\"\n\t]),\n\tversion: z$1.string().min(1),\n\tplatform: z$1.string().min(1),\n\tmanagedBinaryPath: z$1.string().min(1),\n\tcurrentPointerPath: z$1.string().min(1),\n\tpreviousVersion: z$1.string().nullable(),\n\tforced: z$1.boolean()\n});\n//#endregion\nexport { cliInstallSelfResultSchema };\n\n//# sourceMappingURL=cli-install-self.js.map","import { openMeldToolsUpdateOperationPhaseSchema, openMeldToolsUpdateRequestSourceSchema } from \"../local-components.js\";\nimport * as z$1 from \"zod/v4\";\n//#region src/schemas/daemon/service-update-job.ts\nconst OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA = \"openmeld-daemon-service-update-job-v2\";\nconst daemonServiceUpdatePreparedBundleSchema = z$1.strictObject({\n\tv: z$1.literal(2),\n\tschema: z$1.literal(\"openmeld-daemon-active-bundle-v2\"),\n\tbundleId: z$1.string().min(1),\n\tdaemonVersion: z$1.string().min(1),\n\tentryScriptRelativePath: z$1.string().min(1),\n\tbundleFormat: z$1.enum([\n\t\t\"legacy_linked_v1\",\n\t\t\"self_contained_v1\",\n\t\t\"binary_v1\"\n\t]),\n\tsourceEntryScriptPath: z$1.string().min(1),\n\tsourcePackageRootPath: z$1.string().min(1),\n\tsourceDistRootPath: z$1.string().min(1),\n\tsourceDistFingerprint: z$1.string().min(1).nullable().optional(),\n\tsourceKind: z$1.enum([\n\t\t\"workspace\",\n\t\t\"package_install\",\n\t\t\"npx_cache\",\n\t\t\"unknown\"\n\t]),\n\tcreatedAt: z$1.iso.datetime({ offset: true }),\n\tupdatedAt: z$1.iso.datetime({ offset: true })\n});\nconst daemonServiceUpdateJobBodySchema = z$1.strictObject({\n\tattempts: z$1.number().int().nonnegative(),\n\tdesiredState: z$1.enum([\"background\", \"stopped\"]),\n\terrorMessage: z$1.string().min(1).nullable(),\n\tjobId: z$1.string().min(1),\n\tpreparedBundle: daemonServiceUpdatePreparedBundleSchema,\n\trequestedAt: z$1.iso.datetime({ offset: true }),\n\ttargetCliVersion: z$1.string().min(1).optional(),\n\ttargetServiceVersion: z$1.string().min(1).optional(),\n\ttargetVersion: z$1.string().min(1),\n\tupdatedAt: z$1.iso.datetime({ offset: true }),\n\turgency: z$1.enum([\"available\", \"required\"])\n});\nconst daemonServiceUpdateJobV1Schema = daemonServiceUpdateJobBodySchema.extend({\n\tv: z$1.literal(1),\n\tschema: z$1.literal(\"openmeld-daemon-service-update-job-v1\"),\n\tstatus: z$1.enum([\n\t\t\"scheduled\",\n\t\t\"running\",\n\t\t\"completed\",\n\t\t\"failed\"\n\t])\n});\nconst daemonServiceUpdateJobSchema = daemonServiceUpdateJobBodySchema.extend({\n\tv: z$1.literal(2),\n\tschema: z$1.literal(OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA),\n\tphase: openMeldToolsUpdateOperationPhaseSchema,\n\trequestSource: openMeldToolsUpdateRequestSourceSchema\n});\nconst storedDaemonServiceUpdateJobSchema = z$1.discriminatedUnion(\"v\", [daemonServiceUpdateJobV1Schema, daemonServiceUpdateJobSchema]);\n//#endregion\nexport { OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA, daemonServiceUpdateJobSchema, daemonServiceUpdateJobV1Schema, daemonServiceUpdatePreparedBundleSchema, storedDaemonServiceUpdateJobSchema };\n\n//# sourceMappingURL=service-update-job.js.map","import { createHash } from \"node:crypto\";\nimport {\n type CliBinaryDeltaPatch,\n type CliBinaryDeltaTransport,\n cliBinaryDeltaPatchSchema,\n} from \"@openmeld/schemas\";\n\nexport function reconstructCliBinaryDelta(input: {\n baseBytes: Buffer;\n delta: CliBinaryDeltaTransport;\n patchPayloadBytes: Buffer;\n targetSha256: string;\n targetSizeBytes: number;\n}): Buffer {\n verifyBytes({\n bytes: input.baseBytes,\n expectedSha256: input.delta.fromSha256,\n expectedSizeBytes: input.delta.fromSizeBytes,\n label: \"delta base\",\n });\n\n const patch = parseCliBinaryDeltaPatch(input.patchPayloadBytes);\n assertPatchMatchesRelease({\n delta: input.delta,\n patch,\n targetSha256: input.targetSha256,\n targetSizeBytes: input.targetSizeBytes,\n });\n\n const targetBytes = Buffer.alloc(input.targetSizeBytes);\n input.baseBytes.copy(\n targetBytes,\n 0,\n 0,\n Math.min(input.baseBytes.byteLength, targetBytes.byteLength)\n );\n\n let previousEnd = 0;\n for (const segment of patch.segments) {\n const bytes = Buffer.from(segment.dataBase64, \"base64\");\n const segmentEnd = segment.offset + bytes.byteLength;\n if (segment.offset < previousEnd) {\n throw new Error(\n \"delta patch segments must be sorted and non-overlapping\"\n );\n }\n if (segmentEnd > targetBytes.byteLength) {\n throw new Error(\"delta patch segment exceeds the target binary size\");\n }\n bytes.copy(targetBytes, segment.offset);\n previousEnd = segmentEnd;\n }\n\n verifyBytes({\n bytes: targetBytes,\n expectedSha256: input.targetSha256,\n expectedSizeBytes: input.targetSizeBytes,\n label: \"reconstructed binary\",\n });\n return targetBytes;\n}\n\nfunction parseCliBinaryDeltaPatch(bytes: Buffer): CliBinaryDeltaPatch {\n let value: unknown;\n try {\n value = JSON.parse(bytes.toString(\"utf8\"));\n } catch (error) {\n throw new Error(\n `delta patch is not valid JSON: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n const parsed = cliBinaryDeltaPatchSchema.safeParse(value);\n if (!parsed.success) {\n throw new Error(`delta patch is invalid: ${parsed.error.message}`);\n }\n return parsed.data;\n}\n\nfunction assertPatchMatchesRelease(input: {\n delta: CliBinaryDeltaTransport;\n patch: CliBinaryDeltaPatch;\n targetSha256: string;\n targetSizeBytes: number;\n}): void {\n const mismatches = [\n [\"format\", input.patch.patchFormat, input.delta.patchFormat],\n [\"base sha256\", input.patch.baseSha256, input.delta.fromSha256],\n [\"base size\", input.patch.baseSizeBytes, input.delta.fromSizeBytes],\n [\"target sha256\", input.patch.targetSha256, input.targetSha256],\n [\"target size\", input.patch.targetSizeBytes, input.targetSizeBytes],\n ].filter(([, actual, expected]) => actual !== expected);\n if (mismatches.length > 0) {\n throw new Error(\n `delta patch metadata mismatch: ${mismatches.map(([label]) => label).join(\", \")}`\n );\n }\n}\n\nfunction verifyBytes(input: {\n bytes: Buffer;\n expectedSha256: string;\n expectedSizeBytes: number;\n label: string;\n}): void {\n if (input.bytes.byteLength !== input.expectedSizeBytes) {\n throw new Error(\n `${input.label} size mismatch: expected ${input.expectedSizeBytes} bytes, received ${input.bytes.byteLength} bytes`\n );\n }\n const actualSha256 = createHash(\"sha256\").update(input.bytes).digest(\"hex\");\n if (actualSha256 !== input.expectedSha256.toLowerCase()) {\n throw new Error(\n `${input.label} sha256 mismatch: expected ${input.expectedSha256.toLowerCase()}, received ${actualSha256}`\n );\n }\n}\n","// Shared by the Node/Electron verifier and the dependency-free PowerShell\n// bootstrap. Keep OS trust and publisher matching identical at both entrances.\nexport const WINDOWS_ARTIFACT_SIGNATURE_FUNCTION = String.raw`\nfunction Assert-OpenMeldArtifactSignature([string]$Path, [string]$Publisher) {\n Import-Module -Name (Join-Path $PSHOME 'Modules\\Microsoft.PowerShell.Security\\Microsoft.PowerShell.Security.psd1') -ErrorAction Stop\n $path = [IO.Path]::GetFullPath($Path)\n $signature = Microsoft.PowerShell.Security\\Get-AuthenticodeSignature -LiteralPath $path -ErrorAction Stop\n if ($signature.Status -ne [Management.Automation.SignatureStatus]::Valid -or !$signature.SignerCertificate -or $signature.Path -ine $path) { throw 'OpenMeld update signature is not valid for this file.' }\n $certificate = $signature.SignerCertificate\n $matches = if ($Publisher.Contains('=')) { $certificate.Subject -ceq $Publisher } else { $certificate.GetNameInfo([Security.Cryptography.X509Certificates.X509NameType]::SimpleName, $false) -ceq $Publisher }\n if (!$matches) { throw 'OpenMeld update publisher does not match this installation.' }\n}\n`;\n","import { execFile } from \"node:child_process\";\nimport { win32 } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { normalizeCommandEnvironment } from \"@openmeld/adapter-core/process-environment\";\nimport {\n powerShellEncodedArguments,\n resolveWindowsPowerShellPath,\n} from \"@openmeld/adapter-core/windows-system\";\nimport { WINDOWS_ARTIFACT_SIGNATURE_FUNCTION } from \"@openmeld/local-service/windows-artifact-script\";\nimport { windowsPublisherNameSchema } from \"@openmeld/schemas\";\n\nconst SIGNATURE_VERIFIED = \"OPENMELD_AUTHENTICODE_VERIFIED\";\nconst VERIFY_SCRIPT = `\n$ErrorActionPreference = 'Stop'\n$ProgressPreference = 'SilentlyContinue'\n[Console]::OutputEncoding = New-Object Text.UTF8Encoding($false)\n${WINDOWS_ARTIFACT_SIGNATURE_FUNCTION}\n$r = ConvertFrom-Json ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($env:OPENMELD_SIGNATURE_REQUEST)))\nAssert-OpenMeldArtifactSignature $r.path $r.publisherName\n[Console]::Out.Write('OPENMELD_AUTHENTICODE_VERIFIED')\n`;\n\ntype ExecuteSignatureCheck = (\n file: string,\n args: string[],\n options: {\n env: NodeJS.ProcessEnv;\n windowsHide: boolean;\n timeout: number;\n maxBuffer: number;\n }\n) => Promise<{ stdout: string; stderr: string }>;\n\n/** Shared artifact verifier: every missing/failed/ambiguous OS result rejects. */\nexport async function verifyWindowsArtifactSignature(\n path: string,\n publisherName: string,\n execute: ExecuteSignatureCheck = promisify(execFile)\n): Promise<void> {\n const publisher = windowsPublisherNameSchema.parse(publisherName);\n if (!win32.isAbsolute(path) || path.includes(\"\\0\")) {\n throw new Error(\n \"OpenMeld signature verification requires an absolute Windows file path.\"\n );\n }\n const env = normalizeCommandEnvironment(process.env, \"win32\");\n // Use Windows PowerShell's own module discovery, not a caller override.\n for (const key of Object.keys(env)) {\n if (key.toUpperCase() === \"PSMODULEPATH\") {\n delete env[key];\n }\n }\n const result = await execute(\n resolveWindowsPowerShellPath(env),\n powerShellEncodedArguments(VERIFY_SCRIPT),\n {\n env: {\n ...env,\n OPENMELD_SIGNATURE_REQUEST: Buffer.from(\n JSON.stringify({ path, publisherName: publisher })\n ).toString(\"base64\"),\n },\n windowsHide: true,\n timeout: 30_000,\n maxBuffer: 16_384,\n }\n );\n if (result.stderr.trim() || result.stdout.trim() !== SIGNATURE_VERIFIED) {\n throw new Error(\"Windows could not verify the OpenMeld update signature.\");\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { gunzipSync } from \"node:zlib\";\nimport {\n type CliBinaryRelease,\n OPENMELD_MACOS_CLI_SIGNING_IDENTITY,\n OPENMELD_MACOS_CLI_SIGNING_REQUIREMENT,\n WINDOWS_INTERNAL_PREVIEW_MANIFEST_URL,\n WINDOWS_PROCESS_HELPER_FILENAME,\n} from \"@openmeld/schemas\";\nimport { reconstructCliBinaryDelta } from \"./cli-binary-delta.js\";\nimport { verifyWindowsArtifactSignature } from \"./windows-artifact-signature.js\";\n\ntype CommandResult = {\n code: number;\n stderr: string;\n stdout: string;\n};\n\nconst HARDENED_RUNTIME_FLAG_RE = /flags=.*runtime/iu;\nconst RETRY_AFTER_SECONDS_RE = /^\\d+$/u;\nconst SIGNING_TIMESTAMP_RE = /^Timestamp=/mu;\n\ntype CliBinaryDelta = NonNullable<CliBinaryRelease[\"deltas\"]>[number];\nexport type CliBinaryDownloadPolicy = {\n maxAttempts: number;\n retryDelaysMs: readonly number[];\n stallTimeoutMs: number;\n totalBudgetMs: number;\n};\n\nexport type CliBinaryDownloadProgress = {\n receivedBytes: number;\n totalBytes: number;\n transferAttempt: number;\n};\n\nexport const DEFAULT_CLI_BINARY_DOWNLOAD_POLICY: CliBinaryDownloadPolicy = {\n maxAttempts: 3,\n retryDelaysMs: [500, 1500],\n stallTimeoutMs: 60_000,\n totalBudgetMs: 5 * 60_000,\n};\n\nexport type CliBinaryUpdateErrorKind =\n | \"download_failed\"\n | \"download_stalled\"\n | \"download_timed_out\"\n | \"integrity_check_failed\";\n\nexport class CliBinaryUpdateError extends Error {\n readonly allowFullFallback: boolean;\n readonly code: `openmeld.tools.update.${CliBinaryUpdateErrorKind}`;\n readonly kind: CliBinaryUpdateErrorKind;\n readonly retryAfterMs?: number;\n readonly retryable: boolean;\n\n constructor(input: {\n allowFullFallback: boolean;\n cause?: unknown;\n kind: CliBinaryUpdateErrorKind;\n message: string;\n retryAfterMs?: number;\n retryable: boolean;\n }) {\n super(\n input.message,\n input.cause === undefined ? undefined : { cause: input.cause }\n );\n this.name = \"CliBinaryUpdateError\";\n this.allowFullFallback = input.allowFullFallback;\n this.code = `openmeld.tools.update.${input.kind}`;\n this.kind = input.kind;\n this.retryAfterMs = input.retryAfterMs;\n this.retryable = input.retryable;\n }\n}\ntype CliBinaryFullUpdatePlan =\n | {\n downloadSha256: string;\n downloadSizeBytes: number;\n downloadUrl: string;\n transport: \"archive\";\n }\n | {\n downloadSha256: string;\n downloadSizeBytes: number;\n downloadUrl: string;\n transport: \"raw\";\n };\n\nexport type CliBinaryUpdatePlan =\n | CliBinaryFullUpdatePlan\n | {\n baseBytes: Buffer;\n delta: CliBinaryDelta;\n downloadSizeBytes: number;\n transport: \"delta\";\n };\n\nexport async function resolveCliBinaryUpdatePlan(input: {\n baseBinaryPath: string;\n currentVersion: string;\n onDeltaFallback: (error: Error) => void;\n release: CliBinaryRelease;\n}): Promise<CliBinaryUpdatePlan> {\n const fullDownloadPlan = resolveFullCliBinaryUpdatePlan(input.release);\n const versionDeltas = input.release.deltas?.filter(\n (candidate) => candidate.fromVersion === input.currentVersion\n );\n if (!versionDeltas?.length) {\n return fullDownloadPlan;\n }\n\n let baseBytes: Buffer;\n try {\n baseBytes = await readFile(input.baseBinaryPath);\n } catch (error) {\n input.onDeltaFallback(toError(error));\n return fullDownloadPlan;\n }\n const baseSha256 = createHash(\"sha256\").update(baseBytes).digest(\"hex\");\n const delta = versionDeltas.find(\n (candidate) =>\n candidate.fromSizeBytes === baseBytes.byteLength &&\n candidate.fromSha256.toLowerCase() === baseSha256\n );\n if (!delta) {\n return fullDownloadPlan;\n }\n return {\n baseBytes,\n delta,\n downloadSizeBytes: delta.patchSizeBytes,\n transport: \"delta\",\n };\n}\n\nexport async function downloadCliBinaryUpdateArtifact(input: {\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n onDeltaFallback: (error: Error) => void;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n plan: CliBinaryUpdatePlan;\n release: CliBinaryRelease;\n}): Promise<Buffer> {\n const recovery = createDownloadRecoveryContext(input.downloadPolicy);\n // A delta is only useful when the global recovery budget can still preserve\n // the documented delta-to-full fallback. With a one-attempt policy, spend\n // that attempt on the complete artifact instead of stranding the upgrade on\n // an optional transport.\n if (\n input.plan.transport === \"delta\" &&\n input.downloadPolicy.maxAttempts < 2\n ) {\n return downloadFullCliBinaryArtifact({\n ...input,\n plan: resolveFullCliBinaryUpdatePlan(input.release),\n recovery,\n });\n }\n if (input.plan.transport === \"delta\") {\n try {\n return await downloadCliBinaryDelta({\n ...input,\n attemptCeiling: Math.max(1, input.downloadPolicy.maxAttempts - 1),\n baseBytes: input.plan.baseBytes,\n delta: input.plan.delta,\n recovery,\n });\n } catch (error) {\n const resolvedError = toError(error);\n if (\n resolvedError instanceof CliBinaryUpdateError &&\n !resolvedError.allowFullFallback\n ) {\n throw resolvedError;\n }\n if (recovery.attemptsStarted >= input.downloadPolicy.maxAttempts) {\n throw resolvedError;\n }\n input.onDeltaFallback(resolvedError);\n await waitForRetryDelay({\n cause: resolvedError,\n deadlineAtMs: recovery.deadlineAtMs,\n delayMs:\n resolvedError instanceof CliBinaryUpdateError\n ? (resolvedError.retryAfterMs ?? 0)\n : 0,\n });\n }\n return downloadFullCliBinaryArtifact({\n ...input,\n plan: resolveFullCliBinaryUpdatePlan(input.release),\n recovery,\n });\n }\n return downloadFullCliBinaryArtifact({\n ...input,\n plan: input.plan,\n recovery,\n });\n}\n\n/** Prepare the Windows companion in the caller's disposable artifact directory. */\n\nexport function allowUnsignedWindowsInternalPreview(\n env: NodeJS.ProcessEnv = process.env\n): boolean {\n return (\n env.OPENMELD_ENV_PRESET === \"prod\" &&\n env.OPENMELD_WINDOWS_INTERNAL_PREVIEW === \"1\" &&\n env.OPENMELD_CLI_BINARY_MANIFEST_URL ===\n WINDOWS_INTERNAL_PREVIEW_MANIFEST_URL\n );\n}\n\nfunction assertWindowsPreviewPolicy(\n windows: NonNullable<CliBinaryRelease[\"windows\"]>,\n allowed: boolean\n): void {\n if (\"mode\" in windows && !allowed) {\n throw integrityError(\n \"Unsigned Windows artifacts require the explicit OpenMeld internal preview channel\"\n );\n }\n}\n\nexport async function prepareCliBinaryProcessHelper(input: {\n artifactPath: string;\n allowUnsignedPreview?: boolean;\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n release: CliBinaryRelease;\n}): Promise<void> {\n const windows = input.release.windows;\n if (!windows) {\n if (process.platform === \"win32\") {\n throw integrityError(\n \"Windows CLI artifacts must declare their process helper\"\n );\n }\n return;\n }\n if (process.platform !== \"win32\") {\n throw integrityError(\"Windows artifact preparation requires Windows\");\n }\n assertWindowsPreviewPolicy(windows, input.allowUnsignedPreview === true);\n if (\n new URL(windows.processHelper.url).origin !==\n new URL(input.release.url).origin\n ) {\n throw integrityError(\n \"Windows process helper returned an unexpected download location\"\n );\n }\n const bytes = await downloadCliBinaryUpdateArtifact({\n downloadPolicy: input.downloadPolicy,\n fetchImpl: input.fetchImpl,\n release: windows.processHelper,\n plan: resolveFullCliBinaryUpdatePlan(windows.processHelper),\n onDeltaFallback: () => {\n /* The small helper always uses a complete artifact. */\n },\n });\n const helperPath = join(\n dirname(input.artifactPath),\n WINDOWS_PROCESS_HELPER_FILENAME\n );\n await writeFile(helperPath, bytes, { mode: 0o700, flag: \"wx\" });\n if (!(\"mode\" in windows)) {\n await verifyWindowsArtifactSignature(helperPath, windows.publisherName);\n }\n}\n\nexport async function verifyCliBinaryCodeSignature(input: {\n artifactPath: string;\n allowUnsignedPreview?: boolean;\n allowUnsignedForDevelopment?: boolean;\n release: CliBinaryRelease;\n runCommand: (command: string, args: string[]) => Promise<CommandResult>;\n}): Promise<void> {\n if (process.platform === \"win32\") {\n if (!input.release.windows) {\n throw integrityError(\n \"Windows CLI artifacts must declare their publisher and process helper\"\n );\n }\n await verifyWindowsCliBinaryCodeSignature({\n allowUnsignedPreview: input.allowUnsignedPreview,\n artifactPath: input.artifactPath,\n windows: input.release.windows,\n });\n return;\n }\n if (input.release.windows) {\n throw integrityError(\n \"signed Windows artifact verification requires Windows\"\n );\n }\n const { codeIdentifier, teamIdentifier } = input.release;\n if (!(codeIdentifier && teamIdentifier)) {\n if (process.platform !== \"darwin\" || input.allowUnsignedForDevelopment) {\n return;\n }\n throw integrityError(\n \"binary manifest is missing a verified signing identity\"\n );\n }\n if (\n codeIdentifier !== OPENMELD_MACOS_CLI_SIGNING_IDENTITY.codeIdentifier ||\n teamIdentifier !== OPENMELD_MACOS_CLI_SIGNING_IDENTITY.teamIdentifier\n ) {\n throw integrityError(\"binary manifest has an unexpected signing identity\");\n }\n if (process.platform !== \"darwin\") {\n throw integrityError(\"signed OpenMeld CLI verification requires macOS\");\n }\n\n const verification = await input.runCommand(\"/usr/bin/codesign\", [\n \"--verify\",\n \"--strict\",\n \"--verbose=2\",\n `-R=${OPENMELD_MACOS_CLI_SIGNING_REQUIREMENT}`,\n input.artifactPath,\n ]);\n if (verification.code !== 0) {\n throw integrityError(\n `binary code signature verification failed: ${commandFailureDetails(verification)}`\n );\n }\n\n const inspection = await input.runCommand(\"/usr/bin/codesign\", [\n \"--display\",\n \"--verbose=4\",\n input.artifactPath,\n ]);\n if (inspection.code !== 0) {\n throw integrityError(\n `binary code signature inspection failed: ${commandFailureDetails(inspection)}`\n );\n }\n const details = `${inspection.stdout}\\n${inspection.stderr}`;\n for (const expected of [\n `Identifier=${codeIdentifier}`,\n `TeamIdentifier=${teamIdentifier}`,\n ]) {\n if (!details.split(\"\\n\").some((line) => line.trim() === expected)) {\n throw integrityError(\n `binary code signature has the wrong identity: ${expected}`\n );\n }\n }\n if (!details.includes(\"Authority=Developer ID Application:\")) {\n throw integrityError(\n \"binary code signature is missing a Developer ID authority\"\n );\n }\n if (!HARDENED_RUNTIME_FLAG_RE.test(details)) {\n throw integrityError(\n \"binary code signature is missing the hardened runtime\"\n );\n }\n if (!SIGNING_TIMESTAMP_RE.test(details)) {\n throw integrityError(\n \"binary code signature is missing a trusted timestamp\"\n );\n }\n}\n\nasync function verifyWindowsCliBinaryCodeSignature(input: {\n allowUnsignedPreview?: boolean;\n artifactPath: string;\n windows: NonNullable<CliBinaryRelease[\"windows\"]>;\n}): Promise<void> {\n assertWindowsPreviewPolicy(\n input.windows,\n input.allowUnsignedPreview === true\n );\n if (\"mode\" in input.windows) {\n return;\n }\n try {\n await verifyWindowsArtifactSignature(\n input.artifactPath,\n input.windows.publisherName\n );\n } catch (error) {\n throw integrityError(\n `Windows artifact signature verification failed: ${toError(error).message}`\n );\n }\n}\n\nasync function downloadCliBinaryDelta(input: {\n attemptCeiling: number;\n baseBytes: Buffer;\n delta: CliBinaryDelta;\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n recovery: DownloadRecoveryContext;\n release: CliBinaryRelease;\n}): Promise<Buffer> {\n const patchBytes = await downloadBinaryBytesWithRecovery({\n attemptCeiling: input.attemptCeiling,\n expectedSizeBytes: input.delta.patchSizeBytes,\n fetchImpl: input.fetchImpl,\n label: \"binary delta archive\",\n onProgress: input.onProgress,\n recovery: input.recovery,\n url: input.delta.patchUrl,\n });\n verifyBinaryBytes({\n bytes: patchBytes,\n expectedSha256: input.delta.patchSha256,\n expectedSizeBytes: input.delta.patchSizeBytes,\n label: \"binary delta archive\",\n });\n\n let patchPayloadBytes: Buffer;\n try {\n patchPayloadBytes = gunzipSync(patchBytes, {\n maxOutputLength: input.delta.patchPayloadSizeBytes,\n });\n } catch (error) {\n throw integrityError(\n `binary delta could not be decompressed: ${toError(error).message}`,\n error\n );\n }\n if (patchPayloadBytes.byteLength !== input.delta.patchPayloadSizeBytes) {\n throw integrityError(\n `binary delta payload size mismatch: expected ${input.delta.patchPayloadSizeBytes} bytes, received ${patchPayloadBytes.byteLength} bytes`\n );\n }\n\n try {\n return reconstructCliBinaryDelta({\n baseBytes: input.baseBytes,\n delta: input.delta,\n patchPayloadBytes,\n targetSha256: input.release.sha256,\n targetSizeBytes: input.release.sizeBytes,\n });\n } catch (error) {\n throw integrityError(\n `binary delta reconstruction failed: ${toError(error).message}`,\n error\n );\n }\n}\n\nexport function resolveFullCliBinaryUpdatePlan(\n release: CliBinaryRelease\n): CliBinaryFullUpdatePlan {\n if (hasCompressedCliBinaryTransport(release)) {\n return {\n downloadSha256: release.archiveSha256,\n downloadSizeBytes: release.archiveSizeBytes,\n downloadUrl: release.archiveUrl,\n transport: \"archive\",\n };\n }\n return {\n downloadSha256: release.sha256,\n downloadSizeBytes: release.sizeBytes,\n downloadUrl: release.url,\n transport: \"raw\",\n };\n}\n\nasync function downloadFullCliBinaryArtifact(input: {\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n plan: CliBinaryFullUpdatePlan;\n recovery: DownloadRecoveryContext;\n release: CliBinaryRelease;\n}): Promise<Buffer> {\n const downloadBytes = await downloadBinaryBytesWithRecovery({\n expectedSizeBytes: input.plan.downloadSizeBytes,\n fetchImpl: input.fetchImpl,\n label:\n input.plan.transport === \"archive\" ? \"binary archive\" : \"binary download\",\n onProgress: input.onProgress,\n recovery: input.recovery,\n url: input.plan.downloadUrl,\n });\n verifyBinaryBytes({\n bytes: downloadBytes,\n expectedSha256: input.plan.downloadSha256,\n expectedSizeBytes: input.plan.downloadSizeBytes,\n label:\n input.plan.transport === \"archive\" ? \"binary archive\" : \"binary download\",\n });\n let artifactBytes = downloadBytes;\n if (input.plan.transport === \"archive\") {\n try {\n artifactBytes = gunzipSync(downloadBytes, {\n maxOutputLength: input.release.sizeBytes,\n });\n } catch (error) {\n throw integrityError(\n `binary archive could not be decompressed: ${toError(error).message}`,\n error\n );\n }\n }\n verifyBinaryBytes({\n bytes: artifactBytes,\n expectedSha256: input.release.sha256,\n expectedSizeBytes: input.release.sizeBytes,\n label: \"binary download\",\n });\n return artifactBytes;\n}\n\nfunction hasCompressedCliBinaryTransport(\n release: CliBinaryRelease\n): release is CliBinaryRelease & {\n archiveFormat: \"gzip\";\n archiveUrl: string;\n archiveSha256: string;\n archiveSizeBytes: number;\n} {\n return (\n release.archiveFormat === \"gzip\" &&\n typeof release.archiveUrl === \"string\" &&\n typeof release.archiveSha256 === \"string\" &&\n typeof release.archiveSizeBytes === \"number\"\n );\n}\n\nfunction verifyBinaryBytes(input: {\n bytes: Buffer;\n expectedSha256: string;\n expectedSizeBytes: number;\n label: string;\n}): void {\n if (input.bytes.byteLength !== input.expectedSizeBytes) {\n throw integrityError(\n `${input.label} size mismatch: expected ${input.expectedSizeBytes} bytes, received ${input.bytes.byteLength} bytes`\n );\n }\n const actualSha256 = createHash(\"sha256\").update(input.bytes).digest(\"hex\");\n if (actualSha256 !== input.expectedSha256.toLowerCase()) {\n throw integrityError(\n `${input.label} sha256 mismatch: expected ${input.expectedSha256.toLowerCase()}, received ${actualSha256}`\n );\n }\n}\n\ntype DownloadRecoveryContext = {\n attemptsStarted: number;\n deadlineAtMs: number;\n policy: CliBinaryDownloadPolicy;\n};\n\nfunction createDownloadRecoveryContext(\n policy: CliBinaryDownloadPolicy\n): DownloadRecoveryContext {\n if (\n !Number.isInteger(policy.maxAttempts) ||\n policy.maxAttempts < 1 ||\n !Number.isFinite(policy.stallTimeoutMs) ||\n policy.stallTimeoutMs <= 0 ||\n !Number.isFinite(policy.totalBudgetMs) ||\n policy.totalBudgetMs <= 0 ||\n policy.retryDelaysMs.some(\n (delayMs) => !Number.isFinite(delayMs) || delayMs < 0\n )\n ) {\n throw new Error(\"CLI binary download policy is invalid.\");\n }\n return {\n attemptsStarted: 0,\n deadlineAtMs: performance.now() + policy.totalBudgetMs,\n policy,\n };\n}\n\nasync function downloadBinaryBytesWithRecovery(input: {\n attemptCeiling?: number;\n expectedSizeBytes: number;\n fetchImpl: typeof fetch;\n label: string;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n recovery: DownloadRecoveryContext;\n url: string;\n}): Promise<Buffer> {\n let lastError: CliBinaryUpdateError | null = null;\n const attemptCeiling = Math.min(\n input.attemptCeiling ?? input.recovery.policy.maxAttempts,\n input.recovery.policy.maxAttempts\n );\n while (input.recovery.attemptsStarted < attemptCeiling) {\n if (performance.now() >= input.recovery.deadlineAtMs) {\n throw totalBudgetError(lastError ?? undefined);\n }\n const attemptIndex = input.recovery.attemptsStarted;\n input.recovery.attemptsStarted += 1;\n try {\n return await downloadBinaryBytesAttempt(input);\n } catch (error) {\n const resolved = normalizeDownloadError(error, input.label);\n lastError = resolved;\n if (!resolved.retryable) {\n throw resolved;\n }\n if (input.recovery.attemptsStarted >= attemptCeiling) {\n throw resolved;\n }\n const delayMs =\n input.recovery.policy.retryDelaysMs[attemptIndex] ??\n input.recovery.policy.retryDelaysMs.at(-1) ??\n 0;\n await waitForRetryDelay({\n cause: resolved,\n deadlineAtMs: input.recovery.deadlineAtMs,\n delayMs: Math.max(delayMs, resolved.retryAfterMs ?? 0),\n });\n }\n }\n throw lastError ?? totalBudgetError();\n}\n\nasync function downloadBinaryBytesAttempt(input: {\n expectedSizeBytes: number;\n fetchImpl: typeof fetch;\n label: string;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n recovery: DownloadRecoveryContext;\n url: string;\n}): Promise<Buffer> {\n const controller = new AbortController();\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n let lastProgressAtMs = performance.now();\n try {\n const response = await waitForDownloadProgress(\n input.fetchImpl(input.url, {\n method: \"GET\",\n signal: controller.signal,\n }),\n {\n controller,\n lastProgressAtMs,\n recovery: input.recovery,\n }\n );\n if (!response.ok) {\n cancelReadableStream(response.body);\n throw httpDownloadError({\n label: input.label,\n retryAfter: response.headers.get(\"retry-after\"),\n status: response.status,\n statusText: response.statusText,\n });\n }\n if (!response.body) {\n return Buffer.alloc(0);\n }\n\n reader = response.body.getReader();\n const chunks: Buffer[] = [];\n let receivedBytes = 0;\n input.onProgress?.({\n receivedBytes,\n totalBytes: input.expectedSizeBytes,\n transferAttempt: input.recovery.attemptsStarted,\n });\n while (true) {\n const next = await waitForDownloadProgress(reader.read(), {\n controller,\n lastProgressAtMs,\n recovery: input.recovery,\n });\n if (next.done) {\n return Buffer.concat(chunks, receivedBytes);\n }\n if (!next.value || next.value.byteLength === 0) {\n continue;\n }\n lastProgressAtMs = performance.now();\n receivedBytes += next.value.byteLength;\n if (receivedBytes > input.expectedSizeBytes) {\n throw integrityError(\n `${input.label} size exceeded the declared ${input.expectedSizeBytes} bytes while downloading`\n );\n }\n input.onProgress?.({\n receivedBytes,\n totalBytes: input.expectedSizeBytes,\n transferAttempt: input.recovery.attemptsStarted,\n });\n chunks.push(Buffer.from(next.value));\n }\n } catch (error) {\n controller.abort(error);\n if (reader) {\n cancelReadableStreamReader(reader);\n }\n throw error;\n } finally {\n reader?.releaseLock();\n }\n}\n\nasync function waitForDownloadProgress<T>(\n pending: Promise<T>,\n input: {\n controller: AbortController;\n lastProgressAtMs: number;\n recovery: DownloadRecoveryContext;\n }\n): Promise<T> {\n const stallDeadlineAtMs =\n input.lastProgressAtMs + input.recovery.policy.stallTimeoutMs;\n const totalDeadlineWins = input.recovery.deadlineAtMs <= stallDeadlineAtMs;\n const deadlineAtMs = Math.min(stallDeadlineAtMs, input.recovery.deadlineAtMs);\n const timeoutMs = Math.max(0, deadlineAtMs - performance.now());\n let timer: ReturnType<typeof setTimeout> | null = null;\n const timeout = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(() => {\n const error = totalDeadlineWins ? totalBudgetError() : stalledError();\n reject(error);\n input.controller.abort(error);\n }, timeoutMs);\n });\n try {\n return await Promise.race([pending, timeout]);\n } finally {\n if (timer) {\n clearTimeout(timer);\n }\n }\n}\n\nasync function waitForRetryDelay(input: {\n cause: unknown;\n deadlineAtMs: number;\n delayMs: number;\n}): Promise<void> {\n if (input.delayMs === 0) {\n return;\n }\n const remainingMs = input.deadlineAtMs - performance.now();\n if (remainingMs <= input.delayMs) {\n throw totalBudgetError(input.cause);\n }\n await new Promise<void>((resolve) => setTimeout(resolve, input.delayMs));\n}\n\nfunction normalizeDownloadError(\n error: unknown,\n label: string\n): CliBinaryUpdateError {\n if (error instanceof CliBinaryUpdateError) {\n return error;\n }\n const resolved = toError(error);\n const terminalTlsFailure = findErrorCode(error, isTerminalTlsErrorCode);\n if (terminalTlsFailure || isTerminalTlsErrorMessage(resolved.message)) {\n return new CliBinaryUpdateError({\n allowFullFallback: false,\n cause: error,\n kind: \"download_failed\",\n message: `${label} download failed TLS certificate verification${\n terminalTlsFailure ? ` (${terminalTlsFailure})` : \"\"\n }`,\n retryable: false,\n });\n }\n const retryable = Boolean(findErrorCode(error, isRetryableNetworkErrorCode));\n return new CliBinaryUpdateError({\n allowFullFallback: true,\n cause: error,\n kind: \"download_failed\",\n message: `${label} download failed: ${resolved.message}`,\n retryable,\n });\n}\n\nfunction httpDownloadError(input: {\n label: string;\n retryAfter: string | null;\n status: number;\n statusText: string;\n}): CliBinaryUpdateError {\n const retryable =\n input.status === 408 ||\n input.status === 429 ||\n input.status === 500 ||\n input.status === 502 ||\n input.status === 503 ||\n input.status === 504;\n const missingDelta = input.status === 404 || input.status === 410;\n const retryAfterMs = input.retryAfter\n ? parseRetryAfterMs(input.retryAfter)\n : undefined;\n return new CliBinaryUpdateError({\n allowFullFallback: retryable || missingDelta,\n kind: \"download_failed\",\n message: `${input.label} download failed: HTTP ${input.status}${\n input.statusText ? ` ${input.statusText}` : \"\"\n }`,\n ...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n retryable,\n });\n}\n\nfunction parseRetryAfterMs(value: string): number | undefined {\n const trimmed = value.trim();\n if (RETRY_AFTER_SECONDS_RE.test(trimmed)) {\n const seconds = Number(trimmed);\n const milliseconds = seconds * 1000;\n return Number.isSafeInteger(milliseconds) ? milliseconds : undefined;\n }\n const retryAtMs = Date.parse(trimmed);\n if (!Number.isFinite(retryAtMs)) {\n return undefined;\n }\n return Math.max(0, retryAtMs - Date.now());\n}\n\nfunction stalledError(): CliBinaryUpdateError {\n return new CliBinaryUpdateError({\n allowFullFallback: true,\n kind: \"download_stalled\",\n message: \"binary download stopped making progress\",\n retryable: true,\n });\n}\n\nfunction totalBudgetError(cause?: unknown): CliBinaryUpdateError {\n return new CliBinaryUpdateError({\n allowFullFallback: false,\n ...(cause === undefined ? {} : { cause }),\n kind: \"download_timed_out\",\n message: \"binary download exceeded the total recovery time budget\",\n retryable: false,\n });\n}\n\nfunction integrityError(\n message: string,\n cause?: unknown\n): CliBinaryUpdateError {\n return new CliBinaryUpdateError({\n allowFullFallback: true,\n ...(cause === undefined ? {} : { cause }),\n kind: \"integrity_check_failed\",\n message,\n retryable: false,\n });\n}\n\nfunction findErrorCode(\n error: unknown,\n predicate: (code: string) => boolean\n): string | null {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n const code = (current as { code?: unknown }).code;\n if (typeof code === \"string\" && predicate(code.toUpperCase())) {\n return code;\n }\n current = (current as { cause?: unknown }).cause;\n }\n return null;\n}\n\nfunction cancelReadableStream(stream: ReadableStream<Uint8Array> | null): void {\n if (!stream) {\n return;\n }\n try {\n stream.cancel().catch(() => undefined);\n } catch {\n // Best-effort cleanup must not replace or outlive the bounded failure.\n }\n}\n\nfunction cancelReadableStreamReader(\n reader: ReadableStreamDefaultReader<Uint8Array>\n): void {\n try {\n reader.cancel().catch(() => undefined);\n } catch {\n // Best-effort cleanup must not replace or outlive the bounded failure.\n }\n}\n\nfunction isTerminalTlsErrorCode(code: string): boolean {\n return (\n code.startsWith(\"CERT_\") ||\n code.includes(\"_CERT_\") ||\n code.startsWith(\"ERR_OSSL_\") ||\n code.startsWith(\"ERR_SSL_\") ||\n code.startsWith(\"ERR_TLS_\") ||\n code === \"DEPTH_ZERO_SELF_SIGNED_CERT\" ||\n code === \"SELF_SIGNED_CERT_IN_CHAIN\" ||\n code.startsWith(\"UNABLE_TO_GET_ISSUER_CERT\") ||\n code === \"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"\n );\n}\n\nfunction isTerminalTlsErrorMessage(message: string): boolean {\n const normalized = message.toLowerCase();\n return (\n normalized.includes(\"certificate\") ||\n normalized.includes(\"self signed\") ||\n normalized.includes(\"tls handshake\") ||\n normalized.includes(\"unable to verify\")\n );\n}\n\nfunction isRetryableNetworkErrorCode(code: string): boolean {\n return (\n code === \"EAI_AGAIN\" ||\n code === \"ECONNABORTED\" ||\n code === \"ECONNREFUSED\" ||\n code === \"ECONNRESET\" ||\n code === \"EHOSTUNREACH\" ||\n code === \"ENETDOWN\" ||\n code === \"ENETUNREACH\" ||\n code === \"ENOTFOUND\" ||\n code === \"EPIPE\" ||\n code === \"ETIMEDOUT\" ||\n code === \"UND_ERR_BODY_TIMEOUT\" ||\n code === \"UND_ERR_CONNECT_TIMEOUT\" ||\n code === \"UND_ERR_HEADERS_TIMEOUT\" ||\n code === \"UND_ERR_RES_CONTENT_LENGTH_MISMATCH\" ||\n code === \"UND_ERR_SOCKET\"\n );\n}\n\nfunction commandFailureDetails(result: CommandResult): string {\n return result.stderr.trim() || result.stdout.trim() || `exit ${result.code}`;\n}\n\nfunction toError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n","import { readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n DAEMON_SERVICE_RUNTIME_AUTO_START_ENV,\n DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV,\n DAEMON_SERVICE_RUNTIME_DETACHED_ENV,\n DAEMON_SERVICE_RUNTIME_MODE_ENV,\n DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV,\n daemonRuntimeRootPath,\n} from \"./daemon-state\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n resolveOpenMeldServiceScope,\n} from \"./paths\";\n\nconst MANAGED_VERSION_FROM_EXECUTABLE_PATTERN =\n /[\\\\/]versions[\\\\/](v?(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?)[\\\\/]openmeld(?:\\.exe)?/gu;\nconst SELF_CONTAINED_BUNDLE_FROM_EXECUTABLE_PATTERN =\n /[\\\\/]runtime[\\\\/]daemon[\\\\/]bundles[\\\\/]([0-9A-Za-z._-]+)[\\\\/]/gu;\n\nexport const INDEPENDENT_MAINTENANCE_REGISTRATION =\n \"openmeld-independent-maintenance-v1\";\n\n// Maintenance may call normal Service commands, but it is never the main\n// Service process. Also normalize registrations written by older versions.\nexport function configureDaemonMaintenanceEnvironment(\n env: NodeJS.ProcessEnv\n): void {\n for (const key of [\n DAEMON_SERVICE_RUNTIME_AUTO_START_ENV,\n DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV,\n DAEMON_SERVICE_RUNTIME_DETACHED_ENV,\n DAEMON_SERVICE_RUNTIME_MODE_ENV,\n DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV,\n ]) {\n delete env[key];\n }\n env.OPENMELD_INTERNAL_MAINTENANCE_WORKER = \"1\";\n}\nconst NPM_ENTRY_IMPORT_PATTERN = /^await import\\((\".*\")\\);$/mu;\n\nexport function daemonServiceUpdateWorkerNpmEntryPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-update-worker.mjs\");\n}\n\nexport async function hasIndependentMaintenanceRegistration(\n pathInput: OpenMeldPathResolutionInput = {},\n platform: NodeJS.Platform = process.platform,\n expectedDefinition?: string\n): Promise<boolean> {\n if (platform === \"win32\") {\n const { runWindowsUserTask, readWindowsTaskAction } = await import(\n \"../local-service/lifecycle/windows-user-task\"\n );\n const task = await runWindowsUserTask({\n name: resolveDaemonServiceUpdateWorkerIdentity(pathInput)\n .windowsServiceName,\n legacyScript:\n resolveDaemonServiceUpdateWorkerWindowsScriptPath(pathInput),\n operation: \"status\",\n });\n return Boolean(\n task.installed &&\n !task.legacy &&\n task.actionArguments &&\n (expectedDefinition === undefined ||\n task.actionArguments === expectedDefinition) &&\n resolveOpenMeldRootDir({\n env: readWindowsTaskAction(task.actionArguments).env,\n }) === resolveOpenMeldRootDir(pathInput)\n );\n }\n const registration = await readDaemonServiceUpdateWorkerRegistration(\n pathInput,\n platform\n );\n if (!registration?.includes(INDEPENDENT_MAINTENANCE_REGISTRATION)) {\n return false;\n }\n if (expectedDefinition !== undefined && registration !== expectedDefinition) {\n return false;\n }\n const { parseDaemonServiceEnvironmentFromDefinition } = await import(\n \"../local-service/lifecycle/daemon-service-manager\"\n );\n const env = parseDaemonServiceEnvironmentFromDefinition({\n controller: platform === \"darwin\" ? \"launchd\" : \"systemd\",\n definition: registration,\n });\n return resolveOpenMeldRootDir({ env }) === resolveOpenMeldRootDir(pathInput);\n}\n\nexport type DaemonServiceUpdateWorkerIdentity = {\n launchdLabel: string;\n serviceName: string;\n windowsDisplayName: string;\n windowsServiceName: string;\n};\n\nexport function resolveDaemonServiceUpdateWorkerIdentity(\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonServiceUpdateWorkerIdentity {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n const scope = resolveOpenMeldServiceScope(pathInput);\n const suffix =\n (preset === \"prod\" ? \"\" : `-${preset}`) + (scope ? `-${scope}` : \"\");\n const dotSuffix =\n (preset === \"prod\" ? \"\" : `.${preset}`) + (scope ? `.${scope}` : \"\");\n return {\n launchdLabel: `com.openmeld.openmeld-service-update${dotSuffix}`,\n serviceName: `openmeld-service-update${suffix}`,\n windowsDisplayName: `OpenMeld Service Update${\n preset === \"prod\" ? \"\" : ` (${preset})`\n }`,\n windowsServiceName: `OpenMeld-Service-Update${suffix}`,\n };\n}\n\nexport function resolveDaemonServiceUpdateWorkerLaunchdPlistPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \"Library\",\n \"LaunchAgents\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).launchdLabel}.plist`\n );\n}\n\nexport function resolveDaemonServiceUpdateWorkerSystemdUnitPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \".config\",\n \"systemd\",\n \"user\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).serviceName}.service`\n );\n}\n\nexport function resolveDaemonServiceUpdateWorkerSystemdPathUnitPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \".config\",\n \"systemd\",\n \"user\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).serviceName}.path`\n );\n}\n\nexport function resolveDaemonServiceUpdateWorkerWindowsScriptPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-update-worker.bat\");\n}\n\nexport function resolveDaemonServiceUpdateWorkerSystemdTimerUnitPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \".config\",\n \"systemd\",\n \"user\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).serviceName}.timer`\n );\n}\n\nexport async function readDaemonServiceUpdateWorkerProtectedManagedVersions(\n pathInput: OpenMeldPathResolutionInput = {},\n platform: NodeJS.Platform = process.platform\n): Promise<Set<string>> {\n const contents = await readDaemonServiceUpdateWorkerRegistration(\n pathInput,\n platform\n );\n return contents === null\n ? new Set()\n : readManagedVersionsFromUpdateWorkerRegistration(contents);\n}\n\nexport async function readDaemonServiceUpdateWorkerProtectedBundleIds(\n pathInput: OpenMeldPathResolutionInput = {},\n platform: NodeJS.Platform = process.platform\n): Promise<Set<string>> {\n const contents = await readDaemonServiceUpdateWorkerRegistration(\n pathInput,\n platform\n );\n const protectedIds =\n contents === null\n ? new Set<string>()\n : readBundleIdsFromUpdateWorkerRegistration(contents);\n const launcherPath = daemonServiceUpdateWorkerNpmEntryPath(pathInput);\n const launcher = await readFile(launcherPath, \"utf8\").catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (launcher !== null) {\n const importLine = launcher.trim().match(NPM_ENTRY_IMPORT_PATTERN);\n if (!importLine?.[1]) {\n throw new Error(\n \"OpenMeld maintenance launcher is invalid; bundle cleanup was stopped.\"\n );\n }\n const entryPath = fileURLToPath(JSON.parse(importLine[1]) as string);\n for (const id of readBundleIdsFromUpdateWorkerRegistration(entryPath)) {\n protectedIds.add(id);\n }\n }\n return protectedIds;\n}\n\nexport function readManagedVersionsFromUpdateWorkerRegistration(\n contents: string\n): Set<string> {\n const versions = new Set<string>();\n for (const match of contents.matchAll(\n MANAGED_VERSION_FROM_EXECUTABLE_PATTERN\n )) {\n const version = match[1];\n if (version) {\n versions.add(version);\n }\n }\n return versions;\n}\n\nexport function readBundleIdsFromUpdateWorkerRegistration(\n contents: string\n): Set<string> {\n const bundleIds = new Set<string>();\n for (const match of contents.matchAll(\n SELF_CONTAINED_BUNDLE_FROM_EXECUTABLE_PATTERN\n )) {\n const bundleId = match[1];\n if (bundleId) {\n bundleIds.add(bundleId);\n }\n }\n return bundleIds;\n}\n\nexport function resolveDaemonServiceUpdateWorkerRegistrationPath(\n pathInput: OpenMeldPathResolutionInput,\n platform: NodeJS.Platform\n): string | null {\n if (platform === \"darwin\") {\n return resolveDaemonServiceUpdateWorkerLaunchdPlistPath(pathInput);\n }\n if (platform === \"linux\") {\n return resolveDaemonServiceUpdateWorkerSystemdUnitPath(pathInput);\n }\n if (platform === \"win32\") {\n return resolveDaemonServiceUpdateWorkerWindowsScriptPath(pathInput);\n }\n return null;\n}\n\nasync function readDaemonServiceUpdateWorkerRegistration(\n pathInput: OpenMeldPathResolutionInput,\n platform: NodeJS.Platform\n): Promise<string | null> {\n if (platform === \"win32\") {\n const { runWindowsUserTask, readWindowsTaskAction } = await import(\n \"../local-service/lifecycle/windows-user-task\"\n );\n const task = await runWindowsUserTask({\n name: resolveDaemonServiceUpdateWorkerIdentity(pathInput)\n .windowsServiceName,\n legacyScript:\n resolveDaemonServiceUpdateWorkerWindowsScriptPath(pathInput),\n operation: \"status\",\n });\n if (task.actionArguments) {\n const action = readWindowsTaskAction(task.actionArguments);\n return [action.executable, ...action.args].join(\"\\n\");\n }\n if (!task.legacy) {\n return null;\n }\n }\n const registrationPath = resolveDaemonServiceUpdateWorkerRegistrationPath(\n pathInput,\n platform\n );\n if (registrationPath === null) {\n return null;\n }\n return await readFile(registrationPath, \"utf8\").catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n}\n\nfunction getErrorCode(error: unknown): string | null {\n return error && typeof error === \"object\" && \"code\" in error\n ? String(error.code)\n : null;\n}\n","import {\n cliBinaryServiceReleaseSchema,\n resolveCliBinaryPlatform,\n} from \"@openmeld/schemas\";\nimport packageJson from \"../../package.json\";\nimport { isBinaryDistribution } from \"../runtime/distribution\";\nimport type { CliBinaryReleaseInfo } from \"./version-state\";\n\ndeclare const __OPENMELD_SERVICE_RELEASE__: unknown;\n\n// The release embeds its selected Service artifact so setup and repair use the\n// same target offline, without a second mutable version cache. Legacy releases\n// continue to use their own CLI binary as the Service carrier.\nexport function resolveBundledServiceRelease():\n | CliBinaryReleaseInfo\n | undefined {\n if (!isBinaryDistribution()) {\n return undefined;\n }\n const metadata = packageJson as { openmeld?: { service?: unknown } };\n const selection =\n typeof __OPENMELD_SERVICE_RELEASE__ === \"undefined\"\n ? metadata.openmeld?.service\n : __OPENMELD_SERVICE_RELEASE__;\n if (selection === undefined) {\n return undefined;\n }\n const parsed = cliBinaryServiceReleaseSchema.safeParse(selection);\n if (!parsed.success) {\n throw new Error(\n \"The installed CLI contains invalid Service release metadata.\"\n );\n }\n const platform = resolveCliBinaryPlatform(process.platform, process.arch);\n const artifact = parsed.data.platforms[platform];\n if (!artifact) {\n throw new Error(\n `The installed CLI has no Service artifact for ${platform}.`\n );\n }\n return {\n ...artifact,\n version: parsed.data.version,\n platform,\n minRequiredCliVersion: null,\n };\n}\n","import { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport {\n daemonServiceUpdateJobSchema,\n OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA,\n storedDaemonServiceUpdateJobSchema,\n} from \"@openmeld/schemas\";\nimport type {\n OpenMeldToolsUpdateOperation,\n DaemonServiceUpdateJob as SharedDaemonServiceUpdateJob,\n} from \"@openmeld/schemas/types\";\nimport { daemonRuntimeStateRootPath } from \"../../config/daemon-state\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\n\nconst TERMINAL_UPDATE_VISIBILITY_MS = 24 * 60 * 60 * 1000;\nconst UPDATE_TARGETS_FILE = \"service-update-targets.json\";\n\ntype DaemonServiceUpdateTargets = {\n jobId: string;\n targetCliVersion?: string;\n targetServiceVersion?: string;\n};\n\nexport const DAEMON_SERVICE_UPDATE_JOB_SCHEMA =\n OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA;\nexport type DaemonServiceUpdateJob = SharedDaemonServiceUpdateJob;\n\nexport function daemonServicePendingUpdatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeStateRootPath(pathInput), \"service-update.json\");\n}\n\nexport function daemonServiceLastUpdatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeStateRootPath(pathInput),\n \"service-update-last.json\"\n );\n}\n\nexport async function readPendingDaemonServiceUpdate(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceUpdateJob | null> {\n return await readDaemonServiceUpdateJob(\n daemonServicePendingUpdatePath(pathInput)\n );\n}\n\nexport async function readLastDaemonServiceUpdate(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceUpdateJob | null> {\n return await readDaemonServiceUpdateJob(\n daemonServiceLastUpdatePath(pathInput)\n );\n}\n\nexport async function persistPendingDaemonServiceUpdate(\n job: DaemonServiceUpdateJob,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await writeUpdateJobAtomically({\n job,\n path: daemonServicePendingUpdatePath(pathInput),\n });\n}\n\nexport async function completePendingDaemonServiceUpdate(\n job: DaemonServiceUpdateJob,\n pathInput: OpenMeldPathResolutionInput = {},\n retainPending = false\n): Promise<void> {\n await writeUpdateJobAtomically({\n job,\n path: daemonServiceLastUpdatePath(pathInput),\n });\n if (retainPending) {\n // Keep the existing OS trigger until Prepare and its auth handoff finish.\n // The update itself is terminal; this does not schedule another update.\n await persistPendingDaemonServiceUpdate(job, pathInput);\n return;\n }\n await rm(daemonServicePendingUpdatePath(pathInput), { force: true });\n}\n\nexport async function resolveDaemonServiceUpdateOperation(\n pathInput: OpenMeldPathResolutionInput = {},\n nowMs = Date.now()\n): Promise<OpenMeldToolsUpdateOperation | null> {\n const pending = await readPendingDaemonServiceUpdate(pathInput);\n if (pending) {\n return projectUpdateOperation(pending);\n }\n const last = await readLastDaemonServiceUpdate(pathInput);\n if (!(last && isRecentTerminalUpdate(last, nowMs))) {\n return null;\n }\n return projectUpdateOperation(last);\n}\n\nfunction isRecentTerminalUpdate(\n job: DaemonServiceUpdateJob,\n nowMs: number\n): boolean {\n if (\n job.phase !== \"updated\" &&\n job.phase !== \"restored\" &&\n job.phase !== \"needs_help\"\n ) {\n return false;\n }\n const updatedAtMs = Date.parse(job.updatedAt);\n return (\n Number.isFinite(updatedAtMs) &&\n nowMs >= updatedAtMs &&\n nowMs - updatedAtMs <= TERMINAL_UPDATE_VISIBILITY_MS\n );\n}\n\nfunction projectUpdateOperation(\n job: DaemonServiceUpdateJob\n): OpenMeldToolsUpdateOperation {\n return {\n operationId: job.jobId,\n phase: job.phase,\n requestSource: job.requestSource,\n requestedAt: job.requestedAt,\n ...(job.targetCliVersion ? { targetCliVersion: job.targetCliVersion } : {}),\n ...(job.targetServiceVersion\n ? { targetServiceVersion: job.targetServiceVersion }\n : {}),\n targetVersion: job.targetVersion,\n updatedAt: job.updatedAt,\n urgency: job.urgency,\n };\n}\n\nasync function readDaemonServiceUpdateJob(\n path: string\n): Promise<DaemonServiceUpdateJob | null> {\n const raw = await readFile(path, \"utf8\").catch(\n (error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n );\n if (raw === null) {\n return null;\n }\n const parsed = storedDaemonServiceUpdateJobSchema.safeParse(\n JSON.parse(raw) as unknown\n );\n if (!parsed.success) {\n throw new Error(\"OpenMeld Service update state is invalid.\");\n }\n let job: DaemonServiceUpdateJob;\n if (parsed.data.v === 2) {\n job = parsed.data;\n } else {\n const { status, ...legacyJob } = parsed.data;\n job = daemonServiceUpdateJobSchema.parse({\n ...legacyJob,\n v: 2,\n schema: DAEMON_SERVICE_UPDATE_JOB_SCHEMA,\n phase: migrateLegacyPhase(status),\n requestSource: \"cli\",\n });\n }\n const targets = await readDaemonServiceUpdateTargets(dirname(path));\n if (targets?.jobId !== job.jobId) {\n return job;\n }\n return daemonServiceUpdateJobSchema.parse({ ...job, ...targets });\n}\n\nfunction migrateLegacyPhase(\n status: \"scheduled\" | \"running\" | \"completed\" | \"failed\"\n): DaemonServiceUpdateJob[\"phase\"] {\n switch (status) {\n case \"scheduled\":\n return \"waiting_for_work\";\n case \"running\":\n return \"updating\";\n case \"completed\":\n return \"updated\";\n case \"failed\":\n return \"needs_help\";\n default: {\n const exhaustive: never = status;\n return exhaustive;\n }\n }\n}\n\nasync function writeUpdateJobAtomically(input: {\n job: DaemonServiceUpdateJob;\n path: string;\n}): Promise<void> {\n const { targetCliVersion, targetServiceVersion, ...compatibleJob } =\n input.job;\n await writeDaemonServiceUpdateTargets(dirname(input.path), {\n jobId: input.job.jobId,\n ...(targetCliVersion ? { targetCliVersion } : {}),\n ...(targetServiceVersion ? { targetServiceVersion } : {}),\n });\n const temporaryPath = `${input.path}.${String(process.pid)}.tmp`;\n await mkdir(dirname(input.path), { recursive: true });\n await writeFile(\n temporaryPath,\n `${JSON.stringify(compatibleJob, null, 2)}\\n`,\n { encoding: \"utf8\", mode: 0o600 }\n );\n await rename(temporaryPath, input.path);\n}\n\nasync function readDaemonServiceUpdateTargets(\n stateRoot: string\n): Promise<DaemonServiceUpdateTargets | null> {\n const raw = await readFile(\n join(stateRoot, UPDATE_TARGETS_FILE),\n \"utf8\"\n ).catch((error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return null;\n }\n const value = JSON.parse(raw) as Record<string, unknown>;\n const jobId = normalizeTarget(value.jobId);\n const targetCliVersion = normalizeTarget(value.targetCliVersion);\n const targetServiceVersion = normalizeTarget(value.targetServiceVersion);\n if (!jobId) {\n return null;\n }\n return {\n jobId,\n ...(targetCliVersion ? { targetCliVersion } : {}),\n ...(targetServiceVersion ? { targetServiceVersion } : {}),\n };\n}\n\nasync function writeDaemonServiceUpdateTargets(\n stateRoot: string,\n targets: DaemonServiceUpdateTargets\n): Promise<void> {\n const path = join(stateRoot, UPDATE_TARGETS_FILE);\n const temporaryPath = `${path}.${String(process.pid)}.tmp`;\n await mkdir(stateRoot, { recursive: true });\n await writeFile(temporaryPath, `${JSON.stringify(targets, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await rename(temporaryPath, path);\n}\n\nfunction normalizeTarget(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n","import { constants as fsConstants } from \"node:fs\";\nimport { access, readdir, rm, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pruneWindowsBinaryBundle } from \"@openmeld/adapter-core/windows-system\";\nimport {\n type OpenMeldPathResolutionInput,\n openMeldManagedBinaryName,\n openMeldVersionsDir,\n} from \"../config/paths\";\nimport { compareSemver } from \"../config/version-state\";\n\nconst MANAGED_VERSION_DIRECTORY_PATTERN =\n /^v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/;\n\nexport async function pruneManagedVersions(input: {\n currentVersion: string;\n pathInput?: OpenMeldPathResolutionInput;\n preferredRollbackVersion?: string | null;\n protectedVersions?: Iterable<string>;\n}): Promise<void> {\n const versionsDir = openMeldVersionsDir(input.pathInput);\n const entries = await readdir(versionsDir, { withFileTypes: true });\n const managedVersions = entries\n .filter(\n (entry) =>\n entry.isDirectory() &&\n MANAGED_VERSION_DIRECTORY_PATTERN.test(entry.name)\n )\n .map((entry) => entry.name);\n const usableManagedVersions = new Set(\n (\n await Promise.all(\n managedVersions.map(async (version) => ({\n usable: await isUsableManagedVersion(version, versionsDir),\n version,\n }))\n )\n )\n .filter((entry) => entry.usable)\n .map((entry) => entry.version)\n );\n const retainedVersions = new Set([input.currentVersion]);\n let rollbackVersion: string | null = null;\n\n if (\n input.preferredRollbackVersion &&\n input.preferredRollbackVersion !== input.currentVersion &&\n usableManagedVersions.has(input.preferredRollbackVersion)\n ) {\n rollbackVersion = input.preferredRollbackVersion;\n }\n\n rollbackVersion ??=\n [...usableManagedVersions]\n .filter((version) => compareSemver(version, input.currentVersion) < 0)\n .sort((left, right) => compareSemver(right, left))[0] ?? null;\n\n if (rollbackVersion) {\n retainedVersions.add(rollbackVersion);\n }\n\n // A legacy worker can still point at a versioned binary until its service\n // registration is rewritten to the stable carrier. Protect that executable\n // independently from the last-known-good rollback selection; the worker\n // manager prunes again after the stable registration is active.\n for (const protectedVersion of input.protectedVersions ?? []) {\n if (usableManagedVersions.has(protectedVersion)) {\n retainedVersions.add(protectedVersion);\n }\n }\n\n for (const version of managedVersions) {\n if (retainedVersions.has(version)) {\n continue;\n }\n if (process.platform === \"win32\") {\n await pruneWindowsBinaryBundle(path.join(versionsDir, version));\n } else {\n await rm(path.join(versionsDir, version), { recursive: true });\n }\n }\n}\n\nasync function isUsableManagedVersion(\n version: string,\n versionsDir: string\n): Promise<boolean> {\n const target = path.join(versionsDir, version, openMeldManagedBinaryName());\n const stats = await stat(target).catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (!stats?.isFile()) {\n return false;\n }\n return await access(target, fsConstants.X_OK).then(\n () => true,\n (error) => {\n if (\n getErrorCode(error) === \"EACCES\" ||\n getErrorCode(error) === \"ENOENT\"\n ) {\n return false;\n }\n throw error;\n }\n );\n}\n\nfunction getErrorCode(error: unknown): string | null {\n return error && typeof error === \"object\" && \"code\" in error\n ? String(error.code)\n : null;\n}\n","import { constants as fsConstants } from \"node:fs\";\nimport {\n access,\n chmod,\n copyFile,\n lstat,\n mkdir,\n readlink,\n rename,\n rm,\n stat,\n symlink,\n} from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { allowUnsignedWindowsInternalPreview } from \"@openmeld/local-service/cli-binary-update-artifact\";\nimport {\n cliInstallSelfResultSchema,\n resolveCliBinaryPlatform,\n} from \"@openmeld/schemas\";\nimport { readDaemonServiceUpdateWorkerProtectedManagedVersions } from \"../config/daemon-service-update-worker-registration\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../config/lock\";\nimport {\n type OpenMeldPathResolutionInput,\n openMeldBinDir,\n openMeldManagedBinaryPath,\n openMeldManagedVersionBinaryPath,\n openMeldManagedVersionDir,\n resolveOpenMeldRootDir,\n} from \"../config/paths\";\nimport { assertNoPublishedProductionMutationDuringTests } from \"../config/published-production-safety\";\nimport { compareSemver } from \"../config/version-state\";\nimport { readDaemonActiveBundleState } from \"../local-service/lifecycle/daemon-service-bundle\";\nimport { readPendingDaemonServiceUpdate } from \"../local-service/lifecycle/daemon-service-update-state\";\nimport { OPENMELD_VERSION } from \"../runtime/version\";\nimport { pruneManagedVersions } from \"./managed-version-pruning\";\nimport {\n activateWindowsManagedCli,\n placeWindowsManagedVersion,\n readWindowsManagedCliVersion,\n reconcileWindowsManagedLauncher,\n} from \"./windows-managed-install\";\n\nexport type CliInstallSelfResult =\n | \"installed\"\n | \"noop_same_version\"\n | \"noop_newer_present\";\n\nconst MANAGED_INSTALL_LOCK_PROFILE = \"managed-cli\";\nconst MANAGED_INSTALL_LOCK_KEY = \"install\";\nconst MANAGED_INSTALL_LOCK_RETRY_DELAY_MS = 100;\nconst MANAGED_INSTALL_LOCK_TIMEOUT_MS = 30_000;\n\n/**\n * Result of installing this binary into the managed layout. This is the shape\n * `openmeld install-self --json` emits and the seam Desktop consumes, so it is\n * treated as a frozen contract (covered by shape tests).\n */\nexport type CliInstallSelfOutcome = {\n result: CliInstallSelfResult;\n version: string;\n platform: string;\n // Absolute path of the versioned binary: <root>/versions/<version>/openmeld.\n managedBinaryPath: string;\n // Absolute path of the current-version pointer: <root>/bin/openmeld.\n currentPointerPath: string;\n // Version the current pointer resolved to before this run, if any.\n previousVersion: string | null;\n forced: boolean;\n};\n\nexport function resolveCliPlatformToken(): string {\n return resolveCliBinaryPlatform(process.platform, process.arch);\n}\n\nexport function resolveCliSelfVersion(): string {\n return OPENMELD_VERSION;\n}\n\nasync function isUsableManagedBinary(target: string): Promise<boolean> {\n const stats = await stat(target).catch((error) => {\n if (isErrorWithCode(error, \"ENOENT\")) {\n return null;\n }\n throw error;\n });\n if (!stats?.isFile()) {\n return false;\n }\n return await access(target, fsConstants.X_OK).then(\n () => true,\n (error) => {\n if (\n isErrorWithCode(error, \"EACCES\") ||\n isErrorWithCode(error, \"ENOENT\")\n ) {\n return false;\n }\n throw error;\n }\n );\n}\n\n// The version the current pointer resolves to, read from its symlink target's\n// versions/<version>/ segment. Returns null when there is no pointer yet or it\n// does not resolve into the managed layout.\nasync function readCurrentPointerVersion(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n if (process.platform === \"win32\") {\n return await readWindowsManagedCliVersion(\n resolveOpenMeldRootDir(pathInput)\n );\n }\n const pointerPath = openMeldManagedBinaryPath(pathInput);\n const target = await readlink(pointerPath).catch((error) => {\n if (isErrorWithCode(error, \"ENOENT\") || isErrorWithCode(error, \"EINVAL\")) {\n return null;\n }\n throw error;\n });\n if (!target) {\n return null;\n }\n const resolved = path.isAbsolute(target)\n ? target\n : path.resolve(path.dirname(pointerPath), target);\n const version = path.basename(path.dirname(resolved));\n return version.length > 0 &&\n path.resolve(resolved) ===\n openMeldManagedVersionBinaryPath(version, pathInput)\n ? version\n : null;\n}\n\nexport async function readManagedCliInstallation(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<{\n version: string;\n binaryPath: string;\n} | null> {\n const version = await readCurrentPointerVersion(pathInput);\n if (!version) {\n return null;\n }\n const binaryPath = openMeldManagedVersionBinaryPath(version, pathInput);\n if (!(await isUsableManagedBinary(binaryPath))) {\n return null;\n }\n return { version, binaryPath };\n}\n\nexport async function reconcileManagedCliLauncher(): Promise<void> {\n if (process.platform !== \"win32\") {\n return;\n }\n await withManagedInstallTransaction(async () => {\n const version = await readCurrentPointerVersion();\n if (version) {\n await reconcileWindowsManagedLauncher(resolveOpenMeldRootDir(), version);\n }\n });\n}\n\n/**\n * Install the currently-running binary (process.execPath) into the managed\n * layout and point bin/openmeld at it. Idempotent with semver arbitration:\n * a same-or-newer pointer is left in place (install only goes up), unless\n * `force` is set. Both the versioned binary and the pointer are swapped in\n * atomically via a temp name + rename.\n */\nexport async function performManagedInstall(input?: {\n force?: boolean;\n // Defaults to process.execPath (this running binary); injectable for tests.\n sourceBinaryPath?: string;\n}): Promise<CliInstallSelfOutcome> {\n return await withManagedInstallTransaction(async () =>\n performManagedInstallLocked(input)\n );\n}\n\nexport async function withManagedInstallTransaction<T>(\n run: () => Promise<T>,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<T> {\n const startedAtMs = Date.now();\n\n for (;;) {\n try {\n const lock = await acquireLock({\n openMeldProfileId: MANAGED_INSTALL_LOCK_PROFILE,\n key: MANAGED_INSTALL_LOCK_KEY,\n meta: { component: \"managed_cli.install\" },\n pathResolution: pathInput,\n });\n return await runWithHeldLock({\n lock,\n run,\n releaseContext: {\n component: \"managed_cli.install\",\n lockKey: MANAGED_INSTALL_LOCK_KEY,\n openMeldProfileId: MANAGED_INSTALL_LOCK_PROFILE,\n },\n });\n } catch (error) {\n if (\n !isOpenMeldLockError(error) ||\n isOpenMeldOrphanedLockError(error) ||\n Date.now() - startedAtMs >= MANAGED_INSTALL_LOCK_TIMEOUT_MS\n ) {\n throw error;\n }\n await delay(MANAGED_INSTALL_LOCK_RETRY_DELAY_MS);\n }\n }\n}\n\n/**\n * Prune managed CLI versions only while holding the install transaction lock.\n * The current pointer and every durable Service update target are re-read in\n * the lock, so cleanup cannot race an install or use a stale pending snapshot.\n */\nexport async function pruneManagedInstallVersions(input: {\n pathInput: OpenMeldPathResolutionInput;\n preferredRollbackVersion?: string | null;\n}): Promise<void> {\n const pathInput = input.pathInput;\n assertNoPublishedProductionMutationDuringTests(\n pathInput,\n \"managed CLI versions\"\n );\n await withManagedInstallTransaction(async () => {\n const currentVersion = await readCurrentPointerVersion(pathInput);\n if (currentVersion === null) {\n return;\n }\n const protectedVersions =\n await readManagedInstallProtectedVersions(pathInput);\n await pruneManagedVersions({\n currentVersion,\n pathInput,\n preferredRollbackVersion: input.preferredRollbackVersion,\n protectedVersions,\n });\n }, pathInput);\n}\n\nasync function performManagedInstallLocked(input?: {\n force?: boolean;\n sourceBinaryPath?: string;\n}): Promise<CliInstallSelfOutcome> {\n assertNoPublishedProductionMutationDuringTests(\n {},\n \"managed CLI installation\"\n );\n const force = input?.force ?? false;\n const version = resolveCliSelfVersion();\n const platform = resolveCliPlatformToken();\n const currentPointerPath = openMeldManagedBinaryPath();\n const managedBinaryPath = openMeldManagedVersionBinaryPath(version);\n const previousVersion = await readCurrentPointerVersion();\n const protectedVersions = await readManagedInstallProtectedVersions();\n\n const baseOutcome = {\n version,\n platform,\n managedBinaryPath,\n currentPointerPath,\n previousVersion,\n forced: force,\n };\n\n if (previousVersion !== null) {\n const comparison = compareSemver(version, previousVersion);\n if (\n !force &&\n comparison === 0 &&\n (await isUsableManagedBinary(managedBinaryPath))\n ) {\n if (process.platform === \"win32\") {\n await reconcileWindowsManagedLauncher(\n resolveOpenMeldRootDir(),\n previousVersion\n );\n }\n await pruneManagedVersions({\n currentVersion: previousVersion,\n protectedVersions,\n });\n return { ...baseOutcome, result: \"noop_same_version\" };\n }\n if (comparison < 0 && !force) {\n if (process.platform === \"win32\") {\n await reconcileWindowsManagedLauncher(\n resolveOpenMeldRootDir(),\n previousVersion\n );\n }\n if (!(await isUsableManagedBinary(managedBinaryPath))) {\n await placeVersionedBinary(\n input?.sourceBinaryPath ?? process.execPath,\n version,\n managedBinaryPath\n );\n }\n await pruneManagedVersions({\n currentVersion: previousVersion,\n preferredRollbackVersion: version,\n protectedVersions,\n });\n return { ...baseOutcome, result: \"noop_newer_present\" };\n }\n }\n\n await placeVersionedBinary(\n input?.sourceBinaryPath ?? process.execPath,\n version,\n managedBinaryPath\n );\n await pruneManagedVersions({\n currentVersion: version,\n preferredRollbackVersion: previousVersion,\n protectedVersions,\n });\n await swapCurrentPointer(currentPointerPath, managedBinaryPath);\n\n return { ...baseOutcome, result: \"installed\" };\n}\n\nasync function readManagedInstallProtectedVersions(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<Set<string>> {\n const [protectedVersions, pendingServiceUpdate, activeBundle] =\n await Promise.all([\n readDaemonServiceUpdateWorkerProtectedManagedVersions(pathInput),\n readPendingDaemonServiceUpdate(pathInput),\n readDaemonActiveBundleState(pathInput),\n ]);\n // CLI releases may advance while this Service remains active. Its immutable\n // executable is still a recovery and task-tool dependency, not CLI rollback.\n if (activeBundle?.bundleFormat === \"binary_v1\") {\n protectedVersions.add(activeBundle.daemonVersion);\n }\n if (pendingServiceUpdate?.preparedBundle.bundleFormat === \"binary_v1\") {\n protectedVersions.add(pendingServiceUpdate.preparedBundle.daemonVersion);\n }\n return protectedVersions;\n}\n\nasync function placeVersionedBinary(\n sourceBinary: string,\n version: string,\n managedBinaryPath: string\n): Promise<void> {\n if (process.platform === \"win32\") {\n await placeWindowsManagedVersion({\n root: resolveOpenMeldRootDir(),\n version,\n sourceBinary,\n });\n return;\n }\n await mkdir(openMeldManagedVersionDir(version), { recursive: true });\n const tmpPath = `${managedBinaryPath}.tmp-${process.pid}-${Date.now()}`;\n await rm(tmpPath, { force: true }).catch(() => undefined);\n await copyFile(sourceBinary, tmpPath);\n await chmod(tmpPath, 0o755);\n const existingTarget = await lstat(managedBinaryPath).catch((error) => {\n if (isErrorWithCode(error, \"ENOENT\")) {\n return null;\n }\n throw error;\n });\n if (existingTarget?.isDirectory()) {\n await rm(managedBinaryPath, { recursive: true });\n }\n await rename(tmpPath, managedBinaryPath);\n}\n\nasync function swapCurrentPointer(\n currentPointerPath: string,\n managedBinaryPath: string\n): Promise<void> {\n if (process.platform === \"win32\") {\n await activateWindowsManagedCli(\n resolveOpenMeldRootDir(),\n path.basename(path.dirname(managedBinaryPath)),\n allowUnsignedWindowsInternalPreview() ? \"windows-preview\" : undefined\n );\n return;\n }\n await mkdir(openMeldBinDir(), { recursive: true });\n const relativeTarget = path.relative(\n path.dirname(currentPointerPath),\n managedBinaryPath\n );\n const tmpPath = `${currentPointerPath}.tmp-${process.pid}-${Date.now()}`;\n await rm(tmpPath, { force: true }).catch(() => undefined);\n await symlink(relativeTarget, tmpPath);\n await rename(tmpPath, currentPointerPath);\n}\n\nexport function buildInstallSelfJsonPayload(outcome: CliInstallSelfOutcome) {\n return cliInstallSelfResultSchema.parse({\n schemaVersion: 1 as const,\n type: \"cli.install_self\" as const,\n result: outcome.result,\n version: outcome.version,\n platform: outcome.platform,\n managedBinaryPath: outcome.managedBinaryPath,\n currentPointerPath: outcome.currentPointerPath,\n previousVersion: outcome.previousVersion,\n forced: outcome.forced,\n });\n}\n\nfunction isErrorWithCode(error: unknown, code: string): boolean {\n return (\n error instanceof Error &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === code\n );\n}\n","import { isAbsolute } from \"node:path\";\nimport type { PrepareStepDiagnosticsBundle } from \"@openmeld/schemas/types\";\n\nconst ERROR_CODES = new Set([\n \"EPERM\",\n \"EACCES\",\n \"ENOENT\",\n \"ENOTDIR\",\n \"EISDIR\",\n \"EROFS\",\n \"ENOSPC\",\n \"EBUSY\",\n \"ETXTBSY\",\n \"EEXIST\",\n \"EIO\",\n \"EMFILE\",\n \"ENFILE\",\n \"EINVAL\",\n \"ENAMETOOLONG\",\n]);\nconst SYSCALLS = new Set([\n \"access\",\n \"open\",\n \"read\",\n \"write\",\n \"chmod\",\n \"chown\",\n \"copyfile\",\n \"rename\",\n \"unlink\",\n \"rmdir\",\n \"mkdir\",\n \"stat\",\n \"lstat\",\n \"realpath\",\n \"spawn\",\n]);\nconst APP_BUNDLE_PATH_PATTERN = /(?:^|[/\\\\])[^/\\\\]+\\.app(?:[/\\\\]|$)/iu;\n\n// Categories are safe to upload. Exact paths remain in local errors/journals.\nexport function classifyDiagnosticPath(\n value: unknown\n): \"app_bundle\" | \"absolute_other\" | \"relative\" | \"unknown\" {\n if (typeof value !== \"string\" || !value) {\n return \"unknown\";\n }\n if (APP_BUNDLE_PATH_PATTERN.test(value)) {\n return \"app_bundle\";\n }\n return isAbsolute(value) ? \"absolute_other\" : \"relative\";\n}\n\n// Do not copy message, path, spawnargs, environment, or arbitrary error fields.\n// EPERM/EACCES identify an operation failure, never an inferred TCC verdict.\nexport function collectLocalOperationFailure(\n error: unknown\n): PrepareStepDiagnosticsBundle[\"operationFailure\"] {\n let current = error;\n for (let depth = 0; depth < 4 && current instanceof Error; depth += 1) {\n const native = current as NodeJS.ErrnoException & { dest?: unknown };\n if (native.code && ERROR_CODES.has(native.code)) {\n return {\n code: native.code,\n ...(Number.isSafeInteger(native.errno) ? { errno: native.errno } : {}),\n ...(native.syscall && SYSCALLS.has(native.syscall)\n ? { syscall: native.syscall }\n : {}),\n pathCategory: classifyDiagnosticPath(native.path),\n ...(native.dest === undefined\n ? {}\n : {\n destinationCategory: classifyDiagnosticPath(native.dest),\n }),\n };\n }\n current = current.cause;\n }\n return undefined;\n}\n","import type { DaemonServiceContract } from \"@openmeld/schemas/types\";\nimport type { DaemonStatus } from \"../../config/daemon-state\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport {\n type DaemonActiveBundleState,\n isDaemonBundleSourceAllowedForLane,\n} from \"./daemon-service-bundle\";\n\nexport type DaemonServiceArtifactDriftReasonCode =\n | \"bundle_missing\"\n | \"bundle_content_drift\"\n | \"bundle_id_drift\"\n | \"bundle_version_drift\"\n | \"bundle_lane_drift\"\n | \"bundle_strategy_legacy\"\n | \"bundle_provenance_drift\"\n | \"bundle_path_invalid\";\n\nexport type ResolvedDaemonServiceArtifact = {\n expectedVersion: string;\n installVersion: string | null;\n activeBundleVersion: string | null;\n resolvedEntryPath: string | null;\n driftReasonCodes: DaemonServiceArtifactDriftReasonCode[];\n isAligned: boolean;\n};\n\nexport function resolveDaemonServiceArtifact(input: {\n expectedVersion: string;\n installStatus: DaemonStatus;\n serviceContract?: DaemonServiceContract | null;\n activeBundle: DaemonActiveBundleState | null;\n activeBundleSourceAvailable: boolean | null;\n activeBundleEntryPath: string | null;\n installedBundleFingerprint: string | null;\n pathInput?: OpenMeldPathResolutionInput;\n}): ResolvedDaemonServiceArtifact {\n const installVersion = input.installStatus.installed\n ? input.installStatus.state.daemonVersion\n : null;\n const expectedBundleId = input.serviceContract?.bundleId ?? null;\n const expectedDaemonVersion = input.expectedVersion;\n const activeBundleVersion = input.activeBundle?.daemonVersion ?? null;\n const driftReasonCodes = input.activeBundle\n ? collectActiveBundleDriftReasonCodes({\n activeBundle: input.activeBundle,\n activeBundleEntryPath: input.activeBundleEntryPath,\n activeBundleSourceAvailable: input.activeBundleSourceAvailable,\n installedBundleFingerprint: input.installedBundleFingerprint,\n expectedBundleId,\n expectedDaemonVersion,\n pathInput: input.pathInput,\n })\n : ([\"bundle_missing\"] satisfies DaemonServiceArtifactDriftReasonCode[]);\n\n const isAligned = driftReasonCodes.length === 0;\n\n return {\n expectedVersion: input.expectedVersion,\n installVersion,\n activeBundleVersion,\n resolvedEntryPath: isAligned ? input.activeBundleEntryPath : null,\n driftReasonCodes,\n isAligned,\n };\n}\n\nfunction collectActiveBundleDriftReasonCodes(input: {\n activeBundle: DaemonActiveBundleState;\n activeBundleEntryPath: string | null;\n activeBundleSourceAvailable: boolean | null;\n installedBundleFingerprint: string | null;\n expectedBundleId: string | null;\n expectedDaemonVersion: string;\n pathInput?: OpenMeldPathResolutionInput;\n}): DaemonServiceArtifactDriftReasonCode[] {\n const driftReasonCodes: DaemonServiceArtifactDriftReasonCode[] = [];\n\n if (hasBundleVersionDrift(input)) {\n driftReasonCodes.push(\"bundle_version_drift\");\n }\n if (hasBundleIdDrift(input)) {\n driftReasonCodes.push(\"bundle_id_drift\");\n }\n if (\n !isDaemonBundleSourceAllowedForLane({\n sourceKind: input.activeBundle.sourceKind,\n pathInput: input.pathInput,\n })\n ) {\n driftReasonCodes.push(\"bundle_lane_drift\");\n }\n if (input.activeBundle.bundleFormat === \"legacy_linked_v1\") {\n driftReasonCodes.push(\"bundle_strategy_legacy\");\n if (input.activeBundleSourceAvailable === false) {\n driftReasonCodes.push(\"bundle_provenance_drift\");\n }\n } else if (hasBundleContentDrift(input)) {\n driftReasonCodes.push(\"bundle_content_drift\");\n }\n if (!input.activeBundleEntryPath) {\n driftReasonCodes.push(\"bundle_path_invalid\");\n }\n\n return driftReasonCodes;\n}\n\nfunction hasBundleVersionDrift(input: {\n activeBundle: DaemonActiveBundleState;\n expectedDaemonVersion: string;\n}): boolean {\n return input.activeBundle.daemonVersion !== input.expectedDaemonVersion;\n}\n\nfunction hasBundleIdDrift(input: {\n activeBundle: DaemonActiveBundleState;\n expectedBundleId: string | null;\n}): boolean {\n return (\n input.expectedBundleId !== null &&\n input.activeBundle.bundleId !== input.expectedBundleId\n );\n}\n\nfunction hasBundleContentDrift(input: {\n activeBundle: DaemonActiveBundleState;\n installedBundleFingerprint: string | null;\n}): boolean {\n return (\n input.installedBundleFingerprint === null ||\n input.activeBundle.sourceDistFingerprint !==\n input.installedBundleFingerprint\n );\n}\n","import { execFile } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport {\n chmod,\n copyFile,\n cp,\n lstat,\n mkdir,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { basename, dirname, isAbsolute, join, relative, sep } from \"node:path\";\nimport process from \"node:process\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { pruneWindowsBinaryBundle } from \"@openmeld/adapter-core/windows-system\";\nimport {\n allowUnsignedWindowsInternalPreview,\n DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n downloadCliBinaryUpdateArtifact,\n prepareCliBinaryProcessHelper,\n resolveCliBinaryUpdatePlan,\n verifyCliBinaryCodeSignature,\n} from \"@openmeld/local-service/cli-binary-update-artifact\";\nimport { readDaemonRuntimeLease } from \"../../config/daemon-runtime-lease\";\nimport { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { readDaemonServiceUpdateWorkerProtectedBundleIds } from \"../../config/daemon-service-update-worker-registration\";\nimport {\n daemonRuntimeBundlesPath,\n daemonRuntimeRootPath,\n daemonRuntimeServiceManagerPath,\n daemonRuntimeStateRootPath,\n daemonServiceActiveBundleStatePath,\n daemonServiceLegacyExecutableWrapperPath,\n daemonServiceStableBinaryExecutablePath,\n daemonServiceStableExecutableWrapperPath,\n daemonServiceStableLauncherPath,\n daemonServiceUpdateWorkerBinaryExecutablePath,\n daemonStatePath,\n getDaemonStatus,\n daemonServiceExecutableWrapperPaths as resolveDaemonServiceExecutableWrapperPaths,\n daemonServiceRecognizedExecutablePaths as resolveDaemonServiceRecognizedExecutablePaths,\n} from \"../../config/daemon-state\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n} from \"../../config/paths\";\nimport { resolveBundledServiceRelease } from \"../../config/service-release\";\nimport type { CliBinaryReleaseInfo } from \"../../config/version-state\";\nimport {\n performManagedInstall,\n resolveCliSelfVersion,\n} from \"../../local-components/managed-install\";\nimport {\n isBinaryDistribution,\n type OpenMeldDistribution,\n resolveOpenMeldDistribution,\n} from \"../../runtime/distribution\";\nimport {\n classifyDiagnosticPath,\n collectLocalOperationFailure,\n} from \"../../system/local-operation-diagnostics\";\nimport { emitDaemonLifecycleEvent } from \"./daemon-lifecycle-journal\";\nimport { resolveDaemonServiceArtifact } from \"./daemon-service-artifact\";\nimport { readPendingDaemonServiceUpdate } from \"./daemon-service-update-state\";\nimport {\n expectedBinaryServiceFingerprint,\n hashBinaryServiceBundle,\n prepareWindowsMaintenanceBinary,\n verifyWindowsServiceSubsystem,\n windowsMaintenanceBinaryPath,\n} from \"./windows-service-binary\";\n\nconst DAEMON_ACTIVE_BUNDLE_SCHEMA = \"openmeld-daemon-active-bundle-v2\";\nconst DAEMON_ACTIVE_BUNDLE_LEGACY_SCHEMA = \"openmeld-daemon-active-bundle-v1\";\nconst DAEMON_CLI_ENTRY_NAMES = [\"openmeld-dev.js\", \"openmeld.js\"] as const;\nconst WINDOWS_MAINTENANCE_BUNDLE_PATTERN = /^maintenance-[0-9a-f]{64}$/u;\nconst DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE = \"workspace\";\nconst DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL = \"package_install\";\nconst DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE = \"npx_cache\";\nconst DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN = \"unknown\";\n// The npm Service bundle includes JavaScript and its dist/windows process\n// helper. Every platform's npm artifact carries the same prebuilt helper.\n// CLI-only binaries and native secure storage have separate artifact integrity.\nconst DAEMON_SOURCE_DIST_IGNORED_TOP_LEVEL_DIRS = new Set([\"binary\", \"native\"]);\n\nexport type DaemonBundleFormat =\n | \"legacy_linked_v1\"\n | \"self_contained_v1\"\n | \"binary_v1\";\nexport type DaemonBundleSourceKind =\n | typeof DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE\n | typeof DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL\n | typeof DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE\n | typeof DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN;\n\nexport type DaemonActiveBundleState = {\n v: 2;\n schema: typeof DAEMON_ACTIVE_BUNDLE_SCHEMA;\n bundleId: string;\n daemonVersion: string;\n entryScriptRelativePath: string;\n bundleFormat: DaemonBundleFormat;\n sourceEntryScriptPath: string;\n sourcePackageRootPath: string;\n sourceDistRootPath: string;\n sourceDistFingerprint?: string | null;\n sourceKind: DaemonBundleSourceKind;\n createdAt: string;\n updatedAt: string;\n};\n\nexport function daemonServiceActiveBundlePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceActiveBundleStatePath(pathInput);\n}\n\nexport function daemonServiceLauncherPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceStableLauncherPath(pathInput);\n}\n\nexport function daemonServiceExecutableWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceStableExecutableWrapperPath(pathInput);\n}\n\nexport function daemonServiceBinaryExecutablePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceStableBinaryExecutablePath(pathInput);\n}\n\nexport function daemonServiceUpdateWorkerBinaryPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceUpdateWorkerBinaryExecutablePath(pathInput);\n}\n\nexport function daemonServiceExecutableWrapperPaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return resolveDaemonServiceExecutableWrapperPaths(pathInput);\n}\n\nexport function daemonServiceRecognizedExecutablePaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return resolveDaemonServiceRecognizedExecutablePaths(pathInput);\n}\n\nexport function daemonServiceLegacyWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceLegacyExecutableWrapperPath(pathInput);\n}\n\nexport function resolveDaemonBundleRootPath(\n bundleId: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeBundlesPath(pathInput), bundleId);\n}\n\nexport function isDaemonBundleSourceAllowedForLane(input: {\n sourceKind: DaemonBundleSourceKind;\n pathInput?: OpenMeldPathResolutionInput;\n}): boolean {\n if (input.sourceKind !== DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE) {\n return true;\n }\n return resolveOpenMeldEnvPreset(input.pathInput) === \"dev-local\";\n}\n\nexport async function readDaemonActiveBundleState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonActiveBundleState | null> {\n const raw = await readFile(\n daemonServiceActiveBundlePath(pathInput),\n \"utf8\"\n ).catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return null;\n }\n try {\n const parsed = JSON.parse(raw) as Partial<DaemonActiveBundleState>;\n if (parsed.v === 2 && parsed.schema === DAEMON_ACTIVE_BUNDLE_SCHEMA) {\n if (\n typeof parsed.bundleId !== \"string\" ||\n parsed.bundleId.length === 0 ||\n typeof parsed.daemonVersion !== \"string\" ||\n parsed.daemonVersion.length === 0 ||\n typeof parsed.entryScriptRelativePath !== \"string\" ||\n parsed.entryScriptRelativePath.length === 0 ||\n !isDaemonBundleFormat(parsed.bundleFormat) ||\n typeof parsed.sourceEntryScriptPath !== \"string\" ||\n parsed.sourceEntryScriptPath.length === 0 ||\n typeof parsed.sourcePackageRootPath !== \"string\" ||\n parsed.sourcePackageRootPath.length === 0 ||\n typeof parsed.sourceDistRootPath !== \"string\" ||\n parsed.sourceDistRootPath.length === 0 ||\n !isDaemonBundleSourceKind(parsed.sourceKind) ||\n typeof parsed.createdAt !== \"string\" ||\n parsed.createdAt.length === 0 ||\n typeof parsed.updatedAt !== \"string\" ||\n parsed.updatedAt.length === 0\n ) {\n return null;\n }\n return {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId: parsed.bundleId,\n daemonVersion: parsed.daemonVersion,\n entryScriptRelativePath: parsed.entryScriptRelativePath,\n bundleFormat: parsed.bundleFormat,\n sourceEntryScriptPath: parsed.sourceEntryScriptPath,\n sourcePackageRootPath: parsed.sourcePackageRootPath,\n sourceDistRootPath: parsed.sourceDistRootPath,\n sourceDistFingerprint: normalizeOptionalText(\n parsed.sourceDistFingerprint\n ),\n sourceKind: parsed.sourceKind,\n createdAt: parsed.createdAt,\n updatedAt: parsed.updatedAt,\n };\n }\n\n const legacyParsed = parsed as Partial<{\n v: 1;\n schema: string;\n bundleId: string;\n daemonVersion: string;\n entryScriptRelativePath: string;\n sourceDistRootPath: string;\n createdAt: string;\n updatedAt: string;\n }>;\n if (\n legacyParsed.v !== 1 ||\n legacyParsed.schema !== DAEMON_ACTIVE_BUNDLE_LEGACY_SCHEMA ||\n typeof legacyParsed.bundleId !== \"string\" ||\n legacyParsed.bundleId.length === 0 ||\n typeof legacyParsed.daemonVersion !== \"string\" ||\n legacyParsed.daemonVersion.length === 0 ||\n typeof legacyParsed.entryScriptRelativePath !== \"string\" ||\n legacyParsed.entryScriptRelativePath.length === 0 ||\n typeof legacyParsed.sourceDistRootPath !== \"string\" ||\n legacyParsed.sourceDistRootPath.length === 0 ||\n typeof legacyParsed.createdAt !== \"string\" ||\n legacyParsed.createdAt.length === 0 ||\n typeof legacyParsed.updatedAt !== \"string\" ||\n legacyParsed.updatedAt.length === 0\n ) {\n return null;\n }\n const sourceEntryScriptPath = join(\n legacyParsed.sourceDistRootPath,\n basename(legacyParsed.entryScriptRelativePath)\n );\n const sourcePackageRootPath = dirname(legacyParsed.sourceDistRootPath);\n return {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId: legacyParsed.bundleId,\n daemonVersion: legacyParsed.daemonVersion,\n entryScriptRelativePath: legacyParsed.entryScriptRelativePath,\n bundleFormat: \"legacy_linked_v1\",\n sourceEntryScriptPath,\n sourcePackageRootPath,\n sourceDistRootPath: legacyParsed.sourceDistRootPath,\n sourceDistFingerprint: null,\n sourceKind: inferDaemonBundleSourceKind(sourcePackageRootPath),\n createdAt: legacyParsed.createdAt,\n updatedAt: legacyParsed.updatedAt,\n };\n } catch {\n return null;\n }\n}\n\nexport async function resolveAlignedDaemonActiveBundleEntryPath(\n input: { expectedVersion?: string } = {}\n): Promise<string | null> {\n const [installStatus, serviceContract, state] = await Promise.all([\n getDaemonStatus(),\n readDaemonServiceContract().catch(() => null),\n readDaemonActiveBundleState(),\n ]);\n const expectedVersion =\n input.expectedVersion ??\n serviceContract?.daemonVersion ??\n (installStatus.installed\n ? installStatus.state.daemonVersion\n : (state?.daemonVersion ?? \"unknown\"));\n const matchingServiceContract =\n input.expectedVersion &&\n serviceContract?.daemonVersion !== input.expectedVersion\n ? null\n : serviceContract;\n const activeBundleEntryPath =\n await resolveDaemonBundleEntryPathFromState(state);\n const installedBundleFingerprint = activeBundleEntryPath\n ? await resolveInstalledDaemonBundleFingerprint(state)\n : null;\n const activeBundleSourceAvailable =\n state && state.bundleFormat === \"legacy_linked_v1\"\n ? await pathExists(state.sourcePackageRootPath).catch(() => null)\n : null;\n const artifact = resolveDaemonServiceArtifact({\n expectedVersion,\n installStatus,\n serviceContract: matchingServiceContract,\n activeBundle: state,\n activeBundleSourceAvailable,\n activeBundleEntryPath,\n installedBundleFingerprint,\n });\n return artifact.resolvedEntryPath;\n}\n\nexport async function resolveInstalledDaemonBundleFingerprint(\n state: DaemonActiveBundleState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n if (state?.bundleFormat === \"binary_v1\") {\n const entryPath = await resolveDaemonBundleEntryPathFromState(\n state,\n pathInput\n );\n return entryPath ? await hashBinaryServiceBundle(entryPath) : null;\n }\n if (state?.bundleFormat === \"self_contained_v1\") {\n const bundleRootPath = resolveDaemonBundleRootPath(\n state.bundleId,\n pathInput\n );\n const distRootPath = join(\n bundleRootPath,\n dirname(state.entryScriptRelativePath)\n );\n const relativeDistRootPath = relative(bundleRootPath, distRootPath);\n if (\n relativeDistRootPath === \"..\" ||\n relativeDistRootPath.startsWith(`..${sep}`) ||\n isAbsolute(relativeDistRootPath)\n ) {\n return null;\n }\n return await computeDaemonSourceDistFingerprint(distRootPath);\n }\n return null;\n}\n\nexport async function resolveDaemonBundleEntryPathFromState(\n state: DaemonActiveBundleState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n if (!state) {\n return null;\n }\n if (state.bundleFormat === \"binary_v1\") {\n // Only macOS uses a stable physical carrier for privacy grants. Windows\n // Task Scheduler names the complete immutable GUI bundle directly.\n if (process.platform === \"win32\") {\n return (await pathExists(state.sourceEntryScriptPath))\n ? state.sourceEntryScriptPath\n : null;\n }\n const stableExecutablePath = daemonServiceBinaryExecutablePath(pathInput);\n if (await pathExists(stableExecutablePath)) {\n return stableExecutablePath;\n }\n return (await pathExists(state.sourceEntryScriptPath))\n ? state.sourceEntryScriptPath\n : null;\n }\n const entryPath = join(\n resolveDaemonBundleRootPath(state.bundleId, pathInput),\n state.entryScriptRelativePath\n );\n return (await pathExists(entryPath)) ? entryPath : null;\n}\n\nexport async function prepareDaemonServiceBundle(input: {\n activate?: boolean;\n daemonVersion: string;\n cliScriptPath?: string;\n binaryRelease?: CliBinaryReleaseInfo;\n}): Promise<DaemonActiveBundleState> {\n const preparedBundle = isBinaryDistribution()\n ? await prepareBinaryDaemonServiceBundle(input)\n : await prepareNodeDaemonServiceBundle(input);\n if (input.activate !== false) {\n await activateDaemonServiceBundle(preparedBundle);\n }\n return preparedBundle;\n}\n\nasync function prepareNodeDaemonServiceBundle(input: {\n daemonVersion: string;\n cliScriptPath?: string;\n}): Promise<DaemonActiveBundleState> {\n const sourceProvenance = await resolveDaemonBundleSourceProvenance(\n input.cliScriptPath\n );\n if (\n !isDaemonBundleSourceAllowedForLane({\n sourceKind: sourceProvenance.sourceKind,\n })\n ) {\n throw new Error(\n \"OpenMeld Service cannot use repo-local workspace service files in this lane. Repo-local service files are only allowed through `openmeld-dev`.\"\n );\n }\n const { sourceEntryScriptPath, sourceDistRootPath, sourcePackageRootPath } =\n sourceProvenance;\n if (sourceProvenance.sourceKind !== DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE) {\n const sourcePackageVersion = await readDaemonSourcePackageVersion(\n sourcePackageRootPath\n );\n if (sourcePackageVersion !== input.daemonVersion) {\n throw new Error(\n `Cannot prepare OpenMeld Service ${input.daemonVersion} from CLI source ${sourcePackageVersion} at ${sourcePackageRootPath}. Install openmeld@${input.daemonVersion} and rerun \\`openmeld setup\\`, or use a verified Service artifact for that version.`\n );\n }\n }\n const sourceDistFingerprint =\n await computeDaemonSourceDistFingerprint(sourceDistRootPath);\n const entryScriptRelativePath = basename(sourceEntryScriptPath);\n const now = new Date().toISOString();\n const bundleId = createBundleId(input.daemonVersion);\n const bundleRootPath = resolveDaemonBundleRootPath(bundleId);\n const targetDistRootPath = join(bundleRootPath, \"dist\");\n\n await Promise.all([\n mkdir(daemonRuntimeRootPath(), { recursive: true }),\n mkdir(daemonRuntimeBundlesPath(), { recursive: true }),\n mkdir(daemonRuntimeStateRootPath(), { recursive: true }),\n mkdir(daemonRuntimeServiceManagerPath(), { recursive: true }),\n ]);\n\n try {\n await rm(bundleRootPath, { recursive: true, force: true });\n await mkdir(bundleRootPath, { recursive: true });\n await cp(sourceDistRootPath, targetDistRootPath, {\n recursive: true,\n force: true,\n filter: (sourcePath) =>\n isDaemonSourceDistPathIncluded(sourceDistRootPath, sourcePath),\n });\n await writeDaemonBundlePackageManifest({\n bundleRootPath,\n daemonVersion: input.daemonVersion,\n });\n await copyDaemonBundleRuntimeDependencies({\n bundleRootPath,\n sourcePackageRootPath,\n });\n } catch (error) {\n await rm(bundleRootPath, { recursive: true, force: true }).catch(\n () => undefined\n );\n throw error;\n }\n\n const nextState: DaemonActiveBundleState = {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId,\n daemonVersion: input.daemonVersion,\n entryScriptRelativePath: join(\"dist\", entryScriptRelativePath),\n bundleFormat: \"self_contained_v1\",\n sourceEntryScriptPath,\n sourcePackageRootPath,\n sourceDistRootPath,\n sourceDistFingerprint,\n sourceKind: sourceProvenance.sourceKind,\n createdAt: now,\n updatedAt: now,\n };\n\n return nextState;\n}\n\n// A selected binary Service owns its complete bundle. macOS may also use the\n// same-version CLI; Windows requires the separately built GUI carrier.\nasync function prepareBinaryDaemonServiceBundle(input: {\n daemonVersion: string;\n binaryRelease?: CliBinaryReleaseInfo;\n}): Promise<DaemonActiveBundleState> {\n const { daemonVersion } = input;\n const bundledRelease = resolveBundledServiceRelease();\n const binaryRelease =\n input.binaryRelease ??\n (bundledRelease?.version === daemonVersion ? bundledRelease : undefined);\n if (\n process.platform === \"win32\" ||\n daemonVersion !== resolveCliSelfVersion()\n ) {\n const active = await readDaemonActiveBundleState();\n if (\n active?.bundleFormat === \"binary_v1\" &&\n active.daemonVersion === daemonVersion &&\n active.sourceDistFingerprint &&\n (!binaryRelease ||\n expectedBinaryServiceFingerprint(binaryRelease) ===\n active.sourceDistFingerprint) &&\n (await pathExists(active.sourceEntryScriptPath)) &&\n (await hashBinaryServiceBundle(active.sourceEntryScriptPath)) ===\n active.sourceDistFingerprint\n ) {\n return active;\n }\n }\n if (binaryRelease) {\n return await prepareSelectedBinaryDaemonServiceBundle({\n daemonVersion,\n release: binaryRelease,\n });\n }\n if (process.platform === \"win32\") {\n throw new Error(\n \"OpenMeld needs the selected Windows background Service artifact. The console CLI cannot replace it.\"\n );\n }\n if (daemonVersion !== resolveCliSelfVersion()) {\n throw new Error(\n `Cannot prepare OpenMeld Service ${daemonVersion} from CLI ${resolveCliSelfVersion()}. Acquire the selected Service release before preparing the update.`\n );\n }\n const outcome = await performManagedInstall();\n const managedBinaryPath = outcome.managedBinaryPath;\n if (!(await pathExists(managedBinaryPath))) {\n throw new Error(\n `OpenMeld managed binary is missing at ${managedBinaryPath}; cannot prepare binary OpenMeld Service.`\n );\n }\n const managedVersionDir = dirname(managedBinaryPath);\n const now = new Date().toISOString();\n\n await Promise.all([\n mkdir(daemonRuntimeRootPath(), { recursive: true }),\n mkdir(daemonRuntimeStateRootPath(), { recursive: true }),\n mkdir(daemonRuntimeServiceManagerPath(), { recursive: true }),\n ]);\n\n const nextState: DaemonActiveBundleState = {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId: createBundleId(outcome.version),\n daemonVersion: outcome.version,\n entryScriptRelativePath: \"openmeld\",\n bundleFormat: \"binary_v1\",\n sourceEntryScriptPath: managedBinaryPath,\n sourcePackageRootPath: managedVersionDir,\n sourceDistRootPath: managedVersionDir,\n sourceDistFingerprint: await hashDaemonBinaryFile(managedBinaryPath),\n sourceKind: DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL,\n createdAt: now,\n updatedAt: now,\n };\n\n return nextState;\n}\n\nasync function prepareSelectedBinaryDaemonServiceBundle(input: {\n daemonVersion: string;\n release: CliBinaryReleaseInfo;\n}): Promise<DaemonActiveBundleState> {\n if (input.release.version !== input.daemonVersion) {\n throw new Error(\n \"The selected Service artifact does not match the update target.\"\n );\n }\n const bundleId = createBundleId(input.daemonVersion);\n const bundleRootPath = resolveDaemonBundleRootPath(bundleId);\n const windows = input.release.platform.startsWith(\"windows-\");\n if (\n process.platform === \"win32\" &&\n input.release.platform !== \"windows-x64\"\n ) {\n throw new Error(\n \"The selected Service release is not a Windows x64 artifact.\"\n );\n }\n const executableName = windows ? \"openmeld.exe\" : \"openmeld\";\n const executablePath = join(bundleRootPath, executableName);\n const onDeltaFallback = (error: Error): void => {\n console.warn(\"[openmeld.service.artifact_delta_fallback]\", error.message);\n };\n const plan = await resolveCliBinaryUpdatePlan({\n baseBinaryPath: process.execPath,\n currentVersion: resolveCliSelfVersion(),\n onDeltaFallback,\n release: input.release,\n });\n const bytes = await downloadCliBinaryUpdateArtifact({\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n onDeltaFallback,\n plan,\n release: input.release,\n });\n await mkdir(bundleRootPath, { recursive: true });\n try {\n await writeFile(executablePath, bytes, { mode: 0o755 });\n await verifyCliBinaryCodeSignature({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath: executablePath,\n allowUnsignedForDevelopment: resolveOpenMeldEnvPreset() === \"dev-local\",\n release: input.release,\n runCommand: async (command, args) => {\n const result = await promisify(execFile)(command, args, {\n encoding: \"utf8\",\n });\n return { code: 0, stdout: result.stdout, stderr: result.stderr };\n },\n });\n await prepareCliBinaryProcessHelper({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath: executablePath,\n release: input.release,\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n });\n if (windows) {\n await verifyWindowsServiceSubsystem(executablePath);\n }\n if (\n (await hashBinaryServiceBundle(executablePath, windows)) !==\n expectedBinaryServiceFingerprint(input.release)\n ) {\n throw new Error(\n \"The prepared Service bundle does not match the selected release.\"\n );\n }\n } catch (error) {\n await rm(bundleRootPath, { recursive: true, force: true });\n throw error;\n }\n const now = new Date().toISOString();\n return {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId,\n daemonVersion: input.daemonVersion,\n entryScriptRelativePath: executableName,\n bundleFormat: \"binary_v1\",\n sourceEntryScriptPath: executablePath,\n sourcePackageRootPath: bundleRootPath,\n sourceDistRootPath: bundleRootPath,\n sourceDistFingerprint: expectedBinaryServiceFingerprint(input.release),\n sourceKind: DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL,\n createdAt: now,\n updatedAt: now,\n };\n}\n\nexport async function activateDaemonServiceBundle(\n preparedBundle: DaemonActiveBundleState\n): Promise<void> {\n await mkdir(daemonRuntimeStateRootPath(), { recursive: true });\n await writeFile(\n daemonServiceActiveBundlePath(),\n `${JSON.stringify(preparedBundle, null, 2)}\\n`,\n { encoding: \"utf8\", mode: 0o600 }\n );\n if (preparedBundle.bundleFormat !== \"binary_v1\") {\n await ensureDaemonServiceManagerExecutables();\n }\n}\n\nexport async function discardPreparedDaemonServiceBundle(\n preparedBundle: DaemonActiveBundleState\n): Promise<void> {\n if (preparedBundle.bundleFormat === \"legacy_linked_v1\") {\n return;\n }\n const activeBundle = await readDaemonActiveBundleState();\n if (activeBundle?.bundleId === preparedBundle.bundleId) {\n return;\n }\n await rm(resolveDaemonBundleRootPath(preparedBundle.bundleId), {\n recursive: true,\n force: true,\n });\n}\n\nasync function hashDaemonBinaryFile(filePath: string): Promise<string> {\n const hash = createHash(\"sha256\");\n hash.update(await readFile(filePath));\n return hash.digest(\"hex\");\n}\n\nexport async function runAuditedServiceManagerCarrierMutation<T>(input: {\n distribution?: OpenMeldDistribution;\n operation: string;\n pathInput?: OpenMeldPathResolutionInput;\n run: () => Promise<T>;\n targetPath: string;\n}): Promise<T> {\n const pathInput = input.pathInput ?? {};\n const metadata = {\n distribution: input.distribution ?? resolveOpenMeldDistribution(),\n executable: process.execPath,\n operation: input.operation,\n preset: resolveOpenMeldEnvPreset(pathInput),\n targetPath: input.targetPath,\n targetCategory: classifyDiagnosticPath(input.targetPath),\n actorPid: process.pid,\n parentPid: process.ppid,\n };\n await emitDaemonLifecycleEvent({\n command: \"openmeld service carrier mutation\",\n intent: \"status_cleanup\",\n metadata,\n pathInput,\n result: \"attempted\",\n type: \"service_manager.registration_reconcile\",\n });\n try {\n const result = await input.run();\n await emitDaemonLifecycleEvent({\n command: \"openmeld service carrier mutation\",\n intent: \"status_cleanup\",\n metadata,\n pathInput,\n result: \"completed\",\n type: \"service_manager.registration_reconcile\",\n });\n return result;\n } catch (error) {\n await emitDaemonLifecycleEvent({\n command: \"openmeld service carrier mutation\",\n intent: \"status_cleanup\",\n metadata: {\n ...metadata,\n errorMessage: error instanceof Error ? error.message : String(error),\n operationFailure: collectLocalOperationFailure(error),\n },\n pathInput,\n result: \"failed\",\n type: \"service_manager.registration_reconcile\",\n });\n throw error;\n }\n}\n\nexport async function ensureDaemonServiceStableBinaryExecutable(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string> {\n const activeBundle = await readDaemonActiveBundleState();\n if (activeBundle?.bundleFormat !== \"binary_v1\") {\n throw new Error(\n \"OpenMeld cannot prepare the stable macOS Service executable without an active binary bundle.\"\n );\n }\n return await ensureVerifiedBinaryCarrier({\n bundle: activeBundle,\n operationName: \"stable_binary\",\n pathInput,\n targetPath: daemonServiceBinaryExecutablePath(pathInput),\n });\n}\n\nexport async function ensureDaemonServiceUpdateWorkerBinaryExecutable(\n preparedBundle: DaemonActiveBundleState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string> {\n if (preparedBundle.bundleFormat !== \"binary_v1\") {\n throw new Error(\n \"OpenMeld cannot prepare the update worker binary without a binary Service bundle.\"\n );\n }\n if (process.platform === \"win32\") {\n return await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"prepare_windows_maintenance_bundle\",\n pathInput,\n targetPath: windowsMaintenanceBinaryPath(preparedBundle, pathInput),\n run: async () =>\n await prepareWindowsMaintenanceBinary(preparedBundle, pathInput),\n });\n }\n return await ensureVerifiedBinaryCarrier({\n bundle: preparedBundle,\n operationName: \"update_worker_binary\",\n pathInput,\n targetPath: daemonServiceUpdateWorkerBinaryPath(pathInput),\n });\n}\n\nexport async function clearDaemonServiceUpdateWorkerBinaryExecutable(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n if (process.platform === \"win32\") {\n for (const bundleId of await readDirectoryNames(\n daemonRuntimeBundlesPath(pathInput)\n )) {\n if (!WINDOWS_MAINTENANCE_BUNDLE_PATTERN.test(bundleId)) {\n continue;\n }\n const targetPath = resolveDaemonBundleRootPath(bundleId, pathInput);\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"remove_windows_maintenance_bundle\",\n pathInput,\n targetPath,\n run: async () => await pruneWindowsBinaryBundle(targetPath),\n });\n }\n return;\n }\n const targetPath = daemonServiceUpdateWorkerBinaryPath(pathInput);\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"remove_update_worker_binary\",\n pathInput,\n targetPath,\n run: async () => await rm(targetPath, { force: true }),\n });\n}\n\nasync function ensureVerifiedBinaryCarrier(input: {\n bundle: DaemonActiveBundleState;\n operationName: \"stable_binary\" | \"update_worker_binary\";\n pathInput: OpenMeldPathResolutionInput;\n targetPath: string;\n}): Promise<string> {\n const sourcePath = input.bundle.sourceEntryScriptPath;\n const expectedFingerprint =\n input.bundle.sourceDistFingerprint ??\n (await hashDaemonBinaryFile(sourcePath));\n const stableExecutablePath = input.targetPath;\n const stableExecutableStat = await lstat(stableExecutablePath).catch(\n () => null\n );\n if (\n stableExecutableStat?.isFile() === true &&\n !stableExecutableStat.isSymbolicLink() &&\n (await hashDaemonBinaryFile(stableExecutablePath).catch(() => null)) ===\n expectedFingerprint\n ) {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `refresh_${input.operationName}_permissions`,\n pathInput: input.pathInput,\n targetPath: stableExecutablePath,\n run: async () => await chmod(stableExecutablePath, 0o700),\n });\n return stableExecutablePath;\n }\n\n await mkdir(dirname(stableExecutablePath), { recursive: true });\n const preparedPath = `${stableExecutablePath}.next-${String(process.pid)}`;\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `clear_prepared_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: preparedPath,\n run: async () => await rm(preparedPath, { force: true }),\n });\n try {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `prepare_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: preparedPath,\n run: async () => {\n await copyFile(sourcePath, preparedPath);\n await chmod(preparedPath, 0o700);\n },\n });\n const preparedFingerprint = await hashDaemonBinaryFile(preparedPath);\n if (preparedFingerprint !== expectedFingerprint) {\n throw new Error(\n \"OpenMeld could not verify the prepared Service carrier executable.\"\n );\n }\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `replace_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: stableExecutablePath,\n run: async () => await rename(preparedPath, stableExecutablePath),\n });\n return stableExecutablePath;\n } finally {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `clear_prepared_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: preparedPath,\n run: async () => await rm(preparedPath, { force: true }),\n }).catch(() => undefined);\n }\n}\n\nexport async function verifyDaemonActiveBundleIntegrity(\n activeBundle: DaemonActiveBundleState\n): Promise<boolean> {\n const expectedFingerprint = activeBundle.sourceDistFingerprint?.trim();\n if (\n !expectedFingerprint ||\n activeBundle.bundleFormat === \"legacy_linked_v1\"\n ) {\n return false;\n }\n const entryPath = await resolveDaemonBundleEntryPathFromState(activeBundle);\n if (!entryPath) {\n return false;\n }\n return (\n (await resolveInstalledDaemonBundleFingerprint(activeBundle)) ===\n expectedFingerprint\n );\n}\n\nasync function writeDaemonBundlePackageManifest(input: {\n bundleRootPath: string;\n daemonVersion: string;\n}): Promise<void> {\n const packageManifestPath = join(input.bundleRootPath, \"package.json\");\n await writeFile(\n packageManifestPath,\n `${JSON.stringify(\n {\n name: \"openmeld-daemon-service-bundle\",\n private: true,\n type: \"module\",\n version: input.daemonVersion,\n },\n null,\n 2\n )}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o600,\n }\n );\n}\n\nasync function copyDaemonBundleRuntimeDependencies(input: {\n bundleRootPath: string;\n sourcePackageRootPath: string;\n}): Promise<void> {\n const runtimeDependencies = await collectDaemonBundleRuntimeDependencyClosure(\n {\n sourcePackageRootPath: input.sourcePackageRootPath,\n }\n );\n\n const targetNodeModulesPath = join(input.bundleRootPath, \"node_modules\");\n await rm(targetNodeModulesPath, {\n recursive: true,\n force: true,\n });\n await mkdir(targetNodeModulesPath, { recursive: true });\n for (const runtimeDependency of runtimeDependencies) {\n await copyDaemonBundleDependencyDirectory({\n dependencyName: runtimeDependency.dependencyName,\n sourceDependencyPath: runtimeDependency.packageRootPath,\n targetNodeModulesPath,\n });\n }\n}\n\nasync function copyDaemonBundleDependencyDirectory(input: {\n dependencyName: string;\n sourceDependencyPath: string;\n targetNodeModulesPath: string;\n}): Promise<void> {\n if (!(await pathExists(input.sourceDependencyPath))) {\n throw new Error(\n `OpenMeld could not copy runtime dependency ${input.dependencyName} for background service bundling from ${input.sourceDependencyPath}. Run \\`pnpm install\\` and retry.`\n );\n }\n const targetDependencyPath = join(\n input.targetNodeModulesPath,\n ...input.dependencyName.split(\"/\")\n );\n await mkdir(dirname(targetDependencyPath), { recursive: true });\n await cp(input.sourceDependencyPath, targetDependencyPath, {\n recursive: true,\n force: true,\n dereference: true,\n preserveTimestamps: true,\n });\n}\n\nexport async function writeDaemonServiceLauncher(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await mkdir(daemonRuntimeServiceManagerPath(pathInput), { recursive: true });\n const targetPath = daemonServiceLauncherPath(pathInput);\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"npm\",\n operation: \"write_launcher\",\n pathInput,\n targetPath,\n run: async () =>\n await writeFile(\n targetPath,\n `${buildDaemonServiceLauncherSource(pathInput)}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o700,\n }\n ),\n });\n}\n\nexport async function writeDaemonServiceExecutableWrapper(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await mkdir(daemonRuntimeServiceManagerPath(pathInput), { recursive: true });\n await Promise.all(\n daemonServiceExecutableWrapperPaths(pathInput).map(async (wrapperPath) => {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"npm\",\n operation: \"write_executable_wrapper\",\n pathInput,\n targetPath: wrapperPath,\n run: async () => {\n await writeFile(\n wrapperPath,\n `${buildDaemonServiceExecutableWrapperSource(pathInput)}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o700,\n }\n );\n await chmod(wrapperPath, 0o700);\n },\n });\n })\n );\n}\n\nexport async function ensureDaemonServiceManagerExecutables(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await writeDaemonServiceLauncher(pathInput);\n await writeDaemonServiceExecutableWrapper(pathInput);\n}\n\nexport async function restoreDaemonActiveBundleStateSnapshot(\n snapshot: DaemonActiveBundleState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n if (!snapshot) {\n await rm(daemonServiceActiveBundlePath(pathInput), { force: true });\n return;\n }\n await mkdir(daemonRuntimeStateRootPath(pathInput), { recursive: true });\n await writeFile(\n daemonServiceActiveBundlePath(pathInput),\n `${JSON.stringify(snapshot, null, 2)}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o600,\n }\n );\n}\n\nexport async function clearDaemonServiceBundles(): Promise<void> {\n await Promise.all([\n rm(daemonServiceActiveBundlePath(), { force: true }),\n runAuditedServiceManagerCarrierMutation({\n operation: \"remove_launcher\",\n targetPath: daemonServiceLauncherPath(),\n run: async () => await rm(daemonServiceLauncherPath(), { force: true }),\n }),\n runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"remove_stable_binary\",\n targetPath: daemonServiceBinaryExecutablePath(),\n run: async () =>\n await rm(daemonServiceBinaryExecutablePath(), { force: true }),\n }),\n clearDaemonServiceUpdateWorkerBinaryExecutable(),\n ...daemonServiceExecutableWrapperPaths().map((wrapperPath) =>\n runAuditedServiceManagerCarrierMutation({\n operation: \"remove_executable_wrapper\",\n targetPath: wrapperPath,\n run: async () => await rm(wrapperPath, { force: true }),\n })\n ),\n rm(daemonRuntimeBundlesPath(), { recursive: true, force: true }),\n ]);\n}\n\nexport async function cleanupInactiveDaemonServiceBundles(\n input: { retainBundleIds?: string[] } = {}\n): Promise<void> {\n const [\n active,\n serviceContract,\n runtimeLease,\n registeredWorkerBundleIds,\n pendingUpdate,\n ] = await Promise.all([\n readDaemonActiveBundleState(),\n readDaemonServiceContract().catch(() => null),\n readDaemonRuntimeLease().catch(() => null),\n readDaemonServiceUpdateWorkerProtectedBundleIds(),\n readPendingDaemonServiceUpdate(),\n ]);\n const retain = new Set([\n ...(active ? [active.bundleId] : []),\n ...(serviceContract?.bundleId ? [serviceContract.bundleId] : []),\n ...(runtimeLease?.bundleId ? [runtimeLease.bundleId] : []),\n ...registeredWorkerBundleIds,\n ...(pendingUpdate?.preparedBundle.bundleFormat !== \"legacy_linked_v1\" &&\n pendingUpdate\n ? [pendingUpdate.preparedBundle.bundleId]\n : []),\n ...(input.retainBundleIds ?? []),\n ]);\n const bundleEntries = await readDirectoryNames(daemonRuntimeBundlesPath());\n for (const bundleId of bundleEntries) {\n if (retain.has(bundleId)) {\n continue;\n }\n const directory = resolveDaemonBundleRootPath(bundleId);\n if (process.platform === \"win32\") {\n // Includes independent maintenance copies. The kernel protects a still\n // running old worker after the registration selects its replacement.\n await pruneWindowsBinaryBundle(directory);\n } else {\n await rm(directory, { recursive: true, force: true });\n }\n }\n}\n\nasync function resolveDaemonBundleSourceProvenance(\n explicitPath?: string\n): Promise<{\n sourceEntryScriptPath: string;\n sourceDistRootPath: string;\n sourcePackageRootPath: string;\n sourceKind: DaemonBundleSourceKind;\n}> {\n const sourceEntryScriptPath = await resolveCliScriptPath(explicitPath);\n const sourceDistRootPath = dirname(sourceEntryScriptPath);\n const sourcePackageRootPath = dirname(sourceDistRootPath);\n return {\n sourceEntryScriptPath,\n sourceDistRootPath,\n sourcePackageRootPath,\n sourceKind: inferDaemonBundleSourceKind(sourcePackageRootPath),\n };\n}\n\nasync function readDaemonSourcePackageVersion(\n sourcePackageRootPath: string\n): Promise<string> {\n const packageManifestPath = join(sourcePackageRootPath, \"package.json\");\n const packageManifestRaw = await readFile(packageManifestPath, \"utf8\").catch(\n (error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n throw new Error(\n `OpenMeld could not verify the CLI source version because ${packageManifestPath} is missing.`\n );\n }\n throw error;\n }\n );\n let packageManifest: { name?: unknown; version?: unknown };\n try {\n packageManifest = JSON.parse(packageManifestRaw) as {\n name?: unknown;\n version?: unknown;\n };\n } catch {\n throw new Error(\n `OpenMeld could not verify the CLI source version because ${packageManifestPath} is not valid JSON.`\n );\n }\n const version =\n packageManifest.name === \"openmeld\" &&\n typeof packageManifest.version === \"string\"\n ? packageManifest.version.trim()\n : \"\";\n if (!version) {\n throw new Error(\n `OpenMeld could not verify the CLI source version from ${packageManifestPath}.`\n );\n }\n return version;\n}\n\nasync function resolveCliScriptPath(explicitPath?: string): Promise<string> {\n const rawPath = explicitPath ?? process.argv[1];\n if (!rawPath) {\n throw new Error(\n \"Cannot determine CLI script path for OpenMeld background service bundle.\"\n );\n }\n const resolvedPath = await realpath(rawPath).catch(async () => {\n const fallbackPath = await resolvePreferredCliScriptPath(rawPath);\n if (fallbackPath) {\n return fallbackPath;\n }\n throw new Error(\n `OpenMeld could not resolve a CLI dist entry for service bundling from ${rawPath}.`\n );\n });\n const preferredPath = await resolvePreferredCliScriptPath(resolvedPath);\n if (preferredPath) {\n return preferredPath;\n }\n throw new Error(\n `OpenMeld could not find a supported CLI dist entry for service bundling from ${resolvedPath}.`\n );\n}\n\nfunction createBundleId(version: string): string {\n const normalizedVersion = version.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n return `${normalizedVersion}-${Date.now()}`;\n}\n\nasync function computeDaemonSourceDistFingerprint(\n sourceDistRootPath: string\n): Promise<string> {\n const filePaths = await listDaemonSourceDistFiles(sourceDistRootPath);\n const hash = createHash(\"sha256\");\n for (const filePath of filePaths) {\n const relativePath = relative(sourceDistRootPath, filePath).replaceAll(\n \"\\\\\",\n \"/\"\n );\n hash.update(relativePath, \"utf8\");\n hash.update(\"\\0\", \"utf8\");\n hash.update(await readFile(filePath));\n hash.update(\"\\0\", \"utf8\");\n }\n return hash.digest(\"hex\");\n}\n\nasync function listDaemonSourceDistFiles(path: string): Promise<string[]> {\n return await listIncludedDaemonSourceDistFiles(path, path);\n}\n\nasync function listIncludedDaemonSourceDistFiles(\n sourceDistRootPath: string,\n currentPath: string\n): Promise<string[]> {\n const entries = await readdir(currentPath, { withFileTypes: true });\n const filePaths: string[] = [];\n\n for (const entry of entries) {\n const entryPath = join(currentPath, entry.name);\n if (!isDaemonSourceDistPathIncluded(sourceDistRootPath, entryPath)) {\n continue;\n }\n if (entry.isDirectory()) {\n filePaths.push(\n ...(await listIncludedDaemonSourceDistFiles(\n sourceDistRootPath,\n entryPath\n ))\n );\n continue;\n }\n if (entry.isFile()) {\n filePaths.push(entryPath);\n }\n }\n\n return filePaths.sort((left, right) => {\n if (left === right) {\n return 0;\n }\n return left < right ? -1 : 1;\n });\n}\n\nfunction isDaemonSourceDistPathIncluded(\n sourceDistRootPath: string,\n candidatePath: string\n): boolean {\n const relativePath = relative(sourceDistRootPath, candidatePath).replaceAll(\n \"\\\\\",\n \"/\"\n );\n if (!relativePath || relativePath.startsWith(\"..\")) {\n return true;\n }\n const topLevelPathSegment = relativePath.split(\"/\")[0] ?? \"\";\n return !DAEMON_SOURCE_DIST_IGNORED_TOP_LEVEL_DIRS.has(topLevelPathSegment);\n}\n\nasync function collectDaemonBundleRuntimeDependencyClosure(input: {\n sourcePackageRootPath: string;\n}): Promise<Array<{ dependencyName: string; packageRootPath: string }>> {\n const packageManifestPath = join(input.sourcePackageRootPath, \"package.json\");\n const packageManifestRaw = await readFile(packageManifestPath, \"utf8\").catch(\n (error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n throw new Error(\n `OpenMeld could not find the CLI package manifest for background service bundling at ${packageManifestPath}.`\n );\n }\n throw error;\n }\n );\n const packageManifest = JSON.parse(packageManifestRaw) as {\n dependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n };\n const resolvedDependencies = new Map<string, string>();\n const queue = [\n ...Object.keys(packageManifest.dependencies ?? {}).map(\n (dependencyName) => ({\n dependencyName,\n required: true,\n resolverPackageRootPath: input.sourcePackageRootPath,\n })\n ),\n ...Object.keys(packageManifest.optionalDependencies ?? {}).map(\n (dependencyName) => ({\n dependencyName,\n required: false,\n resolverPackageRootPath: input.sourcePackageRootPath,\n })\n ),\n ];\n\n while (queue.length > 0) {\n const nextDependency = queue.shift();\n if (!nextDependency) {\n continue;\n }\n if (isTypeOnlyDependencyName(nextDependency.dependencyName)) {\n continue;\n }\n if (resolvedDependencies.has(nextDependency.dependencyName)) {\n continue;\n }\n const dependencyManifest = await readDaemonBundleDependencyManifest({\n dependencyName: nextDependency.dependencyName,\n required: nextDependency.required,\n resolverPackageRootPath: nextDependency.resolverPackageRootPath,\n });\n if (!dependencyManifest) {\n continue;\n }\n\n resolvedDependencies.set(\n nextDependency.dependencyName,\n dependencyManifest.packageRootPath\n );\n const nestedRequiredDependencies = Object.keys(\n dependencyManifest.dependencies ?? {}\n );\n const nestedOptionalDependencies = Object.keys(\n dependencyManifest.optionalDependencies ?? {}\n );\n const nestedPeerDependencies = Object.keys(\n dependencyManifest.peerDependencies ?? {}\n );\n for (const dependencyName of nestedRequiredDependencies) {\n queue.push({\n dependencyName,\n required: true,\n resolverPackageRootPath: dependencyManifest.packageRootPath,\n });\n }\n for (const dependencyName of nestedOptionalDependencies) {\n queue.push({\n dependencyName,\n required: false,\n resolverPackageRootPath: dependencyManifest.packageRootPath,\n });\n }\n for (const dependencyName of nestedPeerDependencies) {\n queue.push({\n dependencyName,\n required: false,\n resolverPackageRootPath: dependencyManifest.packageRootPath,\n });\n }\n }\n\n return [...resolvedDependencies.entries()]\n .map(([dependencyName, packageRootPath]) => ({\n dependencyName,\n packageRootPath,\n }))\n .sort((left, right) =>\n left.dependencyName.localeCompare(right.dependencyName)\n );\n}\n\nfunction isTypeOnlyDependencyName(dependencyName: string): boolean {\n return dependencyName.startsWith(\"@types/\");\n}\n\nasync function readDaemonBundleDependencyManifest(input: {\n dependencyName: string;\n required: boolean;\n resolverPackageRootPath: string;\n}): Promise<{\n packageRootPath: string;\n dependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n} | null> {\n const dependencyPackageRootPath = await resolveDaemonDependencyPackageRoot({\n dependencyName: input.dependencyName,\n resolverPackageRootPath: input.resolverPackageRootPath,\n required: input.required,\n });\n if (!dependencyPackageRootPath) {\n return null;\n }\n const dependencyManifestPath = join(\n dependencyPackageRootPath,\n \"package.json\"\n );\n const dependencyManifestRaw = await readFile(\n dependencyManifestPath,\n \"utf8\"\n ).catch((error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n if (!input.required) {\n return null;\n }\n throw new Error(\n `OpenMeld could not find runtime dependency ${input.dependencyName} for background service bundling at ${dependencyManifestPath}. Run \\`pnpm install\\` and retry.`\n );\n }\n throw error;\n });\n if (dependencyManifestRaw === null) {\n return null;\n }\n const dependencyManifest = JSON.parse(dependencyManifestRaw) as {\n dependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n return {\n packageRootPath: dependencyPackageRootPath,\n ...dependencyManifest,\n };\n}\n\nasync function resolveDaemonDependencyPackageRoot(input: {\n dependencyName: string;\n resolverPackageRootPath: string;\n required: boolean;\n}): Promise<string | null> {\n const resolver = createRequire(\n join(input.resolverPackageRootPath, \"package.json\")\n );\n const dependencyPackageRootPath =\n await resolveDaemonDependencyPackageRootFromManifest({\n dependencyName: input.dependencyName,\n resolver,\n });\n if (dependencyPackageRootPath) {\n return dependencyPackageRootPath;\n }\n try {\n const dependencyEntryPath = await realpath(\n resolver.resolve(input.dependencyName)\n );\n return await findDaemonDependencyPackageRoot(dependencyEntryPath);\n } catch (error) {\n if (isPackageEntryResolutionError(error)) {\n const dependencyPackageRootPath =\n await findDaemonDependencyPackageRootFromResolutionPaths({\n dependencyName: input.dependencyName,\n resolver,\n });\n if (dependencyPackageRootPath) {\n return dependencyPackageRootPath;\n }\n if (!input.required) {\n return null;\n }\n throw new Error(\n `OpenMeld could not find runtime dependency ${input.dependencyName} for background service bundling from ${input.resolverPackageRootPath}. Run \\`pnpm install\\` and retry.`\n );\n }\n throw error;\n }\n}\n\nasync function resolveDaemonDependencyPackageRootFromManifest(input: {\n dependencyName: string;\n resolver: NodeJS.Require;\n}): Promise<string | null> {\n try {\n const dependencyManifestPath = await realpath(\n input.resolver.resolve(`${input.dependencyName}/package.json`)\n );\n return await findDaemonDependencyPackageRootFromManifestPath({\n dependencyManifestPath,\n dependencyName: input.dependencyName,\n });\n } catch (error) {\n if (isPackageEntryResolutionError(error)) {\n return null;\n }\n throw error;\n }\n}\n\nasync function findDaemonDependencyPackageRootFromManifestPath(input: {\n dependencyManifestPath: string;\n dependencyName: string;\n}): Promise<string | null> {\n let currentPath = dirname(input.dependencyManifestPath);\n while (true) {\n const packageManifestPath = join(currentPath, \"package.json\");\n const packageManifestRaw = await readFile(\n packageManifestPath,\n \"utf8\"\n ).catch((error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (packageManifestRaw !== null) {\n const packageManifest = JSON.parse(packageManifestRaw) as {\n name?: unknown;\n };\n if (packageManifest.name === input.dependencyName) {\n return currentPath;\n }\n }\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n currentPath = parentPath;\n }\n}\n\nasync function findDaemonDependencyPackageRootFromResolutionPaths(input: {\n dependencyName: string;\n resolver: NodeJS.Require;\n}): Promise<string | null> {\n const resolutionPaths = input.resolver.resolve.paths(input.dependencyName);\n if (!resolutionPaths) {\n return null;\n }\n for (const nodeModulesPath of resolutionPaths) {\n const candidatePackageRootPath = join(\n nodeModulesPath,\n ...input.dependencyName.split(\"/\")\n );\n if (await pathExists(join(candidatePackageRootPath, \"package.json\"))) {\n return await realpath(candidatePackageRootPath);\n }\n }\n return null;\n}\n\nasync function findDaemonDependencyPackageRoot(\n resolvedEntryPath: string\n): Promise<string> {\n let currentPath = dirname(resolvedEntryPath);\n while (true) {\n const packageManifestPath = join(currentPath, \"package.json\");\n if (await pathExists(packageManifestPath)) {\n return currentPath;\n }\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n break;\n }\n currentPath = parentPath;\n }\n throw new Error(\n `OpenMeld could not determine the package root for background service dependency entry ${resolvedEntryPath}.`\n );\n}\n\nfunction buildDaemonServiceLauncherSource(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const activeBundleStatePath = JSON.stringify(\n daemonServiceActiveBundlePath(pathInput)\n );\n const installStatePath = JSON.stringify(daemonStatePath(pathInput));\n const bundleRootPath = JSON.stringify(daemonRuntimeBundlesPath(pathInput));\n const allowWorkspaceBundleSource = JSON.stringify(\n resolveOpenMeldEnvPreset(pathInput) === \"dev-local\"\n );\n return `import { access, readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport { spawn } from \"node:child_process\";\n\nconst ACTIVE_BUNDLE_PATH = ${activeBundleStatePath};\nconst INSTALL_STATE_PATH = ${installStatePath};\nconst BUNDLE_ROOT_PATH = ${bundleRootPath};\nconst ALLOW_WORKSPACE_BUNDLE_SOURCE = ${allowWorkspaceBundleSource};\n\nconst ACTIVE_BUNDLE_SCHEMA = \"openmeld-daemon-active-bundle-v2\";\nconst ACTIVE_BUNDLE_LEGACY_SCHEMA = \"openmeld-daemon-active-bundle-v1\";\nconst INSTALL_STATE_SCHEMA = \"openmeld-daemon-install-v1\";\n\nasync function readJsonFile(path) {\n try {\n return JSON.parse(await readFile(path, \"utf8\"));\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n}\n\nasync function pathExists(path) {\n try {\n await access(path);\n return true;\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nfunction normalizeInstallState(parsed) {\n if (!parsed || parsed.schema !== INSTALL_STATE_SCHEMA || typeof parsed.daemonVersion !== \"string\" || parsed.daemonVersion.length === 0) {\n return null;\n }\n return {\n daemonVersion: parsed.daemonVersion,\n };\n}\n\nfunction normalizeBundleState(parsed) {\n if (\n parsed &&\n parsed.v === 2 &&\n parsed.schema === ACTIVE_BUNDLE_SCHEMA &&\n typeof parsed.bundleId === \"string\" &&\n parsed.bundleId.length > 0 &&\n typeof parsed.daemonVersion === \"string\" &&\n parsed.daemonVersion.length > 0 &&\n typeof parsed.entryScriptRelativePath === \"string\" &&\n parsed.entryScriptRelativePath.length > 0 &&\n (parsed.bundleFormat === \"self_contained_v1\" || parsed.bundleFormat === \"legacy_linked_v1\")\n ) {\n return parsed;\n }\n if (\n parsed &&\n parsed.v === 1 &&\n parsed.schema === ACTIVE_BUNDLE_LEGACY_SCHEMA &&\n typeof parsed.bundleId === \"string\" &&\n parsed.bundleId.length > 0 &&\n typeof parsed.daemonVersion === \"string\" &&\n parsed.daemonVersion.length > 0 &&\n typeof parsed.entryScriptRelativePath === \"string\" &&\n parsed.entryScriptRelativePath.length > 0\n ) {\n return {\n ...parsed,\n bundleFormat: \"legacy_linked_v1\",\n };\n }\n return null;\n}\n\nfunction normalizeBundlePackageManifest(parsed) {\n if (!parsed || typeof parsed.version !== \"string\" || parsed.version.length === 0) {\n return null;\n }\n return {\n version: parsed.version,\n };\n}\n\nfunction uniqueNonEmptyStrings(values) {\n return [...new Set(values.filter((value) => typeof value === \"string\" && value.length > 0))];\n}\n\nasync function findFallbackSelfContainedBundle(input) {\n const directories = await readdir(BUNDLE_ROOT_PATH, { withFileTypes: true }).catch((error) => {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return [];\n }\n throw error;\n });\n const entryScriptRelativePaths = uniqueNonEmptyStrings([\n input.preferredEntryScriptRelativePath,\n \"dist/openmeld.js\",\n \"dist/openmeld-dev.js\",\n ]);\n const candidates = [];\n for (const directory of directories) {\n if (!directory.isDirectory()) {\n continue;\n }\n const bundleId = directory.name;\n const bundlePath = join(BUNDLE_ROOT_PATH, bundleId);\n const manifest = normalizeBundlePackageManifest(\n await readJsonFile(join(bundlePath, \"package.json\"))\n );\n if (manifest?.version !== input.installState.daemonVersion) {\n continue;\n }\n for (const entryScriptRelativePath of entryScriptRelativePaths) {\n const entryPath = join(bundlePath, entryScriptRelativePath);\n if (!(await pathExists(entryPath))) {\n continue;\n }\n const entryStat = await stat(entryPath).catch(() => null);\n candidates.push({\n bundleId,\n entryPath,\n entryScriptRelativePath,\n mtimeMs: entryStat?.mtimeMs ?? 0,\n });\n break;\n }\n }\n candidates.sort((a, b) => {\n if (b.mtimeMs !== a.mtimeMs) {\n return b.mtimeMs - a.mtimeMs;\n }\n return b.bundleId.localeCompare(a.bundleId);\n });\n return candidates[0] ?? null;\n}\n\nasync function persistFallbackActiveBundleState(input) {\n const now = new Date().toISOString();\n const bundleRootPath = join(BUNDLE_ROOT_PATH, input.bundleId);\n const nextState = {\n v: 2,\n schema: ACTIVE_BUNDLE_SCHEMA,\n bundleId: input.bundleId,\n daemonVersion: input.installState.daemonVersion,\n entryScriptRelativePath: input.entryScriptRelativePath,\n bundleFormat: \"self_contained_v1\",\n sourceEntryScriptPath: input.entryPath,\n sourcePackageRootPath: bundleRootPath,\n sourceDistRootPath: join(bundleRootPath, \"dist\"),\n sourceDistFingerprint: null,\n sourceKind: \"package_install\",\n createdAt: input.previousBundleState?.createdAt ?? now,\n updatedAt: now,\n };\n await writeFile(ACTIVE_BUNDLE_PATH, \\`\\${JSON.stringify(nextState, null, 2)}\\\\n\\`, {\n encoding: \"utf8\",\n mode: 0o600,\n }).catch((error) => {\n console.error(\\`OpenMeld Service launcher recovered a matching bundle but could not update active bundle state: \\${String(error)}\\`);\n });\n}\n\nasync function resolveEntryPath() {\n const installState = normalizeInstallState(await readJsonFile(INSTALL_STATE_PATH));\n const bundleState = normalizeBundleState(await readJsonFile(ACTIVE_BUNDLE_PATH));\n if (!installState) {\n throw new Error(\"OpenMeld Service launcher could not read a valid install state.\");\n }\n if (!bundleState) {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: null,\n });\n if (!fallback) {\n throw new Error(\"OpenMeld Service launcher could not read a valid active bundle state.\");\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: null,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state was missing or invalid.\\`);\n return fallback.entryPath;\n }\n if (bundleState.bundleFormat !== \"self_contained_v1\") {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\\`OpenMeld Service launcher refused to start legacy bundle format \\${String(bundleState.bundleFormat)}.\\`);\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state used legacy bundle format \\${String(bundleState.bundleFormat)}.\\`);\n return fallback.entryPath;\n }\n if (bundleState.sourceKind === \"workspace\" && !ALLOW_WORKSPACE_BUNDLE_SOURCE) {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\"OpenMeld Service launcher refused to start repo-local workspace service files in this lane. Repo-local service files are only allowed through \\`openmeld-dev\\`.\");\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state pointed at a repo-local workspace bundle in this lane.\\`);\n return fallback.entryPath;\n }\n if (bundleState.daemonVersion !== installState.daemonVersion) {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\\`OpenMeld Service launcher detected bundle version drift: bundle v\\${String(bundleState.daemonVersion)} != install v\\${String(installState.daemonVersion)}.\\`);\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state had version drift.\\`);\n return fallback.entryPath;\n }\n const entryPath = join(BUNDLE_ROOT_PATH, bundleState.bundleId, bundleState.entryScriptRelativePath);\n if (await pathExists(entryPath)) {\n return entryPath;\n }\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\\`OpenMeld Service launcher could not find active bundle entry \\${entryPath}.\\`);\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle entry was missing.\\`);\n return fallback.entryPath;\n}\n\nasync function main() {\n const entryPath = await resolveEntryPath();\n const child = spawn(process.execPath, [entryPath, ...process.argv.slice(2)], {\n stdio: \"inherit\",\n env: process.env,\n windowsHide: true,\n });\n\n const forwardSignal = (signal) => {\n if (!child.killed) {\n child.kill(signal);\n }\n };\n\n for (const signal of [\"SIGINT\", \"SIGTERM\"]) {\n process.on(signal, () => {\n forwardSignal(signal);\n });\n }\n\n child.once(\"error\", (error) => {\n console.error(String(error));\n process.exitCode = 1;\n });\n\n child.once(\"close\", (code, signal) => {\n if (typeof code === \"number\") {\n process.exitCode = code;\n return;\n }\n if (signal) {\n process.kill(process.pid, signal);\n return;\n }\n process.exitCode = 1;\n });\n}\n\nawait main();`;\n}\n\nfunction buildDaemonServiceExecutableWrapperSource(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return [\n \"#!/bin/sh\",\n `exec ${quoteShellSingle(process.execPath)} ${quoteShellSingle(\n daemonServiceLauncherPath(pathInput)\n )} \"$@\"`,\n ].join(\"\\n\");\n}\n\nfunction quoteShellSingle(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\"'\\\"'\")}'`;\n}\n\nasync function readDirectoryNames(path: string): Promise<string[]> {\n const entries = await readdir(path, { withFileTypes: true }).catch(\n (error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return [];\n }\n throw error;\n }\n );\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n}\n\nfunction inferDaemonBundleSourceKind(\n sourcePackageRootPath: string\n): DaemonBundleSourceKind {\n const normalized = sourcePackageRootPath.replaceAll(\"\\\\\", \"/\").toLowerCase();\n if (normalized.includes(\"/.npm/\") && normalized.includes(\"_npx\")) {\n return DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE;\n }\n if (normalized.includes(\"/node_modules/\")) {\n return DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL;\n }\n if (normalized.includes(\"/openmeld/\")) {\n return DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE;\n }\n return DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN;\n}\n\nfunction isDaemonBundleFormat(value: unknown): value is DaemonBundleFormat {\n return (\n value === \"legacy_linked_v1\" ||\n value === \"self_contained_v1\" ||\n value === \"binary_v1\"\n );\n}\n\nfunction isDaemonBundleSourceKind(\n value: unknown\n): value is DaemonBundleSourceKind {\n return (\n value === DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE ||\n value === DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL ||\n value === DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE ||\n value === DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN\n );\n}\n\nfunction isPackageEntryResolutionError(error: unknown): boolean {\n const code = getErrorCode(error);\n return (\n code === \"MODULE_NOT_FOUND\" || code === \"ERR_PACKAGE_PATH_NOT_EXPORTED\"\n );\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nasync function resolvePreferredCliScriptPath(\n rawPath: string\n): Promise<string | null> {\n const preferredScriptNames = buildPreferredCliScriptNames(rawPath);\n const candidateRoots = [\n dirname(rawPath),\n join(process.cwd(), \"dist\"),\n join(process.cwd(), \"clients\", \"openmeld-cli\", \"dist\"),\n dirname(fileURLToPath(import.meta.url)),\n join(dirname(fileURLToPath(import.meta.url)), \"..\", \"dist\"),\n ];\n for (const scriptName of preferredScriptNames) {\n for (const candidateRoot of candidateRoots) {\n const candidatePath = join(candidateRoot, scriptName);\n if (await pathExists(candidatePath)) {\n return candidatePath;\n }\n }\n }\n return null;\n}\n\nfunction buildPreferredCliScriptNames(rawPath: string): string[] {\n const requestedScriptName = basename(rawPath).endsWith(\".js\")\n ? basename(rawPath)\n : `${basename(rawPath)}.js`;\n if (isSupportedDaemonCliEntryName(requestedScriptName)) {\n return [requestedScriptName];\n }\n if (String(process.env.OPENMELD_DEV_MODE ?? \"\").trim() === \"1\") {\n return [...DAEMON_CLI_ENTRY_NAMES];\n }\n return [...DAEMON_CLI_ENTRY_NAMES].reverse();\n}\n\nfunction isSupportedDaemonCliEntryName(\n value: string\n): value is (typeof DAEMON_CLI_ENTRY_NAMES)[number] {\n return DAEMON_CLI_ENTRY_NAMES.includes(\n value as (typeof DAEMON_CLI_ENTRY_NAMES)[number]\n );\n}\n\nfunction getErrorCode(error: unknown): string | undefined {\n if (!error || typeof error !== \"object\") {\n return undefined;\n }\n const code = (error as { code?: unknown }).code;\n return typeof code === \"string\" ? code : undefined;\n}\n","import {\n type OpenMeldPathResolutionInput,\n openMeldManagedBinaryPath,\n openMeldVersionsDir,\n} from \"../../config/paths\";\n\nconst MANAGED_BINARY_NAMES = [\"openmeld.exe\", \"openmeld\"];\nconst PATH_BOUNDARY_PATTERN = /[\\s\"'<>]/u;\nconst TRAILING_SLASHES_PATTERN = /\\/+$/u;\nconst VERSION_SEGMENT_BOUNDARY_PATTERN = /[\\s\"'<>/]/u;\n\nexport function isOpenMeldManagedBinaryPath(\n value: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): boolean {\n const normalizedPath = normalizeManagedBinaryPathText(value);\n if (\n normalizedPath ===\n normalizeManagedBinaryPathText(openMeldManagedBinaryPath(pathInput))\n ) {\n return true;\n }\n return isManagedVersionBinaryPath(normalizedPath, pathInput);\n}\n\nexport function containsOpenMeldManagedBinaryPath(\n value: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): boolean {\n const normalizedValue = normalizeManagedBinaryPathText(value);\n return (\n containsExactManagedPath(\n normalizedValue,\n normalizeManagedBinaryPathText(openMeldManagedBinaryPath(pathInput))\n ) || containsManagedVersionBinaryPath(normalizedValue, pathInput)\n );\n}\n\nexport function resolveOpenMeldManagedVersionBinaryRootPath(\n value: string\n): string | null {\n const normalizedPath = normalizeManagedBinaryPathText(value);\n const segments = normalizedPath.split(\"/\");\n const binaryName = segments.pop();\n const versionSegment = segments.pop();\n const versionsDirectory = segments.pop();\n if (\n !MANAGED_BINARY_NAMES.includes(binaryName ?? \"\") ||\n versionsDirectory !== \"versions\" ||\n !versionSegment ||\n !isValidManagedVersionSegment(versionSegment)\n ) {\n return null;\n }\n const rootPath = segments.join(\"/\");\n if (rootPath.length > 0) {\n return rootPath;\n }\n return normalizedPath.startsWith(\"/\") ? \"/\" : null;\n}\n\nfunction isManagedVersionBinaryPath(\n normalizedPath: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const versionsRoot = normalizeVersionsRoot(pathInput);\n if (!normalizedPath.startsWith(versionsRoot)) {\n return false;\n }\n const relative = normalizedPath.slice(versionsRoot.length);\n const segments = relative.split(\"/\");\n const versionSegment = segments[0] ?? \"\";\n const binaryName = segments[1] ?? \"\";\n return (\n segments.length === 2 &&\n versionSegment.length > 0 &&\n MANAGED_BINARY_NAMES.includes(binaryName)\n );\n}\n\nfunction containsManagedVersionBinaryPath(\n normalizedValue: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const versionsRoot = normalizeVersionsRoot(pathInput);\n let index = normalizedValue.indexOf(versionsRoot);\n while (index >= 0) {\n const before = index > 0 ? (normalizedValue[index - 1] ?? \"\") : \"\";\n const afterRoot = normalizedValue.slice(index + versionsRoot.length);\n const versionSeparatorIndex = afterRoot.indexOf(\"/\");\n if (\n isPathBoundary(before) &&\n versionSeparatorIndex > 0 &&\n isValidManagedVersionSegment(afterRoot.slice(0, versionSeparatorIndex))\n ) {\n const afterVersion = afterRoot.slice(versionSeparatorIndex + 1);\n for (const binaryName of MANAGED_BINARY_NAMES) {\n if (afterVersion.startsWith(binaryName)) {\n const afterBinary = afterVersion[binaryName.length] ?? \"\";\n if (isPathBoundary(afterBinary)) {\n return true;\n }\n }\n }\n }\n index = normalizedValue.indexOf(versionsRoot, index + 1);\n }\n return false;\n}\n\nfunction containsExactManagedPath(\n normalizedValue: string,\n normalizedPath: string\n): boolean {\n let index = normalizedValue.indexOf(normalizedPath);\n while (index >= 0) {\n const before = index > 0 ? (normalizedValue[index - 1] ?? \"\") : \"\";\n const after = normalizedValue[index + normalizedPath.length] ?? \"\";\n if (isPathBoundary(before) && isPathBoundary(after)) {\n return true;\n }\n index = normalizedValue.indexOf(normalizedPath, index + 1);\n }\n return false;\n}\n\nfunction normalizeVersionsRoot(pathInput: OpenMeldPathResolutionInput): string {\n return `${normalizeManagedBinaryPathText(\n openMeldVersionsDir(pathInput)\n ).replace(TRAILING_SLASHES_PATTERN, \"\")}/`;\n}\n\nfunction normalizeManagedBinaryPathText(value: string): string {\n return value.trim().replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nfunction isPathBoundary(value: string): boolean {\n return value === \"\" || PATH_BOUNDARY_PATTERN.test(value);\n}\n\nfunction isValidManagedVersionSegment(value: string): boolean {\n return value.length > 0 && !VERSION_SEGMENT_BOUNDARY_PATTERN.test(value);\n}\n","import { readFile } from \"node:fs/promises\";\nimport { relative, sep } from \"node:path\";\nimport { daemonRuntimeBundlesPath } from \"../../config/daemon-state\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldRootDir,\n} from \"../../config/paths\";\nimport {\n type OpenMeldDistribution,\n resolveOpenMeldDistribution,\n} from \"../../runtime/distribution\";\nimport { containsOpenMeldManagedBinaryPath } from \"./daemon-managed-binary-path\";\nimport {\n daemonServiceBinaryExecutablePath,\n daemonServiceExecutableWrapperPath,\n daemonServiceLauncherPath,\n daemonServiceLegacyWrapperPath,\n} from \"./daemon-service-bundle\";\nimport {\n type DaemonServiceCommandSpec,\n type DaemonServiceManager,\n resolveDaemonServiceManager,\n} from \"./daemon-service-manager\";\n\nexport async function assertDaemonMaintenanceInstallationOwnership(): Promise<void> {\n const manager = await resolveDaemonServiceManager();\n if (!manager) {\n throw new Error(\n \"OpenMeld cannot verify the background service installation.\"\n );\n }\n const status = await manager.status();\n // A missing registration can be restored from this installation's saved job.\n if (!status.installed) {\n return;\n }\n if (\n !(await matchesExpectedDaemonServiceManagerDefinition({\n controller: manager.controller,\n definitionPath: status.definitionPath ?? null,\n commandSpec: status.commandSpec,\n }))\n ) {\n throw new Error(\n \"OpenMeld background service belongs to a different installation. Automatic maintenance was stopped without changing it.\"\n );\n }\n}\n\nexport function matchesExpectedDaemonServiceManagerCommand(input: {\n controller: DaemonServiceManager[\"controller\"] | null;\n commandSummary: string;\n commandSpec?: DaemonServiceCommandSpec;\n definitionPath: string | null;\n distribution?: OpenMeldDistribution;\n includeLegacyExecutableWrappers?: boolean;\n pathInput?: OpenMeldPathResolutionInput;\n}): boolean {\n if (input.controller === \"windows-service\") {\n if (input.commandSpec) {\n return matchesWindowsTaskInstallation(input.commandSpec, input.pathInput);\n }\n return (\n typeof input.definitionPath === \"string\" &&\n input.definitionPath.length > 0 &&\n input.commandSummary.includes(input.definitionPath)\n );\n }\n if ((input.distribution ?? resolveOpenMeldDistribution()) === \"binary\") {\n if (input.controller === \"launchd\") {\n const stableExecutablePath = daemonServiceBinaryExecutablePath(\n input.pathInput\n );\n return [\n `${stableExecutablePath} service run`,\n `\"${stableExecutablePath}\" service run`,\n `'${stableExecutablePath}' service run`,\n ].some((expectedPrefix) => input.commandSummary.includes(expectedPrefix));\n }\n return containsOpenMeldManagedBinaryPath(\n input.commandSummary,\n input.pathInput\n );\n }\n return resolveExpectedDaemonServiceManagerCommandPaths({\n controller: input.controller,\n includeLegacyExecutableWrappers:\n input.includeLegacyExecutableWrappers === true,\n pathInput: input.pathInput,\n }).some((path) => input.commandSummary.includes(path));\n}\n\nexport async function matchesExpectedDaemonServiceManagerDefinition(input: {\n controller?: DaemonServiceManager[\"controller\"] | null;\n definitionPath: string | null;\n commandSpec?: DaemonServiceCommandSpec;\n distribution?: OpenMeldDistribution;\n pathInput?: OpenMeldPathResolutionInput;\n}): Promise<boolean> {\n if (input.controller === \"windows-service\" && input.commandSpec) {\n return matchesWindowsTaskInstallation(input.commandSpec, input.pathInput);\n }\n if (\n typeof input.definitionPath !== \"string\" ||\n input.definitionPath.trim().length === 0\n ) {\n return false;\n }\n\n const definition = await readFile(input.definitionPath, \"utf8\").catch(\n () => null\n );\n if (definition === null) {\n return false;\n }\n\n if ((input.distribution ?? resolveOpenMeldDistribution()) === \"binary\") {\n if (input.controller === \"launchd\") {\n const stableExecutablePath = daemonServiceBinaryExecutablePath(\n input.pathInput\n );\n return definition.includes(`<string>${stableExecutablePath}</string>`);\n }\n return containsOpenMeldManagedBinaryPath(definition, input.pathInput);\n }\n\n return resolveExpectedDaemonServiceManagerCommandPaths({\n controller: input.controller ?? null,\n pathInput: input.pathInput,\n }).some((path) => definition.includes(path));\n}\n\nfunction matchesWindowsTaskInstallation(\n spec: DaemonServiceCommandSpec,\n pathInput: OpenMeldPathResolutionInput = {}\n): boolean {\n if (\n resolveOpenMeldRootDir({ env: spec.env }) !==\n resolveOpenMeldRootDir(pathInput)\n ) {\n return false;\n }\n if (spec.args[0] === daemonServiceLauncherPath(pathInput)) {\n return spec.args[1] === \"service\" && spec.args[2] === \"run\";\n }\n const relativeExecutable = relative(\n daemonRuntimeBundlesPath(pathInput),\n spec.executable\n ).split(sep);\n return (\n relativeExecutable.length === 2 &&\n relativeExecutable[0] !== \"..\" &&\n relativeExecutable[1]?.toLowerCase() === \"openmeld.exe\" &&\n spec.args[0] === \"service\" &&\n spec.args[1] === \"run\" &&\n spec.args[2] === \"--mode\" &&\n spec.args[3] === \"foreground\" &&\n (spec.args.length === 4 ||\n (spec.args.length === 6 &&\n spec.args[4] === \"--account-admission-id\" &&\n Boolean(spec.args[5])))\n );\n}\n\nfunction resolveExpectedDaemonServiceManagerCommandPaths(input: {\n controller: DaemonServiceManager[\"controller\"] | null;\n includeLegacyExecutableWrappers?: boolean;\n pathInput?: OpenMeldPathResolutionInput;\n}): string[] {\n if (input.controller === \"launchd\") {\n return [\n daemonServiceExecutableWrapperPath(input.pathInput),\n ...(input.includeLegacyExecutableWrappers === true\n ? [daemonServiceLegacyWrapperPath(input.pathInput)]\n : []),\n ];\n }\n return [daemonServiceLauncherPath(input.pathInput)];\n}\n","import { basename } from \"node:path\";\nimport {\n daemonRuntimeBundlesPath,\n daemonServiceRecognizedExecutablePaths,\n} from \"../../config/daemon-state\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { isOpenMeldManagedBinaryPath } from \"./daemon-managed-binary-path\";\n\nconst COMMAND_TOKEN_PATTERN = /\"([^\"]*)\"|'([^']*)'|(\\S+)/g;\nconst COMMAND_ARGUMENT_BOUNDARY_PATTERN = /\\s/u;\n\nexport type DaemonServiceProcessMode = \"foreground\" | \"background\" | null;\n\nexport type DaemonServiceProcessCommand = {\n action: \"run\" | \"start\";\n mode: DaemonServiceProcessMode;\n};\n\nexport function tokenizeDaemonCommand(command: string): string[] {\n const tokens: string[] = [];\n for (const match of command.matchAll(COMMAND_TOKEN_PATTERN)) {\n const token = match[1] ?? match[2] ?? match[3];\n if (token) {\n tokens.push(token);\n }\n }\n return tokens;\n}\n\nexport function normalizeDaemonCommandPath(path: string): string {\n return path.trim().replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nexport function daemonCommandContainsExactPath(\n command: string,\n path: string\n): boolean {\n const normalizedCommand = normalizeDaemonCommandPath(command);\n const normalizedPath = normalizeDaemonCommandPath(path);\n let pathIndex = normalizedCommand.indexOf(normalizedPath);\n\n while (pathIndex >= 0) {\n const beforePath = normalizedCommand[pathIndex - 1];\n const afterPath = normalizedCommand[pathIndex + normalizedPath.length];\n if (\n isCommandArgumentBoundary(beforePath) &&\n isCommandArgumentBoundary(afterPath)\n ) {\n return true;\n }\n pathIndex = normalizedCommand.indexOf(\n normalizedPath,\n pathIndex + normalizedPath.length\n );\n }\n\n return false;\n}\n\nexport function extractDaemonCommandEntryPath(\n command: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): string | null {\n const unquotedWrapperPath = extractUnquotedDaemonWrapperPath(\n command,\n pathInput\n );\n if (unquotedWrapperPath) {\n return unquotedWrapperPath;\n }\n\n const tokens = tokenizeDaemonCommand(command);\n if (tokens.length === 0) {\n return null;\n }\n const serviceRunIndex = findDaemonServiceCommandIndex(tokens);\n const candidateTokens =\n serviceRunIndex > 0 ? tokens.slice(0, serviceRunIndex) : tokens;\n\n for (let index = candidateTokens.length - 1; index >= 0; index -= 1) {\n const token = candidateTokens[index];\n if (!(token && looksLikeDaemonEntryPath(token, pathInput))) {\n continue;\n }\n return token;\n }\n\n return null;\n}\n\nexport function isDaemonRuntimeProcessCommand(command: string): boolean {\n const serviceCommand = parseDaemonServiceProcessCommand(command);\n return (\n serviceCommand?.action === \"run\" ||\n (serviceCommand?.action === \"start\" && serviceCommand.mode === \"foreground\")\n );\n}\n\nexport function parseDaemonServiceProcessCommand(\n command: string\n): DaemonServiceProcessCommand | null {\n const tokens = tokenizeDaemonCommand(command).map((token) =>\n token.toLowerCase()\n );\n const serviceCommandIndex = findDaemonServiceCommandIndex(tokens);\n if (serviceCommandIndex < 0) {\n return null;\n }\n\n const action = tokens[serviceCommandIndex + 1];\n if (action !== \"run\" && action !== \"start\") {\n return null;\n }\n\n return {\n action,\n mode: resolveDaemonServiceProcessMode(\n tokens.slice(serviceCommandIndex + 2)\n ),\n };\n}\n\nexport function resolveDaemonBundleIdFromEntryPath(\n entryPath: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): string | null {\n const normalizedEntryPath = normalizeDaemonCommandPath(entryPath);\n const normalizedBundleRoot = `${normalizeDaemonCommandPath(\n daemonRuntimeBundlesPath(pathInput)\n )}/`;\n if (!normalizedEntryPath.startsWith(normalizedBundleRoot)) {\n return null;\n }\n const relative = normalizedEntryPath.slice(normalizedBundleRoot.length);\n const bundleId = relative.split(\"/\")[0];\n return bundleId && bundleId.length > 0 ? bundleId : null;\n}\n\nfunction looksLikeDaemonEntryPath(\n token: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const normalizedToken = normalizeDaemonCommandPath(token);\n return (\n normalizedToken.includes(\"/bundles/\") ||\n normalizedToken.includes(\"openmeld/dist/openmeld.js\") ||\n normalizedToken.endsWith(\"/openmeld.js\") ||\n normalizedToken.endsWith(\"/openmeld-dev.js\") ||\n normalizedToken.endsWith(\"/daemon-service-launcher.mjs\") ||\n isRecognizedDaemonServiceExecutableWrapperPath(token, pathInput) ||\n isOpenMeldManagedBinaryPath(token, pathInput)\n );\n}\n\nfunction findDaemonServiceCommandIndex(tokens: readonly string[]): number {\n return tokens.findIndex(\n (token, index) =>\n token === \"service\" &&\n (tokens[index + 1] === \"run\" || tokens[index + 1] === \"start\")\n );\n}\n\nfunction resolveDaemonServiceProcessMode(\n serviceArguments: readonly string[]\n): DaemonServiceProcessMode {\n let mode: DaemonServiceProcessMode = null;\n for (let index = 0; index < serviceArguments.length; index += 1) {\n const argument = serviceArguments[index];\n let modeValue: string | undefined;\n if (argument === \"--mode\") {\n modeValue = serviceArguments[index + 1];\n } else if (argument?.startsWith(\"--mode=\")) {\n modeValue = argument.slice(\"--mode=\".length);\n }\n if (modeValue === \"foreground\" || modeValue === \"background\") {\n mode = modeValue;\n }\n }\n return mode;\n}\n\nfunction isRecognizedDaemonServiceExecutableWrapperPath(\n token: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const normalizedToken = normalizeDaemonCommandPath(token);\n return daemonServiceRecognizedExecutablePaths(pathInput).some(\n (wrapperPath) => {\n const normalizedWrapperPath = normalizeDaemonCommandPath(wrapperPath);\n return (\n normalizedToken === normalizedWrapperPath ||\n normalizedToken.endsWith(\n `/${normalizeDaemonCommandPath(basename(wrapperPath))}`\n )\n );\n }\n );\n}\n\nfunction extractUnquotedDaemonWrapperPath(\n command: string,\n pathInput: OpenMeldPathResolutionInput\n): string | null {\n const normalizedCommand = normalizeDaemonCommandPath(command);\n const serviceRunIndex = normalizedCommand.indexOf(\" service run\");\n if (serviceRunIndex <= 0) {\n return null;\n }\n\n const commandPrefix = command.slice(0, serviceRunIndex);\n const normalizedPrefix = normalizedCommand.slice(0, serviceRunIndex);\n for (const wrapperPath of daemonServiceRecognizedExecutablePaths(pathInput)) {\n const normalizedWrapperPath = normalizeDaemonCommandPath(wrapperPath);\n const wrapperPathIndex = normalizedPrefix.lastIndexOf(\n normalizedWrapperPath\n );\n if (\n wrapperPathIndex >= 0 &&\n daemonCommandContainsExactPath(commandPrefix, wrapperPath)\n ) {\n return commandPrefix.slice(\n wrapperPathIndex,\n wrapperPathIndex + normalizedWrapperPath.length\n );\n }\n\n const wrapperName = basename(wrapperPath);\n if (!wrapperName.includes(\" \")) {\n continue;\n }\n const normalizedSuffix = `/${normalizeDaemonCommandPath(wrapperName)}`;\n const wrapperNameIndex = normalizedPrefix.lastIndexOf(normalizedSuffix);\n if (\n wrapperNameIndex < 0 ||\n wrapperNameIndex + normalizedSuffix.length !== normalizedPrefix.length\n ) {\n continue;\n }\n return commandPrefix.slice(0, wrapperNameIndex + normalizedSuffix.length);\n }\n return null;\n}\n\nfunction isCommandArgumentBoundary(char: string | undefined): boolean {\n return (\n char === undefined ||\n char === \"'\" ||\n char === '\"' ||\n COMMAND_ARGUMENT_BOUNDARY_PATTERN.test(char)\n );\n}\n","import { execFile, spawn } from \"node:child_process\";\nimport { homedir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport process from \"node:process\";\nimport { promisify } from \"node:util\";\nimport {\n powerShellEncodedArguments,\n resolveWindowsPowerShellPath,\n} from \"@openmeld/adapter-core/windows-system\";\nimport { daemonRuntimeRootPath } from \"../../config/daemon-state\";\nimport {\n OPENMELD_HOME_ENV_KEY,\n type OpenMeldEnvPreset,\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n} from \"../../config/paths\";\nimport {\n containsOpenMeldManagedBinaryPath,\n resolveOpenMeldManagedVersionBinaryRootPath,\n} from \"./daemon-managed-binary-path\";\nimport {\n daemonServiceLauncherPath,\n daemonServiceRecognizedExecutablePaths,\n} from \"./daemon-service-bundle\";\nimport {\n type DaemonServiceProcessMode,\n daemonCommandContainsExactPath,\n extractDaemonCommandEntryPath,\n isDaemonRuntimeProcessCommand,\n parseDaemonServiceProcessCommand,\n tokenizeDaemonCommand,\n} from \"./daemon-service-command-path\";\nimport { resolveDaemonServiceIdentity } from \"./daemon-service-identity\";\n\nexport type DaemonOwnedProcess = {\n pid: number;\n parentPid: number | null;\n command: string;\n mode: DaemonServiceProcessMode;\n ownership: \"stable_launcher\" | \"legacy_detached\" | \"cli_direct\" | \"unknown\";\n};\n\ntype ListedProcess = {\n pid: number;\n parentPid: number | null;\n command: string;\n};\n\nconst POSIX_PROCESS_LINE_PATTERN = /^(\\d+)\\s+(\\d+)\\s+(.+)$/;\nconst TRAILING_PATH_SEPARATOR_PATTERN = /\\/+$/u;\nconst OPENMELD_PACKAGE_INSTALL_ENTRY_SEGMENT =\n \"/node_modules/openmeld/dist/openmeld.js\";\nconst OPENMELD_DEV_LOCAL_ENTRY_SEGMENT = \"/openmeld-dev.js\";\nconst ALL_OPENMELD_ENV_PRESETS = [\n \"prod\",\n \"dev-local\",\n \"canary\",\n] as const satisfies readonly OpenMeldEnvPreset[];\nconst DAEMON_BIN_COMMAND_PATTERN_BY_PRESET = {\n prod: buildOpenMeldBinCommandPatternForPreset(\"prod\"),\n \"dev-local\": buildOpenMeldBinCommandPatternForPreset(\"dev-local\"),\n canary: buildOpenMeldBinCommandPatternForPreset(\"canary\"),\n} as const satisfies Record<OpenMeldEnvPreset, RegExp>;\n\nexport async function listDaemonOwnedProcesses(\n overrides: {\n listProcesses?: () => Promise<ListedProcess[]>;\n ignoreProcessIds?: Iterable<number>;\n pathInput?: OpenMeldPathResolutionInput;\n } = {}\n): Promise<DaemonOwnedProcess[]> {\n const listProcesses =\n overrides.listProcesses ?? listProcessesForCurrentPlatform;\n const ignoredProcessIds = new Set(\n Array.from(overrides.ignoreProcessIds ?? []).filter(\n (pid): pid is number => Number.isInteger(pid) && pid > 0\n )\n );\n const processes = await listProcesses();\n const ownedProcesses = processes\n .map((processInfo) =>\n classifyDaemonOwnedProcess(\n processInfo,\n ignoredProcessIds,\n overrides.pathInput\n )\n )\n .filter(\n (processInfo): processInfo is DaemonOwnedProcess => processInfo !== null\n );\n return collapseLauncherWrapperProcesses(ownedProcesses);\n}\n\nfunction classifyDaemonOwnedProcess(\n processInfo: ListedProcess,\n ignoredProcessIds: ReadonlySet<number>,\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonOwnedProcess | null {\n if (ignoredProcessIds.has(processInfo.pid)) {\n return null;\n }\n const normalizedCommand = normalizeProcessCommand(processInfo.command);\n const isRuntimeProcess = isDaemonRuntimeProcessCommand(normalizedCommand);\n const isLegacyDetachedProcess = normalizedCommand.includes(\"legacy-detached\");\n if (!(isRuntimeProcess || isLegacyDetachedProcess)) {\n return null;\n }\n const launcherPath = normalizeProcessCommand(\n daemonServiceLauncherPath(pathInput)\n );\n const wrapperPaths = daemonServiceRecognizedExecutablePaths(pathInput).map(\n normalizeProcessCommand\n );\n if (\n wrapperPaths.some(\n (wrapperPath) =>\n normalizedCommand.includes(wrapperPath) &&\n !daemonCommandContainsExactPath(normalizedCommand, wrapperPath)\n )\n ) {\n return null;\n }\n if (\n !looksLikeCurrentLaneDaemonCandidate({\n launcherPath,\n normalizedCommand,\n wrapperPaths,\n })\n ) {\n return null;\n }\n if (\n resolveDaemonCommandLaneScope({\n launcherPath,\n normalizedCommand,\n pathInput,\n }) !== \"current_lane\"\n ) {\n return null;\n }\n const ownership = resolveDaemonProcessOwnership(\n normalizedCommand,\n launcherPath,\n wrapperPaths,\n pathInput\n );\n const mode =\n parseDaemonServiceProcessCommand(normalizedCommand)?.mode ?? null;\n return {\n pid: processInfo.pid,\n parentPid: processInfo.parentPid,\n command: processInfo.command,\n mode,\n ownership,\n };\n}\n\nasync function listProcessesForCurrentPlatform(): Promise<ListedProcess[]> {\n if (process.platform === \"win32\") {\n return await listWindowsProcesses();\n }\n return await listPosixProcesses();\n}\n\nasync function listPosixProcesses(): Promise<ListedProcess[]> {\n const output = await runCommand(\"ps\", [\"-axo\", \"pid=,ppid=,command=\"]);\n const processes: ListedProcess[] = [];\n for (const line of output.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n const match = trimmed.match(POSIX_PROCESS_LINE_PATTERN);\n if (!(match?.[1] && match[2] && match[3])) {\n continue;\n }\n processes.push({\n pid: Number(match[1]),\n parentPid: Number(match[2]),\n command: match[3],\n });\n }\n return processes;\n}\n\nfunction resolveDaemonProcessOwnership(\n normalizedCommand: string,\n launcherPath: string,\n wrapperPaths: readonly string[],\n pathInput: OpenMeldPathResolutionInput\n): DaemonOwnedProcess[\"ownership\"] {\n const isRuntimeProcess = isDaemonRuntimeProcessCommand(normalizedCommand);\n if (\n normalizedCommand.includes(launcherPath) ||\n wrapperPaths.some((wrapperPath) =>\n daemonCommandContainsExactPath(normalizedCommand, wrapperPath)\n ) ||\n (isRuntimeProcess &&\n containsOpenMeldManagedBinaryPath(normalizedCommand, pathInput))\n ) {\n return \"stable_launcher\";\n }\n if (normalizedCommand.includes(\"legacy-detached\")) {\n return \"legacy_detached\";\n }\n if (isRuntimeProcess) {\n return \"cli_direct\";\n }\n return \"unknown\";\n}\n\nfunction looksLikeCurrentLaneDaemonCandidate(input: {\n normalizedCommand: string;\n launcherPath: string;\n wrapperPaths: readonly string[];\n}): boolean {\n return (\n isDaemonRuntimeProcessCommand(input.normalizedCommand) ||\n input.normalizedCommand.includes(input.launcherPath) ||\n input.wrapperPaths.some((wrapperPath) =>\n daemonCommandContainsExactPath(input.normalizedCommand, wrapperPath)\n ) ||\n input.normalizedCommand.includes(\"legacy-detached\")\n );\n}\n\nfunction resolveDaemonCommandLaneScope(input: {\n normalizedCommand: string;\n launcherPath: string;\n pathInput: OpenMeldPathResolutionInput;\n}): \"current_lane\" | \"other_lane\" | \"not_openmeld\" {\n const managedVersionRoot = resolveDaemonCommandManagedVersionRoot(\n input.normalizedCommand\n );\n if (managedVersionRoot) {\n const currentRoot = normalizeRootPath(\n resolveOpenMeldRootDir(input.pathInput)\n );\n return managedVersionRoot === currentRoot ? \"current_lane\" : \"other_lane\";\n }\n\n const currentLane = resolveOpenMeldEnvPreset(input.pathInput);\n const managedLane = resolveManagedDaemonPathLane({\n normalizedCommand: input.normalizedCommand,\n pathInput: input.pathInput,\n });\n if (managedLane) {\n return managedLane === currentLane ? \"current_lane\" : \"other_lane\";\n }\n\n if (hasExplicitOpenMeldHome(input.pathInput)) {\n return \"not_openmeld\";\n }\n\n const detectedLane = resolveDaemonCliCommandLane(\n input.normalizedCommand,\n input.pathInput\n );\n if (!detectedLane) {\n return \"not_openmeld\";\n }\n return detectedLane === currentLane ? \"current_lane\" : \"other_lane\";\n}\n\nfunction hasExplicitOpenMeldHome(\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const value = (pathInput.env ?? process.env)[OPENMELD_HOME_ENV_KEY];\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction resolveDaemonCommandManagedVersionRoot(\n normalizedCommand: string\n): string | null {\n for (const token of tokenizeDaemonCommand(normalizedCommand)) {\n const rootPath = resolveOpenMeldManagedVersionBinaryRootPath(token);\n if (rootPath) {\n return normalizeRootPath(rootPath);\n }\n }\n return null;\n}\n\nfunction resolveManagedDaemonPathLane(input: {\n normalizedCommand: string;\n pathInput: OpenMeldPathResolutionInput;\n}): OpenMeldEnvPreset | null {\n const currentPreset = resolveOpenMeldEnvPreset(input.pathInput);\n for (const preset of ALL_OPENMELD_ENV_PRESETS) {\n const lanePathInput = resolveLanePathInput(input.pathInput, preset);\n const laneLauncherPath = normalizeProcessCommand(\n daemonServiceLauncherPath(lanePathInput)\n );\n const laneWrapperPaths = daemonServiceRecognizedExecutablePaths(\n lanePathInput\n ).map(normalizeProcessCommand);\n const laneRuntimeRoot = normalizeProcessCommand(\n daemonRuntimeRootPath(lanePathInput)\n );\n const laneEntryPath = extractDaemonCommandEntryPath(\n input.normalizedCommand,\n lanePathInput\n );\n const laneExecutableNames = laneWrapperPaths.map((candidatePath) =>\n basename(candidatePath)\n );\n if (\n input.normalizedCommand.includes(laneLauncherPath) ||\n laneWrapperPaths.some((wrapperPath) =>\n daemonCommandContainsExactPath(input.normalizedCommand, wrapperPath)\n ) ||\n (preset !== currentPreset &&\n laneEntryPath !== null &&\n laneExecutableNames.includes(\n normalizeProcessCommand(basename(laneEntryPath))\n )) ||\n input.normalizedCommand.includes(laneRuntimeRoot) ||\n containsOpenMeldManagedBinaryPath(input.normalizedCommand, lanePathInput)\n ) {\n return preset;\n }\n }\n return null;\n}\n\nfunction resolveDaemonCliCommandLane(\n normalizedCommand: string,\n pathInput: OpenMeldPathResolutionInput\n): OpenMeldEnvPreset | null {\n if (!isDaemonRuntimeProcessCommand(normalizedCommand)) {\n return null;\n }\n if (matchesDaemonCliLane(normalizedCommand, \"dev-local\", pathInput)) {\n return \"dev-local\";\n }\n if (matchesDaemonCliLane(normalizedCommand, \"canary\", pathInput)) {\n return \"canary\";\n }\n if (matchesDaemonCliLane(normalizedCommand, \"prod\", pathInput)) {\n return \"prod\";\n }\n return null;\n}\n\nfunction matchesDaemonCliLane(\n normalizedCommand: string,\n preset: OpenMeldEnvPreset,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n if (DAEMON_BIN_COMMAND_PATTERN_BY_PRESET[preset].test(normalizedCommand)) {\n return true;\n }\n\n if (preset === \"dev-local\") {\n return normalizedCommand.includes(OPENMELD_DEV_LOCAL_ENTRY_SEGMENT);\n }\n\n const canaryPackageInstallRoot = resolveCanaryPackageInstallRoot(pathInput);\n if (preset === \"canary\") {\n return (\n normalizedCommand.includes(canaryPackageInstallRoot) ||\n normalizedCommand.includes(\n \"/.local/share/openmeld-canary/package-install/\"\n )\n );\n }\n\n return (\n normalizedCommand.includes(OPENMELD_PACKAGE_INSTALL_ENTRY_SEGMENT) &&\n !normalizedCommand.includes(canaryPackageInstallRoot) &&\n !normalizedCommand.includes(\n \"/.local/share/openmeld-canary/package-install/\"\n ) &&\n !normalizedCommand.includes(OPENMELD_DEV_LOCAL_ENTRY_SEGMENT)\n );\n}\n\nfunction collapseLauncherWrapperProcesses(\n processes: DaemonOwnedProcess[]\n): DaemonOwnedProcess[] {\n const launcherPidSet = new Set<number>();\n\n for (const processInfo of processes) {\n if (processInfo.ownership === \"stable_launcher\") {\n launcherPidSet.add(processInfo.pid);\n }\n }\n if (launcherPidSet.size === 0) {\n return processes;\n }\n\n const collapsedProcesses: DaemonOwnedProcess[] = [];\n for (const processInfo of processes) {\n if (processInfo.ownership === \"stable_launcher\") {\n const hasManagedChild = processes.some(\n (candidate) =>\n candidate.pid !== processInfo.pid &&\n candidate.parentPid === processInfo.pid &&\n candidate.ownership !== \"stable_launcher\"\n );\n if (hasManagedChild) {\n continue;\n }\n collapsedProcesses.push(processInfo);\n continue;\n }\n\n if (\n processInfo.parentPid !== null &&\n launcherPidSet.has(processInfo.parentPid)\n ) {\n collapsedProcesses.push({\n ...processInfo,\n ownership:\n processInfo.ownership === \"unknown\"\n ? processInfo.ownership\n : \"stable_launcher\",\n });\n continue;\n }\n\n collapsedProcesses.push(processInfo);\n }\n\n return collapsedProcesses;\n}\n\nexport async function listWindowsProcesses(): Promise<ListedProcess[]> {\n // Ask the provider for only the three fields we consume. Materializing every\n // Win32_Process property needlessly queries unrelated process details.\n const script = `\n$ErrorActionPreference='Stop'\n$ProgressPreference='SilentlyContinue'\n[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)\n[Console]::Error.WriteLine('openmeld.inventory.query_started')\n$rows = @(Get-CimInstance Win32_Process -Property ProcessId,ParentProcessId,CommandLine | Select-Object ProcessId,ParentProcessId,CommandLine)\n[Console]::Error.WriteLine('openmeld.inventory.query_completed')\nConvertTo-Json -InputObject $rows -Compress\n`;\n // execFile owns incremental UTF-8 decoding and bounded output. A timeout or\n // unreadable process table rejects; it never proves that the Service is absent.\n const startedAt = Date.now();\n const { stdout: output } = await promisify(execFile)(\n resolveWindowsPowerShellPath(),\n powerShellEncodedArguments(script),\n {\n encoding: \"utf8\",\n windowsHide: true,\n timeout: 10_000,\n maxBuffer: 8 * 1024 * 1024,\n }\n ).catch((error: unknown) => {\n const failure = error as {\n code?: unknown;\n signal?: unknown;\n killed?: unknown;\n stderr?: unknown;\n };\n const evidence = typeof failure.stderr === \"string\" ? failure.stderr : \"\";\n let phase = \"powershell_start\";\n if (evidence.includes(\"openmeld.inventory.query_completed\")) {\n phase = \"output\";\n } else if (evidence.includes(\"openmeld.inventory.query_started\")) {\n phase = \"query\";\n }\n throw new Error(\n `Windows process inventory failed after ${Date.now() - startedAt}ms (phase=${phase}, code=${String(failure.code ?? \"unknown\")}, signal=${String(failure.signal ?? \"none\")}, killed=${String(failure.killed ?? false)}).`,\n { cause: error }\n );\n });\n return parseWindowsProcessInventory(output);\n}\n\nexport function parseWindowsProcessInventory(output: string): ListedProcess[] {\n const parsed = JSON.parse(output) as\n | Array<{\n ProcessId?: number;\n ParentProcessId?: number;\n CommandLine?: string | null;\n }>\n | {\n ProcessId?: number;\n ParentProcessId?: number;\n CommandLine?: string | null;\n };\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"Windows returned an invalid process inventory.\");\n }\n const rows = Array.isArray(parsed) ? parsed : [parsed];\n const processes: ListedProcess[] = [];\n for (const row of rows) {\n if (\n !row ||\n typeof row.ProcessId !== \"number\" ||\n typeof row.ParentProcessId !== \"number\" ||\n typeof row.CommandLine !== \"string\" ||\n row.CommandLine.trim().length === 0\n ) {\n continue;\n }\n processes.push({\n pid: row.ProcessId,\n parentPid: row.ParentProcessId,\n command: row.CommandLine,\n });\n }\n return processes;\n}\n\nasync function runCommand(command: string, args: string[]): Promise<string> {\n return await new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: process.env,\n windowsHide: true,\n });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.once(\"error\", reject);\n child.once(\"close\", (code) => {\n if (code !== 0) {\n reject(\n new Error(\n `process inventory command failed: ${command} ${args.join(\" \")} ${stderr.trim()}`\n )\n );\n return;\n }\n resolve(stdout);\n });\n });\n}\n\nfunction buildOpenMeldBinCommandPatternForPreset(\n preset: OpenMeldEnvPreset\n): RegExp {\n const aliases = resolveDaemonServiceIdentity({\n env: {\n OPENMELD_ENV_PRESET: preset,\n },\n }).cliEntryAliases.map(escapeRegex);\n return new RegExp(\n `(^|[\\\\s\\\\/])(${aliases.join(\"|\")})(?:\\\\.cmd|\\\\.exe|\\\\.js)?(?=\\\\s|$)`,\n \"u\"\n );\n}\n\nfunction escapeRegex(value: string): string {\n return value.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction resolveCanaryPackageInstallRoot(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return normalizeProcessCommand(\n join(\n pathInput.homeDir ?? homedir(),\n \".local\",\n \"share\",\n \"openmeld-canary\",\n \"package-install\"\n )\n );\n}\n\nfunction resolveLanePathInput(\n pathInput: OpenMeldPathResolutionInput,\n preset: OpenMeldEnvPreset\n): OpenMeldPathResolutionInput {\n const currentPreset = resolveOpenMeldEnvPreset(pathInput);\n const env: NodeJS.ProcessEnv = {\n ...(pathInput.env ?? process.env),\n OPENMELD_ENV: preset === \"dev-local\" ? \"dev\" : preset,\n OPENMELD_ENV_PRESET: preset,\n };\n if (preset !== currentPreset && env[OPENMELD_HOME_ENV_KEY]) {\n delete env[OPENMELD_HOME_ENV_KEY];\n }\n return {\n ...pathInput,\n env,\n };\n}\n\nfunction normalizeProcessCommand(command: string): string {\n return command.trim().toLowerCase().replaceAll(\"\\\\\", \"/\");\n}\n\nfunction normalizeRootPath(path: string): string {\n const normalized = normalizeProcessCommand(path);\n return normalized === \"/\"\n ? normalized\n : normalized.replace(TRAILING_PATH_SEPARATOR_PATTERN, \"\");\n}\n","import {\n type DaemonServiceRuntimeStatus,\n type DaemonStatus,\n getDaemonRuntimeStatus,\n getDaemonStatus,\n uninstallDaemon,\n} from \"../../config/daemon-state\";\nimport {\n OPENMELD_HOME_ENV_KEY,\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n} from \"../../config/paths\";\nimport type {\n DaemonServiceManager,\n DaemonServiceManagerRuntimeStatus,\n} from \"./daemon-service-manager\";\nimport { resolveDaemonServiceManager } from \"./daemon-service-manager\";\nimport { matchesExpectedDaemonServiceManagerCommand } from \"./daemon-service-manager-command-match\";\nimport type { DaemonOwnedProcess } from \"./daemon-service-process-inventory\";\nimport { listDaemonOwnedProcesses } from \"./daemon-service-process-inventory\";\n\nexport type LegacySharedDaemonServiceInspection = {\n present: boolean;\n pathInput: OpenMeldPathResolutionInput;\n installStatus: DaemonStatus;\n runtimeStatus: DaemonServiceRuntimeStatus;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n ownedProcesses: DaemonOwnedProcess[];\n};\n\nconst PROD_ENV_PRESET = \"prod\";\n\nexport function shouldInspectLegacySharedDaemonService(\n input: OpenMeldPathResolutionInput = {}\n): boolean {\n const env = input.env ?? process.env;\n if (String(env[OPENMELD_HOME_ENV_KEY] ?? \"\").trim()) {\n return false;\n }\n return resolveOpenMeldEnvPreset(input) === PROD_ENV_PRESET;\n}\n\nexport function resolveLegacySharedDaemonPathInput(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldPathResolutionInput | null {\n if (!shouldInspectLegacySharedDaemonService(input)) {\n return null;\n }\n return {\n ...input,\n env: {\n ...(input.env ?? process.env),\n OPENMELD_ENV_PRESET: PROD_ENV_PRESET,\n },\n };\n}\n\nexport function requiresLegacySharedDaemonServiceMigration(input: {\n pathInput: OpenMeldPathResolutionInput;\n runtimeStatus: DaemonServiceRuntimeStatus;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n ownedProcesses: DaemonOwnedProcess[];\n}): boolean {\n if (hasLegacySharedServiceManagerResidual(input)) {\n return true;\n }\n return hasLegacyDetachedResidual(input);\n}\n\nexport async function inspectLegacySharedDaemonService(\n input: OpenMeldPathResolutionInput = {}\n): Promise<LegacySharedDaemonServiceInspection | null> {\n const pathInput = resolveLegacySharedDaemonPathInput(input);\n if (!pathInput) {\n return null;\n }\n\n const [installStatus, runtimeStatus, serviceManager, ownedProcesses] =\n await Promise.all([\n getDaemonStatus(pathInput),\n getDaemonRuntimeStatus(pathInput),\n resolveDaemonServiceManager(undefined, pathInput).catch(() => null),\n listDaemonOwnedProcesses({ pathInput }).catch(() => []),\n ]);\n\n const serviceManagerStatus = serviceManager\n ? await serviceManager\n .status()\n .catch<DaemonServiceManagerRuntimeStatus | null>(() => null)\n : null;\n\n const present = requiresLegacySharedDaemonServiceMigration({\n pathInput,\n runtimeStatus,\n serviceManager,\n serviceManagerStatus,\n ownedProcesses,\n });\n\n return {\n present,\n pathInput,\n installStatus,\n runtimeStatus,\n serviceManager,\n serviceManagerStatus,\n ownedProcesses,\n };\n}\n\nfunction hasLegacySharedServiceManagerResidual(input: {\n pathInput: OpenMeldPathResolutionInput;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n}): boolean {\n if (!input.serviceManagerStatus?.installed) {\n return false;\n }\n if (!input.serviceManagerStatus.commandSummary) {\n return true;\n }\n return !matchesExpectedDaemonServiceManagerCommand({\n controller: input.serviceManager?.controller ?? null,\n commandSummary: input.serviceManagerStatus.commandSummary,\n commandSpec: input.serviceManagerStatus.commandSpec,\n definitionPath: input.serviceManagerStatus.definitionPath ?? null,\n includeLegacyExecutableWrappers: true,\n pathInput: input.pathInput,\n });\n}\n\nfunction hasLegacyDetachedResidual(input: {\n runtimeStatus: DaemonServiceRuntimeStatus;\n ownedProcesses: DaemonOwnedProcess[];\n}): boolean {\n if (input.runtimeStatus.serviceController === \"legacy-detached\") {\n return true;\n }\n return input.ownedProcesses.some(\n (processInfo) => processInfo.ownership === \"legacy_detached\"\n );\n}\n\nexport async function cleanupLegacySharedDaemonServiceState(\n input: OpenMeldPathResolutionInput = {}\n): Promise<{ removed: boolean }> {\n const pathInput = resolveLegacySharedDaemonPathInput(input);\n if (!pathInput) {\n return { removed: false };\n }\n const legacySharedService = await inspectLegacySharedDaemonService(input);\n let removedServiceManager = false;\n if (\n legacySharedService?.present &&\n legacySharedService.serviceManager &&\n legacySharedService.serviceManagerStatus?.installed\n ) {\n await legacySharedService.serviceManager.uninstall();\n await legacySharedService.serviceManager.waitUntilAbsent();\n removedServiceManager = true;\n }\n const uninstallResult = await uninstallDaemon(pathInput);\n return {\n removed: removedServiceManager || uninstallResult.removed,\n };\n}\n","import process from \"node:process\";\nimport type { DaemonRuntimeLease } from \"@openmeld/schemas/types\";\nimport {\n DAEMON_HEARTBEAT_STALE_MS,\n type DaemonServiceRuntimeStatus,\n} from \"../../config/daemon-state\";\nimport { extractDaemonCommandEntryPath } from \"./daemon-service-command-path\";\nimport type { DaemonOwnedProcess } from \"./daemon-service-process-inventory\";\n\nexport function resolveObservedDaemonRuntimeStatus(input: {\n runtimeLease: DaemonRuntimeLease | null;\n ownedProcesses: readonly DaemonOwnedProcess[];\n}): DaemonServiceRuntimeStatus {\n const runtimeLeaseIssue = resolveRuntimeLeaseIssue(input.runtimeLease);\n const observedProcess = selectObservedRuntimeProcess(input.ownedProcesses);\n\n if (!runtimeLeaseIssue && input.runtimeLease) {\n return {\n status: \"running\",\n mode: input.runtimeLease.mode,\n pid: input.runtimeLease.pid,\n startedAt: input.runtimeLease.startedAt,\n updatedAt: input.runtimeLease.updatedAt,\n managedBySystemService: input.runtimeLease.managedBySystemService,\n serviceController: input.runtimeLease.serviceController,\n autoStart: input.runtimeLease.managedBySystemService,\n };\n }\n\n if (observedProcess) {\n return {\n status: \"stale\",\n mode: observedProcess.mode,\n pid: observedProcess.pid,\n startedAt: input.runtimeLease?.startedAt ?? null,\n updatedAt: input.runtimeLease?.updatedAt ?? null,\n managedBySystemService: observedProcess.ownership === \"stable_launcher\",\n serviceController:\n observedProcess.ownership === \"legacy_detached\"\n ? \"legacy-detached\"\n : \"unknown\",\n autoStart: observedProcess.ownership === \"stable_launcher\",\n reason: runtimeLeaseIssue ?? \"runtime_lease_missing\",\n };\n }\n\n if (!input.runtimeLease) {\n return {\n status: \"not_running\",\n mode: null,\n pid: null,\n startedAt: null,\n updatedAt: null,\n managedBySystemService: false,\n serviceController: \"unknown\",\n autoStart: false,\n };\n }\n\n return {\n status: \"stale\",\n mode: input.runtimeLease.mode,\n pid: input.runtimeLease.pid,\n startedAt: input.runtimeLease.startedAt,\n updatedAt: input.runtimeLease.updatedAt,\n managedBySystemService: input.runtimeLease.managedBySystemService,\n serviceController: input.runtimeLease.serviceController,\n autoStart: input.runtimeLease.managedBySystemService,\n reason: runtimeLeaseIssue ?? \"runtime_lease_missing\",\n };\n}\n\nexport function resolveObservedRuntimeCommandEntryPath(input: {\n ownedProcesses: readonly DaemonOwnedProcess[];\n runtimeStatus: DaemonServiceRuntimeStatus;\n}): string | null {\n const runtimePid =\n typeof input.runtimeStatus.pid === \"number\"\n ? input.runtimeStatus.pid\n : null;\n if (!runtimePid) {\n return null;\n }\n const runtimeProcess = input.ownedProcesses.find(\n (processInfo) => processInfo.pid === runtimePid\n );\n if (!runtimeProcess) {\n return null;\n }\n return extractDaemonCommandEntryPath(runtimeProcess.command);\n}\n\nfunction resolveRuntimeLeaseIssue(\n runtimeLease: DaemonRuntimeLease | null\n): string | null {\n if (!runtimeLease) {\n return \"runtime_lease_missing\";\n }\n\n if (!Number.isInteger(runtimeLease.pid) || runtimeLease.pid <= 0) {\n return \"invalid_pid\";\n }\n\n if (!isPidAlive(runtimeLease.pid)) {\n return \"process_not_alive\";\n }\n\n if (isRuntimeLeaseHeartbeatStale(runtimeLease)) {\n return \"heartbeat_stale\";\n }\n\n return null;\n}\n\nfunction selectObservedRuntimeProcess(\n ownedProcesses: readonly DaemonOwnedProcess[]\n): DaemonOwnedProcess | null {\n const sortedProcesses = [...ownedProcesses].sort((left, right) => {\n const priorityDifference =\n resolveOwnershipPriority(left.ownership) -\n resolveOwnershipPriority(right.ownership);\n if (priorityDifference !== 0) {\n return priorityDifference;\n }\n const modeDifference =\n resolveModePriority(left.mode) - resolveModePriority(right.mode);\n if (modeDifference !== 0) {\n return modeDifference;\n }\n return left.pid - right.pid;\n });\n return sortedProcesses[0] ?? null;\n}\n\nfunction resolveOwnershipPriority(\n ownership: DaemonOwnedProcess[\"ownership\"]\n): number {\n switch (ownership) {\n case \"stable_launcher\":\n return 0;\n case \"legacy_detached\":\n return 1;\n case \"cli_direct\":\n return 2;\n default:\n return 3;\n }\n}\n\nfunction resolveModePriority(mode: DaemonOwnedProcess[\"mode\"]): number {\n switch (mode) {\n case \"background\":\n return 0;\n case \"foreground\":\n return 1;\n default:\n return 2;\n }\n}\n\nfunction isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isRuntimeLeaseHeartbeatStale(\n runtimeLease: DaemonRuntimeLease\n): boolean {\n const freshnessTimestamp = runtimeLease.heartbeatAt ?? runtimeLease.updatedAt;\n const heartbeatMs = Date.parse(freshnessTimestamp);\n if (Number.isNaN(heartbeatMs)) {\n return true;\n }\n return Date.now() - heartbeatMs > DAEMON_HEARTBEAT_STALE_MS;\n}\n","import process from \"node:process\";\nimport { sleep } from \"@openmeld/utils\";\nimport { readDaemonRuntimeLease } from \"../../config/daemon-runtime-lease\";\nimport type {\n DaemonServiceRuntimeStatus,\n DaemonStatus,\n} from \"../../config/daemon-state\";\nimport {\n clearDaemonServiceRuntimeState,\n getDaemonStatus,\n} from \"../../config/daemon-state\";\nimport {\n inspectLegacySharedDaemonService,\n type LegacySharedDaemonServiceInspection,\n} from \"./daemon-service-legacy-shared\";\nimport {\n type DaemonServiceManager,\n type DaemonServiceManagerRuntimeStatus,\n resolveDaemonServiceManager,\n} from \"./daemon-service-manager\";\nimport { listDaemonOwnedProcesses } from \"./daemon-service-process-inventory\";\nimport { resolveObservedDaemonRuntimeStatus } from \"./daemon-service-runtime-observer\";\n\nconst DEFAULT_SYSTEM_SERVICE_STOP_WAIT_MS = 3000;\nconst DEFAULT_SYSTEM_SERVICE_STOP_POLL_MS = 200;\n\nexport type CurrentDaemonRuntimeContext = {\n status: DaemonStatus;\n runtimeStatus: DaemonServiceRuntimeStatus;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n legacySharedService: LegacySharedDaemonServiceInspection | null;\n effectiveRuntimeStatus: DaemonServiceRuntimeStatus[\"status\"];\n};\n\nexport type DaemonRuntimeCleanupDecision = {\n context: CurrentDaemonRuntimeContext;\n cleared: boolean;\n};\n\nexport async function readCurrentObservedDaemonRuntimeStatus(): Promise<DaemonServiceRuntimeStatus> {\n return await readObservedRuntimeState();\n}\n\nexport async function clearDaemonRuntimeStateIfDefinitelyStopped(): Promise<DaemonRuntimeCleanupDecision> {\n const context = await readCurrentDaemonRuntimeContext();\n const isDefinitelyStopped =\n context.effectiveRuntimeStatus === \"not_running\" ||\n (await isStoppedSystemServiceSnapshot(context));\n if (!isDefinitelyStopped) {\n return {\n context,\n cleared: false,\n };\n }\n await clearDaemonServiceRuntimeState();\n return {\n context,\n cleared: true,\n };\n}\n\nasync function isStoppedSystemServiceSnapshot(\n context: CurrentDaemonRuntimeContext\n): Promise<boolean> {\n if (\n context.runtimeStatus.status !== \"stale\" ||\n !context.runtimeStatus.managedBySystemService ||\n context.serviceManagerStatus?.running !== false\n ) {\n return false;\n }\n\n const ownedProcesses = await listDaemonOwnedProcesses({\n ignoreProcessIds: [process.pid, process.ppid],\n });\n return ownedProcesses.length === 0;\n}\n\nexport async function readCurrentDaemonRuntimeContext(\n input: { status?: DaemonStatus | null } = {}\n): Promise<CurrentDaemonRuntimeContext> {\n const status = input.status ?? (await getDaemonStatus());\n const runtimeStatus = await readCurrentObservedDaemonRuntimeStatus();\n const { serviceManager, serviceManagerStatus, legacySharedService } =\n await resolveDaemonServiceManagerForRuntimeState({\n status,\n runtimeState: runtimeStatus,\n });\n const effectiveRuntimeStatus = getEffectiveDaemonRuntimeStatus({\n runtimeState: runtimeStatus,\n serviceManagerStatus,\n });\n\n return {\n status,\n runtimeStatus,\n serviceManager,\n serviceManagerStatus,\n legacySharedService,\n effectiveRuntimeStatus,\n };\n}\n\nexport async function resolveDaemonRuntimeState(\n status: DaemonStatus\n): Promise<DaemonServiceRuntimeStatus | null> {\n if (!status.installed) {\n return null;\n }\n return await readCurrentObservedDaemonRuntimeStatus();\n}\n\nexport async function resolveDaemonServiceManagerFromRuntimeState(\n runtimeState: DaemonServiceRuntimeStatus | null\n): Promise<DaemonServiceManager | null> {\n if (!runtimeState?.managedBySystemService) {\n return null;\n }\n\n if (runtimeState.serviceController === \"legacy-detached\") {\n return null;\n }\n\n return await resolveDaemonServiceManager(runtimeState.serviceController);\n}\n\nexport async function resolveDaemonServiceManagerForRuntimeState(input: {\n status: DaemonStatus;\n runtimeState: DaemonServiceRuntimeStatus | null;\n}): Promise<{\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n legacySharedService: LegacySharedDaemonServiceInspection | null;\n}> {\n const initialManager = await resolveDaemonServiceManagerFromRuntimeState(\n input.runtimeState\n );\n const initialManagerStatus = initialManager\n ? await initialManager\n .status()\n .catch<DaemonServiceManagerRuntimeStatus | null>(() => null)\n : null;\n\n if (\n input.status.installed &&\n input.runtimeState?.managedBySystemService !== true &&\n !initialManagerStatus?.installed\n ) {\n const detectedManager = await resolveDaemonServiceManager().catch<null>(\n () => null\n );\n if (detectedManager) {\n const detectedManagerStatus = await detectedManager\n .status()\n .catch<DaemonServiceManagerRuntimeStatus | null>(() => null);\n if (detectedManagerStatus?.installed) {\n return {\n serviceManager: detectedManager,\n serviceManagerStatus: detectedManagerStatus,\n legacySharedService: null,\n };\n }\n }\n }\n\n const legacySharedService = await inspectLegacySharedDaemonService().catch(\n () => null\n );\n if (\n legacySharedService?.present &&\n legacySharedService.serviceManagerStatus?.installed\n ) {\n const legacyManager =\n legacySharedService.serviceManager ??\n (await resolveDaemonServiceManager(\n legacySharedService.runtimeStatus.serviceController === \"unknown\"\n ? undefined\n : legacySharedService.runtimeStatus.serviceController,\n legacySharedService.pathInput\n ).catch(() => null));\n if (legacyManager) {\n return {\n serviceManager: legacyManager,\n serviceManagerStatus: legacySharedService.serviceManagerStatus,\n legacySharedService,\n };\n }\n }\n\n return {\n serviceManager: initialManager,\n serviceManagerStatus: initialManagerStatus,\n legacySharedService,\n };\n}\n\nexport function getEffectiveDaemonRuntimeStatus(input: {\n runtimeState: DaemonServiceRuntimeStatus;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n}): DaemonServiceRuntimeStatus[\"status\"] {\n if (input.runtimeState.status === \"running\") {\n return \"running\";\n }\n\n if (\n !(input.runtimeState.managedBySystemService && input.serviceManagerStatus)\n ) {\n return input.runtimeState.status;\n }\n\n if (input.runtimeState.status === \"stale\") {\n if (input.runtimeState.reason === \"heartbeat_stale\") {\n return \"stale\";\n }\n if (input.serviceManagerStatus.running) {\n return \"running\";\n }\n if (!input.serviceManagerStatus.enabled) {\n return \"not_running\";\n }\n }\n\n if (!input.serviceManagerStatus.running) {\n return \"not_running\";\n }\n\n return input.runtimeState.status;\n}\n\nexport async function waitForDaemonSystemServiceToStop(input: {\n manager: DaemonServiceManager;\n waitMs?: number;\n pollMs?: number;\n}): Promise<boolean> {\n const waitMs = input.waitMs ?? DEFAULT_SYSTEM_SERVICE_STOP_WAIT_MS;\n const pollMs = input.pollMs ?? DEFAULT_SYSTEM_SERVICE_STOP_POLL_MS;\n const deadlineMs = Date.now() + waitMs;\n\n while (Date.now() < deadlineMs) {\n const currentRuntime = await readCurrentObservedDaemonRuntimeStatus().catch(\n () => null\n );\n const managerStatus = await input.manager.status().catch(() => null);\n\n if (\n managerStatus?.running === false &&\n currentRuntime !== null &&\n currentRuntime.status !== \"running\"\n ) {\n return true;\n }\n\n if (\n currentRuntime?.status === \"stale\" &&\n !currentRuntime.managedBySystemService\n ) {\n return true;\n }\n\n if (currentRuntime?.status === \"not_running\") {\n return true;\n }\n\n await sleep(pollMs);\n }\n\n const finalRuntime = await readCurrentObservedDaemonRuntimeStatus().catch(\n () => null\n );\n if (finalRuntime?.status === \"not_running\") {\n return true;\n }\n\n if (\n finalRuntime?.status === \"stale\" &&\n !finalRuntime.managedBySystemService\n ) {\n return true;\n }\n\n if (finalRuntime?.status === \"running\") {\n return false;\n }\n\n if (finalRuntime === null) {\n return false;\n }\n\n const finalManagerStatus = await input.manager.status().catch(() => null);\n return finalManagerStatus?.running === false;\n}\n\nasync function readObservedRuntimeState(): Promise<DaemonServiceRuntimeStatus> {\n const ignoredProcessIds = [process.pid, process.ppid].filter(\n (pid): pid is number => Number.isInteger(pid) && pid > 0\n );\n const [runtimeLease, ownedProcesses] = await Promise.all([\n readDaemonRuntimeLease().catch(() => null),\n listDaemonOwnedProcesses({\n ignoreProcessIds: ignoredProcessIds,\n }),\n ]);\n return resolveObservedDaemonRuntimeStatus({\n runtimeLease,\n ownedProcesses,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,6BAA6B,IAAI,aAAa;CACnD,eAAe,IAAI,QAAQ,CAAC;CAC5B,MAAM,IAAI,QAAQ,kBAAkB;CACpC,QAAQ,IAAI,KAAK;EAChB;EACA;EACA;CACD,CAAC;CACD,SAAS,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CAC3B,UAAU,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CAC5B,mBAAmB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACrC,oBAAoB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACtC,iBAAiB,IAAI,OAAO,CAAC,CAAC,SAAS;CACvC,QAAQ,IAAI,QAAQ;AACrB,CAAC;;;ACbD,MAAM,4CAA4C;AAClD,MAAM,0CAA0C,IAAI,aAAa;CAChE,GAAG,IAAI,QAAQ,CAAC;CAChB,QAAQ,IAAI,QAAQ,kCAAkC;CACtD,UAAU,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CAC5B,eAAe,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACjC,yBAAyB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CAC3C,cAAc,IAAI,KAAK;EACtB;EACA;EACA;CACD,CAAC;CACD,uBAAuB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACzC,uBAAuB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACzC,oBAAoB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACtC,uBAAuB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CAC/D,YAAY,IAAI,KAAK;EACpB;EACA;EACA;EACA;CACD,CAAC;CACD,WAAW,IAAI,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;CAC5C,WAAW,IAAI,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;AAC7C,CAAC;AACD,MAAM,mCAAmC,IAAI,aAAa;CACzD,UAAU,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY;CACzC,cAAc,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC;CAChD,cAAc,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACzB,gBAAgB;CAChB,aAAa,IAAI,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;CAC9C,kBAAkB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CAC/C,sBAAsB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CACnD,eAAe,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;CACjC,WAAW,IAAI,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;CAC5C,SAAS,IAAI,KAAK,CAAC,aAAa,UAAU,CAAC;AAC5C,CAAC;AACD,MAAM,iCAAiC,iCAAiC,OAAO;CAC9E,GAAG,IAAI,QAAQ,CAAC;CAChB,QAAQ,IAAI,QAAQ,uCAAuC;CAC3D,QAAQ,IAAI,KAAK;EAChB;EACA;EACA;EACA;CACD,CAAC;AACF,CAAC;AACD,MAAM,+BAA+B,iCAAiC,OAAO;CAC5E,GAAG,IAAI,QAAQ,CAAC;CAChB,QAAQ,IAAI,QAAQ,yCAAyC;CAC7D,OAAO;CACP,eAAe;AAChB,CAAC;AACD,MAAM,qCAAqC,IAAI,mBAAmB,KAAK,CAAC,gCAAgC,4BAA4B,CAAC;;;AClDrI,SAAgB,0BAA0B,OAM/B;CACT,YAAY;EACV,OAAO,MAAM;EACb,gBAAgB,MAAM,MAAM;EAC5B,mBAAmB,MAAM,MAAM;EAC/B,OAAO;CACT,CAAC;CAED,MAAM,QAAQ,yBAAyB,MAAM,iBAAiB;CAC9D,0BAA0B;EACxB,OAAO,MAAM;EACb;EACA,cAAc,MAAM;EACpB,iBAAiB,MAAM;CACzB,CAAC;CAED,MAAM,cAAc,OAAO,MAAM,MAAM,eAAe;CACtD,MAAM,UAAU,KACd,aACA,GACA,GACA,KAAK,IAAI,MAAM,UAAU,YAAY,YAAY,UAAU,CAC7D;CAEA,IAAI,cAAc;CAClB,KAAK,MAAM,WAAW,MAAM,UAAU;EACpC,MAAM,QAAQ,OAAO,KAAK,QAAQ,YAAY,QAAQ;EACtD,MAAM,aAAa,QAAQ,SAAS,MAAM;EAC1C,IAAI,QAAQ,SAAS,aACnB,MAAM,IAAI,MACR,yDACF;EAEF,IAAI,aAAa,YAAY,YAC3B,MAAM,IAAI,MAAM,oDAAoD;EAEtE,MAAM,KAAK,aAAa,QAAQ,MAAM;EACtC,cAAc;CAChB;CAEA,YAAY;EACV,OAAO;EACP,gBAAgB,MAAM;EACtB,mBAAmB,MAAM;EACzB,OAAO;CACT,CAAC;CACD,OAAO;AACT;AAEA,SAAS,yBAAyB,OAAoC;CACpE,IAAI;CACJ,IAAI;EACF,QAAQ,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;CAC3C,SAAS,OAAO;EACd,MAAM,IAAI,MACR,kCAAkC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACzF;CACF;CACA,MAAM,SAAS,0BAA0B,UAAU,KAAK;CACxD,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,MAAM,2BAA2B,OAAO,MAAM,SAAS;CAEnE,OAAO,OAAO;AAChB;AAEA,SAAS,0BAA0B,OAK1B;CACP,MAAM,aAAa;EACjB;GAAC;GAAU,MAAM,MAAM;GAAa,MAAM,MAAM;EAAW;EAC3D;GAAC;GAAe,MAAM,MAAM;GAAY,MAAM,MAAM;EAAU;EAC9D;GAAC;GAAa,MAAM,MAAM;GAAe,MAAM,MAAM;EAAa;EAClE;GAAC;GAAiB,MAAM,MAAM;GAAc,MAAM;EAAY;EAC9D;GAAC;GAAe,MAAM,MAAM;GAAiB,MAAM;EAAe;CACpE,CAAC,CAAC,QAAQ,GAAG,QAAQ,cAAc,WAAW,QAAQ;CACtD,IAAI,WAAW,SAAS,GACtB,MAAM,IAAI,MACR,kCAAkC,WAAW,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,KAAK,IAAI,GAChF;AAEJ;AAEA,SAAS,YAAY,OAKZ;CACP,IAAI,MAAM,MAAM,eAAe,MAAM,mBACnC,MAAM,IAAI,MACR,GAAG,MAAM,MAAM,2BAA2B,MAAM,kBAAkB,mBAAmB,MAAM,MAAM,WAAW,OAC9G;CAEF,MAAM,eAAe,WAAW,QAAQ,CAAC,CAAC,OAAO,MAAM,KAAK,CAAC,CAAC,OAAO,KAAK;CAC1E,IAAI,iBAAiB,MAAM,eAAe,YAAY,GACpD,MAAM,IAAI,MACR,GAAG,MAAM,MAAM,6BAA6B,MAAM,eAAe,YAAY,EAAE,aAAa,cAC9F;AAEJ;;;ACjHA,MAAa,sCAAsC,OAAO,GAAG;;;;;;;;;;;;;ACS7D,MAAM,qBAAqB;AAC3B,MAAM,gBAAgB;;;;EAIpB,oCAAoC;;;;;;AAkBtC,eAAsB,+BACpB,MACA,eACA,UAAiC,UAAU,QAAQ,GACpC;CACf,MAAM,YAAY,2BAA2B,MAAM,aAAa;CAChE,IAAI,CAAC,MAAM,WAAW,IAAI,KAAK,KAAK,SAAS,IAAI,GAC/C,MAAM,IAAI,MACR,yEACF;CAEF,MAAM,MAAM,4BAA4B,QAAQ,KAAK,OAAO;CAE5D,KAAK,MAAM,OAAO,OAAO,KAAK,GAAG,GAC/B,IAAI,IAAI,YAAY,MAAM,gBACxB,OAAO,IAAI;CAGf,MAAM,SAAS,MAAM,QACnB,6BAA6B,GAAG,GAChC,2BAA2B,aAAa,GACxC;EACE,KAAK;GACH,GAAG;GACH,4BAA4B,OAAO,KACjC,KAAK,UAAU;IAAE;IAAM,eAAe;GAAU,CAAC,CACnD,CAAC,CAAC,SAAS,QAAQ;EACrB;EACA,aAAa;EACb,SAAS;EACT,WAAW;CACb,CACF;CACA,IAAI,OAAO,OAAO,KAAK,KAAK,OAAO,OAAO,KAAK,MAAM,oBACnD,MAAM,IAAI,MAAM,yDAAyD;AAE7E;;;AClDA,MAAM,2BAA2B;AACjC,MAAM,yBAAyB;AAC/B,MAAM,uBAAuB;AAgB7B,MAAa,qCAA8D;CACzE,aAAa;CACb,eAAe,CAAC,KAAK,IAAI;CACzB,gBAAgB;CAChB,eAAe,IAAI;AACrB;AAQA,IAAa,uBAAb,cAA0C,MAAM;CAC9C;CACA;CACA;CACA;CACA;CAEA,YAAY,OAOT;EACD,MACE,MAAM,SACN,MAAM,UAAU,KAAA,IAAY,KAAA,IAAY,EAAE,OAAO,MAAM,MAAM,CAC/D;EACA,KAAK,OAAO;EACZ,KAAK,oBAAoB,MAAM;EAC/B,KAAK,OAAO,yBAAyB,MAAM;EAC3C,KAAK,OAAO,MAAM;EAClB,KAAK,eAAe,MAAM;EAC1B,KAAK,YAAY,MAAM;CACzB;AACF;AAwBA,eAAsB,2BAA2B,OAKhB;CAC/B,MAAM,mBAAmB,+BAA+B,MAAM,OAAO;CACrE,MAAM,gBAAgB,MAAM,QAAQ,QAAQ,QACzC,cAAc,UAAU,gBAAgB,MAAM,cACjD;CACA,IAAI,CAAC,eAAe,QAClB,OAAO;CAGT,IAAI;CACJ,IAAI;EACF,YAAY,MAAM,SAAS,MAAM,cAAc;CACjD,SAAS,OAAO;EACd,MAAM,gBAAgB,QAAQ,KAAK,CAAC;EACpC,OAAO;CACT;CACA,MAAM,aAAa,WAAW,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,KAAK;CACtE,MAAM,QAAQ,cAAc,MACzB,cACC,UAAU,kBAAkB,UAAU,cACtC,UAAU,WAAW,YAAY,MAAM,UAC3C;CACA,IAAI,CAAC,OACH,OAAO;CAET,OAAO;EACL;EACA;EACA,mBAAmB,MAAM;EACzB,WAAW;CACb;AACF;AAEA,eAAsB,gCAAgC,OAOlC;CAClB,MAAM,WAAW,8BAA8B,MAAM,cAAc;CAKnE,IACE,MAAM,KAAK,cAAc,WACzB,MAAM,eAAe,cAAc,GAEnC,OAAO,8BAA8B;EACnC,GAAG;EACH,MAAM,+BAA+B,MAAM,OAAO;EAClD;CACF,CAAC;CAEH,IAAI,MAAM,KAAK,cAAc,SAAS;EACpC,IAAI;GACF,OAAO,MAAM,uBAAuB;IAClC,GAAG;IACH,gBAAgB,KAAK,IAAI,GAAG,MAAM,eAAe,cAAc,CAAC;IAChE,WAAW,MAAM,KAAK;IACtB,OAAO,MAAM,KAAK;IAClB;GACF,CAAC;EACH,SAAS,OAAO;GACd,MAAM,gBAAgB,QAAQ,KAAK;GACnC,IACE,yBAAyB,wBACzB,CAAC,cAAc,mBAEf,MAAM;GAER,IAAI,SAAS,mBAAmB,MAAM,eAAe,aACnD,MAAM;GAER,MAAM,gBAAgB,aAAa;GACnC,MAAM,kBAAkB;IACtB,OAAO;IACP,cAAc,SAAS;IACvB,SACE,yBAAyB,uBACpB,cAAc,gBAAgB,IAC/B;GACR,CAAC;EACH;EACA,OAAO,8BAA8B;GACnC,GAAG;GACH,MAAM,+BAA+B,MAAM,OAAO;GAClD;EACF,CAAC;CACH;CACA,OAAO,8BAA8B;EACnC,GAAG;EACH,MAAM,MAAM;EACZ;CACF,CAAC;AACH;;AAIA,SAAgB,oCACd,MAAyB,QAAQ,KACxB;CACT,OACE,IAAI,wBAAwB,UAC5B,IAAI,sCAAsC,OAC1C,IAAI,qCAAA;AAGR;AAEA,SAAS,2BACP,SACA,SACM;CACN,IAAI,UAAU,WAAW,CAAC,SACxB,MAAM,eACJ,mFACF;AAEJ;AAEA,eAAsB,8BAA8B,OAMlC;CAChB,MAAM,UAAU,MAAM,QAAQ;CAC9B,IAAI,CAAC,SAAS;EACZ,IAAI,QAAQ,aAAa,SACvB,MAAM,eACJ,yDACF;EAEF;CACF;CACA,IAAI,QAAQ,aAAa,SACvB,MAAM,eAAe,+CAA+C;CAEtE,2BAA2B,SAAS,MAAM,yBAAyB,IAAI;CACvE,IACE,IAAI,IAAI,QAAQ,cAAc,GAAG,CAAC,CAAC,WACnC,IAAI,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC,QAE3B,MAAM,eACJ,iEACF;CAEF,MAAM,QAAQ,MAAM,gCAAgC;EAClD,gBAAgB,MAAM;EACtB,WAAW,MAAM;EACjB,SAAS,QAAQ;EACjB,MAAM,+BAA+B,QAAQ,aAAa;EAC1D,uBAAuB,CAEvB;CACF,CAAC;CACD,MAAM,aAAa,KACjB,QAAQ,MAAM,YAAY,GAC1B,+BACF;CACA,MAAM,UAAU,YAAY,OAAO;EAAE,MAAM;EAAO,MAAM;CAAK,CAAC;CAC9D,IAAI,EAAE,UAAU,UACd,MAAM,+BAA+B,YAAY,QAAQ,aAAa;AAE1E;AAEA,eAAsB,6BAA6B,OAMjC;CAChB,IAAI,QAAQ,aAAa,SAAS;EAChC,IAAI,CAAC,MAAM,QAAQ,SACjB,MAAM,eACJ,uEACF;EAEF,MAAM,oCAAoC;GACxC,sBAAsB,MAAM;GAC5B,cAAc,MAAM;GACpB,SAAS,MAAM,QAAQ;EACzB,CAAC;EACD;CACF;CACA,IAAI,MAAM,QAAQ,SAChB,MAAM,eACJ,uDACF;CAEF,MAAM,EAAE,gBAAgB,mBAAmB,MAAM;CACjD,IAAI,EAAE,kBAAkB,iBAAiB;EACvC,IAAI,QAAQ,aAAa,YAAY,MAAM,6BACzC;EAEF,MAAM,eACJ,wDACF;CACF;CACA,IACE,mBAAmB,oCAAoC,kBACvD,mBAAmB,oCAAoC,gBAEvD,MAAM,eAAe,oDAAoD;CAE3E,IAAI,QAAQ,aAAa,UACvB,MAAM,eAAe,iDAAiD;CAGxE,MAAM,eAAe,MAAM,MAAM,WAAW,qBAAqB;EAC/D;EACA;EACA;EACA,MAAM;EACN,MAAM;CACR,CAAC;CACD,IAAI,aAAa,SAAS,GACxB,MAAM,eACJ,8CAA8C,sBAAsB,YAAY,GAClF;CAGF,MAAM,aAAa,MAAM,MAAM,WAAW,qBAAqB;EAC7D;EACA;EACA,MAAM;CACR,CAAC;CACD,IAAI,WAAW,SAAS,GACtB,MAAM,eACJ,4CAA4C,sBAAsB,UAAU,GAC9E;CAEF,MAAM,UAAU,GAAG,WAAW,OAAO,IAAI,WAAW;CACpD,KAAK,MAAM,YAAY,CACrB,cAAc,kBACd,kBAAkB,gBACpB,GACE,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,CAAC,MAAM,SAAS,KAAK,KAAK,MAAM,QAAQ,GAC9D,MAAM,eACJ,iDAAiD,UACnD;CAGJ,IAAI,CAAC,QAAQ,SAAS,qCAAqC,GACzD,MAAM,eACJ,2DACF;CAEF,IAAI,CAAC,yBAAyB,KAAK,OAAO,GACxC,MAAM,eACJ,uDACF;CAEF,IAAI,CAAC,qBAAqB,KAAK,OAAO,GACpC,MAAM,eACJ,sDACF;AAEJ;AAEA,eAAe,oCAAoC,OAIjC;CAChB,2BACE,MAAM,SACN,MAAM,yBAAyB,IACjC;CACA,IAAI,UAAU,MAAM,SAClB;CAEF,IAAI;EACF,MAAM,+BACJ,MAAM,cACN,MAAM,QAAQ,aAChB;CACF,SAAS,OAAO;EACd,MAAM,eACJ,mDAAmD,QAAQ,KAAK,CAAC,CAAC,SACpE;CACF;AACF;AAEA,eAAe,uBAAuB,OASlB;CAClB,MAAM,aAAa,MAAM,gCAAgC;EACvD,gBAAgB,MAAM;EACtB,mBAAmB,MAAM,MAAM;EAC/B,WAAW,MAAM;EACjB,OAAO;EACP,YAAY,MAAM;EAClB,UAAU,MAAM;EAChB,KAAK,MAAM,MAAM;CACnB,CAAC;CACD,kBAAkB;EAChB,OAAO;EACP,gBAAgB,MAAM,MAAM;EAC5B,mBAAmB,MAAM,MAAM;EAC/B,OAAO;CACT,CAAC;CAED,IAAI;CACJ,IAAI;EACF,oBAAoB,WAAW,YAAY,EACzC,iBAAiB,MAAM,MAAM,sBAC/B,CAAC;CACH,SAAS,OAAO;EACd,MAAM,eACJ,2CAA2C,QAAQ,KAAK,CAAC,CAAC,WAC1D,KACF;CACF;CACA,IAAI,kBAAkB,eAAe,MAAM,MAAM,uBAC/C,MAAM,eACJ,gDAAgD,MAAM,MAAM,sBAAsB,mBAAmB,kBAAkB,WAAW,OACpI;CAGF,IAAI;EACF,OAAO,0BAA0B;GAC/B,WAAW,MAAM;GACjB,OAAO,MAAM;GACb;GACA,cAAc,MAAM,QAAQ;GAC5B,iBAAiB,MAAM,QAAQ;EACjC,CAAC;CACH,SAAS,OAAO;EACd,MAAM,eACJ,uCAAuC,QAAQ,KAAK,CAAC,CAAC,WACtD,KACF;CACF;AACF;AAEA,SAAgB,+BACd,SACyB;CACzB,IAAI,gCAAgC,OAAO,GACzC,OAAO;EACL,gBAAgB,QAAQ;EACxB,mBAAmB,QAAQ;EAC3B,aAAa,QAAQ;EACrB,WAAW;CACb;CAEF,OAAO;EACL,gBAAgB,QAAQ;EACxB,mBAAmB,QAAQ;EAC3B,aAAa,QAAQ;EACrB,WAAW;CACb;AACF;AAEA,eAAe,8BAA8B,OAOzB;CAClB,MAAM,gBAAgB,MAAM,gCAAgC;EAC1D,mBAAmB,MAAM,KAAK;EAC9B,WAAW,MAAM;EACjB,OACE,MAAM,KAAK,cAAc,YAAY,mBAAmB;EAC1D,YAAY,MAAM;EAClB,UAAU,MAAM;EAChB,KAAK,MAAM,KAAK;CAClB,CAAC;CACD,kBAAkB;EAChB,OAAO;EACP,gBAAgB,MAAM,KAAK;EAC3B,mBAAmB,MAAM,KAAK;EAC9B,OACE,MAAM,KAAK,cAAc,YAAY,mBAAmB;CAC5D,CAAC;CACD,IAAI,gBAAgB;CACpB,IAAI,MAAM,KAAK,cAAc,WAC3B,IAAI;EACF,gBAAgB,WAAW,eAAe,EACxC,iBAAiB,MAAM,QAAQ,UACjC,CAAC;CACH,SAAS,OAAO;EACd,MAAM,eACJ,6CAA6C,QAAQ,KAAK,CAAC,CAAC,WAC5D,KACF;CACF;CAEF,kBAAkB;EAChB,OAAO;EACP,gBAAgB,MAAM,QAAQ;EAC9B,mBAAmB,MAAM,QAAQ;EACjC,OAAO;CACT,CAAC;CACD,OAAO;AACT;AAEA,SAAS,gCACP,SAMA;CACA,OACE,QAAQ,kBAAkB,UAC1B,OAAO,QAAQ,eAAe,YAC9B,OAAO,QAAQ,kBAAkB,YACjC,OAAO,QAAQ,qBAAqB;AAExC;AAEA,SAAS,kBAAkB,OAKlB;CACP,IAAI,MAAM,MAAM,eAAe,MAAM,mBACnC,MAAM,eACJ,GAAG,MAAM,MAAM,2BAA2B,MAAM,kBAAkB,mBAAmB,MAAM,MAAM,WAAW,OAC9G;CAEF,MAAM,eAAe,WAAW,QAAQ,CAAC,CAAC,OAAO,MAAM,KAAK,CAAC,CAAC,OAAO,KAAK;CAC1E,IAAI,iBAAiB,MAAM,eAAe,YAAY,GACpD,MAAM,eACJ,GAAG,MAAM,MAAM,6BAA6B,MAAM,eAAe,YAAY,EAAE,aAAa,cAC9F;AAEJ;AAQA,SAAS,8BACP,QACyB;CACzB,IACE,CAAC,OAAO,UAAU,OAAO,WAAW,KACpC,OAAO,cAAc,KACrB,CAAC,OAAO,SAAS,OAAO,cAAc,KACtC,OAAO,kBAAkB,KACzB,CAAC,OAAO,SAAS,OAAO,aAAa,KACrC,OAAO,iBAAiB,KACxB,OAAO,cAAc,MAClB,YAAY,CAAC,OAAO,SAAS,OAAO,KAAK,UAAU,CACtD,GAEA,MAAM,IAAI,MAAM,wCAAwC;CAE1D,OAAO;EACL,iBAAiB;EACjB,cAAc,YAAY,IAAI,IAAI,OAAO;EACzC;CACF;AACF;AAEA,eAAe,gCAAgC,OAQ3B;CAClB,IAAI,YAAyC;CAC7C,MAAM,iBAAiB,KAAK,IAC1B,MAAM,kBAAkB,MAAM,SAAS,OAAO,aAC9C,MAAM,SAAS,OAAO,WACxB;CACA,OAAO,MAAM,SAAS,kBAAkB,gBAAgB;EACtD,IAAI,YAAY,IAAI,KAAK,MAAM,SAAS,cACtC,MAAM,iBAAiB,aAAa,KAAA,CAAS;EAE/C,MAAM,eAAe,MAAM,SAAS;EACpC,MAAM,SAAS,mBAAmB;EAClC,IAAI;GACF,OAAO,MAAM,2BAA2B,KAAK;EAC/C,SAAS,OAAO;GACd,MAAM,WAAW,uBAAuB,OAAO,MAAM,KAAK;GAC1D,YAAY;GACZ,IAAI,CAAC,SAAS,WACZ,MAAM;GAER,IAAI,MAAM,SAAS,mBAAmB,gBACpC,MAAM;GAER,MAAM,UACJ,MAAM,SAAS,OAAO,cAAc,iBACpC,MAAM,SAAS,OAAO,cAAc,GAAG,EAAE,KACzC;GACF,MAAM,kBAAkB;IACtB,OAAO;IACP,cAAc,MAAM,SAAS;IAC7B,SAAS,KAAK,IAAI,SAAS,SAAS,gBAAgB,CAAC;GACvD,CAAC;EACH;CACF;CACA,MAAM,aAAa,iBAAiB;AACtC;AAEA,eAAe,2BAA2B,OAOtB;CAClB,MAAM,aAAa,IAAI,gBAAgB;CACvC,IAAI,SAAyD;CAC7D,IAAI,mBAAmB,YAAY,IAAI;CACvC,IAAI;EACF,MAAM,WAAW,MAAM,wBACrB,MAAM,UAAU,MAAM,KAAK;GACzB,QAAQ;GACR,QAAQ,WAAW;EACrB,CAAC,GACD;GACE;GACA;GACA,UAAU,MAAM;EAClB,CACF;EACA,IAAI,CAAC,SAAS,IAAI;GAChB,qBAAqB,SAAS,IAAI;GAClC,MAAM,kBAAkB;IACtB,OAAO,MAAM;IACb,YAAY,SAAS,QAAQ,IAAI,aAAa;IAC9C,QAAQ,SAAS;IACjB,YAAY,SAAS;GACvB,CAAC;EACH;EACA,IAAI,CAAC,SAAS,MACZ,OAAO,OAAO,MAAM,CAAC;EAGvB,SAAS,SAAS,KAAK,UAAU;EACjC,MAAM,SAAmB,CAAC;EAC1B,IAAI,gBAAgB;EACpB,MAAM,aAAa;GACjB;GACA,YAAY,MAAM;GAClB,iBAAiB,MAAM,SAAS;EAClC,CAAC;EACD,OAAO,MAAM;GACX,MAAM,OAAO,MAAM,wBAAwB,OAAO,KAAK,GAAG;IACxD;IACA;IACA,UAAU,MAAM;GAClB,CAAC;GACD,IAAI,KAAK,MACP,OAAO,OAAO,OAAO,QAAQ,aAAa;GAE5C,IAAI,CAAC,KAAK,SAAS,KAAK,MAAM,eAAe,GAC3C;GAEF,mBAAmB,YAAY,IAAI;GACnC,iBAAiB,KAAK,MAAM;GAC5B,IAAI,gBAAgB,MAAM,mBACxB,MAAM,eACJ,GAAG,MAAM,MAAM,8BAA8B,MAAM,kBAAkB,yBACvE;GAEF,MAAM,aAAa;IACjB;IACA,YAAY,MAAM;IAClB,iBAAiB,MAAM,SAAS;GAClC,CAAC;GACD,OAAO,KAAK,OAAO,KAAK,KAAK,KAAK,CAAC;EACrC;CACF,SAAS,OAAO;EACd,WAAW,MAAM,KAAK;EACtB,IAAI,QACF,2BAA2B,MAAM;EAEnC,MAAM;CACR,UAAU;EACR,QAAQ,YAAY;CACtB;AACF;AAEA,eAAe,wBACb,SACA,OAKY;CACZ,MAAM,oBACJ,MAAM,mBAAmB,MAAM,SAAS,OAAO;CACjD,MAAM,oBAAoB,MAAM,SAAS,gBAAgB;CACzD,MAAM,eAAe,KAAK,IAAI,mBAAmB,MAAM,SAAS,YAAY;CAC5E,MAAM,YAAY,KAAK,IAAI,GAAG,eAAe,YAAY,IAAI,CAAC;CAC9D,IAAI,QAA8C;CAClD,MAAM,UAAU,IAAI,SAAgB,UAAU,WAAW;EACvD,QAAQ,iBAAiB;GACvB,MAAM,QAAQ,oBAAoB,iBAAiB,IAAI,aAAa;GACpE,OAAO,KAAK;GACZ,MAAM,WAAW,MAAM,KAAK;EAC9B,GAAG,SAAS;CACd,CAAC;CACD,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,OAAO,CAAC;CAC9C,UAAU;EACR,IAAI,OACF,aAAa,KAAK;CAEtB;AACF;AAEA,eAAe,kBAAkB,OAIf;CAChB,IAAI,MAAM,YAAY,GACpB;CAGF,IADoB,MAAM,eAAe,YAAY,IAAI,KACtC,MAAM,SACvB,MAAM,iBAAiB,MAAM,KAAK;CAEpC,MAAM,IAAI,SAAe,YAAY,WAAW,SAAS,MAAM,OAAO,CAAC;AACzE;AAEA,SAAS,uBACP,OACA,OACsB;CACtB,IAAI,iBAAiB,sBACnB,OAAO;CAET,MAAM,WAAW,QAAQ,KAAK;CAC9B,MAAM,qBAAqB,cAAc,OAAO,sBAAsB;CACtE,IAAI,sBAAsB,0BAA0B,SAAS,OAAO,GAClE,OAAO,IAAI,qBAAqB;EAC9B,mBAAmB;EACnB,OAAO;EACP,MAAM;EACN,SAAS,GAAG,MAAM,+CAChB,qBAAqB,KAAK,mBAAmB,KAAK;EAEpD,WAAW;CACb,CAAC;CAEH,MAAM,YAAY,QAAQ,cAAc,OAAO,2BAA2B,CAAC;CAC3E,OAAO,IAAI,qBAAqB;EAC9B,mBAAmB;EACnB,OAAO;EACP,MAAM;EACN,SAAS,GAAG,MAAM,oBAAoB,SAAS;EAC/C;CACF,CAAC;AACH;AAEA,SAAS,kBAAkB,OAKF;CACvB,MAAM,YACJ,MAAM,WAAW,OACjB,MAAM,WAAW,OACjB,MAAM,WAAW,OACjB,MAAM,WAAW,OACjB,MAAM,WAAW,OACjB,MAAM,WAAW;CACnB,MAAM,eAAe,MAAM,WAAW,OAAO,MAAM,WAAW;CAC9D,MAAM,eAAe,MAAM,aACvB,kBAAkB,MAAM,UAAU,IAClC,KAAA;CACJ,OAAO,IAAI,qBAAqB;EAC9B,mBAAmB,aAAa;EAChC,MAAM;EACN,SAAS,GAAG,MAAM,MAAM,yBAAyB,MAAM,SACrD,MAAM,aAAa,IAAI,MAAM,eAAe;EAE9C,GAAI,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa;EACrD;CACF,CAAC;AACH;AAEA,SAAS,kBAAkB,OAAmC;CAC5D,MAAM,UAAU,MAAM,KAAK;CAC3B,IAAI,uBAAuB,KAAK,OAAO,GAAG;EAExC,MAAM,eADU,OAAO,OACI,IAAI;EAC/B,OAAO,OAAO,cAAc,YAAY,IAAI,eAAe,KAAA;CAC7D;CACA,MAAM,YAAY,KAAK,MAAM,OAAO;CACpC,IAAI,CAAC,OAAO,SAAS,SAAS,GAC5B;CAEF,OAAO,KAAK,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC;AAC3C;AAEA,SAAS,eAAqC;CAC5C,OAAO,IAAI,qBAAqB;EAC9B,mBAAmB;EACnB,MAAM;EACN,SAAS;EACT,WAAW;CACb,CAAC;AACH;AAEA,SAAS,iBAAiB,OAAuC;CAC/D,OAAO,IAAI,qBAAqB;EAC9B,mBAAmB;EACnB,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;EACvC,MAAM;EACN,SAAS;EACT,WAAW;CACb,CAAC;AACH;AAEA,SAAS,eACP,SACA,OACsB;CACtB,OAAO,IAAI,qBAAqB;EAC9B,mBAAmB;EACnB,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;EACvC,MAAM;EACN;EACA,WAAW;CACb,CAAC;AACH;AAEA,SAAS,cACP,OACA,WACe;CACf,MAAM,uBAAO,IAAI,IAAa;CAC9B,IAAI,UAAmB;CACvB,OAAO,WAAW,OAAO,YAAY,YAAY,CAAC,KAAK,IAAI,OAAO,GAAG;EACnE,KAAK,IAAI,OAAO;EAChB,MAAM,OAAQ,QAA+B;EAC7C,IAAI,OAAO,SAAS,YAAY,UAAU,KAAK,YAAY,CAAC,GAC1D,OAAO;EAET,UAAW,QAAgC;CAC7C;CACA,OAAO;AACT;AAEA,SAAS,qBAAqB,QAAiD;CAC7E,IAAI,CAAC,QACH;CAEF,IAAI;EACF,OAAO,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;CACvC,QAAQ,CAER;AACF;AAEA,SAAS,2BACP,QACM;CACN,IAAI;EACF,OAAO,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;CACvC,QAAQ,CAER;AACF;AAEA,SAAS,uBAAuB,MAAuB;CACrD,OACE,KAAK,WAAW,OAAO,KACvB,KAAK,SAAS,QAAQ,KACtB,KAAK,WAAW,WAAW,KAC3B,KAAK,WAAW,UAAU,KAC1B,KAAK,WAAW,UAAU,KAC1B,SAAS,iCACT,SAAS,+BACT,KAAK,WAAW,2BAA2B,KAC3C,SAAS;AAEb;AAEA,SAAS,0BAA0B,SAA0B;CAC3D,MAAM,aAAa,QAAQ,YAAY;CACvC,OACE,WAAW,SAAS,aAAa,KACjC,WAAW,SAAS,aAAa,KACjC,WAAW,SAAS,eAAe,KACnC,WAAW,SAAS,kBAAkB;AAE1C;AAEA,SAAS,4BAA4B,MAAuB;CAC1D,OACE,SAAS,eACT,SAAS,kBACT,SAAS,kBACT,SAAS,gBACT,SAAS,kBACT,SAAS,cACT,SAAS,iBACT,SAAS,eACT,SAAS,WACT,SAAS,eACT,SAAS,0BACT,SAAS,6BACT,SAAS,6BACT,SAAS,yCACT,SAAS;AAEb;AAEA,SAAS,sBAAsB,QAA+B;CAC5D,OAAO,OAAO,OAAO,KAAK,KAAK,OAAO,OAAO,KAAK,KAAK,QAAQ,OAAO;AACxE;AAEA,SAAS,QAAQ,OAAuB;CACtC,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACjE;;;AC95BA,MAAM,0CACJ;AACF,MAAM,gDACJ;AAEF,MAAa,uCACX;AAIF,SAAgB,sCACd,KACM;CACN,KAAK,MAAM,OAAO;EAChB;EACA;EACA;EACA;EACA;CACF,GACE,OAAO,IAAI;CAEb,IAAI,uCAAuC;AAC7C;AACA,MAAM,2BAA2B;AAEjC,SAAgB,sCACd,YAAyC,CAAC,GAClC;CACR,OAAO,KAAK,sBAAsB,SAAS,GAAG,2BAA2B;AAC3E;AAEA,eAAsB,sCACpB,YAAyC,CAAC,GAC1C,WAA4BA,UAAQ,UACpC,oBACkB;CAClB,IAAI,aAAa,SAAS;EACxB,MAAM,EAAE,oBAAoB,0BAA0B,MAAM,OAC1D;EAEF,MAAM,OAAO,MAAM,mBAAmB;GACpC,MAAM,yCAAyC,SAAS,CAAC,CACtD;GACH,cACE,kDAAkD,SAAS;GAC7D,WAAW;EACb,CAAC;EACD,OAAO,QACL,KAAK,aACH,CAAC,KAAK,UACN,KAAK,oBACJ,uBAAuB,KAAA,KACtB,KAAK,oBAAoB,uBAC3B,uBAAuB,EACrB,KAAK,sBAAsB,KAAK,eAAe,CAAC,CAAC,IACnD,CAAC,MAAM,uBAAuB,SAAS,CAC3C;CACF;CACA,MAAM,eAAe,MAAM,0CACzB,WACA,QACF;CACA,IAAI,CAAC,cAAc,SAAA,qCAA6C,GAC9D,OAAO;CAET,IAAI,uBAAuB,KAAA,KAAa,iBAAiB,oBACvD,OAAO;CAET,MAAM,EAAE,gDAAgD,MAAM,OAC5D;CAMF,OAAO,uBAAuB,EAAE,KAJpB,4CAA4C;EACtD,YAAY,aAAa,WAAW,YAAY;EAChD,YAAY;CACd,CACkC,EAAE,CAAC,MAAM,uBAAuB,SAAS;AAC7E;AASA,SAAgB,yCACd,YAAyC,CAAC,GACP;CACnC,MAAM,SAAS,yBAAyB,SAAS;CACjD,MAAM,QAAQ,4BAA4B,SAAS;CACnD,MAAM,UACH,WAAW,SAAS,KAAK,IAAI,aAAa,QAAQ,IAAI,UAAU;CAGnE,OAAO;EACL,cAAc,wCAFb,WAAW,SAAS,KAAK,IAAI,aAAa,QAAQ,IAAI,UAAU;EAGjE,aAAa,0BAA0B;EACvC,oBAAoB,0BAClB,WAAW,SAAS,KAAK,KAAK,OAAO;EAEvC,oBAAoB,0BAA0B;CAChD;AACF;AAEA,SAAgB,iDACd,YAAyC,CAAC,GAClC;CACR,OAAO,KACL,UAAU,WAAW,QAAQ,GAC7B,WACA,gBACA,GAAG,yCAAyC,SAAS,CAAC,CAAC,aAAa,OACtE;AACF;AAEA,SAAgB,gDACd,YAAyC,CAAC,GAClC;CACR,OAAO,KACL,UAAU,WAAW,QAAQ,GAC7B,WACA,WACA,QACA,GAAG,yCAAyC,SAAS,CAAC,CAAC,YAAY,SACrE;AACF;AAEA,SAAgB,oDACd,YAAyC,CAAC,GAClC;CACR,OAAO,KACL,UAAU,WAAW,QAAQ,GAC7B,WACA,WACA,QACA,GAAG,yCAAyC,SAAS,CAAC,CAAC,YAAY,MACrE;AACF;AAEA,SAAgB,kDACd,YAAyC,CAAC,GAClC;CACR,OAAO,KAAK,sBAAsB,SAAS,GAAG,2BAA2B;AAC3E;AAEA,SAAgB,qDACd,YAAyC,CAAC,GAClC;CACR,OAAO,KACL,UAAU,WAAW,QAAQ,GAC7B,WACA,WACA,QACA,GAAG,yCAAyC,SAAS,CAAC,CAAC,YAAY,OACrE;AACF;AAEA,eAAsB,sDACpB,YAAyC,CAAC,GAC1C,WAA4BA,UAAQ,UACd;CACtB,MAAM,WAAW,MAAM,0CACrB,WACA,QACF;CACA,OAAO,aAAa,uBAChB,IAAI,IAAI,IACR,gDAAgD,QAAQ;AAC9D;AAEA,eAAsB,gDACpB,YAAyC,CAAC,GAC1C,WAA4BA,UAAQ,UACd;CACtB,MAAM,WAAW,MAAM,0CACrB,WACA,QACF;CACA,MAAM,eACJ,aAAa,uBACT,IAAI,IAAY,IAChB,0CAA0C,QAAQ;CAExD,MAAM,WAAW,MAAM,SADF,sCAAsC,SAChB,GAAG,MAAM,CAAC,CAAC,OAAO,UAAU;EACrE,IAAIC,eAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR,CAAC;CACD,IAAI,aAAa,MAAM;EACrB,MAAM,aAAa,SAAS,KAAK,CAAC,CAAC,MAAM,wBAAwB;EACjE,IAAI,CAAC,aAAa,IAChB,MAAM,IAAI,MACR,uEACF;EAEF,MAAM,YAAY,cAAc,KAAK,MAAM,WAAW,EAAE,CAAW;EACnE,KAAK,MAAM,MAAM,0CAA0C,SAAS,GAClE,aAAa,IAAI,EAAE;CAEvB;CACA,OAAO;AACT;AAEA,SAAgB,gDACd,UACa;CACb,MAAM,2BAAW,IAAI,IAAY;CACjC,KAAK,MAAM,SAAS,SAAS,SAC3B,uCACF,GAAG;EACD,MAAM,UAAU,MAAM;EACtB,IAAI,SACF,SAAS,IAAI,OAAO;CAExB;CACA,OAAO;AACT;AAEA,SAAgB,0CACd,UACa;CACb,MAAM,4BAAY,IAAI,IAAY;CAClC,KAAK,MAAM,SAAS,SAAS,SAC3B,6CACF,GAAG;EACD,MAAM,WAAW,MAAM;EACvB,IAAI,UACF,UAAU,IAAI,QAAQ;CAE1B;CACA,OAAO;AACT;AAEA,SAAgB,iDACd,WACA,UACe;CACf,IAAI,aAAa,UACf,OAAO,iDAAiD,SAAS;CAEnE,IAAI,aAAa,SACf,OAAO,gDAAgD,SAAS;CAElE,IAAI,aAAa,SACf,OAAO,kDAAkD,SAAS;CAEpE,OAAO;AACT;AAEA,eAAe,0CACb,WACA,UACwB;CACxB,IAAI,aAAa,SAAS;EACxB,MAAM,EAAE,oBAAoB,0BAA0B,MAAM,OAC1D;EAEF,MAAM,OAAO,MAAM,mBAAmB;GACpC,MAAM,yCAAyC,SAAS,CAAC,CACtD;GACH,cACE,kDAAkD,SAAS;GAC7D,WAAW;EACb,CAAC;EACD,IAAI,KAAK,iBAAiB;GACxB,MAAM,SAAS,sBAAsB,KAAK,eAAe;GACzD,OAAO,CAAC,OAAO,YAAY,GAAG,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI;EACtD;EACA,IAAI,CAAC,KAAK,QACR,OAAO;CAEX;CACA,MAAM,mBAAmB,iDACvB,WACA,QACF;CACA,IAAI,qBAAqB,MACvB,OAAO;CAET,OAAO,MAAM,SAAS,kBAAkB,MAAM,CAAC,CAAC,OAAO,UAAU;EAC/D,IAAIA,eAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR,CAAC;AACH;AAEA,SAASA,eAAa,OAA+B;CACnD,OAAO,SAAS,OAAO,UAAU,YAAY,UAAU,QACnD,OAAO,MAAM,IAAI,IACjB;AACN;;;AC5SA,SAAgB,+BAEF;CACZ,IAAI,CAAC,qBAAqB,GACxB;CAEF,MAAM,WAAWC;CACjB,MAAM,YACJ,OAAO,iCAAiC,cACpC,SAAS,UAAU,UACnB;CACN,IAAI,cAAc,KAAA,GAChB;CAEF,MAAM,SAAS,8BAA8B,UAAU,SAAS;CAChE,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,MACR,8DACF;CAEF,MAAM,WAAW,yBAAyB,QAAQ,UAAU,QAAQ,IAAI;CACxE,MAAM,WAAW,OAAO,KAAK,UAAU;CACvC,IAAI,CAAC,UACH,MAAM,IAAI,MACR,iDAAiD,SAAS,EAC5D;CAEF,OAAO;EACL,GAAG;EACH,SAAS,OAAO,KAAK;EACrB;EACA,uBAAuB;CACzB;AACF;;;AC/BA,MAAM,sBAAsB;AAQ5B,MAAa,mCACX;AAGF,SAAgB,+BACd,YAAyC,CAAC,GAClC;CACR,OAAO,KAAK,2BAA2B,SAAS,GAAG,qBAAqB;AAC1E;AAEA,SAAgB,4BACd,YAAyC,CAAC,GAClC;CACR,OAAO,KACL,2BAA2B,SAAS,GACpC,0BACF;AACF;AAEA,eAAsB,+BACpB,YAAyC,CAAC,GACF;CACxC,OAAO,MAAM,2BACX,+BAA+B,SAAS,CAC1C;AACF;AAEA,eAAsB,4BACpB,YAAyC,CAAC,GACF;CACxC,OAAO,MAAM,2BACX,4BAA4B,SAAS,CACvC;AACF;AAEA,eAAsB,kCACpB,KACA,YAAyC,CAAC,GAC3B;CACf,MAAM,yBAAyB;EAC7B;EACA,MAAM,+BAA+B,SAAS;CAChD,CAAC;AACH;AAEA,eAAsB,mCACpB,KACA,YAAyC,CAAC,GAC1C,gBAAgB,OACD;CACf,MAAM,yBAAyB;EAC7B;EACA,MAAM,4BAA4B,SAAS;CAC7C,CAAC;CACD,IAAI,eAAe;EAGjB,MAAM,kCAAkC,KAAK,SAAS;EACtD;CACF;CACA,MAAM,GAAG,+BAA+B,SAAS,GAAG,EAAE,OAAO,KAAK,CAAC;AACrE;AAsDA,eAAe,2BACb,MACwC;CACxC,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC,CAAC,OACtC,UAAiC;EAChC,IAAI,MAAM,SAAS,UACjB,OAAO;EAET,MAAM;CACR,CACF;CACA,IAAI,QAAQ,MACV,OAAO;CAET,MAAM,SAAS,mCAAmC,UAChD,KAAK,MAAM,GAAG,CAChB;CACA,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,MAAM,2CAA2C;CAE7D,IAAI;CACJ,IAAI,OAAO,KAAK,MAAM,GACpB,MAAM,OAAO;MACR;EACL,MAAM,EAAE,QAAQ,GAAG,cAAc,OAAO;EACxC,MAAM,6BAA6B,MAAM;GACvC,GAAG;GACH,GAAG;GACH,QAAQ;GACR,OAAO,mBAAmB,MAAM;GAChC,eAAe;EACjB,CAAC;CACH;CACA,MAAM,UAAU,MAAM,+BAA+B,QAAQ,IAAI,CAAC;CAClE,IAAI,SAAS,UAAU,IAAI,OACzB,OAAO;CAET,OAAO,6BAA6B,MAAM;EAAE,GAAG;EAAK,GAAG;CAAQ,CAAC;AAClE;AAEA,SAAS,mBACP,QACiC;CACjC,QAAQ,QAAR;EACE,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,SAEE,OAAOC;CAEX;AACF;AAEA,eAAe,yBAAyB,OAGtB;CAChB,MAAM,EAAE,kBAAkB,sBAAsB,GAAG,kBACjD,MAAM;CACR,MAAM,gCAAgC,QAAQ,MAAM,IAAI,GAAG;EACzD,OAAO,MAAM,IAAI;EACjB,GAAI,mBAAmB,EAAE,iBAAiB,IAAI,CAAC;EAC/C,GAAI,uBAAuB,EAAE,qBAAqB,IAAI,CAAC;CACzD,CAAC;CACD,MAAM,gBAAgB,GAAG,MAAM,KAAK,GAAG,OAAO,QAAQ,GAAG,EAAE;CAC3D,MAAM,MAAM,QAAQ,MAAM,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;CACpD,MAAM,UACJ,eACA,GAAG,KAAK,UAAU,eAAe,MAAM,CAAC,EAAE,KAC1C;EAAE,UAAU;EAAQ,MAAM;CAAM,CAClC;CACA,MAAM,OAAO,eAAe,MAAM,IAAI;AACxC;AAEA,eAAe,+BACb,WAC4C;CAC5C,MAAM,MAAM,MAAM,SAChB,KAAK,WAAW,mBAAmB,GACnC,MACF,CAAC,CAAC,OAAO,UAAiC;EACxC,IAAI,MAAM,SAAS,UACjB,OAAO;EAET,MAAM;CACR,CAAC;CACD,IAAI,QAAQ,MACV,OAAO;CAET,MAAM,QAAQ,KAAK,MAAM,GAAG;CAC5B,MAAM,QAAQ,gBAAgB,MAAM,KAAK;CACzC,MAAM,mBAAmB,gBAAgB,MAAM,gBAAgB;CAC/D,MAAM,uBAAuB,gBAAgB,MAAM,oBAAoB;CACvE,IAAI,CAAC,OACH,OAAO;CAET,OAAO;EACL;EACA,GAAI,mBAAmB,EAAE,iBAAiB,IAAI,CAAC;EAC/C,GAAI,uBAAuB,EAAE,qBAAqB,IAAI,CAAC;CACzD;AACF;AAEA,eAAe,gCACb,WACA,SACe;CACf,MAAM,OAAO,KAAK,WAAW,mBAAmB;CAChD,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,QAAQ,GAAG,EAAE;CACrD,MAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;CAC1C,MAAM,UAAU,eAAe,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,EAAE,KAAK;EACtE,UAAU;EACV,MAAM;CACR,CAAC;CACD,MAAM,OAAO,eAAe,IAAI;AAClC;AAEA,SAAS,gBAAgB,OAA+B;CACtD,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AACpE;;;AC5PA,MAAM,oCACJ;AAEF,eAAsB,qBAAqB,OAKzB;CAChB,MAAM,cAAc,oBAAoB,MAAM,SAAS;CAEvD,MAAM,mBAAkB,MADF,QAAQ,aAAa,EAAE,eAAe,KAAK,CAAC,EAAA,CAE/D,QACE,UACC,MAAM,YAAY,KAClB,kCAAkC,KAAK,MAAM,IAAI,CACrD,CAAC,CACA,KAAK,UAAU,MAAM,IAAI;CAC5B,MAAM,wBAAwB,IAAI,KAE9B,MAAM,QAAQ,IACZ,gBAAgB,IAAI,OAAO,aAAa;EACtC,QAAQ,MAAM,uBAAuB,SAAS,WAAW;EACzD;CACF,EAAE,CACJ,EAAA,CAEC,QAAQ,UAAU,MAAM,MAAM,CAAC,CAC/B,KAAK,UAAU,MAAM,OAAO,CACjC;CACA,MAAM,mCAAmB,IAAI,IAAI,CAAC,MAAM,cAAc,CAAC;CACvD,IAAI,kBAAiC;CAErC,IACE,MAAM,4BACN,MAAM,6BAA6B,MAAM,kBACzC,sBAAsB,IAAI,MAAM,wBAAwB,GAExD,kBAAkB,MAAM;CAG1B,oBACE,CAAC,GAAG,qBAAqB,CAAC,CACvB,QAAQ,YAAY,cAAc,SAAS,MAAM,cAAc,IAAI,CAAC,CAAC,CACrE,MAAM,MAAM,UAAU,cAAc,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM;CAE7D,IAAI,iBACF,iBAAiB,IAAI,eAAe;CAOtC,KAAK,MAAM,oBAAoB,MAAM,qBAAqB,CAAC,GACzD,IAAI,sBAAsB,IAAI,gBAAgB,GAC5C,iBAAiB,IAAI,gBAAgB;CAIzC,KAAK,MAAM,WAAW,iBAAiB;EACrC,IAAI,iBAAiB,IAAI,OAAO,GAC9B;EAEF,IAAI,QAAQ,aAAa,SACvB,MAAM,yBAAyB,KAAK,KAAK,aAAa,OAAO,CAAC;OAE9D,MAAM,GAAG,KAAK,KAAK,aAAa,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;CAEjE;AACF;AAEA,eAAe,uBACb,SACA,aACkB;CAClB,MAAM,SAAS,KAAK,KAAK,aAAa,SAAS,0BAA0B,CAAC;CAO1E,IAAI,EAAC,MANe,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU;EAChD,IAAIC,eAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR,CAAC,EAAA,EACW,OAAO,GACjB,OAAO;CAET,OAAO,MAAM,OAAO,QAAQC,UAAY,IAAI,CAAC,CAAC,WACtC,OACL,UAAU;EACT,IACED,eAAa,KAAK,MAAM,YACxBA,eAAa,KAAK,MAAM,UAExB,OAAO;EAET,MAAM;CACR,CACF;AACF;AAEA,SAASA,eAAa,OAA+B;CACnD,OAAO,SAAS,OAAO,UAAU,YAAY,UAAU,QACnD,OAAO,MAAM,IAAI,IACjB;AACN;;;AC7DA,MAAM,+BAA+B;AACrC,MAAM,2BAA2B;AACjC,MAAM,sCAAsC;AAC5C,MAAM,kCAAkC;AAoBxC,SAAgB,0BAAkC;CAChD,OAAO,yBAAyBE,UAAQ,UAAUA,UAAQ,IAAI;AAChE;AAEA,SAAgB,wBAAgC;CAC9C,OAAO;AACT;AAEA,eAAe,sBAAsB,QAAkC;CAOrE,IAAI,EAAC,MANe,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU;EAChD,IAAI,gBAAgB,OAAO,QAAQ,GACjC,OAAO;EAET,MAAM;CACR,CAAC,EAAA,EACW,OAAO,GACjB,OAAO;CAET,OAAO,MAAM,OAAO,QAAQC,UAAY,IAAI,CAAC,CAAC,WACtC,OACL,UAAU;EACT,IACE,gBAAgB,OAAO,QAAQ,KAC/B,gBAAgB,OAAO,QAAQ,GAE/B,OAAO;EAET,MAAM;CACR,CACF;AACF;AAKA,eAAe,0BACb,YAAyC,CAAC,GAClB;CACxB,IAAID,UAAQ,aAAa,SACvB,OAAO,MAAM,6BACX,uBAAuB,SAAS,CAClC;CAEF,MAAM,cAAc,0BAA0B,SAAS;CACvD,MAAM,SAAS,MAAM,SAAS,WAAW,CAAC,CAAC,OAAO,UAAU;EAC1D,IAAI,gBAAgB,OAAO,QAAQ,KAAK,gBAAgB,OAAO,QAAQ,GACrE,OAAO;EAET,MAAM;CACR,CAAC;CACD,IAAI,CAAC,QACH,OAAO;CAET,MAAM,WAAW,KAAK,WAAW,MAAM,IACnC,SACA,KAAK,QAAQ,KAAK,QAAQ,WAAW,GAAG,MAAM;CAClD,MAAM,UAAU,KAAK,SAAS,KAAK,QAAQ,QAAQ,CAAC;CACpD,OAAO,QAAQ,SAAS,KACtB,KAAK,QAAQ,QAAQ,MACnB,iCAAiC,SAAS,SAAS,IACnD,UACA;AACN;AAEA,eAAsB,2BACpB,YAAyC,CAAC,GAIlC;CACR,MAAM,UAAU,MAAM,0BAA0B,SAAS;CACzD,IAAI,CAAC,SACH,OAAO;CAET,MAAM,aAAa,iCAAiC,SAAS,SAAS;CACtE,IAAI,CAAE,MAAM,sBAAsB,UAAU,GAC1C,OAAO;CAET,OAAO;EAAE;EAAS;CAAW;AAC/B;AAEA,eAAsB,8BAA6C;CACjE,IAAIA,UAAQ,aAAa,SACvB;CAEF,MAAM,8BAA8B,YAAY;EAC9C,MAAM,UAAU,MAAM,0BAA0B;EAChD,IAAI,SACF,MAAM,gCAAgC,uBAAuB,GAAG,OAAO;CAE3E,CAAC;AACH;;;;;;;;AASA,eAAsB,sBAAsB,OAIT;CACjC,OAAO,MAAM,8BAA8B,YACzC,4BAA4B,KAAK,CACnC;AACF;AAEA,eAAsB,8BACpB,KACA,YAAyC,CAAC,GAC9B;CACZ,MAAM,cAAc,KAAK,IAAI;CAE7B,SACE,IAAI;EAOF,OAAO,MAAM,gBAAgB;GAC3B,MAAA,MAPiB,YAAY;IAC7B,mBAAmB;IACnB,KAAK;IACL,MAAM,EAAE,WAAW,sBAAsB;IACzC,gBAAgB;GAClB,CAAC;GAGC;GACA,gBAAgB;IACd,WAAW;IACX,SAAS;IACT,mBAAmB;GACrB;EACF,CAAC;CACH,SAAS,OAAO;EACd,IACE,CAAC,oBAAoB,KAAK,KAC1B,4BAA4B,KAAK,KACjC,KAAK,IAAI,IAAI,eAAe,iCAE5B,MAAM;EAER,MAAME,aAAM,mCAAmC;CACjD;AAEJ;;;;;;AAOA,eAAsB,4BAA4B,OAGhC;CAChB,MAAM,YAAY,MAAM;CACxB,+CACE,WACA,sBACF;CACA,MAAM,8BAA8B,YAAY;EAC9C,MAAM,iBAAiB,MAAM,0BAA0B,SAAS;EAChE,IAAI,mBAAmB,MACrB;EAEF,MAAM,oBACJ,MAAM,oCAAoC,SAAS;EACrD,MAAM,qBAAqB;GACzB;GACA;GACA,0BAA0B,MAAM;GAChC;EACF,CAAC;CACH,GAAG,SAAS;AACd;AAEA,eAAe,4BAA4B,OAGR;CACjC,+CACE,CAAC,GACD,0BACF;CACA,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,UAAU,sBAAsB;CACtC,MAAM,WAAW,wBAAwB;CACzC,MAAM,qBAAqB,0BAA0B;CACrD,MAAM,oBAAoB,iCAAiC,OAAO;CAClE,MAAM,kBAAkB,MAAM,0BAA0B;CACxD,MAAM,oBAAoB,MAAM,oCAAoC;CAEpE,MAAM,cAAc;EAClB;EACA;EACA;EACA;EACA;EACA,QAAQ;CACV;CAEA,IAAI,oBAAoB,MAAM;EAC5B,MAAM,aAAa,cAAc,SAAS,eAAe;EACzD,IACE,CAAC,SACD,eAAe,KACd,MAAM,sBAAsB,iBAAiB,GAC9C;GACA,IAAIF,UAAQ,aAAa,SACvB,MAAM,gCACJ,uBAAuB,GACvB,eACF;GAEF,MAAM,qBAAqB;IACzB,gBAAgB;IAChB;GACF,CAAC;GACD,OAAO;IAAE,GAAG;IAAa,QAAQ;GAAoB;EACvD;EACA,IAAI,aAAa,KAAK,CAAC,OAAO;GAC5B,IAAIA,UAAQ,aAAa,SACvB,MAAM,gCACJ,uBAAuB,GACvB,eACF;GAEF,IAAI,CAAE,MAAM,sBAAsB,iBAAiB,GACjD,MAAM,qBACJ,OAAO,oBAAoBA,UAAQ,UACnC,SACA,iBACF;GAEF,MAAM,qBAAqB;IACzB,gBAAgB;IAChB,0BAA0B;IAC1B;GACF,CAAC;GACD,OAAO;IAAE,GAAG;IAAa,QAAQ;GAAqB;EACxD;CACF;CAEA,MAAM,qBACJ,OAAO,oBAAoBA,UAAQ,UACnC,SACA,iBACF;CACA,MAAM,qBAAqB;EACzB,gBAAgB;EAChB,0BAA0B;EAC1B;CACF,CAAC;CACD,MAAM,mBAAmB,oBAAoB,iBAAiB;CAE9D,OAAO;EAAE,GAAG;EAAa,QAAQ;CAAY;AAC/C;AAEA,eAAe,oCACb,YAAyC,CAAC,GACpB;CACtB,MAAM,CAAC,mBAAmB,sBAAsB,gBAC9C,MAAM,QAAQ,IAAI;EAChB,sDAAsD,SAAS;EAC/D,+BAA+B,SAAS;EACxC,4BAA4B,SAAS;CACvC,CAAC;CAGH,IAAI,cAAc,iBAAiB,aACjC,kBAAkB,IAAI,aAAa,aAAa;CAElD,IAAI,sBAAsB,eAAe,iBAAiB,aACxD,kBAAkB,IAAI,qBAAqB,eAAe,aAAa;CAEzE,OAAO;AACT;AAEA,eAAe,qBACb,cACA,SACA,mBACe;CACf,IAAIA,UAAQ,aAAa,SAAS;EAChC,MAAM,2BAA2B;GAC/B,MAAM,uBAAuB;GAC7B;GACA;EACF,CAAC;EACD;CACF;CACA,MAAM,MAAM,0BAA0B,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;CACnE,MAAM,UAAU,GAAG,kBAAkB,OAAOA,UAAQ,IAAI,GAAG,KAAK,IAAI;CACpE,MAAM,GAAG,SAAS,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;CACxD,MAAM,SAAS,cAAc,OAAO;CACpC,MAAM,MAAM,SAAS,GAAK;CAO1B,KAAI,MANyB,MAAM,iBAAiB,CAAC,CAAC,OAAO,UAAU;EACrE,IAAI,gBAAgB,OAAO,QAAQ,GACjC,OAAO;EAET,MAAM;CACR,CAAC,EAAA,EACmB,YAAY,GAC9B,MAAM,GAAG,mBAAmB,EAAE,WAAW,KAAK,CAAC;CAEjD,MAAM,OAAO,SAAS,iBAAiB;AACzC;AAEA,eAAe,mBACb,oBACA,mBACe;CACf,IAAIA,UAAQ,aAAa,SAAS;EAChC,MAAM,0BACJ,uBAAuB,GACvB,KAAK,SAAS,KAAK,QAAQ,iBAAiB,CAAC,GAC7C,oCAAoC,IAAI,oBAAoB,KAAA,CAC9D;EACA;CACF;CACA,MAAM,MAAM,eAAe,GAAG,EAAE,WAAW,KAAK,CAAC;CACjD,MAAM,iBAAiB,KAAK,SAC1B,KAAK,QAAQ,kBAAkB,GAC/B,iBACF;CACA,MAAM,UAAU,GAAG,mBAAmB,OAAOA,UAAQ,IAAI,GAAG,KAAK,IAAI;CACrE,MAAM,GAAG,SAAS,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;CACxD,MAAM,QAAQ,gBAAgB,OAAO;CACrC,MAAM,OAAO,SAAS,kBAAkB;AAC1C;AAEA,SAAgB,4BAA4B,SAAgC;CAC1E,OAAO,2BAA2B,MAAM;EACtC,eAAe;EACf,MAAM;EACN,QAAQ,QAAQ;EAChB,SAAS,QAAQ;EACjB,UAAU,QAAQ;EAClB,mBAAmB,QAAQ;EAC3B,oBAAoB,QAAQ;EAC5B,iBAAiB,QAAQ;EACzB,QAAQ,QAAQ;CAClB,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAgB,MAAuB;CAC9D,OACE,iBAAiB,SACjB,UAAU,SACT,MAAgC,SAAS;AAE9C;;;ACzaA,MAAM,8BAAc,IAAI,IAAI;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,2BAAW,IAAI,IAAI;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,0BAA0B;AAGhC,SAAgB,uBACd,OAC0D;CAC1D,IAAI,OAAO,UAAU,YAAY,CAAC,OAChC,OAAO;CAET,IAAI,wBAAwB,KAAK,KAAK,GACpC,OAAO;CAET,OAAO,WAAW,KAAK,IAAI,mBAAmB;AAChD;AAIA,SAAgB,6BACd,OACkD;CAClD,IAAI,UAAU;CACd,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,mBAAmB,OAAO,SAAS,GAAG;EACrE,MAAM,SAAS;EACf,IAAI,OAAO,QAAQ,YAAY,IAAI,OAAO,IAAI,GAC5C,OAAO;GACL,MAAM,OAAO;GACb,GAAI,OAAO,cAAc,OAAO,KAAK,IAAI,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;GACpE,GAAI,OAAO,WAAW,SAAS,IAAI,OAAO,OAAO,IAC7C,EAAE,SAAS,OAAO,QAAQ,IAC1B,CAAC;GACL,cAAc,uBAAuB,OAAO,IAAI;GAChD,GAAI,OAAO,SAAS,KAAA,IAChB,CAAC,IACD,EACE,qBAAqB,uBAAuB,OAAO,IAAI,EACzD;EACN;EAEF,UAAU,QAAQ;CACpB;AAEF;;;ACnDA,SAAgB,6BAA6B,OASX;CAChC,MAAM,iBAAiB,MAAM,cAAc,YACvC,MAAM,cAAc,MAAM,gBAC1B;CACJ,MAAM,mBAAmB,MAAM,iBAAiB,YAAY;CAC5D,MAAM,wBAAwB,MAAM;CACpC,MAAM,sBAAsB,MAAM,cAAc,iBAAiB;CACjE,MAAM,mBAAmB,MAAM,eAC3B,oCAAoC;EAClC,cAAc,MAAM;EACpB,uBAAuB,MAAM;EAC7B,6BAA6B,MAAM;EACnC,4BAA4B,MAAM;EAClC;EACA;EACA,WAAW,MAAM;CACnB,CAAC,IACA,CAAC,gBAAgB;CAEtB,MAAM,YAAY,iBAAiB,WAAW;CAE9C,OAAO;EACL,iBAAiB,MAAM;EACvB;EACA;EACA,mBAAmB,YAAY,MAAM,wBAAwB;EAC7D;EACA;CACF;AACF;AAEA,SAAS,oCAAoC,OAQF;CACzC,MAAM,mBAA2D,CAAC;CAElE,IAAI,sBAAsB,KAAK,GAC7B,iBAAiB,KAAK,sBAAsB;CAE9C,IAAI,iBAAiB,KAAK,GACxB,iBAAiB,KAAK,iBAAiB;CAEzC,IACE,CAAC,mCAAmC;EAClC,YAAY,MAAM,aAAa;EAC/B,WAAW,MAAM;CACnB,CAAC,GAED,iBAAiB,KAAK,mBAAmB;CAE3C,IAAI,MAAM,aAAa,iBAAiB,oBAAoB;EAC1D,iBAAiB,KAAK,wBAAwB;EAC9C,IAAI,MAAM,gCAAgC,OACxC,iBAAiB,KAAK,yBAAyB;CAEnD,OAAO,IAAI,sBAAsB,KAAK,GACpC,iBAAiB,KAAK,sBAAsB;CAE9C,IAAI,CAAC,MAAM,uBACT,iBAAiB,KAAK,qBAAqB;CAG7C,OAAO;AACT;AAEA,SAAS,sBAAsB,OAGnB;CACV,OAAO,MAAM,aAAa,kBAAkB,MAAM;AACpD;AAEA,SAAS,iBAAiB,OAGd;CACV,OACE,MAAM,qBAAqB,QAC3B,MAAM,aAAa,aAAa,MAAM;AAE1C;AAEA,SAAS,sBAAsB,OAGnB;CACV,OACE,MAAM,+BAA+B,QACrC,MAAM,aAAa,0BACjB,MAAM;AAEZ;;;ACtDA,MAAM,8BAA8B;AACpC,MAAM,qCAAqC;AAC3C,MAAM,yBAAyB,CAAC,mBAAmB,aAAa;AAChE,MAAM,qCAAqC;AAC3C,MAAM,sCAAsC;AAC5C,MAAM,4CAA4C;AAClD,MAAM,sCAAsC;AAC5C,MAAM,oCAAoC;AAI1C,MAAM,4DAA4C,IAAI,IAAI,CAAC,UAAU,QAAQ,CAAC;AA4B9E,SAAgB,8BACd,YAAyC,CAAC,GAClC;CACR,OAAO,mCAAmC,SAAS;AACrD;AAEA,SAAgB,0BACd,YAAyC,CAAC,GAClC;CACR,OAAO,gCAAgC,SAAS;AAClD;AAEA,SAAgB,mCACd,YAAyC,CAAC,GAClC;CACR,OAAO,yCAAyC,SAAS;AAC3D;AAEA,SAAgB,kCACd,YAAyC,CAAC,GAClC;CACR,OAAO,wCAAwC,SAAS;AAC1D;AAEA,SAAgB,oCACd,YAAyC,CAAC,GAClC;CACR,OAAO,8CAA8C,SAAS;AAChE;AAEA,SAAgB,oCACd,YAAyC,CAAC,GAChC;CACV,OAAOG,sCAA2C,SAAS;AAC7D;AAEA,SAAgB,uCACd,YAAyC,CAAC,GAChC;CACV,OAAOC,yCAA8C,SAAS;AAChE;AAEA,SAAgB,+BACd,YAAyC,CAAC,GAClC;CACR,OAAO,yCAAyC,SAAS;AAC3D;AAEA,SAAgB,4BACd,UACA,YAAyC,CAAC,GAClC;CACR,OAAO,KAAK,yBAAyB,SAAS,GAAG,QAAQ;AAC3D;AAEA,SAAgB,mCAAmC,OAGvC;CACV,IAAI,MAAM,eAAe,qCACvB,OAAO;CAET,OAAO,yBAAyB,MAAM,SAAS,MAAM;AACvD;AAEA,eAAsB,4BACpB,YAAyC,CAAC,GACD;CACzC,MAAM,MAAM,MAAM,SAChB,8BAA8B,SAAS,GACvC,MACF,CAAC,CAAC,OAAO,UAAU;EACjB,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR,CAAC;CACD,IAAI,QAAQ,MACV,OAAO;CAET,IAAI;EACF,MAAM,SAAS,KAAK,MAAM,GAAG;EAC7B,IAAI,OAAO,MAAM,KAAK,OAAO,WAAW,6BAA6B;GACnE,IACE,OAAO,OAAO,aAAa,YAC3B,OAAO,SAAS,WAAW,KAC3B,OAAO,OAAO,kBAAkB,YAChC,OAAO,cAAc,WAAW,KAChC,OAAO,OAAO,4BAA4B,YAC1C,OAAO,wBAAwB,WAAW,KAC1C,CAAC,qBAAqB,OAAO,YAAY,KACzC,OAAO,OAAO,0BAA0B,YACxC,OAAO,sBAAsB,WAAW,KACxC,OAAO,OAAO,0BAA0B,YACxC,OAAO,sBAAsB,WAAW,KACxC,OAAO,OAAO,uBAAuB,YACrC,OAAO,mBAAmB,WAAW,KACrC,CAAC,yBAAyB,OAAO,UAAU,KAC3C,OAAO,OAAO,cAAc,YAC5B,OAAO,UAAU,WAAW,KAC5B,OAAO,OAAO,cAAc,YAC5B,OAAO,UAAU,WAAW,GAE5B,OAAO;GAET,OAAO;IACL,GAAG;IACH,QAAQ;IACR,UAAU,OAAO;IACjB,eAAe,OAAO;IACtB,yBAAyB,OAAO;IAChC,cAAc,OAAO;IACrB,uBAAuB,OAAO;IAC9B,uBAAuB,OAAO;IAC9B,oBAAoB,OAAO;IAC3B,uBAAuB,sBACrB,OAAO,qBACT;IACA,YAAY,OAAO;IACnB,WAAW,OAAO;IAClB,WAAW,OAAO;GACpB;EACF;EAEA,MAAM,eAAe;EAUrB,IACE,aAAa,MAAM,KACnB,aAAa,WAAW,sCACxB,OAAO,aAAa,aAAa,YACjC,aAAa,SAAS,WAAW,KACjC,OAAO,aAAa,kBAAkB,YACtC,aAAa,cAAc,WAAW,KACtC,OAAO,aAAa,4BAA4B,YAChD,aAAa,wBAAwB,WAAW,KAChD,OAAO,aAAa,uBAAuB,YAC3C,aAAa,mBAAmB,WAAW,KAC3C,OAAO,aAAa,cAAc,YAClC,aAAa,UAAU,WAAW,KAClC,OAAO,aAAa,cAAc,YAClC,aAAa,UAAU,WAAW,GAElC,OAAO;EAET,MAAM,wBAAwB,KAC5B,aAAa,oBACb,SAAS,aAAa,uBAAuB,CAC/C;EACA,MAAM,wBAAwB,QAAQ,aAAa,kBAAkB;EACrE,OAAO;GACL,GAAG;GACH,QAAQ;GACR,UAAU,aAAa;GACvB,eAAe,aAAa;GAC5B,yBAAyB,aAAa;GACtC,cAAc;GACd;GACA;GACA,oBAAoB,aAAa;GACjC,uBAAuB;GACvB,YAAY,4BAA4B,qBAAqB;GAC7D,WAAW,aAAa;GACxB,WAAW,aAAa;EAC1B;CACF,QAAQ;EACN,OAAO;CACT;AACF;AAEA,eAAsB,0CACpB,QAAsC,CAAC,GACf;CACxB,MAAM,CAAC,eAAe,iBAAiB,SAAS,MAAM,QAAQ,IAAI;EAChE,gBAAgB;EAChB,0BAA0B,CAAC,CAAC,YAAY,IAAI;EAC5C,4BAA4B;CAC9B,CAAC;CACD,MAAM,kBACJ,MAAM,mBACN,iBAAiB,kBAChB,cAAc,YACX,cAAc,MAAM,gBACnB,OAAO,iBAAiB;CAC/B,MAAM,0BACJ,MAAM,mBACN,iBAAiB,kBAAkB,MAAM,kBACrC,OACA;CACN,MAAM,wBACJ,MAAM,sCAAsC,KAAK;CACnD,MAAM,6BAA6B,wBAC/B,MAAM,wCAAwC,KAAK,IACnD;CAcJ,OATiB,6BAA6B;EAC5C;EACA;EACA,iBAAiB;EACjB,cAAc;EACd,6BARA,SAAS,MAAM,iBAAiB,qBAC5B,MAAM,WAAW,MAAM,qBAAqB,CAAC,CAAC,YAAY,IAAI,IAC9D;EAOJ;EACA;CACF,CACc,CAAC,CAAC;AAClB;AAEA,eAAsB,wCACpB,OACA,YAAyC,CAAC,GAClB;CACxB,IAAI,OAAO,iBAAiB,aAAa;EACvC,MAAM,YAAY,MAAM,sCACtB,OACA,SACF;EACA,OAAO,YAAY,MAAM,wBAAwB,SAAS,IAAI;CAChE;CACA,IAAI,OAAO,iBAAiB,qBAAqB;EAC/C,MAAM,iBAAiB,4BACrB,MAAM,UACN,SACF;EACA,MAAM,eAAe,KACnB,gBACA,QAAQ,MAAM,uBAAuB,CACvC;EACA,MAAM,uBAAuB,SAAS,gBAAgB,YAAY;EAClE,IACE,yBAAyB,QACzB,qBAAqB,WAAW,KAAK,KAAK,KAC1C,WAAW,oBAAoB,GAE/B,OAAO;EAET,OAAO,MAAM,mCAAmC,YAAY;CAC9D;CACA,OAAO;AACT;AAEA,eAAsB,sCACpB,OACA,YAAyC,CAAC,GAClB;CACxB,IAAI,CAAC,OACH,OAAO;CAET,IAAI,MAAM,iBAAiB,aAAa;EAGtC,IAAIC,UAAQ,aAAa,SACvB,OAAQ,MAAM,WAAW,MAAM,qBAAqB,IAChD,MAAM,wBACN;EAEN,MAAM,uBAAuB,kCAAkC,SAAS;EACxE,IAAI,MAAM,WAAW,oBAAoB,GACvC,OAAO;EAET,OAAQ,MAAM,WAAW,MAAM,qBAAqB,IAChD,MAAM,wBACN;CACN;CACA,MAAM,YAAY,KAChB,4BAA4B,MAAM,UAAU,SAAS,GACrD,MAAM,uBACR;CACA,OAAQ,MAAM,WAAW,SAAS,IAAK,YAAY;AACrD;AAEA,eAAsB,2BAA2B,OAKZ;CACnC,MAAM,iBAAiB,qBAAqB,IACxC,MAAM,iCAAiC,KAAK,IAC5C,MAAM,+BAA+B,KAAK;CAC9C,IAAI,MAAM,aAAa,OACrB,MAAM,4BAA4B,cAAc;CAElD,OAAO;AACT;AAEA,eAAe,+BAA+B,OAGT;CACnC,MAAM,mBAAmB,MAAM,oCAC7B,MAAM,aACR;CACA,IACE,CAAC,mCAAmC,EAClC,YAAY,iBAAiB,WAC/B,CAAC,GAED,MAAM,IAAI,MACR,gJACF;CAEF,MAAM,EAAE,uBAAuB,oBAAoB,0BACjD;CACF,IAAI,iBAAiB,eAAe,qCAAqC;EACvE,MAAM,uBAAuB,MAAM,+BACjC,qBACF;EACA,IAAI,yBAAyB,MAAM,eACjC,MAAM,IAAI,MACR,mCAAmC,MAAM,cAAc,mBAAmB,qBAAqB,MAAM,sBAAsB,qBAAqB,MAAM,cAAc,oFACtK;CAEJ;CACA,MAAM,wBACJ,MAAM,mCAAmC,kBAAkB;CAC7D,MAAM,0BAA0B,SAAS,qBAAqB;CAC9D,MAAM,uBAAM,IAAI,KAAK,EAAA,CAAE,YAAY;CACnC,MAAM,WAAW,eAAe,MAAM,aAAa;CACnD,MAAM,iBAAiB,4BAA4B,QAAQ;CAC3D,MAAM,qBAAqB,KAAK,gBAAgB,MAAM;CAEtD,MAAM,QAAQ,IAAI;EAChB,MAAM,sBAAsB,GAAG,EAAE,WAAW,KAAK,CAAC;EAClD,MAAM,yBAAyB,GAAG,EAAE,WAAW,KAAK,CAAC;EACrD,MAAM,2BAA2B,GAAG,EAAE,WAAW,KAAK,CAAC;EACvD,MAAM,gCAAgC,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9D,CAAC;CAED,IAAI;EACF,MAAM,GAAG,gBAAgB;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;EACzD,MAAM,MAAM,gBAAgB,EAAE,WAAW,KAAK,CAAC;EAC/C,MAAM,GAAG,oBAAoB,oBAAoB;GAC/C,WAAW;GACX,OAAO;GACP,SAAS,eACP,+BAA+B,oBAAoB,UAAU;EACjE,CAAC;EACD,MAAM,iCAAiC;GACrC;GACA,eAAe,MAAM;EACvB,CAAC;EACD,MAAM,oCAAoC;GACxC;GACA;EACF,CAAC;CACH,SAAS,OAAO;EACd,MAAM,GAAG,gBAAgB;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC,CAAC,CAAC,YACnD,KAAA,CACR;EACA,MAAM;CACR;CAkBA,OAAO;EAfL,GAAG;EACH,QAAQ;EACR;EACA,eAAe,MAAM;EACrB,yBAAyB,KAAK,QAAQ,uBAAuB;EAC7D,cAAc;EACd;EACA;EACA;EACA;EACA,YAAY,iBAAiB;EAC7B,WAAW;EACX,WAAW;CAGE;AACjB;AAIA,eAAe,iCAAiC,OAGX;CACnC,MAAM,EAAE,kBAAkB;CAC1B,MAAM,iBAAiB,6BAA6B;CACpD,MAAM,gBACJ,MAAM,kBACL,gBAAgB,YAAY,gBAAgB,iBAAiB,KAAA;CAChE,IACEA,UAAQ,aAAa,WACrB,kBAAkB,sBAAsB,GACxC;EACA,MAAM,SAAS,MAAM,4BAA4B;EACjD,IACE,QAAQ,iBAAiB,eACzB,OAAO,kBAAkB,iBACzB,OAAO,0BACN,CAAC,iBACA,iCAAiC,aAAa,MAC5C,OAAO,0BACV,MAAM,WAAW,OAAO,qBAAqB,KAC7C,MAAM,wBAAwB,OAAO,qBAAqB,MACzD,OAAO,uBAET,OAAO;CAEX;CACA,IAAI,eACF,OAAO,MAAM,yCAAyC;EACpD;EACA,SAAS;CACX,CAAC;CAEH,IAAIA,UAAQ,aAAa,SACvB,MAAM,IAAI,MACR,qGACF;CAEF,IAAI,kBAAkB,sBAAsB,GAC1C,MAAM,IAAI,MACR,mCAAmC,cAAc,YAAY,sBAAsB,EAAE,oEACvF;CAEF,MAAM,UAAU,MAAM,sBAAsB;CAC5C,MAAM,oBAAoB,QAAQ;CAClC,IAAI,CAAE,MAAM,WAAW,iBAAiB,GACtC,MAAM,IAAI,MACR,yCAAyC,kBAAkB,0CAC7D;CAEF,MAAM,oBAAoB,QAAQ,iBAAiB;CACnD,MAAM,uBAAM,IAAI,KAAK,EAAA,CAAE,YAAY;CAEnC,MAAM,QAAQ,IAAI;EAChB,MAAM,sBAAsB,GAAG,EAAE,WAAW,KAAK,CAAC;EAClD,MAAM,2BAA2B,GAAG,EAAE,WAAW,KAAK,CAAC;EACvD,MAAM,gCAAgC,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9D,CAAC;CAkBD,OAAO;EAfL,GAAG;EACH,QAAQ;EACR,UAAU,eAAe,QAAQ,OAAO;EACxC,eAAe,QAAQ;EACvB,yBAAyB;EACzB,cAAc;EACd,uBAAuB;EACvB,uBAAuB;EACvB,oBAAoB;EACpB,uBAAuB,MAAM,qBAAqB,iBAAiB;EACnE,YAAY;EACZ,WAAW;EACX,WAAW;CAGE;AACjB;AAEA,eAAe,yCAAyC,OAGnB;CACnC,IAAI,MAAM,QAAQ,YAAY,MAAM,eAClC,MAAM,IAAI,MACR,iEACF;CAEF,MAAM,WAAW,eAAe,MAAM,aAAa;CACnD,MAAM,iBAAiB,4BAA4B,QAAQ;CAC3D,MAAM,UAAU,MAAM,QAAQ,SAAS,WAAW,UAAU;CAC5D,IACEA,UAAQ,aAAa,WACrB,MAAM,QAAQ,aAAa,eAE3B,MAAM,IAAI,MACR,6DACF;CAEF,MAAM,iBAAiB,UAAU,iBAAiB;CAClD,MAAM,iBAAiB,KAAK,gBAAgB,cAAc;CAC1D,MAAM,mBAAmB,UAAuB;EAC9C,QAAQ,KAAK,8CAA8C,MAAM,OAAO;CAC1E;CACA,MAAM,OAAO,MAAM,2BAA2B;EAC5C,gBAAgBA,UAAQ;EACxB,gBAAgB,sBAAsB;EACtC;EACA,SAAS,MAAM;CACjB,CAAC;CACD,MAAM,QAAQ,MAAM,gCAAgC;EAClD,gBAAgB;EAChB,WAAW;EACX;EACA;EACA,SAAS,MAAM;CACjB,CAAC;CACD,MAAM,MAAM,gBAAgB,EAAE,WAAW,KAAK,CAAC;CAC/C,IAAI;EACF,MAAM,UAAU,gBAAgB,OAAO,EAAE,MAAM,IAAM,CAAC;EACtD,MAAM,6BAA6B;GACjC,sBAAsB,oCAAoC;GAC1D,cAAc;GACd,6BAA6B,yBAAyB,MAAM;GAC5D,SAAS,MAAM;GACf,YAAY,OAAO,SAAS,SAAS;IACnC,MAAM,SAAS,MAAM,UAAU,QAAQ,CAAC,CAAC,SAAS,MAAM,EACtD,UAAU,OACZ,CAAC;IACD,OAAO;KAAE,MAAM;KAAG,QAAQ,OAAO;KAAQ,QAAQ,OAAO;IAAO;GACjE;EACF,CAAC;EACD,MAAM,8BAA8B;GAClC,sBAAsB,oCAAoC;GAC1D,cAAc;GACd,SAAS,MAAM;GACf,gBAAgB;GAChB,WAAW;EACb,CAAC;EACD,IAAI,SACF,MAAM,8BAA8B,cAAc;EAEpD,IACG,MAAM,wBAAwB,gBAAgB,OAAO,MACtD,iCAAiC,MAAM,OAAO,GAE9C,MAAM,IAAI,MACR,kEACF;CAEJ,SAAS,OAAO;EACd,MAAM,GAAG,gBAAgB;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;EACzD,MAAM;CACR;CACA,MAAM,uBAAM,IAAI,KAAK,EAAA,CAAE,YAAY;CACnC,OAAO;EACL,GAAG;EACH,QAAQ;EACR;EACA,eAAe,MAAM;EACrB,yBAAyB;EACzB,cAAc;EACd,uBAAuB;EACvB,uBAAuB;EACvB,oBAAoB;EACpB,uBAAuB,iCAAiC,MAAM,OAAO;EACrE,YAAY;EACZ,WAAW;EACX,WAAW;CACb;AACF;AAEA,eAAsB,4BACpB,gBACe;CACf,MAAM,MAAM,2BAA2B,GAAG,EAAE,WAAW,KAAK,CAAC;CAC7D,MAAM,UACJ,8BAA8B,GAC9B,GAAG,KAAK,UAAU,gBAAgB,MAAM,CAAC,EAAE,KAC3C;EAAE,UAAU;EAAQ,MAAM;CAAM,CAClC;CACA,IAAI,eAAe,iBAAiB,aAClC,MAAM,sCAAsC;AAEhD;AAEA,eAAsB,mCACpB,gBACe;CACf,IAAI,eAAe,iBAAiB,oBAClC;CAGF,KAAI,MADuB,4BAA4B,EAAA,EACrC,aAAa,eAAe,UAC5C;CAEF,MAAM,GAAG,4BAA4B,eAAe,QAAQ,GAAG;EAC7D,WAAW;EACX,OAAO;CACT,CAAC;AACH;AAEA,eAAe,qBAAqB,UAAmC;CACrE,MAAM,OAAO,WAAW,QAAQ;CAChC,KAAK,OAAO,MAAM,SAAS,QAAQ,CAAC;CACpC,OAAO,KAAK,OAAO,KAAK;AAC1B;AAEA,eAAsB,wCAA2C,OAMlD;CACb,MAAM,YAAY,MAAM,aAAa,CAAC;CACtC,MAAM,WAAW;EACf,cAAc,MAAM,gBAAgB,4BAA4B;EAChE,YAAYA,UAAQ;EACpB,WAAW,MAAM;EACjB,QAAQ,yBAAyB,SAAS;EAC1C,YAAY,MAAM;EAClB,gBAAgB,uBAAuB,MAAM,UAAU;EACvD,UAAUA,UAAQ;EAClB,WAAWA,UAAQ;CACrB;CACA,MAAM,yBAAyB;EAC7B,SAAS;EACT,QAAQ;EACR;EACA;EACA,QAAQ;EACR,MAAM;CACR,CAAC;CACD,IAAI;EACF,MAAM,SAAS,MAAM,MAAM,IAAI;EAC/B,MAAM,yBAAyB;GAC7B,SAAS;GACT,QAAQ;GACR;GACA;GACA,QAAQ;GACR,MAAM;EACR,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,MAAM,yBAAyB;GAC7B,SAAS;GACT,QAAQ;GACR,UAAU;IACR,GAAG;IACH,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IACnE,kBAAkB,6BAA6B,KAAK;GACtD;GACA;GACA,QAAQ;GACR,MAAM;EACR,CAAC;EACD,MAAM;CACR;AACF;AAEA,eAAsB,0CACpB,YAAyC,CAAC,GACzB;CACjB,MAAM,eAAe,MAAM,4BAA4B;CACvD,IAAI,cAAc,iBAAiB,aACjC,MAAM,IAAI,MACR,8FACF;CAEF,OAAO,MAAM,4BAA4B;EACvC,QAAQ;EACR,eAAe;EACf;EACA,YAAY,kCAAkC,SAAS;CACzD,CAAC;AACH;AAEA,eAAsB,gDACpB,gBACA,YAAyC,CAAC,GACzB;CACjB,IAAI,eAAe,iBAAiB,aAClC,MAAM,IAAI,MACR,mFACF;CAEF,IAAIA,UAAQ,aAAa,SACvB,OAAO,MAAM,wCAAwC;EACnD,cAAc;EACd,WAAW;EACX;EACA,YAAY,6BAA6B,gBAAgB,SAAS;EAClE,KAAK,YACH,MAAM,gCAAgC,gBAAgB,SAAS;CACnE,CAAC;CAEH,OAAO,MAAM,4BAA4B;EACvC,QAAQ;EACR,eAAe;EACf;EACA,YAAY,oCAAoC,SAAS;CAC3D,CAAC;AACH;AAEA,eAAsB,+CACpB,YAAyC,CAAC,GAC3B;CACf,IAAIA,UAAQ,aAAa,SAAS;EAChC,KAAK,MAAM,YAAY,MAAM,mBAC3B,yBAAyB,SAAS,CACpC,GAAG;GACD,IAAI,CAAC,mCAAmC,KAAK,QAAQ,GACnD;GAEF,MAAM,aAAa,4BAA4B,UAAU,SAAS;GAClE,MAAM,wCAAwC;IAC5C,cAAc;IACd,WAAW;IACX;IACA;IACA,KAAK,YAAY,MAAM,yBAAyB,UAAU;GAC5D,CAAC;EACH;EACA;CACF;CACA,MAAM,aAAa,oCAAoC,SAAS;CAChE,MAAM,wCAAwC;EAC5C,cAAc;EACd,WAAW;EACX;EACA;EACA,KAAK,YAAY,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,CAAC;CACvD,CAAC;AACH;AAEA,eAAe,4BAA4B,OAKvB;CAClB,MAAM,aAAa,MAAM,OAAO;CAChC,MAAM,sBACJ,MAAM,OAAO,yBACZ,MAAM,qBAAqB,UAAU;CACxC,MAAM,uBAAuB,MAAM;CACnC,MAAM,uBAAuB,MAAM,MAAM,oBAAoB,CAAC,CAAC,YACvD,IACR;CACA,IACE,sBAAsB,OAAO,MAAM,QACnC,CAAC,qBAAqB,eAAe,KACpC,MAAM,qBAAqB,oBAAoB,CAAC,CAAC,YAAY,IAAI,MAChE,qBACF;EACA,MAAM,wCAAwC;GAC5C,cAAc;GACd,WAAW,WAAW,MAAM,cAAc;GAC1C,WAAW,MAAM;GACjB,YAAY;GACZ,KAAK,YAAY,MAAM,MAAM,sBAAsB,GAAK;EAC1D,CAAC;EACD,OAAO;CACT;CAEA,MAAM,MAAM,QAAQ,oBAAoB,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9D,MAAM,eAAe,GAAG,qBAAqB,QAAQ,OAAOA,UAAQ,GAAG;CACvE,MAAM,wCAAwC;EAC5C,cAAc;EACd,WAAW,kBAAkB,MAAM;EACnC,WAAW,MAAM;EACjB,YAAY;EACZ,KAAK,YAAY,MAAM,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC;CACzD,CAAC;CACD,IAAI;EACF,MAAM,wCAAwC;GAC5C,cAAc;GACd,WAAW,WAAW,MAAM;GAC5B,WAAW,MAAM;GACjB,YAAY;GACZ,KAAK,YAAY;IACf,MAAM,SAAS,YAAY,YAAY;IACvC,MAAM,MAAM,cAAc,GAAK;GACjC;EACF,CAAC;EAED,IAAI,MAD8B,qBAAqB,YAAY,MACvC,qBAC1B,MAAM,IAAI,MACR,oEACF;EAEF,MAAM,wCAAwC;GAC5C,cAAc;GACd,WAAW,WAAW,MAAM;GAC5B,WAAW,MAAM;GACjB,YAAY;GACZ,KAAK,YAAY,MAAM,OAAO,cAAc,oBAAoB;EAClE,CAAC;EACD,OAAO;CACT,UAAU;EACR,MAAM,wCAAwC;GAC5C,cAAc;GACd,WAAW,kBAAkB,MAAM;GACnC,WAAW,MAAM;GACjB,YAAY;GACZ,KAAK,YAAY,MAAM,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC;EACzD,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;CAC1B;AACF;AAEA,eAAsB,kCACpB,cACkB;CAClB,MAAM,sBAAsB,aAAa,uBAAuB,KAAK;CACrE,IACE,CAAC,uBACD,aAAa,iBAAiB,oBAE9B,OAAO;CAGT,IAAI,CAAC,MADmB,sCAAsC,YAAY,GAExE,OAAO;CAET,OACG,MAAM,wCAAwC,YAAY,MAC3D;AAEJ;AAEA,eAAe,iCAAiC,OAG9B;CAEhB,MAAM,UADsB,KAAK,MAAM,gBAAgB,cAEnC,GAClB,GAAG,KAAK,UACN;EACE,MAAM;EACN,SAAS;EACT,MAAM;EACN,SAAS,MAAM;CACjB,GACA,MACA,CACF,EAAE,KACF;EACE,UAAU;EACV,MAAM;CACR,CACF;AACF;AAEA,eAAe,oCAAoC,OAGjC;CAChB,MAAM,sBAAsB,MAAM,4CAChC,EACE,uBAAuB,MAAM,sBAC/B,CACF;CAEA,MAAM,wBAAwB,KAAK,MAAM,gBAAgB,cAAc;CACvE,MAAM,GAAG,uBAAuB;EAC9B,WAAW;EACX,OAAO;CACT,CAAC;CACD,MAAM,MAAM,uBAAuB,EAAE,WAAW,KAAK,CAAC;CACtD,KAAK,MAAM,qBAAqB,qBAC9B,MAAM,oCAAoC;EACxC,gBAAgB,kBAAkB;EAClC,sBAAsB,kBAAkB;EACxC;CACF,CAAC;AAEL;AAEA,eAAe,oCAAoC,OAIjC;CAChB,IAAI,CAAE,MAAM,WAAW,MAAM,oBAAoB,GAC/C,MAAM,IAAI,MACR,8CAA8C,MAAM,eAAe,wCAAwC,MAAM,qBAAqB,kCACxI;CAEF,MAAM,uBAAuB,KAC3B,MAAM,uBACN,GAAG,MAAM,eAAe,MAAM,GAAG,CACnC;CACA,MAAM,MAAM,QAAQ,oBAAoB,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9D,MAAM,GAAG,MAAM,sBAAsB,sBAAsB;EACzD,WAAW;EACX,OAAO;EACP,aAAa;EACb,oBAAoB;CACtB,CAAC;AACH;AAEA,eAAsB,2BACpB,YAAyC,CAAC,GAC3B;CACf,MAAM,MAAM,gCAAgC,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;CAC3E,MAAM,aAAa,0BAA0B,SAAS;CACtD,MAAM,wCAAwC;EAC5C,cAAc;EACd,WAAW;EACX;EACA;EACA,KAAK,YACH,MAAM,UACJ,YACA,GAAG,iCAAiC,SAAS,EAAE,KAC/C;GACE,UAAU;GACV,MAAM;EACR,CACF;CACJ,CAAC;AACH;AAEA,eAAsB,oCACpB,YAAyC,CAAC,GAC3B;CACf,MAAM,MAAM,gCAAgC,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;CAC3E,MAAM,QAAQ,IACZ,oCAAoC,SAAS,CAAC,CAAC,IAAI,OAAO,gBAAgB;EACxE,MAAM,wCAAwC;GAC5C,cAAc;GACd,WAAW;GACX;GACA,YAAY;GACZ,KAAK,YAAY;IACf,MAAM,UACJ,aACA,GAAG,0CAA0C,SAAS,EAAE,KACxD;KACE,UAAU;KACV,MAAM;IACR,CACF;IACA,MAAM,MAAM,aAAa,GAAK;GAChC;EACF,CAAC;CACH,CAAC,CACH;AACF;AAEA,eAAsB,sCACpB,YAAyC,CAAC,GAC3B;CACf,MAAM,2BAA2B,SAAS;CAC1C,MAAM,oCAAoC,SAAS;AACrD;AAEA,eAAsB,uCACpB,UACA,YAAyC,CAAC,GAC3B;CACf,IAAI,CAAC,UAAU;EACb,MAAM,GAAG,8BAA8B,SAAS,GAAG,EAAE,OAAO,KAAK,CAAC;EAClE;CACF;CACA,MAAM,MAAM,2BAA2B,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;CACtE,MAAM,UACJ,8BAA8B,SAAS,GACvC,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,EAAE,KACrC;EACE,UAAU;EACV,MAAM;CACR,CACF;AACF;AA6BA,eAAsB,oCACpB,QAAwC,CAAC,GAC1B;CACf,MAAM,CACJ,QACA,iBACA,cACA,2BACA,iBACE,MAAM,QAAQ,IAAI;EACpB,4BAA4B;EAC5B,0BAA0B,CAAC,CAAC,YAAY,IAAI;EAC5C,uBAAuB,CAAC,CAAC,YAAY,IAAI;EACzC,gDAAgD;EAChD,+BAA+B;CACjC,CAAC;CACD,MAAM,yBAAS,IAAI,IAAI;EACrB,GAAI,SAAS,CAAC,OAAO,QAAQ,IAAI,CAAC;EAClC,GAAI,iBAAiB,WAAW,CAAC,gBAAgB,QAAQ,IAAI,CAAC;EAC9D,GAAI,cAAc,WAAW,CAAC,aAAa,QAAQ,IAAI,CAAC;EACxD,GAAG;EACH,GAAI,eAAe,eAAe,iBAAiB,sBACnD,gBACI,CAAC,cAAc,eAAe,QAAQ,IACtC,CAAC;EACL,GAAI,MAAM,mBAAmB,CAAC;CAChC,CAAC;CACD,MAAM,gBAAgB,MAAM,mBAAmB,yBAAyB,CAAC;CACzE,KAAK,MAAM,YAAY,eAAe;EACpC,IAAI,OAAO,IAAI,QAAQ,GACrB;EAEF,MAAM,YAAY,4BAA4B,QAAQ;EACtD,IAAIA,UAAQ,aAAa,SAGvB,MAAM,yBAAyB,SAAS;OAExC,MAAM,GAAG,WAAW;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;CAExD;AACF;AAEA,eAAe,oCACb,cAMC;CACD,MAAM,wBAAwB,MAAM,qBAAqB,YAAY;CACrE,MAAM,qBAAqB,QAAQ,qBAAqB;CACxD,MAAM,wBAAwB,QAAQ,kBAAkB;CACxD,OAAO;EACL;EACA;EACA;EACA,YAAY,4BAA4B,qBAAqB;CAC/D;AACF;AAEA,eAAe,+BACb,uBACiB;CACjB,MAAM,sBAAsB,KAAK,uBAAuB,cAAc;CACtE,MAAM,qBAAqB,MAAM,SAAS,qBAAqB,MAAM,CAAC,CAAC,OACpE,UAAmB;EAClB,IAAI,aAAa,KAAK,MAAM,UAC1B,MAAM,IAAI,MACR,4DAA4D,oBAAoB,aAClF;EAEF,MAAM;CACR,CACF;CACA,IAAI;CACJ,IAAI;EACF,kBAAkB,KAAK,MAAM,kBAAkB;CAIjD,QAAQ;EACN,MAAM,IAAI,MACR,4DAA4D,oBAAoB,oBAClF;CACF;CACA,MAAM,UACJ,gBAAgB,SAAS,cACzB,OAAO,gBAAgB,YAAY,WAC/B,gBAAgB,QAAQ,KAAK,IAC7B;CACN,IAAI,CAAC,SACH,MAAM,IAAI,MACR,yDAAyD,oBAAoB,EAC/E;CAEF,OAAO;AACT;AAEA,eAAe,qBAAqB,cAAwC;CAC1E,MAAM,UAAU,gBAAgBA,UAAQ,KAAK;CAC7C,IAAI,CAAC,SACH,MAAM,IAAI,MACR,0EACF;CAEF,MAAM,eAAe,MAAM,SAAS,OAAO,CAAC,CAAC,MAAM,YAAY;EAC7D,MAAM,eAAe,MAAM,8BAA8B,OAAO;EAChE,IAAI,cACF,OAAO;EAET,MAAM,IAAI,MACR,yEAAyE,QAAQ,EACnF;CACF,CAAC;CACD,MAAM,gBAAgB,MAAM,8BAA8B,YAAY;CACtE,IAAI,eACF,OAAO;CAET,MAAM,IAAI,MACR,gFAAgF,aAAa,EAC/F;AACF;AAEA,SAAS,eAAe,SAAyB;CAE/C,OAAO,GADmB,QAAQ,QAAQ,qBAAqB,GACrC,EAAE,GAAG,KAAK,IAAI;AAC1C;AAEA,eAAe,mCACb,oBACiB;CACjB,MAAM,YAAY,MAAM,0BAA0B,kBAAkB;CACpE,MAAM,OAAO,WAAW,QAAQ;CAChC,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,eAAe,SAAS,oBAAoB,QAAQ,CAAC,CAAC,WAC1D,MACA,GACF;EACA,KAAK,OAAO,cAAc,MAAM;EAChC,KAAK,OAAO,MAAM,MAAM;EACxB,KAAK,OAAO,MAAM,SAAS,QAAQ,CAAC;EACpC,KAAK,OAAO,MAAM,MAAM;CAC1B;CACA,OAAO,KAAK,OAAO,KAAK;AAC1B;AAEA,eAAe,0BAA0B,MAAiC;CACxE,OAAO,MAAM,kCAAkC,MAAM,IAAI;AAC3D;AAEA,eAAe,kCACb,oBACA,aACmB;CACnB,MAAM,UAAU,MAAM,QAAQ,aAAa,EAAE,eAAe,KAAK,CAAC;CAClE,MAAM,YAAsB,CAAC;CAE7B,KAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,YAAY,KAAK,aAAa,MAAM,IAAI;EAC9C,IAAI,CAAC,+BAA+B,oBAAoB,SAAS,GAC/D;EAEF,IAAI,MAAM,YAAY,GAAG;GACvB,UAAU,KACR,GAAI,MAAM,kCACR,oBACA,SACF,CACF;GACA;EACF;EACA,IAAI,MAAM,OAAO,GACf,UAAU,KAAK,SAAS;CAE5B;CAEA,OAAO,UAAU,MAAM,MAAM,UAAU;EACrC,IAAI,SAAS,OACX,OAAO;EAET,OAAO,OAAO,QAAQ,KAAK;CAC7B,CAAC;AACH;AAEA,SAAS,+BACP,oBACA,eACS;CACT,MAAM,eAAe,SAAS,oBAAoB,aAAa,CAAC,CAAC,WAC/D,MACA,GACF;CACA,IAAI,CAAC,gBAAgB,aAAa,WAAW,IAAI,GAC/C,OAAO;CAET,MAAM,sBAAsB,aAAa,MAAM,GAAG,CAAC,CAAC,MAAM;CAC1D,OAAO,CAAC,0CAA0C,IAAI,mBAAmB;AAC3E;AAEA,eAAe,4CAA4C,OAEa;CACtE,MAAM,sBAAsB,KAAK,MAAM,uBAAuB,cAAc;CAC5E,MAAM,qBAAqB,MAAM,SAAS,qBAAqB,MAAM,CAAC,CAAC,OACpE,UAAmB;EAClB,IAAI,aAAa,KAAK,MAAM,UAC1B,MAAM,IAAI,MACR,uFAAuF,oBAAoB,EAC7G;EAEF,MAAM;CACR,CACF;CACA,MAAM,kBAAkB,KAAK,MAAM,kBAAkB;CAIrD,MAAM,uCAAuB,IAAI,IAAoB;CACrD,MAAM,QAAQ,CACZ,GAAG,OAAO,KAAK,gBAAgB,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAChD,oBAAoB;EACnB;EACA,UAAU;EACV,yBAAyB,MAAM;CACjC,EACF,GACA,GAAG,OAAO,KAAK,gBAAgB,wBAAwB,CAAC,CAAC,CAAC,CAAC,KACxD,oBAAoB;EACnB;EACA,UAAU;EACV,yBAAyB,MAAM;CACjC,EACF,CACF;CAEA,OAAO,MAAM,SAAS,GAAG;EACvB,MAAM,iBAAiB,MAAM,MAAM;EACnC,IAAI,CAAC,gBACH;EAEF,IAAI,yBAAyB,eAAe,cAAc,GACxD;EAEF,IAAI,qBAAqB,IAAI,eAAe,cAAc,GACxD;EAEF,MAAM,qBAAqB,MAAM,mCAAmC;GAClE,gBAAgB,eAAe;GAC/B,UAAU,eAAe;GACzB,yBAAyB,eAAe;EAC1C,CAAC;EACD,IAAI,CAAC,oBACH;EAGF,qBAAqB,IACnB,eAAe,gBACf,mBAAmB,eACrB;EACA,MAAM,6BAA6B,OAAO,KACxC,mBAAmB,gBAAgB,CAAC,CACtC;EACA,MAAM,6BAA6B,OAAO,KACxC,mBAAmB,wBAAwB,CAAC,CAC9C;EACA,MAAM,yBAAyB,OAAO,KACpC,mBAAmB,oBAAoB,CAAC,CAC1C;EACA,KAAK,MAAM,kBAAkB,4BAC3B,MAAM,KAAK;GACT;GACA,UAAU;GACV,yBAAyB,mBAAmB;EAC9C,CAAC;EAEH,KAAK,MAAM,kBAAkB,4BAC3B,MAAM,KAAK;GACT;GACA,UAAU;GACV,yBAAyB,mBAAmB;EAC9C,CAAC;EAEH,KAAK,MAAM,kBAAkB,wBAC3B,MAAM,KAAK;GACT;GACA,UAAU;GACV,yBAAyB,mBAAmB;EAC9C,CAAC;CAEL;CAEA,OAAO,CAAC,GAAG,qBAAqB,QAAQ,CAAC,CAAC,CACvC,KAAK,CAAC,gBAAgB,sBAAsB;EAC3C;EACA;CACF,EAAE,CAAC,CACF,MAAM,MAAM,UACX,KAAK,eAAe,cAAc,MAAM,cAAc,CACxD;AACJ;AAEA,SAAS,yBAAyB,gBAAiC;CACjE,OAAO,eAAe,WAAW,SAAS;AAC5C;AAEA,eAAe,mCAAmC,OASxC;CACR,MAAM,4BAA4B,MAAM,mCAAmC;EACzE,gBAAgB,MAAM;EACtB,yBAAyB,MAAM;EAC/B,UAAU,MAAM;CAClB,CAAC;CACD,IAAI,CAAC,2BACH,OAAO;CAET,MAAM,yBAAyB,KAC7B,2BACA,cACF;CACA,MAAM,wBAAwB,MAAM,SAClC,wBACA,MACF,CAAC,CAAC,OAAO,UAAmB;EAC1B,IAAI,aAAa,KAAK,MAAM,UAAU;GACpC,IAAI,CAAC,MAAM,UACT,OAAO;GAET,MAAM,IAAI,MACR,8CAA8C,MAAM,eAAe,sCAAsC,uBAAuB,kCAClI;EACF;EACA,MAAM;CACR,CAAC;CACD,IAAI,0BAA0B,MAC5B,OAAO;CAOT,OAAO;EACL,iBAAiB;EACjB,GAPyB,KAAK,MAAM,qBAOhB;CACtB;AACF;AAEA,eAAe,mCAAmC,OAIvB;CACzB,MAAM,WAAW,cACf,KAAK,MAAM,yBAAyB,cAAc,CACpD;CACA,MAAM,4BACJ,MAAM,+CAA+C;EACnD,gBAAgB,MAAM;EACtB;CACF,CAAC;CACH,IAAI,2BACF,OAAO;CAET,IAAI;EAIF,OAAO,MAAM,gCAAgC,MAHX,SAChC,SAAS,QAAQ,MAAM,cAAc,CACvC,CACgE;CAClE,SAAS,OAAO;EACd,IAAI,8BAA8B,KAAK,GAAG;GACxC,MAAM,4BACJ,MAAM,mDAAmD;IACvD,gBAAgB,MAAM;IACtB;GACF,CAAC;GACH,IAAI,2BACF,OAAO;GAET,IAAI,CAAC,MAAM,UACT,OAAO;GAET,MAAM,IAAI,MACR,8CAA8C,MAAM,eAAe,wCAAwC,MAAM,wBAAwB,kCAC3I;EACF;EACA,MAAM;CACR;AACF;AAEA,eAAe,+CAA+C,OAGnC;CACzB,IAAI;EAIF,OAAO,MAAM,gDAAgD;GAC3D,wBAAA,MAJmC,SACnC,MAAM,SAAS,QAAQ,GAAG,MAAM,eAAe,cAAc,CAC/D;GAGE,gBAAgB,MAAM;EACxB,CAAC;CACH,SAAS,OAAO;EACd,IAAI,8BAA8B,KAAK,GACrC,OAAO;EAET,MAAM;CACR;AACF;AAEA,eAAe,gDAAgD,OAGpC;CACzB,IAAI,cAAc,QAAQ,MAAM,sBAAsB;CACtD,OAAO,MAAM;EAEX,MAAM,qBAAqB,MAAM,SADL,KAAK,aAAa,cAE1B,GAClB,MACF,CAAC,CAAC,OAAO,UAAmB;GAC1B,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;GAET,MAAM;EACR,CAAC;EACD,IAAI,uBAAuB;OACD,KAAK,MAAM,kBAGjB,CAAC,CAAC,SAAS,MAAM,gBACjC,OAAO;EAAA;EAGX,MAAM,aAAa,QAAQ,WAAW;EACtC,IAAI,eAAe,aACjB,OAAO;EAET,cAAc;CAChB;AACF;AAEA,eAAe,mDAAmD,OAGvC;CACzB,MAAM,kBAAkB,MAAM,SAAS,QAAQ,MAAM,MAAM,cAAc;CACzE,IAAI,CAAC,iBACH,OAAO;CAET,KAAK,MAAM,mBAAmB,iBAAiB;EAC7C,MAAM,2BAA2B,KAC/B,iBACA,GAAG,MAAM,eAAe,MAAM,GAAG,CACnC;EACA,IAAI,MAAM,WAAW,KAAK,0BAA0B,cAAc,CAAC,GACjE,OAAO,MAAM,SAAS,wBAAwB;CAElD;CACA,OAAO;AACT;AAEA,eAAe,gCACb,mBACiB;CACjB,IAAI,cAAc,QAAQ,iBAAiB;CAC3C,OAAO,MAAM;EAEX,IAAI,MAAM,WADkB,KAAK,aAAa,cACP,CAAC,GACtC,OAAO;EAET,MAAM,aAAa,QAAQ,WAAW;EACtC,IAAI,eAAe,aACjB;EAEF,cAAc;CAChB;CACA,MAAM,IAAI,MACR,yFAAyF,kBAAkB,EAC7G;AACF;AAEA,SAAS,iCACP,YAAyC,CAAC,GAClC;CASR,OAAO;;;;;6BARuB,KAAK,UACjC,8BAA8B,SAAS,CAYM,EAAE;6BAVxB,KAAK,UAAU,gBAAgB,SAAS,CAWvB,EAAE;2BAVrB,KAAK,UAAU,yBAAyB,SAAS,CAWlC,EAAE;wCAVL,KAAK,UACtC,yBAAyB,SAAS,MAAM,WAUqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiSnE;AAEA,SAAS,0CACP,YAAyC,CAAC,GAClC;CACR,OAAO,CACL,aACA,QAAQ,iBAAiBA,UAAQ,QAAQ,EAAE,GAAG,iBAC5C,0BAA0B,SAAS,CACrC,EAAE,MACJ,CAAC,CAAC,KAAK,IAAI;AACb;AAEA,SAAS,iBAAiB,OAAuB;CAC/C,OAAO,IAAI,MAAM,WAAW,KAAK,SAAS,EAAE;AAC9C;AAEA,eAAe,mBAAmB,MAAiC;CASjE,QAAO,MARe,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC,CAAC,OAC1D,UAAU;EACT,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO,CAAC;EAEV,MAAM;CACR,CACF,EAAA,CAEG,QAAQ,UAAU,MAAM,YAAY,CAAC,CAAC,CACtC,KAAK,UAAU,MAAM,IAAI;AAC9B;AAEA,SAAS,4BACP,uBACwB;CACxB,MAAM,aAAa,sBAAsB,WAAW,MAAM,GAAG,CAAC,CAAC,YAAY;CAC3E,IAAI,WAAW,SAAS,QAAQ,KAAK,WAAW,SAAS,MAAM,GAC7D,OAAO;CAET,IAAI,WAAW,SAAS,gBAAgB,GACtC,OAAO;CAET,IAAI,WAAW,SAAS,YAAY,GAClC,OAAO;CAET,OAAO;AACT;AAEA,SAAS,qBAAqB,OAA6C;CACzE,OACE,UAAU,sBACV,UAAU,uBACV,UAAU;AAEd;AAEA,SAAS,yBACP,OACiC;CACjC,OACE,UAAU,uCACV,UAAU,6CACV,UAAU,uCACV,UAAU;AAEd;AAEA,SAAS,8BAA8B,OAAyB;CAC9D,MAAM,OAAO,aAAa,KAAK;CAC/B,OACE,SAAS,sBAAsB,SAAS;AAE5C;AAEA,SAAS,sBAAsB,OAA+B;CAC5D,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CAC5C,OAAO,WAAW,SAAS,IAAI,aAAa;AAC9C;AAEA,eAAe,WAAW,MAAgC;CACxD,IAAI;EACF,MAAM,KAAK,IAAI;EACf,OAAO;CACT,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR;AACF;AAEA,eAAe,8BACb,SACwB;CACxB,MAAM,uBAAuB,6BAA6B,OAAO;CACjE,MAAM,iBAAiB;EACrB,QAAQ,OAAO;EACf,KAAKA,UAAQ,IAAI,GAAG,MAAM;EAC1B,KAAKA,UAAQ,IAAI,GAAG,WAAW,gBAAgB,MAAM;EACrD,QAAQ,cAAc,OAAO,KAAK,GAAG,CAAC;EACtC,KAAK,QAAQ,cAAc,OAAO,KAAK,GAAG,CAAC,GAAG,MAAM,MAAM;CAC5D;CACA,KAAK,MAAM,cAAc,sBACvB,KAAK,MAAM,iBAAiB,gBAAgB;EAC1C,MAAM,gBAAgB,KAAK,eAAe,UAAU;EACpD,IAAI,MAAM,WAAW,aAAa,GAChC,OAAO;CAEX;CAEF,OAAO;AACT;AAEA,SAAS,6BAA6B,SAA2B;CAC/D,MAAM,sBAAsB,SAAS,OAAO,CAAC,CAAC,SAAS,KAAK,IACxD,SAAS,OAAO,IAChB,GAAG,SAAS,OAAO,EAAE;CACzB,IAAI,8BAA8B,mBAAmB,GACnD,OAAO,CAAC,mBAAmB;CAE7B,IAAI,OAAOA,UAAQ,IAAI,qBAAqB,EAAE,CAAC,CAAC,KAAK,MAAM,KACzD,OAAO,CAAC,GAAG,sBAAsB;CAEnC,OAAO,CAAC,GAAG,sBAAsB,CAAC,CAAC,QAAQ;AAC7C;AAEA,SAAS,8BACP,OACkD;CAClD,OAAO,uBAAuB,SAC5B,KACF;AACF;AAEA,SAAS,aAAa,OAAoC;CACxD,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,OAAQ,MAA6B;CAC3C,OAAO,OAAO,SAAS,WAAW,OAAO,KAAA;AAC3C;;;ACv/DA,MAAM,uBAAuB,CAAC,gBAAgB,UAAU;AACxD,MAAM,wBAAwB;AAC9B,MAAM,2BAA2B;AACjC,MAAM,mCAAmC;AAEzC,SAAgB,4BACd,OACA,YAAyC,CAAC,GACjC;CACT,MAAM,iBAAiB,+BAA+B,KAAK;CAC3D,IACE,mBACA,+BAA+B,0BAA0B,SAAS,CAAC,GAEnE,OAAO;CAET,OAAO,2BAA2B,gBAAgB,SAAS;AAC7D;AAEA,SAAgB,kCACd,OACA,YAAyC,CAAC,GACjC;CACT,MAAM,kBAAkB,+BAA+B,KAAK;CAC5D,OACE,yBACE,iBACA,+BAA+B,0BAA0B,SAAS,CAAC,CACrE,KAAK,iCAAiC,iBAAiB,SAAS;AAEpE;AAEA,SAAgB,4CACd,OACe;CACf,MAAM,iBAAiB,+BAA+B,KAAK;CAC3D,MAAM,WAAW,eAAe,MAAM,GAAG;CACzC,MAAM,aAAa,SAAS,IAAI;CAChC,MAAM,iBAAiB,SAAS,IAAI;CACpC,MAAM,oBAAoB,SAAS,IAAI;CACvC,IACE,CAAC,qBAAqB,SAAS,cAAc,EAAE,KAC/C,sBAAsB,cACtB,CAAC,kBACD,CAAC,6BAA6B,cAAc,GAE5C,OAAO;CAET,MAAM,WAAW,SAAS,KAAK,GAAG;CAClC,IAAI,SAAS,SAAS,GACpB,OAAO;CAET,OAAO,eAAe,WAAW,GAAG,IAAI,MAAM;AAChD;AAEA,SAAS,2BACP,gBACA,WACS;CACT,MAAM,eAAe,sBAAsB,SAAS;CACpD,IAAI,CAAC,eAAe,WAAW,YAAY,GACzC,OAAO;CAGT,MAAM,WADW,eAAe,MAAM,aAAa,MAC3B,CAAC,CAAC,MAAM,GAAG;CACnC,MAAM,iBAAiB,SAAS,MAAM;CACtC,MAAM,aAAa,SAAS,MAAM;CAClC,OACE,SAAS,WAAW,KACpB,eAAe,SAAS,KACxB,qBAAqB,SAAS,UAAU;AAE5C;AAEA,SAAS,iCACP,iBACA,WACS;CACT,MAAM,eAAe,sBAAsB,SAAS;CACpD,IAAI,QAAQ,gBAAgB,QAAQ,YAAY;CAChD,OAAO,SAAS,GAAG;EACjB,MAAM,SAAS,QAAQ,IAAK,gBAAgB,QAAQ,MAAM,KAAM;EAChE,MAAM,YAAY,gBAAgB,MAAM,QAAQ,aAAa,MAAM;EACnE,MAAM,wBAAwB,UAAU,QAAQ,GAAG;EACnD,IACE,eAAe,MAAM,KACrB,wBAAwB,KACxB,6BAA6B,UAAU,MAAM,GAAG,qBAAqB,CAAC,GACtE;GACA,MAAM,eAAe,UAAU,MAAM,wBAAwB,CAAC;GAC9D,KAAK,MAAM,cAAc,sBACvB,IAAI,aAAa,WAAW,UAAU;QAEhC,eADgB,aAAa,WAAW,WAAW,EACzB,GAC5B,OAAO;GAAA;EAIf;EACA,QAAQ,gBAAgB,QAAQ,cAAc,QAAQ,CAAC;CACzD;CACA,OAAO;AACT;AAEA,SAAS,yBACP,iBACA,gBACS;CACT,IAAI,QAAQ,gBAAgB,QAAQ,cAAc;CAClD,OAAO,SAAS,GAAG;EACjB,MAAM,SAAS,QAAQ,IAAK,gBAAgB,QAAQ,MAAM,KAAM;EAChE,MAAM,QAAQ,gBAAgB,QAAQ,eAAe,WAAW;EAChE,IAAI,eAAe,MAAM,KAAK,eAAe,KAAK,GAChD,OAAO;EAET,QAAQ,gBAAgB,QAAQ,gBAAgB,QAAQ,CAAC;CAC3D;CACA,OAAO;AACT;AAEA,SAAS,sBAAsB,WAAgD;CAC7E,OAAO,GAAG,+BACR,oBAAoB,SAAS,CAC/B,CAAC,CAAC,QAAQ,0BAA0B,EAAE,EAAE;AAC1C;AAEA,SAAS,+BAA+B,OAAuB;CAC7D,OAAO,MAAM,KAAK,CAAC,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC,YAAY;AACxD;AAEA,SAAS,eAAe,OAAwB;CAC9C,OAAO,UAAU,MAAM,sBAAsB,KAAK,KAAK;AACzD;AAEA,SAAS,6BAA6B,OAAwB;CAC5D,OAAO,MAAM,SAAS,KAAK,CAAC,iCAAiC,KAAK,KAAK;AACzE;;;ACtHA,eAAsB,+CAA8D;CAClF,MAAM,UAAU,MAAM,4BAA4B;CAClD,IAAI,CAAC,SACH,MAAM,IAAI,MACR,6DACF;CAEF,MAAM,SAAS,MAAM,QAAQ,OAAO;CAEpC,IAAI,CAAC,OAAO,WACV;CAEF,IACE,CAAE,MAAM,8CAA8C;EACpD,YAAY,QAAQ;EACpB,gBAAgB,OAAO,kBAAkB;EACzC,aAAa,OAAO;CACtB,CAAC,GAED,MAAM,IAAI,MACR,yHACF;AAEJ;AAEA,SAAgB,2CAA2C,OAQ/C;CACV,IAAI,MAAM,eAAe,mBAAmB;EAC1C,IAAI,MAAM,aACR,OAAO,+BAA+B,MAAM,aAAa,MAAM,SAAS;EAE1E,OACE,OAAO,MAAM,mBAAmB,YAChC,MAAM,eAAe,SAAS,KAC9B,MAAM,eAAe,SAAS,MAAM,cAAc;CAEtD;CACA,KAAK,MAAM,gBAAgB,4BAA4B,OAAO,UAAU;EACtE,IAAI,MAAM,eAAe,WAAW;GAClC,MAAM,uBAAuB,kCAC3B,MAAM,SACR;GACA,OAAO;IACL,GAAG,qBAAqB;IACxB,IAAI,qBAAqB;IACzB,IAAI,qBAAqB;GAC3B,CAAC,CAAC,MAAM,mBAAmB,MAAM,eAAe,SAAS,cAAc,CAAC;EAC1E;EACA,OAAO,kCACL,MAAM,gBACN,MAAM,SACR;CACF;CACA,OAAO,gDAAgD;EACrD,YAAY,MAAM;EAClB,iCACE,MAAM,oCAAoC;EAC5C,WAAW,MAAM;CACnB,CAAC,CAAC,CAAC,MAAM,SAAS,MAAM,eAAe,SAAS,IAAI,CAAC;AACvD;AAEA,eAAsB,8CAA8C,OAM/C;CACnB,IAAI,MAAM,eAAe,qBAAqB,MAAM,aAClD,OAAO,+BAA+B,MAAM,aAAa,MAAM,SAAS;CAE1E,IACE,OAAO,MAAM,mBAAmB,YAChC,MAAM,eAAe,KAAK,CAAC,CAAC,WAAW,GAEvC,OAAO;CAGT,MAAM,aAAa,MAAM,SAAS,MAAM,gBAAgB,MAAM,CAAC,CAAC,YACxD,IACR;CACA,IAAI,eAAe,MACjB,OAAO;CAGT,KAAK,MAAM,gBAAgB,4BAA4B,OAAO,UAAU;EACtE,IAAI,MAAM,eAAe,WAAW;GAClC,MAAM,uBAAuB,kCAC3B,MAAM,SACR;GACA,OAAO,WAAW,SAAS,WAAW,qBAAqB,UAAU;EACvE;EACA,OAAO,kCAAkC,YAAY,MAAM,SAAS;CACtE;CAEA,OAAO,gDAAgD;EACrD,YAAY,MAAM,cAAc;EAChC,WAAW,MAAM;CACnB,CAAC,CAAC,CAAC,MAAM,SAAS,WAAW,SAAS,IAAI,CAAC;AAC7C;AAEA,SAAS,+BACP,MACA,YAAyC,CAAC,GACjC;CACT,IACE,uBAAuB,EAAE,KAAK,KAAK,IAAI,CAAC,MACxC,uBAAuB,SAAS,GAEhC,OAAO;CAET,IAAI,KAAK,KAAK,OAAO,0BAA0B,SAAS,GACtD,OAAO,KAAK,KAAK,OAAO,aAAa,KAAK,KAAK,OAAO;CAExD,MAAM,qBAAqB,SACzB,yBAAyB,SAAS,GAClC,KAAK,UACP,CAAC,CAAC,MAAM,GAAG;CACX,OACE,mBAAmB,WAAW,KAC9B,mBAAmB,OAAO,QAC1B,mBAAmB,EAAE,EAAE,YAAY,MAAM,kBACzC,KAAK,KAAK,OAAO,aACjB,KAAK,KAAK,OAAO,SACjB,KAAK,KAAK,OAAO,YACjB,KAAK,KAAK,OAAO,iBAChB,KAAK,KAAK,WAAW,KACnB,KAAK,KAAK,WAAW,KACpB,KAAK,KAAK,OAAO,4BACjB,QAAQ,KAAK,KAAK,EAAE;AAE5B;AAEA,SAAS,gDAAgD,OAI5C;CACX,IAAI,MAAM,eAAe,WACvB,OAAO,CACL,mCAAmC,MAAM,SAAS,GAClD,GAAI,MAAM,oCAAoC,OAC1C,CAAC,+BAA+B,MAAM,SAAS,CAAC,IAChD,CAAC,CACP;CAEF,OAAO,CAAC,0BAA0B,MAAM,SAAS,CAAC;AACpD;;;AC1KA,MAAM,wBAAwB;AAC9B,MAAM,oCAAoC;AAS1C,SAAgB,sBAAsB,SAA2B;CAC/D,MAAM,SAAmB,CAAC;CAC1B,KAAK,MAAM,SAAS,QAAQ,SAAS,qBAAqB,GAAG;EAC3D,MAAM,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM;EAC5C,IAAI,OACF,OAAO,KAAK,KAAK;CAErB;CACA,OAAO;AACT;AAEA,SAAgB,2BAA2B,MAAsB;CAC/D,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC,YAAY;AACvD;AAEA,SAAgB,+BACd,SACA,MACS;CACT,MAAM,oBAAoB,2BAA2B,OAAO;CAC5D,MAAM,iBAAiB,2BAA2B,IAAI;CACtD,IAAI,YAAY,kBAAkB,QAAQ,cAAc;CAExD,OAAO,aAAa,GAAG;EACrB,MAAM,aAAa,kBAAkB,YAAY;EACjD,MAAM,YAAY,kBAAkB,YAAY,eAAe;EAC/D,IACE,0BAA0B,UAAU,KACpC,0BAA0B,SAAS,GAEnC,OAAO;EAET,YAAY,kBAAkB,QAC5B,gBACA,YAAY,eAAe,MAC7B;CACF;CAEA,OAAO;AACT;AAEA,SAAgB,8BACd,SACA,YAAyC,CAAC,GAC3B;CACf,MAAM,sBAAsB,iCAC1B,SACA,SACF;CACA,IAAI,qBACF,OAAO;CAGT,MAAM,SAAS,sBAAsB,OAAO;CAC5C,IAAI,OAAO,WAAW,GACpB,OAAO;CAET,MAAM,kBAAkB,8BAA8B,MAAM;CAC5D,MAAM,kBACJ,kBAAkB,IAAI,OAAO,MAAM,GAAG,eAAe,IAAI;CAE3D,KAAK,IAAI,QAAQ,gBAAgB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;EACnE,MAAM,QAAQ,gBAAgB;EAC9B,IAAI,EAAE,SAAS,yBAAyB,OAAO,SAAS,IACtD;EAEF,OAAO;CACT;CAEA,OAAO;AACT;AAEA,SAAgB,8BAA8B,SAA0B;CACtE,MAAM,iBAAiB,iCAAiC,OAAO;CAC/D,OACE,gBAAgB,WAAW,SAC1B,gBAAgB,WAAW,WAAW,eAAe,SAAS;AAEnE;AAEA,SAAgB,iCACd,SACoC;CACpC,MAAM,SAAS,sBAAsB,OAAO,CAAC,CAAC,KAAK,UACjD,MAAM,YAAY,CACpB;CACA,MAAM,sBAAsB,8BAA8B,MAAM;CAChE,IAAI,sBAAsB,GACxB,OAAO;CAGT,MAAM,SAAS,OAAO,sBAAsB;CAC5C,IAAI,WAAW,SAAS,WAAW,SACjC,OAAO;CAGT,OAAO;EACL;EACA,MAAM,gCACJ,OAAO,MAAM,sBAAsB,CAAC,CACtC;CACF;AACF;AAEA,SAAgB,mCACd,WACA,YAAyC,CAAC,GAC3B;CACf,MAAM,sBAAsB,2BAA2B,SAAS;CAChE,MAAM,uBAAuB,GAAG,2BAC9B,yBAAyB,SAAS,CACpC,EAAE;CACF,IAAI,CAAC,oBAAoB,WAAW,oBAAoB,GACtD,OAAO;CAGT,MAAM,WADW,oBAAoB,MAAM,qBAAqB,MACxC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;CACrC,OAAO,YAAY,SAAS,SAAS,IAAI,WAAW;AACtD;AAEA,SAAS,yBACP,OACA,WACS;CACT,MAAM,kBAAkB,2BAA2B,KAAK;CACxD,OACE,gBAAgB,SAAS,WAAW,KACpC,gBAAgB,SAAS,2BAA2B,KACpD,gBAAgB,SAAS,cAAc,KACvC,gBAAgB,SAAS,kBAAkB,KAC3C,gBAAgB,SAAS,8BAA8B,KACvD,+CAA+C,OAAO,SAAS,KAC/D,4BAA4B,OAAO,SAAS;AAEhD;AAEA,SAAS,8BAA8B,QAAmC;CACxE,OAAO,OAAO,WACX,OAAO,UACN,UAAU,cACT,OAAO,QAAQ,OAAO,SAAS,OAAO,QAAQ,OAAO,QAC1D;AACF;AAEA,SAAS,gCACP,kBAC0B;CAC1B,IAAI,OAAiC;CACrC,KAAK,IAAI,QAAQ,GAAG,QAAQ,iBAAiB,QAAQ,SAAS,GAAG;EAC/D,MAAM,WAAW,iBAAiB;EAClC,IAAI;EACJ,IAAI,aAAa,UACf,YAAY,iBAAiB,QAAQ;OAChC,IAAI,UAAU,WAAW,SAAS,GACvC,YAAY,SAAS,MAAM,CAAgB;EAE7C,IAAI,cAAc,gBAAgB,cAAc,cAC9C,OAAO;CAEX;CACA,OAAO;AACT;AAEA,SAAS,+CACP,OACA,WACS;CACT,MAAM,kBAAkB,2BAA2B,KAAK;CACxD,OAAOC,yCAAuC,SAAS,CAAC,CAAC,MACtD,gBAAgB;EACf,MAAM,wBAAwB,2BAA2B,WAAW;EACpE,OACE,oBAAoB,yBACpB,gBAAgB,SACd,IAAI,2BAA2B,SAAS,WAAW,CAAC,GACtD;CAEJ,CACF;AACF;AAEA,SAAS,iCACP,SACA,WACe;CACf,MAAM,oBAAoB,2BAA2B,OAAO;CAC5D,MAAM,kBAAkB,kBAAkB,QAAQ,cAAc;CAChE,IAAI,mBAAmB,GACrB,OAAO;CAGT,MAAM,gBAAgB,QAAQ,MAAM,GAAG,eAAe;CACtD,MAAM,mBAAmB,kBAAkB,MAAM,GAAG,eAAe;CACnE,KAAK,MAAM,eAAeA,yCAAuC,SAAS,GAAG;EAC3E,MAAM,wBAAwB,2BAA2B,WAAW;EACpE,MAAM,mBAAmB,iBAAiB,YACxC,qBACF;EACA,IACE,oBAAoB,KACpB,+BAA+B,eAAe,WAAW,GAEzD,OAAO,cAAc,MACnB,kBACA,mBAAmB,sBAAsB,MAC3C;EAGF,MAAM,cAAc,SAAS,WAAW;EACxC,IAAI,CAAC,YAAY,SAAS,GAAG,GAC3B;EAEF,MAAM,mBAAmB,IAAI,2BAA2B,WAAW;EACnE,MAAM,mBAAmB,iBAAiB,YAAY,gBAAgB;EACtE,IACE,mBAAmB,KACnB,mBAAmB,iBAAiB,WAAW,iBAAiB,QAEhE;EAEF,OAAO,cAAc,MAAM,GAAG,mBAAmB,iBAAiB,MAAM;CAC1E;CACA,OAAO;AACT;AAEA,SAAS,0BAA0B,MAAmC;CACpE,OACE,SAAS,KAAA,KACT,SAAS,OACT,SAAS,QACT,kCAAkC,KAAK,IAAI;AAE/C;;;ACzMA,MAAM,6BAA6B;AACnC,MAAM,kCAAkC;AACxC,MAAM,yCACJ;AACF,MAAM,mCAAmC;AACzC,MAAM,2BAA2B;CAC/B;CACA;CACA;AACF;AACA,MAAM,uCAAuC;CAC3C,MAAM,wCAAwC,MAAM;CACpD,aAAa,wCAAwC,WAAW;CAChE,QAAQ,wCAAwC,QAAQ;AAC1D;AAEA,eAAsB,yBACpB,YAII,CAAC,GAC0B;CAC/B,MAAM,gBACJ,UAAU,iBAAiB;CAC7B,MAAM,oBAAoB,IAAI,IAC5B,MAAM,KAAK,UAAU,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAC1C,QAAuB,OAAO,UAAU,GAAG,KAAK,MAAM,CACzD,CACF;CAaA,OAAO,kCAXgB,MADC,cAAc,EAAA,CAEnC,KAAK,gBACJ,2BACE,aACA,mBACA,UAAU,SACZ,CACF,CAAC,CACA,QACE,gBAAmD,gBAAgB,IAEnB,CAAC;AACxD;AAEA,SAAS,2BACP,aACA,mBACA,YAAyC,CAAC,GACf;CAC3B,IAAI,kBAAkB,IAAI,YAAY,GAAG,GACvC,OAAO;CAET,MAAM,oBAAoB,wBAAwB,YAAY,OAAO;CACrE,MAAM,mBAAmB,8BAA8B,iBAAiB;CACxE,MAAM,0BAA0B,kBAAkB,SAAS,iBAAiB;CAC5E,IAAI,EAAE,oBAAoB,0BACxB,OAAO;CAET,MAAM,eAAe,wBACnB,0BAA0B,SAAS,CACrC;CACA,MAAM,eAAe,uCAAuC,SAAS,CAAC,CAAC,IACrE,uBACF;CACA,IACE,aAAa,MACV,gBACC,kBAAkB,SAAS,WAAW,KACtC,CAAC,+BAA+B,mBAAmB,WAAW,CAClE,GAEA,OAAO;CAET,IACE,CAAC,oCAAoC;EACnC;EACA;EACA;CACF,CAAC,GAED,OAAO;CAET,IACE,8BAA8B;EAC5B;EACA;EACA;CACF,CAAC,MAAM,gBAEP,OAAO;CAET,MAAM,YAAY,8BAChB,mBACA,cACA,cACA,SACF;CACA,MAAM,OACJ,iCAAiC,iBAAiB,CAAC,EAAE,QAAQ;CAC/D,OAAO;EACL,KAAK,YAAY;EACjB,WAAW,YAAY;EACvB,SAAS,YAAY;EACrB;EACA;CACF;AACF;AAEA,eAAe,kCAA4D;CACzE,IAAIC,UAAQ,aAAa,SACvB,OAAO,MAAM,qBAAqB;CAEpC,OAAO,MAAM,mBAAmB;AAClC;AAEA,eAAe,qBAA+C;CAC5D,MAAM,SAAS,MAAM,WAAW,MAAM,CAAC,QAAQ,qBAAqB,CAAC;CACrE,MAAM,YAA6B,CAAC;CACpC,KAAK,MAAM,QAAQ,OAAO,MAAM,IAAI,GAAG;EACrC,MAAM,UAAU,KAAK,KAAK;EAC1B,IAAI,QAAQ,WAAW,GACrB;EAEF,MAAM,QAAQ,QAAQ,MAAM,0BAA0B;EACtD,IAAI,EAAE,QAAQ,MAAM,MAAM,MAAM,MAAM,KACpC;EAEF,UAAU,KAAK;GACb,KAAK,OAAO,MAAM,EAAE;GACpB,WAAW,OAAO,MAAM,EAAE;GAC1B,SAAS,MAAM;EACjB,CAAC;CACH;CACA,OAAO;AACT;AAEA,SAAS,8BACP,mBACA,cACA,cACA,WACiC;CACjC,MAAM,mBAAmB,8BAA8B,iBAAiB;CACxE,IACE,kBAAkB,SAAS,YAAY,KACvC,aAAa,MAAM,gBACjB,+BAA+B,mBAAmB,WAAW,CAC/D,KACC,oBACC,kCAAkC,mBAAmB,SAAS,GAEhE,OAAO;CAET,IAAI,kBAAkB,SAAS,iBAAiB,GAC9C,OAAO;CAET,IAAI,kBACF,OAAO;CAET,OAAO;AACT;AAEA,SAAS,oCAAoC,OAIjC;CACV,OACE,8BAA8B,MAAM,iBAAiB,KACrD,MAAM,kBAAkB,SAAS,MAAM,YAAY,KACnD,MAAM,aAAa,MAAM,gBACvB,+BAA+B,MAAM,mBAAmB,WAAW,CACrE,KACA,MAAM,kBAAkB,SAAS,iBAAiB;AAEtD;AAEA,SAAS,8BAA8B,OAIY;CACjD,MAAM,qBAAqB,uCACzB,MAAM,iBACR;CACA,IAAI,oBAIF,OAAO,uBAHa,kBAClB,uBAAuB,MAAM,SAAS,CAEA,IAAI,iBAAiB;CAG/D,MAAM,cAAc,yBAAyB,MAAM,SAAS;CAC5D,MAAM,cAAc,6BAA6B;EAC/C,mBAAmB,MAAM;EACzB,WAAW,MAAM;CACnB,CAAC;CACD,IAAI,aACF,OAAO,gBAAgB,cAAc,iBAAiB;CAGxD,IAAI,wBAAwB,MAAM,SAAS,GACzC,OAAO;CAGT,MAAM,eAAe,4BACnB,MAAM,mBACN,MAAM,SACR;CACA,IAAI,CAAC,cACH,OAAO;CAET,OAAO,iBAAiB,cAAc,iBAAiB;AACzD;AAEA,SAAS,wBACP,WACS;CACT,MAAM,SAAS,UAAU,OAAOA,UAAQ,IAAA,CAAK;CAC7C,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC,SAAS;AAC5D;AAEA,SAAS,uCACP,mBACe;CACf,KAAK,MAAM,SAAS,sBAAsB,iBAAiB,GAAG;EAC5D,MAAM,WAAW,4CAA4C,KAAK;EAClE,IAAI,UACF,OAAO,kBAAkB,QAAQ;CAErC;CACA,OAAO;AACT;AAEA,SAAS,6BAA6B,OAGT;CAC3B,MAAM,gBAAgB,yBAAyB,MAAM,SAAS;CAC9D,KAAK,MAAM,UAAU,0BAA0B;EAC7C,MAAM,gBAAgB,qBAAqB,MAAM,WAAW,MAAM;EAClE,MAAM,mBAAmB,wBACvB,0BAA0B,aAAa,CACzC;EACA,MAAM,mBAAmB,uCACvB,aACF,CAAC,CAAC,IAAI,uBAAuB;EAC7B,MAAM,kBAAkB,wBACtB,sBAAsB,aAAa,CACrC;EACA,MAAM,gBAAgB,8BACpB,MAAM,mBACN,aACF;EACA,MAAM,sBAAsB,iBAAiB,KAAK,kBAChD,SAAS,aAAa,CACxB;EACA,IACE,MAAM,kBAAkB,SAAS,gBAAgB,KACjD,iBAAiB,MAAM,gBACrB,+BAA+B,MAAM,mBAAmB,WAAW,CACrE,KACC,WAAW,iBACV,kBAAkB,QAClB,oBAAoB,SAClB,wBAAwB,SAAS,aAAa,CAAC,CACjD,KACF,MAAM,kBAAkB,SAAS,eAAe,KAChD,kCAAkC,MAAM,mBAAmB,aAAa,GAExE,OAAO;CAEX;CACA,OAAO;AACT;AAEA,SAAS,4BACP,mBACA,WAC0B;CAC1B,IAAI,CAAC,8BAA8B,iBAAiB,GAClD,OAAO;CAET,IAAI,qBAAqB,mBAAmB,aAAa,SAAS,GAChE,OAAO;CAET,IAAI,qBAAqB,mBAAmB,UAAU,SAAS,GAC7D,OAAO;CAET,IAAI,qBAAqB,mBAAmB,QAAQ,SAAS,GAC3D,OAAO;CAET,OAAO;AACT;AAEA,SAAS,qBACP,mBACA,QACA,WACS;CACT,IAAI,qCAAqC,OAAO,CAAC,KAAK,iBAAiB,GACrE,OAAO;CAGT,IAAI,WAAW,aACb,OAAO,kBAAkB,SAAS,gCAAgC;CAGpE,MAAM,2BAA2B,gCAAgC,SAAS;CAC1E,IAAI,WAAW,UACb,OACE,kBAAkB,SAAS,wBAAwB,KACnD,kBAAkB,SAChB,gDACF;CAIJ,OACE,kBAAkB,SAAS,sCAAsC,KACjE,CAAC,kBAAkB,SAAS,wBAAwB,KACpD,CAAC,kBAAkB,SACjB,gDACF,KACA,CAAC,kBAAkB,SAAS,gCAAgC;AAEhE;AAEA,SAAS,iCACP,WACsB;CACtB,MAAM,iCAAiB,IAAI,IAAY;CAEvC,KAAK,MAAM,eAAe,WACxB,IAAI,YAAY,cAAc,mBAC5B,eAAe,IAAI,YAAY,GAAG;CAGtC,IAAI,eAAe,SAAS,GAC1B,OAAO;CAGT,MAAM,qBAA2C,CAAC;CAClD,KAAK,MAAM,eAAe,WAAW;EACnC,IAAI,YAAY,cAAc,mBAAmB;GAO/C,IANwB,UAAU,MAC/B,cACC,UAAU,QAAQ,YAAY,OAC9B,UAAU,cAAc,YAAY,OACpC,UAAU,cAAc,iBAEV,GAChB;GAEF,mBAAmB,KAAK,WAAW;GACnC;EACF;EAEA,IACE,YAAY,cAAc,QAC1B,eAAe,IAAI,YAAY,SAAS,GACxC;GACA,mBAAmB,KAAK;IACtB,GAAG;IACH,WACE,YAAY,cAAc,YACtB,YAAY,YACZ;GACR,CAAC;GACD;EACF;EAEA,mBAAmB,KAAK,WAAW;CACrC;CAEA,OAAO;AACT;AAEA,eAAsB,uBAAiD;CAGrE,MAAM,SAAS;;;;;;;;;CAWf,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,EAAE,QAAQ,WAAW,MAAM,UAAU,QAAQ,CAAC,CAClD,6BAA6B,GAC7B,2BAA2B,MAAM,GACjC;EACE,UAAU;EACV,aAAa;EACb,SAAS;EACT,WAAW,IAAI,OAAO;CACxB,CACF,CAAC,CAAC,OAAO,UAAmB;EAC1B,MAAM,UAAU;EAMhB,MAAM,WAAW,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS;EACvE,IAAI,QAAQ;EACZ,IAAI,SAAS,SAAS,oCAAoC,GACxD,QAAQ;OACH,IAAI,SAAS,SAAS,kCAAkC,GAC7D,QAAQ;EAEV,MAAM,IAAI,MACR,0CAA0C,KAAK,IAAI,IAAI,UAAU,YAAY,MAAM,SAAS,OAAO,QAAQ,QAAQ,SAAS,EAAE,WAAW,OAAO,QAAQ,UAAU,MAAM,EAAE,WAAW,OAAO,QAAQ,UAAU,KAAK,EAAE,KACrN,EAAE,OAAO,MAAM,CACjB;CACF,CAAC;CACD,OAAO,6BAA6B,MAAM;AAC5C;AAEA,SAAgB,6BAA6B,QAAiC;CAC5E,MAAM,SAAS,KAAK,MAAM,MAAM;CAWhC,IAAI,CAAC,UAAU,OAAO,WAAW,UAC/B,MAAM,IAAI,MAAM,gDAAgD;CAElE,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;CACrD,MAAM,YAA6B,CAAC;CACpC,KAAK,MAAM,OAAO,MAAM;EACtB,IACE,CAAC,OACD,OAAO,IAAI,cAAc,YACzB,OAAO,IAAI,oBAAoB,YAC/B,OAAO,IAAI,gBAAgB,YAC3B,IAAI,YAAY,KAAK,CAAC,CAAC,WAAW,GAElC;EAEF,UAAU,KAAK;GACb,KAAK,IAAI;GACT,WAAW,IAAI;GACf,SAAS,IAAI;EACf,CAAC;CACH;CACA,OAAO;AACT;AAEA,eAAe,WAAW,SAAiB,MAAiC;CAC1E,OAAO,MAAM,IAAI,SAAS,SAAS,WAAW;EAC5C,MAAM,QAAQ,MAAM,SAAS,MAAM;GACjC,OAAO;IAAC;IAAU;IAAQ;GAAM;GAChC,KAAKA,UAAQ;GACb,aAAa;EACf,CAAC;EACD,IAAI,SAAS;EACb,IAAI,SAAS;EACb,MAAM,QAAQ,GAAG,SAAS,UAAU;GAClC,UAAU,MAAM,SAAS;EAC3B,CAAC;EACD,MAAM,QAAQ,GAAG,SAAS,UAAU;GAClC,UAAU,MAAM,SAAS;EAC3B,CAAC;EACD,MAAM,KAAK,SAAS,MAAM;EAC1B,MAAM,KAAK,UAAU,SAAS;GAC5B,IAAI,SAAS,GAAG;IACd,uBACE,IAAI,MACF,qCAAqC,QAAQ,GAAG,KAAK,KAAK,GAAG,EAAE,GAAG,OAAO,KAAK,GAChF,CACF;IACA;GACF;GACA,QAAQ,MAAM;EAChB,CAAC;CACH,CAAC;AACH;AAEA,SAAS,wCACP,QACQ;CACR,MAAM,UAAU,6BAA6B,EAC3C,KAAK,EACH,qBAAqB,OACvB,EACF,CAAC,CAAC,CAAC,gBAAgB,IAAI,WAAW;CAClC,OAAO,IAAI,OACT,gBAAgB,QAAQ,KAAK,GAAG,EAAE,qCAClC,GACF;AACF;AAEA,SAAS,YAAY,OAAuB;CAC1C,OAAO,MAAM,WAAW,uBAAuB,MAAM;AACvD;AAEA,SAAS,gCACP,YAAyC,CAAC,GAClC;CACR,OAAO,wBACL,KACE,UAAU,WAAW,QAAQ,GAC7B,UACA,SACA,mBACA,iBACF,CACF;AACF;AAEA,SAAS,qBACP,WACA,QAC6B;CAC7B,MAAM,gBAAgB,yBAAyB,SAAS;CACxD,MAAM,MAAyB;EAC7B,GAAI,UAAU,OAAOA,UAAQ;EAC7B,cAAc,WAAW,cAAc,QAAQ;EAC/C,qBAAqB;CACvB;CACA,IAAI,WAAW,iBAAiB,IAAA,kBAC9B,OAAO,IAAI;CAEb,OAAO;EACL,GAAG;EACH;CACF;AACF;AAEA,SAAS,wBAAwB,SAAyB;CACxD,OAAO,QAAQ,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,MAAM,GAAG;AAC1D;AAEA,SAAS,kBAAkB,MAAsB;CAC/C,MAAM,aAAa,wBAAwB,IAAI;CAC/C,OAAO,eAAe,MAClB,aACA,WAAW,QAAQ,iCAAiC,EAAE;AAC5D;;;ACzjBA,MAAM,kBAAkB;AAExB,SAAgB,uCACd,QAAqC,CAAC,GAC7B;CACT,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,IAAI,OAAO,IAAA,oBAA8B,EAAE,CAAC,CAAC,KAAK,GAChD,OAAO;CAET,OAAO,yBAAyB,KAAK,MAAM;AAC7C;AAEA,SAAgB,mCACd,QAAqC,CAAC,GACF;CACpC,IAAI,CAAC,uCAAuC,KAAK,GAC/C,OAAO;CAET,OAAO;EACL,GAAG;EACH,KAAK;GACH,GAAI,MAAM,OAAO,QAAQ;GACzB,qBAAqB;EACvB;CACF;AACF;AAEA,SAAgB,2CAA2C,OAM/C;CACV,IAAI,sCAAsC,KAAK,GAC7C,OAAO;CAET,OAAO,0BAA0B,KAAK;AACxC;AAEA,eAAsB,iCACpB,QAAqC,CAAC,GACe;CACrD,MAAM,YAAY,mCAAmC,KAAK;CAC1D,IAAI,CAAC,WACH,OAAO;CAGT,MAAM,CAAC,eAAe,eAAe,gBAAgB,kBACnD,MAAM,QAAQ,IAAI;EAChB,gBAAgB,SAAS;EACzB,uBAAuB,SAAS;EAChC,4BAA4B,KAAA,GAAW,SAAS,CAAC,CAAC,YAAY,IAAI;EAClE,yBAAyB,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;CACxD,CAAC;CAEH,MAAM,uBAAuB,iBACzB,MAAM,eACH,OAAO,CAAC,CACR,YAAsD,IAAI,IAC7D;CAUJ,OAAO;EACL,SATc,2CAA2C;GACzD;GACA;GACA;GACA;GACA;EACF,CAGQ;EACN;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAAS,sCAAsC,OAInC;CACV,IAAI,CAAC,MAAM,sBAAsB,WAC/B,OAAO;CAET,IAAI,CAAC,MAAM,qBAAqB,gBAC9B,OAAO;CAET,OAAO,CAAC,2CAA2C;EACjD,YAAY,MAAM,gBAAgB,cAAc;EAChD,gBAAgB,MAAM,qBAAqB;EAC3C,aAAa,MAAM,qBAAqB;EACxC,gBAAgB,MAAM,qBAAqB,kBAAkB;EAC7D,iCAAiC;EACjC,WAAW,MAAM;CACnB,CAAC;AACH;AAEA,SAAS,0BAA0B,OAGvB;CACV,IAAI,MAAM,cAAc,sBAAsB,mBAC5C,OAAO;CAET,OAAO,MAAM,eAAe,MACzB,gBAAgB,YAAY,cAAc,iBAC7C;AACF;AAEA,eAAsB,sCACpB,QAAqC,CAAC,GACP;CAC/B,MAAM,YAAY,mCAAmC,KAAK;CAC1D,IAAI,CAAC,WACH,OAAO,EAAE,SAAS,MAAM;CAE1B,MAAM,sBAAsB,MAAM,iCAAiC,KAAK;CACxE,IAAI,wBAAwB;CAC5B,IACE,qBAAqB,WACrB,oBAAoB,kBACpB,oBAAoB,sBAAsB,WAC1C;EACA,MAAM,oBAAoB,eAAe,UAAU;EACnD,MAAM,oBAAoB,eAAe,gBAAgB;EACzD,wBAAwB;CAC1B;CACA,MAAM,kBAAkB,MAAM,gBAAgB,SAAS;CACvD,OAAO,EACL,SAAS,yBAAyB,gBAAgB,QACpD;AACF;;;AC9JA,SAAgB,mCAAmC,OAGpB;CAC7B,MAAM,oBAAoB,yBAAyB,MAAM,YAAY;CACrE,MAAM,kBAAkB,6BAA6B,MAAM,cAAc;CAEzE,IAAI,CAAC,qBAAqB,MAAM,cAC9B,OAAO;EACL,QAAQ;EACR,MAAM,MAAM,aAAa;EACzB,KAAK,MAAM,aAAa;EACxB,WAAW,MAAM,aAAa;EAC9B,WAAW,MAAM,aAAa;EAC9B,wBAAwB,MAAM,aAAa;EAC3C,mBAAmB,MAAM,aAAa;EACtC,WAAW,MAAM,aAAa;CAChC;CAGF,IAAI,iBACF,OAAO;EACL,QAAQ;EACR,MAAM,gBAAgB;EACtB,KAAK,gBAAgB;EACrB,WAAW,MAAM,cAAc,aAAa;EAC5C,WAAW,MAAM,cAAc,aAAa;EAC5C,wBAAwB,gBAAgB,cAAc;EACtD,mBACE,gBAAgB,cAAc,oBAC1B,oBACA;EACN,WAAW,gBAAgB,cAAc;EACzC,QAAQ,qBAAqB;CAC/B;CAGF,IAAI,CAAC,MAAM,cACT,OAAO;EACL,QAAQ;EACR,MAAM;EACN,KAAK;EACL,WAAW;EACX,WAAW;EACX,wBAAwB;EACxB,mBAAmB;EACnB,WAAW;CACb;CAGF,OAAO;EACL,QAAQ;EACR,MAAM,MAAM,aAAa;EACzB,KAAK,MAAM,aAAa;EACxB,WAAW,MAAM,aAAa;EAC9B,WAAW,MAAM,aAAa;EAC9B,wBAAwB,MAAM,aAAa;EAC3C,mBAAmB,MAAM,aAAa;EACtC,WAAW,MAAM,aAAa;EAC9B,QAAQ,qBAAqB;CAC/B;AACF;AAEA,SAAgB,uCAAuC,OAGrC;CAChB,MAAM,aACJ,OAAO,MAAM,cAAc,QAAQ,WAC/B,MAAM,cAAc,MACpB;CACN,IAAI,CAAC,YACH,OAAO;CAET,MAAM,iBAAiB,MAAM,eAAe,MACzC,gBAAgB,YAAY,QAAQ,UACvC;CACA,IAAI,CAAC,gBACH,OAAO;CAET,OAAO,8BAA8B,eAAe,OAAO;AAC7D;AAEA,SAAS,yBACP,cACe;CACf,IAAI,CAAC,cACH,OAAO;CAGT,IAAI,CAAC,OAAO,UAAU,aAAa,GAAG,KAAK,aAAa,OAAO,GAC7D,OAAO;CAGT,IAAI,CAAC,WAAW,aAAa,GAAG,GAC9B,OAAO;CAGT,IAAI,6BAA6B,YAAY,GAC3C,OAAO;CAGT,OAAO;AACT;AAEA,SAAS,6BACP,gBAC2B;CAe3B,OAdwB,CAAC,GAAG,cAAc,CAAC,CAAC,MAAM,MAAM,UAAU;EAChE,MAAM,qBACJ,yBAAyB,KAAK,SAAS,IACvC,yBAAyB,MAAM,SAAS;EAC1C,IAAI,uBAAuB,GACzB,OAAO;EAET,MAAM,iBACJ,oBAAoB,KAAK,IAAI,IAAI,oBAAoB,MAAM,IAAI;EACjE,IAAI,mBAAmB,GACrB,OAAO;EAET,OAAO,KAAK,MAAM,MAAM;CAC1B,CACqB,CAAC,CAAC,MAAM;AAC/B;AAEA,SAAS,yBACP,WACQ;CACR,QAAQ,WAAR;EACE,KAAK,mBACH,OAAO;EACT,KAAK,mBACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAS,oBAAoB,MAA0C;CACrE,QAAQ,MAAR;EACE,KAAK,cACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAS,WAAW,KAAsB;CACxC,IAAI;EACF,UAAQ,KAAK,KAAK,CAAC;EACnB,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,6BACP,cACS;CACT,MAAM,qBAAqB,aAAa,eAAe,aAAa;CACpE,MAAM,cAAc,KAAK,MAAM,kBAAkB;CACjD,IAAI,OAAO,MAAM,WAAW,GAC1B,OAAO;CAET,OAAO,KAAK,IAAI,IAAI,cAAc;AACpC;;;AC3JA,MAAM,sCAAsC;AAC5C,MAAM,sCAAsC;AAgB5C,eAAsB,yCAA8E;CAClG,OAAO,MAAM,yBAAyB;AACxC;AAEA,eAAsB,6CAAoF;CACxG,MAAM,UAAU,MAAM,gCAAgC;CAItD,IAAI,EAFF,QAAQ,2BAA2B,iBAClC,MAAM,+BAA+B,OAAO,IAE7C,OAAO;EACL;EACA,SAAS;CACX;CAEF,MAAM,+BAA+B;CACrC,OAAO;EACL;EACA,SAAS;CACX;AACF;AAEA,eAAe,+BACb,SACkB;CAClB,IACE,QAAQ,cAAc,WAAW,WACjC,CAAC,QAAQ,cAAc,0BACvB,QAAQ,sBAAsB,YAAY,OAE1C,OAAO;CAMT,QAAO,MAHsB,yBAAyB,EACpD,kBAAkB,CAACC,UAAQ,KAAKA,UAAQ,IAAI,EAC9C,CAAC,EAAA,CACqB,WAAW;AACnC;AAEA,eAAsB,gCACpB,QAA0C,CAAC,GACL;CACtC,MAAM,SAAS,MAAM,UAAW,MAAM,gBAAgB;CACtD,MAAM,gBAAgB,MAAM,uCAAuC;CACnE,MAAM,EAAE,gBAAgB,sBAAsB,wBAC5C,MAAM,2CAA2C;EAC/C;EACA,cAAc;CAChB,CAAC;CAMH,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,wBAX6B,gCAAgC;GAC7D,cAAc;GACd;EACF,CAQuB;CACvB;AACF;AAEA,eAAsB,0BACpB,QAC4C;CAC5C,IAAI,CAAC,OAAO,WACV,OAAO;CAET,OAAO,MAAM,uCAAuC;AACtD;AAEA,eAAsB,4CACpB,cACsC;CACtC,IAAI,CAAC,cAAc,wBACjB,OAAO;CAGT,IAAI,aAAa,sBAAsB,mBACrC,OAAO;CAGT,OAAO,MAAM,4BAA4B,aAAa,iBAAiB;AACzE;AAEA,eAAsB,2CAA2C,OAO9D;CACD,MAAM,iBAAiB,MAAM,4CAC3B,MAAM,YACR;CACA,MAAM,uBAAuB,iBACzB,MAAM,eACH,OAAO,CAAC,CACR,YAAsD,IAAI,IAC7D;CAEJ,IACE,MAAM,OAAO,aACb,MAAM,cAAc,2BAA2B,QAC/C,CAAC,sBAAsB,WACvB;EACA,MAAM,kBAAkB,MAAM,4BAA4B,CAAC,CAAC,YACpD,IACR;EACA,IAAI,iBAAiB;GACnB,MAAM,wBAAwB,MAAM,gBACjC,OAAO,CAAC,CACR,YAAsD,IAAI;GAC7D,IAAI,uBAAuB,WACzB,OAAO;IACL,gBAAgB;IAChB,sBAAsB;IACtB,qBAAqB;GACvB;EAEJ;CACF;CAEA,MAAM,sBAAsB,MAAM,iCAAiC,CAAC,CAAC,YAC7D,IACR;CACA,IACE,qBAAqB,WACrB,oBAAoB,sBAAsB,WAC1C;EACA,MAAM,gBACJ,oBAAoB,kBACnB,MAAM,4BACL,oBAAoB,cAAc,sBAAsB,YACpD,KAAA,IACA,oBAAoB,cAAc,mBACtC,oBAAoB,SACtB,CAAC,CAAC,YAAY,IAAI;EACpB,IAAI,eACF,OAAO;GACL,gBAAgB;GAChB,sBAAsB,oBAAoB;GAC1C;EACF;CAEJ;CAEA,OAAO;EACL,gBAAgB;EAChB,sBAAsB;EACtB;CACF;AACF;AAEA,SAAgB,gCAAgC,OAGP;CACvC,IAAI,MAAM,aAAa,WAAW,WAChC,OAAO;CAGT,IACE,EAAE,MAAM,aAAa,0BAA0B,MAAM,uBAErD,OAAO,MAAM,aAAa;CAG5B,IAAI,MAAM,aAAa,WAAW,SAAS;EACzC,IAAI,MAAM,aAAa,WAAW,mBAChC,OAAO;EAET,IAAI,MAAM,qBAAqB,SAC7B,OAAO;EAET,IAAI,CAAC,MAAM,qBAAqB,SAC9B,OAAO;CAEX;CAEA,IAAI,CAAC,MAAM,qBAAqB,SAC9B,OAAO;CAGT,OAAO,MAAM,aAAa;AAC5B;AAEA,eAAsB,iCAAiC,OAIlC;CACnB,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,aAAa,KAAK,IAAI,IAAI;CAEhC,OAAO,KAAK,IAAI,IAAI,YAAY;EAC9B,MAAM,iBAAiB,MAAM,uCAAuC,CAAC,CAAC,YAC9D,IACR;EAGA,KACE,MAH0B,MAAM,QAAQ,OAAO,CAAC,CAAC,YAAY,IAAI,EAAA,EAGlD,YAAY,SAC3B,mBAAmB,QACnB,eAAe,WAAW,WAE1B,OAAO;EAGT,IACE,gBAAgB,WAAW,WAC3B,CAAC,eAAe,wBAEhB,OAAO;EAGT,IAAI,gBAAgB,WAAW,eAC7B,OAAO;EAGT,MAAM,MAAM,MAAM;CACpB;CAEA,MAAM,eAAe,MAAM,uCAAuC,CAAC,CAAC,YAC5D,IACR;CACA,IAAI,cAAc,WAAW,eAC3B,OAAO;CAGT,IACE,cAAc,WAAW,WACzB,CAAC,aAAa,wBAEd,OAAO;CAGT,IAAI,cAAc,WAAW,WAC3B,OAAO;CAGT,IAAI,iBAAiB,MACnB,OAAO;CAIT,QAAO,MAD0B,MAAM,QAAQ,OAAO,CAAC,CAAC,YAAY,IAAI,EAAA,EAC7C,YAAY;AACzC;AAEA,eAAe,2BAAgE;CAC7E,MAAM,oBAAoB,CAACA,UAAQ,KAAKA,UAAQ,IAAI,CAAC,CAAC,QACnD,QAAuB,OAAO,UAAU,GAAG,KAAK,MAAM,CACzD;CACA,MAAM,CAAC,cAAc,kBAAkB,MAAM,QAAQ,IAAI,CACvD,uBAAuB,CAAC,CAAC,YAAY,IAAI,GACzC,yBAAyB,EACvB,kBAAkB,kBACpB,CAAC,CACH,CAAC;CACD,OAAO,mCAAmC;EACxC;EACA;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"daemon-service-runtime-DhV7AKAv.js","names":["process","getErrorCode","packageJson","exhaustive","getErrorCode","fsConstants","process","fsConstants","delay","resolveDaemonServiceExecutableWrapperPaths","resolveDaemonServiceRecognizedExecutablePaths","process","daemonServiceRecognizedExecutablePaths","process","process"],"sources":["../../../packages/schemas/dist/schemas/daemon/cli-install-self.js","../../../packages/schemas/dist/schemas/daemon/service-update-job.js","../../../runtime/local-service/src/cli-binary-delta.ts","../../../runtime/local-service/src/windows-artifact-script.ts","../../../runtime/local-service/src/windows-artifact-signature.ts","../../../runtime/local-service/src/cli-binary-update-artifact.ts","../src/config/daemon-service-update-worker-registration.ts","../src/config/service-release.ts","../src/local-service/lifecycle/daemon-service-update-state.ts","../src/local-components/managed-version-pruning.ts","../src/local-components/managed-install.ts","../src/system/local-operation-diagnostics.ts","../src/local-service/lifecycle/daemon-service-artifact.ts","../src/local-service/lifecycle/daemon-service-bundle.ts","../src/local-service/lifecycle/daemon-managed-binary-path.ts","../src/local-service/lifecycle/daemon-service-manager-command-match.ts","../src/local-service/lifecycle/daemon-service-command-path.ts","../src/local-service/lifecycle/daemon-service-process-inventory.ts","../src/local-service/lifecycle/daemon-service-legacy-shared.ts","../src/local-service/lifecycle/daemon-service-runtime-observer.ts","../src/local-service/lifecycle/daemon-service-runtime.ts"],"sourcesContent":["import * as z$1 from \"zod/v4\";\n//#region src/schemas/daemon/cli-install-self.ts\nconst cliInstallSelfResultSchema = z$1.strictObject({\n\tschemaVersion: z$1.literal(1),\n\ttype: z$1.literal(\"cli.install_self\"),\n\tresult: z$1.enum([\n\t\t\"installed\",\n\t\t\"noop_same_version\",\n\t\t\"noop_newer_present\"\n\t]),\n\tversion: z$1.string().min(1),\n\tplatform: z$1.string().min(1),\n\tmanagedBinaryPath: z$1.string().min(1),\n\tcurrentPointerPath: z$1.string().min(1),\n\tpreviousVersion: z$1.string().nullable(),\n\tforced: z$1.boolean()\n});\n//#endregion\nexport { cliInstallSelfResultSchema };\n\n//# sourceMappingURL=cli-install-self.js.map","import { openMeldToolsUpdateOperationPhaseSchema, openMeldToolsUpdateRequestSourceSchema } from \"../local-components.js\";\nimport * as z$1 from \"zod/v4\";\n//#region src/schemas/daemon/service-update-job.ts\nconst OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA = \"openmeld-daemon-service-update-job-v2\";\nconst daemonServiceUpdatePreparedBundleSchema = z$1.strictObject({\n\tv: z$1.literal(2),\n\tschema: z$1.literal(\"openmeld-daemon-active-bundle-v2\"),\n\tbundleId: z$1.string().min(1),\n\tdaemonVersion: z$1.string().min(1),\n\tentryScriptRelativePath: z$1.string().min(1),\n\tbundleFormat: z$1.enum([\n\t\t\"legacy_linked_v1\",\n\t\t\"self_contained_v1\",\n\t\t\"binary_v1\"\n\t]),\n\tsourceEntryScriptPath: z$1.string().min(1),\n\tsourcePackageRootPath: z$1.string().min(1),\n\tsourceDistRootPath: z$1.string().min(1),\n\tsourceDistFingerprint: z$1.string().min(1).nullable().optional(),\n\tsourceKind: z$1.enum([\n\t\t\"workspace\",\n\t\t\"package_install\",\n\t\t\"npx_cache\",\n\t\t\"unknown\"\n\t]),\n\tcreatedAt: z$1.iso.datetime({ offset: true }),\n\tupdatedAt: z$1.iso.datetime({ offset: true })\n});\nconst daemonServiceUpdateJobBodySchema = z$1.strictObject({\n\tattempts: z$1.number().int().nonnegative(),\n\tdesiredState: z$1.enum([\"background\", \"stopped\"]),\n\terrorMessage: z$1.string().min(1).nullable(),\n\tjobId: z$1.string().min(1),\n\tpreparedBundle: daemonServiceUpdatePreparedBundleSchema,\n\trequestedAt: z$1.iso.datetime({ offset: true }),\n\ttargetCliVersion: z$1.string().min(1).optional(),\n\ttargetServiceVersion: z$1.string().min(1).optional(),\n\ttargetVersion: z$1.string().min(1),\n\tupdatedAt: z$1.iso.datetime({ offset: true }),\n\turgency: z$1.enum([\"available\", \"required\"])\n});\nconst daemonServiceUpdateJobV1Schema = daemonServiceUpdateJobBodySchema.extend({\n\tv: z$1.literal(1),\n\tschema: z$1.literal(\"openmeld-daemon-service-update-job-v1\"),\n\tstatus: z$1.enum([\n\t\t\"scheduled\",\n\t\t\"running\",\n\t\t\"completed\",\n\t\t\"failed\"\n\t])\n});\nconst daemonServiceUpdateJobSchema = daemonServiceUpdateJobBodySchema.extend({\n\tv: z$1.literal(2),\n\tschema: z$1.literal(OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA),\n\tphase: openMeldToolsUpdateOperationPhaseSchema,\n\trequestSource: openMeldToolsUpdateRequestSourceSchema\n});\nconst storedDaemonServiceUpdateJobSchema = z$1.discriminatedUnion(\"v\", [daemonServiceUpdateJobV1Schema, daemonServiceUpdateJobSchema]);\n//#endregion\nexport { OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA, daemonServiceUpdateJobSchema, daemonServiceUpdateJobV1Schema, daemonServiceUpdatePreparedBundleSchema, storedDaemonServiceUpdateJobSchema };\n\n//# sourceMappingURL=service-update-job.js.map","import { createHash } from \"node:crypto\";\nimport {\n type CliBinaryDeltaPatch,\n type CliBinaryDeltaTransport,\n cliBinaryDeltaPatchSchema,\n} from \"@openmeld/schemas\";\n\nexport function reconstructCliBinaryDelta(input: {\n baseBytes: Buffer;\n delta: CliBinaryDeltaTransport;\n patchPayloadBytes: Buffer;\n targetSha256: string;\n targetSizeBytes: number;\n}): Buffer {\n verifyBytes({\n bytes: input.baseBytes,\n expectedSha256: input.delta.fromSha256,\n expectedSizeBytes: input.delta.fromSizeBytes,\n label: \"delta base\",\n });\n\n const patch = parseCliBinaryDeltaPatch(input.patchPayloadBytes);\n assertPatchMatchesRelease({\n delta: input.delta,\n patch,\n targetSha256: input.targetSha256,\n targetSizeBytes: input.targetSizeBytes,\n });\n\n const targetBytes = Buffer.alloc(input.targetSizeBytes);\n input.baseBytes.copy(\n targetBytes,\n 0,\n 0,\n Math.min(input.baseBytes.byteLength, targetBytes.byteLength)\n );\n\n let previousEnd = 0;\n for (const segment of patch.segments) {\n const bytes = Buffer.from(segment.dataBase64, \"base64\");\n const segmentEnd = segment.offset + bytes.byteLength;\n if (segment.offset < previousEnd) {\n throw new Error(\n \"delta patch segments must be sorted and non-overlapping\"\n );\n }\n if (segmentEnd > targetBytes.byteLength) {\n throw new Error(\"delta patch segment exceeds the target binary size\");\n }\n bytes.copy(targetBytes, segment.offset);\n previousEnd = segmentEnd;\n }\n\n verifyBytes({\n bytes: targetBytes,\n expectedSha256: input.targetSha256,\n expectedSizeBytes: input.targetSizeBytes,\n label: \"reconstructed binary\",\n });\n return targetBytes;\n}\n\nfunction parseCliBinaryDeltaPatch(bytes: Buffer): CliBinaryDeltaPatch {\n let value: unknown;\n try {\n value = JSON.parse(bytes.toString(\"utf8\"));\n } catch (error) {\n throw new Error(\n `delta patch is not valid JSON: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n const parsed = cliBinaryDeltaPatchSchema.safeParse(value);\n if (!parsed.success) {\n throw new Error(`delta patch is invalid: ${parsed.error.message}`);\n }\n return parsed.data;\n}\n\nfunction assertPatchMatchesRelease(input: {\n delta: CliBinaryDeltaTransport;\n patch: CliBinaryDeltaPatch;\n targetSha256: string;\n targetSizeBytes: number;\n}): void {\n const mismatches = [\n [\"format\", input.patch.patchFormat, input.delta.patchFormat],\n [\"base sha256\", input.patch.baseSha256, input.delta.fromSha256],\n [\"base size\", input.patch.baseSizeBytes, input.delta.fromSizeBytes],\n [\"target sha256\", input.patch.targetSha256, input.targetSha256],\n [\"target size\", input.patch.targetSizeBytes, input.targetSizeBytes],\n ].filter(([, actual, expected]) => actual !== expected);\n if (mismatches.length > 0) {\n throw new Error(\n `delta patch metadata mismatch: ${mismatches.map(([label]) => label).join(\", \")}`\n );\n }\n}\n\nfunction verifyBytes(input: {\n bytes: Buffer;\n expectedSha256: string;\n expectedSizeBytes: number;\n label: string;\n}): void {\n if (input.bytes.byteLength !== input.expectedSizeBytes) {\n throw new Error(\n `${input.label} size mismatch: expected ${input.expectedSizeBytes} bytes, received ${input.bytes.byteLength} bytes`\n );\n }\n const actualSha256 = createHash(\"sha256\").update(input.bytes).digest(\"hex\");\n if (actualSha256 !== input.expectedSha256.toLowerCase()) {\n throw new Error(\n `${input.label} sha256 mismatch: expected ${input.expectedSha256.toLowerCase()}, received ${actualSha256}`\n );\n }\n}\n","// Shared by the Node/Electron verifier and the dependency-free PowerShell\n// bootstrap. Keep OS trust and publisher matching identical at both entrances.\nexport const WINDOWS_ARTIFACT_SIGNATURE_FUNCTION = String.raw`\nfunction Assert-OpenMeldArtifactSignature([string]$Path, [string]$Publisher) {\n Import-Module -Name (Join-Path $PSHOME 'Modules\\Microsoft.PowerShell.Security\\Microsoft.PowerShell.Security.psd1') -ErrorAction Stop\n $path = [IO.Path]::GetFullPath($Path)\n $signature = Microsoft.PowerShell.Security\\Get-AuthenticodeSignature -LiteralPath $path -ErrorAction Stop\n if ($signature.Status -ne [Management.Automation.SignatureStatus]::Valid -or !$signature.SignerCertificate -or $signature.Path -ine $path) { throw 'OpenMeld update signature is not valid for this file.' }\n $certificate = $signature.SignerCertificate\n $matches = if ($Publisher.Contains('=')) { $certificate.Subject -ceq $Publisher } else { $certificate.GetNameInfo([Security.Cryptography.X509Certificates.X509NameType]::SimpleName, $false) -ceq $Publisher }\n if (!$matches) { throw 'OpenMeld update publisher does not match this installation.' }\n}\n`;\n","import { execFile } from \"node:child_process\";\nimport { win32 } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { normalizeCommandEnvironment } from \"@openmeld/adapter-core/process-environment\";\nimport {\n powerShellEncodedArguments,\n resolveWindowsPowerShellPath,\n} from \"@openmeld/adapter-core/windows-system\";\nimport { WINDOWS_ARTIFACT_SIGNATURE_FUNCTION } from \"@openmeld/local-service/windows-artifact-script\";\nimport { windowsPublisherNameSchema } from \"@openmeld/schemas\";\n\nconst SIGNATURE_VERIFIED = \"OPENMELD_AUTHENTICODE_VERIFIED\";\nconst VERIFY_SCRIPT = `\n$ErrorActionPreference = 'Stop'\n$ProgressPreference = 'SilentlyContinue'\n[Console]::OutputEncoding = New-Object Text.UTF8Encoding($false)\n${WINDOWS_ARTIFACT_SIGNATURE_FUNCTION}\n$r = ConvertFrom-Json ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($env:OPENMELD_SIGNATURE_REQUEST)))\nAssert-OpenMeldArtifactSignature $r.path $r.publisherName\n[Console]::Out.Write('OPENMELD_AUTHENTICODE_VERIFIED')\n`;\n\ntype ExecuteSignatureCheck = (\n file: string,\n args: string[],\n options: {\n env: NodeJS.ProcessEnv;\n windowsHide: boolean;\n timeout: number;\n maxBuffer: number;\n }\n) => Promise<{ stdout: string; stderr: string }>;\n\n/** Shared artifact verifier: every missing/failed/ambiguous OS result rejects. */\nexport async function verifyWindowsArtifactSignature(\n path: string,\n publisherName: string,\n execute: ExecuteSignatureCheck = promisify(execFile)\n): Promise<void> {\n const publisher = windowsPublisherNameSchema.parse(publisherName);\n if (!win32.isAbsolute(path) || path.includes(\"\\0\")) {\n throw new Error(\n \"OpenMeld signature verification requires an absolute Windows file path.\"\n );\n }\n const env = normalizeCommandEnvironment(process.env, \"win32\");\n // Use Windows PowerShell's own module discovery, not a caller override.\n for (const key of Object.keys(env)) {\n if (key.toUpperCase() === \"PSMODULEPATH\") {\n delete env[key];\n }\n }\n const result = await execute(\n resolveWindowsPowerShellPath(env),\n powerShellEncodedArguments(VERIFY_SCRIPT),\n {\n env: {\n ...env,\n OPENMELD_SIGNATURE_REQUEST: Buffer.from(\n JSON.stringify({ path, publisherName: publisher })\n ).toString(\"base64\"),\n },\n windowsHide: true,\n timeout: 30_000,\n maxBuffer: 16_384,\n }\n );\n if (result.stderr.trim() || result.stdout.trim() !== SIGNATURE_VERIFIED) {\n throw new Error(\"Windows could not verify the OpenMeld update signature.\");\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { gunzipSync } from \"node:zlib\";\nimport {\n type CliBinaryRelease,\n OPENMELD_MACOS_CLI_SIGNING_IDENTITY,\n OPENMELD_MACOS_CLI_SIGNING_REQUIREMENT,\n WINDOWS_INTERNAL_PREVIEW_MANIFEST_URL,\n WINDOWS_PROCESS_HELPER_FILENAME,\n} from \"@openmeld/schemas\";\nimport { reconstructCliBinaryDelta } from \"./cli-binary-delta.js\";\nimport { verifyWindowsArtifactSignature } from \"./windows-artifact-signature.js\";\n\ntype CommandResult = {\n code: number;\n stderr: string;\n stdout: string;\n};\n\nconst HARDENED_RUNTIME_FLAG_RE = /flags=.*runtime/iu;\nconst RETRY_AFTER_SECONDS_RE = /^\\d+$/u;\nconst SIGNING_TIMESTAMP_RE = /^Timestamp=/mu;\n\ntype CliBinaryDelta = NonNullable<CliBinaryRelease[\"deltas\"]>[number];\nexport type CliBinaryDownloadPolicy = {\n maxAttempts: number;\n retryDelaysMs: readonly number[];\n stallTimeoutMs: number;\n totalBudgetMs: number;\n};\n\nexport type CliBinaryDownloadProgress = {\n receivedBytes: number;\n totalBytes: number;\n transferAttempt: number;\n};\n\nexport const DEFAULT_CLI_BINARY_DOWNLOAD_POLICY: CliBinaryDownloadPolicy = {\n maxAttempts: 3,\n retryDelaysMs: [500, 1500],\n stallTimeoutMs: 60_000,\n totalBudgetMs: 5 * 60_000,\n};\n\nexport type CliBinaryUpdateErrorKind =\n | \"download_failed\"\n | \"download_stalled\"\n | \"download_timed_out\"\n | \"integrity_check_failed\";\n\nexport class CliBinaryUpdateError extends Error {\n readonly allowFullFallback: boolean;\n readonly code: `openmeld.tools.update.${CliBinaryUpdateErrorKind}`;\n readonly kind: CliBinaryUpdateErrorKind;\n readonly retryAfterMs?: number;\n readonly retryable: boolean;\n\n constructor(input: {\n allowFullFallback: boolean;\n cause?: unknown;\n kind: CliBinaryUpdateErrorKind;\n message: string;\n retryAfterMs?: number;\n retryable: boolean;\n }) {\n super(\n input.message,\n input.cause === undefined ? undefined : { cause: input.cause }\n );\n this.name = \"CliBinaryUpdateError\";\n this.allowFullFallback = input.allowFullFallback;\n this.code = `openmeld.tools.update.${input.kind}`;\n this.kind = input.kind;\n this.retryAfterMs = input.retryAfterMs;\n this.retryable = input.retryable;\n }\n}\ntype CliBinaryFullUpdatePlan =\n | {\n downloadSha256: string;\n downloadSizeBytes: number;\n downloadUrl: string;\n transport: \"archive\";\n }\n | {\n downloadSha256: string;\n downloadSizeBytes: number;\n downloadUrl: string;\n transport: \"raw\";\n };\n\nexport type CliBinaryUpdatePlan =\n | CliBinaryFullUpdatePlan\n | {\n baseBytes: Buffer;\n delta: CliBinaryDelta;\n downloadSizeBytes: number;\n transport: \"delta\";\n };\n\nexport async function resolveCliBinaryUpdatePlan(input: {\n baseBinaryPath: string;\n currentVersion: string;\n onDeltaFallback: (error: Error) => void;\n release: CliBinaryRelease;\n}): Promise<CliBinaryUpdatePlan> {\n const fullDownloadPlan = resolveFullCliBinaryUpdatePlan(input.release);\n const versionDeltas = input.release.deltas?.filter(\n (candidate) => candidate.fromVersion === input.currentVersion\n );\n if (!versionDeltas?.length) {\n return fullDownloadPlan;\n }\n\n let baseBytes: Buffer;\n try {\n baseBytes = await readFile(input.baseBinaryPath);\n } catch (error) {\n input.onDeltaFallback(toError(error));\n return fullDownloadPlan;\n }\n const baseSha256 = createHash(\"sha256\").update(baseBytes).digest(\"hex\");\n const delta = versionDeltas.find(\n (candidate) =>\n candidate.fromSizeBytes === baseBytes.byteLength &&\n candidate.fromSha256.toLowerCase() === baseSha256\n );\n if (!delta) {\n return fullDownloadPlan;\n }\n return {\n baseBytes,\n delta,\n downloadSizeBytes: delta.patchSizeBytes,\n transport: \"delta\",\n };\n}\n\nexport async function downloadCliBinaryUpdateArtifact(input: {\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n onDeltaFallback: (error: Error) => void;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n plan: CliBinaryUpdatePlan;\n release: CliBinaryRelease;\n}): Promise<Buffer> {\n const recovery = createDownloadRecoveryContext(input.downloadPolicy);\n // A delta is only useful when the global recovery budget can still preserve\n // the documented delta-to-full fallback. With a one-attempt policy, spend\n // that attempt on the complete artifact instead of stranding the upgrade on\n // an optional transport.\n if (\n input.plan.transport === \"delta\" &&\n input.downloadPolicy.maxAttempts < 2\n ) {\n return downloadFullCliBinaryArtifact({\n ...input,\n plan: resolveFullCliBinaryUpdatePlan(input.release),\n recovery,\n });\n }\n if (input.plan.transport === \"delta\") {\n try {\n return await downloadCliBinaryDelta({\n ...input,\n attemptCeiling: Math.max(1, input.downloadPolicy.maxAttempts - 1),\n baseBytes: input.plan.baseBytes,\n delta: input.plan.delta,\n recovery,\n });\n } catch (error) {\n const resolvedError = toError(error);\n if (\n resolvedError instanceof CliBinaryUpdateError &&\n !resolvedError.allowFullFallback\n ) {\n throw resolvedError;\n }\n if (recovery.attemptsStarted >= input.downloadPolicy.maxAttempts) {\n throw resolvedError;\n }\n input.onDeltaFallback(resolvedError);\n await waitForRetryDelay({\n cause: resolvedError,\n deadlineAtMs: recovery.deadlineAtMs,\n delayMs:\n resolvedError instanceof CliBinaryUpdateError\n ? (resolvedError.retryAfterMs ?? 0)\n : 0,\n });\n }\n return downloadFullCliBinaryArtifact({\n ...input,\n plan: resolveFullCliBinaryUpdatePlan(input.release),\n recovery,\n });\n }\n return downloadFullCliBinaryArtifact({\n ...input,\n plan: input.plan,\n recovery,\n });\n}\n\n/** Prepare the Windows companion in the caller's disposable artifact directory. */\n\nexport function allowUnsignedWindowsInternalPreview(\n env: NodeJS.ProcessEnv = process.env\n): boolean {\n return (\n env.OPENMELD_ENV_PRESET === \"prod\" &&\n env.OPENMELD_WINDOWS_INTERNAL_PREVIEW === \"1\" &&\n env.OPENMELD_CLI_BINARY_MANIFEST_URL ===\n WINDOWS_INTERNAL_PREVIEW_MANIFEST_URL\n );\n}\n\nfunction assertWindowsPreviewPolicy(\n windows: NonNullable<CliBinaryRelease[\"windows\"]>,\n allowed: boolean\n): void {\n if (\"mode\" in windows && !allowed) {\n throw integrityError(\n \"Unsigned Windows artifacts require the explicit OpenMeld internal preview channel\"\n );\n }\n}\n\nexport async function prepareCliBinaryProcessHelper(input: {\n artifactPath: string;\n allowUnsignedPreview?: boolean;\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n release: CliBinaryRelease;\n}): Promise<void> {\n const windows = input.release.windows;\n if (!windows) {\n if (process.platform === \"win32\") {\n throw integrityError(\n \"Windows CLI artifacts must declare their process helper\"\n );\n }\n return;\n }\n if (process.platform !== \"win32\") {\n throw integrityError(\"Windows artifact preparation requires Windows\");\n }\n assertWindowsPreviewPolicy(windows, input.allowUnsignedPreview === true);\n if (\n new URL(windows.processHelper.url).origin !==\n new URL(input.release.url).origin\n ) {\n throw integrityError(\n \"Windows process helper returned an unexpected download location\"\n );\n }\n const bytes = await downloadCliBinaryUpdateArtifact({\n downloadPolicy: input.downloadPolicy,\n fetchImpl: input.fetchImpl,\n release: windows.processHelper,\n plan: resolveFullCliBinaryUpdatePlan(windows.processHelper),\n onDeltaFallback: () => {\n /* The small helper always uses a complete artifact. */\n },\n });\n const helperPath = join(\n dirname(input.artifactPath),\n WINDOWS_PROCESS_HELPER_FILENAME\n );\n await writeFile(helperPath, bytes, { mode: 0o700, flag: \"wx\" });\n if (!(\"mode\" in windows)) {\n await verifyWindowsArtifactSignature(helperPath, windows.publisherName);\n }\n}\n\nexport async function verifyCliBinaryCodeSignature(input: {\n artifactPath: string;\n allowUnsignedPreview?: boolean;\n allowUnsignedForDevelopment?: boolean;\n release: CliBinaryRelease;\n runCommand: (command: string, args: string[]) => Promise<CommandResult>;\n}): Promise<void> {\n if (process.platform === \"win32\") {\n if (!input.release.windows) {\n throw integrityError(\n \"Windows CLI artifacts must declare their publisher and process helper\"\n );\n }\n await verifyWindowsCliBinaryCodeSignature({\n allowUnsignedPreview: input.allowUnsignedPreview,\n artifactPath: input.artifactPath,\n windows: input.release.windows,\n });\n return;\n }\n if (input.release.windows) {\n throw integrityError(\n \"signed Windows artifact verification requires Windows\"\n );\n }\n const { codeIdentifier, teamIdentifier } = input.release;\n if (!(codeIdentifier && teamIdentifier)) {\n if (process.platform !== \"darwin\" || input.allowUnsignedForDevelopment) {\n return;\n }\n throw integrityError(\n \"binary manifest is missing a verified signing identity\"\n );\n }\n if (\n codeIdentifier !== OPENMELD_MACOS_CLI_SIGNING_IDENTITY.codeIdentifier ||\n teamIdentifier !== OPENMELD_MACOS_CLI_SIGNING_IDENTITY.teamIdentifier\n ) {\n throw integrityError(\"binary manifest has an unexpected signing identity\");\n }\n if (process.platform !== \"darwin\") {\n throw integrityError(\"signed OpenMeld CLI verification requires macOS\");\n }\n\n const verification = await input.runCommand(\"/usr/bin/codesign\", [\n \"--verify\",\n \"--strict\",\n \"--verbose=2\",\n `-R=${OPENMELD_MACOS_CLI_SIGNING_REQUIREMENT}`,\n input.artifactPath,\n ]);\n if (verification.code !== 0) {\n throw integrityError(\n `binary code signature verification failed: ${commandFailureDetails(verification)}`\n );\n }\n\n const inspection = await input.runCommand(\"/usr/bin/codesign\", [\n \"--display\",\n \"--verbose=4\",\n input.artifactPath,\n ]);\n if (inspection.code !== 0) {\n throw integrityError(\n `binary code signature inspection failed: ${commandFailureDetails(inspection)}`\n );\n }\n const details = `${inspection.stdout}\\n${inspection.stderr}`;\n for (const expected of [\n `Identifier=${codeIdentifier}`,\n `TeamIdentifier=${teamIdentifier}`,\n ]) {\n if (!details.split(\"\\n\").some((line) => line.trim() === expected)) {\n throw integrityError(\n `binary code signature has the wrong identity: ${expected}`\n );\n }\n }\n if (!details.includes(\"Authority=Developer ID Application:\")) {\n throw integrityError(\n \"binary code signature is missing a Developer ID authority\"\n );\n }\n if (!HARDENED_RUNTIME_FLAG_RE.test(details)) {\n throw integrityError(\n \"binary code signature is missing the hardened runtime\"\n );\n }\n if (!SIGNING_TIMESTAMP_RE.test(details)) {\n throw integrityError(\n \"binary code signature is missing a trusted timestamp\"\n );\n }\n}\n\nasync function verifyWindowsCliBinaryCodeSignature(input: {\n allowUnsignedPreview?: boolean;\n artifactPath: string;\n windows: NonNullable<CliBinaryRelease[\"windows\"]>;\n}): Promise<void> {\n assertWindowsPreviewPolicy(\n input.windows,\n input.allowUnsignedPreview === true\n );\n if (\"mode\" in input.windows) {\n return;\n }\n try {\n await verifyWindowsArtifactSignature(\n input.artifactPath,\n input.windows.publisherName\n );\n } catch (error) {\n throw integrityError(\n `Windows artifact signature verification failed: ${toError(error).message}`\n );\n }\n}\n\nasync function downloadCliBinaryDelta(input: {\n attemptCeiling: number;\n baseBytes: Buffer;\n delta: CliBinaryDelta;\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n recovery: DownloadRecoveryContext;\n release: CliBinaryRelease;\n}): Promise<Buffer> {\n const patchBytes = await downloadBinaryBytesWithRecovery({\n attemptCeiling: input.attemptCeiling,\n expectedSizeBytes: input.delta.patchSizeBytes,\n fetchImpl: input.fetchImpl,\n label: \"binary delta archive\",\n onProgress: input.onProgress,\n recovery: input.recovery,\n url: input.delta.patchUrl,\n });\n verifyBinaryBytes({\n bytes: patchBytes,\n expectedSha256: input.delta.patchSha256,\n expectedSizeBytes: input.delta.patchSizeBytes,\n label: \"binary delta archive\",\n });\n\n let patchPayloadBytes: Buffer;\n try {\n patchPayloadBytes = gunzipSync(patchBytes, {\n maxOutputLength: input.delta.patchPayloadSizeBytes,\n });\n } catch (error) {\n throw integrityError(\n `binary delta could not be decompressed: ${toError(error).message}`,\n error\n );\n }\n if (patchPayloadBytes.byteLength !== input.delta.patchPayloadSizeBytes) {\n throw integrityError(\n `binary delta payload size mismatch: expected ${input.delta.patchPayloadSizeBytes} bytes, received ${patchPayloadBytes.byteLength} bytes`\n );\n }\n\n try {\n return reconstructCliBinaryDelta({\n baseBytes: input.baseBytes,\n delta: input.delta,\n patchPayloadBytes,\n targetSha256: input.release.sha256,\n targetSizeBytes: input.release.sizeBytes,\n });\n } catch (error) {\n throw integrityError(\n `binary delta reconstruction failed: ${toError(error).message}`,\n error\n );\n }\n}\n\nexport function resolveFullCliBinaryUpdatePlan(\n release: CliBinaryRelease\n): CliBinaryFullUpdatePlan {\n if (hasCompressedCliBinaryTransport(release)) {\n return {\n downloadSha256: release.archiveSha256,\n downloadSizeBytes: release.archiveSizeBytes,\n downloadUrl: release.archiveUrl,\n transport: \"archive\",\n };\n }\n return {\n downloadSha256: release.sha256,\n downloadSizeBytes: release.sizeBytes,\n downloadUrl: release.url,\n transport: \"raw\",\n };\n}\n\nasync function downloadFullCliBinaryArtifact(input: {\n downloadPolicy: CliBinaryDownloadPolicy;\n fetchImpl: typeof fetch;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n plan: CliBinaryFullUpdatePlan;\n recovery: DownloadRecoveryContext;\n release: CliBinaryRelease;\n}): Promise<Buffer> {\n const downloadBytes = await downloadBinaryBytesWithRecovery({\n expectedSizeBytes: input.plan.downloadSizeBytes,\n fetchImpl: input.fetchImpl,\n label:\n input.plan.transport === \"archive\" ? \"binary archive\" : \"binary download\",\n onProgress: input.onProgress,\n recovery: input.recovery,\n url: input.plan.downloadUrl,\n });\n verifyBinaryBytes({\n bytes: downloadBytes,\n expectedSha256: input.plan.downloadSha256,\n expectedSizeBytes: input.plan.downloadSizeBytes,\n label:\n input.plan.transport === \"archive\" ? \"binary archive\" : \"binary download\",\n });\n let artifactBytes = downloadBytes;\n if (input.plan.transport === \"archive\") {\n try {\n artifactBytes = gunzipSync(downloadBytes, {\n maxOutputLength: input.release.sizeBytes,\n });\n } catch (error) {\n throw integrityError(\n `binary archive could not be decompressed: ${toError(error).message}`,\n error\n );\n }\n }\n verifyBinaryBytes({\n bytes: artifactBytes,\n expectedSha256: input.release.sha256,\n expectedSizeBytes: input.release.sizeBytes,\n label: \"binary download\",\n });\n return artifactBytes;\n}\n\nfunction hasCompressedCliBinaryTransport(\n release: CliBinaryRelease\n): release is CliBinaryRelease & {\n archiveFormat: \"gzip\";\n archiveUrl: string;\n archiveSha256: string;\n archiveSizeBytes: number;\n} {\n return (\n release.archiveFormat === \"gzip\" &&\n typeof release.archiveUrl === \"string\" &&\n typeof release.archiveSha256 === \"string\" &&\n typeof release.archiveSizeBytes === \"number\"\n );\n}\n\nfunction verifyBinaryBytes(input: {\n bytes: Buffer;\n expectedSha256: string;\n expectedSizeBytes: number;\n label: string;\n}): void {\n if (input.bytes.byteLength !== input.expectedSizeBytes) {\n throw integrityError(\n `${input.label} size mismatch: expected ${input.expectedSizeBytes} bytes, received ${input.bytes.byteLength} bytes`\n );\n }\n const actualSha256 = createHash(\"sha256\").update(input.bytes).digest(\"hex\");\n if (actualSha256 !== input.expectedSha256.toLowerCase()) {\n throw integrityError(\n `${input.label} sha256 mismatch: expected ${input.expectedSha256.toLowerCase()}, received ${actualSha256}`\n );\n }\n}\n\ntype DownloadRecoveryContext = {\n attemptsStarted: number;\n deadlineAtMs: number;\n policy: CliBinaryDownloadPolicy;\n};\n\nfunction createDownloadRecoveryContext(\n policy: CliBinaryDownloadPolicy\n): DownloadRecoveryContext {\n if (\n !Number.isInteger(policy.maxAttempts) ||\n policy.maxAttempts < 1 ||\n !Number.isFinite(policy.stallTimeoutMs) ||\n policy.stallTimeoutMs <= 0 ||\n !Number.isFinite(policy.totalBudgetMs) ||\n policy.totalBudgetMs <= 0 ||\n policy.retryDelaysMs.some(\n (delayMs) => !Number.isFinite(delayMs) || delayMs < 0\n )\n ) {\n throw new Error(\"CLI binary download policy is invalid.\");\n }\n return {\n attemptsStarted: 0,\n deadlineAtMs: performance.now() + policy.totalBudgetMs,\n policy,\n };\n}\n\nasync function downloadBinaryBytesWithRecovery(input: {\n attemptCeiling?: number;\n expectedSizeBytes: number;\n fetchImpl: typeof fetch;\n label: string;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n recovery: DownloadRecoveryContext;\n url: string;\n}): Promise<Buffer> {\n let lastError: CliBinaryUpdateError | null = null;\n const attemptCeiling = Math.min(\n input.attemptCeiling ?? input.recovery.policy.maxAttempts,\n input.recovery.policy.maxAttempts\n );\n while (input.recovery.attemptsStarted < attemptCeiling) {\n if (performance.now() >= input.recovery.deadlineAtMs) {\n throw totalBudgetError(lastError ?? undefined);\n }\n const attemptIndex = input.recovery.attemptsStarted;\n input.recovery.attemptsStarted += 1;\n try {\n return await downloadBinaryBytesAttempt(input);\n } catch (error) {\n const resolved = normalizeDownloadError(error, input.label);\n lastError = resolved;\n if (!resolved.retryable) {\n throw resolved;\n }\n if (input.recovery.attemptsStarted >= attemptCeiling) {\n throw resolved;\n }\n const delayMs =\n input.recovery.policy.retryDelaysMs[attemptIndex] ??\n input.recovery.policy.retryDelaysMs.at(-1) ??\n 0;\n await waitForRetryDelay({\n cause: resolved,\n deadlineAtMs: input.recovery.deadlineAtMs,\n delayMs: Math.max(delayMs, resolved.retryAfterMs ?? 0),\n });\n }\n }\n throw lastError ?? totalBudgetError();\n}\n\nasync function downloadBinaryBytesAttempt(input: {\n expectedSizeBytes: number;\n fetchImpl: typeof fetch;\n label: string;\n onProgress?: (progress: CliBinaryDownloadProgress) => void;\n recovery: DownloadRecoveryContext;\n url: string;\n}): Promise<Buffer> {\n const controller = new AbortController();\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n let lastProgressAtMs = performance.now();\n try {\n const response = await waitForDownloadProgress(\n input.fetchImpl(input.url, {\n method: \"GET\",\n signal: controller.signal,\n }),\n {\n controller,\n lastProgressAtMs,\n recovery: input.recovery,\n }\n );\n if (!response.ok) {\n cancelReadableStream(response.body);\n throw httpDownloadError({\n label: input.label,\n retryAfter: response.headers.get(\"retry-after\"),\n status: response.status,\n statusText: response.statusText,\n });\n }\n if (!response.body) {\n return Buffer.alloc(0);\n }\n\n reader = response.body.getReader();\n const chunks: Buffer[] = [];\n let receivedBytes = 0;\n input.onProgress?.({\n receivedBytes,\n totalBytes: input.expectedSizeBytes,\n transferAttempt: input.recovery.attemptsStarted,\n });\n while (true) {\n const next = await waitForDownloadProgress(reader.read(), {\n controller,\n lastProgressAtMs,\n recovery: input.recovery,\n });\n if (next.done) {\n return Buffer.concat(chunks, receivedBytes);\n }\n if (!next.value || next.value.byteLength === 0) {\n continue;\n }\n lastProgressAtMs = performance.now();\n receivedBytes += next.value.byteLength;\n if (receivedBytes > input.expectedSizeBytes) {\n throw integrityError(\n `${input.label} size exceeded the declared ${input.expectedSizeBytes} bytes while downloading`\n );\n }\n input.onProgress?.({\n receivedBytes,\n totalBytes: input.expectedSizeBytes,\n transferAttempt: input.recovery.attemptsStarted,\n });\n chunks.push(Buffer.from(next.value));\n }\n } catch (error) {\n controller.abort(error);\n if (reader) {\n cancelReadableStreamReader(reader);\n }\n throw error;\n } finally {\n reader?.releaseLock();\n }\n}\n\nasync function waitForDownloadProgress<T>(\n pending: Promise<T>,\n input: {\n controller: AbortController;\n lastProgressAtMs: number;\n recovery: DownloadRecoveryContext;\n }\n): Promise<T> {\n const stallDeadlineAtMs =\n input.lastProgressAtMs + input.recovery.policy.stallTimeoutMs;\n const totalDeadlineWins = input.recovery.deadlineAtMs <= stallDeadlineAtMs;\n const deadlineAtMs = Math.min(stallDeadlineAtMs, input.recovery.deadlineAtMs);\n const timeoutMs = Math.max(0, deadlineAtMs - performance.now());\n let timer: ReturnType<typeof setTimeout> | null = null;\n const timeout = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(() => {\n const error = totalDeadlineWins ? totalBudgetError() : stalledError();\n reject(error);\n input.controller.abort(error);\n }, timeoutMs);\n });\n try {\n return await Promise.race([pending, timeout]);\n } finally {\n if (timer) {\n clearTimeout(timer);\n }\n }\n}\n\nasync function waitForRetryDelay(input: {\n cause: unknown;\n deadlineAtMs: number;\n delayMs: number;\n}): Promise<void> {\n if (input.delayMs === 0) {\n return;\n }\n const remainingMs = input.deadlineAtMs - performance.now();\n if (remainingMs <= input.delayMs) {\n throw totalBudgetError(input.cause);\n }\n await new Promise<void>((resolve) => setTimeout(resolve, input.delayMs));\n}\n\nfunction normalizeDownloadError(\n error: unknown,\n label: string\n): CliBinaryUpdateError {\n if (error instanceof CliBinaryUpdateError) {\n return error;\n }\n const resolved = toError(error);\n const terminalTlsFailure = findErrorCode(error, isTerminalTlsErrorCode);\n if (terminalTlsFailure || isTerminalTlsErrorMessage(resolved.message)) {\n return new CliBinaryUpdateError({\n allowFullFallback: false,\n cause: error,\n kind: \"download_failed\",\n message: `${label} download failed TLS certificate verification${\n terminalTlsFailure ? ` (${terminalTlsFailure})` : \"\"\n }`,\n retryable: false,\n });\n }\n const retryable = Boolean(findErrorCode(error, isRetryableNetworkErrorCode));\n return new CliBinaryUpdateError({\n allowFullFallback: true,\n cause: error,\n kind: \"download_failed\",\n message: `${label} download failed: ${resolved.message}`,\n retryable,\n });\n}\n\nfunction httpDownloadError(input: {\n label: string;\n retryAfter: string | null;\n status: number;\n statusText: string;\n}): CliBinaryUpdateError {\n const retryable =\n input.status === 408 ||\n input.status === 429 ||\n input.status === 500 ||\n input.status === 502 ||\n input.status === 503 ||\n input.status === 504;\n const missingDelta = input.status === 404 || input.status === 410;\n const retryAfterMs = input.retryAfter\n ? parseRetryAfterMs(input.retryAfter)\n : undefined;\n return new CliBinaryUpdateError({\n allowFullFallback: retryable || missingDelta,\n kind: \"download_failed\",\n message: `${input.label} download failed: HTTP ${input.status}${\n input.statusText ? ` ${input.statusText}` : \"\"\n }`,\n ...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n retryable,\n });\n}\n\nfunction parseRetryAfterMs(value: string): number | undefined {\n const trimmed = value.trim();\n if (RETRY_AFTER_SECONDS_RE.test(trimmed)) {\n const seconds = Number(trimmed);\n const milliseconds = seconds * 1000;\n return Number.isSafeInteger(milliseconds) ? milliseconds : undefined;\n }\n const retryAtMs = Date.parse(trimmed);\n if (!Number.isFinite(retryAtMs)) {\n return undefined;\n }\n return Math.max(0, retryAtMs - Date.now());\n}\n\nfunction stalledError(): CliBinaryUpdateError {\n return new CliBinaryUpdateError({\n allowFullFallback: true,\n kind: \"download_stalled\",\n message: \"binary download stopped making progress\",\n retryable: true,\n });\n}\n\nfunction totalBudgetError(cause?: unknown): CliBinaryUpdateError {\n return new CliBinaryUpdateError({\n allowFullFallback: false,\n ...(cause === undefined ? {} : { cause }),\n kind: \"download_timed_out\",\n message: \"binary download exceeded the total recovery time budget\",\n retryable: false,\n });\n}\n\nfunction integrityError(\n message: string,\n cause?: unknown\n): CliBinaryUpdateError {\n return new CliBinaryUpdateError({\n allowFullFallback: true,\n ...(cause === undefined ? {} : { cause }),\n kind: \"integrity_check_failed\",\n message,\n retryable: false,\n });\n}\n\nfunction findErrorCode(\n error: unknown,\n predicate: (code: string) => boolean\n): string | null {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n const code = (current as { code?: unknown }).code;\n if (typeof code === \"string\" && predicate(code.toUpperCase())) {\n return code;\n }\n current = (current as { cause?: unknown }).cause;\n }\n return null;\n}\n\nfunction cancelReadableStream(stream: ReadableStream<Uint8Array> | null): void {\n if (!stream) {\n return;\n }\n try {\n stream.cancel().catch(() => undefined);\n } catch {\n // Best-effort cleanup must not replace or outlive the bounded failure.\n }\n}\n\nfunction cancelReadableStreamReader(\n reader: ReadableStreamDefaultReader<Uint8Array>\n): void {\n try {\n reader.cancel().catch(() => undefined);\n } catch {\n // Best-effort cleanup must not replace or outlive the bounded failure.\n }\n}\n\nfunction isTerminalTlsErrorCode(code: string): boolean {\n return (\n code.startsWith(\"CERT_\") ||\n code.includes(\"_CERT_\") ||\n code.startsWith(\"ERR_OSSL_\") ||\n code.startsWith(\"ERR_SSL_\") ||\n code.startsWith(\"ERR_TLS_\") ||\n code === \"DEPTH_ZERO_SELF_SIGNED_CERT\" ||\n code === \"SELF_SIGNED_CERT_IN_CHAIN\" ||\n code.startsWith(\"UNABLE_TO_GET_ISSUER_CERT\") ||\n code === \"UNABLE_TO_VERIFY_LEAF_SIGNATURE\"\n );\n}\n\nfunction isTerminalTlsErrorMessage(message: string): boolean {\n const normalized = message.toLowerCase();\n return (\n normalized.includes(\"certificate\") ||\n normalized.includes(\"self signed\") ||\n normalized.includes(\"tls handshake\") ||\n normalized.includes(\"unable to verify\")\n );\n}\n\nfunction isRetryableNetworkErrorCode(code: string): boolean {\n return (\n code === \"EAI_AGAIN\" ||\n code === \"ECONNABORTED\" ||\n code === \"ECONNREFUSED\" ||\n code === \"ECONNRESET\" ||\n code === \"EHOSTUNREACH\" ||\n code === \"ENETDOWN\" ||\n code === \"ENETUNREACH\" ||\n code === \"ENOTFOUND\" ||\n code === \"EPIPE\" ||\n code === \"ETIMEDOUT\" ||\n code === \"UND_ERR_BODY_TIMEOUT\" ||\n code === \"UND_ERR_CONNECT_TIMEOUT\" ||\n code === \"UND_ERR_HEADERS_TIMEOUT\" ||\n code === \"UND_ERR_RES_CONTENT_LENGTH_MISMATCH\" ||\n code === \"UND_ERR_SOCKET\"\n );\n}\n\nfunction commandFailureDetails(result: CommandResult): string {\n return result.stderr.trim() || result.stdout.trim() || `exit ${result.code}`;\n}\n\nfunction toError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n","import { readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n DAEMON_SERVICE_RUNTIME_AUTO_START_ENV,\n DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV,\n DAEMON_SERVICE_RUNTIME_DETACHED_ENV,\n DAEMON_SERVICE_RUNTIME_MODE_ENV,\n DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV,\n daemonRuntimeRootPath,\n} from \"./daemon-state\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n resolveOpenMeldServiceScope,\n} from \"./paths\";\n\nconst MANAGED_VERSION_FROM_EXECUTABLE_PATTERN =\n /[\\\\/]versions[\\\\/](v?(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?)[\\\\/]openmeld(?:\\.exe)?/gu;\nconst SELF_CONTAINED_BUNDLE_FROM_EXECUTABLE_PATTERN =\n /[\\\\/]runtime[\\\\/]daemon[\\\\/]bundles[\\\\/]([0-9A-Za-z._-]+)[\\\\/]/gu;\n\nexport const INDEPENDENT_MAINTENANCE_REGISTRATION =\n \"openmeld-independent-maintenance-v1\";\n\n// Maintenance may call normal Service commands, but it is never the main\n// Service process. Also normalize registrations written by older versions.\nexport function configureDaemonMaintenanceEnvironment(\n env: NodeJS.ProcessEnv\n): void {\n for (const key of [\n DAEMON_SERVICE_RUNTIME_AUTO_START_ENV,\n DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV,\n DAEMON_SERVICE_RUNTIME_DETACHED_ENV,\n DAEMON_SERVICE_RUNTIME_MODE_ENV,\n DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV,\n ]) {\n delete env[key];\n }\n env.OPENMELD_INTERNAL_MAINTENANCE_WORKER = \"1\";\n}\nconst NPM_ENTRY_IMPORT_PATTERN = /^await import\\((\".*\")\\);$/mu;\n\nexport function daemonServiceUpdateWorkerNpmEntryPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-update-worker.mjs\");\n}\n\nexport async function hasIndependentMaintenanceRegistration(\n pathInput: OpenMeldPathResolutionInput = {},\n platform: NodeJS.Platform = process.platform,\n expectedDefinition?: string\n): Promise<boolean> {\n if (platform === \"win32\") {\n const { runWindowsUserTask, readWindowsTaskAction } = await import(\n \"../local-service/lifecycle/windows-user-task\"\n );\n const task = await runWindowsUserTask({\n name: resolveDaemonServiceUpdateWorkerIdentity(pathInput)\n .windowsServiceName,\n legacyScript:\n resolveDaemonServiceUpdateWorkerWindowsScriptPath(pathInput),\n operation: \"status\",\n });\n return Boolean(\n task.installed &&\n !task.legacy &&\n task.actionArguments &&\n (expectedDefinition === undefined ||\n task.actionArguments === expectedDefinition) &&\n resolveOpenMeldRootDir({\n env: readWindowsTaskAction(task.actionArguments).env,\n }) === resolveOpenMeldRootDir(pathInput)\n );\n }\n const registration = await readDaemonServiceUpdateWorkerRegistration(\n pathInput,\n platform\n );\n if (!registration?.includes(INDEPENDENT_MAINTENANCE_REGISTRATION)) {\n return false;\n }\n if (expectedDefinition !== undefined && registration !== expectedDefinition) {\n return false;\n }\n const { parseDaemonServiceEnvironmentFromDefinition } = await import(\n \"../local-service/lifecycle/daemon-service-manager\"\n );\n const env = parseDaemonServiceEnvironmentFromDefinition({\n controller: platform === \"darwin\" ? \"launchd\" : \"systemd\",\n definition: registration,\n });\n return resolveOpenMeldRootDir({ env }) === resolveOpenMeldRootDir(pathInput);\n}\n\nexport type DaemonServiceUpdateWorkerIdentity = {\n launchdLabel: string;\n serviceName: string;\n windowsDisplayName: string;\n windowsServiceName: string;\n};\n\nexport function resolveDaemonServiceUpdateWorkerIdentity(\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonServiceUpdateWorkerIdentity {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n const scope = resolveOpenMeldServiceScope(pathInput);\n const suffix =\n (preset === \"prod\" ? \"\" : `-${preset}`) + (scope ? `-${scope}` : \"\");\n const dotSuffix =\n (preset === \"prod\" ? \"\" : `.${preset}`) + (scope ? `.${scope}` : \"\");\n return {\n launchdLabel: `com.openmeld.openmeld-service-update${dotSuffix}`,\n serviceName: `openmeld-service-update${suffix}`,\n windowsDisplayName: `OpenMeld Service Update${\n preset === \"prod\" ? \"\" : ` (${preset})`\n }`,\n windowsServiceName: `OpenMeld-Service-Update${suffix}`,\n };\n}\n\nexport function resolveDaemonServiceUpdateWorkerLaunchdPlistPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \"Library\",\n \"LaunchAgents\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).launchdLabel}.plist`\n );\n}\n\nexport function resolveDaemonServiceUpdateWorkerSystemdUnitPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \".config\",\n \"systemd\",\n \"user\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).serviceName}.service`\n );\n}\n\nexport function resolveDaemonServiceUpdateWorkerSystemdPathUnitPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \".config\",\n \"systemd\",\n \"user\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).serviceName}.path`\n );\n}\n\nexport function resolveDaemonServiceUpdateWorkerWindowsScriptPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-update-worker.bat\");\n}\n\nexport function resolveDaemonServiceUpdateWorkerSystemdTimerUnitPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n pathInput.homeDir ?? homedir(),\n \".config\",\n \"systemd\",\n \"user\",\n `${resolveDaemonServiceUpdateWorkerIdentity(pathInput).serviceName}.timer`\n );\n}\n\nexport async function readDaemonServiceUpdateWorkerProtectedManagedVersions(\n pathInput: OpenMeldPathResolutionInput = {},\n platform: NodeJS.Platform = process.platform\n): Promise<Set<string>> {\n const contents = await readDaemonServiceUpdateWorkerRegistration(\n pathInput,\n platform\n );\n return contents === null\n ? new Set()\n : readManagedVersionsFromUpdateWorkerRegistration(contents);\n}\n\nexport async function readDaemonServiceUpdateWorkerProtectedBundleIds(\n pathInput: OpenMeldPathResolutionInput = {},\n platform: NodeJS.Platform = process.platform\n): Promise<Set<string>> {\n const contents = await readDaemonServiceUpdateWorkerRegistration(\n pathInput,\n platform\n );\n const protectedIds =\n contents === null\n ? new Set<string>()\n : readBundleIdsFromUpdateWorkerRegistration(contents);\n const launcherPath = daemonServiceUpdateWorkerNpmEntryPath(pathInput);\n const launcher = await readFile(launcherPath, \"utf8\").catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (launcher !== null) {\n const importLine = launcher.trim().match(NPM_ENTRY_IMPORT_PATTERN);\n if (!importLine?.[1]) {\n throw new Error(\n \"OpenMeld maintenance launcher is invalid; bundle cleanup was stopped.\"\n );\n }\n const entryPath = fileURLToPath(JSON.parse(importLine[1]) as string);\n for (const id of readBundleIdsFromUpdateWorkerRegistration(entryPath)) {\n protectedIds.add(id);\n }\n }\n return protectedIds;\n}\n\nexport function readManagedVersionsFromUpdateWorkerRegistration(\n contents: string\n): Set<string> {\n const versions = new Set<string>();\n for (const match of contents.matchAll(\n MANAGED_VERSION_FROM_EXECUTABLE_PATTERN\n )) {\n const version = match[1];\n if (version) {\n versions.add(version);\n }\n }\n return versions;\n}\n\nexport function readBundleIdsFromUpdateWorkerRegistration(\n contents: string\n): Set<string> {\n const bundleIds = new Set<string>();\n for (const match of contents.matchAll(\n SELF_CONTAINED_BUNDLE_FROM_EXECUTABLE_PATTERN\n )) {\n const bundleId = match[1];\n if (bundleId) {\n bundleIds.add(bundleId);\n }\n }\n return bundleIds;\n}\n\nexport function resolveDaemonServiceUpdateWorkerRegistrationPath(\n pathInput: OpenMeldPathResolutionInput,\n platform: NodeJS.Platform\n): string | null {\n if (platform === \"darwin\") {\n return resolveDaemonServiceUpdateWorkerLaunchdPlistPath(pathInput);\n }\n if (platform === \"linux\") {\n return resolveDaemonServiceUpdateWorkerSystemdUnitPath(pathInput);\n }\n if (platform === \"win32\") {\n return resolveDaemonServiceUpdateWorkerWindowsScriptPath(pathInput);\n }\n return null;\n}\n\nasync function readDaemonServiceUpdateWorkerRegistration(\n pathInput: OpenMeldPathResolutionInput,\n platform: NodeJS.Platform\n): Promise<string | null> {\n if (platform === \"win32\") {\n const { runWindowsUserTask, readWindowsTaskAction } = await import(\n \"../local-service/lifecycle/windows-user-task\"\n );\n const task = await runWindowsUserTask({\n name: resolveDaemonServiceUpdateWorkerIdentity(pathInput)\n .windowsServiceName,\n legacyScript:\n resolveDaemonServiceUpdateWorkerWindowsScriptPath(pathInput),\n operation: \"status\",\n });\n if (task.actionArguments) {\n const action = readWindowsTaskAction(task.actionArguments);\n return [action.executable, ...action.args].join(\"\\n\");\n }\n if (!task.legacy) {\n return null;\n }\n }\n const registrationPath = resolveDaemonServiceUpdateWorkerRegistrationPath(\n pathInput,\n platform\n );\n if (registrationPath === null) {\n return null;\n }\n return await readFile(registrationPath, \"utf8\").catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n}\n\nfunction getErrorCode(error: unknown): string | null {\n return error && typeof error === \"object\" && \"code\" in error\n ? String(error.code)\n : null;\n}\n","import {\n cliBinaryServiceReleaseSchema,\n resolveCliBinaryPlatform,\n} from \"@openmeld/schemas\";\nimport packageJson from \"../../package.json\";\nimport { isBinaryDistribution } from \"../runtime/distribution\";\nimport type { CliBinaryReleaseInfo } from \"./version-state\";\n\ndeclare const __OPENMELD_SERVICE_RELEASE__: unknown;\n\n// The release embeds its selected Service artifact so setup and repair use the\n// same target offline, without a second mutable version cache. Legacy releases\n// continue to use their own CLI binary as the Service carrier.\nexport function resolveBundledServiceRelease():\n | CliBinaryReleaseInfo\n | undefined {\n if (!isBinaryDistribution()) {\n return undefined;\n }\n const metadata = packageJson as { openmeld?: { service?: unknown } };\n const selection =\n typeof __OPENMELD_SERVICE_RELEASE__ === \"undefined\"\n ? metadata.openmeld?.service\n : __OPENMELD_SERVICE_RELEASE__;\n if (selection === undefined) {\n return undefined;\n }\n const parsed = cliBinaryServiceReleaseSchema.safeParse(selection);\n if (!parsed.success) {\n throw new Error(\n \"The installed CLI contains invalid Service release metadata.\"\n );\n }\n const platform = resolveCliBinaryPlatform(process.platform, process.arch);\n const artifact = parsed.data.platforms[platform];\n if (!artifact) {\n throw new Error(\n `The installed CLI has no Service artifact for ${platform}.`\n );\n }\n return {\n ...artifact,\n version: parsed.data.version,\n platform,\n minRequiredCliVersion: null,\n };\n}\n","import { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport {\n daemonServiceUpdateJobSchema,\n OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA,\n storedDaemonServiceUpdateJobSchema,\n} from \"@openmeld/schemas\";\nimport type {\n OpenMeldToolsUpdateOperation,\n DaemonServiceUpdateJob as SharedDaemonServiceUpdateJob,\n} from \"@openmeld/schemas/types\";\nimport { daemonRuntimeStateRootPath } from \"../../config/daemon-state\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\n\nconst TERMINAL_UPDATE_VISIBILITY_MS = 24 * 60 * 60 * 1000;\nconst UPDATE_TARGETS_FILE = \"service-update-targets.json\";\n\ntype DaemonServiceUpdateTargets = {\n jobId: string;\n targetCliVersion?: string;\n targetServiceVersion?: string;\n};\n\nexport const DAEMON_SERVICE_UPDATE_JOB_SCHEMA =\n OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA;\nexport type DaemonServiceUpdateJob = SharedDaemonServiceUpdateJob;\n\nexport function daemonServicePendingUpdatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeStateRootPath(pathInput), \"service-update.json\");\n}\n\nexport function daemonServiceLastUpdatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeStateRootPath(pathInput),\n \"service-update-last.json\"\n );\n}\n\nexport async function readPendingDaemonServiceUpdate(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceUpdateJob | null> {\n return await readDaemonServiceUpdateJob(\n daemonServicePendingUpdatePath(pathInput)\n );\n}\n\nexport async function readLastDaemonServiceUpdate(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceUpdateJob | null> {\n return await readDaemonServiceUpdateJob(\n daemonServiceLastUpdatePath(pathInput)\n );\n}\n\nexport async function persistPendingDaemonServiceUpdate(\n job: DaemonServiceUpdateJob,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await writeUpdateJobAtomically({\n job,\n path: daemonServicePendingUpdatePath(pathInput),\n });\n}\n\nexport async function completePendingDaemonServiceUpdate(\n job: DaemonServiceUpdateJob,\n pathInput: OpenMeldPathResolutionInput = {},\n retainPending = false\n): Promise<void> {\n await writeUpdateJobAtomically({\n job,\n path: daemonServiceLastUpdatePath(pathInput),\n });\n if (retainPending) {\n // Keep the existing OS trigger until Prepare and its auth handoff finish.\n // The update itself is terminal; this does not schedule another update.\n await persistPendingDaemonServiceUpdate(job, pathInput);\n return;\n }\n await rm(daemonServicePendingUpdatePath(pathInput), { force: true });\n}\n\nexport async function resolveDaemonServiceUpdateOperation(\n pathInput: OpenMeldPathResolutionInput = {},\n nowMs = Date.now()\n): Promise<OpenMeldToolsUpdateOperation | null> {\n const pending = await readPendingDaemonServiceUpdate(pathInput);\n if (pending) {\n return projectUpdateOperation(pending);\n }\n const last = await readLastDaemonServiceUpdate(pathInput);\n if (!(last && isRecentTerminalUpdate(last, nowMs))) {\n return null;\n }\n return projectUpdateOperation(last);\n}\n\nfunction isRecentTerminalUpdate(\n job: DaemonServiceUpdateJob,\n nowMs: number\n): boolean {\n if (\n job.phase !== \"updated\" &&\n job.phase !== \"restored\" &&\n job.phase !== \"needs_help\"\n ) {\n return false;\n }\n const updatedAtMs = Date.parse(job.updatedAt);\n return (\n Number.isFinite(updatedAtMs) &&\n nowMs >= updatedAtMs &&\n nowMs - updatedAtMs <= TERMINAL_UPDATE_VISIBILITY_MS\n );\n}\n\nfunction projectUpdateOperation(\n job: DaemonServiceUpdateJob\n): OpenMeldToolsUpdateOperation {\n return {\n operationId: job.jobId,\n phase: job.phase,\n requestSource: job.requestSource,\n requestedAt: job.requestedAt,\n ...(job.targetCliVersion ? { targetCliVersion: job.targetCliVersion } : {}),\n ...(job.targetServiceVersion\n ? { targetServiceVersion: job.targetServiceVersion }\n : {}),\n targetVersion: job.targetVersion,\n updatedAt: job.updatedAt,\n urgency: job.urgency,\n };\n}\n\nasync function readDaemonServiceUpdateJob(\n path: string\n): Promise<DaemonServiceUpdateJob | null> {\n const raw = await readFile(path, \"utf8\").catch(\n (error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n );\n if (raw === null) {\n return null;\n }\n const parsed = storedDaemonServiceUpdateJobSchema.safeParse(\n JSON.parse(raw) as unknown\n );\n if (!parsed.success) {\n throw new Error(\"OpenMeld Service update state is invalid.\");\n }\n let job: DaemonServiceUpdateJob;\n if (parsed.data.v === 2) {\n job = parsed.data;\n } else {\n const { status, ...legacyJob } = parsed.data;\n job = daemonServiceUpdateJobSchema.parse({\n ...legacyJob,\n v: 2,\n schema: DAEMON_SERVICE_UPDATE_JOB_SCHEMA,\n phase: migrateLegacyPhase(status),\n requestSource: \"cli\",\n });\n }\n const targets = await readDaemonServiceUpdateTargets(dirname(path));\n if (targets?.jobId !== job.jobId) {\n return job;\n }\n return daemonServiceUpdateJobSchema.parse({ ...job, ...targets });\n}\n\nfunction migrateLegacyPhase(\n status: \"scheduled\" | \"running\" | \"completed\" | \"failed\"\n): DaemonServiceUpdateJob[\"phase\"] {\n switch (status) {\n case \"scheduled\":\n return \"waiting_for_work\";\n case \"running\":\n return \"updating\";\n case \"completed\":\n return \"updated\";\n case \"failed\":\n return \"needs_help\";\n default: {\n const exhaustive: never = status;\n return exhaustive;\n }\n }\n}\n\nasync function writeUpdateJobAtomically(input: {\n job: DaemonServiceUpdateJob;\n path: string;\n}): Promise<void> {\n const { targetCliVersion, targetServiceVersion, ...compatibleJob } =\n input.job;\n await writeDaemonServiceUpdateTargets(dirname(input.path), {\n jobId: input.job.jobId,\n ...(targetCliVersion ? { targetCliVersion } : {}),\n ...(targetServiceVersion ? { targetServiceVersion } : {}),\n });\n const temporaryPath = `${input.path}.${String(process.pid)}.tmp`;\n await mkdir(dirname(input.path), { recursive: true });\n await writeFile(\n temporaryPath,\n `${JSON.stringify(compatibleJob, null, 2)}\\n`,\n { encoding: \"utf8\", mode: 0o600 }\n );\n await rename(temporaryPath, input.path);\n}\n\nasync function readDaemonServiceUpdateTargets(\n stateRoot: string\n): Promise<DaemonServiceUpdateTargets | null> {\n const raw = await readFile(\n join(stateRoot, UPDATE_TARGETS_FILE),\n \"utf8\"\n ).catch((error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return null;\n }\n const value = JSON.parse(raw) as Record<string, unknown>;\n const jobId = normalizeTarget(value.jobId);\n const targetCliVersion = normalizeTarget(value.targetCliVersion);\n const targetServiceVersion = normalizeTarget(value.targetServiceVersion);\n if (!jobId) {\n return null;\n }\n return {\n jobId,\n ...(targetCliVersion ? { targetCliVersion } : {}),\n ...(targetServiceVersion ? { targetServiceVersion } : {}),\n };\n}\n\nasync function writeDaemonServiceUpdateTargets(\n stateRoot: string,\n targets: DaemonServiceUpdateTargets\n): Promise<void> {\n const path = join(stateRoot, UPDATE_TARGETS_FILE);\n const temporaryPath = `${path}.${String(process.pid)}.tmp`;\n await mkdir(stateRoot, { recursive: true });\n await writeFile(temporaryPath, `${JSON.stringify(targets, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await rename(temporaryPath, path);\n}\n\nfunction normalizeTarget(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n","import { constants as fsConstants } from \"node:fs\";\nimport { access, readdir, rm, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pruneWindowsBinaryBundle } from \"@openmeld/adapter-core/windows-system\";\nimport {\n type OpenMeldPathResolutionInput,\n openMeldManagedBinaryName,\n openMeldVersionsDir,\n} from \"../config/paths\";\nimport { compareSemver } from \"../config/version-state\";\n\nconst MANAGED_VERSION_DIRECTORY_PATTERN =\n /^v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/;\n\nexport async function pruneManagedVersions(input: {\n currentVersion: string;\n pathInput?: OpenMeldPathResolutionInput;\n preferredRollbackVersion?: string | null;\n protectedVersions?: Iterable<string>;\n}): Promise<void> {\n const versionsDir = openMeldVersionsDir(input.pathInput);\n const entries = await readdir(versionsDir, { withFileTypes: true });\n const managedVersions = entries\n .filter(\n (entry) =>\n entry.isDirectory() &&\n MANAGED_VERSION_DIRECTORY_PATTERN.test(entry.name)\n )\n .map((entry) => entry.name);\n const usableManagedVersions = new Set(\n (\n await Promise.all(\n managedVersions.map(async (version) => ({\n usable: await isUsableManagedVersion(version, versionsDir),\n version,\n }))\n )\n )\n .filter((entry) => entry.usable)\n .map((entry) => entry.version)\n );\n const retainedVersions = new Set([input.currentVersion]);\n let rollbackVersion: string | null = null;\n\n if (\n input.preferredRollbackVersion &&\n input.preferredRollbackVersion !== input.currentVersion &&\n usableManagedVersions.has(input.preferredRollbackVersion)\n ) {\n rollbackVersion = input.preferredRollbackVersion;\n }\n\n rollbackVersion ??=\n [...usableManagedVersions]\n .filter((version) => compareSemver(version, input.currentVersion) < 0)\n .sort((left, right) => compareSemver(right, left))[0] ?? null;\n\n if (rollbackVersion) {\n retainedVersions.add(rollbackVersion);\n }\n\n // A legacy worker can still point at a versioned binary until its service\n // registration is rewritten to the stable carrier. Protect that executable\n // independently from the last-known-good rollback selection; the worker\n // manager prunes again after the stable registration is active.\n for (const protectedVersion of input.protectedVersions ?? []) {\n if (usableManagedVersions.has(protectedVersion)) {\n retainedVersions.add(protectedVersion);\n }\n }\n\n for (const version of managedVersions) {\n if (retainedVersions.has(version)) {\n continue;\n }\n if (process.platform === \"win32\") {\n await pruneWindowsBinaryBundle(path.join(versionsDir, version));\n } else {\n await rm(path.join(versionsDir, version), { recursive: true });\n }\n }\n}\n\nasync function isUsableManagedVersion(\n version: string,\n versionsDir: string\n): Promise<boolean> {\n const target = path.join(versionsDir, version, openMeldManagedBinaryName());\n const stats = await stat(target).catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (!stats?.isFile()) {\n return false;\n }\n return await access(target, fsConstants.X_OK).then(\n () => true,\n (error) => {\n if (\n getErrorCode(error) === \"EACCES\" ||\n getErrorCode(error) === \"ENOENT\"\n ) {\n return false;\n }\n throw error;\n }\n );\n}\n\nfunction getErrorCode(error: unknown): string | null {\n return error && typeof error === \"object\" && \"code\" in error\n ? String(error.code)\n : null;\n}\n","import { constants as fsConstants } from \"node:fs\";\nimport {\n access,\n chmod,\n copyFile,\n lstat,\n mkdir,\n readlink,\n rename,\n rm,\n stat,\n symlink,\n} from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { allowUnsignedWindowsInternalPreview } from \"@openmeld/local-service/cli-binary-update-artifact\";\nimport {\n cliInstallSelfResultSchema,\n resolveCliBinaryPlatform,\n} from \"@openmeld/schemas\";\nimport { readDaemonServiceUpdateWorkerProtectedManagedVersions } from \"../config/daemon-service-update-worker-registration\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../config/lock\";\nimport {\n type OpenMeldPathResolutionInput,\n openMeldBinDir,\n openMeldManagedBinaryPath,\n openMeldManagedVersionBinaryPath,\n openMeldManagedVersionDir,\n resolveOpenMeldRootDir,\n} from \"../config/paths\";\nimport { assertNoPublishedProductionMutationDuringTests } from \"../config/published-production-safety\";\nimport { compareSemver } from \"../config/version-state\";\nimport { readDaemonActiveBundleState } from \"../local-service/lifecycle/daemon-service-bundle\";\nimport { readPendingDaemonServiceUpdate } from \"../local-service/lifecycle/daemon-service-update-state\";\nimport { OPENMELD_VERSION } from \"../runtime/version\";\nimport { pruneManagedVersions } from \"./managed-version-pruning\";\nimport {\n activateWindowsManagedCli,\n placeWindowsManagedVersion,\n readWindowsManagedCliVersion,\n reconcileWindowsManagedLauncher,\n} from \"./windows-managed-install\";\n\nexport type CliInstallSelfResult =\n | \"installed\"\n | \"noop_same_version\"\n | \"noop_newer_present\";\n\nconst MANAGED_INSTALL_LOCK_PROFILE = \"managed-cli\";\nconst MANAGED_INSTALL_LOCK_KEY = \"install\";\nconst MANAGED_INSTALL_LOCK_RETRY_DELAY_MS = 100;\nconst MANAGED_INSTALL_LOCK_TIMEOUT_MS = 30_000;\n\n/**\n * Result of installing this binary into the managed layout. This is the shape\n * `openmeld install-self --json` emits and the seam Desktop consumes, so it is\n * treated as a frozen contract (covered by shape tests).\n */\nexport type CliInstallSelfOutcome = {\n result: CliInstallSelfResult;\n version: string;\n platform: string;\n // Absolute path of the versioned binary: <root>/versions/<version>/openmeld.\n managedBinaryPath: string;\n // Absolute path of the current-version pointer: <root>/bin/openmeld.\n currentPointerPath: string;\n // Version the current pointer resolved to before this run, if any.\n previousVersion: string | null;\n forced: boolean;\n};\n\nexport function resolveCliPlatformToken(): string {\n return resolveCliBinaryPlatform(process.platform, process.arch);\n}\n\nexport function resolveCliSelfVersion(): string {\n return OPENMELD_VERSION;\n}\n\nasync function isUsableManagedBinary(target: string): Promise<boolean> {\n const stats = await stat(target).catch((error) => {\n if (isErrorWithCode(error, \"ENOENT\")) {\n return null;\n }\n throw error;\n });\n if (!stats?.isFile()) {\n return false;\n }\n return await access(target, fsConstants.X_OK).then(\n () => true,\n (error) => {\n if (\n isErrorWithCode(error, \"EACCES\") ||\n isErrorWithCode(error, \"ENOENT\")\n ) {\n return false;\n }\n throw error;\n }\n );\n}\n\n// The version the current pointer resolves to, read from its symlink target's\n// versions/<version>/ segment. Returns null when there is no pointer yet or it\n// does not resolve into the managed layout.\nasync function readCurrentPointerVersion(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n if (process.platform === \"win32\") {\n return await readWindowsManagedCliVersion(\n resolveOpenMeldRootDir(pathInput)\n );\n }\n const pointerPath = openMeldManagedBinaryPath(pathInput);\n const target = await readlink(pointerPath).catch((error) => {\n if (isErrorWithCode(error, \"ENOENT\") || isErrorWithCode(error, \"EINVAL\")) {\n return null;\n }\n throw error;\n });\n if (!target) {\n return null;\n }\n const resolved = path.isAbsolute(target)\n ? target\n : path.resolve(path.dirname(pointerPath), target);\n const version = path.basename(path.dirname(resolved));\n return version.length > 0 &&\n path.resolve(resolved) ===\n openMeldManagedVersionBinaryPath(version, pathInput)\n ? version\n : null;\n}\n\nexport async function readManagedCliInstallation(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<{\n version: string;\n binaryPath: string;\n} | null> {\n const version = await readCurrentPointerVersion(pathInput);\n if (!version) {\n return null;\n }\n const binaryPath = openMeldManagedVersionBinaryPath(version, pathInput);\n if (!(await isUsableManagedBinary(binaryPath))) {\n return null;\n }\n return { version, binaryPath };\n}\n\nexport async function reconcileManagedCliLauncher(): Promise<void> {\n if (process.platform !== \"win32\") {\n return;\n }\n await withManagedInstallTransaction(async () => {\n const version = await readCurrentPointerVersion();\n if (version) {\n await reconcileWindowsManagedLauncher(resolveOpenMeldRootDir(), version);\n }\n });\n}\n\n/**\n * Install the currently-running binary (process.execPath) into the managed\n * layout and point bin/openmeld at it. Idempotent with semver arbitration:\n * a same-or-newer pointer is left in place (install only goes up), unless\n * `force` is set. Both the versioned binary and the pointer are swapped in\n * atomically via a temp name + rename.\n */\nexport async function performManagedInstall(input?: {\n force?: boolean;\n // Defaults to process.execPath (this running binary); injectable for tests.\n sourceBinaryPath?: string;\n}): Promise<CliInstallSelfOutcome> {\n return await withManagedInstallTransaction(async () =>\n performManagedInstallLocked(input)\n );\n}\n\nexport async function withManagedInstallTransaction<T>(\n run: () => Promise<T>,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<T> {\n const startedAtMs = Date.now();\n\n for (;;) {\n try {\n const lock = await acquireLock({\n openMeldProfileId: MANAGED_INSTALL_LOCK_PROFILE,\n key: MANAGED_INSTALL_LOCK_KEY,\n meta: { component: \"managed_cli.install\" },\n pathResolution: pathInput,\n });\n return await runWithHeldLock({\n lock,\n run,\n releaseContext: {\n component: \"managed_cli.install\",\n lockKey: MANAGED_INSTALL_LOCK_KEY,\n openMeldProfileId: MANAGED_INSTALL_LOCK_PROFILE,\n },\n });\n } catch (error) {\n if (\n !isOpenMeldLockError(error) ||\n isOpenMeldOrphanedLockError(error) ||\n Date.now() - startedAtMs >= MANAGED_INSTALL_LOCK_TIMEOUT_MS\n ) {\n throw error;\n }\n await delay(MANAGED_INSTALL_LOCK_RETRY_DELAY_MS);\n }\n }\n}\n\n/**\n * Prune managed CLI versions only while holding the install transaction lock.\n * The current pointer and every durable Service update target are re-read in\n * the lock, so cleanup cannot race an install or use a stale pending snapshot.\n */\nexport async function pruneManagedInstallVersions(input: {\n pathInput: OpenMeldPathResolutionInput;\n preferredRollbackVersion?: string | null;\n}): Promise<void> {\n const pathInput = input.pathInput;\n assertNoPublishedProductionMutationDuringTests(\n pathInput,\n \"managed CLI versions\"\n );\n await withManagedInstallTransaction(async () => {\n const currentVersion = await readCurrentPointerVersion(pathInput);\n if (currentVersion === null) {\n return;\n }\n const protectedVersions =\n await readManagedInstallProtectedVersions(pathInput);\n await pruneManagedVersions({\n currentVersion,\n pathInput,\n preferredRollbackVersion: input.preferredRollbackVersion,\n protectedVersions,\n });\n }, pathInput);\n}\n\nasync function performManagedInstallLocked(input?: {\n force?: boolean;\n sourceBinaryPath?: string;\n}): Promise<CliInstallSelfOutcome> {\n assertNoPublishedProductionMutationDuringTests(\n {},\n \"managed CLI installation\"\n );\n const force = input?.force ?? false;\n const version = resolveCliSelfVersion();\n const platform = resolveCliPlatformToken();\n const currentPointerPath = openMeldManagedBinaryPath();\n const managedBinaryPath = openMeldManagedVersionBinaryPath(version);\n const previousVersion = await readCurrentPointerVersion();\n const protectedVersions = await readManagedInstallProtectedVersions();\n\n const baseOutcome = {\n version,\n platform,\n managedBinaryPath,\n currentPointerPath,\n previousVersion,\n forced: force,\n };\n\n if (previousVersion !== null) {\n const comparison = compareSemver(version, previousVersion);\n if (\n !force &&\n comparison === 0 &&\n (await isUsableManagedBinary(managedBinaryPath))\n ) {\n if (process.platform === \"win32\") {\n await reconcileWindowsManagedLauncher(\n resolveOpenMeldRootDir(),\n previousVersion\n );\n }\n await pruneManagedVersions({\n currentVersion: previousVersion,\n protectedVersions,\n });\n return { ...baseOutcome, result: \"noop_same_version\" };\n }\n if (comparison < 0 && !force) {\n if (process.platform === \"win32\") {\n await reconcileWindowsManagedLauncher(\n resolveOpenMeldRootDir(),\n previousVersion\n );\n }\n if (!(await isUsableManagedBinary(managedBinaryPath))) {\n await placeVersionedBinary(\n input?.sourceBinaryPath ?? process.execPath,\n version,\n managedBinaryPath\n );\n }\n await pruneManagedVersions({\n currentVersion: previousVersion,\n preferredRollbackVersion: version,\n protectedVersions,\n });\n return { ...baseOutcome, result: \"noop_newer_present\" };\n }\n }\n\n await placeVersionedBinary(\n input?.sourceBinaryPath ?? process.execPath,\n version,\n managedBinaryPath\n );\n await pruneManagedVersions({\n currentVersion: version,\n preferredRollbackVersion: previousVersion,\n protectedVersions,\n });\n await swapCurrentPointer(currentPointerPath, managedBinaryPath);\n\n return { ...baseOutcome, result: \"installed\" };\n}\n\nasync function readManagedInstallProtectedVersions(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<Set<string>> {\n const [protectedVersions, pendingServiceUpdate, activeBundle] =\n await Promise.all([\n readDaemonServiceUpdateWorkerProtectedManagedVersions(pathInput),\n readPendingDaemonServiceUpdate(pathInput),\n readDaemonActiveBundleState(pathInput),\n ]);\n // CLI releases may advance while this Service remains active. Its immutable\n // executable is still a recovery and task-tool dependency, not CLI rollback.\n if (activeBundle?.bundleFormat === \"binary_v1\") {\n protectedVersions.add(activeBundle.daemonVersion);\n }\n if (pendingServiceUpdate?.preparedBundle.bundleFormat === \"binary_v1\") {\n protectedVersions.add(pendingServiceUpdate.preparedBundle.daemonVersion);\n }\n return protectedVersions;\n}\n\nasync function placeVersionedBinary(\n sourceBinary: string,\n version: string,\n managedBinaryPath: string\n): Promise<void> {\n if (process.platform === \"win32\") {\n await placeWindowsManagedVersion({\n root: resolveOpenMeldRootDir(),\n version,\n sourceBinary,\n });\n return;\n }\n await mkdir(openMeldManagedVersionDir(version), { recursive: true });\n const tmpPath = `${managedBinaryPath}.tmp-${process.pid}-${Date.now()}`;\n await rm(tmpPath, { force: true }).catch(() => undefined);\n await copyFile(sourceBinary, tmpPath);\n await chmod(tmpPath, 0o755);\n const existingTarget = await lstat(managedBinaryPath).catch((error) => {\n if (isErrorWithCode(error, \"ENOENT\")) {\n return null;\n }\n throw error;\n });\n if (existingTarget?.isDirectory()) {\n await rm(managedBinaryPath, { recursive: true });\n }\n await rename(tmpPath, managedBinaryPath);\n}\n\nasync function swapCurrentPointer(\n currentPointerPath: string,\n managedBinaryPath: string\n): Promise<void> {\n if (process.platform === \"win32\") {\n await activateWindowsManagedCli(\n resolveOpenMeldRootDir(),\n path.basename(path.dirname(managedBinaryPath)),\n allowUnsignedWindowsInternalPreview() ? \"windows-preview\" : undefined\n );\n return;\n }\n await mkdir(openMeldBinDir(), { recursive: true });\n const relativeTarget = path.relative(\n path.dirname(currentPointerPath),\n managedBinaryPath\n );\n const tmpPath = `${currentPointerPath}.tmp-${process.pid}-${Date.now()}`;\n await rm(tmpPath, { force: true }).catch(() => undefined);\n await symlink(relativeTarget, tmpPath);\n await rename(tmpPath, currentPointerPath);\n}\n\nexport function buildInstallSelfJsonPayload(outcome: CliInstallSelfOutcome) {\n return cliInstallSelfResultSchema.parse({\n schemaVersion: 1 as const,\n type: \"cli.install_self\" as const,\n result: outcome.result,\n version: outcome.version,\n platform: outcome.platform,\n managedBinaryPath: outcome.managedBinaryPath,\n currentPointerPath: outcome.currentPointerPath,\n previousVersion: outcome.previousVersion,\n forced: outcome.forced,\n });\n}\n\nfunction isErrorWithCode(error: unknown, code: string): boolean {\n return (\n error instanceof Error &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === code\n );\n}\n","import { isAbsolute } from \"node:path\";\nimport type { PrepareStepDiagnosticsBundle } from \"@openmeld/schemas/types\";\n\nconst ERROR_CODES = new Set([\n \"EPERM\",\n \"EACCES\",\n \"ENOENT\",\n \"ENOTDIR\",\n \"EISDIR\",\n \"EROFS\",\n \"ENOSPC\",\n \"EBUSY\",\n \"ETXTBSY\",\n \"EEXIST\",\n \"EIO\",\n \"EMFILE\",\n \"ENFILE\",\n \"EINVAL\",\n \"ENAMETOOLONG\",\n]);\nconst SYSCALLS = new Set([\n \"access\",\n \"open\",\n \"read\",\n \"write\",\n \"chmod\",\n \"chown\",\n \"copyfile\",\n \"rename\",\n \"unlink\",\n \"rmdir\",\n \"mkdir\",\n \"stat\",\n \"lstat\",\n \"realpath\",\n \"spawn\",\n]);\nconst APP_BUNDLE_PATH_PATTERN = /(?:^|[/\\\\])[^/\\\\]+\\.app(?:[/\\\\]|$)/iu;\n\n// Categories are safe to upload. Exact paths remain in local errors/journals.\nexport function classifyDiagnosticPath(\n value: unknown\n): \"app_bundle\" | \"absolute_other\" | \"relative\" | \"unknown\" {\n if (typeof value !== \"string\" || !value) {\n return \"unknown\";\n }\n if (APP_BUNDLE_PATH_PATTERN.test(value)) {\n return \"app_bundle\";\n }\n return isAbsolute(value) ? \"absolute_other\" : \"relative\";\n}\n\n// Do not copy message, path, spawnargs, environment, or arbitrary error fields.\n// EPERM/EACCES identify an operation failure, never an inferred TCC verdict.\nexport function collectLocalOperationFailure(\n error: unknown\n): PrepareStepDiagnosticsBundle[\"operationFailure\"] {\n let current = error;\n for (let depth = 0; depth < 4 && current instanceof Error; depth += 1) {\n const native = current as NodeJS.ErrnoException & { dest?: unknown };\n if (native.code && ERROR_CODES.has(native.code)) {\n return {\n code: native.code,\n ...(Number.isSafeInteger(native.errno) ? { errno: native.errno } : {}),\n ...(native.syscall && SYSCALLS.has(native.syscall)\n ? { syscall: native.syscall }\n : {}),\n pathCategory: classifyDiagnosticPath(native.path),\n ...(native.dest === undefined\n ? {}\n : {\n destinationCategory: classifyDiagnosticPath(native.dest),\n }),\n };\n }\n current = current.cause;\n }\n return undefined;\n}\n","import type { DaemonServiceContract } from \"@openmeld/schemas/types\";\nimport type { DaemonStatus } from \"../../config/daemon-state\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport {\n type DaemonActiveBundleState,\n isDaemonBundleSourceAllowedForLane,\n} from \"./daemon-service-bundle\";\n\nexport type DaemonServiceArtifactDriftReasonCode =\n | \"bundle_missing\"\n | \"bundle_content_drift\"\n | \"bundle_id_drift\"\n | \"bundle_version_drift\"\n | \"bundle_lane_drift\"\n | \"bundle_strategy_legacy\"\n | \"bundle_provenance_drift\"\n | \"bundle_path_invalid\";\n\nexport type ResolvedDaemonServiceArtifact = {\n expectedVersion: string;\n installVersion: string | null;\n activeBundleVersion: string | null;\n resolvedEntryPath: string | null;\n driftReasonCodes: DaemonServiceArtifactDriftReasonCode[];\n isAligned: boolean;\n};\n\nexport function resolveDaemonServiceArtifact(input: {\n expectedVersion: string;\n installStatus: DaemonStatus;\n serviceContract?: DaemonServiceContract | null;\n activeBundle: DaemonActiveBundleState | null;\n activeBundleSourceAvailable: boolean | null;\n activeBundleEntryPath: string | null;\n installedBundleFingerprint: string | null;\n pathInput?: OpenMeldPathResolutionInput;\n}): ResolvedDaemonServiceArtifact {\n const installVersion = input.installStatus.installed\n ? input.installStatus.state.daemonVersion\n : null;\n const expectedBundleId = input.serviceContract?.bundleId ?? null;\n const expectedDaemonVersion = input.expectedVersion;\n const activeBundleVersion = input.activeBundle?.daemonVersion ?? null;\n const driftReasonCodes = input.activeBundle\n ? collectActiveBundleDriftReasonCodes({\n activeBundle: input.activeBundle,\n activeBundleEntryPath: input.activeBundleEntryPath,\n activeBundleSourceAvailable: input.activeBundleSourceAvailable,\n installedBundleFingerprint: input.installedBundleFingerprint,\n expectedBundleId,\n expectedDaemonVersion,\n pathInput: input.pathInput,\n })\n : ([\"bundle_missing\"] satisfies DaemonServiceArtifactDriftReasonCode[]);\n\n const isAligned = driftReasonCodes.length === 0;\n\n return {\n expectedVersion: input.expectedVersion,\n installVersion,\n activeBundleVersion,\n resolvedEntryPath: isAligned ? input.activeBundleEntryPath : null,\n driftReasonCodes,\n isAligned,\n };\n}\n\nfunction collectActiveBundleDriftReasonCodes(input: {\n activeBundle: DaemonActiveBundleState;\n activeBundleEntryPath: string | null;\n activeBundleSourceAvailable: boolean | null;\n installedBundleFingerprint: string | null;\n expectedBundleId: string | null;\n expectedDaemonVersion: string;\n pathInput?: OpenMeldPathResolutionInput;\n}): DaemonServiceArtifactDriftReasonCode[] {\n const driftReasonCodes: DaemonServiceArtifactDriftReasonCode[] = [];\n\n if (hasBundleVersionDrift(input)) {\n driftReasonCodes.push(\"bundle_version_drift\");\n }\n if (hasBundleIdDrift(input)) {\n driftReasonCodes.push(\"bundle_id_drift\");\n }\n if (\n !isDaemonBundleSourceAllowedForLane({\n sourceKind: input.activeBundle.sourceKind,\n pathInput: input.pathInput,\n })\n ) {\n driftReasonCodes.push(\"bundle_lane_drift\");\n }\n if (input.activeBundle.bundleFormat === \"legacy_linked_v1\") {\n driftReasonCodes.push(\"bundle_strategy_legacy\");\n if (input.activeBundleSourceAvailable === false) {\n driftReasonCodes.push(\"bundle_provenance_drift\");\n }\n } else if (hasBundleContentDrift(input)) {\n driftReasonCodes.push(\"bundle_content_drift\");\n }\n if (!input.activeBundleEntryPath) {\n driftReasonCodes.push(\"bundle_path_invalid\");\n }\n\n return driftReasonCodes;\n}\n\nfunction hasBundleVersionDrift(input: {\n activeBundle: DaemonActiveBundleState;\n expectedDaemonVersion: string;\n}): boolean {\n return input.activeBundle.daemonVersion !== input.expectedDaemonVersion;\n}\n\nfunction hasBundleIdDrift(input: {\n activeBundle: DaemonActiveBundleState;\n expectedBundleId: string | null;\n}): boolean {\n return (\n input.expectedBundleId !== null &&\n input.activeBundle.bundleId !== input.expectedBundleId\n );\n}\n\nfunction hasBundleContentDrift(input: {\n activeBundle: DaemonActiveBundleState;\n installedBundleFingerprint: string | null;\n}): boolean {\n return (\n input.installedBundleFingerprint === null ||\n input.activeBundle.sourceDistFingerprint !==\n input.installedBundleFingerprint\n );\n}\n","import { execFile } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport {\n chmod,\n copyFile,\n cp,\n lstat,\n mkdir,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { basename, dirname, isAbsolute, join, relative, sep } from \"node:path\";\nimport process from \"node:process\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { pruneWindowsBinaryBundle } from \"@openmeld/adapter-core/windows-system\";\nimport {\n allowUnsignedWindowsInternalPreview,\n DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n downloadCliBinaryUpdateArtifact,\n prepareCliBinaryProcessHelper,\n resolveCliBinaryUpdatePlan,\n verifyCliBinaryCodeSignature,\n} from \"@openmeld/local-service/cli-binary-update-artifact\";\nimport { readDaemonRuntimeLease } from \"../../config/daemon-runtime-lease\";\nimport { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { readDaemonServiceUpdateWorkerProtectedBundleIds } from \"../../config/daemon-service-update-worker-registration\";\nimport {\n daemonRuntimeBundlesPath,\n daemonRuntimeRootPath,\n daemonRuntimeServiceManagerPath,\n daemonRuntimeStateRootPath,\n daemonServiceActiveBundleStatePath,\n daemonServiceLegacyExecutableWrapperPath,\n daemonServiceStableBinaryExecutablePath,\n daemonServiceStableExecutableWrapperPath,\n daemonServiceStableLauncherPath,\n daemonServiceUpdateWorkerBinaryExecutablePath,\n daemonStatePath,\n getDaemonStatus,\n daemonServiceExecutableWrapperPaths as resolveDaemonServiceExecutableWrapperPaths,\n daemonServiceRecognizedExecutablePaths as resolveDaemonServiceRecognizedExecutablePaths,\n} from \"../../config/daemon-state\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n} from \"../../config/paths\";\nimport { resolveBundledServiceRelease } from \"../../config/service-release\";\nimport type { CliBinaryReleaseInfo } from \"../../config/version-state\";\nimport {\n performManagedInstall,\n resolveCliSelfVersion,\n} from \"../../local-components/managed-install\";\nimport {\n isBinaryDistribution,\n type OpenMeldDistribution,\n resolveOpenMeldDistribution,\n} from \"../../runtime/distribution\";\nimport {\n classifyDiagnosticPath,\n collectLocalOperationFailure,\n} from \"../../system/local-operation-diagnostics\";\nimport { emitDaemonLifecycleEvent } from \"./daemon-lifecycle-journal\";\nimport { resolveDaemonServiceArtifact } from \"./daemon-service-artifact\";\nimport { readPendingDaemonServiceUpdate } from \"./daemon-service-update-state\";\nimport {\n expectedBinaryServiceFingerprint,\n hashBinaryServiceBundle,\n prepareWindowsMaintenanceBinary,\n verifyWindowsServiceSubsystem,\n windowsMaintenanceBinaryPath,\n} from \"./windows-service-binary\";\n\nconst DAEMON_ACTIVE_BUNDLE_SCHEMA = \"openmeld-daemon-active-bundle-v2\";\nconst DAEMON_ACTIVE_BUNDLE_LEGACY_SCHEMA = \"openmeld-daemon-active-bundle-v1\";\nconst DAEMON_CLI_ENTRY_NAMES = [\"openmeld-dev.js\", \"openmeld.js\"] as const;\nconst WINDOWS_MAINTENANCE_BUNDLE_PATTERN = /^maintenance-[0-9a-f]{64}$/u;\nconst DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE = \"workspace\";\nconst DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL = \"package_install\";\nconst DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE = \"npx_cache\";\nconst DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN = \"unknown\";\n// The npm Service bundle includes JavaScript and its dist/windows process\n// helper. Every platform's npm artifact carries the same prebuilt helper.\n// CLI-only binaries and native secure storage have separate artifact integrity.\nconst DAEMON_SOURCE_DIST_IGNORED_TOP_LEVEL_DIRS = new Set([\"binary\", \"native\"]);\n\nexport type DaemonBundleFormat =\n | \"legacy_linked_v1\"\n | \"self_contained_v1\"\n | \"binary_v1\";\nexport type DaemonBundleSourceKind =\n | typeof DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE\n | typeof DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL\n | typeof DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE\n | typeof DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN;\n\nexport type DaemonActiveBundleState = {\n v: 2;\n schema: typeof DAEMON_ACTIVE_BUNDLE_SCHEMA;\n bundleId: string;\n daemonVersion: string;\n entryScriptRelativePath: string;\n bundleFormat: DaemonBundleFormat;\n sourceEntryScriptPath: string;\n sourcePackageRootPath: string;\n sourceDistRootPath: string;\n sourceDistFingerprint?: string | null;\n sourceKind: DaemonBundleSourceKind;\n createdAt: string;\n updatedAt: string;\n};\n\nexport function daemonServiceActiveBundlePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceActiveBundleStatePath(pathInput);\n}\n\nexport function daemonServiceLauncherPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceStableLauncherPath(pathInput);\n}\n\nexport function daemonServiceExecutableWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceStableExecutableWrapperPath(pathInput);\n}\n\nexport function daemonServiceBinaryExecutablePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceStableBinaryExecutablePath(pathInput);\n}\n\nexport function daemonServiceUpdateWorkerBinaryPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceUpdateWorkerBinaryExecutablePath(pathInput);\n}\n\nexport function daemonServiceExecutableWrapperPaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return resolveDaemonServiceExecutableWrapperPaths(pathInput);\n}\n\nexport function daemonServiceRecognizedExecutablePaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return resolveDaemonServiceRecognizedExecutablePaths(pathInput);\n}\n\nexport function daemonServiceLegacyWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return daemonServiceLegacyExecutableWrapperPath(pathInput);\n}\n\nexport function resolveDaemonBundleRootPath(\n bundleId: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeBundlesPath(pathInput), bundleId);\n}\n\nexport function isDaemonBundleSourceAllowedForLane(input: {\n sourceKind: DaemonBundleSourceKind;\n pathInput?: OpenMeldPathResolutionInput;\n}): boolean {\n if (input.sourceKind !== DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE) {\n return true;\n }\n return resolveOpenMeldEnvPreset(input.pathInput) === \"dev-local\";\n}\n\nexport async function readDaemonActiveBundleState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonActiveBundleState | null> {\n const raw = await readFile(\n daemonServiceActiveBundlePath(pathInput),\n \"utf8\"\n ).catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return null;\n }\n try {\n const parsed = JSON.parse(raw) as Partial<DaemonActiveBundleState>;\n if (parsed.v === 2 && parsed.schema === DAEMON_ACTIVE_BUNDLE_SCHEMA) {\n if (\n typeof parsed.bundleId !== \"string\" ||\n parsed.bundleId.length === 0 ||\n typeof parsed.daemonVersion !== \"string\" ||\n parsed.daemonVersion.length === 0 ||\n typeof parsed.entryScriptRelativePath !== \"string\" ||\n parsed.entryScriptRelativePath.length === 0 ||\n !isDaemonBundleFormat(parsed.bundleFormat) ||\n typeof parsed.sourceEntryScriptPath !== \"string\" ||\n parsed.sourceEntryScriptPath.length === 0 ||\n typeof parsed.sourcePackageRootPath !== \"string\" ||\n parsed.sourcePackageRootPath.length === 0 ||\n typeof parsed.sourceDistRootPath !== \"string\" ||\n parsed.sourceDistRootPath.length === 0 ||\n !isDaemonBundleSourceKind(parsed.sourceKind) ||\n typeof parsed.createdAt !== \"string\" ||\n parsed.createdAt.length === 0 ||\n typeof parsed.updatedAt !== \"string\" ||\n parsed.updatedAt.length === 0\n ) {\n return null;\n }\n return {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId: parsed.bundleId,\n daemonVersion: parsed.daemonVersion,\n entryScriptRelativePath: parsed.entryScriptRelativePath,\n bundleFormat: parsed.bundleFormat,\n sourceEntryScriptPath: parsed.sourceEntryScriptPath,\n sourcePackageRootPath: parsed.sourcePackageRootPath,\n sourceDistRootPath: parsed.sourceDistRootPath,\n sourceDistFingerprint: normalizeOptionalText(\n parsed.sourceDistFingerprint\n ),\n sourceKind: parsed.sourceKind,\n createdAt: parsed.createdAt,\n updatedAt: parsed.updatedAt,\n };\n }\n\n const legacyParsed = parsed as Partial<{\n v: 1;\n schema: string;\n bundleId: string;\n daemonVersion: string;\n entryScriptRelativePath: string;\n sourceDistRootPath: string;\n createdAt: string;\n updatedAt: string;\n }>;\n if (\n legacyParsed.v !== 1 ||\n legacyParsed.schema !== DAEMON_ACTIVE_BUNDLE_LEGACY_SCHEMA ||\n typeof legacyParsed.bundleId !== \"string\" ||\n legacyParsed.bundleId.length === 0 ||\n typeof legacyParsed.daemonVersion !== \"string\" ||\n legacyParsed.daemonVersion.length === 0 ||\n typeof legacyParsed.entryScriptRelativePath !== \"string\" ||\n legacyParsed.entryScriptRelativePath.length === 0 ||\n typeof legacyParsed.sourceDistRootPath !== \"string\" ||\n legacyParsed.sourceDistRootPath.length === 0 ||\n typeof legacyParsed.createdAt !== \"string\" ||\n legacyParsed.createdAt.length === 0 ||\n typeof legacyParsed.updatedAt !== \"string\" ||\n legacyParsed.updatedAt.length === 0\n ) {\n return null;\n }\n const sourceEntryScriptPath = join(\n legacyParsed.sourceDistRootPath,\n basename(legacyParsed.entryScriptRelativePath)\n );\n const sourcePackageRootPath = dirname(legacyParsed.sourceDistRootPath);\n return {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId: legacyParsed.bundleId,\n daemonVersion: legacyParsed.daemonVersion,\n entryScriptRelativePath: legacyParsed.entryScriptRelativePath,\n bundleFormat: \"legacy_linked_v1\",\n sourceEntryScriptPath,\n sourcePackageRootPath,\n sourceDistRootPath: legacyParsed.sourceDistRootPath,\n sourceDistFingerprint: null,\n sourceKind: inferDaemonBundleSourceKind(sourcePackageRootPath),\n createdAt: legacyParsed.createdAt,\n updatedAt: legacyParsed.updatedAt,\n };\n } catch {\n return null;\n }\n}\n\nexport async function resolveAlignedDaemonActiveBundleEntryPath(\n input: { expectedVersion?: string } = {}\n): Promise<string | null> {\n const [installStatus, serviceContract, state] = await Promise.all([\n getDaemonStatus(),\n readDaemonServiceContract().catch(() => null),\n readDaemonActiveBundleState(),\n ]);\n const expectedVersion =\n input.expectedVersion ??\n serviceContract?.daemonVersion ??\n (installStatus.installed\n ? installStatus.state.daemonVersion\n : (state?.daemonVersion ?? \"unknown\"));\n const matchingServiceContract =\n input.expectedVersion &&\n serviceContract?.daemonVersion !== input.expectedVersion\n ? null\n : serviceContract;\n const activeBundleEntryPath =\n await resolveDaemonBundleEntryPathFromState(state);\n const installedBundleFingerprint = activeBundleEntryPath\n ? await resolveInstalledDaemonBundleFingerprint(state)\n : null;\n const activeBundleSourceAvailable =\n state && state.bundleFormat === \"legacy_linked_v1\"\n ? await pathExists(state.sourcePackageRootPath).catch(() => null)\n : null;\n const artifact = resolveDaemonServiceArtifact({\n expectedVersion,\n installStatus,\n serviceContract: matchingServiceContract,\n activeBundle: state,\n activeBundleSourceAvailable,\n activeBundleEntryPath,\n installedBundleFingerprint,\n });\n return artifact.resolvedEntryPath;\n}\n\nexport async function resolveInstalledDaemonBundleFingerprint(\n state: DaemonActiveBundleState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n if (state?.bundleFormat === \"binary_v1\") {\n const entryPath = await resolveDaemonBundleEntryPathFromState(\n state,\n pathInput\n );\n return entryPath ? await hashBinaryServiceBundle(entryPath) : null;\n }\n if (state?.bundleFormat === \"self_contained_v1\") {\n const bundleRootPath = resolveDaemonBundleRootPath(\n state.bundleId,\n pathInput\n );\n const distRootPath = join(\n bundleRootPath,\n dirname(state.entryScriptRelativePath)\n );\n const relativeDistRootPath = relative(bundleRootPath, distRootPath);\n if (\n relativeDistRootPath === \"..\" ||\n relativeDistRootPath.startsWith(`..${sep}`) ||\n isAbsolute(relativeDistRootPath)\n ) {\n return null;\n }\n return await computeDaemonSourceDistFingerprint(distRootPath);\n }\n return null;\n}\n\nexport async function resolveDaemonBundleEntryPathFromState(\n state: DaemonActiveBundleState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n if (!state) {\n return null;\n }\n if (state.bundleFormat === \"binary_v1\") {\n // Only macOS uses a stable physical carrier for privacy grants. Windows\n // Task Scheduler names the complete immutable GUI bundle directly.\n if (process.platform === \"win32\") {\n return (await pathExists(state.sourceEntryScriptPath))\n ? state.sourceEntryScriptPath\n : null;\n }\n const stableExecutablePath = daemonServiceBinaryExecutablePath(pathInput);\n if (await pathExists(stableExecutablePath)) {\n return stableExecutablePath;\n }\n return (await pathExists(state.sourceEntryScriptPath))\n ? state.sourceEntryScriptPath\n : null;\n }\n const entryPath = join(\n resolveDaemonBundleRootPath(state.bundleId, pathInput),\n state.entryScriptRelativePath\n );\n return (await pathExists(entryPath)) ? entryPath : null;\n}\n\nexport async function prepareDaemonServiceBundle(input: {\n activate?: boolean;\n daemonVersion: string;\n cliScriptPath?: string;\n binaryRelease?: CliBinaryReleaseInfo;\n}): Promise<DaemonActiveBundleState> {\n const preparedBundle = isBinaryDistribution()\n ? await prepareBinaryDaemonServiceBundle(input)\n : await prepareNodeDaemonServiceBundle(input);\n if (input.activate !== false) {\n await activateDaemonServiceBundle(preparedBundle);\n }\n return preparedBundle;\n}\n\nasync function prepareNodeDaemonServiceBundle(input: {\n daemonVersion: string;\n cliScriptPath?: string;\n}): Promise<DaemonActiveBundleState> {\n const sourceProvenance = await resolveDaemonBundleSourceProvenance(\n input.cliScriptPath\n );\n if (\n !isDaemonBundleSourceAllowedForLane({\n sourceKind: sourceProvenance.sourceKind,\n })\n ) {\n throw new Error(\n \"OpenMeld Service cannot use repo-local workspace service files in this lane. Repo-local service files are only allowed through `openmeld-dev`.\"\n );\n }\n const { sourceEntryScriptPath, sourceDistRootPath, sourcePackageRootPath } =\n sourceProvenance;\n if (sourceProvenance.sourceKind !== DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE) {\n const sourcePackageVersion = await readDaemonSourcePackageVersion(\n sourcePackageRootPath\n );\n if (sourcePackageVersion !== input.daemonVersion) {\n throw new Error(\n `Cannot prepare OpenMeld Service ${input.daemonVersion} from CLI source ${sourcePackageVersion} at ${sourcePackageRootPath}. Install openmeld@${input.daemonVersion} and rerun \\`openmeld setup\\`, or use a verified Service artifact for that version.`\n );\n }\n }\n const sourceDistFingerprint =\n await computeDaemonSourceDistFingerprint(sourceDistRootPath);\n const entryScriptRelativePath = basename(sourceEntryScriptPath);\n const now = new Date().toISOString();\n const bundleId = createBundleId(input.daemonVersion);\n const bundleRootPath = resolveDaemonBundleRootPath(bundleId);\n const targetDistRootPath = join(bundleRootPath, \"dist\");\n\n await Promise.all([\n mkdir(daemonRuntimeRootPath(), { recursive: true }),\n mkdir(daemonRuntimeBundlesPath(), { recursive: true }),\n mkdir(daemonRuntimeStateRootPath(), { recursive: true }),\n mkdir(daemonRuntimeServiceManagerPath(), { recursive: true }),\n ]);\n\n try {\n await rm(bundleRootPath, { recursive: true, force: true });\n await mkdir(bundleRootPath, { recursive: true });\n await cp(sourceDistRootPath, targetDistRootPath, {\n recursive: true,\n force: true,\n filter: (sourcePath) =>\n isDaemonSourceDistPathIncluded(sourceDistRootPath, sourcePath),\n });\n await writeDaemonBundlePackageManifest({\n bundleRootPath,\n daemonVersion: input.daemonVersion,\n });\n await copyDaemonBundleRuntimeDependencies({\n bundleRootPath,\n sourcePackageRootPath,\n });\n } catch (error) {\n await rm(bundleRootPath, { recursive: true, force: true }).catch(\n () => undefined\n );\n throw error;\n }\n\n const nextState: DaemonActiveBundleState = {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId,\n daemonVersion: input.daemonVersion,\n entryScriptRelativePath: join(\"dist\", entryScriptRelativePath),\n bundleFormat: \"self_contained_v1\",\n sourceEntryScriptPath,\n sourcePackageRootPath,\n sourceDistRootPath,\n sourceDistFingerprint,\n sourceKind: sourceProvenance.sourceKind,\n createdAt: now,\n updatedAt: now,\n };\n\n return nextState;\n}\n\n// A selected binary Service owns its complete bundle. macOS may also use the\n// same-version CLI; Windows requires the separately built GUI carrier.\nasync function prepareBinaryDaemonServiceBundle(input: {\n daemonVersion: string;\n binaryRelease?: CliBinaryReleaseInfo;\n}): Promise<DaemonActiveBundleState> {\n const { daemonVersion } = input;\n const bundledRelease = resolveBundledServiceRelease();\n const binaryRelease =\n input.binaryRelease ??\n (bundledRelease?.version === daemonVersion ? bundledRelease : undefined);\n if (\n process.platform === \"win32\" ||\n daemonVersion !== resolveCliSelfVersion()\n ) {\n const active = await readDaemonActiveBundleState();\n if (\n active?.bundleFormat === \"binary_v1\" &&\n active.daemonVersion === daemonVersion &&\n active.sourceDistFingerprint &&\n (!binaryRelease ||\n expectedBinaryServiceFingerprint(binaryRelease) ===\n active.sourceDistFingerprint) &&\n (await pathExists(active.sourceEntryScriptPath)) &&\n (await hashBinaryServiceBundle(active.sourceEntryScriptPath)) ===\n active.sourceDistFingerprint\n ) {\n return active;\n }\n }\n if (binaryRelease) {\n return await prepareSelectedBinaryDaemonServiceBundle({\n daemonVersion,\n release: binaryRelease,\n });\n }\n if (process.platform === \"win32\") {\n throw new Error(\n \"OpenMeld needs the selected Windows background Service artifact. The console CLI cannot replace it.\"\n );\n }\n if (daemonVersion !== resolveCliSelfVersion()) {\n throw new Error(\n `Cannot prepare OpenMeld Service ${daemonVersion} from CLI ${resolveCliSelfVersion()}. Acquire the selected Service release before preparing the update.`\n );\n }\n const outcome = await performManagedInstall();\n const managedBinaryPath = outcome.managedBinaryPath;\n if (!(await pathExists(managedBinaryPath))) {\n throw new Error(\n `OpenMeld managed binary is missing at ${managedBinaryPath}; cannot prepare binary OpenMeld Service.`\n );\n }\n const managedVersionDir = dirname(managedBinaryPath);\n const now = new Date().toISOString();\n\n await Promise.all([\n mkdir(daemonRuntimeRootPath(), { recursive: true }),\n mkdir(daemonRuntimeStateRootPath(), { recursive: true }),\n mkdir(daemonRuntimeServiceManagerPath(), { recursive: true }),\n ]);\n\n const nextState: DaemonActiveBundleState = {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId: createBundleId(outcome.version),\n daemonVersion: outcome.version,\n entryScriptRelativePath: \"openmeld\",\n bundleFormat: \"binary_v1\",\n sourceEntryScriptPath: managedBinaryPath,\n sourcePackageRootPath: managedVersionDir,\n sourceDistRootPath: managedVersionDir,\n sourceDistFingerprint: await hashDaemonBinaryFile(managedBinaryPath),\n sourceKind: DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL,\n createdAt: now,\n updatedAt: now,\n };\n\n return nextState;\n}\n\nasync function prepareSelectedBinaryDaemonServiceBundle(input: {\n daemonVersion: string;\n release: CliBinaryReleaseInfo;\n}): Promise<DaemonActiveBundleState> {\n if (input.release.version !== input.daemonVersion) {\n throw new Error(\n \"The selected Service artifact does not match the update target.\"\n );\n }\n const bundleId = createBundleId(input.daemonVersion);\n const bundleRootPath = resolveDaemonBundleRootPath(bundleId);\n const windows = input.release.platform.startsWith(\"windows-\");\n if (\n process.platform === \"win32\" &&\n input.release.platform !== \"windows-x64\"\n ) {\n throw new Error(\n \"The selected Service release is not a Windows x64 artifact.\"\n );\n }\n const executableName = windows ? \"openmeld.exe\" : \"openmeld\";\n const executablePath = join(bundleRootPath, executableName);\n const onDeltaFallback = (error: Error): void => {\n console.warn(\"[openmeld.service.artifact_delta_fallback]\", error.message);\n };\n const plan = await resolveCliBinaryUpdatePlan({\n baseBinaryPath: process.execPath,\n currentVersion: resolveCliSelfVersion(),\n onDeltaFallback,\n release: input.release,\n });\n const bytes = await downloadCliBinaryUpdateArtifact({\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n onDeltaFallback,\n plan,\n release: input.release,\n });\n await mkdir(bundleRootPath, { recursive: true });\n try {\n await writeFile(executablePath, bytes, { mode: 0o755 });\n await verifyCliBinaryCodeSignature({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath: executablePath,\n allowUnsignedForDevelopment: resolveOpenMeldEnvPreset() === \"dev-local\",\n release: input.release,\n runCommand: async (command, args) => {\n const result = await promisify(execFile)(command, args, {\n encoding: \"utf8\",\n });\n return { code: 0, stdout: result.stdout, stderr: result.stderr };\n },\n });\n await prepareCliBinaryProcessHelper({\n allowUnsignedPreview: allowUnsignedWindowsInternalPreview(),\n artifactPath: executablePath,\n release: input.release,\n downloadPolicy: DEFAULT_CLI_BINARY_DOWNLOAD_POLICY,\n fetchImpl: fetch,\n });\n if (windows) {\n await verifyWindowsServiceSubsystem(executablePath);\n }\n if (\n (await hashBinaryServiceBundle(executablePath, windows)) !==\n expectedBinaryServiceFingerprint(input.release)\n ) {\n throw new Error(\n \"The prepared Service bundle does not match the selected release.\"\n );\n }\n } catch (error) {\n await rm(bundleRootPath, { recursive: true, force: true });\n throw error;\n }\n const now = new Date().toISOString();\n return {\n v: 2,\n schema: DAEMON_ACTIVE_BUNDLE_SCHEMA,\n bundleId,\n daemonVersion: input.daemonVersion,\n entryScriptRelativePath: executableName,\n bundleFormat: \"binary_v1\",\n sourceEntryScriptPath: executablePath,\n sourcePackageRootPath: bundleRootPath,\n sourceDistRootPath: bundleRootPath,\n sourceDistFingerprint: expectedBinaryServiceFingerprint(input.release),\n sourceKind: DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL,\n createdAt: now,\n updatedAt: now,\n };\n}\n\nexport async function activateDaemonServiceBundle(\n preparedBundle: DaemonActiveBundleState\n): Promise<void> {\n await mkdir(daemonRuntimeStateRootPath(), { recursive: true });\n await writeFile(\n daemonServiceActiveBundlePath(),\n `${JSON.stringify(preparedBundle, null, 2)}\\n`,\n { encoding: \"utf8\", mode: 0o600 }\n );\n if (preparedBundle.bundleFormat !== \"binary_v1\") {\n await ensureDaemonServiceManagerExecutables();\n }\n}\n\nexport async function discardPreparedDaemonServiceBundle(\n preparedBundle: DaemonActiveBundleState\n): Promise<void> {\n if (preparedBundle.bundleFormat === \"legacy_linked_v1\") {\n return;\n }\n const activeBundle = await readDaemonActiveBundleState();\n if (activeBundle?.bundleId === preparedBundle.bundleId) {\n return;\n }\n await rm(resolveDaemonBundleRootPath(preparedBundle.bundleId), {\n recursive: true,\n force: true,\n });\n}\n\nasync function hashDaemonBinaryFile(filePath: string): Promise<string> {\n const hash = createHash(\"sha256\");\n hash.update(await readFile(filePath));\n return hash.digest(\"hex\");\n}\n\nexport async function runAuditedServiceManagerCarrierMutation<T>(input: {\n distribution?: OpenMeldDistribution;\n operation: string;\n pathInput?: OpenMeldPathResolutionInput;\n run: () => Promise<T>;\n targetPath: string;\n}): Promise<T> {\n const pathInput = input.pathInput ?? {};\n const metadata = {\n distribution: input.distribution ?? resolveOpenMeldDistribution(),\n executable: process.execPath,\n operation: input.operation,\n preset: resolveOpenMeldEnvPreset(pathInput),\n targetPath: input.targetPath,\n targetCategory: classifyDiagnosticPath(input.targetPath),\n actorPid: process.pid,\n parentPid: process.ppid,\n };\n await emitDaemonLifecycleEvent({\n command: \"openmeld service carrier mutation\",\n intent: \"status_cleanup\",\n metadata,\n pathInput,\n result: \"attempted\",\n type: \"service_manager.registration_reconcile\",\n });\n try {\n const result = await input.run();\n await emitDaemonLifecycleEvent({\n command: \"openmeld service carrier mutation\",\n intent: \"status_cleanup\",\n metadata,\n pathInput,\n result: \"completed\",\n type: \"service_manager.registration_reconcile\",\n });\n return result;\n } catch (error) {\n await emitDaemonLifecycleEvent({\n command: \"openmeld service carrier mutation\",\n intent: \"status_cleanup\",\n metadata: {\n ...metadata,\n errorMessage: error instanceof Error ? error.message : String(error),\n operationFailure: collectLocalOperationFailure(error),\n },\n pathInput,\n result: \"failed\",\n type: \"service_manager.registration_reconcile\",\n });\n throw error;\n }\n}\n\nexport async function ensureDaemonServiceStableBinaryExecutable(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string> {\n const activeBundle = await readDaemonActiveBundleState();\n if (activeBundle?.bundleFormat !== \"binary_v1\") {\n throw new Error(\n \"OpenMeld cannot prepare the stable macOS Service executable without an active binary bundle.\"\n );\n }\n return await ensureVerifiedBinaryCarrier({\n bundle: activeBundle,\n operationName: \"stable_binary\",\n pathInput,\n targetPath: daemonServiceBinaryExecutablePath(pathInput),\n });\n}\n\nexport async function ensureDaemonServiceUpdateWorkerBinaryExecutable(\n preparedBundle: DaemonActiveBundleState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string> {\n if (preparedBundle.bundleFormat !== \"binary_v1\") {\n throw new Error(\n \"OpenMeld cannot prepare the update worker binary without a binary Service bundle.\"\n );\n }\n if (process.platform === \"win32\") {\n return await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"prepare_windows_maintenance_bundle\",\n pathInput,\n targetPath: windowsMaintenanceBinaryPath(preparedBundle, pathInput),\n run: async () =>\n await prepareWindowsMaintenanceBinary(preparedBundle, pathInput),\n });\n }\n return await ensureVerifiedBinaryCarrier({\n bundle: preparedBundle,\n operationName: \"update_worker_binary\",\n pathInput,\n targetPath: daemonServiceUpdateWorkerBinaryPath(pathInput),\n });\n}\n\nexport async function clearDaemonServiceUpdateWorkerBinaryExecutable(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n if (process.platform === \"win32\") {\n for (const bundleId of await readDirectoryNames(\n daemonRuntimeBundlesPath(pathInput)\n )) {\n if (!WINDOWS_MAINTENANCE_BUNDLE_PATTERN.test(bundleId)) {\n continue;\n }\n const targetPath = resolveDaemonBundleRootPath(bundleId, pathInput);\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"remove_windows_maintenance_bundle\",\n pathInput,\n targetPath,\n run: async () => await pruneWindowsBinaryBundle(targetPath),\n });\n }\n return;\n }\n const targetPath = daemonServiceUpdateWorkerBinaryPath(pathInput);\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"remove_update_worker_binary\",\n pathInput,\n targetPath,\n run: async () => await rm(targetPath, { force: true }),\n });\n}\n\nasync function ensureVerifiedBinaryCarrier(input: {\n bundle: DaemonActiveBundleState;\n operationName: \"stable_binary\" | \"update_worker_binary\";\n pathInput: OpenMeldPathResolutionInput;\n targetPath: string;\n}): Promise<string> {\n const sourcePath = input.bundle.sourceEntryScriptPath;\n const expectedFingerprint =\n input.bundle.sourceDistFingerprint ??\n (await hashDaemonBinaryFile(sourcePath));\n const stableExecutablePath = input.targetPath;\n const stableExecutableStat = await lstat(stableExecutablePath).catch(\n () => null\n );\n if (\n stableExecutableStat?.isFile() === true &&\n !stableExecutableStat.isSymbolicLink() &&\n (await hashDaemonBinaryFile(stableExecutablePath).catch(() => null)) ===\n expectedFingerprint\n ) {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `refresh_${input.operationName}_permissions`,\n pathInput: input.pathInput,\n targetPath: stableExecutablePath,\n run: async () => await chmod(stableExecutablePath, 0o700),\n });\n return stableExecutablePath;\n }\n\n await mkdir(dirname(stableExecutablePath), { recursive: true });\n const preparedPath = `${stableExecutablePath}.next-${String(process.pid)}`;\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `clear_prepared_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: preparedPath,\n run: async () => await rm(preparedPath, { force: true }),\n });\n try {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `prepare_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: preparedPath,\n run: async () => {\n await copyFile(sourcePath, preparedPath);\n await chmod(preparedPath, 0o700);\n },\n });\n const preparedFingerprint = await hashDaemonBinaryFile(preparedPath);\n if (preparedFingerprint !== expectedFingerprint) {\n throw new Error(\n \"OpenMeld could not verify the prepared Service carrier executable.\"\n );\n }\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `replace_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: stableExecutablePath,\n run: async () => await rename(preparedPath, stableExecutablePath),\n });\n return stableExecutablePath;\n } finally {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: `clear_prepared_${input.operationName}`,\n pathInput: input.pathInput,\n targetPath: preparedPath,\n run: async () => await rm(preparedPath, { force: true }),\n }).catch(() => undefined);\n }\n}\n\nexport async function verifyDaemonActiveBundleIntegrity(\n activeBundle: DaemonActiveBundleState\n): Promise<boolean> {\n const expectedFingerprint = activeBundle.sourceDistFingerprint?.trim();\n if (\n !expectedFingerprint ||\n activeBundle.bundleFormat === \"legacy_linked_v1\"\n ) {\n return false;\n }\n const entryPath = await resolveDaemonBundleEntryPathFromState(activeBundle);\n if (!entryPath) {\n return false;\n }\n return (\n (await resolveInstalledDaemonBundleFingerprint(activeBundle)) ===\n expectedFingerprint\n );\n}\n\nasync function writeDaemonBundlePackageManifest(input: {\n bundleRootPath: string;\n daemonVersion: string;\n}): Promise<void> {\n const packageManifestPath = join(input.bundleRootPath, \"package.json\");\n await writeFile(\n packageManifestPath,\n `${JSON.stringify(\n {\n name: \"openmeld-daemon-service-bundle\",\n private: true,\n type: \"module\",\n version: input.daemonVersion,\n },\n null,\n 2\n )}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o600,\n }\n );\n}\n\nasync function copyDaemonBundleRuntimeDependencies(input: {\n bundleRootPath: string;\n sourcePackageRootPath: string;\n}): Promise<void> {\n const runtimeDependencies = await collectDaemonBundleRuntimeDependencyClosure(\n {\n sourcePackageRootPath: input.sourcePackageRootPath,\n }\n );\n\n const targetNodeModulesPath = join(input.bundleRootPath, \"node_modules\");\n await rm(targetNodeModulesPath, {\n recursive: true,\n force: true,\n });\n await mkdir(targetNodeModulesPath, { recursive: true });\n for (const runtimeDependency of runtimeDependencies) {\n await copyDaemonBundleDependencyDirectory({\n dependencyName: runtimeDependency.dependencyName,\n sourceDependencyPath: runtimeDependency.packageRootPath,\n targetNodeModulesPath,\n });\n }\n}\n\nasync function copyDaemonBundleDependencyDirectory(input: {\n dependencyName: string;\n sourceDependencyPath: string;\n targetNodeModulesPath: string;\n}): Promise<void> {\n if (!(await pathExists(input.sourceDependencyPath))) {\n throw new Error(\n `OpenMeld could not copy runtime dependency ${input.dependencyName} for background service bundling from ${input.sourceDependencyPath}. Run \\`pnpm install\\` and retry.`\n );\n }\n const targetDependencyPath = join(\n input.targetNodeModulesPath,\n ...input.dependencyName.split(\"/\")\n );\n await mkdir(dirname(targetDependencyPath), { recursive: true });\n await cp(input.sourceDependencyPath, targetDependencyPath, {\n recursive: true,\n force: true,\n dereference: true,\n preserveTimestamps: true,\n });\n}\n\nexport async function writeDaemonServiceLauncher(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await mkdir(daemonRuntimeServiceManagerPath(pathInput), { recursive: true });\n const targetPath = daemonServiceLauncherPath(pathInput);\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"npm\",\n operation: \"write_launcher\",\n pathInput,\n targetPath,\n run: async () =>\n await writeFile(\n targetPath,\n `${buildDaemonServiceLauncherSource(pathInput)}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o700,\n }\n ),\n });\n}\n\nexport async function writeDaemonServiceExecutableWrapper(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await mkdir(daemonRuntimeServiceManagerPath(pathInput), { recursive: true });\n await Promise.all(\n daemonServiceExecutableWrapperPaths(pathInput).map(async (wrapperPath) => {\n await runAuditedServiceManagerCarrierMutation({\n distribution: \"npm\",\n operation: \"write_executable_wrapper\",\n pathInput,\n targetPath: wrapperPath,\n run: async () => {\n await writeFile(\n wrapperPath,\n `${buildDaemonServiceExecutableWrapperSource(pathInput)}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o700,\n }\n );\n await chmod(wrapperPath, 0o700);\n },\n });\n })\n );\n}\n\nexport async function ensureDaemonServiceManagerExecutables(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await writeDaemonServiceLauncher(pathInput);\n await writeDaemonServiceExecutableWrapper(pathInput);\n}\n\nexport async function restoreDaemonActiveBundleStateSnapshot(\n snapshot: DaemonActiveBundleState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n if (!snapshot) {\n await rm(daemonServiceActiveBundlePath(pathInput), { force: true });\n return;\n }\n await mkdir(daemonRuntimeStateRootPath(pathInput), { recursive: true });\n await writeFile(\n daemonServiceActiveBundlePath(pathInput),\n `${JSON.stringify(snapshot, null, 2)}\\n`,\n {\n encoding: \"utf8\",\n mode: 0o600,\n }\n );\n}\n\nexport async function clearDaemonServiceBundles(): Promise<void> {\n await Promise.all([\n rm(daemonServiceActiveBundlePath(), { force: true }),\n runAuditedServiceManagerCarrierMutation({\n operation: \"remove_launcher\",\n targetPath: daemonServiceLauncherPath(),\n run: async () => await rm(daemonServiceLauncherPath(), { force: true }),\n }),\n runAuditedServiceManagerCarrierMutation({\n distribution: \"binary\",\n operation: \"remove_stable_binary\",\n targetPath: daemonServiceBinaryExecutablePath(),\n run: async () =>\n await rm(daemonServiceBinaryExecutablePath(), { force: true }),\n }),\n clearDaemonServiceUpdateWorkerBinaryExecutable(),\n ...daemonServiceExecutableWrapperPaths().map((wrapperPath) =>\n runAuditedServiceManagerCarrierMutation({\n operation: \"remove_executable_wrapper\",\n targetPath: wrapperPath,\n run: async () => await rm(wrapperPath, { force: true }),\n })\n ),\n rm(daemonRuntimeBundlesPath(), { recursive: true, force: true }),\n ]);\n}\n\nexport async function cleanupInactiveDaemonServiceBundles(\n input: { retainBundleIds?: string[] } = {}\n): Promise<void> {\n const [\n active,\n serviceContract,\n runtimeLease,\n registeredWorkerBundleIds,\n pendingUpdate,\n ] = await Promise.all([\n readDaemonActiveBundleState(),\n readDaemonServiceContract().catch(() => null),\n readDaemonRuntimeLease().catch(() => null),\n readDaemonServiceUpdateWorkerProtectedBundleIds(),\n readPendingDaemonServiceUpdate(),\n ]);\n const retain = new Set([\n ...(active ? [active.bundleId] : []),\n ...(serviceContract?.bundleId ? [serviceContract.bundleId] : []),\n ...(runtimeLease?.bundleId ? [runtimeLease.bundleId] : []),\n ...registeredWorkerBundleIds,\n ...(pendingUpdate?.preparedBundle.bundleFormat !== \"legacy_linked_v1\" &&\n pendingUpdate\n ? [pendingUpdate.preparedBundle.bundleId]\n : []),\n ...(input.retainBundleIds ?? []),\n ]);\n const bundleEntries = await readDirectoryNames(daemonRuntimeBundlesPath());\n for (const bundleId of bundleEntries) {\n if (retain.has(bundleId)) {\n continue;\n }\n const directory = resolveDaemonBundleRootPath(bundleId);\n if (process.platform === \"win32\") {\n // Includes independent maintenance copies. The kernel protects a still\n // running old worker after the registration selects its replacement.\n await pruneWindowsBinaryBundle(directory);\n } else {\n await rm(directory, { recursive: true, force: true });\n }\n }\n}\n\nasync function resolveDaemonBundleSourceProvenance(\n explicitPath?: string\n): Promise<{\n sourceEntryScriptPath: string;\n sourceDistRootPath: string;\n sourcePackageRootPath: string;\n sourceKind: DaemonBundleSourceKind;\n}> {\n const sourceEntryScriptPath = await resolveCliScriptPath(explicitPath);\n const sourceDistRootPath = dirname(sourceEntryScriptPath);\n const sourcePackageRootPath = dirname(sourceDistRootPath);\n return {\n sourceEntryScriptPath,\n sourceDistRootPath,\n sourcePackageRootPath,\n sourceKind: inferDaemonBundleSourceKind(sourcePackageRootPath),\n };\n}\n\nasync function readDaemonSourcePackageVersion(\n sourcePackageRootPath: string\n): Promise<string> {\n const packageManifestPath = join(sourcePackageRootPath, \"package.json\");\n const packageManifestRaw = await readFile(packageManifestPath, \"utf8\").catch(\n (error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n throw new Error(\n `OpenMeld could not verify the CLI source version because ${packageManifestPath} is missing.`\n );\n }\n throw error;\n }\n );\n let packageManifest: { name?: unknown; version?: unknown };\n try {\n packageManifest = JSON.parse(packageManifestRaw) as {\n name?: unknown;\n version?: unknown;\n };\n } catch {\n throw new Error(\n `OpenMeld could not verify the CLI source version because ${packageManifestPath} is not valid JSON.`\n );\n }\n const version =\n packageManifest.name === \"openmeld\" &&\n typeof packageManifest.version === \"string\"\n ? packageManifest.version.trim()\n : \"\";\n if (!version) {\n throw new Error(\n `OpenMeld could not verify the CLI source version from ${packageManifestPath}.`\n );\n }\n return version;\n}\n\nasync function resolveCliScriptPath(explicitPath?: string): Promise<string> {\n const rawPath = explicitPath ?? process.argv[1];\n if (!rawPath) {\n throw new Error(\n \"Cannot determine CLI script path for OpenMeld background service bundle.\"\n );\n }\n const resolvedPath = await realpath(rawPath).catch(async () => {\n const fallbackPath = await resolvePreferredCliScriptPath(rawPath);\n if (fallbackPath) {\n return fallbackPath;\n }\n throw new Error(\n `OpenMeld could not resolve a CLI dist entry for service bundling from ${rawPath}.`\n );\n });\n const preferredPath = await resolvePreferredCliScriptPath(resolvedPath);\n if (preferredPath) {\n return preferredPath;\n }\n throw new Error(\n `OpenMeld could not find a supported CLI dist entry for service bundling from ${resolvedPath}.`\n );\n}\n\nfunction createBundleId(version: string): string {\n const normalizedVersion = version.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n return `${normalizedVersion}-${Date.now()}`;\n}\n\nasync function computeDaemonSourceDistFingerprint(\n sourceDistRootPath: string\n): Promise<string> {\n const filePaths = await listDaemonSourceDistFiles(sourceDistRootPath);\n const hash = createHash(\"sha256\");\n for (const filePath of filePaths) {\n const relativePath = relative(sourceDistRootPath, filePath).replaceAll(\n \"\\\\\",\n \"/\"\n );\n hash.update(relativePath, \"utf8\");\n hash.update(\"\\0\", \"utf8\");\n hash.update(await readFile(filePath));\n hash.update(\"\\0\", \"utf8\");\n }\n return hash.digest(\"hex\");\n}\n\nasync function listDaemonSourceDistFiles(path: string): Promise<string[]> {\n return await listIncludedDaemonSourceDistFiles(path, path);\n}\n\nasync function listIncludedDaemonSourceDistFiles(\n sourceDistRootPath: string,\n currentPath: string\n): Promise<string[]> {\n const entries = await readdir(currentPath, { withFileTypes: true });\n const filePaths: string[] = [];\n\n for (const entry of entries) {\n const entryPath = join(currentPath, entry.name);\n if (!isDaemonSourceDistPathIncluded(sourceDistRootPath, entryPath)) {\n continue;\n }\n if (entry.isDirectory()) {\n filePaths.push(\n ...(await listIncludedDaemonSourceDistFiles(\n sourceDistRootPath,\n entryPath\n ))\n );\n continue;\n }\n if (entry.isFile()) {\n filePaths.push(entryPath);\n }\n }\n\n return filePaths.sort((left, right) => {\n if (left === right) {\n return 0;\n }\n return left < right ? -1 : 1;\n });\n}\n\nfunction isDaemonSourceDistPathIncluded(\n sourceDistRootPath: string,\n candidatePath: string\n): boolean {\n const relativePath = relative(sourceDistRootPath, candidatePath).replaceAll(\n \"\\\\\",\n \"/\"\n );\n if (!relativePath || relativePath.startsWith(\"..\")) {\n return true;\n }\n const topLevelPathSegment = relativePath.split(\"/\")[0] ?? \"\";\n return !DAEMON_SOURCE_DIST_IGNORED_TOP_LEVEL_DIRS.has(topLevelPathSegment);\n}\n\nasync function collectDaemonBundleRuntimeDependencyClosure(input: {\n sourcePackageRootPath: string;\n}): Promise<Array<{ dependencyName: string; packageRootPath: string }>> {\n const packageManifestPath = join(input.sourcePackageRootPath, \"package.json\");\n const packageManifestRaw = await readFile(packageManifestPath, \"utf8\").catch(\n (error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n throw new Error(\n `OpenMeld could not find the CLI package manifest for background service bundling at ${packageManifestPath}.`\n );\n }\n throw error;\n }\n );\n const packageManifest = JSON.parse(packageManifestRaw) as {\n dependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n };\n const resolvedDependencies = new Map<string, string>();\n const queue = [\n ...Object.keys(packageManifest.dependencies ?? {}).map(\n (dependencyName) => ({\n dependencyName,\n required: true,\n resolverPackageRootPath: input.sourcePackageRootPath,\n })\n ),\n ...Object.keys(packageManifest.optionalDependencies ?? {}).map(\n (dependencyName) => ({\n dependencyName,\n required: false,\n resolverPackageRootPath: input.sourcePackageRootPath,\n })\n ),\n ];\n\n while (queue.length > 0) {\n const nextDependency = queue.shift();\n if (!nextDependency) {\n continue;\n }\n if (isTypeOnlyDependencyName(nextDependency.dependencyName)) {\n continue;\n }\n if (resolvedDependencies.has(nextDependency.dependencyName)) {\n continue;\n }\n const dependencyManifest = await readDaemonBundleDependencyManifest({\n dependencyName: nextDependency.dependencyName,\n required: nextDependency.required,\n resolverPackageRootPath: nextDependency.resolverPackageRootPath,\n });\n if (!dependencyManifest) {\n continue;\n }\n\n resolvedDependencies.set(\n nextDependency.dependencyName,\n dependencyManifest.packageRootPath\n );\n const nestedRequiredDependencies = Object.keys(\n dependencyManifest.dependencies ?? {}\n );\n const nestedOptionalDependencies = Object.keys(\n dependencyManifest.optionalDependencies ?? {}\n );\n const nestedPeerDependencies = Object.keys(\n dependencyManifest.peerDependencies ?? {}\n );\n for (const dependencyName of nestedRequiredDependencies) {\n queue.push({\n dependencyName,\n required: true,\n resolverPackageRootPath: dependencyManifest.packageRootPath,\n });\n }\n for (const dependencyName of nestedOptionalDependencies) {\n queue.push({\n dependencyName,\n required: false,\n resolverPackageRootPath: dependencyManifest.packageRootPath,\n });\n }\n for (const dependencyName of nestedPeerDependencies) {\n queue.push({\n dependencyName,\n required: false,\n resolverPackageRootPath: dependencyManifest.packageRootPath,\n });\n }\n }\n\n return [...resolvedDependencies.entries()]\n .map(([dependencyName, packageRootPath]) => ({\n dependencyName,\n packageRootPath,\n }))\n .sort((left, right) =>\n left.dependencyName.localeCompare(right.dependencyName)\n );\n}\n\nfunction isTypeOnlyDependencyName(dependencyName: string): boolean {\n return dependencyName.startsWith(\"@types/\");\n}\n\nasync function readDaemonBundleDependencyManifest(input: {\n dependencyName: string;\n required: boolean;\n resolverPackageRootPath: string;\n}): Promise<{\n packageRootPath: string;\n dependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n} | null> {\n const dependencyPackageRootPath = await resolveDaemonDependencyPackageRoot({\n dependencyName: input.dependencyName,\n resolverPackageRootPath: input.resolverPackageRootPath,\n required: input.required,\n });\n if (!dependencyPackageRootPath) {\n return null;\n }\n const dependencyManifestPath = join(\n dependencyPackageRootPath,\n \"package.json\"\n );\n const dependencyManifestRaw = await readFile(\n dependencyManifestPath,\n \"utf8\"\n ).catch((error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n if (!input.required) {\n return null;\n }\n throw new Error(\n `OpenMeld could not find runtime dependency ${input.dependencyName} for background service bundling at ${dependencyManifestPath}. Run \\`pnpm install\\` and retry.`\n );\n }\n throw error;\n });\n if (dependencyManifestRaw === null) {\n return null;\n }\n const dependencyManifest = JSON.parse(dependencyManifestRaw) as {\n dependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n return {\n packageRootPath: dependencyPackageRootPath,\n ...dependencyManifest,\n };\n}\n\nasync function resolveDaemonDependencyPackageRoot(input: {\n dependencyName: string;\n resolverPackageRootPath: string;\n required: boolean;\n}): Promise<string | null> {\n const resolver = createRequire(\n join(input.resolverPackageRootPath, \"package.json\")\n );\n const dependencyPackageRootPath =\n await resolveDaemonDependencyPackageRootFromManifest({\n dependencyName: input.dependencyName,\n resolver,\n });\n if (dependencyPackageRootPath) {\n return dependencyPackageRootPath;\n }\n try {\n const dependencyEntryPath = await realpath(\n resolver.resolve(input.dependencyName)\n );\n return await findDaemonDependencyPackageRoot(dependencyEntryPath);\n } catch (error) {\n if (isPackageEntryResolutionError(error)) {\n const dependencyPackageRootPath =\n await findDaemonDependencyPackageRootFromResolutionPaths({\n dependencyName: input.dependencyName,\n resolver,\n });\n if (dependencyPackageRootPath) {\n return dependencyPackageRootPath;\n }\n if (!input.required) {\n return null;\n }\n throw new Error(\n `OpenMeld could not find runtime dependency ${input.dependencyName} for background service bundling from ${input.resolverPackageRootPath}. Run \\`pnpm install\\` and retry.`\n );\n }\n throw error;\n }\n}\n\nasync function resolveDaemonDependencyPackageRootFromManifest(input: {\n dependencyName: string;\n resolver: NodeJS.Require;\n}): Promise<string | null> {\n try {\n const dependencyManifestPath = await realpath(\n input.resolver.resolve(`${input.dependencyName}/package.json`)\n );\n return await findDaemonDependencyPackageRootFromManifestPath({\n dependencyManifestPath,\n dependencyName: input.dependencyName,\n });\n } catch (error) {\n if (isPackageEntryResolutionError(error)) {\n return null;\n }\n throw error;\n }\n}\n\nasync function findDaemonDependencyPackageRootFromManifestPath(input: {\n dependencyManifestPath: string;\n dependencyName: string;\n}): Promise<string | null> {\n let currentPath = dirname(input.dependencyManifestPath);\n while (true) {\n const packageManifestPath = join(currentPath, \"package.json\");\n const packageManifestRaw = await readFile(\n packageManifestPath,\n \"utf8\"\n ).catch((error: unknown) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (packageManifestRaw !== null) {\n const packageManifest = JSON.parse(packageManifestRaw) as {\n name?: unknown;\n };\n if (packageManifest.name === input.dependencyName) {\n return currentPath;\n }\n }\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n currentPath = parentPath;\n }\n}\n\nasync function findDaemonDependencyPackageRootFromResolutionPaths(input: {\n dependencyName: string;\n resolver: NodeJS.Require;\n}): Promise<string | null> {\n const resolutionPaths = input.resolver.resolve.paths(input.dependencyName);\n if (!resolutionPaths) {\n return null;\n }\n for (const nodeModulesPath of resolutionPaths) {\n const candidatePackageRootPath = join(\n nodeModulesPath,\n ...input.dependencyName.split(\"/\")\n );\n if (await pathExists(join(candidatePackageRootPath, \"package.json\"))) {\n return await realpath(candidatePackageRootPath);\n }\n }\n return null;\n}\n\nasync function findDaemonDependencyPackageRoot(\n resolvedEntryPath: string\n): Promise<string> {\n let currentPath = dirname(resolvedEntryPath);\n while (true) {\n const packageManifestPath = join(currentPath, \"package.json\");\n if (await pathExists(packageManifestPath)) {\n return currentPath;\n }\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n break;\n }\n currentPath = parentPath;\n }\n throw new Error(\n `OpenMeld could not determine the package root for background service dependency entry ${resolvedEntryPath}.`\n );\n}\n\nfunction buildDaemonServiceLauncherSource(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const activeBundleStatePath = JSON.stringify(\n daemonServiceActiveBundlePath(pathInput)\n );\n const installStatePath = JSON.stringify(daemonStatePath(pathInput));\n const bundleRootPath = JSON.stringify(daemonRuntimeBundlesPath(pathInput));\n const allowWorkspaceBundleSource = JSON.stringify(\n resolveOpenMeldEnvPreset(pathInput) === \"dev-local\"\n );\n return `import { access, readFile, readdir, stat, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport { spawn } from \"node:child_process\";\n\nconst ACTIVE_BUNDLE_PATH = ${activeBundleStatePath};\nconst INSTALL_STATE_PATH = ${installStatePath};\nconst BUNDLE_ROOT_PATH = ${bundleRootPath};\nconst ALLOW_WORKSPACE_BUNDLE_SOURCE = ${allowWorkspaceBundleSource};\n\nconst ACTIVE_BUNDLE_SCHEMA = \"openmeld-daemon-active-bundle-v2\";\nconst ACTIVE_BUNDLE_LEGACY_SCHEMA = \"openmeld-daemon-active-bundle-v1\";\nconst INSTALL_STATE_SCHEMA = \"openmeld-daemon-install-v1\";\n\nasync function readJsonFile(path) {\n try {\n return JSON.parse(await readFile(path, \"utf8\"));\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n}\n\nasync function pathExists(path) {\n try {\n await access(path);\n return true;\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nfunction normalizeInstallState(parsed) {\n if (!parsed || parsed.schema !== INSTALL_STATE_SCHEMA || typeof parsed.daemonVersion !== \"string\" || parsed.daemonVersion.length === 0) {\n return null;\n }\n return {\n daemonVersion: parsed.daemonVersion,\n };\n}\n\nfunction normalizeBundleState(parsed) {\n if (\n parsed &&\n parsed.v === 2 &&\n parsed.schema === ACTIVE_BUNDLE_SCHEMA &&\n typeof parsed.bundleId === \"string\" &&\n parsed.bundleId.length > 0 &&\n typeof parsed.daemonVersion === \"string\" &&\n parsed.daemonVersion.length > 0 &&\n typeof parsed.entryScriptRelativePath === \"string\" &&\n parsed.entryScriptRelativePath.length > 0 &&\n (parsed.bundleFormat === \"self_contained_v1\" || parsed.bundleFormat === \"legacy_linked_v1\")\n ) {\n return parsed;\n }\n if (\n parsed &&\n parsed.v === 1 &&\n parsed.schema === ACTIVE_BUNDLE_LEGACY_SCHEMA &&\n typeof parsed.bundleId === \"string\" &&\n parsed.bundleId.length > 0 &&\n typeof parsed.daemonVersion === \"string\" &&\n parsed.daemonVersion.length > 0 &&\n typeof parsed.entryScriptRelativePath === \"string\" &&\n parsed.entryScriptRelativePath.length > 0\n ) {\n return {\n ...parsed,\n bundleFormat: \"legacy_linked_v1\",\n };\n }\n return null;\n}\n\nfunction normalizeBundlePackageManifest(parsed) {\n if (!parsed || typeof parsed.version !== \"string\" || parsed.version.length === 0) {\n return null;\n }\n return {\n version: parsed.version,\n };\n}\n\nfunction uniqueNonEmptyStrings(values) {\n return [...new Set(values.filter((value) => typeof value === \"string\" && value.length > 0))];\n}\n\nasync function findFallbackSelfContainedBundle(input) {\n const directories = await readdir(BUNDLE_ROOT_PATH, { withFileTypes: true }).catch((error) => {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return [];\n }\n throw error;\n });\n const entryScriptRelativePaths = uniqueNonEmptyStrings([\n input.preferredEntryScriptRelativePath,\n \"dist/openmeld.js\",\n \"dist/openmeld-dev.js\",\n ]);\n const candidates = [];\n for (const directory of directories) {\n if (!directory.isDirectory()) {\n continue;\n }\n const bundleId = directory.name;\n const bundlePath = join(BUNDLE_ROOT_PATH, bundleId);\n const manifest = normalizeBundlePackageManifest(\n await readJsonFile(join(bundlePath, \"package.json\"))\n );\n if (manifest?.version !== input.installState.daemonVersion) {\n continue;\n }\n for (const entryScriptRelativePath of entryScriptRelativePaths) {\n const entryPath = join(bundlePath, entryScriptRelativePath);\n if (!(await pathExists(entryPath))) {\n continue;\n }\n const entryStat = await stat(entryPath).catch(() => null);\n candidates.push({\n bundleId,\n entryPath,\n entryScriptRelativePath,\n mtimeMs: entryStat?.mtimeMs ?? 0,\n });\n break;\n }\n }\n candidates.sort((a, b) => {\n if (b.mtimeMs !== a.mtimeMs) {\n return b.mtimeMs - a.mtimeMs;\n }\n return b.bundleId.localeCompare(a.bundleId);\n });\n return candidates[0] ?? null;\n}\n\nasync function persistFallbackActiveBundleState(input) {\n const now = new Date().toISOString();\n const bundleRootPath = join(BUNDLE_ROOT_PATH, input.bundleId);\n const nextState = {\n v: 2,\n schema: ACTIVE_BUNDLE_SCHEMA,\n bundleId: input.bundleId,\n daemonVersion: input.installState.daemonVersion,\n entryScriptRelativePath: input.entryScriptRelativePath,\n bundleFormat: \"self_contained_v1\",\n sourceEntryScriptPath: input.entryPath,\n sourcePackageRootPath: bundleRootPath,\n sourceDistRootPath: join(bundleRootPath, \"dist\"),\n sourceDistFingerprint: null,\n sourceKind: \"package_install\",\n createdAt: input.previousBundleState?.createdAt ?? now,\n updatedAt: now,\n };\n await writeFile(ACTIVE_BUNDLE_PATH, \\`\\${JSON.stringify(nextState, null, 2)}\\\\n\\`, {\n encoding: \"utf8\",\n mode: 0o600,\n }).catch((error) => {\n console.error(\\`OpenMeld Service launcher recovered a matching bundle but could not update active bundle state: \\${String(error)}\\`);\n });\n}\n\nasync function resolveEntryPath() {\n const installState = normalizeInstallState(await readJsonFile(INSTALL_STATE_PATH));\n const bundleState = normalizeBundleState(await readJsonFile(ACTIVE_BUNDLE_PATH));\n if (!installState) {\n throw new Error(\"OpenMeld Service launcher could not read a valid install state.\");\n }\n if (!bundleState) {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: null,\n });\n if (!fallback) {\n throw new Error(\"OpenMeld Service launcher could not read a valid active bundle state.\");\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: null,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state was missing or invalid.\\`);\n return fallback.entryPath;\n }\n if (bundleState.bundleFormat !== \"self_contained_v1\") {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\\`OpenMeld Service launcher refused to start legacy bundle format \\${String(bundleState.bundleFormat)}.\\`);\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state used legacy bundle format \\${String(bundleState.bundleFormat)}.\\`);\n return fallback.entryPath;\n }\n if (bundleState.sourceKind === \"workspace\" && !ALLOW_WORKSPACE_BUNDLE_SOURCE) {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\"OpenMeld Service launcher refused to start repo-local workspace service files in this lane. Repo-local service files are only allowed through \\`openmeld-dev\\`.\");\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state pointed at a repo-local workspace bundle in this lane.\\`);\n return fallback.entryPath;\n }\n if (bundleState.daemonVersion !== installState.daemonVersion) {\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\\`OpenMeld Service launcher detected bundle version drift: bundle v\\${String(bundleState.daemonVersion)} != install v\\${String(installState.daemonVersion)}.\\`);\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle state had version drift.\\`);\n return fallback.entryPath;\n }\n const entryPath = join(BUNDLE_ROOT_PATH, bundleState.bundleId, bundleState.entryScriptRelativePath);\n if (await pathExists(entryPath)) {\n return entryPath;\n }\n const fallback = await findFallbackSelfContainedBundle({\n installState,\n preferredEntryScriptRelativePath: bundleState.entryScriptRelativePath,\n });\n if (!fallback) {\n throw new Error(\\`OpenMeld Service launcher could not find active bundle entry \\${entryPath}.\\`);\n }\n await persistFallbackActiveBundleState({\n ...fallback,\n installState,\n previousBundleState: bundleState,\n });\n console.error(\\`OpenMeld Service launcher recovered bundle \\${fallback.bundleId} because active bundle entry was missing.\\`);\n return fallback.entryPath;\n}\n\nasync function main() {\n const entryPath = await resolveEntryPath();\n const child = spawn(process.execPath, [entryPath, ...process.argv.slice(2)], {\n stdio: \"inherit\",\n env: process.env,\n windowsHide: true,\n });\n\n const forwardSignal = (signal) => {\n if (!child.killed) {\n child.kill(signal);\n }\n };\n\n for (const signal of [\"SIGINT\", \"SIGTERM\"]) {\n process.on(signal, () => {\n forwardSignal(signal);\n });\n }\n\n child.once(\"error\", (error) => {\n console.error(String(error));\n process.exitCode = 1;\n });\n\n child.once(\"close\", (code, signal) => {\n if (typeof code === \"number\") {\n process.exitCode = code;\n return;\n }\n if (signal) {\n process.kill(process.pid, signal);\n return;\n }\n process.exitCode = 1;\n });\n}\n\nawait main();`;\n}\n\nfunction buildDaemonServiceExecutableWrapperSource(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return [\n \"#!/bin/sh\",\n `exec ${quoteShellSingle(process.execPath)} ${quoteShellSingle(\n daemonServiceLauncherPath(pathInput)\n )} \"$@\"`,\n ].join(\"\\n\");\n}\n\nfunction quoteShellSingle(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\"'\\\"'\")}'`;\n}\n\nasync function readDirectoryNames(path: string): Promise<string[]> {\n const entries = await readdir(path, { withFileTypes: true }).catch(\n (error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return [];\n }\n throw error;\n }\n );\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n}\n\nfunction inferDaemonBundleSourceKind(\n sourcePackageRootPath: string\n): DaemonBundleSourceKind {\n const normalized = sourcePackageRootPath.replaceAll(\"\\\\\", \"/\").toLowerCase();\n if (normalized.includes(\"/.npm/\") && normalized.includes(\"_npx\")) {\n return DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE;\n }\n if (normalized.includes(\"/node_modules/\")) {\n return DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL;\n }\n if (normalized.includes(\"/openmeld/\")) {\n return DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE;\n }\n return DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN;\n}\n\nfunction isDaemonBundleFormat(value: unknown): value is DaemonBundleFormat {\n return (\n value === \"legacy_linked_v1\" ||\n value === \"self_contained_v1\" ||\n value === \"binary_v1\"\n );\n}\n\nfunction isDaemonBundleSourceKind(\n value: unknown\n): value is DaemonBundleSourceKind {\n return (\n value === DAEMON_BUNDLE_SOURCE_KIND_WORKSPACE ||\n value === DAEMON_BUNDLE_SOURCE_KIND_PACKAGE_INSTALL ||\n value === DAEMON_BUNDLE_SOURCE_KIND_NPX_CACHE ||\n value === DAEMON_BUNDLE_SOURCE_KIND_UNKNOWN\n );\n}\n\nfunction isPackageEntryResolutionError(error: unknown): boolean {\n const code = getErrorCode(error);\n return (\n code === \"MODULE_NOT_FOUND\" || code === \"ERR_PACKAGE_PATH_NOT_EXPORTED\"\n );\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nasync function resolvePreferredCliScriptPath(\n rawPath: string\n): Promise<string | null> {\n const preferredScriptNames = buildPreferredCliScriptNames(rawPath);\n const candidateRoots = [\n dirname(rawPath),\n join(process.cwd(), \"dist\"),\n join(process.cwd(), \"clients\", \"openmeld-cli\", \"dist\"),\n dirname(fileURLToPath(import.meta.url)),\n join(dirname(fileURLToPath(import.meta.url)), \"..\", \"dist\"),\n ];\n for (const scriptName of preferredScriptNames) {\n for (const candidateRoot of candidateRoots) {\n const candidatePath = join(candidateRoot, scriptName);\n if (await pathExists(candidatePath)) {\n return candidatePath;\n }\n }\n }\n return null;\n}\n\nfunction buildPreferredCliScriptNames(rawPath: string): string[] {\n const requestedScriptName = basename(rawPath).endsWith(\".js\")\n ? basename(rawPath)\n : `${basename(rawPath)}.js`;\n if (isSupportedDaemonCliEntryName(requestedScriptName)) {\n return [requestedScriptName];\n }\n if (String(process.env.OPENMELD_DEV_MODE ?? \"\").trim() === \"1\") {\n return [...DAEMON_CLI_ENTRY_NAMES];\n }\n return [...DAEMON_CLI_ENTRY_NAMES].reverse();\n}\n\nfunction isSupportedDaemonCliEntryName(\n value: string\n): value is (typeof DAEMON_CLI_ENTRY_NAMES)[number] {\n return DAEMON_CLI_ENTRY_NAMES.includes(\n value as (typeof DAEMON_CLI_ENTRY_NAMES)[number]\n );\n}\n\nfunction getErrorCode(error: unknown): string | undefined {\n if (!error || typeof error !== \"object\") {\n return undefined;\n }\n const code = (error as { code?: unknown }).code;\n return typeof code === \"string\" ? code : undefined;\n}\n","import {\n type OpenMeldPathResolutionInput,\n openMeldManagedBinaryPath,\n openMeldVersionsDir,\n} from \"../../config/paths\";\n\nconst MANAGED_BINARY_NAMES = [\"openmeld.exe\", \"openmeld\"];\nconst PATH_BOUNDARY_PATTERN = /[\\s\"'<>]/u;\nconst TRAILING_SLASHES_PATTERN = /\\/+$/u;\nconst VERSION_SEGMENT_BOUNDARY_PATTERN = /[\\s\"'<>/]/u;\n\nexport function isOpenMeldManagedBinaryPath(\n value: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): boolean {\n const normalizedPath = normalizeManagedBinaryPathText(value);\n if (\n normalizedPath ===\n normalizeManagedBinaryPathText(openMeldManagedBinaryPath(pathInput))\n ) {\n return true;\n }\n return isManagedVersionBinaryPath(normalizedPath, pathInput);\n}\n\nexport function containsOpenMeldManagedBinaryPath(\n value: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): boolean {\n const normalizedValue = normalizeManagedBinaryPathText(value);\n return (\n containsExactManagedPath(\n normalizedValue,\n normalizeManagedBinaryPathText(openMeldManagedBinaryPath(pathInput))\n ) || containsManagedVersionBinaryPath(normalizedValue, pathInput)\n );\n}\n\nexport function resolveOpenMeldManagedVersionBinaryRootPath(\n value: string\n): string | null {\n const normalizedPath = normalizeManagedBinaryPathText(value);\n const segments = normalizedPath.split(\"/\");\n const binaryName = segments.pop();\n const versionSegment = segments.pop();\n const versionsDirectory = segments.pop();\n if (\n !MANAGED_BINARY_NAMES.includes(binaryName ?? \"\") ||\n versionsDirectory !== \"versions\" ||\n !versionSegment ||\n !isValidManagedVersionSegment(versionSegment)\n ) {\n return null;\n }\n const rootPath = segments.join(\"/\");\n if (rootPath.length > 0) {\n return rootPath;\n }\n return normalizedPath.startsWith(\"/\") ? \"/\" : null;\n}\n\nfunction isManagedVersionBinaryPath(\n normalizedPath: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const versionsRoot = normalizeVersionsRoot(pathInput);\n if (!normalizedPath.startsWith(versionsRoot)) {\n return false;\n }\n const relative = normalizedPath.slice(versionsRoot.length);\n const segments = relative.split(\"/\");\n const versionSegment = segments[0] ?? \"\";\n const binaryName = segments[1] ?? \"\";\n return (\n segments.length === 2 &&\n versionSegment.length > 0 &&\n MANAGED_BINARY_NAMES.includes(binaryName)\n );\n}\n\nfunction containsManagedVersionBinaryPath(\n normalizedValue: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const versionsRoot = normalizeVersionsRoot(pathInput);\n let index = normalizedValue.indexOf(versionsRoot);\n while (index >= 0) {\n const before = index > 0 ? (normalizedValue[index - 1] ?? \"\") : \"\";\n const afterRoot = normalizedValue.slice(index + versionsRoot.length);\n const versionSeparatorIndex = afterRoot.indexOf(\"/\");\n if (\n isPathBoundary(before) &&\n versionSeparatorIndex > 0 &&\n isValidManagedVersionSegment(afterRoot.slice(0, versionSeparatorIndex))\n ) {\n const afterVersion = afterRoot.slice(versionSeparatorIndex + 1);\n for (const binaryName of MANAGED_BINARY_NAMES) {\n if (afterVersion.startsWith(binaryName)) {\n const afterBinary = afterVersion[binaryName.length] ?? \"\";\n if (isPathBoundary(afterBinary)) {\n return true;\n }\n }\n }\n }\n index = normalizedValue.indexOf(versionsRoot, index + 1);\n }\n return false;\n}\n\nfunction containsExactManagedPath(\n normalizedValue: string,\n normalizedPath: string\n): boolean {\n let index = normalizedValue.indexOf(normalizedPath);\n while (index >= 0) {\n const before = index > 0 ? (normalizedValue[index - 1] ?? \"\") : \"\";\n const after = normalizedValue[index + normalizedPath.length] ?? \"\";\n if (isPathBoundary(before) && isPathBoundary(after)) {\n return true;\n }\n index = normalizedValue.indexOf(normalizedPath, index + 1);\n }\n return false;\n}\n\nfunction normalizeVersionsRoot(pathInput: OpenMeldPathResolutionInput): string {\n return `${normalizeManagedBinaryPathText(\n openMeldVersionsDir(pathInput)\n ).replace(TRAILING_SLASHES_PATTERN, \"\")}/`;\n}\n\nfunction normalizeManagedBinaryPathText(value: string): string {\n return value.trim().replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nfunction isPathBoundary(value: string): boolean {\n return value === \"\" || PATH_BOUNDARY_PATTERN.test(value);\n}\n\nfunction isValidManagedVersionSegment(value: string): boolean {\n return value.length > 0 && !VERSION_SEGMENT_BOUNDARY_PATTERN.test(value);\n}\n","import { readFile } from \"node:fs/promises\";\nimport { relative, sep } from \"node:path\";\nimport { daemonRuntimeBundlesPath } from \"../../config/daemon-state\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldRootDir,\n} from \"../../config/paths\";\nimport {\n type OpenMeldDistribution,\n resolveOpenMeldDistribution,\n} from \"../../runtime/distribution\";\nimport { containsOpenMeldManagedBinaryPath } from \"./daemon-managed-binary-path\";\nimport {\n daemonServiceBinaryExecutablePath,\n daemonServiceExecutableWrapperPath,\n daemonServiceLauncherPath,\n daemonServiceLegacyWrapperPath,\n} from \"./daemon-service-bundle\";\nimport {\n type DaemonServiceCommandSpec,\n type DaemonServiceManager,\n resolveDaemonServiceManager,\n} from \"./daemon-service-manager\";\n\nexport async function assertDaemonMaintenanceInstallationOwnership(): Promise<void> {\n const manager = await resolveDaemonServiceManager();\n if (!manager) {\n throw new Error(\n \"OpenMeld cannot verify the background service installation.\"\n );\n }\n const status = await manager.status();\n // A missing registration can be restored from this installation's saved job.\n if (!status.installed) {\n return;\n }\n if (\n !(await matchesExpectedDaemonServiceManagerDefinition({\n controller: manager.controller,\n definitionPath: status.definitionPath ?? null,\n commandSpec: status.commandSpec,\n }))\n ) {\n throw new Error(\n \"OpenMeld background service belongs to a different installation. Automatic maintenance was stopped without changing it.\"\n );\n }\n}\n\nexport function matchesExpectedDaemonServiceManagerCommand(input: {\n controller: DaemonServiceManager[\"controller\"] | null;\n commandSummary: string;\n commandSpec?: DaemonServiceCommandSpec;\n definitionPath: string | null;\n distribution?: OpenMeldDistribution;\n includeLegacyExecutableWrappers?: boolean;\n pathInput?: OpenMeldPathResolutionInput;\n}): boolean {\n if (input.controller === \"windows-service\") {\n if (input.commandSpec) {\n return matchesWindowsTaskInstallation(input.commandSpec, input.pathInput);\n }\n return (\n typeof input.definitionPath === \"string\" &&\n input.definitionPath.length > 0 &&\n input.commandSummary.includes(input.definitionPath)\n );\n }\n if ((input.distribution ?? resolveOpenMeldDistribution()) === \"binary\") {\n if (input.controller === \"launchd\") {\n const stableExecutablePath = daemonServiceBinaryExecutablePath(\n input.pathInput\n );\n return [\n `${stableExecutablePath} service run`,\n `\"${stableExecutablePath}\" service run`,\n `'${stableExecutablePath}' service run`,\n ].some((expectedPrefix) => input.commandSummary.includes(expectedPrefix));\n }\n return containsOpenMeldManagedBinaryPath(\n input.commandSummary,\n input.pathInput\n );\n }\n return resolveExpectedDaemonServiceManagerCommandPaths({\n controller: input.controller,\n includeLegacyExecutableWrappers:\n input.includeLegacyExecutableWrappers === true,\n pathInput: input.pathInput,\n }).some((path) => input.commandSummary.includes(path));\n}\n\nexport async function matchesExpectedDaemonServiceManagerDefinition(input: {\n controller?: DaemonServiceManager[\"controller\"] | null;\n definitionPath: string | null;\n commandSpec?: DaemonServiceCommandSpec;\n distribution?: OpenMeldDistribution;\n pathInput?: OpenMeldPathResolutionInput;\n}): Promise<boolean> {\n if (input.controller === \"windows-service\" && input.commandSpec) {\n return matchesWindowsTaskInstallation(input.commandSpec, input.pathInput);\n }\n if (\n typeof input.definitionPath !== \"string\" ||\n input.definitionPath.trim().length === 0\n ) {\n return false;\n }\n\n const definition = await readFile(input.definitionPath, \"utf8\").catch(\n () => null\n );\n if (definition === null) {\n return false;\n }\n\n if ((input.distribution ?? resolveOpenMeldDistribution()) === \"binary\") {\n if (input.controller === \"launchd\") {\n const stableExecutablePath = daemonServiceBinaryExecutablePath(\n input.pathInput\n );\n return definition.includes(`<string>${stableExecutablePath}</string>`);\n }\n return containsOpenMeldManagedBinaryPath(definition, input.pathInput);\n }\n\n return resolveExpectedDaemonServiceManagerCommandPaths({\n controller: input.controller ?? null,\n pathInput: input.pathInput,\n }).some((path) => definition.includes(path));\n}\n\nfunction matchesWindowsTaskInstallation(\n spec: DaemonServiceCommandSpec,\n pathInput: OpenMeldPathResolutionInput = {}\n): boolean {\n if (\n resolveOpenMeldRootDir({ env: spec.env }) !==\n resolveOpenMeldRootDir(pathInput)\n ) {\n return false;\n }\n if (spec.args[0] === daemonServiceLauncherPath(pathInput)) {\n return spec.args[1] === \"service\" && spec.args[2] === \"run\";\n }\n const relativeExecutable = relative(\n daemonRuntimeBundlesPath(pathInput),\n spec.executable\n ).split(sep);\n return (\n relativeExecutable.length === 2 &&\n relativeExecutable[0] !== \"..\" &&\n relativeExecutable[1]?.toLowerCase() === \"openmeld.exe\" &&\n spec.args[0] === \"service\" &&\n spec.args[1] === \"run\" &&\n spec.args[2] === \"--mode\" &&\n spec.args[3] === \"foreground\" &&\n (spec.args.length === 4 ||\n (spec.args.length === 6 &&\n spec.args[4] === \"--account-admission-id\" &&\n Boolean(spec.args[5])))\n );\n}\n\nfunction resolveExpectedDaemonServiceManagerCommandPaths(input: {\n controller: DaemonServiceManager[\"controller\"] | null;\n includeLegacyExecutableWrappers?: boolean;\n pathInput?: OpenMeldPathResolutionInput;\n}): string[] {\n if (input.controller === \"launchd\") {\n return [\n daemonServiceExecutableWrapperPath(input.pathInput),\n ...(input.includeLegacyExecutableWrappers === true\n ? [daemonServiceLegacyWrapperPath(input.pathInput)]\n : []),\n ];\n }\n return [daemonServiceLauncherPath(input.pathInput)];\n}\n","import { basename } from \"node:path\";\nimport {\n daemonRuntimeBundlesPath,\n daemonServiceRecognizedExecutablePaths,\n} from \"../../config/daemon-state\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { isOpenMeldManagedBinaryPath } from \"./daemon-managed-binary-path\";\n\nconst COMMAND_TOKEN_PATTERN = /\"([^\"]*)\"|'([^']*)'|(\\S+)/g;\nconst COMMAND_ARGUMENT_BOUNDARY_PATTERN = /\\s/u;\n\nexport type DaemonServiceProcessMode = \"foreground\" | \"background\" | null;\n\nexport type DaemonServiceProcessCommand = {\n action: \"run\" | \"start\";\n mode: DaemonServiceProcessMode;\n};\n\nexport function tokenizeDaemonCommand(command: string): string[] {\n const tokens: string[] = [];\n for (const match of command.matchAll(COMMAND_TOKEN_PATTERN)) {\n const token = match[1] ?? match[2] ?? match[3];\n if (token) {\n tokens.push(token);\n }\n }\n return tokens;\n}\n\nexport function normalizeDaemonCommandPath(path: string): string {\n return path.trim().replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nexport function daemonCommandContainsExactPath(\n command: string,\n path: string\n): boolean {\n const normalizedCommand = normalizeDaemonCommandPath(command);\n const normalizedPath = normalizeDaemonCommandPath(path);\n let pathIndex = normalizedCommand.indexOf(normalizedPath);\n\n while (pathIndex >= 0) {\n const beforePath = normalizedCommand[pathIndex - 1];\n const afterPath = normalizedCommand[pathIndex + normalizedPath.length];\n if (\n isCommandArgumentBoundary(beforePath) &&\n isCommandArgumentBoundary(afterPath)\n ) {\n return true;\n }\n pathIndex = normalizedCommand.indexOf(\n normalizedPath,\n pathIndex + normalizedPath.length\n );\n }\n\n return false;\n}\n\nexport function extractDaemonCommandEntryPath(\n command: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): string | null {\n const unquotedWrapperPath = extractUnquotedDaemonWrapperPath(\n command,\n pathInput\n );\n if (unquotedWrapperPath) {\n return unquotedWrapperPath;\n }\n\n const tokens = tokenizeDaemonCommand(command);\n if (tokens.length === 0) {\n return null;\n }\n const serviceRunIndex = findDaemonServiceCommandIndex(tokens);\n const candidateTokens =\n serviceRunIndex > 0 ? tokens.slice(0, serviceRunIndex) : tokens;\n\n for (let index = candidateTokens.length - 1; index >= 0; index -= 1) {\n const token = candidateTokens[index];\n if (!(token && looksLikeDaemonEntryPath(token, pathInput))) {\n continue;\n }\n return token;\n }\n\n return null;\n}\n\nexport function isDaemonRuntimeProcessCommand(command: string): boolean {\n const serviceCommand = parseDaemonServiceProcessCommand(command);\n return (\n serviceCommand?.action === \"run\" ||\n (serviceCommand?.action === \"start\" && serviceCommand.mode === \"foreground\")\n );\n}\n\nexport function parseDaemonServiceProcessCommand(\n command: string\n): DaemonServiceProcessCommand | null {\n const tokens = tokenizeDaemonCommand(command).map((token) =>\n token.toLowerCase()\n );\n const serviceCommandIndex = findDaemonServiceCommandIndex(tokens);\n if (serviceCommandIndex < 0) {\n return null;\n }\n\n const action = tokens[serviceCommandIndex + 1];\n if (action !== \"run\" && action !== \"start\") {\n return null;\n }\n\n return {\n action,\n mode: resolveDaemonServiceProcessMode(\n tokens.slice(serviceCommandIndex + 2)\n ),\n };\n}\n\nexport function resolveDaemonBundleIdFromEntryPath(\n entryPath: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): string | null {\n const normalizedEntryPath = normalizeDaemonCommandPath(entryPath);\n const normalizedBundleRoot = `${normalizeDaemonCommandPath(\n daemonRuntimeBundlesPath(pathInput)\n )}/`;\n if (!normalizedEntryPath.startsWith(normalizedBundleRoot)) {\n return null;\n }\n const relative = normalizedEntryPath.slice(normalizedBundleRoot.length);\n const bundleId = relative.split(\"/\")[0];\n return bundleId && bundleId.length > 0 ? bundleId : null;\n}\n\nfunction looksLikeDaemonEntryPath(\n token: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const normalizedToken = normalizeDaemonCommandPath(token);\n return (\n normalizedToken.includes(\"/bundles/\") ||\n normalizedToken.includes(\"openmeld/dist/openmeld.js\") ||\n normalizedToken.endsWith(\"/openmeld.js\") ||\n normalizedToken.endsWith(\"/openmeld-dev.js\") ||\n normalizedToken.endsWith(\"/daemon-service-launcher.mjs\") ||\n isRecognizedDaemonServiceExecutableWrapperPath(token, pathInput) ||\n isOpenMeldManagedBinaryPath(token, pathInput)\n );\n}\n\nfunction findDaemonServiceCommandIndex(tokens: readonly string[]): number {\n return tokens.findIndex(\n (token, index) =>\n token === \"service\" &&\n (tokens[index + 1] === \"run\" || tokens[index + 1] === \"start\")\n );\n}\n\nfunction resolveDaemonServiceProcessMode(\n serviceArguments: readonly string[]\n): DaemonServiceProcessMode {\n let mode: DaemonServiceProcessMode = null;\n for (let index = 0; index < serviceArguments.length; index += 1) {\n const argument = serviceArguments[index];\n let modeValue: string | undefined;\n if (argument === \"--mode\") {\n modeValue = serviceArguments[index + 1];\n } else if (argument?.startsWith(\"--mode=\")) {\n modeValue = argument.slice(\"--mode=\".length);\n }\n if (modeValue === \"foreground\" || modeValue === \"background\") {\n mode = modeValue;\n }\n }\n return mode;\n}\n\nfunction isRecognizedDaemonServiceExecutableWrapperPath(\n token: string,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const normalizedToken = normalizeDaemonCommandPath(token);\n return daemonServiceRecognizedExecutablePaths(pathInput).some(\n (wrapperPath) => {\n const normalizedWrapperPath = normalizeDaemonCommandPath(wrapperPath);\n return (\n normalizedToken === normalizedWrapperPath ||\n normalizedToken.endsWith(\n `/${normalizeDaemonCommandPath(basename(wrapperPath))}`\n )\n );\n }\n );\n}\n\nfunction extractUnquotedDaemonWrapperPath(\n command: string,\n pathInput: OpenMeldPathResolutionInput\n): string | null {\n const normalizedCommand = normalizeDaemonCommandPath(command);\n const serviceRunIndex = normalizedCommand.indexOf(\" service run\");\n if (serviceRunIndex <= 0) {\n return null;\n }\n\n const commandPrefix = command.slice(0, serviceRunIndex);\n const normalizedPrefix = normalizedCommand.slice(0, serviceRunIndex);\n for (const wrapperPath of daemonServiceRecognizedExecutablePaths(pathInput)) {\n const normalizedWrapperPath = normalizeDaemonCommandPath(wrapperPath);\n const wrapperPathIndex = normalizedPrefix.lastIndexOf(\n normalizedWrapperPath\n );\n if (\n wrapperPathIndex >= 0 &&\n daemonCommandContainsExactPath(commandPrefix, wrapperPath)\n ) {\n return commandPrefix.slice(\n wrapperPathIndex,\n wrapperPathIndex + normalizedWrapperPath.length\n );\n }\n\n const wrapperName = basename(wrapperPath);\n if (!wrapperName.includes(\" \")) {\n continue;\n }\n const normalizedSuffix = `/${normalizeDaemonCommandPath(wrapperName)}`;\n const wrapperNameIndex = normalizedPrefix.lastIndexOf(normalizedSuffix);\n if (\n wrapperNameIndex < 0 ||\n wrapperNameIndex + normalizedSuffix.length !== normalizedPrefix.length\n ) {\n continue;\n }\n return commandPrefix.slice(0, wrapperNameIndex + normalizedSuffix.length);\n }\n return null;\n}\n\nfunction isCommandArgumentBoundary(char: string | undefined): boolean {\n return (\n char === undefined ||\n char === \"'\" ||\n char === '\"' ||\n COMMAND_ARGUMENT_BOUNDARY_PATTERN.test(char)\n );\n}\n","import { execFile, spawn } from \"node:child_process\";\nimport { homedir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport process from \"node:process\";\nimport { promisify } from \"node:util\";\nimport {\n powerShellEncodedArguments,\n resolveWindowsPowerShellPath,\n} from \"@openmeld/adapter-core/windows-system\";\nimport { daemonRuntimeRootPath } from \"../../config/daemon-state\";\nimport {\n OPENMELD_HOME_ENV_KEY,\n type OpenMeldEnvPreset,\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n} from \"../../config/paths\";\nimport {\n containsOpenMeldManagedBinaryPath,\n resolveOpenMeldManagedVersionBinaryRootPath,\n} from \"./daemon-managed-binary-path\";\nimport {\n daemonServiceLauncherPath,\n daemonServiceRecognizedExecutablePaths,\n} from \"./daemon-service-bundle\";\nimport {\n type DaemonServiceProcessMode,\n daemonCommandContainsExactPath,\n extractDaemonCommandEntryPath,\n isDaemonRuntimeProcessCommand,\n parseDaemonServiceProcessCommand,\n tokenizeDaemonCommand,\n} from \"./daemon-service-command-path\";\nimport { resolveDaemonServiceIdentity } from \"./daemon-service-identity\";\n\nexport type DaemonOwnedProcess = {\n pid: number;\n parentPid: number | null;\n command: string;\n mode: DaemonServiceProcessMode;\n ownership: \"stable_launcher\" | \"legacy_detached\" | \"cli_direct\" | \"unknown\";\n};\n\ntype ListedProcess = {\n pid: number;\n parentPid: number | null;\n command: string;\n};\n\nconst POSIX_PROCESS_LINE_PATTERN = /^(\\d+)\\s+(\\d+)\\s+(.+)$/;\nconst TRAILING_PATH_SEPARATOR_PATTERN = /\\/+$/u;\nconst OPENMELD_PACKAGE_INSTALL_ENTRY_SEGMENT =\n \"/node_modules/openmeld/dist/openmeld.js\";\nconst OPENMELD_DEV_LOCAL_ENTRY_SEGMENT = \"/openmeld-dev.js\";\nconst ALL_OPENMELD_ENV_PRESETS = [\n \"prod\",\n \"dev-local\",\n \"canary\",\n] as const satisfies readonly OpenMeldEnvPreset[];\nconst DAEMON_BIN_COMMAND_PATTERN_BY_PRESET = {\n prod: buildOpenMeldBinCommandPatternForPreset(\"prod\"),\n \"dev-local\": buildOpenMeldBinCommandPatternForPreset(\"dev-local\"),\n canary: buildOpenMeldBinCommandPatternForPreset(\"canary\"),\n} as const satisfies Record<OpenMeldEnvPreset, RegExp>;\n\nexport async function listDaemonOwnedProcesses(\n overrides: {\n listProcesses?: () => Promise<ListedProcess[]>;\n ignoreProcessIds?: Iterable<number>;\n pathInput?: OpenMeldPathResolutionInput;\n } = {}\n): Promise<DaemonOwnedProcess[]> {\n const listProcesses =\n overrides.listProcesses ?? listProcessesForCurrentPlatform;\n const ignoredProcessIds = new Set(\n Array.from(overrides.ignoreProcessIds ?? []).filter(\n (pid): pid is number => Number.isInteger(pid) && pid > 0\n )\n );\n const processes = await listProcesses();\n const ownedProcesses = processes\n .map((processInfo) =>\n classifyDaemonOwnedProcess(\n processInfo,\n ignoredProcessIds,\n overrides.pathInput\n )\n )\n .filter(\n (processInfo): processInfo is DaemonOwnedProcess => processInfo !== null\n );\n return collapseLauncherWrapperProcesses(ownedProcesses);\n}\n\nfunction classifyDaemonOwnedProcess(\n processInfo: ListedProcess,\n ignoredProcessIds: ReadonlySet<number>,\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonOwnedProcess | null {\n if (ignoredProcessIds.has(processInfo.pid)) {\n return null;\n }\n const normalizedCommand = normalizeProcessCommand(processInfo.command);\n const isRuntimeProcess = isDaemonRuntimeProcessCommand(normalizedCommand);\n const isLegacyDetachedProcess = normalizedCommand.includes(\"legacy-detached\");\n if (!(isRuntimeProcess || isLegacyDetachedProcess)) {\n return null;\n }\n const launcherPath = normalizeProcessCommand(\n daemonServiceLauncherPath(pathInput)\n );\n const wrapperPaths = daemonServiceRecognizedExecutablePaths(pathInput).map(\n normalizeProcessCommand\n );\n if (\n wrapperPaths.some(\n (wrapperPath) =>\n normalizedCommand.includes(wrapperPath) &&\n !daemonCommandContainsExactPath(normalizedCommand, wrapperPath)\n )\n ) {\n return null;\n }\n if (\n !looksLikeCurrentLaneDaemonCandidate({\n launcherPath,\n normalizedCommand,\n wrapperPaths,\n })\n ) {\n return null;\n }\n if (\n resolveDaemonCommandLaneScope({\n launcherPath,\n normalizedCommand,\n pathInput,\n }) !== \"current_lane\"\n ) {\n return null;\n }\n const ownership = resolveDaemonProcessOwnership(\n normalizedCommand,\n launcherPath,\n wrapperPaths,\n pathInput\n );\n const mode =\n parseDaemonServiceProcessCommand(normalizedCommand)?.mode ?? null;\n return {\n pid: processInfo.pid,\n parentPid: processInfo.parentPid,\n command: processInfo.command,\n mode,\n ownership,\n };\n}\n\nasync function listProcessesForCurrentPlatform(): Promise<ListedProcess[]> {\n if (process.platform === \"win32\") {\n return await listWindowsProcesses();\n }\n return await listPosixProcesses();\n}\n\nasync function listPosixProcesses(): Promise<ListedProcess[]> {\n const output = await runCommand(\"ps\", [\"-axo\", \"pid=,ppid=,command=\"]);\n const processes: ListedProcess[] = [];\n for (const line of output.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n const match = trimmed.match(POSIX_PROCESS_LINE_PATTERN);\n if (!(match?.[1] && match[2] && match[3])) {\n continue;\n }\n processes.push({\n pid: Number(match[1]),\n parentPid: Number(match[2]),\n command: match[3],\n });\n }\n return processes;\n}\n\nfunction resolveDaemonProcessOwnership(\n normalizedCommand: string,\n launcherPath: string,\n wrapperPaths: readonly string[],\n pathInput: OpenMeldPathResolutionInput\n): DaemonOwnedProcess[\"ownership\"] {\n const isRuntimeProcess = isDaemonRuntimeProcessCommand(normalizedCommand);\n if (\n normalizedCommand.includes(launcherPath) ||\n wrapperPaths.some((wrapperPath) =>\n daemonCommandContainsExactPath(normalizedCommand, wrapperPath)\n ) ||\n (isRuntimeProcess &&\n containsOpenMeldManagedBinaryPath(normalizedCommand, pathInput))\n ) {\n return \"stable_launcher\";\n }\n if (normalizedCommand.includes(\"legacy-detached\")) {\n return \"legacy_detached\";\n }\n if (isRuntimeProcess) {\n return \"cli_direct\";\n }\n return \"unknown\";\n}\n\nfunction looksLikeCurrentLaneDaemonCandidate(input: {\n normalizedCommand: string;\n launcherPath: string;\n wrapperPaths: readonly string[];\n}): boolean {\n return (\n isDaemonRuntimeProcessCommand(input.normalizedCommand) ||\n input.normalizedCommand.includes(input.launcherPath) ||\n input.wrapperPaths.some((wrapperPath) =>\n daemonCommandContainsExactPath(input.normalizedCommand, wrapperPath)\n ) ||\n input.normalizedCommand.includes(\"legacy-detached\")\n );\n}\n\nfunction resolveDaemonCommandLaneScope(input: {\n normalizedCommand: string;\n launcherPath: string;\n pathInput: OpenMeldPathResolutionInput;\n}): \"current_lane\" | \"other_lane\" | \"not_openmeld\" {\n const managedVersionRoot = resolveDaemonCommandManagedVersionRoot(\n input.normalizedCommand\n );\n if (managedVersionRoot) {\n const currentRoot = normalizeRootPath(\n resolveOpenMeldRootDir(input.pathInput)\n );\n return managedVersionRoot === currentRoot ? \"current_lane\" : \"other_lane\";\n }\n\n const currentLane = resolveOpenMeldEnvPreset(input.pathInput);\n const managedLane = resolveManagedDaemonPathLane({\n normalizedCommand: input.normalizedCommand,\n pathInput: input.pathInput,\n });\n if (managedLane) {\n return managedLane === currentLane ? \"current_lane\" : \"other_lane\";\n }\n\n if (hasExplicitOpenMeldHome(input.pathInput)) {\n return \"not_openmeld\";\n }\n\n const detectedLane = resolveDaemonCliCommandLane(\n input.normalizedCommand,\n input.pathInput\n );\n if (!detectedLane) {\n return \"not_openmeld\";\n }\n return detectedLane === currentLane ? \"current_lane\" : \"other_lane\";\n}\n\nfunction hasExplicitOpenMeldHome(\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n const value = (pathInput.env ?? process.env)[OPENMELD_HOME_ENV_KEY];\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction resolveDaemonCommandManagedVersionRoot(\n normalizedCommand: string\n): string | null {\n for (const token of tokenizeDaemonCommand(normalizedCommand)) {\n const rootPath = resolveOpenMeldManagedVersionBinaryRootPath(token);\n if (rootPath) {\n return normalizeRootPath(rootPath);\n }\n }\n return null;\n}\n\nfunction resolveManagedDaemonPathLane(input: {\n normalizedCommand: string;\n pathInput: OpenMeldPathResolutionInput;\n}): OpenMeldEnvPreset | null {\n const currentPreset = resolveOpenMeldEnvPreset(input.pathInput);\n for (const preset of ALL_OPENMELD_ENV_PRESETS) {\n const lanePathInput = resolveLanePathInput(input.pathInput, preset);\n const laneLauncherPath = normalizeProcessCommand(\n daemonServiceLauncherPath(lanePathInput)\n );\n const laneWrapperPaths = daemonServiceRecognizedExecutablePaths(\n lanePathInput\n ).map(normalizeProcessCommand);\n const laneRuntimeRoot = normalizeProcessCommand(\n daemonRuntimeRootPath(lanePathInput)\n );\n const laneEntryPath = extractDaemonCommandEntryPath(\n input.normalizedCommand,\n lanePathInput\n );\n const laneExecutableNames = laneWrapperPaths.map((candidatePath) =>\n basename(candidatePath)\n );\n if (\n input.normalizedCommand.includes(laneLauncherPath) ||\n laneWrapperPaths.some((wrapperPath) =>\n daemonCommandContainsExactPath(input.normalizedCommand, wrapperPath)\n ) ||\n (preset !== currentPreset &&\n laneEntryPath !== null &&\n laneExecutableNames.includes(\n normalizeProcessCommand(basename(laneEntryPath))\n )) ||\n input.normalizedCommand.includes(laneRuntimeRoot) ||\n containsOpenMeldManagedBinaryPath(input.normalizedCommand, lanePathInput)\n ) {\n return preset;\n }\n }\n return null;\n}\n\nfunction resolveDaemonCliCommandLane(\n normalizedCommand: string,\n pathInput: OpenMeldPathResolutionInput\n): OpenMeldEnvPreset | null {\n if (!isDaemonRuntimeProcessCommand(normalizedCommand)) {\n return null;\n }\n if (matchesDaemonCliLane(normalizedCommand, \"dev-local\", pathInput)) {\n return \"dev-local\";\n }\n if (matchesDaemonCliLane(normalizedCommand, \"canary\", pathInput)) {\n return \"canary\";\n }\n if (matchesDaemonCliLane(normalizedCommand, \"prod\", pathInput)) {\n return \"prod\";\n }\n return null;\n}\n\nfunction matchesDaemonCliLane(\n normalizedCommand: string,\n preset: OpenMeldEnvPreset,\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n if (DAEMON_BIN_COMMAND_PATTERN_BY_PRESET[preset].test(normalizedCommand)) {\n return true;\n }\n\n if (preset === \"dev-local\") {\n return normalizedCommand.includes(OPENMELD_DEV_LOCAL_ENTRY_SEGMENT);\n }\n\n const canaryPackageInstallRoot = resolveCanaryPackageInstallRoot(pathInput);\n if (preset === \"canary\") {\n return (\n normalizedCommand.includes(canaryPackageInstallRoot) ||\n normalizedCommand.includes(\n \"/.local/share/openmeld-canary/package-install/\"\n )\n );\n }\n\n return (\n normalizedCommand.includes(OPENMELD_PACKAGE_INSTALL_ENTRY_SEGMENT) &&\n !normalizedCommand.includes(canaryPackageInstallRoot) &&\n !normalizedCommand.includes(\n \"/.local/share/openmeld-canary/package-install/\"\n ) &&\n !normalizedCommand.includes(OPENMELD_DEV_LOCAL_ENTRY_SEGMENT)\n );\n}\n\nfunction collapseLauncherWrapperProcesses(\n processes: DaemonOwnedProcess[]\n): DaemonOwnedProcess[] {\n const launcherPidSet = new Set<number>();\n\n for (const processInfo of processes) {\n if (processInfo.ownership === \"stable_launcher\") {\n launcherPidSet.add(processInfo.pid);\n }\n }\n if (launcherPidSet.size === 0) {\n return processes;\n }\n\n const collapsedProcesses: DaemonOwnedProcess[] = [];\n for (const processInfo of processes) {\n if (processInfo.ownership === \"stable_launcher\") {\n const hasManagedChild = processes.some(\n (candidate) =>\n candidate.pid !== processInfo.pid &&\n candidate.parentPid === processInfo.pid &&\n candidate.ownership !== \"stable_launcher\"\n );\n if (hasManagedChild) {\n continue;\n }\n collapsedProcesses.push(processInfo);\n continue;\n }\n\n if (\n processInfo.parentPid !== null &&\n launcherPidSet.has(processInfo.parentPid)\n ) {\n collapsedProcesses.push({\n ...processInfo,\n ownership:\n processInfo.ownership === \"unknown\"\n ? processInfo.ownership\n : \"stable_launcher\",\n });\n continue;\n }\n\n collapsedProcesses.push(processInfo);\n }\n\n return collapsedProcesses;\n}\n\nexport async function listWindowsProcesses(): Promise<ListedProcess[]> {\n // Ask the provider for only the three fields we consume. Materializing every\n // Win32_Process property needlessly queries unrelated process details.\n const script = `\n$ErrorActionPreference='Stop'\n$ProgressPreference='SilentlyContinue'\n[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)\n[Console]::Error.WriteLine('openmeld.inventory.query_started')\n$rows = @(Get-CimInstance Win32_Process -Property ProcessId,ParentProcessId,CommandLine | Select-Object ProcessId,ParentProcessId,CommandLine)\n[Console]::Error.WriteLine('openmeld.inventory.query_completed')\nConvertTo-Json -InputObject $rows -Compress\n`;\n // execFile owns incremental UTF-8 decoding and bounded output. A timeout or\n // unreadable process table rejects; it never proves that the Service is absent.\n const startedAt = Date.now();\n const { stdout: output } = await promisify(execFile)(\n resolveWindowsPowerShellPath(),\n powerShellEncodedArguments(script),\n {\n encoding: \"utf8\",\n windowsHide: true,\n timeout: 10_000,\n maxBuffer: 8 * 1024 * 1024,\n }\n ).catch((error: unknown) => {\n const failure = error as {\n code?: unknown;\n signal?: unknown;\n killed?: unknown;\n stderr?: unknown;\n };\n const evidence = typeof failure.stderr === \"string\" ? failure.stderr : \"\";\n let phase = \"powershell_start\";\n if (evidence.includes(\"openmeld.inventory.query_completed\")) {\n phase = \"output\";\n } else if (evidence.includes(\"openmeld.inventory.query_started\")) {\n phase = \"query\";\n }\n throw new Error(\n `Windows process inventory failed after ${Date.now() - startedAt}ms (phase=${phase}, code=${String(failure.code ?? \"unknown\")}, signal=${String(failure.signal ?? \"none\")}, killed=${String(failure.killed ?? false)}).`,\n { cause: error }\n );\n });\n return parseWindowsProcessInventory(output);\n}\n\nexport function parseWindowsProcessInventory(output: string): ListedProcess[] {\n const parsed = JSON.parse(output) as\n | Array<{\n ProcessId?: number;\n ParentProcessId?: number;\n CommandLine?: string | null;\n }>\n | {\n ProcessId?: number;\n ParentProcessId?: number;\n CommandLine?: string | null;\n };\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"Windows returned an invalid process inventory.\");\n }\n const rows = Array.isArray(parsed) ? parsed : [parsed];\n const processes: ListedProcess[] = [];\n for (const row of rows) {\n if (\n !row ||\n typeof row.ProcessId !== \"number\" ||\n typeof row.ParentProcessId !== \"number\" ||\n typeof row.CommandLine !== \"string\" ||\n row.CommandLine.trim().length === 0\n ) {\n continue;\n }\n processes.push({\n pid: row.ProcessId,\n parentPid: row.ParentProcessId,\n command: row.CommandLine,\n });\n }\n return processes;\n}\n\nasync function runCommand(command: string, args: string[]): Promise<string> {\n return await new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: process.env,\n windowsHide: true,\n });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.once(\"error\", reject);\n child.once(\"close\", (code) => {\n if (code !== 0) {\n reject(\n new Error(\n `process inventory command failed: ${command} ${args.join(\" \")} ${stderr.trim()}`\n )\n );\n return;\n }\n resolve(stdout);\n });\n });\n}\n\nfunction buildOpenMeldBinCommandPatternForPreset(\n preset: OpenMeldEnvPreset\n): RegExp {\n const aliases = resolveDaemonServiceIdentity({\n env: {\n OPENMELD_ENV_PRESET: preset,\n },\n }).cliEntryAliases.map(escapeRegex);\n return new RegExp(\n `(^|[\\\\s\\\\/])(${aliases.join(\"|\")})(?:\\\\.cmd|\\\\.exe|\\\\.js)?(?=\\\\s|$)`,\n \"u\"\n );\n}\n\nfunction escapeRegex(value: string): string {\n return value.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction resolveCanaryPackageInstallRoot(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return normalizeProcessCommand(\n join(\n pathInput.homeDir ?? homedir(),\n \".local\",\n \"share\",\n \"openmeld-canary\",\n \"package-install\"\n )\n );\n}\n\nfunction resolveLanePathInput(\n pathInput: OpenMeldPathResolutionInput,\n preset: OpenMeldEnvPreset\n): OpenMeldPathResolutionInput {\n const currentPreset = resolveOpenMeldEnvPreset(pathInput);\n const env: NodeJS.ProcessEnv = {\n ...(pathInput.env ?? process.env),\n OPENMELD_ENV: preset === \"dev-local\" ? \"dev\" : preset,\n OPENMELD_ENV_PRESET: preset,\n };\n if (preset !== currentPreset && env[OPENMELD_HOME_ENV_KEY]) {\n delete env[OPENMELD_HOME_ENV_KEY];\n }\n return {\n ...pathInput,\n env,\n };\n}\n\nfunction normalizeProcessCommand(command: string): string {\n return command.trim().toLowerCase().replaceAll(\"\\\\\", \"/\");\n}\n\nfunction normalizeRootPath(path: string): string {\n const normalized = normalizeProcessCommand(path);\n return normalized === \"/\"\n ? normalized\n : normalized.replace(TRAILING_PATH_SEPARATOR_PATTERN, \"\");\n}\n","import {\n type DaemonServiceRuntimeStatus,\n type DaemonStatus,\n getDaemonRuntimeStatus,\n getDaemonStatus,\n uninstallDaemon,\n} from \"../../config/daemon-state\";\nimport {\n OPENMELD_HOME_ENV_KEY,\n type OpenMeldPathResolutionInput,\n resolveOpenMeldEnvPreset,\n} from \"../../config/paths\";\nimport type {\n DaemonServiceManager,\n DaemonServiceManagerRuntimeStatus,\n} from \"./daemon-service-manager\";\nimport { resolveDaemonServiceManager } from \"./daemon-service-manager\";\nimport { matchesExpectedDaemonServiceManagerCommand } from \"./daemon-service-manager-command-match\";\nimport type { DaemonOwnedProcess } from \"./daemon-service-process-inventory\";\nimport { listDaemonOwnedProcesses } from \"./daemon-service-process-inventory\";\n\nexport type LegacySharedDaemonServiceInspection = {\n present: boolean;\n pathInput: OpenMeldPathResolutionInput;\n installStatus: DaemonStatus;\n runtimeStatus: DaemonServiceRuntimeStatus;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n ownedProcesses: DaemonOwnedProcess[];\n};\n\nconst PROD_ENV_PRESET = \"prod\";\n\nexport function shouldInspectLegacySharedDaemonService(\n input: OpenMeldPathResolutionInput = {}\n): boolean {\n const env = input.env ?? process.env;\n if (String(env[OPENMELD_HOME_ENV_KEY] ?? \"\").trim()) {\n return false;\n }\n return resolveOpenMeldEnvPreset(input) === PROD_ENV_PRESET;\n}\n\nexport function resolveLegacySharedDaemonPathInput(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldPathResolutionInput | null {\n if (!shouldInspectLegacySharedDaemonService(input)) {\n return null;\n }\n return {\n ...input,\n env: {\n ...(input.env ?? process.env),\n OPENMELD_ENV_PRESET: PROD_ENV_PRESET,\n },\n };\n}\n\nexport function requiresLegacySharedDaemonServiceMigration(input: {\n pathInput: OpenMeldPathResolutionInput;\n runtimeStatus: DaemonServiceRuntimeStatus;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n ownedProcesses: DaemonOwnedProcess[];\n}): boolean {\n if (hasLegacySharedServiceManagerResidual(input)) {\n return true;\n }\n return hasLegacyDetachedResidual(input);\n}\n\nexport async function inspectLegacySharedDaemonService(\n input: OpenMeldPathResolutionInput = {}\n): Promise<LegacySharedDaemonServiceInspection | null> {\n const pathInput = resolveLegacySharedDaemonPathInput(input);\n if (!pathInput) {\n return null;\n }\n\n const [installStatus, runtimeStatus, serviceManager, ownedProcesses] =\n await Promise.all([\n getDaemonStatus(pathInput),\n getDaemonRuntimeStatus(pathInput),\n resolveDaemonServiceManager(undefined, pathInput).catch(() => null),\n listDaemonOwnedProcesses({ pathInput }).catch(() => []),\n ]);\n\n const serviceManagerStatus = serviceManager\n ? await serviceManager\n .status()\n .catch<DaemonServiceManagerRuntimeStatus | null>(() => null)\n : null;\n\n const present = requiresLegacySharedDaemonServiceMigration({\n pathInput,\n runtimeStatus,\n serviceManager,\n serviceManagerStatus,\n ownedProcesses,\n });\n\n return {\n present,\n pathInput,\n installStatus,\n runtimeStatus,\n serviceManager,\n serviceManagerStatus,\n ownedProcesses,\n };\n}\n\nfunction hasLegacySharedServiceManagerResidual(input: {\n pathInput: OpenMeldPathResolutionInput;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n}): boolean {\n if (!input.serviceManagerStatus?.installed) {\n return false;\n }\n if (!input.serviceManagerStatus.commandSummary) {\n return true;\n }\n return !matchesExpectedDaemonServiceManagerCommand({\n controller: input.serviceManager?.controller ?? null,\n commandSummary: input.serviceManagerStatus.commandSummary,\n commandSpec: input.serviceManagerStatus.commandSpec,\n definitionPath: input.serviceManagerStatus.definitionPath ?? null,\n includeLegacyExecutableWrappers: true,\n pathInput: input.pathInput,\n });\n}\n\nfunction hasLegacyDetachedResidual(input: {\n runtimeStatus: DaemonServiceRuntimeStatus;\n ownedProcesses: DaemonOwnedProcess[];\n}): boolean {\n if (input.runtimeStatus.serviceController === \"legacy-detached\") {\n return true;\n }\n return input.ownedProcesses.some(\n (processInfo) => processInfo.ownership === \"legacy_detached\"\n );\n}\n\nexport async function cleanupLegacySharedDaemonServiceState(\n input: OpenMeldPathResolutionInput = {}\n): Promise<{ removed: boolean }> {\n const pathInput = resolveLegacySharedDaemonPathInput(input);\n if (!pathInput) {\n return { removed: false };\n }\n const legacySharedService = await inspectLegacySharedDaemonService(input);\n let removedServiceManager = false;\n if (\n legacySharedService?.present &&\n legacySharedService.serviceManager &&\n legacySharedService.serviceManagerStatus?.installed\n ) {\n await legacySharedService.serviceManager.uninstall();\n await legacySharedService.serviceManager.waitUntilAbsent();\n removedServiceManager = true;\n }\n const uninstallResult = await uninstallDaemon(pathInput);\n return {\n removed: removedServiceManager || uninstallResult.removed,\n };\n}\n","import process from \"node:process\";\nimport type { DaemonRuntimeLease } from \"@openmeld/schemas/types\";\nimport {\n DAEMON_HEARTBEAT_STALE_MS,\n type DaemonServiceRuntimeStatus,\n} from \"../../config/daemon-state\";\nimport { extractDaemonCommandEntryPath } from \"./daemon-service-command-path\";\nimport type { DaemonOwnedProcess } from \"./daemon-service-process-inventory\";\n\nexport function resolveObservedDaemonRuntimeStatus(input: {\n runtimeLease: DaemonRuntimeLease | null;\n ownedProcesses: readonly DaemonOwnedProcess[];\n}): DaemonServiceRuntimeStatus {\n const runtimeLeaseIssue = resolveRuntimeLeaseIssue(input.runtimeLease);\n const observedProcess = selectObservedRuntimeProcess(input.ownedProcesses);\n\n if (!runtimeLeaseIssue && input.runtimeLease) {\n return {\n status: \"running\",\n mode: input.runtimeLease.mode,\n pid: input.runtimeLease.pid,\n startedAt: input.runtimeLease.startedAt,\n updatedAt: input.runtimeLease.updatedAt,\n managedBySystemService: input.runtimeLease.managedBySystemService,\n serviceController: input.runtimeLease.serviceController,\n autoStart: input.runtimeLease.managedBySystemService,\n };\n }\n\n if (observedProcess) {\n return {\n status: \"stale\",\n mode: observedProcess.mode,\n pid: observedProcess.pid,\n startedAt: input.runtimeLease?.startedAt ?? null,\n updatedAt: input.runtimeLease?.updatedAt ?? null,\n managedBySystemService: observedProcess.ownership === \"stable_launcher\",\n serviceController:\n observedProcess.ownership === \"legacy_detached\"\n ? \"legacy-detached\"\n : \"unknown\",\n autoStart: observedProcess.ownership === \"stable_launcher\",\n reason: runtimeLeaseIssue ?? \"runtime_lease_missing\",\n };\n }\n\n if (!input.runtimeLease) {\n return {\n status: \"not_running\",\n mode: null,\n pid: null,\n startedAt: null,\n updatedAt: null,\n managedBySystemService: false,\n serviceController: \"unknown\",\n autoStart: false,\n };\n }\n\n return {\n status: \"stale\",\n mode: input.runtimeLease.mode,\n pid: input.runtimeLease.pid,\n startedAt: input.runtimeLease.startedAt,\n updatedAt: input.runtimeLease.updatedAt,\n managedBySystemService: input.runtimeLease.managedBySystemService,\n serviceController: input.runtimeLease.serviceController,\n autoStart: input.runtimeLease.managedBySystemService,\n reason: runtimeLeaseIssue ?? \"runtime_lease_missing\",\n };\n}\n\nexport function resolveObservedRuntimeCommandEntryPath(input: {\n ownedProcesses: readonly DaemonOwnedProcess[];\n runtimeStatus: DaemonServiceRuntimeStatus;\n}): string | null {\n const runtimePid =\n typeof input.runtimeStatus.pid === \"number\"\n ? input.runtimeStatus.pid\n : null;\n if (!runtimePid) {\n return null;\n }\n const runtimeProcess = input.ownedProcesses.find(\n (processInfo) => processInfo.pid === runtimePid\n );\n if (!runtimeProcess) {\n return null;\n }\n return extractDaemonCommandEntryPath(runtimeProcess.command);\n}\n\nfunction resolveRuntimeLeaseIssue(\n runtimeLease: DaemonRuntimeLease | null\n): string | null {\n if (!runtimeLease) {\n return \"runtime_lease_missing\";\n }\n\n if (!Number.isInteger(runtimeLease.pid) || runtimeLease.pid <= 0) {\n return \"invalid_pid\";\n }\n\n if (!isPidAlive(runtimeLease.pid)) {\n return \"process_not_alive\";\n }\n\n if (isRuntimeLeaseHeartbeatStale(runtimeLease)) {\n return \"heartbeat_stale\";\n }\n\n return null;\n}\n\nfunction selectObservedRuntimeProcess(\n ownedProcesses: readonly DaemonOwnedProcess[]\n): DaemonOwnedProcess | null {\n const sortedProcesses = [...ownedProcesses].sort((left, right) => {\n const priorityDifference =\n resolveOwnershipPriority(left.ownership) -\n resolveOwnershipPriority(right.ownership);\n if (priorityDifference !== 0) {\n return priorityDifference;\n }\n const modeDifference =\n resolveModePriority(left.mode) - resolveModePriority(right.mode);\n if (modeDifference !== 0) {\n return modeDifference;\n }\n return left.pid - right.pid;\n });\n return sortedProcesses[0] ?? null;\n}\n\nfunction resolveOwnershipPriority(\n ownership: DaemonOwnedProcess[\"ownership\"]\n): number {\n switch (ownership) {\n case \"stable_launcher\":\n return 0;\n case \"legacy_detached\":\n return 1;\n case \"cli_direct\":\n return 2;\n default:\n return 3;\n }\n}\n\nfunction resolveModePriority(mode: DaemonOwnedProcess[\"mode\"]): number {\n switch (mode) {\n case \"background\":\n return 0;\n case \"foreground\":\n return 1;\n default:\n return 2;\n }\n}\n\nfunction isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isRuntimeLeaseHeartbeatStale(\n runtimeLease: DaemonRuntimeLease\n): boolean {\n const freshnessTimestamp = runtimeLease.heartbeatAt ?? runtimeLease.updatedAt;\n const heartbeatMs = Date.parse(freshnessTimestamp);\n if (Number.isNaN(heartbeatMs)) {\n return true;\n }\n return Date.now() - heartbeatMs > DAEMON_HEARTBEAT_STALE_MS;\n}\n","import process from \"node:process\";\nimport { sleep } from \"@openmeld/utils\";\nimport { readDaemonRuntimeLease } from \"../../config/daemon-runtime-lease\";\nimport type {\n DaemonServiceRuntimeStatus,\n DaemonStatus,\n} from \"../../config/daemon-state\";\nimport {\n clearDaemonServiceRuntimeState,\n getDaemonStatus,\n} from \"../../config/daemon-state\";\nimport {\n inspectLegacySharedDaemonService,\n type LegacySharedDaemonServiceInspection,\n} from \"./daemon-service-legacy-shared\";\nimport {\n type DaemonServiceManager,\n type DaemonServiceManagerRuntimeStatus,\n resolveDaemonServiceManager,\n} from \"./daemon-service-manager\";\nimport { listDaemonOwnedProcesses } from \"./daemon-service-process-inventory\";\nimport { resolveObservedDaemonRuntimeStatus } from \"./daemon-service-runtime-observer\";\n\nconst DEFAULT_SYSTEM_SERVICE_STOP_WAIT_MS = 3000;\nconst DEFAULT_SYSTEM_SERVICE_STOP_POLL_MS = 200;\n\nexport type CurrentDaemonRuntimeContext = {\n status: DaemonStatus;\n runtimeStatus: DaemonServiceRuntimeStatus;\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n legacySharedService: LegacySharedDaemonServiceInspection | null;\n effectiveRuntimeStatus: DaemonServiceRuntimeStatus[\"status\"];\n};\n\nexport type DaemonRuntimeCleanupDecision = {\n context: CurrentDaemonRuntimeContext;\n cleared: boolean;\n};\n\nexport async function readCurrentObservedDaemonRuntimeStatus(): Promise<DaemonServiceRuntimeStatus> {\n return await readObservedRuntimeState();\n}\n\nexport async function clearDaemonRuntimeStateIfDefinitelyStopped(): Promise<DaemonRuntimeCleanupDecision> {\n const context = await readCurrentDaemonRuntimeContext();\n const isDefinitelyStopped =\n context.effectiveRuntimeStatus === \"not_running\" ||\n (await isStoppedSystemServiceSnapshot(context));\n if (!isDefinitelyStopped) {\n return {\n context,\n cleared: false,\n };\n }\n await clearDaemonServiceRuntimeState();\n return {\n context,\n cleared: true,\n };\n}\n\nasync function isStoppedSystemServiceSnapshot(\n context: CurrentDaemonRuntimeContext\n): Promise<boolean> {\n if (\n context.runtimeStatus.status !== \"stale\" ||\n !context.runtimeStatus.managedBySystemService ||\n context.serviceManagerStatus?.running !== false\n ) {\n return false;\n }\n\n const ownedProcesses = await listDaemonOwnedProcesses({\n ignoreProcessIds: [process.pid, process.ppid],\n });\n return ownedProcesses.length === 0;\n}\n\nexport async function readCurrentDaemonRuntimeContext(\n input: { status?: DaemonStatus | null } = {}\n): Promise<CurrentDaemonRuntimeContext> {\n const status = input.status ?? (await getDaemonStatus());\n const runtimeStatus = await readCurrentObservedDaemonRuntimeStatus();\n const { serviceManager, serviceManagerStatus, legacySharedService } =\n await resolveDaemonServiceManagerForRuntimeState({\n status,\n runtimeState: runtimeStatus,\n });\n const effectiveRuntimeStatus = getEffectiveDaemonRuntimeStatus({\n runtimeState: runtimeStatus,\n serviceManagerStatus,\n });\n\n return {\n status,\n runtimeStatus,\n serviceManager,\n serviceManagerStatus,\n legacySharedService,\n effectiveRuntimeStatus,\n };\n}\n\nexport async function resolveDaemonRuntimeState(\n status: DaemonStatus\n): Promise<DaemonServiceRuntimeStatus | null> {\n if (!status.installed) {\n return null;\n }\n return await readCurrentObservedDaemonRuntimeStatus();\n}\n\nexport async function resolveDaemonServiceManagerFromRuntimeState(\n runtimeState: DaemonServiceRuntimeStatus | null\n): Promise<DaemonServiceManager | null> {\n if (!runtimeState?.managedBySystemService) {\n return null;\n }\n\n if (runtimeState.serviceController === \"legacy-detached\") {\n return null;\n }\n\n return await resolveDaemonServiceManager(runtimeState.serviceController);\n}\n\nexport async function resolveDaemonServiceManagerForRuntimeState(input: {\n status: DaemonStatus;\n runtimeState: DaemonServiceRuntimeStatus | null;\n}): Promise<{\n serviceManager: DaemonServiceManager | null;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n legacySharedService: LegacySharedDaemonServiceInspection | null;\n}> {\n const initialManager = await resolveDaemonServiceManagerFromRuntimeState(\n input.runtimeState\n );\n const initialManagerStatus = initialManager\n ? await initialManager\n .status()\n .catch<DaemonServiceManagerRuntimeStatus | null>(() => null)\n : null;\n\n if (\n input.status.installed &&\n input.runtimeState?.managedBySystemService !== true &&\n !initialManagerStatus?.installed\n ) {\n const detectedManager = await resolveDaemonServiceManager().catch<null>(\n () => null\n );\n if (detectedManager) {\n const detectedManagerStatus = await detectedManager\n .status()\n .catch<DaemonServiceManagerRuntimeStatus | null>(() => null);\n if (detectedManagerStatus?.installed) {\n return {\n serviceManager: detectedManager,\n serviceManagerStatus: detectedManagerStatus,\n legacySharedService: null,\n };\n }\n }\n }\n\n const legacySharedService = await inspectLegacySharedDaemonService().catch(\n () => null\n );\n if (\n legacySharedService?.present &&\n legacySharedService.serviceManagerStatus?.installed\n ) {\n const legacyManager =\n legacySharedService.serviceManager ??\n (await resolveDaemonServiceManager(\n legacySharedService.runtimeStatus.serviceController === \"unknown\"\n ? undefined\n : legacySharedService.runtimeStatus.serviceController,\n legacySharedService.pathInput\n ).catch(() => null));\n if (legacyManager) {\n return {\n serviceManager: legacyManager,\n serviceManagerStatus: legacySharedService.serviceManagerStatus,\n legacySharedService,\n };\n }\n }\n\n return {\n serviceManager: initialManager,\n serviceManagerStatus: initialManagerStatus,\n legacySharedService,\n };\n}\n\nexport function getEffectiveDaemonRuntimeStatus(input: {\n runtimeState: DaemonServiceRuntimeStatus;\n serviceManagerStatus: DaemonServiceManagerRuntimeStatus | null;\n}): DaemonServiceRuntimeStatus[\"status\"] {\n if (input.runtimeState.status === \"running\") {\n return \"running\";\n }\n\n if (\n !(input.runtimeState.managedBySystemService && input.serviceManagerStatus)\n ) {\n return input.runtimeState.status;\n }\n\n if (input.runtimeState.status === \"stale\") {\n if (input.runtimeState.reason === \"heartbeat_stale\") {\n return \"stale\";\n }\n if (input.serviceManagerStatus.running) {\n return \"running\";\n }\n if (!input.serviceManagerStatus.enabled) {\n return \"not_running\";\n }\n }\n\n if (!input.serviceManagerStatus.running) {\n return \"not_running\";\n }\n\n return input.runtimeState.status;\n}\n\nexport async function waitForDaemonSystemServiceToStop(input: {\n manager: DaemonServiceManager;\n waitMs?: number;\n pollMs?: number;\n}): Promise<boolean> {\n const waitMs = input.waitMs ?? DEFAULT_SYSTEM_SERVICE_STOP_WAIT_MS;\n const pollMs = input.pollMs ?? DEFAULT_SYSTEM_SERVICE_STOP_POLL_MS;\n const deadlineMs = Date.now() + waitMs;\n\n while (Date.now() < deadlineMs) {\n const currentRuntime = await readCurrentObservedDaemonRuntimeStatus().catch(\n () => null\n );\n const managerStatus = await input.manager.status().catch(() => null);\n\n if (\n managerStatus?.running === false &&\n currentRuntime !== null &&\n currentRuntime.status !== \"running\"\n ) {\n return true;\n }\n\n if (\n currentRuntime?.status === \"stale\" &&\n !currentRuntime.managedBySystemService\n ) {\n return true;\n }\n\n if (currentRuntime?.status === \"not_running\") {\n return true;\n }\n\n await sleep(pollMs);\n }\n\n const finalRuntime = await readCurrentObservedDaemonRuntimeStatus().catch(\n () => null\n );\n if (finalRuntime?.status === \"not_running\") {\n return true;\n }\n\n if (\n finalRuntime?.status === \"stale\" &&\n !finalRuntime.managedBySystemService\n ) {\n return true;\n }\n\n if (finalRuntime?.status === \"running\") {\n return false;\n }\n\n if (finalRuntime === null) {\n return false;\n }\n\n const finalManagerStatus = await input.manager.status().catch(() => null);\n return finalManagerStatus?.running === false;\n}\n\nasync function readObservedRuntimeState(): Promise<DaemonServiceRuntimeStatus> {\n const ignoredProcessIds = [process.pid, process.ppid].filter(\n (pid): pid is number => Number.isInteger(pid) && pid > 0\n );\n const [runtimeLease, ownedProcesses] = await Promise.all([\n readDaemonRuntimeLease().catch(() => null),\n listDaemonOwnedProcesses({\n ignoreProcessIds: ignoredProcessIds,\n }),\n ]);\n return resolveObservedDaemonRuntimeStatus({\n runtimeLease,\n ownedProcesses,\n });\n}\n"],"mappings":"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"}