@te-river/opencode-team-mode 1.2.1 → 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/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +41 -25
- package/dist/agents.js.map +1 -1
- package/dist/index.d.ts +11 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -19
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +50 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -7
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/agents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
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,6 +15,7 @@
|
|
|
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";
|
|
18
19
|
/* ------------------------------------------------------------------ */
|
|
19
20
|
/* Blackboard write guarantee (appended to every specialist prompt) */
|
|
20
21
|
/* ------------------------------------------------------------------ */
|
|
@@ -36,13 +37,13 @@ const BLACKBOARD_GUARANTEE = `
|
|
|
36
37
|
/* Team Lead — orchestrator */
|
|
37
38
|
/* ------------------------------------------------------------------ */
|
|
38
39
|
const teamLead = {
|
|
39
|
-
mode: "
|
|
40
|
+
mode: "primary",
|
|
40
41
|
description: "Team lead orchestrator — decomposes complex tasks, dispatches sub-agents " +
|
|
41
42
|
"(architect, implementer, reviewer, tester, researcher), enforces a " +
|
|
42
43
|
"review/test feedback loop, and synthesises their outputs into a coherent " +
|
|
43
44
|
"deliverable. Use when the task requires multi-step collaboration across " +
|
|
44
45
|
"different expertise areas.",
|
|
45
|
-
|
|
46
|
+
system: `You are the **Team Lead** in a multi-agent coding team.
|
|
46
47
|
|
|
47
48
|
## Role
|
|
48
49
|
You orchestrate the team: decompose work, dispatch it to specialist agents
|
|
@@ -150,13 +151,12 @@ adoption:
|
|
|
150
151
|
- Your final output is a structured summary, not raw agent transcripts.
|
|
151
152
|
`,
|
|
152
153
|
color: "#E879F9", // purple
|
|
153
|
-
|
|
154
|
-
edit
|
|
155
|
-
bash
|
|
156
|
-
webfetch
|
|
157
|
-
task
|
|
158
|
-
|
|
159
|
-
},
|
|
154
|
+
permissions: [
|
|
155
|
+
RULE("edit", "*", "allow"),
|
|
156
|
+
RULE("bash", "*", "allow"),
|
|
157
|
+
RULE("webfetch", "*", "allow"),
|
|
158
|
+
RULE("task", "*", "allow"),
|
|
159
|
+
],
|
|
160
160
|
};
|
|
161
161
|
/* ------------------------------------------------------------------ */
|
|
162
162
|
/* Architect */
|
|
@@ -167,7 +167,7 @@ const architect = {
|
|
|
167
167
|
"and technical strategy; revises designs when review or testing exposes a " +
|
|
168
168
|
"flaw. Use when you need a design doc, architecture decision record, or " +
|
|
169
169
|
"module breakdown before implementation.",
|
|
170
|
-
|
|
170
|
+
system: `You are the **Architect** on a multi-agent coding team.
|
|
171
171
|
|
|
172
172
|
## Role
|
|
173
173
|
You produce clear, implementable technical designs. You think in systems:
|
|
@@ -206,7 +206,11 @@ When the team lead sends back a design flaw found in review or testing:
|
|
|
206
206
|
color: "#38BDF8", // sky blue
|
|
207
207
|
// Read-only on PROJECT sources; the blackboard artifact is explicitly
|
|
208
208
|
// writable (see Blackboard write guarantee).
|
|
209
|
-
|
|
209
|
+
permissions: [
|
|
210
|
+
RULE("edit", "*", "allow"),
|
|
211
|
+
RULE("bash", "*", "deny"),
|
|
212
|
+
RULE("webfetch", "*", "allow"),
|
|
213
|
+
],
|
|
210
214
|
};
|
|
211
215
|
/* ------------------------------------------------------------------ */
|
|
212
216
|
/* Implementer */
|
|
@@ -216,7 +220,7 @@ const implementer = {
|
|
|
216
220
|
description: "Core implementer — writes production code, creates files, and builds " +
|
|
217
221
|
"features according to the architect's design; applies review-driven fix " +
|
|
218
222
|
"tasks. Use when you need clean, working code written quickly.",
|
|
219
|
-
|
|
223
|
+
system: `You are the **Implementer** on a multi-agent coding team.
|
|
220
224
|
|
|
221
225
|
## Role
|
|
222
226
|
You write clean, production-quality code following the design spec handed
|
|
@@ -249,7 +253,11 @@ to you by the team lead.
|
|
|
249
253
|
check, the previously failing test).
|
|
250
254
|
`,
|
|
251
255
|
color: "#4ADE80", // green
|
|
252
|
-
|
|
256
|
+
permissions: [
|
|
257
|
+
RULE("edit", "*", "allow"),
|
|
258
|
+
RULE("bash", "*", "allow"),
|
|
259
|
+
RULE("webfetch", "*", "allow"),
|
|
260
|
+
],
|
|
253
261
|
};
|
|
254
262
|
/* ------------------------------------------------------------------ */
|
|
255
263
|
/* Reviewer */
|
|
@@ -259,7 +267,7 @@ const reviewer = {
|
|
|
259
267
|
description: "Code reviewer — audits code for correctness, performance, security, " +
|
|
260
268
|
"maintainability, and best practices with severity-graded, actionable " +
|
|
261
269
|
"findings. Use when you want a thorough review before merging.",
|
|
262
|
-
|
|
270
|
+
system: `You are the **Reviewer** on a multi-agent coding team.
|
|
263
271
|
|
|
264
272
|
## Role
|
|
265
273
|
You perform thorough, constructive code reviews. You catch bugs, security
|
|
@@ -302,7 +310,11 @@ by item (fixed / not fixed / partial).
|
|
|
302
310
|
color: "#FB923C", // orange
|
|
303
311
|
// May edit ONLY the blackboard artifact; never the reviewed code
|
|
304
312
|
// (see Blackboard write guarantee + role rules).
|
|
305
|
-
|
|
313
|
+
permissions: [
|
|
314
|
+
RULE("edit", "*", "allow"),
|
|
315
|
+
RULE("bash", "*", "allow"),
|
|
316
|
+
RULE("webfetch", "*", "allow"),
|
|
317
|
+
],
|
|
306
318
|
};
|
|
307
319
|
/* ------------------------------------------------------------------ */
|
|
308
320
|
/* Tester */
|
|
@@ -312,7 +324,7 @@ const tester = {
|
|
|
312
324
|
description: "Test engineer — writes and runs unit/integration tests, classifies " +
|
|
313
325
|
"failures (product bug vs bad test vs environment), and reports a clear " +
|
|
314
326
|
"verdict. Use to validate correctness or raise coverage.",
|
|
315
|
-
|
|
327
|
+
system: `You are the **Tester** on a multi-agent coding team.
|
|
316
328
|
|
|
317
329
|
## Role
|
|
318
330
|
You write comprehensive, maintainable tests and give the team a trustworthy
|
|
@@ -352,7 +364,11 @@ pass/fail signal.
|
|
|
352
364
|
refactor instead of contorting the test.
|
|
353
365
|
`,
|
|
354
366
|
color: "#F472B6", // pink
|
|
355
|
-
|
|
367
|
+
permissions: [
|
|
368
|
+
RULE("edit", "*", "allow"),
|
|
369
|
+
RULE("bash", "*", "allow"),
|
|
370
|
+
RULE("webfetch", "*", "allow"),
|
|
371
|
+
],
|
|
356
372
|
};
|
|
357
373
|
/* ------------------------------------------------------------------ */
|
|
358
374
|
/* Researcher */
|
|
@@ -363,7 +379,7 @@ const researcher = {
|
|
|
363
379
|
"documentation; every finding carries a source and confidence tag so " +
|
|
364
380
|
"the team can decide what needs verification. Use for information that " +
|
|
365
381
|
"must inform a technical decision.",
|
|
366
|
-
|
|
382
|
+
system: `You are the **Researcher** on a multi-agent coding team.
|
|
367
383
|
|
|
368
384
|
## Role
|
|
369
385
|
You find accurate, actionable information so the team can make informed
|
|
@@ -399,16 +415,16 @@ by the team — flag prominently if that is the case.
|
|
|
399
415
|
- State which product/version each finding applies to.
|
|
400
416
|
`,
|
|
401
417
|
color: "#A78BFA", // violet
|
|
402
|
-
|
|
403
|
-
edit
|
|
404
|
-
bash
|
|
405
|
-
webfetch
|
|
406
|
-
websearch
|
|
407
|
-
|
|
418
|
+
permissions: [
|
|
419
|
+
RULE("edit", "*", "allow"),
|
|
420
|
+
RULE("bash", "*", "allow"),
|
|
421
|
+
RULE("webfetch", "*", "allow"),
|
|
422
|
+
RULE("websearch", "*", "allow"),
|
|
423
|
+
],
|
|
408
424
|
};
|
|
409
425
|
/* Append the blackboard write guarantee to every specialist prompt. */
|
|
410
426
|
for (const a of [architect, implementer, reviewer, tester, researcher]) {
|
|
411
|
-
a.
|
|
427
|
+
a.system = (a.system ?? "") + BLACKBOARD_GUARANTEE;
|
|
412
428
|
}
|
|
413
429
|
/* ------------------------------------------------------------------ */
|
|
414
430
|
/* Export all agents keyed by name */
|
package/dist/agents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* opencode-team-mode — OpenCode
|
|
2
|
+
* opencode-team-mode — OpenCode plugin entry point.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
-
|
|
13
|
-
|
|
15
|
+
import type { OpenCodePlugin } from "./types.js";
|
|
16
|
+
declare const plugin: OpenCodePlugin;
|
|
17
|
+
export default plugin;
|
|
14
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
2
|
+
* opencode-team-mode — OpenCode plugin entry point.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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,43 +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
|
-
|
|
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.
|
|
54
|
+
item.system =
|
|
51
55
|
name === "team-lead"
|
|
52
|
-
? def.
|
|
53
|
-
: def.
|
|
56
|
+
? (def.system ?? "") + blackboardNote(boardRoot, ttlDays)
|
|
57
|
+
: def.system;
|
|
54
58
|
item.color = def.color;
|
|
55
|
-
// Authoritative
|
|
56
|
-
//
|
|
57
|
-
if (def.
|
|
58
|
-
item.
|
|
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;
|
|
59
63
|
});
|
|
60
64
|
}
|
|
61
65
|
});
|
|
62
|
-
// ---------- inject team commands ----------
|
|
66
|
+
// ---------- inject team commands (v2 CommandV2Info fields) ----------
|
|
63
67
|
await ctx.command.transform((command) => {
|
|
64
68
|
for (const [name, def] of Object.entries(commands)) {
|
|
65
69
|
command.update(name, (item) => {
|
|
70
|
+
item.name = name;
|
|
66
71
|
item.description = def.description;
|
|
67
|
-
item.template = def.template;
|
|
72
|
+
item.template = def.template ?? "";
|
|
68
73
|
item.agent = def.agent;
|
|
69
74
|
});
|
|
70
75
|
}
|
|
71
76
|
});
|
|
72
77
|
},
|
|
73
|
-
}
|
|
74
|
-
export default
|
|
78
|
+
};
|
|
79
|
+
export default plugin;
|
|
75
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":"AAAA
|
|
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
|
|
2
|
+
* OpenCode plugin type definitions (1.18.x dual-stack loader).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
12
|
-
|
|
28
|
+
/** System prompt — v2 field name is `system`, NOT `prompt`. */
|
|
29
|
+
system?: string;
|
|
13
30
|
color?: string;
|
|
14
31
|
hidden?: boolean;
|
|
15
|
-
|
|
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
|
-
|
|
43
|
+
subtask?: boolean;
|
|
23
44
|
[key: string]: unknown;
|
|
24
45
|
}
|
|
25
|
-
export interface
|
|
26
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
2
|
+
* OpenCode plugin type definitions (1.18.x dual-stack loader).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
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
|
|
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.
|
|
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",
|