@caupulican/pi-adaptative 0.90.2 → 0.90.4
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/CHANGELOG.md +35 -0
- package/dist/core/agent-session-contracts.d.ts +2 -0
- package/dist/core/agent-session-contracts.d.ts.map +1 -1
- package/dist/core/agent-session-contracts.js.map +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts +10 -1
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
- package/dist/core/autonomy/bounded-completion.js +24 -2
- package/dist/core/autonomy/bounded-completion.js.map +1 -1
- package/dist/core/autonomy/lane-tracker.d.ts +1 -1
- package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tracker.js +9 -1
- package/dist/core/autonomy/lane-tracker.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +1 -3
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +0 -1
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -1
- package/dist/core/delegation/managed-lane-controller.js +5 -1
- package/dist/core/delegation/managed-lane-controller.js.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts +8 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.js +94 -36
- package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-agent-control.d.ts +1 -0
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +7 -2
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.js +26 -3
- package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts +7 -4
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +110 -27
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.d.ts +9 -2
- package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.js +39 -3
- package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
- package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -1
- package/dist/core/delegation/worker-lane-projection.js +4 -0
- package/dist/core/delegation/worker-lane-projection.js.map +1 -1
- package/dist/core/delegation/worker-lease-heartbeat.d.ts +16 -0
- package/dist/core/delegation/worker-lease-heartbeat.d.ts.map +1 -0
- package/dist/core/delegation/worker-lease-heartbeat.js +37 -0
- package/dist/core/delegation/worker-lease-heartbeat.js.map +1 -0
- package/dist/core/delegation/worker-lifecycle.d.ts +1 -0
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
- package/dist/core/delegation/worker-lifecycle.js +6 -0
- package/dist/core/delegation/worker-lifecycle.js.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +2 -1
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-runner.js +2 -2
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-terminal-handoff-coordinator.d.ts +1 -0
- package/dist/core/delegation/worker-terminal-handoff-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-terminal-handoff-coordinator.js +1 -0
- package/dist/core/delegation/worker-terminal-handoff-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-tree-budget-coordinator.d.ts +4 -2
- package/dist/core/delegation/worker-tree-budget-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-tree-budget-coordinator.js +10 -2
- package/dist/core/delegation/worker-tree-budget-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +14 -0
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +121 -33
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +5 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.js +28 -12
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
- package/dist/core/orchestration/capability-gateway.d.ts +2 -1
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
- package/dist/core/orchestration/capability-gateway.js +9 -2
- package/dist/core/orchestration/capability-gateway.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts +16 -1
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js +5 -0
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +38 -1
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/risk-budget.d.ts +10 -0
- package/dist/core/orchestration/risk-budget.d.ts.map +1 -1
- package/dist/core/orchestration/risk-budget.js +14 -0
- package/dist/core/orchestration/risk-budget.js.map +1 -1
- package/dist/core/orchestration/task-runtime-reducer.d.ts +1 -0
- package/dist/core/orchestration/task-runtime-reducer.d.ts.map +1 -1
- package/dist/core/orchestration/task-runtime-reducer.js +34 -0
- package/dist/core/orchestration/task-runtime-reducer.js.map +1 -1
- package/dist/core/orchestration/task-runtime.d.ts +1 -0
- package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
- package/dist/core/orchestration/task-runtime.js +24 -1
- package/dist/core/orchestration/task-runtime.js.map +1 -1
- package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
- package/dist/core/provider-prompt-contracts.js +2 -1
- package/dist/core/provider-prompt-contracts.js.map +1 -1
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +8 -1
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tools/bash.d.ts +3 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +13 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts +1 -0
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +19 -1
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +9 -1
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +198 -64
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +14 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-failure-recovery.d.ts +3 -0
- package/dist/core/tools/file-failure-recovery.d.ts.map +1 -1
- package/dist/core/tools/file-failure-recovery.js +11 -0
- package/dist/core/tools/file-failure-recovery.js.map +1 -1
- package/dist/core/tools/orchestration-panel.d.ts +1 -1
- package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
- package/dist/core/tools/orchestration-panel.js +1 -0
- package/dist/core/tools/orchestration-panel.js.map +1 -1
- package/dist/core/tools/profile-writer.d.ts.map +1 -1
- package/dist/core/tools/profile-writer.js +2 -8
- package/dist/core/tools/profile-writer.js.map +1 -1
- package/dist/core/tools/search-command-guard.d.ts.map +1 -1
- package/dist/core/tools/search-command-guard.js +10 -3
- package/dist/core/tools/search-command-guard.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +10 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +11 -2
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/utils/shell.d.ts +2 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +3 -1
- package/dist/utils/shell.js.map +1 -1
- package/docs/harness-architecture.md +6 -3
- package/docs/settings.md +8 -6
- package/docs/tool-repair.md +1 -1
- package/docs/worker-profiles.md +2 -2
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-lane-controller.js","sourceRoot":"","sources":["../../../src/core/delegation/managed-lane-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Usage } from \"@caupulican/pi-ai\";\nimport type { CapabilityEnvelope, WorkerClaim, WorkerClaimStatus, WorkerRequest } from \"../autonomy/contracts.ts\";\nimport { getPrivateLaneDeniedPaths } from \"../autonomy/lane-private-paths.ts\";\nimport { isLaneTerminalStatus, type LaneRecord, type LaneTerminalStatus } from \"../autonomy/lane-tracker.ts\";\nimport { appendLaneRecordSnapshot, getLatestLaneRecordSnapshots } from \"../autonomy/session-lane-record.ts\";\nimport type { ManagedLaneDispatch, ManagedLaneEvent } from \"../extensions/types.ts\";\nimport type { GoalState } from \"../goals/goal-state.ts\";\nimport { validateProviderUsage } from \"../orchestration/attempt-usage.ts\";\nimport type { ExecutionGrant } from \"../orchestration/contracts.ts\";\nimport { registerInFlightWork } from \"../reload-blockers.ts\";\nimport { getActiveSessionBranchEntries } from \"../session-snapshot.ts\";\nimport { getLatestWorkerClaimSnapshot } from \"./session-worker-claim.ts\";\nimport {\n\tnormalizeWorkerClaimForHost,\n\tnormalizeWorkerClaimReasonCode,\n\treviewManagedLaneChangedFiles,\n} from \"./worker-claim.ts\";\nimport { compileManagedProcessExecutionGrant } from \"./worker-execution-policy.ts\";\nimport type { WorkerLifecycle } from \"./worker-lifecycle.ts\";\nimport { finalizeWorkerClaim } from \"./worker-terminal-finalizer.ts\";\n\nconst LEGACY_MANAGED_LEASE_TTL_MS = 24 * 60 * 60 * 1_000;\nconst LEGACY_MANAGED_READ_TOOLS = [\"read\", \"grep\", \"find\", \"ls\"] as const;\n\nexport function resolveManagedLaneTerminalStatus(status: string | undefined): LaneTerminalStatus {\n\tif (isLaneTerminalStatus(status)) return status;\n\tswitch (status) {\n\t\tcase \"done\":\n\t\tcase \"completed\":\n\t\t\treturn \"succeeded\";\n\t\tcase \"blocked\":\n\t\t\treturn \"failed\";\n\t\tcase \"dismissed\":\n\t\tcase \"cancelled\":\n\t\t\treturn \"canceled\";\n\t\tdefault:\n\t\t\treturn \"failed\";\n\t}\n}\n\nexport function mapManagedLaneTerminalStatus(status: LaneTerminalStatus): WorkerClaimStatus {\n\tswitch (status) {\n\t\tcase \"succeeded\":\n\t\t\treturn \"completed\";\n\t\tcase \"canceled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"failed\":\n\t\tcase \"timeout\":\n\t\tcase \"budget_exhausted\":\n\t\t\treturn \"failed\";\n\t}\n}\n\nexport interface ManagedLaneControllerDeps {\n\tisDisposed(): boolean;\n\tgetAgentDir(): string;\n\tgetCwd(): string;\n\tgetSessionManager(): SessionManager;\n\tgetGoalStateSnapshot(): GoalState | undefined;\n\tgetCapabilityEnvelope(): CapabilityEnvelope | undefined;\n\tsaveWorkerClaimSnapshot(claim: WorkerClaim, request?: WorkerRequest): string;\n\t/** Optional only for minimal host embeddings; normal AgentSession integration always supplies this. */\n\taddSpawnedUsage?(\n\t\tusage: Usage,\n\t\topts: { label?: string; sourceSessionId?: string; reportId: string },\n\t): string | undefined;\n}\n\n/** Out-of-process adapter over the same durable worker lifecycle used by in-process delegation. */\nexport class ManagedLaneController {\n\tprivate readonly deps: ManagedLaneControllerDeps;\n\tprivate readonly lifecycle: WorkerLifecycle;\n\tprivate readonly recordTerminal: (record: LaneRecord, durableNotificationId: string) => void;\n\tprivate readonly warn: (message: string) => void;\n\tprivate readonly deregisterByLane = new Map<string, () => void>();\n\tprivate hydrated = false;\n\n\tconstructor(\n\t\tdeps: ManagedLaneControllerDeps,\n\t\tlifecycle: WorkerLifecycle,\n\t\trecordTerminal: (record: LaneRecord, durableNotificationId: string) => void,\n\t\twarn: (message: string) => void = () => {},\n\t) {\n\t\tthis.deps = deps;\n\t\tthis.lifecycle = lifecycle;\n\t\tthis.recordTerminal = recordTerminal;\n\t\tthis.warn = warn;\n\t}\n\n\tensureHydrated(): void {\n\t\tif (this.hydrated) return;\n\t\tthis.hydrated = true;\n\t\tconst durableIds = new Set(this.lifecycle.getManagedRecords().map((record) => record.laneId));\n\t\tfor (const legacy of getLatestLaneRecordSnapshots(getActiveSessionBranchEntries(this.deps.getSessionManager()))) {\n\t\t\tif (\n\t\t\t\tlegacy.type !== \"tmux-worker\" ||\n\t\t\t\t(legacy.status !== \"queued\" && legacy.status !== \"running\") ||\n\t\t\t\tdurableIds.has(legacy.laneId)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.lifecycle.prepareManaged({\n\t\t\t\tlaneId: legacy.laneId,\n\t\t\t\tdispatchSequence: 1,\n\t\t\t\tinstructions: legacy.label ?? `Resume externally managed lane ${legacy.laneId}`,\n\t\t\t\tprofileId: legacy.profileId ?? \"legacy-managed-process\",\n\t\t\t\tprovider: \"legacy\",\n\t\t\t\tauthorizationId: `legacy-session-lane:${legacy.laneId}`,\n\t\t\t\trole: \"implementer\",\n\t\t\t\triskBudget: { maxAttempts: 1, maxWallClockMs: LEGACY_MANAGED_LEASE_TTL_MS },\n\t\t\t\tleaseTtlMs: LEGACY_MANAGED_LEASE_TTL_MS,\n\t\t\t\tcompileGrant: (target) =>\n\t\t\t\t\tthis.compileGrant(target, legacy.laneId, {\n\t\t\t\t\t\tsequence: 1,\n\t\t\t\t\t\tinstructions: legacy.label ?? `Resume externally managed lane ${legacy.laneId}`,\n\t\t\t\t\t\tprofileId: legacy.profileId ?? \"legacy-managed-process\",\n\t\t\t\t\t\tprovider: \"legacy\",\n\t\t\t\t\t\tauthorizationId: `legacy-session-lane:${legacy.laneId}`,\n\t\t\t\t\t\tauthorizationKind: \"legacy-recovery\",\n\t\t\t\t\t\tallowedTools: LEGACY_MANAGED_READ_TOOLS,\n\t\t\t\t\t\twritePaths: [],\n\t\t\t\t\t\tleaseTtlMs: LEGACY_MANAGED_LEASE_TTL_MS,\n\t\t\t\t\t}),\n\t\t\t\t...(legacy.worktreeLaneKey ? { worktreeLaneKey: legacy.worktreeLaneKey } : {}),\n\t\t\t});\n\t\t}\n\t\tfor (const record of this.lifecycle.getManagedRecords()) {\n\t\t\tif (record.status === \"queued\" || record.status === \"running\") this.ensureRegistration(record.laneId);\n\t\t}\n\t}\n\n\tresolve(callerLaneId: string): string | undefined {\n\t\tthis.ensureHydrated();\n\t\tconst record = this.lifecycle.getManagedRecord(callerLaneId);\n\t\treturn record && (record.status === \"queued\" || record.status === \"running\") ? callerLaneId : undefined;\n\t}\n\n\trecord(event: ManagedLaneEvent): LaneRecord | undefined {\n\t\tif (this.deps.isDisposed()) return undefined;\n\t\tthis.ensureHydrated();\n\t\tif (event.phase === \"dispatch\") {\n\t\t\tconst goal = this.deps.getGoalStateSnapshot();\n\t\t\tconst prepared = this.lifecycle.prepareManaged({\n\t\t\t\tlaneId: event.laneId,\n\t\t\t\tdispatchSequence: event.dispatch.sequence,\n\t\t\t\tinstructions: event.dispatch.instructions,\n\t\t\t\tprofileId: event.dispatch.profileId,\n\t\t\t\tprovider: event.dispatch.provider,\n\t\t\t\tauthorizationId: event.dispatch.authorizationId,\n\t\t\t\tleaseTtlMs: event.dispatch.leaseTtlMs,\n\t\t\t\tcompileGrant: (target) => this.compileGrant(target, event.laneId, event.dispatch),\n\t\t\t\trole: \"implementer\",\n\t\t\t\triskBudget: { maxAttempts: 1, maxWallClockMs: event.dispatch.leaseTtlMs },\n\t\t\t\t...(goal && Array.isArray(goal.requirements) && (!event.goalId || goal.goalId === event.goalId)\n\t\t\t\t\t? { goal }\n\t\t\t\t\t: {}),\n\t\t\t\t...(event.goalId ? { goalId: event.goalId } : {}),\n\t\t\t\t...(event.worktreeLaneKey ? { worktreeLaneKey: event.worktreeLaneKey } : {}),\n\t\t\t});\n\t\t\tif (!prepared.created) return undefined;\n\t\t\tthis.ensureRegistration(event.laneId);\n\t\t\tappendLaneRecordSnapshot(this.deps.getSessionManager(), prepared.record);\n\t\t\treturn prepared.record;\n\t\t}\n\n\t\tconst attempt = this.lifecycle.getManagedAttempt(event.laneId);\n\t\tconst handle = this.lifecycle.getManagedHandle(event.laneId);\n\t\tif (!attempt || !handle || (attempt.status !== \"leased\" && attempt.status !== \"running\")) return undefined;\n\t\tlet usage: Usage | undefined;\n\t\ttry {\n\t\t\tusage = event.usage ? validateProviderUsage(event.usage, \"managed lane usage\") : undefined;\n\t\t} catch (error) {\n\t\t\tthis.warn(\n\t\t\t\t`Rejected terminal report for managed worker ${event.laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst resolvedStatus = resolveManagedLaneTerminalStatus(event.status);\n\t\tconst usageReportId = usage && this.deps.addSpawnedUsage ? `managed-worker:${handle.attemptId}` : undefined;\n\t\tlet claim: WorkerClaim;\n\t\ttry {\n\t\t\tclaim = normalizeWorkerClaimForHost({\n\t\t\t\trequestId: event.laneId,\n\t\t\t\tterminalAttemptId: handle.attemptId,\n\t\t\t\tstatus: mapManagedLaneTerminalStatus(resolvedStatus),\n\t\t\t\tsummary: `Managed worker lane ${event.laneId} reported terminal status \"${resolvedStatus}\".`,\n\t\t\t\tchangedFiles: event.changedFiles ?? [],\n\t\t\t\t...(usageReportId ? { usageReportId } : {}),\n\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis.warn(\n\t\t\t\t`Rejected terminal report for managed worker ${event.laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst review = reviewManagedLaneChangedFiles({\n\t\t\tchangedFiles: claim.changedFiles,\n\t\t\tenvelope: this.deps.getCapabilityEnvelope() ?? {},\n\t\t\tcwd: this.deps.getCwd(),\n\t\t});\n\t\tclaim = normalizeWorkerClaimForHost({\n\t\t\t...claim,\n\t\t\tsummary: `${claim.summary}${\n\t\t\t\treview.reviewRequired ? ` Changed files require parent review (${review.reasonCode}).` : \"\"\n\t\t\t}`,\n\t\t\tparentReviewRequired: review.reviewRequired,\n\t\t});\n\t\tlet record: LaneRecord | undefined;\n\t\tlet finalized = false;\n\t\ttry {\n\t\t\t// Accounting must commit before the lifecycle terminal transition. A failed append leaves the\n\t\t\t// fenced attempt active so the same terminal event can retry with this stable report id.\n\t\t\tif (usage && usageReportId) {\n\t\t\t\tthis.deps.addSpawnedUsage?.(usage, { label: \"managed-worker\", reportId: usageReportId });\n\t\t\t}\n\t\t\tif (!this.hasPersistedClaimForAttempt(claim)) this.deps.saveWorkerClaimSnapshot(claim);\n\t\t\tconst terminal = finalizeWorkerClaim(this.lifecycle, {\n\t\t\t\thandle,\n\t\t\t\tclaim,\n\t\t\t\taccepted: resolvedStatus === \"succeeded\" && !review.reviewRequired,\n\t\t\t\tcostUsd: usage?.cost.total,\n\t\t\t\tcwd: this.deps.getCwd(),\n\t\t\t\t...(usage\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tinputTokens: usage.input,\n\t\t\t\t\t\t\toutputTokens: usage.output,\n\t\t\t\t\t\t\ttotalTokens: usage.totalTokens,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\twallClockMs: Math.max(0, Date.now() - Date.parse(attempt.createdAt)),\n\t\t\t\ttoolCalls: 0,\n\t\t\t\treasonCode: normalizeWorkerClaimReasonCode(\n\t\t\t\t\treview.reviewRequired ? `parent_review_required:${review.reasonCode}` : event.reasonCode,\n\t\t\t\t\t`managed_worker_${resolvedStatus}`,\n\t\t\t\t),\n\t\t\t});\n\t\t\trecord = terminal.record;\n\t\t\tfinalized = true;\n\t\t\tif (terminal.notification) this.recordTerminal(record, terminal.notification.notificationId);\n\t\t\tappendLaneRecordSnapshot(this.deps.getSessionManager(), record);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (finalized) {\n\t\t\t\tthis.warn(\n\t\t\t\t\t`Managed worker ${event.laneId} finalized, but terminal projection or handoff failed: ${message}`,\n\t\t\t\t);\n\t\t\t\treturn record;\n\t\t\t}\n\t\t\tthis.warn(`Managed worker ${event.laneId} terminal processing failed and remains retryable: ${message}`);\n\t\t\treturn undefined;\n\t\t} finally {\n\t\t\tif (finalized) this.releaseRegistration(event.laneId);\n\t\t}\n\t\treturn record;\n\t}\n\n\trelease(): void {\n\t\tfor (const deregister of this.deregisterByLane.values()) deregister();\n\t\tthis.deregisterByLane.clear();\n\t}\n\n\tprivate ensureRegistration(laneId: string): void {\n\t\tif (this.deregisterByLane.has(laneId)) return;\n\t\tthis.deregisterByLane.set(laneId, registerInFlightWork(this.deps.getAgentDir(), \"lane\", `tmux:${laneId}`));\n\t}\n\n\tprivate releaseRegistration(laneId: string): void {\n\t\tthis.deregisterByLane.get(laneId)?.();\n\t\tthis.deregisterByLane.delete(laneId);\n\t}\n\n\t/** A replay after a crash between claim append and lifecycle finalization must not duplicate the claim. */\n\tprivate hasPersistedClaimForAttempt(claim: WorkerClaim): boolean {\n\t\tif (!claim.terminalAttemptId) return false;\n\t\tconst latest = getLatestWorkerClaimSnapshot(\n\t\t\tgetActiveSessionBranchEntries(this.deps.getSessionManager()),\n\t\t\tclaim.requestId,\n\t\t);\n\t\treturn latest?.claim.terminalAttemptId === claim.terminalAttemptId;\n\t}\n\n\tprivate compileGrant(\n\t\ttarget: { objectiveId: string; taskId: string; attemptId: string },\n\t\tlaneId: string,\n\t\tdispatch: ManagedLaneDispatch,\n\t): ExecutionGrant {\n\t\tconst compiled = compileManagedProcessExecutionGrant({\n\t\t\ttarget,\n\t\t\tlaneId,\n\t\t\tauthorizationId: dispatch.authorizationId,\n\t\t\trole: \"implementer\",\n\t\t\tallowedTools: dispatch.allowedTools,\n\t\t\twritePaths: dispatch.writePaths,\n\t\t\tcwd: this.deps.getCwd(),\n\t\t\tdeniedPaths: getPrivateLaneDeniedPaths(this.deps.getCwd(), this.deps.getAgentDir()),\n\t\t\tbudget: {\n\t\t\t\tmaxAttempts: 1,\n\t\t\t\tmaxWallClockMs: dispatch.leaseTtlMs,\n\t\t\t\t...(dispatch.maxCostUsd !== undefined ? { maxCostUsd: dispatch.maxCostUsd } : {}),\n\t\t\t},\n\t\t});\n\t\tif (!compiled.ok) {\n\t\t\tthrow new Error(`Managed worker '${laneId}' execution grant was denied: ${compiled.reasonCodes.join(\", \")}`);\n\t\t}\n\t\treturn compiled.grant;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"managed-lane-controller.js","sourceRoot":"","sources":["../../../src/core/delegation/managed-lane-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Usage } from \"@caupulican/pi-ai\";\nimport type { CapabilityEnvelope, WorkerClaim, WorkerClaimStatus, WorkerRequest } from \"../autonomy/contracts.ts\";\nimport { getPrivateLaneDeniedPaths } from \"../autonomy/lane-private-paths.ts\";\nimport { isLaneTerminalStatus, type LaneRecord, type LaneTerminalStatus } from \"../autonomy/lane-tracker.ts\";\nimport { appendLaneRecordSnapshot, getLatestLaneRecordSnapshots } from \"../autonomy/session-lane-record.ts\";\nimport type { ManagedLaneDispatch, ManagedLaneEvent } from \"../extensions/types.ts\";\nimport type { GoalState } from \"../goals/goal-state.ts\";\nimport { validateProviderUsage } from \"../orchestration/attempt-usage.ts\";\nimport type { ExecutionGrant } from \"../orchestration/contracts.ts\";\nimport { registerInFlightWork } from \"../reload-blockers.ts\";\nimport { getActiveSessionBranchEntries } from \"../session-snapshot.ts\";\nimport { getLatestWorkerClaimSnapshot } from \"./session-worker-claim.ts\";\nimport {\n\tnormalizeWorkerClaimForHost,\n\tnormalizeWorkerClaimReasonCode,\n\treviewManagedLaneChangedFiles,\n} from \"./worker-claim.ts\";\nimport { compileManagedProcessExecutionGrant } from \"./worker-execution-policy.ts\";\nimport type { WorkerLifecycle } from \"./worker-lifecycle.ts\";\nimport { finalizeWorkerClaim } from \"./worker-terminal-finalizer.ts\";\n\nconst LEGACY_MANAGED_LEASE_TTL_MS = 24 * 60 * 60 * 1_000;\nconst LEGACY_MANAGED_READ_TOOLS = [\"read\", \"grep\", \"find\", \"ls\"] as const;\n\nexport function resolveManagedLaneTerminalStatus(status: string | undefined): LaneTerminalStatus {\n\tif (isLaneTerminalStatus(status)) return status;\n\tswitch (status) {\n\t\tcase \"done\":\n\t\tcase \"completed\":\n\t\t\treturn \"succeeded\";\n\t\tcase \"blocked\":\n\t\t\treturn \"blocked\";\n\t\tcase \"dismissed\":\n\t\tcase \"cancelled\":\n\t\t\treturn \"canceled\";\n\t\tdefault:\n\t\t\treturn \"failed\";\n\t}\n}\n\nexport function mapManagedLaneTerminalStatus(status: LaneTerminalStatus): WorkerClaimStatus {\n\tswitch (status) {\n\t\tcase \"succeeded\":\n\t\t\treturn \"completed\";\n\t\tcase \"partial\":\n\t\t\treturn \"completed\";\n\t\tcase \"blocked\":\n\t\t\treturn \"blocked\";\n\t\tcase \"canceled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"failed\":\n\t\tcase \"timeout\":\n\t\tcase \"budget_exhausted\":\n\t\t\treturn \"failed\";\n\t}\n}\n\nexport interface ManagedLaneControllerDeps {\n\tisDisposed(): boolean;\n\tgetAgentDir(): string;\n\tgetCwd(): string;\n\tgetSessionManager(): SessionManager;\n\tgetGoalStateSnapshot(): GoalState | undefined;\n\tgetCapabilityEnvelope(): CapabilityEnvelope | undefined;\n\tsaveWorkerClaimSnapshot(claim: WorkerClaim, request?: WorkerRequest): string;\n\t/** Optional only for minimal host embeddings; normal AgentSession integration always supplies this. */\n\taddSpawnedUsage?(\n\t\tusage: Usage,\n\t\topts: { label?: string; sourceSessionId?: string; reportId: string },\n\t): string | undefined;\n}\n\n/** Out-of-process adapter over the same durable worker lifecycle used by in-process delegation. */\nexport class ManagedLaneController {\n\tprivate readonly deps: ManagedLaneControllerDeps;\n\tprivate readonly lifecycle: WorkerLifecycle;\n\tprivate readonly recordTerminal: (record: LaneRecord, durableNotificationId: string) => void;\n\tprivate readonly warn: (message: string) => void;\n\tprivate readonly deregisterByLane = new Map<string, () => void>();\n\tprivate hydrated = false;\n\n\tconstructor(\n\t\tdeps: ManagedLaneControllerDeps,\n\t\tlifecycle: WorkerLifecycle,\n\t\trecordTerminal: (record: LaneRecord, durableNotificationId: string) => void,\n\t\twarn: (message: string) => void = () => {},\n\t) {\n\t\tthis.deps = deps;\n\t\tthis.lifecycle = lifecycle;\n\t\tthis.recordTerminal = recordTerminal;\n\t\tthis.warn = warn;\n\t}\n\n\tensureHydrated(): void {\n\t\tif (this.hydrated) return;\n\t\tthis.hydrated = true;\n\t\tconst durableIds = new Set(this.lifecycle.getManagedRecords().map((record) => record.laneId));\n\t\tfor (const legacy of getLatestLaneRecordSnapshots(getActiveSessionBranchEntries(this.deps.getSessionManager()))) {\n\t\t\tif (\n\t\t\t\tlegacy.type !== \"tmux-worker\" ||\n\t\t\t\t(legacy.status !== \"queued\" && legacy.status !== \"running\") ||\n\t\t\t\tdurableIds.has(legacy.laneId)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.lifecycle.prepareManaged({\n\t\t\t\tlaneId: legacy.laneId,\n\t\t\t\tdispatchSequence: 1,\n\t\t\t\tinstructions: legacy.label ?? `Resume externally managed lane ${legacy.laneId}`,\n\t\t\t\tprofileId: legacy.profileId ?? \"legacy-managed-process\",\n\t\t\t\tprovider: \"legacy\",\n\t\t\t\tauthorizationId: `legacy-session-lane:${legacy.laneId}`,\n\t\t\t\trole: \"implementer\",\n\t\t\t\triskBudget: { maxAttempts: 1, maxWallClockMs: LEGACY_MANAGED_LEASE_TTL_MS },\n\t\t\t\tleaseTtlMs: LEGACY_MANAGED_LEASE_TTL_MS,\n\t\t\t\tcompileGrant: (target) =>\n\t\t\t\t\tthis.compileGrant(target, legacy.laneId, {\n\t\t\t\t\t\tsequence: 1,\n\t\t\t\t\t\tinstructions: legacy.label ?? `Resume externally managed lane ${legacy.laneId}`,\n\t\t\t\t\t\tprofileId: legacy.profileId ?? \"legacy-managed-process\",\n\t\t\t\t\t\tprovider: \"legacy\",\n\t\t\t\t\t\tauthorizationId: `legacy-session-lane:${legacy.laneId}`,\n\t\t\t\t\t\tauthorizationKind: \"legacy-recovery\",\n\t\t\t\t\t\tallowedTools: LEGACY_MANAGED_READ_TOOLS,\n\t\t\t\t\t\twritePaths: [],\n\t\t\t\t\t\tleaseTtlMs: LEGACY_MANAGED_LEASE_TTL_MS,\n\t\t\t\t\t}),\n\t\t\t\t...(legacy.worktreeLaneKey ? { worktreeLaneKey: legacy.worktreeLaneKey } : {}),\n\t\t\t});\n\t\t}\n\t\tfor (const record of this.lifecycle.getManagedRecords()) {\n\t\t\tif (record.status === \"queued\" || record.status === \"running\") this.ensureRegistration(record.laneId);\n\t\t}\n\t}\n\n\tresolve(callerLaneId: string): string | undefined {\n\t\tthis.ensureHydrated();\n\t\tconst record = this.lifecycle.getManagedRecord(callerLaneId);\n\t\treturn record && (record.status === \"queued\" || record.status === \"running\") ? callerLaneId : undefined;\n\t}\n\n\trecord(event: ManagedLaneEvent): LaneRecord | undefined {\n\t\tif (this.deps.isDisposed()) return undefined;\n\t\tthis.ensureHydrated();\n\t\tif (event.phase === \"dispatch\") {\n\t\t\tconst goal = this.deps.getGoalStateSnapshot();\n\t\t\tconst prepared = this.lifecycle.prepareManaged({\n\t\t\t\tlaneId: event.laneId,\n\t\t\t\tdispatchSequence: event.dispatch.sequence,\n\t\t\t\tinstructions: event.dispatch.instructions,\n\t\t\t\tprofileId: event.dispatch.profileId,\n\t\t\t\tprovider: event.dispatch.provider,\n\t\t\t\tauthorizationId: event.dispatch.authorizationId,\n\t\t\t\tleaseTtlMs: event.dispatch.leaseTtlMs,\n\t\t\t\tcompileGrant: (target) => this.compileGrant(target, event.laneId, event.dispatch),\n\t\t\t\trole: \"implementer\",\n\t\t\t\triskBudget: { maxAttempts: 1, maxWallClockMs: event.dispatch.leaseTtlMs },\n\t\t\t\t...(goal && Array.isArray(goal.requirements) && (!event.goalId || goal.goalId === event.goalId)\n\t\t\t\t\t? { goal }\n\t\t\t\t\t: {}),\n\t\t\t\t...(event.goalId ? { goalId: event.goalId } : {}),\n\t\t\t\t...(event.worktreeLaneKey ? { worktreeLaneKey: event.worktreeLaneKey } : {}),\n\t\t\t});\n\t\t\tif (!prepared.created) return undefined;\n\t\t\tthis.ensureRegistration(event.laneId);\n\t\t\tappendLaneRecordSnapshot(this.deps.getSessionManager(), prepared.record);\n\t\t\treturn prepared.record;\n\t\t}\n\n\t\tconst attempt = this.lifecycle.getManagedAttempt(event.laneId);\n\t\tconst handle = this.lifecycle.getManagedHandle(event.laneId);\n\t\tif (!attempt || !handle || (attempt.status !== \"leased\" && attempt.status !== \"running\")) return undefined;\n\t\tlet usage: Usage | undefined;\n\t\ttry {\n\t\t\tusage = event.usage ? validateProviderUsage(event.usage, \"managed lane usage\") : undefined;\n\t\t} catch (error) {\n\t\t\tthis.warn(\n\t\t\t\t`Rejected terminal report for managed worker ${event.laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst resolvedStatus = resolveManagedLaneTerminalStatus(event.status);\n\t\tconst usageReportId = usage && this.deps.addSpawnedUsage ? `managed-worker:${handle.attemptId}` : undefined;\n\t\tlet claim: WorkerClaim;\n\t\ttry {\n\t\t\tclaim = normalizeWorkerClaimForHost({\n\t\t\t\trequestId: event.laneId,\n\t\t\t\tterminalAttemptId: handle.attemptId,\n\t\t\t\tstatus: mapManagedLaneTerminalStatus(resolvedStatus),\n\t\t\t\tsummary: `Managed worker lane ${event.laneId} reported terminal status \"${resolvedStatus}\".`,\n\t\t\t\tchangedFiles: event.changedFiles ?? [],\n\t\t\t\t...(usageReportId ? { usageReportId } : {}),\n\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis.warn(\n\t\t\t\t`Rejected terminal report for managed worker ${event.laneId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst review = reviewManagedLaneChangedFiles({\n\t\t\tchangedFiles: claim.changedFiles,\n\t\t\tenvelope: this.deps.getCapabilityEnvelope() ?? {},\n\t\t\tcwd: this.deps.getCwd(),\n\t\t});\n\t\tclaim = normalizeWorkerClaimForHost({\n\t\t\t...claim,\n\t\t\tsummary: `${claim.summary}${\n\t\t\t\treview.reviewRequired ? ` Changed files require parent review (${review.reasonCode}).` : \"\"\n\t\t\t}`,\n\t\t\tparentReviewRequired: review.reviewRequired,\n\t\t});\n\t\tlet record: LaneRecord | undefined;\n\t\tlet finalized = false;\n\t\ttry {\n\t\t\t// Accounting must commit before the lifecycle terminal transition. A failed append leaves the\n\t\t\t// fenced attempt active so the same terminal event can retry with this stable report id.\n\t\t\tif (usage && usageReportId) {\n\t\t\t\tthis.deps.addSpawnedUsage?.(usage, { label: \"managed-worker\", reportId: usageReportId });\n\t\t\t}\n\t\t\tif (!this.hasPersistedClaimForAttempt(claim)) this.deps.saveWorkerClaimSnapshot(claim);\n\t\t\tconst terminal = finalizeWorkerClaim(this.lifecycle, {\n\t\t\t\thandle,\n\t\t\t\tclaim,\n\t\t\t\taccepted: resolvedStatus === \"succeeded\" && !review.reviewRequired,\n\t\t\t\tcostUsd: usage?.cost.total,\n\t\t\t\tcwd: this.deps.getCwd(),\n\t\t\t\t...(usage\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tinputTokens: usage.input,\n\t\t\t\t\t\t\toutputTokens: usage.output,\n\t\t\t\t\t\t\ttotalTokens: usage.totalTokens,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\twallClockMs: Math.max(0, Date.now() - Date.parse(attempt.createdAt)),\n\t\t\t\ttoolCalls: 0,\n\t\t\t\treasonCode: normalizeWorkerClaimReasonCode(\n\t\t\t\t\treview.reviewRequired ? `parent_review_required:${review.reasonCode}` : event.reasonCode,\n\t\t\t\t\t`managed_worker_${resolvedStatus}`,\n\t\t\t\t),\n\t\t\t});\n\t\t\trecord = terminal.record;\n\t\t\tfinalized = true;\n\t\t\tif (terminal.notification) this.recordTerminal(record, terminal.notification.notificationId);\n\t\t\tappendLaneRecordSnapshot(this.deps.getSessionManager(), record);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (finalized) {\n\t\t\t\tthis.warn(\n\t\t\t\t\t`Managed worker ${event.laneId} finalized, but terminal projection or handoff failed: ${message}`,\n\t\t\t\t);\n\t\t\t\treturn record;\n\t\t\t}\n\t\t\tthis.warn(`Managed worker ${event.laneId} terminal processing failed and remains retryable: ${message}`);\n\t\t\treturn undefined;\n\t\t} finally {\n\t\t\tif (finalized) this.releaseRegistration(event.laneId);\n\t\t}\n\t\treturn record;\n\t}\n\n\trelease(): void {\n\t\tfor (const deregister of this.deregisterByLane.values()) deregister();\n\t\tthis.deregisterByLane.clear();\n\t}\n\n\tprivate ensureRegistration(laneId: string): void {\n\t\tif (this.deregisterByLane.has(laneId)) return;\n\t\tthis.deregisterByLane.set(laneId, registerInFlightWork(this.deps.getAgentDir(), \"lane\", `tmux:${laneId}`));\n\t}\n\n\tprivate releaseRegistration(laneId: string): void {\n\t\tthis.deregisterByLane.get(laneId)?.();\n\t\tthis.deregisterByLane.delete(laneId);\n\t}\n\n\t/** A replay after a crash between claim append and lifecycle finalization must not duplicate the claim. */\n\tprivate hasPersistedClaimForAttempt(claim: WorkerClaim): boolean {\n\t\tif (!claim.terminalAttemptId) return false;\n\t\tconst latest = getLatestWorkerClaimSnapshot(\n\t\t\tgetActiveSessionBranchEntries(this.deps.getSessionManager()),\n\t\t\tclaim.requestId,\n\t\t);\n\t\treturn latest?.claim.terminalAttemptId === claim.terminalAttemptId;\n\t}\n\n\tprivate compileGrant(\n\t\ttarget: { objectiveId: string; taskId: string; attemptId: string },\n\t\tlaneId: string,\n\t\tdispatch: ManagedLaneDispatch,\n\t): ExecutionGrant {\n\t\tconst compiled = compileManagedProcessExecutionGrant({\n\t\t\ttarget,\n\t\t\tlaneId,\n\t\t\tauthorizationId: dispatch.authorizationId,\n\t\t\trole: \"implementer\",\n\t\t\tallowedTools: dispatch.allowedTools,\n\t\t\twritePaths: dispatch.writePaths,\n\t\t\tcwd: this.deps.getCwd(),\n\t\t\tdeniedPaths: getPrivateLaneDeniedPaths(this.deps.getCwd(), this.deps.getAgentDir()),\n\t\t\tbudget: {\n\t\t\t\tmaxAttempts: 1,\n\t\t\t\tmaxWallClockMs: dispatch.leaseTtlMs,\n\t\t\t\t...(dispatch.maxCostUsd !== undefined ? { maxCostUsd: dispatch.maxCostUsd } : {}),\n\t\t\t},\n\t\t});\n\t\tif (!compiled.ok) {\n\t\t\tthrow new Error(`Managed worker '${laneId}' execution grant was denied: ${compiled.reasonCodes.join(\", \")}`);\n\t\t}\n\t\treturn compiled.grant;\n\t}\n}\n"]}
|
|
@@ -24,9 +24,15 @@ export interface WorkerAgentControlCoordinatorOptions {
|
|
|
24
24
|
abortLane(laneId: string, reasonCode: string): void;
|
|
25
25
|
cancelLane(laneId: string, reasonCode: string): LaneRecord | undefined;
|
|
26
26
|
taskStartHeadroomSkipReason?(agent: AgentBindingContract): string | undefined;
|
|
27
|
-
|
|
27
|
+
waitBlockedByCaller?(callerAgentId: string, targetAgentIds: readonly string[]): readonly string[];
|
|
28
|
+
/** Yield caller-owned scheduler and mutation resources until the returned restorer succeeds. */
|
|
29
|
+
yieldCallerForWait?(callerAgentId: string): () => boolean | undefined;
|
|
28
30
|
warn?(message: string): void;
|
|
29
31
|
}
|
|
32
|
+
export declare function buildWorkerTerminalHandoffContent(args: {
|
|
33
|
+
childAgentId: string;
|
|
34
|
+
record: Pick<LaneRecord, "laneId" | "status" | "reasonCode">;
|
|
35
|
+
}): string;
|
|
30
36
|
/**
|
|
31
37
|
* Sole owner of model-facing logical-agent controls and their durable inboxes.
|
|
32
38
|
*
|
|
@@ -122,6 +128,7 @@ export declare class WorkerAgentControlCoordinator implements WorkerAgentControl
|
|
|
122
128
|
/** Event-driven wait: durable projection plus one shared state notification, never output polling. */
|
|
123
129
|
waitForWorkerAgent(agentId: string, timeoutMs?: number, scope?: WorkerAgentControlScope): Promise<{
|
|
124
130
|
status: WorkerAgentActivity;
|
|
131
|
+
timedOut: boolean;
|
|
125
132
|
}>;
|
|
126
133
|
/** One event-driven wait set with one shared caller-capacity lease; never per-agent promise polling. */
|
|
127
134
|
waitForWorkerAgents(agentIds: readonly string[], mode: WorkerAgentWaitMode, timeoutMs?: number, scope?: WorkerAgentControlScope): ReturnType<WorkerAgentControlPort["waitForWorkerAgents"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-agent-control-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-agent-control-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EACN,KAAK,oBAAoB,EAGzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,kCAAkC,CAAC;AACnG,OAAO,EAEN,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAG/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEN,KAAK,oCAAoC,EACzC,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAG5B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAE5B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAGxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEN,KAAK,kBAAkB,EACvB,uBAAuB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-agent-control-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-agent-control-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,32 @@ import { normalizeWorkerAgentDependencyTaskIds, WorkerAgentMailbox, workerAgentB
|
|
|
5
5
|
import { MAX_WORKER_TRANSCRIPT_PAGE_MESSAGES, WorkerConversationStore, } from "./worker-conversation-store.js";
|
|
6
6
|
import { evaluateReusableWorkerTaskAdmission } from "./worker-fleet-limits.js";
|
|
7
7
|
import { projectWorkerTaskSessionView } from "./worker-task-view.js";
|
|
8
|
+
import { WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE } from "./worker-terminal-handoff-coordinator.js";
|
|
8
9
|
const MAX_BROADCAST_ERROR_CHARS = 512;
|
|
10
|
+
export function buildWorkerTerminalHandoffContent(args) {
|
|
11
|
+
return [
|
|
12
|
+
"Worker terminal handoff",
|
|
13
|
+
`childAgentId=${args.childAgentId}`,
|
|
14
|
+
`laneId=${args.record.laneId}`,
|
|
15
|
+
`status=${args.record.status}`,
|
|
16
|
+
...(args.record.reasonCode ? [`reasonCode=${args.record.reasonCode}`] : []),
|
|
17
|
+
"CAVEMAN MODE - MANDATORY: terminal handoff means worker state was retained. Read the full transcript, verify the claim, then continue or replan within the admitted grant. Do not call this lost state or harness failure.",
|
|
18
|
+
"MANDATORY: read every transcript page before judging this result.",
|
|
19
|
+
`Start with delegate action="transcript" agentId="${args.childAgentId}" cursor=0.`,
|
|
20
|
+
"Entries complete only after pagination ends. omittedMessages means whole entries were left out of that page. While nextCursor exists, call transcript again with cursor=nextCursor. Stop only when nextCursor is absent.",
|
|
21
|
+
...(args.record.reasonCode === "worker_blocked"
|
|
22
|
+
? [
|
|
23
|
+
"worker_blocked means the durable claim has blockers; it does not mean worker state or transcript was lost.",
|
|
24
|
+
]
|
|
25
|
+
: []),
|
|
26
|
+
...(args.record.status === "budget_exhausted"
|
|
27
|
+
? [
|
|
28
|
+
"CAVEMAN MODE - MANDATORY: budget_exhausted means an admitted limit ended work, not harness failure. Terminal reasonCode is authoritative; never replace it with earlier transcript errors. Read evidence, then replan only within remaining authority.",
|
|
29
|
+
]
|
|
30
|
+
: []),
|
|
31
|
+
...(args.record.reasonCode === "completion_error" ? [WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE] : []),
|
|
32
|
+
].join("\n");
|
|
33
|
+
}
|
|
9
34
|
/**
|
|
10
35
|
* Sole owner of model-facing logical-agent controls and their durable inboxes.
|
|
11
36
|
*
|
|
@@ -853,6 +878,7 @@ export class WorkerAgentControlCoordinator {
|
|
|
853
878
|
waitForWorkerAgent(agentId, timeoutMs = 30_000, scope = {}) {
|
|
854
879
|
return this.waitForWorkerAgents([agentId], "all", timeoutMs, scope).then((result) => ({
|
|
855
880
|
status: result.statuses[0]?.status ?? "unknown",
|
|
881
|
+
timedOut: result.timedOut,
|
|
856
882
|
}));
|
|
857
883
|
}
|
|
858
884
|
/** One event-driven wait set with one shared caller-capacity lease; never per-agent promise polling. */
|
|
@@ -862,8 +888,9 @@ export class WorkerAgentControlCoordinator {
|
|
|
862
888
|
throw new TypeError("Worker wait mode must be 'any' or 'all'.");
|
|
863
889
|
const canonicalAgentIds = this.canonicalAgentIdSet(agentIds, "Worker wait");
|
|
864
890
|
const baselineSnapshot = this.options.getLifecycle().getTaskRuntimeSnapshot();
|
|
891
|
+
let callerAgentId;
|
|
865
892
|
if (scope.callerAgentId) {
|
|
866
|
-
|
|
893
|
+
callerAgentId = scope.callerAgentId.trim();
|
|
867
894
|
if (!callerAgentId || !baselineSnapshot.agents[callerAgentId]) {
|
|
868
895
|
throw new Error(`Unknown logical worker agent '${callerAgentId}'.`);
|
|
869
896
|
}
|
|
@@ -905,58 +932,96 @@ export class WorkerAgentControlCoordinator {
|
|
|
905
932
|
});
|
|
906
933
|
if (waitSatisfied(baselineStatuses))
|
|
907
934
|
return Promise.resolve(result(baselineStatuses, false));
|
|
908
|
-
|
|
935
|
+
if (callerAgentId) {
|
|
936
|
+
const activeAgentIds = new Set(baselineStatuses.filter(({ status }) => status === "active").map(({ agentId }) => agentId));
|
|
937
|
+
if (activeAgentIds.has(callerAgentId)) {
|
|
938
|
+
throw new Error(`Worker wait would deadlock: logical worker '${callerAgentId}' cannot wait for itself. Finish the caller task instead.`);
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
return new Promise((resolve, reject) => {
|
|
909
942
|
let settled = false;
|
|
910
|
-
let
|
|
943
|
+
let completionTimedOut;
|
|
944
|
+
let failure;
|
|
945
|
+
let hasFailure = false;
|
|
946
|
+
let yieldInitialized = callerAgentId === undefined;
|
|
947
|
+
let restoreYield;
|
|
911
948
|
let unsubscribeState = () => undefined;
|
|
912
949
|
let timeout;
|
|
913
950
|
const cleanup = () => {
|
|
914
951
|
unsubscribeState();
|
|
915
952
|
if (timeout)
|
|
916
953
|
clearTimeout(timeout);
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
954
|
+
};
|
|
955
|
+
const restoreCaller = () => {
|
|
956
|
+
if (!restoreYield)
|
|
957
|
+
return true;
|
|
958
|
+
const restored = restoreYield();
|
|
959
|
+
if (restored === false)
|
|
960
|
+
return false;
|
|
961
|
+
restoreYield = undefined;
|
|
962
|
+
return true;
|
|
920
963
|
};
|
|
921
964
|
const settle = () => {
|
|
922
|
-
if (settled)
|
|
965
|
+
if (settled || !yieldInitialized)
|
|
923
966
|
return;
|
|
924
967
|
const statuses = currentStatuses();
|
|
925
968
|
recordUpdates(statuses);
|
|
926
|
-
if (!
|
|
927
|
-
|
|
969
|
+
if (!hasFailure && completionTimedOut === undefined) {
|
|
970
|
+
if (!waitSatisfied(statuses))
|
|
971
|
+
return;
|
|
972
|
+
completionTimedOut = false;
|
|
973
|
+
if (timeout) {
|
|
974
|
+
clearTimeout(timeout);
|
|
975
|
+
timeout = undefined;
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
try {
|
|
979
|
+
if (!restoreCaller())
|
|
980
|
+
return;
|
|
981
|
+
}
|
|
982
|
+
catch (error) {
|
|
983
|
+
failure = error;
|
|
984
|
+
hasFailure = true;
|
|
985
|
+
}
|
|
928
986
|
settled = true;
|
|
929
987
|
cleanup();
|
|
930
|
-
|
|
988
|
+
if (hasFailure)
|
|
989
|
+
reject(failure);
|
|
990
|
+
else
|
|
991
|
+
resolve(result(statuses, completionTimedOut ?? false));
|
|
931
992
|
};
|
|
932
993
|
unsubscribeState = this.subscribeStateChanges(settle);
|
|
933
994
|
timeout = setTimeout(() => {
|
|
934
995
|
if (settled)
|
|
935
996
|
return;
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
resolve(result(statuses, true));
|
|
997
|
+
timeout = undefined;
|
|
998
|
+
if (completionTimedOut === undefined)
|
|
999
|
+
completionTimedOut = true;
|
|
1000
|
+
settle();
|
|
941
1001
|
}, boundedTimeoutMs);
|
|
942
1002
|
if (typeof timeout === "object" && "unref" in timeout)
|
|
943
1003
|
timeout.unref();
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
try {
|
|
948
|
-
const yielded = this.options.yieldCapacity(scope.callerAgentId, scope.callerAgentId);
|
|
949
|
-
if (settled)
|
|
950
|
-
yielded();
|
|
951
|
-
else
|
|
952
|
-
releaseYield = yielded;
|
|
1004
|
+
try {
|
|
1005
|
+
if (callerAgentId && this.options.yieldCallerForWait) {
|
|
1006
|
+
restoreYield = this.options.yieldCallerForWait(callerAgentId);
|
|
953
1007
|
}
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
1008
|
+
yieldInitialized = true;
|
|
1009
|
+
if (callerAgentId) {
|
|
1010
|
+
const statuses = currentStatuses();
|
|
1011
|
+
const activeAgentIds = new Set(statuses.filter(({ status }) => status === "active").map(({ agentId }) => agentId));
|
|
1012
|
+
const blockedAgentIdSet = new Set(this.options.waitBlockedByCaller?.(callerAgentId, canonicalAgentIds) ?? []);
|
|
1013
|
+
const blockedAgentIds = canonicalAgentIds.filter((agentId) => activeAgentIds.has(agentId) && blockedAgentIdSet.has(agentId));
|
|
1014
|
+
if (blockedAgentIds.length > 0) {
|
|
1015
|
+
hasFailure = true;
|
|
1016
|
+
failure = new Error(`Worker wait would deadlock: ${blockedAgentIds.join(", ")} ${blockedAgentIds.length === 1 ? "is" : "are"} blocked by the caller's write reservation after caller resources were yielded.`);
|
|
1017
|
+
}
|
|
958
1018
|
}
|
|
959
1019
|
}
|
|
1020
|
+
catch (error) {
|
|
1021
|
+
yieldInitialized = true;
|
|
1022
|
+
hasFailure = true;
|
|
1023
|
+
failure = error;
|
|
1024
|
+
}
|
|
960
1025
|
settle();
|
|
961
1026
|
});
|
|
962
1027
|
}
|
|
@@ -1087,14 +1152,7 @@ export class WorkerAgentControlCoordinator {
|
|
|
1087
1152
|
const parent = this.requireKnownAgent(args.parentAgentId);
|
|
1088
1153
|
const latest = this.latestAgentAttempt(parent);
|
|
1089
1154
|
const active = latest?.status === "queued" || latest?.status === "leased" || latest?.status === "running";
|
|
1090
|
-
const content =
|
|
1091
|
-
"Worker terminal handoff",
|
|
1092
|
-
`childAgentId=${args.childAgentId}`,
|
|
1093
|
-
`laneId=${args.record.laneId}`,
|
|
1094
|
-
`status=${args.record.status}`,
|
|
1095
|
-
...(args.record.reasonCode ? [`reasonCode=${args.record.reasonCode}`] : []),
|
|
1096
|
-
`Transcript: delegate action="transcript" agentId="${args.childAgentId}". Entries complete; omittedMessages marks whole omissions; empty page may continue via nextCursor.`,
|
|
1097
|
-
].join("\n");
|
|
1155
|
+
const content = buildWorkerTerminalHandoffContent(args);
|
|
1098
1156
|
const idempotencyKey = `terminal-handoff:${args.terminalAttemptId}`;
|
|
1099
1157
|
const transcriptInput = {
|
|
1100
1158
|
idempotencyKey,
|