@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.
Files changed (92) hide show
  1. package/README.md +149 -91
  2. package/dist/cli.js +26562 -19473
  3. package/dist/cli.js.map +1 -1
  4. package/package.json +6 -1
  5. package/scripts/postinstall-playwright.mjs +1 -1
  6. package/spec/README.md +49 -41
  7. package/spec//346/212/200/346/234/257/345/256/236/347/216/260/README.md +29 -0
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. package/spec//347/224/250/346/210/267/345/256/241/351/230/205/README.md +27 -0
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. package/spec/adr/ADR-0003-openai-compatible/344/274/230/345/205/210.md +0 -16
  45. package/spec/architecture//346/200/273/344/275/223/346/236/266/346/236/204.md +0 -111
  46. package/spec/architecture//347/212/266/346/200/201/344/270/216/347/234/237/347/233/270/346/272/220.md +0 -117
  47. package/spec/architecture//350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +0 -82
  48. package/spec/implementation/README.md +0 -17
  49. 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
  50. 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
  51. package/spec/interfaces/InteractionShell.md +0 -85
  52. package/spec/interfaces/ProviderAdapter.md +0 -23
  53. package/spec/interfaces/README.md +0 -17
  54. package/spec/interfaces/RuntimeLoop.md +0 -28
  55. package/spec/interfaces/SessionStore.md +0 -22
  56. package/spec/interfaces/ToolRegistry.md +0 -21
  57. package/spec/modules/config-system.md +0 -51
  58. package/spec/modules/interactive-terminal.md +0 -112
  59. package/spec/modules/lightweight-context-runtime.md +0 -63
  60. package/spec/modules/provider-adapter.md +0 -20
  61. package/spec/modules/runtime-metrics.md +0 -132
  62. package/spec/modules/runtime-rules.md +0 -33
  63. package/spec/modules/session-resume-compact.md +0 -49
  64. package/spec/modules/task-state.md +0 -34
  65. package/spec/modules/telegram-private-chat.md +0 -291
  66. package/spec/modules/tool-registry.md +0 -79
  67. package/spec/modules/weixin-private-chat.md +0 -291
  68. package/spec/modules/workspace-isolation.md +0 -24
  69. package/spec/modules//346/211/251/345/261/225/346/234/272/345/210/266.md +0 -105
  70. package/spec/overview/v0/350/214/203/345/233/264.md +0 -54
  71. package/spec/overview//344/272/247/345/223/201/345/256/232/344/271/211.md +0 -59
  72. 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
  73. 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
  74. package/spec/principles/README.md +0 -39
  75. package/spec/repo//345/274/200/345/217/221/350/247/204/345/210/231.md +0 -39
  76. 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
  77. 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
  78. package/spec/testing/fixtures-/350/247/204/350/214/203.md +0 -20
  79. package/spec/testing//346/265/213/350/257/225/347/255/226/347/225/245.md +0 -97
  80. /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
  81. /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
  82. /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
  83. /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
  84. /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
  85. /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
  86. /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
  87. /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
  88. /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
  89. /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
  90. /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
  91. /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
  92. /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
+ - 技术文档必须直接服务文档驱动开发和测试驱动开发
@@ -18,6 +18,6 @@
18
18
 
19
19
  ## 当前对应
20
20
 
21
- - `src/agent/contextBuilder.ts`
22
- - `src/agent/managedTurn.ts`
21
+ - `src/agent/context.ts`
22
+ - `src/agent/turn/managed.ts`
23
23
  - `src/agent/retryPolicy.ts`
@@ -19,5 +19,5 @@ background 不是附属功能,它是 Athlete 耐跑能力的一部分。
19
19
 
20
20
  ## 当前对应
21
21
 
22
- - `src/background/`
22
+ - `src/execution/`
23
23
  - `src/tools/background/`
@@ -25,6 +25,6 @@ session 里应该能承接:
25
25
 
26
26
  ## 当前对应
27
27
 
28
- - `src/agent/sessionStore.ts`
29
- - `src/agent/taskState.ts`
30
- - `src/agent/verificationState.ts`
28
+ - `src/agent/session.ts`
29
+ - `src/agent/session/taskState.ts`
30
+ - `src/agent/verification.ts`
@@ -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/env.ts`
23
+ - `src/config/store.ts`
22
24
  - `src/types.ts`