@jun133/athlete 0.0.3 → 0.0.5
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/README.md +17 -12
- package/dist/cli.js +7475 -4084
- package/dist/cli.js.map +1 -1
- package/package.json +4 -1
- package/scripts/postinstall-playwright.mjs +10 -10
- package/spec/architecture//346/200/273/344/275/223/346/236/266/346/236/204.md +25 -21
- package/spec/architecture//347/212/266/346/200/201/344/270/216/347/234/237/347/233/270/346/272/220.md +20 -17
- package/spec/architecture//350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +105 -48
- package/spec/implementation//347/233/256/345/275/225/347/273/223/346/236/204/345/210/260/344/273/243/347/240/201/346/226/207/344/273/266/346/230/240/345/260/204/350/241/250.md +141 -66
- package/spec/interfaces/InteractionShell.md +15 -7
- package/spec/modules/config-system.md +45 -19
- package/spec/modules/interactive-terminal.md +49 -22
- package/spec/modules/lightweight-context-runtime.md +34 -17
- package/spec/modules/provider-adapter.md +45 -20
- package/spec/modules/runtime-metrics.md +54 -24
- package/spec/modules/runtime-rules.md +52 -20
- package/spec/modules/session-resume-compact.md +20 -14
- package/spec/modules/task-state.md +25 -18
- package/spec/modules/telegram-private-chat.md +2 -1
- package/spec/modules/tool-registry.md +93 -35
- package/spec/modules//346/211/251/345/261/225/346/234/272/345/210/266.md +65 -29
- package/spec/overview/v0/350/214/203/345/233/264.md +7 -6
- package/spec/overview//344/272/247/345/223/201/345/256/232/344/271/211.md +14 -12
- package/spec/principles/P06-/344/270/212/344/270/213/346/226/207/350/246/201/350/203/275/345/216/213/347/274/251.md +5 -5
- package/spec/principles/P13-session/346/230/257/344/273/273/345/212/241/347/216/260/345/234/272.md +5 -5
- package/spec/principles/P15-provider/345/277/205/351/241/273/345/217/257/346/233/277/346/215/242.md +12 -10
- package/spec/principles/P18-/344/270/273/345/276/252/347/216/257/345/222/214/346/226/207/344/273/266/351/203/275/344/270/215/350/203/275/351/225/277/350/203/226.md +37 -36
- package/spec/principles/P20-/345/244/226/351/203/250/344/272/213/345/256/236/345/277/205/351/241/273/347/273/221/345/256/232/350/257/201/346/215/256.md +48 -0
- package/spec/principles/P21-/346/262/241/351/252/214/350/277/207/345/260/261/344/270/215/350/203/275/346/224/266/345/217/243.md +46 -0
- package/spec/principles/P22-/351/230/266/346/256/265/346/216/250/350/277/233/345/277/205/351/241/273/346/234/211/346/234/272/345/231/250/347/212/266/346/200/201.md +40 -0
- package/spec/principles/P23-/346/226/207/346/234/254/351/223/276/350/267/257/345/277/205/351/241/273/347/250/263/345/256/232/345/217/257/350/257/273.md +38 -0
- package/spec/principles/P24-/351/224/231/350/257/257/345/205/274/345/256/271/344/270/215/350/203/275/351/253/230/344/272/216/346/255/243/347/241/256/346/200/247.md +37 -0
- package/spec/principles/README.md +47 -39
- package/spec/testing//346/265/213/350/257/225/347/255/226/347/225/245.md +27 -16
|
@@ -4,18 +4,23 @@
|
|
|
4
4
|
|
|
5
5
|
Tool registry 负责向模型公开动作集合,并统一管理本地工具与 MCP 动态工具。
|
|
6
6
|
|
|
7
|
-
## 当前组成
|
|
8
|
-
|
|
9
|
-
- 本地内建工具
|
|
10
|
-
- mode 过滤后的工具集
|
|
11
|
-
- MCP 动态收集到的工具
|
|
7
|
+
## 当前组成
|
|
8
|
+
|
|
9
|
+
- 本地内建工具
|
|
10
|
+
- mode 过滤后的工具集
|
|
11
|
+
- MCP 动态收集到的工具
|
|
12
|
+
- 统一治理后的 `entries / blocked` 结果
|
|
12
13
|
|
|
13
14
|
## 当前规则
|
|
14
15
|
|
|
15
16
|
1. 新工具先注册,再暴露给模型。
|
|
16
17
|
2. tool handler 只做动作,不做控制面真相发明。
|
|
17
|
-
3. skill 不是工具替代品;skill 提供 workflow,tool 提供动作。
|
|
18
|
-
4. MCP 工具也必须经过统一 registry,不走旁路。
|
|
18
|
+
3. skill 不是工具替代品;skill 提供 workflow,tool 提供动作。
|
|
19
|
+
4. MCP 工具也必须经过统一 registry,不走旁路。
|
|
20
|
+
5. 工具暴露顺序、workflow fallback、change / verification signal 约束都由机器治理 metadata 决定,而不是靠 prompt 复述。
|
|
21
|
+
6. metadata 缺失或不兼容时默认 fail-closed:
|
|
22
|
+
- 内建 / 本地 includeTools 直接报错
|
|
23
|
+
- MCP 工具进入 `blocked`,不暴露给模型
|
|
19
24
|
|
|
20
25
|
## 工具层职责
|
|
21
26
|
|
|
@@ -43,37 +48,90 @@ Tool registry 负责向模型公开动作集合,并统一管理本地工具与
|
|
|
43
48
|
- `src/tools/shell/`
|
|
44
49
|
- `src/tools/skills/`
|
|
45
50
|
|
|
46
|
-
共享层仍在 `src/tools/` 根目录:
|
|
47
|
-
|
|
48
|
-
- `registry.ts`
|
|
49
|
-
- `runtimeRegistry.ts`
|
|
50
|
-
- `
|
|
51
|
-
- `
|
|
52
|
-
- `
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
51
|
+
共享层仍在 `src/tools/` 根目录:
|
|
52
|
+
|
|
53
|
+
- `registry.ts`
|
|
54
|
+
- `runtimeRegistry.ts`
|
|
55
|
+
- `governance.ts`
|
|
56
|
+
- `routing.ts`
|
|
57
|
+
- `shared.ts`
|
|
58
|
+
- `types.ts`
|
|
59
|
+
- `changeTracking.ts`
|
|
60
|
+
|
|
61
|
+
## Playwright MCP 当前事实
|
|
62
|
+
|
|
63
|
+
当前 Playwright adapter 通过 runtime registry 暴露一组 `mcp_playwright_browser_*` 工具;这是 adapter surface,不是上层 machine rule。
|
|
64
|
+
|
|
65
|
+
当前 adapter 层常见名字包括:
|
|
66
|
+
|
|
67
|
+
- `mcp_playwright_browser_navigate`
|
|
68
|
+
- `mcp_playwright_browser_snapshot`
|
|
69
|
+
- `mcp_playwright_browser_click`
|
|
61
70
|
- `mcp_playwright_browser_type`
|
|
62
71
|
- `mcp_playwright_browser_take_screenshot`
|
|
63
72
|
- 以及其他 `mcp_playwright_browser_*`
|
|
64
|
-
|
|
65
|
-
当前优先级策略:
|
|
66
|
-
|
|
67
|
-
- runtime registry
|
|
68
|
-
-
|
|
69
|
-
-
|
|
73
|
+
|
|
74
|
+
当前优先级策略:
|
|
75
|
+
|
|
76
|
+
- runtime registry 先用治理 metadata 做 fail-closed 过滤,再按机器排序暴露工具
|
|
77
|
+
- 浏览器工具会通过治理 metadata 稳定排到本地文件工具和 shell 工具前面
|
|
78
|
+
- request 级 tool priority 会消费同一套 metadata,在 web research / browser automation 场景继续把浏览器 capability 工具前置
|
|
79
|
+
- `run_shell` 与本地文件 detour 在 browser workflow 下只作为 fallback
|
|
80
|
+
|
|
81
|
+
## 当前治理模型
|
|
82
|
+
|
|
83
|
+
当前 registry 暴露给机器的不只是 tool schema,还包括:
|
|
84
|
+
|
|
85
|
+
- `entries`: 每个已暴露工具的统一 governance metadata
|
|
86
|
+
- `blocked`: 因 metadata 缺失、MCP 缺少可信只读提示、或治理不兼容而被 fail-closed 的工具
|
|
87
|
+
|
|
88
|
+
当前 governance metadata 至少回答:
|
|
89
|
+
|
|
90
|
+
- 是否只读 / 会不会修改状态
|
|
91
|
+
- 是否高风险 / destructive
|
|
92
|
+
- 是否要求 change signal / verification signal
|
|
93
|
+
- 是否属于 browser capability
|
|
94
|
+
- browser step 是 `navigate / snapshot / take_screenshot / click / type / other`
|
|
95
|
+
- 是否属于 document-reading capability
|
|
96
|
+
- document kind 是 `doc / image / pdf / ppt / spreadsheet`
|
|
97
|
+
- 是否在特定 workflow 下只能 fallback
|
|
98
|
+
- 是否并发安全
|
|
99
|
+
|
|
100
|
+
## 当前上层约束
|
|
101
|
+
|
|
102
|
+
上层 machine rule 当前必须遵守:
|
|
103
|
+
|
|
104
|
+
1. workflow guard 只认 browser capability / browser step,不认具体 Playwright 工具名。
|
|
105
|
+
2. tool priority 只认治理 metadata,不认具体 Playwright 工具名。
|
|
106
|
+
3. document routing hint 只认 `document.read` / `spreadsheet.read` capability,不把 `mineru_*` 名字继续上推。
|
|
107
|
+
4. acceptance / phase / verification 只认统一 signal,不认 adapter 工具名。
|
|
108
|
+
|
|
109
|
+
## 当前代码落点
|
|
110
|
+
|
|
111
|
+
- `src/tools/governance.ts`
|
|
112
|
+
- browser capability、browser step、document kind、fail-closed metadata
|
|
113
|
+
- `src/tools/order.ts`
|
|
114
|
+
- 暴露排序
|
|
115
|
+
- `src/agent/toolPriority.ts`
|
|
116
|
+
- request 级 tool priority,消费统一 metadata
|
|
117
|
+
- `src/skills/workflowGuards.ts`
|
|
118
|
+
- 只输出 `suggestedCapability`
|
|
119
|
+
- `src/tools/routing.ts`
|
|
120
|
+
- `document.read` / `spreadsheet.read` capability hint
|
|
121
|
+
- `src/mcp/toolAdapter.ts`
|
|
122
|
+
- adapter 层把 MCP 工具接入 registry,保留 origin 信息
|
|
123
|
+
|
|
124
|
+
## 对齐说明
|
|
125
|
+
|
|
126
|
+
- adapter 层仍可以保留 `mcp_playwright_browser_*`、`mineru_*` 这类生态名词
|
|
127
|
+
- 但 registry 暴露给上层的真相必须是 capability metadata,而不是生态字符串
|
|
70
128
|
|
|
71
129
|
## 当前约束
|
|
72
130
|
|
|
73
|
-
如果某个动作:
|
|
74
|
-
|
|
75
|
-
- 需要明确输入输出
|
|
76
|
-
- 不适合塞进 prompt
|
|
77
|
-
- 不该让模型自己拼 shell
|
|
78
|
-
|
|
79
|
-
就应该做成工具,而不是继续加提示词。
|
|
131
|
+
如果某个动作:
|
|
132
|
+
|
|
133
|
+
- 需要明确输入输出
|
|
134
|
+
- 不适合塞进 prompt
|
|
135
|
+
- 不该让模型自己拼 shell
|
|
136
|
+
|
|
137
|
+
就应该做成工具,而不是继续加提示词。
|
|
@@ -36,10 +36,10 @@ skills 已经是标准化 V1,而不是散装 prompt 片段。
|
|
|
36
36
|
- `web-research`
|
|
37
37
|
- `browser-automation`
|
|
38
38
|
|
|
39
|
-
MinerU 文档 workflow 现在按类别拆成独立工具:
|
|
40
|
-
|
|
41
|
-
- `mineru_pdf_read`
|
|
42
|
-
- `mineru_image_read`
|
|
39
|
+
MinerU 文档 workflow 现在按类别拆成独立工具:
|
|
40
|
+
|
|
41
|
+
- `mineru_pdf_read`
|
|
42
|
+
- `mineru_image_read`
|
|
43
43
|
- `mineru_doc_read`
|
|
44
44
|
- `mineru_ppt_read`
|
|
45
45
|
|
|
@@ -78,28 +78,64 @@ MinerU 文档 workflow 现在按类别拆成独立工具:
|
|
|
78
78
|
- 提供使用策略
|
|
79
79
|
- 当前是 `web-research` 与 `browser-automation`
|
|
80
80
|
|
|
81
|
-
设计原则:
|
|
82
|
-
|
|
83
|
-
- 联网能力先做成 `tool` 或 `MCP`
|
|
84
|
-
- `skill` 只做 workflow
|
|
85
|
-
- 不把底层联网继续堆进 `systemPrompt`
|
|
86
|
-
|
|
87
|
-
##
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
81
|
+
设计原则:
|
|
82
|
+
|
|
83
|
+
- 联网能力先做成 `tool` 或 `MCP`
|
|
84
|
+
- `skill` 只做 workflow
|
|
85
|
+
- 不把底层联网继续堆进 `systemPrompt`
|
|
86
|
+
|
|
87
|
+
## 当前 capability 边界
|
|
88
|
+
|
|
89
|
+
当前扩展层已经明确区分:
|
|
90
|
+
|
|
91
|
+
1. adapter / tool surface
|
|
92
|
+
- 可以保留 `@playwright/mcp`、`mineru_*` 这类生态名词
|
|
93
|
+
2. runtime governance / workflow / acceptance
|
|
94
|
+
- 只认 capability / signal
|
|
95
|
+
- 不认具体生态字符串
|
|
96
|
+
|
|
97
|
+
当前上层抽象:
|
|
98
|
+
|
|
99
|
+
- browser capability
|
|
100
|
+
- `browser.navigate`
|
|
101
|
+
- `browser.snapshot`
|
|
102
|
+
- `browser.take_screenshot`
|
|
103
|
+
- `browser.click`
|
|
104
|
+
- `browser.type`
|
|
105
|
+
- document capability
|
|
106
|
+
- `document.read`
|
|
107
|
+
- `spreadsheet.read`
|
|
108
|
+
- acceptance signals
|
|
109
|
+
- `http_endpoint_verified`
|
|
110
|
+
- `web_page_verified`
|
|
111
|
+
- `document_read_completed`
|
|
112
|
+
- `structured_artifact_valid`
|
|
113
|
+
|
|
114
|
+
## 当前接线点
|
|
115
|
+
|
|
116
|
+
当前 skill / MCP / runtime 的接线点:
|
|
117
|
+
|
|
118
|
+
- `src/context/projectContext.ts`
|
|
119
|
+
- `src/tools/skills/loadSkillTool.ts`
|
|
120
|
+
- `src/agent/systemPrompt.ts`
|
|
121
|
+
- `src/skills/prompt.ts`
|
|
122
|
+
- `src/agent/runTurn.ts`
|
|
123
|
+
- `src/tools/governance.ts`
|
|
124
|
+
- `src/tools/runtimeRegistry.ts`
|
|
125
|
+
- `src/tools/routing.ts`
|
|
126
|
+
- `src/mcp/registryIntegration.ts`
|
|
127
|
+
- `src/mcp/toolAdapter.ts`
|
|
128
|
+
- `src/agent/acceptance/signals.ts`
|
|
129
|
+
|
|
130
|
+
## 当前约束
|
|
131
|
+
|
|
132
|
+
当前扩展仍必须满足:
|
|
133
|
+
|
|
134
|
+
- 不破坏 continuation / compact / recovery
|
|
135
|
+
- 不让主循环继续长胖
|
|
136
|
+
- 不新造平行技能体系
|
|
137
|
+
- 不让 MCP 绕开统一 registry
|
|
138
|
+
- skill prompt 只输出本轮决策相关的 runtime hint(loaded / selected / missing required),不回退成 catalog dump
|
|
139
|
+
- MCP 工具进入 runtime registry 前必须先经过治理 metadata 归一化;安全信息不够时默认 fail-closed
|
|
140
|
+
- browser-first / document routing / workflow fallback 由机器治理逻辑优先决定,prompt 只保留原则级说明
|
|
141
|
+
- adapter 名词允许存在于工具实现、技能名、README、配置与测试中,但不允许继续进入上层 machine rule
|
|
@@ -16,12 +16,13 @@
|
|
|
16
16
|
- docx / spreadsheet 基础能力
|
|
17
17
|
- background job
|
|
18
18
|
|
|
19
|
-
### 控制面
|
|
20
|
-
|
|
21
|
-
- 任务板持久化
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
19
|
+
### 控制面
|
|
20
|
+
|
|
21
|
+
- 任务板持久化
|
|
22
|
+
- machine-enforced orchestration lifecycle
|
|
23
|
+
- teammate 名册与 inbox
|
|
24
|
+
- 协议请求与审批状态
|
|
25
|
+
- worktree 绑定与隔离
|
|
25
26
|
|
|
26
27
|
### 扩展
|
|
27
28
|
|
|
@@ -18,12 +18,13 @@ Athlete 是一个终端优先的 AI harness。
|
|
|
18
18
|
|
|
19
19
|
**一个耐跑、可续跑、面向复杂任务的终端智能体框架。**
|
|
20
20
|
|
|
21
|
-
它现在最强的价值不是“最会聊天”,而是:
|
|
22
|
-
|
|
23
|
-
- 不容易中途断掉
|
|
24
|
-
- 出错后会继续排查
|
|
25
|
-
- 长任务能自动续跑
|
|
26
|
-
- 多步任务有状态落盘
|
|
21
|
+
它现在最强的价值不是“最会聊天”,而是:
|
|
22
|
+
|
|
23
|
+
- 不容易中途断掉
|
|
24
|
+
- 出错后会继续排查
|
|
25
|
+
- 长任务能自动续跑
|
|
26
|
+
- 多步任务有状态落盘
|
|
27
|
+
- 任务派工和恢复不靠 prompt 记忆
|
|
27
28
|
|
|
28
29
|
## 下一阶段定位
|
|
29
30
|
|
|
@@ -31,12 +32,13 @@ Athlete 是一个终端优先的 AI harness。
|
|
|
31
32
|
|
|
32
33
|
**一个以耐跑主 Agent 为核心、能够统筹任务与技能扩展的总指挥型智能体平台。**
|
|
33
34
|
|
|
34
|
-
关键词:
|
|
35
|
-
|
|
36
|
-
- 主 Agent 很强
|
|
37
|
-
- 复杂任务时会拆分与调度
|
|
38
|
-
- skills 是标准扩展口
|
|
39
|
-
- 多 Agent 是按需能力,不是默认军团
|
|
35
|
+
关键词:
|
|
36
|
+
|
|
37
|
+
- 主 Agent 很强
|
|
38
|
+
- 复杂任务时会拆分与调度
|
|
39
|
+
- skills 是标准扩展口
|
|
40
|
+
- 多 Agent 是按需能力,不是默认军团
|
|
41
|
+
- 控制面知道任务为什么 ready / blocked / active / completed
|
|
40
42
|
|
|
41
43
|
## 目标用户
|
|
42
44
|
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
这条原则直接保护 Athlete 当前最强的“耐跑能力”。
|
|
18
18
|
|
|
19
|
-
## 当前对应
|
|
20
|
-
|
|
21
|
-
- `src/agent/
|
|
22
|
-
- `src/agent/
|
|
23
|
-
- `src/agent/retryPolicy.ts`
|
|
19
|
+
## 当前对应
|
|
20
|
+
|
|
21
|
+
- `src/agent/context.ts`
|
|
22
|
+
- `src/agent/turn/managed.ts`
|
|
23
|
+
- `src/agent/retryPolicy.ts`
|
package/spec/principles/P13-session/346/230/257/344/273/273/345/212/241/347/216/260/345/234/272.md
CHANGED
|
@@ -23,8 +23,8 @@ session 里应该能承接:
|
|
|
23
23
|
- verification 状态
|
|
24
24
|
- task state
|
|
25
25
|
|
|
26
|
-
## 当前对应
|
|
27
|
-
|
|
28
|
-
- `src/agent/
|
|
29
|
-
- `src/agent/taskState.ts`
|
|
30
|
-
- `src/agent/
|
|
26
|
+
## 当前对应
|
|
27
|
+
|
|
28
|
+
- `src/agent/session.ts`
|
|
29
|
+
- `src/agent/session/taskState.ts`
|
|
30
|
+
- `src/agent/verification.ts`
|
package/spec/principles/P15-provider/345/277/205/351/241/273/345/217/257/346/233/277/346/215/242.md
CHANGED
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
|
|
11
11
|
Athlete 要做 harness,不做某一家的皮肤。
|
|
12
12
|
|
|
13
|
-
## 在 Athlete 里的含义
|
|
14
|
-
|
|
15
|
-
- 当前优先支持 OpenAI-compatible 接口
|
|
16
|
-
- provider 选择属于配置层,不属于业务层
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- `src/
|
|
22
|
-
- `src/
|
|
13
|
+
## 在 Athlete 里的含义
|
|
14
|
+
|
|
15
|
+
- 当前优先支持 OpenAI-compatible 接口
|
|
16
|
+
- provider 选择属于配置层,不属于业务层
|
|
17
|
+
- provider-specific fallback、reasoning、tool 兼容性都属于 adapter / capability 层,不属于 kernel 主循环
|
|
18
|
+
|
|
19
|
+
## 当前对应
|
|
20
|
+
|
|
21
|
+
- `src/agent/provider.ts`
|
|
22
|
+
- `src/agent/api.ts`
|
|
23
|
+
- `src/config/store.ts`
|
|
24
|
+
- `src/types.ts`
|
|
@@ -1,36 +1,37 @@
|
|
|
1
|
-
# P18 主循环和文件都不能长胖
|
|
2
|
-
|
|
3
|
-
## 原则
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## 为什么
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- `src/
|
|
35
|
-
- `src/
|
|
36
|
-
- `src/
|
|
1
|
+
# P18 主循环和文件都不能长胖
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
主循环必须保持调度中心地位;单个文件必须保持单一职责;系统靠解耦和模块组合生长,而不是靠把越来越多逻辑塞进一个文件。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
如果一个文件什么都做:
|
|
10
|
+
|
|
11
|
+
- AI 很容易改坏别的部分
|
|
12
|
+
- 人很难知道该去哪里改
|
|
13
|
+
- 小改动会牵动全身
|
|
14
|
+
- 后续维护成本会迅速失控
|
|
15
|
+
|
|
16
|
+
Athlete 要的是可持续迭代,不是短期堆代码。
|
|
17
|
+
|
|
18
|
+
## 铁律
|
|
19
|
+
|
|
20
|
+
1. 单文件单职责优先,解耦优先,模块化优先。
|
|
21
|
+
2. “先能跑再塞进一个文件”不是长期方案,发现职责混杂就要拆。
|
|
22
|
+
3. 行数阈值只是预警,不是宗教;真正要盯的是职责是否混杂、边界是否清楚、后续是否好维护。
|
|
23
|
+
4. 主循环只保留全局调度规则,不吞模块细节。
|
|
24
|
+
5. 新功能优先长在新模块、新目录或明确扩展点上,不优先堆进已有大文件。
|
|
25
|
+
|
|
26
|
+
## 在 Athlete 当前阶段的含义
|
|
27
|
+
|
|
28
|
+
- 一个文件如果已经承担两件以上主要事情,就优先拆。
|
|
29
|
+
- 能拆成状态层、执行层、验证层、展示层,就不要继续糊在一起。
|
|
30
|
+
- 能删掉错误旧层,就不要为了兼容继续保留。
|
|
31
|
+
|
|
32
|
+
## 当前对应
|
|
33
|
+
|
|
34
|
+
- `src/agent/runTurn.ts`
|
|
35
|
+
- `src/tools/`
|
|
36
|
+
- `src/team/`
|
|
37
|
+
- `src/tasks/`
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# P20 外部事实必须绑定证据
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
任何来自网页、文档、邮件、截图、检索结果或外部文件的事实,只要要进入结构化产物、摘要、报告或最终结论,就必须绑定证据。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
如果系统允许“查到一点点,再补写一整段”:
|
|
10
|
+
|
|
11
|
+
- 结果会看起来很完整,但并不可靠
|
|
12
|
+
- 模型会把猜测混进事实
|
|
13
|
+
- 人很难区分“真实抓到的”与“模型补出来的”
|
|
14
|
+
|
|
15
|
+
Athlete 要做的是可执行系统,不是会写漂亮答案的壳。
|
|
16
|
+
|
|
17
|
+
## 在 Athlete 里的含义
|
|
18
|
+
|
|
19
|
+
进入最终产物的每条外部事实,至少应能追到:
|
|
20
|
+
|
|
21
|
+
- 来源名
|
|
22
|
+
- 来源链接或来源文件
|
|
23
|
+
- 抓取时间
|
|
24
|
+
- 证据摘录或定位信息
|
|
25
|
+
|
|
26
|
+
如果没有这些,系统应优先:
|
|
27
|
+
|
|
28
|
+
- 继续抓取
|
|
29
|
+
- 标成未证实
|
|
30
|
+
- 或直接拒绝写入最终结果
|
|
31
|
+
|
|
32
|
+
而不是让模型自行补齐。
|
|
33
|
+
|
|
34
|
+
如果任务本身还声明了结构化证据字段,例如:
|
|
35
|
+
|
|
36
|
+
- `source_name`
|
|
37
|
+
- `link`
|
|
38
|
+
- `fetched_at`
|
|
39
|
+
- `evidence_excerpt`
|
|
40
|
+
|
|
41
|
+
那这些字段也属于硬门禁。缺任一项,都不能算“证据已绑定”。
|
|
42
|
+
|
|
43
|
+
## 当前对应
|
|
44
|
+
|
|
45
|
+
- `src/agent/prompt/`
|
|
46
|
+
- `src/tools/files/toolResultArtifact.ts`
|
|
47
|
+
- `src/agent/verification.ts`
|
|
48
|
+
- `spec/modules/lightweight-context-runtime.md`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# P21 没验过就不能收口
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
没有真实验证通过,就不能把任务判定为完成。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
“写了文件”不等于“做成了”。
|
|
10
|
+
|
|
11
|
+
如果系统允许下面这些情况直接收口:
|
|
12
|
+
|
|
13
|
+
- 服务没启动
|
|
14
|
+
- 页面没打开
|
|
15
|
+
- JSON 不可解析
|
|
16
|
+
- 关键文件缺失
|
|
17
|
+
- 结果文件内容不可读
|
|
18
|
+
|
|
19
|
+
那最后交付出来的就只是看起来像完成。
|
|
20
|
+
|
|
21
|
+
## 在 Athlete 里的含义
|
|
22
|
+
|
|
23
|
+
closeout 必须依赖真实验收条件,而不是模型自述。
|
|
24
|
+
|
|
25
|
+
至少要检查:
|
|
26
|
+
|
|
27
|
+
- 任务要求的关键文件是否存在
|
|
28
|
+
- 关键命令是否实际跑通
|
|
29
|
+
- 关键接口或页面是否真实可用
|
|
30
|
+
- verification state 是否与真实产物一致
|
|
31
|
+
|
|
32
|
+
如果任务已经显式给出了 acceptance / closeout 契约,还必须继续检查:
|
|
33
|
+
|
|
34
|
+
- 必需文件是否齐全
|
|
35
|
+
- JSON 是否可解析
|
|
36
|
+
- 研究 / 文档结果里的证据字段是否齐全
|
|
37
|
+
- API / 页面探活结果是否真的通过
|
|
38
|
+
|
|
39
|
+
只要关键验证没过,就继续工作,不允许 finalize。
|
|
40
|
+
|
|
41
|
+
## 当前对应
|
|
42
|
+
|
|
43
|
+
- `src/agent/turn/finalize.ts`
|
|
44
|
+
- `src/agent/turn/closeout.ts`
|
|
45
|
+
- `src/agent/verification.ts`
|
|
46
|
+
- `spec/architecture/运行时循环.md`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# P22 阶段推进必须有机器状态
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
任务处于哪个阶段,不应只靠模型口头描述,必须有机器可读的阶段状态。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
长任务最容易出现两种漂移:
|
|
10
|
+
|
|
11
|
+
- 还没完成当前阶段,就提前说“下一步”
|
|
12
|
+
- 已经卡住了,但还在原地重复动作
|
|
13
|
+
|
|
14
|
+
如果没有显式阶段,系统就无法判断自己是在推进、卡住,还是绕圈。
|
|
15
|
+
|
|
16
|
+
## 在 Athlete 里的含义
|
|
17
|
+
|
|
18
|
+
像下面这类任务,都应有清楚 phase:
|
|
19
|
+
|
|
20
|
+
- 研究任务:发现来源 -> 抓取 -> 归一化 -> 落地 -> 验证
|
|
21
|
+
- 文档任务:找文档 -> 获取文档 -> 读取 -> 抽取结构 -> 证据映射 -> 验证
|
|
22
|
+
- 编码任务:搭结构 -> 实现 -> 安装依赖 -> 运行 -> 验证 -> 收口
|
|
23
|
+
|
|
24
|
+
阶段切换应尽量由真实事件触发:
|
|
25
|
+
|
|
26
|
+
- 找到文档
|
|
27
|
+
- 读到文档
|
|
28
|
+
- 生成了结构化结果
|
|
29
|
+
- 验证通过
|
|
30
|
+
|
|
31
|
+
而不是只因为模型说“现在进入下一步”。
|
|
32
|
+
|
|
33
|
+
如果同一 phase 连续多轮没有新增成果,机器状态还必须明确记住“正在停滞”,并推动系统换路、恢复或进入更明确的补救分支。
|
|
34
|
+
|
|
35
|
+
## 当前对应
|
|
36
|
+
|
|
37
|
+
- `src/agent/checkpoint/`
|
|
38
|
+
- `src/agent/runtimeTransition/`
|
|
39
|
+
- `src/agent/session/taskState.ts`
|
|
40
|
+
- `spec/modules/session-resume-compact.md`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# P23 文本链路必须稳定可读
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
输入、日志、可见预览、持久化内容和生成文件,必须保持稳定、可读、可逆的文本链路。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
一旦文本链路坏掉:
|
|
10
|
+
|
|
11
|
+
- prompt 会被污染
|
|
12
|
+
- 模型会误解任务
|
|
13
|
+
- 日志会失去诊断价值
|
|
14
|
+
- 生成文件会直接变坏
|
|
15
|
+
|
|
16
|
+
这不是界面小问题,而是正确性问题。
|
|
17
|
+
|
|
18
|
+
## 在 Athlete 里的含义
|
|
19
|
+
|
|
20
|
+
系统必须把编码和文本完整性当作主链路要求,而不是显示细节。
|
|
21
|
+
|
|
22
|
+
至少应保证:
|
|
23
|
+
|
|
24
|
+
- 中文和英文输入不被破坏
|
|
25
|
+
- 可见日志和 tool preview 可读
|
|
26
|
+
- session / checkpoint / artifacts 落盘后可再次读取
|
|
27
|
+
- 写出的文本文件不出现乱码污染
|
|
28
|
+
- shell / 子进程输出不能依赖平台默认编码碰运气
|
|
29
|
+
- UTF-8 / UTF-16 等常见文本格式要能稳定识别,不误判成 binary
|
|
30
|
+
|
|
31
|
+
如果出现乱码,优先级应高于继续堆功能。
|
|
32
|
+
|
|
33
|
+
## 当前对应
|
|
34
|
+
|
|
35
|
+
- `src/utils/stdio.ts`
|
|
36
|
+
- `src/ui/streamRenderer.ts`
|
|
37
|
+
- `src/agent/session/`
|
|
38
|
+
- `src/tools/files/`
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# P24 错误兼容不能高于正确性
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
错误旧逻辑、错误旧测试、错误旧兼容,不能为了“少改一点”而继续保留。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
Athlete 还在高频演进阶段。
|
|
10
|
+
|
|
11
|
+
如果系统已经确认某条旧行为是错的,却还继续兼容它:
|
|
12
|
+
|
|
13
|
+
- 主链会越来越脏
|
|
14
|
+
- 新规则会一直被旧规则拖住
|
|
15
|
+
- 模型和运行时会同时背两套相互冲突的东西
|
|
16
|
+
|
|
17
|
+
这会让系统越来越难修,而不是更稳定。
|
|
18
|
+
|
|
19
|
+
## 在 Athlete 里的含义
|
|
20
|
+
|
|
21
|
+
当旧逻辑与正确主干冲突时,优先顺序应是:
|
|
22
|
+
|
|
23
|
+
1. 保正确
|
|
24
|
+
2. 保简单
|
|
25
|
+
3. 保唯一真相源
|
|
26
|
+
4. 最后才考虑兼容
|
|
27
|
+
|
|
28
|
+
如果旧测试在保护错误行为,就删除或重写。
|
|
29
|
+
如果旧兼容层在阻碍主链修复,就删掉。
|
|
30
|
+
不为错误行为保活。
|
|
31
|
+
|
|
32
|
+
## 当前对应
|
|
33
|
+
|
|
34
|
+
- `spec/`
|
|
35
|
+
- `tests/`
|
|
36
|
+
- `src/agent/`
|
|
37
|
+
- `src/tools/`
|