@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jun133/athlete",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "A global terminal AI coding assistant.",
5
5
  "keywords": [
6
6
  "athlete",
@@ -47,16 +47,20 @@
47
47
  "@playwright/mcp": "^0.0.70",
48
48
  "@types/adm-zip": "^0.5.8",
49
49
  "adm-zip": "^0.5.17",
50
+ "better-sqlite3": "^12.8.0",
50
51
  "cfb": "^1.2.2",
51
52
  "chalk": "^5.6.2",
52
53
  "commander": "^14.0.1",
54
+ "cors": "^2.8.6",
53
55
  "diff": "^8.0.2",
54
56
  "docx": "^9.5.1",
55
57
  "dompurify": "^3.3.3",
56
58
  "dotenv": "^17.2.3",
57
59
  "env-paths": "^3.0.0",
58
60
  "execa": "^9.6.0",
61
+ "express": "^5.2.1",
59
62
  "fast-glob": "^3.3.3",
63
+ "lowdb": "^7.0.1",
60
64
  "mammoth": "^1.10.0",
61
65
  "marked": "^17.0.4",
62
66
  "openai": "^6.4.0",
@@ -64,6 +68,7 @@
64
68
  "xlsx": "^0.18.5"
65
69
  },
66
70
  "devDependencies": {
71
+ "@types/better-sqlite3": "^7.6.13",
67
72
  "@types/node": "^24.5.2",
68
73
  "tsup": "^8.5.0",
69
74
  "tsx": "^4.20.5",
@@ -45,7 +45,7 @@ function resolveInstallTarget(rawValue) {
45
45
  case "msedge":
46
46
  return "msedge";
47
47
  default:
48
- return "chrome";
48
+ return "chromium";
49
49
  }
50
50
  }
51
51
 
package/spec/README.md CHANGED
@@ -1,56 +1,64 @@
1
1
  # Athlete SPEC
2
2
 
3
- `spec/` Athlete 当前唯一的规范与维护文档源。
3
+ `spec/` 现在是 Athlete 的主缰绳。
4
4
 
5
- 这里描述的是:
5
+ 这里不再只是“实现之后的说明书”,而是:
6
6
 
7
- - 项目现在已经做到什么
8
- - 当前架构如何组织
9
- - 关键规则和边界是什么
10
- - 维护时应该改哪一层
7
+ - 人类审阅项目方向的主入口
8
+ - AI 实现代码时必须对齐的规则源
9
+ - 文档驱动开发与测试驱动开发的共同约束层
11
10
 
12
- 这里不负责:
11
+ ## 怎么读
13
12
 
14
- - 历史演进叙事
15
- - 营销式介绍
16
- - 运行产物归档
13
+ Athlete 现在把文档分成两层:
17
14
 
18
- ## 单一真相源规则
15
+ ### 1. `用户审阅/`
19
16
 
20
- 从现在开始:
17
+ 给人类看。
21
18
 
22
- - 规范、原则、模块边界、维护说明统一写在 `spec/`
23
- - 根目录 `README.md` 只保留用户入口和高层说明
24
- - 根目录 `validation/` 只保留验证产物,不再承担规范文档职责
19
+ 这里回答:
25
20
 
26
- ## 阅读顺序
21
+ - 这个项目现在到底想成为什么
22
+ - 当前用户是谁
23
+ - 哪些原则是不能动的
24
+ - 哪些能力已经在范围内
25
+ - 为什么这个系统不是“一个单打独斗的聊天牛马”
27
26
 
28
- 1. `principles/README.md`
29
- 2. `overview/产品定义.md`
30
- 3. `overview/v0范围.md`
31
- 4. `architecture/总体架构.md`
32
- 5. `architecture/状态与真相源.md`
33
- 6. `architecture/运行时循环.md`
34
- 7. `modules/`
35
- 8. `interfaces/`
36
- 9. `implementation/`
37
- 10. `testing/`
38
- 11. `adr/`
27
+ 这层尽量不用技术黑话堆砌。
39
28
 
40
- ## 目录说明
29
+ ### 2. `技术实现/`
41
30
 
42
- - `principles/`: 架构宪法与工程铁律
43
- - `overview/`: 产品定义、范围、边界
44
- - `architecture/`: 总体架构、真相源、主循环
45
- - `modules/`: 模块职责与约束
46
- - `interfaces/`: 核心接口契约
47
- - `repo/`: 仓库级规则与流程
48
- - `implementation/`: 当前目录与代码映射
49
- - `testing/`: 测试策略与 fail-first 列表
50
- - `adr/`: 关键架构决策记录
31
+ 给实现和维护看。
51
32
 
52
- ## 文档要求
33
+ 这里回答:
53
34
 
54
- 1. 只写现状,不写过时历史说明。
55
- 2. 如果文档与 `src/` 当前实现冲突,以当前实现为准,并及时改文档。
56
- 3. 同类说明只保留一份,不并行维护 `docs/` 和 `spec/` 两套说法。
35
+ - 真相源在哪里
36
+ - 总体架构怎么分层
37
+ - 主循环和总指挥调度怎么衔接
38
+ - 宿主边界、配置、扩展、控制面、通道怎么接
39
+ - 仓库级规则、测试策略和代码地图是什么
40
+
41
+ 这层是代码实现、测试设计和后续重构的硬约束。
42
+
43
+ ## 当前阅读顺序
44
+
45
+ 1. `用户审阅/README.md`
46
+ 2. `用户审阅/产品定位.md`
47
+ 3. `用户审阅/系统全景.md`
48
+ 4. `用户审阅/项目范围.md`
49
+ 5. `用户审阅/宪法原则/`
50
+ 6. `技术实现/README.md`
51
+ 7. `技术实现/总体架构.md`
52
+ 8. `技术实现/状态与真相源.md`
53
+ 9. `技术实现/主循环与调度.md`
54
+ 10. `技术实现/关键模块/`
55
+ 11. `技术实现/仓库约束/`
56
+ 12. `技术实现/代码地图/`
57
+
58
+ ## 文档规则
59
+
60
+ 1. 文档优先描述当前真实项目,不写“如果以后也许会这样”的空话。
61
+ 2. 用户审阅文档优先帮助人理解方向,不被实现细枝末节淹没。
62
+ 3. 技术实现文档优先约束代码和测试,不写营销语。
63
+ 4. 一个文件只负责一件主要事情;能拆目录就拆目录,能拆文件就拆文件。
64
+ 5. 旧文档结构如果已经妨碍当前理解,可以直接删掉,不为历史目录保活。
@@ -0,0 +1,29 @@
1
+ # 技术实现
2
+
3
+ 这一层不是给路人看的。
4
+
5
+ 它直接服务三件事:
6
+
7
+ 1. 文档驱动开发
8
+ 2. 测试驱动开发
9
+ 3. 代码重构时的边界裁决
10
+
11
+ ## 这一层要回答什么
12
+
13
+ 这里必须清楚回答:
14
+
15
+ - 总体分层是什么
16
+ - 哪些状态是正式真相源
17
+ - lead 主循环和总指挥调度怎么衔接
18
+ - tools / skills / MCP / host 怎么接
19
+ - CLI、Telegram、微信这些宿主各自负责什么
20
+ - 仓库级规则和测试策略是什么
21
+
22
+ ## 当前阅读顺序
23
+
24
+ 1. `总体架构.md`
25
+ 2. `状态与真相源.md`
26
+ 3. `主循环与调度.md`
27
+ 4. `关键模块/`
28
+ 5. `仓库约束/`
29
+ 6. `代码地图/`
@@ -0,0 +1,60 @@
1
+ # 主循环与调度
2
+
3
+ ## 当前主循环不是单兵循环
4
+
5
+ Athlete 的 turn 入口仍然是主 Agent turn loop,但每次 lead turn 之前都会先经过总指挥调度层。
6
+
7
+ 当前关键接线:
8
+
9
+ - `src/orchestrator/leadLoop.ts`
10
+ - `src/orchestrator/leadInput.ts`
11
+ - `src/orchestrator/terminal.ts`
12
+ - `src/orchestrator/prepareLeadTurn.ts`
13
+ - `src/orchestrator/analyze.ts`
14
+ - `src/orchestrator/taskPlanning.ts`
15
+ - `src/orchestrator/progress.ts`
16
+ - `src/orchestrator/route.ts`
17
+ - `src/orchestrator/dispatch.ts`
18
+
19
+ ## 当前 lead turn 流程
20
+
21
+ 1. 读取项目上下文
22
+ 2. 分析本次输入的 objective 和复杂度
23
+ 3. 从控制面加载当前相关任务进度
24
+ 4. 必要时补最小任务图
25
+ 5. 计算 ready / blocked / active / merge 状态
26
+ 6. 决定由 lead、subagent、teammate 还是 background 执行
27
+ 7. 如果需要 dispatch,就先完成正式派发
28
+ 8. 如果 delegated work 仍在推进,直接进入正式 wait 结果,不再进入普通 lead turn
29
+ 9. 只有当机器状态明确给出 `self_execute` 时,才进入普通 lead turn
30
+ 10. lead 执行时必须带上正式阶段输入,不能把 merge / implementation 混成自由发挥
31
+
32
+ ## route 当前做什么
33
+
34
+ `src/orchestrator/route.ts` 当前会优先判断:
35
+
36
+ - 是否有控制面冲突
37
+ - 是否有 lead 已经在执行的正式阶段
38
+ - 是否有 merge 任务
39
+ - 是否应该先 survey
40
+ - 是否适合跑 background
41
+ - 是否适合派 teammate
42
+ - 是否应该正式等待已在跑或已保留的 delegated work
43
+ - 否则由 lead 继续执行
44
+
45
+ ## 这层的意义
46
+
47
+ 这层的意义不是“做得更复杂”,而是把 Athlete 从单兵工作流推进成总指挥工作流:
48
+
49
+ - lead 不再总是自己直接干
50
+ - 系统知道什么时候该分、该派、该等、该合
51
+ - 调度判断来自机器状态,不靠 prompt 记忆
52
+ - dispatch / wait / merge 不再只是 pre-turn 提示,而是主路径上的正式状态推进
53
+
54
+ ## 当前约束
55
+
56
+ 1. 调度判断必须基于统一真相源。
57
+ 2. orchestrator 负责组织和路由,不负责具体文件改写。
58
+ 3. 宿主不允许偷偷复写自己的调度规则。
59
+ 4. 如果任务状态和执行现实冲突,优先暴露冲突,不做假装顺滑。
60
+ 5. `wait_for_existing_work` 必须产出正式 pause transition,不能继续偷偷落入普通 lead turn。
@@ -0,0 +1,14 @@
1
+ # 开发规则
2
+
3
+ ## 当前目标
4
+
5
+ 这份规则服务的是:让 Athlete 在继续快速演进时,仍然保持清楚、可改、可验证。
6
+
7
+ ## 当前规则
8
+
9
+ 1. 一个文件只做一件主要事情。
10
+ 2. 能拆目录就拆目录,能拆文件就拆文件。
11
+ 3. 新能力优先长在清晰边界上,不优先塞进已有大文件。
12
+ 4. 宿主层、核心层、控制面要分清。
13
+ 5. 旧结构如果已经妨碍当前主干,可以直接清理,不为旧残余保活。
14
+ 6. 文档、测试、实现三者必须相互对齐。
@@ -0,0 +1,20 @@
1
+ # 本地命令与流程
2
+
3
+ ## 当前核心命令
4
+
5
+ - `npm.cmd run check`
6
+ - `npm.cmd test`
7
+ - `npm.cmd run build`
8
+ - `node dist\\cli.js`
9
+
10
+ ## 当前推荐流程
11
+
12
+ 1. 先更新文档
13
+ 2. 先补失败测试
14
+ 3. 再改实现
15
+ 4. 最后跑完整验证
16
+
17
+ ## 当前要求
18
+
19
+ - Windows 环境优先使用 `npm.cmd`
20
+ - 用户可见入口优先验证 CLI、Telegram、微信主路径
@@ -0,0 +1,48 @@
1
+ # 测试策略
2
+
3
+ ## 当前目标
4
+
5
+ 测试不是覆盖率装饰,而是用来保护主干结构。
6
+
7
+ ## 当前优先保护对象
8
+
9
+ 1. 主 Agent 耐跑能力
10
+ 2. 总指挥调度语义
11
+ 3. 控制面真相源
12
+ 4. 宿主运行边界
13
+ 5. 配置治理
14
+ 6. 宿主行为回归
15
+
16
+ ## 当前测试分层
17
+
18
+ ### 结构护栏
19
+
20
+ 用于防止架构回退。
21
+
22
+ 例如:
23
+
24
+ - 宿主不再直连 raw turn
25
+ - 宿主不再直连 raw runtime registry
26
+ - 关键文件保持单一职责
27
+
28
+ ### 行为回归
29
+
30
+ 用于保护用户看得见的能力。
31
+
32
+ 例如:
33
+
34
+ - one-shot closeout
35
+ - interactive 行为
36
+ - Telegram / 微信 `/stop`
37
+ - 文件回传
38
+ - visible events
39
+
40
+ ### 真相源回归
41
+
42
+ 用于保护 session、checkpoint、SQLite ledger 和配置入口不被旁路替代。
43
+
44
+ ## 当前规则
45
+
46
+ 1. 先写失败测试,再写实现。
47
+ 2. 新文档路径和新模块边界如果会影响测试,测试要一起迁移。
48
+ 3. 文档驱动和测试驱动要一起工作,不能一个更新、另一个失效。
@@ -0,0 +1,51 @@
1
+ # 目录到代码映射
2
+
3
+ ## 当前主目录地图
4
+
5
+ ### 核心执行系统
6
+
7
+ - `src/agent/`
8
+ - turn、session、checkpoint、verification、acceptance、runtime stats
9
+ - `src/orchestrator/`
10
+ - 输入分析、任务规划、进度读取、路由、派发
11
+ - `src/tools/`
12
+ - 内建工具与 runtime tool registry
13
+ - `src/skills/`
14
+ - skill catalog、matching、loading、workflow guards
15
+ - `src/mcp/`
16
+ - 外部能力接入
17
+ - `src/control/ledger/`
18
+ - SQLite 控制面仓库
19
+ - `src/tasks/` / `src/team/` / `src/execution/` / `src/worktrees/`
20
+ - 各控制面实体的实现层
21
+
22
+ ### 宿主运行边界
23
+
24
+ - `src/host/`
25
+ - 共享 session 入口
26
+ - 共享 turn 入口
27
+ - 共享 host extra tool 注入
28
+
29
+ ### 宿主适配层
30
+
31
+ - `src/cli/`
32
+ - commander、one-shot、session 命令
33
+ - `src/interaction/`
34
+ - 共享交互驱动
35
+ - `src/ui/` / `src/shell/cli/`
36
+ - CLI 展示层
37
+ - `src/telegram/`
38
+ - Telegram 通道
39
+ - `src/weixin/`
40
+ - 微信通道
41
+
42
+ ## 当前关键文件
43
+
44
+ - `src/orchestrator/prepareLeadTurn.ts`
45
+ - `src/orchestrator/route.ts`
46
+ - `src/orchestrator/taskLifecycle.ts`
47
+ - `src/host/turn.ts`
48
+ - `src/host/boundTurn.ts`
49
+ - `src/config/store.ts`
50
+ - `src/telegram/turnRunner.ts`
51
+ - `src/weixin/turnRunner.ts`
@@ -0,0 +1,31 @@
1
+ # Telegram私聊
2
+
3
+ ## 当前定位
4
+
5
+ Telegram 是 Athlete 的私聊宿主之一。
6
+
7
+ 它负责把 Telegram Bot API 接到统一主路径上,而不是自己重造 runtime。
8
+
9
+ ## 当前能力
10
+
11
+ - `telegram serve`
12
+ - 私聊白名单
13
+ - `/stop`
14
+ - session 绑定
15
+ - 可见事件输出
16
+ - 文件下载
17
+ - 文件回传
18
+
19
+ ## 当前关键实现
20
+
21
+ - `src/telegram/cli.ts`
22
+ - `src/telegram/service.ts`
23
+ - `src/telegram/turnRunner.ts`
24
+ - `src/telegram/sendFileTool.ts`
25
+ - `src/telegram/deliveryQueue.ts`
26
+
27
+ ## 当前约束
28
+
29
+ 1. Telegram turn 必须经 `src/host/`。
30
+ 2. Telegram 只保留 transport、delivery、typing、attachment、stop 语义。
31
+ 3. send file 是 host extra tool,不是 Telegram 自己拼 runtime。
@@ -0,0 +1,26 @@
1
+ # 交互终端
2
+
3
+ ## 当前定位
4
+
5
+ 交互终端是一个宿主外壳,不是核心真相源。
6
+
7
+ ## 当前边界
8
+
9
+ - `src/ui/interactive.ts`
10
+ - `src/interaction/`
11
+ - `src/shell/cli/`
12
+
13
+ ## 当前职责
14
+
15
+ - 输入输出
16
+ - 本地命令
17
+ - turn 展示
18
+ - interrupt
19
+ - quit / exit guard
20
+ - runtime summary 展示
21
+
22
+ ## 当前约束
23
+
24
+ 1. 交互终端不能直接依赖 raw turn。
25
+ 2. 它必须通过 `src/host/` 进入核心。
26
+ 3. 展示层不能偷偷保存平行 runtime 状态。
@@ -0,0 +1,27 @@
1
+ # 命令行产品面
2
+
3
+ ## 当前启动链
4
+
5
+ - fast path
6
+ - lightweight path
7
+ - full runtime path
8
+
9
+ ## 当前产品目标
10
+
11
+ - `--version`、`help`、`config path` 快速返回
12
+ - 配置坏了时仍给出修复入口
13
+ - full runtime 命令才拉起重模块
14
+
15
+ ## 当前关键文件
16
+
17
+ - `src/cli.ts`
18
+ - `src/cli/program.ts`
19
+ - `src/cli/commands/`
20
+ - `src/cli/runtime.ts`
21
+ - `src/cli/oneShot.ts`
22
+
23
+ ## 当前约束
24
+
25
+ 1. CLI 产品面不定义核心真相源。
26
+ 2. one-shot 和 interactive 都必须走 `src/host/`。
27
+ 3. 顶层 CLI 入口不能重新长成总控大文件。
@@ -0,0 +1,79 @@
1
+ # 多智能体调度
2
+
3
+ ## 当前定位
4
+
5
+ Athlete 现在不是三套执行者并存,而是一套正式 execution lane 体系:
6
+
7
+ - `agent lane`
8
+ - `command lane`
9
+
10
+ `subagent` 和 `teammate` 不再是两套生命周期,它们只是 `agent lane` 的两种 profile:
11
+
12
+ - `subagent`: 同步、轻量、干净上下文
13
+ - `teammate`: 异步、可复用身份、可恢复 session
14
+
15
+ `background` 是 `command lane` 的 profile。
16
+
17
+ ## 当前正式真相源
18
+
19
+ - `src/execution/`
20
+ - `src/control/ledger/executionRepo.ts`
21
+ - `src/orchestrator/dispatch.ts`
22
+ - `src/orchestrator/progress.ts`
23
+ - `src/orchestrator/taskLifecycle.ts`
24
+
25
+ lead 面对 delegated work 时,正式观察对象是 execution record,不再直接拼接:
26
+
27
+ - memory-only subagent 特例
28
+ - teammate 持久 poll loop
29
+ - background job 通知消息
30
+
31
+ ## 当前统一生命周期
32
+
33
+ 所有 execution lane 共享同一组正式状态:
34
+
35
+ - `queued`
36
+ - `running`
37
+ - `paused`
38
+ - `completed`
39
+ - `failed`
40
+ - `aborted`
41
+
42
+ lane 差异只体现在驱动方式,不体现在生命周期制度。
43
+
44
+ ## 当前统一主路径
45
+
46
+ 1. orchestrator 决定任务交给哪条 lane/profile
47
+ 2. `dispatch` 创建 execution record
48
+ 3. 如需异步执行,统一通过 `__worker__ run --execution-id <id>` 拉起 worker
49
+ 4. execution worker 领取 task/worktree/inbox 上下文
50
+ 5. execution 结束后统一写 closeout,并通过 `execution_closeout` 回到 lead inbox
51
+ 6. `progress` 和 `route` 根据 execution 状态决定 wait / merge / reconcile
52
+
53
+ ## 当前共享制度
54
+
55
+ ### task 绑定
56
+
57
+ - execution 可显式绑定 `taskId`
58
+ - task 不再只靠 teammate/background 私有状态判断“谁在干”
59
+
60
+ ### worktree 绑定
61
+
62
+ - task-bound agent execution 统一走 `prepareExecutionTaskContext`
63
+ - worktree 不再是 teammate 独占语义
64
+
65
+ ### inbox / result handoff
66
+
67
+ - 异步 execution 完成、失败、暂停都走统一 `execution_closeout`
68
+ - background 不再只是“跑完发一条背景消息”
69
+
70
+ ### session / 恢复
71
+
72
+ - subagent 现在也留下正式 session 与 execution closeout
73
+ - teammate 复用 identity/session,但一次 execution 只负责一次正式派工
74
+
75
+ ## 当前约束
76
+
77
+ 1. lead 等待 delegated work 时,依据 execution state,不依据三套私有 worker 状态。
78
+ 2. 异步 worker 只允许统一 CLI 协议入口,不再保留 lane 私有子命令。
79
+ 3. 新执行能力优先作为 lane/profile 扩展,不再再造第四套执行制度。
@@ -0,0 +1,74 @@
1
+ # 宿主运行边界
2
+
3
+ ## 目标
4
+
5
+ `src/host/` 是核心执行系统对宿主暴露的正式接入点。
6
+
7
+ 它存在的目的,是让 CLI、interactive、Telegram、微信和未来其他宿主走同一条主路径。
8
+
9
+ ## 当前能力
10
+
11
+ ### session 入口
12
+
13
+ - `createHostSession`
14
+ - `createPersistedSession`
15
+ - `loadLatestSession`
16
+ - `ensureBoundSession`
17
+ - `persistBoundSession`
18
+
19
+ 当前 contract:
20
+
21
+ - 宿主 binding 只保存 “我绑的是哪个 `sessionId`”
22
+ - 真正 session 内容只能从 `SessionStore` 读取
23
+ - `ensureBoundSession(...)` 只会在 `session not found` 时重建 formal session
24
+ - 如果 session snapshot 损坏或 schema 不支持,宿主必须失败暴露,不能偷偷发明新 session
25
+
26
+ ### turn 入口
27
+
28
+ - `runHostTurn`
29
+ - `runBoundHostTurn`
30
+
31
+ ### runtime tools 入口
32
+
33
+ - `createHostToolRegistry`
34
+
35
+ ## 当前宿主可注入的扩展
36
+
37
+ - host identity
38
+ - callbacks
39
+ - extra tools
40
+
41
+ 例如:
42
+
43
+ - Telegram send file
44
+ - 微信 send file
45
+
46
+ ## 当前正式 host tool 路径
47
+
48
+ `src/host/toolRegistry.ts` 现在只做一件事:
49
+
50
+ - 把宿主 extra tool 收成 `ToolRegistrySource(kind=host)`
51
+ - 再统一交给 `createRuntimeToolRegistry(...)`
52
+
53
+ 也就是说,宿主 extra tool 的正式路径是:
54
+
55
+ `host tool -> host source -> shared runtime registry -> governance -> exposure`
56
+
57
+ 而不是:
58
+
59
+ `host tool -> 直接拼进 runtime tools 列表`
60
+
61
+ ## 当前宿主注入规则
62
+
63
+ 1. extra tool 必须仍然带治理语义。
64
+ 2. host source 会把来源标记成 `host`,不能再伪装成 builtin。
65
+ 3. host 只能通过这里进入 shared registry,不能自己私下再造第二个 registry。
66
+ 4. host 注入失败必须暴露在注册或治理边界,不能静默忽略。
67
+
68
+ ## 当前硬约束
69
+
70
+ 1. 宿主不允许直接 import raw `runManagedAgentTurn(...)`。
71
+ 2. 宿主不允许直接 import raw `createRuntimeToolRegistry(...)`。
72
+ 3. pause / abort / error / closeout 必须通过这里统一收口。
73
+ 4. `src/host/` 不能新造平行真相源。
74
+ 5. extra tool 只能经 `createHostToolRegistry(...)` 进入 runtime,不能绕开 host source。
@@ -0,0 +1,55 @@
1
+ # 工作区与并行隔离
2
+
3
+ ## 当前定位
4
+
5
+ worktree 是 execution lane 的共享隔离层,不是 teammate 私有机制。
6
+
7
+ ## 当前作用
8
+
9
+ - 给 task-bound execution 提供独立目录
10
+ - 让并行 lane 不互相踩改动
11
+ - 把 task、execution、实际工作目录明确绑在一起
12
+
13
+ ## 当前关键实现
14
+
15
+ - `src/worktrees/store.ts`
16
+ - `src/execution/taskBinding.ts`
17
+ - `src/orchestrator/taskLifecycle.ts`
18
+
19
+ ## 当前正式关系
20
+
21
+ ### task
22
+
23
+ 回答:
24
+
25
+ - 做什么
26
+ - 依赖谁
27
+ - 当前是否完成
28
+
29
+ ### execution
30
+
31
+ 回答:
32
+
33
+ - 谁在执行
34
+ - 现在是 `queued/running/paused/completed/failed/aborted` 哪一种
35
+ - 结果是否已经正式 closeout
36
+
37
+ ### worktree
38
+
39
+ 回答:
40
+
41
+ - 在哪里做
42
+ - 这条目录车道是否还有效
43
+
44
+ ## 当前主路径
45
+
46
+ 1. lane 绑定到 `taskId`
47
+ 2. `prepareExecutionTaskContext` 统一处理 claim 与 worktree attach
48
+ 3. execution 在 worktree cwd 里运行
49
+ 4. execution closeout 后,task / worktree / result handoff 分别按正式状态收口
50
+
51
+ ## 当前约束
52
+
53
+ 1. worktree 绑定来自正式 task/execution 主路径,不来自某个 lane 的私有循环。
54
+ 2. removed worktree 不能继续被当成 active execution lane。
55
+ 3. teammate 与 subagent 的 task-bound agent execution 都可以绑定 worktree;不再保留 teammate 独占语义。