flower-trellis 0.6.11 → 0.6.12-beta.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/enhancements/0.6/.agents/skills/trellis-auto-loop/SKILL.md +3 -1
- package/enhancements/0.6/.agents/skills/trellis-check-all/references/reporting-and-disposition.md +8 -8
- package/enhancements/0.6/.agents/skills/trellis-route/SKILL.md +44 -292
- package/enhancements/0.6/.agents/skills/trellis-route/references/interaction.md +46 -0
- package/enhancements/0.6/.agents/skills/trellis-route/references/recovery-and-errors.md +47 -0
- package/enhancements/0.6/.agents/skills/trellis-route/references/subagent-dispatch.md +35 -0
- package/enhancements/0.6/.agents/skills/trellis-task-brief/SKILL.md +16 -3
- package/enhancements/0.6/.claude/skills/trellis-auto-loop/SKILL.md +3 -1
- package/enhancements/0.6/.claude/skills/trellis-check-all/references/reporting-and-disposition.md +8 -8
- package/enhancements/0.6/.claude/skills/trellis-route/SKILL.md +44 -292
- package/enhancements/0.6/.claude/skills/trellis-task-brief/SKILL.md +16 -3
- package/enhancements/0.6/overrides/conflicts.json +22 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/content.md +2 -0
- package/enhancements/0.6/overrides/patches/skills/trellis-brainstorm/planning-handoff/readiness-content.md +1 -1
- package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-workflow-owners/continue-recovery-content.md +1 -1
- package/enhancements/0.6/overrides/patches/skills/trellis-update-spec/autonomous-evaluation/content.md +3 -3
- package/enhancements/0.6/overrides/patches/workflow/intent-routing/request-triage/content.md +1 -0
- package/enhancements/0.6/overrides/patches/workflow/phase-ownership/phase-2-check-content.md +2 -2
- package/enhancements/0.6/overrides/patches/workflow/runtime-contract-reference/completed-content.md +1 -1
- package/enhancements/0.6/overrides/patches/workflow/states-in-progress/common-content.md +2 -2
- package/enhancements/0.6/overrides/patches/workflow/states-planning/common-content.md +1 -1
- package/enhancements/0.6/overrides/patches/workflow/task-brief-review/phase-1-activate-content.md +4 -2
- package/enhancements/MANIFEST.json +2 -2
- package/package.json +4 -3
- package/src/assets/flower_session_start.py +5 -0
- package/src/lib/platform-patch-adapters.js +16 -18
- package/src/lib/toml-default-adapter.js +238 -0
- package/src/patches/bundles/flower-platform-integration.json +1 -0
- package/src/patches/platforms/codex/remove-multi-agent-v2/patch.json +1 -0
- package/src/patches/platforms/codex/sync-user-interaction/config-content.json.txt +7 -0
- package/src/patches/platforms/codex/sync-user-interaction/patch.json +17 -0
|
@@ -27,7 +27,9 @@ python3 ./.trellis/scripts/pre_check_state.py clear
|
|
|
27
27
|
|
|
28
28
|
## Start
|
|
29
29
|
|
|
30
|
-
任务列表必须显式。用户只说当前任务时,先用 `task.py current --source`
|
|
30
|
+
任务列表必须显式。用户只说当前任务时,先用 `task.py current --source` 解析。启动前进入 `trellis-route` 的“auto-loop 启动前选模例外”:对队列任务只读解析 implement/check,复用匹配任务的 session 决定或个人默认,只询问未决 target。临时选择才传 runner 参数,明确请求的个人默认由 `write-pref` 保存;不提前写 task route decision、绑定任务或实施。
|
|
31
|
+
|
|
32
|
+
模式确定后同轮回到本 skill,执行下方 start + next,先完成 runner 的 prepare;不得套用普通 route 的选完立即实施,也不等待用户回复“继续”。只有 runner 返回 `run_implement` / `run_check_all` 等运行 action 后才按对应 route 实际执行。
|
|
31
33
|
|
|
32
34
|
```bash
|
|
33
35
|
python3 ./.trellis/scripts/auto_loop.py start \
|
package/enhancements/0.6/.agents/skills/trellis-check-all/references/reporting-and-disposition.md
CHANGED
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
- 后续重检完整展示新增、实质变化、接受失效及仍待处置的问题;未变化且接受仍有效的问题只汇总数量,计入报告总数与接受数,不重复字段。无须展开的通道省略问题区块。
|
|
60
60
|
- 恢复会话、验证进展和 Update-Spec 内部沿用有效接受记录,不主动复述;Push 按其输出 reference 汇总。用户要求详情时再展开指定问题的原报告与当前处置。
|
|
61
61
|
- 原报告或接受依据无法恢复时,说明缺口并针对受影响项目补核,不凭摘要伪报通过或要求全部重接受。复用现有对话或任务记录,不新增展示次数、状态文件或报告附件。
|
|
62
|
-
-
|
|
62
|
+
- 接受后按下方 Gate 推进;明确“仅接受、不继续”时只更新处置。仍有未处置问题或阻塞时说明剩余项并停止。接受风险不替代 Push 的精确计划确认。
|
|
63
63
|
|
|
64
64
|
## 验证阶段
|
|
65
65
|
|
|
@@ -203,7 +203,7 @@ interactive 完成检查与允许的 DOC 修复后,先自然说明实际改动
|
|
|
203
203
|
|
|
204
204
|
重检后按下方 `Interactive Post-Check Stop Gate` 分流;仍有未处置 `CHK-*` 或 `FBK-*` 时停留在处置/重检循环。
|
|
205
205
|
|
|
206
|
-
untracked helper
|
|
206
|
+
untracked helper 不存检查证据或风险接受。通过且按下方 Gate 默认推进时执行 `advance --stage spec`;用户明确只检查或检查后停止时保持 `stage=check`。未处置 `CHK-*` / `FBK-*`、阻断型部分验证、阻塞或新编辑先 `advance --stage implement`;仅 `[上线后验证]` 不回退。
|
|
207
207
|
|
|
208
208
|
---
|
|
209
209
|
|
|
@@ -226,10 +226,10 @@ subagent 只返回结构化 `CHK-*`、`FBK-*`、`DOC-*` 候选、报告和 `chec
|
|
|
226
226
|
|
|
227
227
|
非 validated auto-loop 先按本文件输出标准报告或接受状态的简短确认,再依序分流;不重贴已有报告:
|
|
228
228
|
|
|
229
|
-
1.
|
|
230
|
-
2.
|
|
231
|
-
3.
|
|
232
|
-
4.
|
|
229
|
+
1. 先识别当前事项最新有效的明确停止要求:`只检查`、`只读检查`、`检查后停止`、`暂不收尾`、`仅接受、不继续` 等。停止收尾,不运行 Update-Spec 或生成 Git 计划;同一事项后续明确继续可解除该限制。普通“检查一下”不等于只检查后停止,不从无关历史或摘要猜测限制。
|
|
230
|
+
2. 未处置 `CHK-*` / `FBK-*`、blocked、阻断型部分验证或其它未接受实质风险(`[上线后验证]` 除外)时,报告并停止,不运行 Update-Spec 或生成 Git 计划。Git 请求不授权修复或代用户接受风险;普通代码问题始终由用户选择修复范围。
|
|
231
|
+
3. 没有有效停止要求且 strict pass,或全部 findings 已有效接受时,默认同轮继续;通过条件沿用上方风险接受和验证阶段,完整登记的 `[上线后验证]` 不阻断。报告或简短确认后同轮进入 Update-Spec,`no-op|written` 再到 Push,`needs-review` 停止。无需 direct Git intent 或额外回复“继续”,通过不授权 Git 写入。
|
|
232
|
+
4. 只从当前完成链证据识别 direct Git intent,保留 push / 用户主动 `commit-only` 选择;不从无关历史、摘要、dirty 状态或 auto-loop action 推断。风险接受沿用上方证据规则。
|
|
233
233
|
|
|
234
234
|
### 交互式下一步引导
|
|
235
235
|
|
|
@@ -237,8 +237,8 @@ subagent 只返回结构化 `CHK-*`、`FBK-*`、`DOC-*` 候选、报告和 `chec
|
|
|
237
237
|
|
|
238
238
|
1. 有未处置 findings:提示 `修复全部`、精确 ID、接受当前报告全部风险、`接受风险 <ID> 并继续` 或 `仅保留报告`;不逐项重复确认。
|
|
239
239
|
2. 有 blocked、阻断型部分验证或未标记 `[上线后验证]` 的实质风险:指出所需决策、授权或验证,完成后重跑 Check-All;不自行执行生产、外部或破坏性操作。
|
|
240
|
-
3.
|
|
241
|
-
4.
|
|
240
|
+
3. 有有效的明确停止要求且检查通过:说明已按要求停止,之后明确继续才恢复收尾。
|
|
241
|
+
4. 无有效停止要求且 strict pass / 已接受风险通过:说明本轮正在进入 `trellis-update-spec`,不要求用户再次回复“继续”;Git 计划确认仍由 Push 执行。
|
|
242
242
|
|
|
243
243
|
停止边界只控制是否自动推进,不能让报告在没有下一步提示的情况下结束。
|
|
244
244
|
|
|
@@ -1,318 +1,70 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: trellis-route
|
|
3
3
|
description: |
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Current-task repair/recheck loops reuse the latest valid route decision instead of prompting again.
|
|
9
|
-
Compacted resumes recover same-session route choices from gitignored runtime state before prefs or prompting.
|
|
10
|
-
Final re-checks return to Phase 2.2 before commit.
|
|
11
|
-
Skip in non-trellis projects (no .trellis/). Not for other subagents (trellis-research / trellis-debug).
|
|
4
|
+
Select inline/subagent execution for authorized Trellis implementation or Check-All.
|
|
5
|
+
Reuse task/session choices and personal defaults; apply explicit mode instructions directly.
|
|
6
|
+
Resolve and execute in the same turn. Load interaction, subagent dispatch, or error details only when needed.
|
|
7
|
+
Check-All owns light/full depth. Not for research/debug agents or non-Trellis projects.
|
|
12
8
|
---
|
|
13
9
|
|
|
14
|
-
# Trellis 路由器:implement / check
|
|
10
|
+
# Trellis 路由器:implement / check 执行模式
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
本 skill 由主 agent 执行,决定已获准工作的位置。模式确定后同轮实际进入对应能力;只在选择未决、用户要求暂停或执行能力不可用时停下。
|
|
17
13
|
|
|
18
|
-
|
|
14
|
+
**auto-loop 启动前选模例外**:用户已明确启动自动循环,且 `trellis-auto-loop` 已解析显式任务列表时,先按 [recovery-and-errors.md](references/recovery-and-errors.md) 选择模式并返回 runner。此路径允许任务仍在 planning 或尚未绑定 session,不套用下方执行门槛或同轮实施规则;普通调用和 running action 继续遵守下文。
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
## 进入条件与证据
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
先用 `task.py current --source` 与 `untracked_flow.py status` 确认 subject,二者只能命中一个:
|
|
29
|
-
|
|
30
|
-
- task 命中:`scope=task`,继续使用本 skill 既有 runtime -> prefs -> auto-loop 顺序。
|
|
31
|
-
- 无 task 且 untracked 命中:`scope=untracked`,只使用 pref-only CLI;不得伪造 task 路径或 task artifacts。
|
|
32
|
-
- 二者都未命中:返回 workflow Request Triage,不展示执行 route。
|
|
33
|
-
|
|
34
|
-
task 的合法 route 决策必须能追溯到 `trellis-route`、同编号 fallback 选项、有效 `.trellis/.route-prefs.tmp`,或 route helper 校验过的 auto-loop 临时授权,并且 `task` 字段等于当前任务路径。untracked 的合法 route 只来自本次紧邻选择或 `read-pref` 命中;不写 runtime,也不接受 auto-loop 授权。用户自然语言、摘要、SessionStart 提示、`codex-mode`、空偏好或历史裸数字都不能单独作为有效 route 决策。
|
|
35
|
-
|
|
36
|
-
当前上下文内已有 target 匹配、task 等于当前任务路径、且来源合法的 route 决策时,后续实现、check 发现问题、用户指出刚检查过的实现有问题、修复后重检、提交前复查均默认复用最近 implement/check 路由;除非用户明确要求重选/临时改/清除默认,不再调用本 skill。当前上下文没有 route 决策但 runtime state 命中时,本 skill 恢复该决策并输出同样的结构化 `route_decision`。如果上下文里只有上一个任务的 `route_decision`,必须忽略并重新解析当前任务。
|
|
37
|
-
|
|
38
|
-
Codex 的 `<codex-mode>` 与 `workflow-state:*-inline` 只描述上游原生上下文/readiness 能力,不是 route 决策或选项过滤器。实际执行位置只读取本 skill 的 runtime/prefs/本轮选择;若紧邻路由决定是 subagent,主 agent 按 catalog dispatch 对应角色。禁止绕过 `trellis-route` 直接从 Codex banner 推导执行模式。
|
|
39
|
-
|
|
40
|
-
先判断本次路由目标:
|
|
41
|
-
|
|
42
|
-
- `target=implement`:决定 `inline` / `subagent`。
|
|
43
|
-
- `target=check`:只决定 `check-all inline` / `check-all subagent`。用户明确说 light/full 时,把该意图交给 Check-All 作为 requested depth,不改变 route mode。
|
|
44
|
-
|
|
45
|
-
再判断用户是否要求覆盖个人配置:
|
|
46
|
-
|
|
47
|
-
- 临时改:`临时改` / `这次用` / `本次用` / `这次不用默认` / `override once`
|
|
48
|
-
- 重新选择:`重新选择` / `重选` / `route 选项` / `show route options`
|
|
49
|
-
- 更新默认:`改默认` / `更新默认` / `保存默认`
|
|
50
|
-
- 清除默认:`清除默认` / `删除 route 默认` / `reset route`
|
|
51
|
-
|
|
52
|
-
如果命中上述覆盖意图,即使 `.trellis/.route-prefs.tmp` 存在,也不能直接使用配置;必须进入 Step 2 展示对应选项。
|
|
53
|
-
|
|
54
|
-
## Step 0.5: 解析已有 route state
|
|
55
|
-
|
|
56
|
-
task 仅在没有覆盖意图、当前上下文没有 target + 当前 task 匹配的合法 `route_decision` 时调用 `resolve`,解析顺序固定为 runtime -> prefs -> auto-loop。untracked 不调用 `resolve`,每次直接调用 `read-pref`;命中即可执行,miss 才进入 Step 2。
|
|
57
|
-
|
|
58
|
-
调用随本 skill 分发的 helper;不要在对话中内嵌或改写 helper 逻辑:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
python3 .agents/skills/trellis-route/scripts/route_state.py resolve --target <implement|check>
|
|
62
|
-
# Claude 平台若只有 .claude skill 副本,则使用:
|
|
63
|
-
python3 .claude/skills/trellis-route/scripts/route_state.py resolve --target <implement|check>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
untracked 调用:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
python3 .agents/skills/trellis-route/scripts/route_state.py read-pref --target <implement|check>
|
|
70
|
-
# Claude 平台若只有 .claude skill 副本,则使用:
|
|
71
|
-
python3 .claude/skills/trellis-route/scripts/route_state.py read-pref --target <implement|check>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
helper 只接受当前 session 或唯一 session fallback 的 `.trellis/.runtime/sessions/<context-key>.json`,并只从 `route_decisions.<target>` 恢复当前任务的决策。命中时输出 `{"status":"hit", ...}`,其中默认输出里的 `task` / `mode` / `source` 已经过 task/target/source/mode/scope 校验,可跳过 Step 2 并进入 Step 3 输出决策。`origin=route-prefs` 表示来自个人 route 配置,并且 helper 已写回 session runtime state;`origin=auto-loop` 表示来自 auto-loop 临时授权且 helper 已写回 session runtime state;`origin=runtime` 表示来自 session runtime state。
|
|
18
|
+
- task implement 需要任务已获首次 Brief 批准且处于 `in_progress`;task check 需要 Phase 2.2。untracked 需要当前 session 的 `untracked_flow.py status` 命中对应 `stage=implement/check`。仍在 planning、等待确认或用户说“等一下”时停止,不读 runtime/prefs。
|
|
19
|
+
- 用 `task.py current --source` 与 `untracked_flow.py status` 确认 subject,只能命中一个;均未命中时返回 Request Triage。无 `.trellis/` 时跳过路由。
|
|
20
|
+
- 合法 route 决策必须能追溯到本 skill 当前明确选择、紧邻编号选择、有效个人偏好或 helper 校验的 auto-loop 授权。task 决策须匹配当前 task、target、scope 和合法 mode/source;untracked 只接受当前选择或 `read-pref`,不读写 task `route_decisions`。
|
|
21
|
+
- 当前上下文已有合法的当前 task + target 决策时,实现、修复、重检和最终复查直接复用,除非当前用户明确覆盖。压缩后没有此证据则调用 helper 恢复,不查 `trellis mem`,不从 compact summary、ordinary summary、SessionStart、replacement history 或历史消息推断模式。
|
|
22
|
+
- `<codex-mode>` / `workflow-state:*-inline` 只描述能力,不是决定或选项过滤器;历史裸数字不形成当前选择。当前自然语言须按下方明确指令流程应用并记录,不能只写“用户选过”作为证据。
|
|
75
23
|
|
|
76
|
-
|
|
24
|
+
## 解析模式
|
|
77
25
|
|
|
78
|
-
|
|
26
|
+
`target=implement` 使用 `inline/subagent`;`target=check` 使用 `check-all-inline/check-all-subagent`。light/full 是 Check-All 的 requested depth,不是 route mode。
|
|
79
27
|
|
|
80
|
-
|
|
28
|
+
1. **明确指令先应用**:当前请求唯一明确 target 和模式,如“这次实现用子 agent”“以后检查默认用当前会话”,直接使用,不再要求菜单复选。主会话/Inline 对应 inline,子 agent/Subagent 对应 subagent;check 使用对应 `check-all-*`。只有明确“保存/更新默认、以后默认”才持久化个人偏好,否则临时应用。假设、问题、引用或历史叙述不算执行指令。
|
|
29
|
+
2. **待决选择才交互**:用户只说“重选/清除默认”,或模式变更指令中的 target/mode 含糊,读取 [interaction.md](references/interaction.md),仅询问未决选择,禁止自动代选或把 implement 选择套到 check。
|
|
30
|
+
3. **已有选择直接恢复**:没有覆盖意图且当前上下文没有合法 task 决策时,task 调 `resolve`;untracked 每次调用 `read-pref`。命中即执行;普通 miss 进入交互,异常按下方条件 reference 处理。
|
|
81
31
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
## Step 2: 展示选项并等待用户选择
|
|
85
|
-
|
|
86
|
-
优先调用 `AskUserQuestion`。选项 label 前缀编号,方便用户直接打数字快速选。
|
|
87
|
-
|
|
88
|
-
裸数字回复(如 `1` / `2` / `3` / `4`)只有在当前可见的上一条 assistant 消息刚刚展示同一个 target 的 route 选项、并明确停下等待用户回答时,才可解释为本次 numbered fallback 选择。compact summary、ordinary summary、SessionStart 摘要、replacement history、历史消息、旧 target 的裸数字、非紧邻回复里的裸数字都不能触发 `write --source numbered-fallback`;遇到这些情况必须重新展示当前 target 的选项并等待新的紧邻回复。
|
|
89
|
-
|
|
90
|
-
如果当前平台或模式没有 `AskUserQuestion` / `request_user_input`,不要自行选择 inline 或 subagent 继续。改用普通聊天消息原样呈现同一组编号选项,并停止等待用户回复;只有用户在这条选项消息之后立即回复裸数字,才可进入 Step 2.5 / 2.6 / 3。
|
|
91
|
-
|
|
92
|
-
### target = implement,且 resolve 未命中
|
|
93
|
-
|
|
94
|
-
- **question**: "本次 implement 走哪种模式?"
|
|
95
|
-
- **header**: "Impl 模式"
|
|
96
|
-
- **options**:
|
|
97
|
-
1. label "1. 本次 Inline", description "主 agent 直接执行,只影响这一次"
|
|
98
|
-
2. label "2. 本次 Subagent", description "dispatch trellis-implement,只影响这一次"
|
|
99
|
-
3. label "3. 保存默认:Inline", description "本次使用 inline,并写入个人配置,后续默认不再问"
|
|
100
|
-
4. label "4. 保存默认:Subagent", description "本次使用 subagent,并写入个人配置,后续默认不再问"
|
|
101
|
-
|
|
102
|
-
### target = implement,且用户要求临时改 / 重新选择
|
|
103
|
-
|
|
104
|
-
- **question**: "当前默认:implement=<当前值或无>。本次要怎么处理?"
|
|
105
|
-
- **header**: "Impl 覆盖"
|
|
106
|
-
- **options**:
|
|
107
|
-
1. label "1. 仅本次 Inline", description "只覆盖这一次,不修改个人配置"
|
|
108
|
-
2. label "2. 仅本次 Subagent", description "只覆盖这一次,不修改个人配置"
|
|
109
|
-
3. label "3. 更新默认为 Inline", description "本次使用 inline,并写入个人配置"
|
|
110
|
-
4. label "4. 更新默认为 Subagent", description "本次使用 subagent,并写入个人配置"
|
|
111
|
-
5. label "5. 清除默认", description "删除 implement 默认,然后重新显示无配置选项"
|
|
112
|
-
|
|
113
|
-
### target = check,且 resolve 未命中
|
|
114
|
-
|
|
115
|
-
check 路由始终展示统一 Check-All 入口;深度由 Check-All 决定。
|
|
116
|
-
|
|
117
|
-
- **question**: "本次 check 走哪种模式?"
|
|
118
|
-
- **header**: "Check 模式"
|
|
119
|
-
- **options**:
|
|
120
|
-
1. label "1. 本次 Check-all inline", description "主 agent 执行全面检查,只影响这一次"
|
|
121
|
-
2. label "2. 本次 Check-all subagent", description "dispatch 全面检查,只影响这一次"
|
|
122
|
-
3. label "3. 保存默认:Check-all inline", description "本次使用 check-all inline,并写入个人配置"
|
|
123
|
-
4. label "4. 保存默认:Check-all subagent", description "本次使用 check-all subagent,并写入个人配置"
|
|
124
|
-
|
|
125
|
-
### target = check,且用户要求临时改 / 重新选择
|
|
126
|
-
|
|
127
|
-
选项仍只展示 `check-all` 路径。
|
|
128
|
-
|
|
129
|
-
- **question**: "当前默认:check=<当前值或无>。本次要怎么处理?"
|
|
130
|
-
- **header**: "Check 覆盖"
|
|
131
|
-
- **options**:
|
|
132
|
-
1. label "1. 仅本次 Check-all inline", description "只覆盖这一次,不修改个人配置"
|
|
133
|
-
2. label "2. 仅本次 Check-all subagent", description "只覆盖这一次,不修改个人配置"
|
|
134
|
-
3. label "3. 更新默认为 Check-all inline", description "本次使用 check-all inline,并写入个人配置"
|
|
135
|
-
4. label "4. 更新默认为 Check-all subagent", description "本次使用 check-all subagent,并写入个人配置"
|
|
136
|
-
5. label "5. 清除默认", description "删除 check 默认,然后重新显示无配置选项"
|
|
137
|
-
|
|
138
|
-
## Step 2.5: 读 subagent_skip_compile
|
|
139
|
-
|
|
140
|
-
仅 `target=implement` 且最终选择 `subagent` 时读取:
|
|
32
|
+
`<skill-dir>` 使用当前已安装的 skill 目录;本项目为 `.agents/skills/trellis-route`,Claude-only 项目用 `.claude/skills/trellis-route`。只执行 helper,不内嵌其解析逻辑或默认读取脚本正文:
|
|
141
33
|
|
|
142
34
|
```bash
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
35
|
+
# task:runtime -> prefs -> auto-loop,偏好/auto 命中会写回 session。
|
|
36
|
+
python3 <skill-dir>/scripts/route_state.py resolve --target <implement|check>
|
|
37
|
+
# untracked:不依赖任务或 session runtime。
|
|
38
|
+
python3 <skill-dir>/scripts/route_state.py read-pref --target <implement|check>
|
|
39
|
+
# task 明确选择;仅明确保存默认时加 --save-pref。
|
|
40
|
+
python3 <skill-dir>/scripts/route_state.py write --target <implement|check> --mode <mode> --source trellis-route
|
|
41
|
+
# untracked 明确保存默认;仅本次选择不调用写入。
|
|
42
|
+
python3 <skill-dir>/scripts/route_state.py write-pref --target <implement|check> --mode <mode>
|
|
146
43
|
```
|
|
147
44
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
---
|
|
45
|
+
helper 的 hit/written 输出就是本轮结构化执行证据,保留其中 mode/source/task 和本次 target/scope;正常对话不重复打印 YAML。task 临时选择写当前 session;untracked 的“仅本次”只用于当前调用,不写任何 runtime 或偏好。
|
|
151
46
|
|
|
152
|
-
|
|
47
|
+
个人默认仅在 `.trellis/.route-prefs.tmp`;task 决定仅在当前 session `.trellis/.runtime/sessions/`。二者 gitignored,不纳入任务属性、团队配置或提交范围。显式覆盖优先,除此以外 helper 独占 runtime → prefs → auto-loop 顺序。
|
|
153
48
|
|
|
154
|
-
|
|
49
|
+
## 按条件加载
|
|
155
50
|
|
|
156
|
-
|
|
51
|
+
| 命中条件 | 读取材料 |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| 需要模式菜单、重选、清除或编号答复 | [interaction.md](references/interaction.md) |
|
|
54
|
+
| 最终模式为 subagent | [subagent-dispatch.md](references/subagent-dispatch.md),然后读取当前平台 catalog |
|
|
55
|
+
| helper error、损坏状态、缺少 session、需要诊断或 auto-loop prepare 只读预检 | [recovery-and-errors.md](references/recovery-and-errors.md) |
|
|
157
56
|
|
|
158
|
-
|
|
159
|
-
python3 .agents/skills/trellis-route/scripts/route_state.py write --target <implement|check> --mode <mode> --source <trellis-route|numbered-fallback>
|
|
160
|
-
# Claude 平台若只有 .claude skill 副本,则使用:
|
|
161
|
-
python3 .claude/skills/trellis-route/scripts/route_state.py write --target <implement|check> --mode <mode> --source <trellis-route|numbered-fallback>
|
|
162
|
-
```
|
|
57
|
+
默认 inline 命中不读取上述 reference。仅当 route 已选中 subagent 时读取 catalog;inline 路径不读取 catalog,也不预先过滤 route 选项。缺少选择或能力时仍由用户决定,不静默降级、不发明替代 agent。
|
|
163
58
|
|
|
164
|
-
|
|
59
|
+
## 同轮执行与展示
|
|
165
60
|
|
|
166
|
-
|
|
167
|
-
python3 .agents/skills/trellis-route/scripts/route_state.py write --target <implement|check> --mode <mode> --source <trellis-route|numbered-fallback> --save-pref
|
|
168
|
-
# Claude 平台若只有 .claude skill 副本,则使用:
|
|
169
|
-
python3 .claude/skills/trellis-route/scripts/route_state.py write --target <implement|check> --mode <mode> --source <trellis-route|numbered-fallback> --save-pref
|
|
170
|
-
```
|
|
61
|
+
只说明一句实际执行方式,例如“沿用默认,由当前会话实现”“恢复已有选择,使用子 agent 检查”;明确指定时说明已应用当前选择。随后主 agent 在同一回合实际调用下表能力,不以路由报告结束回合,不等用户回复“继续”。不例行展示来源路径、YAML、写入字段或工具配方;用户要求诊断时再展开。
|
|
171
62
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
清除默认:
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
python3 .agents/skills/trellis-route/scripts/route_state.py clear-pref --target <implement|check>
|
|
184
|
-
# Claude 平台若只有 .claude skill 副本,则使用:
|
|
185
|
-
python3 .claude/skills/trellis-route/scripts/route_state.py clear-pref --target <implement|check>
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
helper 写入规则:保留另一个 target 的 runtime 决策和偏好;覆盖当前 target;`source` 保持原始合法来源,正常 skill 交互用 `trellis-route`,普通聊天编号 fallback 用 `numbered-fallback`,prefs 命中由 helper 写 `route-prefs`,auto-loop 临时授权命中由 helper 写 `auto-loop`;保留 session runtime 文件中的 `platform`、`current_task`、`current_run`、`current_auto_run` 等既有字段;内部 `task` 必须写当前 `task.py current --source` 的任务路径。写入失败不阻塞本次 route 输出,但要在回复中简短说明未持久化,压缩后可能再次询问。
|
|
189
|
-
|
|
190
|
-
当同一 session 从一个任务切换到另一个任务时,helper 写入当前任务任一 target 的决策前会清理 runtime 中属于其他任务的 `route_decisions`。个人默认仍保留在 `.trellis/.route-prefs.tmp`;清理只影响当前 session 的临时恢复状态,目的是避免新任务的 check 阶段误复用上一个任务的 check 路由。
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## Step 3: 输出执行指令
|
|
195
|
-
|
|
196
|
-
本 skill 不调用 Skill / Agent 工具,而是输出指令让主 agent 在下一轮执行。
|
|
197
|
-
|
|
198
|
-
### 路由表
|
|
199
|
-
|
|
200
|
-
| 路由决定 | 主 agent 应执行 |
|
|
201
|
-
|---------|----------------|
|
|
202
|
-
| `inline implement` | `Skill({skill: "trellis-before-dev"})` 加载 spec;task 再读任务文档,untracked 读取 helper 状态与实际 scope → 主线程实施 → 跑必要验证 → 回到 Phase 2.1 completion contract |
|
|
203
|
-
| `subagent implement` | 按下方当前平台执行配方调用 `trellis-implement`;task 使用 `Active task:`,untracked 使用下方自包含 `Untracked work:` 契约;主 agent 收到结果后回到 Phase 2.1 completion contract |
|
|
204
|
-
| `inline check-all` | `Skill({skill: "trellis-check-all"})` |
|
|
205
|
-
| `subagent check-all` | 读取 catalog 当前平台条目,只调用 `checkAll.target` 声明的专用 audit-only `trellis-check-all` 角色,并按 `checkAll.launch` 启动;subagent 只返回 `CHK-*` / `FBK-*` / `DOC-*` 候选,不写文件。目标缺失、host 未发现或资格不成立时停止并请用户改选 inline;禁止通用 agent 与 `trellis-check` fallback |
|
|
63
|
+
| 模式 | 同轮动作 |
|
|
64
|
+
| --- | --- |
|
|
65
|
+
| `inline` implement | 加载 `trellis-before-dev` 和当前任务/事项上下文,实施并完成必要验证 |
|
|
66
|
+
| `subagent` implement | 按条件 reference 启动专用 `trellis-implement`,接收结果后返回实现 owner |
|
|
67
|
+
| `check-all-inline` | 执行 `trellis-check-all`,由它解析检查深度 |
|
|
68
|
+
| `check-all-subagent` | 按 catalog 启动专用 audit-only `trellis-check-all`;只返回 `CHK-*` / `FBK-*` / `DOC-*` 候选,不写文件 |
|
|
206
69
|
|
|
207
70
|
implement 路由只决定执行位置,不拥有实现后的停止策略。无论 inline 或 subagent,focused validation 完成后都必须返回 workflow Phase 2.1 的 completion contract,并在当前回合实际执行该 owner 解析出的 Pre-Check action:auto-loop、用户显式继续/暂缓和已有 hold 按 owner 结果处理;默认分支必须立即进入 `trellis-route(target=check)`。不得先询问是否运行 Check-All,也不得把 Check-All 作为可选下一步后结束回合。
|
|
208
|
-
|
|
209
|
-
### 平台 Dispatch Catalog
|
|
210
|
-
|
|
211
|
-
`references/platform-dispatch.json` 是平台启动契约的唯一事实源。当前条目提供稳定 `id`、`implement.launch/target`、`checkAll.launch/target/format/verification` 和 `inlineOnlyReason`。仅当 route 已选中 subagent 时,主 agent 才从当前运行平台上下文确定稳定平台 ID,读取 catalog 对应条目,并把 `launch` 字段翻译成当前 host 的工具调用。inline 路径不读取 catalog,也不预先过滤 route 选项。
|
|
212
|
-
|
|
213
|
-
dispatch prompt 第一行始终遵守当前 task/untracked 契约。agent 文件存在只证明项目产物已投影;实际 dispatch 时还必须确认当前 host 暴露 catalog 声明的 launch 能力。目标、launcher 或资格不可用时停止并让用户改选 inline,不得静默降级、发明替代 agent 或使用上游 workspace-write `trellis-check`。`verification` 只说明该角色如何证明只读资格,不放宽 Check-All 边界;`eligible=false` 时同时展示 `inlineOnlyReason`。
|
|
214
|
-
|
|
215
|
-
### Untracked Subagent Dispatch 契约
|
|
216
|
-
|
|
217
|
-
untracked 的 implement/check subagent prompt 第一行固定为 `Untracked work: <work-id>`,并包含事项摘要、当前 stage、实际 diff、相关 spec 路径、已有验证上下文和本轮明确职责。helper 只提供流程游标,不提供 scope、baseline、fingerprint 或 owner evidence。不得写 `Active task:`,不得要求 `prd.md`、`implement.jsonl` 或 `check.jsonl`。agent 必须直接执行,不得递归 dispatch implement/check agent。
|
|
218
|
-
|
|
219
|
-
### Subagent Check-All Dispatch 契约
|
|
220
|
-
|
|
221
|
-
使用 catalog 声明的专用 subagent 时,dispatch prompt 第一行必须是当前任务路径,并包含以下完整边界:
|
|
222
|
-
|
|
223
|
-
```text
|
|
224
|
-
Active task: <task path from task.py current>
|
|
225
|
-
|
|
226
|
-
执行本项目 0.6 `trellis-check-all` 的 audit-only collect-all 全流程,区分主路径 `CHK-*`、兜底 `FBK-*`,并识别可由主会话处理的 `DOC-*` 低风险事实漂移候选。
|
|
227
|
-
|
|
228
|
-
必须:
|
|
229
|
-
1. 读取 <task>/check.jsonl 及其列出的文件,再读取 prd.md、design.md(若存在)、implement.md(若存在)。
|
|
230
|
-
2. 读取并遵循本地 trellis-check-all/SKILL.md;完成三件套实现、实现假设、完整性与规范三个维度。
|
|
231
|
-
3. 先按本地 fallback findings 规则判定 `CHK-*` / `FBK-*`,再为两类问题分配 P0/P1/P2;已声明的兜底契约只影响证据和严重度,不改变 `FBK-*` 归属。具备具体位置、可达场景和问题证据时返回 `FBK-*`,不要求异常已实际发生;保护收益和验证方式属于报告完整度。提交前应完成但证据不足时标记阻断型部分验证;本质依赖部署后、生产环境或外部系统的验收返回 `[上线后验证]`,不得执行且不得误标为阻断。泛化建议不报告。低风险事实漂移使用 `DOC-*` 候选单独返回。
|
|
232
|
-
4. 只读审查;禁止编辑、写文件、补测试或自修复。按 Check-All profile 的共享验证清单复用源码和验证证据;`DOC-*` 也只能返回候选,由主会话按 Check-All 规则决定是否写入。
|
|
233
|
-
5. 真正阻塞条件返回主会话,不替用户选择业务行为或修复范围。
|
|
234
|
-
|
|
235
|
-
返回:统一 Check-All 结果、全部 `CHK-*`、`FBK-*`、`DOC-*` 候选、已执行验证和剩余风险。不要输出 commit/push 计划。
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
必须确认 catalog 目标内容明确 audit-only:允许识别 `DOC-*` 候选,但不得写文件。名称相同但会直接自修复代码、测试、配置或普通 `CHK-*` 的 agent 不可使用。平台没有合格专用角色时,不得静默改成 inline,也不得使用通用 agent 或 `trellis-check` 代替;停止并让用户重新选择 check route。
|
|
239
|
-
|
|
240
|
-
### 输出模板
|
|
241
|
-
|
|
242
|
-
````markdown
|
|
243
|
-
- **路由决定**:<inline/subagent> <implement | check-all>
|
|
244
|
-
- **来源**:<个人 route 配置 `.trellis/.route-prefs.tmp` (<key>=<value>) | auto-loop 临时授权 `.trellis/.runtime/auto-loop/<run-id>.json` | session runtime state `.trellis/.runtime/sessions/<context-key>.json` 的 `route_decisions`>
|
|
245
|
-
- **已写入**:`.trellis/.runtime/sessions/<context-key>.json` 的 `route_decisions`
|
|
246
|
-
- **裸数字有效性**:用户下一条紧邻裸数字回复才可按本 target 解释;摘要、历史消息或旧 target 的裸数字无效
|
|
247
|
-
|
|
248
|
-
```yaml
|
|
249
|
-
route_decision:
|
|
250
|
-
target: <implement | check>
|
|
251
|
-
mode: <inline | subagent | check-all-inline | check-all-subagent>
|
|
252
|
-
source: <trellis-route | route-prefs | auto-loop | numbered-fallback>
|
|
253
|
-
scope: <task | untracked>
|
|
254
|
-
task: <current task path; task only>
|
|
255
|
-
work_id: <current untracked work id; untracked only>
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
接下来主 agent 应当:
|
|
259
|
-
- <路由表里对应的工具调用形式>
|
|
260
|
-
- [若 implement subagent 且 subagent_skip_compile=true:附加“跳过编译”prompt 段]
|
|
261
|
-
|
|
262
|
-
不要:
|
|
263
|
-
- <要避免的工具调用>
|
|
264
|
-
````
|
|
265
|
-
|
|
266
|
-
字段行必须使用 `- **字段**:值` 列表项;裸段落行会在渲染时折叠成一段,不得改回。`route_decision` 必须放在 ```yaml 代码块内,靠代码块保留缩进结构,不得裸写。
|
|
267
|
-
|
|
268
|
-
条件字段按命中情况出现:`来源` 只在命中个人配置、auto-loop 临时授权或 session runtime state 时显示,三者互斥取实际命中项;`已写入` 只在写入 runtime state 成功时显示;`裸数字有效性` 只在本消息刚展示 route 选项并等待用户回答时显示;“跳过编译”段只在 implement subagent + skip_compile=true 时附加。`route_decision` 必须保留在回复中,并至少保留 target/mode/source/scope/task;需要 path/decided_at 等诊断字段时重新调用 helper 并加 `--verbose`。compact summary 若只有自然语言描述,后续 agent 仍应优先读取 runtime state,而不是把 summary 当证据。
|
|
269
|
-
|
|
270
|
-
---
|
|
271
|
-
|
|
272
|
-
## 核心原则
|
|
273
|
-
|
|
274
|
-
1. **个人配置私有**:`.trellis/.route-prefs.tmp` 是本地偏好,gitignored,不能进入提交计划。
|
|
275
|
-
2. **runtime state 私有**:`.trellis/.runtime/sessions/` 是 session/window 状态,gitignored,不能进入提交计划。
|
|
276
|
-
3. **压缩恢复少打断**:当前上下文没有 route 决策时,先读 runtime state;命中当前任务/target 的合法决策就复用,不查 `trellis mem`,也不重问。
|
|
277
|
-
4. **个人默认次于本轮决策**:runtime state 表示“本轮已选”,优先于 `.route-prefs.tmp`。
|
|
278
|
-
5. **auto 授权低于个人默认**:auto-loop 临时授权只在 runtime 和个人偏好都 miss 时生效。
|
|
279
|
-
6. **显式覆盖优先于一切**:用户要求临时改、重新选择或清除默认时,必须重新展示选项,不能让 runtime state 或配置优先。
|
|
280
|
-
7. **当前任务复用路由**:当前任务内已有合法来源的最近 implement/check 路由时,后续实现、修复、重检和复查默认沿用,不再次询问模式。
|
|
281
|
-
8. **check 入口统一**:check 路由只展示 `check-all` inline/subagent;light/full 是 Check-All 的 requested depth,不是 route mode。
|
|
282
|
-
9. **check-all subagent 保持只读**:不得 fallback 到强制自修复的 `trellis-check` agent;不兼容时显式阻塞并让用户重选。
|
|
283
|
-
10. **决策与执行分离**:本 skill 只输出指令,下一轮由主 agent 调工具。
|
|
284
|
-
11. **严格执行用户选择**:路由结论一旦输出,主 agent 必须按指令执行,不可“出于谨慎”再换路径。
|
|
285
|
-
12. **Codex capability 不裁剪选项**:Codex mode banner 只描述原生上下文/readiness 能力;route 明确选中 subagent 时,按 catalog 路径执行。
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## 反模式
|
|
290
|
-
|
|
291
|
-
- 在本 skill 内部直接调用 `Agent` / `Skill` 工具。
|
|
292
|
-
- 用户要求临时改 / 重新选择时,仍直接使用 `.trellis/.route-prefs.tmp`。
|
|
293
|
-
- 把 `.trellis/.route-prefs.tmp` 加入 git 暂存或提交计划。
|
|
294
|
-
- 把 `.trellis/.runtime/sessions/` 加入 git 暂存或提交计划。
|
|
295
|
-
- runtime state 的 task/target/source/mode 不匹配时仍复用。
|
|
296
|
-
- 把显式 light/full 当成新的 route mode,或绕过 Check-All 直达 `trellis-check`。
|
|
297
|
-
- check-all subagent 不存在专用 agent 时,fallback 到带自修复语义的 `trellis-check` agent。
|
|
298
|
-
- 平台没有兼容的 audit-only subagent 时,静默改成 inline 或继续执行。
|
|
299
|
-
- `AskUserQuestion` / `request_user_input` 不可用时,记录为 inline 或 subagent 路径并继续。
|
|
300
|
-
- 没有有效 check 配置、用户选择或最近本轮 check 路由决定时,自动执行 Check-All inline。
|
|
301
|
-
- 没有 `source` 合法的 `route_decision`,就把“用户说过 inline/subagent”或 compact summary 当成已路由。
|
|
302
|
-
- 把 compact summary、ordinary summary、SessionStart 摘要、replacement history 或历史消息里的裸数字 `1` 当成当前 target 的 numbered fallback 选择。
|
|
303
|
-
- 用户裸数字回复不是紧邻当前 route 选项消息时,仍调用 `write --source numbered-fallback`。
|
|
304
|
-
- check 发现问题后,把当前任务内已有合法 route 的修复/重检当成新的 route 边界再次询问模式。
|
|
305
|
-
- 给 check 任何模式附加“跳过编译”指令。
|
|
306
|
-
- 询问后忽视用户答案默认 subagent。
|
|
307
|
-
- 因 `<codex-mode>` 或 `in_progress-inline` 提到 inline,就自行把无配置 route 结果改成 inline 或隐藏 subagent 选项。
|
|
308
|
-
|
|
309
|
-
---
|
|
310
|
-
|
|
311
|
-
## 边界
|
|
312
|
-
|
|
313
|
-
- **非 trellis 项目**(无 `.trellis/`):输出“非 trellis 项目,跳过路由”,不阻断流程。
|
|
314
|
-
- **config.yaml 缺失或字段缺失**:视为 false,不附加跳过编译指令。
|
|
315
|
-
- **无法解析 session context key**:跳过 runtime state 读写,继续 `.route-prefs.tmp` 或展示选项。
|
|
316
|
-
- **runtime state 损坏或不匹配**:忽略该文件,继续 `.route-prefs.tmp` 或展示选项;不要删除。
|
|
317
|
-
- **.route-prefs.tmp 内容损坏**:忽略偏好;必要时删除该文件并重新展示选项。
|
|
318
|
-
- **旧单值偏好**:文件内容只有 `inline` / `subagent` 时视为无效配置,按无配置处理并重新展示选项。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 路由选择与默认管理
|
|
2
|
+
|
|
3
|
+
仅在当前 target 仍有未决选择、用户要求菜单/重选/清除,或处理紧邻编号答复时读取。目标、模式和保存意图已明确的当前指令直接按入口应用,不要求重复选择。
|
|
4
|
+
|
|
5
|
+
## 选项与等待
|
|
6
|
+
|
|
7
|
+
使用可用的用户输入工具,或在聊天中展示相同编号选项并等待;工具不可用不是自动代选理由。implement 与 check 各自独立,选择一个不授权另一个。
|
|
8
|
+
|
|
9
|
+
| 编号 | implement 选项 | check 选项 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 1 | 本次 Inline | 本次 Check-all inline |
|
|
12
|
+
| 2 | 本次 Subagent | 本次 Check-all subagent |
|
|
13
|
+
| 3 | 保存默认:Inline | 保存默认:Check-all inline |
|
|
14
|
+
| 4 | 保存默认:Subagent | 保存默认:Check-all subagent |
|
|
15
|
+
|
|
16
|
+
重选时标题说明当前默认或无默认,1/2 仅覆盖本次,3/4 更新对应默认,并增加 `5. 清除默认`。没有默认时问“本次实现/检查走哪种模式?”;target 含糊只先问目标,不擅自同时修改两种默认。light/full 交给 Check-All,不扩充 mode 选项。
|
|
17
|
+
|
|
18
|
+
裸数字回复(如 `1` / `2` / `3` / `4`)只有在当前可见的上一条 assistant 消息刚展示同一个 target 的选项,并明确停下等待回答时才有效。compact summary、ordinary summary、SessionStart 摘要、replacement history、历史消息、旧 target 或非紧邻裸数字都不能触发 `write --source numbered-fallback`;没有有效紧邻选项时重新展示并等待。
|
|
19
|
+
|
|
20
|
+
普通聊天编号选择用 `source=numbered-fallback`;用户输入工具返回的当前选择用 `source=trellis-route`。不从历史数字、默认预选但未提交的选项或无答复推断选择。
|
|
21
|
+
|
|
22
|
+
## 应用选择
|
|
23
|
+
|
|
24
|
+
`<skill-dir>` 按入口确定。task 的本次选择:
|
|
25
|
+
|
|
26
|
+
来自 auto-loop 启动前选模时,先按 [recovery-and-errors.md](recovery-and-errors.md) 的例外应用选择并返回 runner,不执行下方 task `write` 或末尾同轮实施;本次选择由 runner 的 start 参数保存,明确要求个人默认才使用 `write-pref`。
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
python3 <skill-dir>/scripts/route_state.py write --target <implement|check> --mode <mode> --source <trellis-route|numbered-fallback>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
选项 3/4 或明确保存意图在同一命令加 `--save-pref`;只有写入成功才报告已保存。untracked 的本次选择只用于当前调用,不写 runtime;保存默认:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
python3 <skill-dir>/scripts/route_state.py write-pref --target <implement|check> --mode <mode>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
明确清除指定默认或选项 5 时只清该 target;成功后重新展示无配置选项,不自动选择模式:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
python3 <skill-dir>/scripts/route_state.py clear-pref --target <implement|check>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
helper 保留另一个 target 的个人偏好;task 写入还保留当前 session 的其它字段,并清理属于旧任务的 route 决策。不要手写 JSON 或直接删文件。失败先按入口的异常 reference 核对实际持久化结果;决定已明确但未持久化时简短提示可能在恢复时再次询问。
|
|
45
|
+
|
|
46
|
+
选择确定后回到入口,在同一回合实际执行。对话只说明一句模式;无需发布结构化 YAML、文件路径或下一轮工具清单。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# 路由恢复、异常与只读预检
|
|
2
|
+
|
|
3
|
+
仅在 helper 异常、无法持久化、需要诊断、auto-loop 启动前选模或 prepare 时读取。正常恢复 hit 由入口直接消费,无须加载本文件。
|
|
4
|
+
|
|
5
|
+
## helper 结果
|
|
6
|
+
|
|
7
|
+
- 默认输出精简 JSON:hit/written 含 mode/source/task 等执行证据,miss 含 reason。需要完整 decision、session 路径、context key、pref/auto 路径或写入标记时,在原命令加 `--verbose`;不为诊断额外读 raw runtime。
|
|
8
|
+
- 原始合法来源只有 `trellis-route`、`numbered-fallback`、`route-prefs`、`auto-loop`;`runtime` 是 origin,不是 decision.source。scope、task、target、source 和 mode 都由 helper 校验。
|
|
9
|
+
- helper 只恢复当前 session 或唯一 session fallback 内当前任务的决定;不匹配视为 miss,不删文件、不借用其它任务/窗口。
|
|
10
|
+
|
|
11
|
+
| 状态或原因 | 动作 |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| 非 Trellis 项目 | 跳过 route,不阻断外层流程 |
|
|
14
|
+
| 普通 miss、缺少/不合法 prefs、旧单值偏好 | 读取 interaction 并等待当前选择;不擅自删除配置 |
|
|
15
|
+
| `no-current-task` / subject 两者均未命中 | 返回 Request Triage,不伪造任务 |
|
|
16
|
+
| `no-session-context` 且 workflow 已允许 task 执行 | 跳过 runtime,用 `read-pref` 读取个人默认或交互选择,说明不能保存 session;不当作 untracked |
|
|
17
|
+
| `session-runtime-corrupt/io_error` | 失败关闭:不继续读 prefs/auto-loop,不覆盖损坏文件;报告缺口,由用户决定修复或当前明确选择 |
|
|
18
|
+
| `session-auto-run-corrupt/io_error` | 不 fallback 到其它健康 run,不借用其授权,报告缺口 |
|
|
19
|
+
| helper 缺失、执行失败或输出不可解析 | 不生成虚构 hit,不猜模式;已有当前合法选择只用于本次,否则询问模式 |
|
|
20
|
+
| 写入失败或 skipped | 核对已保存的 pref 与未写入的 session 分别报告;明确当前选择可继续,不虚称持久化成功 |
|
|
21
|
+
|
|
22
|
+
`write --save-pref` 可能先写 pref 再发现 session 不能写入;因此出错后用 `read-pref` 核对明确请求保存的默认,不从 status=error 推断两者均未写。仅核对已请求写入的结果,不把它当作损坏 runtime 的默认 fallback。
|
|
23
|
+
|
|
24
|
+
当前明确选择但未持久化时,只说明“本次按你的选择执行,路由未保存,恢复时可能再次询问”;不要求重复选择,也不把自然语言摘要当下一次的合法恢复证据。损坏文件的修复不由 route 擅自执行。
|
|
25
|
+
|
|
26
|
+
## auto-loop 启动前选模
|
|
27
|
+
|
|
28
|
+
仅在用户明确要求启动自动循环,且 `trellis-auto-loop` 已解析显式任务列表后使用;普通规划、恢复 running action 或历史启动表述不进入此例外。此时 run 尚未创建,不要求任务已开工,也不创建 task/untracked subject。
|
|
29
|
+
|
|
30
|
+
1. 对显式队列任务的 implement/check 使用下方只读预检。匹配任务的 runtime、个人默认和本次候选仍由 helper 按既有顺序解析;不得把某一任务的 session 决定复制成整队列模式。已有合法模式的 target 不重复询问。
|
|
31
|
+
2. 普通 miss 才按 [interaction.md](interaction.md) 询问未决 target;当前明确选择直接采用,implement/check 保持独立,只有用户明确选择整个循环统一模式时才映射两者。菜单、紧邻编号和不代选规则不变;状态损坏或 helper 异常按上方失败关闭规则处理。
|
|
32
|
+
3. 本次临时选择只保留到调用 `auto_loop.py start --route-implement <mode> --route-check <mode>`,只传实际已选择的 target;不得调用 task 的 `write`、手写 runtime 或绑定/切换任务。只有明确要求保存个人默认时调用 `write-pref --target <target> --mode <mode>`,不使用 `write --save-pref`。
|
|
33
|
+
4. 选择确定后同轮返回 `trellis-auto-loop` 启动 runner,继续它返回的 prepare action。不得直接 `task.py start`、实施、运行 Check-All 或分发 subagent,也不等待用户回复“继续”。runner 完成 prepare 后,实际执行仍由相应 action 进入普通 route。
|
|
34
|
+
|
|
35
|
+
启动前询问遵守平台有效的用户输入工具规则;Codex 使用允许的同步 `request_user_input`,不可用时在主对话提问并等待,不调用异步询问工具。选择模式不替代 Open Questions、readiness、Brief 或 Git 安全校验。
|
|
36
|
+
|
|
37
|
+
## auto-loop prepare 预检
|
|
38
|
+
|
|
39
|
+
启动前选模和 runner prepare 共用同一 helper 的只读预检:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python3 <skill-dir>/scripts/route_state.py resolve --target <implement|check> --read-only --task <repository-relative-task-path> [--auto-mode <runner-candidate>]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
顺序为匹配任务的 runtime → prefs → runner 显式候选;不写 session、不绑定任务、不扫描其它 run 借用授权。`--task` 只接受项目 `.trellis/tasks/` 内存在的非软链路径,`--task/--auto-mode` 仅用于只读模式。预检不是执行决定;实际执行仍由普通 resolve 校验和持久化。缺少 helper 或合法 mode 时 runner 保守要求相应 JSONL context。
|
|
46
|
+
|
|
47
|
+
正常 auto-loop 授权仅来自当前 session 绑定的 run 或唯一 running run,且当前任务必须属于 pending/running 队列。个人默认高于此临时授权;runtime 已选决定高于个人默认。run 已停止、队列项已完成、task 不属于 run、状态损坏或 run 不唯一时不得借用授权。
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Subagent 路由分发
|
|
2
|
+
|
|
3
|
+
仅在最终模式为 subagent 时读取。当前平台启动的唯一事实源是同目录 `platform-dispatch.json`;当前运行平台上下文确定稳定 ID,读取对应条目,不从目录存在或 Codex banner 推导执行模式。
|
|
4
|
+
|
|
5
|
+
## 启动资格
|
|
6
|
+
|
|
7
|
+
- implement 使用 `implement.target/launch`;Check-All 使用 `checkAll.target/launch/format/verification`。把 catalog 的 launch 翻译成当前 host 的真实工具调用。
|
|
8
|
+
- 目标文件存在只证明已投影;还须确认当前 host 暴露声明的 launcher、目标实际可发现且 `eligible=true`。不成立时说明原因,展示 `inlineOnlyReason`(若有)并让用户改选 inline;禁止静默降级、通用 agent、替代角色或上游 workspace-write `trellis-check` fallback。
|
|
9
|
+
- Check-All 目标必须明确 audit-only:允许返回 DOC 候选,禁止自修源代码、测试、配置或任务材料。`verification` 不放宽只读边界;不合格时停止,由用户重选。
|
|
10
|
+
- agent 直接执行,不递归 dispatch implement/check agent。
|
|
11
|
+
|
|
12
|
+
## 上下文与 Prompt
|
|
13
|
+
|
|
14
|
+
任务 prompt 第一行固定为 `Active task: <task path from task.py current>`。实现使用当前任务契约;Check-All 先读 `check.jsonl` 及其文件,再读 prd.md、design.md(若存在)、implement.md(若存在)。
|
|
15
|
+
|
|
16
|
+
untracked prompt 第一行固定为 `Untracked work: <work-id>`,包含事项摘要、当前 stage、实际 diff、相关 spec、已有验证和本轮职责。helper 只提供流程游标,不提供 scope、baseline、fingerprint 或 owner evidence。不得写 `Active task:`,不得要求 task PRD/JSONL 或伪造 task artifacts。
|
|
17
|
+
|
|
18
|
+
Check-All prompt 指明:执行本地 `trellis-check-all` 的 audit-only collect-all 全流程,使用专用角色规则并完成三件套实现、实现假设、完整性与规范三个维度。返回完整报告、check_profile、全部 CHK/FBK/DOC 候选、验证证据与剩余风险,不输出 commit/push 计划,不替用户决定修复范围。
|
|
19
|
+
|
|
20
|
+
风险分类和只读细则由已投影的专用 agent(作者模板 `check-all-agent-body.md`)及 Check-All owner 所有;发送 prompt 不复制完整审计手册。必须确认其契约保留:
|
|
21
|
+
|
|
22
|
+
- 根因先于严重度,主路径 `CHK-*`、兜底 `FBK-*` 和低风险事实漂移 `DOC-*` 分开;CHK/FBK 均分 P0/P1/P2。
|
|
23
|
+
- 已声明的兜底契约只影响证据和严重度,不改变 `FBK-*` 归属;具体位置、可达场景和问题证据足以返回 FBK,不要求异常实际发生。保护收益/验证方式属于报告完整度,泛化建议不报告。
|
|
24
|
+
- 提交前必需但证据不足为阻断型部分验证;只可上线后、生产或外部环境验收的内容保留 `[上线后验证]` 动作、边界和预期结果,不执行且不误标阻断。
|
|
25
|
+
- 审查只读,DOC 也只返回候选,主会话按 Check-All 规则处理;风险接受由用户决定,agent 不接受、不清除风险。
|
|
26
|
+
|
|
27
|
+
## implement 跳过编译
|
|
28
|
+
|
|
29
|
+
仅 implement subagent 读取 `.trellis/config.yaml` 的 `subagent_skip_compile`。缺失或不是 true 视为 false;check 任何模式不得附加跳过编译。为 true 时 prompt 附加:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
本项目 subagent_skip_compile=true。跳过编译相关命令,完成其它必要验证并说明未编译;不要把未执行的编译报告为通过。
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
接收 implement 结果后返回 workflow Phase 2.1 completion contract;Check-All 结果交主会话按其 owner 分流。route 不独立拥有完成后停止策略。
|