openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
158 lines (157 loc) • 6.62 kB
JavaScript
import "./device-provider-identity-v6nXqNq_.js";
//#region src/gateway/worker-environments/placement-projector.ts
function readWorkerPlacementIdentity(record, environments) {
const environment = record.environmentId ? environments?.get(record.environmentId) : void 0;
if (!environment) return;
return (record.activeOwnerEpoch !== null ? environment.ownerEpoch === record.activeOwnerEpoch : record.state === "provisioning" || record.state === "syncing" || record.state === "starting") ? {
providerId: environment.providerId,
profileId: environment.profileId
} : void 0;
}
function createWorkerPlacementRunnerAvailabilityReader(params) {
let version = 0;
const read = (record) => {
if (record.state !== "active") return;
const environment = params.environments.get(record.environmentId);
if (environment?.providerId !== "device" || environment.state !== "attached" || environment.ownerEpoch !== record.activeOwnerEpoch || environment.attachedSessionIds.length !== 1 || environment.attachedSessionIds[0] !== record.sessionId || !environment.nodeDeviceId) return;
return {
kind: "device",
deviceId: environment.nodeDeviceId,
status: params.hasCurrentDeviceRunner(environment.nodeDeviceId) ? "available" : "offline"
};
};
return {
read,
markChanged: () => {
version += 1;
},
version: () => version
};
}
function projectWorkerPlacementMove(intent) {
return {
target: intent.target,
updatedAtMs: intent.updatedAtMs,
...intent.lastError ? { error: intent.lastError } : {}
};
}
/** Removes gateway-only identity and turn-claim fields from the operator projection. */
function projectWorkerSessionPlacement(record, diskSpace, runner, identity, failedRecoveryAction) {
const timing = {
generation: record.generation,
createdAtMs: record.createdAtMs,
updatedAtMs: record.updatedAtMs,
stateChangedAtMs: record.stateChangedAtMs
};
const conflict = record.workspaceResultConflict ? { workspaceResultConflict: record.workspaceResultConflict } : {};
const terminal = {
...record.terminalReason ? { terminalReason: record.terminalReason } : {},
...record.terminalAtMs !== null ? { terminalAtMs: record.terminalAtMs } : {}
};
switch (record.state) {
case "local": return {
state: "local",
...timing
};
case "requested": return {
state: "requested",
...timing
};
case "provisioning": return {
state: "provisioning",
...timing,
...identity,
...record.environmentId ? { environmentId: record.environmentId } : {}
};
case "syncing": return {
state: "syncing",
...timing,
...identity,
environmentId: record.environmentId,
workerBundleHash: record.workerBundleHash
};
case "starting": return {
state: "starting",
...timing,
...identity,
environmentId: record.environmentId,
workerBundleHash: record.workerBundleHash,
workspaceBaseManifestRef: record.workspaceBaseManifestRef,
remoteWorkspaceDir: record.remoteWorkspaceDir
};
case "active": return {
state: "active",
...timing,
...identity,
environmentId: record.environmentId,
activeOwnerEpoch: record.activeOwnerEpoch,
workerBundleHash: record.workerBundleHash,
workspaceBaseManifestRef: record.workspaceBaseManifestRef,
remoteWorkspaceDir: record.remoteWorkspaceDir,
...record.lastTranscriptAckCursor !== null ? { lastTranscriptAckCursor: record.lastTranscriptAckCursor } : {},
...record.lastLiveEventAckCursor !== null ? { lastLiveEventAckCursor: record.lastLiveEventAckCursor } : {},
...diskSpace ? { diskSpace } : {},
...runner ? { runner } : {},
...conflict
};
case "draining": return {
state: "draining",
...timing,
...identity,
environmentId: record.environmentId,
activeOwnerEpoch: record.activeOwnerEpoch,
workerBundleHash: record.workerBundleHash,
workspaceBaseManifestRef: record.workspaceBaseManifestRef,
remoteWorkspaceDir: record.remoteWorkspaceDir,
...record.lastTranscriptAckCursor !== null ? { lastTranscriptAckCursor: record.lastTranscriptAckCursor } : {},
...record.lastLiveEventAckCursor !== null ? { lastLiveEventAckCursor: record.lastLiveEventAckCursor } : {},
...conflict
};
case "reconciling": return {
state: "reconciling",
...timing,
...identity,
environmentId: record.environmentId,
activeOwnerEpoch: record.activeOwnerEpoch,
workerBundleHash: record.workerBundleHash,
workspaceBaseManifestRef: record.workspaceBaseManifestRef,
remoteWorkspaceDir: record.remoteWorkspaceDir,
...record.lastTranscriptAckCursor !== null ? { lastTranscriptAckCursor: record.lastTranscriptAckCursor } : {},
...record.lastLiveEventAckCursor !== null ? { lastLiveEventAckCursor: record.lastLiveEventAckCursor } : {},
...conflict
};
case "reclaimed": return {
state: "reclaimed",
...timing,
...identity,
...record.environmentId ? { environmentId: record.environmentId } : {},
...record.activeOwnerEpoch !== null ? { activeOwnerEpoch: record.activeOwnerEpoch } : {},
...record.workspaceBaseManifestRef ? { workspaceBaseManifestRef: record.workspaceBaseManifestRef } : {},
...record.remoteWorkspaceDir ? { remoteWorkspaceDir: record.remoteWorkspaceDir } : {},
...record.workerBundleHash ? { workerBundleHash: record.workerBundleHash } : {},
...record.lastTranscriptAckCursor !== null ? { lastTranscriptAckCursor: record.lastTranscriptAckCursor } : {},
...record.lastLiveEventAckCursor !== null ? { lastLiveEventAckCursor: record.lastLiveEventAckCursor } : {},
...conflict,
...terminal
};
case "failed": return {
state: "failed",
...timing,
...identity,
...record.environmentId ? { environmentId: record.environmentId } : {},
...record.activeOwnerEpoch !== null ? { activeOwnerEpoch: record.activeOwnerEpoch } : {},
...record.workspaceBaseManifestRef ? { workspaceBaseManifestRef: record.workspaceBaseManifestRef } : {},
...record.remoteWorkspaceDir ? { remoteWorkspaceDir: record.remoteWorkspaceDir } : {},
...record.workerBundleHash ? { workerBundleHash: record.workerBundleHash } : {},
...record.lastTranscriptAckCursor !== null ? { lastTranscriptAckCursor: record.lastTranscriptAckCursor } : {},
...record.lastLiveEventAckCursor !== null ? { lastLiveEventAckCursor: record.lastLiveEventAckCursor } : {},
...conflict,
recoveryError: record.recoveryError,
...failedRecoveryAction ? { recoveryAction: failedRecoveryAction } : {},
...terminal
};
}
return record;
}
//#endregion
export { readWorkerPlacementIdentity as i, projectWorkerPlacementMove as n, projectWorkerSessionPlacement as r, createWorkerPlacementRunnerAvailabilityReader as t };