@jun133/athlete 0.0.4 → 0.0.6
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 +149 -91
- package/dist/cli.js +26562 -19473
- package/dist/cli.js.map +1 -1
- package/package.json +6 -1
- package/scripts/postinstall-playwright.mjs +1 -1
- package/spec/README.md +49 -41
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260/README.md +29 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//344/270/273/345/276/252/347/216/257/344/270/216/350/260/203/345/272/246.md +60 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//344/273/223/345/272/223/347/272/246/346/235/237//345/274/200/345/217/221/350/247/204/345/210/231.md +14 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//344/273/223/345/272/223/347/272/246/346/235/237//346/234/254/345/234/260/345/221/275/344/273/244/344/270/216/346/265/201/347/250/213.md +20 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//344/273/223/345/272/223/347/272/246/346/235/237//346/265/213/350/257/225/347/255/226/347/225/245.md +48 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//344/273/243/347/240/201/345/234/260/345/233/276//347/233/256/345/275/225/345/210/260/344/273/243/347/240/201/346/230/240/345/260/204.md +51 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227/Telegram/347/247/201/350/201/212.md +31 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//344/272/244/344/272/222/347/273/210/347/253/257.md +26 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//345/221/275/344/273/244/350/241/214/344/272/247/345/223/201/351/235/242.md +27 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//345/244/232/346/231/272/350/203/275/344/275/223/350/260/203/345/272/246.md +79 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//345/256/277/344/270/273/350/277/220/350/241/214/350/276/271/347/225/214.md +74 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//345/267/245/344/275/234/345/214/272/344/270/216/345/271/266/350/241/214/351/232/224/347/246/273.md +55 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//345/276/256/344/277/241/347/247/201/350/201/212.md +33 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//346/211/251/345/261/225/346/234/272/345/210/266.md +179 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//346/216/247/345/210/266/351/235/242/350/264/246/346/234/254.md +32 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//345/205/263/351/224/256/346/250/241/345/235/227//351/205/215/347/275/256/347/263/273/347/273/237.md +31 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//346/200/273/344/275/223/346/236/266/346/236/204.md +115 -0
- package/spec//346/212/200/346/234/257/345/256/236/347/216/260//347/212/266/346/200/201/344/270/216/347/234/237/347/233/270/346/272/220.md +129 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205/README.md +27 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//344/272/247/345/223/201/345/256/232/344/275/215.md +78 -0
- package/spec/{principles/P06- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/06-}/344/270/212/344/270/213/346/226/207/350/246/201/350/203/275/345/216/213/347/274/251.md +2 -2
- package/spec/{principles/P08- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/08-}/346/205/242/346/223/215/344/275/234/346/224/276/345/220/216/345/217/260.md +1 -1
- package/spec/{principles/P13-session → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/13-session}/346/230/257/344/273/273/345/212/241/347/216/260/345/234/272.md +3 -3
- package/spec/{principles/P15-provider → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/15-provider}/345/277/205/351/241/273/345/217/257/346/233/277/346/215/242.md +3 -1
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/17-/346/211/251/345/261/225/351/235/240/344/272/213/344/273/266/347/224/237/351/225/277.md +71 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/18-/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 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/20-/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//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/21-/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//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/22-/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//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/23-/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//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/24-/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 +38 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/25-/346/226/260/351/241/271/347/233/256/344/270/215/344/270/272/346/227/247/346/256/213/344/275/231/344/277/235/346/264/273.md +66 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/README.md +37 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//347/263/273/347/273/237/345/205/250/346/231/257.md +57 -0
- package/spec//347/224/250/346/210/267/345/256/241/351/230/205//351/241/271/347/233/256/350/214/203/345/233/264.md +59 -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 +0 -16
- 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 +0 -19
- package/spec/adr/ADR-0003-openai-compatible/344/274/230/345/205/210.md +0 -16
- package/spec/architecture//346/200/273/344/275/223/346/236/266/346/236/204.md +0 -111
- package/spec/architecture//347/212/266/346/200/201/344/270/216/347/234/237/347/233/270/346/272/220.md +0 -117
- package/spec/architecture//350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +0 -82
- package/spec/implementation/README.md +0 -17
- 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 +0 -55
- 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 +0 -101
- package/spec/interfaces/InteractionShell.md +0 -85
- package/spec/interfaces/ProviderAdapter.md +0 -23
- package/spec/interfaces/README.md +0 -17
- package/spec/interfaces/RuntimeLoop.md +0 -28
- package/spec/interfaces/SessionStore.md +0 -22
- package/spec/interfaces/ToolRegistry.md +0 -21
- package/spec/modules/config-system.md +0 -51
- package/spec/modules/interactive-terminal.md +0 -112
- package/spec/modules/lightweight-context-runtime.md +0 -63
- package/spec/modules/provider-adapter.md +0 -20
- package/spec/modules/runtime-metrics.md +0 -132
- package/spec/modules/runtime-rules.md +0 -33
- package/spec/modules/session-resume-compact.md +0 -49
- package/spec/modules/task-state.md +0 -34
- package/spec/modules/telegram-private-chat.md +0 -291
- package/spec/modules/tool-registry.md +0 -79
- package/spec/modules/weixin-private-chat.md +0 -291
- package/spec/modules/workspace-isolation.md +0 -24
- package/spec/modules//346/211/251/345/261/225/346/234/272/345/210/266.md +0 -105
- package/spec/overview/v0/350/214/203/345/233/264.md +0 -54
- package/spec/overview//344/272/247/345/223/201/345/256/232/344/271/211.md +0 -59
- 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 +0 -32
- 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 +0 -36
- package/spec/principles/README.md +0 -39
- package/spec/repo//345/274/200/345/217/221/350/247/204/345/210/231.md +0 -39
- 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 +0 -32
- 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 +0 -11
- package/spec/testing/fixtures-/350/247/204/350/214/203.md +0 -20
- package/spec/testing//346/265/213/350/257/225/347/255/226/347/225/245.md +0 -97
- /package/spec/{principles/P01- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/01-}/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" +0 -0
- /package/spec/{principles/P02- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/02-}/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" +0 -0
- /package/spec/{principles/P03- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/03-}/345/205/210/350/256/241/345/210/222/345/206/215/345/212/250/346/211/213.md" +0 -0
- /package/spec/{principles/P04- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/04-}/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" +0 -0
- /package/spec/{principles/P05- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/05-}/347/237/245/350/257/206/346/214/211/351/234/200/345/212/240/350/275/275.md" +0 -0
- /package/spec/{principles/P07- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/07-}/344/273/273/345/212/241/345/233/276/350/246/201/350/220/275/347/233/230.md" +0 -0
- /package/spec/{principles/P09- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/09-}/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" +0 -0
- /package/spec/{principles/P10- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/10-}/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" +0 -0
- /package/spec/{principles/P11- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/11-}/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" +0 -0
- /package/spec/{principles/P12- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/12-}/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" +0 -0
- /package/spec/{principles/P14- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/14-}/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" +0 -0
- /package/spec/{principles/P16- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/16-}/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" +0 -0
- /package/spec/{principles/P19- → /347/224/250/346/210/267/345/256/241/351/230/205//345/256/252/346/263/225/345/216/237/345/210/231/19-}/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" +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 微信私聊
|
|
2
|
+
|
|
3
|
+
## 当前定位
|
|
4
|
+
|
|
5
|
+
微信是 Athlete 的另一个私聊宿主。
|
|
6
|
+
|
|
7
|
+
它当前走 OpenILink 接入,并通过统一宿主边界进入核心。
|
|
8
|
+
|
|
9
|
+
## 当前能力
|
|
10
|
+
|
|
11
|
+
- `weixin login`
|
|
12
|
+
- `weixin serve`
|
|
13
|
+
- `weixin logout`
|
|
14
|
+
- 私聊白名单
|
|
15
|
+
- `context_token`
|
|
16
|
+
- `/stop`
|
|
17
|
+
- image / video / file / voice 输入
|
|
18
|
+
- 文件与长回复回传
|
|
19
|
+
|
|
20
|
+
## 当前关键实现
|
|
21
|
+
|
|
22
|
+
- `src/weixin/cli.ts`
|
|
23
|
+
- `src/weixin/service.ts`
|
|
24
|
+
- `src/weixin/turnRunner.ts`
|
|
25
|
+
- `src/weixin/sendFileTool.ts`
|
|
26
|
+
- `src/weixin/deliveryQueue.ts`
|
|
27
|
+
- `src/weixin/contextTokenStore.ts`
|
|
28
|
+
|
|
29
|
+
## 当前约束
|
|
30
|
+
|
|
31
|
+
1. 微信 turn 必须经 `src/host/`。
|
|
32
|
+
2. 微信当前是 private only,不是 group 宿主。
|
|
33
|
+
3. `context_token` 只服务通道投递,不是任务真相源。
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# 扩展机制
|
|
2
|
+
|
|
3
|
+
## 当前正式扩展口
|
|
4
|
+
|
|
5
|
+
1. tools
|
|
6
|
+
2. skills
|
|
7
|
+
3. MCP
|
|
8
|
+
4. host runtime callbacks / extra tools
|
|
9
|
+
|
|
10
|
+
## 当前正式分层
|
|
11
|
+
|
|
12
|
+
### 1. tool action 层
|
|
13
|
+
|
|
14
|
+
目录:
|
|
15
|
+
|
|
16
|
+
- `src/tools/builtinCatalog.ts`
|
|
17
|
+
- `src/tools/registry.ts`
|
|
18
|
+
- `src/tools/runtimeRegistry.ts`
|
|
19
|
+
- `src/tools/governance.ts`
|
|
20
|
+
|
|
21
|
+
职责:
|
|
22
|
+
|
|
23
|
+
- builtin tool 的正式注册
|
|
24
|
+
- runtime tool source 的统一汇合
|
|
25
|
+
- governance 校验
|
|
26
|
+
- runtime exposure 排序与暴露
|
|
27
|
+
|
|
28
|
+
规则:
|
|
29
|
+
|
|
30
|
+
- tool 只负责动作,不负责 workflow。
|
|
31
|
+
- 新 builtin tool 的正式接入点是 `src/tools/builtinCatalog.ts` 的单个 descriptor。
|
|
32
|
+
- 所有 tool source 都必须先变成 `ToolRegistrySource`,再进入 registry。
|
|
33
|
+
- registry 必须在暴露前做重复名冲突检测与 governance 校验。
|
|
34
|
+
|
|
35
|
+
### 2. skill workflow 层
|
|
36
|
+
|
|
37
|
+
目录:
|
|
38
|
+
|
|
39
|
+
- `src/skills/discovery.ts`
|
|
40
|
+
- `src/skills/schema.ts`
|
|
41
|
+
- `src/skills/matching.ts`
|
|
42
|
+
- `src/skills/state.ts`
|
|
43
|
+
- `src/tools/skills/loadSkillTool.ts`
|
|
44
|
+
|
|
45
|
+
职责:
|
|
46
|
+
|
|
47
|
+
- 发现 skill
|
|
48
|
+
- 声明 workflow 触发条件
|
|
49
|
+
- 按需加载 skill 正文
|
|
50
|
+
- 在 runtime 中阻止“该先 load_skill 却直接执行 workflow”
|
|
51
|
+
|
|
52
|
+
规则:
|
|
53
|
+
|
|
54
|
+
- skill 负责 workflow / 组织已有能力,不负责直接动作执行。
|
|
55
|
+
- skill 正文不能绕过 tool registry 单独长出动作入口。
|
|
56
|
+
- skill 只通过 `load_skill` 进入当前 turn,上下文层只放轻量 runtime hint,不回退成 catalog dump。
|
|
57
|
+
|
|
58
|
+
### 3. MCP 外部能力层
|
|
59
|
+
|
|
60
|
+
目录:
|
|
61
|
+
|
|
62
|
+
- `src/mcp/clientManager.ts`
|
|
63
|
+
- `src/mcp/toolAdapter.ts`
|
|
64
|
+
- `src/mcp/registryIntegration.ts`
|
|
65
|
+
|
|
66
|
+
职责:
|
|
67
|
+
|
|
68
|
+
- 连接外部 server
|
|
69
|
+
- 把发现到的 MCP tool 翻译成 Athlete 的正式 tool source
|
|
70
|
+
- 补上 MCP 来源与 governance 元数据
|
|
71
|
+
|
|
72
|
+
规则:
|
|
73
|
+
|
|
74
|
+
- MCP 负责外部能力源,不直接改 builtin registry。
|
|
75
|
+
- 正式主路径是:
|
|
76
|
+
`MCP discovery -> toolAdapter -> ToolRegistrySource(kind=mcp) -> createRuntimeToolRegistry(...) -> governance -> exposure`
|
|
77
|
+
- MCP tool 不能绕过 shared registry / governance / exposure。
|
|
78
|
+
|
|
79
|
+
### 4. host 注入层
|
|
80
|
+
|
|
81
|
+
目录:
|
|
82
|
+
|
|
83
|
+
- `src/host/toolRegistry.ts`
|
|
84
|
+
- `src/telegram/sendFileTool.ts`
|
|
85
|
+
- `src/weixin/sendFileTool.ts`
|
|
86
|
+
|
|
87
|
+
职责:
|
|
88
|
+
|
|
89
|
+
- 把宿主 extra tool 收口成正式 host source
|
|
90
|
+
- 让宿主注入仍然经过 shared registry / governance / exposure
|
|
91
|
+
|
|
92
|
+
规则:
|
|
93
|
+
|
|
94
|
+
- host 负责宿主注入点,不负责平台内核路由规则。
|
|
95
|
+
- host extra tool 不能伪装成 builtin。
|
|
96
|
+
- 正式主路径是:
|
|
97
|
+
`host extra tool -> createHostToolRegistry(...) -> ToolRegistrySource(kind=host) -> createRuntimeToolRegistry(...) -> governance -> exposure`
|
|
98
|
+
|
|
99
|
+
## 当前共享平台边界
|
|
100
|
+
|
|
101
|
+
### registry
|
|
102
|
+
|
|
103
|
+
- `ToolRegistrySource` 是正式扩展源模型。
|
|
104
|
+
- source 负责回答“能力从哪来”,不负责执行细节。
|
|
105
|
+
|
|
106
|
+
### governance
|
|
107
|
+
|
|
108
|
+
- `src/tools/governance.ts` 只负责规范化、校验和 fail-closed。
|
|
109
|
+
- 缺治理元数据、重复注册、违规结果信号,都必须在这里或 registry 边界显式失败。
|
|
110
|
+
|
|
111
|
+
### runtime exposure
|
|
112
|
+
|
|
113
|
+
- `src/tools/registry.ts` 负责把 builtin / MCP / host source 汇总成统一 runtime tool surface。
|
|
114
|
+
- 排序、去冲突、最终 definitions/entries 暴露都在这一层完成。
|
|
115
|
+
|
|
116
|
+
### host injection
|
|
117
|
+
|
|
118
|
+
- `src/host/toolRegistry.ts` 只是宿主到 shared registry 的正式桥。
|
|
119
|
+
- 宿主不能自己再造平行 runtime tool 池。
|
|
120
|
+
|
|
121
|
+
## 当前已落地的关键能力
|
|
122
|
+
|
|
123
|
+
- `mineru-pdf-reading`
|
|
124
|
+
- `mineru-image-reading`
|
|
125
|
+
- `mineru-doc-reading`
|
|
126
|
+
- `mineru-ppt-reading`
|
|
127
|
+
- `mineru_pdf_read`
|
|
128
|
+
- `mineru_image_read`
|
|
129
|
+
- `mineru_doc_read`
|
|
130
|
+
- `mineru_ppt_read`
|
|
131
|
+
- `web-research`
|
|
132
|
+
- `browser-automation`
|
|
133
|
+
- Telegram / 微信 send file tool 注入
|
|
134
|
+
|
|
135
|
+
## 新能力的最短正式路径
|
|
136
|
+
|
|
137
|
+
### 新增 builtin tool
|
|
138
|
+
|
|
139
|
+
1. 写一个 tool handler 文件
|
|
140
|
+
2. 在 `src/tools/builtinCatalog.ts` 增加一个 descriptor
|
|
141
|
+
|
|
142
|
+
descriptor 必须同时声明:
|
|
143
|
+
|
|
144
|
+
- tool implementation
|
|
145
|
+
- 暴露 mode
|
|
146
|
+
- governance
|
|
147
|
+
|
|
148
|
+
### 新增 skill
|
|
149
|
+
|
|
150
|
+
1. 增加 `SKILL.md`
|
|
151
|
+
2. 让 skill metadata 声明 workflow 触发条件
|
|
152
|
+
|
|
153
|
+
skill 不新增动作入口;动作仍走已有 tool。
|
|
154
|
+
|
|
155
|
+
### 新增 MCP 能力
|
|
156
|
+
|
|
157
|
+
1. 让 server 被 config / discovery 发现
|
|
158
|
+
2. 让 `toolAdapter` 把它翻译成 governed MCP tool
|
|
159
|
+
3. 让 `registryIntegration` 把它挂成 MCP source
|
|
160
|
+
|
|
161
|
+
### 新增 host extra tool
|
|
162
|
+
|
|
163
|
+
1. 写宿主 tool
|
|
164
|
+
2. 声明 governance
|
|
165
|
+
3. 只通过 `src/host/toolRegistry.ts` 注入
|
|
166
|
+
|
|
167
|
+
## 当前清掉的临时接线
|
|
168
|
+
|
|
169
|
+
- 不再以 `includeTools` 这种扁平拼接参数作为主路径扩展口。
|
|
170
|
+
- 不再以“先摊平成 RegisteredTool 列表再猜来源”的方式表示 MCP。
|
|
171
|
+
- host send-file tool 不再挂在 builtin governance 目录里假装自己是内建能力。
|
|
172
|
+
|
|
173
|
+
## 当前硬约束
|
|
174
|
+
|
|
175
|
+
1. 不把扩展继续塞回 system prompt。
|
|
176
|
+
2. tool / skill / MCP / host 必须通过正式扩展口接入。
|
|
177
|
+
3. 宿主 extra tool 必须经 `src/host/` 注入。
|
|
178
|
+
4. 同名 tool 注册必须在 registry 边界显式失败,不允许静默覆盖。
|
|
179
|
+
5. 缺 governance 的扩展必须 fail-closed,不允许静默放行。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 控制面账本
|
|
2
|
+
|
|
3
|
+
## 当前定位
|
|
4
|
+
|
|
5
|
+
控制面账本是 Athlete 的正式本地裁决层。
|
|
6
|
+
|
|
7
|
+
它负责回答:
|
|
8
|
+
|
|
9
|
+
- 有哪些任务
|
|
10
|
+
- 谁在做
|
|
11
|
+
- 哪些协议还在 pending
|
|
12
|
+
- 哪些后台任务在跑
|
|
13
|
+
- 哪些 worktree 有效
|
|
14
|
+
|
|
15
|
+
## 当前实现
|
|
16
|
+
|
|
17
|
+
- `src/control/ledger/open.ts`
|
|
18
|
+
- `src/control/ledger/migrations.ts`
|
|
19
|
+
- `src/control/ledger/taskRepo.ts`
|
|
20
|
+
- `src/control/ledger/teamRepo.ts`
|
|
21
|
+
- `src/control/ledger/requestRepo.ts`
|
|
22
|
+
- `src/control/ledger/policyRepo.ts`
|
|
23
|
+
- `src/control/ledger/backgroundRepo.ts`
|
|
24
|
+
- `src/control/ledger/worktreeRepo.ts`
|
|
25
|
+
|
|
26
|
+
## 当前要求
|
|
27
|
+
|
|
28
|
+
1. 新的控制面状态优先进入 SQLite,不再优先发明 JSON 文件。
|
|
29
|
+
2. 旧 JSON 真相如果妨碍主干,应直接清理。
|
|
30
|
+
3. 宿主层和展示层不能成为控制面真相。
|
|
31
|
+
4. session 现场负责单个任务现场;控制面账本负责跨任务裁决、协作、execution、worktree。
|
|
32
|
+
5. 如果 session 和 ledger 同时声称能裁决同一件事,说明边界错了,要继续收敛,不做双裁决。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 配置系统
|
|
2
|
+
|
|
3
|
+
## 当前入口
|
|
4
|
+
|
|
5
|
+
- `src/config/store.ts`
|
|
6
|
+
|
|
7
|
+
## 当前职责
|
|
8
|
+
|
|
9
|
+
- 读取全局 `config.json`
|
|
10
|
+
- 读取项目 `.athlete/.env`
|
|
11
|
+
- 合并环境变量覆盖
|
|
12
|
+
- 产出统一 runtime config
|
|
13
|
+
|
|
14
|
+
## 当前内部结构
|
|
15
|
+
|
|
16
|
+
- `src/config/store.ts`
|
|
17
|
+
- 对外唯一入口
|
|
18
|
+
- `src/config/fileStore.ts`
|
|
19
|
+
- 只负责 config file 持久化和 schema 升级
|
|
20
|
+
- `src/config/runtime.ts`
|
|
21
|
+
- 只负责 runtime 合并和宿主所需归一化
|
|
22
|
+
- `src/config/env.ts`
|
|
23
|
+
- 只负责 `.env` 装载
|
|
24
|
+
|
|
25
|
+
## 当前必须守住的事
|
|
26
|
+
|
|
27
|
+
1. 配置入口只能有一个。
|
|
28
|
+
2. 全局配置要有 schema version。
|
|
29
|
+
3. 旧配置只允许一次性升级,不做长期脏兼容。
|
|
30
|
+
4. Telegram、微信、MCP、provider 都必须从这里出 runtime config。
|
|
31
|
+
5. 宿主、CLI、tool、service 不能各自再偷偷读 `.env` 造第二入口。
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# 总体架构
|
|
2
|
+
|
|
3
|
+
## 一句话
|
|
4
|
+
|
|
5
|
+
Athlete 当前是一套“耐跑主 Agent + 总指挥调度 + 统一控制面 + 多宿主外壳”的系统。
|
|
6
|
+
|
|
7
|
+
## 当前正式分层
|
|
8
|
+
|
|
9
|
+
### 1. 核心执行系统
|
|
10
|
+
|
|
11
|
+
目录:
|
|
12
|
+
|
|
13
|
+
- `src/agent/`
|
|
14
|
+
- `src/orchestrator/`
|
|
15
|
+
- `src/tools/`
|
|
16
|
+
- `src/mcp/`
|
|
17
|
+
- `src/skills/`
|
|
18
|
+
- `src/context/`
|
|
19
|
+
- `src/config/`
|
|
20
|
+
- `src/control/ledger/`
|
|
21
|
+
- `src/tasks/`
|
|
22
|
+
- `src/team/`
|
|
23
|
+
- `src/execution/`
|
|
24
|
+
- `src/worktrees/`
|
|
25
|
+
- `src/changes/`
|
|
26
|
+
|
|
27
|
+
职责:
|
|
28
|
+
|
|
29
|
+
- turn 执行
|
|
30
|
+
- 主 Agent 预处理
|
|
31
|
+
- 任务拆分与调度
|
|
32
|
+
- tool / skill / MCP 接线
|
|
33
|
+
- session / checkpoint / verification / acceptance / runtime stats
|
|
34
|
+
- 控制面真相源
|
|
35
|
+
|
|
36
|
+
### 2. 宿主运行边界
|
|
37
|
+
|
|
38
|
+
目录:
|
|
39
|
+
|
|
40
|
+
- `src/host/`
|
|
41
|
+
|
|
42
|
+
职责:
|
|
43
|
+
|
|
44
|
+
- 共享 session 入口
|
|
45
|
+
- 共享 turn 入口
|
|
46
|
+
- 共享 runtime tool registry 入口
|
|
47
|
+
- 共享 pause / abort / error / closeout 收口
|
|
48
|
+
- 宿主扩展点
|
|
49
|
+
|
|
50
|
+
### 3. 宿主适配层
|
|
51
|
+
|
|
52
|
+
目录:
|
|
53
|
+
|
|
54
|
+
- `src/cli/`
|
|
55
|
+
- `src/interaction/`
|
|
56
|
+
- `src/ui/`
|
|
57
|
+
- `src/shell/cli/`
|
|
58
|
+
- `src/telegram/`
|
|
59
|
+
- `src/weixin/`
|
|
60
|
+
|
|
61
|
+
职责:
|
|
62
|
+
|
|
63
|
+
- 输入输出
|
|
64
|
+
- transport
|
|
65
|
+
- 展示
|
|
66
|
+
- typing / visible / delivery
|
|
67
|
+
- stop 语义
|
|
68
|
+
- commander 和本地命令
|
|
69
|
+
|
|
70
|
+
规则:
|
|
71
|
+
|
|
72
|
+
- 宿主只做壳,不定义 runtime 真相。
|
|
73
|
+
- 真正执行 turn 时,宿主必须统一经过 `src/host/`。
|
|
74
|
+
|
|
75
|
+
## 当前系统主轴
|
|
76
|
+
|
|
77
|
+
Athlete 的主轴不是“让一个 Agent 什么都亲自做”,而是:
|
|
78
|
+
|
|
79
|
+
1. lead 先理解和组织任务
|
|
80
|
+
2. 控制面把任务状态落盘
|
|
81
|
+
3. orchestrator 判断下一步由谁来做
|
|
82
|
+
4. 执行者完成后再回到 lead 合流
|
|
83
|
+
5. 宿主只负责把这套主路径接给不同通道
|
|
84
|
+
|
|
85
|
+
## 当前关键边界
|
|
86
|
+
|
|
87
|
+
### 主 Agent 回答
|
|
88
|
+
|
|
89
|
+
- 当前任务是什么
|
|
90
|
+
- 现在该继续、拆分、派工还是等待
|
|
91
|
+
|
|
92
|
+
### 控制面回答
|
|
93
|
+
|
|
94
|
+
- 谁在做
|
|
95
|
+
- 哪些任务 blocked
|
|
96
|
+
- 哪些后台任务和 worktree 仍有效
|
|
97
|
+
|
|
98
|
+
### 宿主边界回答
|
|
99
|
+
|
|
100
|
+
- 一个宿主怎样进入核心
|
|
101
|
+
- 它怎样注入 extra tool / callbacks
|
|
102
|
+
- 它怎样统一处理 pause / abort / error
|
|
103
|
+
|
|
104
|
+
### 宿主适配层回答
|
|
105
|
+
|
|
106
|
+
- 消息从哪来
|
|
107
|
+
- 输出到哪去
|
|
108
|
+
- 这个宿主的可见语义是什么
|
|
109
|
+
|
|
110
|
+
## 当前架构约束
|
|
111
|
+
|
|
112
|
+
1. 控制面真相不允许从宿主层反推。
|
|
113
|
+
2. 宿主不允许直接散连 `src/agent/turn.ts` 或 `src/tools/runtimeRegistry.ts`。
|
|
114
|
+
3. 调度规则应长在 orchestrator,不应散落在各宿主。
|
|
115
|
+
4. tools、skills、MCP、host 扩展都必须通过正式边界生长。
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# 状态与真相源
|
|
2
|
+
|
|
3
|
+
## 规则
|
|
4
|
+
|
|
5
|
+
Athlete 当前只有一套正式真相源,不允许宿主、提示词或临时 JSON 再发明平行状态。
|
|
6
|
+
|
|
7
|
+
## 当前正式真相源
|
|
8
|
+
|
|
9
|
+
### 1. session 现场
|
|
10
|
+
|
|
11
|
+
介质:
|
|
12
|
+
|
|
13
|
+
- `paths.sessionsDir/*.json`
|
|
14
|
+
|
|
15
|
+
正式格式:
|
|
16
|
+
|
|
17
|
+
- 每个 session snapshot 都带 `schemaVersion`
|
|
18
|
+
- 读取边界必须先过 `src/agent/session/snapshot.ts`
|
|
19
|
+
- 版本不支持、JSON 损坏、关键字段损坏都在这里 fail closed
|
|
20
|
+
|
|
21
|
+
核心内容:
|
|
22
|
+
|
|
23
|
+
- canonical:
|
|
24
|
+
- `messages`
|
|
25
|
+
- `createdAt / updatedAt / cwd / title`
|
|
26
|
+
- persisted machine state:
|
|
27
|
+
- `todoItems`
|
|
28
|
+
- `taskState`
|
|
29
|
+
- `checkpoint`
|
|
30
|
+
- `verificationState`
|
|
31
|
+
- `acceptanceState`
|
|
32
|
+
- `runtimeStats`
|
|
33
|
+
- 明确不在这里落盘的东西:
|
|
34
|
+
- prompt diagnostics
|
|
35
|
+
- visible event cache
|
|
36
|
+
- host return facade
|
|
37
|
+
|
|
38
|
+
对应实现:
|
|
39
|
+
|
|
40
|
+
- `src/agent/session/`
|
|
41
|
+
- `src/agent/checkpoint.ts`
|
|
42
|
+
- `src/agent/runtimeMetrics.ts`
|
|
43
|
+
- `src/agent/verification/`
|
|
44
|
+
- `src/agent/acceptance/`
|
|
45
|
+
|
|
46
|
+
### 2. 控制面账本
|
|
47
|
+
|
|
48
|
+
介质:
|
|
49
|
+
|
|
50
|
+
- `.athlete/control-plane.sqlite`
|
|
51
|
+
|
|
52
|
+
核心内容:
|
|
53
|
+
|
|
54
|
+
- task
|
|
55
|
+
- team member
|
|
56
|
+
- protocol request
|
|
57
|
+
- coordination policy
|
|
58
|
+
- execution
|
|
59
|
+
- worktree
|
|
60
|
+
|
|
61
|
+
对应实现:
|
|
62
|
+
|
|
63
|
+
- `src/control/ledger/`
|
|
64
|
+
- `src/tasks/`
|
|
65
|
+
- `src/team/`
|
|
66
|
+
- `src/execution/`
|
|
67
|
+
- `src/worktrees/`
|
|
68
|
+
|
|
69
|
+
### 3. 统一配置入口
|
|
70
|
+
|
|
71
|
+
入口:
|
|
72
|
+
|
|
73
|
+
- `src/config/store.ts`
|
|
74
|
+
|
|
75
|
+
负责:
|
|
76
|
+
|
|
77
|
+
- 全局配置文件
|
|
78
|
+
- 项目 `.athlete/.env`
|
|
79
|
+
- 环境变量覆盖
|
|
80
|
+
- Telegram / 微信 / MCP / provider runtime config
|
|
81
|
+
|
|
82
|
+
内部正式分层:
|
|
83
|
+
|
|
84
|
+
- `src/config/fileStore.ts`
|
|
85
|
+
- 只负责 `config.json` 读写、schema version、一次性升级
|
|
86
|
+
- `src/config/runtime.ts`
|
|
87
|
+
- 只负责 `.env + env + file config` 合并成 runtime config
|
|
88
|
+
- 但对外仍然只有 `src/config/store.ts`
|
|
89
|
+
|
|
90
|
+
### 4. 宿主绑定状态
|
|
91
|
+
|
|
92
|
+
宿主可以持久化自己的绑定和游标,但这些不是控制面裁决源。
|
|
93
|
+
|
|
94
|
+
例如:
|
|
95
|
+
|
|
96
|
+
- Telegram session map / offset
|
|
97
|
+
- 微信 session map / sync buf / context_token / delivery queue
|
|
98
|
+
|
|
99
|
+
它们只负责通道运行,不负责定义任务和调度真相。
|
|
100
|
+
|
|
101
|
+
额外约束:
|
|
102
|
+
|
|
103
|
+
- host binding 只能指向正式 session id
|
|
104
|
+
- session 缺失时可以显式新建一个 formal session 再重绑
|
|
105
|
+
- session 损坏或 schema 错误时不能偷偷重建,必须把错误暴露出来
|
|
106
|
+
|
|
107
|
+
## 明确不是正式真相源的东西
|
|
108
|
+
|
|
109
|
+
- prompt 文案
|
|
110
|
+
- 可见事件输出
|
|
111
|
+
- shell 展示缓存
|
|
112
|
+
- JSONL 审计流
|
|
113
|
+
- Telegram / 微信的展示消息
|
|
114
|
+
- host runtime facade 自己的返回对象
|
|
115
|
+
|
|
116
|
+
## 当前裁决顺序
|
|
117
|
+
|
|
118
|
+
1. 先看控制面账本和 session 现场
|
|
119
|
+
2. 再看由它们派生的 runtime / orchestration 语义
|
|
120
|
+
3. 最后才看宿主展示和可见输出
|
|
121
|
+
|
|
122
|
+
如果三者冲突,以前两者为准。
|
|
123
|
+
|
|
124
|
+
## 当前升级边界
|
|
125
|
+
|
|
126
|
+
1. control plane 通过 SQLite migration / `user_version` 升级。
|
|
127
|
+
2. config 通过 `schemaVersion` 升级。
|
|
128
|
+
3. session snapshot 通过 `schemaVersion` 升级。
|
|
129
|
+
4. 升级失败必须在正式读取边界报错,不允许宿主或调用方静默兜底。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 用户审阅
|
|
2
|
+
|
|
3
|
+
这一层是给人类看的。
|
|
4
|
+
|
|
5
|
+
它默认读者不是写代码的人,而是:
|
|
6
|
+
|
|
7
|
+
- 决定项目方向的人
|
|
8
|
+
- 审阅实现是否跑偏的人
|
|
9
|
+
- 只看文档、不看实现细节的人
|
|
10
|
+
|
|
11
|
+
## 你在这里应该看到什么
|
|
12
|
+
|
|
13
|
+
你应该看到的是:
|
|
14
|
+
|
|
15
|
+
- Athlete 的核心定位
|
|
16
|
+
- 它服务什么样的用户
|
|
17
|
+
- 它当前做什么、不做什么
|
|
18
|
+
- 它为什么强调耐跑、总指挥、拆任务、派工和扩技能
|
|
19
|
+
- 哪些原则是整个项目不能越线的
|
|
20
|
+
|
|
21
|
+
你不应该在这里被迫理解:
|
|
22
|
+
|
|
23
|
+
- 具体文件怎么 import
|
|
24
|
+
- 哪个 store 的字段叫什么
|
|
25
|
+
- 某个通道的细小接线细节
|
|
26
|
+
|
|
27
|
+
这些内容都在 `技术实现/`。
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# 产品定位
|
|
2
|
+
|
|
3
|
+
## Athlete 现在是什么
|
|
4
|
+
|
|
5
|
+
Athlete 不是一个“会在终端里聊天的 AI 员工”。
|
|
6
|
+
|
|
7
|
+
它现在更准确的定位是:
|
|
8
|
+
|
|
9
|
+
**一个以耐跑主 Agent 为核心、以任务拆分与调度为主轴、能够统领技能扩展与多通道执行的总指挥型智能体平台。**
|
|
10
|
+
|
|
11
|
+
## 为什么要换这个定位
|
|
12
|
+
|
|
13
|
+
如果把 Athlete 理解成一个“单枪匹马自己冲”的智能体,文档、架构和测试都会很容易跑偏。
|
|
14
|
+
|
|
15
|
+
因为当前系统已经不只是:
|
|
16
|
+
|
|
17
|
+
- 自己读文件
|
|
18
|
+
- 自己跑命令
|
|
19
|
+
- 自己写代码
|
|
20
|
+
|
|
21
|
+
它还已经具备:
|
|
22
|
+
|
|
23
|
+
- 主 Agent 预处理复杂任务
|
|
24
|
+
- 持久化任务板
|
|
25
|
+
- readiness / blocked / active / merge 的机器状态
|
|
26
|
+
- lead / teammate / background / subagent 的路由
|
|
27
|
+
- worktree 隔离并行执行
|
|
28
|
+
- skills 和 MCP 的标准扩展口
|
|
29
|
+
- CLI、Telegram、Weixin 等宿主接入
|
|
30
|
+
|
|
31
|
+
所以它的核心角色已经不该再被描述成“一个普通超级员工”。
|
|
32
|
+
|
|
33
|
+
它更像:
|
|
34
|
+
|
|
35
|
+
- 一个能长期耐跑的主 Agent
|
|
36
|
+
- 一个会组织别人干活的总指挥
|
|
37
|
+
- 一个把工具、技能、通道和控制面统一起来的平台内核
|
|
38
|
+
|
|
39
|
+
## 当前核心价值
|
|
40
|
+
|
|
41
|
+
Athlete 当前最核心的价值不是“最像人聊天”,而是:
|
|
42
|
+
|
|
43
|
+
- 长任务不容易跑丢
|
|
44
|
+
- 出错后还能继续推进
|
|
45
|
+
- 复杂任务能拆、能派、能等、能合流
|
|
46
|
+
- 控制面知道任务为什么 ready、blocked、active、completed
|
|
47
|
+
- 宿主只是外壳,主路径不会因为多通道接入而散掉
|
|
48
|
+
- skills、MCP、工具和通道都能在统一边界下生长
|
|
49
|
+
|
|
50
|
+
## 当前主要用户
|
|
51
|
+
|
|
52
|
+
Athlete 当前服务的不是“偶尔问一句问题的人”,而是这些人:
|
|
53
|
+
|
|
54
|
+
- 需要多步自动化的人
|
|
55
|
+
- 需要反复整理文档、资料、表格、网页信息的人
|
|
56
|
+
- 需要一个主 Agent 帮他统筹复杂工作的人
|
|
57
|
+
- 需要把能力扩进现有 Agent 系统的人
|
|
58
|
+
- 需要多宿主接入,但不想维护多套 runtime 规则的人
|
|
59
|
+
|
|
60
|
+
## Athlete 不想成为什么
|
|
61
|
+
|
|
62
|
+
Athlete 当前不想成为:
|
|
63
|
+
|
|
64
|
+
- 纯聊天机器人
|
|
65
|
+
- 只会自己埋头做事的单兵 Agent
|
|
66
|
+
- 默认一堆 agent 乱跑的 swarm 表演器
|
|
67
|
+
- 拖拽式工作流平台
|
|
68
|
+
- 先堆满功能、再补真相源和边界的“看起来很全”的系统
|
|
69
|
+
|
|
70
|
+
## 对实现的直接要求
|
|
71
|
+
|
|
72
|
+
因为产品定位已经变了,所以实现和测试必须跟着变:
|
|
73
|
+
|
|
74
|
+
- 文档必须优先表达“耐跑 + 总指挥 + 扩展平台”这条主线
|
|
75
|
+
- 总体架构必须优先保护控制面和调度面
|
|
76
|
+
- 新能力必须优先问“是否增强主 Agent 的组织能力”
|
|
77
|
+
- 宿主层不能继续偷偷长平行真相
|
|
78
|
+
- 技术文档必须直接服务文档驱动开发和测试驱动开发
|
|
@@ -14,9 +14,11 @@ Athlete 要做 harness,不做某一家的皮肤。
|
|
|
14
14
|
|
|
15
15
|
- 当前优先支持 OpenAI-compatible 接口
|
|
16
16
|
- provider 选择属于配置层,不属于业务层
|
|
17
|
+
- provider-specific fallback、reasoning、tool 兼容性都属于 adapter / capability 层,不属于 kernel 主循环
|
|
17
18
|
|
|
18
19
|
## 当前对应
|
|
19
20
|
|
|
21
|
+
- `src/agent/provider.ts`
|
|
20
22
|
- `src/agent/api.ts`
|
|
21
|
-
- `src/config/
|
|
23
|
+
- `src/config/store.ts`
|
|
22
24
|
- `src/types.ts`
|