@te-river/opencode-team-mode 1.4.6 → 1.4.8
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 +101 -86
- package/README.zh-CN.md +84 -71
- package/dist/agents.d.ts +15 -9
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +467 -478
- package/dist/agents.js.map +1 -1
- package/dist/commands.d.ts +3 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +109 -107
- package/dist/commands.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Instead of one agent trying to do everything, you get:
|
|
|
24
24
|
| 🏗️ **Architect** | System designer | Design docs, module structure, API contracts |
|
|
25
25
|
| 💻 **Implementer** | Code writer | Building features, writing production code |
|
|
26
26
|
| 🔍 **Reviewer** | Dimension-focused auditor | Single-dimension review (completeness / correctness / impact) — the lead runs 3 in parallel |
|
|
27
|
-
| 🧪 **Tester** | Test engineer | Unit tests, integration tests, edge-case coverage,
|
|
27
|
+
| 🧪 **Tester** | Test engineer | Unit tests, integration tests, edge-case coverage, static verification (build / typecheck / lint / API tests) |
|
|
28
28
|
| 🔎 **Researcher** | Knowledge finder | Library evaluation, API docs, best practices |
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -99,7 +99,7 @@ After installing, add the plugin to your `opencode.jsonc`:
|
|
|
99
99
|
{
|
|
100
100
|
"$schema": "https://opencode.ai/config.json",
|
|
101
101
|
"plugin": [
|
|
102
|
-
"@te-river/opencode-team-mode@
|
|
102
|
+
"@te-river/opencode-team-mode@1.4.8"
|
|
103
103
|
]
|
|
104
104
|
}
|
|
105
105
|
```
|
|
@@ -124,7 +124,7 @@ To enable TeamMode in every project, add the plugin to your global config:
|
|
|
124
124
|
{
|
|
125
125
|
"$schema": "https://opencode.ai/config.json",
|
|
126
126
|
"plugin": [
|
|
127
|
-
"@te-river/opencode-team-mode@
|
|
127
|
+
"@te-river/opencode-team-mode@1.4.8"
|
|
128
128
|
]
|
|
129
129
|
}
|
|
130
130
|
```
|
|
@@ -187,43 +187,43 @@ types into a fresh chat:
|
|
|
187
187
|
> `src/legacy/`.
|
|
188
188
|
|
|
189
189
|
```text
|
|
190
|
-
team
|
|
191
|
-
|
|
190
|
+
team Route: product behavior change → implementer → tester → reviewer
|
|
191
|
+
(3 dispatches → approval gate applies)
|
|
192
192
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
summary above, full design on the board
|
|
193
|
+
Research: read README, src/app.ts, src/middleware/*
|
|
194
|
+
Blocking questions: none — 1 assumption listed below
|
|
196
195
|
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
PLAN
|
|
197
|
+
Goal: token-bucket limiter, 100 req/min/user, 429 + Retry-After
|
|
198
|
+
Scope: src/middleware/rateLimit.ts (new), src/app.ts (+3 lines)
|
|
199
|
+
Pipeline: implementer → tester → reviewer (correctness)
|
|
200
|
+
Assumption: in-memory bucket, not Redis — say the word to change
|
|
201
|
+
Boundary: src/legacy/** untouched
|
|
202
|
+
Approve to proceed?
|
|
199
203
|
|
|
200
|
-
|
|
201
|
-
⚠ 1 MAJOR — bucket refill does read-modify-write in two steps;
|
|
202
|
-
races under concurrent requests
|
|
203
|
-
→ converted to a fix task; dispatched to @implementer with the
|
|
204
|
-
finding text (the user was not asked to approve this step)
|
|
204
|
+
user approved, go
|
|
205
205
|
|
|
206
|
-
|
|
207
|
-
|
|
206
|
+
team ▸ @implementer — STATUS: done
|
|
207
|
+
CHANGES: src/middleware/rateLimit.ts (new) · src/app.ts (+3)
|
|
208
|
+
HANDOFF: bucket {tokens, lastRefill}; refill() is a single atomic pass
|
|
209
|
+
EVIDENCE: tsc clean (output above)
|
|
208
210
|
|
|
209
|
-
▸ @
|
|
210
|
-
|
|
211
|
+
▸ @tester — STATUS: done · VERDICT: pass (14/14)
|
|
212
|
+
FINDINGS: burst edge, window expiry, concurrent refill covered;
|
|
213
|
+
src/legacy/** byte-identical
|
|
214
|
+
EVIDENCE: vitest 14 passed
|
|
211
215
|
|
|
212
|
-
▸ @
|
|
213
|
-
|
|
214
|
-
src/legacy/** byte-identical (user boundary verified in tests)
|
|
216
|
+
▸ @reviewer — STATUS: done · VERDICT: approve (correctness)
|
|
217
|
+
FINDINGS: no Critical/Major; 1 Minor (log line noise) noted
|
|
215
218
|
|
|
216
219
|
team Done.
|
|
217
220
|
rate limiter shipped: rateLimit.ts (new) · app.ts (+3) · 14 tests green
|
|
218
|
-
review
|
|
219
|
-
assumption: in-memory only — say the word if you want Redis
|
|
220
|
-
src/legacy/ untouched
|
|
221
|
-
task board left in place — TTL sweep will reclaim it
|
|
221
|
+
review: approve · assumption: in-memory only · src/legacy/ untouched
|
|
222
222
|
```
|
|
223
223
|
|
|
224
|
-
The only message the user typed was the
|
|
225
|
-
|
|
226
|
-
|
|
224
|
+
The only message the user typed was the task and "approved, go". The
|
|
225
|
+
pipeline was a routing-table lookup, execution waited for plan approval,
|
|
226
|
+
and every handoff traveled as a structured skeleton — no file ceremony.
|
|
227
227
|
|
|
228
228
|
### Desktop-specific features
|
|
229
229
|
|
|
@@ -259,67 +259,82 @@ opencode-team-mode/
|
|
|
259
259
|
### How it works
|
|
260
260
|
|
|
261
261
|
1. OpenCode Desktop starts and loads `opencode.json(c)`.
|
|
262
|
-
2. It sees `"@te-river/opencode-team-mode@
|
|
262
|
+
2. It sees `"@te-river/opencode-team-mode@1.4.8"` in the `plugin` array and loads the npm package.
|
|
263
263
|
3. The loader calls the plugin's `server(input, options)`, which registers a `config` hook; the hook injects 6 agents and 6 commands into the merged config.
|
|
264
264
|
4. The plugin's `id: "team-mode"` is displayed as the plugin name in the Desktop UI.
|
|
265
265
|
5. Agents and commands are immediately available in the Desktop UI — no file copying needed. User-defined agents with the same name always win (the plugin never clobbers them).
|
|
266
266
|
|
|
267
267
|
---
|
|
268
268
|
|
|
269
|
-
## 🗂️
|
|
270
|
-
|
|
271
|
-
Sub-agents cannot message each other live (platform limitation), so TeamMode
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
-
|
|
286
|
-
(`…-r2.md`);
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
- **
|
|
322
|
-
|
|
269
|
+
## 🗂️ Coordination: structured handoffs first, files second (hybrid)
|
|
270
|
+
|
|
271
|
+
Sub-agents cannot message each other live (platform limitation), so TeamMode
|
|
272
|
+
coordinates them through a **structured reply skeleton**, with a file
|
|
273
|
+
blackboard reserved for oversized output:
|
|
274
|
+
|
|
275
|
+
- **Reply skeleton (primary channel):** every specialist's final reply starts
|
|
276
|
+
with `STATUS: / CHANGES: / FINDINGS: / EVIDENCE: / HANDOFF:` and stays ≤50
|
|
277
|
+
lines. Deliverables at that size travel inline — zero file I/O, nothing to
|
|
278
|
+
fall out of sync. The lead relays `HANDOFF` verbatim into the next
|
|
279
|
+
dispatch and machine-checks the skeleton (missing → one retry with it
|
|
280
|
+
inline, then downgrade and note the violation).
|
|
281
|
+
- **Board files (exception only):** when a full deliverable exceeds ~50 lines
|
|
282
|
+
(e.g. a complete architecture doc), the dispatch names ONE file:
|
|
283
|
+
`<repo>/.git/opencode-team/<session-key>/<task-slug>/NN-<role>-<topic>.md`
|
|
284
|
+
— inside `.git/`, so your working tree and commits are **never polluted**
|
|
285
|
+
(non-git workspaces fall back to the OS temp dir). Writes are frozen: a
|
|
286
|
+
revision is a new round-suffixed file (`…-r2.md`); session folders keep a
|
|
287
|
+
fresh conversation from touching a not-yet-swept board.
|
|
288
|
+
- **No MANIFEST.md:** the lead's state memory is its todo list.
|
|
289
|
+
- **Feedback loop:** Critical/Major findings and product bugs automatically
|
|
290
|
+
become tracked fix tasks until the deliverable converges (max 2 loops,
|
|
291
|
+
then escalate to you).
|
|
292
|
+
|
|
293
|
+
### Deterministic routing, approval gate & adaptive review (v1.4.7)
|
|
294
|
+
|
|
295
|
+
- **Routing table:** the lead picks a fixed pipeline row by task shape —
|
|
296
|
+
question → direct answer; docs-only → implementer; product behavior
|
|
297
|
+
change → implementer → tester → reviewer; multi-module feature →
|
|
298
|
+
architect → implementer → tester → reviewer(s); unknown external tech →
|
|
299
|
+
researcher first. Pipelines have fixed minimums: a product change routed
|
|
300
|
+
below 3 dispatches is a routing bug, and splitting one request into
|
|
301
|
+
sub-2-dispatch pieces to dodge the gate is a protocol violation.
|
|
302
|
+
- **Approval gate (count-based):** ≥2 planned dispatches → the lead
|
|
303
|
+
researches (reading the repo itself; a researcher dispatch only for
|
|
304
|
+
unknown external tech), presents a ≤30-line plan, and **waits for your
|
|
305
|
+
approval** before executing anything. 0-1 dispatches run with a 1-2 line
|
|
306
|
+
notice. A task that grows a second dispatch mid-run pauses for approval.
|
|
307
|
+
Blocking uncertainties are batched and asked immediately — never guessed,
|
|
308
|
+
never drip-fed.
|
|
309
|
+
- **Adaptive review:** default is ONE reviewer dispatch (correctness);
|
|
310
|
+
three parallel dimensions (completeness / correctness / impact) only for
|
|
311
|
+
high-risk profiles — auth/security surface, cross-module data contracts,
|
|
312
|
+
public APIs across ≥3 files.
|
|
313
|
+
- **Static verification:** testers verify via build, typecheck, static
|
|
314
|
+
analysis, and API/unit tests. Improvised browser automation (headless
|
|
315
|
+
screenshots, DOM stubs) is banned; user-visible frontend changes end with
|
|
316
|
+
`UI NOT VERIFIED: <what needs manual checking>` unless the project
|
|
317
|
+
already ships real browser-test tooling.
|
|
318
|
+
- **No-ceremony fast path:** a root cause the lead has already verified
|
|
319
|
+
(file:line evidence) goes straight to the implementer as a fix spec —
|
|
320
|
+
investigation dispatches serve unknowns, not ritual.
|
|
321
|
+
- **Brevity discipline:** route selection is a table lookup; user-visible
|
|
322
|
+
planning text stays ≤5 lines.
|
|
323
|
+
- **Evidence standard (kept):** "done / fixed / passed" claims need
|
|
324
|
+
verifiable evidence — command output, logs, diffs. Narratives are
|
|
325
|
+
progress notes, not proof.
|
|
326
|
+
- **Verbatim contracts (kept):** parallel implementers that must
|
|
327
|
+
interoperate get the exact data contract (endpoints, field names, types)
|
|
328
|
+
pasted verbatim into every affected dispatch.
|
|
329
|
+
- **Docs sync (CHANGELOG + AGENTS.md):** delivered changes append a
|
|
330
|
+
CHANGELOG.md entry when one exists, and update AGENTS.md when the change
|
|
331
|
+
alters what it records (build/test commands, conventions, structure,
|
|
332
|
+
agent instructions); either file is offered for creation when missing.
|
|
333
|
+
Reading is deduplicated: the lead reads the README itself (the host does
|
|
334
|
+
not inject it), uses the host-injected AGENTS.md/CLAUDE.md copy already
|
|
335
|
+
in context and opens those files only when genuinely absent — and
|
|
336
|
+
specialists never re-open these docs, since conventions arrive
|
|
337
|
+
distilled inside their dispatches.
|
|
323
338
|
|
|
324
339
|
### Triage — questions don't become code edits
|
|
325
340
|
|
|
@@ -351,7 +366,7 @@ Default is **5 days**. To choose your own, use the tuple plugin form in
|
|
|
351
366
|
{
|
|
352
367
|
"$schema": "https://opencode.ai/config.json",
|
|
353
368
|
"plugin": [
|
|
354
|
-
["@te-river/opencode-team-mode@
|
|
369
|
+
["@te-river/opencode-team-mode@1.4.8", { "ttlDays": 7 }]
|
|
355
370
|
]
|
|
356
371
|
}
|
|
357
372
|
```
|
|
@@ -375,7 +390,7 @@ team**):
|
|
|
375
390
|
```jsonc
|
|
376
391
|
{
|
|
377
392
|
"plugin": [
|
|
378
|
-
["@te-river/opencode-team-mode@
|
|
393
|
+
["@te-river/opencode-team-mode@1.4.8", { "defaultAgent": false }]
|
|
379
394
|
]
|
|
380
395
|
}
|
|
381
396
|
```
|
package/README.zh-CN.md
CHANGED
|
@@ -24,7 +24,7 @@ TeamMode 将 OpenCode 桌面版从一个单 Agent 编码助手,升级为**一
|
|
|
24
24
|
| 🏗️ **Architect** | 系统设计师 | 设计文档、模块结构、API 契约 |
|
|
25
25
|
| 💻 **Implementer** | 代码实现者 | 编写生产代码、实现功能 |
|
|
26
26
|
| 🔍 **Reviewer** | 单维审查员 | 单维度审查(完整性 / 正确性 / 影响面)——lead 三路并行后合并 |
|
|
27
|
-
| 🧪 **Tester** | 测试工程师 |
|
|
27
|
+
| 🧪 **Tester** | 测试工程师 | 单元测试、集成测试、边界覆盖、静态验证(构建 / 类型检查 / lint / API 测试) |
|
|
28
28
|
| 🔎 **Researcher** | 知识调研员 | 库评估、API 文档、最佳实践调研 |
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -99,7 +99,7 @@ npm link
|
|
|
99
99
|
{
|
|
100
100
|
"$schema": "https://opencode.ai/config.json",
|
|
101
101
|
"plugin": [
|
|
102
|
-
"@te-river/opencode-team-mode@
|
|
102
|
+
"@te-river/opencode-team-mode@1.4.8"
|
|
103
103
|
]
|
|
104
104
|
}
|
|
105
105
|
```
|
|
@@ -108,7 +108,7 @@ npm link
|
|
|
108
108
|
|
|
109
109
|
> 💡 **提示:** 修改 `opencode.json` 后,请**重启 OpenCode 桌面版**使更改生效。
|
|
110
110
|
|
|
111
|
-
> ⚠️ **模型选择很重要。**
|
|
111
|
+
> ⚠️ **模型选择很重要。** 工作流里的每一个判断——分诊、拆解、派单、
|
|
112
112
|
> 整合、审查/测试闭环裁决——都经过 **Team Lead**。这个位置上放弱模型,
|
|
113
113
|
> 专家再强也救不回整条流水线。如需自定义,还请给你的 `team` agent 钉上你能负担的最强
|
|
114
114
|
> 推理模型(配方见下方「自定义」节)。
|
|
@@ -122,7 +122,7 @@ npm link
|
|
|
122
122
|
{
|
|
123
123
|
"$schema": "https://opencode.ai/config.json",
|
|
124
124
|
"plugin": [
|
|
125
|
-
"@te-river/opencode-team-mode@
|
|
125
|
+
"@te-river/opencode-team-mode@1.4.8"
|
|
126
126
|
]
|
|
127
127
|
}
|
|
128
128
|
```
|
|
@@ -183,41 +183,42 @@ TeamMode 为 OpenCode 添加了六个斜杠命令,在聊天输入框中输入
|
|
|
183
183
|
> 超限返回 429。不要动 `src/legacy/` 下的任何东西。
|
|
184
184
|
|
|
185
185
|
```text
|
|
186
|
-
team
|
|
187
|
-
|
|
186
|
+
team 路由:产品行为变更 → implementer → tester → reviewer
|
|
187
|
+
(3 次派发 → 触发审批门)
|
|
188
188
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
聊天里只有摘要,设计全文在黑板上
|
|
189
|
+
调研:已读 README、src/app.ts、src/middleware/*
|
|
190
|
+
阻塞性问题:无 —— 1 条假设列在下方
|
|
192
191
|
|
|
193
|
-
|
|
194
|
-
|
|
192
|
+
计划
|
|
193
|
+
目标:令牌桶限流,100 请求/分/用户,429 + Retry-After
|
|
194
|
+
范围:src/middleware/rateLimit.ts(新增)、src/app.ts(+3 行)
|
|
195
|
+
流水线:implementer → tester → reviewer(correctness)
|
|
196
|
+
假设:内存桶而非 Redis —— 要改说一声
|
|
197
|
+
边界:src/legacy/** 不动
|
|
198
|
+
批准后开工?
|
|
195
199
|
|
|
196
|
-
|
|
197
|
-
⚠ 1 个 MAJOR — 桶回充分两步读-改-写,并发下有竞态
|
|
198
|
-
→ 已自动转为修复任务,发现原文随任务书派给 @implementer
|
|
199
|
-
(这一步没有要求用户拍板)
|
|
200
|
+
用户 批准,开始
|
|
200
201
|
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
team ▸ @implementer — STATUS: done
|
|
203
|
+
CHANGES: src/middleware/rateLimit.ts(新增)· src/app.ts(+3)
|
|
204
|
+
HANDOFF: bucket {tokens, lastRefill};refill() 单次原子完成
|
|
205
|
+
EVIDENCE: tsc 无错误(输出见上)
|
|
203
206
|
|
|
204
|
-
▸ @
|
|
205
|
-
|
|
207
|
+
▸ @tester — STATUS: done · VERDICT: pass(14/14)
|
|
208
|
+
FINDINGS: 覆盖突发边界、窗口过期、并发回充;
|
|
209
|
+
src/legacy/** 逐字节未变
|
|
210
|
+
EVIDENCE: vitest 14 passed
|
|
206
211
|
|
|
207
|
-
▸ @
|
|
208
|
-
|
|
209
|
-
src/legacy/** 逐字节未变(用户边界写进了测试断言)
|
|
212
|
+
▸ @reviewer — STATUS: done · VERDICT: approve(correctness)
|
|
213
|
+
FINDINGS: 无 Critical/Major;1 条 Minor(日志噪音)已记录
|
|
210
214
|
|
|
211
215
|
team 完成。
|
|
212
216
|
限流器已交付:rateLimit.ts(新增)· app.ts(+3)· 14 测试全绿
|
|
213
|
-
|
|
214
|
-
假设:仅内存存储——要接 Redis 说一声
|
|
215
|
-
src/legacy/ 未动
|
|
216
|
-
任务黑板留在原地,TTL 到期自动回收
|
|
217
|
+
审查:通过 · 假设:仅内存存储 · src/legacy/ 未动
|
|
217
218
|
```
|
|
218
219
|
|
|
219
|
-
|
|
220
|
-
|
|
220
|
+
用户只输入了任务本身和"批准,开始"。流水线是路由表查表的结果;执行在
|
|
221
|
+
计划获批前一步不动;每次交接都是结构化骨架——零文件仪式。
|
|
221
222
|
|
|
222
223
|
### 桌面版专属特性
|
|
223
224
|
|
|
@@ -253,52 +254,64 @@ opencode-team-mode/
|
|
|
253
254
|
### 工作原理
|
|
254
255
|
|
|
255
256
|
1. OpenCode 桌面版启动,加载 `opencode.json(c)`
|
|
256
|
-
2. 检测到 `plugin` 数组中的 `"@te-river/opencode-team-mode@
|
|
257
|
+
2. 检测到 `plugin` 数组中的 `"@te-river/opencode-team-mode@1.4.8"`,加载 npm 包
|
|
257
258
|
3. 加载器调用插件的 `server(input, options)`,注册 `config` hook;hook 向合并后的配置注入 6 个 Agent 和 6 个命令
|
|
258
259
|
4. 插件的 `id: "team-mode"` 作为插件名显示在桌面版 UI
|
|
259
260
|
5. Agent 和命令立即在桌面版 UI 中可用 —— 无需复制任何文件;同名 Agent 以用户自定义优先(插件绝不覆盖)
|
|
260
261
|
|
|
261
262
|
---
|
|
262
263
|
|
|
263
|
-
## 🗂️
|
|
264
|
-
|
|
265
|
-
子代理之间无法实时互发消息(平台限制),TeamMode
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
264
|
+
## 🗂️ 协作机制:结构化交接优先,文件其次(混合制)
|
|
265
|
+
|
|
266
|
+
子代理之间无法实时互发消息(平台限制),TeamMode 通过**结构化回复骨架**协调它们,
|
|
267
|
+
文件黑板只保留给超大产出:
|
|
268
|
+
|
|
269
|
+
- **回复骨架(主通道)**:每个专家的最终回复以
|
|
270
|
+
`STATUS: / CHANGES: / FINDINGS: / EVIDENCE: / HANDOFF:` 开头,全文 ≤50 行。
|
|
271
|
+
这个尺寸的产出直接内联传递——零文件 I/O,没有"文件没写上"这种故障面。
|
|
272
|
+
Lead 把 `HANDOFF` 原文转贴进下一次派单,并对骨架做机器校验
|
|
273
|
+
(缺失 → 带 skeleton 原文重试一次 → 仍违规则降级记入报告)。
|
|
274
|
+
- **黑板文件(仅例外)**:完整产出确实超过 ~50 行时(如完整架构设计文档),
|
|
275
|
+
派单点名唯一文件:
|
|
276
|
+
`<repo>/.git/opencode-team/<session-key>/<task-slug>/NN-<role>-<topic>.md`
|
|
277
|
+
——位于 `.git/` 内,**绝不污染**工作区和 commit(非 git 工作区回退系统临时目录)。
|
|
278
|
+
写入即冻结:修订 = 新的轮次后缀文件(`…-r2.md`);会话目录层让新对话
|
|
279
|
+
不会撞上尚未清扫的旧黑板。
|
|
280
|
+
- **没有 MANIFEST.md**:lead 的状态记忆就是它的 todo list。
|
|
281
|
+
- **反馈闭环**:Critical/Major 发现和产品 bug 自动转化为跟踪的修复任务,
|
|
282
|
+
直到交付物收敛(最多 2 轮,之后升级给用户)。
|
|
283
|
+
|
|
284
|
+
### 确定性路由、审批门与自适应评审(v1.4.7)
|
|
285
|
+
|
|
286
|
+
- **路由表**:lead 按任务形状查固定流水线行——提问 → 直接回答;纯文档 →
|
|
287
|
+
implementer;产品行为变更 → implementer → tester → reviewer;多模块/跨接口
|
|
288
|
+
功能 → architect → implementer → tester → reviewer(s);未知外部技术 →
|
|
289
|
+
researcher 前置。流水线有固定下限:产品变更路由到少于 3 次派发即是路由 bug;
|
|
290
|
+
把一个请求拆成多个 <2 派发的子任务以规避审批门 = 协议违规。
|
|
291
|
+
- **审批门(按计数触发)**:预计派发 ≥2 → lead 先调研(亲自读仓库;仅未知外部
|
|
292
|
+
技术才派 researcher),呈交 ≤30 行计划,然后**等待你的批准**才执行任何东西。
|
|
293
|
+
0-1 次派发的小任务以 1-2 行通报直接开工。执行中发现需要第 2 次派发 →
|
|
294
|
+
暂停等批准。阻塞性不确定**立即批量问一次**——不猜测、不挤牙膏。
|
|
295
|
+
- **自适应评审**:默认 1 个 reviewer 派单(correctness 维度);仅高风险画像
|
|
296
|
+
——鉴权/安全面、跨模块数据契约、≥3 文件的公共 API 变更——才升级为
|
|
297
|
+
3 维并行(完整性 / 正确性 / 影响面)。
|
|
298
|
+
- **静态验证**:tester 通过构建、类型检查、静态分析、API/单元测试验证。
|
|
299
|
+
禁止即兴发明浏览器自动化(headless 截图、DOM stub);用户可见前端改动
|
|
300
|
+
以 `UI NOT VERIFIED: <待人工检查项>` 如实收尾,除非项目本身已带真实
|
|
301
|
+
浏览器测试设施。
|
|
302
|
+
- **无仪式捷径**:lead 已亲自验证的根因(file:line 证据)直接变成修复规格
|
|
303
|
+
派给 implementer——调查性派单服务于未知,不服务于仪式感。
|
|
304
|
+
- **简明纪律**:路由选择是查表;用户可见的计划性文字 ≤5 行。
|
|
305
|
+
- **证据标准(保留)**:"完成 / 修复 / 通过"的声明必须附可验证证据——命令
|
|
306
|
+
输出、日志、diff。纯叙述只是进度说明,不是证明。
|
|
307
|
+
- **逐字契约(保留)**:需要互通的并行实现代理,其数据契约(端点、字段名、
|
|
308
|
+
类型)逐字贴进每个相关派单——契约错配是集成 bug 之首。
|
|
309
|
+
- **文档同步(CHANGELOG + AGENTS.md)**:交付的改动在 CHANGELOG.md 存在时按
|
|
310
|
+
Keep a Changelog 风格追加条目;当改动会影响 AGENTS.md 所记录的内容
|
|
311
|
+
(构建/测试命令、约定、项目结构、agent 指引)时同步更新它;任一文件缺失
|
|
312
|
+
时提议代建。阅读去重:README 由 lead 亲自阅读(宿主不会注入);
|
|
313
|
+
AGENTS.md/CLAUDE.md 若宿主已注入则直接使用上下文中的副本——仅在确实缺失时
|
|
314
|
+
才打开文件;专家不会自己去重读这些文档——约定由 lead 蒸馏进派单。
|
|
302
315
|
|
|
303
316
|
### Triage —— 提问不会变成代码修改
|
|
304
317
|
|
|
@@ -325,7 +338,7 @@ Team Lead 不再删除任务目录 —— 跑完的黑板原地留给你回看
|
|
|
325
338
|
{
|
|
326
339
|
"$schema": "https://opencode.ai/config.json",
|
|
327
340
|
"plugin": [
|
|
328
|
-
["@te-river/opencode-team-mode@
|
|
341
|
+
["@te-river/opencode-team-mode@1.4.8", { "ttlDays": 7 }]
|
|
329
342
|
]
|
|
330
343
|
}
|
|
331
344
|
```
|
|
@@ -344,7 +357,7 @@ TeamMode 默认**把 Team 设为你的默认代理**——新会话直接由团
|
|
|
344
357
|
```jsonc
|
|
345
358
|
{
|
|
346
359
|
"plugin": [
|
|
347
|
-
["@te-river/opencode-team-mode@
|
|
360
|
+
["@te-river/opencode-team-mode@1.4.8", { "defaultAgent": false }]
|
|
348
361
|
]
|
|
349
362
|
}
|
|
350
363
|
```
|
|
@@ -361,7 +374,7 @@ Team-as-default 出厂行为。若你在 v1.4.4 期间加过 `{ "defaultAgent":
|
|
|
361
374
|
|
|
362
375
|
### Team Lead 的模型最关键
|
|
363
376
|
|
|
364
|
-
Lead
|
|
377
|
+
Lead 是编排大脑:它给每条消息分类、按路由表查流水线、写每份派单、裁决
|
|
365
378
|
reviewer/tester 的发现、合成最终交付。这里的质量问题会**沿流水线放大**——
|
|
366
379
|
平庸的 Lead 拆错任务、给专家的指令含糊、放走劣质产出;没有任何专家能
|
|
367
380
|
救回一份从一开始就派错的工单。
|
package/dist/agents.d.ts
CHANGED
|
@@ -6,15 +6,21 @@
|
|
|
6
6
|
* Users see them in the agent picker of OpenCode Desktop and can invoke
|
|
7
7
|
* them with `@agent-name` or via the `/team-*` commands.
|
|
8
8
|
*
|
|
9
|
-
* Prompt design principles (v1.
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
*
|
|
17
|
-
* -
|
|
9
|
+
* Prompt design principles (v1.4.7 — "subtraction" release):
|
|
10
|
+
* - Deterministic routing table replaces free-form scheduling deliberation
|
|
11
|
+
* (fixes the lead's "inner monologue" — route selection is a lookup).
|
|
12
|
+
* - Structured reply skeleton (STATUS/CHANGES/FINDINGS/EVIDENCE/HANDOFF)
|
|
13
|
+
* is the primary inter-agent channel; the file blackboard is demoted to
|
|
14
|
+
* an oversized-deliverable exception (>~50 lines). MANIFEST.md is gone.
|
|
15
|
+
* - Approval gate is a mechanical dispatch count (>=3 -> plan + wait);
|
|
16
|
+
* blocking uncertainties are batched and asked immediately.
|
|
17
|
+
* - Verified root causes go straight to the implementer — no ceremonial
|
|
18
|
+
* research dispatches.
|
|
19
|
+
* - Verification defaults to static checks; improvised browser automation
|
|
20
|
+
* is explicitly banned.
|
|
21
|
+
* - Adaptive review: one reviewer by default, three dimensions only for
|
|
22
|
+
* high-risk profiles.
|
|
23
|
+
* - All agents run at temperature 0.2 for format discipline.
|
|
18
24
|
*/
|
|
19
25
|
import type { AgentConfig } from "./types.js";
|
|
20
26
|
export declare const agents: Record<string, AgentConfig>;
|
package/dist/agents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AA0iB7C,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAO9C,CAAA"}
|