@zq-silk/yui 0.13.9 → 0.14.0

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 (229) hide show
  1. package/ARCHITECTURE.md +69 -428
  2. package/README.md +108 -298
  3. package/dist/agent/managedRuntimeEnvironment.js +2 -2
  4. package/dist/cli/commandCatalog.js +39 -77
  5. package/dist/cli/interactionCandidates.js +4 -4
  6. package/dist/cli/interactionPolicy.js +7 -10
  7. package/dist/cli/invocationRouter.js +1 -1
  8. package/dist/cli/updateCommand.js +6 -27
  9. package/dist/cli/updateOrchestrator.js +63 -484
  10. package/dist/cli/updatePorts.js +15 -333
  11. package/dist/cli/upgradeCommand.js +8 -65
  12. package/dist/cli.js +57 -242
  13. package/dist/commands/configCommands.js +11 -62
  14. package/dist/commands/executionAuditCommands.js +23 -23
  15. package/dist/commands/globalRoleCommands.js +2 -7
  16. package/dist/commands/jobCommands.js +1 -4
  17. package/dist/commands/projectCommands.js +5 -5
  18. package/dist/commands/releaseCommands.js +3 -10
  19. package/dist/commands/resourcesCommands.js +2 -2
  20. package/dist/commands/sessionCommands.js +2 -2
  21. package/dist/commands/taskActor.js +31 -39
  22. package/dist/commands/taskChangeSetCommands.js +5 -12
  23. package/dist/commands/taskCommands.js +464 -1249
  24. package/dist/commands/taskContextCommand.js +35 -36
  25. package/dist/commands/taskExecutionCommands.js +33 -46
  26. package/dist/commands/taskInputCommands.js +20 -42
  27. package/dist/commands/taskNextActionCommand.js +9 -9
  28. package/dist/commands/taskOverviewCommand.js +56 -95
  29. package/dist/commands/taskRoleRuntimeStatus.js +77 -107
  30. package/dist/commands/taskUpstreamCommands.js +3 -3
  31. package/dist/commands/taskWorkspaceCommands.js +7 -79
  32. package/dist/commands/telemetryCommands.js +32 -124
  33. package/dist/commands/workflowCommands.js +3 -3
  34. package/dist/completion/fileCompletionManager.js +1 -1
  35. package/dist/config/configCatalog.js +4 -6
  36. package/dist/config/yuiConfig.js +6 -43
  37. package/dist/context/dispatchContext.js +14 -30
  38. package/dist/context/roleSessionContext.js +2 -2
  39. package/dist/context/sessionBootstrapManifest.js +2 -2
  40. package/dist/context/{runContextPack.js → turnContextPack.js} +58 -73
  41. package/dist/context/turnInputContract.js +204 -0
  42. package/dist/context/wakeNotification.js +2 -2
  43. package/dist/controller/agentRuntimeObserver.js +18 -18
  44. package/dist/controller/clientRuntime.js +13 -20
  45. package/dist/controller/controller.js +89 -116
  46. package/dist/controller/fileSchedulerStoreAdapter.js +511 -742
  47. package/dist/controller/jobControl.js +17 -17
  48. package/dist/controller/resourceInventory.js +6 -6
  49. package/dist/controller/resourceInventoryLinux.js +38 -59
  50. package/dist/controller/resourceInventoryRpc.js +3 -3
  51. package/dist/controller/resourceInventoryWorker.js +1 -1
  52. package/dist/controller/runtime.js +46 -53
  53. package/dist/controller/runtimeEventInbox.js +23 -31
  54. package/dist/controller/runtimeEventProcessor.js +15 -15
  55. package/dist/controller/{runtimeHookRunFence.js → runtimeHookTurnFence.js} +87 -81
  56. package/dist/controller/runtimeLaunchCoordinator.js +3 -3
  57. package/dist/controller/runtimeObservationHook.js +11 -8
  58. package/dist/controller/sessionNotify.js +11 -11
  59. package/dist/controller/structuredProviderObservation.js +89 -16
  60. package/dist/coordination/workMailbox.js +309 -579
  61. package/dist/coordination/workMailboxQueue.js +5 -6
  62. package/dist/core/controllerClient.js +1 -91
  63. package/dist/core/controllerServer.js +3 -6
  64. package/dist/doctor/doctor.js +51 -314
  65. package/dist/execution/candidateConvergence.js +3 -3
  66. package/dist/execution/executionGroup.js +32 -33
  67. package/dist/execution/executionHealth.js +36 -38
  68. package/dist/execution/resourceBroker.js +12 -12
  69. package/dist/executor/agentExecutor.js +30 -265
  70. package/dist/executor/effectiveLaunch.js +9 -19
  71. package/dist/executor/executorRegistry.js +43 -17
  72. package/dist/executor/fileRoleLaunchPlanner.js +56 -56
  73. package/dist/executor/launchPlan.js +3 -3
  74. package/dist/executor/workspacePreflightClassification.js +16 -16
  75. package/dist/grant/capabilityGrant.js +20 -25
  76. package/dist/input/inputRequest.js +12 -12
  77. package/dist/integration/changeSet.js +9 -13
  78. package/dist/integration/changeSetManifest.js +1 -1
  79. package/dist/integration/gitIntegrationService.js +2 -2
  80. package/dist/integration/integrationQueueService.js +5 -21
  81. package/dist/integration/overlapDiagnostics.js +2 -2
  82. package/dist/interaction/operatorPresentation.js +1 -1
  83. package/dist/job/jobRunner.js +1 -1
  84. package/dist/lifecycle/canonicalLifecycleEvent.js +25 -25
  85. package/dist/lifecycle/{exactRunTerminalization.js → exactTurnTerminalization.js} +116 -232
  86. package/dist/message/message.js +6 -6
  87. package/dist/observability/executionAudit.js +74 -86
  88. package/dist/observability/faultClassification.js +7 -24
  89. package/dist/observability/orchestrationMetrics.js +5 -5
  90. package/dist/observability/runtimeIdentity.js +34 -101
  91. package/dist/profile/agentProfile.js +1 -1
  92. package/dist/release/cliHomeReleaseFence.js +3 -3
  93. package/dist/release/releaseWorkflowEngine.js +6 -10
  94. package/dist/release/releaseWorkflowPorts.js +2 -2
  95. package/dist/release/workflowFileLock.js +1 -1
  96. package/dist/repository/checkoutSwap.js +1 -1
  97. package/dist/repository/gitWorkspace.js +0 -13
  98. package/dist/repository/project.js +1 -1
  99. package/dist/repository/projectMaintenanceLock.js +1 -2
  100. package/dist/repository/taskBaseFreshness.js +13 -13
  101. package/dist/repository/taskWorkspaceCoordinator.js +21 -25
  102. package/dist/repository/taskWorkspaceIdentity.js +8 -21
  103. package/dist/repository/taskWorkspacePreparer.js +63 -620
  104. package/dist/resources/autoResourceGc.js +3 -3
  105. package/dist/resources/liveReferences.js +1 -1
  106. package/dist/resources/resourceGc.js +1 -1
  107. package/dist/resources/sqliteResourceRegistry.js +1 -1
  108. package/dist/review/reviewDecision.js +7 -7
  109. package/dist/review/reviewFindingLedger.js +1 -1
  110. package/dist/review/reviewOutcomeClassifier.js +35 -50
  111. package/dist/review/reviewRound.js +14 -25
  112. package/dist/review/reviewerAvailability.js +4 -4
  113. package/dist/review/taskFinalReviewContractResolution.js +41 -0
  114. package/dist/role/role.js +6 -3
  115. package/dist/runtime/agentDriver.js +4 -0
  116. package/dist/runtime/agentHost.js +151 -36
  117. package/dist/runtime/builtinAgentDrivers.js +79 -2
  118. package/dist/runtime/codexAppServerRuntime.js +122 -0
  119. package/dist/runtime/continuationManager.js +3 -5
  120. package/dist/runtime/exactControlPlane.js +17 -42
  121. package/dist/runtime/firstProgressAdvisory.js +1 -1
  122. package/dist/runtime/index.js +2 -2
  123. package/dist/runtime/launchDiagnostics.js +2 -2
  124. package/dist/runtime/lifecycleReservation.js +4 -4
  125. package/dist/runtime/processExitObservation.js +1 -1
  126. package/dist/runtime/processExitOutbox.js +0 -32
  127. package/dist/runtime/promptEnvelope.js +9 -9
  128. package/dist/runtime/providerContinuation.js +2 -2
  129. package/dist/runtime/providerContinuationReconciliationService.js +2 -2
  130. package/dist/runtime/providerRuntimeIdentity.js +76 -24
  131. package/dist/runtime/recentTurnIds.js +38 -0
  132. package/dist/runtime/runtimeContinuationProjection.js +2 -2
  133. package/dist/runtime/runtimeHealthPolicy.js +1 -1
  134. package/dist/runtime/runtimeObservation.js +58 -21
  135. package/dist/runtime/runtimeProjection.js +19 -27
  136. package/dist/runtime/sessionLaunchRequest.js +2 -2
  137. package/dist/runtime/structuredProviderHost.js +177 -12
  138. package/dist/runtime/tmuxAdapters.js +46 -11
  139. package/dist/scheduler/activeRoleTurnDelivery.js +245 -0
  140. package/dist/scheduler/leaderWakeupProcessor.js +147 -445
  141. package/dist/scheduler/operatorEvent.js +4 -6
  142. package/dist/scheduler/resourceQueueProjection.js +71 -0
  143. package/dist/scheduler/{roleRunLiveness.js → roleTurnLiveness.js} +24 -28
  144. package/dist/scheduler/{roleRunStall.js → roleTurnStall.js} +162 -247
  145. package/dist/scheduler/taskExecutionProjection.js +99 -99
  146. package/dist/scheduler/taskObservabilityProjection.js +10 -10
  147. package/dist/scheduler/taskWake.js +4 -4
  148. package/dist/scheduler/wakeReason.js +6 -10
  149. package/dist/scheduler/wakeupQueue.js +0 -9
  150. package/dist/setup/setupCommand.js +2 -2
  151. package/dist/storage/currentTaskStore.js +46 -0
  152. package/dist/storage/persistenceWorker.js +1 -1
  153. package/dist/storage/sqliteSchema.js +81 -485
  154. package/dist/storage/sqliteStore.js +206 -365
  155. package/dist/storage/storageSchema.js +1 -15
  156. package/dist/storage/storageVersions.js +8 -9
  157. package/dist/storage/storeRpc.js +10 -34
  158. package/dist/storage/taskStore.js +63 -3415
  159. package/dist/storage/upgrade/recordVersions.js +55 -149
  160. package/dist/storage/upgrade/upgradeOrchestrator.js +89 -1752
  161. package/dist/task/completionReadiness.js +5 -5
  162. package/dist/task/deliveryGuard.js +10 -10
  163. package/dist/task/nextAction.js +74 -77
  164. package/dist/task/task.js +2 -4
  165. package/dist/task/taskRecordReference.js +3 -3
  166. package/dist/task/taskRecordRetirement.js +1 -1
  167. package/dist/telemetry/sqliteTelemetryStore.js +53 -53
  168. package/dist/telemetry/telemetryConfig.js +14 -14
  169. package/dist/telemetry/telemetryWiring.js +8 -14
  170. package/dist/turn/turn.js +356 -0
  171. package/dist/{run/runIdentity.js → turn/turnIdentity.js} +4 -4
  172. package/dist/verification/gateArtifactStore.js +2 -2
  173. package/dist/web/assets/client/app.js +1 -1
  174. package/dist/web/assets/client/components.js +29 -54
  175. package/dist/web/assets/client/i18n.js +17 -37
  176. package/dist/web/assets/client/view.js +37 -37
  177. package/dist/web/assets/shell.js +1 -1
  178. package/dist/web/assets/styles/cards.js +5 -5
  179. package/dist/web/assets/styles/widgets.js +1 -2
  180. package/dist/web/webSnapshot.js +65 -60
  181. package/dist/workItem/workItem.js +11 -11
  182. package/dist/workspace/workItemChangeSetManager.js +1 -1
  183. package/docs/task-local-identity.md +5 -5
  184. package/i18n/README.zh-CN.md +41 -54
  185. package/package.json +1 -1
  186. package/skills/yui-leader/SKILL.md +85 -83
  187. package/skills/yui-operator/SKILL.md +16 -16
  188. package/skills/yui-reviewer/SKILL.md +10 -10
  189. package/skills/yui-runtime/SKILL.md +17 -18
  190. package/skills/yui-worker/SKILL.md +16 -18
  191. package/dist/context/runContextContract.js +0 -162
  192. package/dist/executor/turnCompletion.js +0 -126
  193. package/dist/review/taskFinalReviewContractEvent.js +0 -1
  194. package/dist/review/taskFinalReviewContractRebind.js +0 -367
  195. package/dist/run/agentRun.js +0 -356
  196. package/dist/run/rejectedYieldAttempt.js +0 -221
  197. package/dist/run/runControlRequest.js +0 -50
  198. package/dist/run/yieldReceipt.js +0 -65
  199. package/dist/runtime/turnCompletion.js +0 -3
  200. package/dist/scheduler/actionability.js +0 -323
  201. package/dist/scheduler/activeRoleRunDelivery.js +0 -868
  202. package/dist/scheduler/activeTaskProgress.js +0 -126
  203. package/dist/storage/compatibleTaskStore.js +0 -248
  204. package/dist/storage/migration/baseline.js +0 -78
  205. package/dist/storage/migration/classifier.js +0 -51
  206. package/dist/storage/migration/compatibleCodec.js +0 -53
  207. package/dist/storage/migration/engine.js +0 -147
  208. package/dist/storage/migration/index.js +0 -33
  209. package/dist/storage/migration/planner.js +0 -154
  210. package/dist/storage/migration/productionRegistry.js +0 -3931
  211. package/dist/storage/migration/registry.js +0 -169
  212. package/dist/storage/migration/report.js +0 -54
  213. package/dist/storage/migration/types.js +0 -31
  214. package/dist/storage/upgrade/homeClassification.js +0 -353
  215. package/dist/storage/upgrade/homeMigrationTarget.js +0 -595
  216. package/dist/storage/upgrade/migrationReceipt.js +0 -67
  217. package/dist/storage/upgrade/offlineUpgradeInventory.js +0 -453
  218. package/dist/storage/upgrade/productionMigrationRegistry.js +0 -6
  219. package/dist/storage/upgrade/pseudoLayoutRepair.js +0 -241
  220. package/dist/storage/upgrade/recordVersionScan.js +0 -176
  221. package/dist/storage/upgrade/sqliteFileSet.js +0 -50
  222. package/dist/storage/upgrade/sqliteMigrationTarget.js +0 -375
  223. package/dist/storage/upgrade/sqliteRecordMigrationTarget.js +0 -305
  224. package/dist/storage/upgrade/sqliteStateMigration.js +0 -918
  225. package/dist/storage/upgrade/switchProgress.js +0 -80
  226. package/dist/storage/upgrade/upgradeReceipt.js +0 -161
  227. package/dist/storage/upgradeCoordination.js +0 -187
  228. package/dist/storage/upgradeFence.js +0 -366
  229. package/dist/telemetry/telemetryCompaction.js +0 -252
@@ -13,7 +13,7 @@ const TERMINAL_STATUSES = [
13
13
  export function createWorkItem(id, taskId, input, now) {
14
14
  const timestamp = now.toISOString();
15
15
  return validateWorkItem({
16
- schemaVersion: 12,
16
+ schemaVersion: 13,
17
17
  id: requireIdentity(id, "Work Item id"),
18
18
  taskId: requireIdentity(taskId, "Task id"),
19
19
  title: requireText(input.title, "Work item title"),
@@ -46,7 +46,7 @@ export function submitWorkItemCandidate(workItem, input, now) {
46
46
  const revision = workItem.revision + 1;
47
47
  const sequence = workItem.candidates.length + 1;
48
48
  const candidate = validateWorkItemCandidate({
49
- schemaVersion: 2,
49
+ schemaVersion: 3,
50
50
  id: `candidate-${sequence}`,
51
51
  taskId: workItem.taskId,
52
52
  workItemId: workItem.id,
@@ -248,8 +248,8 @@ export function recordWorkItemWorkspaceDisposition(workItem, disposition, now) {
248
248
  });
249
249
  }
250
250
  export function validateWorkItem(workItem) {
251
- if (workItem.schemaVersion !== 12)
252
- throw new Error("WorkItem must use schemaVersion 12.");
251
+ if (workItem.schemaVersion !== 13)
252
+ throw new Error("WorkItem must use schemaVersion 13.");
253
253
  validateTaskRecordReference({ taskId: workItem.taskId, localId: workItem.id }, "workItem");
254
254
  requireIdentity(workItem.taskId, "Task id");
255
255
  requireText(workItem.title, "Work item title");
@@ -498,7 +498,7 @@ export function workItemExecutionGroupById(workItem, executionGroupId) {
498
498
  return workItem.executionGroups.find(({ id }) => id === executionGroupId);
499
499
  }
500
500
  /**
501
- * True when a Run failure belongs to the WorkItem's current unresolved Lane.
501
+ * True when a Turn failure belongs to the WorkItem's current unresolved Lane.
502
502
  * Such a failure is Lane-bounded: the WorkItem remains running so the Leader
503
503
  * can reuse completed siblings and retry only this failed attempt.
504
504
  */
@@ -634,8 +634,8 @@ export function validateWorkItemCandidate(candidate) {
634
634
  if (typeof candidate !== "object" || candidate === null) {
635
635
  throw new Error("Work Item candidate is required.");
636
636
  }
637
- if (candidate.schemaVersion !== 2) {
638
- throw new Error("Work Item candidate must use schemaVersion 2.");
637
+ if (candidate.schemaVersion !== 3) {
638
+ throw new Error("Work Item candidate must use schemaVersion 3.");
639
639
  }
640
640
  requireIdentity(candidate.taskId, "Work Item candidate Task id");
641
641
  validateTaskRecordReference({
@@ -656,14 +656,14 @@ export function validateWorkItemCandidate(candidate) {
656
656
  if (typeof candidate.source !== "object" || candidate.source === null) {
657
657
  throw new Error("Work Item candidate source is required.");
658
658
  }
659
- if (candidate.source.type !== "direct" && candidate.source.type !== "run") {
659
+ if (candidate.source.type !== "direct" && candidate.source.type !== "turn") {
660
660
  throw new Error("Work Item candidate source is invalid.");
661
661
  }
662
- if (candidate.source.type === "run") {
662
+ if (candidate.source.type === "turn") {
663
663
  validateTaskRecordReference({
664
664
  taskId: candidate.taskId,
665
- localId: candidate.source.runId
666
- }, "agentRun");
665
+ localId: candidate.source.turnId
666
+ }, "turn");
667
667
  }
668
668
  if ((candidate.executionGroupId === undefined) !== (candidate.executionLaneId === undefined)) {
669
669
  throw new Error("Work Item candidate execution lineage is incomplete.");
@@ -263,7 +263,7 @@ export class WorkItemChangeSetManager {
263
263
  * ReviewRound freezes the candidate it reviewed at `reviewBaseCommit`; when
264
264
  * the captured ChangeSet head is that commit, the round's checks are
265
265
  * durable evidence for it. "completed" alone is not a verdict: the
266
- * reviewer may have yielded with failed checks (requires-repair), so only a
266
+ * reviewer may have completed with failed checks (requires-repair), so only a
267
267
  * round with an explicit positive verdict — at least one passed check and
268
268
  * no failed one — may feed `evidenceRefs`. The link is by
269
269
  * `reviewBaseCommit`, not by `evidenceCommit`: the latter records the exact
@@ -5,7 +5,7 @@ Task owns an independent, monotonically increasing sequence for every record
5
5
  family:
6
6
 
7
7
  - WorkItem
8
- - AgentRun
8
+ - Turn
9
9
  - ReviewRound
10
10
  - ChangeSet
11
11
  - IntegrationAttempt
@@ -22,7 +22,7 @@ advances that aggregate high-water mark under the storage process lock.
22
22
 
23
23
  Candidate identity is narrower: `candidate-N` is a WorkItem-local sequence.
24
24
  Every Candidate stores its `taskId` and `workItemId`, in addition to the source
25
- Run when one exists.
25
+ Turn when one exists.
26
26
 
27
27
  ## Reference contract
28
28
 
@@ -37,13 +37,13 @@ JSON, mailbox, Controller, Hook, receipt, Web, and error paths retain the Task
37
37
  scope. Context-free commands reject a bare local ID instead of searching all
38
38
  Tasks, even if that ID currently happens to be unique.
39
39
 
40
- A managed Task session may use `work-item-1` or `agent-run-1` because its
40
+ A managed Task session may use `work-item-1` or `turn-1` because its
41
41
  `YUI_TASK_ID` is explicit. A command that already receives the Task as another
42
42
  argument may also use a subordinate local ID. Outside those two cases, use the
43
43
  qualified form. Delivery receipts use the same provenance, for example:
44
44
 
45
45
  ```text
46
- agent-run:task-7/agent-run-1
46
+ turn:task-7/turn-1
47
47
  input-request:task-7/input-1
48
48
  ```
49
49
 
@@ -57,6 +57,6 @@ does not match the current schema, keep it untouched for external archival
57
57
  and initialize a fresh home for this runtime.
58
58
 
59
59
  This hard cut keeps Task-local references, Role desired configuration, and
60
- immutable AgentRun/RoleSession effective snapshots under one unambiguous
60
+ immutable Turn/RoleSession effective snapshots under one unambiguous
61
61
  contract. There is no compatibility lookup, conversion command, or
62
62
  intermediate storage format.
@@ -19,12 +19,12 @@ Yui 不把 Agent 的判断固化成确定性的工作流引擎。核心只负责
19
19
  - `WorkItem`:唯一的有界工作单元,保存目标、验收条件、依赖、状态和精简结果。
20
20
  - `WorkerProfile`:可复用且与 provider 无关的行为模板,保存指令、Skill、访问要求及可选 model/effort hint。
21
21
  - `TaskRole`:Task 内可修改的 Worker 实例,可绑定多个 Agent,并分别保存运行配置。
22
- - `AgentRun`:Task Role 的一次受管派发与结果交付。
22
+ - `Turn`:Task Role 的一次受管派发与结果交付。
23
23
  - `ChangeSet`:隔离 WorkItem 当前 HEAD 的不可变 Git 结果。
24
24
  - Integration:候选集成、检查、冲突报告和 Leader 决策。
25
25
 
26
26
  每个 WorkItem 只选择三条路径之一:Leader 直接执行、Leader 在当前
27
- Agent 对话内创建 native subagent,或交给 Task Role AgentRun。Yui
27
+ Agent 对话内创建 native subagent,或交给 Task Role Turn。Yui
28
28
  不提供 subagent 启动命令,也不创建 child Session 记录。
29
29
 
30
30
  内置 Profile:
@@ -90,10 +90,10 @@ export YUI_HOME=/absolute/path/to/yui-home
90
90
  yui setup
91
91
  ```
92
92
 
93
- home 中包含 `schema.json`、权威 `state.json`、Project Catalog、项目知识和 Controller 发现文件。稳定 Project checkout 与受管理 worktree 位于 home 外部的 workspace。运行时存储严格匹配且 fresh-only:不会双读旧 schema,也不会猜测旧 ID。
93
+ home 中包含 `schema.json`、权威 SQLite 数据库 `yui.db`、Project Catalog、项目知识和 Controller 发现文件。稳定 Project checkout 与受管理 worktree 位于 home 外部的 workspace。运行时只接受当前存储契约:不会回退读取 `state.json`、转换旧 schema 或猜测旧 ID。
94
94
 
95
95
  所有 Task-owned 记录族都在各自 Task 内分配单调递增的本地 ID。因此,不同
96
- Task 可以同时拥有 `work-item-1`、`agent-run-1` 或 `input-1`。受管 Task
96
+ Task 可以同时拥有 `work-item-1`、`turn-1` 或 `input-1`。受管 Task
97
97
  session 可由 `YUI_TASK_ID` 提供作用域并使用本地短 ID;Task session 外必须
98
98
  使用 `<task-id>/<local-id>`。Yui 不会拿裸 ID 扫描所有 Task。已经显式接收
99
99
  Task 的命令(例如 `task work create`、`task integration start`)仍使用该
@@ -157,11 +157,11 @@ yui config workflow set review --role reviewer --trigger final
157
157
  每个进入 Leader 验收阶段的结果,都会成为原 WorkItem 上一个明确的候选。
158
158
  当前全局规则对所有新旧 Task 的下一个候选生效,并在候选提交时形成快照;
159
159
  后续 `set`/`clear` 不会改变已经在途的判断。
160
- `always` 会为每个候选启动 ReviewRound,包括 Role yield 的结果和 Leader 直接管理的
160
+ `always` 会为每个候选启动 ReviewRound,包括已结束的 Role Turn 结果和 Leader 直接管理的
161
161
  结果;`leader` 则让候选保持等待验收,由 Leader 直接 accept 或执行
162
162
  `yui task work review <task-id>/<work-item-id>`。因此只要配置了审查规则,Leader
163
163
  管理的候选也不会直接标记为完成。ReviewRound 引用不可变候选,审查
164
- AgentRun 不创建新 WorkItem,也不会递归触发审查。审查以自然语言结果
164
+ Turn 不创建新 WorkItem,也不会递归触发审查。审查以自然语言结果
165
165
  唤醒 Leader;Leader 决定验收、reject 后在原 Role 与原 Session 中修复、
166
166
  再次审查,或通过 InputRequest 询问用户。审查失败会保留为可见证据并
167
167
  唤醒 Leader,但不会取代 Leader 的最终判断。
@@ -169,13 +169,13 @@ AgentRun 不创建新 WorkItem,也不会递归触发审查。审查以自然
169
169
  显式请求 Task 级 Review;不可变 Task contract 也可以强制要求。Task-final Round
170
170
  直接冻结 Task main,不需要虚构 WorkItem/Candidate,因此没有 WorkItem 的小任务也能
171
171
  review。冻结头变化时创建新的语义 Round;同一 Reviewer 的兼容原生 Session 可以在
172
- 稳定 workspace 中继续,而每个 Run 仍严格绑定自己的 Round 和冻结头。旧报告保留为
172
+ 稳定 workspace 中继续,而每个 Turn 仍严格绑定自己的 Round 和冻结头。旧报告保留为
173
173
  证据。Reviewer 按 Project Policy/Knowledge 检查整个 Task,并只报告有直接证据的
174
174
  可达、重要、可行动问题或有限验证缺口。
175
175
  所有候选、ReviewRound 和 Leader 决策都集中在原 WorkItem 下;reject
176
176
  后的下一轮会复用原执行 Role、Session 与 workspace,并追加新候选。
177
177
 
178
- 查看已有 Task 的详细状态时,优先使用 `task context`。它一次聚合 Task、Brief、Active Decision、最近的 Milestone、Role、当前及最近的 WorkItem 与关联 Run、最近的 Message、Open/Resolved InputRequest 和 Event。终端输出会精简历史和长文本;`yui --json task context <task-id>` 会在顶层 `data` 中返回完整记录。
178
+ 查看已有 Task 的详细状态时,优先使用 `task context`。它一次聚合 Task、Brief、Active Decision、最近的 Milestone、Role、当前及最近的 WorkItem 与关联 Turn、最近的 Message、Open/Resolved InputRequest 和 Event。终端输出会精简历史和长文本;`yui --json task context <task-id>` 会在顶层 `data` 中返回完整记录。
179
179
 
180
180
  Task identity 由一个有界交付目标决定,而不是由涉及几个仓库决定。带仓库的
181
181
  Task 可以绑定多个 Project,并为每个 Project 记录独立 base ref:
@@ -215,7 +215,7 @@ yui task project add <task-id> shared-sdk --base main
215
215
  和匹配的 managed workspace 才能授权修改 Project。Role 也可以显式选择
216
216
  `default`,或用 `configured` 保留显式设置的任意 provider 原生权限选项子集。
217
217
 
218
- 写入范围只能扩大,不能缩小。Worker yield 并报告还需要另一个仓库后,
218
+ 写入范围只能扩大,不能缩小。Worker 报告还需要另一个仓库后,
219
219
  Leader 使用完整的“旧范围 + 新范围”更新并重新派发:
220
220
 
221
221
  ```sh
@@ -262,8 +262,8 @@ yui operator enter
262
262
  yui task role reset <task-id> <role> --reason "<该 generation 无法继续的原因>"
263
263
  ```
264
264
 
265
- Yui 从自己的记录中推导当前 Run、Agent、launch、receipt 和 native Session。
266
- 它只失败化该精确 active Run(以及对应 execution WorkItem),把当前 Session
265
+ Yui 从自己的记录中推导当前 Turn、Agent、launch、receipt 和 native Session。
266
+ 它只失败化该精确 active Turn(以及对应 execution WorkItem),把当前 Session
267
267
  保存为 broken history,并要求 Controller 只停止该 Role 拥有的 runtime。该命令
268
268
  不会创建 Candidate、验收工作或完成 Task。cleanup pending 期间,`task role status`
269
269
  和 `task context` 会阻止 fresh launch;已有 message、review 和交付历史都会保留。
@@ -350,38 +350,23 @@ bindings,Leader 无需重新拼接 model、effort 和权限。创建回执与
350
350
  ReviewRound 从冻结 Candidate SHA 创建独立的可写 worktree。只有 exact
351
351
  ReviewRound owner、reviewRoundId、冻结 base 与 workspace 全部匹配时,才获得
352
352
  该 workspace 的写入授权;Skill 仍禁止 push、Integration、Task state、其他
353
- workspace 与真实 YUI_HOME 变更。两种 provider 都必须直接执行当前 Run 的 exact
354
- stdin yield;最终回复本身不是持久交付。review yield 的 stdin 保存 Reviewer
355
- 完整的自由格式 Markdown 或 JSON 报告。如果 JSON 含已知的 `checks` 或
353
+ workspace 与真实 YUI_HOME 变更。Reviewer 以最终 Provider 回复交付当前 Turn,
354
+ Yui 自动保存其完整的自由格式 Markdown 或 JSON 报告。如果 JSON 含已知的 `checks` 或
356
355
  `evidenceCommit` 字段,Yui 会把它们记录为结构化证据,并核验 commit 是否等于
357
- managed Review branch HEAD;未知字段仍保留在完整报告中:
356
+ managed Review branch HEAD;未知字段仍保留在完整报告中。
358
357
 
359
- ```sh
360
- yui task run yield <task-id>/<review-run-id> --summary-file - <<'YUI_SUMMARY'
361
- {"summary":"复现并验证完成","checks":[{"name":"npm test","outcome":"passed","details":"全部通过"}],"evidenceCommit":"<exact-sha>"}
362
- YUI_SUMMARY
363
- ```
364
-
365
- Reviewer 可以修改文件并在不提交的情况下 yield;脏字节不会被推断为 evidence。
358
+ Reviewer 可以修改文件并在不提交的情况下结束 Turn;脏字节不会被推断为 evidence。
366
359
  该 Round 仍会精确终结且不产生 Candidate/ChangeSet,workspace 会为 Leader 判断而
367
360
  保留,cleanup 会在其重新变干净前拒绝删除。
368
361
 
369
- Worker 显式交付当前 Run:
370
-
371
- ```sh
372
- yui task run yield <task-id>/<run-id> --summary-file - <<'YUI_SUMMARY'
373
- 导出器已完成,聚焦测试通过
374
- YUI_SUMMARY
375
- ```
376
-
377
- yield 会结束 AgentRun,将 WorkItem 提交给 Leader 审查,并追加结果消息和
362
+ Provider 原生 Turn 终态会结束 Turn,Yui 保存最终回复,将 WorkItem 提交给 Leader 审查,并追加结果消息和
378
363
  唤醒 Leader;它不会验收或完成 WorkItem。Leader 不会自唤醒,pending wake
379
364
  会保留到 Leader 空闲。
380
365
 
381
366
  如果无法最终判断结果,交接必须明确标为 `uncertain`、`incomplete`、
382
367
  `blocked` 或 `requiring Leader judgment`,并提交最完整且真实的身份、已执行
383
368
  动作、仓库状态、检查与错误、最后生命周期边界、未完成工作、待决事项、风险、
384
- 置信度及有界下一选项。yield 只记录不可变的 Run/Candidate 或 Review 证据;
369
+ 置信度及有界下一选项。Turn 结果只是不可变的执行证据;
385
370
  它不表示验收、WorkItem 完成、ChangeSet capture、Integration 或 Task 完成。
386
371
 
387
372
  对于有界工作,Leader 可以直接执行 roleless WorkItem,也可以在当前
@@ -412,9 +397,9 @@ yui task work update <task-id>/<work-item-id> done \
412
397
 
413
398
  无法确认实际 model/effort 时使用 `inherited` 或 `unknown`,不能猜测。
414
399
  需要独立 provider、凭据、交互 Session 或持久生命周期时,使用 Task Role
415
- AgentRun。
400
+ Turn。
416
401
 
417
- 隔离 Task Role 的结果按“Worker yield → Leader 语义审查 → capture 当前
402
+ 隔离 Task Role 的结果按“Provider Turn 终态记录 Turn 结果 → Leader 语义审查 → capture 当前
418
403
  HEAD → candidate 集成和检查 → Leader accept”的顺序处理。审查不通过时,
419
404
  Leader reject 并在同一 workspace 重新派发。相同 HEAD 重复 capture 复用
420
405
  原 ChangeSet;修复后的新 HEAD 形成新候选:
@@ -440,7 +425,7 @@ yui task integration resolve <task-id>/<integration-id> \
440
425
  yui task integration continue <task-id>/<integration-id>
441
426
  ```
442
427
 
443
- Worker yield 不等于 WorkItem 完成。Leader 审查结果、验证和最新
428
+ Worker Turn 完成不等于 WorkItem 完成。Leader 审查结果、验证和最新
444
429
  ChangeSet 集成后再显式验收:
445
430
 
446
431
  ```sh
@@ -456,21 +441,21 @@ worktree 与检查日志会作为证据保留,直到显式清理。
456
441
 
457
442
  ```sh
458
443
  yui task message retire <task>/<message> --reason "已被新指令替代"
459
- yui task run retire <task>/<agent-run> --reason "无效的启动记录"
444
+ yui task turn retire <task>/<turn> --reason "无效的启动记录"
460
445
  ```
461
446
 
462
447
  这些命令追加 retirement 事实;列表和审计仍保留并标记原 Message、
463
- WorkItem 或 AgentRun,而受管 Run 上下文、actionability、恢复、Review 证据和调度会忽略
464
- 它。活动 AgentRun 会先按精确身份终态化;重复废弃是幂等操作。Message 与
465
- AgentRun 只能由用户或全局 Operator 废弃,WorkItem 也可由所属 Task Leader
448
+ WorkItem 或 Turn,而受管 Turn 上下文、actionability、恢复、Review 证据和调度会忽略
449
+ 它。活动 Turn 会先按精确身份终态化;重复废弃是幂等操作。Message 与
450
+ Turn 只能由用户或全局 Operator 废弃,WorkItem 也可由所属 Task Leader
466
451
  废弃。
467
452
 
468
- 长期 Task 不依赖 native transcript 恢复。Leader 每次 yield 前更新 Brief
453
+ 长期 Task 不依赖 native transcript 恢复。Leader 每次结束 Provider Turn 前更新 Brief
469
454
  的 focus 和 leader summary;材料性技术选择写入 Decision;可独立汇报的
470
455
  阶段成果写入 Milestone;只有跨 Task 稳定有效的信息才进入 Project
471
456
  Knowledge。
472
457
 
473
- 当活动 Leader Run 必须获得用户决定才能继续时,可以创建持久 InputRequest,并 yield 当前 Run:
458
+ 当活动 Leader Turn 必须获得用户决定才能继续时,可以创建持久 InputRequest,然后以真实的 blocked 结果结束当前 Provider Turn:
474
459
 
475
460
  ```sh
476
461
  yui task input request <task-id> --question "默认使用哪种格式?" \
@@ -496,7 +481,7 @@ yui task input request <task-id> --question "默认使用哪种格式?" \
496
481
  yui task context <task-id>
497
482
  ```
498
483
 
499
- 需要查看单个集合或记录时,再使用 `task work`、`task message`、`task run` 和 Task Knowledge 下的细分命令。
484
+ 需要查看单个集合或记录时,再使用 `task work`、`task message`、`task turn` 和 Task Knowledge 下的细分命令。
500
485
 
501
486
  完成目标后,可将 Task 标记为 completed,从而停止自动唤醒,同时保留 session 和 Task main worktree:
502
487
 
@@ -506,7 +491,7 @@ yui task reopen <task-id>
506
491
  ```
507
492
 
508
493
  completed Task 在显式 reopen 前会拒绝消息、派发、进入 session、重试和迟到的
509
- yield。终态 WorkItem、Review、Integration 与 Lane worktree 会作为非阻塞的
494
+ Turn 交付。终态 WorkItem、Review、Integration 与 Lane worktree 会作为非阻塞的
510
495
  completion advisory 返回,但必须在 archive 前处理。每个隔离 WorkItem worktree
511
496
  仍需显式标记 integrated 或 abandoned,清理时也会删除其受管分支;archive 还必须
512
497
  通过 `--integrated` 或 `--abandon` 明确 Task main 的处理结果,之后才会停止
@@ -518,9 +503,11 @@ Task 生命周期的交互选择只展示有效来源状态:activate 只展示
518
503
 
519
504
  受管理的 Provider 会话仍然是普通用户会话。Yui 只添加对应的 Role Skill 与 Session Manifest 指针,并通过 Provider 原生结构化协议提交 Task 工作;Yui 不接管完整对话历史。受管理输入绝不会作为终端按键、粘贴文本或启动 argv 发送。Codex 在只转发字节的 `app-server proxy` 上完成 App Server WebSocket 握手,接入与 Desktop 相同的共享 daemon;原生 thread 可在 Desktop 中直接查看和操作。Task execution stop 只终止 Yui 的 Agent Host、WebSocket 与 proxy,保留共享 daemon、原生 thread、Task、WorkItem、代码与持久消息;start 创建新的 attachment。Claude 继续使用独立的持久 stream-json 进程,并以精确回放的 user message 作为接收确认。
520
505
 
521
- Run、Conversation、Activation 与 Turn 是四个独立身份。Conversation 可以跨多个 Run 和客户端连接;Activation 只代表 Yui 当前的连接,而不是对 Provider thread 的独占所有权;Turn 在写入前先持久化。写入超时或结果不明确会进入 `delivery-unknown`,不会自动重发。Codex 已存在的原生 active Turn 只会让 Yui 暂时等待,不会导致 Yui Run 失败;Claude 等独立进程 Provider 继续通过 Yui 的 view/takeover 边界进行人工控制。
506
+ Session、Activation 与 Turn 是独立身份。Session 可以跨多个 Turn 和客户端连接;Activation 只代表 Yui 当前的连接,而不是对 Provider thread 的独占所有权。每次 Provider 执行对应一个持久 Turn;写入超时或结果不明确会进入 `delivery-unknown`,不会自动重发。Codex 已存在的 active Turn 只会让 Yui 暂时等待,不会导致待投递 Turn 失败;Claude 等独立进程 Provider 继续通过 Yui 的 view/takeover 边界进行人工控制。
507
+
508
+ Turn 是 Role 是否有工作正在执行的唯一持久调度状态,记录可见输入、来源/渠道与最终回复,不复制思考过程或工具调用。所有经 Yui 中转或生成的输入统一使用 `source: yui`;Provider UI 中直接输入的消息使用 `source: user`;显式 Goal continuation 使用 `source: provider`。Provider Turn 终态后 Yui 完成该 Turn,再把下一个 Turn 投递到同一 Session。TaskRole 本身只保存身份和期望启动配置,不再保存可写的运行状态;CLI/Web 展示的 Role 状态由活动 Turn 派生,并叠加 Session/Driver 生命周期事实用于诊断。
522
509
 
523
- AgentRun 是 Role 是否有工作正在执行的唯一持久调度状态。Conversation 不再维护另一份 current Run;Provider Turn 中的 Run id 只用于关联接收回执和终态事件。TaskRole 本身只保存身份和期望启动配置,不再保存可写的运行状态;CLI/Web 展示的 Role 状态由活动 AgentRun 派生,并叠加 Session/Driver 生命周期事实用于诊断。Agent 可以在 Provider 终态到达前声明旧 Run 的语义结果,下一批 mailbox 工作也可以先形成新的 AgentRun;Agent Host 仍会串行等待旧 Turn 结束,再投递被保留的新输入,不回滚事件,也不把旧 Conversation 强行换绑到新 Run。
510
+ Goal 是 Session 级显式 Provider 事实,可以跨越多个 Turn。Codex 通过 Goal API/事件提供,Claude 通过 `active_goal` 提供;Yui 不用静默等待来猜测 Goal 是否完成。Turn 结束不等于 Goal、WorkItem 或 Task 完成,只有 Leader 更新 WorkItem 与 Task 的持久语义。
524
511
 
525
512
  Task Role 使用以下显式入口:
526
513
 
@@ -534,7 +521,7 @@ yui task role release <task-id> <role>
534
521
 
535
522
  Codex Role thread 可在 Desktop 中直接查看和操作;Desktop 已有 active Turn 时,Yui 只保留待投递工作并等待,不会失败或重复投递。`view`、`takeover`、`release` 继续作为 Claude 等独立进程 Provider 的人工控制入口。Yui 不写入全局 Hook/config,也不启动、重启或停止共享 daemon;Codex CLI/daemon 故障由 Task 生命周期之外修复。Global Operator 与 global Role 继续使用原生交互式 CLI,不属于受管理 Task Provider 协议。
536
523
 
537
- 当新版本需要离线迁移 Home 时,应等待当前 Turn/Run 完成,然后从普通 shell
524
+ 当新版本需要离线迁移 Home 时,应等待当前 Turn 完成,然后从普通 shell
538
525
  执行 `yui session stop --all`,再重新执行 `yui update`。停止命令会先整体预检:
539
526
  只要仍有 Session 正在运行或存在未决生命周期工作,就不会开始停止;全部空闲
540
527
  时会先阻止新的 Leader 调度,停止并等待 Controller 完全退出,重新检查运行时
@@ -554,7 +541,7 @@ binding,用于不同账号、模型、profile 或环境来源;这些 binding
554
541
  更新时才进入现有配置选择流程。
555
542
 
556
543
  受管理 Session 的普通工作流命令统一调用 PATH 中的 `yui`。Session Manifest
557
- 与持久 Role/Run fence 负责身份认证,CLI 和 Controller 只需满足协议与存储兼容,
544
+ 与持久 Role/Turn fence 负责身份认证,CLI 和 Controller 只需满足协议与存储兼容,
558
545
  不会因包版本升级而使现有 Session 失效;Provider 回调等内部路径仍保留精确围栏。
559
546
  `update` 会幂等刷新旧版本生成的精确 CLI wrapper,使历史 Session 也转为这一
560
547
  兼容入口。
@@ -568,7 +555,7 @@ state、receipt 与 pane fence。Yui 不会解析 prompt glyph、进度文本、
568
555
  或其他 Agent 终端输出来推断 ready 或 success。`captureRole()` 只用于显式的人类
569
556
  transcript 查看,不具备生命周期权威。
570
557
 
571
- 稳定的 Role 上下文不会创建额外的 bootstrap Turn。Task execution Run 按角色使用通用 Leader 或 Worker Skill,review Run 则按持久 Run purpose 使用通用 Reviewer Skill;Provider 可以通过安全的追加式原生上下文通道携带 Skill,也可以在普通 Task 投递中指向它。这些都只是 Yui 自己拥有的可移植编排规则。Project Skills 始终是 Project 中正常版本化的文件,由 Agent 通过自身项目机制发现、选择并按需加载;Yui 不扫描、不解析、不复制,也不注入 Project Skills。Managed Codex 保留用户原有的 developer instructions;普通 Task 消息会携带精简的 Session Manifest 绝对路径,Manifest 再指向对应的 Yui Role Skill,供 Codex 按需读取。model、effort、permission、workspace 与 shell 设置作为共享 daemon 上的线程级 `thread/start` 或 `thread/resume` 配置传入;Codex 原生 config profile 因无法隔离到单条共享 thread 而被拒绝,Yui 不修改底层 Codex 配置文件。App Server 原生通知是 Managed Codex 线程的生命周期权威;Yui 不为它安装 Hook,也不占用 `notify`。交互式 Codex Session 仍可使用 Yui 的结构化 `notify` callback,Doctor 会报告最终生效的配置冲突。`skills.config` 只负责启停已发现 Skill,Yui 不会误用它。Claude 从 Yui 管理的私有 `0600` context 文件读取同一份 Yui Role Skill 内容,不再把大段或敏感文本放进 argv;重试和 resume 会复用按 purpose 区分的稳定路径。非 Operator 的 global Role 保持中性,不会注入 Task 编排 Skill。因此 Operator 会停在空白的原生 composer,用户输入仍是第一条 user message;Leader wake、Worker 和 Reviewer Run assignment 仍是邮箱投递的真实工作消息。
558
+ 稳定的 Role 上下文不会创建额外的 bootstrap Turn。Task execution Turn 按角色使用通用 Leader 或 Worker Skill,review Turn 则按持久 Turn purpose 使用通用 Reviewer Skill;Provider 可以通过安全的追加式原生上下文通道携带 Skill,也可以在普通 Task 投递中指向它。这些都只是 Yui 自己拥有的可移植编排规则。Project Skills 始终是 Project 中正常版本化的文件,由 Agent 通过自身项目机制发现、选择并按需加载;Yui 不扫描、不解析、不复制,也不注入 Project Skills。Managed Codex 保留用户原有的 developer instructions;普通 Task 消息会携带精简的 Session Manifest 绝对路径,Manifest 再指向对应的 Yui Role Skill,供 Codex 按需读取。model、effort、permission、workspace 与 shell 设置作为共享 daemon 上的线程级 `thread/start` 或 `thread/resume` 配置传入;Codex 原生 config profile 因无法隔离到单条共享 thread 而被拒绝,Yui 不修改底层 Codex 配置文件。App Server 原生通知是 Managed Codex 线程的生命周期权威;Yui 不为它安装 Hook,也不占用 `notify`。交互式 Codex Session 仍可使用 Yui 的结构化 `notify` callback,Doctor 会报告最终生效的配置冲突。`skills.config` 只负责启停已发现 Skill,Yui 不会误用它。Claude 从 Yui 管理的私有 `0600` context 文件读取同一份 Yui Role Skill 内容,不再把大段或敏感文本放进 argv;重试和 resume 会复用按 purpose 区分的稳定路径。非 Operator 的 global Role 保持中性,不会注入 Task 编排 Skill。因此 Operator 会停在空白的原生 composer,用户输入仍是第一条 user message;Leader wake、Worker 和 Reviewer Turn assignment 仍是邮箱投递的真实工作消息。
572
559
 
573
560
  ## Controller 与失败处理
574
561
 
@@ -587,23 +574,23 @@ Controller;如果之前没有运行,会在完成后启动。只读命令和
587
574
  `upgrade --dry-run` 不会启动 Controller。`update` 只有在新二进制健康检查通过后,
588
575
  才会替换或启动 Controller。
589
576
 
590
- 恢复 reconciliation 默认每 120 秒执行一次。普通持久状态变化只会将 Task、Role 或 Operator key 放入队列并立即返回;固定 100ms 窗口内到达的 key 会合并触发一次不重叠的定向处理。Operator 呈现使用独立 lane,不会被 Task 的 Git/worktree 操作阻塞;周期 Git/worktree 处理只覆盖仍有持久 Task mailbox 工作的 Task,活动 Role 的存活检查合并为一次 tmux inventory。来自 Provider 原生事件或受支持 Hook 的结构化 Agent Driver observation,会经过精确 fence 后进入持久 runtime inbox。终态 Turn observation 会给合法的 yield、输入请求或完成动作保留 2 秒竞争窗口;到期后才关闭被 Agent 遗忘的活动 Role Run。持久 WorkMailbox 会冻结当前 processing 批次,期间的新事件合并到下一 pending 批次;失败会释放当前批次供恢复。推荐输入与 pending Turn 共用最近 deadline 选择器,不依赖恢复扫描间隔;显式 `task reconcile` 仍会立即请求恢复扫描。保留的闭环为:
577
+ 恢复 reconciliation 默认每 120 秒执行一次。普通持久状态变化只会将 Task、Role 或 Operator key 放入队列并立即返回;固定 100ms 窗口内到达的 key 会合并触发一次不重叠的定向处理。Operator 呈现使用独立 lane,不会被 Task 的 Git/worktree 操作阻塞;周期 Git/worktree 处理只覆盖仍有持久 Task mailbox 工作的 Task,活动 Role 的存活检查合并为一次 tmux inventory。来自 Provider 原生事件或受支持 Hook 的结构化 Agent Driver observation,会经过精确 fence 后进入持久 runtime inbox。终态 Turn observation 会原子记录精确的 Turn 结果。持久 WorkMailbox 会冻结当前 processing 批次,期间的新事件合并到下一 pending 批次;失败会释放当前批次供恢复。推荐输入与 pending Turn 共用最近 deadline 选择器,不依赖恢复扫描间隔;显式 `task reconcile` 仍会立即请求恢复扫描。保留的闭环为:
591
578
 
592
579
  1. 准备 active Project Task 的主 worktree;
593
580
  2. 停止 archived Task 的 tmux,并只清理干净 worktree;
594
- 3. 投递排队的 Worker Run;
581
+ 3. 投递排队的 Worker Turn;
595
582
  4. 检测活动 Role 进程退出;
596
583
  5. Leader 空闲时投递 pending wake。
597
584
 
598
- 自动输入只通过 tmux 投递。每次处理只做一次非阻塞的 process-state readiness 检查;启动阶段忙碌时通过小型有界 mailbox timer 重试,后续忙碌会话通常由 Codex turn-complete 事件再次唤醒。pane 内 receipt 可避免 Controller 重试时重复输入同一 Run。
585
+ 自动输入只通过 tmux 投递。每次处理只做一次非阻塞的 process-state readiness 检查;启动阶段忙碌时通过小型有界 mailbox timer 重试,后续忙碌会话通常由 Codex turn-complete 事件再次唤醒。pane 内 receipt 可避免 Controller 重试时重复输入同一 Turn。
599
586
 
600
- Role 在 yield 前退出时,Controller 会失败对应 Run 和 running WorkItem,并唤醒 Leader。恢复状态通过精简的 Jobs 兼容视图呈现:
587
+ Role 进程未产生 Provider 终态结果就退出时,Controller 会失败对应 Turn 和 running WorkItem,并唤醒 Leader。恢复状态通过精简的 Jobs 视图呈现:
601
588
 
602
589
  ```sh
603
590
  yui jobs list
604
591
  yui jobs retry leader-recovery:<task-id>
605
592
  yui task reconcile <task-id>
606
- yui task run retry <failed-run-id>
593
+ yui task turn retry <failed-turn-id>
607
594
  ```
608
595
 
609
596
  `jobs` 不是旧版通用队列,只展示持久 Leader wake 和 Leader recovery failure。
@@ -619,7 +606,7 @@ yui web
619
606
  # Yui web control room: http://127.0.0.1:4173
620
607
  ```
621
608
 
622
- 可用 `--port <port>` 或 `--host 127.0.0.1|::1|localhost` 修改监听参数。Yui 会拒绝非 loopback host,因为控制室会展示 Task、Role、WorkItem、Run、Message、Decision、Milestone 和 InputRequest 等信息。服务启动时生成的随机 token 会嵌入页面,并保护写操作和终端连接。
609
+ 可用 `--port <port>` 或 `--host 127.0.0.1|::1|localhost` 修改监听参数。Yui 会拒绝非 loopback host,因为控制室会展示 Task、Role、WorkItem、Turn、Message、Decision、Milestone 和 InputRequest 等信息。服务启动时生成的随机 token 会嵌入页面,并保护写操作和终端连接。
623
610
 
624
611
  Web 端可以通过与 Terminal 相同的持久化 CLI 路径回答 open InputRequest,也可以通过原生 xterm 客户端 attach 到已有 Operator、Leader 或 Worker tmux pane。关闭浏览器终端只会 detach 当前 tmux client,Agent 进程与对话继续保留;Web 不复制 transcript,也不维护第二套会话状态。
625
612
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zq-silk/yui",
3
- "version": "0.13.9",
3
+ "version": "0.14.0",
4
4
  "description": "Local control plane for long-running native agent CLI sessions backed by tmux.",
5
5
  "license": "MIT",
6
6
  "private": false,