@zq-silk/yui 0.15.11 → 0.16.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 (280) hide show
  1. package/ARCHITECTURE.md +11 -6
  2. package/ARCHITECTURE.zh-CN.md +8 -4
  3. package/README.md +13 -5
  4. package/dist/agentRun/agentRun.js +3 -0
  5. package/dist/artifacts/artifactCommitLock.js +16 -55
  6. package/dist/artifacts/taskArtifactRepository.js +3 -3
  7. package/dist/cli/agentConfigurationPicker.js +1 -1
  8. package/dist/cli/commandCatalog.js +92 -48
  9. package/dist/cli/completion.js +18 -18
  10. package/dist/cli/completionWizard.js +1 -1
  11. package/dist/cli/dynamicCompletion.js +1 -1
  12. package/dist/cli/interactionPolicy.js +11 -3
  13. package/dist/cli/invocationAuthority.js +64 -0
  14. package/dist/cli/managedDiagnostics.js +2 -2
  15. package/dist/cli/parseRepeatable.js +35 -0
  16. package/dist/cli/updatePorts.js +26 -5
  17. package/dist/cli.js +1303 -1235
  18. package/dist/commands/agentCommands.js +4 -4
  19. package/dist/commands/capabilityCommands.js +1 -1
  20. package/dist/commands/configCommands.js +6 -57
  21. package/dist/commands/configOverview.js +2 -2
  22. package/dist/commands/durableJobCommands.js +12 -6
  23. package/dist/commands/executionAuditCommands.js +10 -0
  24. package/dist/commands/globalRoleCommands.js +78 -29
  25. package/dist/commands/grantCommands.js +0 -3
  26. package/dist/commands/jobCommands.js +1 -4
  27. package/dist/commands/operatorCommands.js +3 -3
  28. package/dist/commands/projectCommands.js +45 -25
  29. package/dist/commands/resourcesCommands.js +10 -40
  30. package/dist/commands/roleConfiguration.js +2 -6
  31. package/dist/commands/taskActivationCommands.js +4 -8
  32. package/dist/commands/taskAgentCapabilities.js +9 -0
  33. package/dist/commands/taskCommandSupport.js +155 -0
  34. package/dist/commands/taskCommandTypes.js +1 -0
  35. package/dist/commands/taskCommands.js +355 -732
  36. package/dist/commands/taskCompletionGate.js +1 -1
  37. package/dist/commands/taskExecutionCommands.js +1 -1
  38. package/dist/commands/taskFactCommands.js +325 -0
  39. package/dist/commands/taskInputCommands.js +12 -42
  40. package/dist/commands/taskIntegrationCommands.js +20 -58
  41. package/dist/commands/taskNextActionCommand.js +7 -6
  42. package/dist/commands/taskPublicationAdoptCommand.js +127 -0
  43. package/dist/commands/taskPublicationCommands.js +12 -3
  44. package/dist/commands/taskPublicationVerifyCommand.js +24 -40
  45. package/dist/commands/taskRemoteDeliveryCommand.js +5 -86
  46. package/dist/commands/taskUpstreamCommands.js +19 -8
  47. package/dist/commands/workflowCommands.js +6 -1
  48. package/dist/completion/completionInstaller.js +26 -26
  49. package/dist/completion/completionState.js +26 -26
  50. package/dist/completion/fileCompletionManager.js +6 -11
  51. package/dist/config/configCatalog.js +0 -2
  52. package/dist/config/timeZone.js +14 -0
  53. package/dist/config/yuiConfig.js +0 -29
  54. package/dist/context/runContextPack.js +5 -3
  55. package/dist/context/taskCatalog.js +185 -0
  56. package/dist/context/taskContext.js +152 -151
  57. package/dist/context/wakeRunReferences.js +11 -0
  58. package/dist/controller/agentCapabilities.js +58 -0
  59. package/dist/controller/agentRuntimeObserver.js +6 -11
  60. package/dist/controller/clientRuntime.js +22 -14
  61. package/dist/controller/controller.js +20 -24
  62. package/dist/controller/fileSchedulerStoreAdapter.js +191 -225
  63. package/dist/controller/globalInputDelivery.js +13 -0
  64. package/dist/controller/jobClient.js +4 -4
  65. package/dist/controller/jobControl.js +60 -25
  66. package/dist/controller/jobSupervisor.js +4 -4
  67. package/dist/controller/providerRetryAdmission.js +100 -0
  68. package/dist/controller/providerRetryDelivery.js +218 -0
  69. package/dist/controller/runtime.js +85 -43
  70. package/dist/controller/runtimeEventProcessor.js +0 -5
  71. package/dist/controller/sessionOwnerReconciliation.js +5 -0
  72. package/dist/controller/taskAgentError.js +35 -0
  73. package/dist/coordination/workMailboxQueue.js +2 -24
  74. package/dist/core/controllerClient.js +2 -2
  75. package/dist/core/fileLockOwner.js +74 -0
  76. package/dist/decision/decision.js +17 -0
  77. package/dist/doctor/doctor.js +18 -9
  78. package/dist/event/taskEvent.js +12 -0
  79. package/dist/execution/workItemExecutionProjection.js +2 -2
  80. package/dist/executor/agentCapabilityConfig.js +43 -0
  81. package/dist/executor/agentConfigurationCatalog.js +49 -11
  82. package/dist/executor/agentExecutor.js +5 -8
  83. package/dist/executor/fileRoleLaunchPlanner.js +11 -53
  84. package/dist/executor/taskAgentCapabilities.js +64 -0
  85. package/dist/integration/deliveryObligation.js +1 -69
  86. package/dist/integration/gitIntegrationService.js +79 -90
  87. package/dist/integration/integrationAttempt.js +3 -14
  88. package/dist/integration/integrationSourceApplication.js +4 -12
  89. package/dist/integration/manifestTags.js +2 -2
  90. package/dist/job/durableJob.js +4 -25
  91. package/dist/job/jobAssignmentScope.js +22 -0
  92. package/dist/job/jobOperation.js +16 -0
  93. package/dist/job/jobRunner.js +2 -1
  94. package/dist/job/stepDirectory.js +15 -0
  95. package/dist/kernel/builtinCapabilities.js +15 -11
  96. package/dist/kernel/kernelPorts.js +1 -17
  97. package/dist/lifecycle/exactRunTerminalization.js +5 -10
  98. package/dist/message/globalProviderRetry.js +15 -0
  99. package/dist/message/inputControlResolution.js +3 -4
  100. package/dist/message/message.js +17 -20
  101. package/dist/message/messageContinuation.js +1 -1
  102. package/dist/milestone/milestone.js +11 -0
  103. package/dist/observability/executionAudit.js +19 -0
  104. package/dist/observability/orchestrationMetrics.js +24 -1
  105. package/dist/observability/runtimeIdentity.js +1 -17
  106. package/dist/output/agentConfigurationPresentation.js +2 -0
  107. package/dist/output/timePresentation.js +1 -14
  108. package/dist/plugins/pluginService.js +12 -4
  109. package/dist/release/releaseWorkflowPorts.js +45 -96
  110. package/dist/release/runtimeRelease.js +9 -15
  111. package/dist/repository/gitWorkspace.js +371 -105
  112. package/dist/repository/projectMaintenanceLock.js +98 -82
  113. package/dist/repository/taskBaseFreshness.js +1 -1
  114. package/dist/repository/taskWorkspaceCoordinator.js +82 -144
  115. package/dist/repository/taskWorkspacePreparer.js +113 -47
  116. package/dist/repository/workspaceCleanupInspection.js +187 -0
  117. package/dist/resources/autoResourceGc.js +4 -77
  118. package/dist/resources/liveReferences.js +7 -54
  119. package/dist/resources/resourceDiscovery.js +5 -118
  120. package/dist/resources/resourceGc.js +233 -181
  121. package/dist/resources/resourceRegistrar.js +5 -4
  122. package/dist/resources/resourceRegistry.js +3 -37
  123. package/dist/resources/resourceRegistryStore.js +13 -36
  124. package/dist/resources/sqliteResourceRegistry.js +43 -26
  125. package/dist/review/deltaRecheck.js +1 -1
  126. package/dist/review/reviewAcceptance.js +1 -1
  127. package/dist/review/reviewDecision.js +1 -1
  128. package/dist/review/reviewRound.js +8 -7
  129. package/dist/review/taskFinalReviewContractResolution.js +1 -1
  130. package/dist/runtime/acpProtocol.js +4 -51
  131. package/dist/runtime/acpSession.js +10 -75
  132. package/dist/runtime/acpSessionConfiguration.js +1 -8
  133. package/dist/runtime/agentEndpoint.js +3 -2
  134. package/dist/runtime/agentError.js +5 -3
  135. package/dist/runtime/agentFailureContext.js +43 -0
  136. package/dist/runtime/agentHost.js +42 -25
  137. package/dist/runtime/builtinAgentErrorMappers.js +91 -0
  138. package/dist/runtime/codexAppServerRuntime.js +34 -3
  139. package/dist/runtime/codexInteractiveHost.js +2 -2
  140. package/dist/runtime/index.js +0 -1
  141. package/dist/runtime/managedCaller.js +21 -1
  142. package/dist/runtime/providerControl.js +5 -1
  143. package/dist/runtime/providerErrors.js +38 -0
  144. package/dist/runtime/providerRetry.js +198 -0
  145. package/dist/runtime/providerRuntimeIdentity.js +28 -2
  146. package/dist/runtime/runtimeObservation.js +0 -5
  147. package/dist/runtime/runtimeSessionCandidate.js +2 -3
  148. package/dist/runtime/sessionOwnerIdentity.js +1 -1
  149. package/dist/runtime/sessionTokenMetrics.js +15 -5
  150. package/dist/runtime/structuredProviderHost.js +10 -43
  151. package/dist/runtime/taskUsageMetrics.js +275 -0
  152. package/dist/runtime/tmuxAdapters.js +6 -8
  153. package/dist/scheduler/activeRoleRunDelivery.js +19 -7
  154. package/dist/scheduler/leaderWakeupProcessor.js +24 -6
  155. package/dist/scheduler/operatorEvent.js +12 -20
  156. package/dist/scheduler/operatorInputNotificationProcessor.js +1 -1
  157. package/dist/scheduler/ports.js +5 -8
  158. package/dist/scheduler/roleRunLiveness.js +4 -4
  159. package/dist/scheduler/roleRunStall.js +16 -23
  160. package/dist/scheduler/taskExecutionProjection.js +49 -36
  161. package/dist/scheduler/taskObservabilityProjection.js +6 -45
  162. package/dist/scheduler/taskWake.js +5 -10
  163. package/dist/scheduler/wakeReason.js +2 -0
  164. package/dist/scheduler/wakeupQueue.js +2 -4
  165. package/dist/setup/setupCommand.js +1 -1
  166. package/dist/storage/contextRecords.js +106 -0
  167. package/dist/storage/currentTaskStore.js +1 -1
  168. package/dist/storage/homeLayout.js +13 -17
  169. package/dist/storage/migrations/agentFailureContext.js +22 -0
  170. package/dist/storage/migrations/currentInputContract.js +86 -0
  171. package/dist/storage/migrations/currentRuntimeContract.js +228 -0
  172. package/dist/storage/migrations/historicalVerificationPlan.js +35 -0
  173. package/dist/storage/migrations/integrationContinuation.js +5 -4
  174. package/dist/storage/migrations/narrowAgentFailureContext.js +65 -0
  175. package/dist/storage/migrations/notificationOnlyWakes.js +74 -0
  176. package/dist/storage/migrations/verificationPlanV1.js +162 -0
  177. package/dist/storage/migrations/verificationPolicy.js +74 -0
  178. package/dist/storage/migrations/workItemHistory.js +46 -0
  179. package/dist/storage/persistenceWorker.js +12 -4
  180. package/dist/storage/recordValidation.js +87 -0
  181. package/dist/storage/sqliteSchema.js +173 -1
  182. package/dist/storage/sqliteStore.js +172 -161
  183. package/dist/storage/storageSchema.js +2 -14
  184. package/dist/storage/storageVersions.js +1 -1
  185. package/dist/storage/storeRpc.js +16 -7
  186. package/dist/storage/taskCatalog.js +123 -0
  187. package/dist/storage/taskStore.js +5 -7
  188. package/dist/storage/upgrade/upgradeOrchestrator.js +25 -37
  189. package/dist/task/archiveDiagnostics.js +1 -0
  190. package/dist/task/archivePreflight.js +124 -0
  191. package/dist/task/completionReadiness.js +5 -24
  192. package/dist/task/draftPlan.js +0 -53
  193. package/dist/task/nextAction.js +7 -13
  194. package/dist/task/publicationAdoption.js +56 -0
  195. package/dist/task/publicationReference.js +10 -0
  196. package/dist/task/remoteDelivery.js +31 -16
  197. package/dist/task/remoteDeliveryService.js +89 -0
  198. package/dist/task/taskActivation.js +2 -25
  199. package/dist/task/taskActivationService.js +0 -2
  200. package/dist/task/taskRecordReference.js +0 -1
  201. package/dist/task/taskSubmission.js +3 -14
  202. package/dist/telemetry/sqliteTelemetryBatch.js +29 -0
  203. package/dist/telemetry/sqliteTelemetryStore.js +49 -49
  204. package/dist/telemetry/telemetryWiring.js +4 -3
  205. package/dist/tmux/tmuxManager.js +29 -20
  206. package/dist/verification/gateArtifact.js +15 -24
  207. package/dist/verification/gateArtifactStore.js +14 -7
  208. package/dist/verification/verificationGateService.js +29 -88
  209. package/dist/verification/verificationPlan.js +27 -72
  210. package/dist/web/assets/client/app.js +92 -17
  211. package/dist/web/assets/client/components.js +55 -13
  212. package/dist/web/assets/client/i18n.js +72 -4
  213. package/dist/web/assets/client/taskSurface.js +6 -5
  214. package/dist/web/assets/client/view.js +35 -7
  215. package/dist/web/assets/shell.js +6 -0
  216. package/dist/web/assets/styles/layout.js +7 -0
  217. package/dist/web/webServer.js +12 -3
  218. package/dist/web/webSnapshot.js +14 -85
  219. package/dist/web/webTaskSurface.js +17 -46
  220. package/dist/workItem/workItem.js +1 -12
  221. package/dist/workspace/cleanupInspection.js +63 -0
  222. package/dist/workspace/workItemChangeSetManager.js +110 -50
  223. package/docs/agent-result-consumption.md +4 -0
  224. package/docs/agent-result-consumption.zh-CN.md +3 -0
  225. package/docs/agent-runtime-drivers.md +7 -0
  226. package/docs/agent-runtime-drivers.zh-CN.md +5 -0
  227. package/docs/architecture/README.md +2 -0
  228. package/docs/architecture/README.zh-CN.md +3 -1
  229. package/docs/architecture/capabilities-and-resources.md +42 -5
  230. package/docs/architecture/capabilities-and-resources.zh-CN.md +33 -3
  231. package/docs/managed-turn-and-session-runtime.md +121 -1
  232. package/docs/managed-turn-and-session-runtime.zh-CN.md +96 -2
  233. package/docs/observability/README.md +62 -0
  234. package/docs/observability/README.zh-CN.md +47 -0
  235. package/docs/plugin-sdk.md +4 -2
  236. package/docs/project-refresh.md +77 -0
  237. package/docs/project-refresh.zh-CN.md +59 -0
  238. package/docs/provider-retry.md +70 -0
  239. package/docs/provider-runtime.md +3 -1
  240. package/docs/provider-runtime.zh-CN.md +4 -2
  241. package/docs/release-workflow.md +190 -7
  242. package/docs/release-workflow.zh-CN.md +139 -5
  243. package/docs/roles-and-configuration.md +29 -0
  244. package/docs/roles-and-configuration.zh-CN.md +21 -0
  245. package/docs/sqlite-control-plane-design.md +16 -3
  246. package/docs/sqlite-control-plane-design.zh-CN.md +13 -2
  247. package/docs/task-dag-semantics.md +3 -3
  248. package/docs/task-dag-semantics.zh-CN.md +2 -2
  249. package/docs/task-delivery.md +223 -17
  250. package/docs/task-delivery.zh-CN.md +171 -14
  251. package/docs/task-discovery.md +101 -0
  252. package/docs/task-discovery.zh-CN.md +85 -0
  253. package/docs/testing/verification-levels.md +161 -9
  254. package/docs/testing/verification-levels.zh-CN.md +116 -9
  255. package/i18n/README.zh-CN.md +13 -7
  256. package/package.json +1 -1
  257. package/skills/yui-leader/SKILL.md +5 -0
  258. package/skills/yui-leader/references/execution.md +3 -2
  259. package/skills/yui-leader/references/integration.md +9 -5
  260. package/skills/yui-leader/references/planning.md +9 -3
  261. package/skills/yui-operator/SKILL.md +24 -8
  262. package/skills/yui-reviewer/SKILL.md +4 -0
  263. package/skills/yui-runtime/SKILL.md +17 -2
  264. package/skills/yui-runtime/references/publication.md +26 -4
  265. package/skills/yui-runtime/references/recovery.md +71 -0
  266. package/dist/agent/agentRegistry.js +0 -10
  267. package/dist/agentRun/runIdentity.js +0 -22
  268. package/dist/commands/deliveryGuardPreflight.js +0 -30
  269. package/dist/commands/taskIntegrationQueueCommands.js +0 -226
  270. package/dist/commands/taskOverviewCommand.js +0 -376
  271. package/dist/completion/completionWizard.js +0 -125
  272. package/dist/context/dispatchContext.js +0 -110
  273. package/dist/context/wakeNotification.js +0 -144
  274. package/dist/integration/integrationCheckEvidenceReuse.js +0 -53
  275. package/dist/integration/integrationQueueEntry.js +0 -191
  276. package/dist/integration/integrationQueueService.js +0 -810
  277. package/dist/release/fakeReleasePorts.js +0 -55
  278. package/dist/runtime/sessionOwnerRegistry.js +0 -137
  279. package/dist/task/deliveryGuard.js +0 -226
  280. /package/dist/{commands/taskActor.js → task/taskAuthority.js} +0 -0
@@ -84,6 +84,33 @@ owner Run。当 Role 忙碌时,保存会返回而不打断它。一旦它可
84
84
  显式 handoff 只针对同一工作已派发的后继。复制的 Producer/综合血缘不会被一条消息
85
85
  静默改写。
86
86
 
87
+ 被拒绝的 Leader 通知保留原始输入和失败原因。确定性的启动错误不再自动重试,
88
+ 只有明确的运行时资源争用可以延后再试。新消息和 Controller 重启不会重放被拒绝
89
+ 的认领。修正原因后,显式重试对应的 wake:
90
+
91
+ ```sh
92
+ yui task wake show <task> <wake>
93
+ yui task wake retry <task> <wake> --reason "<已修正的原因>"
94
+ ```
95
+
96
+ retry 把被拒绝批次及后续排队输入交回现有 mailbox,不把旧 wake 改成已接受,
97
+ 也不替换 Session;当前运行权限和就绪检查仍然生效。模型/effort 校验拒绝会显示原生
98
+ 报告的模型选项,并提供查询完整当前目录的命令。
99
+
100
+ 没有 Run 的启动失败与原生 Provider 拒绝都保留规范的 `runtime.agent-error` 事实。
101
+ 通知投递引用该原始错误,而不复制第二份原因。`task event show` 的人类和 JSON 输出
102
+ 都提供有作用域的能力查询入口,`wake show` 也链接同一事实。无法接收的 Leader 将
103
+ 错误通过既有 Operator 通道通知一次;Worker/Reviewer 仍通知 Leader。不启动新的
104
+ 恢复 Agent,也不为了记录错误制造 Run 或 Session。
105
+
106
+ 存储 `35→36` 迁移保留历史错误原始 payload,并将当时未记录的启动配置标为不可用,
107
+ 不会从当前 Role 猜测过去的模型、账户或 settings 选择。
108
+
109
+ 存储 `36→37` 将该上下文收窄为原生元数据查询选项和请求的模型/effort。旧完整快照
110
+ 留在迁移审计中,不由运行时双读。查看模型选项不再校验 Task 权限、Review 状态、
111
+ 工作区条目或当前 Session 引导协议。三类错误入口保留各自的原生身份检查与分类,
112
+ 错误创建、去重统一一个写入入口,上级通知统一使用事件路由边界。
113
+
87
114
  未知的 Leader 通知保留其唤醒和输入窗口:
88
115
 
89
116
  ```sh
@@ -94,6 +121,70 @@ yui task wake resolve <task> <wake> --reason <quiescence-evidence>
94
121
  resolve 在原生效果围栏清除后释放该认领。它既不重放通知,也不编造接受或完成。独立的
95
122
  Role 工作和合法的本地事实不是一把 Task 范围的恢复锁。
96
123
 
124
+ wake 状态记录通知投递,不记录 Message 的实施结果。普通 Leader 通知的 `consumed`
125
+ 表示原生接受;原生 Turn 完成与 Task 交付应分别依据运行证据和持久结果判断。
126
+ 被拒绝的 wake 保持 `dispatched` 并保留 claim,直到显式重试或 Session 替换;
127
+ 已显式释放的历史 wake 可以保持 `dispatched` 而不占用 claim。
128
+ 接受状态未知的通知不能用 `wake retry` 重放。Session 替换把待投递输入
129
+ 保留给新 wake 与当前 Context,不会追溯把旧 wake 标成已接受;旧回执也不能结算
130
+ 新批次。Session 清理期间,新输入保持排队。检查时应结合 wake、
131
+ `notification.delivery` 事件、当前 mailbox 与 Session,不应要求每个历史 wake
132
+ 都对应一条最终回复。
133
+
134
+ 现行 wake 只表示通知,Run 完成不能消费 wake;首次通知窗口从 Task 创建时间开始。
135
+ 退役的 Run-linked wake 通过 Task 事件保留原 ID 和完整原文,不作为第二种活动 wake 格式。
136
+
137
+ ## 输入时机:queue、steer 与 interrupt
138
+
139
+ 提交意图(`record / discuss / develop`)决定需求如何路由。输入时机决定一条已经
140
+ 获授权的输入何时到达 Role;它不激活 Task、不扩大 Assignment,也不提升 planning
141
+ 权限。仅保存输入使用 `message send --intent record`,`--wake-policy` 已移除。
142
+ 未绑定请求身份的 Draft Message 仍可编辑,保留原提交意图。编辑 `record` 或
143
+ `develop` 不会启动规划、创建或重试激活;编辑 `discuss` 复用讨论提交的激活/规划
144
+ 路由,因此已有 pending 或 failed 激活时,编辑后的讨论仍等待激活处理。
145
+
146
+ 带 submission key、queue/steer 请求或 interrupt-then 交接的 Message 正文不可变;
147
+ 需要改内容时,应使用新的 request ID 提交新消息。这保留原请求的判重依据和回执,
148
+ 不新增第二套输入存储。更新为相同正文是无操作:不写事件、不改队列、不通知
149
+ Controller。现行 user/operator 消息必须存有意图;改变意图同样需要显式提交新输入。
150
+ [经认证的 Web 控制](architecture/capabilities-and-resources.zh-CN.md#cli-与-web)
151
+ 与 CLI 使用同样的三种操作。
152
+
153
+ | 动作 | 效果 | 不证明什么 |
154
+ | --- | --- | --- |
155
+ | `queue` | 保存 Message,等待收件人的下一个合法机会,按 request ID 幂等 | 读取 Context 或接受投递不等于实施 |
156
+ | `steer` | 保存 Message,并尝试原生 steer 精确的当前 Turn | 不受支持、目标陈旧或未确认的 steer 不等于排队延续 |
157
+ | `interrupt` | 记录控制请求,请 Provider 取消精确的当前 Turn | 停止请求不等于终态,也不证明后台资源已停止 |
158
+
159
+ 选择实时目标前先检查 Session:
160
+
161
+ ```sh
162
+ yui task role session inspect <task> <role>
163
+ yui task message queue <task> "<continuation>" --request-id <id>
164
+ yui task message steer <task> "<correction>" --request-id <id> --to leader --expected-target <turn>
165
+ yui task role interrupt <task> <role> --expected-target <turn> --request-id <id> [--then-message <task/message>]
166
+ ```
167
+
168
+ 普通 Leader `queue` 输入省略 `--to`。显式 `--to <role>`(包括 `leader`)指向既有
169
+ Assignment,必须带 `--work-item` 或 `--review-round`;Message 不能创建 Assignment。
170
+ `steer` 仍需要显式 Role 与精确实时目标。同一个 request ID 若换正文或目标会产生冲突。
171
+ `steer` 与 `interrupt` 不会静默改目标、
172
+ 替换 Session、杀进程或回退到另一动作。没有活动受管 Turn 时返回 `NO_ACTIVE_TURN`;
173
+ 陈旧目标与不受支持的控制也保持为显式结果。
174
+
175
+ 裸 interrupt 不创建 Message。可选的 `--then-message` 引用一条已保存且符合交接条件
176
+ 的输入,只在精确终态之后、原 Session/writer 边界内保留下一次机会。它不是第四种动作,
177
+ 也不能用来重放已接受、待确认或未知的 steer。明确证明未投递时,若用户意图允许,
178
+ 可以显式选择新的控制;不确定性不允许重放。
179
+
180
+ Global Role 使用同样的三种动作和自己的 owner、Session,不虚构 Task 或 Run。
181
+ 本地用户 Web Surface 通过共享 Global Role 处理器暴露这些动作。公开 CLI 提供
182
+ `yui role message queue|steer <role> <text>` 和 `yui role interrupt <role>`。
183
+ queue/steer 要求 `--request-id`,steer/interrupt 要求 `--expected-target`。
184
+ 这些命令保留调用者现有 Session 权限,不虚构 Task/Run 或借用浏览器用户权限。
185
+ 配置仍使用 `config role`,生命周期使用 `session`。新的受控 Global Session 使用 Host console。活动的非受管 Session
186
+ 不会被静默采用,需要先执行显式的 Session 生命周期操作。
187
+
97
188
  ## 精确结果
98
189
 
99
190
  原生终态只结算相匹配的那次执行。已知的原生 Turn ID 必须匹配;串行流可以使用已证明的
@@ -118,8 +209,8 @@ Candidate 和 ReviewRound 保留来源;Core 不从散文中推导语义接受
118
209
  仍是通知。Operator 提交和直接的 Task 消息都能到达那个 Session。Draft 计划/WorkItem
119
210
  编辑保留执行历史;外部编辑通知 Leader,而它自己的规划编辑不创建自唤醒。
120
211
 
121
- 新的 Draft Role 使用位于 `<YUI_HOME>.task-runtimes/planning` 下、专属于该 Task 的规划
122
- 目录,在控制 Home 和交付树之外。一个 planning Run 可以用 `task activation request`
212
+ 新的 Draft Role 使用位于 `<YUI_HOME>/runtime/task-runtimes/planning` 下、专属于该 Task 的规划
213
+ 目录,与持久控制数据和交付树分开。一个 planning Run 可以用 `task activation request`
123
214
  持久化意图并立即返回一个 `afterPlanningRun` 引用。它的终态把该请求释放给 Controller
124
215
  准入;被取消的意图不会复活。Leader 也可以在普通讨论中请求激活而无需 AgentRun:一旦
125
216
  原生输入结算,Controller 就采用其持久意图。不需要合成 Run 或额外的用户“continue”。
@@ -128,6 +219,9 @@ Candidate 和 ReviewRound 保留来源;Core 不从散文中推导语义接受
128
219
  获得受管 worktree。`scratch` 选择一个 Task 拥有的目录。`local` 需要一个已登记的 local
129
220
  Resource 及其 grant;Project ID 不是 local Resource ID。
130
221
 
222
+ `task activate` 是对已有请求的前台采用,不是创建激活意图的另一条路径。
223
+ 没有请求的 Draft 会在资源准备前被拒绝;命令不代填环境计划或 request ID。
224
+
131
225
  资源准备先于对 Task 状态和工作区所有权的原子采用。一次失败的采用记录一个失败请求,
132
226
  并用持久事实通知 Leader;在失败未变时它不反复准备资源。Leader 选择显式重试或修正后的
133
227
  请求。成功激活同样为 Leader 留下一条交付通知。激活绝不把活动 Session 变更为交付权限。
@@ -81,3 +81,65 @@ raw Provider history merely to explain a status.
81
81
  Start with exact read-only records. Process changes, cancellation, grant updates
82
82
  and resource cleanup require the relevant explicit action and scope. A generic
83
83
  diagnostic request does not authorize live-model, shared or production tests.
84
+
85
+ ## Task usage and time
86
+
87
+ Task overview, Web Task/WorkItem cards and `execution audit` use the same pure
88
+ projection of authorized Task events. Reading never samples a Provider or opens
89
+ raw transcripts. There is no new metric store, migration, price table or budget
90
+ policy. Existing history remains readable.
91
+
92
+ Each metric has `value`, `status` (`known`, `partial`, `unknown`) and `reasons`.
93
+ Unknown is `null`, not zero. A known zero requires actual numeric evidence.
94
+ Partial is an observed subtotal, not a complete bill or guaranteed monotonic
95
+ lower bound. Coverage names the observed Session identities, source/semantics
96
+ and evidence cutoff; it is not a percentage of an unknowable Provider total.
97
+ The declared basis is Task-fenced, observed sources only.
98
+ JSON consumers read `cost.tokens.value` and `cost.toolCalls.value` with their
99
+ status/reasons, replacing the numeric placeholders and observable flags.
100
+ `elapsedSeconds` and `executionSeconds` replace the misleading Group-sum
101
+ `wallClockSeconds`; this changes a read projection, not persistent storage.
102
+
103
+ - Request usage reuses the Session reducer: stable request identity, latest
104
+ received revision, input plus output, no extra addition of cache/reasoning
105
+ subsets. Missing boundaries, mixed semantics and cumulative rollback are not
106
+ guessed. Remaining context is capacity, never consumption.
107
+ - Replaced Sessions remain in the lifetime view. A nonzero first cumulative
108
+ snapshot is an excluded baseline: it may predate the Task. Later comparable
109
+ increments are partial; one nonzero snapshot alone yields unknown Task usage.
110
+ A zero baseline supports the subsequent counter. JSON also exposes raw
111
+ Session counters separately; they are not additional Task consumption.
112
+ - Direct Leader chat can contribute without a Run or WorkItem. WorkItems
113
+ receive only request usage whose revisions share one exact, matching Run
114
+ binding. Cumulative counters are not apportioned. Raw whole-Session totals
115
+ are not exposed as WorkItem usage. Task totals need not equal WorkItem sums.
116
+ - Child counters are excluded because the current contract cannot prove they
117
+ are additional to the parent. Child evidence marks coverage partial. Conflicting
118
+ Role ownership of one native counter is unknown, not two independent totals.
119
+ - Tool counts deduplicate retained exact native Session/Turn/operation identities,
120
+ including failures. Operation history is compacted, so this is always partial
121
+ when evidence exists and unknown otherwise. Absence never proves zero tools.
122
+
123
+ **Task elapsed** runs from Task creation (including planning and waiting) to its
124
+ recorded completion, retirement or cancellation, or to the read time if active.
125
+ An archived Task keeps its original endpoint; missing terminal evidence is
126
+ unknown. Group count is irrelevant.
127
+
128
+ **Observed native execution sum** merges overlapping complete Turn intervals
129
+ within one native resource and adds independent parallel resources. Two
130
+ independent ten-second intervals can total twenty seconds during ten seconds of
131
+ elapsed time. It is not CPU/GPU time. Since Turn history is compacted, this is
132
+ partial; missing start/end and live Turns are excluded, never extended indefinitely.
133
+ Subsecond precision is retained. WorkItem cards do not substitute Group duration
134
+ for either measure.
135
+
136
+ The audit `usage` section is explicitly **Task lifetime** even when `--since` or
137
+ `--until` filters other sections. It does not offer window consumption; filtering
138
+ cumulative snapshots first would mislabel historical usage as window usage.
139
+ Its existing AgentRun-duration section remains a separately labeled Run metric.
140
+
141
+ Deterministic fixtures cover the shared reducer and CLI/Web/audit semantics.
142
+ They do not establish live Provider completeness. Built-in normalization supports
143
+ Codex cumulative and Claude request observations when supplied; this delivery
144
+ does not collect real-model billing evidence or assert Provider behavior was
145
+ live-tested.
@@ -69,3 +69,50 @@ Telemetry 和缓存是诊断材料,不是 Task 真相,也不是 transcript
69
69
 
70
70
  从精确的只读记录开始。进程变更、取消、grant 更新和资源清理都需要相应的显式动作
71
71
  与范围。一个笼统的诊断请求不授权真实模型、共享或生产环境的测试。
72
+
73
+ ## Task 用量与耗时
74
+
75
+ Task overview、Web Task/WorkItem 卡片和 `execution audit` 共用授权 Task
76
+ 事件的纯读投影。读取不采样 Provider、不打开原始 transcript;没有新增指标存储、
77
+ 迁移、价格表或预算策略,既有历史仍可读。
78
+
79
+ 每项指标带 `value`、`status`(`known`、`partial`、`unknown`)和 `reasons`。
80
+ 未知为 `null`,不是零;真实零必须有数值证据。部分值是已观测小计,不是完整账单,
81
+ 也不保证是单调增长的下界。覆盖说明包括已观测 Session 身份、来源/计数语义和
82
+ 证据截止点,不对不可知的 Provider 总量伪造覆盖百分比。口径是 Task 围栏内的
83
+ 已观测来源。
84
+ JSON 使用方改读 `cost.tokens.value`、`cost.toolCalls.value` 及其状态/原因,
85
+ 不再读取数字占位和 observable 标志。`elapsedSeconds`、`executionSeconds`
86
+ 替代含义错误的 Group 求和 `wallClockSeconds`;这是读投影变更,不是持久存储变更。
87
+
88
+ - 请求用量复用 Session reducer:按稳定请求身份取最后收到的修订,累加输入与
89
+ 输出,缓存/推理子项不重复增加。缺失边界、混合语义、累计回退不猜测;剩余
90
+ 上下文是容量,不是消费。
91
+ - Session 替换不抹去历史。首次非零累计快照可能早于 Task,因此作为排除基线;
92
+ 后续可比增量为部分值,仅一个非零快照时 Task 用量未知。零基线可支持后续
93
+ 累计值。JSON 单独暴露原始 Session 计数,它不是额外的 Task 消费。
94
+ - Leader 直聊不需要伪造 Run/WorkItem。WorkItem 仅接收各次修订均绑定同一
95
+ 精确、匹配 Run 的请求用量;累计值不摊派,整个 Session 的原始计数不冒充
96
+ WorkItem 用量。Task 总量不必等于 WorkItem 小计之和。
97
+ - 当前合同无法证明子执行计数在父统计之外,因此排除子计数并将覆盖标为部分。
98
+ 多个 Role 对同一原生计数器的归属冲突为未知,不当成两份独立总量。
99
+ - 工具次数按保留的精确原生 Session/Turn/operation 身份去重,失败调用也计一次。
100
+ 工具历史已压缩,有证据时只能是部分次数;无证据为未知,不能推出零调用。
101
+
102
+ **任务历时**从 Task 创建(含规划和等待)到记录的完成、退役或取消时间;
103
+ 活动 Task 截止本次读取时间。归档保留原终点,终态证据缺失则未知,与 Group
104
+ 数量无关。
105
+
106
+ **已观测原生执行累计**合并同一原生资源上起止完整、彼此重叠的 Turn 区间,
107
+ 再相加独立并行资源。两个独立执行各十秒,可以在十秒自然时间内累计二十秒。
108
+ 它不是 CPU/GPU 时间。由于 Turn 历史已压缩,该指标为部分值;缺少起止证据和
109
+ 运行中的 Turn 不计入,不无限延长。保留不足一秒的精度,WorkItem 卡片不再用
110
+ Group 时长替代上述含义。
111
+
112
+ 即使 `--since`、`--until` 过滤其他审计部分,`usage` 部分仍明确为 **Task 全生命周期**。
113
+ 首版不提供窗口消费,不能先过滤累计快照,再把历史消费称为窗口用量。
114
+ 既有 AgentRun 时长部分保留为单独标明的 Run 指标。
115
+
116
+ 确定性 fixture 验证共享 reducer 和 CLI/Web/audit 语义,不证明真实 Provider 的
117
+ 覆盖完整性。内置归一化支持来源所提供的 Codex 累计观察和 Claude 请求观察;
118
+ 本次交付不采集真实模型账单证据,也不声称已实测真实 Provider 行为。
@@ -374,8 +374,10 @@ Publication rechecks the complete contribution, dependencies and permissions
374
374
  again. A failure does not change the existing directory; a competing
375
375
  activate/disable makes a late candidate refuse to publish. After a successful
376
376
  publication, the old generation only serves existing references and is disposed
377
- once drained; a cleanup failure keeps a diagnostic Artifact and neither rolls
378
- back the new Provider nor pretends the current instance is still unpublished.
377
+ once drained. A cleanup failure is retained on that plugin's diagnostic channel
378
+ with the old generation identity, even if another replacement has already
379
+ published. It is not a Task Artifact, does not roll back the new Provider, and
380
+ does not pretend the current instance is still unpublished.
379
381
 
380
382
  ## Storage and other ingress
381
383
 
@@ -0,0 +1,77 @@
1
+ <p align="right"><strong>English</strong> | <a href="./project-refresh.zh-CN.md">简体中文</a></p>
2
+
3
+ # Project refresh
4
+
5
+ `yui project refresh <project>` refreshes the canonical Project checkout from
6
+ the Project's configured remote and stable branch. Stable and development
7
+ branches must match. The per-Project maintenance fence covers the operation;
8
+ Task workspaces and their recorded bases are not refreshed by this command.
9
+
10
+ ## Two separate facts
11
+
12
+ The checkout HEAD and a local remote-tracking ref are distinct observations.
13
+ Refresh fetches the exact branch into a unique temporary ref, compares its
14
+ commit with the remote's advertised commit, and permits only a clean
15
+ fast-forward from the original HEAD on the stable branch. Configured `HEAD`
16
+ is resolved through the remote's symbolic HEAD, never a guessed default branch.
17
+
18
+ When exactly one existing Git remote and fetch mapping manages a safe tracking
19
+ destination, refresh also updates that destination to the verified commit.
20
+ This runs even when HEAD is already current, repairing stale tracking refs
21
+ that would otherwise make ordinary Git show a false `ahead` count.
22
+
23
+ The mapping uses Git's effective fetch URL, including `insteadOf` resolution,
24
+ and full-ref exact or one-star fetch refspecs with negative exclusions. It
25
+ does not assume `origin` or `refs/remotes/<remote>/<branch>`. A configured
26
+ destination under `refs/remotes/` can be created if absent. Multiple matching
27
+ remotes/URLs, multiple destinations, another source managing the same target,
28
+ unsupported refspecs, local-branch/tag destinations and symbolic destinations
29
+ are explicitly unmanaged. Push URLs never establish fetch identity.
30
+
31
+ Only the unique mapped ref can change. Fetch does not opportunistically update
32
+ other tracking refs, fetch/prune tags, recurse into submodules, or write
33
+ `FETCH_HEAD`. Remote/upstream configuration is never rewritten. Read-only
34
+ tracking observations use the same mapping proof and return no tracking match
35
+ when it is not uniquely established.
36
+
37
+ ## Results and concurrent changes
38
+
39
+ - `fromCommit`, `toCommit` and `changed` describe HEAD; `changed: false` does
40
+ not imply that no tracking repair occurred.
41
+ - `tracking.status` is `updated` or `current` for a synchronized target,
42
+ with its exact ref and old/new object IDs.
43
+ - `tracking.status: unmanaged` includes a reason. HEAD can still refresh
44
+ successfully, but this is not a claim of tracking consistency.
45
+ - Once work has started, a failed refresh uses the existing nonzero
46
+ `RUNTIME_ERROR` channel. JSON `details.refresh` retains observed HEAD,
47
+ the verified commit when available, and the tracking result (`failed` for
48
+ a managed target). Missing/unreadable observations are nullable. Text
49
+ errors also state the actual partial result. Preconditions can fail
50
+ before any mutation without a partial-result record.
51
+
52
+ Refresh rechecks the mapping, cleanliness, branch and HEAD around the update.
53
+ A Git ref transaction verifies the stable branch and compares the tracking
54
+ target against its captured old value (or absence) before writing it. A local
55
+ ref race, changed mapping, divergent checkout or fetched/advertised mismatch
56
+ fails visibly. After a fast-forward, a failed tracking update leaves HEAD at
57
+ its actual new commit; it never rolls back or overwrites a competing ref.
58
+ There is no automatic retry, replay or background synchronizer.
59
+
60
+ Temporary-ref cleanup compares the known fetched object before deletion.
61
+ An unsuccessful cleanup reports the retained ref; an interrupted/failed fetch
62
+ can report the exact temporary namespace to inspect. These are Git diagnostics,
63
+ not durable Task progress or a new recovery protocol.
64
+
65
+ The maintenance fence serializes Yui maintenance, not arbitrary external Git
66
+ commands or user edits. Checks and Git locks bound the observed operation;
67
+ they do not promise that local or remote state cannot change after observation.
68
+ Ordinary `git status` loses the false `ahead` count only when the current
69
+ branch's upstream is the tracking ref refreshed here. A different/missing
70
+ upstream is left untouched and carries no such promise.
71
+
72
+ ## Scope of adoption
73
+
74
+ This operation adds no persistent Yui schema or migration. Installing code
75
+ that implements it does not itself refresh a real Project. A normal authorized
76
+ refresh applies the behavior; Task completion, integration, publication and
77
+ archive remain separate operations.
@@ -0,0 +1,59 @@
1
+ <p align="right"><a href="./project-refresh.md">English</a> | <strong>简体中文</strong></p>
2
+
3
+ # Project refresh
4
+
5
+ `yui project refresh <project>` 按 Project 配置的 remote 和 stable branch 刷新
6
+ 规范 checkout。stable 与 development branch 必须一致。操作全程持有 per-Project
7
+ maintenance fence;不会刷新 Task 工作区或改写其记录的基线。
8
+
9
+ ## 两个独立事实
10
+
11
+ checkout HEAD 与本地 remote-tracking ref 是不同的观察。refresh 将精确分支获取到
12
+ 唯一临时 ref,比较获取到的提交与远端 advertised commit,仅允许从原 HEAD 在干净的
13
+ 稳定分支上 fast-forward。配置为 `HEAD` 时解析远端 symbolic HEAD,不猜默认分支。
14
+
15
+ 当且仅当一个既有 Git remote 及其 fetch 映射管理安全的 tracking 目标时,refresh
16
+ 同时将该目标更新到已验证的提交。HEAD 已最新也执行这一检查,修复会让普通 Git
17
+ 错误显示 `ahead` 的陈旧 tracking ref。
18
+
19
+ 映射使用 Git 生效的 fetch URL(包括 `insteadOf` 解析),支持完整 ref 名称的
20
+ 精确或单星号 fetch refspec,并处理负向排除。不假定 `origin` 或
21
+ `refs/remotes/<remote>/<branch>`。已配置的 `refs/remotes/` 目标缺失时可以创建。
22
+ 多个匹配 remote/URL、多个目标、其他来源也管理同一目标、不支持的 refspec、
23
+ 本地分支/标签目标和符号引用目标,均明确标为未管理。push URL 不证明 fetch 身份。
24
+
25
+ 只允许修改唯一映射目标。fetch 不顺带更新其他 tracking refs、不获取/修剪标签、
26
+ 不递归获取 submodule、不写入 `FETCH_HEAD`,也不改 remote/upstream 配置。
27
+ 只读 tracking 观察复用相同映射证明;无法唯一确证时不返回 tracking 匹配。
28
+
29
+ ## 结果与竞争
30
+
31
+ - `fromCommit`、`toCommit`、`changed` 描述 HEAD;`changed: false` 不代表没有
32
+ 发生 tracking 修复。
33
+ - `tracking.status` 为 `updated` 或 `current` 时,目标已同步,并包含精确 ref
34
+ 和新旧对象 ID。
35
+ - `tracking.status: unmanaged` 带有原因。HEAD 仍可刷新成功,但不声称 tracking
36
+ 一致。
37
+ - 操作开始后失败,沿用非零的 `RUNTIME_ERROR` 通道。JSON 的 `details.refresh`
38
+ 保留实际观察到的 HEAD、可用时的已验证提交和 tracking 结果(受管目标为
39
+ `failed`)。缺失或不可读的观察可为 null。文本错误也说明实际部分结果。
40
+ 变更前的前置条件失败可以不带部分结果。
41
+
42
+ refresh 在更新前后复查映射、干净状态、分支与 HEAD。Git ref 事务同时验证稳定分支,
43
+ 并以捕获的旧值(或不存在)比较后写入 tracking 目标。本地 ref 竞争、映射变化、
44
+ checkout 分歧或 fetched/advertised 不一致都会显式失败。ff 之后 tracking 更新失败,
45
+ HEAD 保留实际的新提交;不会回滚或覆盖竞争方的 ref。不自动重试、重放,也没有后台
46
+ 同步器。
47
+
48
+ 清理临时 ref 时比较已知 fetched 对象后才删除。清理失败报告保留的 ref;获取中断或
49
+ 失败可报告供检查的精确临时命名空间。这些是 Git 诊断,不是持久 Task 进度或新恢复协议。
50
+
51
+ maintenance fence 串行化 Yui 维护,不锁住任意外部 Git 命令或用户编辑。检查和 Git
52
+ 锁约束本次观察,不承诺观察之后本地或远端不再变化。只有当前分支 upstream 指向此次
53
+ 刷新的 tracking ref,普通 `git status` 才会消除相应虚假 `ahead`。不同或缺失的
54
+ upstream 保持原样,不作这一承诺。
55
+
56
+ ## 采用边界
57
+
58
+ 本操作不新增 Yui 持久 schema 或迁移。安装实现代码不等于刷新真实 Project;
59
+ 正常获授权的 refresh 才应用此行为。Task 完成、集成、发布和归档仍是独立操作。
@@ -0,0 +1,70 @@
1
+ # Bounded Provider recovery
2
+
3
+ Yui can continue an owned input after a positively identified transient Provider
4
+ failure without discarding its Session or local work. The Driver supplies failure
5
+ and native-state evidence; the Controller schedules and atomically admits the
6
+ next input. Agents still own semantic recovery and acceptance.
7
+
8
+ - At most five automatic attempts after the initial failure, within ten minutes.
9
+ - Exponential windows start at five seconds and cap at sixty seconds, with
10
+ 50–100% jitter. A trusted Retry-After is a minimum, with positive jitter.
11
+ A wait beyond the remaining deadline ends automatic recovery.
12
+ - Busy/admission waiting does not consume a model attempt. Acceptance, heartbeat
13
+ and partial output do not reset the streak. Only the matching successful
14
+ native terminal ends the chain; audit history remains.
15
+ - A rejected input retains its original durable reference. An accepted failed
16
+ Turn gets a new Turn in the same Session with a system recovery instruction:
17
+ inspect existing work and receipts and continue only unfinished actions.
18
+ - Unknown acceptance is never replayed. Existing exact-identity reconciliation
19
+ may supply the missing outcome. Restarting the Controller does not reset the
20
+ counter, deadline, pending input or writer fence.
21
+ - An explicit manual retry of the same Run retains its recovery lineage,
22
+ automatic count and original deadline. It is not charged as an automatic
23
+ attempt, but a further failure cannot replenish automatic allowance.
24
+
25
+ The records live on the existing Provider binding, with indexed pending-record
26
+ reads and the existing Controller deadline timer. There is no retry Task status,
27
+ second queue, automatic Session replacement, account-wide circuit breaker or
28
+ model switch. The original failed AgentRun stays failed; ordinary Run/Review
29
+ retry primitives own its successor and keep the original ReviewRound.
30
+
31
+ ## Inspect and control
32
+
33
+ Task Sessions:
34
+
35
+ ```sh
36
+ yui task role session retry <task> <role> show
37
+ yui task role session retry <task> <role> cancel
38
+ yui task role session retry <task> <role> disable
39
+ yui task role session retry <task> <role> enable
40
+ ```
41
+
42
+ Global Sessions use `yui session retry <role> show|cancel|disable|enable`.
43
+ This narrow existing Session surface does not register the unrelated
44
+ top-level Global `role` command family.
45
+
46
+ The same projection appears in Context, Session inspection and the Web role
47
+ panel. `cancel` withdraws this recovery chain; `disable` also disables future
48
+ chains on the current Provider binding. Neither interrupts an admitted Turn.
49
+ `enable` does not replay historical failures. Existing Task/Role authority applies.
50
+
51
+ ## Supported boundary and adoption
52
+
53
+ Current controlled Codex Hosts advertise exact recovery support. The native
54
+ preflight checks the latest failed Turn identity for accepted-input recovery
55
+ and a complete empty background-terminal page; ordinary `systemError` admission
56
+ remains closed. Missing protocol methods, a changed/active Turn, unresolved
57
+ background execution or a changed Session/configuration require inspection,
58
+ not automatic cleanup. Native chats without an owned input reference, old Hosts,
59
+ and Adapters without this proof capability are not automatically replayed.
60
+ Claude/ACP retain their normal error and explicit recovery behavior.
61
+
62
+ Storage transition 26→27 adds optional recovery/input facts and indexes without
63
+ scanning or scheduling old failures. Adoption requires the normal explicitly
64
+ authorized release/upgrade and compatible Host lifecycle. Building or completing
65
+ this Task does not enable the change in an already-running shared instance.
66
+
67
+ Deterministic checks use disposable SQLite Homes, fake native protocol and
68
+ injected time; they do not establish real-provider behavior or idempotency of
69
+ arbitrary external tools. External effects still require their normal authority
70
+ and receipt/idempotency protections.
@@ -91,7 +91,9 @@ The codec must not implement another Task/Run Store or invent native Turn IDs.
91
91
  Model, effort and permission requests are compiled against the peer's offered
92
92
  configuration axes and checked after application. Setters can change other axes;
93
93
  final observed values must still satisfy the requested launch before prompt.
94
- An acknowledgement without a reported value is weaker than an observed match.
94
+ New and loaded Sessions must report `configOptions` (an empty array is valid).
95
+ Configuration uses `session/set_config_option`; mode-only peers are unsupported.
96
+ An acknowledgement without current reported values cannot satisfy a requested change.
95
97
  Unknown ACP products do not inherit a guessed bypass mode from another product.
96
98
 
97
99
  Yui distinguishes three configuration layers:
@@ -73,8 +73,10 @@ ACP 协商初始化和 Session 能力,打开或加载一个确切的 Session
73
73
  Task/Run Store,也不得编造原生 Turn ID。
74
74
 
75
75
  model、effort 和权限请求依据 peer 提供的配置轴编译,并在套用后检查。setter 可以
76
- 改变其他轴;最终观察到的值在 prompt 之前仍必须满足请求的启动。一个没有回报值的
77
- 确认弱于一次已观察的匹配。未知的 ACP 产品不从另一个产品继承猜测的旁路模式。
76
+ 改变其他轴;最终观察到的值在 prompt 之前仍必须满足请求的启动。
77
+ 新建和加载 Session 都必须回报 `configOptions`(可以为空数组),配置只使用
78
+ `session/set_config_option`,不再支持 mode-only peer。仅确认调用、没有当前回报值
79
+ 不能证明请求的配置已生效。未知的 ACP 产品不从另一个产品继承猜测的旁路模式。
78
80
 
79
81
  Yui 区分三个配置层:
80
82