openmeld 0.3.281 → 0.3.284
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-DqXAZVkb.js → add-me-membership-DzHgQOUC.js} +2 -2
- package/dist/{add-me-membership-DqXAZVkb.js.map → add-me-membership-DzHgQOUC.js.map} +1 -1
- package/dist/{agents-D64ZW_j4.js → agents-MgLQqj9C.js} +9 -9
- package/dist/{agents-D64ZW_j4.js.map → agents-MgLQqj9C.js.map} +1 -1
- package/dist/{api-client-foundation-B_2mex1y.js → api-client-foundation-RM1pxGSx.js} +1 -1
- package/dist/{api-client-foundation-C4qyWlX3.js → api-client-foundation-i2KBsQ7r.js} +5 -5
- package/dist/{api-client-foundation-C4qyWlX3.js.map → api-client-foundation-i2KBsQ7r.js.map} +1 -1
- package/dist/auth-session-C9F7usbn.js +3 -0
- package/dist/{auth-session-D3JW6vDg.js → auth-session-DRQMn41Z.js} +2 -2
- package/dist/{auth-session-D3JW6vDg.js.map → auth-session-DRQMn41Z.js.map} +1 -1
- package/dist/{channel-cw8i-ftD.js → channel-CFIRo4fR.js} +5 -5
- package/dist/channel-CFIRo4fR.js.map +1 -0
- package/dist/{client-DiJSFcdx.js → client-CBTgmyFC.js} +8 -3
- package/dist/client-CBTgmyFC.js.map +1 -0
- package/dist/{cloud-computer-0OvJeYOx.js → cloud-computer-CuWSimwt.js} +5 -5
- package/dist/{cloud-computer-0OvJeYOx.js.map → cloud-computer-CuWSimwt.js.map} +1 -1
- package/dist/{command-WV5fFpT1.js → command-BGzLcjz8.js} +18 -18
- package/dist/{command-WV5fFpT1.js.map → command-BGzLcjz8.js.map} +1 -1
- package/dist/{computer-connection-review-BGdzvTAD.js → computer-connection-review-D_u0MhuV.js} +4 -4
- package/dist/{computer-connection-review-BGdzvTAD.js.map → computer-connection-review-D_u0MhuV.js.map} +1 -1
- package/dist/{computer-disconnect-DWuokz-a.js → computer-disconnect-BazesBeJ.js} +7 -7
- package/dist/{computer-disconnect-DWuokz-a.js.map → computer-disconnect-BazesBeJ.js.map} +1 -1
- package/dist/{computer-setup-continuation-a55NW4KT.js → computer-setup-continuation-CiVvkxTB.js} +5 -5
- package/dist/{computer-setup-continuation-a55NW4KT.js.map → computer-setup-continuation-CiVvkxTB.js.map} +1 -1
- package/dist/{computer-update-wait-DqdHVh-N.js → computer-update-wait-Bm_oW5Ne.js} +4 -4
- package/dist/{computer-update-wait-DqdHVh-N.js.map → computer-update-wait-Bm_oW5Ne.js.map} +1 -1
- package/dist/{context-BvTB6oYE.js → context-BvLQjNGR.js} +5 -5
- package/dist/{context-BvTB6oYE.js.map → context-BvLQjNGR.js.map} +1 -1
- package/dist/{control-plane-Cenl7yjL.js → control-plane-dGjd5iC7.js} +7 -2
- package/dist/control-plane-dGjd5iC7.js.map +1 -0
- package/dist/{daemon-device-id-BqFtu1Mo.js → daemon-device-id-D-RHe9se.js} +4 -4
- package/dist/{daemon-device-id-BqFtu1Mo.js.map → daemon-device-id-D-RHe9se.js.map} +1 -1
- package/dist/{daemon-lifecycle-journal-CazLvrLu.js → daemon-lifecycle-journal-Bkswn_I8.js} +3 -3
- package/dist/{daemon-lifecycle-journal-CazLvrLu.js.map → daemon-lifecycle-journal-Bkswn_I8.js.map} +1 -1
- package/dist/{daemon-service-runtime-CfxejhNC.js → daemon-service-runtime-ByRIC7Vp.js} +2 -2
- package/dist/{daemon-service-runtime-CfxejhNC.js.map → daemon-service-runtime-ByRIC7Vp.js.map} +1 -1
- package/dist/{dispatch-owned-runtime-B1yce9CE.js → dispatch-owned-runtime-BDGFWuRh.js} +12 -12
- package/dist/{dispatch-owned-runtime-B1yce9CE.js.map → dispatch-owned-runtime-BDGFWuRh.js.map} +1 -1
- package/dist/{dist-Ba813GzD.js → dist-53uvP0DN.js} +16 -8
- package/dist/dist-53uvP0DN.js.map +1 -0
- package/dist/{dist-jIVIF1cm.js → dist-BQHLwE5O.js} +3 -3
- package/dist/{dist-CpETT0Ue.js → dist-CZyGORfc.js} +1 -1
- package/dist/{dist-Bc3Rc5Tm.js → dist-D7SkvUZW.js} +15 -5
- package/dist/{dist-Bc3Rc5Tm.js.map → dist-D7SkvUZW.js.map} +1 -1
- package/dist/dist-Dgux9R9v.js +34 -0
- package/dist/{dist-Bi-kM20D.js → dist-DptLNaka.js} +2 -2
- package/dist/{dist-Bi-kM20D.js.map → dist-DptLNaka.js.map} +1 -1
- package/dist/{dual-view-guide-catalog-CUcSHGLS.js → dual-view-guide-catalog-B6pZCdhQ.js} +4 -4
- package/dist/{dual-view-guide-catalog-CUcSHGLS.js.map → dual-view-guide-catalog-B6pZCdhQ.js.map} +1 -1
- package/dist/{elapsed-time-DnuzLO2r.js → elapsed-time-jRFzKVlC.js} +2 -2
- package/dist/{elapsed-time-DnuzLO2r.js.map → elapsed-time-jRFzKVlC.js.map} +1 -1
- package/dist/{entry-BqRLj_9V.js → entry-CRBVI7tg.js} +8 -8
- package/dist/{entry-BqRLj_9V.js.map → entry-CRBVI7tg.js.map} +1 -1
- package/dist/{installation-inventory-BMPU4Tgf.js → installation-inventory-D49cEBYl.js} +3 -3
- package/dist/{installation-inventory-BMPU4Tgf.js.map → installation-inventory-D49cEBYl.js.map} +1 -1
- package/dist/{installer-BLAf7RHI.js → installer-C5vIErnE.js} +2 -2
- package/dist/{installer-BLAf7RHI.js.map → installer-C5vIErnE.js.map} +1 -1
- package/dist/{meta-api-B6TZqn2K.js → meta-api-ZxEp77JR.js} +8 -8
- package/dist/{meta-api-B6TZqn2K.js.map → meta-api-ZxEp77JR.js.map} +1 -1
- package/dist/{openmeld-DCf4ITd3.js → openmeld-DA0qkwgX.js} +39 -39
- package/dist/{openmeld-DCf4ITd3.js.map → openmeld-DA0qkwgX.js.map} +1 -1
- package/dist/{openmeld-environment-target-CeFk6jOe.js → openmeld-environment-target-DydyKO8Z.js} +2 -2
- package/dist/{openmeld-environment-target-CeFk6jOe.js.map → openmeld-environment-target-DydyKO8Z.js.map} +1 -1
- package/dist/{openmeld-maintenance-worker-Cito5UjR.js → openmeld-maintenance-worker-Cn0nIOeE.js} +11 -10
- package/dist/{openmeld-maintenance-worker-Cito5UjR.js.map → openmeld-maintenance-worker-Cn0nIOeE.js.map} +1 -1
- package/dist/{openmeld-tools-update-coordinator-DasnCwiO.js → openmeld-tools-update-coordinator-TaOWlWRF.js} +142 -73
- package/dist/{openmeld-tools-update-coordinator-DasnCwiO.js.map → openmeld-tools-update-coordinator-TaOWlWRF.js.map} +1 -1
- package/dist/{openmeld-tools-update-join-DZq4B1-c.js → openmeld-tools-update-join-B0bVe2pL.js} +2 -2
- package/dist/{openmeld-tools-update-join-DZq4B1-c.js.map → openmeld-tools-update-join-B0bVe2pL.js.map} +1 -1
- package/dist/openmeld.js +5 -5
- package/dist/{prepare-provider-runtime-D9G1oa37.js → prepare-provider-runtime-DXU1tsC-.js} +136 -91
- package/dist/prepare-provider-runtime-DXU1tsC-.js.map +1 -0
- package/dist/{prepare-session-executor-BtXNgehw.js → prepare-session-executor-DQP-XJWG.js} +19 -19
- package/dist/{prepare-session-executor-BtXNgehw.js.map → prepare-session-executor-DQP-XJWG.js.map} +1 -1
- package/dist/{presenter-PTSj6SjL.js → presenter-DMoE2U_q.js} +2 -2
- package/dist/{presenter-PTSj6SjL.js.map → presenter-DMoE2U_q.js.map} +1 -1
- package/dist/{process-channel-s-29YBmx.js → process-channel-DtJ01mUI.js} +2 -2
- package/dist/{process-channel-s-29YBmx.js.map → process-channel-DtJ01mUI.js.map} +1 -1
- package/dist/{runtime-agent-controller-reporting-submission-Bmi-TI7L.js → runtime-agent-controller-reporting-submission-BScBCWbj.js} +9 -9
- package/dist/{runtime-agent-controller-reporting-submission-Bmi-TI7L.js.map → runtime-agent-controller-reporting-submission-BScBCWbj.js.map} +1 -1
- package/dist/{runtime-CRML37Zi.js → runtime-ga1Cb9oU.js} +30 -22
- package/dist/{runtime-CRML37Zi.js.map → runtime-ga1Cb9oU.js.map} +1 -1
- package/dist/{runtime-transport--NUjMys2.js → runtime-transport-Dg7E0ROH.js} +3 -3
- package/dist/{runtime-transport--NUjMys2.js.map → runtime-transport-Dg7E0ROH.js.map} +1 -1
- package/dist/{sensitive-operation-credentials-DLvCUcPG.js → sensitive-operation-credentials-Dr_neVvL.js} +4 -4
- package/dist/{sensitive-operation-credentials-DLvCUcPG.js.map → sensitive-operation-credentials-Dr_neVvL.js.map} +1 -1
- package/dist/{service-CAVnFGS6.js → service-CPm2n9qw.js} +136 -45
- package/dist/service-CPm2n9qw.js.map +1 -0
- package/dist/{service-account-authorization-uXkl3vrp.js → service-account-authorization-DiSsm3hB.js} +3 -3
- package/dist/{service-account-authorization-uXkl3vrp.js.map → service-account-authorization-DiSsm3hB.js.map} +1 -1
- package/dist/{service-account-control-C5t63oqC.js → service-account-control-ZcbgDiOI.js} +9 -9
- package/dist/{service-account-control-C5t63oqC.js.map → service-account-control-ZcbgDiOI.js.map} +1 -1
- package/dist/{service-control-capabilities-DD8rKK5X.js → service-control-capabilities-BGt2pE5E.js} +1 -1
- package/dist/{service-control-capabilities-D82eDKGc.js → service-control-capabilities-Be1Jwmuf.js} +3 -3
- package/dist/{service-control-capabilities-D82eDKGc.js.map → service-control-capabilities-Be1Jwmuf.js.map} +1 -1
- package/dist/{state-BrFamidO.js → state-d7Z9JO3f.js} +2 -2
- package/dist/{state-BrFamidO.js.map → state-d7Z9JO3f.js.map} +1 -1
- package/dist/{task-result-DB1vR1p4.js → task-result-DhOFm1C_.js} +9 -2
- package/dist/task-result-DhOFm1C_.js.map +1 -0
- package/dist/{updates-api-DkKnmoi1.js → updates-api-C5MOBI2U.js} +15 -15
- package/dist/{updates-api-DkKnmoi1.js.map → updates-api-C5MOBI2U.js.map} +1 -1
- package/dist/upgrade-J_8S57kY.js +3 -0
- package/dist/{upgrade-Df1VFgZU.js → upgrade-ehQ8fPE_.js} +10 -10
- package/dist/{upgrade-Df1VFgZU.js.map → upgrade-ehQ8fPE_.js.map} +1 -1
- package/dist/windows/openmeld-windows-process.exe +0 -0
- package/package.json +9 -9
- package/dist/auth-session-CDfkRP6v.js +0 -3
- package/dist/channel-cw8i-ftD.js.map +0 -1
- package/dist/client-DiJSFcdx.js.map +0 -1
- package/dist/control-plane-Cenl7yjL.js.map +0 -1
- package/dist/dist-Ba813GzD.js.map +0 -1
- package/dist/dist-CYV83fQw.js +0 -34
- package/dist/prepare-provider-runtime-D9G1oa37.js.map +0 -1
- package/dist/service-CAVnFGS6.js.map +0 -1
- package/dist/task-result-DB1vR1p4.js.map +0 -1
- package/dist/upgrade-yYdxvxwi.js +0 -3
package/dist/{openmeld-tools-update-join-DZq4B1-c.js → openmeld-tools-update-join-B0bVe2pL.js}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { F as resolveOpenMeldRootDir } from "./paths-De9xdA2h.js";
|
|
4
4
|
import { a as readPendingDaemonServiceUpdate, i as readLastDaemonServiceUpdate } from "./daemon-service-update-state-BSn45OHj.js";
|
|
5
|
-
import { r as requestLocalDaemonServiceUpdateReadiness } from "./client-
|
|
5
|
+
import { r as requestLocalDaemonServiceUpdateReadiness } from "./client-CBTgmyFC.js";
|
|
6
6
|
import { a as readPendingOpenMeldToolsUpdateAttempt, i as readLastOpenMeldToolsUpdateAttempt } from "./openmeld-tools-update-attempt-state-B6t53OYC.js";
|
|
7
7
|
import { i as resolvePersistedOpenMeldToolsUpdateFailure } from "./openmeld-tools-update-failure-DZBNPkb6.js";
|
|
8
8
|
import { setTimeout } from "node:timers/promises";
|
|
@@ -121,4 +121,4 @@ async function readUpdateWorkReadiness(operation, input) {
|
|
|
121
121
|
//#endregion
|
|
122
122
|
export { resolveOpenMeldToolsUpdateOperationProjection as i, waitForExternalOpenMeldToolsUpdate as n, waitForOpenMeldToolsUpdateCompletion as r, resolveExternalOpenMeldToolsUpdate as t };
|
|
123
123
|
|
|
124
|
-
//# sourceMappingURL=openmeld-tools-update-join-
|
|
124
|
+
//# sourceMappingURL=openmeld-tools-update-join-B0bVe2pL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openmeld-tools-update-join-DZq4B1-c.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-operation.ts","../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import type {\n DaemonServiceUpdateJob,\n OpenMeldToolsUpdateAttempt,\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateOperation,\n} from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport {\n readLastDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport {\n readLastOpenMeldToolsUpdateAttempt,\n readPendingOpenMeldToolsUpdateAttempt,\n} from \"./openmeld-tools-update-attempt-state\";\nimport { resolvePersistedOpenMeldToolsUpdateFailure } from \"./openmeld-tools-update-failure\";\n\nconst TERMINAL_VISIBILITY_MS = 24 * 60 * 60 * 1000;\n\nexport type OpenMeldToolsUpdateOperationProjection = {\n failureCode: OpenMeldToolsUpdateFailureCode | null;\n operation: OpenMeldToolsUpdateOperation;\n};\n\nexport async function resolveOpenMeldToolsUpdateOperation(\n pathInput: OpenMeldPathResolutionInput = {},\n nowMs = Date.now()\n): Promise<OpenMeldToolsUpdateOperation | null> {\n const projection = await resolveOpenMeldToolsUpdateOperationProjection(\n pathInput,\n nowMs\n );\n return projection?.operation ?? null;\n}\n\nexport async function resolveOpenMeldToolsUpdateOperationProjection(\n pathInput: OpenMeldPathResolutionInput = {},\n nowMs = Date.now()\n): Promise<OpenMeldToolsUpdateOperationProjection | null> {\n const [servicePending, toolsPending] = await Promise.all([\n readPendingDaemonServiceUpdate(pathInput),\n readPendingOpenMeldToolsUpdateAttempt(pathInput),\n ]);\n if (servicePending) {\n return projectServiceJob(servicePending);\n }\n if (toolsPending) {\n return projectToolsAttempt(toolsPending);\n }\n\n const [serviceLast, toolsLast] = await Promise.all([\n readLastDaemonServiceUpdate(pathInput),\n readLastOpenMeldToolsUpdateAttempt(pathInput),\n ]);\n const candidates = [\n ...(serviceLast ? [projectServiceJob(serviceLast)] : []),\n ...(toolsLast ? [projectToolsAttempt(toolsLast)] : []),\n ]\n .filter((candidate) => isRecentTerminal(candidate.operation, nowMs))\n .sort(\n (a, b) =>\n Date.parse(b.operation.updatedAt) - Date.parse(a.operation.updatedAt)\n );\n return candidates[0] ?? null;\n}\n\nfunction projectToolsAttempt(\n attempt: OpenMeldToolsUpdateAttempt\n): OpenMeldToolsUpdateOperationProjection {\n const terminalFailure =\n attempt.operation.phase === \"needs_help\" ||\n attempt.operation.phase === \"restored\";\n return {\n failureCode: terminalFailure\n ? (resolvePersistedOpenMeldToolsUpdateFailure(attempt.errorMessage) ??\n \"cli.update.failed\")\n : null,\n operation: attempt.operation,\n };\n}\n\nfunction projectServiceJob(\n job: DaemonServiceUpdateJob\n): OpenMeldToolsUpdateOperationProjection {\n return {\n failureCode:\n job.phase === \"needs_help\" || job.phase === \"restored\"\n ? \"cli.update.service_alignment_failed\"\n : null,\n operation: {\n operationId: job.jobId,\n phase: job.phase,\n requestSource: job.requestSource,\n requestedAt: job.requestedAt,\n ...(job.targetCliVersion\n ? { targetCliVersion: job.targetCliVersion }\n : {}),\n ...(job.targetServiceVersion\n ? { targetServiceVersion: job.targetServiceVersion }\n : {}),\n targetVersion: job.targetVersion,\n updatedAt: job.updatedAt,\n urgency: job.urgency,\n },\n };\n}\n\nfunction isRecentTerminal(\n operation: OpenMeldToolsUpdateOperation,\n nowMs: number\n): boolean {\n if (\n operation.phase !== \"updated\" &&\n operation.phase !== \"restored\" &&\n operation.phase !== \"needs_help\"\n ) {\n return false;\n }\n const updatedAtMs = Date.parse(operation.updatedAt);\n return (\n Number.isFinite(updatedAtMs) &&\n nowMs >= updatedAtMs &&\n nowMs - updatedAtMs <= TERMINAL_VISIBILITY_MS\n );\n}\n","import { setTimeout as sleep } from \"node:timers/promises\";\nimport type {\n OpenMeldDaemonServiceUpdateReadinessPayload,\n OpenMeldToolsUpdateOperation,\n} from \"@openmeld/schemas/types\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldRootDir,\n} from \"../../config/paths\";\nimport { requestLocalDaemonServiceUpdateReadiness } from \"../control-plane/client\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n timeoutMs?: number;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n onObservation?: (\n operation: OpenMeldToolsUpdateOperation,\n readiness: OpenMeldDaemonServiceUpdateReadinessPayload | null\n ) => void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n timeoutMs: input.timeoutMs,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n onObservation: input.onObservation,\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n unclaimedTimeoutMs?: number;\n timeoutMs?: number;\n onObservation?: (\n operation: OpenMeldToolsUpdateOperation,\n readiness: OpenMeldDaemonServiceUpdateReadinessPayload | null\n ) => void;\n } = {}\n): Promise<void> {\n let reportedOperation: string | null = null;\n const deadline = Date.now() + (input.timeoutMs ?? Number.POSITIVE_INFINITY);\n let unclaimedSince: number | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n assertUpdateObservationActive(deadline);\n if (input.onObservation) {\n // Reuse the Service's public local control projection. Required updates\n // enter `updating` before drain, so the durable phase alone cannot say\n // whether accepted work still owns the wait. This read never extends\n // the observer deadline or reserves the setup mutation lock.\n const readiness = await readUpdateWorkReadiness(operation, input);\n input.onObservation(operation, readiness);\n }\n if (input.unclaimedTimeoutMs !== undefined) {\n const pending = await readPendingOpenMeldToolsUpdateAttempt(input);\n if (\n pending?.operation.operationId === operation.operationId &&\n pending.attempts === 0\n ) {\n unclaimedSince ??= Date.now();\n if (Date.now() - unclaimedSince >= input.unclaimedTimeoutMs) {\n throw new Error(\n \"OpenMeld's background updater did not start. Run openmeld doctor to check the background service, then try setup again.\"\n );\n }\n } else {\n unclaimedSince = null;\n }\n }\n const observationKey = `${operation.operationId}:${operation.phase}`;\n if (reportedOperation !== observationKey) {\n reportedOperation = observationKey;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n\nfunction assertUpdateObservationActive(deadline: number): void {\n if (Date.now() >= deadline) {\n throw new Error(\n \"OpenMeld is still waiting for the background update. Current tasks and the update continue. Check their status, then try connecting again.\"\n );\n }\n}\n\nasync function readUpdateWorkReadiness(\n operation: OpenMeldToolsUpdateOperation,\n input: OpenMeldPathResolutionInput\n) {\n // The local control client is bound to this process's lane. Never query a\n // different Service while inspecting another root's durable update files.\n if (resolveOpenMeldRootDir(input) !== resolveOpenMeldRootDir()) {\n return null;\n }\n const pending = await readPendingDaemonServiceUpdate(input);\n if (\n pending?.jobId !== operation.operationId ||\n (pending.phase !== \"updating\" && pending.phase !== \"waiting_for_work\")\n ) {\n return null;\n }\n return await requestLocalDaemonServiceUpdateReadiness({\n timeoutMs: 2000,\n }).catch(() => null);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openmeld-tools-update-join-B0bVe2pL.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-operation.ts","../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import type {\n DaemonServiceUpdateJob,\n OpenMeldToolsUpdateAttempt,\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateOperation,\n} from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport {\n readLastDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport {\n readLastOpenMeldToolsUpdateAttempt,\n readPendingOpenMeldToolsUpdateAttempt,\n} from \"./openmeld-tools-update-attempt-state\";\nimport { resolvePersistedOpenMeldToolsUpdateFailure } from \"./openmeld-tools-update-failure\";\n\nconst TERMINAL_VISIBILITY_MS = 24 * 60 * 60 * 1000;\n\nexport type OpenMeldToolsUpdateOperationProjection = {\n failureCode: OpenMeldToolsUpdateFailureCode | null;\n operation: OpenMeldToolsUpdateOperation;\n};\n\nexport async function resolveOpenMeldToolsUpdateOperation(\n pathInput: OpenMeldPathResolutionInput = {},\n nowMs = Date.now()\n): Promise<OpenMeldToolsUpdateOperation | null> {\n const projection = await resolveOpenMeldToolsUpdateOperationProjection(\n pathInput,\n nowMs\n );\n return projection?.operation ?? null;\n}\n\nexport async function resolveOpenMeldToolsUpdateOperationProjection(\n pathInput: OpenMeldPathResolutionInput = {},\n nowMs = Date.now()\n): Promise<OpenMeldToolsUpdateOperationProjection | null> {\n const [servicePending, toolsPending] = await Promise.all([\n readPendingDaemonServiceUpdate(pathInput),\n readPendingOpenMeldToolsUpdateAttempt(pathInput),\n ]);\n if (servicePending) {\n return projectServiceJob(servicePending);\n }\n if (toolsPending) {\n return projectToolsAttempt(toolsPending);\n }\n\n const [serviceLast, toolsLast] = await Promise.all([\n readLastDaemonServiceUpdate(pathInput),\n readLastOpenMeldToolsUpdateAttempt(pathInput),\n ]);\n const candidates = [\n ...(serviceLast ? [projectServiceJob(serviceLast)] : []),\n ...(toolsLast ? [projectToolsAttempt(toolsLast)] : []),\n ]\n .filter((candidate) => isRecentTerminal(candidate.operation, nowMs))\n .sort(\n (a, b) =>\n Date.parse(b.operation.updatedAt) - Date.parse(a.operation.updatedAt)\n );\n return candidates[0] ?? null;\n}\n\nfunction projectToolsAttempt(\n attempt: OpenMeldToolsUpdateAttempt\n): OpenMeldToolsUpdateOperationProjection {\n const terminalFailure =\n attempt.operation.phase === \"needs_help\" ||\n attempt.operation.phase === \"restored\";\n return {\n failureCode: terminalFailure\n ? (resolvePersistedOpenMeldToolsUpdateFailure(attempt.errorMessage) ??\n \"cli.update.failed\")\n : null,\n operation: attempt.operation,\n };\n}\n\nfunction projectServiceJob(\n job: DaemonServiceUpdateJob\n): OpenMeldToolsUpdateOperationProjection {\n return {\n failureCode:\n job.phase === \"needs_help\" || job.phase === \"restored\"\n ? \"cli.update.service_alignment_failed\"\n : null,\n operation: {\n operationId: job.jobId,\n phase: job.phase,\n requestSource: job.requestSource,\n requestedAt: job.requestedAt,\n ...(job.targetCliVersion\n ? { targetCliVersion: job.targetCliVersion }\n : {}),\n ...(job.targetServiceVersion\n ? { targetServiceVersion: job.targetServiceVersion }\n : {}),\n targetVersion: job.targetVersion,\n updatedAt: job.updatedAt,\n urgency: job.urgency,\n },\n };\n}\n\nfunction isRecentTerminal(\n operation: OpenMeldToolsUpdateOperation,\n nowMs: number\n): boolean {\n if (\n operation.phase !== \"updated\" &&\n operation.phase !== \"restored\" &&\n operation.phase !== \"needs_help\"\n ) {\n return false;\n }\n const updatedAtMs = Date.parse(operation.updatedAt);\n return (\n Number.isFinite(updatedAtMs) &&\n nowMs >= updatedAtMs &&\n nowMs - updatedAtMs <= TERMINAL_VISIBILITY_MS\n );\n}\n","import { setTimeout as sleep } from \"node:timers/promises\";\nimport type {\n OpenMeldDaemonServiceUpdateReadinessPayload,\n OpenMeldToolsUpdateOperation,\n} from \"@openmeld/schemas/types\";\nimport {\n type OpenMeldPathResolutionInput,\n resolveOpenMeldRootDir,\n} from \"../../config/paths\";\nimport { requestLocalDaemonServiceUpdateReadiness } from \"../control-plane/client\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n timeoutMs?: number;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n onObservation?: (\n operation: OpenMeldToolsUpdateOperation,\n readiness: OpenMeldDaemonServiceUpdateReadinessPayload | null\n ) => void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n timeoutMs: input.timeoutMs,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n onObservation: input.onObservation,\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n unclaimedTimeoutMs?: number;\n timeoutMs?: number;\n onObservation?: (\n operation: OpenMeldToolsUpdateOperation,\n readiness: OpenMeldDaemonServiceUpdateReadinessPayload | null\n ) => void;\n } = {}\n): Promise<void> {\n let reportedOperation: string | null = null;\n const deadline = Date.now() + (input.timeoutMs ?? Number.POSITIVE_INFINITY);\n let unclaimedSince: number | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n assertUpdateObservationActive(deadline);\n if (input.onObservation) {\n // Reuse the Service's public local control projection. Required updates\n // enter `updating` before drain, so the durable phase alone cannot say\n // whether accepted work still owns the wait. This read never extends\n // the observer deadline or reserves the setup mutation lock.\n const readiness = await readUpdateWorkReadiness(operation, input);\n input.onObservation(operation, readiness);\n }\n if (input.unclaimedTimeoutMs !== undefined) {\n const pending = await readPendingOpenMeldToolsUpdateAttempt(input);\n if (\n pending?.operation.operationId === operation.operationId &&\n pending.attempts === 0\n ) {\n unclaimedSince ??= Date.now();\n if (Date.now() - unclaimedSince >= input.unclaimedTimeoutMs) {\n throw new Error(\n \"OpenMeld's background updater did not start. Run openmeld doctor to check the background service, then try setup again.\"\n );\n }\n } else {\n unclaimedSince = null;\n }\n }\n const observationKey = `${operation.operationId}:${operation.phase}`;\n if (reportedOperation !== observationKey) {\n reportedOperation = observationKey;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n\nfunction assertUpdateObservationActive(deadline: number): void {\n if (Date.now() >= deadline) {\n throw new Error(\n \"OpenMeld is still waiting for the background update. Current tasks and the update continue. Check their status, then try connecting again.\"\n );\n }\n}\n\nasync function readUpdateWorkReadiness(\n operation: OpenMeldToolsUpdateOperation,\n input: OpenMeldPathResolutionInput\n) {\n // The local control client is bound to this process's lane. Never query a\n // different Service while inspecting another root's durable update files.\n if (resolveOpenMeldRootDir(input) !== resolveOpenMeldRootDir()) {\n return null;\n }\n const pending = await readPendingDaemonServiceUpdate(input);\n if (\n pending?.jobId !== operation.operationId ||\n (pending.phase !== \"updating\" && pending.phase !== \"waiting_for_work\")\n ) {\n return null;\n }\n return await requestLocalDaemonServiceUpdateReadiness({\n timeoutMs: 2000,\n }).catch(() => null);\n}\n"],"mappings":";;;;;;;;;AAiBA,MAAM,yBAAyB;AAO/B,eAAsB,oCACpB,YAAyC,CAAC,GAC1C,QAAQ,KAAK,IAAI,GAC6B;CAK9C,QAAO,MAJkB,8CACvB,WACA,KACF,EAAA,EACmB,aAAa;AAClC;AAEA,eAAsB,8CACpB,YAAyC,CAAC,GAC1C,QAAQ,KAAK,IAAI,GACuC;CACxD,MAAM,CAAC,gBAAgB,gBAAgB,MAAM,QAAQ,IAAI,CACvD,+BAA+B,SAAS,GACxC,sCAAsC,SAAS,CACjD,CAAC;CACD,IAAI,gBACF,OAAO,kBAAkB,cAAc;CAEzC,IAAI,cACF,OAAO,oBAAoB,YAAY;CAGzC,MAAM,CAAC,aAAa,aAAa,MAAM,QAAQ,IAAI,CACjD,4BAA4B,SAAS,GACrC,mCAAmC,SAAS,CAC9C,CAAC;CAUD,OATmB,CACjB,GAAI,cAAc,CAAC,kBAAkB,WAAW,CAAC,IAAI,CAAC,GACtD,GAAI,YAAY,CAAC,oBAAoB,SAAS,CAAC,IAAI,CAAC,CACtD,CAAC,CACE,QAAQ,cAAc,iBAAiB,UAAU,WAAW,KAAK,CAAC,CAAC,CACnE,MACE,GAAG,MACF,KAAK,MAAM,EAAE,UAAU,SAAS,IAAI,KAAK,MAAM,EAAE,UAAU,SAAS,CAE1D,CAAC,CAAC,MAAM;AAC1B;AAEA,SAAS,oBACP,SACwC;CAIxC,OAAO;EACL,aAHA,QAAQ,UAAU,UAAU,gBAC5B,QAAQ,UAAU,UAAU,aAGvB,2CAA2C,QAAQ,YAAY,KAChE,sBACA;EACJ,WAAW,QAAQ;CACrB;AACF;AAEA,SAAS,kBACP,KACwC;CACxC,OAAO;EACL,aACE,IAAI,UAAU,gBAAgB,IAAI,UAAU,aACxC,wCACA;EACN,WAAW;GACT,aAAa,IAAI;GACjB,OAAO,IAAI;GACX,eAAe,IAAI;GACnB,aAAa,IAAI;GACjB,GAAI,IAAI,mBACJ,EAAE,kBAAkB,IAAI,iBAAiB,IACzC,CAAC;GACL,GAAI,IAAI,uBACJ,EAAE,sBAAsB,IAAI,qBAAqB,IACjD,CAAC;GACL,eAAe,IAAI;GACnB,WAAW,IAAI;GACf,SAAS,IAAI;EACf;CACF;AACF;AAEA,SAAS,iBACP,WACA,OACS;CACT,IACE,UAAU,UAAU,aACpB,UAAU,UAAU,cACpB,UAAU,UAAU,cAEpB,OAAO;CAET,MAAM,cAAc,KAAK,MAAM,UAAU,SAAS;CAClD,OACE,OAAO,SAAS,WAAW,KAC3B,SAAS,eACT,QAAQ,eAAe;AAE3B;;;AC9GA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAWI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,WAAW,MAAM;EACjB,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,eAAe,MAAM;CACvB,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,GAAI,WAAW,mBACX,EAAE,kBAAkB,WAAW,iBAAiB,IAChD,CAAC;EACL,GAAI,WAAW,uBACX,EAAE,sBAAsB,WAAW,qBAAqB,IACxD,CAAC;EACL,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAaI,CAAC,GACU;CACf,IAAI,oBAAmC;CACvC,MAAM,WAAW,KAAK,IAAI,KAAK,MAAM,aAAa,OAAO;CACzD,IAAI,iBAAgC;CACpC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,8BAA8B,QAAQ;EACtC,IAAI,MAAM,eAAe;GAKvB,MAAM,YAAY,MAAM,wBAAwB,WAAW,KAAK;GAChE,MAAM,cAAc,WAAW,SAAS;EAC1C;EACA,IAAI,MAAM,uBAAuB,KAAA,GAAW;GAC1C,MAAM,UAAU,MAAM,sCAAsC,KAAK;GACjE,IACE,SAAS,UAAU,gBAAgB,UAAU,eAC7C,QAAQ,aAAa,GACrB;IACA,mBAAmB,KAAK,IAAI;IAC5B,IAAI,KAAK,IAAI,IAAI,kBAAkB,MAAM,oBACvC,MAAM,IAAI,MACR,yHACF;GAEJ,OACE,iBAAiB;EAErB;EACA,MAAM,iBAAiB,GAAG,UAAU,YAAY,GAAG,UAAU;EAC7D,IAAI,sBAAsB,gBAAgB;GACxC,oBAAoB;GACpB,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF;AAEA,SAAS,8BAA8B,UAAwB;CAC7D,IAAI,KAAK,IAAI,KAAK,UAChB,MAAM,IAAI,MACR,4IACF;AAEJ;AAEA,eAAe,wBACb,WACA,OACA;CAGA,IAAI,uBAAuB,KAAK,MAAM,uBAAuB,GAC3D,OAAO;CAET,MAAM,UAAU,MAAM,+BAA+B,KAAK;CAC1D,IACE,SAAS,UAAU,UAAU,eAC5B,QAAQ,UAAU,cAAc,QAAQ,UAAU,oBAEnD,OAAO;CAET,OAAO,MAAM,yCAAyC,EACpD,WAAW,IACb,CAAC,CAAC,CAAC,YAAY,IAAI;AACrB"}
|
package/dist/openmeld.js
CHANGED
|
@@ -28,7 +28,7 @@ if (process.argv.includes("--openmeld-windows-task")) {
|
|
|
28
28
|
const args = process.argv.slice(2);
|
|
29
29
|
if (args.length === 3 && args[0] === "service" && args[1] === "execution-host") {
|
|
30
30
|
try {
|
|
31
|
-
const { runExecutionHost } = await import("./entry-
|
|
31
|
+
const { runExecutionHost } = await import("./entry-CRBVI7tg.js");
|
|
32
32
|
const hostInstanceId = args[2];
|
|
33
33
|
if (!hostInstanceId) throw new Error("The Host incarnation is required.");
|
|
34
34
|
await runExecutionHost(hostInstanceId);
|
|
@@ -38,7 +38,7 @@ if (args.length === 3 && args[0] === "service" && args[1] === "execution-host")
|
|
|
38
38
|
if (process.connected) process.disconnect();
|
|
39
39
|
}
|
|
40
40
|
try {
|
|
41
|
-
const { terminateLiveAgentControllerProcesses } = await import("./dist-
|
|
41
|
+
const { terminateLiveAgentControllerProcesses } = await import("./dist-BQHLwE5O.js");
|
|
42
42
|
await terminateLiveAgentControllerProcesses();
|
|
43
43
|
} catch (error) {
|
|
44
44
|
console.error("[openmeld.execution_host.probe_cleanup_failed]", error);
|
|
@@ -48,14 +48,14 @@ if (args.length === 3 && args[0] === "service" && args[1] === "execution-host")
|
|
|
48
48
|
})));
|
|
49
49
|
process.exit();
|
|
50
50
|
} else if (args.length === 2 && args[0] === "service" && args[1] === "update-worker") try {
|
|
51
|
-
const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-
|
|
51
|
+
const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-Cn0nIOeE.js");
|
|
52
52
|
await runOpenMeldMaintenanceWorker();
|
|
53
53
|
} catch (error) {
|
|
54
54
|
console.error("[openmeld.maintenance.failed]", error);
|
|
55
55
|
process.exitCode = 1;
|
|
56
56
|
}
|
|
57
57
|
else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] === "maintenance-align-service")) try {
|
|
58
|
-
const { runMaintenanceUpgrade } = await import("./upgrade-
|
|
58
|
+
const { runMaintenanceUpgrade } = await import("./upgrade-J_8S57kY.js");
|
|
59
59
|
await runMaintenanceUpgrade(args[0] === "maintenance-align-service");
|
|
60
60
|
} catch (error) {
|
|
61
61
|
try {
|
|
@@ -65,7 +65,7 @@ else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] ===
|
|
|
65
65
|
console.error("[openmeld.maintenance.upgrade_failed]", error);
|
|
66
66
|
process.exitCode = 1;
|
|
67
67
|
}
|
|
68
|
-
else await import("./openmeld-
|
|
68
|
+
else await import("./openmeld-DA0qkwgX.js");
|
|
69
69
|
//#endregion
|
|
70
70
|
export {};
|
|
71
71
|
|
|
@@ -4,25 +4,25 @@ import { n as __toESM, t as __commonJSMin } from "./rolldown-runtime-DaMUG2Hy.js
|
|
|
4
4
|
import { C as updateConfiguredDeviceRuntimeState, T as updateConfiguredSkillsConfig, a as resolveBaseUrl, d as createDefaultRuntimeAgentControllerSettings, g as getConfiguredSkillsConfig, p as getConfiguredDeviceRuntimeState, v as getRuntimeConfigReadHealth, y as resolveRuntimeSkillsCustomTargetId } from "./base-url-b30kK86t.js";
|
|
5
5
|
import { F as resolveOpenMeldRootDir, P as resolveOpenMeldEnvPreset, a as accountProfileWorkspacePath, b as normalizeOpenMeldProfileId, c as deviceOpenClawProfileBootstrapPath, h as isPublishedOpenMeldHome, l as deviceOpenClawProfileDir, n as accountProfileLocalMetaPath, u as deviceOpenClawProfileWorkspaceDir } from "./paths-De9xdA2h.js";
|
|
6
6
|
import { Hr as agentControllerPermissionModeSchema, Jr as HOSTED_CENTER_AGENT_CONTROLLER_REF_ID, Qr as canonicalizeAgentControllerRef, Ta as profileWorkspaceOriginSchema, Ur as agentControllerCollaborationModeSchema, Yr as HOSTED_REMOTE_AGENT_CONTROLLER_REF, _a as normalizeOptionalWorkingDirectory, ha as MAX_PROFILE_WORKING_DIRECTORY_LENGTH, lt as daemonServiceLaneSchema, ni as parseAgentControllerRef$1, qr as HOSTED_CENTER_AGENT_CONTROLLER_REF, ti as normalizeKnownBuiltinAgentControllerId, wa as profileWorkspaceModeSchema } from "./dist-zRc0hA1y.js";
|
|
7
|
-
import { Dn as
|
|
8
|
-
import { Gt as createAgentProfileBindingApi, Rh as modelCatalogSchema, ln as createLocalRuntimeExpectedRoutesApi, t as OpenMeldApiClientHttpError } from "./dist-
|
|
9
|
-
import { Pa as resolveCommandAgentWorkActivity, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH } from "./runtime-transport
|
|
7
|
+
import { Dn as profileFolderDisplayNameSchema, On as profileFolderIdSchema, d as openMeldDaemonTaskResultOpenClawGatewayVisibilityStatusSchema } from "./task-result-DhOFm1C_.js";
|
|
8
|
+
import { Gt as createAgentProfileBindingApi, Rh as modelCatalogSchema, ln as createLocalRuntimeExpectedRoutesApi, t as OpenMeldApiClientHttpError } from "./dist-53uvP0DN.js";
|
|
9
|
+
import { Pa as resolveCommandAgentWorkActivity, t as CURRENT_DAEMON_EXECUTION_CONTRACT_EPOCH } from "./runtime-transport-Dg7E0ROH.js";
|
|
10
10
|
import { l as runtimeTransportModeSchema } from "./controller-contract-Ciy9Smgo.js";
|
|
11
11
|
import { n as conversationExecutionStateSchema } from "./conversation-execution-state-BOWTCU0B.js";
|
|
12
|
-
import { it as providerDispatchRuntimeContextSchema } from "./control-plane-
|
|
13
|
-
import { H as agentExecutionSteerRequestSchema, V as daemonRouteCatalogCacheSchema, _ as toErrorMessage$17, d as normalizeText$10, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, u as normalizeOptionalText$42, z as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME } from "./daemon-device-id-
|
|
12
|
+
import { it as providerDispatchRuntimeContextSchema } from "./control-plane-dGjd5iC7.js";
|
|
13
|
+
import { H as agentExecutionSteerRequestSchema, V as daemonRouteCatalogCacheSchema, _ as toErrorMessage$17, d as normalizeText$10, g as parseTransportMode$1, h as parseStreamingMode$1, m as parseRuntimeTransportMode, p as parseContextIdMappingSpec, s as emitRunLine, u as normalizeOptionalText$42, z as DAEMON_ROUTE_CATALOG_CACHE_SCHEMA_NAME } from "./daemon-device-id-D-RHe9se.js";
|
|
14
14
|
import { a as resolveWindowsPowerShellPath, n as powerShellEncodedArguments } from "./windows-system-DsNqYvVr.js";
|
|
15
|
-
import { X as OPENCLAW_CLI_TIMEOUT_MS$1, d as getAuthSessionState } from "./auth-session-
|
|
15
|
+
import { X as OPENCLAW_CLI_TIMEOUT_MS$1, d as getAuthSessionState } from "./auth-session-DRQMn41Z.js";
|
|
16
16
|
import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-DP8d33p_.js";
|
|
17
17
|
import { r as isProcessIdentityAlive, t as CURRENT_PROCESS_START_IDENTITY } from "./process-identity-DsKKbftl.js";
|
|
18
|
-
import { F as resolveCurrentOpenMeldAccountContext, _ as touchDaemonCatalogSyncSignal, d as listOpenMeldProfiles } from "./context-
|
|
18
|
+
import { F as resolveCurrentOpenMeldAccountContext, _ as touchDaemonCatalogSyncSignal, d as listOpenMeldProfiles } from "./context-BvLQjNGR.js";
|
|
19
19
|
import { n as writeDaemonLocalStateFile, t as readDaemonLocalStateFile } from "./daemon-local-state-file-jOXuXrky.js";
|
|
20
20
|
import { m as daemonRuntimeDataPath } from "./daemon-state-CTOVPwNq.js";
|
|
21
|
-
import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-
|
|
21
|
+
import { d as buildOpenMeldRequestContextFromProfile, t as createCliApiClientFoundation } from "./api-client-foundation-i2KBsQ7r.js";
|
|
22
22
|
import { i as readDaemonServiceContract } from "./daemon-service-contract-CsANv7K_.js";
|
|
23
|
-
import { o as requestLocalSyncRouteCatalog } from "./client-
|
|
23
|
+
import { o as requestLocalSyncRouteCatalog } from "./client-CBTgmyFC.js";
|
|
24
24
|
import { r as resolvePlatformCommand, t as execPlatformFile } from "./process-launch-B0pHlkV_.js";
|
|
25
|
-
import { $ as createProviderOriginalError, A as resolveExecutableOnPath, B as CliDriverError, C as buildAdapterAgentControllerConversationRef, D as buildCliLaunchInvocation, E as AcpProcessSession, F as resolveInstalledNodeScriptLaunchContract, H as createAgentControllerProcessDiscoveryDiagnosticAggregator, I as resolveLaunchCandidatesAfterVerification, K as resolveAgentControllerProcessSignalId, L as resolveSiblingCommandPath, M as resolveInstalledCommandPath, O as buildExecutableLaunchContract, P as resolveInstalledNodeScriptLaunchCandidates, R as verifyCliLaunchContract, S as bridgeAgentControllerConversationRef, T as resolveBuiltinAdapterConversationBridgeSpec, U as listAgentControllerDescendantProcessIds, V as runCliDriver, W as listAgentControllerSupervisedProcessIds, X as spawnAgentControllerProcess, Y as signalAgentControllerProcessTree, _ as OPENMELD_SPACE_ACTION_MCP_SERVER_ID, b as buildDispatchSpaceActionMcpToolIds, d as resolveAdapterAgentContext, h as looksLikeRuntimePermissionDenialMessage, k as materializeCliLaunchCommand, l as invokeWithSingleContextHeal, m as classifyRuntimePermissionDenialMessage, nt as isDispatchSpaceActionDeliveryOnly, o as createSharedControlShell, r as buildInterruptPlan, s as createSharedDispatchShell, tt as describeDispatchSpaceTools, u as readAdapterAiUsageObservation, v as OPENMELD_SPACE_ACTION_MCP_TOOL_NAMES, x as resolveDispatchSpaceActionMcpServer, y as buildAcpDispatchSpaceActionMcpServers, z as verifyLaunchContractFiles } from "./dist-
|
|
25
|
+
import { $ as createProviderOriginalError, A as resolveExecutableOnPath, B as CliDriverError, C as buildAdapterAgentControllerConversationRef, D as buildCliLaunchInvocation, E as AcpProcessSession, F as resolveInstalledNodeScriptLaunchContract, H as createAgentControllerProcessDiscoveryDiagnosticAggregator, I as resolveLaunchCandidatesAfterVerification, K as resolveAgentControllerProcessSignalId, L as resolveSiblingCommandPath, M as resolveInstalledCommandPath, O as buildExecutableLaunchContract, P as resolveInstalledNodeScriptLaunchCandidates, R as verifyCliLaunchContract, S as bridgeAgentControllerConversationRef, T as resolveBuiltinAdapterConversationBridgeSpec, U as listAgentControllerDescendantProcessIds, V as runCliDriver, W as listAgentControllerSupervisedProcessIds, X as spawnAgentControllerProcess, Y as signalAgentControllerProcessTree, _ as OPENMELD_SPACE_ACTION_MCP_SERVER_ID, b as buildDispatchSpaceActionMcpToolIds, d as resolveAdapterAgentContext, h as looksLikeRuntimePermissionDenialMessage, k as materializeCliLaunchCommand, l as invokeWithSingleContextHeal, m as classifyRuntimePermissionDenialMessage, nt as isDispatchSpaceActionDeliveryOnly, o as createSharedControlShell, r as buildInterruptPlan, s as createSharedDispatchShell, tt as describeDispatchSpaceTools, u as readAdapterAiUsageObservation, v as OPENMELD_SPACE_ACTION_MCP_TOOL_NAMES, x as resolveDispatchSpaceActionMcpServer, y as buildAcpDispatchSpaceActionMcpServers, z as verifyLaunchContractFiles } from "./dist-DptLNaka.js";
|
|
26
26
|
import { createRequire } from "node:module";
|
|
27
27
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
28
28
|
import { homedir, loadavg, tmpdir } from "node:os";
|
|
@@ -7232,6 +7232,90 @@ function userMessage(text, uuid) {
|
|
|
7232
7232
|
};
|
|
7233
7233
|
}
|
|
7234
7234
|
//#endregion
|
|
7235
|
+
//#region ../../runtime/adapters/claude-code/dist/transport/claude-sdk-process.js
|
|
7236
|
+
const PROCESS_EXIT_GRACE_MS = 2e3;
|
|
7237
|
+
/** Use the SDK's public spawn contract; its forwarded abort follows stdin-EOF grace. */
|
|
7238
|
+
function createClaudeSdkProcessLauncher(command, onProcessControlEvent) {
|
|
7239
|
+
const active = /* @__PURE__ */ new Map();
|
|
7240
|
+
return {
|
|
7241
|
+
spawn(options, onStderr) {
|
|
7242
|
+
if (options.command !== command.bin) throw new Error("Claude SDK changed the selected controller executable.");
|
|
7243
|
+
if (options.signal.aborted) throw new DOMException("Claude invocation was cancelled before launch.", "AbortError");
|
|
7244
|
+
const runtime = spawnAgentControllerProcess({
|
|
7245
|
+
bin: command.bin,
|
|
7246
|
+
args: [...command.argsPrefix, ...options.args],
|
|
7247
|
+
cwd: options.cwd ?? process.cwd(),
|
|
7248
|
+
env: options.env,
|
|
7249
|
+
shell: false
|
|
7250
|
+
});
|
|
7251
|
+
const { child } = runtime;
|
|
7252
|
+
let killed = false;
|
|
7253
|
+
const kill = (signal) => {
|
|
7254
|
+
const sent = runtime.terminate(signal);
|
|
7255
|
+
killed ||= sent;
|
|
7256
|
+
return sent;
|
|
7257
|
+
};
|
|
7258
|
+
const abort = () => kill("SIGKILL");
|
|
7259
|
+
const closed = new Promise((resolve) => {
|
|
7260
|
+
child.once("close", () => {
|
|
7261
|
+
options.signal.removeEventListener("abort", abort);
|
|
7262
|
+
resolve();
|
|
7263
|
+
});
|
|
7264
|
+
});
|
|
7265
|
+
active.set(runtime, closed);
|
|
7266
|
+
try {
|
|
7267
|
+
onProcessControlEvent?.({
|
|
7268
|
+
phase: "process_spawned",
|
|
7269
|
+
processId: runtime.processId,
|
|
7270
|
+
signalTarget: runtime.signalTarget
|
|
7271
|
+
});
|
|
7272
|
+
} catch (error) {
|
|
7273
|
+
runtime.terminate("SIGKILL");
|
|
7274
|
+
throw error;
|
|
7275
|
+
}
|
|
7276
|
+
child.stderr.setEncoding("utf8");
|
|
7277
|
+
child.stderr.on("data", onStderr);
|
|
7278
|
+
options.signal.addEventListener("abort", abort, { once: true });
|
|
7279
|
+
if (options.signal.aborted) abort();
|
|
7280
|
+
return {
|
|
7281
|
+
stdin: child.stdin,
|
|
7282
|
+
stdout: child.stdout,
|
|
7283
|
+
get killed() {
|
|
7284
|
+
return killed;
|
|
7285
|
+
},
|
|
7286
|
+
get exitCode() {
|
|
7287
|
+
return child.exitCode;
|
|
7288
|
+
},
|
|
7289
|
+
get signalCode() {
|
|
7290
|
+
return child.signalCode;
|
|
7291
|
+
},
|
|
7292
|
+
kill,
|
|
7293
|
+
on: child.on.bind(child),
|
|
7294
|
+
once: child.once.bind(child),
|
|
7295
|
+
off: child.off.bind(child)
|
|
7296
|
+
};
|
|
7297
|
+
},
|
|
7298
|
+
async cleanup() {
|
|
7299
|
+
await Promise.all([...active].map(async ([runtime, closed]) => {
|
|
7300
|
+
if (!(runtime.child.stdin.destroyed || runtime.child.stdin.writableEnded)) runtime.child.stdin.end();
|
|
7301
|
+
let timer;
|
|
7302
|
+
if (!await Promise.race([closed.then(() => true), new Promise((resolve) => {
|
|
7303
|
+
timer = setTimeout(() => resolve(false), PROCESS_EXIT_GRACE_MS);
|
|
7304
|
+
})]).finally(() => clearTimeout(timer))) runtime.terminate("SIGKILL");
|
|
7305
|
+
const result = await runtime.terminateRemainingDescendants();
|
|
7306
|
+
if (!result.ok) throw result.error;
|
|
7307
|
+
await closed;
|
|
7308
|
+
active.delete(runtime);
|
|
7309
|
+
onProcessControlEvent?.({
|
|
7310
|
+
phase: "process_exit",
|
|
7311
|
+
processId: runtime.processId,
|
|
7312
|
+
signalTarget: runtime.signalTarget
|
|
7313
|
+
});
|
|
7314
|
+
}));
|
|
7315
|
+
}
|
|
7316
|
+
};
|
|
7317
|
+
}
|
|
7318
|
+
//#endregion
|
|
7235
7319
|
//#region ../../runtime/adapters/claude-code/dist/transport/claude-space-action-tools.js
|
|
7236
7320
|
function isClaudeDeliveryOnly(input) {
|
|
7237
7321
|
return Boolean(input.spaceActionTools?.deliveryOnly || isDispatchSpaceActionDeliveryOnly(input.env));
|
|
@@ -7317,67 +7401,6 @@ async function checkClaudeDispatchSpaceToolConnection(query) {
|
|
|
7317
7401
|
});
|
|
7318
7402
|
}
|
|
7319
7403
|
//#endregion
|
|
7320
|
-
//#region ../../runtime/adapters/claude-code/dist/transport/claude-windows-process.js
|
|
7321
|
-
/** Use the SDK's public spawn contract; its forwarded abort follows stdin-EOF grace. */
|
|
7322
|
-
function createClaudeWindowsProcessLauncher(command) {
|
|
7323
|
-
const active = /* @__PURE__ */ new Map();
|
|
7324
|
-
return {
|
|
7325
|
-
spawn(options, onStderr) {
|
|
7326
|
-
if (options.command !== command.bin) throw new Error("Claude SDK changed the selected controller executable.");
|
|
7327
|
-
if (options.signal.aborted) throw new DOMException("Claude invocation was cancelled before launch.", "AbortError");
|
|
7328
|
-
const runtime = spawnAgentControllerProcess({
|
|
7329
|
-
bin: command.bin,
|
|
7330
|
-
args: [...command.argsPrefix, ...options.args],
|
|
7331
|
-
cwd: options.cwd ?? process.cwd(),
|
|
7332
|
-
env: options.env,
|
|
7333
|
-
shell: false
|
|
7334
|
-
});
|
|
7335
|
-
const { child } = runtime;
|
|
7336
|
-
let killed = false;
|
|
7337
|
-
const kill = (signal) => {
|
|
7338
|
-
const sent = runtime.terminate(signal);
|
|
7339
|
-
killed ||= sent;
|
|
7340
|
-
return sent;
|
|
7341
|
-
};
|
|
7342
|
-
const abort = () => kill("SIGKILL");
|
|
7343
|
-
const closed = new Promise((resolve) => {
|
|
7344
|
-
child.once("close", () => {
|
|
7345
|
-
options.signal.removeEventListener("abort", abort);
|
|
7346
|
-
resolve();
|
|
7347
|
-
});
|
|
7348
|
-
});
|
|
7349
|
-
active.set(runtime, closed);
|
|
7350
|
-
child.stderr.setEncoding("utf8");
|
|
7351
|
-
child.stderr.on("data", onStderr);
|
|
7352
|
-
options.signal.addEventListener("abort", abort, { once: true });
|
|
7353
|
-
if (options.signal.aborted) abort();
|
|
7354
|
-
return {
|
|
7355
|
-
stdin: child.stdin,
|
|
7356
|
-
stdout: child.stdout,
|
|
7357
|
-
get killed() {
|
|
7358
|
-
return killed;
|
|
7359
|
-
},
|
|
7360
|
-
get exitCode() {
|
|
7361
|
-
return child.exitCode;
|
|
7362
|
-
},
|
|
7363
|
-
kill,
|
|
7364
|
-
on: child.on.bind(child),
|
|
7365
|
-
once: child.once.bind(child),
|
|
7366
|
-
off: child.off.bind(child)
|
|
7367
|
-
};
|
|
7368
|
-
},
|
|
7369
|
-
async cleanup() {
|
|
7370
|
-
await Promise.all([...active].map(async ([runtime, closed]) => {
|
|
7371
|
-
runtime.terminate("SIGKILL");
|
|
7372
|
-
const result = await runtime.terminateRemainingDescendants();
|
|
7373
|
-
if (!result.ok) throw result.error;
|
|
7374
|
-
await closed;
|
|
7375
|
-
active.delete(runtime);
|
|
7376
|
-
}));
|
|
7377
|
-
}
|
|
7378
|
-
};
|
|
7379
|
-
}
|
|
7380
|
-
//#endregion
|
|
7381
7404
|
//#region ../../runtime/adapters/claude-code/dist/transport/claude-agent-sdk-transport.js
|
|
7382
7405
|
function claudeDeliveryPolicyError(code, cause) {
|
|
7383
7406
|
return new ClaudeAgentSdkTransportError({
|
|
@@ -7504,6 +7527,7 @@ async function invokeClaudeAgentSdkTransport(input) {
|
|
|
7504
7527
|
const streamingMode = input.streamingMode ?? "final";
|
|
7505
7528
|
const resources = await createClaudeAgentSdkInvocationResources({
|
|
7506
7529
|
launchContract: input.launchContract,
|
|
7530
|
+
onProcessControlEvent: input.onProcessControlEvent,
|
|
7507
7531
|
needsPlanCapture: input.onInteractionRequest !== void 0
|
|
7508
7532
|
});
|
|
7509
7533
|
const abortController = new AbortController();
|
|
@@ -7790,7 +7814,10 @@ function resolveFirstObservedAtMs(current) {
|
|
|
7790
7814
|
return current ?? Date.now();
|
|
7791
7815
|
}
|
|
7792
7816
|
async function createClaudeAgentSdkInvocationResources(input) {
|
|
7793
|
-
const executable = await resolveClaudeAgentSdkExecutable({
|
|
7817
|
+
const executable = await resolveClaudeAgentSdkExecutable({
|
|
7818
|
+
launchContract: input.launchContract,
|
|
7819
|
+
onProcessControlEvent: input.onProcessControlEvent
|
|
7820
|
+
});
|
|
7794
7821
|
let planCapture;
|
|
7795
7822
|
try {
|
|
7796
7823
|
planCapture = await createClaudePlanCapture(input.needsPlanCapture);
|
|
@@ -7836,17 +7863,21 @@ async function resolveClaudeAgentSdkExecutable(input) {
|
|
|
7836
7863
|
bin: invocation.bin,
|
|
7837
7864
|
argsPrefix: invocation.args
|
|
7838
7865
|
};
|
|
7839
|
-
const launcher =
|
|
7866
|
+
const launcher = createClaudeSdkProcessLauncher(selected, input.onProcessControlEvent);
|
|
7840
7867
|
return {
|
|
7841
7868
|
cleanup: launcher.cleanup,
|
|
7842
7869
|
pathToClaudeCodeExecutable: selected.bin,
|
|
7843
7870
|
spawnProcess: launcher.spawn
|
|
7844
7871
|
};
|
|
7845
7872
|
}
|
|
7846
|
-
if (launchCommand.argsPrefix.length === 0 && launchCommand.shell !== true)
|
|
7847
|
-
|
|
7848
|
-
|
|
7849
|
-
|
|
7873
|
+
if (launchCommand.argsPrefix.length === 0 && launchCommand.shell !== true) {
|
|
7874
|
+
const launcher = createClaudeSdkProcessLauncher(launchCommand, input.onProcessControlEvent);
|
|
7875
|
+
return {
|
|
7876
|
+
cleanup: launcher.cleanup,
|
|
7877
|
+
pathToClaudeCodeExecutable: launchCommand.bin,
|
|
7878
|
+
spawnProcess: launcher.spawn
|
|
7879
|
+
};
|
|
7880
|
+
}
|
|
7850
7881
|
const wrapperDir = await mkdtemp(join(tmpdir(), "openmeld-claude-sdk-"));
|
|
7851
7882
|
const wrapperPath = join(wrapperDir, "claude-code-wrapper");
|
|
7852
7883
|
await writeFile(wrapperPath, buildPosixWrapperScript({
|
|
@@ -7854,14 +7885,23 @@ async function resolveClaudeAgentSdkExecutable(input) {
|
|
|
7854
7885
|
bin: launchCommand.bin
|
|
7855
7886
|
}), "utf8");
|
|
7856
7887
|
await chmod(wrapperPath, 493);
|
|
7888
|
+
const launcher = createClaudeSdkProcessLauncher({
|
|
7889
|
+
bin: wrapperPath,
|
|
7890
|
+
argsPrefix: []
|
|
7891
|
+
}, input.onProcessControlEvent);
|
|
7857
7892
|
return {
|
|
7858
7893
|
cleanup: async () => {
|
|
7859
|
-
|
|
7860
|
-
|
|
7861
|
-
|
|
7862
|
-
|
|
7894
|
+
try {
|
|
7895
|
+
await launcher.cleanup();
|
|
7896
|
+
} finally {
|
|
7897
|
+
await rm(wrapperDir, {
|
|
7898
|
+
force: true,
|
|
7899
|
+
recursive: true
|
|
7900
|
+
});
|
|
7901
|
+
}
|
|
7863
7902
|
},
|
|
7864
|
-
pathToClaudeCodeExecutable: wrapperPath
|
|
7903
|
+
pathToClaudeCodeExecutable: wrapperPath,
|
|
7904
|
+
spawnProcess: launcher.spawn
|
|
7865
7905
|
};
|
|
7866
7906
|
}
|
|
7867
7907
|
function buildClaudeAgentSdkOptions(input) {
|
|
@@ -8257,6 +8297,7 @@ function invokeClaudeOnceWithAgentSdk(input) {
|
|
|
8257
8297
|
instructionPrompt: input.instructionPrompt,
|
|
8258
8298
|
...input.onInteractionRequest ? { onInteractionRequest: input.onInteractionRequest } : {},
|
|
8259
8299
|
...input.onPreview ? { onPreview: input.onPreview } : {},
|
|
8300
|
+
...input.onProcessControlEvent ? { onProcessControlEvent: input.onProcessControlEvent } : {},
|
|
8260
8301
|
...input.onRuntimeEvent ? { onRuntimeEvent: input.onRuntimeEvent } : {},
|
|
8261
8302
|
prompt: input.prompt,
|
|
8262
8303
|
...input.registerAgentSdkQuery ? { registerQuery: input.registerAgentSdkQuery } : {},
|
|
@@ -10911,12 +10952,16 @@ var CodexAppServerSession = class {
|
|
|
10911
10952
|
pending.timeout.unref?.();
|
|
10912
10953
|
}
|
|
10913
10954
|
}
|
|
10914
|
-
|
|
10915
|
-
|
|
10916
|
-
|
|
10917
|
-
|
|
10918
|
-
|
|
10919
|
-
|
|
10955
|
+
try {
|
|
10956
|
+
this.#write({
|
|
10957
|
+
id,
|
|
10958
|
+
jsonrpc: "2.0",
|
|
10959
|
+
method,
|
|
10960
|
+
params
|
|
10961
|
+
});
|
|
10962
|
+
} catch (error) {
|
|
10963
|
+
this.#failAll(error);
|
|
10964
|
+
}
|
|
10920
10965
|
return await requestPromise;
|
|
10921
10966
|
}
|
|
10922
10967
|
async requestControl(method, params, timeout) {
|
|
@@ -30857,9 +30902,9 @@ function createModelCatalogReadSession(input) {
|
|
|
30857
30902
|
async function readModelCatalogOnce(baseUrl) {
|
|
30858
30903
|
try {
|
|
30859
30904
|
const [apiClient, baseUrlModule, clientFoundationModule] = await Promise.all([
|
|
30860
|
-
import("./dist-
|
|
30905
|
+
import("./dist-CZyGORfc.js"),
|
|
30861
30906
|
import("./base-url-Mw6hstaO.js"),
|
|
30862
|
-
import("./api-client-foundation-
|
|
30907
|
+
import("./api-client-foundation-RM1pxGSx.js")
|
|
30863
30908
|
]);
|
|
30864
30909
|
if (typeof apiClient.createConfigApi !== "function") throw new Error("config api client is unavailable");
|
|
30865
30910
|
const resolvedBaseUrl = baseUrl ?? await baseUrlModule.resolveBaseUrl();
|
|
@@ -32929,4 +32974,4 @@ async function prepareProviderRuntime(input, options = {}) {
|
|
|
32929
32974
|
//#endregion
|
|
32930
32975
|
export { bindProject as $, projectCodexUsageObservation as $n, BUILTIN_AGENT_CONTROLLER_DISPLAY_ORDER as $r, repairBuiltinControllerInstall as $t, resolveCurrentEffectiveProfileWorkingFolderRuntime as A, buildAgentContextLookupKey as An, resolveAgentExecutionStatus as Ar, listAgentTargetStates as At, readProfileFolderListForAccount as B, resolveInstalledGrokBuildLaunchCandidates as Bn, classifyCliDriverTimeoutFailure as Br, updateAgentRegistrations as Bt, syncDaemonRouteCatalogState as C, loadLedgerState as Cn, peopleComputerContainsDevice as Cr, createPrimaryBindingReadSession as Ct, resolveLocalRuntimeControllerSupport as D, upsertConversationExecutionState as Dn, renderTaskKnowledgeIndex as Dr, createRegistrationFromCatalogTarget as Dt, resolveLocalController as E, seedLegacyAgentContext as En, renderNonOwnerAudiencePathGuidance as Er, addAgentCustomTarget as Et, defaultProfileFolderDisplayName as F, forkOpenCodeServerSession as Fn, supportsExecutionContextSelection as Fr, registerUnselectedBuiltinAgentsTurnedOff as Ft, resolveConfiguredProfileWorkspacePathForAccount as G, supportsGrokBotSetup as Gn, resolveAdapterToolWorkActivity as Gr, resolveRegistryOriginLaunchCommand as Gt, readProfileWorkspaceConfigForAccount as H, isManagedGrokBotSignedIn as Hn, createUnsupportedProviderUsageLimits as Hr, detectInstalledSkillsAgents as Ht, ensureOpenMeldManagedProfileWorkspace as I, readOpenCode2Inventory as In, supportsSpaceWorkHandoff as Ir, removeAgentCustomTarget as It, validateCustomProfileWorkspacePath as J, resolveInstalledCodexLaunchCandidates as Jn, grokBotConversationIdSchema as Jr, notifyDaemonRouteCatalogChanged as Jt, setCustomProfileWorkspace as K, projectCursorUsageLimits as Kn, DaemonServiceRunError as Kr, resolveRegistryRuntimeAdapterCapabilitySnapshot as Kt, mutateProfileFolderListForAccount as L, resolveInstalledOpenCodeLaunchCandidates as Ln, checkAntigravityAcpAccount as Lr, resolveAgentTargetState as Lt, resolveProfileWorkspaceRuntime as M, createLocalAdapterEntries as Mn, resolveEvidenceSyncHealth as Mr, readAgentRuntimeConfigHealth as Mt, OPENMELD_MANAGED_FOLDER_DISPLAY_NAME as N, parseOpenRouterUsageResponse as Nn, resolveNativeAgentControllerPermissionModeForController as Nr, reconcileNewRunnableBuiltinAgentRegistrations as Nt, syncProfileWorkspaceState as O, withLedgerStateTransaction as On, renderWorkingLanguagePrompt as Or, listAgentCustomTargets as Ot, ProfileFolderListLimitError as P, parseOpenCodeGoUsageResponse as Pn, resolveSelectableCandidates as Pr, reconcileNewRunnableBuiltinAgentsForSetup as Pt, ProjectBindingStoreUpdateRequiredError as Q, verifyCodexAppServerThread as Qn, BUILTIN_AGENT_CONTROLLER_BRANDS as Qr, sortAgentRegistrations as Qt, nextProfileFolderRevision as R, GrokBuildAcpTransportError as Rn, isAntigravityAcpLaunchContract as Rr, setAgentRegistrationEnabled as Rt, summarizeSkippedDaemonProfiles as S, commitResolvedAgentContext as Sn, parseAgentControllerRef as Sr, emitReconcileStartedEvidence as St, readLocalEnabledControllers as T, resolveConversationExecutionStateByLookupKey as Tn, renderInformationProtectionPrompt as Tr, resolveAgentProfilePrimaryAgentControllerReport as Tt, readSavedProfileWorkspaceForAccount as U, loginManagedGrokBot as Un, createAcpToolActivityTracker as Ur, resolveSkillsAgentRegistry as Ut, readProfileWorkspaceConfig as V, installGrokBotTools as Vn, createUnavailableProviderUsageLimits as Vr, canManageRegistryAgentSkillTargets as Vt, resolveConfiguredProfileWorkspacePath as W, readManagedGrokBotCandidate as Wn, resolveAdapterToolActivityName as Wr, listBuiltinAgentsRegistryEntries as Wt, validateCustomProfileWorkspacePath$1 as X, probeCodexAppServerAccount as Xn, grokBotMessageReceiptSchema as Xr, normalizeAgentIds as Xt, describeProfileWorkspacePathValidationFailure as Y, forkCodexAppServerThread as Yn, grokBotEntriesSchema as Yr, normalizeAgentId as Yt, ProjectBindingOperationError as Z, resolveCodexAppServerCompletedTurn as Zn, grokBotStoredCredentialSchema as Zr, parseAgentEnabledOption as Zt, writeDaemonRouteCatalogCache as _, resolveCompatibleAgentContextMatch as _n, getAgentControllerPermissionModeFieldLabel as _r, withAgentActivityLocalStateLock as _t, buildOpenClawSpaceSessionKey as a, isPnpmGlobalCommandPath as an, resolveInstalledClaudeCodeLaunchCandidates as ar, migrateProjectBindingStore as at, createRouteCatalogFromMutableState as b, runRuntimeTask as bn, isAgentExecutionReadyOrConnecting as br, emitDriftDetectedEvidence as bt, slugifyOpenClawNamePart as c, createLocalTaskInterruptSender as cn, areAgentControllerInterfaceAccountsSame as cr, removeProjectConnection as ct, matchesExpectedWorkspace as d, MIN_HEARTBEAT_INTERVAL_MS as dn, buildWorkingLanguagePromptPlan as dr, setDefaultProjectConnection as dt, compareAgentControllerRefsForDisplay as ei, EMPTY_AGENT_CONTROLLER_INTERFACE_CAPABILITIES as en, readCodexAccountUsageObservation as er, claimLegacyProjectConnection as et, resolveOpenClawAuthStatus as f, applyAcceptedLeases as fn, compareAgentControllerVersions as fr, unbindProject as ft, readDaemonRouteCatalogCache as g, resolveCatalogSyncIntervalMs as gn, getAgentControllerPermissionModeDisplayMetadata as gr, withAgentActivityDeliveryLock as gt, resolveOpenClawLocalBootstrapPaths as h, resolveAdaptiveHeartbeatIntervalMs as hn, createAuthorityOpenMeldServiceRuntimeId as hr, resolveLocalProjectConnectionForPath as ht, listOpenClawGatewayAgents as i, isNpmGlobalCommandPath as in, updateClaudeNativeInstallation as ir, listProjectConnectionsWithStatus as it, resolveEffectiveProfileWorkingFolderRuntime as j, createLocalAdapterContainer as jn, resolveAgentProfileEditCapabilities as jr, manageAgentRegistrationInstallation as jt, createModelCatalogReadSession as k, assertLegacyAgentContextAssociation as kn, resolveAgentControllerPermissionModeForController as kr, listAgentRegistrations as kt, findOpenClawAgentById as l, ADAPTIVE_HEARTBEAT_JITTER_RATIO as ln, buildAgentControllerRef as lr, resolveProjectBindingForPath as lt, readOpenClawLocalBootstrapState as m, pruneStaleLeases as mn, createAgentExecutionStatusDisplayRows as mr, isProjectConnectionReadableByOwner as mt, fetchOpenClawGatewayHealth as n, resolveBuiltinAgentControllerBrand as ni, isBunGlobalCommandPath as nn, readClaudeNativeVersion as nr, isProjectBound as nt, buildOpenClawWakeSessionKey as o, resolveLocalRegistryAgentIdFromAgentControllerRef as on, DEFAULT_TASK_LIFECYCLE_HEARTBEAT_INTERVAL_MS as or, removeAgentActivityBindingsWhileDeliveryLocked as ot, resolveOpenClawProviderRuntimeWorkingDirectory as p, applyIntervalJitterMs as pn, createAgentControllerInterfaceDisplayRows as pr, canonicalizeLocalProjectPath as pt, setOpenMeldManagedProfileWorkspace as q, resolveCodexTimeoutMs as qn, grokBotAccountSchema as qr, resolveRegistryRuntimeAdapterContractByAgentControllerRef as qt, listOpenClawAgents as r, isHomebrewCommandPath as rn, resolveClaudeNativeUpdateCommand as rr, listProjectBindings as rt, normalizeOpenClawSpaceIdPrefix as s, resolveRouteRegistrationReconcileDecision as sn, TASK_KNOWLEDGE_GUIDANCE as sr, removeMissingProjectConnections as st, prepareProviderRuntime as t, isBuiltinAgentControllerBrandId as ti, resolveBuiltinAgentControllerDefinition as tn, probeClaudeCodeUsageLimits as tr, hasProjectBindingForPath as tt, findOpenClawAgentsByWorkspace as u, MAX_HEARTBEAT_INTERVAL_MS as un, buildInformationProtectionPromptPlan as ur, runIfAgentActivityBindingGenerationIsCurrent as ut, loadDaemonRouteCatalog as v, resolveCompatibleConversationExecutionState as vn, isAgentControllerUsageAccountUnavailable as vr, NO_LOCAL_AGENTS_NEED_OPENMELD_SERVICE_REASON as vt, buildRuntimeRouteTargets as w, removeConversationExecutionState as wn, projectPeopleComputersToLegacyLocalRuntimes as wr, createExpectedRoutesReadSession as wt, replaceMutableRouteCatalogState as x, buildRuntimeWorkspaceFingerprint as xn, listAgentControllerPermissionModeOptions as xr, emitReconcileCompletedEvidence as xt, createMutableRouteCatalogState as y, resolveLatestScopedConversationExecutionState as yn, isAgentControllerUsageRefreshUnavailable as yr, syncDeviceRuntimeStateProjection as yt, normalizeCustomProfileWorkspacePath as z, probeGrokBuildAcpInterface as zn, buildProviderExitError as zr, updateAgentCustomTarget as zt };
|
|
32931
32976
|
|
|
32932
|
-
//# sourceMappingURL=prepare-provider-runtime-
|
|
32977
|
+
//# sourceMappingURL=prepare-provider-runtime-DXU1tsC-.js.map
|