@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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jun133/athlete",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "A global terminal AI coding assistant.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"athlete",
|
|
@@ -47,6 +47,7 @@
|
|
|
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",
|
|
@@ -67,6 +68,7 @@
|
|
|
67
68
|
"xlsx": "^0.18.5"
|
|
68
69
|
},
|
|
69
70
|
"devDependencies": {
|
|
71
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
70
72
|
"@types/node": "^24.5.2",
|
|
71
73
|
"tsup": "^8.5.0",
|
|
72
74
|
"tsx": "^4.20.5",
|
|
@@ -34,20 +34,20 @@ if ((result.status ?? 1) !== 0) {
|
|
|
34
34
|
console.warn(message);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
function resolveInstallTarget(rawValue) {
|
|
38
|
-
switch (String(rawValue ?? "").trim().toLowerCase()) {
|
|
39
|
-
case "chrome":
|
|
40
|
-
return "chrome";
|
|
37
|
+
function resolveInstallTarget(rawValue) {
|
|
38
|
+
switch (String(rawValue ?? "").trim().toLowerCase()) {
|
|
39
|
+
case "chrome":
|
|
40
|
+
return "chrome";
|
|
41
41
|
case "firefox":
|
|
42
42
|
return "firefox";
|
|
43
43
|
case "webkit":
|
|
44
44
|
return "webkit";
|
|
45
|
-
case "msedge":
|
|
46
|
-
return "msedge";
|
|
47
|
-
default:
|
|
48
|
-
return "chromium";
|
|
49
|
-
}
|
|
50
|
-
}
|
|
45
|
+
case "msedge":
|
|
46
|
+
return "msedge";
|
|
47
|
+
default:
|
|
48
|
+
return "chromium";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
51
|
|
|
52
52
|
function resolvePlaywrightCliPath() {
|
|
53
53
|
const packageJsonPath = require.resolve("playwright/package.json");
|
package/spec/README.md
CHANGED
|
@@ -1,56 +1,64 @@
|
|
|
1
1
|
# Athlete SPEC
|
|
2
2
|
|
|
3
|
-
`spec/`
|
|
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
|
-
|
|
23
|
-
- 根目录 `README.md` 只保留用户入口和高层说明
|
|
24
|
-
- 根目录 `validation/` 只保留验证产物,不再承担规范文档职责
|
|
19
|
+
这里回答:
|
|
25
20
|
|
|
26
|
-
|
|
21
|
+
- 这个项目现在到底想成为什么
|
|
22
|
+
- 当前用户是谁
|
|
23
|
+
- 哪些原则是不能动的
|
|
24
|
+
- 哪些能力已经在范围内
|
|
25
|
+
- 为什么这个系统不是“一个单打独斗的聊天牛马”
|
|
27
26
|
|
|
28
|
-
|
|
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
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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,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 独占语义。
|