@te-river/opencode-team-mode 1.5.6 → 1.5.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 +354 -528
- package/README.zh-CN.md +346 -480
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +44 -26
- package/dist/agents.js.map +1 -1
- package/dist/approval-gate.d.ts +5 -0
- package/dist/approval-gate.d.ts.map +1 -1
- package/dist/approval-gate.js +29 -0
- package/dist/approval-gate.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/prompts/lead.d.ts +1 -1
- package/dist/prompts/lead.d.ts.map +1 -1
- package/dist/prompts/lead.js +7 -4
- package/dist/prompts/lead.js.map +1 -1
- package/dist/prompts/shared.d.ts +1 -1
- package/dist/prompts/shared.d.ts.map +1 -1
- package/dist/prompts/shared.js +15 -13
- package/dist/prompts/shared.js.map +1 -1
- package/dist/prompts/specialists.d.ts +2 -2
- package/dist/prompts/specialists.d.ts.map +1 -1
- package/dist/prompts/specialists.js +31 -5
- package/dist/prompts/specialists.js.map +1 -1
- package/dist/tm/args-schema.d.ts +6 -0
- package/dist/tm/args-schema.d.ts.map +1 -1
- package/dist/tm/args-schema.js +23 -1
- package/dist/tm/args-schema.js.map +1 -1
- package/dist/tm/browser.d.ts.map +1 -1
- package/dist/tm/browser.js +35 -6
- package/dist/tm/browser.js.map +1 -1
- package/dist/tm/config.d.ts +16 -5
- package/dist/tm/config.d.ts.map +1 -1
- package/dist/tm/config.js +23 -6
- package/dist/tm/config.js.map +1 -1
- package/dist/tm/index.d.ts +11 -4
- package/dist/tm/index.d.ts.map +1 -1
- package/dist/tm/index.js +20 -6
- package/dist/tm/index.js.map +1 -1
- package/dist/tm/memory.d.ts +8 -2
- package/dist/tm/memory.d.ts.map +1 -1
- package/dist/tm/memory.js +31 -21
- package/dist/tm/memory.js.map +1 -1
- package/dist/tm/perm-ask.d.ts +37 -0
- package/dist/tm/perm-ask.d.ts.map +1 -0
- package/dist/tm/perm-ask.js +41 -0
- package/dist/tm/perm-ask.js.map +1 -0
- package/dist/tm/pipelines.d.ts.map +1 -1
- package/dist/tm/pipelines.js +7 -0
- package/dist/tm/pipelines.js.map +1 -1
- package/dist/tm/preview.d.ts.map +1 -1
- package/dist/tm/preview.js +32 -5
- package/dist/tm/preview.js.map +1 -1
- package/dist/tm/ptc/gate.d.ts.map +1 -1
- package/dist/tm/ptc/gate.js +4 -1
- package/dist/tm/ptc/gate.js.map +1 -1
- package/dist/tm/ptc/summary.d.ts.map +1 -1
- package/dist/tm/ptc/summary.js +5 -0
- package/dist/tm/ptc/summary.js.map +1 -1
- package/dist/tm/ptc/tool.d.ts.map +1 -1
- package/dist/tm/ptc/tool.js +2 -1
- package/dist/tm/ptc/tool.js.map +1 -1
- package/dist/tm/search.d.ts +58 -0
- package/dist/tm/search.d.ts.map +1 -0
- package/dist/tm/search.js +253 -0
- package/dist/tm/search.js.map +1 -0
- package/dist/tm/shell-bridge.d.ts +1 -1
- package/dist/tm/shell-bridge.d.ts.map +1 -1
- package/dist/tm/shell-bridge.js +52 -6
- package/dist/tm/shell-bridge.js.map +1 -1
- package/dist/tm/tools.js +1 -1
- package/dist/tm/webfetch.d.ts +36 -8
- package/dist/tm/webfetch.d.ts.map +1 -1
- package/dist/tm/webfetch.js +144 -23
- package/dist/tm/webfetch.js.map +1 -1
- package/docs/installation.md +219 -0
- package/package.json +3 -2
package/README.zh-CN.md
CHANGED
|
@@ -6,70 +6,107 @@
|
|
|
6
6
|
[](https://www.npmjs.com/package/@te-river/opencode-team-mode)
|
|
7
7
|
[](./LICENSE)
|
|
8
8
|
|
|
9
|
-
> 🤝
|
|
9
|
+
> 🤝 **你的 OpenCode 刚刚招了一个团队。**
|
|
10
10
|
>
|
|
11
|
-
>
|
|
11
|
+
> 六个专职 agent——主脑(Lead)、架构师、实现者、评审、测试、研究员——配上受治理的工具、结构化交接和"先出计划等你批准"的门禁。一个插件,零配置文件要拷。
|
|
12
|
+
|
|
13
|
+
> 💡 **建议在中或大型项目下使用该模式。** 治理层(审批门禁、上下文卸载、工具白名单)在代码库有真实体量时是资产,在小脚本和一次性问答上则主要是开销。把团队用在配得上它的地方。
|
|
12
14
|
|
|
13
15
|
---
|
|
14
16
|
|
|
15
|
-
##
|
|
17
|
+
## 太长不看
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
> **懒人路径:** 把下面这段话粘给任意编码 agent,让它替你装:
|
|
20
|
+
>
|
|
21
|
+
> ```text
|
|
22
|
+
> 安装 OpenCode 插件 @te-river/opencode-team-mode:按照
|
|
23
|
+
> https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/docs/installation.md
|
|
24
|
+
> 的指引完成安装,并按该指南里的检查项验证。
|
|
25
|
+
> ```
|
|
26
|
+
>
|
|
27
|
+
> **装好后只需要记住一条命令:** `/team-run <任务>` —— Team Lead 会先出计划、
|
|
28
|
+
> 等你批准、然后调度整个团队干活。
|
|
18
29
|
|
|
19
|
-
|
|
30
|
+
剩下的都是细节。想看的时候按图索骥:
|
|
20
31
|
|
|
21
|
-
|
|
22
|
-
|---|---|---|
|
|
23
|
-
| 🎯 **Team Lead** | 调度者 | 需要规划 + 多步执行的复杂任务 |
|
|
24
|
-
| 🏗️ **Architect** | 系统设计师 | 设计文档、模块结构、API 契约 |
|
|
25
|
-
| 💻 **Implementer** | 代码实现者 | 编写生产代码、实现功能 |
|
|
26
|
-
| 🔍 **Reviewer** | 单维审查员 | 单维度审查(完整性 / 正确性 / 影响面)——默认 1 路;仅高风险变更升级为 3 路并行 |
|
|
27
|
-
| 🧪 **Tester** | 测试工程师 | 单元测试、集成测试、边界覆盖、静态验证(构建 / 类型检查 / lint / API 测试) |
|
|
28
|
-
| 🔎 **Researcher** | 知识调研员 | 本地仓库调研优先(代码、配置、已安装依赖、随包文档);联网经用户 MCP 工具或受治理的 `tm_webfetch`——与 Team Lead 并列的两个网络角色之一 |
|
|
32
|
+
**[为什么](#-为什么是-teammode) · [团队阵容](#-团队阵容) · [安装](#-安装) · [使用](#-使用) · [工具与安全](#-受治理的工具与安全) · [搜索](#-真正好用的网络搜索中国可用) · [配置](#️-配置) · [运作方式](#️-团队怎么运作) · [FAQ](#-faq) · [卸载](#️-卸载)**
|
|
29
33
|
|
|
30
34
|
---
|
|
31
35
|
|
|
32
|
-
##
|
|
36
|
+
## 🤔 为什么是 TeamMode?
|
|
37
|
+
|
|
38
|
+
单个 agent 包打一切的下场你多半见过:上下文窗口塞满 5000 行的文件转储,
|
|
39
|
+
一个脚本能干的事跟 bash 磨二十个回合,子 agent 悄悄读你的 `.env`,以及
|
|
40
|
+
所谓的"联网调研"——其实全靠模型编。
|
|
41
|
+
|
|
42
|
+
TeamMode 对每一个的回应:
|
|
43
|
+
|
|
44
|
+
| 痛点 | TeamMode 的回答 |
|
|
45
|
+
|---|---|
|
|
46
|
+
| 🔥 **上下文爆炸** | 所有受治理工具的输出超过 2000 token 就卸载到本地 run 存储,换成 80 token 的预览 + HMAC 句柄。agent 需要什么再分页取什么——窗口永远淹不了。 |
|
|
47
|
+
| 🐌 **回合开销** | `tm_ptc_run`:agent 写**一个程序**,单回合内发起 N 次受治理调用。运行期间零 LLM 回合。 |
|
|
48
|
+
| 🕳️ **静默副作用** | R6/R2 审批门禁:环境变量读取和危险操作走 OpenCode 官方确认弹窗,10 分钟没人理自动拒绝。插件从不代替你批准——它只会拒绝。 |
|
|
49
|
+
| 🌫️ **幻觉式调研** | 联网是双角色的授权 + 白名单受治理工具链。抓不到的事实就报告为缺口——绝不编造。 |
|
|
50
|
+
|
|
51
|
+
底下还有流程纪律:确定性路由表、≥2 次派工先出 ≤30 行计划等你批、agent
|
|
52
|
+
之间用 `STATUS/CHANGES/FINDINGS/EVIDENCE/HANDOFF` 结构化交接、以及静态
|
|
53
|
+
验证(构建 / 类型检查 / 测试)说了算,不靠感觉。
|
|
54
|
+
|
|
55
|
+
这套纪律也正是"**建议中大型项目使用**"的原因:两三个文件的小脚本,团队
|
|
56
|
+
本来就没多少可治理的东西。
|
|
57
|
+
|
|
58
|
+
---
|
|
33
59
|
|
|
34
|
-
|
|
60
|
+
## 👥 团队阵容
|
|
35
61
|
|
|
36
|
-
|
|
62
|
+
| Agent | 角色 | 什么时候用 |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| 🎯 **Team Lead** (`@team`) | 编排者 | 需要规划 + 多步执行的复杂任务 |
|
|
65
|
+
| 🏗️ **Architect** | 系统设计 | 设计文档、模块结构、API 契约 |
|
|
66
|
+
| 💻 **Implementer** | 写代码 | 做功能、写生产代码 |
|
|
67
|
+
| 🔍 **Reviewer** | 维度审计 | 默认单维度评审;高风险变更才三维度并行 |
|
|
68
|
+
| 🧪 **Tester** | 测试工程师 | 带真边界条件的测试;静态验证(构建 / 类型检查 / lint);经 `tm_browser` 的治理化 UI 验证 |
|
|
69
|
+
| 🔎 **Researcher** | 找资料 | 本地仓库优先,然后才是网络——两个联网角色之一(另一个是 Lead) |
|
|
37
70
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
| macOS (Apple Silicon) | `brew install --cask opencode-desktop` |
|
|
41
|
-
| macOS (Intel) | `brew install --cask opencode-desktop` |
|
|
42
|
-
| Windows | `scoop bucket add extras && scoop install extras/opencode-desktop` |
|
|
43
|
-
| Linux | 从 [opencode.ai/download](https://opencode.ai/download) 下载 |
|
|
71
|
+
开箱即用时 **Team 就是你的默认 agent**——新会话直接进编排者(可在
|
|
72
|
+
[配置](#️-配置)里关掉)。
|
|
44
73
|
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
# 一键脚本(全平台)
|
|
48
|
-
curl -fsSL https://opencode.ai/install | bash
|
|
74
|
+
---
|
|
49
75
|
|
|
50
|
-
|
|
51
|
-
npm install -g opencode-ai
|
|
52
|
-
```
|
|
76
|
+
## 📦 安装
|
|
53
77
|
|
|
54
|
-
|
|
78
|
+
### 方式一:让 agent 替你装(推荐)
|
|
55
79
|
|
|
56
|
-
|
|
80
|
+
把这段话粘给任意编码 agent——它会改配置、提醒你重启、并完成验证:
|
|
57
81
|
|
|
58
|
-
|
|
82
|
+
```text
|
|
83
|
+
安装 OpenCode 插件 @te-river/opencode-team-mode:按照
|
|
84
|
+
https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/docs/installation.md
|
|
85
|
+
的指引完成安装,并按该指南里的检查项验证。
|
|
86
|
+
(若该 URL 无法访问——中国大陆网络常见——改用镜像前缀重试:
|
|
87
|
+
https://ghproxy.net/ + 原路径。)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
(该指南就是完整的手动流程——配置文件位置、插件条目、重启、验证、更新、
|
|
91
|
+
卸载。你的 agent 会忠实执行,不需要其他任何东西。)
|
|
92
|
+
|
|
93
|
+
### 方式二:一行脚本
|
|
59
94
|
|
|
60
95
|
macOS / Linux(bash):
|
|
96
|
+
|
|
61
97
|
```bash
|
|
62
98
|
curl -fsSL https://ghproxy.net/https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/scripts/install.sh | bash
|
|
63
99
|
```
|
|
64
100
|
|
|
65
101
|
Windows(PowerShell):
|
|
102
|
+
|
|
66
103
|
```powershell
|
|
67
104
|
irm https://ghproxy.net/https://raw.githubusercontent.com/Te-River/Opencode-TeamMode/main/scripts/install.ps1 | iex
|
|
68
105
|
```
|
|
69
106
|
|
|
70
|
-
|
|
107
|
+
### 方式三:手动
|
|
71
108
|
|
|
72
|
-
|
|
109
|
+
把插件加进 `opencode.jsonc`:
|
|
73
110
|
|
|
74
111
|
```jsonc
|
|
75
112
|
{
|
|
@@ -80,457 +117,221 @@ irm https://ghproxy.net/https://raw.githubusercontent.com/Te-River/Opencode-Team
|
|
|
80
117
|
}
|
|
81
118
|
```
|
|
82
119
|
|
|
83
|
-
OpenCode
|
|
120
|
+
OpenCode 下次启动时装好。
|
|
84
121
|
|
|
85
|
-
|
|
122
|
+
### ⚠️ 现在读一遍,以后省一小时
|
|
86
123
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
## ⚙️ 配置
|
|
124
|
+
- **改完配置要重启。** 碰了 `opencode.json` 之后,完全退出再启动 OpenCode(桌面版从托盘退出,不是只关窗口)。
|
|
125
|
+
- **插件更新:重跑安装脚本即可。** 安装器是幂等的——重跑会补齐配置(已存在则跳过)、清掉过期插件缓存、并重解析 npm 安装的副本。之所以需要这一步:OpenCode 按 spec 字符串缓存插件,新版本发布后不会重新解析 `@latest`(上游已知问题)。想手动操作的话:
|
|
90
126
|
|
|
91
|
-
|
|
127
|
+
| 系统 | 缓存位置 |
|
|
128
|
+
|---|---|
|
|
129
|
+
| macOS / Linux | `rm -rf ~/.cache/opencode/packages/@te_river+opencode-team-mode@latest` |
|
|
130
|
+
| Windows | `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\opencode\cache\packages\@te_river+opencode-team-mode@latest"` |
|
|
92
131
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
> 专家再强也救不回整条流水线。如需自定义,还请给你的 `team` agent 钉上你能负担的最强
|
|
96
|
-
> 推理模型(配方见下方「自定义」节)。
|
|
132
|
+
如果插件还被 npm 装进了 `~/.config/opencode`,package-lock 会钉住版本——在那里再跑一次 `npm install @te-river/opencode-team-mode@latest`。完整配方(含 agent 更新提示词)见[安装指南·更新](./docs/installation.md)。
|
|
133
|
+
- **前置条件:** [OpenCode](https://opencode.ai)(桌面版或 CLI)+ Node ≥ 18。
|
|
97
134
|
|
|
98
|
-
###
|
|
135
|
+
### 验证
|
|
99
136
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
```jsonc
|
|
103
|
-
// ~/.config/opencode/opencode.jsonc
|
|
104
|
-
{
|
|
105
|
-
"$schema": "https://opencode.ai/config.json",
|
|
106
|
-
"plugin": [
|
|
107
|
-
"@te-river/opencode-team-mode@latest"
|
|
108
|
-
]
|
|
109
|
-
}
|
|
110
|
-
```
|
|
137
|
+
重启后打开 agent 选择器,看到 **team、architect、implementer、reviewer、
|
|
138
|
+
tester、researcher** 就齐了——团队已就位。
|
|
111
139
|
|
|
112
140
|
---
|
|
113
141
|
|
|
114
|
-
## 📖
|
|
142
|
+
## 📖 使用
|
|
115
143
|
|
|
116
144
|
### 斜杠命令
|
|
117
145
|
|
|
118
|
-
TeamMode 为 OpenCode 添加了六个斜杠命令,在聊天输入框中输入:
|
|
119
|
-
|
|
120
146
|
| 命令 | Agent | 说明 |
|
|
121
147
|
|---|---|---|
|
|
122
|
-
| `/team-plan <任务>` | Architect |
|
|
123
|
-
| `/team-implement <任务>` | Implementer |
|
|
124
|
-
| `/team-review [范围]` | Reviewer |
|
|
125
|
-
| `/team-test [范围]` | Tester |
|
|
126
|
-
| `/team-research <主题>` | Researcher |
|
|
127
|
-
| `/team-run <任务>` | Team Lead |
|
|
128
|
-
|
|
129
|
-
#### 示例工作流
|
|
130
|
-
|
|
131
|
-
```bash
|
|
132
|
-
# 1. 规划功能
|
|
133
|
-
/team-plan 添加基于 OAuth2 和 JWT 的用户认证
|
|
134
|
-
|
|
135
|
-
# 2. 审查计划后,开始实现
|
|
136
|
-
/team-implement 按计划实现认证模块
|
|
148
|
+
| `/team-plan <任务>` | Architect | 带架构、文件清单、任务拆解的实施计划 |
|
|
149
|
+
| `/team-implement <任务>` | Implementer | 为功能或任务写生产代码 |
|
|
150
|
+
| `/team-review [范围]` | Reviewer | 审计 bug、安全问题、质量隐患 |
|
|
151
|
+
| `/team-test [范围]` | Tester | 带边界条件的全面测试 |
|
|
152
|
+
| `/team-research <主题>` | Researcher | 本地仓库优先;网络走受治理工具 |
|
|
153
|
+
| `/team-run <任务>` | Team Lead | **完整流程**——计划 → 批准 → 编排 → 验证 |
|
|
137
154
|
|
|
138
|
-
|
|
139
|
-
|
|
155
|
+
也可以直接 `@` 提及:`@team`、`@architect`、`@implementer`、`@reviewer`、
|
|
156
|
+
`@tester`、`@researcher`。
|
|
140
157
|
|
|
141
|
-
|
|
142
|
-
/team-test src/auth/
|
|
143
|
-
|
|
144
|
-
# 或者让 Team Lead 全程调度:
|
|
145
|
-
/team-run 添加基于 OAuth2 和 JWT 的用户认证
|
|
146
|
-
```
|
|
158
|
+
### 一次运行长什么样
|
|
147
159
|
|
|
148
|
-
|
|
160
|
+
Team 默认就是默认 agent,所以你只管在全新会话里打字:
|
|
149
161
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
- `@team` — 调度复杂任务
|
|
153
|
-
- `@architect` — 设计系统或模块
|
|
154
|
-
- `@implementer` — 编写代码
|
|
155
|
-
- `@reviewer` — 审查代码质量
|
|
156
|
-
- `@tester` — 编写测试
|
|
157
|
-
- `@researcher` — 调研主题
|
|
158
|
-
|
|
159
|
-
### 演示
|
|
160
|
-
|
|
161
|
-
以下是一段会话实录的还原。Team 出厂即默认代理(退出方法见下方配置),
|
|
162
|
-
用户开新会话直接输入:
|
|
163
|
-
|
|
164
|
-
> **用户:** 给我们的 Express API 加令牌桶限流——每用户每分钟 100 请求,
|
|
165
|
-
> 超限返回 429。不要动 `src/legacy/` 下的任何东西。
|
|
162
|
+
> **你:** 给我们的 Express API 加令牌桶限流——每用户每分钟 100 次,超了返回 429。别碰 `src/legacy/` 底下任何东西。
|
|
166
163
|
|
|
167
164
|
```text
|
|
168
165
|
team 路由:产品行为变更 → implementer → tester → reviewer
|
|
169
|
-
(3
|
|
170
|
-
|
|
171
|
-
调研:已读 README、src/app.ts、src/middleware/*
|
|
172
|
-
阻塞性问题:无 —— 1 条假设列在下方
|
|
166
|
+
(3 次派工 → 触发审批门禁)
|
|
173
167
|
|
|
174
168
|
计划
|
|
175
|
-
目标:令牌桶限流,100
|
|
169
|
+
目标:令牌桶限流,100 req/min/user,429 + Retry-After
|
|
176
170
|
范围:src/middleware/rateLimit.ts(新增)、src/app.ts(+3 行)
|
|
177
|
-
流水线:implementer → tester → reviewer
|
|
178
|
-
|
|
179
|
-
边界:src/legacy/**
|
|
171
|
+
流水线:implementer → tester → reviewer(正确性)
|
|
172
|
+
假设:内存桶,不上 Redis——要改就说
|
|
173
|
+
边界:src/legacy/** 不碰
|
|
180
174
|
批准后开工?
|
|
181
175
|
|
|
182
|
-
|
|
176
|
+
你 批准,干
|
|
183
177
|
|
|
184
178
|
team ▸ @implementer — STATUS: done
|
|
185
|
-
CHANGES: src/middleware/rateLimit.ts
|
|
186
|
-
|
|
187
|
-
EVIDENCE: tsc 无错误(输出见上)
|
|
179
|
+
CHANGES: src/middleware/rateLimit.ts (new) · src/app.ts (+3)
|
|
180
|
+
EVIDENCE: tsc 干净
|
|
188
181
|
|
|
189
|
-
▸ @tester — STATUS: done · VERDICT: pass
|
|
190
|
-
FINDINGS:
|
|
191
|
-
src/legacy/**
|
|
192
|
-
EVIDENCE: vitest 14 passed
|
|
182
|
+
▸ @tester — STATUS: done · VERDICT: pass (14/14)
|
|
183
|
+
FINDINGS: 突发边沿、窗口过期、并发补充已覆盖;
|
|
184
|
+
src/legacy/** 逐字节未动
|
|
193
185
|
|
|
194
|
-
▸ @reviewer — STATUS: done · VERDICT: approve
|
|
195
|
-
FINDINGS: 无 Critical/Major;1 条 Minor(日志噪音)已记录
|
|
186
|
+
▸ @reviewer — STATUS: done · VERDICT: approve(正确性)
|
|
196
187
|
|
|
197
|
-
team 完成。
|
|
198
|
-
|
|
199
|
-
审查:通过 · 假设:仅内存存储 · src/legacy/ 未动
|
|
188
|
+
team 完成。rateLimit.ts (new) · app.ts (+3) · 14 测试全绿
|
|
189
|
+
评审:approve · 假设:仅内存 · src/legacy/ 未动
|
|
200
190
|
```
|
|
201
191
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
### 桌面版专属特性
|
|
206
|
-
|
|
207
|
-
在 **OpenCode 桌面版** 中,你还能获得额外的 UX 体验:
|
|
208
|
-
|
|
209
|
-
- 🎨 **Agent 颜色标识** — 每个 Agent 在聊天 UI 中有独立颜色,便于识别
|
|
210
|
-
- 📋 **Agent 选择器** — 点击 Agent 下拉菜单,可视化切换团队 Agent
|
|
211
|
-
- 🔀 **并行子任务** — Team Lead 可同时调度多个子 Agent,结果在并行面板中展示
|
|
212
|
-
- 📊 **会话历史** — 所有团队交互都保存在桌面版侧边栏,可搜索回溯
|
|
192
|
+
你输入了任务和四个字。计划是查路由表,执行等你的批准,agent 之间的交接
|
|
193
|
+
全部走结构化骨架——没有文件仪式,没有靠猜。
|
|
213
194
|
|
|
214
195
|
---
|
|
215
196
|
|
|
216
|
-
## 🧰
|
|
197
|
+
## 🧰 受治理的工具与安全
|
|
217
198
|
|
|
218
|
-
TeamMode
|
|
219
|
-
token
|
|
220
|
-
HMAC
|
|
221
|
-
联网能力在 v1.5.1–v1.5.6 间陆续交付,历史见 [CHANGELOG.md](./CHANGELOG.md)。
|
|
199
|
+
TeamMode 加的每个工具都跑在**同一条治理管线**下:超过 `TM_OFFLOAD_THRESHOLD`
|
|
200
|
+
token 的输出永不进入上下文窗口——卸载到 run 存储,换成内容感知预览 +
|
|
201
|
+
HMAC 句柄,agent 真需要 payload 时用 `tm_fetch` 分页取。
|
|
222
202
|
|
|
223
|
-
| 工具 |
|
|
203
|
+
| 工具 | 功能 | 角色 |
|
|
224
204
|
|---|---|---|
|
|
225
|
-
| `tm_read` / `tm_grep` / `tm_bash` / `tm_fetch` |
|
|
226
|
-
| `tm_memory` |
|
|
227
|
-
| `
|
|
228
|
-
| `
|
|
229
|
-
| `
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
>
|
|
233
|
-
>
|
|
234
|
-
>
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
205
|
+
| `tm_read` / `tm_grep` / `tm_bash` / `tm_fetch` | 受治理的文件读 / 正则搜索 / 只读 shell(白名单)/ 句柄分页 | 全部六个 agent |
|
|
206
|
+
| `tm_memory` | 项目 + 全局记忆库(Markdown + frontmatter):add / search / list / forget | 全部六个 agent |
|
|
207
|
+
| `tm_ptc_run` | 批量编排:一个程序、N 次受治理调用、零 LLM 回合 | 全部六个 agent |
|
|
208
|
+
| `tm_search` | 多引擎网络搜索,返回提取去重后的命中列表 | Lead + Researcher |
|
|
209
|
+
| `tm_webfetch` | 白名单页面的单次受治理 GET(搜索页自动提取) | Lead + Researcher |
|
|
210
|
+
| `tm_browser` | 交互式浏览器会话(headful CDP):open / navigate / read / screenshot / close | Lead + Researcher + Tester(仅 UI 验证) |
|
|
211
|
+
|
|
212
|
+
> **固定工具优先级阶梯(每个任务都适用):① TeamMode 受治理工具(`tm_*`)
|
|
213
|
+
> → ② 用户 MCP/插件工具 → ③ 模型自己的推理。** 它同时是回退链:某个受治理
|
|
214
|
+
> 工具报错(这台机器没浏览器、主机被拦),agent 会说明情况降到下一级,
|
|
215
|
+
> 而不是躺平。
|
|
216
|
+
|
|
217
|
+
所有受治理工具都**支持并行**:宿主可以把一批 `tm_search` / `tm_webfetch` /
|
|
218
|
+
`tm_fetch` 调用并发执行——每次调用拿到自己的 step id 和自己的 payload,
|
|
219
|
+
互不串扰(并行测试套件钉死了这一点)。
|
|
239
220
|
|
|
240
221
|
### 上下文治理:卸载、句柄、预览
|
|
241
222
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
确实需要全文时,用 HMAC 签名、限本 run、带有效期的句柄经 `tm_fetch`
|
|
249
|
-
分段取回。`tm_bash` 仅放行只读命令白名单,失败以结构化错误返回。
|
|
250
|
-
所有 Agent 都被要求把每次查询优先路由到这些工具——先扫描自己的工具面、
|
|
251
|
-
规划具体调用,再把口语化/缩写/别名称呼展开为规范名、两种写法都查——
|
|
252
|
-
而不是凭记忆作答或伪装被移除工具的输出。
|
|
253
|
-
|
|
254
|
-
### 项目记忆(tm_memory)
|
|
255
|
-
|
|
256
|
-
**项目记忆(`tm_memory`)——全部 Agent 可用。** 跨会话持久的项目事实
|
|
257
|
-
(构建命令、环境怪癖、架构决策、长期有效的用户约定)以带 frontmatter 的
|
|
258
|
-
Markdown 文件存放在同一个 git 感知存储里
|
|
259
|
-
(`<repo>/.git/opencode-team/memories/<项目slug>/<分类>/`)——人类可直接
|
|
260
|
-
编辑,绝不进你的工作树。动作:`add` / `search`(确定性关键词评分,取前
|
|
261
|
-
5)/ `list` / `forget`;单条内容上限 4000 字符——任务状态归 todo list,
|
|
262
|
-
超长文档归黑板文件。所有 Agent 都被要求:在凭空假设项目约定之前先
|
|
263
|
-
search,踩过坑后把结论 add 给下一次会话。
|
|
264
|
-
|
|
265
|
-
### 联网访问(tm_browser + tm_webfetch)——仅网络角色
|
|
266
|
-
|
|
267
|
-
1. **受治理联网工具。** `tm_browser`——交互式浏览器会话,经 CDP 管道协议
|
|
268
|
-
驱动**你本机的 Chromium 系浏览器**(Windows 优先探测 Edge)有头运行:
|
|
269
|
-
open → navigate → read(页面正文,与 tm_read 同阈值治理)→ screenshot
|
|
270
|
-
(PNG 落 run store,进上下文的只有路径)→ close。隔离临时配置(绝不碰
|
|
271
|
-
你的真实配置);**域名白名单在网络层逐请求强制**(CDP
|
|
272
|
-
`Fetch.requestPaused`——白名单外主机直接 `BlockedByClient`)。无显示器
|
|
273
|
-
的 Linux 主机自动转无头;`TM_BROWSER_HEADLESS` 可强制,`TM_BROWSER_PATH`
|
|
274
|
-
可指定可执行文件。`tm_webfetch`——单个白名单页面的受治理 GET。两者与
|
|
275
|
-
所有 tm_* 工具走同一套治理(阈值卸载 + 内容感知预览 + `tm_fetch`
|
|
276
|
-
句柄),网页永远冲不爆上下文。
|
|
277
|
-
2. **用户 MCP/插件工具。** 用户配置的 MCP 服务器提供的浏览器自动化、搜索、
|
|
278
|
-
抓取类工具,作为受治理工具覆盖不到时的回退,白名单不干预。
|
|
279
|
-
3. 其余四个角色(architect / implementer / reviewer / tester)**没有**
|
|
280
|
-
网络授权——联网问题按缺口上报,绝不伪装结果。内置 webfetch/websearch
|
|
281
|
-
工具保持移除;远程 `.env` 类 URL 拒绝(R6 红线)。
|
|
282
|
-
|
|
283
|
-
白名单预置主机(两个联网工具共用):`mobile.moegirl.org.cn`(词条)、
|
|
284
|
-
`search.bilibili.com`、`cn.bing.com`、`www.baidu.com`(搜索 URL 模板);
|
|
285
|
-
通过 `TM_WEBFETCH_ALLOWED_DOMAINS` 扩展(`"*"` 放开全部主机)。
|
|
286
|
-
|
|
287
|
-
白名单预置主机(两个联网工具共用):`mobile.moegirl.org.cn`(词条)、
|
|
288
|
-
`search.bilibili.com`、`cn.bing.com`、`www.baidu.com`(搜索 URL 模板);
|
|
289
|
-
通过 `TM_WEBFETCH_ALLOWED_DOMAINS` 扩展(`"*"` 放开全部主机)。
|
|
290
|
-
|
|
291
|
-
### 安全:R6 + R2 审批门
|
|
292
|
-
|
|
293
|
-
**R6 环境变量保护(现已升级为审批门控)。** TeamMode 激活时,模型无法
|
|
294
|
-
静默读取环境变量。env 导出命令(`printenv`、`env`、`Get-ChildItem env:`
|
|
295
|
-
等)与环境文件(`.env`、shell rc 文件)会走 OpenCode **官方确认弹窗**:
|
|
296
|
-
你会在桌面收到一次原生确认,超过 `TM_ASK_TIMEOUT_MIN`(默认 10 分钟)
|
|
297
|
-
无人响应即**自动拒绝**——插件超时只会拒绝,绝不为模型自我放行。通配符
|
|
298
|
-
表达不了的形态(命令里内嵌的 `$VAR` / `${VAR}` / `$env:`、命令替换、
|
|
299
|
-
子 shell/转义写法)以及 `tm_*` 包装通道仍维持**代码级硬拦**(没有弹窗
|
|
300
|
-
可钻)。tm_* 包装工具同样过这套检查(不给包装层留后门)。审计日志只记
|
|
301
|
-
工具名 + 模式类别 + 裁决事件(`ask` / `allowed-once` / `allowed-always` /
|
|
302
|
-
`rejected` / `timeout-rejected` / `degraded`)——绝不记录命令文本、路径、
|
|
303
|
-
变量名或值。
|
|
223
|
+
大的工具输出是上下文成本的主要来源——每一步都要重发整个窗口。所以超过
|
|
224
|
+
`TM_OFFLOAD_THRESHOLD` 的结果写进本地 run 存储(`<repo>/.git/opencode-team/`,
|
|
225
|
+
永不污染工作树),换成带内容感知预览的句柄:JSON 键 / CSV 表头+形状 /
|
|
226
|
+
日志 ERROR×N 统计 / 代码签名 / 二进制元数据,硬顶 80 token。agent 真需要
|
|
227
|
+
payload 时用 `tm_fetch`(HMAC 签名、run 域、带过期)分页读。`tm_bash`
|
|
228
|
+
只放行只读命令(白名单),失败以结构化错误返回,不糊原始转储。
|
|
304
229
|
|
|
305
|
-
|
|
306
|
-
`rmdir`)、git 发布(`git push`/`git commit`)、网络(`curl`/`wget`/
|
|
307
|
-
`Invoke-WebRequest`/`Invoke-RestMethod`)、包安装与发布(`npm install`/
|
|
308
|
-
`npm publish`/`pip install`/`winget`/`choco`)、进程/系统(`taskkill`/
|
|
309
|
-
`Stop-Process`/`kill`/`shutdown`/`format`)、权限(`chmod`/`takeown`/
|
|
310
|
-
`icacls`)——都不再静默放行,而是弹同一个官方确认框,超时未响应即自动
|
|
311
|
-
拒绝。日常验证栈(`npm test`、`tsc`、`git status`/`diff`)**不在**门控
|
|
312
|
-
之列,团队协作照常无打扰运行。
|
|
313
|
-
|
|
314
|
-
> ⚠️ **批准弹窗时请选 once(仅此一次),不要选 always。** 真实宿主实测:
|
|
315
|
-
> always 记录的泛化规则远比当次命令宽——对 `Get-ChildItem env:PATH` 选
|
|
316
|
-
> always 会记下 `Get-ChildItem *`,此后所有 `Get-ChildItem` 都不再弹窗。
|
|
317
|
-
> 只有 once 能让每次危险操作继续单独过人手。
|
|
318
|
-
> (如果确实对 env 弹窗选了 always,TeamMode 会把它收敛为**当前会话**级;
|
|
319
|
-
> 且 env 文件读取(如 `cat .env`)无论如何保持硬拦——它们从无弹窗兜底,
|
|
320
|
-
> 任何 always 都不曾为其授权。)
|
|
321
|
-
|
|
322
|
-
> 延后是**按会话**生效的:只有运行 TeamMode 注入角色的会话(或已弹过这类
|
|
323
|
-
> 确认框的会话)里的 env 读取才会被放行给弹窗;其他会话(如原生
|
|
324
|
-
> `build`/`plan`)里守护仍然直接硬拦——那里根本没有弹窗兜底。同一会话中,
|
|
325
|
-
> 一条路由到非注入角色的用户消息会**撤销**该会话的放行资格(按回合的
|
|
326
|
-
> agent 信号来自 message.updated;宿主传给 tool.execute.before 的入参经实测
|
|
327
|
-
> 不含 agent 字段)。宿主对复合命令(`a; b`)按段评估、单次弹窗批准整条;
|
|
328
|
-
> 任一子段是 env 读取时守护整条拦截。
|
|
329
|
-
|
|
330
|
-
> 权限协议已在真实 `opencode serve` 宿主(1.18.29)上经 SSE 事件捕获实测
|
|
331
|
-
> 核验;桌面弹窗的渲染本身仍需在真实 Desktop 会话里目视确认一次。非交互
|
|
332
|
-
> `opencode run` 下,无人应答的 `ask` 会被立即自动拒绝(没有人类可弹)。
|
|
333
|
-
|
|
334
|
-
### 仓库卫生与路径语义
|
|
335
|
-
|
|
336
|
-
> **仓库卫生。** 卸载载荷与轨迹账本存储在 `<repo>/.git/opencode-team/` 下
|
|
337
|
-
> (非 git 仓库回退系统临时目录)——绝不污染你的工作树。所有 Agent 都被
|
|
338
|
-
> 要求在汇报完成前**删除自己创建的临时/草稿文件**,一次性工作直接放到系统
|
|
339
|
-
> 临时目录,从源头避免落进仓库。`tm_read` / `tm_grep` 的路径相对**项目根目录**
|
|
340
|
-
> (而非 Agent 的工作目录)。
|
|
230
|
+
### 项目 + 全局记忆(tm_memory)
|
|
341
231
|
|
|
342
|
-
|
|
232
|
+
耐久的事实——构建命令、环境怪癖、架构决策、你的约定——以人可编辑的
|
|
233
|
+
Markdown + frontmatter 存放:
|
|
343
234
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
| `TM_ENV_PROTECT` | `strict` | R6 模式:`strict` / `standard` / `off`(off 同时解除审批计时器) |
|
|
347
|
-
| `TM_ASK_TIMEOUT_MIN` | `10` | R6/R2 确认弹窗无人应答后自动拒绝的分钟数;最小 3 分钟(宿主的 `permission.replied` 经事件总线到达插件约延迟 ~120 秒——更小的值会把刚获批的请求误拒) |
|
|
348
|
-
| `TM_ENV_PROTECT_EXTRA_DENY` | — | 追加拦截正则(分号分隔;始终硬拦,不走弹窗) |
|
|
349
|
-
| `TM_OFFLOAD_THRESHOLD` | `2000` | 卸载阈值(token,CJK≈1 token/字、其余 chars/4 估算) |
|
|
350
|
-
| `TM_PREVIEW_MAX_TOKENS` | `80` | 预览硬上限 |
|
|
351
|
-
| `TM_FETCH_MAX_LINES` | `2000` | tm_fetch 单段上限 |
|
|
352
|
-
| `TM_BLACKBOARD_DIR` | `<repo>/.git/opencode-team/blackboard/` | 卸载载荷存储(非 git 仓库回退 tmpdir;显式值支持绝对或项目相对路径) |
|
|
353
|
-
| `TM_TRAJECTORY_DIR` | `<repo>/.git/opencode-team/trajectory/` | 只追加工具调用账本(非 git 仓库回退 tmpdir) |
|
|
354
|
-
| `TM_BLACKBOARD_TTL` | `7` | 存储保留天数 |
|
|
355
|
-
| `TM_BASH_READONLY_ALLOWED` | 内置表 | tm_bash 只读白名单 |
|
|
356
|
-
| `TM_WEBFETCH_ALLOWED_DOMAINS` | `mobile.moegirl.org.cn, search.bilibili.com, cn.bing.com, www.baidu.com` | tm_webfetch/tm_browser 白名单(`"*"` 放开全部主机;显式留空 = 全拒绝) |
|
|
357
|
-
| `TM_BROWSER_PATH` | 自动探测 | tm_browser 可执行文件覆盖(按 Edge/Chrome/Chromium 逐 OS 探测) |
|
|
358
|
-
| `TM_BROWSER_HEADLESS` | `auto` | tm_browser:`1` 无头(服务器/CI) / `0` 有头 / `auto`(仅无显示器的 Linux 自动无头) |
|
|
359
|
-
| `TM_PTC_MAX_PROGRAM_CHARS` | `4000` | PTC 程序源码长度上限(字符) |
|
|
360
|
-
| `TM_PTC_MAX_CALLS` | `20` | PTC 单次运行桥接调用数上限(1–200) |
|
|
361
|
-
| `TM_PTC_MAX_ERRORS` | `3` | PTC 单次运行错误数上限(1–50) |
|
|
362
|
-
| `TM_PTC_TIMEOUT_MS` | `60000` | PTC 单次运行墙钟超时(5 秒–10 分钟) |
|
|
363
|
-
| `TM_PTC_ENGINE` | `auto` | PTC 引擎:`auto`(worker→inline 整体重跑降级)/ `worker` / `inline` |
|
|
235
|
+
- **`project`**(默认):`<repo>/.git/opencode-team/memories/…` —— 每 checkout 一份,贴近 git。
|
|
236
|
+
- **`global`**:`~/.opencode-team/memories/global/`(可用 `TM_MEMORY_GLOBAL_DIR` 覆盖)——**跟着你走遍所有项目**。
|
|
364
237
|
|
|
365
|
-
|
|
238
|
+
动作:`add` / `search`(确定性关键词打分)/ `list` / `forget`;每条记忆
|
|
239
|
+
上限 4000 字符。agent 被要求先搜记忆再做项目假设,也把来之不易的事实
|
|
240
|
+
存下来留给下个会话。
|
|
366
241
|
|
|
367
|
-
|
|
368
|
-
`tm_*` 调用——运行期间零 LLM 往返,仅将聚合摘要返回上下文。设计用于批量
|
|
369
|
-
只读任务:多文件侦察、批量 grep + read 聚合、交叉引用搜索结果。
|
|
242
|
+
### 🌐 真正好用的网络搜索(中国可用)
|
|
370
243
|
|
|
371
|
-
|
|
244
|
+
`tm_search` 是开放式查询的前锋:**一次调用、一个 query、干净结果**。引擎
|
|
245
|
+
URL 替你拼好、走受治理管线抓取、压缩成编号的"标题+链接"命中列表——
|
|
246
|
+
agent 永远看不到原始搜索页的噪音。
|
|
372
247
|
|
|
373
|
-
|
|
374
|
-
编写程序体——参数与四个受治理工具相同。每次调用返回 `{ok:true, data}`(已受
|
|
375
|
-
治理:内联文本或卸载句柄)或 `{ok:false, error:{tool,phase,line?,message}}`。
|
|
376
|
-
程序 `return` 一个值;它会被 JSON 序列化进聚合摘要。
|
|
377
|
-
|
|
378
|
-
包含 `require`、`import`、`process`、`globalThis`、`Deno`、`Bun`、`fs`、`net`
|
|
379
|
-
或 `child_process` 的程序会在执行前被拒绝(静态预扫描,辅助防护)。
|
|
380
|
-
|
|
381
|
-
#### 预算(仅收紧)
|
|
382
|
-
|
|
383
|
-
调用方可收紧 `max_calls`、`max_errors` 和 `timeout_ms`——超过 `TM_PTC_*` 上限
|
|
384
|
-
的值会被钳制到上限;低于下限的值会被钳制到下限。触达任一预算即整体停止运行;
|
|
385
|
-
已产出的输出不会丢失。
|
|
386
|
-
|
|
387
|
-
#### 引擎(`TM_PTC_ENGINE`)
|
|
388
|
-
|
|
389
|
-
| 模式 | 行为 |
|
|
248
|
+
| 引擎 | 说明 |
|
|
390
249
|
|---|---|
|
|
391
|
-
| `
|
|
392
|
-
| `
|
|
393
|
-
| `
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
250
|
+
| `bing`(默认) | cn.bing.com;`bing-int` 强制国际版结果(`ensearch=1`) |
|
|
251
|
+
| `sogou` / `so`(360) | 国产引擎,CJK 内容友好 |
|
|
252
|
+
| `baidu` | 反爬最凶,但有时是唯一的中文特化索引;失败时会点名替代引擎 |
|
|
253
|
+
| `bilibili` | 视频搜索 |
|
|
254
|
+
| `moegirl` | MediaWiki 搜索 API——词条标题 + 摘要,结构化 |
|
|
255
|
+
| `npm` | registry 搜索 → name@version + 描述,结构化 |
|
|
256
|
+
| `github` | 仓库搜索 API → star 数 + 描述,结构化 |
|
|
257
|
+
|
|
258
|
+
九个引擎在中国大陆**全部免 Key 可达**,且全部在种子域名白名单内。空结果
|
|
259
|
+
(反爬拦截页)时错误信息会点名替代引擎,不让 agent 卡死。另两条通道补全
|
|
260
|
+
能力面:
|
|
261
|
+
|
|
262
|
+
- `tm_webfetch` —— 已知 URL,单次受治理 GET。它抓到的搜索引擎页面同样
|
|
263
|
+
自动提取为命中列表。`registry.npmjs.org/<pkg>/latest` 这类 JSON 端点
|
|
264
|
+
原样透传。
|
|
265
|
+
- `tm_browser` —— JS 渲染页:驱动你自己的 Chromium 系浏览器,CDP pipe
|
|
266
|
+
headful 运行,隔离临时 profile,**域名白名单在网络层逐请求强制**
|
|
267
|
+
(`Fetch.requestPaused` → 非白名单主机直接 `BlockedByClient`)。
|
|
268
|
+
|
|
269
|
+
种子白名单(两个工具共用):`mobile.moegirl.org.cn`、`search.bilibili.com`、
|
|
270
|
+
`cn.bing.com`、`www.bing.com`、`www.baidu.com`、`www.sogou.com`、
|
|
271
|
+
`www.so.com`、`registry.npmjs.org`、`api.github.com`、
|
|
272
|
+
`raw.githubusercontent.com`、`ghproxy.net`(github raw 的大陆镜像)——用
|
|
273
|
+
`TM_WEBFETCH_ALLOWED_DOMAINS` 扩展(`"*"` 放开全部主机)。architect /
|
|
274
|
+
implementer / reviewer **没有**联网授权——网络问题会报告为缺口,绝不编造。
|
|
275
|
+
tester 仅持有 `tm_browser`,用于本项目的治理化 UI 验证(本地开发服务器、
|
|
276
|
+
预览路由);开放网络抓取仍归两个联网角色。
|
|
277
|
+
|
|
278
|
+
**白名单外是门,不是墙。** 当抓取 / 搜索 / 浏览器打开的目标主机不在白名单
|
|
279
|
+
内时,工具会把 URL 交给 OpenCode 的**官方确认弹窗**——由你裁决,每次一个
|
|
280
|
+
目标(无人应答照常走 10 分钟自动拒绝,插件依旧绝不代你批准)。每个弹窗
|
|
281
|
+
同时触发一条**系统 toast 通知**,即使你没盯着屏幕也知道有待批准的操作。
|
|
282
|
+
env 文件 URL 和非 http(s) 协议保持硬拦截、无弹窗——R6 红线不可被"同意"。
|
|
283
|
+
|
|
284
|
+
### 安全:R6 + R2 审批门禁
|
|
285
|
+
|
|
286
|
+
**R6 环境变量保护。** TeamMode 激活时,模型不能悄悄读环境变量。env 读取
|
|
287
|
+
(`printenv`、`env`、`Get-ChildItem env:` 等)和 env 文件(`.env`、shell rc)
|
|
288
|
+
走 OpenCode **官方确认弹窗**;没人应答的弹窗在 `TM_ASK_TIMEOUT_MIN`(默认
|
|
289
|
+
10 分钟)后**自动拒绝**。通配符表达不了的 env 读取(命令内嵌 `$VAR` /
|
|
290
|
+
`${VAR}` / `$env:`、命令替换)和 `tm_*` 包装通道保持**硬拦截**——没有弹窗
|
|
291
|
+
可钻。审计日志只记录工具名 + 模式类别 + 裁决——绝不记录命令文本、路径、
|
|
292
|
+
变量名或值。
|
|
404
293
|
|
|
405
|
-
|
|
294
|
+
**R2 危险操作(同一个弹窗)。** 删除、git 发布、网络抓取、包安装/发布、
|
|
295
|
+
进程/系统、提权——统统不允许静默放行。日常验证栈(`npm test`、`tsc`、
|
|
296
|
+
`git status`)**不在**门禁内,日常开发不受打扰。
|
|
406
297
|
|
|
407
|
-
|
|
298
|
+
> ⚠️ **批准弹窗时选"一次",别选"总是"。** 在真实宿主上验证过,"总是"记录
|
|
299
|
+
> 的规则远比你看到的那条命令宽:用"总是"批准 `Get-ChildItem env:PATH`
|
|
300
|
+
> 会存下 `Get-ChildItem *`,之后所有 `Get-ChildItem` 都不再弹窗。
|
|
408
301
|
|
|
409
|
-
|
|
410
|
-
opencode
|
|
411
|
-
|
|
412
|
-
├── tsconfig.json ← TypeScript 配置
|
|
413
|
-
├── src/
|
|
414
|
-
│ ├── index.ts ← 插件入口(server():config + R6 tool.execute.before + 审批门 event 钩子 + tool 段)
|
|
415
|
-
│ ├── agents.ts ← Agent 结构(模式、颜色、温度、白名单矩阵)
|
|
416
|
-
│ ├── prompts/ ← Agent 提示词原文(lead / specialists / shared)——由测试钉死
|
|
417
|
-
│ ├── commands.ts ← 命令定义(模板、Agent 绑定)
|
|
418
|
-
│ ├── blackboard.ts ← 共享黑板 + TTL 自动清理清扫器
|
|
419
|
-
│ ├── envprotect.ts ← R6 门面 → envprotect/(patterns / bash-classify / path-classify / gate-predicates / hook)
|
|
420
|
-
│ ├── approval-gate.ts ← 统一审批门:官方弹窗超时自动拒绝(绝不自我放行)
|
|
421
|
-
│ ├── tm/ ← JIT 层 2 工具:pipelines / result / client-unwrap / shell-bridge / args-schema / tools / guard / preview / store / refs / config / webfetch / memory / browser / ptc/(9 模块)
|
|
422
|
-
│ └── types.ts ← 加载器契约类型定义(1.18.x)
|
|
423
|
-
├── scripts/
|
|
424
|
-
│ ├── install.sh ← 一键安装脚本(bash)
|
|
425
|
-
│ └── install.ps1 ← 一键安装脚本(PowerShell)
|
|
426
|
-
├── pt07/ ← PT-07 基线任务集(种子化 A/B token 测量)
|
|
427
|
-
├── LICENSE ← Apache 2.0
|
|
428
|
-
└── README.md ← 英文文档
|
|
429
|
-
README.zh-CN.md ← 中文文档
|
|
430
|
-
```
|
|
302
|
+
> 弹窗改道是按会话的:env 读取只在运行 TeamMode 注入 agent 的会话里才走
|
|
303
|
+
> 弹窗;其他会话里守卫保持硬拦截。`headless opencode run` 会立即自动拒绝
|
|
304
|
+
> 没人应答的 `ask`(没有人可问)。
|
|
431
305
|
|
|
432
|
-
###
|
|
306
|
+
### 仓库卫生
|
|
433
307
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
5. Agent 和命令立即在桌面版 UI 中可用 —— 无需复制任何文件;同名 Agent 以用户自定义优先(插件绝不覆盖)
|
|
308
|
+
卸载/轨迹/记忆存储都在 `<repo>/.git/opencode-team/`(非 git 目录则用系统
|
|
309
|
+
临时目录)——**永不进工作树**。每个 agent 被要求完工前删掉自己的临时文件,
|
|
310
|
+
一次性产物进系统临时目录。TTL 清扫器在启动时 + 每小时回收过期任务目录;
|
|
311
|
+
Team Lead 自己从不删黑板,你可以随时审计任何一次运行。
|
|
439
312
|
|
|
440
313
|
---
|
|
441
314
|
|
|
442
|
-
##
|
|
443
|
-
|
|
444
|
-
子代理之间无法实时互发消息(平台限制),TeamMode 通过**结构化回复骨架**协调它们,
|
|
445
|
-
文件黑板只保留给超大产出:
|
|
446
|
-
|
|
447
|
-
- **回复骨架(主通道)**:每个专家的最终回复以
|
|
448
|
-
`STATUS: / CHANGES: / FINDINGS: / EVIDENCE: / HANDOFF:` 开头,全文 ≤50 行。
|
|
449
|
-
这个尺寸的产出直接内联传递——零文件 I/O,没有"文件没写上"这种故障面。
|
|
450
|
-
Lead 把 `HANDOFF` 原文转贴进下一次派单,并对骨架做机器校验
|
|
451
|
-
(缺失 → 带 skeleton 原文重试一次 → 仍违规则降级记入报告)。
|
|
452
|
-
- **黑板文件(仅例外)**:完整产出确实超过 ~50 行时(如完整架构设计文档),
|
|
453
|
-
派单点名唯一文件:
|
|
454
|
-
`<repo>/.git/opencode-team/<session-key>/<task-slug>/NN-<role>-<topic>.md`
|
|
455
|
-
——位于 `.git/` 内,**绝不污染**工作区和 commit(非 git 工作区回退系统临时目录)。
|
|
456
|
-
写入即冻结:修订 = 新的轮次后缀文件(`…-r2.md`);会话目录层让新对话
|
|
457
|
-
不会撞上尚未清扫的旧黑板。
|
|
458
|
-
- **没有 MANIFEST.md**:lead 的状态记忆就是它的 todo list。
|
|
459
|
-
- **反馈闭环**:Critical/Major 发现和产品 bug 自动转化为跟踪的修复任务,
|
|
460
|
-
直到交付物收敛(最多 2 轮,之后升级给用户)。
|
|
461
|
-
|
|
462
|
-
### 确定性路由、审批门与自适应评审
|
|
463
|
-
|
|
464
|
-
- **路由表**:lead 按任务形状查固定流水线行——提问 → 直接回答;纯文档 →
|
|
465
|
-
implementer;产品行为变更 → implementer → tester → reviewer;多模块/跨接口
|
|
466
|
-
功能 → architect → implementer → tester → reviewer(s);未知外部技术 →
|
|
467
|
-
researcher 前置。流水线有固定下限:产品变更路由到少于 3 次派发即是路由 bug;
|
|
468
|
-
把一个请求拆成多个 <2 派发的子任务以规避审批门 = 协议违规。
|
|
469
|
-
- **审批门(按计数触发)**:预计派发 ≥2 → lead 先调研(亲自读仓库;仅未知外部
|
|
470
|
-
技术才派 researcher),呈交 ≤30 行计划,然后**等待你的批准**才执行任何东西。
|
|
471
|
-
0-1 次派发的小任务以 1-2 行通报直接开工。执行中发现需要第 2 次派发 →
|
|
472
|
-
暂停等批准。阻塞性不确定**立即批量问一次**——不猜测、不挤牙膏。
|
|
473
|
-
- **自适应评审**:默认 1 个 reviewer 派单(correctness 维度);仅高风险画像
|
|
474
|
-
——鉴权/安全面、跨模块数据契约、≥3 文件的公共 API 变更——才升级为
|
|
475
|
-
3 维并行(完整性 / 正确性 / 影响面)。
|
|
476
|
-
- **静态验证**:tester 通过构建、类型检查、静态分析、API/单元测试验证。
|
|
477
|
-
禁止即兴发明浏览器自动化(headless 截图、DOM stub);用户可见前端改动
|
|
478
|
-
以 `UI NOT VERIFIED: <待人工检查项>` 如实收尾,除非项目本身已带真实
|
|
479
|
-
浏览器测试设施。
|
|
480
|
-
- **无仪式捷径**:lead 已亲自验证的根因(file:line 证据)直接变成修复规格
|
|
481
|
-
派给 implementer——调查性派单服务于未知,不服务于仪式感。
|
|
482
|
-
- **简明纪律**:路由选择是查表;用户可见的计划性文字 ≤5 行。
|
|
483
|
-
- **证据标准(保留)**:"完成 / 修复 / 通过"的声明必须附可验证证据——命令
|
|
484
|
-
输出、日志、diff。纯叙述只是进度说明,不是证明。
|
|
485
|
-
- **逐字契约(保留)**:需要互通的并行实现代理,其数据契约(端点、字段名、
|
|
486
|
-
类型)逐字贴进每个相关派单——契约错配是集成 bug 之首。
|
|
487
|
-
- **文档同步(CHANGELOG + AGENTS.md)**:交付的改动在 CHANGELOG.md 存在时按
|
|
488
|
-
Keep a Changelog 风格追加条目;当改动会影响 AGENTS.md 所记录的内容
|
|
489
|
-
(构建/测试命令、约定、项目结构、agent 指引)时同步更新它;任一文件缺失
|
|
490
|
-
时提议代建。阅读去重:README 由 lead 亲自阅读(宿主不会注入);
|
|
491
|
-
AGENTS.md/CLAUDE.md 若宿主已注入则直接使用上下文中的副本——仅在确实缺失时
|
|
492
|
-
才打开文件;专家不会自己去重读这些文档——约定由 lead 蒸馏进派单。
|
|
493
|
-
|
|
494
|
-
### Triage —— 提问不会变成代码修改
|
|
495
|
-
|
|
496
|
-
Team Lead 对每条消息先分类再行动:咨询/提问只得到回答(零文件改动,发现缺陷
|
|
497
|
-
仅**提议**修复并等待你放行);只有明确的行动指令才进入工作流。并且一旦你写明
|
|
498
|
-
了哪些能碰哪些不能碰,**这些边界高于一切规则**——lead 会在每次派发中原样重申。
|
|
499
|
-
|
|
500
|
-
### 清理 —— 只有 TTL 清扫器一条路
|
|
501
|
-
|
|
502
|
-
| 责任方 | 时机 |
|
|
503
|
-
|---|---|
|
|
504
|
-
| 插件代码(进程内清扫器) | 启动时 + 每小时:清除空闲超过 **TTL** 的任务目录 |
|
|
505
|
-
|
|
506
|
-
Team Lead 不再删除任务目录 —— 跑完的黑板原地留给你回看审计;回收由纯代码
|
|
507
|
-
完成,从不依赖模型"记得删",崩溃/强杀留下的残骸同样会被清扫。清扫器对活跃
|
|
508
|
-
会话内的过期任务逐个回收,对整个闲置的会话目录一次性收走。TTL 可用
|
|
509
|
-
`ttlDays` 调节。
|
|
315
|
+
## ⚙️ 配置
|
|
510
316
|
|
|
511
|
-
|
|
317
|
+
插件在启动时注入一切——没有 agent 文件要拷。
|
|
512
318
|
|
|
513
|
-
|
|
319
|
+
> **模型选择很关键。** 分诊、拆解、派工简报、汇总、评审裁决——全从 Team
|
|
320
|
+
> Lead 一点上过。那个座位坐个弱模型,专家再强也白搭。把你能拿到的最强
|
|
321
|
+
> 推理模型钉在 `team` 上:
|
|
514
322
|
|
|
515
323
|
```jsonc
|
|
516
324
|
{
|
|
517
|
-
"
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
325
|
+
"agent": {
|
|
326
|
+
"team": { "model": "anthropic/claude-opus-4-5" }, // Lead 配最强
|
|
327
|
+
"implementer": { "model": "anthropic/claude-sonnet-4-6" } // 专家角色便宜模型够用
|
|
328
|
+
}
|
|
521
329
|
}
|
|
522
330
|
```
|
|
523
331
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
### 默认代理
|
|
332
|
+
**全局安装** —— 把插件条目放进 `~/.config/opencode/opencode.jsonc`,每个项目都有团队。
|
|
527
333
|
|
|
528
|
-
|
|
529
|
-
占默认槽附带一个排序效应:选择器会把**默认代理钉在第一位**、其余按名称
|
|
530
|
-
字母升序,所以顺序为 **team, build, plan**。(想让 Team 排在 Plan 之下?
|
|
531
|
-
那必须放弃默认槽——见下方退出开关;按服务端的排序规则二者不可兼得。)
|
|
532
|
-
|
|
533
|
-
不想占用默认代理槽(`build` 保持默认,顺序 **build, plan, team**)则退出:
|
|
334
|
+
**不想让 Team 占默认位:**
|
|
534
335
|
|
|
535
336
|
```jsonc
|
|
536
337
|
{
|
|
@@ -540,107 +341,172 @@ TeamMode 默认**把 Team 设为你的默认代理**——新会话直接由团
|
|
|
540
341
|
}
|
|
541
342
|
```
|
|
542
343
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
**升级提示**:v1.4.4 曾短暂改为 opt-in(默认不占用);v1.4.5 恢复
|
|
546
|
-
Team-as-default 出厂行为。若你在 v1.4.4 期间加过 `{ "defaultAgent": true }`,
|
|
547
|
-
现在可以删掉该选项(或改为 `false` 主动退出)。
|
|
548
|
-
|
|
549
|
-
---
|
|
344
|
+
你自己定义的同名 agent 永远优先;插件从不覆盖用户定义。覆盖、加人、停用
|
|
345
|
+
见[自定义](#-自定义)。
|
|
550
346
|
|
|
551
|
-
|
|
347
|
+
### 环境变量
|
|
552
348
|
|
|
553
|
-
|
|
349
|
+
| 环境变量 | 默认 | 用途 |
|
|
350
|
+
|---|---|---|
|
|
351
|
+
| `TM_ENV_PROTECT` | `strict` | R6 模式:`strict` / `standard` / `off`(off 同时解除审批计时器) |
|
|
352
|
+
| `TM_ASK_TIMEOUT_MIN` | `10` | 无人应答弹窗自动拒绝前等待的分钟数(硬下限 3——宿主的应答事件到插件晚约 120 秒) |
|
|
353
|
+
| `TM_ENV_PROTECT_EXTRA_DENY` | — | 额外拦截模式(正则;永远硬拦截,不走弹窗) |
|
|
354
|
+
| `TM_OFFLOAD_THRESHOLD` | `2000` | 卸载阈值(token,CJK 感知估算) |
|
|
355
|
+
| `TM_PREVIEW_MAX_TOKENS` | `80` | 预览硬顶 |
|
|
356
|
+
| `TM_FETCH_MAX_LINES` | `2000` | tm_fetch 单页行数上限 |
|
|
357
|
+
| `TM_BLACKBOARD_DIR` / `TM_TRAJECTORY_DIR` | `<repo>/.git/opencode-team/…` | 卸载存储 / 轨迹账本(tmpdir 回退;显式值 = 绝对或项目相对) |
|
|
358
|
+
| `TM_BLACKBOARD_TTL` | `7` | 存储保留天数 |
|
|
359
|
+
| `TM_BASH_READONLY_ALLOWED` | 内置表 | tm_bash 白名单 |
|
|
360
|
+
| `TM_WEBFETCH_ALLOWED_DOMAINS` | 十一个种子主机 | tm_webfetch / tm_search / tm_browser 白名单(`"*"` 全开;空 = 全拒) |
|
|
361
|
+
| `TM_BROWSER_PATH` | 自动探测 | tm_browser 可执行文件覆盖(按 OS 探测 Edge/Chrome/Chromium) |
|
|
362
|
+
| `TM_BROWSER_HEADLESS` | `auto` | `1` 无头(CI)/ `0` 有头 / `auto`(仅无显示的 Linux 用无头) |
|
|
363
|
+
| `TM_MEMORY_GLOBAL_DIR` | `~/.opencode-team/memories/global/` | tm_memory GLOBAL 作用域存储 |
|
|
364
|
+
| `TM_PTC_MAX_PROGRAM_CHARS` | `4000` | PTC 程序源码上限 |
|
|
365
|
+
| `TM_PTC_MAX_CALLS` | `20` | PTC 单次运行桥接调用预算(1–200) |
|
|
366
|
+
| `TM_PTC_MAX_ERRORS` | `3` | PTC 单次运行错误预算(1–50) |
|
|
367
|
+
| `TM_PTC_TIMEOUT_MS` | `60000` | PTC 单次运行墙钟超时(5s–10min) |
|
|
368
|
+
| `TM_PTC_ENGINE` | `auto` | `auto`(worker→inline 降级)/ `worker` / `inline` |
|
|
554
369
|
|
|
555
|
-
|
|
556
|
-
reviewer/tester 的发现、合成最终交付。这里的质量问题会**沿流水线放大**——
|
|
557
|
-
平庸的 Lead 拆错任务、给专家的指令含糊、放走劣质产出;没有任何专家能
|
|
558
|
-
救回一份从一开始就派错的工单。
|
|
370
|
+
---
|
|
559
371
|
|
|
560
|
-
|
|
561
|
-
|
|
372
|
+
## ⚙️ 团队怎么运作
|
|
373
|
+
|
|
374
|
+
子 agent 之间不能实时互发消息(平台限制),所以 TeamMode 用**结构化回复
|
|
375
|
+
骨架**协调——每个专家的回复都是 `STATUS: / CHANGES: / FINDINGS: / EVIDENCE:
|
|
376
|
+
/ HANDOFF:`,≤50 行,Lead 原文转投给下一次派工。文件是例外不是常规:超过
|
|
377
|
+
约 50 行的交付物写**一个**指名的黑板文件,放在 `<repo>/.git/opencode-team/`
|
|
378
|
+
下(round 后缀,工作树分毫不动)。
|
|
379
|
+
|
|
380
|
+
- **路由表:** 提问 → 直接回答;纯文档 → implementer;产品行为变更 →
|
|
381
|
+
implementer → tester → reviewer;多模块 → architect → implementer →
|
|
382
|
+
tester → reviewer(s);陌生技术 → researcher 先行。固定下限——产品变更
|
|
383
|
+
路由低于 3 次派工就是路由 bug。
|
|
384
|
+
- **审批门禁(计数式):** ≥2 次派工 → 计划(≤30 行)→ **等你批准** → 执行。
|
|
385
|
+
阻塞性问题立刻批量问,不猜、不挤牙膏。
|
|
386
|
+
- **自适应评审:** 默认一名评审;高风险画像(鉴权/安全面、跨模块契约、
|
|
387
|
+
公共 API)才三维度并行。
|
|
388
|
+
- **静态验证:** 构建 / 类型检查 / lint / 测试。禁止临时起意的浏览器自动化;
|
|
389
|
+
未验证的 UI 工作以 `UI NOT VERIFIED: <待人工检查项>` 收尾。
|
|
390
|
+
- **证据标准:** "完成 / 修好 / 通过"必须带可验证证据——输出、日志、diff。
|
|
562
391
|
|
|
563
|
-
|
|
564
|
-
{
|
|
565
|
-
"agent": {
|
|
566
|
-
// Team Lead —— 编排值得最好的模型
|
|
567
|
-
"team": { "model": "anthropic/claude-opus-4-5" },
|
|
568
|
-
// 专家角色 —— 便宜一档通常够用
|
|
569
|
-
"implementer": { "model": "anthropic/claude-sonnet-4-6" }
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
(以上模型 ID 仅为示例,换成你服务商实际提供的即可。你自定义的
|
|
575
|
-
`agent.team` 永远优先于插件注入的版本。)
|
|
392
|
+
---
|
|
576
393
|
|
|
577
|
-
|
|
394
|
+
## 🔧 自定义
|
|
578
395
|
|
|
579
|
-
|
|
396
|
+
**覆盖某个 agent** —— 同名即覆盖:
|
|
580
397
|
|
|
581
398
|
```jsonc
|
|
582
399
|
{
|
|
583
400
|
"agent": {
|
|
584
401
|
"reviewer": {
|
|
585
402
|
"model": "anthropic/claude-sonnet-4-6",
|
|
586
|
-
"prompt": "
|
|
403
|
+
"prompt": "你是个极严格的评审。有 lint 警告一律打回。"
|
|
587
404
|
}
|
|
588
405
|
}
|
|
589
406
|
}
|
|
590
407
|
```
|
|
591
408
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
TeamMode 不阻止你添加更多 Agent,与团队 Agent 并存:
|
|
409
|
+
**在团队旁加自己的 agent:**
|
|
595
410
|
|
|
596
411
|
```jsonc
|
|
597
412
|
{
|
|
598
413
|
"agent": {
|
|
599
414
|
"devops": {
|
|
600
415
|
"mode": "subagent",
|
|
601
|
-
"description": "
|
|
602
|
-
"prompt": "你是 DevOps
|
|
416
|
+
"description": "负责 CI/CD、Docker 和部署任务。",
|
|
417
|
+
"prompt": "你是 DevOps 工程师……"
|
|
603
418
|
}
|
|
604
419
|
}
|
|
605
420
|
}
|
|
606
421
|
```
|
|
607
422
|
|
|
608
|
-
|
|
423
|
+
**停用一个:** `"researcher": { "disable": true }`。
|
|
609
424
|
|
|
610
|
-
|
|
611
|
-
{
|
|
612
|
-
"agent": {
|
|
613
|
-
"researcher": { "disable": true }
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
```
|
|
425
|
+
**黑板保留期** 用元组形式:`["@te-river/opencode-team-mode@latest", { "ttlDays": 7 }]`(有效区间 (0, 365],非法值回退 5)。
|
|
617
426
|
|
|
618
427
|
---
|
|
619
428
|
|
|
620
|
-
##
|
|
429
|
+
## ❓ FAQ
|
|
621
430
|
|
|
622
|
-
|
|
431
|
+
**会不会很烧 token?**
|
|
432
|
+
恰恰相反,省 token 就是设计目标。卸载 + 80 token 预览 + PTC 批量程序的存在
|
|
433
|
+
理由就是:五 agent 流水线要是裸接一个上下文窗口,那才叫烧 token。治理本身
|
|
434
|
+
就是省 token 的机制。
|
|
623
435
|
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
436
|
+
**联网安全吗?**
|
|
437
|
+
这是全插件防守最严的面:两个完整联网角色 + 仅浏览器的 tester 授权、域名
|
|
438
|
+
白名单(白名单外走官方弹窗由你批准,并带 toast 通知)、重定向逐跳复检、
|
|
439
|
+
浏览器
|
|
440
|
+
网络层强制、env 文件 URL 拒绝,且每个 payload 都走同一套卸载治理。白名单
|
|
441
|
+
页面不可能把抓取弹到站外。
|
|
442
|
+
|
|
443
|
+
**插件为什么不自动更新?**
|
|
444
|
+
OpenCode 按 spec 字符串缓存插件,从不重新解析 `@latest`(上游问题,不是
|
|
445
|
+
我们的)。**重跑安装脚本就是更新**(它会清缓存、重解析 npm 副本);或者
|
|
446
|
+
手动删缓存目录。配方在上面和[安装指南](./docs/installation.md)里。
|
|
447
|
+
|
|
448
|
+
**agent 能并行调工具吗?**
|
|
449
|
+
能——而且是为并行**专门设计**的:并行的 `tm_search` / `tm_webfetch` /
|
|
450
|
+
`tm_fetch` 拿到互不相同的 step id 和互相隔离的 payload。这里出回归,测试
|
|
451
|
+
套件会在它到你面前之前先红。
|
|
452
|
+
|
|
453
|
+
**CLI(TUI)能用吗,还是只有桌面版?**
|
|
454
|
+
都能。桌面版多了彩色 agent 选择器和并行面板;受治理工具和整个工作流与
|
|
455
|
+
宿主无关。无显示的 Linux 上 `tm_browser` 自动转无头。
|
|
456
|
+
|
|
457
|
+
**确认弹窗我不理会会怎样?**
|
|
458
|
+
`TM_ASK_TIMEOUT_MIN`(默认 10 分钟)后自动拒绝。插件从不自我批准——它
|
|
459
|
+
能站的队只有"你"或者"没人"。
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## 🗑️ 卸载
|
|
464
|
+
|
|
465
|
+
1. 从配置文件的 `"plugin"` 数组里移除该条目。
|
|
466
|
+
2. 想回收磁盘就删缓存目录(见[安装](#-现在读一遍以后省一小时)里的表格)。
|
|
467
|
+
3. 重启 OpenCode。agent、命令、工具全部消失;`<repo>/.git/opencode-team/`
|
|
468
|
+
下的存储(全局记忆在 `~/.opencode-team/`)都是普通文件,随时可删。
|
|
469
|
+
|
|
470
|
+
没有 DLL 受伤。工作树什么都没写。
|
|
629
471
|
|
|
630
472
|
---
|
|
631
473
|
|
|
632
|
-
##
|
|
474
|
+
## 🏛️ 架构(给好奇的人)
|
|
475
|
+
|
|
476
|
+
```
|
|
477
|
+
opencode-team-mode/
|
|
478
|
+
├── src/
|
|
479
|
+
│ ├── index.ts ← 插件入口(config + R6 守卫 + 审批门禁 + 工具段)
|
|
480
|
+
│ ├── agents.ts ← Agent 结构(mode、颜色、温度、白名单矩阵)
|
|
481
|
+
│ ├── prompts/ ← Agent 提示词(lead / specialists / shared)——测试钉死
|
|
482
|
+
│ ├── commands.ts ← 斜杠命令定义
|
|
483
|
+
│ ├── blackboard.ts ← 共享黑板 + TTL 清扫
|
|
484
|
+
│ ├── envprotect.ts ← R6 门面(patterns / 分类器 / 门禁谓词 / hook)
|
|
485
|
+
│ ├── approval-gate.ts ← 统一审批门禁(弹窗超时自动拒绝)
|
|
486
|
+
│ ├── tm/ ← 受治理工具:pipelines / store / preview / guard / refs /
|
|
487
|
+
│ │ webfetch / search / memory / browser / shell-bridge / ptc/(9 模块)
|
|
488
|
+
│ └── types.ts ← 加载器契约类型(1.18.x)
|
|
489
|
+
├── docs/installation.md ← agent 可消费的安装指南
|
|
490
|
+
├── scripts/ ← 一行安装脚本(bash / PowerShell)
|
|
491
|
+
├── pt07/ ← PT-07 基线套件(种子化 A/B token 测量)
|
|
492
|
+
└── README.*.md ← 你在这里(有两个版本)
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
加载器只调一次 `server(input, options)`:`config` 钩子注入六个 agent 和六个
|
|
496
|
+
命令,同一次调用装上 R6 `tool.execute.before` 守卫、通过 `event` 钩子布防
|
|
497
|
+
审批门禁、注册 `tm_*` 工具。用户自定义的同名 agent 永远赢——插件从不覆盖。
|
|
498
|
+
|
|
499
|
+
---
|
|
633
500
|
|
|
634
|
-
|
|
501
|
+
## 🤝 参与贡献
|
|
635
502
|
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
- 📝 **更好的 Prompt** — 通过 Prompt 工程优化 Agent 行为
|
|
503
|
+
欢迎 issue 和 PR。特别需要:agent 提示词的多语言化、更多角色、更多命令
|
|
504
|
+
模板,以及各搜索引擎真实行为的实测报告(它们经常改版;提取器的过滤故意
|
|
505
|
+
放宽,但不会读心术)。
|
|
640
506
|
|
|
641
507
|
---
|
|
642
508
|
|
|
643
|
-
## 📄
|
|
509
|
+
## 📄 许可
|
|
644
510
|
|
|
645
511
|
[Apache License 2.0](./LICENSE)
|
|
646
512
|
|
|
@@ -649,7 +515,7 @@ npm publish # 发布到 npm 仓库
|
|
|
649
515
|
## 🔗 链接
|
|
650
516
|
|
|
651
517
|
- [npm 包](https://www.npmjs.com/package/@te-river/opencode-team-mode) — `@te-river/opencode-team-mode`
|
|
652
|
-
- [
|
|
653
|
-
- [OpenCode
|
|
654
|
-
- [OpenCode
|
|
655
|
-
- [OpenCode
|
|
518
|
+
- [安装指南](./docs/installation.md) — 完整的手动 / agent 可消费流程
|
|
519
|
+
- [OpenCode Desktop](https://opencode.ai) — 官网与下载
|
|
520
|
+
- [OpenCode 文档](https://opencode.ai/docs) — 配置与插件文档
|
|
521
|
+
- [OpenCode 插件 API](https://opencode.ai/docs/plugins) — 开发你自己的插件
|