@zq-silk/yui 0.15.7 → 0.15.8
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/ARCHITECTURE.md +192 -399
- package/README.md +127 -1149
- package/dist/agent/adapterCatalog.js +15 -2
- package/dist/agent/agent.js +23 -3
- package/dist/agent/argumentPolicy.js +7 -1
- package/dist/agent/connectionPlan.js +62 -0
- package/dist/agent/executionComponents.js +158 -0
- package/dist/agent/launchEnvironment.js +31 -3
- package/dist/agent/managedRuntimeEnvironment.js +3 -5
- package/dist/{turn/turn.js → agentRun/agentRun.js} +166 -109
- package/dist/{turn/turnIdentity.js → agentRun/runIdentity.js} +4 -4
- package/dist/brief/taskBrief.js +12 -0
- package/dist/cli/agentConfigurationPicker.js +13 -0
- package/dist/cli/commandCatalog.js +157 -70
- package/dist/cli/interactionCandidates.js +5 -5
- package/dist/cli/interactionPolicy.js +38 -8
- package/dist/cli/invocationRouter.js +1 -1
- package/dist/cli/managedDiagnostics.js +28 -0
- package/dist/cli/operatorWizard.js +1 -7
- package/dist/cli/roleOptionOrder.js +27 -0
- package/dist/cli/roleWizard.js +50 -14
- package/dist/cli/updateOrchestrator.js +1 -1
- package/dist/cli/updatePorts.js +3 -4
- package/dist/cli.js +178 -95
- package/dist/commands/agentCommands.js +72 -14
- package/dist/commands/capabilityCommands.js +9 -6
- package/dist/commands/configCommands.js +20 -20
- package/dist/commands/deliveryGuardPreflight.js +2 -2
- package/dist/commands/executionAuditCommands.js +24 -24
- package/dist/commands/globalRoleCommands.js +1 -1
- package/dist/commands/grantCommands.js +4 -4
- package/dist/commands/operatorCommands.js +1 -7
- package/dist/commands/projectCommands.js +4 -4
- package/dist/commands/resourcesCommands.js +2 -2
- package/dist/commands/roleConfiguration.js +25 -5
- package/dist/commands/roleRuntimeGuard.js +4 -5
- package/dist/commands/sessionCommands.js +3 -7
- package/dist/commands/taskActivationCommands.js +259 -0
- package/dist/commands/taskActor.js +28 -49
- package/dist/commands/taskCommands.js +1188 -710
- package/dist/commands/taskContextCommand.js +39 -583
- package/dist/commands/taskExecutionCommands.js +32 -32
- package/dist/commands/taskInputCommands.js +40 -104
- package/dist/commands/taskIntegrationCommands.js +3 -2
- package/dist/commands/taskIntegrationQueueCommands.js +1 -1
- package/dist/commands/taskNextActionCommand.js +8 -8
- package/dist/commands/taskOverviewCommand.js +33 -45
- package/dist/commands/taskRemoteDeliveryCommand.js +2 -2
- package/dist/commands/taskRoleRuntimeStatus.js +133 -102
- package/dist/commands/telemetryCommands.js +36 -38
- package/dist/config/configCatalog.js +4 -4
- package/dist/config/yuiConfig.js +8 -8
- package/dist/context/contextSnapshot.js +10 -10
- package/dist/context/dispatchContext.js +11 -11
- package/dist/context/roleSessionContext.js +6 -3
- package/dist/context/{turnContextPack.js → runContextPack.js} +146 -81
- package/dist/context/{turnInputContract.js → runInputContract.js} +73 -60
- package/dist/context/sessionBootstrapManifest.js +21 -2
- package/dist/context/sourceRunContext.js +30 -0
- package/dist/context/taskContext.js +458 -0
- package/dist/context/wakeNotification.js +27 -27
- package/dist/controller/agentRuntimeObserver.js +21 -24
- package/dist/controller/capabilityBridge.js +17 -6
- package/dist/controller/clientRuntime.js +65 -92
- package/dist/controller/controller.js +114 -188
- package/dist/controller/fileSchedulerStoreAdapter.js +787 -887
- package/dist/controller/jobControl.js +54 -85
- package/dist/controller/resourceInventory.js +8 -27
- package/dist/controller/resourceInventoryLinux.js +12 -13
- package/dist/controller/runtime.js +529 -479
- package/dist/controller/runtimeEventInbox.js +55 -25
- package/dist/controller/runtimeEventProcessor.js +22 -31
- package/dist/controller/{runtimeHookTurnFence.js → runtimeHookRunFence.js} +91 -115
- package/dist/controller/runtimeLaunchCoordinator.js +80 -426
- package/dist/controller/runtimeObservationHook.js +14 -18
- package/dist/controller/sessionNotify.js +16 -24
- package/dist/controller/sessionOwnerReconciliation.js +168 -50
- package/dist/controller/structuredProviderObservation.js +138 -99
- package/dist/coordination/workMailbox.js +3 -3
- package/dist/coordination/workMailboxQueue.js +36 -33
- package/dist/core/boundedRpc.js +8 -1
- package/dist/core/controllerClient.js +20 -1
- package/dist/core/controllerServer.js +4 -4
- package/dist/doctor/doctor.js +13 -2
- package/dist/domain/agentResultTransport.js +9 -9
- package/dist/execution/codexThreadNaming.js +2 -8
- package/dist/execution/executionHealth.js +51 -63
- package/dist/execution/reviewMainRun.js +137 -0
- package/dist/execution/workItemExecution.js +28 -29
- package/dist/execution/workItemExecutionProjection.js +99 -107
- package/dist/execution/workItemMainRun.js +141 -0
- package/dist/executor/agentAdapter.js +227 -20
- package/dist/executor/agentConfigurationCatalog.js +126 -4
- package/dist/executor/agentConfigurationProbe.js +162 -4
- package/dist/executor/agentExecutor.js +79 -78
- package/dist/executor/effectiveLaunch.js +105 -18
- package/dist/executor/executorRegistry.js +29 -44
- package/dist/executor/fileRoleLaunchPlanner.js +229 -154
- package/dist/executor/workspacePreflightClassification.js +16 -16
- package/dist/grant/capabilityGrant.js +6 -3
- package/dist/input/inputRequest.js +12 -10
- package/dist/integration/gitIntegrationService.js +4 -11
- package/dist/integration/integrationQueueService.js +4 -4
- package/dist/interaction/operatorPresentation.js +1 -1
- package/dist/kernel/builtinCapabilities.js +247 -12
- package/dist/kernel/capabilityRegistry.js +64 -18
- package/dist/kernel/instanceHost.js +12 -1
- package/dist/kernel/kernelPorts.js +2 -2
- package/dist/lifecycle/canonicalLifecycleEvent.js +44 -49
- package/dist/lifecycle/exactRunTerminalization.js +449 -0
- package/dist/message/message.js +62 -6
- package/dist/message/messageContinuation.js +204 -0
- package/dist/observability/executionAudit.js +70 -72
- package/dist/observability/faultClassification.js +2 -2
- package/dist/observability/orchestrationMetrics.js +8 -8
- package/dist/operator/operatorSessionHistory.js +1 -7
- package/dist/output/agentConfigurationPresentation.js +8 -3
- package/dist/output/agentRunConfigurationPresentation.js +128 -0
- package/dist/output/rolePresentation.js +54 -3
- package/dist/plugins/pluginChild.js +104 -0
- package/dist/plugins/pluginIntent.js +26 -0
- package/dist/plugins/pluginInterpreter.js +43 -0
- package/dist/plugins/pluginPackage.js +101 -0
- package/dist/plugins/pluginProcess.js +112 -0
- package/dist/plugins/pluginService.js +380 -0
- package/dist/profile/agentProfile.js +1 -1
- package/dist/repository/gitWorkspace.js +26 -4
- package/dist/repository/project.js +19 -4
- package/dist/repository/taskBaseFreshness.js +13 -13
- package/dist/repository/taskWorkspaceCoordinator.js +20 -27
- package/dist/repository/taskWorkspacePreparer.js +344 -83
- package/dist/resources/autoResourceGc.js +3 -3
- package/dist/resources/liveReferences.js +3 -3
- package/dist/resources/projectResource.js +123 -0
- package/dist/resources/projectResourceService.js +421 -0
- package/dist/resources/resourceDiscovery.js +6 -6
- package/dist/resources/resourceGc.js +1 -1
- package/dist/resources/resourceRegistrar.js +1 -1
- package/dist/resources/resourceTypes.js +1 -1
- package/dist/review/deltaRecheck.js +3 -3
- package/dist/review/reviewAcceptance.js +16 -16
- package/dist/review/reviewDecision.js +7 -7
- package/dist/review/reviewRound.js +21 -20
- package/dist/review/reviewerAvailability.js +2 -2
- package/dist/role/role.js +51 -7
- package/dist/role/taskRoleUpdate.js +30 -0
- package/dist/runtime/acpProtocol.js +425 -0
- package/dist/runtime/acpSession.js +731 -0
- package/dist/runtime/acpSessionConfiguration.js +260 -0
- package/dist/runtime/agentDriver.js +30 -11
- package/dist/runtime/agentEndpoint.js +278 -0
- package/dist/runtime/agentEndpointIdentity.js +86 -0
- package/dist/runtime/agentEndpointOwnership.js +239 -0
- package/dist/runtime/agentError.js +2 -10
- package/dist/runtime/agentHost.js +565 -314
- package/dist/runtime/agentRunConfiguration.js +258 -0
- package/dist/runtime/builtinAgentDrivers.js +134 -18
- package/dist/runtime/builtinAgentErrorMappers.js +55 -3
- package/dist/runtime/builtinTranscriptUsage.js +1 -1
- package/dist/runtime/claude-process-owner +0 -0
- package/dist/runtime/codexAppServerRuntime.js +38 -30
- package/dist/runtime/codexInteractiveHost.js +41 -6
- package/dist/runtime/continuationManager.js +2 -6
- package/dist/runtime/executionEnvironment.js +30 -0
- package/dist/runtime/firstProgressAdvisory.js +11 -11
- package/dist/runtime/index.js +4 -3
- package/dist/runtime/jsonLineChannel.js +109 -0
- package/dist/runtime/launchBroker.js +91 -16
- package/dist/runtime/launchDiagnostics.js +2 -2
- package/dist/runtime/lifecycleReservation.js +10 -18
- package/dist/runtime/managedCaller.js +61 -17
- package/dist/runtime/nativeSessionControl.js +102 -0
- package/dist/runtime/ports.js +6 -21
- package/dist/runtime/processExitObservation.js +8 -7
- package/dist/runtime/promptEnvelope.js +17 -6
- package/dist/runtime/providerContinuation.js +3 -9
- package/dist/runtime/providerContinuationReconciliationService.js +4 -13
- package/dist/runtime/providerControl.js +2 -7
- package/dist/runtime/providerRuntimeIdentity.js +110 -222
- package/dist/runtime/providerRuntimeReconciler.js +5 -9
- package/dist/runtime/runtimeBinding.js +0 -1
- package/dist/runtime/runtimeContinuationProjection.js +4 -7
- package/dist/runtime/runtimeDeadlines.js +9 -0
- package/dist/runtime/runtimeHealthPolicy.js +1 -1
- package/dist/runtime/runtimeObservation.js +29 -65
- package/dist/runtime/runtimeProjection.js +43 -51
- package/dist/runtime/runtimeSessionCandidate.js +1 -3
- package/dist/runtime/sessionLaunchRequest.js +3 -7
- package/dist/runtime/sessionOwnerIdentity.js +7 -54
- package/dist/runtime/sessionOwnerRegistry.js +22 -17
- package/dist/runtime/sessionReconciliation.js +4 -8
- package/dist/runtime/sessionTerminationGuard.js +70 -259
- package/dist/runtime/sessionTokenMetrics.js +5 -16
- package/dist/runtime/structuredProviderHost.js +237 -117
- package/dist/runtime/taskRuntimeIsolation.js +39 -122
- package/dist/runtime/tmuxAdapters.js +39 -86
- package/dist/scheduler/activeRoleRunDelivery.js +354 -0
- package/dist/scheduler/leaderWakeupProcessor.js +75 -266
- package/dist/scheduler/operatorInputNotificationProcessor.js +1 -1
- package/dist/scheduler/ports.js +80 -9
- package/dist/scheduler/{roleTurnLiveness.js → roleRunLiveness.js} +26 -30
- package/dist/scheduler/{roleTurnStall.js → roleRunStall.js} +128 -139
- package/dist/scheduler/taskExecutionProjection.js +120 -124
- package/dist/scheduler/taskObservabilityProjection.js +29 -29
- package/dist/scheduler/taskWake.js +11 -4
- package/dist/scheduler/wakeReason.js +9 -1
- package/dist/setup/setupCommand.js +1 -0
- package/dist/storage/migrations/agentRunContract.js +159 -0
- package/dist/storage/migrations/removeRuntimeGeneration.js +207 -0
- package/dist/storage/sqliteSchema.js +431 -5
- package/dist/storage/sqliteStore.js +375 -220
- package/dist/storage/storageVersions.js +1 -1
- package/dist/storage/storeRpc.js +10 -5
- package/dist/storage/taskStore.js +13 -11
- package/dist/storage/upgrade/upgradeOrchestrator.js +5 -7
- package/dist/surface/surfaceContributions.js +102 -0
- package/dist/task/completionReadiness.js +32 -6
- package/dist/task/deliveryGuard.js +16 -16
- package/dist/task/draftPlan.js +72 -12
- package/dist/task/nextAction.js +144 -128
- package/dist/task/remoteDelivery.js +6 -6
- package/dist/task/task.js +184 -18
- package/dist/task/taskActivation.js +301 -0
- package/dist/task/taskActivationService.js +392 -0
- package/dist/task/taskRecordReference.js +5 -4
- package/dist/task/taskRecordRetirement.js +1 -1
- package/dist/telemetry/sqliteTelemetryStore.js +55 -68
- package/dist/telemetry/telemetryConfig.js +14 -14
- package/dist/telemetry/telemetryWiring.js +2 -2
- package/dist/web/assets/assetManifest.js +2 -0
- package/dist/web/assets/client/app.js +120 -20
- package/dist/web/assets/client/components.js +87 -54
- package/dist/web/assets/client/i18n.js +83 -41
- package/dist/web/assets/client/markdown.js +1 -1
- package/dist/web/assets/client/taskSurface.js +353 -0
- package/dist/web/assets/client/view.js +49 -44
- package/dist/web/assets/shell.js +1 -1
- package/dist/web/assets/styles/cards.js +22 -4
- package/dist/web/controllerWeb.js +60 -0
- package/dist/web/webMutation.js +28 -0
- package/dist/web/webServer.js +118 -8
- package/dist/web/webSnapshot.js +81 -74
- package/dist/web/webTaskSurface.js +64 -0
- package/dist/workItem/dependencyGate.js +1 -1
- package/dist/workItem/workItem.js +80 -48
- package/dist/workspace/workItemChangeSetManager.js +16 -9
- package/docs/agent-result-consumption.md +94 -0
- package/docs/agent-runtime-drivers.md +91 -0
- package/docs/architecture/README.md +38 -0
- package/docs/architecture/capabilities-and-resources.md +79 -0
- package/docs/managed-turn-and-session-runtime.md +222 -0
- package/docs/observability/README.md +81 -0
- package/docs/plugin-sdk.md +290 -0
- package/docs/provider-runtime.md +163 -0
- package/docs/release-workflow.md +303 -0
- package/docs/roles-and-configuration.md +113 -0
- package/docs/sqlite-control-plane-design.md +76 -0
- package/docs/task-dag-semantics.md +57 -0
- package/docs/task-delivery.md +103 -0
- package/docs/task-local-identity.md +6 -6
- package/docs/testing/verification-levels.md +86 -0
- package/i18n/README.zh-CN.md +98 -739
- package/package.json +2 -2
- package/skills/yui-leader/SKILL.md +130 -103
- package/skills/yui-leader/references/integration.md +39 -0
- package/skills/yui-leader/references/replicated-execution.md +42 -0
- package/skills/yui-leader/references/task-plugins.md +33 -0
- package/skills/yui-operator/SKILL.md +30 -59
- package/skills/yui-reviewer/SKILL.md +35 -36
- package/skills/yui-runtime/SKILL.md +88 -24
- package/skills/yui-runtime/references/publication.md +22 -0
- package/skills/yui-runtime/references/recovery.md +64 -0
- package/skills/yui-worker/SKILL.md +37 -39
- package/dist/cli/roleOptionCatalog.js +0 -68
- package/dist/context/sourceTurnContext.js +0 -30
- package/dist/execution/reviewMainTurn.js +0 -161
- package/dist/execution/workItemMainTurn.js +0 -164
- package/dist/lifecycle/exactTurnTerminalization.js +0 -407
- package/dist/runtime/preallocatedNativeSession.js +0 -13
- package/dist/runtime/runtimeStopReceipt.js +0 -42
- package/dist/scheduler/activeRoleTurnDelivery.js +0 -315
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { isDeepStrictEqual } from "node:util";
|
|
2
|
-
import { retireConfirmedAbsentInactiveTaskRolePlaceholders } from "../executor/agentExecutor.js";
|
|
3
2
|
import { hasRuntimeLifecycleWork, runtimeLifecycleTarget } from "../runtime/lifecycleReservation.js";
|
|
4
3
|
import { managedWorkspaceKey } from "../worktree/managedWorkspace.js";
|
|
5
4
|
import { acquireProjectMaintenanceLocks } from "./projectMaintenanceLock.js";
|
|
@@ -23,10 +22,10 @@ export class TaskWorkspaceCoordinator {
|
|
|
23
22
|
if (item === null)
|
|
24
23
|
throw new Error(`Work item not found: ${taskId}/${workItemId}.`);
|
|
25
24
|
const assignee = this.#workItemIsolationAssignee(item);
|
|
26
|
-
const
|
|
25
|
+
const activeDevelopRun = this.store.listRuns(item.taskId)
|
|
27
26
|
.find((run) => run.status === "active" && run.workItemId === item.id);
|
|
28
|
-
if (
|
|
29
|
-
throw new Error(`Work Item already has an active Develop
|
|
27
|
+
if (activeDevelopRun !== undefined) {
|
|
28
|
+
throw new Error(`Work Item already has an active Develop AgentRun: ${activeDevelopRun.id}.`);
|
|
30
29
|
}
|
|
31
30
|
const task = this.store.getTask(item.taskId);
|
|
32
31
|
const taskProjectIds = task.projectBindings.map(({ projectId }) => projectId);
|
|
@@ -155,7 +154,7 @@ export class TaskWorkspaceCoordinator {
|
|
|
155
154
|
const task = this.store.getTask(taskId);
|
|
156
155
|
if (task === null)
|
|
157
156
|
throw new Error(`Task not found: ${taskId}.`);
|
|
158
|
-
if (task.status !== "completed" && task.status !== "
|
|
157
|
+
if (task.status !== "completed" && task.status !== "cancelled") {
|
|
159
158
|
throw new Error(`Task must be completed or retired before archive cleanup: ${task.id}.`);
|
|
160
159
|
}
|
|
161
160
|
const managedWorkspaces = [...this.store.listManagedWorkspaces(task.id)]
|
|
@@ -181,7 +180,7 @@ export class TaskWorkspaceCoordinator {
|
|
|
181
180
|
const item = this.store.getWorkItem(task.id, workItemId);
|
|
182
181
|
if (item === null)
|
|
183
182
|
throw new Error(`Work item not found: ${task.id}/${workItemId}.`);
|
|
184
|
-
if (item.status !== "
|
|
183
|
+
if (item.status !== "accepted" && item.status !== "retired") {
|
|
185
184
|
throw new Error(`Work item must be completed or retired before archive cleanup: ${item.id}.`);
|
|
186
185
|
}
|
|
187
186
|
return item;
|
|
@@ -276,9 +275,9 @@ export class TaskWorkspaceCoordinator {
|
|
|
276
275
|
};
|
|
277
276
|
}
|
|
278
277
|
const activeRole = this.store.listRoles(taskId)
|
|
279
|
-
.find((role) => this.store.
|
|
278
|
+
.find((role) => this.store.getActiveRun(taskId, role.name) !== null);
|
|
280
279
|
if (activeRole !== undefined) {
|
|
281
|
-
throw new WorkspaceCleanupBlockedError("active-turn", `role:${task.id}/${activeRole.name}`, true, `Task Role still has an active
|
|
280
|
+
throw new WorkspaceCleanupBlockedError("active-turn", `role:${task.id}/${activeRole.name}`, true, `Task Role still has an active AgentRun: ${task.id}/${activeRole.name}.`);
|
|
282
281
|
}
|
|
283
282
|
const roleNames = this.store.listRoles(taskId).map(({ name }) => name);
|
|
284
283
|
await this.#stopLiveRoles(taskId, roleNames);
|
|
@@ -302,7 +301,7 @@ export class TaskWorkspaceCoordinator {
|
|
|
302
301
|
}
|
|
303
302
|
for (const item of workItems) {
|
|
304
303
|
this.#assertTaskArchiveLifecycle(task);
|
|
305
|
-
await this.preparer.cleanupWorkItemWorkspace(task.id, item.id, item.status === "
|
|
304
|
+
await this.preparer.cleanupWorkItemWorkspace(task.id, item.id, item.status === "accepted" ? disposition : "abandoned");
|
|
306
305
|
}
|
|
307
306
|
this.#assertTaskArchiveLifecycle(task);
|
|
308
307
|
return this.preparer.cleanupTaskForArchive(taskId);
|
|
@@ -353,10 +352,10 @@ export class TaskWorkspaceCoordinator {
|
|
|
353
352
|
}
|
|
354
353
|
}
|
|
355
354
|
#assertWorkItemRuntimeQuiescent(item) {
|
|
356
|
-
const
|
|
355
|
+
const activeRun = this.store.listRuns(item.taskId)
|
|
357
356
|
.find((run) => run.status === "active" && run.workItemId === item.id);
|
|
358
|
-
if (
|
|
359
|
-
throw new WorkspaceCleanupBlockedError("active-turn", `work-item:${item.taskId}/${item.id}`, true, `Work item still has an active
|
|
357
|
+
if (activeRun !== undefined) {
|
|
358
|
+
throw new WorkspaceCleanupBlockedError("active-turn", `work-item:${item.taskId}/${item.id}`, true, `Work item still has an active AgentRun: ${item.taskId}/${item.id}.`);
|
|
360
359
|
}
|
|
361
360
|
}
|
|
362
361
|
/**
|
|
@@ -396,10 +395,10 @@ export class TaskWorkspaceCoordinator {
|
|
|
396
395
|
}
|
|
397
396
|
async #stopLiveRoles(taskId, roleNames) {
|
|
398
397
|
const targets = [...new Set(roleNames)];
|
|
399
|
-
const
|
|
398
|
+
const getActiveRun = this.store.getActiveRun?.bind(this.store);
|
|
400
399
|
for (const roleName of targets) {
|
|
401
|
-
if (
|
|
402
|
-
throw new Error(`Role has an active
|
|
400
|
+
if (getActiveRun !== undefined && getActiveRun(taskId, roleName) !== null) {
|
|
401
|
+
throw new Error(`Role has an active AgentRun: ${taskId}/${roleName}.`);
|
|
403
402
|
}
|
|
404
403
|
if (this.store.getWorkMailbox !== undefined && hasRuntimeLifecycleWork(this.store.getWorkMailbox(runtimeLifecycleTarget({ scope: "task", taskId, roleName })))) {
|
|
405
404
|
throw new Error(`Role has unsettled runtime lifecycle state: ${taskId}/${roleName}.`);
|
|
@@ -421,7 +420,7 @@ export class TaskWorkspaceCoordinator {
|
|
|
421
420
|
// The aggregate-16 dormant Claude placeholder is the sole exception to
|
|
422
421
|
// strict workspace-session retirement. The synchronous pane inspection is
|
|
423
422
|
// performed while holding the Task store transaction so a normal launch
|
|
424
|
-
// cannot reserve a
|
|
423
|
+
// cannot reserve a AgentRun/Session between absence proof and terminalization.
|
|
425
424
|
if (inspect === undefined || this.store.transaction === undefined)
|
|
426
425
|
return;
|
|
427
426
|
this.store.transaction((tx) => {
|
|
@@ -430,18 +429,12 @@ export class TaskWorkspaceCoordinator {
|
|
|
430
429
|
if (panes.some((pane) => pane.roleName === roleName && !pane.dead)) {
|
|
431
430
|
throw new Error(`Task Role native pane must stop before workspace migration: ${roleName}.`);
|
|
432
431
|
}
|
|
433
|
-
if (tx.
|
|
434
|
-
throw new Error(`Role has an active
|
|
432
|
+
if (tx.getActiveRun(taskId, roleName) !== null) {
|
|
433
|
+
throw new Error(`Role has an active AgentRun: ${taskId}/${roleName}.`);
|
|
435
434
|
}
|
|
436
435
|
if (tx.getWorkMailbox !== undefined && hasRuntimeLifecycleWork(tx.getWorkMailbox(runtimeLifecycleTarget({ scope: "task", taskId, roleName })))) {
|
|
437
436
|
throw new Error(`Role has unsettled runtime lifecycle state: ${taskId}/${roleName}.`);
|
|
438
437
|
}
|
|
439
|
-
const sessions = tx.getTaskRoleSessionSet(taskId, roleName);
|
|
440
|
-
if (sessions === null)
|
|
441
|
-
continue;
|
|
442
|
-
const retired = retireConfirmedAbsentInactiveTaskRolePlaceholders(sessions, this.preparer.now());
|
|
443
|
-
if (retired !== sessions)
|
|
444
|
-
tx.saveTaskRoleSessionSet(retired);
|
|
445
438
|
}
|
|
446
439
|
});
|
|
447
440
|
}
|
|
@@ -460,8 +453,8 @@ export class TaskWorkspaceCoordinator {
|
|
|
460
453
|
if (isTerminalWorkItem(item)) {
|
|
461
454
|
throw new Error(`Work item is already terminal: ${item.id}.`);
|
|
462
455
|
}
|
|
463
|
-
if (item.assignee !== undefined && this.store.
|
|
464
|
-
throw new Error(`Role has an active
|
|
456
|
+
if (item.assignee !== undefined && this.store.getActiveRun(task.id, item.assignee) !== null) {
|
|
457
|
+
throw new Error(`Role has an active AgentRun: ${task.id}/${item.assignee}.`);
|
|
465
458
|
}
|
|
466
459
|
if (item.assignee !== undefined && this.store.getRole(task.id, item.assignee) === null) {
|
|
467
460
|
throw new Error(`Role not found: ${task.id}/${item.assignee}.`);
|
|
@@ -483,5 +476,5 @@ function sameProjectScope(workspace, taskProjectIds, writeProjectIds) {
|
|
|
483
476
|
&& actual.every((projectId, index) => projectId === expected[index]);
|
|
484
477
|
}
|
|
485
478
|
function isTerminalWorkItem(item) {
|
|
486
|
-
return ["
|
|
479
|
+
return ["accepted", "retired"].includes(item.status);
|
|
487
480
|
}
|