@zq-silk/yui 0.15.6 → 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.
Files changed (282) hide show
  1. package/ARCHITECTURE.md +192 -399
  2. package/README.md +127 -1149
  3. package/dist/agent/adapterCatalog.js +15 -2
  4. package/dist/agent/agent.js +23 -3
  5. package/dist/agent/argumentPolicy.js +7 -1
  6. package/dist/agent/connectionPlan.js +62 -0
  7. package/dist/agent/executionComponents.js +158 -0
  8. package/dist/agent/launchEnvironment.js +31 -3
  9. package/dist/agent/managedRuntimeEnvironment.js +3 -5
  10. package/dist/{turn/turn.js → agentRun/agentRun.js} +166 -109
  11. package/dist/{turn/turnIdentity.js → agentRun/runIdentity.js} +4 -4
  12. package/dist/brief/taskBrief.js +12 -0
  13. package/dist/cli/agentConfigurationPicker.js +13 -0
  14. package/dist/cli/commandCatalog.js +167 -70
  15. package/dist/cli/interactionCandidates.js +5 -5
  16. package/dist/cli/interactionPolicy.js +38 -8
  17. package/dist/cli/invocationRouter.js +1 -1
  18. package/dist/cli/managedDiagnostics.js +28 -0
  19. package/dist/cli/operatorWizard.js +1 -7
  20. package/dist/cli/roleOptionOrder.js +27 -0
  21. package/dist/cli/roleWizard.js +50 -14
  22. package/dist/cli/updateOrchestrator.js +1 -1
  23. package/dist/cli/updatePorts.js +3 -4
  24. package/dist/cli.js +188 -95
  25. package/dist/commands/agentCommands.js +72 -14
  26. package/dist/commands/capabilityCommands.js +57 -0
  27. package/dist/commands/configCommands.js +20 -20
  28. package/dist/commands/deliveryGuardPreflight.js +2 -2
  29. package/dist/commands/executionAuditCommands.js +24 -24
  30. package/dist/commands/globalRoleCommands.js +1 -1
  31. package/dist/commands/grantCommands.js +4 -4
  32. package/dist/commands/operatorCommands.js +1 -7
  33. package/dist/commands/projectCommands.js +4 -4
  34. package/dist/commands/resourcesCommands.js +2 -2
  35. package/dist/commands/roleConfiguration.js +25 -5
  36. package/dist/commands/roleRuntimeGuard.js +4 -5
  37. package/dist/commands/sessionCommands.js +3 -7
  38. package/dist/commands/taskActivationCommands.js +259 -0
  39. package/dist/commands/taskActor.js +28 -49
  40. package/dist/commands/taskCommands.js +1216 -730
  41. package/dist/commands/taskContextCommand.js +39 -583
  42. package/dist/commands/taskExecutionCommands.js +32 -32
  43. package/dist/commands/taskInputCommands.js +40 -104
  44. package/dist/commands/taskIntegrationCommands.js +3 -2
  45. package/dist/commands/taskIntegrationQueueCommands.js +1 -1
  46. package/dist/commands/taskNextActionCommand.js +8 -8
  47. package/dist/commands/taskOverviewCommand.js +33 -45
  48. package/dist/commands/taskRemoteDeliveryCommand.js +2 -2
  49. package/dist/commands/taskRoleRuntimeStatus.js +133 -102
  50. package/dist/commands/telemetryCommands.js +36 -38
  51. package/dist/config/configCatalog.js +4 -4
  52. package/dist/config/yuiConfig.js +8 -8
  53. package/dist/context/contextSnapshot.js +10 -10
  54. package/dist/context/dispatchContext.js +11 -11
  55. package/dist/context/roleSessionContext.js +6 -3
  56. package/dist/context/{turnContextPack.js → runContextPack.js} +146 -81
  57. package/dist/context/{turnInputContract.js → runInputContract.js} +73 -60
  58. package/dist/context/sessionBootstrapManifest.js +21 -2
  59. package/dist/context/sourceRunContext.js +30 -0
  60. package/dist/context/taskContext.js +458 -0
  61. package/dist/context/wakeNotification.js +27 -27
  62. package/dist/controller/agentRuntimeObserver.js +21 -24
  63. package/dist/controller/capabilityBridge.js +77 -0
  64. package/dist/controller/clientRuntime.js +65 -92
  65. package/dist/controller/controller.js +127 -188
  66. package/dist/controller/fileSchedulerStoreAdapter.js +787 -887
  67. package/dist/controller/jobControl.js +54 -85
  68. package/dist/controller/resourceInventory.js +8 -27
  69. package/dist/controller/resourceInventoryLinux.js +12 -13
  70. package/dist/controller/runtime.js +530 -476
  71. package/dist/controller/runtimeEventInbox.js +55 -25
  72. package/dist/controller/runtimeEventProcessor.js +22 -31
  73. package/dist/controller/{runtimeHookTurnFence.js → runtimeHookRunFence.js} +91 -115
  74. package/dist/controller/runtimeLaunchCoordinator.js +80 -426
  75. package/dist/controller/runtimeObservationHook.js +14 -18
  76. package/dist/controller/sessionNotify.js +16 -24
  77. package/dist/controller/sessionOwnerReconciliation.js +168 -50
  78. package/dist/controller/structuredProviderObservation.js +138 -99
  79. package/dist/coordination/workMailbox.js +3 -3
  80. package/dist/coordination/workMailboxQueue.js +36 -33
  81. package/dist/core/boundedRpc.js +8 -1
  82. package/dist/core/controllerClient.js +20 -1
  83. package/dist/core/controllerServer.js +4 -4
  84. package/dist/doctor/doctor.js +13 -2
  85. package/dist/domain/agentResultTransport.js +9 -9
  86. package/dist/execution/codexThreadNaming.js +2 -8
  87. package/dist/execution/executionHealth.js +51 -63
  88. package/dist/execution/reviewMainRun.js +137 -0
  89. package/dist/execution/workItemExecution.js +28 -29
  90. package/dist/execution/workItemExecutionProjection.js +99 -107
  91. package/dist/execution/workItemMainRun.js +141 -0
  92. package/dist/executor/agentAdapter.js +227 -20
  93. package/dist/executor/agentConfigurationCatalog.js +126 -4
  94. package/dist/executor/agentConfigurationProbe.js +162 -4
  95. package/dist/executor/agentExecutor.js +79 -78
  96. package/dist/executor/effectiveLaunch.js +105 -18
  97. package/dist/executor/executorRegistry.js +29 -44
  98. package/dist/executor/fileRoleLaunchPlanner.js +229 -154
  99. package/dist/executor/workspacePreflightClassification.js +16 -16
  100. package/dist/grant/capabilityGrant.js +6 -3
  101. package/dist/input/inputRequest.js +12 -10
  102. package/dist/integration/gitIntegrationService.js +4 -11
  103. package/dist/integration/integrationQueueService.js +4 -4
  104. package/dist/interaction/operatorPresentation.js +1 -1
  105. package/dist/kernel/builtinCapabilities.js +423 -0
  106. package/dist/kernel/capabilityRegistry.js +314 -0
  107. package/dist/kernel/capabilitySchema.js +91 -0
  108. package/dist/kernel/instanceHost.js +18 -1
  109. package/dist/kernel/kernelPorts.js +4 -1
  110. package/dist/lifecycle/canonicalLifecycleEvent.js +44 -49
  111. package/dist/lifecycle/exactRunTerminalization.js +449 -0
  112. package/dist/message/message.js +62 -6
  113. package/dist/message/messageContinuation.js +204 -0
  114. package/dist/observability/executionAudit.js +70 -72
  115. package/dist/observability/faultClassification.js +2 -2
  116. package/dist/observability/orchestrationMetrics.js +8 -8
  117. package/dist/operator/operatorSessionHistory.js +1 -7
  118. package/dist/output/agentConfigurationPresentation.js +8 -3
  119. package/dist/output/agentRunConfigurationPresentation.js +128 -0
  120. package/dist/output/rolePresentation.js +54 -3
  121. package/dist/plugins/pluginChild.js +104 -0
  122. package/dist/plugins/pluginIntent.js +26 -0
  123. package/dist/plugins/pluginInterpreter.js +43 -0
  124. package/dist/plugins/pluginPackage.js +101 -0
  125. package/dist/plugins/pluginProcess.js +112 -0
  126. package/dist/plugins/pluginService.js +380 -0
  127. package/dist/profile/agentProfile.js +1 -1
  128. package/dist/repository/gitWorkspace.js +26 -4
  129. package/dist/repository/project.js +19 -4
  130. package/dist/repository/taskBaseFreshness.js +13 -13
  131. package/dist/repository/taskWorkspaceCoordinator.js +20 -27
  132. package/dist/repository/taskWorkspacePreparer.js +344 -83
  133. package/dist/resources/autoResourceGc.js +3 -3
  134. package/dist/resources/liveReferences.js +3 -3
  135. package/dist/resources/projectResource.js +123 -0
  136. package/dist/resources/projectResourceService.js +421 -0
  137. package/dist/resources/resourceDiscovery.js +6 -6
  138. package/dist/resources/resourceGc.js +1 -1
  139. package/dist/resources/resourceRegistrar.js +1 -1
  140. package/dist/resources/resourceTypes.js +1 -1
  141. package/dist/review/deltaRecheck.js +3 -3
  142. package/dist/review/reviewAcceptance.js +16 -16
  143. package/dist/review/reviewDecision.js +7 -7
  144. package/dist/review/reviewRound.js +21 -20
  145. package/dist/review/reviewerAvailability.js +2 -2
  146. package/dist/role/role.js +51 -7
  147. package/dist/role/taskRoleUpdate.js +30 -0
  148. package/dist/runtime/acpProtocol.js +425 -0
  149. package/dist/runtime/acpSession.js +731 -0
  150. package/dist/runtime/acpSessionConfiguration.js +260 -0
  151. package/dist/runtime/agentDriver.js +30 -11
  152. package/dist/runtime/agentEndpoint.js +278 -0
  153. package/dist/runtime/agentEndpointIdentity.js +86 -0
  154. package/dist/runtime/agentEndpointOwnership.js +239 -0
  155. package/dist/runtime/agentError.js +2 -10
  156. package/dist/runtime/agentHost.js +565 -314
  157. package/dist/runtime/agentRunConfiguration.js +258 -0
  158. package/dist/runtime/builtinAgentDrivers.js +134 -18
  159. package/dist/runtime/builtinAgentErrorMappers.js +55 -3
  160. package/dist/runtime/builtinTranscriptUsage.js +1 -1
  161. package/dist/runtime/claude-process-owner +0 -0
  162. package/dist/runtime/codexAppServerRuntime.js +38 -30
  163. package/dist/runtime/codexInteractiveHost.js +41 -6
  164. package/dist/runtime/continuationManager.js +2 -6
  165. package/dist/runtime/executionEnvironment.js +30 -0
  166. package/dist/runtime/firstProgressAdvisory.js +11 -11
  167. package/dist/runtime/index.js +4 -3
  168. package/dist/runtime/jsonLineChannel.js +109 -0
  169. package/dist/runtime/launchBroker.js +91 -16
  170. package/dist/runtime/launchDiagnostics.js +2 -2
  171. package/dist/runtime/lifecycleReservation.js +10 -18
  172. package/dist/runtime/managedCaller.js +61 -17
  173. package/dist/runtime/nativeSessionControl.js +102 -0
  174. package/dist/runtime/ports.js +6 -21
  175. package/dist/runtime/processExitObservation.js +8 -7
  176. package/dist/runtime/promptEnvelope.js +17 -6
  177. package/dist/runtime/providerContinuation.js +3 -9
  178. package/dist/runtime/providerContinuationReconciliationService.js +4 -13
  179. package/dist/runtime/providerControl.js +2 -7
  180. package/dist/runtime/providerRuntimeIdentity.js +110 -222
  181. package/dist/runtime/providerRuntimeReconciler.js +5 -9
  182. package/dist/runtime/runtimeBinding.js +0 -1
  183. package/dist/runtime/runtimeContinuationProjection.js +4 -7
  184. package/dist/runtime/runtimeDeadlines.js +9 -0
  185. package/dist/runtime/runtimeHealthPolicy.js +1 -1
  186. package/dist/runtime/runtimeObservation.js +29 -65
  187. package/dist/runtime/runtimeProjection.js +43 -51
  188. package/dist/runtime/runtimeSessionCandidate.js +1 -3
  189. package/dist/runtime/sessionLaunchRequest.js +3 -7
  190. package/dist/runtime/sessionOwnerIdentity.js +7 -54
  191. package/dist/runtime/sessionOwnerRegistry.js +22 -17
  192. package/dist/runtime/sessionReconciliation.js +4 -8
  193. package/dist/runtime/sessionTerminationGuard.js +70 -259
  194. package/dist/runtime/sessionTokenMetrics.js +5 -16
  195. package/dist/runtime/structuredProviderHost.js +237 -117
  196. package/dist/runtime/taskRuntimeIsolation.js +39 -122
  197. package/dist/runtime/tmuxAdapters.js +39 -86
  198. package/dist/scheduler/activeRoleRunDelivery.js +354 -0
  199. package/dist/scheduler/leaderWakeupProcessor.js +75 -266
  200. package/dist/scheduler/operatorInputNotificationProcessor.js +1 -1
  201. package/dist/scheduler/ports.js +80 -9
  202. package/dist/scheduler/{roleTurnLiveness.js → roleRunLiveness.js} +26 -30
  203. package/dist/scheduler/{roleTurnStall.js → roleRunStall.js} +128 -139
  204. package/dist/scheduler/taskExecutionProjection.js +120 -124
  205. package/dist/scheduler/taskObservabilityProjection.js +29 -29
  206. package/dist/scheduler/taskWake.js +11 -4
  207. package/dist/scheduler/wakeReason.js +9 -1
  208. package/dist/setup/setupCommand.js +1 -0
  209. package/dist/storage/migrations/agentRunContract.js +159 -0
  210. package/dist/storage/migrations/removeRuntimeGeneration.js +207 -0
  211. package/dist/storage/sqliteSchema.js +431 -5
  212. package/dist/storage/sqliteStore.js +375 -220
  213. package/dist/storage/storageVersions.js +1 -1
  214. package/dist/storage/storeRpc.js +10 -5
  215. package/dist/storage/taskStore.js +13 -11
  216. package/dist/storage/upgrade/upgradeOrchestrator.js +5 -7
  217. package/dist/surface/surfaceContributions.js +102 -0
  218. package/dist/task/completionReadiness.js +32 -6
  219. package/dist/task/deliveryGuard.js +16 -16
  220. package/dist/task/draftPlan.js +72 -12
  221. package/dist/task/nextAction.js +144 -128
  222. package/dist/task/remoteDelivery.js +6 -6
  223. package/dist/task/task.js +184 -18
  224. package/dist/task/taskActivation.js +301 -0
  225. package/dist/task/taskActivationService.js +392 -0
  226. package/dist/task/taskRecordReference.js +5 -4
  227. package/dist/task/taskRecordRetirement.js +1 -1
  228. package/dist/telemetry/sqliteTelemetryStore.js +55 -68
  229. package/dist/telemetry/telemetryConfig.js +14 -14
  230. package/dist/telemetry/telemetryWiring.js +2 -2
  231. package/dist/web/assets/assetManifest.js +2 -0
  232. package/dist/web/assets/client/app.js +120 -20
  233. package/dist/web/assets/client/components.js +87 -54
  234. package/dist/web/assets/client/i18n.js +83 -41
  235. package/dist/web/assets/client/markdown.js +1 -1
  236. package/dist/web/assets/client/taskSurface.js +353 -0
  237. package/dist/web/assets/client/view.js +49 -44
  238. package/dist/web/assets/shell.js +1 -1
  239. package/dist/web/assets/styles/cards.js +22 -4
  240. package/dist/web/controllerWeb.js +60 -0
  241. package/dist/web/webMutation.js +28 -0
  242. package/dist/web/webServer.js +118 -8
  243. package/dist/web/webSnapshot.js +81 -74
  244. package/dist/web/webTaskSurface.js +64 -0
  245. package/dist/workItem/dependencyGate.js +1 -1
  246. package/dist/workItem/workItem.js +80 -48
  247. package/dist/workspace/workItemChangeSetManager.js +16 -9
  248. package/docs/agent-result-consumption.md +94 -0
  249. package/docs/agent-runtime-drivers.md +91 -0
  250. package/docs/architecture/README.md +38 -0
  251. package/docs/architecture/capabilities-and-resources.md +79 -0
  252. package/docs/managed-turn-and-session-runtime.md +222 -0
  253. package/docs/observability/README.md +81 -0
  254. package/docs/plugin-sdk.md +290 -0
  255. package/docs/provider-runtime.md +163 -0
  256. package/docs/release-workflow.md +303 -0
  257. package/docs/roles-and-configuration.md +113 -0
  258. package/docs/sqlite-control-plane-design.md +76 -0
  259. package/docs/task-dag-semantics.md +57 -0
  260. package/docs/task-delivery.md +103 -0
  261. package/docs/task-local-identity.md +6 -6
  262. package/docs/testing/verification-levels.md +86 -0
  263. package/i18n/README.zh-CN.md +98 -739
  264. package/package.json +5 -5
  265. package/skills/yui-leader/SKILL.md +130 -103
  266. package/skills/yui-leader/references/integration.md +39 -0
  267. package/skills/yui-leader/references/replicated-execution.md +42 -0
  268. package/skills/yui-leader/references/task-plugins.md +33 -0
  269. package/skills/yui-operator/SKILL.md +30 -59
  270. package/skills/yui-reviewer/SKILL.md +35 -36
  271. package/skills/yui-runtime/SKILL.md +88 -24
  272. package/skills/yui-runtime/references/publication.md +22 -0
  273. package/skills/yui-runtime/references/recovery.md +64 -0
  274. package/skills/yui-worker/SKILL.md +37 -39
  275. package/dist/cli/roleOptionCatalog.js +0 -68
  276. package/dist/context/sourceTurnContext.js +0 -30
  277. package/dist/execution/reviewMainTurn.js +0 -161
  278. package/dist/execution/workItemMainTurn.js +0 -164
  279. package/dist/lifecycle/exactTurnTerminalization.js +0 -407
  280. package/dist/runtime/preallocatedNativeSession.js +0 -13
  281. package/dist/runtime/runtimeStopReceipt.js +0 -42
  282. package/dist/scheduler/activeRoleTurnDelivery.js +0 -315
@@ -20,7 +20,7 @@ function ownerLabel(owner) {
20
20
  * This is a read-only check: it never mutates Git state, creates Sessions, or
21
21
  * writes recovery records.
22
22
  */
23
- export function classifyWorkspacePreflight(store, task, roleName, activeTurn, inspectPhysical) {
23
+ export function classifyWorkspacePreflight(store, task, roleName, activeRun, inspectPhysical) {
24
24
  const main = store.getTaskWorkspace(task.id);
25
25
  const bindings = task.projectBindings.map(({ projectId, directory }) => ({ projectId, directory }));
26
26
  // 1. Owner validation: the Task main workspace must be a durable,
@@ -41,26 +41,26 @@ export function classifyWorkspacePreflight(store, task, roleName, activeTurn, in
41
41
  actual
42
42
  };
43
43
  }
44
- // 2. Turn snapshot validation: when the active Turn carries a workspace
44
+ // 2. AgentRun snapshot validation: when the active AgentRun carries a workspace
45
45
  // snapshot its launch-stable identity must match the durable
46
46
  // ManagedWorkspace. Audit timestamps may change without changing the
47
- // owner, root, or Project entries authorized for the Turn.
48
- if (activeTurn?.workspace !== undefined) {
49
- const durableRunWorkspace = store.getManagedWorkspace(activeTurn.workspace.owner);
47
+ // owner, root, or Project entries authorized for the AgentRun.
48
+ if (activeRun?.workspace !== undefined) {
49
+ const durableRunWorkspace = store.getManagedWorkspace(activeRun.workspace.owner);
50
50
  if (durableRunWorkspace === null
51
- || !sameManagedWorkspaceIdentity(durableRunWorkspace, activeTurn.workspace)) {
51
+ || !sameManagedWorkspaceIdentity(durableRunWorkspace, activeRun.workspace)) {
52
52
  const diff = [];
53
53
  if (durableRunWorkspace === null) {
54
- diff.push(`durable ManagedWorkspace for owner ${JSON.stringify(activeTurn.workspace.owner)} is missing`);
54
+ diff.push(`durable ManagedWorkspace for owner ${JSON.stringify(activeRun.workspace.owner)} is missing`);
55
55
  }
56
56
  else {
57
- if (durableRunWorkspace.root !== activeTurn.workspace.root) {
58
- diff.push(`root: durable=${durableRunWorkspace.root} run=${activeTurn.workspace.root}`);
57
+ if (durableRunWorkspace.root !== activeRun.workspace.root) {
58
+ diff.push(`root: durable=${durableRunWorkspace.root} run=${activeRun.workspace.root}`);
59
59
  }
60
- if (durableRunWorkspace.entries.length !== activeTurn.workspace.entries.length) {
61
- diff.push(`entries: durable=${durableRunWorkspace.entries.length} run=${activeTurn.workspace.entries.length}`);
60
+ if (durableRunWorkspace.entries.length !== activeRun.workspace.entries.length) {
61
+ diff.push(`entries: durable=${durableRunWorkspace.entries.length} run=${activeRun.workspace.entries.length}`);
62
62
  }
63
- for (const [index, entry] of activeTurn.workspace.entries.entries()) {
63
+ for (const [index, entry] of activeRun.workspace.entries.entries()) {
64
64
  const durableEntry = durableRunWorkspace.entries[index];
65
65
  if (durableEntry === undefined) {
66
66
  diff.push(`entry[${index}] ${entry.projectId}: missing from durable`);
@@ -76,10 +76,10 @@ export function classifyWorkspacePreflight(store, task, roleName, activeTurn, in
76
76
  }
77
77
  return {
78
78
  kind: "workspace-stale",
79
- reason: `Role Turn workspace is not the durable owner: ${task.id}/${roleName}.`,
79
+ reason: `Role AgentRun workspace is not the durable owner: ${task.id}/${roleName}.`,
80
80
  taskId: task.id,
81
81
  roleName,
82
- turnId: activeTurn.id,
82
+ runId: activeRun.id,
83
83
  diff
84
84
  };
85
85
  }
@@ -89,7 +89,7 @@ export function classifyWorkspacePreflight(store, task, roleName, activeTurn, in
89
89
  // from that immutable boundary. A reset/repoint outside the lineage is
90
90
  // physical drift and must fail before Provider launch.
91
91
  if (inspectPhysical !== undefined) {
92
- const effective = activeTurn?.workspace ?? main;
92
+ const effective = activeRun?.workspace ?? main;
93
93
  for (const entry of effective.entries) {
94
94
  const physical = inspectPhysical(entry);
95
95
  if (!physical.recordedBaseIsAncestor) {
@@ -121,7 +121,7 @@ export function formatWorkspacePreflightError(classification) {
121
121
  + "` to inspect the binding, ManagedWorkspace, and physical HEAD.");
122
122
  break;
123
123
  case "workspace-stale":
124
- lines.push(` Turn ${classification.turnId} snapshot differs from the durable ManagedWorkspace:`);
124
+ lines.push(` AgentRun ${classification.runId} snapshot differs from the durable ManagedWorkspace:`);
125
125
  for (const entry of classification.diff) {
126
126
  lines.push(` - ${entry}`);
127
127
  }
@@ -68,8 +68,8 @@ export function grantUseReservations(grant) {
68
68
  }
69
69
  /**
70
70
  * Record one use against the grant, failing closed once the limit is reached.
71
- * The reservation key is appended to the grant's durable reservations so a
72
- * later resume recognizes this exact attempt and avoids a double charge.
71
+ * Supply a reservation key when a later resume must recognize the attempt.
72
+ * Non-resumable calls only advance the counter; historical keys stay intact.
73
73
  */
74
74
  export function recordGrantUse(grant, now, reservationKey) {
75
75
  validateCapabilityGrant(grant);
@@ -79,7 +79,10 @@ export function recordGrantUse(grant, now, reservationKey) {
79
79
  return validateCapabilityGrant({
80
80
  ...grant,
81
81
  usesUsed: grant.usesUsed + 1,
82
- useReservations: Object.freeze([...grantUseReservations(grant), reservationKey]),
82
+ useReservations: Object.freeze([
83
+ ...grantUseReservations(grant),
84
+ ...(reservationKey === undefined ? [] : [reservationKey])
85
+ ]),
83
86
  updatedAt: now.toISOString()
84
87
  });
85
88
  }
@@ -89,12 +89,11 @@ export function validateInputRequest(value) {
89
89
  updatedAt: requireTimestamp(request.updatedAt, "Input request updatedAt")
90
90
  };
91
91
  validateTaskRecordReference({ taskId: base.taskId, localId: base.id }, "inputRequest");
92
- validateTaskRecordReference({
93
- taskId: base.requester.taskId,
94
- localId: base.requester.turnId
95
- }, "turn");
92
+ if (base.requester.runId !== undefined) {
93
+ validateTaskRecordReference({ taskId: base.requester.taskId, localId: base.requester.runId }, "run");
94
+ }
96
95
  for (const reference of base.blockedRefs) {
97
- validateTaskRecordReference({ taskId: reference.taskId, localId: reference.id }, reference.type === "turn" ? "turn" : "workItem");
96
+ validateTaskRecordReference({ taskId: reference.taskId, localId: reference.id }, reference.type === "run" ? "run" : "workItem");
98
97
  }
99
98
  if (base.requester.taskId !== base.taskId
100
99
  || base.blockedRefs.some(({ taskId }) => taskId !== base.taskId)) {
@@ -175,7 +174,7 @@ function normalizeBlockedRefs(value) {
175
174
  const references = value.map((reference) => {
176
175
  const item = record(reference, "Input blocked reference");
177
176
  exact(item, ["type", "taskId", "id"], "Input blocked reference");
178
- if (item.type !== "work-item" && item.type !== "turn") {
177
+ if (item.type !== "work-item" && item.type !== "run") {
179
178
  throw new Error("Input blocked reference type must be work-item or turn.");
180
179
  }
181
180
  return {
@@ -223,16 +222,19 @@ function validateBlockedRefs(value) {
223
222
  }
224
223
  function normalizeRequester(value) {
225
224
  const requester = record(value, "Input requester");
226
- exact(requester, requester.nativeSessionId === undefined
227
- ? ["taskId", "roleName", "agentId", "turnId"]
228
- : ["taskId", "roleName", "agentId", "turnId", "nativeSessionId"], "Input requester");
225
+ exact(requester, ["taskId", "roleName", "agentId",
226
+ ...(requester.runId === undefined ? [] : ["runId"]),
227
+ ...(requester.nativeSessionId === undefined ? [] : ["nativeSessionId"])], "Input requester");
229
228
  if (requester.roleName !== "leader")
230
229
  throw new Error("Input requester must be the Task Leader.");
230
+ if (requester.runId === undefined && requester.nativeSessionId === undefined) {
231
+ throw new Error("Input requester requires an originating Run or native Session.");
232
+ }
231
233
  return {
232
234
  taskId: requireIdentity(requester.taskId, "Input requester Task id"),
233
235
  roleName: "leader",
234
236
  agentId: requireIdentity(requester.agentId, "Input requester Agent id"),
235
- turnId: requireIdentity(requester.turnId, "Input requester Turn id"),
237
+ ...(requester.runId === undefined ? {} : { runId: requireIdentity(requester.runId, "Input requester AgentRun id") }),
236
238
  ...(requester.nativeSessionId === undefined
237
239
  ? {}
238
240
  : { nativeSessionId: requireIdentity(requester.nativeSessionId, "Input requester native session id") })
@@ -549,8 +549,6 @@ export class GitIntegrationService {
549
549
  #runtimePreparation(attempt, workspace) {
550
550
  return this.runtimeIsolation.preflight({
551
551
  workspace,
552
- runtimeGenerationId: integrationRuntimeRuntimeGenerationId(this.home, attempt.id),
553
- generationId: "integration-checks",
554
552
  allowExactActive: true
555
553
  });
556
554
  }
@@ -1083,7 +1081,7 @@ function isNodeCode(error, code) {
1083
1081
  function defaultIntegrationRuntimeIsolation(home, homeId) {
1084
1082
  const controlHome = resolve(home);
1085
1083
  return new FileTaskRuntimeIsolation({
1086
- runtimeRoot: integrationRuntimeRoot(),
1084
+ runtimeRoot: integrationRuntimeRoot(controlHome),
1087
1085
  pathLayout: "compact",
1088
1086
  controlPlane: {
1089
1087
  yuiHome: controlHome,
@@ -1093,15 +1091,10 @@ function defaultIntegrationRuntimeIsolation(home, homeId) {
1093
1091
  }
1094
1092
  });
1095
1093
  }
1096
- function integrationRuntimeRoot() {
1094
+ function integrationRuntimeRoot(home) {
1097
1095
  const uid = typeof process.getuid === "function" ? process.getuid() : 0;
1098
- return join("/tmp", `yi-${uid.toString(36)}`);
1099
- }
1100
- function integrationRuntimeRuntimeGenerationId(home, integrationId) {
1101
- const homeDigest = createHash("sha256")
1102
- .update(resolve(home))
1103
- .digest("hex");
1104
- return `${integrationId}-${homeDigest}`;
1096
+ const homeDigest = createHash("sha256").update(resolve(home)).digest("hex").slice(0, 16);
1097
+ return join("/tmp", `yi-${uid.toString(36)}-${homeDigest}`);
1105
1098
  }
1106
1099
  /**
1107
1100
  * Reuse is enabled only for an immutable installed release. Development
@@ -3,6 +3,7 @@ import { workspaceProjectEntry } from "../worktree/managedWorkspace.js";
3
3
  import { createIntegrationAttempt, recordResolutionDecision, updateIntegrationAttempt } from "./integrationAttempt.js";
4
4
  import { createConvergedIntegrationQueueEntry, createIntegrationQueueEntry, markIntegrationQueueBlocked, markIntegrationQueueCommitted, markIntegrationQueueRequeued, markIntegrationQueueRunning, markIntegrationQueueSuperseded, recordIntegrationQueueAffectedPaths, recordIntegrationQueueAttempt } from "./integrationQueueEntry.js";
5
5
  import { GitIntegrationService } from "./gitIntegrationService.js";
6
+ import { governingWorkItemCandidate } from "../workItem/workItem.js";
6
7
  /**
7
8
  * Producer WorkItem statuses that close the WorkItem lifecycle. A ChangeSet
8
9
  * captured from a WorkItem that reached one of these without ever producing a
@@ -11,8 +12,7 @@ import { GitIntegrationService } from "./gitIntegrationService.js";
11
12
  * Candidate.
12
13
  */
13
14
  const TERMINAL_PRODUCER_STATUSES = new Set([
14
- "completed",
15
- "failed",
15
+ "accepted",
16
16
  "retired"
17
17
  ]);
18
18
  /**
@@ -59,11 +59,11 @@ function assertCurrentCandidateInStore(store, taskId, changeSet) {
59
59
  throw new Error(`ChangeSet producer WorkItem not found: ${changeSet.workItemId}.`);
60
60
  }
61
61
  // A running WorkItem has no current Candidate: a new one is expected.
62
- if (workItem.status === "running") {
62
+ if (workItem.status === "open" && workItem.currentCandidateId === undefined) {
63
63
  throw new Error(`ChangeSet ${changeSet.id} has no current Candidate: `
64
64
  + `WorkItem ${workItem.id} is running.`);
65
65
  }
66
- const latestCandidate = workItem.candidates.at(-1);
66
+ const latestCandidate = governingWorkItemCandidate(workItem);
67
67
  if (latestCandidate !== undefined) {
68
68
  const snapshotHead = candidateHeadCommit(latestCandidate, changeSet.projectId);
69
69
  if (snapshotHead !== undefined && snapshotHead !== changeSet.headCommit) {
@@ -34,7 +34,7 @@ function eventLabel(event) {
34
34
  case "task.completed": return "Task completed";
35
35
  case "task.retired": return "Task retired";
36
36
  case "leader.attention-required": return "Task Leader needs attention";
37
- case "turn.stalled": return "Task Leader stalled";
37
+ case "run.stalled": return "Task Leader stalled";
38
38
  default: return `Task event ${event.type}`;
39
39
  }
40
40
  }