@zq-silk/yui 0.13.10 → 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.
- package/ARCHITECTURE.md +69 -428
- package/README.md +108 -298
- package/dist/agent/managedRuntimeEnvironment.js +2 -2
- package/dist/cli/commandCatalog.js +39 -77
- package/dist/cli/interactionCandidates.js +4 -4
- package/dist/cli/interactionPolicy.js +7 -10
- package/dist/cli/invocationRouter.js +1 -1
- package/dist/cli/updateCommand.js +6 -27
- package/dist/cli/updateOrchestrator.js +63 -484
- package/dist/cli/updatePorts.js +15 -333
- package/dist/cli/upgradeCommand.js +8 -65
- package/dist/cli.js +57 -242
- package/dist/commands/configCommands.js +11 -62
- package/dist/commands/executionAuditCommands.js +23 -23
- package/dist/commands/globalRoleCommands.js +2 -7
- package/dist/commands/jobCommands.js +1 -4
- package/dist/commands/projectCommands.js +5 -5
- package/dist/commands/releaseCommands.js +3 -10
- package/dist/commands/resourcesCommands.js +2 -2
- package/dist/commands/sessionCommands.js +2 -2
- package/dist/commands/taskActor.js +31 -39
- package/dist/commands/taskChangeSetCommands.js +5 -12
- package/dist/commands/taskCommands.js +464 -1249
- package/dist/commands/taskContextCommand.js +35 -36
- package/dist/commands/taskExecutionCommands.js +33 -46
- package/dist/commands/taskInputCommands.js +20 -42
- package/dist/commands/taskNextActionCommand.js +9 -9
- package/dist/commands/taskOverviewCommand.js +56 -95
- package/dist/commands/taskRoleRuntimeStatus.js +77 -107
- package/dist/commands/taskUpstreamCommands.js +3 -3
- package/dist/commands/taskWorkspaceCommands.js +7 -79
- package/dist/commands/telemetryCommands.js +32 -124
- package/dist/commands/workflowCommands.js +3 -3
- package/dist/completion/fileCompletionManager.js +1 -1
- package/dist/config/configCatalog.js +4 -6
- package/dist/config/yuiConfig.js +6 -43
- package/dist/context/dispatchContext.js +14 -30
- package/dist/context/roleSessionContext.js +2 -2
- package/dist/context/sessionBootstrapManifest.js +2 -2
- package/dist/context/{runContextPack.js → turnContextPack.js} +58 -73
- package/dist/context/turnInputContract.js +204 -0
- package/dist/context/wakeNotification.js +2 -2
- package/dist/controller/agentRuntimeObserver.js +18 -18
- package/dist/controller/clientRuntime.js +13 -20
- package/dist/controller/controller.js +89 -116
- package/dist/controller/fileSchedulerStoreAdapter.js +511 -742
- package/dist/controller/jobControl.js +17 -17
- package/dist/controller/resourceInventory.js +6 -6
- package/dist/controller/resourceInventoryLinux.js +38 -59
- package/dist/controller/resourceInventoryRpc.js +3 -3
- package/dist/controller/resourceInventoryWorker.js +1 -1
- package/dist/controller/runtime.js +46 -53
- package/dist/controller/runtimeEventInbox.js +23 -31
- package/dist/controller/runtimeEventProcessor.js +15 -15
- package/dist/controller/{runtimeHookRunFence.js → runtimeHookTurnFence.js} +87 -81
- package/dist/controller/runtimeLaunchCoordinator.js +3 -3
- package/dist/controller/runtimeObservationHook.js +11 -8
- package/dist/controller/sessionNotify.js +11 -11
- package/dist/controller/structuredProviderObservation.js +89 -16
- package/dist/coordination/workMailbox.js +309 -579
- package/dist/coordination/workMailboxQueue.js +5 -6
- package/dist/core/controllerClient.js +1 -91
- package/dist/core/controllerServer.js +3 -6
- package/dist/doctor/doctor.js +51 -314
- package/dist/execution/candidateConvergence.js +3 -3
- package/dist/execution/executionGroup.js +32 -33
- package/dist/execution/executionHealth.js +36 -38
- package/dist/execution/resourceBroker.js +12 -12
- package/dist/executor/agentExecutor.js +30 -265
- package/dist/executor/effectiveLaunch.js +9 -19
- package/dist/executor/executorRegistry.js +43 -17
- package/dist/executor/fileRoleLaunchPlanner.js +56 -56
- package/dist/executor/launchPlan.js +3 -3
- package/dist/executor/workspacePreflightClassification.js +16 -16
- package/dist/grant/capabilityGrant.js +20 -25
- package/dist/input/inputRequest.js +12 -12
- package/dist/integration/changeSet.js +9 -13
- package/dist/integration/changeSetManifest.js +1 -1
- package/dist/integration/gitIntegrationService.js +2 -2
- package/dist/integration/integrationQueueService.js +5 -21
- package/dist/integration/overlapDiagnostics.js +2 -2
- package/dist/interaction/operatorPresentation.js +1 -1
- package/dist/job/jobRunner.js +1 -1
- package/dist/lifecycle/canonicalLifecycleEvent.js +25 -25
- package/dist/lifecycle/{exactRunTerminalization.js → exactTurnTerminalization.js} +116 -232
- package/dist/message/message.js +6 -6
- package/dist/observability/executionAudit.js +74 -86
- package/dist/observability/faultClassification.js +7 -24
- package/dist/observability/orchestrationMetrics.js +5 -5
- package/dist/observability/runtimeIdentity.js +34 -101
- package/dist/profile/agentProfile.js +1 -1
- package/dist/release/cliHomeReleaseFence.js +3 -3
- package/dist/release/releaseWorkflowEngine.js +6 -10
- package/dist/release/releaseWorkflowPorts.js +2 -2
- package/dist/release/workflowFileLock.js +1 -1
- package/dist/repository/checkoutSwap.js +1 -1
- package/dist/repository/gitWorkspace.js +0 -13
- package/dist/repository/project.js +1 -1
- package/dist/repository/projectMaintenanceLock.js +1 -2
- package/dist/repository/taskBaseFreshness.js +13 -13
- package/dist/repository/taskWorkspaceCoordinator.js +21 -25
- package/dist/repository/taskWorkspaceIdentity.js +8 -21
- package/dist/repository/taskWorkspacePreparer.js +63 -620
- package/dist/resources/autoResourceGc.js +3 -3
- package/dist/resources/liveReferences.js +1 -1
- package/dist/resources/resourceGc.js +1 -1
- package/dist/resources/sqliteResourceRegistry.js +1 -1
- package/dist/review/reviewDecision.js +7 -7
- package/dist/review/reviewFindingLedger.js +1 -1
- package/dist/review/reviewOutcomeClassifier.js +35 -50
- package/dist/review/reviewRound.js +14 -25
- package/dist/review/reviewerAvailability.js +4 -4
- package/dist/review/taskFinalReviewContractResolution.js +41 -0
- package/dist/role/role.js +6 -3
- package/dist/runtime/agentDriver.js +4 -0
- package/dist/runtime/agentHost.js +151 -36
- package/dist/runtime/builtinAgentDrivers.js +79 -2
- package/dist/runtime/codexAppServerRuntime.js +122 -0
- package/dist/runtime/continuationManager.js +3 -5
- package/dist/runtime/exactControlPlane.js +17 -42
- package/dist/runtime/firstProgressAdvisory.js +1 -1
- package/dist/runtime/index.js +2 -2
- package/dist/runtime/launchDiagnostics.js +2 -2
- package/dist/runtime/lifecycleReservation.js +4 -4
- package/dist/runtime/processExitObservation.js +1 -1
- package/dist/runtime/processExitOutbox.js +0 -32
- package/dist/runtime/promptEnvelope.js +9 -9
- package/dist/runtime/providerContinuation.js +2 -2
- package/dist/runtime/providerContinuationReconciliationService.js +2 -2
- package/dist/runtime/providerRuntimeIdentity.js +76 -24
- package/dist/runtime/recentTurnIds.js +38 -0
- package/dist/runtime/runtimeContinuationProjection.js +2 -2
- package/dist/runtime/runtimeHealthPolicy.js +1 -1
- package/dist/runtime/runtimeObservation.js +58 -21
- package/dist/runtime/runtimeProjection.js +19 -27
- package/dist/runtime/sessionLaunchRequest.js +2 -2
- package/dist/runtime/structuredProviderHost.js +177 -12
- package/dist/runtime/tmuxAdapters.js +46 -11
- package/dist/scheduler/activeRoleTurnDelivery.js +245 -0
- package/dist/scheduler/leaderWakeupProcessor.js +147 -445
- package/dist/scheduler/operatorEvent.js +4 -6
- package/dist/scheduler/resourceQueueProjection.js +71 -0
- package/dist/scheduler/{roleRunLiveness.js → roleTurnLiveness.js} +24 -28
- package/dist/scheduler/{roleRunStall.js → roleTurnStall.js} +162 -247
- package/dist/scheduler/taskExecutionProjection.js +99 -99
- package/dist/scheduler/taskObservabilityProjection.js +10 -10
- package/dist/scheduler/taskWake.js +4 -4
- package/dist/scheduler/wakeReason.js +6 -10
- package/dist/scheduler/wakeupQueue.js +0 -9
- package/dist/setup/setupCommand.js +2 -2
- package/dist/storage/currentTaskStore.js +46 -0
- package/dist/storage/persistenceWorker.js +1 -1
- package/dist/storage/sqliteSchema.js +81 -485
- package/dist/storage/sqliteStore.js +206 -365
- package/dist/storage/storageSchema.js +1 -15
- package/dist/storage/storageVersions.js +8 -9
- package/dist/storage/storeRpc.js +10 -34
- package/dist/storage/taskStore.js +63 -3415
- package/dist/storage/upgrade/recordVersions.js +55 -149
- package/dist/storage/upgrade/upgradeOrchestrator.js +89 -1752
- package/dist/task/completionReadiness.js +5 -5
- package/dist/task/deliveryGuard.js +10 -10
- package/dist/task/nextAction.js +74 -77
- package/dist/task/task.js +2 -4
- package/dist/task/taskRecordReference.js +3 -3
- package/dist/task/taskRecordRetirement.js +1 -1
- package/dist/telemetry/sqliteTelemetryStore.js +53 -53
- package/dist/telemetry/telemetryConfig.js +14 -14
- package/dist/telemetry/telemetryWiring.js +8 -14
- package/dist/turn/turn.js +356 -0
- package/dist/{run/runIdentity.js → turn/turnIdentity.js} +4 -4
- package/dist/verification/gateArtifactStore.js +2 -2
- package/dist/web/assets/client/app.js +1 -1
- package/dist/web/assets/client/components.js +29 -54
- package/dist/web/assets/client/i18n.js +17 -37
- package/dist/web/assets/client/view.js +37 -37
- package/dist/web/assets/shell.js +1 -1
- package/dist/web/assets/styles/cards.js +5 -5
- package/dist/web/assets/styles/widgets.js +1 -2
- package/dist/web/webSnapshot.js +65 -60
- package/dist/workItem/workItem.js +11 -11
- package/dist/workspace/workItemChangeSetManager.js +1 -1
- package/docs/task-local-identity.md +5 -5
- package/i18n/README.zh-CN.md +41 -54
- package/package.json +1 -1
- package/skills/yui-leader/SKILL.md +85 -83
- package/skills/yui-operator/SKILL.md +16 -16
- package/skills/yui-reviewer/SKILL.md +10 -10
- package/skills/yui-runtime/SKILL.md +17 -18
- package/skills/yui-worker/SKILL.md +16 -18
- package/dist/context/runContextContract.js +0 -162
- package/dist/executor/turnCompletion.js +0 -126
- package/dist/review/taskFinalReviewContractEvent.js +0 -1
- package/dist/review/taskFinalReviewContractRebind.js +0 -367
- package/dist/run/agentRun.js +0 -356
- package/dist/run/rejectedYieldAttempt.js +0 -221
- package/dist/run/runControlRequest.js +0 -50
- package/dist/run/yieldReceipt.js +0 -65
- package/dist/runtime/turnCompletion.js +0 -3
- package/dist/scheduler/actionability.js +0 -323
- package/dist/scheduler/activeRoleRunDelivery.js +0 -868
- package/dist/scheduler/activeTaskProgress.js +0 -126
- package/dist/storage/compatibleTaskStore.js +0 -248
- package/dist/storage/migration/baseline.js +0 -78
- package/dist/storage/migration/classifier.js +0 -51
- package/dist/storage/migration/compatibleCodec.js +0 -53
- package/dist/storage/migration/engine.js +0 -147
- package/dist/storage/migration/index.js +0 -33
- package/dist/storage/migration/planner.js +0 -154
- package/dist/storage/migration/productionRegistry.js +0 -3931
- package/dist/storage/migration/registry.js +0 -169
- package/dist/storage/migration/report.js +0 -54
- package/dist/storage/migration/types.js +0 -31
- package/dist/storage/upgrade/homeClassification.js +0 -353
- package/dist/storage/upgrade/homeMigrationTarget.js +0 -595
- package/dist/storage/upgrade/migrationReceipt.js +0 -67
- package/dist/storage/upgrade/offlineUpgradeInventory.js +0 -453
- package/dist/storage/upgrade/productionMigrationRegistry.js +0 -6
- package/dist/storage/upgrade/pseudoLayoutRepair.js +0 -241
- package/dist/storage/upgrade/recordVersionScan.js +0 -176
- package/dist/storage/upgrade/sqliteFileSet.js +0 -50
- package/dist/storage/upgrade/sqliteMigrationTarget.js +0 -375
- package/dist/storage/upgrade/sqliteRecordMigrationTarget.js +0 -305
- package/dist/storage/upgrade/sqliteStateMigration.js +0 -926
- package/dist/storage/upgrade/switchProgress.js +0 -80
- package/dist/storage/upgrade/upgradeReceipt.js +0 -161
- package/dist/storage/upgradeCoordination.js +0 -187
- package/dist/storage/upgradeFence.js +0 -366
- 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:
|
|
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:
|
|
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 !==
|
|
252
|
-
throw new Error("WorkItem must use schemaVersion
|
|
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
|
|
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 !==
|
|
638
|
-
throw new Error("Work Item candidate must use schemaVersion
|
|
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 !== "
|
|
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 === "
|
|
662
|
+
if (candidate.source.type === "turn") {
|
|
663
663
|
validateTaskRecordReference({
|
|
664
664
|
taskId: candidate.taskId,
|
|
665
|
-
localId: candidate.source.
|
|
666
|
-
}, "
|
|
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
|
|
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
|
-
-
|
|
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
|
-
|
|
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 `
|
|
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
|
-
|
|
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
|
|
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.
|
package/i18n/README.zh-CN.md
CHANGED
|
@@ -19,12 +19,12 @@ Yui 不把 Agent 的判断固化成确定性的工作流引擎。核心只负责
|
|
|
19
19
|
- `WorkItem`:唯一的有界工作单元,保存目标、验收条件、依赖、状态和精简结果。
|
|
20
20
|
- `WorkerProfile`:可复用且与 provider 无关的行为模板,保存指令、Skill、访问要求及可选 model/effort hint。
|
|
21
21
|
- `TaskRole`:Task 内可修改的 Worker 实例,可绑定多个 Agent,并分别保存运行配置。
|
|
22
|
-
- `
|
|
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
|
|
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`、权威 `
|
|
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`、`
|
|
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
|
|
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
|
-
|
|
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 中继续,而每个
|
|
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 与关联
|
|
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
|
|
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 从自己的记录中推导当前
|
|
266
|
-
它只失败化该精确 active
|
|
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
|
|
354
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
置信度及有界下一选项。
|
|
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
|
-
|
|
400
|
+
Turn。
|
|
416
401
|
|
|
417
|
-
隔离 Task Role 的结果按“
|
|
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
|
|
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
|
|
444
|
+
yui task turn retire <task>/<turn> --reason "无效的启动记录"
|
|
460
445
|
```
|
|
461
446
|
|
|
462
447
|
这些命令追加 retirement 事实;列表和审计仍保留并标记原 Message、
|
|
463
|
-
WorkItem 或
|
|
464
|
-
它。活动
|
|
465
|
-
|
|
448
|
+
WorkItem 或 Turn,而受管 Turn 上下文、actionability、恢复、Review 证据和调度会忽略
|
|
449
|
+
它。活动 Turn 会先按精确身份终态化;重复废弃是幂等操作。Message 与
|
|
450
|
+
Turn 只能由用户或全局 Operator 废弃,WorkItem 也可由所属 Task Leader
|
|
466
451
|
废弃。
|
|
467
452
|
|
|
468
|
-
长期 Task 不依赖 native transcript 恢复。Leader
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
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 重试时重复输入同一
|
|
585
|
+
自动输入只通过 tmux 投递。每次处理只做一次非阻塞的 process-state readiness 检查;启动阶段忙碌时通过小型有界 mailbox timer 重试,后续忙碌会话通常由 Codex turn-complete 事件再次唤醒。pane 内 receipt 可避免 Controller 重试时重复输入同一 Turn。
|
|
599
586
|
|
|
600
|
-
Role
|
|
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
|
|
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、
|
|
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
|
|