openmeld 0.3.288 → 0.3.290
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-me-membership-BQl3NpHs.js → add-me-membership-inSSCZiT.js} +2 -2
- package/dist/{add-me-membership-BQl3NpHs.js.map → add-me-membership-inSSCZiT.js.map} +1 -1
- package/dist/{agents-B0w90SR9.js → agents-Dai79qvd.js} +10 -10
- package/dist/{agents-B0w90SR9.js.map → agents-Dai79qvd.js.map} +1 -1
- package/dist/{api-client-foundation-RM1pxGSx.js → api-client-foundation-BFlKjR9I.js} +1 -1
- package/dist/{api-client-foundation-i2KBsQ7r.js → api-client-foundation-DERyHDAT.js} +6 -6
- package/dist/{api-client-foundation-i2KBsQ7r.js.map → api-client-foundation-DERyHDAT.js.map} +1 -1
- package/dist/{auth-session-DRQMn41Z.js → auth-session-B2lS_bSW.js} +4 -4
- package/dist/{auth-session-DRQMn41Z.js.map → auth-session-B2lS_bSW.js.map} +1 -1
- package/dist/auth-session-Cj6PrTZ3.js +3 -0
- package/dist/{auth-url-Dnpds8Yf.js → auth-url-LPP-DGsD.js} +2 -2
- package/dist/{auth-url-Dnpds8Yf.js.map → auth-url-LPP-DGsD.js.map} +1 -1
- package/dist/{base-url-b30kK86t.js → base-url-DuppOOaB.js} +2 -2
- package/dist/{base-url-b30kK86t.js.map → base-url-DuppOOaB.js.map} +1 -1
- package/dist/{base-url-Mw6hstaO.js → base-url-GJgAnOwO.js} +1 -1
- package/dist/{channel-CFIRo4fR.js → channel-DFsCrkPT.js} +17 -6
- package/dist/channel-DFsCrkPT.js.map +1 -0
- package/dist/{client-CBTgmyFC.js → client-BoQLTU0k.js} +2 -2
- package/dist/{client-CBTgmyFC.js.map → client-BoQLTU0k.js.map} +1 -1
- package/dist/{cloud-computer-CuWSimwt.js → cloud-computer-DYQpdovK.js} +6 -6
- package/dist/{cloud-computer-CuWSimwt.js.map → cloud-computer-DYQpdovK.js.map} +1 -1
- package/dist/{command-BqcCAQJ_.js → command-BMssGnS1.js} +19 -19
- package/dist/{command-BqcCAQJ_.js.map → command-BMssGnS1.js.map} +1 -1
- package/dist/{computer-connection-review-Bw3C24LC.js → computer-connection-review-B2VBvkUf.js} +5 -5
- package/dist/{computer-connection-review-Bw3C24LC.js.map → computer-connection-review-B2VBvkUf.js.map} +1 -1
- package/dist/{computer-disconnect-BXUbY8kY.js → computer-disconnect-BsO7SqGv.js} +9 -9
- package/dist/{computer-disconnect-BXUbY8kY.js.map → computer-disconnect-BsO7SqGv.js.map} +1 -1
- package/dist/{computer-setup-continuation-uk5s7_vp.js → computer-setup-continuation-DN9nvTdz.js} +5 -5
- package/dist/{computer-setup-continuation-uk5s7_vp.js.map → computer-setup-continuation-DN9nvTdz.js.map} +1 -1
- package/dist/{computer-update-wait-Bm_oW5Ne.js → computer-update-wait-DjNHPLHV.js} +4 -4
- package/dist/{computer-update-wait-Bm_oW5Ne.js.map → computer-update-wait-DjNHPLHV.js.map} +1 -1
- package/dist/{context-BvLQjNGR.js → context-C6GiteNY.js} +8 -8
- package/dist/{context-BvLQjNGR.js.map → context-C6GiteNY.js.map} +1 -1
- package/dist/{daemon-device-id-D-RHe9se.js → daemon-device-id-CGV19VtH.js} +4 -4
- package/dist/{daemon-device-id-D-RHe9se.js.map → daemon-device-id-CGV19VtH.js.map} +1 -1
- package/dist/{daemon-lifecycle-journal-AyDo0rCV.js → daemon-lifecycle-journal-YFnaFEDn.js} +4 -4
- package/dist/{daemon-lifecycle-journal-AyDo0rCV.js.map → daemon-lifecycle-journal-YFnaFEDn.js.map} +1 -1
- package/dist/{daemon-runtime-lease-CslvUjEq.js → daemon-runtime-lease-CgP8D7m8.js} +1 -1
- package/dist/{daemon-runtime-lease-DRYVXnBQ.js → daemon-runtime-lease-IKWq2O8q.js} +2 -2
- package/dist/{daemon-runtime-lease-DRYVXnBQ.js.map → daemon-runtime-lease-IKWq2O8q.js.map} +1 -1
- package/dist/{daemon-service-contract-CsANv7K_.js → daemon-service-contract-D8osKBM6.js} +2 -2
- package/dist/{daemon-service-contract-CsANv7K_.js.map → daemon-service-contract-D8osKBM6.js.map} +1 -1
- package/dist/{daemon-service-manager-DS4kFs8x.js → daemon-service-manager-CAGPGW2q.js} +1 -1
- package/dist/{daemon-service-manager-a5tY3qpR.js → daemon-service-manager-DB2rSviv.js} +4 -4
- package/dist/{daemon-service-manager-a5tY3qpR.js.map → daemon-service-manager-DB2rSviv.js.map} +1 -1
- package/dist/{daemon-service-runtime-CMi7bRwi.js → daemon-service-runtime-Dnu6mxCS.js} +12 -12
- package/dist/{daemon-service-runtime-CMi7bRwi.js.map → daemon-service-runtime-Dnu6mxCS.js.map} +1 -1
- package/dist/{daemon-service-update-state-BSn45OHj.js → daemon-service-update-state-GCIZ6nGp.js} +2 -2
- package/dist/{daemon-service-update-state-BSn45OHj.js.map → daemon-service-update-state-GCIZ6nGp.js.map} +1 -1
- package/dist/{daemon-state-CTOVPwNq.js → daemon-state-C72A-n6c.js} +3 -3
- package/dist/{daemon-state-CTOVPwNq.js.map → daemon-state-C72A-n6c.js.map} +1 -1
- package/dist/{dispatch-owned-runtime-CCeQTcjr.js → dispatch-owned-runtime-CoVWIxYl.js} +12 -12
- package/dist/{dispatch-owned-runtime-CCeQTcjr.js.map → dispatch-owned-runtime-CoVWIxYl.js.map} +1 -1
- package/dist/{dist-53uvP0DN.js → dist-BC0SB_h-.js} +3 -3
- package/dist/{dist-53uvP0DN.js.map → dist-BC0SB_h-.js.map} +1 -1
- package/dist/{dist-CqU093n8.js → dist-BuqY1gad.js} +2 -2
- package/dist/dist-DahbdeDi.js +34 -0
- package/dist/{dist-D7SkvUZW.js → dist-VZtPE-jT.js} +2 -2
- package/dist/{dist-D7SkvUZW.js.map → dist-VZtPE-jT.js.map} +1 -1
- package/dist/{dist-CZyGORfc.js → dist-zOvEcl-o.js} +1 -1
- package/dist/{dual-view-guide-catalog-Buq8NAPC.js → dual-view-guide-catalog-DJVTHfKM.js} +4 -4
- package/dist/{dual-view-guide-catalog-Buq8NAPC.js.map → dual-view-guide-catalog-DJVTHfKM.js.map} +1 -1
- package/dist/{elapsed-time-jRFzKVlC.js → elapsed-time-CzR72jgL.js} +2 -2
- package/dist/{elapsed-time-jRFzKVlC.js.map → elapsed-time-CzR72jgL.js.map} +1 -1
- package/dist/{entry-D-22_x6G.js → entry-hCEOH64N.js} +152 -82
- package/dist/entry-hCEOH64N.js.map +1 -0
- package/dist/{installation-inventory-B7Lj2s1Y.js → installation-inventory-CsSfOQgL.js} +4 -4
- package/dist/{installation-inventory-B7Lj2s1Y.js.map → installation-inventory-CsSfOQgL.js.map} +1 -1
- package/dist/{installer-BgUOrcah.js → installer-BytXmECH.js} +2 -2
- package/dist/{installer-BgUOrcah.js.map → installer-BytXmECH.js.map} +1 -1
- package/dist/{lock-DP8d33p_.js → lock-B0YzvcUu.js} +3 -3
- package/dist/lock-B0YzvcUu.js.map +1 -0
- package/dist/{meta-api-32dKpaJB.js → meta-api-YLzAzgov.js} +8 -8
- package/dist/{meta-api-32dKpaJB.js.map → meta-api-YLzAzgov.js.map} +1 -1
- package/dist/{openmeld-BOBD0Any.js → openmeld-Dt4vpNjB.js} +43 -43
- package/dist/{openmeld-BOBD0Any.js.map → openmeld-Dt4vpNjB.js.map} +1 -1
- package/dist/{openmeld-dev-environment-CAETyazL.js → openmeld-dev-environment-Rl0tTXNd.js} +3 -3
- package/dist/{openmeld-dev-environment-CAETyazL.js.map → openmeld-dev-environment-Rl0tTXNd.js.map} +1 -1
- package/dist/openmeld-dev.js +1 -1
- package/dist/{openmeld-environment-target-DydyKO8Z.js → openmeld-environment-target-KDkHbyUB.js} +4 -4
- package/dist/{openmeld-environment-target-DydyKO8Z.js.map → openmeld-environment-target-KDkHbyUB.js.map} +1 -1
- package/dist/{openmeld-maintenance-worker-C99TPCOq.js → openmeld-maintenance-worker-BIWvvyIf.js} +16 -16
- package/dist/{openmeld-maintenance-worker-C99TPCOq.js.map → openmeld-maintenance-worker-BIWvvyIf.js.map} +1 -1
- package/dist/{openmeld-tools-update-attempt-state-B6t53OYC.js → openmeld-tools-update-attempt-state-sK3W06wI.js} +2 -2
- package/dist/{openmeld-tools-update-attempt-state-B6t53OYC.js.map → openmeld-tools-update-attempt-state-sK3W06wI.js.map} +1 -1
- package/dist/{openmeld-tools-update-coordinator-DkC6z3PV.js → openmeld-tools-update-coordinator-BWFtknlg.js} +31 -26
- package/dist/{openmeld-tools-update-coordinator-DkC6z3PV.js.map → openmeld-tools-update-coordinator-BWFtknlg.js.map} +1 -1
- package/dist/{openmeld-tools-update-join-B0bVe2pL.js → openmeld-tools-update-join-vlA-GmSh.js} +4 -4
- package/dist/{openmeld-tools-update-join-B0bVe2pL.js.map → openmeld-tools-update-join-vlA-GmSh.js.map} +1 -1
- package/dist/openmeld.js +5 -5
- package/dist/{prepare-provider-runtime-m0GVd1Za.js → prepare-provider-runtime-D4X1jiYQ.js} +33 -17
- package/dist/prepare-provider-runtime-D4X1jiYQ.js.map +1 -0
- package/dist/{prepare-session-executor-C8tvGy6j.js → prepare-session-executor-Cwe666D0.js} +24 -24
- package/dist/{prepare-session-executor-C8tvGy6j.js.map → prepare-session-executor-Cwe666D0.js.map} +1 -1
- package/dist/{presenter-DMoE2U_q.js → presenter-CfWGbWdq.js} +2 -2
- package/dist/{presenter-DMoE2U_q.js.map → presenter-CfWGbWdq.js.map} +1 -1
- package/dist/{process-channel-DtJ01mUI.js → process-channel-AjxeujN8.js} +2 -2
- package/dist/{process-channel-DtJ01mUI.js.map → process-channel-AjxeujN8.js.map} +1 -1
- package/dist/{runtime-DDZRXE1m.js → runtime-DVaIwyJM.js} +163 -75
- package/dist/runtime-DVaIwyJM.js.map +1 -0
- package/dist/{runtime-agent-controller-reporting-submission-Br2qDki0.js → runtime-agent-controller-reporting-submission-CkiUg9j0.js} +8 -8
- package/dist/{runtime-agent-controller-reporting-submission-Br2qDki0.js.map → runtime-agent-controller-reporting-submission-CkiUg9j0.js.map} +1 -1
- package/dist/{runtime-transport-Dg7E0ROH.js → runtime-transport-CLpKUHk_.js} +5 -1
- package/dist/{runtime-transport-Dg7E0ROH.js.map → runtime-transport-CLpKUHk_.js.map} +1 -1
- package/dist/{sensitive-operation-credentials-Dr_neVvL.js → sensitive-operation-credentials-D9DHfCDf.js} +4 -4
- package/dist/{sensitive-operation-credentials-Dr_neVvL.js.map → sensitive-operation-credentials-D9DHfCDf.js.map} +1 -1
- package/dist/{service-CjVGm1FB.js → service-BoxFPDKp.js} +104 -37
- package/dist/service-BoxFPDKp.js.map +1 -0
- package/dist/{service-account-authorization-DiSsm3hB.js → service-account-authorization-MARMxBls.js} +5 -5
- package/dist/{service-account-authorization-DiSsm3hB.js.map → service-account-authorization-MARMxBls.js.map} +1 -1
- package/dist/{service-account-control-C3jIB8Pg.js → service-account-control-D0f6SaS2.js} +13 -13
- package/dist/{service-account-control-C3jIB8Pg.js.map → service-account-control-D0f6SaS2.js.map} +1 -1
- package/dist/{service-control-capabilities-Bd2t4hQ4.js → service-control-capabilities-C5lV5eqZ.js} +5 -5
- package/dist/{service-control-capabilities-Bd2t4hQ4.js.map → service-control-capabilities-C5lV5eqZ.js.map} +1 -1
- package/dist/{service-control-capabilities-IVIJRGI7.js → service-control-capabilities-DVnJWbBU.js} +1 -1
- package/dist/{state-YbqBm7wx.js → state-LIaPm3LW.js} +2 -2
- package/dist/{state-YbqBm7wx.js.map → state-LIaPm3LW.js.map} +1 -1
- package/dist/{updates-api-D4OvCDcm.js → updates-api-CV0uvAN1.js} +81 -77
- package/dist/updates-api-CV0uvAN1.js.map +1 -0
- package/dist/upgrade-Bi-kRFVX.js +3 -0
- package/dist/{upgrade-BWDsvax2.js → upgrade-C23MjDuG.js} +10 -10
- package/dist/{upgrade-BWDsvax2.js.map → upgrade-C23MjDuG.js.map} +1 -1
- package/dist/windows/openmeld-windows-process.exe +0 -0
- package/dist/{windows-user-task-CKb_u29X.js → windows-user-task-CR64LZEK.js} +3 -3
- package/dist/{windows-user-task-CKb_u29X.js.map → windows-user-task-CR64LZEK.js.map} +1 -1
- package/dist/{windows-user-task-zYK9uy2K.js → windows-user-task-Dr1wlrfz.js} +1 -1
- package/package.json +9 -9
- package/dist/auth-session-C9F7usbn.js +0 -3
- package/dist/channel-CFIRo4fR.js.map +0 -1
- package/dist/dist-CcuvAb_V.js +0 -34
- package/dist/entry-D-22_x6G.js.map +0 -1
- package/dist/lock-DP8d33p_.js.map +0 -1
- package/dist/prepare-provider-runtime-m0GVd1Za.js.map +0 -1
- package/dist/runtime-DDZRXE1m.js.map +0 -1
- package/dist/service-CjVGm1FB.js.map +0 -1
- package/dist/updates-api-D4OvCDcm.js.map +0 -1
- package/dist/upgrade-DUs1kUZ9.js +0 -3
package/dist/{daemon-service-update-state-BSn45OHj.js → daemon-service-update-state-GCIZ6nGp.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { I as openMeldToolsUpdateRequestSourceSchema, M as openMeldToolsUpdateOperationPhaseSchema } from "./local-components-B3vffkMy.js";
|
|
4
|
-
import { _ as daemonRuntimeStateRootPath } from "./daemon-state-
|
|
4
|
+
import { _ as daemonRuntimeStateRootPath } from "./daemon-state-C72A-n6c.js";
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
6
|
import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
7
7
|
import * as z$1 from "zod/v4";
|
|
@@ -178,4 +178,4 @@ function normalizeTarget(value) {
|
|
|
178
178
|
//#endregion
|
|
179
179
|
export { readPendingDaemonServiceUpdate as a, daemonServiceUpdateJobV1Schema as c, readLastDaemonServiceUpdate as i, daemonServiceUpdatePreparedBundleSchema as l, completePendingDaemonServiceUpdate as n, OPENMELD_DAEMON_SERVICE_UPDATE_JOB_SCHEMA as o, persistPendingDaemonServiceUpdate as r, daemonServiceUpdateJobSchema as s, DAEMON_SERVICE_UPDATE_JOB_SCHEMA as t, storedDaemonServiceUpdateJobSchema as u };
|
|
180
180
|
|
|
181
|
-
//# sourceMappingURL=daemon-service-update-state-
|
|
181
|
+
//# sourceMappingURL=daemon-service-update-state-GCIZ6nGp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-service-update-state-BSn45OHj.js","names":["exhaustive"],"sources":["../../../packages/schemas/dist/schemas/daemon/service-update-job.js","../src/local-service/lifecycle/daemon-service-update-state.ts"],"sourcesContent":["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 { 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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon-service-update-state-GCIZ6nGp.js","names":["exhaustive"],"sources":["../../../packages/schemas/dist/schemas/daemon/service-update-job.js","../src/local-service/lifecycle/daemon-service-update-state.ts"],"sourcesContent":["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 { 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"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { F as resolveOpenMeldRootDir, I as resolveOpenMeldServiceOwnedPathInput, P as resolveOpenMeldEnvPreset, R as runtimeDir, U as systemDir } from "./paths-De9xdA2h.js";
|
|
4
|
-
import {
|
|
4
|
+
import { c as releaseLock, f as runWithHeldLock, n as acquireLock, p as tryCleanupStaleLock, s as readLockMeta } from "./lock-B0YzvcUu.js";
|
|
5
5
|
import { createHash, randomBytes } from "node:crypto";
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
7
7
|
import { join } from "node:path";
|
|
@@ -137,7 +137,7 @@ async function setDaemonServiceRuntimeState(state, pathInput = {}) {
|
|
|
137
137
|
await writeDaemonServiceRuntimeState(state, pathInput);
|
|
138
138
|
}
|
|
139
139
|
async function clearDaemonServiceRuntimeState(pathInput = {}) {
|
|
140
|
-
const { clearDaemonRuntimeLease } = await import("./daemon-runtime-lease-
|
|
140
|
+
const { clearDaemonRuntimeLease } = await import("./daemon-runtime-lease-CgP8D7m8.js");
|
|
141
141
|
await Promise.all([rm(daemonServiceRuntimeStatePath(pathInput), { force: true }), clearDaemonRuntimeLease(pathInput)]);
|
|
142
142
|
}
|
|
143
143
|
function withDaemonServiceRunLock(callback, meta = {
|
|
@@ -654,4 +654,4 @@ async function pathExists(path) {
|
|
|
654
654
|
//#endregion
|
|
655
655
|
export { getDaemonStatus as A, restoreDaemonInstallStateSnapshot as B, daemonServiceStableBinaryExecutablePath as C, daemonStatePath as D, daemonServiceUpdateWorkerBinaryExecutablePath as E, readDaemonServiceLifecycleLockMetaWithCleanup as F, withDaemonServiceReconcileLock as G, setDaemonServiceRuntimeState as H, readDaemonServiceRuntimeSnapshot as I, withDaemonServiceStopLock as J, withDaemonServiceRegistrationMutationLock as K, releaseDaemonServiceLifecycleLock as L, isDaemonServiceRuntimeHeartbeatStale as M, readDaemonControlPlaneToken as N, ensureDaemonControlPlaneToken as O, readDaemonServiceLifecycleLockMeta as P, resolveDaemonControlPlaneEndpoint as R, daemonServiceRepairJournalPath as S, daemonServiceStableLauncherPath as T, uninstallDaemon as U, rotateDaemonControlPlaneTokenIfExpired as V, withDaemonServiceLifecycleLock as W, daemonRuntimeStateRootPath as _, DAEMON_SERVICE_RUNTIME_MODE_ENV as a, daemonServiceLegacyExecutableWrapperPath as b, acquireDaemonServiceLifecycleLock as c, daemonDispatchJournalPath as d, daemonLifecycleJournalPath as f, daemonRuntimeServiceManagerPath as g, daemonRuntimeRootPath as h, DAEMON_SERVICE_RUNTIME_DETACHED_ENV as i, installDaemon as j, getDaemonRuntimeStatus as k, clearDaemonServiceRuntimeState as l, daemonRuntimeDataPath as m, DAEMON_SERVICE_RUNTIME_AUTO_START_ENV as n, DAEMON_SERVICE_RUNTIME_STATE_SCHEMA as o, daemonRuntimeBundlesPath as p, withDaemonServiceRunLock as q, DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV as r, DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV as s, DAEMON_HEARTBEAT_STALE_MS as t, currentDaemonServiceLifecycleLock as u, daemonServiceActiveBundleStatePath as v, daemonServiceStableExecutableWrapperPath as w, daemonServiceRecognizedExecutablePaths as x, daemonServiceExecutableWrapperPaths as y, resolveDaemonServiceRuntimeMetadata as z };
|
|
656
656
|
|
|
657
|
-
//# sourceMappingURL=daemon-state-
|
|
657
|
+
//# sourceMappingURL=daemon-state-C72A-n6c.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-state-CTOVPwNq.js","names":[],"sources":["../src/config/daemon-state.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport {\n chmod,\n mkdir,\n readFile,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n acquireLock,\n type OpenMeldLock,\n readLockMeta,\n releaseLock,\n runWithHeldLock,\n tryCleanupStaleLock,\n} from \"./lock\";\nimport type { OpenMeldEnvPreset, OpenMeldPathResolutionInput } from \"./paths\";\nimport {\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n resolveOpenMeldServiceOwnedPathInput,\n runtimeDir,\n systemDir,\n} from \"./paths\";\n\nconst DAEMON_STATE_SCHEMA = \"openmeld-daemon-install-v1\";\nexport const DAEMON_SERVICE_RUNTIME_STATE_SCHEMA =\n \"openmeld-daemon-service-state-v1\";\nexport const DAEMON_SERVICE_RUNTIME_MODE_ENV = \"OPENMELD_DAEMON_RUNTIME_MODE\";\nexport const DAEMON_SERVICE_RUNTIME_DETACHED_ENV =\n \"OPENMELD_DAEMON_RUNTIME_DETACHED\";\nexport const DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV =\n \"OPENMELD_DAEMON_SERVICE_CONTROLLER\";\nexport const DAEMON_SERVICE_RUNTIME_AUTO_START_ENV =\n \"OPENMELD_DAEMON_SERVICE_AUTO_START\";\nexport const DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV =\n \"OPENMELD_DAEMON_RUNTIME_SYSTEM_SERVICE\";\nconst DAEMON_TOKEN_SCHEMA = \"openmeld-daemon-token-v1\";\nconst DAEMON_TOKEN_ROTATE_MAX_AGE_MS = 24 * 60 * 60 * 1000;\nexport const DAEMON_HEARTBEAT_STALE_MS = 3 * 60 * 1000;\nconst DAEMON_ACTIVE_BUNDLE_STATE_FILENAME = \"active-bundle.json\";\nconst DAEMON_DISPATCH_JOURNAL_FILENAME = \"daemon-dispatch-journal.jsonl\";\nconst DAEMON_LIFECYCLE_JOURNAL_FILENAME = \"daemon-lifecycle-journal.jsonl\";\nconst DAEMON_REPAIR_JOURNAL_FILENAME = \"repair-journal.json\";\nconst DAEMON_SERVICE_LOCK_PROFILE = \"daemon-service\";\nconst DAEMON_SERVICE_LOCK_KEY = \"daemon-service-run\";\ntype DaemonServiceLifecycleLockContext = {\n lock: OpenMeldLock;\n active: boolean;\n failures: unknown[];\n ownerRoot: string;\n pendingOperations: Set<Promise<void>>;\n};\nconst daemonServiceLifecycleLockContext =\n new AsyncLocalStorage<DaemonServiceLifecycleLockContext>();\n\nexport function currentDaemonServiceLifecycleLock(): OpenMeldLock | null {\n const context = daemonServiceLifecycleLockContext.getStore();\n return context?.active &&\n context.ownerRoot ===\n resolveOpenMeldRootDir(resolveOpenMeldServiceOwnedPathInput())\n ? context.lock\n : null;\n}\nconst DAEMON_STABLE_LAUNCHER_FILENAME = \"daemon-service-launcher.mjs\";\nconst DAEMON_SERVICE_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET = {\n prod: \"OpenMeld Service\",\n \"dev-local\": \"OpenMeld Service Dev\",\n canary: \"OpenMeld Service Canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst DAEMON_SERVICE_BINARY_EXECUTABLE_FILENAME_BY_PRESET = {\n prod: \"OpenMeld Service Binary\",\n \"dev-local\": \"OpenMeld Service Binary Dev\",\n canary: \"OpenMeld Service Binary Canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst DAEMON_SERVICE_UPDATE_WORKER_BINARY_FILENAME_BY_PRESET = {\n prod: \"OpenMeld Update Worker Binary\",\n \"dev-local\": \"OpenMeld Update Worker Binary Dev\",\n canary: \"OpenMeld Update Worker Binary Canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst DAEMON_SERVICE_LEGACY_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET = {\n prod: \"openmeld-service\",\n \"dev-local\": \"openmeld-dev-service\",\n canary: \"openmeld-canary-service\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nexport const DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE =\n DAEMON_SERVICE_LOCK_PROFILE;\nexport const DAEMON_SERVICE_LIFECYCLE_LOCK_KEY = DAEMON_SERVICE_LOCK_KEY;\nexport type DaemonServiceLifecycleLock = OpenMeldLock;\n\nexport type DaemonLifecycleIntent =\n | \"run_background\"\n | \"run_foreground\"\n | \"stop\"\n | \"autostart\"\n | \"status_cleanup\"\n | \"startup_check\"\n | \"start\"\n | \"reinstall\"\n | \"uninstall\"\n | \"upgrade_reconcile\";\n\nexport type DaemonLifecycleLockMeta = {\n intent: DaemonLifecycleIntent;\n command: string;\n pid?: number;\n sessionId?: string;\n at?: string;\n};\n\nexport type DaemonInstallSource = \"cli.auto_check\" | \"daemon.command.install\";\nexport type DaemonRunMode = \"foreground\" | \"background\";\nexport type DaemonServiceController =\n | \"launchd\"\n | \"systemd\"\n | \"windows-service\"\n | \"legacy-detached\"\n | \"unknown\";\n\ntype BaseDaemonServiceRuntimeState = {\n mode: DaemonRunMode;\n command: string;\n gatewayUrl: string | null;\n openMeldProfileId: string | null;\n stopRequestedAt: string | null;\n startedAt: string;\n updatedAt: string;\n heartbeatAt: string | null;\n managedBySystemService: boolean;\n serviceController: DaemonServiceController;\n autoStart: boolean;\n};\n\nexport type DaemonServiceRuntimeState = BaseDaemonServiceRuntimeState & {\n v: 1;\n schema: typeof DAEMON_SERVICE_RUNTIME_STATE_SCHEMA;\n status: \"running\";\n pid: number;\n};\n\nexport type DaemonServiceRuntimeStatus = {\n status: \"running\" | \"stale\" | \"not_running\" | \"unknown\";\n mode: DaemonRunMode | null;\n pid: number | null;\n startedAt: string | null;\n updatedAt: string | null;\n managedBySystemService: boolean;\n serviceController: DaemonServiceRuntimeState[\"serviceController\"];\n autoStart: boolean;\n reason?: string;\n};\n\nexport type DaemonServiceRuntimeMetadataInput = {\n managedBySystemService?: boolean;\n serviceController?: string;\n autoStart?: boolean;\n env?: NodeJS.ProcessEnv;\n};\n\nexport type DaemonServiceRuntimeMetadata = {\n managedBySystemService: boolean;\n serviceController: DaemonServiceController;\n autoStart: boolean;\n};\n\nexport type DaemonInstallState = {\n v: 1;\n schema: typeof DAEMON_STATE_SCHEMA;\n daemonVersion: string;\n installSource: DaemonInstallSource;\n installedAt: string;\n updatedAt: string;\n};\n\nexport type DaemonTokenState = {\n v: 1;\n schema: typeof DAEMON_TOKEN_SCHEMA;\n token: string;\n issuedAt: string;\n updatedAt: string;\n};\n\nexport type DaemonInstallResult = {\n status: \"installed\" | \"already_installed\";\n state: DaemonInstallState;\n};\n\nexport type DaemonUninstallResult = {\n removed: boolean;\n};\n\nexport type DaemonStatus =\n | {\n installed: true;\n state: DaemonInstallState;\n }\n | {\n installed: false;\n state: null;\n };\n\nexport async function getDaemonStatus(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonStatus> {\n const [state, runtimeExists] = await Promise.all([\n readDaemonInstallState(pathInput),\n pathExists(daemonRuntimeRootPath(pathInput)),\n ]);\n if (state && runtimeExists) {\n return {\n installed: true,\n state,\n };\n }\n return {\n installed: false,\n state: null,\n };\n}\n\nexport async function getDaemonRuntimeStatus(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceRuntimeStatus> {\n const state = await readDaemonServiceRuntimeState(pathInput);\n if (!state) {\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 if (!Number.isInteger(state.pid) || state.pid <= 0) {\n return {\n status: \"stale\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n reason: \"invalid_pid\",\n };\n }\n if (!isPidAlive(state.pid)) {\n return {\n status: \"stale\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n reason: \"process_not_alive\",\n };\n }\n if (isDaemonServiceRuntimeHeartbeatStale(state)) {\n return {\n status: \"stale\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n reason: \"heartbeat_stale\",\n };\n }\n return {\n status: \"running\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n };\n}\n\nexport async function readDaemonServiceRuntimeSnapshot(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceRuntimeState | null> {\n return await readDaemonServiceRuntimeState(pathInput);\n}\n\nexport function resolveDaemonServiceRuntimeMetadata(\n input: DaemonServiceRuntimeMetadataInput = {}\n): DaemonServiceRuntimeMetadata {\n const env = input.env ?? process.env;\n const managedBySystemService =\n input.managedBySystemService === true ||\n env[DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV] === \"1\";\n const serviceControllerInput =\n typeof input.serviceController === \"string\" &&\n input.serviceController.length > 0\n ? input.serviceController\n : env[DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV];\n const autoStart =\n input.autoStart === true ||\n env[DAEMON_SERVICE_RUNTIME_AUTO_START_ENV] === \"1\";\n\n return {\n managedBySystemService,\n serviceController: parseDaemonServiceController(serviceControllerInput),\n autoStart,\n };\n}\n\nexport async function setDaemonServiceRuntimeState(\n state: DaemonServiceRuntimeState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await writeDaemonServiceRuntimeState(state, pathInput);\n}\n\nexport async function clearDaemonServiceRuntimeState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const { clearDaemonRuntimeLease } = await import(\"./daemon-runtime-lease\");\n await Promise.all([\n rm(daemonServiceRuntimeStatePath(pathInput), { force: true }),\n clearDaemonRuntimeLease(pathInput),\n ]);\n}\n\nexport function withDaemonServiceRunLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta = {\n intent: \"run_background\",\n command: \"openmeld service start\",\n }\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport async function acquireDaemonServiceLifecycleLock(\n meta: DaemonLifecycleLockMeta = {\n intent: \"run_background\",\n command: \"openmeld service start\",\n },\n pathResolution: OpenMeldPathResolutionInput = resolveOpenMeldServiceOwnedPathInput()\n): Promise<DaemonServiceLifecycleLock> {\n return await acquireLock({\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n key: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n meta,\n pathResolution,\n });\n}\n\nexport async function releaseDaemonServiceLifecycleLock(\n lock: DaemonServiceLifecycleLock\n): Promise<void> {\n await releaseLock(lock);\n}\n\nexport function withDaemonServiceStopLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta = {\n intent: \"stop\",\n command: \"openmeld service stop\",\n }\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport function withDaemonServiceReconcileLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta = {\n intent: \"upgrade_reconcile\",\n command: \"openmeld service update\",\n }\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport function withDaemonServiceRegistrationMutationLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport function withDaemonServiceLifecycleLock<T>(\n meta: DaemonLifecycleLockMeta,\n callback: () => Promise<T>,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<T> {\n const pathResolution = resolveOpenMeldServiceOwnedPathInput(pathInput);\n const ownerRoot = resolveOpenMeldRootDir(pathResolution);\n const currentContext = daemonServiceLifecycleLockContext.getStore();\n if (currentContext?.active && currentContext.ownerRoot === ownerRoot) {\n let operation: Promise<T>;\n try {\n operation = callback();\n } catch (error) {\n operation = Promise.reject(error);\n }\n let trackedOperation: Promise<void>;\n trackedOperation = operation\n .then(\n () => undefined,\n (error: unknown) => {\n currentContext.failures.push(error);\n }\n )\n .finally(() => {\n currentContext.pendingOperations.delete(trackedOperation);\n });\n currentContext.pendingOperations.add(trackedOperation);\n return operation;\n }\n return withDaemonServiceLifecycleOwnerLock({\n callback,\n meta,\n ownerRoot,\n pathResolution,\n });\n}\n\nasync function withDaemonServiceLifecycleOwnerLock<T>(input: {\n callback: () => Promise<T>;\n meta: DaemonLifecycleLockMeta;\n ownerRoot: string;\n pathResolution: OpenMeldPathResolutionInput;\n}): Promise<T> {\n const lock = await acquireDaemonServiceLifecycleLock(\n input.meta,\n input.pathResolution\n );\n return await runWithHeldLock({\n lock,\n run: async () => {\n const context: DaemonServiceLifecycleLockContext = {\n lock,\n active: true,\n failures: [],\n ownerRoot: input.ownerRoot,\n pendingOperations: new Set(),\n };\n let outcome: { ok: true; value: T } | { ok: false; error: unknown };\n try {\n outcome = {\n ok: true,\n value: await daemonServiceLifecycleLockContext.run(\n context,\n input.callback\n ),\n };\n } catch (error) {\n outcome = { ok: false, error };\n } finally {\n while (context.pendingOperations.size > 0) {\n await Promise.all([...context.pendingOperations]);\n }\n context.active = false;\n }\n const failures = [\n ...(outcome.ok ? [] : [outcome.error]),\n ...context.failures,\n ].filter(\n (failure, index, allFailures) => allFailures.indexOf(failure) === index\n );\n if (failures.length === 1) {\n throw failures[0];\n }\n if (failures.length > 1) {\n throw new AggregateError(\n failures,\n \"daemon service lifecycle mutation failed in more than one operation\"\n );\n }\n if (!outcome.ok) {\n throw outcome.error;\n }\n return outcome.value;\n },\n releaseContext: {\n command: input.meta.command,\n component: \"daemon_service_lifecycle\",\n intent: input.meta.intent,\n lockKey: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n },\n });\n}\n\nexport async function readDaemonServiceLifecycleLockMeta(): Promise<DaemonLifecycleLockMeta | null> {\n const meta = await readLockMeta({\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n key: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n pathResolution: resolveOpenMeldServiceOwnedPathInput(),\n });\n if (!meta) {\n return null;\n }\n const intent =\n typeof meta.intent === \"string\"\n ? normalizeDaemonLifecycleIntent(meta.intent)\n : null;\n const command = typeof meta.command === \"string\" ? meta.command.trim() : \"\";\n if (!intent || command.length === 0) {\n return null;\n }\n const pid = typeof meta.pid === \"number\" ? meta.pid : undefined;\n const sessionId =\n typeof meta.sessionId === \"string\" && meta.sessionId.trim().length > 0\n ? meta.sessionId.trim()\n : undefined;\n const at =\n typeof meta.at === \"string\" && meta.at.trim().length > 0\n ? meta.at.trim()\n : undefined;\n return {\n intent,\n command,\n ...(typeof pid === \"number\" ? { pid } : {}),\n ...(sessionId ? { sessionId } : {}),\n ...(at ? { at } : {}),\n };\n}\n\nexport async function readDaemonServiceLifecycleLockMetaWithCleanup(): Promise<DaemonLifecycleLockMeta | null> {\n await tryCleanupStaleLock({\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n key: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n pathResolution: resolveOpenMeldServiceOwnedPathInput(),\n });\n return await readDaemonServiceLifecycleLockMeta();\n}\n\nexport async function installDaemon(input: {\n daemonVersion: string;\n source: DaemonInstallSource;\n}): Promise<DaemonInstallResult> {\n const existingState = await readDaemonInstallState();\n const runtimeExists = await pathExists(daemonRuntimeRootPath());\n if (\n existingState &&\n runtimeExists &&\n existingState.daemonVersion === input.daemonVersion\n ) {\n await ensureDaemonTokenState();\n return {\n status: \"already_installed\",\n state: existingState,\n };\n }\n\n await ensureDaemonRuntimeLayout();\n const now = new Date().toISOString();\n const nextState: DaemonInstallState = {\n v: 1,\n schema: DAEMON_STATE_SCHEMA,\n daemonVersion: input.daemonVersion,\n installSource: input.source,\n installedAt: existingState?.installedAt ?? now,\n updatedAt: now,\n };\n await writeDaemonInstallState(nextState);\n await ensureDaemonTokenState();\n\n return {\n status: \"installed\",\n state: nextState,\n };\n}\n\nexport async function uninstallDaemon(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonUninstallResult> {\n const [hasState, hasRuntimeDir, hasToken] = await Promise.all([\n pathExists(daemonStatePath(pathInput)),\n pathExists(daemonRuntimeRootPath(pathInput)),\n pathExists(daemonTokenPath(pathInput)),\n ]);\n\n await Promise.all([\n rm(daemonStatePath(pathInput), { force: true }),\n rm(daemonTokenPath(pathInput), { force: true }),\n rm(daemonServiceRuntimeStatePath(pathInput), { force: true }),\n rm(daemonRuntimeRootPath(pathInput), { recursive: true, force: true }),\n ]);\n\n return {\n removed: hasState || hasRuntimeDir || hasToken,\n };\n}\n\nexport function daemonStatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(systemDir(pathInput), \"daemon-install.json\");\n}\n\nexport function daemonRuntimeRootPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(runtimeDir(pathInput), \"daemon\");\n}\n\nexport function daemonServiceRuntimeStatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-runtime.json\");\n}\n\nexport function daemonRuntimeDataPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"data\");\n}\n\nexport function daemonRuntimeBundlesPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"bundles\");\n}\n\nexport function daemonRuntimeStateRootPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"state\");\n}\n\nexport function daemonLifecycleJournalPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeRootPath(pathInput),\n \"logs\",\n DAEMON_LIFECYCLE_JOURNAL_FILENAME\n );\n}\n\nexport function daemonDispatchJournalPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeRootPath(pathInput),\n \"logs\",\n DAEMON_DISPATCH_JOURNAL_FILENAME\n );\n}\n\nexport function daemonServiceActiveBundleStatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeStateRootPath(pathInput),\n DAEMON_ACTIVE_BUNDLE_STATE_FILENAME\n );\n}\n\nexport function daemonServiceRepairJournalPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeStateRootPath(pathInput),\n DAEMON_REPAIR_JOURNAL_FILENAME\n );\n}\n\nexport function daemonRuntimeServiceManagerPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-manager\");\n}\n\nexport function daemonServiceStableLauncherPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_STABLE_LAUNCHER_FILENAME\n );\n}\n\nexport function daemonServiceStableExecutableWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceStableBinaryExecutablePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_BINARY_EXECUTABLE_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceUpdateWorkerBinaryExecutablePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_UPDATE_WORKER_BINARY_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceLegacyExecutableWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_LEGACY_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceExecutableWrapperPaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return [\n daemonServiceStableExecutableWrapperPath(pathInput),\n daemonServiceLegacyExecutableWrapperPath(pathInput),\n ];\n}\n\nexport function daemonServiceRecognizedExecutablePaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return [\n daemonServiceStableBinaryExecutablePath(pathInput),\n ...daemonServiceExecutableWrapperPaths(pathInput),\n ];\n}\n\nexport function daemonTokenPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(systemDir(pathInput), \"daemon-token.json\");\n}\n\nexport async function restoreDaemonInstallStateSnapshot(\n snapshot: DaemonInstallState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n if (!snapshot) {\n await rm(daemonStatePath(pathInput), { force: true });\n return;\n }\n await writeDaemonInstallState(snapshot, pathInput);\n}\n\nexport function resolveDaemonControlPlaneEndpoint(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const runtimeRoot = daemonRuntimeRootPath(pathInput);\n const suffix = createHash(\"sha256\")\n .update(runtimeRoot)\n .digest(\"hex\")\n .slice(0, 24);\n if (process.platform === \"win32\") {\n return `\\\\\\\\.\\\\pipe\\\\openmeld-daemon-control-${suffix}`;\n }\n return join(tmpdir(), `openmeld-daemon-control-${suffix}.sock`);\n}\n\nexport async function ensureDaemonControlPlaneToken(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string> {\n const state = await ensureDaemonTokenState(pathInput);\n return state.token;\n}\n\nexport async function rotateDaemonControlPlaneTokenIfExpired(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonTokenState> {\n const current = await readDaemonTokenState(pathInput);\n if (current && !isDaemonTokenExpired(current)) {\n await chmod(daemonTokenPath(pathInput), 0o600).catch(() => undefined);\n return current;\n }\n\n return await writeNewDaemonTokenState(pathInput);\n}\n\nexport async function readDaemonControlPlaneToken(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n const state = await readDaemonTokenState(pathInput);\n return state?.token ?? null;\n}\n\nfunction isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return !(\n error instanceof Error &&\n (error as NodeJS.ErrnoException).code === \"ESRCH\"\n );\n }\n}\n\nasync function readDaemonServiceRuntimeState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceRuntimeState | null> {\n const raw = await readFile(\n daemonServiceRuntimeStatePath(pathInput),\n \"utf8\"\n ).catch((error) => {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return null;\n }\n return parseDaemonServiceRuntimeState(raw);\n}\n\nfunction parseDaemonServiceRuntimeState(\n raw: string\n): DaemonServiceRuntimeState | null {\n try {\n const parsed = JSON.parse(raw);\n if (!isDaemonServiceRuntimeStateObject(parsed)) {\n return null;\n }\n\n return {\n v: 1,\n schema: DAEMON_SERVICE_RUNTIME_STATE_SCHEMA,\n status: \"running\",\n pid: parsed.pid,\n mode: parsed.mode,\n command: parsed.command,\n gatewayUrl: parseNullableString(parsed.gatewayUrl),\n openMeldProfileId: resolveStoredDaemonServiceOpenMeldProfileId(parsed),\n stopRequestedAt: parseNullableString(parsed.stopRequestedAt),\n heartbeatAt: parseNullableString(parsed.heartbeatAt),\n startedAt: parsed.startedAt,\n updatedAt: parsed.updatedAt,\n managedBySystemService: parsed.managedBySystemService === true,\n serviceController: parseDaemonServiceController(parsed.serviceController),\n autoStart: parsed.autoStart === true,\n };\n } catch {\n return null;\n }\n}\n\nfunction isDaemonServiceRuntimeStateObject(value: unknown): value is {\n v: 1;\n schema: string;\n status: \"running\";\n pid: number;\n mode: DaemonRunMode;\n command: string;\n gatewayUrl: string | null;\n openMeldProfileId?: string | null;\n profile?: string | null;\n stopRequestedAt: string | null;\n heartbeatAt: string | null;\n startedAt: string;\n updatedAt: string;\n managedBySystemService?: boolean;\n serviceController?: string;\n autoStart?: boolean;\n} {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const candidate = value as Record<string, unknown>;\n return (\n candidate.v === 1 &&\n candidate.schema === DAEMON_SERVICE_RUNTIME_STATE_SCHEMA &&\n candidate.status === \"running\" &&\n typeof candidate.pid === \"number\" &&\n candidate.pid > 0 &&\n (candidate.mode === \"foreground\" || candidate.mode === \"background\") &&\n typeof candidate.command === \"string\" &&\n candidate.command.length > 0 &&\n isValidNullableString(candidate.gatewayUrl) &&\n isValidOptionalNullableString(candidate.openMeldProfileId) &&\n isValidOptionalNullableString(candidate.profile) &&\n isValidNullableString(candidate.stopRequestedAt) &&\n isValidNullableString(candidate.heartbeatAt) &&\n typeof candidate.startedAt === \"string\" &&\n candidate.startedAt.length > 0 &&\n typeof candidate.updatedAt === \"string\" &&\n candidate.updatedAt.length > 0\n );\n}\n\nexport function parseDaemonServiceController(\n value: unknown\n): DaemonServiceController {\n if (\n value === \"launchd\" ||\n value === \"systemd\" ||\n value === \"windows-service\" ||\n value === \"legacy-detached\" ||\n value === \"unknown\"\n ) {\n return value;\n }\n return \"unknown\";\n}\n\nfunction isValidNullableString(value: unknown): value is string | null {\n return value === null || typeof value === \"string\";\n}\n\nfunction isValidOptionalNullableString(\n value: unknown\n): value is string | null | undefined {\n return value === undefined || value === null || typeof value === \"string\";\n}\n\nfunction parseNullableString(value: unknown): string | null {\n if (value === null) {\n return null;\n }\n if (typeof value !== \"string\") {\n return null;\n }\n return value;\n}\n\nfunction resolveStoredDaemonServiceOpenMeldProfileId(input: {\n openMeldProfileId?: unknown;\n profile?: unknown;\n}): string | null {\n const openMeldProfileId = parseNullableString(input.openMeldProfileId);\n const legacyProfile = parseNullableString(input.profile);\n if (\n openMeldProfileId &&\n legacyProfile &&\n openMeldProfileId !== legacyProfile\n ) {\n throw new Error(\"conflicting openMeldProfileId values\");\n }\n return openMeldProfileId ?? legacyProfile;\n}\n\nexport function isDaemonServiceRuntimeHeartbeatStale(\n state: DaemonServiceRuntimeState\n): boolean {\n const latestSignalAt = Math.max(\n parseIsoTimestampOrZero(state.heartbeatAt),\n parseIsoTimestampOrZero(state.updatedAt)\n );\n if (latestSignalAt <= 0) {\n return false;\n }\n return Date.now() - latestSignalAt > DAEMON_HEARTBEAT_STALE_MS;\n}\n\nfunction parseIsoTimestampOrZero(value: string | null): number {\n if (!value) {\n return 0;\n }\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nasync function writeDaemonServiceRuntimeState(\n state: DaemonServiceRuntimeState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const path = daemonServiceRuntimeStatePath(pathInput);\n const runtimeRootPath = daemonRuntimeRootPath(pathInput);\n await mkdir(runtimeRootPath, { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n let shouldCleanupTemp = true;\n\n try {\n await writeFile(tempPath, `${JSON.stringify(state, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await rename(tempPath, path);\n await chmod(path, 0o600);\n shouldCleanupTemp = false;\n } finally {\n if (shouldCleanupTemp) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nasync function ensureDaemonRuntimeLayout(): Promise<void> {\n await Promise.all([\n mkdir(systemDir(), { recursive: true }),\n mkdir(join(daemonRuntimeRootPath(), \"bin\"), { recursive: true }),\n mkdir(daemonRuntimeBundlesPath(), { recursive: true }),\n mkdir(join(daemonRuntimeRootPath(), \"data\"), { recursive: true }),\n mkdir(join(daemonRuntimeRootPath(), \"logs\"), { recursive: true }),\n mkdir(daemonRuntimeStateRootPath(), { recursive: true }),\n mkdir(daemonRuntimeServiceManagerPath(), { recursive: true }),\n ]);\n}\n\nfunction normalizeDaemonLifecycleIntent(\n value: string\n): DaemonLifecycleIntent | null {\n switch (value) {\n case \"run_background\":\n case \"run_foreground\":\n case \"stop\":\n case \"autostart\":\n case \"status_cleanup\":\n case \"startup_check\":\n case \"start\":\n case \"reinstall\":\n case \"uninstall\":\n case \"upgrade_reconcile\":\n return value;\n default:\n return null;\n }\n}\n\nasync function ensureDaemonTokenState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonTokenState> {\n const current = await readDaemonTokenState(pathInput);\n if (current) {\n await chmod(daemonTokenPath(pathInput), 0o600).catch(() => undefined);\n return current;\n }\n\n return await writeNewDaemonTokenState(pathInput);\n}\n\nasync function writeNewDaemonTokenState(\n pathInput: OpenMeldPathResolutionInput\n): Promise<DaemonTokenState> {\n const nowIso = new Date().toISOString();\n const next: DaemonTokenState = {\n v: 1,\n schema: DAEMON_TOKEN_SCHEMA,\n token: createDaemonTokenValue(),\n issuedAt: nowIso,\n updatedAt: nowIso,\n };\n await writeDaemonTokenState(next, pathInput);\n return next;\n}\n\nasync function readDaemonInstallState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonInstallState | null> {\n const raw = await readFile(daemonStatePath(pathInput), \"utf8\").catch(\n (error) => {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return null;\n }\n throw error;\n }\n );\n if (raw === null) {\n return null;\n }\n return parseDaemonInstallState(raw);\n}\n\nfunction parseDaemonInstallState(raw: string): DaemonInstallState | null {\n try {\n const parsed = JSON.parse(raw) as Partial<DaemonInstallState>;\n if (parsed.v !== 1) {\n return null;\n }\n if (parsed.schema !== DAEMON_STATE_SCHEMA) {\n return null;\n }\n if (typeof parsed.daemonVersion !== \"string\" || !parsed.daemonVersion) {\n return null;\n }\n if (!isDaemonInstallSource(parsed.installSource)) {\n return null;\n }\n if (typeof parsed.installedAt !== \"string\" || !parsed.installedAt) {\n return null;\n }\n if (typeof parsed.updatedAt !== \"string\" || !parsed.updatedAt) {\n return null;\n }\n return {\n v: 1,\n schema: DAEMON_STATE_SCHEMA,\n daemonVersion: parsed.daemonVersion,\n installSource: parsed.installSource,\n installedAt: parsed.installedAt,\n updatedAt: parsed.updatedAt,\n };\n } catch {\n return null;\n }\n}\n\nfunction isDaemonInstallSource(value: unknown): value is DaemonInstallSource {\n return value === \"cli.auto_check\" || value === \"daemon.command.install\";\n}\n\nasync function writeDaemonInstallState(\n state: DaemonInstallState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const path = daemonStatePath(pathInput);\n await mkdir(systemDir(pathInput), { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n let shouldCleanupTemp = true;\n\n try {\n await writeFile(tempPath, `${JSON.stringify(state, null, 2)}\\n`, \"utf8\");\n await rename(tempPath, path);\n shouldCleanupTemp = false;\n } finally {\n if (shouldCleanupTemp) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nasync function readDaemonTokenState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonTokenState | null> {\n const raw = await readFile(daemonTokenPath(pathInput), \"utf8\").catch(\n (error) => {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return null;\n }\n throw error;\n }\n );\n if (raw === null) {\n return null;\n }\n return parseDaemonTokenState(raw);\n}\n\nfunction parseDaemonTokenState(raw: string): DaemonTokenState | null {\n try {\n const parsed = JSON.parse(raw) as Partial<DaemonTokenState>;\n if (parsed.v !== 1 || parsed.schema !== DAEMON_TOKEN_SCHEMA) {\n return null;\n }\n if (typeof parsed.token !== \"string\" || parsed.token.length < 16) {\n return null;\n }\n if (typeof parsed.issuedAt !== \"string\" || !parsed.issuedAt) {\n return null;\n }\n if (typeof parsed.updatedAt !== \"string\" || !parsed.updatedAt) {\n return null;\n }\n return {\n v: 1,\n schema: DAEMON_TOKEN_SCHEMA,\n token: parsed.token,\n issuedAt: parsed.issuedAt,\n updatedAt: parsed.updatedAt,\n };\n } catch {\n return null;\n }\n}\n\nasync function writeDaemonTokenState(\n state: DaemonTokenState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const path = daemonTokenPath(pathInput);\n await mkdir(systemDir(pathInput), { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n let shouldCleanupTemp = true;\n\n try {\n await writeFile(tempPath, `${JSON.stringify(state, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await rename(tempPath, path);\n await chmod(path, 0o600);\n shouldCleanupTemp = false;\n } finally {\n if (shouldCleanupTemp) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nfunction isDaemonTokenExpired(state: DaemonTokenState): boolean {\n const updatedAtMs = Date.parse(state.updatedAt);\n if (!Number.isFinite(updatedAtMs)) {\n return true;\n }\n return Date.now() - updatedAtMs >= DAEMON_TOKEN_ROTATE_MAX_AGE_MS;\n}\n\nfunction createDaemonTokenValue(): string {\n return randomBytes(32).toString(\"base64url\");\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return false;\n }\n throw error;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon-state-C72A-n6c.js","names":[],"sources":["../src/config/daemon-state.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport {\n chmod,\n mkdir,\n readFile,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n acquireLock,\n type OpenMeldLock,\n readLockMeta,\n releaseLock,\n runWithHeldLock,\n tryCleanupStaleLock,\n} from \"./lock\";\nimport type { OpenMeldEnvPreset, OpenMeldPathResolutionInput } from \"./paths\";\nimport {\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n resolveOpenMeldServiceOwnedPathInput,\n runtimeDir,\n systemDir,\n} from \"./paths\";\n\nconst DAEMON_STATE_SCHEMA = \"openmeld-daemon-install-v1\";\nexport const DAEMON_SERVICE_RUNTIME_STATE_SCHEMA =\n \"openmeld-daemon-service-state-v1\";\nexport const DAEMON_SERVICE_RUNTIME_MODE_ENV = \"OPENMELD_DAEMON_RUNTIME_MODE\";\nexport const DAEMON_SERVICE_RUNTIME_DETACHED_ENV =\n \"OPENMELD_DAEMON_RUNTIME_DETACHED\";\nexport const DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV =\n \"OPENMELD_DAEMON_SERVICE_CONTROLLER\";\nexport const DAEMON_SERVICE_RUNTIME_AUTO_START_ENV =\n \"OPENMELD_DAEMON_SERVICE_AUTO_START\";\nexport const DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV =\n \"OPENMELD_DAEMON_RUNTIME_SYSTEM_SERVICE\";\nconst DAEMON_TOKEN_SCHEMA = \"openmeld-daemon-token-v1\";\nconst DAEMON_TOKEN_ROTATE_MAX_AGE_MS = 24 * 60 * 60 * 1000;\nexport const DAEMON_HEARTBEAT_STALE_MS = 3 * 60 * 1000;\nconst DAEMON_ACTIVE_BUNDLE_STATE_FILENAME = \"active-bundle.json\";\nconst DAEMON_DISPATCH_JOURNAL_FILENAME = \"daemon-dispatch-journal.jsonl\";\nconst DAEMON_LIFECYCLE_JOURNAL_FILENAME = \"daemon-lifecycle-journal.jsonl\";\nconst DAEMON_REPAIR_JOURNAL_FILENAME = \"repair-journal.json\";\nconst DAEMON_SERVICE_LOCK_PROFILE = \"daemon-service\";\nconst DAEMON_SERVICE_LOCK_KEY = \"daemon-service-run\";\ntype DaemonServiceLifecycleLockContext = {\n lock: OpenMeldLock;\n active: boolean;\n failures: unknown[];\n ownerRoot: string;\n pendingOperations: Set<Promise<void>>;\n};\nconst daemonServiceLifecycleLockContext =\n new AsyncLocalStorage<DaemonServiceLifecycleLockContext>();\n\nexport function currentDaemonServiceLifecycleLock(): OpenMeldLock | null {\n const context = daemonServiceLifecycleLockContext.getStore();\n return context?.active &&\n context.ownerRoot ===\n resolveOpenMeldRootDir(resolveOpenMeldServiceOwnedPathInput())\n ? context.lock\n : null;\n}\nconst DAEMON_STABLE_LAUNCHER_FILENAME = \"daemon-service-launcher.mjs\";\nconst DAEMON_SERVICE_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET = {\n prod: \"OpenMeld Service\",\n \"dev-local\": \"OpenMeld Service Dev\",\n canary: \"OpenMeld Service Canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst DAEMON_SERVICE_BINARY_EXECUTABLE_FILENAME_BY_PRESET = {\n prod: \"OpenMeld Service Binary\",\n \"dev-local\": \"OpenMeld Service Binary Dev\",\n canary: \"OpenMeld Service Binary Canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst DAEMON_SERVICE_UPDATE_WORKER_BINARY_FILENAME_BY_PRESET = {\n prod: \"OpenMeld Update Worker Binary\",\n \"dev-local\": \"OpenMeld Update Worker Binary Dev\",\n canary: \"OpenMeld Update Worker Binary Canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst DAEMON_SERVICE_LEGACY_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET = {\n prod: \"openmeld-service\",\n \"dev-local\": \"openmeld-dev-service\",\n canary: \"openmeld-canary-service\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nexport const DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE =\n DAEMON_SERVICE_LOCK_PROFILE;\nexport const DAEMON_SERVICE_LIFECYCLE_LOCK_KEY = DAEMON_SERVICE_LOCK_KEY;\nexport type DaemonServiceLifecycleLock = OpenMeldLock;\n\nexport type DaemonLifecycleIntent =\n | \"run_background\"\n | \"run_foreground\"\n | \"stop\"\n | \"autostart\"\n | \"status_cleanup\"\n | \"startup_check\"\n | \"start\"\n | \"reinstall\"\n | \"uninstall\"\n | \"upgrade_reconcile\";\n\nexport type DaemonLifecycleLockMeta = {\n intent: DaemonLifecycleIntent;\n command: string;\n pid?: number;\n sessionId?: string;\n at?: string;\n};\n\nexport type DaemonInstallSource = \"cli.auto_check\" | \"daemon.command.install\";\nexport type DaemonRunMode = \"foreground\" | \"background\";\nexport type DaemonServiceController =\n | \"launchd\"\n | \"systemd\"\n | \"windows-service\"\n | \"legacy-detached\"\n | \"unknown\";\n\ntype BaseDaemonServiceRuntimeState = {\n mode: DaemonRunMode;\n command: string;\n gatewayUrl: string | null;\n openMeldProfileId: string | null;\n stopRequestedAt: string | null;\n startedAt: string;\n updatedAt: string;\n heartbeatAt: string | null;\n managedBySystemService: boolean;\n serviceController: DaemonServiceController;\n autoStart: boolean;\n};\n\nexport type DaemonServiceRuntimeState = BaseDaemonServiceRuntimeState & {\n v: 1;\n schema: typeof DAEMON_SERVICE_RUNTIME_STATE_SCHEMA;\n status: \"running\";\n pid: number;\n};\n\nexport type DaemonServiceRuntimeStatus = {\n status: \"running\" | \"stale\" | \"not_running\" | \"unknown\";\n mode: DaemonRunMode | null;\n pid: number | null;\n startedAt: string | null;\n updatedAt: string | null;\n managedBySystemService: boolean;\n serviceController: DaemonServiceRuntimeState[\"serviceController\"];\n autoStart: boolean;\n reason?: string;\n};\n\nexport type DaemonServiceRuntimeMetadataInput = {\n managedBySystemService?: boolean;\n serviceController?: string;\n autoStart?: boolean;\n env?: NodeJS.ProcessEnv;\n};\n\nexport type DaemonServiceRuntimeMetadata = {\n managedBySystemService: boolean;\n serviceController: DaemonServiceController;\n autoStart: boolean;\n};\n\nexport type DaemonInstallState = {\n v: 1;\n schema: typeof DAEMON_STATE_SCHEMA;\n daemonVersion: string;\n installSource: DaemonInstallSource;\n installedAt: string;\n updatedAt: string;\n};\n\nexport type DaemonTokenState = {\n v: 1;\n schema: typeof DAEMON_TOKEN_SCHEMA;\n token: string;\n issuedAt: string;\n updatedAt: string;\n};\n\nexport type DaemonInstallResult = {\n status: \"installed\" | \"already_installed\";\n state: DaemonInstallState;\n};\n\nexport type DaemonUninstallResult = {\n removed: boolean;\n};\n\nexport type DaemonStatus =\n | {\n installed: true;\n state: DaemonInstallState;\n }\n | {\n installed: false;\n state: null;\n };\n\nexport async function getDaemonStatus(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonStatus> {\n const [state, runtimeExists] = await Promise.all([\n readDaemonInstallState(pathInput),\n pathExists(daemonRuntimeRootPath(pathInput)),\n ]);\n if (state && runtimeExists) {\n return {\n installed: true,\n state,\n };\n }\n return {\n installed: false,\n state: null,\n };\n}\n\nexport async function getDaemonRuntimeStatus(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceRuntimeStatus> {\n const state = await readDaemonServiceRuntimeState(pathInput);\n if (!state) {\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 if (!Number.isInteger(state.pid) || state.pid <= 0) {\n return {\n status: \"stale\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n reason: \"invalid_pid\",\n };\n }\n if (!isPidAlive(state.pid)) {\n return {\n status: \"stale\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n reason: \"process_not_alive\",\n };\n }\n if (isDaemonServiceRuntimeHeartbeatStale(state)) {\n return {\n status: \"stale\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n reason: \"heartbeat_stale\",\n };\n }\n return {\n status: \"running\",\n mode: state.mode,\n pid: state.pid,\n startedAt: state.startedAt,\n updatedAt: state.updatedAt,\n managedBySystemService: state.managedBySystemService,\n serviceController: state.serviceController,\n autoStart: state.autoStart,\n };\n}\n\nexport async function readDaemonServiceRuntimeSnapshot(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceRuntimeState | null> {\n return await readDaemonServiceRuntimeState(pathInput);\n}\n\nexport function resolveDaemonServiceRuntimeMetadata(\n input: DaemonServiceRuntimeMetadataInput = {}\n): DaemonServiceRuntimeMetadata {\n const env = input.env ?? process.env;\n const managedBySystemService =\n input.managedBySystemService === true ||\n env[DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV] === \"1\";\n const serviceControllerInput =\n typeof input.serviceController === \"string\" &&\n input.serviceController.length > 0\n ? input.serviceController\n : env[DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV];\n const autoStart =\n input.autoStart === true ||\n env[DAEMON_SERVICE_RUNTIME_AUTO_START_ENV] === \"1\";\n\n return {\n managedBySystemService,\n serviceController: parseDaemonServiceController(serviceControllerInput),\n autoStart,\n };\n}\n\nexport async function setDaemonServiceRuntimeState(\n state: DaemonServiceRuntimeState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await writeDaemonServiceRuntimeState(state, pathInput);\n}\n\nexport async function clearDaemonServiceRuntimeState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const { clearDaemonRuntimeLease } = await import(\"./daemon-runtime-lease\");\n await Promise.all([\n rm(daemonServiceRuntimeStatePath(pathInput), { force: true }),\n clearDaemonRuntimeLease(pathInput),\n ]);\n}\n\nexport function withDaemonServiceRunLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta = {\n intent: \"run_background\",\n command: \"openmeld service start\",\n }\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport async function acquireDaemonServiceLifecycleLock(\n meta: DaemonLifecycleLockMeta = {\n intent: \"run_background\",\n command: \"openmeld service start\",\n },\n pathResolution: OpenMeldPathResolutionInput = resolveOpenMeldServiceOwnedPathInput()\n): Promise<DaemonServiceLifecycleLock> {\n return await acquireLock({\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n key: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n meta,\n pathResolution,\n });\n}\n\nexport async function releaseDaemonServiceLifecycleLock(\n lock: DaemonServiceLifecycleLock\n): Promise<void> {\n await releaseLock(lock);\n}\n\nexport function withDaemonServiceStopLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta = {\n intent: \"stop\",\n command: \"openmeld service stop\",\n }\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport function withDaemonServiceReconcileLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta = {\n intent: \"upgrade_reconcile\",\n command: \"openmeld service update\",\n }\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport function withDaemonServiceRegistrationMutationLock<T>(\n callback: () => Promise<T>,\n meta: DaemonLifecycleLockMeta\n): Promise<T> {\n return withDaemonServiceLifecycleLock(meta, callback);\n}\n\nexport function withDaemonServiceLifecycleLock<T>(\n meta: DaemonLifecycleLockMeta,\n callback: () => Promise<T>,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<T> {\n const pathResolution = resolveOpenMeldServiceOwnedPathInput(pathInput);\n const ownerRoot = resolveOpenMeldRootDir(pathResolution);\n const currentContext = daemonServiceLifecycleLockContext.getStore();\n if (currentContext?.active && currentContext.ownerRoot === ownerRoot) {\n let operation: Promise<T>;\n try {\n operation = callback();\n } catch (error) {\n operation = Promise.reject(error);\n }\n let trackedOperation: Promise<void>;\n trackedOperation = operation\n .then(\n () => undefined,\n (error: unknown) => {\n currentContext.failures.push(error);\n }\n )\n .finally(() => {\n currentContext.pendingOperations.delete(trackedOperation);\n });\n currentContext.pendingOperations.add(trackedOperation);\n return operation;\n }\n return withDaemonServiceLifecycleOwnerLock({\n callback,\n meta,\n ownerRoot,\n pathResolution,\n });\n}\n\nasync function withDaemonServiceLifecycleOwnerLock<T>(input: {\n callback: () => Promise<T>;\n meta: DaemonLifecycleLockMeta;\n ownerRoot: string;\n pathResolution: OpenMeldPathResolutionInput;\n}): Promise<T> {\n const lock = await acquireDaemonServiceLifecycleLock(\n input.meta,\n input.pathResolution\n );\n return await runWithHeldLock({\n lock,\n run: async () => {\n const context: DaemonServiceLifecycleLockContext = {\n lock,\n active: true,\n failures: [],\n ownerRoot: input.ownerRoot,\n pendingOperations: new Set(),\n };\n let outcome: { ok: true; value: T } | { ok: false; error: unknown };\n try {\n outcome = {\n ok: true,\n value: await daemonServiceLifecycleLockContext.run(\n context,\n input.callback\n ),\n };\n } catch (error) {\n outcome = { ok: false, error };\n } finally {\n while (context.pendingOperations.size > 0) {\n await Promise.all([...context.pendingOperations]);\n }\n context.active = false;\n }\n const failures = [\n ...(outcome.ok ? [] : [outcome.error]),\n ...context.failures,\n ].filter(\n (failure, index, allFailures) => allFailures.indexOf(failure) === index\n );\n if (failures.length === 1) {\n throw failures[0];\n }\n if (failures.length > 1) {\n throw new AggregateError(\n failures,\n \"daemon service lifecycle mutation failed in more than one operation\"\n );\n }\n if (!outcome.ok) {\n throw outcome.error;\n }\n return outcome.value;\n },\n releaseContext: {\n command: input.meta.command,\n component: \"daemon_service_lifecycle\",\n intent: input.meta.intent,\n lockKey: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n },\n });\n}\n\nexport async function readDaemonServiceLifecycleLockMeta(): Promise<DaemonLifecycleLockMeta | null> {\n const meta = await readLockMeta({\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n key: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n pathResolution: resolveOpenMeldServiceOwnedPathInput(),\n });\n if (!meta) {\n return null;\n }\n const intent =\n typeof meta.intent === \"string\"\n ? normalizeDaemonLifecycleIntent(meta.intent)\n : null;\n const command = typeof meta.command === \"string\" ? meta.command.trim() : \"\";\n if (!intent || command.length === 0) {\n return null;\n }\n const pid = typeof meta.pid === \"number\" ? meta.pid : undefined;\n const sessionId =\n typeof meta.sessionId === \"string\" && meta.sessionId.trim().length > 0\n ? meta.sessionId.trim()\n : undefined;\n const at =\n typeof meta.at === \"string\" && meta.at.trim().length > 0\n ? meta.at.trim()\n : undefined;\n return {\n intent,\n command,\n ...(typeof pid === \"number\" ? { pid } : {}),\n ...(sessionId ? { sessionId } : {}),\n ...(at ? { at } : {}),\n };\n}\n\nexport async function readDaemonServiceLifecycleLockMetaWithCleanup(): Promise<DaemonLifecycleLockMeta | null> {\n await tryCleanupStaleLock({\n openMeldProfileId: DAEMON_SERVICE_LIFECYCLE_LOCK_PROFILE,\n key: DAEMON_SERVICE_LIFECYCLE_LOCK_KEY,\n pathResolution: resolveOpenMeldServiceOwnedPathInput(),\n });\n return await readDaemonServiceLifecycleLockMeta();\n}\n\nexport async function installDaemon(input: {\n daemonVersion: string;\n source: DaemonInstallSource;\n}): Promise<DaemonInstallResult> {\n const existingState = await readDaemonInstallState();\n const runtimeExists = await pathExists(daemonRuntimeRootPath());\n if (\n existingState &&\n runtimeExists &&\n existingState.daemonVersion === input.daemonVersion\n ) {\n await ensureDaemonTokenState();\n return {\n status: \"already_installed\",\n state: existingState,\n };\n }\n\n await ensureDaemonRuntimeLayout();\n const now = new Date().toISOString();\n const nextState: DaemonInstallState = {\n v: 1,\n schema: DAEMON_STATE_SCHEMA,\n daemonVersion: input.daemonVersion,\n installSource: input.source,\n installedAt: existingState?.installedAt ?? now,\n updatedAt: now,\n };\n await writeDaemonInstallState(nextState);\n await ensureDaemonTokenState();\n\n return {\n status: \"installed\",\n state: nextState,\n };\n}\n\nexport async function uninstallDaemon(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonUninstallResult> {\n const [hasState, hasRuntimeDir, hasToken] = await Promise.all([\n pathExists(daemonStatePath(pathInput)),\n pathExists(daemonRuntimeRootPath(pathInput)),\n pathExists(daemonTokenPath(pathInput)),\n ]);\n\n await Promise.all([\n rm(daemonStatePath(pathInput), { force: true }),\n rm(daemonTokenPath(pathInput), { force: true }),\n rm(daemonServiceRuntimeStatePath(pathInput), { force: true }),\n rm(daemonRuntimeRootPath(pathInput), { recursive: true, force: true }),\n ]);\n\n return {\n removed: hasState || hasRuntimeDir || hasToken,\n };\n}\n\nexport function daemonStatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(systemDir(pathInput), \"daemon-install.json\");\n}\n\nexport function daemonRuntimeRootPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(runtimeDir(pathInput), \"daemon\");\n}\n\nexport function daemonServiceRuntimeStatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-runtime.json\");\n}\n\nexport function daemonRuntimeDataPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"data\");\n}\n\nexport function daemonRuntimeBundlesPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"bundles\");\n}\n\nexport function daemonRuntimeStateRootPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"state\");\n}\n\nexport function daemonLifecycleJournalPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeRootPath(pathInput),\n \"logs\",\n DAEMON_LIFECYCLE_JOURNAL_FILENAME\n );\n}\n\nexport function daemonDispatchJournalPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeRootPath(pathInput),\n \"logs\",\n DAEMON_DISPATCH_JOURNAL_FILENAME\n );\n}\n\nexport function daemonServiceActiveBundleStatePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeStateRootPath(pathInput),\n DAEMON_ACTIVE_BUNDLE_STATE_FILENAME\n );\n}\n\nexport function daemonServiceRepairJournalPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeStateRootPath(pathInput),\n DAEMON_REPAIR_JOURNAL_FILENAME\n );\n}\n\nexport function daemonRuntimeServiceManagerPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(daemonRuntimeRootPath(pathInput), \"service-manager\");\n}\n\nexport function daemonServiceStableLauncherPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_STABLE_LAUNCHER_FILENAME\n );\n}\n\nexport function daemonServiceStableExecutableWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceStableBinaryExecutablePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_BINARY_EXECUTABLE_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceUpdateWorkerBinaryExecutablePath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_UPDATE_WORKER_BINARY_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceLegacyExecutableWrapperPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(pathInput);\n return join(\n daemonRuntimeServiceManagerPath(pathInput),\n DAEMON_SERVICE_LEGACY_EXECUTABLE_WRAPPER_FILENAME_BY_PRESET[preset]\n );\n}\n\nexport function daemonServiceExecutableWrapperPaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return [\n daemonServiceStableExecutableWrapperPath(pathInput),\n daemonServiceLegacyExecutableWrapperPath(pathInput),\n ];\n}\n\nexport function daemonServiceRecognizedExecutablePaths(\n pathInput: OpenMeldPathResolutionInput = {}\n): string[] {\n return [\n daemonServiceStableBinaryExecutablePath(pathInput),\n ...daemonServiceExecutableWrapperPaths(pathInput),\n ];\n}\n\nexport function daemonTokenPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(systemDir(pathInput), \"daemon-token.json\");\n}\n\nexport async function restoreDaemonInstallStateSnapshot(\n snapshot: DaemonInstallState | null,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n if (!snapshot) {\n await rm(daemonStatePath(pathInput), { force: true });\n return;\n }\n await writeDaemonInstallState(snapshot, pathInput);\n}\n\nexport function resolveDaemonControlPlaneEndpoint(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const runtimeRoot = daemonRuntimeRootPath(pathInput);\n const suffix = createHash(\"sha256\")\n .update(runtimeRoot)\n .digest(\"hex\")\n .slice(0, 24);\n if (process.platform === \"win32\") {\n return `\\\\\\\\.\\\\pipe\\\\openmeld-daemon-control-${suffix}`;\n }\n return join(tmpdir(), `openmeld-daemon-control-${suffix}.sock`);\n}\n\nexport async function ensureDaemonControlPlaneToken(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string> {\n const state = await ensureDaemonTokenState(pathInput);\n return state.token;\n}\n\nexport async function rotateDaemonControlPlaneTokenIfExpired(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonTokenState> {\n const current = await readDaemonTokenState(pathInput);\n if (current && !isDaemonTokenExpired(current)) {\n await chmod(daemonTokenPath(pathInput), 0o600).catch(() => undefined);\n return current;\n }\n\n return await writeNewDaemonTokenState(pathInput);\n}\n\nexport async function readDaemonControlPlaneToken(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<string | null> {\n const state = await readDaemonTokenState(pathInput);\n return state?.token ?? null;\n}\n\nfunction isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return !(\n error instanceof Error &&\n (error as NodeJS.ErrnoException).code === \"ESRCH\"\n );\n }\n}\n\nasync function readDaemonServiceRuntimeState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceRuntimeState | null> {\n const raw = await readFile(\n daemonServiceRuntimeStatePath(pathInput),\n \"utf8\"\n ).catch((error) => {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return null;\n }\n return parseDaemonServiceRuntimeState(raw);\n}\n\nfunction parseDaemonServiceRuntimeState(\n raw: string\n): DaemonServiceRuntimeState | null {\n try {\n const parsed = JSON.parse(raw);\n if (!isDaemonServiceRuntimeStateObject(parsed)) {\n return null;\n }\n\n return {\n v: 1,\n schema: DAEMON_SERVICE_RUNTIME_STATE_SCHEMA,\n status: \"running\",\n pid: parsed.pid,\n mode: parsed.mode,\n command: parsed.command,\n gatewayUrl: parseNullableString(parsed.gatewayUrl),\n openMeldProfileId: resolveStoredDaemonServiceOpenMeldProfileId(parsed),\n stopRequestedAt: parseNullableString(parsed.stopRequestedAt),\n heartbeatAt: parseNullableString(parsed.heartbeatAt),\n startedAt: parsed.startedAt,\n updatedAt: parsed.updatedAt,\n managedBySystemService: parsed.managedBySystemService === true,\n serviceController: parseDaemonServiceController(parsed.serviceController),\n autoStart: parsed.autoStart === true,\n };\n } catch {\n return null;\n }\n}\n\nfunction isDaemonServiceRuntimeStateObject(value: unknown): value is {\n v: 1;\n schema: string;\n status: \"running\";\n pid: number;\n mode: DaemonRunMode;\n command: string;\n gatewayUrl: string | null;\n openMeldProfileId?: string | null;\n profile?: string | null;\n stopRequestedAt: string | null;\n heartbeatAt: string | null;\n startedAt: string;\n updatedAt: string;\n managedBySystemService?: boolean;\n serviceController?: string;\n autoStart?: boolean;\n} {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const candidate = value as Record<string, unknown>;\n return (\n candidate.v === 1 &&\n candidate.schema === DAEMON_SERVICE_RUNTIME_STATE_SCHEMA &&\n candidate.status === \"running\" &&\n typeof candidate.pid === \"number\" &&\n candidate.pid > 0 &&\n (candidate.mode === \"foreground\" || candidate.mode === \"background\") &&\n typeof candidate.command === \"string\" &&\n candidate.command.length > 0 &&\n isValidNullableString(candidate.gatewayUrl) &&\n isValidOptionalNullableString(candidate.openMeldProfileId) &&\n isValidOptionalNullableString(candidate.profile) &&\n isValidNullableString(candidate.stopRequestedAt) &&\n isValidNullableString(candidate.heartbeatAt) &&\n typeof candidate.startedAt === \"string\" &&\n candidate.startedAt.length > 0 &&\n typeof candidate.updatedAt === \"string\" &&\n candidate.updatedAt.length > 0\n );\n}\n\nexport function parseDaemonServiceController(\n value: unknown\n): DaemonServiceController {\n if (\n value === \"launchd\" ||\n value === \"systemd\" ||\n value === \"windows-service\" ||\n value === \"legacy-detached\" ||\n value === \"unknown\"\n ) {\n return value;\n }\n return \"unknown\";\n}\n\nfunction isValidNullableString(value: unknown): value is string | null {\n return value === null || typeof value === \"string\";\n}\n\nfunction isValidOptionalNullableString(\n value: unknown\n): value is string | null | undefined {\n return value === undefined || value === null || typeof value === \"string\";\n}\n\nfunction parseNullableString(value: unknown): string | null {\n if (value === null) {\n return null;\n }\n if (typeof value !== \"string\") {\n return null;\n }\n return value;\n}\n\nfunction resolveStoredDaemonServiceOpenMeldProfileId(input: {\n openMeldProfileId?: unknown;\n profile?: unknown;\n}): string | null {\n const openMeldProfileId = parseNullableString(input.openMeldProfileId);\n const legacyProfile = parseNullableString(input.profile);\n if (\n openMeldProfileId &&\n legacyProfile &&\n openMeldProfileId !== legacyProfile\n ) {\n throw new Error(\"conflicting openMeldProfileId values\");\n }\n return openMeldProfileId ?? legacyProfile;\n}\n\nexport function isDaemonServiceRuntimeHeartbeatStale(\n state: DaemonServiceRuntimeState\n): boolean {\n const latestSignalAt = Math.max(\n parseIsoTimestampOrZero(state.heartbeatAt),\n parseIsoTimestampOrZero(state.updatedAt)\n );\n if (latestSignalAt <= 0) {\n return false;\n }\n return Date.now() - latestSignalAt > DAEMON_HEARTBEAT_STALE_MS;\n}\n\nfunction parseIsoTimestampOrZero(value: string | null): number {\n if (!value) {\n return 0;\n }\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nasync function writeDaemonServiceRuntimeState(\n state: DaemonServiceRuntimeState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const path = daemonServiceRuntimeStatePath(pathInput);\n const runtimeRootPath = daemonRuntimeRootPath(pathInput);\n await mkdir(runtimeRootPath, { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n let shouldCleanupTemp = true;\n\n try {\n await writeFile(tempPath, `${JSON.stringify(state, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await rename(tempPath, path);\n await chmod(path, 0o600);\n shouldCleanupTemp = false;\n } finally {\n if (shouldCleanupTemp) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nasync function ensureDaemonRuntimeLayout(): Promise<void> {\n await Promise.all([\n mkdir(systemDir(), { recursive: true }),\n mkdir(join(daemonRuntimeRootPath(), \"bin\"), { recursive: true }),\n mkdir(daemonRuntimeBundlesPath(), { recursive: true }),\n mkdir(join(daemonRuntimeRootPath(), \"data\"), { recursive: true }),\n mkdir(join(daemonRuntimeRootPath(), \"logs\"), { recursive: true }),\n mkdir(daemonRuntimeStateRootPath(), { recursive: true }),\n mkdir(daemonRuntimeServiceManagerPath(), { recursive: true }),\n ]);\n}\n\nfunction normalizeDaemonLifecycleIntent(\n value: string\n): DaemonLifecycleIntent | null {\n switch (value) {\n case \"run_background\":\n case \"run_foreground\":\n case \"stop\":\n case \"autostart\":\n case \"status_cleanup\":\n case \"startup_check\":\n case \"start\":\n case \"reinstall\":\n case \"uninstall\":\n case \"upgrade_reconcile\":\n return value;\n default:\n return null;\n }\n}\n\nasync function ensureDaemonTokenState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonTokenState> {\n const current = await readDaemonTokenState(pathInput);\n if (current) {\n await chmod(daemonTokenPath(pathInput), 0o600).catch(() => undefined);\n return current;\n }\n\n return await writeNewDaemonTokenState(pathInput);\n}\n\nasync function writeNewDaemonTokenState(\n pathInput: OpenMeldPathResolutionInput\n): Promise<DaemonTokenState> {\n const nowIso = new Date().toISOString();\n const next: DaemonTokenState = {\n v: 1,\n schema: DAEMON_TOKEN_SCHEMA,\n token: createDaemonTokenValue(),\n issuedAt: nowIso,\n updatedAt: nowIso,\n };\n await writeDaemonTokenState(next, pathInput);\n return next;\n}\n\nasync function readDaemonInstallState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonInstallState | null> {\n const raw = await readFile(daemonStatePath(pathInput), \"utf8\").catch(\n (error) => {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return null;\n }\n throw error;\n }\n );\n if (raw === null) {\n return null;\n }\n return parseDaemonInstallState(raw);\n}\n\nfunction parseDaemonInstallState(raw: string): DaemonInstallState | null {\n try {\n const parsed = JSON.parse(raw) as Partial<DaemonInstallState>;\n if (parsed.v !== 1) {\n return null;\n }\n if (parsed.schema !== DAEMON_STATE_SCHEMA) {\n return null;\n }\n if (typeof parsed.daemonVersion !== \"string\" || !parsed.daemonVersion) {\n return null;\n }\n if (!isDaemonInstallSource(parsed.installSource)) {\n return null;\n }\n if (typeof parsed.installedAt !== \"string\" || !parsed.installedAt) {\n return null;\n }\n if (typeof parsed.updatedAt !== \"string\" || !parsed.updatedAt) {\n return null;\n }\n return {\n v: 1,\n schema: DAEMON_STATE_SCHEMA,\n daemonVersion: parsed.daemonVersion,\n installSource: parsed.installSource,\n installedAt: parsed.installedAt,\n updatedAt: parsed.updatedAt,\n };\n } catch {\n return null;\n }\n}\n\nfunction isDaemonInstallSource(value: unknown): value is DaemonInstallSource {\n return value === \"cli.auto_check\" || value === \"daemon.command.install\";\n}\n\nasync function writeDaemonInstallState(\n state: DaemonInstallState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const path = daemonStatePath(pathInput);\n await mkdir(systemDir(pathInput), { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n let shouldCleanupTemp = true;\n\n try {\n await writeFile(tempPath, `${JSON.stringify(state, null, 2)}\\n`, \"utf8\");\n await rename(tempPath, path);\n shouldCleanupTemp = false;\n } finally {\n if (shouldCleanupTemp) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nasync function readDaemonTokenState(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonTokenState | null> {\n const raw = await readFile(daemonTokenPath(pathInput), \"utf8\").catch(\n (error) => {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return null;\n }\n throw error;\n }\n );\n if (raw === null) {\n return null;\n }\n return parseDaemonTokenState(raw);\n}\n\nfunction parseDaemonTokenState(raw: string): DaemonTokenState | null {\n try {\n const parsed = JSON.parse(raw) as Partial<DaemonTokenState>;\n if (parsed.v !== 1 || parsed.schema !== DAEMON_TOKEN_SCHEMA) {\n return null;\n }\n if (typeof parsed.token !== \"string\" || parsed.token.length < 16) {\n return null;\n }\n if (typeof parsed.issuedAt !== \"string\" || !parsed.issuedAt) {\n return null;\n }\n if (typeof parsed.updatedAt !== \"string\" || !parsed.updatedAt) {\n return null;\n }\n return {\n v: 1,\n schema: DAEMON_TOKEN_SCHEMA,\n token: parsed.token,\n issuedAt: parsed.issuedAt,\n updatedAt: parsed.updatedAt,\n };\n } catch {\n return null;\n }\n}\n\nasync function writeDaemonTokenState(\n state: DaemonTokenState,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n const path = daemonTokenPath(pathInput);\n await mkdir(systemDir(pathInput), { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n let shouldCleanupTemp = true;\n\n try {\n await writeFile(tempPath, `${JSON.stringify(state, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await rename(tempPath, path);\n await chmod(path, 0o600);\n shouldCleanupTemp = false;\n } finally {\n if (shouldCleanupTemp) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n }\n }\n}\n\nfunction isDaemonTokenExpired(state: DaemonTokenState): boolean {\n const updatedAtMs = Date.parse(state.updatedAt);\n if (!Number.isFinite(updatedAtMs)) {\n return true;\n }\n return Date.now() - updatedAtMs >= DAEMON_TOKEN_ROTATE_MAX_AGE_MS;\n}\n\nfunction createDaemonTokenValue(): string {\n return randomBytes(32).toString(\"base64url\");\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return false;\n }\n throw error;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { d as createDefaultRuntimeAgentControllerSettings } from "./base-url-
|
|
3
|
+
import { d as createDefaultRuntimeAgentControllerSettings } from "./base-url-DuppOOaB.js";
|
|
4
4
|
import { F as resolveOpenMeldRootDir, P as resolveOpenMeldEnvPreset, a as accountProfileWorkspacePath, b as normalizeOpenMeldProfileId, g as legacyAccountProfileSpacesDir, r as accountProfileSpaceCacheDir, w as openMeldManagedBinaryPath } from "./paths-De9xdA2h.js";
|
|
5
5
|
import { Gi as discriminatedUnion, Mn as agentActivitySessionInventoryResponseSchema, Qi as literal, Ui as boolean, Un as listProjectsResponseSchema, Vn as createProjectResponseSchema, Xn as projectSchema, Yi as iso, aa as strictObject, da as url, ma as openMeldRequestContextSchema, mi as centerAgentToolSpeakerSchema, oa as string, qi as enumFactory, ur as updateProjectResponseSchema, va as openMeldRuntimeProfileIdSchema, zn as archiveProjectResponseSchema } from "./dist-zRc0hA1y.js";
|
|
6
6
|
import { Et as getSpaceMessageAddressingRelationSupportForTargetKind, Nn as profileFolderProjectionSchema, Nt as resolveMessageEnvelopeTargetField, jt as normalizeMessageEnvelope, wt as collectCanonicalMentionTextFragments, yt as MESSAGE_MENTION_TYPE_VALUES } from "./task-result-DhOFm1C_.js";
|
|
7
|
-
import { Ch as routineManagementSchema, Eh as updateCenterAgentRoutineResponseSchema, Kc as organizationDirectoryResponseSchema, Lc as organizationSpaceDirectoryWithMemberCountsResponseSchema, Qh as agentActivityEventSchema, Sy as localProjectControlConnectionSchema, Wh as AGENT_ACTIVITY_PRESENCE_TTL_MAX_MS, _h as listRoutineManagementResponseSchema, ab as computerFileAccessPolicyInputSchema, cb as computerFileAccessPolicySchema, ch as createCenterAgentRoutineResponseSchema, fh as listCenterAgentRoutineRunsResponseSchema, fl as submitFeedbackIssueRequestSchema, gh as listCenterAgentRoutinesResponseSchema, nh as centerAgentRoutineSchema, og as agentActivitySnapshotResponseSchema, pl as submitFeedbackIssueResponseSchema, rm as organizationComputersResponseSchema, t_ as spaceCreatorSchema, uh as deleteCenterAgentRoutineResponseSchema, xh as resumeCenterAgentRoutineResponseSchema, xi as spaceEntryTargetSchema, xl as sessionHistoryPageSchema, yh as pauseCenterAgentRoutineResponseSchema } from "./dist-
|
|
8
|
-
import { B as readProfileFolderListForAccount, Er as renderNonOwnerAudiencePathGuidance, F as defaultProfileFolderDisplayName, Kr as DaemonServiceRunError, L as mutateProfileFolderListForAccount, Or as renderWorkingLanguagePrompt, P as ProfileFolderListLimitError, R as nextProfileFolderRevision, Sr as parseAgentControllerRef, Tr as renderInformationProtectionPrompt, X as validateCustomProfileWorkspacePath, Y as describeProfileWorkspacePathValidationFailure, Z as ProjectBindingOperationError, _t as withAgentActivityLocalStateLock, cr as areAgentControllerInterfaceAccountsSame, dr as buildWorkingLanguagePromptPlan, et as claimLegacyProjectConnection, ht as resolveLocalProjectConnectionForPath, it as listProjectConnectionsWithStatus, mt as isProjectConnectionReadableByOwner, nt as isProjectBound, pt as canonicalizeLocalProjectPath, rt as listProjectBindings, ur as buildInformationProtectionPromptPlan, vr as isAgentControllerUsageAccountUnavailable } from "./prepare-provider-runtime-
|
|
9
|
-
import { Ct as organizationSkillGitHubRepositoryPreviewSchema, Lt as organizationSkillSummarySchema, _n as spaceMemberKindSchema, dn as spaceMemberAgentWakeAvailabilitySchema, fn as spaceMemberDirectoryAllowedRelationsSchema, ft as getOrganizationSkillResponseSchema, hn as spaceMemberDirectorySchema, kt as organizationSkillReleaseSummarySchema, vt as listOrganizationSkillsResponseSchema } from "./dist-
|
|
10
|
-
import { B as runtimeTransportHeartbeatResponseSchema, Cn as sanitizeSignalTextPreview, Ei as resolveSpaceMentionLabels, Si as normalizeSpacePasswordText, Ti as resolveSingleSpaceMentionLabels, l as daemonStreamFrameSchema, rt as runtimeTransportRegisterSessionResponseSchema } from "./runtime-transport-
|
|
7
|
+
import { Ch as routineManagementSchema, Eh as updateCenterAgentRoutineResponseSchema, Kc as organizationDirectoryResponseSchema, Lc as organizationSpaceDirectoryWithMemberCountsResponseSchema, Qh as agentActivityEventSchema, Sy as localProjectControlConnectionSchema, Wh as AGENT_ACTIVITY_PRESENCE_TTL_MAX_MS, _h as listRoutineManagementResponseSchema, ab as computerFileAccessPolicyInputSchema, cb as computerFileAccessPolicySchema, ch as createCenterAgentRoutineResponseSchema, fh as listCenterAgentRoutineRunsResponseSchema, fl as submitFeedbackIssueRequestSchema, gh as listCenterAgentRoutinesResponseSchema, nh as centerAgentRoutineSchema, og as agentActivitySnapshotResponseSchema, pl as submitFeedbackIssueResponseSchema, rm as organizationComputersResponseSchema, t_ as spaceCreatorSchema, uh as deleteCenterAgentRoutineResponseSchema, xh as resumeCenterAgentRoutineResponseSchema, xi as spaceEntryTargetSchema, xl as sessionHistoryPageSchema, yh as pauseCenterAgentRoutineResponseSchema } from "./dist-BC0SB_h-.js";
|
|
8
|
+
import { B as readProfileFolderListForAccount, Er as renderNonOwnerAudiencePathGuidance, F as defaultProfileFolderDisplayName, Kr as DaemonServiceRunError, L as mutateProfileFolderListForAccount, Or as renderWorkingLanguagePrompt, P as ProfileFolderListLimitError, R as nextProfileFolderRevision, Sr as parseAgentControllerRef, Tr as renderInformationProtectionPrompt, X as validateCustomProfileWorkspacePath, Y as describeProfileWorkspacePathValidationFailure, Z as ProjectBindingOperationError, _t as withAgentActivityLocalStateLock, cr as areAgentControllerInterfaceAccountsSame, dr as buildWorkingLanguagePromptPlan, et as claimLegacyProjectConnection, ht as resolveLocalProjectConnectionForPath, it as listProjectConnectionsWithStatus, mt as isProjectConnectionReadableByOwner, nt as isProjectBound, pt as canonicalizeLocalProjectPath, rt as listProjectBindings, ur as buildInformationProtectionPromptPlan, vr as isAgentControllerUsageAccountUnavailable } from "./prepare-provider-runtime-D4X1jiYQ.js";
|
|
9
|
+
import { Ct as organizationSkillGitHubRepositoryPreviewSchema, Lt as organizationSkillSummarySchema, _n as spaceMemberKindSchema, dn as spaceMemberAgentWakeAvailabilitySchema, fn as spaceMemberDirectoryAllowedRelationsSchema, ft as getOrganizationSkillResponseSchema, hn as spaceMemberDirectorySchema, kt as organizationSkillReleaseSummarySchema, vt as listOrganizationSkillsResponseSchema } from "./dist-VZtPE-jT.js";
|
|
10
|
+
import { B as runtimeTransportHeartbeatResponseSchema, Cn as sanitizeSignalTextPreview, Ei as resolveSpaceMentionLabels, Si as normalizeSpacePasswordText, Ti as resolveSingleSpaceMentionLabels, l as daemonStreamFrameSchema, rt as runtimeTransportRegisterSessionResponseSchema } from "./runtime-transport-CLpKUHk_.js";
|
|
11
11
|
import { b as localServiceComponentUpdateProjectionSchema, c as localCliComponentUpdateProjectionSchema } from "./local-components-B3vffkMy.js";
|
|
12
12
|
import { it as providerDispatchRuntimeContextSchema } from "./control-plane-dGjd5iC7.js";
|
|
13
|
-
import { a as asRecord, d as normalizeText, l as normalizeNonNegativeInteger$1, s as emitRunLine, u as normalizeOptionalText$9 } from "./daemon-device-id-
|
|
13
|
+
import { a as asRecord, d as normalizeText, l as normalizeNonNegativeInteger$1, s as emitRunLine, u as normalizeOptionalText$9 } from "./daemon-device-id-CGV19VtH.js";
|
|
14
14
|
import { a as serviceControlCapabilitiesSchema } from "./service-account-admission-DN33uHmt.js";
|
|
15
|
-
import { ct as formatOpenMeldCliTextBlock, d as getAuthSessionState } from "./auth-session-
|
|
16
|
-
import {
|
|
17
|
-
import { A as DISPATCH_SPACE_ACTION_CLI_FALLBACK_COMMAND, E as renderSpaceEntryBrief, F as OPENMELD_USER_FACING_CLI_COMMAND_ENV, M as OPENMELD_DISPATCH_RUNTIME_MODE_ENV, N as OPENMELD_DISPATCH_RUNTIME_TARGET_PROFILE_ID_ENV, O as resolveSpacePublicationRequirement, P as OPENMELD_SPACE_ACTION_TOOL_COMMAND_PATH_ENV, S as buildSpaceWakeParticipantLines, T as deriveContinuity, a as OPENMELD_SPACE_ACTION_CONTEXT_PATH_ENV, b as buildSpaceAgentIdentityLine, g as buildAgentFacingMentalModelLines, j as OPENMELD_DISPATCH_RUNTIME_DISPATCH_ID_ENV, k as DISPATCH_OWNED_RUNTIME_MODE, p as SPACE_COLLABORATION_CONTEXT_RULE, v as buildCenterAgentRoleTemplateText, w as composeDispatchBrief, x as buildSpaceEntryBriefNeedMoreLine, y as buildCompactDispatchActionGuidanceLines } from "./sensitive-operation-credentials-
|
|
18
|
-
import { F as resolveCurrentOpenMeldAccountContext } from "./context-
|
|
15
|
+
import { ct as formatOpenMeldCliTextBlock, d as getAuthSessionState } from "./auth-session-B2lS_bSW.js";
|
|
16
|
+
import { y as resolveCliContextId } from "./lock-B0YzvcUu.js";
|
|
17
|
+
import { A as DISPATCH_SPACE_ACTION_CLI_FALLBACK_COMMAND, E as renderSpaceEntryBrief, F as OPENMELD_USER_FACING_CLI_COMMAND_ENV, M as OPENMELD_DISPATCH_RUNTIME_MODE_ENV, N as OPENMELD_DISPATCH_RUNTIME_TARGET_PROFILE_ID_ENV, O as resolveSpacePublicationRequirement, P as OPENMELD_SPACE_ACTION_TOOL_COMMAND_PATH_ENV, S as buildSpaceWakeParticipantLines, T as deriveContinuity, a as OPENMELD_SPACE_ACTION_CONTEXT_PATH_ENV, b as buildSpaceAgentIdentityLine, g as buildAgentFacingMentalModelLines, j as OPENMELD_DISPATCH_RUNTIME_DISPATCH_ID_ENV, k as DISPATCH_OWNED_RUNTIME_MODE, p as SPACE_COLLABORATION_CONTEXT_RULE, v as buildCenterAgentRoleTemplateText, w as composeDispatchBrief, x as buildSpaceEntryBriefNeedMoreLine, y as buildCompactDispatchActionGuidanceLines } from "./sensitive-operation-credentials-D9DHfCDf.js";
|
|
18
|
+
import { F as resolveCurrentOpenMeldAccountContext } from "./context-C6GiteNY.js";
|
|
19
19
|
import { n as resolveOpenMeldDistribution } from "./distribution-BDQT2ilb.js";
|
|
20
|
-
import { a as DAEMON_SERVICE_RUNTIME_MODE_ENV, d as daemonDispatchJournalPath, h as daemonRuntimeRootPath, i as DAEMON_SERVICE_RUNTIME_DETACHED_ENV, n as DAEMON_SERVICE_RUNTIME_AUTO_START_ENV, r as DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV, s as DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV } from "./daemon-state-
|
|
20
|
+
import { a as DAEMON_SERVICE_RUNTIME_MODE_ENV, d as daemonDispatchJournalPath, h as daemonRuntimeRootPath, i as DAEMON_SERVICE_RUNTIME_DETACHED_ENV, n as DAEMON_SERVICE_RUNTIME_AUTO_START_ENV, r as DAEMON_SERVICE_RUNTIME_CONTROLLER_ENV, s as DAEMON_SERVICE_RUNTIME_SYSTEM_SERVICE_ENV } from "./daemon-state-C72A-n6c.js";
|
|
21
21
|
import { D as buildCliLaunchInvocation } from "./dist-DptLNaka.js";
|
|
22
22
|
import { createHash, randomUUID } from "node:crypto";
|
|
23
23
|
import { homedir, hostname, userInfo } from "node:os";
|
|
@@ -7203,4 +7203,4 @@ function prependPathEntry(input) {
|
|
|
7203
7203
|
//#endregion
|
|
7204
7204
|
export { resolveNextRuntimeAgentControllerReportSyncAtMs as $, cliJsonRoutinesShowEnvelopeSchema as $n, extractMentionAuthoringPrefix as $t, enqueueAgentActivityHookEvent as A, cliJsonErrorEnvelopeSchema as An, writeSpaceCacheDeletionNoticeState as At, buildCanonicalRepositoryUrl as B, cliJsonProjectsConnectionsListEnvelopeSchema as Bn, buildSpaceMemberAgentPresencePresentation as Bt, resolveOpenCodeAuthPath as C, cliJsonAgentsListEnvelopeSchema as Cn, cliVersionVerdictSchema as Cr, readSpaceLastSeenTs as Ct, normalizeSharedSessionTitle as D, cliJsonDaemonStatusEnvelopeSchema as Dn, serviceVersionVerdictSchema as Dr, toSpaceConfigListIntegrityError as Dt, resolveObservedAgentActivityBinding as E, cliJsonDaemonRunEnvelopeSchema as En, serviceVersionVerdictKindSchema as Er, toLocalSpaceStateIntegrityError as Et, readAgentActivityOutboxHealth as F, cliJsonOrganizationInviteLinkGetEnvelopeSchema as Fn, buildPublicSpaceEntryPath as Ft, readLastKnownAgentControllerAuthSnapshot as G, cliJsonProjectsUnbindEnvelopeSchema as Gn, buildSpaceRoundSignalPublication as Gt, buildAgentControllerInterfaceKeeperKey as H, cliJsonProjectsConnectionsSetDefaultEnvelopeSchema as Hn, buildSpaceMessageReadRelationSummary as Ht, readDueAgentActivityOutbox as I, cliJsonOrganizationInviteLinkRevokeEnvelopeSchema as In, buildPublicSpaceEntryUrl as It, readReusableAgentControllerInterfaceSnapshot as J, cliJsonRoutinesDeleteEnvelopeSchema as Jn, collectResolvedSpaceMentions as Jt, readLastKnownAgentControllerUsageLimits as K, cliJsonProjectsUpdateEnvelopeSchema as Kn, buildUpdatesReplyWorkflowProjection as Kt, removeProjectOutbox as L, cliJsonOutputEnvelopeSchema as Ln, buildSignalIndex as Lt, AgentActivitySubmissionResultsMismatchError as M, cliJsonOrganizationComputersEnvelopeSchema as Mn, SpaceComposerSubmissionError as Mt, applyAgentActivitySubmissionResults as N, cliJsonOrganizationDirectoryEnvelopeSchema as Nn, buildDispatchResultMessageReadProjection as Nt, readCodexSessionTitles as O, cliJsonDaemonStopEnvelopeSchema as On, updateSpaceLastSeenTs as Ot, deferAgentActivityOutbox as P, cliJsonOrganizationInviteLinkCreateEnvelopeSchema as Pn, buildDispatchResultReplyWorkflowProjection as Pt, resolveAgentControllerCommandFingerprint as Q, cliJsonRoutinesRunsEnvelopeSchema as Qn, enterRelationPickerState as Qt, readRecentAgentActivityHookStatus as R, cliJsonProjectsArchiveEnvelopeSchema as Rn, buildSignalMessageReadProjection as Rt, readOpenCodeSessionRows as S, cliJsonAgentsEnableEnvelopeSchema as Sn, cliVersionVerdictKindSchema as Sr, readSpaceConfig as St, buildAgentActivityEvent as T, cliJsonDaemonReinstallEnvelopeSchema as Tn, daemonStatusServerRequirementUnavailableReasonSchema as Tr, removeSpaceConfig as Tt, consumeArmedAgentControllerInterfaceReprobe as U, cliJsonProjectsCreateEnvelopeSchema as Un, buildSpaceProfileAddPlan as Ut, buildRepositoryFingerprint as V, cliJsonProjectsConnectionsRemoveEnvelopeSchema as Vn, buildSpaceMentionProfileIndex as Vt, didAgentControllerCommandFingerprintRemainStable as W, cliJsonProjectsListEnvelopeSchema as Wn, buildSpaceRoundReadProjection as Wt, recordAgentControllerInterfaceProbeSuccess as X, cliJsonRoutinesPauseEnvelopeSchema as Xn, createSpaceMemberIdentityIndex as Xt, recordAgentControllerInterfaceProbeFailure as Y, cliJsonRoutinesListEnvelopeSchema as Yn, createDispatchContinuationSpaceAccessContext as Yt, recordAgentControllerUsageLimitsObservation as Z, cliJsonRoutinesResumeEnvelopeSchema as Zn, createSpaceTargetCatalog as Zt, readOpenMeldCreatedLocalAgentSessionProjectAttributions as _, SPACE_ACTION_TARGET_GUIDANCE_LINES as _n, organizationJoinLinkErrorResponseSchema as _r, LocalSpaceStateIntegrityError as _t, createCodexJsonRpcClient as a, isWakeClosingSystemNoticeType as an, cliJsonSkillsLoadEnvelopeSchema as ar, updateComputerFileAccessPolicy as at, resolveOpenMeldCreatedLocalAgentSessionProjectAttribution as b, cliJsonAgentsDetectEnvelopeSchema as bn, organizationJoinLinkTokenSchema as br, listSpaceConfigs as bt, sendDaemonFrame as c, listSpaceMentionSuggestions as cn, cliJsonSpaceListOrganizationEnvelopeSchema as cr, buildDispatchBootstrapTemplateFacts as ct, readProfileFolderDisplayName as d, prepareSpaceFileOnlySubmission as dn, ORGANIZATION_JOIN_LINK_ACCEPT_RATE_LIMITED_ERROR_CODE as dr, buildDispatchSessionTitle as dt, formatRemovedCcRelationMessage as en, cliJsonRoutinesUpdateEnvelopeSchema as er, emitDaemonDispatchJournalEvent as et, resolveProfileFolderRuntimeForAccount as f, resolveNextRecentMentionProfileIdsForQueuedText as fn, acceptOrganizationJoinLinkBodySchema as fr, parseDispatchTask as ft, readOpenMeldCreatedLocalAgentSessionKeys as g, SPACE_ACTION_CONTEXT_GUIDANCE_LINES as gn, organizationJoinLinkErrorCodeSchema as gr, projectSpaceProfileCache as gt, startAgentActivityTranscriptWatchers as h, updateAuthoredMentionRanges as hn, organizationJoinLinkEnsureErrorCodeSchema as hr, resolveDispatchMentionSourceContext as ht, readDispatchOwnedRuntimeGuard as i, isTargetPickerState as in, cliJsonSkillsListEnvelopeSchema as ir, resolveComputerFileAccessStorePath as it, removeProjectInbox as j, cliJsonFeedbackSubmittedEnvelopeSchema as jn, writeSpaceRecentMentionProfileIds as jt, drainAgentActivityHookInbox as k, cliJsonDaemonUninstallEnvelopeSchema as kn, upsertSpaceConfig as kt, ProfileFolderOperationError as l, openTargetPickerState as ln, cliJsonSpaceMembersEnvelopeSchema as lr, buildDispatchCorrelation as lt, scanLocalAgentActivity as m, returnToTargetPickerState as mn, getOrganizationJoinLinkResponseSchema as mr, resolveBootstrapTargetProfileContext as mt, assertDispatchOwnedRuntimeServiceMutationAllowed as n, getSpaceAccessRequestContext as nn, cliJsonSkillsAddEnvelopeSchema as nr, ComputerFileAccessStoreError as nt, handleDaemonTransportFrame as o, listSpaceMemberDirectorySendTargets as on, cliJsonSkillsScanEnvelopeSchema as or, isSameOrDescendantPath as ot, collectObservedSessionWorkingDirectories as p, resolveSpaceMemberAgentOwnerWakeDiagnosticsView as pn, centerAgentOrganizationInviteLinkGenerationGuidanceSchema as pr, resolveBootstrapSpaceOwnerProfileId as pt, readLastSuccessfulAgentControllerInterfaceCheckAt as q, cliJsonRoutinesCreateEnvelopeSchema as qn, closeMentionPickerState as qt, buildDispatchOwnedRuntimeEnv as r, isRelationPickerState as rn, cliJsonSkillsAddPreviewEnvelopeSchema as rr, readComputerFileAccessPolicy as rt, parseDaemonFrame as s, listSpaceMentionRelationChoices as sn, cliJsonSkillsShowEnvelopeSchema as sr, appendNonOwnerAudienceGuidance as st, assertDispatchOwnedRuntimePublicWriteAllowed as t, getSpaceAccessPassword as tn, cliJsonSkillsAddAllEnvelopeSchema as tr, readRecentDaemonDispatchJournalEvents as tt, applyProfileFolderOperation as u, prepareSpaceComposerSubmission as un, CENTER_AGENT_ORGANIZATION_INVITE_LINK_GENERATION_GUIDANCE as ur, buildDispatchPromptPlan as ut, recordOpenMeldCreatedLocalAgentSession as v, agentControllerSessionTitleSchema as vn, organizationJoinLinkManagementQuerySchema as vr, inspectSpaceCacheFile as vt, resolveOpenCodeDatabasePath as w, cliJsonDaemonInstallEnvelopeSchema as wn, daemonStatusServerRequirementSchema as wr, readSpaceRecentMentionProfileIds as wt, queryOpenCodeReadOnly as x, cliJsonAgentsDisableEnvelopeSchema as xn, revokeOrganizationJoinLinkResponseSchema as xr, readSpaceCacheDeletionNoticeState as xt, resolveLocalAgentSessionOrigin as y, cliJsonAgentActivitySessionsEnvelopeSchema as yn, organizationJoinLinkSchema as yr, isLocalSpaceStateCorruptResult as yt, createServiceGitEnvironment as z, cliJsonProjectsBindEnvelopeSchema as zn, buildSignalReplyWorkflowProjection as zt };
|
|
7205
7205
|
|
|
7206
|
-
//# sourceMappingURL=dispatch-owned-runtime-
|
|
7206
|
+
//# sourceMappingURL=dispatch-owned-runtime-CoVWIxYl.js.map
|