@jun133/athlete 0.0.2
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 +146 -0
- package/dist/cli.js +22731 -0
- package/dist/cli.js.map +1 -0
- package/package.json +72 -0
- package/scripts/postinstall-playwright.mjs +79 -0
- package/spec/README.md +56 -0
- package/spec/adr/ADR-0001-/345/215/225/346/250/241/345/274/217/345/205/250/346/235/203/351/231/220.md +16 -0
- package/spec/adr/ADR-0002-/345/215/225agent/350/265/267/346/255/245/345/271/266/351/242/204/347/225/231/345/244/232agent/350/276/271/347/225/214.md +19 -0
- package/spec/adr/ADR-0003-openai-compatible/344/274/230/345/205/210.md +16 -0
- package/spec/architecture//346/200/273/344/275/223/346/236/266/346/236/204.md +111 -0
- package/spec/architecture//347/212/266/346/200/201/344/270/216/347/234/237/347/233/270/346/272/220.md +117 -0
- package/spec/architecture//350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +82 -0
- package/spec/implementation/README.md +17 -0
- package/spec/implementation//346/250/241/345/235/227/347/272/247/345/274/200/345/217/221/344/273/273/345/212/241/345/215/225.md +55 -0
- 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 +101 -0
- package/spec/interfaces/InteractionShell.md +85 -0
- package/spec/interfaces/ProviderAdapter.md +23 -0
- package/spec/interfaces/README.md +17 -0
- package/spec/interfaces/RuntimeLoop.md +28 -0
- package/spec/interfaces/SessionStore.md +22 -0
- package/spec/interfaces/ToolRegistry.md +21 -0
- package/spec/modules/config-system.md +51 -0
- package/spec/modules/interactive-terminal.md +112 -0
- package/spec/modules/lightweight-context-runtime.md +63 -0
- package/spec/modules/provider-adapter.md +20 -0
- package/spec/modules/runtime-metrics.md +132 -0
- package/spec/modules/runtime-rules.md +33 -0
- package/spec/modules/session-resume-compact.md +49 -0
- package/spec/modules/task-state.md +34 -0
- package/spec/modules/telegram-private-chat.md +290 -0
- package/spec/modules/tool-registry.md +79 -0
- package/spec/modules/weixin-private-chat.md +291 -0
- package/spec/modules/workspace-isolation.md +24 -0
- package/spec/modules//346/211/251/345/261/225/346/234/272/345/210/266.md +105 -0
- package/spec/overview/v0/350/214/203/345/233/264.md +54 -0
- package/spec/overview//344/272/247/345/223/201/345/256/232/344/271/211.md +59 -0
- package/spec/principles/P01-/344/270/200/344/270/252/345/276/252/347/216/257/344/270/200/344/270/252/346/231/272/350/203/275/344/275/223.md +31 -0
- package/spec/principles/P02-/345/212/240/344/270/200/344/270/252/345/267/245/345/205/267/345/217/252/345/212/240/344/270/200/344/270/252/345/244/204/347/220/206/345/231/250.md +28 -0
- package/spec/principles/P03-/345/205/210/350/256/241/345/210/222/345/206/215/345/212/250/346/211/213.md +25 -0
- package/spec/principles/P04-/345/244/247/344/273/273/345/212/241/346/213/206/347/273/231/345/255/220/346/231/272/350/203/275/344/275/223.md +26 -0
- package/spec/principles/P05-/347/237/245/350/257/206/346/214/211/351/234/200/345/212/240/350/275/275.md +29 -0
- 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 +23 -0
- package/spec/principles/P07-/344/273/273/345/212/241/345/233/276/350/246/201/350/220/275/347/233/230.md +20 -0
- package/spec/principles/P08-/346/205/242/346/223/215/344/275/234/346/224/276/345/220/216/345/217/260.md +23 -0
- package/spec/principles/P09-/344/273/273/345/212/241/345/244/252/345/244/247/345/260/261/345/210/206/347/273/231/351/230/237/345/217/213.md +21 -0
- package/spec/principles/P10-/351/230/237/345/217/213/344/271/213/351/227/264/350/246/201/346/234/211/347/273/237/344/270/200/345/215/217/350/256/256.md +23 -0
- package/spec/principles/P11-/351/230/237/345/217/213/350/207/252/345/267/261/350/256/244/351/242/206/344/273/273/345/212/241.md +25 -0
- package/spec/principles/P12-/345/267/245/344/275/234/345/214/272/345/222/214/344/273/273/345/212/241/350/246/201/351/232/224/347/246/273.md +20 -0
- package/spec/principles/P13-session/346/230/257/344/273/273/345/212/241/347/216/260/345/234/272.md +30 -0
- package/spec/principles/P14-/346/211/247/350/241/214/347/272/246/346/235/237/344/270/215/346/230/257/345/256/211/345/205/250/347/255/226/347/225/245.md +27 -0
- package/spec/principles/P15-provider/345/277/205/351/241/273/345/217/257/346/233/277/346/215/242.md +22 -0
- package/spec/principles/P16-/351/205/215/347/275/256/345/217/252/350/203/275/346/234/211/344/270/200/344/270/252/345/205/245/345/217/243.md +22 -0
- package/spec/principles/P17-/346/211/251/345/261/225/351/235/240/344/272/213/344/273/266/347/224/237/351/225/277.md +32 -0
- 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 +36 -0
- package/spec/principles/P19-/345/205/210/345/206/231/345/244/261/350/264/245/346/265/213/350/257/225/345/206/215/345/206/231/345/256/236/347/216/260.md +29 -0
- package/spec/principles/README.md +39 -0
- package/spec/repo//345/274/200/345/217/221/350/247/204/345/210/231.md +39 -0
- package/spec/repo//346/234/254/345/234/260/345/221/275/344/273/244/344/270/216/346/265/201/347/250/213.md +32 -0
- package/spec/testing/fail-first-/347/254/254/344/270/200/346/211/271/346/265/213/350/257/225/345/210/227/350/241/250.md +11 -0
- package/spec/testing/fixtures-/350/247/204/350/214/203.md +20 -0
- package/spec/testing//346/265/213/350/257/225/347/255/226/347/225/245.md +97 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# P07 任务图要落盘
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
大目标要拆成任务,而且任务不能只存在模型脑子里,要写到磁盘上。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
只有落盘,任务才能恢复、共享、协作、追踪。
|
|
10
|
+
|
|
11
|
+
## 在 Athlete 里的含义
|
|
12
|
+
|
|
13
|
+
Athlete 当前已经有任务板真相源。
|
|
14
|
+
|
|
15
|
+
下一阶段总指挥层要基于这套任务板继续长,而不是新发明一套平行任务宇宙。
|
|
16
|
+
|
|
17
|
+
## 当前对应
|
|
18
|
+
|
|
19
|
+
- `src/tasks/store.ts`
|
|
20
|
+
- `src/tasks/types.ts`
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# P08 慢操作放后台
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
慢操作不要堵住主循环,应该丢到后台跑。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
这样 agent 可以一边等后台结果,一边继续做下一步。
|
|
10
|
+
|
|
11
|
+
## 在 Athlete 里的含义
|
|
12
|
+
|
|
13
|
+
background 不是附属功能,它是 Athlete 耐跑能力的一部分。
|
|
14
|
+
|
|
15
|
+
总指挥层以后要会判断:
|
|
16
|
+
|
|
17
|
+
- 哪些事自己现在就做
|
|
18
|
+
- 哪些事应该丢给 background
|
|
19
|
+
|
|
20
|
+
## 当前对应
|
|
21
|
+
|
|
22
|
+
- `src/background/`
|
|
23
|
+
- `src/tools/background/`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# P09 任务太大就分给队友
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
一个 agent 做不完的大任务,就要支持分给别的队友。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
这样系统才能从“单智能体”升级到“多智能体协作”。
|
|
10
|
+
|
|
11
|
+
## 在 Athlete 里的含义
|
|
12
|
+
|
|
13
|
+
Athlete 未来不是默认 swarm,而是:
|
|
14
|
+
|
|
15
|
+
- 主 Agent 仍然是核心
|
|
16
|
+
- 复杂任务时按需分给 teammate
|
|
17
|
+
|
|
18
|
+
## 当前对应
|
|
19
|
+
|
|
20
|
+
- `src/team/`
|
|
21
|
+
- `src/tools/team/spawnTeammateTool.ts`
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# P10 队友之间要有统一协议
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
队友之间的协商不能靠自由文本临时约定,必须有统一的 request-response 模式。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
如果每种协作都各写一套消息格式,系统会越来越多特例,最后协议就不再是唯一真相源。
|
|
10
|
+
|
|
11
|
+
## 在 Athlete 里的含义
|
|
12
|
+
|
|
13
|
+
信息通知可以是普通消息;
|
|
14
|
+
|
|
15
|
+
但任何会改变协作状态的动作,都必须走协议化 request-response。
|
|
16
|
+
|
|
17
|
+
## 当前对应
|
|
18
|
+
|
|
19
|
+
- `src/team/requestStore.ts`
|
|
20
|
+
- `src/team/messageBus.ts`
|
|
21
|
+
- `src/tools/team/planApprovalTool.ts`
|
|
22
|
+
- `src/tools/team/shutdownRequestTool.ts`
|
|
23
|
+
- `src/tools/team/shutdownResponseTool.ts`
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# P11 队友自己认领任务
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
队友不一定要等领导逐个分配,也可以自己看任务板、自己认领。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
这样更接近自治系统,不会所有事都卡在一个中心节点上。
|
|
10
|
+
|
|
11
|
+
## 在 Athlete 里的含义
|
|
12
|
+
|
|
13
|
+
总指挥层不是永远手动给每个 teammate 写死指令。
|
|
14
|
+
|
|
15
|
+
系统应该允许:
|
|
16
|
+
|
|
17
|
+
- 明确指派
|
|
18
|
+
- 自主认领
|
|
19
|
+
|
|
20
|
+
两种协作方式并存。
|
|
21
|
+
|
|
22
|
+
## 当前对应
|
|
23
|
+
|
|
24
|
+
- `src/tasks/`
|
|
25
|
+
- `src/team/worker.ts`
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# P12 工作区和任务要隔离
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
任务和目录都要隔离,不能所有队友都在同一个工作目录里乱改。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
只有隔离,多个任务并行时才不会互相污染。
|
|
10
|
+
|
|
11
|
+
## 在 Athlete 里的含义
|
|
12
|
+
|
|
13
|
+
- task 管目标
|
|
14
|
+
- worktree 管目录
|
|
15
|
+
- 两者通过绑定关系协同
|
|
16
|
+
|
|
17
|
+
## 当前对应
|
|
18
|
+
|
|
19
|
+
- `src/worktrees/store.ts`
|
|
20
|
+
- `src/tools/worktrees/`
|
package/spec/principles/P13-session/346/230/257/344/273/273/345/212/241/347/216/260/345/234/272.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# P13 session 是任务现场
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
session 不是聊天记录附件,而是任务现场。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
Athlete 的核心价值之一是长任务不中断。
|
|
10
|
+
|
|
11
|
+
如果 session 只是普通历史消息:
|
|
12
|
+
|
|
13
|
+
- 续跑价值会很弱
|
|
14
|
+
- 压缩后容易丢失关键状态
|
|
15
|
+
- 长任务恢复会越来越不可靠
|
|
16
|
+
|
|
17
|
+
## 在 Athlete 里的含义
|
|
18
|
+
|
|
19
|
+
session 里应该能承接:
|
|
20
|
+
|
|
21
|
+
- 消息历史
|
|
22
|
+
- todo 状态
|
|
23
|
+
- verification 状态
|
|
24
|
+
- task state
|
|
25
|
+
|
|
26
|
+
## 当前对应
|
|
27
|
+
|
|
28
|
+
- `src/agent/sessionStore.ts`
|
|
29
|
+
- `src/agent/taskState.ts`
|
|
30
|
+
- `src/agent/verificationState.ts`
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# P14 执行约束不是安全策略
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
允许目录、命令分类、计划门槛,这些都只是执行约束,不是完整安全系统。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
如果把“看起来有拦截”误当成“已经安全”:
|
|
10
|
+
|
|
11
|
+
- 容易误判风险
|
|
12
|
+
- 容易对普通用户过度承诺
|
|
13
|
+
|
|
14
|
+
## 在 Athlete 里的含义
|
|
15
|
+
|
|
16
|
+
Athlete 当前更适合:
|
|
17
|
+
|
|
18
|
+
- 可信工作区
|
|
19
|
+
- 明确边界的项目自动化
|
|
20
|
+
|
|
21
|
+
它不是“任何人都能随便托管高风险生产系统”的安全平台。
|
|
22
|
+
|
|
23
|
+
## 当前对应
|
|
24
|
+
|
|
25
|
+
- `src/utils/commandPolicy.ts`
|
|
26
|
+
- `src/utils/validation.ts`
|
|
27
|
+
- `src/agent/runTurn.ts`
|
package/spec/principles/P15-provider/345/277/205/351/241/273/345/217/257/346/233/277/346/215/242.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# P15 provider 必须可替换
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
模型提供方必须可替换,Athlete 不能被单一厂商接口锁死。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
模型会变、价格会变、稳定性会变。
|
|
10
|
+
|
|
11
|
+
Athlete 要做 harness,不做某一家的皮肤。
|
|
12
|
+
|
|
13
|
+
## 在 Athlete 里的含义
|
|
14
|
+
|
|
15
|
+
- 当前优先支持 OpenAI-compatible 接口
|
|
16
|
+
- provider 选择属于配置层,不属于业务层
|
|
17
|
+
|
|
18
|
+
## 当前对应
|
|
19
|
+
|
|
20
|
+
- `src/agent/api.ts`
|
|
21
|
+
- `src/config/env.ts`
|
|
22
|
+
- `src/types.ts`
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# P16 配置只能有一个入口
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
配置必须有统一入口,不能一半在命令行、一半在代码常量、一半在隐式状态。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
配置一旦分散:
|
|
10
|
+
|
|
11
|
+
- 用户搞不清当前行为从哪来
|
|
12
|
+
- 维护者很难排查问题
|
|
13
|
+
|
|
14
|
+
## 在 Athlete 里的含义
|
|
15
|
+
|
|
16
|
+
配置读取要收敛到同一套路径与环境变量机制。
|
|
17
|
+
|
|
18
|
+
## 当前对应
|
|
19
|
+
|
|
20
|
+
- `src/config/init.ts`
|
|
21
|
+
- `src/config/store.ts`
|
|
22
|
+
- `src/config/env.ts`
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# P17 扩展靠事件生长
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
扩展不能只靠往 system prompt 里继续堆规则,应该沿着清晰的扩展点生长。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
Athlete 未来一定会长:
|
|
10
|
+
|
|
11
|
+
- skills
|
|
12
|
+
- 更多工具
|
|
13
|
+
- 更多角色
|
|
14
|
+
- 更多运行时通知
|
|
15
|
+
|
|
16
|
+
如果没有扩展点,主循环和工具层都会越来越胖。
|
|
17
|
+
|
|
18
|
+
## 在 Athlete 里的含义
|
|
19
|
+
|
|
20
|
+
当前扩展入口主要有三种:
|
|
21
|
+
|
|
22
|
+
- tool registry
|
|
23
|
+
- skills
|
|
24
|
+
- MCP
|
|
25
|
+
|
|
26
|
+
下一阶段要补的是更明确的 runtime / lifecycle 事件点。
|
|
27
|
+
|
|
28
|
+
## 当前对应
|
|
29
|
+
|
|
30
|
+
- `src/tools/runtimeRegistry.ts`
|
|
31
|
+
- `src/skills/catalog.ts`
|
|
32
|
+
- `src/mcp/`
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# P18 主循环和文件都不能长胖
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
主循环不能无限长,文件也不能无限长。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
Athlete 以后会继续长总指挥层、skills、角色和协议。
|
|
10
|
+
|
|
11
|
+
如果不控制体积:
|
|
12
|
+
|
|
13
|
+
- AI 更容易改坏系统
|
|
14
|
+
- 人更难定位职责
|
|
15
|
+
- 小改动会牵动全身
|
|
16
|
+
|
|
17
|
+
## 铁律
|
|
18
|
+
|
|
19
|
+
1. 单文件默认不超过 300 行。
|
|
20
|
+
2. 文件超过 300 行时,必须先检查是不是职责耦合。
|
|
21
|
+
3. 只要出现“一个文件里有两件以上主要事情”,优先拆目录或拆文件。
|
|
22
|
+
4. 主循环只保留全局调度规则,不塞模块细节。
|
|
23
|
+
|
|
24
|
+
## Athlete 当前阶段的执行方式
|
|
25
|
+
|
|
26
|
+
- 优先新增目录,不优先堆到已有大文件
|
|
27
|
+
- 一类状态一个 store
|
|
28
|
+
- 一类工具一个子目录
|
|
29
|
+
- 一类角色一个清晰边界
|
|
30
|
+
|
|
31
|
+
## 当前对应
|
|
32
|
+
|
|
33
|
+
- `src/agent/runTurn.ts`
|
|
34
|
+
- `src/tools/`
|
|
35
|
+
- `src/team/`
|
|
36
|
+
- `src/tasks/`
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# P19 先写失败测试再写实现
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
要优先把“会不会被改坏”写成测试,再去写实现。
|
|
6
|
+
|
|
7
|
+
## 为什么
|
|
8
|
+
|
|
9
|
+
Athlete 的核心价值是骨架稳定。
|
|
10
|
+
|
|
11
|
+
没有 fail-first:
|
|
12
|
+
|
|
13
|
+
- 回归 bug 会反复出现
|
|
14
|
+
- AI 改完一轮下一轮又打回去
|
|
15
|
+
|
|
16
|
+
## 在 Athlete 里的含义
|
|
17
|
+
|
|
18
|
+
优先保护这些骨架:
|
|
19
|
+
|
|
20
|
+
- 主循环
|
|
21
|
+
- skill/context
|
|
22
|
+
- task/background
|
|
23
|
+
- team/protocol
|
|
24
|
+
- worktree isolation
|
|
25
|
+
|
|
26
|
+
## 当前对应
|
|
27
|
+
|
|
28
|
+
- `tests/`
|
|
29
|
+
- `npm test`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 宪法原则
|
|
2
|
+
|
|
3
|
+
这一组文档是 Athlete 当前唯一有效的架构原则集合。
|
|
4
|
+
|
|
5
|
+
它们直接服务于实现与维护。
|
|
6
|
+
|
|
7
|
+
## 当前原则体系
|
|
8
|
+
|
|
9
|
+
### 核心 12 条
|
|
10
|
+
|
|
11
|
+
- `P01-一个循环一个智能体.md`
|
|
12
|
+
- `P02-加一个工具只加一个处理器.md`
|
|
13
|
+
- `P03-先计划再动手.md`
|
|
14
|
+
- `P04-大任务拆给子智能体.md`
|
|
15
|
+
- `P05-知识按需加载.md`
|
|
16
|
+
- `P06-上下文要能压缩.md`
|
|
17
|
+
- `P07-任务图要落盘.md`
|
|
18
|
+
- `P08-慢操作放后台.md`
|
|
19
|
+
- `P09-任务太大就分给队友.md`
|
|
20
|
+
- `P10-队友之间要有统一协议.md`
|
|
21
|
+
- `P11-队友自己认领任务.md`
|
|
22
|
+
- `P12-工作区和任务要隔离.md`
|
|
23
|
+
|
|
24
|
+
### 当前工程铁律
|
|
25
|
+
|
|
26
|
+
- `P13-session是任务现场.md`
|
|
27
|
+
- `P14-执行约束不是安全策略.md`
|
|
28
|
+
- `P15-provider必须可替换.md`
|
|
29
|
+
- `P16-配置只能有一个入口.md`
|
|
30
|
+
- `P17-扩展靠事件生长.md`
|
|
31
|
+
- `P18-主循环和文件都不能长胖.md`
|
|
32
|
+
- `P19-先写失败测试再写实现.md`
|
|
33
|
+
|
|
34
|
+
## 使用规则
|
|
35
|
+
|
|
36
|
+
1. 新原则必须长期有效,且跨多个模块成立。
|
|
37
|
+
2. 临时实现细节不要升格成原则。
|
|
38
|
+
3. 若与当前实现冲突,应优先修正文档或实现,不能长期并存。
|
|
39
|
+
4. 若只是模块约束,优先写到 `modules/`、`implementation/` 或 `adr/`。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 开发规则
|
|
2
|
+
|
|
3
|
+
## 总则
|
|
4
|
+
|
|
5
|
+
Athlete 是 harness 工程,不是一次性脚本。
|
|
6
|
+
|
|
7
|
+
所有改动优先保护:
|
|
8
|
+
|
|
9
|
+
1. 耐跑底盘
|
|
10
|
+
2. 控制面真相
|
|
11
|
+
3. 扩展边界
|
|
12
|
+
|
|
13
|
+
## 文件规则
|
|
14
|
+
|
|
15
|
+
1. 单文件默认不超过 300 行。
|
|
16
|
+
2. 超过 300 行时必须检查是不是耦合过多。
|
|
17
|
+
3. 能拆目录就拆目录,能拆文件就拆文件。
|
|
18
|
+
4. 一个文件只做一件主要事情。
|
|
19
|
+
5. 一个模块尽量只保留一个主要变更理由。
|
|
20
|
+
|
|
21
|
+
## 架构规则
|
|
22
|
+
|
|
23
|
+
1. 控制面判断不偷塞进工具细节。
|
|
24
|
+
2. 工具只通过注册表接入。
|
|
25
|
+
3. 新状态优先进入现有真相源,不先新建平行 JSON。
|
|
26
|
+
4. skills 负责知识与流程,不替代工具动作。
|
|
27
|
+
5. 总指挥层负责调度,不负责具体文件改写。
|
|
28
|
+
|
|
29
|
+
## 文档规则
|
|
30
|
+
|
|
31
|
+
1. SPEC 写当前真实能力与未来方向,但两者必须分开。
|
|
32
|
+
2. docs 偏解释和维护,spec 偏约束和边界。
|
|
33
|
+
3. ADR 只记录关键决定,不拿来写宣传。
|
|
34
|
+
|
|
35
|
+
## 测试规则
|
|
36
|
+
|
|
37
|
+
1. 关键骨架改动先补失败测试。
|
|
38
|
+
2. 修过的真实 bug 尽量固化成回归测试。
|
|
39
|
+
3. 不为了覆盖率堆低价值测试。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 本地命令与流程
|
|
2
|
+
|
|
3
|
+
## 常用命令
|
|
4
|
+
|
|
5
|
+
```powershell
|
|
6
|
+
npm install
|
|
7
|
+
npm run build
|
|
8
|
+
npm run typecheck
|
|
9
|
+
npm test
|
|
10
|
+
npm run dev
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 推荐开发流程
|
|
14
|
+
|
|
15
|
+
1. 先确认改动落在哪一层
|
|
16
|
+
2. 先补或设计测试
|
|
17
|
+
3. 再改实现
|
|
18
|
+
4. 运行 `npm test`
|
|
19
|
+
5. 最后更新 SPEC / docs
|
|
20
|
+
|
|
21
|
+
## 写 SPEC 的流程
|
|
22
|
+
|
|
23
|
+
1. 先写当前真实能力
|
|
24
|
+
2. 再写未来方向
|
|
25
|
+
3. 检查有没有把两者混在一起
|
|
26
|
+
4. 检查单文件是否过胖
|
|
27
|
+
|
|
28
|
+
## 写代码的流程
|
|
29
|
+
|
|
30
|
+
1. 先找真相源
|
|
31
|
+
2. 再找工具入口
|
|
32
|
+
3. 最后再看 UI 是否要同步
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# fail-first 第一批测试列表
|
|
2
|
+
|
|
3
|
+
## 先补的测试
|
|
4
|
+
|
|
5
|
+
1. 总指挥层不会破坏现有 continuation
|
|
6
|
+
2. 总指挥层不会绕过 task board 真相源
|
|
7
|
+
3. lead 能在 subagent / teammate / background 之间做正确分流
|
|
8
|
+
4. skills 元数据缺失时有明确失败结果
|
|
9
|
+
5. skill 加载后能被后续 turn 正确识别
|
|
10
|
+
6. reviewer / verifier 角色不会越权修改任务分配
|
|
11
|
+
7. 单文件拆分后 registry 与 runtime 行为不变
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# fixture 规范
|
|
2
|
+
|
|
3
|
+
## 原则
|
|
4
|
+
|
|
5
|
+
fixture 只保留能说明问题的最小状态。
|
|
6
|
+
|
|
7
|
+
## 推荐 fixture 类型
|
|
8
|
+
|
|
9
|
+
- task board 样例
|
|
10
|
+
- protocol request 样例
|
|
11
|
+
- team inbox 样例
|
|
12
|
+
- worktree index 样例
|
|
13
|
+
- compact / resume session 样例
|
|
14
|
+
- skill metadata 样例
|
|
15
|
+
|
|
16
|
+
## 规则
|
|
17
|
+
|
|
18
|
+
1. 一个 fixture 只服务一个测试主题。
|
|
19
|
+
2. 不把大量无关状态塞进同一个 fixture。
|
|
20
|
+
3. 真实 bug 的 fixture 优先长期保留。
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# 测试策略
|
|
2
|
+
|
|
3
|
+
## 目标
|
|
4
|
+
|
|
5
|
+
测试优先保护 Athlete 的骨架,
|
|
6
|
+
不是为了表面覆盖率。
|
|
7
|
+
|
|
8
|
+
## 当前重点
|
|
9
|
+
|
|
10
|
+
- 主循环没坏
|
|
11
|
+
- context / continuation / recovery 没坏
|
|
12
|
+
- lightweight context externalization 没坏
|
|
13
|
+
- checkpoint / reload / resume 没坏
|
|
14
|
+
- runtime stats / runtime summary 没坏
|
|
15
|
+
- task / background 没坏
|
|
16
|
+
- team / protocol / policy 没坏
|
|
17
|
+
- worktree isolation 没坏
|
|
18
|
+
- skill catalog 与 skill loading 没坏
|
|
19
|
+
- Playwright MCP 接线、优先级与 artifact 路由没坏
|
|
20
|
+
- post-completion closeout 不会退回无意义循环
|
|
21
|
+
|
|
22
|
+
## 当前测试类型
|
|
23
|
+
|
|
24
|
+
### 1. 骨架测试
|
|
25
|
+
|
|
26
|
+
保护架构约束,不让主骨架被改坏。
|
|
27
|
+
|
|
28
|
+
### 2. 缺陷回归测试
|
|
29
|
+
|
|
30
|
+
真实 bug 修掉后,把 bug 固化成测试。
|
|
31
|
+
|
|
32
|
+
### 3. 结构预算测试
|
|
33
|
+
|
|
34
|
+
保护主循环和关键控制面文件不继续长胖。
|
|
35
|
+
|
|
36
|
+
## 当前已覆盖的重点
|
|
37
|
+
|
|
38
|
+
- runtime registry / tool visibility
|
|
39
|
+
- skill metadata / discovery / loading / gating
|
|
40
|
+
- continuation / compact / recovery
|
|
41
|
+
- lightweight context externalization
|
|
42
|
+
- checkpoint 持久化 / reload / resume
|
|
43
|
+
- runtime metrics 持久化 / reload / summary
|
|
44
|
+
- finalize / closeout gating
|
|
45
|
+
- lightweight verification signals
|
|
46
|
+
- orchestrator routing / dispatch
|
|
47
|
+
- protocol / policy / task board truth source
|
|
48
|
+
- Playwright 默认值与 artifact 路由
|
|
49
|
+
- browser-first tool priority
|
|
50
|
+
- shell detour workflow guard
|
|
51
|
+
- post-completion todo/task loop prevention
|
|
52
|
+
|
|
53
|
+
## 命令
|
|
54
|
+
|
|
55
|
+
默认本地测试:
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
npm test
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
只做测试编译:
|
|
62
|
+
|
|
63
|
+
```powershell
|
|
64
|
+
npm run test:build
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
核心测试集:
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
npm run test:core
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
真实 API 验证(不进入默认 `npm test`):
|
|
74
|
+
|
|
75
|
+
```powershell
|
|
76
|
+
npm run verify:runtime-context-api
|
|
77
|
+
npm run verify:runtime-checkpoint-api
|
|
78
|
+
npm run verify:runtime-observability-api
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 当前原则
|
|
82
|
+
|
|
83
|
+
1. 骨架测试优先。
|
|
84
|
+
2. 回归测试优先。
|
|
85
|
+
3. 默认测试不要强依赖不稳定外部 API。
|
|
86
|
+
4. 真实 API / 真实浏览器验证可以做,但不要强塞进默认 `npm test`。
|
|
87
|
+
5. runtime observability 这类能力必须同时覆盖:
|
|
88
|
+
- 结构化持久化
|
|
89
|
+
- reload 后一致性
|
|
90
|
+
- 用户可读 summary
|
|
91
|
+
- 真实 API 验证
|
|
92
|
+
|
|
93
|
+
## 不建议的做法
|
|
94
|
+
|
|
95
|
+
- 为了数量堆很多低价值小测试
|
|
96
|
+
- 把不稳定的真实 API 测试塞进默认 `npm test`
|
|
97
|
+
- 只测 prompt 文案,不测底层机器状态
|