@jun133/athlete 0.0.5 → 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 +151 -98
- package/dist/cli.js +24213 -20514
- package/dist/cli.js.map +1 -1
- package/package.json +3 -1
- package/scripts/postinstall-playwright.mjs +10 -10
- 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 +5 -5
- 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 +5 -5
- 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 +12 -12
- 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/{principles/P18- → /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 -37
- package/spec/{principles/P20- → /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 -48
- package/spec/{principles/P21- → /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 -46
- package/spec/{principles/P22- → /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 -40
- package/spec/{principles/P23- → /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 -38
- package/spec/{principles/P24- → /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 -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/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 -115
- package/spec/architecture//347/212/266/346/200/201/344/270/216/347/234/237/347/233/270/346/272/220.md +0 -120
- package/spec/architecture//350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +0 -139
- 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 -176
- package/spec/interfaces/InteractionShell.md +0 -93
- 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 -77
- package/spec/modules/interactive-terminal.md +0 -139
- package/spec/modules/lightweight-context-runtime.md +0 -80
- package/spec/modules/provider-adapter.md +0 -45
- package/spec/modules/runtime-metrics.md +0 -162
- package/spec/modules/runtime-rules.md +0 -65
- package/spec/modules/session-resume-compact.md +0 -55
- package/spec/modules/task-state.md +0 -41
- package/spec/modules/telegram-private-chat.md +0 -291
- package/spec/modules/tool-registry.md +0 -137
- 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 -141
- package/spec/overview/v0/350/214/203/345/233/264.md +0 -55
- package/spec/overview//344/272/247/345/223/201/345/256/232/344/271/211.md +0 -61
- 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/README.md +0 -47
- 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 -108
- /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
package/README.md
CHANGED
|
@@ -11,134 +11,187 @@
|
|
|
11
11
|
<img alt="runtime stats" src="https://img.shields.io/badge/runtime-stats-f59e0b?style=for-the-badge">
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
14
|
+
一个终端优先的 Agent Harness。
|
|
15
|
+
|
|
16
|
+
一个单纯的 LLM,往往擅长回答问题;一个加上 harness 的 LLM,才开始真正接住任务。它不只是“说下一句”,而是能在复杂任务里持续往前跑,知道什么时候该读文件、什么时候该调用工具、什么时候该拆任务、什么时候该把状态记下来,出了错以后还能接着做。✨
|
|
17
|
+
|
|
18
|
+
Athlete 想做的,就是这层把模型变成“可执行系统”的底盘。它不只是在终端里包一层聊天壳,而是把状态、工具、恢复、协作和通道接成一条完整链路,让任务可以推进、暂停、恢复、续跑,并把过程留下来。🛠️
|
|
19
|
+
|
|
20
|
+
Athlete 当前的核心不是“陪聊”,而是“持续推进任务”:
|
|
21
|
+
|
|
22
|
+
- 一个耐跑的主 Agent
|
|
23
|
+
- 一个会拆任务、派任务、等任务、合流任务的总指挥层
|
|
24
|
+
- 一套统一的控制面、宿主边界和扩展口
|
|
25
|
+
|
|
26
|
+
它已经不该被理解成一个“自己闷头干活的单兵 Agent”,而应该被理解成:
|
|
27
|
+
|
|
28
|
+
- 一个能长期耐跑的主 Agent
|
|
29
|
+
- 一个会组织任务、拆解任务、调度任务的总指挥
|
|
30
|
+
- 一个把工具、技能、宿主和控制面统一起来的平台内核
|
|
31
|
+
|
|
32
|
+
主文档现在只看 `spec/`:
|
|
33
|
+
|
|
34
|
+
- 给人审阅的:`spec/用户审阅/`
|
|
35
|
+
- 给实现和测试用的:`spec/技术实现/`
|
|
36
|
+
|
|
37
|
+
## 一个完整例子
|
|
38
|
+
|
|
39
|
+
比如用户在 Telegram 私聊里丢来一句话,再附上几份材料:
|
|
40
|
+
|
|
41
|
+
> “帮我做一个《Helldivers 2》最新新闻情报包。
|
|
42
|
+
> 去网上找最新公开新闻,再结合我刚发给你的 PDF、截图、docx、pptx、表格和一个公开链接,最后给我:
|
|
43
|
+
> 1. 一个网页摘要
|
|
44
|
+
> 2. 一份 markdown 报告
|
|
45
|
+
> 3. 一份 docx 成品
|
|
46
|
+
> 4. 把最终文件回传给我。
|
|
47
|
+
> 如果任务太大,你自己拆分和调度。”
|
|
48
|
+
|
|
49
|
+
这一个例子,基本就能把 Athlete 当前大部分能力串起来。🌟
|
|
50
|
+
|
|
51
|
+
### 你从用户视角会看到什么 👀
|
|
52
|
+
|
|
53
|
+
你看到的不是“建议你这样做”,而是一条真的在推进的任务链:
|
|
54
|
+
|
|
55
|
+
1. 它先接住多种输入。
|
|
56
|
+
不管你是从 CLI 直接发任务,还是从 Telegram / 微信私聊发消息、发图片、发文件、发语音,它都不是当成一段普通聊天,而是当成一个真实任务的入口。
|
|
57
|
+
2. 它先理解任务全貌。
|
|
58
|
+
它会判断:这个目标不只是“找新闻”,还包含网页信息搜集、附件解析、报告生成、文件交付和最终验证,所以不能闷头一步做到底。
|
|
59
|
+
3. 它会把不同材料接进来。
|
|
60
|
+
PDF、截图、docx、pptx、表格、公开 URL,都不会被一刀切当成“普通文件”处理,而是按各自最合适的读取链路走。
|
|
61
|
+
4. 它会真的去外部世界看。
|
|
62
|
+
它会去搜新闻、打开页面、检查标题、时间、链接和内容,而不是假装“我大概知道最新新闻是什么”。
|
|
63
|
+
5. 它会真的开始干活。
|
|
64
|
+
它会写报告、改文件、做网页、补脚本、整理输出,而不是只给你一个“你可以这样做”的方案。
|
|
65
|
+
6. 它会自己组织任务。
|
|
66
|
+
一部分工作可以自己做,一部分可以放后台慢慢跑,一部分可以拆给别的执行者并行推进。
|
|
67
|
+
7. 它会继续验证。
|
|
68
|
+
它不会一写完就说“完成了”,而是继续检查网页、命令、HTTP 探针、输出文件和最终交付是否真的可用。
|
|
69
|
+
8. 它会把结果交回给你。
|
|
70
|
+
如果你在 Telegram / 微信里,它会把文本结果分块可见地发出来,并在需要时把最终文件直接发回去。
|
|
71
|
+
9. 如果你中途要停,它也不会炸掉。
|
|
72
|
+
`/stop` 会停当前任务,但宿主服务不会退出;你下一条消息还可以继续接着干。🫶
|
|
73
|
+
|
|
74
|
+
### 系统在机器层 / 开发视角到底做了什么 🤖
|
|
75
|
+
|
|
76
|
+
这个例子背后,不是 prompt 在“努力自觉”,而是机器层在强约束:
|
|
77
|
+
|
|
78
|
+
1. 统一宿主入口。
|
|
79
|
+
同一个任务,不管来自 CLI、Telegram 还是微信,都会先经过统一宿主边界进入核心,而不是每个宿主自己偷偷拼一套 runtime。
|
|
80
|
+
2. lead 先做总指挥预处理。
|
|
81
|
+
真正调用模型前,系统会先分析 objective、复杂度、现有任务进度,判断这一步应该自己做、拆任务、派工、等待还是合流。
|
|
82
|
+
3. 控制面落正式真相。
|
|
83
|
+
任务、队友、后台任务、协议请求、worktree 绑定这些状态,都落在统一控制面里,不靠聊天记录临时记忆。
|
|
84
|
+
4. session 是任务现场,不是普通聊天记录。
|
|
85
|
+
session 里会带着 checkpoint、verificationState、acceptanceState、runtimeStats,所以系统中断以后不是从零开始,而是能从现场继续。
|
|
86
|
+
5. 文件和材料按能力链路走。
|
|
87
|
+
PDF 会走 `mineru_pdf_read`,图片走 `mineru_image_read`,docx 走 `mineru_doc_read`,pptx 走 `mineru_ppt_read`,表格走 `read_spreadsheet`,公开链接走 `download_url`,不是所有输入都粗暴塞给一个读文件工具。
|
|
88
|
+
6. 网页和文件能力都是真实动作。
|
|
89
|
+
网页部分依赖浏览器能力和网页研究链路;本地部分依赖 `read_file`、`write_file`、`edit_file`、`apply_patch`、`search_files`、`run_shell` 等真实工具,而不是让模型“脑补执行”。
|
|
90
|
+
7. 慢任务和并行任务有正式执行位。
|
|
91
|
+
慢操作可以进入 `background_run`;适合拆分的工作可以交给 teammate;并行改动需要 worktree 隔离,而不是所有执行者挤在同一个目录里乱改。
|
|
92
|
+
8. finalize 受机器状态约束。
|
|
93
|
+
一旦文件改动、工具执行或 closeout 条件触发,verification 和 acceptance 会进入正式状态机;没验过、没收口、没满足条件,就不能假装完成。
|
|
94
|
+
9. 文件交付不是旁路。
|
|
95
|
+
Telegram / 微信的 send file 能力是通过宿主边界注入的正式 extra tool,不是宿主自己绕开核心偷偷发文件。
|
|
96
|
+
10. 通道自己的现实语义也被保留。
|
|
97
|
+
Telegram 会保留它的 delivery、typing 和 `/stop` 语义;微信会保留 `context_token`、delivery、附件输入和 `/stop` 语义,但这些都不能反过来定义核心真相。
|
|
98
|
+
11. 所有这些能力最后还能重新回到同一条主路径。
|
|
99
|
+
所以 Athlete 不是“碰巧能做很多事”,而是“在机器层被组织成了同一个可续跑、可调度、可验证的系统”。🧭
|
|
100
|
+
|
|
101
|
+
所以这个例子展示的,不只是“Agent 会不会写代码”,而是整个项目真正的能力全景:
|
|
102
|
+
|
|
103
|
+
- 网页研究与浏览器动作
|
|
104
|
+
- 文档、图片、PPT、表格、URL 输入链路
|
|
105
|
+
- 本地文件读写与补丁修改
|
|
106
|
+
- shell、后台任务和 HTTP 验证
|
|
107
|
+
- lead 调度、teammate、background、worktree
|
|
108
|
+
- session、checkpoint、verification、acceptance、runtime stats
|
|
109
|
+
- CLI、Telegram、微信三种宿主入口
|
|
110
|
+
- 文本结果与文件结果的最终交付
|
|
111
|
+
|
|
112
|
+
## 已实现功能
|
|
79
113
|
|
|
80
114
|
| 能力 | 接口 / 实现 | 状态 |
|
|
81
115
|
| --- | --- | --- |
|
|
82
116
|
| 浏览器自动化 | Playwright MCP `@playwright/mcp` | ✅ |
|
|
83
|
-
| PDF 读取 |
|
|
84
|
-
| 图片读取 |
|
|
85
|
-
| Word 读取 |
|
|
86
|
-
| Word 写入 / 编辑 | `write_docx` / `edit_docx` | ✅ |
|
|
87
|
-
| PPT / PPTX 读取 |
|
|
88
|
-
| 表格读取 | `read_spreadsheet`,支持 `xlsx` / `xls` / `csv` / `tsv` / `ods` | ✅ |
|
|
89
|
-
| 远程文件获取 | `download_url
|
|
90
|
-
| HTTP 探针 | `http_probe
|
|
91
|
-
| 本地文件读写 / 补丁 |
|
|
117
|
+
| PDF 读取 | `mineru_pdf_read` + `mineru-pdf-reading` | ✅ |
|
|
118
|
+
| 图片读取 | `mineru_image_read` + `mineru-image-reading` | ✅ |
|
|
119
|
+
| Word 读取 | `mineru_doc_read` + `mineru-doc-reading`,`.docx` 可回退到 `read_docx` | ✅ |
|
|
120
|
+
| Word 写入 / 编辑 | `write_docx` / `edit_docx` | ✅ |
|
|
121
|
+
| PPT / PPTX 读取 | `mineru_ppt_read` + `mineru-ppt-reading` | ✅ |
|
|
122
|
+
| 表格读取 | `read_spreadsheet`,支持 `xlsx` / `xls` / `csv` / `tsv` / `ods` | ✅ |
|
|
123
|
+
| 远程文件获取 | `download_url` | ✅ |
|
|
124
|
+
| HTTP 探针 | `http_probe` | ✅ |
|
|
125
|
+
| 本地文件读写 / 补丁 | `read_file` / `write_file` / `edit_file` / `apply_patch` / `search_files` | ✅ |
|
|
92
126
|
| Shell 与后台任务 | `run_shell` / `background_run` / `background_check` | ✅ |
|
|
93
127
|
| 任务板与协作队友 | `task` / `spawn_teammate` / `read_inbox` / `send_message` | ✅ |
|
|
94
128
|
| 隔离工作区 | Git worktree:`worktree_*` | ✅ |
|
|
95
|
-
| Telegram 私聊接入 |
|
|
96
|
-
|
|
|
129
|
+
| Telegram 私聊接入 | `athlete telegram serve` | ✅ |
|
|
130
|
+
| 微信私聊接入 | `athlete weixin login` / `athlete weixin serve` / `athlete weixin logout` | ✅ |
|
|
131
|
+
|
|
132
|
+
## 使用说明
|
|
97
133
|
|
|
98
|
-
|
|
134
|
+
- 文档读取能力依赖 `MINERU_API_TOKEN`。
|
|
135
|
+
- Telegram 需要 `ATHLETE_TELEGRAM_TOKEN` 和 `ATHLETE_TELEGRAM_ALLOWED_USER_IDS`。
|
|
136
|
+
- Telegram 私聊支持 `/stop`,可以停止当前任务但不关闭服务。
|
|
137
|
+
- Telegram 支持 file 输入与 file 回传;终端 logs 会显示服务启动、投递和失败信息。
|
|
138
|
+
- 微信需要先执行 `athlete weixin login`,再配置 `ATHLETE_WEIXIN_ALLOWED_USER_IDS`。
|
|
139
|
+
- 微信私聊支持 `/stop`,会维护 `context_token`,并接住 image / video / file / voice 输入与回传。
|
|
140
|
+
- 微信当前是 private only,不支持 group 群聊。
|
|
99
141
|
|
|
100
|
-
|
|
142
|
+
## 开发指令
|
|
101
143
|
|
|
102
144
|
| 命令 | 含义 |
|
|
103
145
|
| --- | --- |
|
|
104
146
|
| `npm.cmd install` | 安装依赖 |
|
|
105
147
|
| `npm.cmd run build` | 构建 CLI 到 `dist/cli.js` |
|
|
106
148
|
| `npm.cmd run check` | 执行 `typecheck + build` |
|
|
107
|
-
| `npm.cmd test` |
|
|
108
|
-
| `
|
|
109
|
-
| `node dist
|
|
110
|
-
| `node dist
|
|
111
|
-
| `node dist
|
|
112
|
-
| `node dist
|
|
113
|
-
|
|
114
|
-
|
|
149
|
+
| `npm.cmd test` | 执行完整测试 |
|
|
150
|
+
| `npm.cmd run test:build` | 单独构建测试产物 |
|
|
151
|
+
| `node dist\\cli.js` | 用构建产物启动 CLI |
|
|
152
|
+
| `node dist\\cli.js "帮我看看这个项目"` | 执行一次 one-shot 任务 |
|
|
153
|
+
| `node dist\\cli.js telegram serve` | 源码环境启动 Telegram 服务 |
|
|
154
|
+
| `node dist\\cli.js weixin login` | 源码环境执行微信扫码登录 |
|
|
155
|
+
| `node dist\\cli.js weixin serve` | 源码环境启动微信服务 |
|
|
156
|
+
| `node dist\\cli.js weixin logout` | 源码环境清理微信登录态 |
|
|
115
157
|
|
|
116
|
-
|
|
158
|
+
## 用户指令
|
|
117
159
|
|
|
118
160
|
| 命令 | 含义 |
|
|
119
161
|
| --- | --- |
|
|
120
162
|
| `npm install -g @jun133/athlete` | 全局安装 CLI |
|
|
121
|
-
| `athlete init` |
|
|
163
|
+
| `athlete init` | 初始化当前项目的 `.athlete/` |
|
|
122
164
|
| `athlete` | 进入交互模式 |
|
|
123
|
-
| `athlete "帮我看看这个项目"` |
|
|
124
|
-
| `athlete run "帮我看看这个项目"` |
|
|
125
|
-
| `athlete resume [sessionId]` |
|
|
165
|
+
| `athlete "帮我看看这个项目"` | 执行一次任务 |
|
|
166
|
+
| `athlete run "帮我看看这个项目"` | 显式执行一次任务 |
|
|
167
|
+
| `athlete resume [sessionId]` | 恢复最近一次或指定会话 |
|
|
126
168
|
| `athlete sessions -n 20` | 查看最近会话 |
|
|
127
169
|
| `athlete diff [path]` | 查看当前项目 Git diff |
|
|
128
170
|
| `athlete changes [changeId]` | 查看变更记录 |
|
|
129
171
|
| `athlete undo [changeId]` | 回滚最近一次或指定变更 |
|
|
130
172
|
| `athlete config show` | 查看当前配置 |
|
|
173
|
+
| `athlete config path` | 查看配置文件路径 |
|
|
131
174
|
| `athlete doctor` | 检查本地配置和 API 连通性 |
|
|
132
175
|
| `athlete telegram serve` | 启动 Telegram 私聊服务 |
|
|
133
|
-
| `athlete weixin login` |
|
|
134
|
-
| `athlete weixin serve` |
|
|
135
|
-
| `athlete weixin logout` |
|
|
176
|
+
| `athlete weixin login` | 微信扫码登录并保存登录态 |
|
|
177
|
+
| `athlete weixin serve` | 启动微信私聊服务 |
|
|
178
|
+
| `athlete weixin logout` | 清理微信登录态 |
|
|
136
179
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
Weixin 当前只支持 private 私聊,不支持 group 群聊;服务会维护每个会话的 `context_token`,并接住 image、video、file、voice 等私聊附件输入与回传链路。
|
|
180
|
+
## CI / 验证指令
|
|
140
181
|
|
|
141
|
-
|
|
182
|
+
| 命令 | 含义 |
|
|
183
|
+
| --- | --- |
|
|
184
|
+
| `npm.cmd run check` | CI 最基础检查 |
|
|
185
|
+
| `npm.cmd test` | 完整 CI 主入口 |
|
|
186
|
+
| `npm.cmd run test:build` | 只编译测试 |
|
|
187
|
+
| `node --test .test-build/tests/**/*.test.js` | 直接运行编译后的测试 |
|
|
188
|
+
| `npm.cmd run verify:skills-api` | 校验 skills API |
|
|
189
|
+
| `npm.cmd run verify:runtime-context-api` | 校验 runtime context API |
|
|
190
|
+
| `npm.cmd run verify:runtime-checkpoint-api` | 校验 runtime checkpoint API |
|
|
191
|
+
| `npm.cmd run verify:runtime-observability-api` | 校验 runtime observability API |
|
|
192
|
+
| `npm.cmd run verify:mineru-documents-api` | 校验 MinerU 文档链路 |
|
|
193
|
+
|
|
194
|
+
## 发布指令
|
|
142
195
|
|
|
143
196
|
| 命令 | 含义 |
|
|
144
197
|
| --- | --- |
|