@te-river/opencode-team-mode 1.2.0 → 1.3.0

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 CHANGED
@@ -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@latest"
103
103
  ]
104
104
  }
105
105
  ```
@@ -117,7 +117,7 @@ To enable TeamMode in every project, add the plugin to your global config:
117
117
  {
118
118
  "$schema": "https://opencode.ai/config.json",
119
119
  "plugin": [
120
- "@te-river/opencode-team-mode"
120
+ "@te-river/opencode-team-mode@latest"
121
121
  ]
122
122
  }
123
123
  ```
@@ -203,7 +203,7 @@ opencode-team-mode/
203
203
  ### How it works
204
204
 
205
205
  1. OpenCode Desktop starts and loads `opencode.json`.
206
- 2. It sees `"@te-river/opencode-team-mode"` in the `plugin` array and loads the npm package.
206
+ 2. It sees `"@te-river/opencode-team-mode@latest"` in the `plugin` array and loads the npm package.
207
207
  3. The plugin's v2 `setup` function runs, using `ctx.agent.transform()` and `ctx.command.transform()` to inject 6 agents and 6 commands.
208
208
  4. The plugin's `id: "team-mode"` is displayed as the plugin name in the Desktop UI.
209
209
  5. Agents and commands are immediately available in the Desktop UI — no file copying needed.
@@ -246,7 +246,7 @@ Default is **5 days**. To choose your own, use the tuple plugin form in
246
246
  {
247
247
  "$schema": "https://opencode.ai/config.json",
248
248
  "plugin": [
249
- ["@te-river/opencode-team-mode", { "ttlDays": 7 }]
249
+ ["@te-river/opencode-team-mode@latest", { "ttlDays": 7 }]
250
250
  ]
251
251
  }
252
252
  ```
package/README.zh-CN.md CHANGED
@@ -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@latest"
103
103
  ]
104
104
  }
105
105
  ```
@@ -117,7 +117,7 @@ npm link
117
117
  {
118
118
  "$schema": "https://opencode.ai/config.json",
119
119
  "plugin": [
120
- "@te-river/opencode-team-mode"
120
+ "@te-river/opencode-team-mode@latest"
121
121
  ]
122
122
  }
123
123
  ```
@@ -203,7 +203,7 @@ opencode-team-mode/
203
203
  ### 工作原理
204
204
 
205
205
  1. OpenCode 桌面版启动,加载 `opencode.json`
206
- 2. 检测到 `plugin` 数组中的 `"@te-river/opencode-team-mode"`,加载 npm 包
206
+ 2. 检测到 `plugin` 数组中的 `"@te-river/opencode-team-mode@latest"`,加载 npm 包
207
207
  3. 插件的 `setup` 函数执行,通过 `ctx.agent.transform()` 和 `ctx.command.transform()` 注入 6 个 Agent 和 6 个命令
208
208
  4. Agent 和命令立即在桌面版 UI 中可用 —— 无需复制任何文件
209
209
 
@@ -238,7 +238,7 @@ opencode-team-mode/
238
238
  {
239
239
  "$schema": "https://opencode.ai/config.json",
240
240
  "plugin": [
241
- ["@te-river/opencode-team-mode", { "ttlDays": 7 }]
241
+ ["@te-river/opencode-team-mode@latest", { "ttlDays": 7 }]
242
242
  ]
243
243
  }
244
244
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA+W3C,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAO5C,CAAA"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA8a3C,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAO5C,CAAA"}
package/dist/agents.js CHANGED
@@ -15,17 +15,35 @@
15
15
  * dispatch embeds the relevant prior outputs.
16
16
  * - Research findings carry confidence tags and critical ones are verified.
17
17
  */
18
+ import { RULE } from "./types.js";
19
+ /* ------------------------------------------------------------------ */
20
+ /* Blackboard write guarantee (appended to every specialist prompt) */
21
+ /* ------------------------------------------------------------------ */
22
+ const BLACKBOARD_GUARANTEE = `
23
+
24
+ ## Blackboard write guarantee
25
+ - Writing your designated blackboard artifact is ALWAYS within your role.
26
+ Any read-only constraint applies to PROJECT SOURCES and the code under
27
+ review — NEVER to the blackboard directory. Your tools can write there;
28
+ do it yourself, in the file the dispatch names.
29
+ - NEVER reply "append this verbatim for me" or hand the full deliverable
30
+ back to the dispatcher to transcribe — that defeats the entire point of
31
+ the blackboard. Reply with your summary + the file path, nothing else.
32
+ - If a write genuinely fails (permissions, missing directory), start your
33
+ reply with the line \`BLACKBOARD WRITE FAILED: <reason>\` and only then
34
+ include the full content as fallback, so the lead can retry the write
35
+ deliberately instead of guessing.`;
18
36
  /* ------------------------------------------------------------------ */
19
37
  /* Team Lead — orchestrator */
20
38
  /* ------------------------------------------------------------------ */
21
39
  const teamLead = {
22
- mode: "all",
40
+ mode: "primary",
23
41
  description: "Team lead orchestrator — decomposes complex tasks, dispatches sub-agents " +
24
42
  "(architect, implementer, reviewer, tester, researcher), enforces a " +
25
43
  "review/test feedback loop, and synthesises their outputs into a coherent " +
26
44
  "deliverable. Use when the task requires multi-step collaboration across " +
27
45
  "different expertise areas.",
28
- prompt: `You are the **Team Lead** in a multi-agent coding team.
46
+ system: `You are the **Team Lead** in a multi-agent coding team.
29
47
 
30
48
  ## Role
31
49
  You orchestrate the team: decompose work, dispatch it to specialist agents
@@ -84,6 +102,10 @@ file blackboard (root path is appended at the end of this prompt):
84
102
  never rely on an agent "knowing" what another produced.
85
103
  - Sub-agents reply with a summary plus their file path; read the file
86
104
  yourself when you need detail, then relay the relevant parts onward.
105
+ - A specialist asking you to transcribe its output verbatim is a protocol
106
+ violation — send it back to write the file itself. Only if its reply
107
+ contains \`BLACKBOARD WRITE FAILED\` may you write the artifact as a
108
+ fallback; note the failure in MANIFEST.md so it is not silently tolerated.
87
109
  - Maintain \`MANIFEST.md\` in the task directory: one line per artifact
88
110
  (file — role — status — one-line summary).
89
111
  - After you deliver the final report, DELETE the task directory (use the
@@ -129,6 +151,12 @@ adoption:
129
151
  - Your final output is a structured summary, not raw agent transcripts.
130
152
  `,
131
153
  color: "#E879F9", // purple
154
+ permissions: [
155
+ RULE("edit", "*", "allow"),
156
+ RULE("bash", "*", "allow"),
157
+ RULE("webfetch", "*", "allow"),
158
+ RULE("task", "*", "allow"),
159
+ ],
132
160
  };
133
161
  /* ------------------------------------------------------------------ */
134
162
  /* Architect */
@@ -139,7 +167,7 @@ const architect = {
139
167
  "and technical strategy; revises designs when review or testing exposes a " +
140
168
  "flaw. Use when you need a design doc, architecture decision record, or " +
141
169
  "module breakdown before implementation.",
142
- prompt: `You are the **Architect** on a multi-agent coding team.
170
+ system: `You are the **Architect** on a multi-agent coding team.
143
171
 
144
172
  ## Role
145
173
  You produce clear, implementable technical designs. You think in systems:
@@ -176,6 +204,13 @@ When the team lead sends back a design flaw found in review or testing:
176
204
  of guessing about the codebase.
177
205
  `,
178
206
  color: "#38BDF8", // sky blue
207
+ // Read-only on PROJECT sources; the blackboard artifact is explicitly
208
+ // writable (see Blackboard write guarantee).
209
+ permissions: [
210
+ RULE("edit", "*", "allow"),
211
+ RULE("bash", "*", "deny"),
212
+ RULE("webfetch", "*", "allow"),
213
+ ],
179
214
  };
180
215
  /* ------------------------------------------------------------------ */
181
216
  /* Implementer */
@@ -185,7 +220,7 @@ const implementer = {
185
220
  description: "Core implementer — writes production code, creates files, and builds " +
186
221
  "features according to the architect's design; applies review-driven fix " +
187
222
  "tasks. Use when you need clean, working code written quickly.",
188
- prompt: `You are the **Implementer** on a multi-agent coding team.
223
+ system: `You are the **Implementer** on a multi-agent coding team.
189
224
 
190
225
  ## Role
191
226
  You write clean, production-quality code following the design spec handed
@@ -218,6 +253,11 @@ to you by the team lead.
218
253
  check, the previously failing test).
219
254
  `,
220
255
  color: "#4ADE80", // green
256
+ permissions: [
257
+ RULE("edit", "*", "allow"),
258
+ RULE("bash", "*", "allow"),
259
+ RULE("webfetch", "*", "allow"),
260
+ ],
221
261
  };
222
262
  /* ------------------------------------------------------------------ */
223
263
  /* Reviewer */
@@ -227,7 +267,7 @@ const reviewer = {
227
267
  description: "Code reviewer — audits code for correctness, performance, security, " +
228
268
  "maintainability, and best practices with severity-graded, actionable " +
229
269
  "findings. Use when you want a thorough review before merging.",
230
- prompt: `You are the **Reviewer** on a multi-agent coding team.
270
+ system: `You are the **Reviewer** on a multi-agent coding team.
231
271
 
232
272
  ## Role
233
273
  You perform thorough, constructive code reviews. You catch bugs, security
@@ -268,6 +308,13 @@ plus regressions introduced by the fixes; confirm each prior finding item
268
308
  by item (fixed / not fixed / partial).
269
309
  `,
270
310
  color: "#FB923C", // orange
311
+ // May edit ONLY the blackboard artifact; never the reviewed code
312
+ // (see Blackboard write guarantee + role rules).
313
+ permissions: [
314
+ RULE("edit", "*", "allow"),
315
+ RULE("bash", "*", "allow"),
316
+ RULE("webfetch", "*", "allow"),
317
+ ],
271
318
  };
272
319
  /* ------------------------------------------------------------------ */
273
320
  /* Tester */
@@ -277,7 +324,7 @@ const tester = {
277
324
  description: "Test engineer — writes and runs unit/integration tests, classifies " +
278
325
  "failures (product bug vs bad test vs environment), and reports a clear " +
279
326
  "verdict. Use to validate correctness or raise coverage.",
280
- prompt: `You are the **Tester** on a multi-agent coding team.
327
+ system: `You are the **Tester** on a multi-agent coding team.
281
328
 
282
329
  ## Role
283
330
  You write comprehensive, maintainable tests and give the team a trustworthy
@@ -317,6 +364,11 @@ pass/fail signal.
317
364
  refactor instead of contorting the test.
318
365
  `,
319
366
  color: "#F472B6", // pink
367
+ permissions: [
368
+ RULE("edit", "*", "allow"),
369
+ RULE("bash", "*", "allow"),
370
+ RULE("webfetch", "*", "allow"),
371
+ ],
320
372
  };
321
373
  /* ------------------------------------------------------------------ */
322
374
  /* Researcher */
@@ -327,7 +379,7 @@ const researcher = {
327
379
  "documentation; every finding carries a source and confidence tag so " +
328
380
  "the team can decide what needs verification. Use for information that " +
329
381
  "must inform a technical decision.",
330
- prompt: `You are the **Researcher** on a multi-agent coding team.
382
+ system: `You are the **Researcher** on a multi-agent coding team.
331
383
 
332
384
  ## Role
333
385
  You find accurate, actionable information so the team can make informed
@@ -363,7 +415,17 @@ by the team — flag prominently if that is the case.
363
415
  - State which product/version each finding applies to.
364
416
  `,
365
417
  color: "#A78BFA", // violet
418
+ permissions: [
419
+ RULE("edit", "*", "allow"),
420
+ RULE("bash", "*", "allow"),
421
+ RULE("webfetch", "*", "allow"),
422
+ RULE("websearch", "*", "allow"),
423
+ ],
366
424
  };
425
+ /* Append the blackboard write guarantee to every specialist prompt. */
426
+ for (const a of [architect, implementer, reviewer, tester, researcher]) {
427
+ a.system = (a.system ?? "") + BLACKBOARD_GUARANTEE;
428
+ }
367
429
  /* ------------------------------------------------------------------ */
368
430
  /* Export all agents keyed by name */
369
431
  /* ------------------------------------------------------------------ */
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,QAAQ,GAAc;IAC1B,IAAI,EAAE,KAAK;IACX,WAAW,EACT,2EAA2E;QAC3E,qEAAqE;QACrE,2EAA2E;QAC3E,2EAA2E;QAC3E,4BAA4B;IAC9B,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGT;IACC,KAAK,EAAE,SAAS,EAAE,SAAS;CAC5B,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,SAAS,GAAc;IAC3B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,2EAA2E;QAC3E,2EAA2E;QAC3E,0EAA0E;QAC1E,yCAAyC;IAC3C,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCT;IACC,KAAK,EAAE,SAAS,EAAE,WAAW;CAC9B,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,WAAW,GAAc;IAC7B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,uEAAuE;QACvE,0EAA0E;QAC1E,gEAAgE;IAClE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BT;IACC,KAAK,EAAE,SAAS,EAAE,QAAQ;CAC3B,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,QAAQ,GAAc;IAC1B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,sEAAsE;QACtE,uEAAuE;QACvE,gEAAgE;IAClE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCT;IACC,KAAK,EAAE,SAAS,EAAE,SAAS;CAC5B,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,MAAM,GAAc;IACxB,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,qEAAqE;QACrE,yEAAyE;QACzE,0DAA0D;IAC5D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCT;IACC,KAAK,EAAE,SAAS,EAAE,OAAO;CAC1B,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,UAAU,GAAc;IAC5B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,iEAAiE;QACjE,sEAAsE;QACtE,yEAAyE;QACzE,mCAAmC;IACrC,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCT;IACC,KAAK,EAAE,SAAS,EAAE,SAAS;CAC5B,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,MAAM,CAAC,MAAM,MAAM,GAA8B;IAC/C,WAAW,EAAE,QAAQ;IACrB,SAAS;IACT,WAAW;IACX,QAAQ;IACR,MAAM;IACN,UAAU;CACX,CAAA"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AACxE,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;oCAaO,CAAA;AAEpC,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,QAAQ,GAAc;IAC1B,IAAI,EAAE,SAAS;IACf,WAAW,EACT,2EAA2E;QAC3E,qEAAqE;QACrE,2EAA2E;QAC3E,2EAA2E;QAC3E,4BAA4B;IAC9B,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GT;IACC,KAAK,EAAE,SAAS,EAAE,SAAS;IAC3B,WAAW,EAAE;QACX,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;KAC3B;CACF,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,SAAS,GAAc;IAC3B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,2EAA2E;QAC3E,2EAA2E;QAC3E,0EAA0E;QAC1E,yCAAyC;IAC3C,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCT;IACC,KAAK,EAAE,SAAS,EAAE,WAAW;IAC7B,sEAAsE;IACtE,6CAA6C;IAC7C,WAAW,EAAE;QACX,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;KAC/B;CACF,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,WAAW,GAAc;IAC7B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,uEAAuE;QACvE,0EAA0E;QAC1E,gEAAgE;IAClE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BT;IACC,KAAK,EAAE,SAAS,EAAE,QAAQ;IAC1B,WAAW,EAAE;QACX,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;KAC/B;CACF,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,QAAQ,GAAc;IAC1B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,sEAAsE;QACtE,uEAAuE;QACvE,gEAAgE;IAClE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCT;IACC,KAAK,EAAE,SAAS,EAAE,SAAS;IAC3B,iEAAiE;IACjE,iDAAiD;IACjD,WAAW,EAAE;QACX,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;KAC/B;CACF,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,MAAM,GAAc;IACxB,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,qEAAqE;QACrE,yEAAyE;QACzE,0DAA0D;IAC5D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCT;IACC,KAAK,EAAE,SAAS,EAAE,OAAO;IACzB,WAAW,EAAE;QACX,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;KAC/B;CACF,CAAA;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,MAAM,UAAU,GAAc;IAC5B,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,iEAAiE;QACjE,sEAAsE;QACtE,yEAAyE;QACzE,mCAAmC;IACrC,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCT;IACC,KAAK,EAAE,SAAS,EAAE,SAAS;IAC3B,WAAW,EAAE;QACX,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC;KAChC;CACF,CAAA;AAED,uEAAuE;AACvE,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IACvE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,oBAAoB,CAAA;AACpD,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,MAAM,CAAC,MAAM,MAAM,GAA8B;IAC/C,WAAW,EAAE,QAAQ;IACrB,SAAS;IACT,WAAW;IACX,QAAQ;IACR,MAAM;IACN,UAAU;CACX,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,18 @@
1
1
  /**
2
- * opencode-team-mode — OpenCode v2 plugin entry point.
2
+ * opencode-team-mode — OpenCode plugin entry point.
3
3
  *
4
- * Uses the v2 Promise API with an explicit `id` field. The `id` is the
5
- * display name shown in OpenCode Desktop's plugin list (instead of the
6
- * raw file path).
4
+ * Exports the hybrid object shape required by the current OpenCode Desktop
5
+ * loader (v1.18.x):
6
+ * - `id` → display name in the Desktop plugin list
7
+ * - `server` → v1 loader gate; MUST exist or loading is rejected with
8
+ * "must default export an object with server()"
9
+ * - `setup` → v2 domain injection (agent/command transform), real payload
7
10
  *
8
11
  * Options (via the tuple plugin form):
9
- * "plugin": [["@te-river/opencode-team-mode", { "ttlDays": 7 }]]
12
+ * "plugin": [["@te-river/opencode-team-mode@latest", { "ttlDays": 7 }]]
10
13
  * `ttlDays` controls blackboard auto-cleanup; default 5.
11
14
  */
12
- export declare const Plugin: import("./types.js").PluginDefinition;
13
- export default Plugin;
15
+ import type { OpenCodePlugin } from "./types.js";
16
+ declare const plugin: OpenCodePlugin;
17
+ export default plugin;
14
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiCH,eAAO,MAAM,MAAM,uCAoCjB,CAAA;AAEF,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AA8BhD,QAAA,MAAM,MAAM,EAAE,cA2Cb,CAAA;AAED,eAAe,MAAM,CAAA"}
package/dist/index.js CHANGED
@@ -1,15 +1,17 @@
1
1
  /**
2
- * opencode-team-mode — OpenCode v2 plugin entry point.
2
+ * opencode-team-mode — OpenCode plugin entry point.
3
3
  *
4
- * Uses the v2 Promise API with an explicit `id` field. The `id` is the
5
- * display name shown in OpenCode Desktop's plugin list (instead of the
6
- * raw file path).
4
+ * Exports the hybrid object shape required by the current OpenCode Desktop
5
+ * loader (v1.18.x):
6
+ * - `id` → display name in the Desktop plugin list
7
+ * - `server` → v1 loader gate; MUST exist or loading is rejected with
8
+ * "must default export an object with server()"
9
+ * - `setup` → v2 domain injection (agent/command transform), real payload
7
10
  *
8
11
  * Options (via the tuple plugin form):
9
- * "plugin": [["@te-river/opencode-team-mode", { "ttlDays": 7 }]]
12
+ * "plugin": [["@te-river/opencode-team-mode@latest", { "ttlDays": 7 }]]
10
13
  * `ttlDays` controls blackboard auto-cleanup; default 5.
11
14
  */
12
- import { define } from "./types.js";
13
15
  import { agents } from "./agents.js";
14
16
  import { commands } from "./commands.js";
15
17
  import { startBlackboardMaintenance, resolveTtlMs, DEFAULT_TTL_DAYS, } from "./blackboard.js";
@@ -33,39 +35,46 @@ function blackboardNote(root, ttlDays) {
33
35
  ` Your own delete-after-report is the fast path; the sweep is the safety net.`,
34
36
  ].join("\n");
35
37
  }
36
- export const Plugin = define({
38
+ const plugin = {
37
39
  id: "team-mode",
40
+ /** v1 loader gate — no v1 hooks needed, the v2 setup does everything. */
41
+ server: async () => ({}),
38
42
  setup: async (ctx) => {
39
43
  // ---------- blackboard maintenance (code-level TTL sweeper) ----------
40
44
  const directory = resolveDirectory(ctx);
41
45
  const ttlMs = resolveTtlMs(ctx.options);
42
46
  const ttlDays = Math.round(ttlMs / (24 * 60 * 60 * 1000)) || DEFAULT_TTL_DAYS;
43
47
  const boardRoot = startBlackboardMaintenance(directory, ttlMs);
44
- // ---------- inject team agents ----------
48
+ // ---------- inject team agents (v2 AgentV2Info fields) ----------
45
49
  await ctx.agent.transform((agent) => {
46
50
  for (const [name, def] of Object.entries(agents)) {
47
51
  agent.update(name, (item) => {
48
52
  item.description = def.description;
49
53
  item.mode = def.mode;
50
- item.prompt =
54
+ item.system =
51
55
  name === "team-lead"
52
- ? def.prompt + blackboardNote(boardRoot, ttlDays)
53
- : def.prompt;
56
+ ? (def.system ?? "") + blackboardNote(boardRoot, ttlDays)
57
+ : def.system;
54
58
  item.color = def.color;
59
+ // Authoritative v2 ruleset — overrides any stale file-based agent
60
+ // definition that might deny blackboard writes.
61
+ if (def.permissions)
62
+ item.permissions = def.permissions;
55
63
  });
56
64
  }
57
65
  });
58
- // ---------- inject team commands ----------
66
+ // ---------- inject team commands (v2 CommandV2Info fields) ----------
59
67
  await ctx.command.transform((command) => {
60
68
  for (const [name, def] of Object.entries(commands)) {
61
69
  command.update(name, (item) => {
70
+ item.name = name;
62
71
  item.description = def.description;
63
- item.template = def.template;
72
+ item.template = def.template ?? "";
64
73
  item.agent = def.agent;
65
74
  });
66
75
  }
67
76
  });
68
77
  },
69
- });
70
- export default Plugin;
78
+ };
79
+ export default plugin;
71
80
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,45 +1,81 @@
1
1
  /**
2
- * OpenCode v2 Plugin type definitions.
2
+ * OpenCode plugin type definitions (1.18.x dual-stack loader).
3
3
  *
4
- * These types match the v2 Promise plugin API used by OpenCode Desktop.
5
- * The v2 format requires an `id` field which controls the display name
6
- * shown in the Desktop UI.
4
+ * IMPORTANT: the current OpenCode Desktop loader validates plugins with the
5
+ * v1 schema (default export MUST have `server()`) while ALSO invoking an
6
+ * optional v2-style `setup(context)` on the same object. The only shape that
7
+ * actually loads is the hybrid:
8
+ *
9
+ * export default { id, server: async () => ({}), setup: async (ctx) => {} }
10
+ *
11
+ * A pure v2 `define({ id, setup })` export is REJECTED with
12
+ * "must default export an object with server()".
13
+ *
14
+ * v2 agent/command item shapes below are taken from
15
+ * @opencode-ai/sdk/v2/types (AgentV2Info / CommandV2Info).
7
16
  */
17
+ export type PermissionEffect = "allow" | "deny" | "ask";
18
+ export interface PermissionRule {
19
+ action: string;
20
+ resource: string;
21
+ effect: PermissionEffect;
22
+ }
23
+ export declare const RULE: (action: string, resource: string, effect: PermissionEffect) => PermissionRule;
8
24
  export interface AgentItem {
9
25
  description?: string;
26
+ /** "primary" shows in the Desktop agent switcher; sub-agents use "subagent". */
10
27
  mode?: "primary" | "subagent" | "all";
11
- prompt?: string;
12
- model?: string;
28
+ /** System prompt — v2 field name is `system`, NOT `prompt`. */
29
+ system?: string;
13
30
  color?: string;
14
31
  hidden?: boolean;
15
- permission?: Record<string, unknown>;
32
+ steps?: number;
33
+ temperature?: number;
34
+ /** v2 ruleset array — NOT the v1 permission object. */
35
+ permissions?: PermissionRule[];
16
36
  [key: string]: unknown;
17
37
  }
18
38
  export interface CommandItem {
39
+ name?: string;
19
40
  description?: string;
20
41
  template?: string;
21
42
  agent?: string;
22
- model?: string;
43
+ subtask?: boolean;
23
44
  [key: string]: unknown;
24
45
  }
25
- export interface TransformEditor<T> {
26
- update(name: string, updater: (item: T) => void): void;
46
+ export interface AgentDraft {
47
+ list(): readonly AgentItem[];
48
+ get(id: string): AgentItem | undefined;
49
+ default(id: string | undefined): void;
50
+ /** Upsert: creates the entry when missing, then applies the updater. */
51
+ update(id: string, update: (agent: AgentItem) => void): void;
52
+ remove(id: string): void;
53
+ }
54
+ export interface CommandDraft {
55
+ list(): readonly CommandItem[];
56
+ get(name: string): CommandItem | undefined;
57
+ update(name: string, update: (command: CommandItem) => void): void;
58
+ remove(name: string): void;
27
59
  }
28
60
  export interface PluginContext {
29
61
  agent: {
30
- transform<T = void>(callback: (editor: TransformEditor<AgentItem>) => T | Promise<T>): Promise<T>;
62
+ transform<T>(cb: (draft: AgentDraft) => T | Promise<T>): Promise<T | undefined>;
31
63
  reload(): Promise<void>;
32
64
  };
33
65
  command: {
34
- transform<T = void>(callback: (editor: TransformEditor<CommandItem>) => T | Promise<T>): Promise<T>;
66
+ transform<T>(cb: (draft: CommandDraft) => T | Promise<T>): Promise<T | undefined>;
35
67
  reload(): Promise<void>;
36
68
  };
37
69
  options?: Record<string, unknown>;
70
+ directory?: string;
71
+ project?: string;
38
72
  [key: string]: unknown;
39
73
  }
40
- export interface PluginDefinition {
74
+ export interface OpenCodePlugin {
41
75
  readonly id: string;
76
+ /** v1 loader gate: MUST exist. Return the (empty) v1 hooks object. */
77
+ readonly server: () => Promise<Record<string, unknown>>;
78
+ /** v2 domain injection: the real payload. */
42
79
  readonly setup: (ctx: PluginContext) => Promise<void>;
43
80
  }
44
- export declare function define(plugin: PluginDefinition): PluginDefinition;
45
81
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,KAAK,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,SAAS,CAAC,CAAC,GAAG,IAAI,EAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC/D,OAAO,CAAC,CAAC,CAAC,CAAA;QACb,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KACxB,CAAA;IACD,OAAO,EAAE;QACP,SAAS,CAAC,CAAC,GAAG,IAAI,EAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACjE,OAAO,CAAC,CAAC,CAAC,CAAA;QACb,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KACxB,CAAA;IACD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAID,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtD;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAEjE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,11 +1,18 @@
1
1
  /**
2
- * OpenCode v2 Plugin type definitions.
2
+ * OpenCode plugin type definitions (1.18.x dual-stack loader).
3
3
  *
4
- * These types match the v2 Promise plugin API used by OpenCode Desktop.
5
- * The v2 format requires an `id` field which controls the display name
6
- * shown in the Desktop UI.
4
+ * IMPORTANT: the current OpenCode Desktop loader validates plugins with the
5
+ * v1 schema (default export MUST have `server()`) while ALSO invoking an
6
+ * optional v2-style `setup(context)` on the same object. The only shape that
7
+ * actually loads is the hybrid:
8
+ *
9
+ * export default { id, server: async () => ({}), setup: async (ctx) => {} }
10
+ *
11
+ * A pure v2 `define({ id, setup })` export is REJECTED with
12
+ * "must default export an object with server()".
13
+ *
14
+ * v2 agent/command item shapes below are taken from
15
+ * @opencode-ai/sdk/v2/types (AgentV2Info / CommandV2Info).
7
16
  */
8
- export function define(plugin) {
9
- return plugin;
10
- }
17
+ export const RULE = (action, resource, effect) => ({ action, resource, effect });
11
18
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmDH,MAAM,UAAU,MAAM,CAAC,MAAwB;IAC7C,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,MAAc,EACd,QAAgB,EAChB,MAAwB,EACR,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@te-river/opencode-team-mode",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Team collaboration mode plugin for OpenCode Desktop — injects specialized agents (architect, reviewer, implementer, tester, researcher) and team workflow commands into your OpenCode workspace.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",