@ckanner/flywheel 0.31.1 → 0.32.1
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/CHANGELOG.md +81 -0
- package/README.md +4 -2
- package/README.zh-CN.md +1 -1
- package/docs/README.md +5 -3
- package/docs/README.zh-CN.md +2 -2
- package/docs/design.md +167 -36
- package/docs/en/configuration.md +106 -11
- package/docs/en/contributing.md +1 -1
- package/docs/en/flow-console.md +88 -24
- package/docs/en/getting-started.md +4 -1
- package/docs/en/investigation.md +127 -83
- package/docs/en/jev-shadow.md +3 -65
- package/docs/en/jev.md +240 -0
- package/docs/en/model-policy.md +7 -0
- package/docs/en/session-recovery.md +39 -0
- package/docs/en/workflow.md +20 -1
- package/docs/plans/2026-11-12-unified-jev-decisions.md +89 -0
- package/docs/plans/2026-11-13-jev-execution-decisions.md +110 -0
- package/docs/plans/2026-11-13-p5-ready-queue-prewarm.md +178 -0
- package/docs/plans/README.md +3 -0
- package/docs/validation/2026-11-12-release-0.31.1.md +58 -0
- package/docs/validation/2026-11-12-session-console-ux.md +46 -0
- package/docs/validation/2026-11-12-unified-jev-decisions.md +93 -0
- package/docs/validation/2026-11-13-dsh-settings-controls.md +104 -0
- package/docs/validation/2026-11-13-jev-execution-decisions.md +140 -0
- package/docs/validation/2026-11-13-p5-ready-queue-prewarm.md +138 -0
- package/docs/validation/2026-11-13-p5-review-closure.md +114 -0
- package/docs/validation/2026-11-13-p5-tracked-runtime-fixes.md +108 -0
- package/docs/validation/2026-11-13-prewarm-receipts-and-expiry-tests.md +92 -0
- package/docs/validation/2026-11-13-release-0.32.0.md +78 -0
- package/docs/validation/2026-11-13-workspace-redesign.md +66 -0
- package/docs/validation/README.md +11 -0
- package/docs/validation/evidence/2026-11-13-p5-npm-candidate.json +54 -0
- package/docs/zh-CN/configuration.md +79 -8
- package/docs/zh-CN/contributing.md +1 -1
- package/docs/zh-CN/flow-console.md +73 -22
- package/docs/zh-CN/getting-started.md +3 -1
- package/docs/zh-CN/investigation.md +91 -60
- package/docs/zh-CN/jev-shadow.md +3 -77
- package/docs/zh-CN/jev.md +192 -0
- package/docs/zh-CN/model-policy.md +5 -0
- package/docs/zh-CN/session-recovery.md +29 -0
- package/docs/zh-CN/workflow.md +15 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,87 @@ their original language.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## 0.32.1 — DSH compatible-series upgrades
|
|
11
|
+
|
|
12
|
+
- Admit compatible DSH 0.2-series rc and patch upgrades from 0.2.1-rc.5, while
|
|
13
|
+
keeping the 0.3 series (including prereleases) outside the compatibility boundary.
|
|
14
|
+
Replace per-version host/SDK allowlists, retain permission and cleanup checks,
|
|
15
|
+
and validate the locked 0.2.2-rc.3 host alongside the legacy host fixture.
|
|
16
|
+
|
|
17
|
+
## 0.32.0 — Session-scoped workbench and bounded runtime decisions
|
|
18
|
+
|
|
19
|
+
- Bound unused DSH prewarm cleanup receipts to 8 KiB of serialized UTF-8, including
|
|
20
|
+
JSON escaping and the trailing newline. Truncate only oversized diagnostic text
|
|
21
|
+
while preserving identity, dispatch and cleanup evidence and normal short errors.
|
|
22
|
+
- Synchronize prewarm expiry fixtures after prepare admission before testing safe
|
|
23
|
+
cold fallback. Cover expiry before admission separately, retaining bounded
|
|
24
|
+
cleanup and rejection of fallback without a trustworthy receipt.
|
|
25
|
+
|
|
26
|
+
- Use accessible switches for the JEV master setting, DSH Review preparation and
|
|
27
|
+
automatic Worktree management. Keep dispatch as a policy selector with explicit
|
|
28
|
+
eligibility, preserve unrelated settings, and discard only invalid hidden drafts
|
|
29
|
+
when disabling a feature. Clarify JEV live-disable behavior in the Settings form.
|
|
30
|
+
|
|
31
|
+
- Add optional ready-queue dispatch for independent Full packets in automatically
|
|
32
|
+
managed Worktrees. Refill bounded Execute/L1 lanes as they finish; keep Review,
|
|
33
|
+
Plan, shared-candidate validation and Git integration behind quiescence barriers.
|
|
34
|
+
- Add optional DSH SDK initialization during serial packet verification. Send the
|
|
35
|
+
real Review prompt only after normal admission, preserve scoped history, and
|
|
36
|
+
bind unused-worker cleanup to durable receipts and a version 3 session ledger.
|
|
37
|
+
Other harnesses retain their public startup paths. Defaults remain batch
|
|
38
|
+
dispatch and no prewarming pending live benefit acceptance.
|
|
39
|
+
- Honor `--pause-before review` after successful parallel batches and ready
|
|
40
|
+
queues. Preserve verified candidates for resume before any Review or Git
|
|
41
|
+
integration, without dispatching their Execute work again.
|
|
42
|
+
- Recheck current activity deadlines and process completion before applying
|
|
43
|
+
queued prewarm timeouts. Stale callbacks cannot cancel a recently active Review,
|
|
44
|
+
overwrite a completed result, or turn failed preparation into a cold call.
|
|
45
|
+
- Keep ready-queue replacements from reconciling a still-running sibling's
|
|
46
|
+
invocation. The coordinator retains live-call ownership, shared accounting and
|
|
47
|
+
history checks; genuinely unfinished prior calls still require recovery.
|
|
48
|
+
- Preserve proven DSH initialization error codes when consuming a prepared
|
|
49
|
+
runtime, so authentication and invalid-request failures keep their normal
|
|
50
|
+
retry rules instead of becoming transport failures.
|
|
51
|
+
- Preserve lowercase and mixed-case JEV credential variable names when freezing
|
|
52
|
+
investigation contracts. Keep the existing configuration length limit and
|
|
53
|
+
compatibility with previously valid preparation records.
|
|
54
|
+
- Extend bounded investigation with explicitly authorized reproduction commands
|
|
55
|
+
in private input copies and exact GET/HEAD requests. Record physical outcomes,
|
|
56
|
+
output limits and cleanup without presenting host processes as OS sandboxes.
|
|
57
|
+
- Add real failure-action decisions under the same JEV master switch: bounded
|
|
58
|
+
repair, approved feedback checks, replanning and existing allowed model/effort
|
|
59
|
+
bindings. Preserve final gates, role isolation and unchanged provider defaults.
|
|
60
|
+
- Persist implementation decision intents, effects and usage across cancellation,
|
|
61
|
+
recovery, investigation handoff and parallel workers without resetting budgets
|
|
62
|
+
or replaying unknown actions. Document engineering results separately from
|
|
63
|
+
deferred live model, performance and desktop acceptance.
|
|
64
|
+
- Unify JEV under one default-off `jev.enabled` setting shared by configuration,
|
|
65
|
+
desktop, investigation preparation/resume and explicit online evaluation. Remove
|
|
66
|
+
the automatic shadow observer and separate legacy request client; preserve a
|
|
67
|
+
migration error for the retired command and read-only legacy config migration.
|
|
68
|
+
- Automatically freeze enabled investigation policy, choose approved evidence
|
|
69
|
+
actions, defer redundant collection and hand evidence to the analyst early.
|
|
70
|
+
Record exact decision/evidence bindings without treating collection choices as
|
|
71
|
+
proven root causes or completed implementation.
|
|
72
|
+
- Recheck current activation and policy before dispatch/adoption, preserve unknown
|
|
73
|
+
request/action recovery and cumulative budgets, and show actual adopted/baseline
|
|
74
|
+
behavior with the last observed JEV status. Retain local offline replay.
|
|
75
|
+
- Update Task/New/Run guidance and paired JEV/configuration/investigation guides;
|
|
76
|
+
preserve Quick/Full eligibility, verification and provider/model defaults.
|
|
77
|
+
- Rebuild the console as a canvas-first workspace with separate Settings, fixed-height
|
|
78
|
+
navigation, compact node actions, actual session receipts, and separate PR/Merge nodes.
|
|
79
|
+
- Expose inline role-history overrides, reconcile explicit Kimi Plan history choices,
|
|
80
|
+
and hide token thresholds when budgets are off without disabling usage accounting.
|
|
81
|
+
- Dispatch ordinary revision-bound node actions directly; keep reason/confirmation
|
|
82
|
+
for reopening completed work and retain all backend admission and recovery gates.
|
|
83
|
+
|
|
84
|
+
- Bind the DSH console to the current conversation, remove cross-session task selection,
|
|
85
|
+
and ignore legacy passive status logs when rebuilding task associations.
|
|
86
|
+
- Move console reads to a session-scoped read-only Remote so polling no longer adds
|
|
87
|
+
JSON command receipts to chat; keep durable records for explicit mutations and recovery.
|
|
88
|
+
- Show locations and action groups directly, align buttons, separate prepared-task
|
|
89
|
+
launch from continuation, and move diagnostics out of the configuration form.
|
|
90
|
+
|
|
10
91
|
## 0.31.1 — Feedback-driven workflows and DSH rc.2 compatibility
|
|
11
92
|
|
|
12
93
|
- Declare DSH `0.2.2-rc.2` alongside `0.2.1-rc.5` and `0.2.2-rc.1`; the host gate
|
package/README.md
CHANGED
|
@@ -36,9 +36,11 @@ retries, budgets, workspaces, and delivery. Use it from the DeepSeek Harness
|
|
|
36
36
|
|
|
37
37
|
For the desktop path, install Node.js **22.18.0 or later**, npm, Git, and a
|
|
38
38
|
supported DSH desktop with its `dsh` command available. The plugin currently
|
|
39
|
-
|
|
39
|
+
accepts the DSH **0.2 compatible series**, starting at **0.2.1-rc.5** and ending before
|
|
40
|
+
**0.3.0** (including its prereleases). Routine rc/patch upgrades within that range do not
|
|
41
|
+
require a Flywheel release. Prepare the accounts
|
|
40
42
|
and CLI tools required by the model routes you choose. DSH itself may require
|
|
41
|
-
a newer Node version; the
|
|
43
|
+
a newer Node version; the DSH 0.2.2 SDK requires Node 24.9 or later.
|
|
42
44
|
|
|
43
45
|
```sh
|
|
44
46
|
npx -y @ckanner/flywheel@latest install
|
package/README.zh-CN.md
CHANGED
|
@@ -19,7 +19,7 @@ Flywheel 是面向 coding agent 的确定性 Go 编排器。模型负责规划
|
|
|
19
19
|
|
|
20
20
|
## 安装
|
|
21
21
|
|
|
22
|
-
使用桌面入口前,请准备 **Node.js 22.18.0 或更高版本**、npm、Git,以及带可用 `dsh` 命令的受支持 DSH
|
|
22
|
+
使用桌面入口前,请准备 **Node.js 22.18.0 或更高版本**、npm、Git,以及带可用 `dsh` 命令的受支持 DSH 桌面。插件采用 **DSH 0.2 兼容系列**范围,从 **0.2.1-rc.5** 起,到 **0.3.0 的任何预发布版之前**;范围内常规 rc/补丁升级无需重新发布 Flywheel。还需准备所选模型路由使用的账号和 CLI 工具。DSH 自身可能要求更高版本的 Node;DSH 0.2.2 SDK 要求 Node 24.9 或更高。
|
|
23
23
|
|
|
24
24
|
```sh
|
|
25
25
|
npx -y @ckanner/flywheel@latest install
|
package/docs/README.md
CHANGED
|
@@ -19,7 +19,7 @@ guides are maintained in English and Simplified Chinese.
|
|
|
19
19
|
| Enable the optional Claude machine backend | [Claude Code Pro](en/claude-code-pro.md) | [Claude Code Pro](zh-CN/claude-code-pro.md) |
|
|
20
20
|
| Resume roles and reconcile interrupted calls | [Recovery and context quality](en/session-recovery.md) | [恢复与上下文质量](zh-CN/session-recovery.md) |
|
|
21
21
|
| Compare session policies with fixed tasks and evidence | [Session evaluation](en/session-evaluation.md) | [会话评估](zh-CN/session-evaluation.md) |
|
|
22
|
-
|
|
|
22
|
+
| Enable bounded JEV decisions with one switch | [JEV decisions](en/jev.md) | [JEV 决策](zh-CN/jev.md) |
|
|
23
23
|
|
|
24
24
|
The [first-task script](examples/create-first-task.sh) creates an isolated
|
|
25
25
|
tutorial repository. The getting started guide explains preparation and
|
|
@@ -49,8 +49,10 @@ to its named source, platform, and checks.
|
|
|
49
49
|
The [feedback-driven workflows and JEV proposal](plans/2026-11-12-feedback-driven-workflows.md)
|
|
50
50
|
(Chinese; historical proposal) explains Auto / Quick / Full, incident investigation,
|
|
51
51
|
short feedback cycles, model policy and bounded semantic decisions. The current
|
|
52
|
-
[
|
|
53
|
-
|
|
52
|
+
[investigation guide](en/investigation.md) and [JEV guide](en/jev.md) describe supported behavior.
|
|
53
|
+
The [P5 implementation plan](plans/2026-11-13-p5-ready-queue-prewarm.md) (Chinese)
|
|
54
|
+
records optional scheduling and runtime preparation; live performance and any
|
|
55
|
+
default adoption require separate evidence.
|
|
54
56
|
|
|
55
57
|
| Collection | Contents |
|
|
56
58
|
| --- | --- |
|
package/docs/README.zh-CN.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
| 接入可选 Claude machine 后端 | [Claude Code Pro](zh-CN/claude-code-pro.md) | [Claude Code Pro](en/claude-code-pro.md) |
|
|
18
18
|
| 角色续接、调用中断与对账 | [恢复与上下文质量](zh-CN/session-recovery.md) | [Recovery and context quality](en/session-recovery.md) |
|
|
19
19
|
| 使用固定任务和证据比较会话策略 | [会话评估](zh-CN/session-evaluation.md) | [Session evaluation](en/session-evaluation.md) |
|
|
20
|
-
|
|
|
20
|
+
| 通过一个开关启用有界 JEV 决策 | [JEV 决策](zh-CN/jev.md) | [JEV decisions](en/jev.md) |
|
|
21
21
|
|
|
22
22
|
[首个任务脚本](examples/create-first-task.sh)用于创建隔离的教程仓库;准备和执行的区别见快速开始指南。
|
|
23
23
|
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
|
|
37
37
|
以下记录保留原日期和语言。提案不代表其中所有能力都已交付;验收记录只对文中明确的源码、平台和检查负责。
|
|
38
38
|
|
|
39
|
-
[反馈驱动工作流与 JEV 方案](plans/2026-11-12-feedback-driven-workflows.md)(中文,历史提案)系统讨论 Auto/Quick/Full、故障调查、短反馈闭环、模型策略和有界语义决策;当前支持的行为见[调查指南](zh-CN/investigation.md)
|
|
39
|
+
[反馈驱动工作流与 JEV 方案](plans/2026-11-12-feedback-driven-workflows.md)(中文,历史提案)系统讨论 Auto/Quick/Full、故障调查、短反馈闭环、模型策略和有界语义决策;当前支持的行为见[调查指南](zh-CN/investigation.md)与 [JEV 指南](zh-CN/jev.md)。[P5 实施计划](plans/2026-11-13-p5-ready-queue-prewarm.md)记录可选调度与运行时准备,真实性能和默认采用策略另需证据。
|
|
40
40
|
|
|
41
41
|
| 分类 | 内容 |
|
|
42
42
|
| --- | --- |
|
package/docs/design.md
CHANGED
|
@@ -84,6 +84,10 @@ DSH 使用原仓库作为 Session header 的 cwd,再通过公开工作目录
|
|
|
84
84
|
|
|
85
85
|
DSH worker 是独立进程,通过正式 SDK 的 stdio JSON-RPC 驱动原生会话。每次调用创建一个 SDK 进程,worker 和 SDK 继承 Go 管理的进程组,不另行 detached。SDK 自己创建的托管命令还须经 SDK 关闭协议排空;正常关闭保留 2 秒用于历史落盘与插件释放,再进行有界 TERM/KILL 收尾。无法证明正常关闭就不能报告成功。不依赖 Teams、OAR、Forge,也不把 external subagent 名称当成原生 LLM provider。
|
|
86
86
|
|
|
87
|
+
可选 `scheduler.prewarm:true` 提前启动一次性 DSH Review 运行环境:在串行 packet 的 Execute 已确认收尾后,与 L1/适用 Quick 检查重叠执行 SDK 启动与 `initialize`。准备阶段不创建或恢复 Session,不发送 prompt,不使用占位推理。新协议以 `--prewarm` 明确选择,与原 v1/v2 的一次性请求保持兼容;最多一个待用 SDK,60 秒 TTL,stdin EOF 始终触发有界清理。正式 Review 仍先通过全部适用验证、预算和角色调用准入,持久化实际 invocation intent 后才能消费同一运行环境。
|
|
88
|
+
|
|
89
|
+
预热绑定实际 worker、SDK 配置、环境、Provider、模型、effort、权限、物理执行与项目目录,并由 Go 另外限制任务、Review scope 和账号 channel。绑定变化、检查失败、暂停或不再需要 Review 时先等待关闭;未知清理阻断后续模型调用。正常闲置过期只有在未尝试发送正式请求、原回执明确未派发、SDK 与整个进程组清理确认、调用未取消且仍有剩余期限时,才可在同一个实际 invocation 下执行一次普通冷启动,不增加业务失败或重置超时。预热不跨任务、角色、引擎进程复用,也不在并行执行 lane 或共享候选中积累 SDK。仅有 Execute 的单步操作和明确暂停在 Review 之前的流程不预热。并行组停稳后才在串行 Review 中准备,不声称已经与该组之前的并发 L1 重叠。原生 Codex Pro、Claude Code Pro 和 Kimi 路径保持各自公开生命周期;当前不声称它们支持这项无 prompt 的预启动。DSH 内的 ChatGPT/DeepSeek Provider 使用同一 SDK 能力判定。
|
|
90
|
+
|
|
87
91
|
Codex Pro worker 是另一种受管进程,直接导入 `dsh-subagent-codex-pro/machine`,不创建 DSH 父模型来再次委派。插件内部启动 Codex app-server,保留其完整 harness 与用户已有 Codex 登录。Go 管理 worker 生命周期;插件拥有 app-server、guardian 和内部取消/清理。正常完成必须同时满足外层 worker 的物理终态及插件完整回执。worker 异常退出不能被解释成插件子进程已清理;取消和未知清理结果均阻止成功。
|
|
88
92
|
|
|
89
93
|
Claude Code Pro worker 同样直接调用公开 machine API。插件先建立独立 guardian 的
|
|
@@ -122,7 +126,7 @@ Quick 首版要求一个里程碑、一个可独立验收的 packet,全部需
|
|
|
122
126
|
|
|
123
127
|
Plan 不得直接修改实现、任务目录外的冻结 oracle,或 `flywheel.config.json`。引擎比较 Plan 前后非契约候选内容;越界改动保留在磁盘上并报错停止,不能自动提交,也不能用回滚删除现场。外部 oracle 修订需要明确的人工任务;运行配置由用户修改后重启。当前不实现外部 oracle 的自动修订、提交与 worktree 同步事务。
|
|
124
128
|
|
|
125
|
-
|
|
129
|
+
所有规划入口,包括失败升级后的修订,都走同一有界 Plan 校验循环;普通入口与带决策身份的重规划共享实现。无效文件的具体校验错误反馈给 planner;不能绕过加载校验直接投入执行。合法契约重新加载后同步现行 packet 集;契约变化必须记录,受影响的 Executor/L1/Review/缺陷注入证据失效,旧证据移入审计历史。
|
|
126
130
|
|
|
127
131
|
合法契约先作范围受限的提交。即使 planner 或用户已自行提交,仍须按当前权威 HEAD 检查同步,不能因为“本次没有新 commit”跳过。已有 worktree 尝试快进到修订检查点,保留未提交实现;重新锚定 base-ref 前检查期间没有混入实现变更,避免把 executor 改动抹出边界 diff。分支分叉或路径冲突时明确停止,不强制重建或丢弃工作。当前仍是保守的 fast-forward 策略,复杂重基由人处理。
|
|
128
132
|
|
|
@@ -189,6 +193,12 @@ L1 与 Review 的 `identity` 绑定:
|
|
|
189
193
|
|
|
190
194
|
Executor 可先跑与当前修改有关的小检查,随后 Go 在实际候选上执行完整冻结门禁。
|
|
191
195
|
不再要求执行者固定重复一次全量验收;最终 L1、适用 L2/L3、独立评审和持久化不减。
|
|
196
|
+
Packet 可选 `feedback-checks` 为最多八项已批准短检查,使用 GateEntry 的 cmd/
|
|
197
|
+
script 与 expect,另可写最多 160 字符的 `purpose`,但不属于完成 gate。用途说明
|
|
198
|
+
作为已批准任务摘要提供给 JEV,不发送命令或原始日志。确认失败后的 JEV 决策
|
|
199
|
+
可选择有用途的短检查;缺用途的条目只供执行者参考,也可复查既有失败 L1 检查。
|
|
200
|
+
检查参数、验证配置、候选及结果都绑定决策;改变检查集合使旧选择失效。执行继续
|
|
201
|
+
使用受管进程、验证超时与环境白名单,不接受 JEV 自行编写命令。
|
|
192
202
|
命令结果包含稳定 check ID、物理终态、期望值、完整失败输出摘要、候选/检查集/
|
|
193
203
|
环境身份以及 UTF-8 头尾片段。诊断展示截断与物理进程输出截断是不同字段;后者
|
|
194
204
|
仍使门禁失败。观察完整只表示命令终态可知,不等于完整测试清单。
|
|
@@ -225,12 +235,26 @@ Quick 复用已有执行者、确定性验证、缺陷注入和单元交付。
|
|
|
225
235
|
|
|
226
236
|
### 4.8 调度与工作区管理
|
|
227
237
|
|
|
228
|
-
新模板显式选择 `scheduler.mode:parallel`、`max-parallel:2`,`worktree.enabled` 默认开启。已有完整配置省略 scheduler 时仍按 serial 运行,显式 serial
|
|
238
|
+
新模板显式选择 `scheduler.mode:parallel`、`max-parallel:2`,`worktree.enabled` 默认开启。已有完整配置省略 scheduler 时仍按 serial 运行,显式 serial 同样保留。`scheduler.dispatch` 缺省为 `batch`,可显式选择 `ready-queue`;`scheduler.prewarm` 缺省为 false。这两个运行时设置独立于 Auto/Quick/Full 和唯一的 `jev.enabled`,安装不改写用户配置,也不因新增能力提高默认并发。
|
|
239
|
+
|
|
240
|
+
Quick 只有一个 packet;Full 仅对冻结契约中声明 `schedule.after` 和互不重叠 `schedule.writes`、依赖已经交付的就绪 packet 并发执行。旧契约未声明这些范围时保持串行,不把口头“独立”当作调度依据。`batch` 一次选择不超过最大并发的成员,等待整批 Execute/L1 收尾后推进后续阶段。
|
|
241
|
+
|
|
242
|
+
`ready-queue` 仅适用于 Full、parallel、最大并发大于 1 且自动管理独立 worktree 的路径。协调器在固定契约轮次中扫描全部已就绪、互相独立的 packet,以有界窗口运行;某个 worker 的 Execute/L1 完成后,空位即可接纳下一项,不等待其他长任务。依赖仅在真正交付后满足,不因 Execute 完成就提前接纳依赖者。Review、Plan 修订和 Git 集成继续等待全部已派发 worker 停稳后串行执行;发生契约修订后重新选择,不能把旧队列用于新契约。关闭自动管理时,包括可能登记外部 worktree 的任务,仍使用既有 batch 路径。
|
|
243
|
+
|
|
244
|
+
自动管理开启时,每个 worker 派发前必须成功准备并持久化其独立 worktree。ready queue 的首个窗口须全部准备成功才开始派发,随后每个补位分别准备并 CAS 保存;准备失败停止新接纳、取消并等待已启动工作,不退回共享目录并发。尚未接纳的队列成员不创建目录、不改 packet 状态、不写模型调用意图。尝试耗尽或空转也停止补位,停稳后仅处理实际已启动成员的恢复或升级。串行执行保留已有 worktree 不可用时的 `in-place` 回退及原因记录。
|
|
245
|
+
|
|
246
|
+
所有 worker 使用私有状态视图,由一个协调器串行合并本 packet 的状态、session 和用量,再 CAS 保存。全局预算和实际账号渠道并发限制在派发前重新接纳,hard 预算只允许一个模型调用在飞,确认计费后才接纳下一次。取消等待全部已派发 worker 收尾。`state.scheduler` 记录当前运行载入的策略;下次启动可载入更新的调度设置,但原调用、未完成共享批次及未知回执仍须按原身份核对,切换策略不能清除这些责任。
|
|
247
|
+
|
|
248
|
+
同一轮的 worker 从派发前的会话账本快照开始维护本 packet 的调用,ready queue 补位也使用这份快照,不把当前仍在运行的兄弟任务调用复制成自己的恢复对象。协调器持续保有全部实际调用、计费与跨 packet 历史归属,原有未核对回执仍须在恢复时处理;某个 worker 的真实未知结果或终态回执保存失败,均在协调器合并到阻断事实时立即停止新接纳并取消,不等该 worker 循环返回,不能被快照隔离掩盖。已经取得的可信回执仍完成计费;无法保存的回执保持未确认,不能伪造已记账。
|
|
229
249
|
|
|
230
|
-
|
|
250
|
+
独立 worktree 的并行路径同样遵守 `--pause-before review`。本轮 Execute/L1 全部通过且已启动 worker 停稳后,先保存任务 `paused`,保留 packet 的 `l1-passed`、工作区与候选证据,不进入 Review 或 Git 集成。batch 的本轮是已接纳的有界批次;ready queue 可按原规则补完固定独立候选集,再在第一个 Review 前暂停。未接纳项保持原状态。恢复核对原候选后复用有效 Execute/L1 证据;之后吸收已交付成果改变了候选,仍须复验。
|
|
231
251
|
|
|
232
252
|
独立 worktree 中 Execute/L1 可并发,Review、集成和最终 gate 保持串行。后完成分支先吸收已验证的集成 HEAD,原 L1/Review 证据失效,在合成候选上重新验证。集成冲突保留 worktree 并停止,不丢弃或强推成果。
|
|
233
253
|
|
|
254
|
+
显式 `prewarm:true` 允许串行 packet 在 Execute 完成后,与确定性验证重叠准备下一个 DSH Review runtime,每次至多一个。准备只执行 SDK 初始化,不创建或恢复 Session、不提交模型 prompt;真正 Review 仍须等待完整前置验证、预算和候选身份核对。并行 Execute/L1 lane 不预热,独立并行组停稳后的串行 Review 路径才可准备;共享候选批次不预热。主要重叠机会是串行 Execute 后的 L1 与适用 Quick 检查,不能把并行 lane 的全部 L1 时间计作被隐藏的等待。
|
|
255
|
+
|
|
256
|
+
角色历史与权限保持隔离,准备身份不匹配或未使用的 runtime 必须有界收尾,未知清理仍阻断。实例安全过期且尚未尝试正式 start 时,只有精确未派发回执、SDK 和进程组清理及剩余时限均成立,才可在同一已持久化 invocation 中冷启动一次,不增加业务尝试或重置预算。其他 harness 保持冷启动,session 续用本身不算预热。该流水边界没有让 Review 推理、Plan 或 Git 集成与仍在写入的 worker 重叠。真实速度、资源消耗与是否调整默认值另行验收,见 [P5 实施计划](plans/2026-11-13-p5-ready-queue-prewarm.md)。
|
|
257
|
+
|
|
234
258
|
关闭自动管理不禁止并行,也不禁止用户或执行者自行选择 worktree。共享同一 checkout 的批次只并发 Execute;Go 持久化批次成员和初始基线,执行回执按声明写入范围绑定候选。全部 worker 收尾后,逐 packet 串行运行确定性检查和独立 Review,证据绑定完整共同候选。共享边界按声明范围投影,同时拒绝批次范围外和禁止路径的改动;这不能归因具体进程,也不是文件隔离保证。
|
|
235
259
|
|
|
236
260
|
共享批次任一成员返修改变共同候选,都使旧证据失效并要求重验。只有全部成员在同一候选通过后才能统一提交,并在一次 CAS 中完成整组;保存失败不能乐观报告部分完成,也不能逐个提前提交同目录中的未评审改动。混合批次先交付共享目录,再重新验证并集成外部 worktree。手动集成或终验不能绕过批次屏障,需继续完整流程。未知派发、结果或清理始终阻断。
|
|
@@ -249,14 +273,20 @@ Go 校验仓库、基线、分支、候选和独占归属后登记;下一次
|
|
|
249
273
|
|
|
250
274
|
`state.json` 仅由 `internal/state` 写入:schema 校验、进程间锁、revision CAS、临时文件与原子 rename。任务生命周期另持 `.run.lock`;lease 是并发运行与停止完成的判断依据。运行信息文件原子更新,包含用于关联本次运行的随机 control token;PID 只作展示,不作为停止授权。日志、pid、锁、停止请求及临时控制文件不进入提交。
|
|
251
275
|
|
|
252
|
-
`state.sessions`
|
|
253
|
-
|
|
254
|
-
v2
|
|
276
|
+
`state.sessions` 是可选的角色账本。新引擎兼容 v1/v2/v3;普通新增调用或人工接管至少使用 v2,
|
|
277
|
+
第一次预热提升为 v3,此后调用、接管和清理均不降级。账本包含运行归属与绑定快照;旧状态缺字段仍可读取,未知版本或损坏结构明确失败。
|
|
278
|
+
v2 阻止更早引擎忽略 `handoff`,v3 阻止只认识 v1/v2 的引擎忽略新的预热清理责任。配置的 session
|
|
255
279
|
policy-version 仍为 1,worker、lifecycle 和 recovery 协议分别版本化。记录按 Plan/里程碑、Execute/packet、Review/评审职责、
|
|
256
280
|
Judge/里程碑和独立第二意见分开,保存实际任务与物理 cwd、绑定/目标/契约身份、
|
|
257
281
|
generation、句柄、协议、resume-candidate、action/reason,以及最新调用的
|
|
258
282
|
intent/received/consumed/blocked、派发/结果/清理和用量事实。
|
|
259
283
|
|
|
284
|
+
`state.worker-prewarm` 记录至多一个尚未交接或清理的准备意图,保存随机 ID、Review scope、运行身份和绑定摘要,不保存 prompt、凭证或可复用会话。先 CAS 保存意图,后启动 SDK;正式调用意图持久化后交接清理责任。未消费的终态回执在 `.control/prewarm/<id>/`,通过私有、有界文件与排他发布持久化,确认文件和目录同步,受现有 volatile 规则排除出 Git。恢复仅接受精确 ID/摘要、明确未发送 prompt、SDK 清理确认、外层 worker 及其原进程组均已退出;PID/进程组 ID 只用于检查退出,不能授权终止其他进程。没有可信证据、仍存活或标识被复用都保持阻断;重启不会续用预热实例,关闭优化也不能擦除旧责任。启动前 CAS 失败记录本地确定的 no-process 回执,不能为了补回执启动进程。
|
|
285
|
+
|
|
286
|
+
Node 发布的预热终态回执与 Go 读取端共用 8192 字节上限,按完整 JSON 的 UTF-8
|
|
287
|
+
序列化结果计数,包含转义和末尾换行。过长的 `error` 诊断仅保留带截断标记的前缀,
|
|
288
|
+
正常短错误不变;身份、未派发和清理事实保持完整,恢复检查不因诊断被截断而放宽。
|
|
289
|
+
|
|
260
290
|
调用安全记录与历史复用分别控制。Codex Pro、Claude Code Pro、DSH、Kimi 的主任务调用在 fresh/scoped
|
|
261
291
|
下都先保存 intent 再派发。`last.persistent` 表示是否参与通用角色历史;只有它为 true
|
|
262
292
|
的可信结果才保存可复用句柄。fresh 的原始后端会话标识仍可保留在回执中,既有 Kimi
|
|
@@ -343,10 +373,24 @@ Git 完成顺序:验证身份仍有效 → 在 worktree 只提交实现路径
|
|
|
343
373
|
定义,`internal/state` 独占写入。准备保存、动作意图、观察、报告和恢复均使用版本化
|
|
344
374
|
CAS 与原子持久化。目标是调查或原范围内调查后修复;Quick/Full 是后续实现策略。
|
|
345
375
|
|
|
346
|
-
|
|
347
|
-
|
|
376
|
+
受管动作包含 Go 文件读取、字面量搜索、目录名字读取,以及显式批准的 `run_command`
|
|
377
|
+
和 `http_read`。文件动作继续受精确路径、打开 inode、文件/输出字节、总动作数与
|
|
378
|
+
首次准备 deadline 限制;目录读取只授权名字,不递归授权后代内容。
|
|
379
|
+
|
|
380
|
+
命令冻结 argv、输入文件、环境变量名、超时和预期退出码。引擎复制精确批准的普通
|
|
381
|
+
文件到私有副本后执行,不隐式拼接 shell;解释器须明确出现在已批准 argv 中。
|
|
382
|
+
`execution-boundary: host-process` 声明真实权限边界:副本不构成 OS 沙箱,不能
|
|
383
|
+
保证命令无法读取副本外文件或访问网络。需要强隔离时批准实际容器/沙箱入口。
|
|
384
|
+
HTTP 仅 GET/HEAD 精确 URL,HTTPS(loopback 可 HTTP),禁 URL 凭据、fragment、
|
|
385
|
+
重定向与环境代理;header 凭据只存环境变量名。方法名称不替代对端操作授权。
|
|
386
|
+
单动作超时、响应/输出上限与总 deadline 一起生效,回执记录实际终态、输入身份
|
|
387
|
+
和清理;未知执行或清理失败阻断,保留现场,不重放。预期非零退出可作为复现事实,
|
|
388
|
+
但不是提前结束调查所需的成功观察;外部数据不能改变权限、预算或规则。
|
|
389
|
+
|
|
348
390
|
同一 `.run.lock` 与原 token 停止协议拥有后台生命周期,另有准备状态短写锁;宿主/
|
|
349
|
-
skill
|
|
391
|
+
skill 不执行循环。Go 按唯一 `jev.enabled` 总开关冻结策略;单一合法动作直接执行,
|
|
392
|
+
多项语义选择才考虑 JEV。有效观察允许有证据引用的冗余动作跳过或提前转入报告,
|
|
393
|
+
这些控制选项由引擎生成,不扩大原动作权限,也不把取证决定当成根因结论。
|
|
350
394
|
|
|
351
395
|
动作先持久化唯一 invocation,再执行并先保存不可覆盖回执,最后 CAS 消费。未知动作
|
|
352
396
|
阻断,不能换任务/会话/模式重放。JEV 的可选未知请求单独只读对账,保留未知用量,
|
|
@@ -367,10 +411,14 @@ DSH 的 `ACCOUNT_SIGN_IN_REQUIRED`、`ACCOUNT_TOKEN_INVALID` 精确映射为 AUT
|
|
|
367
411
|
|
|
368
412
|
DSH 结构化 result.error.code 经协议身份、终态与既有码表校验,并确认 error 对应物理退出码 1 后,以独立 ErrorCode 字段穿过 driver、编排、辅助模块和诊断,不再把 AUTH 拼进文本后依赖英文关键词重猜。矛盾的退出码、超时、spawn、signal、截断、取消或未确认清理等进程事实不能被 provider 码掩盖;无结构化码的旧 driver 保留既有文本分类优先级。DSH error 帧的 settled:false 明示 SDK 清理尚未确认;已启动 worker 缺少可信终态回执(包括协议身份损坏、缺失终态或坏尾帧)也不能证明 SDK 已正常关闭。两者均保留 CleanupError 并停止自动重试,而不是推断进程仍在运行;正常启动前失败的 settled:true 不作此判断。SDK 的坏尾帧和 EOF 未换行残帧也必须覆盖先前的 provider 错误;不能在 SDK 协议已损坏后包装出可信的 AUTH/QUOTA 供后备决策。外部取消仍保持 cancelled。
|
|
369
413
|
|
|
414
|
+
预热初始化的 `warm-result.error.code` 遵守相同规则:完整且身份匹配的输出、原私有未派发清理回执和预期物理退出均成立后,保留已知错误码供原有重试/渠道后备判断。认证、参数或服务错误不能因过滤预热控制帧而统一变成 TRANSPORT,也不能被当作安全过期取得额外冷启动。未知码和矛盾进程事实不取得可信结构化分类;正常 TTL 过期仍遵守原有精确回执与剩余期限条件。
|
|
415
|
+
|
|
370
416
|
Codex Pro 的结构化 stage/category/HTTP 状态由 driver 映射到这组既有码;空答案使用明确的 `empty response` 诊断并归入 EMPTY_RESPONSE,不增加另一套重试或付费降级策略。
|
|
371
417
|
|
|
372
418
|
退避、渠道降级、尝试次数和空转检测仍由配置/状态决定。默认没有跨渠道付费降级。driver 的 settled 与 exit code 是两个独立条件;缺终态、丢尾帧、输出截断不能变成成功。
|
|
373
419
|
|
|
420
|
+
DSH 预热承载的正式调用按最近可观察活动刷新 idle deadline。计时回调执行时必须重新核对当前期限与进程状态,已排队的旧回调不能取消期限已经刷新的调用。准备 TTL 在已接收 worker 终态或进程结束后均不得改写过期状态,不能把已确认的初始化失败变成允许冷启动的安全过期;终态已到但进程仍活着时,TTL 后的原关闭宽限继续生效。worker 明确报告的真实过期仍保留原回退条件,真正超时仍执行原有界收尾。
|
|
421
|
+
|
|
374
422
|
清理是否已确认另于 provider 错误码判断。已启动的 Codex Pro worker 丢失可信清理回执时,外层 worker 的退出不证明独立 guardian/app-server 进程组已经静止;driver 必须记录 `CleanupError`。所有模型阶段在记录回执和计量后遇到该字段即保存升级记录、保留工作区并停止本次运行,禁止传输重试、渠道降级、Plan 冷启动和下一任务。支持的主任务适配器还独立判断 dispatch/outcome:清理已确认也不能使未知派发或未知结果变为可重试。只有可信调用事实允许时才执行既有错误重试策略。恢复前确认遗留进程已停止只解决清理事实;没有可信结果回执仍阻断,固定等待也不能冒充证明。
|
|
375
423
|
|
|
376
424
|
SIGTERM 先取消运行上下文,再终止本任务登记的进程组。运行栈完成缺陷恢复等清理后返回 interrupted,CLI 退出 143。进程组清理只作用于本次拥有的子进程,不扫描并杀死之后创建的其他任务。显式脱离进程组的外部进程不属于普通 POSIX 进程组保证;DSH worker 必须完成 SDK shutdown/退出确认,SDK 负责排空自身托管命令,外层仍由 Go 看门狗兜底。
|
|
@@ -474,30 +522,75 @@ Provider 内部排队/推理/工具细分保持 unknown。已测边界包括
|
|
|
474
522
|
Verify、Review、Judge、受管调用、重试等待、持久化和调查。宿主准备对话不可观察的
|
|
475
523
|
耗时不填零,也不把离线 fixture 的耗时宣称为真实模型加速。
|
|
476
524
|
|
|
477
|
-
### 8.2
|
|
525
|
+
### 8.2 JEV 唯一总开关
|
|
526
|
+
|
|
527
|
+
`jev.enabled` 是所有在线 JEV 路径的唯一启用设置,默认 false。开启后,在调查及
|
|
528
|
+
确认失败后的执行决策点自动使用采用策略;正常任务没有独立 shadow/advisory/adopt 或分功能
|
|
529
|
+
开关。关闭时没有 JEV 请求、自动采集或建议采用,沿用原确定性调查动作与实现流程。
|
|
530
|
+
Task/New/Run 共用 Go 创建时的配置解析;宿主提供调查目标与动作,不手写决策模式。
|
|
478
531
|
|
|
479
|
-
|
|
532
|
+
旧 `observeShadow`、独立 `internal/shadow` 请求客户端已移除。`jev-shadow` 只在
|
|
533
|
+
配置加载时校验并迁移连接信息,绝不把旧本地捕获授权提升为在线采用;明确的 `jev`
|
|
534
|
+
对象优先。编辑器保存统一字段并移除旧 key,保留原备份与 CAS。隐藏 `shadow` 命令
|
|
535
|
+
只返回迁移错误;历史快照、schema 和验收记录仍可保留。用户指南见 [JEV](zh-CN/jev.md)。
|
|
480
536
|
|
|
481
|
-
|
|
537
|
+
创建调查时冻结有效目标、固定模型、凭据变量名、数据类别、阈值和调用上限。运行中
|
|
538
|
+
关闭总开关,在请求派发前、返回后及采用前均阻止后续 JEV 效果;已派发请求仍用原
|
|
539
|
+
身份对账,不重发、不清空用量。原本开启的运行重新开启后沿用同一预算;原本关闭的
|
|
540
|
+
准备记录保留无 JEV 的原路径,新准备记录才获得新策略。目标不相容或当前权限/
|
|
541
|
+
限制收紧时,原运行记录 policy-changed 并回到合法基线,不改写冻结契约。状态中的
|
|
542
|
+
jev-status 是最近观察值,界面不能把它当作即时重新读取的配置。
|
|
543
|
+
|
|
544
|
+
JEV 配置接受 1–120 位 ASCII 字母、数字和下划线组成的凭据变量名,首位为字母或
|
|
545
|
+
下划线;冻结契约保留大小写,不将名称转成大写。准备记录继续接受旧 schema 已允许
|
|
546
|
+
的最长 128 位大写名称,保证已有冻结记录可读;这不扩大新配置的 120 位上限。
|
|
482
547
|
|
|
483
548
|
### 8.3 有限决策与原子采用
|
|
484
549
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
550
|
+
`internal/decision` 消费版本化 Snapshot/Policy;运行策略由总开关生成 off 或
|
|
551
|
+
adopt,offline/shadow/advisory 保留供旧记录读取和明确评估工具使用,不构成另一个
|
|
552
|
+
任务开关。调用方仅开放自己实现了执行与恢复的动作族:调查动作及取证控制、失败
|
|
553
|
+
后的局部修复/补充反馈/重规划,以及冻结允许集内的模型/effort。协议枚举不提供
|
|
554
|
+
执行权,实际候选由 Go 的前置条件与绑定生成。一个原生请求配对
|
|
555
|
+
applicability Noul 与 action Choice,保存完整概率;阈值是配置参数,不是实测正确率。
|
|
556
|
+
|
|
557
|
+
取证控制只在已有成功、未截断、与假设关联且候选摘要仍匹配的观察满足前提时,
|
|
558
|
+
允许选择跳过冗余动作或提前结束收集。效果保存具体 decision、观察引用和动作绑定;
|
|
559
|
+
跳过后回到 ready 继续其他动作,提前结束才进入 awaiting-report。结束后重复 Run
|
|
560
|
+
不重新开始取证,Finish 仍可提交分析报告。取证结束不标记假设为 supported/
|
|
561
|
+
contradicted,不生成根因或代码完成结论;报告及后续验收仍负责其原有语义边界。
|
|
562
|
+
|
|
563
|
+
执行决策只在确认结束的失败边界发生,不替代渠道错误重试,不在每次工具调用前
|
|
564
|
+
固定增加选择。可选动作包括在原边界继续修复、运行已批准的反馈检查、请求原有
|
|
565
|
+
受限规划和选择 execution-policy 中的合法完整绑定。补充检查只增加反馈,最终
|
|
566
|
+
完整 L1/适用 L2/L3 与独立评审不减少;Plan 仍遵守次数、范围、契约和持久化要求,
|
|
567
|
+
Quick 请求重规划先保存 Full 升级。模型/effort 切换不重置尝试或预算,保持严格
|
|
568
|
+
冷启动与权限身份。没有多个合法选项、证据不可靠或实际动作未知时走原基线/阻断。
|
|
490
569
|
|
|
491
570
|
请求前持久化意图、独占调用额度,unknown 计入上限且不重发。采用前复核任务/run/
|
|
492
|
-
revision
|
|
493
|
-
invocation
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
571
|
+
revision、契约、候选、观察、当前启用状态和绑定;receipt 消费、decision pending 清理
|
|
572
|
+
与动作 invocation 或取证效果必须原子 CAS 后生效。未知动作仍阻断。请求 journal
|
|
573
|
+
写入不改变任务 revision,其他事实变化使建议失效。硬 token budget 无可实施的单次
|
|
574
|
+
上限时跳过可选请求,不以估算预留或未知为零。JEV 无权扩权限、任意换渠道、提高
|
|
575
|
+
预算、取消验收或宣布完成。
|
|
576
|
+
|
|
577
|
+
实现任务维护自己的持久决策账本;调查移交携带已消耗调用和已知/未知用量。任务
|
|
578
|
+
所有者协调并行 worker 的预约与消费,共用调用上限,不因 packet、恢复或切换模型
|
|
579
|
+
获得新额度。决策采用保存可恢复的动作效果,重复恢复不重复检查、重规划、模型切换
|
|
580
|
+
或用量导入。当前总开关关闭或目标/数据/预算政策不相容时不再采用,但仍按冻结
|
|
581
|
+
身份核对已派发回执。显式在线 evaluation 使用独立实验账本,不改任务运行策略。
|
|
582
|
+
|
|
583
|
+
重规划另在派发前保存 `replan-running` 与原 Plan invocation 边界。恢复只在本次
|
|
584
|
+
新调用的回执、决策原因、当前 guard 和 Plan checkpoint 均一致时复用结果;仅有
|
|
585
|
+
旧的 consumed 标志不构成证明,无法确认时阻断而不重发。反馈动作的 running/
|
|
586
|
+
unknown 或候选发生变化同样阻断,不能靠关闭 JEV 绕过未确认的真实动作。
|
|
587
|
+
执行决策使用 Snapshot v2 的失败策略问题,历史调查 v1 的问题与身份哈希保持兼容。
|
|
588
|
+
|
|
589
|
+
`decision replay` 读取冻结输入与原生响应,强制 offline,不读密钥、不联网、不写
|
|
590
|
+
账本;关闭总开关仍可查看旧记录。`decision evaluate` 服从同一总开关和作用域解析,
|
|
591
|
+
从配置取得固定目标/凭据;显式参数必须匹配,数据取交集、阈值取更严格值、次数和
|
|
592
|
+
超时不得放宽配置。它使用独立私有 journal,强制 advisory,不执行动作、不改任务。
|
|
593
|
+
同一输入/journal 读取原回执;未知不重发。具体操作见双语 JEV 指南。
|
|
501
594
|
|
|
502
595
|
## 9. 权限与宿主能力
|
|
503
596
|
|
|
@@ -530,7 +623,10 @@ Go 的 `make quality-gate` 执行 vet、gofmt 和 **逐函数 100% statement cov
|
|
|
530
623
|
| 角色历史、恢复和质量策略 | [会话生命周期提案](plans/2026-11-07-session-lifecycle.md) | [P1/P2 验收](validation/2026-11-07-session-lifecycle.md)、[P3/P4 验收](validation/2026-11-08-session-p3-p4.md) |
|
|
531
624
|
| 可选 Claude machine API | [Claude 指南](zh-CN/claude-code-pro.md) | [Claude 接入验收](validation/2026-11-07-claude-code-pro.md) |
|
|
532
625
|
| 流程控制台、任务发现和工作台 | [控制台方案](plans/2026-11-08-flow-console.md)、[任务发现](plans/2026-11-10-task-discovery.md)、[工作台](plans/2026-11-10-workbench-redesign.md) | [控制台](validation/2026-11-09-flow-console.md)、[任务发现](validation/2026-11-10-task-discovery.md)、[工作台](validation/2026-11-10-workbench-redesign.md) |
|
|
533
|
-
|
|
|
626
|
+
| JEV 总开关与取证决策 | [统一 JEV 方案](plans/2026-11-12-unified-jev-decisions.md) | [实现验收](validation/2026-11-12-unified-jev-decisions.md) |
|
|
627
|
+
| JEV 执行决策与诊断实验 | [扩展方案](plans/2026-11-13-jev-execution-decisions.md) | [离线工程验证](validation/2026-11-13-jev-execution-decisions.md) |
|
|
628
|
+
| P5 就绪队列与一次性 DSH 预热 | [实施计划](plans/2026-11-13-p5-ready-queue-prewarm.md) | [工程验证与收益边界](validation/2026-11-13-p5-ready-queue-prewarm.md) |
|
|
629
|
+
| 历史影子评估(已退役) | [原 JEV 方案](plans/2026-11-10-jev-shadow.md) | [历史验收](validation/2026-11-10-jev-shadow.md) |
|
|
534
630
|
| 0.30.2 发行与安装 | [发行流程](zh-CN/releasing.md) | [发行记录](validation/2026-11-11-release-0.30.2.md) |
|
|
535
631
|
| 0.31.0 发行与安装 | [发行流程](zh-CN/releasing.md) | [发行记录](validation/2026-11-11-release-0.31.0.md) |
|
|
536
632
|
|
|
@@ -548,7 +644,10 @@ Auto/Quick/Full、角色历史、可信回执、Codex/Claude 的持久化
|
|
|
548
644
|
|
|
549
645
|
`control launch` 默认 mode=auto;`control start` 和 `run` 也接受可选 `--mode auto|quick|full`,省略时沿用 Spec 或持久化策略。status、stop、step、config、doctor 不接受模式切换。`--only` 运行指定子环至合法终态或有界停止;`--only execute` 仍为部分 Execute/L1,不是 Quick。Quick 的单步 Review 使用最终评审协议,单步 Verify 包含候选 L2/L3;单步 Plan 需显式升级 Full。`--pause-before review` 保留已验证候选用于下次恢复,不能与 `--only` 并用。
|
|
550
646
|
|
|
551
|
-
|
|
647
|
+
`decision replay|evaluate` 在完成评估后输出单份 JSON,均不执行动作。replay 完全离线,
|
|
648
|
+
evaluate 服从统一 JEV 总开关。退出码 0=成功、1=输入/配置错误、3=失败/未知请求、
|
|
649
|
+
143=取消;输入或配置解析前失败可不产生报告。旧 `shadow` 入口隐藏并返回迁移错误,
|
|
650
|
+
不创建快照或请求。详见 [JEV 指南](zh-CN/jev.md)。
|
|
552
651
|
|
|
553
652
|
`control investigate` 从有界 JSON stdin 接受 start/run/status/report/cancel。
|
|
554
653
|
start 仅保存准备,run 需 observed revision 并在后台派发 `run --investigate`;该 worker
|
|
@@ -584,21 +683,43 @@ doctor 的状态为 pass/fail/warn/unknown/skipped,必需检查 fail 才使 ok
|
|
|
584
683
|
|
|
585
684
|
桌面控制面通过 `ctx.slots.inject()` 在 `conversation.view` 列表注册独立的 `flywheel` 条目,排在内置“对话/轨迹/统计”之后。空白新会话首页尚未显示这排视图。插件提供运行画布、全局/项目配置和运行记录;不替换内置条目,不接管输入框、模型选择器或右侧栏,不另建浮动侧栏或底部弹层。
|
|
586
685
|
|
|
587
|
-
画布按 Plan/拆分、调度、任务分支、汇总终验、PR 和 Merge
|
|
686
|
+
画布按 Plan/拆分、调度、任务分支、汇总终验、PR 和 Merge 展示流程。节点详情在视图内直接展示结果、操作、本次配置与真实角色会话;进入会话和查看证据使用各自的详情页;任务节点可展开 Execute、L1、Review 和 Git 交付子图。实际位置由助手与引擎提供,项目工作区、实际执行目录、任务资料位置分别只读显示,没有任务/项目路径输入框。窄窗口提供列表与跨分页定位,长路径、字段和错误在内容区换行或局部滚动。
|
|
588
687
|
|
|
589
688
|
`run.kind` 与 `control.kind` 一致的单阶段操作优先展示“本次运行”及真实回执。仅 Review 的默认画布为 L1 → Review,明确记录结论并说明整体交付尚未完成;完整流程可显式展开。单阶段通过不自动启动后续阶段,不把任务改为 completed,失败、取消和未知结果不能沿用旧绿色裁决。Skill 加载、准备任务和实际启动分别报告。
|
|
590
689
|
|
|
591
690
|
外部 plain-JS 客户端只运行时导入共享 React,不导入 `ui-primitives`、`client-store` 或其他 Harness Client 包。按钮和输入框由插件自己实现,参照已核对的宿主结构、尺寸和交互,颜色只依赖 `--dsw-alias-*`,字体继承宿主。CSS Modules 在构建时编译,样式由 React 视图拥有;不从业务代码操作全局 DOM,也不新建 iframe、侧栏或窗口级遮罩。视图位于 Conversation 已有标题栏之下,不重复叠加全局页面的 macOS 顶部留白。
|
|
592
691
|
|
|
593
|
-
插件通过公开 `sessionProjections` 注册 `flywheelTask` 投影,消费本会话的命令/工具/PTC 调用与结果,客户端用 `useProjection('flywheelTask')` 读取。launch、start
|
|
692
|
+
插件通过公开 `sessionProjections` 注册 `flywheelTask` 投影,消费本会话的命令/工具/PTC 调用与结果,客户端用 `useProjection('flywheelTask')` 读取。launch、start 及助手通过 `flywheel_control status` 准备任务的关联可在重载后重建;fork 不继承父会话任务。待确认操作保留原目标身份,防止重载后误发重复启动。组件不回写 state.json,也不伪造 worker 事件。
|
|
693
|
+
|
|
694
|
+
会话视图不提供任务选择器。只接受当前会话投影和精确匹配 `hostSessionId` 的运行索引;其他会话及无归属记录不可见。显式工具关联优先;没有投影时按开始时间选择最近的本会话任务,再请求 Go 状态。单纯打开页面、刷新或旧版 UI 产生的 `/flywheel status` 日志不能创建新的任务关联。未确认操作始终锁定原目标,fork 不继承关联。无关联时显示空状态,独立终端任务需要在目标会话通过 `flywheel_control status` 显式关联,不能按目录猜测或扫描磁盘。
|
|
594
695
|
|
|
595
|
-
|
|
696
|
+
自动发现、轮询、配置读取、节点与指标读取使用公开 Typert `flywheelConsole/read` Remote,宿主解析实际 Agent/Session,按会话过滤运行并核对任务身份;该入口只允许读取,不能启动或修改任务。读取不执行 slash command,不追加会话事件,不把 JSON 刷进聊天。UI 变更和未知结果的显式 status 核对仍走有持久回执的命令,确保重载后可恢复操作锁;人工命令及模型工具保持原 JSON 协议,不删除历史事件。读取通道不可用时显示错误,不回退到刷屏命令。
|
|
596
697
|
|
|
597
|
-
|
|
698
|
+
项目、任务记录和分支在有值时直接显示。阶段操作、来源、失败证据、会话入口及配置操作使用普通分组,不提供折叠控件;视图导航与画布子图导航仍保留。已有运行只提供适用的继续/停止操作,准备好的新任务才显示 Auto/Quick/Full 启动选项。主工作区只有流程与记录,设置独立进入。设置使用运行方式、模型与会话、预算与重试、JEV、高级与诊断五个分类;重新读取、完整 JSON 和原始回执放在高级与诊断,范围及保存/撤销/恢复默认保持固定位置。窄窗口的设置导航行固定 54px、每项 36px;触控指针下按钮为 44px,并使用 5px 上下留白,不与内容分享最小高度。离开设置、切换范围和重新读取保护未保存草稿。
|
|
699
|
+
|
|
700
|
+
模型与会话表直接编辑模型、推理和角色继承/fresh/scoped;Provider、账号渠道与权限使用绑定编辑器。执行路由共用 Execute 角色策略,但 packet 会话仍独立。Plan 的显式 fresh/scoped 同步兼容旧 Kimi resident-session 开关;继承时保持原字段并展示其实际影响,不能误报新建或复用。已有显式角色策略与旧 Plan 开关冲突时显示同步入口,用户确认编辑并保存后才改变文件。启用的第二意见也独立展示和配置角色策略。节点 Session 动作、ID 和原因来自引擎记录;配置为 scoped 不证明本次已续接。
|
|
701
|
+
|
|
702
|
+
设置中的 `jev.enabled`、`scheduler.prewarm` 与 `worktree.enabled` 使用插件自有的
|
|
703
|
+
原生 checkbox `role=switch`,提供关联标签、可见开关状态、键盘焦点和至少 44px
|
|
704
|
+
点击区域;busy 时禁用。`scheduler.dispatch` 保持 batch/ready-queue 枚举选择,
|
|
705
|
+
展示当前配置未满足的条件,保留原策略值,不将配置可用冒充任务实际生效。
|
|
706
|
+
JEV 只有一个总开关;关闭时仅放弃该组无效字段草稿,保留最后有效值和其他分组
|
|
707
|
+
错误。切为 serial 同样移除被隐藏的无效并发数草稿,不能因此清空 Provider 额度。
|
|
708
|
+
高级 JSON 中检测出的非法字段不静默重置;关闭后仍给出可见的高级修正入口并阻止
|
|
709
|
+
保存,完整配置的 schema 和语义检查继续由 Go 负责。
|
|
710
|
+
自动 Worktree 开关明确是引擎管理策略,不表示关闭后删除目录或禁用外部 Worktree。
|
|
711
|
+
JEV 关闭对既有任务的影响在内容区说明,固定保存栏用简短状态,不笼统声称所有修改
|
|
712
|
+
都只在下次启动生效。数据许可的显式空数组和合法连接配置不能由 UI 重置。
|
|
713
|
+
|
|
714
|
+
用量预算使用 off/soft/hard,关闭时隐藏额度且继续计量;阈值按单任务、UTC 日期计算,空额度不设门限。界面读取真实配置,不因展示而改变安装默认值。关闭预算不关闭失败限制、运行时限或未知调用阻断。
|
|
715
|
+
|
|
716
|
+
普通节点点击直接提交观察到的 revision。失败单元的明确点击记录来源为控制台手动重试,仅追加一次 Execute/L1;不伪造用户对失败原因的解释,不自动追加后续尝试。重开已完成单元仍需输入原因并确认下游证据失效,确认期间 revision 改变则拒绝旧请求。
|
|
717
|
+
|
|
718
|
+
视图缓存导航状态、请求和已读快照,按宿主会话隔离;缓存生命周期短于可重放的任务关联,重载后不保证保留。确认任务后自动请求一次新 status,展示 requested/effective、选择理由、Plan/Judge 不适用原因和升级记录。打开视图不自动启动任务或诊断;画布可见时活跃任务每 2 秒只读刷新,失败后延长到 10 秒,离开画布停止刷新。
|
|
598
719
|
|
|
599
720
|
同一会话只允许一个未完成的控制请求。变更请求绑定原任务和 revision;旧目标的迟到响应不能覆盖新选择,未确认操作解决前不能向另一目标重复提交变更。切换视图不取消后台任务,也不把组件卸载当作引擎操作完成。快照带刷新时间,保留的有效旧内容不能冒充已确认的最新状态。
|
|
600
721
|
|
|
601
|
-
读取失败保留有效内容并给出失败与恢复操作。只有宿主以结构化结果明确证明 Go
|
|
722
|
+
读取失败保留有效内容并给出失败与恢复操作。只有宿主以结构化结果明确证明 Go 控制进程尚未启动的拒绝,才允许作为已知未执行的失败处理,修正会话关联或环境后可重新提交;不解析错误文本来猜测是否执行。启动/停止的响应超时、断连或失效属于结果未确认,保留针对该任务的提示并禁止继续变更,直至成功刷新状态后重新判断。不能自动重试变更、乐观标记 stopped,或推断超时意味着没有启动。诊断阻断项继续展示结构化报告,未验证的账号、额度与模型能力不能显示为通过。
|
|
602
723
|
|
|
603
724
|
加载和错误共用表单预留的反馈区,避免操作结果挤动任务内容;使用一个居中的加载指示,长路径和展开详情可在区内滚动并通过键盘访问。后续只读查询等待期间仍保留原任务的结果未确认提示和目标,刷新按钮暂时禁用。说明、字段标签与诊断状态文字使用经过亮暗默认色板核对的主要/次要文本色,成功/警告色用于边线等辅助提示。
|
|
604
725
|
|
|
@@ -626,7 +747,11 @@ doctor 的状态为 pass/fail/warn/unknown/skipped,必需检查 fail 才使 ok
|
|
|
626
747
|
|
|
627
748
|
配置按首个完整文件选择,不深度合并:任务目录 → 项目根 → 全局 `~/.config/flywheel/flywheel.config.json`(`FLYWHEEL_CONFIG` 可覆盖全局路径)→ 内嵌模板。升级不自动覆盖已有配置。模型绑定位于 `loops`、`routes`;`drivers` 只选择 mock/real,不是 provider 注册表。
|
|
628
749
|
|
|
629
|
-
顶层 `jev
|
|
750
|
+
顶层 `jev` 以 `templates/jev-config.schema.json` 为字段信源:enabled 默认 false,
|
|
751
|
+
endpoint 默认空,model 固定版本,key-env 只存变量名;timeout-ms、max-calls、
|
|
752
|
+
min-applicability、min-choice 和 allowed-data 限定请求。开启配置校验目标与格式,
|
|
753
|
+
不探测实际密钥或网络。唯一开关同时约束调查、失败后的执行决策和显式在线评估。旧 `jev-shadow`
|
|
754
|
+
仅用 `jev-policy.schema.json` 校验历史字段并做关闭状态迁移,不再是运行配置。
|
|
630
755
|
|
|
631
756
|
可选的顶层 profiles 定义 harness/model/channel/thinking/provider;loops、routes 和顶层 judge-panel 通过 profile 引用,加载时展开为完整实际绑定。当前 binding 显式出现的字段覆盖 profile,省略才继承;不支持 profile 继承。必需字符串的 null、空白、错拼字段及未知引用在模型启动前失败。thinking 显式空字符串表示当前 harness 的既有默认,不重新继承;resident-session 仍属于阶段,显式 false 保留。judge-panel:null 继续关闭第二意见。旧 inline 配置保留已有缺省语义。
|
|
632
757
|
|
|
@@ -640,6 +765,11 @@ doctor 的状态为 pass/fail/warn/unknown/skipped,必需检查 fail 才使 ok
|
|
|
640
765
|
进入绑定身份;原始适配器回执保留 requested/accepted/可得 effective 证据,
|
|
641
766
|
缺失不填零、不臆造有效档位。
|
|
642
767
|
|
|
768
|
+
开启 JEV 后,同一允许集也可为失败后的模型/effort 决策提供候选,仍消耗原
|
|
769
|
+
`max-switches`,记录实际选择及完整绑定。未配置该策略时继续固定路由;JEV 不会
|
|
770
|
+
自动生成额外模型、provider、账号或付费渠道许可。渠道后备保留既有错误分类,
|
|
771
|
+
不能把 AUTH/QUOTA 当作质量不足。真实模型与 effort 的优劣由后续配对验收决定。
|
|
772
|
+
|
|
643
773
|
顶层 `sessions` 的字段信源为 `templates/session-policy.schema.json`:mode 为
|
|
644
774
|
fresh/scoped,policy-version 固定为 1。旧文件省略时保持 fresh;两份新模板显式
|
|
645
775
|
scoped,模型迁移保留旧文件的会话策略或其省略。显式不完整、null、未来版本和未知
|
|
@@ -648,9 +778,10 @@ historyRecoveryTested 始终 false,不为验证历史而发模型请求。
|
|
|
648
778
|
|
|
649
779
|
provider 表示 DSH SDK 的模型适配器,channel 表示账号/凭证/后备渠道。实际 provider 按 binding.provider → channels[channel].provider → 旧 DSH channel 名解析;两个显式 provider 不一致时拒绝加载。非 DSH harness 不能声明一个会被静默忽略的 provider。降级到另一个 channel 时重新解析其 provider,不能沿用旧账号的适配器。原始 profile 名只作配置来源,不进入 Kimi 恢复身份;实际绑定改变按原有会话条件冷启动。模型绑定改变影响后续调用,不单凭未使用 profile 的改动使历史代码验收失效。
|
|
650
780
|
|
|
651
|
-
默认内嵌表见 [flywheel.config.example.json](https://github.com/ckanner/flywheel/blob/main/templates/flywheel.config.example.json),具名配置完整示例见 [flywheel.profiles.example.json](https://github.com/ckanner/flywheel/blob/main/templates/flywheel.profiles.example.json),覆盖和预检规则见[配置指南](zh-CN/configuration.md)。现有用户要采用新方案,使用 `flywheel config migrate --preset subscriptions` 预览实际命中文件的变化,再以 `--apply` 显式应用。命令备份原始字节,保留预算、验证、worktree 和其他非模型设置,更新已约定的阶段模型、thinking、订阅渠道及 full-access 权限;默认关闭旧第二意见并明确停用未经验证的旧多模态路由。额外自定义路由/阶段会阻断迁移并列出,不能猜测替代。可用 `--expect-sha256`
|
|
781
|
+
默认内嵌表见 [flywheel.config.example.json](https://github.com/ckanner/flywheel/blob/main/templates/flywheel.config.example.json),具名配置完整示例见 [flywheel.profiles.example.json](https://github.com/ckanner/flywheel/blob/main/templates/flywheel.profiles.example.json),覆盖和预检规则见[配置指南](zh-CN/configuration.md)。现有用户要采用新方案,使用 `flywheel config migrate --preset subscriptions` 预览实际命中文件的变化,再以 `--apply` 显式应用。命令备份原始字节,保留预算、验证、worktree 和其他非模型设置,更新已约定的阶段模型、thinking、订阅渠道及 full-access 权限;默认关闭旧第二意见并明确停用未经验证的旧多模态路由。额外自定义路由/阶段会阻断迁移并列出,不能猜测替代。可用 `--expect-sha256` 绑定预览身份;应用前检测文件变动,失败不损坏原配置。运行中的实现任务不热加载模型配置,下次启动才使用新方案。JEV 的有效关闭和
|
|
782
|
+
更严格授权另在每次决策边界重核,不重置已冻结的目标和账本。
|
|
652
783
|
|
|
653
|
-
DSH
|
|
784
|
+
DSH 插件按公开 API 的兼容系列声明 `>=0.2.1-rc.5 <0.3.0-0`;DSH 使用包含预发布版本的 SemVer 范围判断。0.2 系列内常规 rc/补丁升级不再逐个登记;0.3 系列及其任何预发布版本仍需重新核对。范围准入与实际能力证明分开:必需 service inject、Remote/会话投影、SDK 权限回执及收尾边界保持原检查,不通过精确版本豁免或伪造宿主版本放行。DSH peer 保持宿主提供的 optional 依赖,npm 范围覆盖既有 0.2.1/0.2.2 预发布系列,测试依赖则锁定已实测版本。权限事件只在公开 `agent/created` 阶段写入:Session 已完成只读创建公告,Agent 尚未释放首个模型请求。SDK 权限回执在写入显式 `approval/policy` 后,通过公开 `approval.overrideOf(session)` 读取实际覆盖值;不调用私有 `effectivePolicy`。候选必须通过旧 0.2.1-rc.5 与当前锁定 0.2.2-rc.3 真实发布的 renderer 生命周期检查,并在目标宿主验证无推理 SDK 收尾;范围内未来版本准入不等于逐版完成实测。
|
|
654
785
|
|
|
655
786
|
### 13.1 npm 安装与发行
|
|
656
787
|
|