@te-river/opencode-team-mode 1.6.0 → 1.6.2

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.
Files changed (150) hide show
  1. package/README.md +80 -15
  2. package/README.zh-CN.md +67 -18
  3. package/dist/host/note.d.ts +7 -0
  4. package/dist/host/note.d.ts.map +1 -0
  5. package/dist/host/note.js +31 -0
  6. package/dist/host/note.js.map +1 -0
  7. package/dist/host/v1.d.ts +14 -0
  8. package/dist/host/v1.d.ts.map +1 -0
  9. package/dist/host/v1.js +340 -0
  10. package/dist/host/v1.js.map +1 -0
  11. package/dist/host/v2-browser-gate.d.ts +45 -0
  12. package/dist/host/v2-browser-gate.d.ts.map +1 -0
  13. package/dist/host/v2-browser-gate.js +319 -0
  14. package/dist/host/v2-browser-gate.js.map +1 -0
  15. package/dist/host/v2-capabilities.d.ts +78 -0
  16. package/dist/host/v2-capabilities.d.ts.map +1 -0
  17. package/dist/host/v2-capabilities.js +173 -0
  18. package/dist/host/v2-capabilities.js.map +1 -0
  19. package/dist/host/v2-client.d.ts +53 -0
  20. package/dist/host/v2-client.d.ts.map +1 -0
  21. package/dist/host/v2-client.js +193 -0
  22. package/dist/host/v2-client.js.map +1 -0
  23. package/dist/host/v2-events.d.ts +56 -0
  24. package/dist/host/v2-events.d.ts.map +1 -0
  25. package/dist/host/v2-events.js +158 -0
  26. package/dist/host/v2-events.js.map +1 -0
  27. package/dist/host/v2-guard.d.ts +101 -0
  28. package/dist/host/v2-guard.d.ts.map +1 -0
  29. package/dist/host/v2-guard.js +199 -0
  30. package/dist/host/v2-guard.js.map +1 -0
  31. package/dist/host/v2-offload.d.ts +148 -0
  32. package/dist/host/v2-offload.d.ts.map +1 -0
  33. package/dist/host/v2-offload.js +288 -0
  34. package/dist/host/v2-offload.js.map +1 -0
  35. package/dist/host/v2-permissions.d.ts +123 -0
  36. package/dist/host/v2-permissions.d.ts.map +1 -0
  37. package/dist/host/v2-permissions.js +190 -0
  38. package/dist/host/v2-permissions.js.map +1 -0
  39. package/dist/host/v2-probe.d.ts +85 -0
  40. package/dist/host/v2-probe.d.ts.map +1 -0
  41. package/dist/host/v2-probe.js +268 -0
  42. package/dist/host/v2-probe.js.map +1 -0
  43. package/dist/host/v2-scope.d.ts +51 -0
  44. package/dist/host/v2-scope.d.ts.map +1 -0
  45. package/dist/host/v2-scope.js +58 -0
  46. package/dist/host/v2-scope.js.map +1 -0
  47. package/dist/host/v2-session-client.d.ts +105 -0
  48. package/dist/host/v2-session-client.d.ts.map +1 -0
  49. package/dist/host/v2-session-client.js +390 -0
  50. package/dist/host/v2-session-client.js.map +1 -0
  51. package/dist/host/v2-session.d.ts +85 -0
  52. package/dist/host/v2-session.d.ts.map +1 -0
  53. package/dist/host/v2-session.js +171 -0
  54. package/dist/host/v2-session.js.map +1 -0
  55. package/dist/host/v2-subagent.d.ts +157 -0
  56. package/dist/host/v2-subagent.d.ts.map +1 -0
  57. package/dist/host/v2-subagent.js +286 -0
  58. package/dist/host/v2-subagent.js.map +1 -0
  59. package/dist/host/v2-tool.d.ts +67 -0
  60. package/dist/host/v2-tool.d.ts.map +1 -0
  61. package/dist/host/v2-tool.js +209 -0
  62. package/dist/host/v2-tool.js.map +1 -0
  63. package/dist/host/v2-transcript.d.ts +73 -0
  64. package/dist/host/v2-transcript.d.ts.map +1 -0
  65. package/dist/host/v2-transcript.js +151 -0
  66. package/dist/host/v2-transcript.js.map +1 -0
  67. package/dist/host/v2-types.d.ts +229 -0
  68. package/dist/host/v2-types.d.ts.map +1 -0
  69. package/dist/host/v2-types.js +17 -0
  70. package/dist/host/v2-types.js.map +1 -0
  71. package/dist/host/v2.d.ts +42 -0
  72. package/dist/host/v2.d.ts.map +1 -0
  73. package/dist/host/v2.js +853 -0
  74. package/dist/host/v2.js.map +1 -0
  75. package/dist/index.d.ts +23 -17
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +29 -366
  78. package/dist/index.js.map +1 -1
  79. package/dist/prompts/lead.d.ts +1 -1
  80. package/dist/prompts/lead.d.ts.map +1 -1
  81. package/dist/prompts/lead.js +456 -426
  82. package/dist/prompts/lead.js.map +1 -1
  83. package/dist/prompts/shared.d.ts +2 -2
  84. package/dist/prompts/shared.d.ts.map +1 -1
  85. package/dist/prompts/shared.js +38 -11
  86. package/dist/prompts/shared.js.map +1 -1
  87. package/dist/prompts/specialists.d.ts +2 -2
  88. package/dist/prompts/specialists.d.ts.map +1 -1
  89. package/dist/prompts/specialists.js +7 -6
  90. package/dist/prompts/specialists.js.map +1 -1
  91. package/dist/task-offload.d.ts +16 -0
  92. package/dist/task-offload.d.ts.map +1 -1
  93. package/dist/task-offload.js +51 -0
  94. package/dist/task-offload.js.map +1 -1
  95. package/dist/tm/browser.d.ts.map +1 -1
  96. package/dist/tm/browser.js +41 -10
  97. package/dist/tm/browser.js.map +1 -1
  98. package/dist/tm/dispatch.d.ts +86 -1
  99. package/dist/tm/dispatch.d.ts.map +1 -1
  100. package/dist/tm/dispatch.js +360 -39
  101. package/dist/tm/dispatch.js.map +1 -1
  102. package/dist/tm/dupe-guard.d.ts +16 -3
  103. package/dist/tm/dupe-guard.d.ts.map +1 -1
  104. package/dist/tm/dupe-guard.js +27 -7
  105. package/dist/tm/dupe-guard.js.map +1 -1
  106. package/dist/tm/index.d.ts +40 -1
  107. package/dist/tm/index.d.ts.map +1 -1
  108. package/dist/tm/index.js +40 -11
  109. package/dist/tm/index.js.map +1 -1
  110. package/dist/tm/ledger.d.ts +114 -0
  111. package/dist/tm/ledger.d.ts.map +1 -0
  112. package/dist/tm/ledger.js +308 -0
  113. package/dist/tm/ledger.js.map +1 -0
  114. package/dist/tm/perm-ask.d.ts +1 -3
  115. package/dist/tm/perm-ask.d.ts.map +1 -1
  116. package/dist/tm/perm-ask.js +10 -1
  117. package/dist/tm/perm-ask.js.map +1 -1
  118. package/dist/tm/preview.d.ts +55 -0
  119. package/dist/tm/preview.d.ts.map +1 -1
  120. package/dist/tm/preview.js +225 -0
  121. package/dist/tm/preview.js.map +1 -1
  122. package/dist/tm/search.d.ts.map +1 -1
  123. package/dist/tm/search.js +40 -10
  124. package/dist/tm/search.js.map +1 -1
  125. package/dist/tm/serp-loop.d.ts +45 -0
  126. package/dist/tm/serp-loop.d.ts.map +1 -0
  127. package/dist/tm/serp-loop.js +80 -0
  128. package/dist/tm/serp-loop.js.map +1 -0
  129. package/dist/tm/stats.d.ts +29 -0
  130. package/dist/tm/stats.d.ts.map +1 -1
  131. package/dist/tm/stats.js +278 -4
  132. package/dist/tm/stats.js.map +1 -1
  133. package/dist/tm/webfetch.d.ts +4 -0
  134. package/dist/tm/webfetch.d.ts.map +1 -1
  135. package/dist/tm/webfetch.js +75 -8
  136. package/dist/tm/webfetch.js.map +1 -1
  137. package/docs/installation-v2.md +445 -0
  138. package/docs/installation.md +12 -0
  139. package/docs/research/agent-data-exchange.md +117 -0
  140. package/docs/research/browser-pane.md +89 -0
  141. package/docs/research/host-http-api.md +132 -0
  142. package/docs/research/host-subagent-injection.md +187 -0
  143. package/docs/research/plugin-loader-contract.md +261 -0
  144. package/docs/research/v2-builtin-tools.md +447 -0
  145. package/docs/v2-port-notes.md +413 -0
  146. package/index.js +7 -0
  147. package/package.json +64 -61
  148. package/scripts/gen-v2-config.mjs +304 -0
  149. package/scripts/lib/config-surgery.cjs +239 -0
  150. package/scripts/lib/fake-ctx.mjs +169 -0
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Hand-written structural types for the OpenCode v2 plugin surface.
3
+ *
4
+ * We deliberately do NOT import `@opencode/plugin`: it is a separate package
5
+ * from the v1 SDK, and a v2 SDK that becomes a runtime dependency would break
6
+ * the dual-personality export for every v1 user who cannot resolve it. The
7
+ * shapes below cover only the members this plugin actually touches, and they
8
+ * are transcribed from `@opencode/plugin@2.0.16/dist/promise/*.d.ts` plus two
9
+ * live-host probes (2026-09-25) — the probe is what proves `hook()` returns a
10
+ * disposable registration and that `execute.before` can really deny.
11
+ *
12
+ * Kept intentionally loose (`unknown` where we only pass values through): a
13
+ * type that is wider than the host's never fails a build, and every field we
14
+ * READ is read defensively because the host makes no stability promise.
15
+ */
16
+ export interface V2Registration {
17
+ readonly dispose: () => Promise<void>;
18
+ }
19
+ /** `Hooks<Spec>` in the SDK: register by name, get a disposable back. */
20
+ export type V2Hooks<Spec> = <Name extends keyof Spec>(name: Name, callback: (input: Spec[Name]) => Promise<void> | void) => Promise<V2Registration>;
21
+ /** `Transform<Input>` in the SDK: mutate an in-memory editor. */
22
+ export type V2Transform<Input> = (callback: (input: Input) => void) => Promise<V2Registration>;
23
+ export interface V2TextContent {
24
+ type: "text";
25
+ text: string;
26
+ }
27
+ export interface V2FileContent {
28
+ type: "file";
29
+ uri: string;
30
+ mime: string;
31
+ name?: string;
32
+ }
33
+ export type V2Content = V2TextContent | V2FileContent;
34
+ /**
35
+ * `Tool.Result`. A live probe measured the host's own rejection of the v1
36
+ * shape: returning `{output: "<text>"}` with no declared `output` schema came
37
+ * back as "Tool result declared output without an output schema" for all three
38
+ * probe tools — so this plugin's v2 adapters return `content` instead.
39
+ */
40
+ export interface V2ToolResult {
41
+ content?: string | ReadonlyArray<V2Content>;
42
+ metadata?: Record<string, unknown>;
43
+ }
44
+ export interface V2ToolContext {
45
+ readonly sessionID: string;
46
+ readonly agent: string;
47
+ readonly messageID?: string;
48
+ readonly id?: string;
49
+ readonly signal?: AbortSignal;
50
+ readonly progress?: (update: unknown) => Promise<void>;
51
+ }
52
+ export interface V2ToolInfo {
53
+ readonly name: string;
54
+ readonly description: string;
55
+ /** A JSON Schema object; the host also accepts zod/StandardSchema. */
56
+ readonly input: unknown;
57
+ readonly execute: (args: Record<string, unknown>, context: V2ToolContext) => Promise<V2ToolResult>;
58
+ readonly options?: {
59
+ readonly namespace?: string;
60
+ readonly permission?: string;
61
+ /**
62
+ * Read from the 2.0.16 binary, NOT from the SDK types (which have no such
63
+ * word): host-built tools carry `options:{codemode:false}` and a tool whose
64
+ * codemode is not false is offered only through the Code Mode catalog, where
65
+ * its description is cut to the first line. This is why a live Team session
66
+ * showed six tools and zero `tm_*` even though registration succeeded.
67
+ */
68
+ readonly codemode?: boolean;
69
+ };
70
+ }
71
+ export interface V2ToolEditor {
72
+ list(): ReadonlyArray<V2ToolInfo & {
73
+ id?: string;
74
+ }>;
75
+ get(id: string): (V2ToolInfo & {
76
+ id?: string;
77
+ }) | undefined;
78
+ add(tool: V2ToolInfo): void;
79
+ update?(id: string, update: (tool: V2ToolInfo) => void): void;
80
+ remove?(id: string): void;
81
+ namespace?(namespace: unknown): void;
82
+ }
83
+ export interface V2ToolExecuteBefore {
84
+ readonly tool: string;
85
+ readonly sessionID: string;
86
+ readonly agent?: string;
87
+ input: unknown;
88
+ }
89
+ export interface V2ToolExecuteAfter {
90
+ readonly tool: string;
91
+ readonly sessionID: string;
92
+ readonly agent?: string;
93
+ readonly status: "completed" | "error";
94
+ readonly result?: unknown;
95
+ readonly error?: unknown;
96
+ }
97
+ export interface V2ToolHooks {
98
+ readonly "execute.before": V2ToolExecuteBefore;
99
+ readonly "execute.after": V2ToolExecuteAfter;
100
+ }
101
+ export interface V2ToolDomain {
102
+ readonly transform: V2Transform<V2ToolEditor>;
103
+ readonly list: () => Promise<ReadonlyArray<V2ToolInfo & {
104
+ id?: string;
105
+ }>>;
106
+ readonly hook: V2Hooks<V2ToolHooks>;
107
+ readonly reload?: () => Promise<void>;
108
+ }
109
+ export interface V2PermissionRule {
110
+ readonly action: string;
111
+ readonly resource: string;
112
+ readonly effect: "allow" | "deny" | "ask";
113
+ }
114
+ export interface V2AgentInfo {
115
+ id?: string;
116
+ name?: string;
117
+ description?: string;
118
+ /** v2's spelling of v1's `prompt`. */
119
+ system?: string;
120
+ mode?: "subagent" | "primary" | "all";
121
+ hidden?: boolean;
122
+ color?: string;
123
+ permissions?: V2PermissionRule[];
124
+ [key: string]: unknown;
125
+ }
126
+ export interface V2AgentEditor {
127
+ list(): ReadonlyArray<V2AgentInfo>;
128
+ get(id: string): V2AgentInfo | undefined;
129
+ default(id: string | undefined): void;
130
+ update(id: string, update: (agent: V2AgentInfo) => void): void;
131
+ remove(id: string): void;
132
+ }
133
+ export interface V2AgentDomain {
134
+ readonly transform: V2Transform<V2AgentEditor>;
135
+ readonly list?: () => Promise<ReadonlyArray<V2AgentInfo>>;
136
+ }
137
+ /**
138
+ * `PermissionEvaluation` — `effect` is the mutable decision. A live probe saw
139
+ * the host itself produce `effect:"ask"` (for an out-of-workspace
140
+ * `external_directory` read) and publish `permission.asked` afterwards, so an
141
+ * `ask` written here is honored by a real dialog. Observed `action` values:
142
+ * `shell` / `read` / `edit` / `external_directory`, with `resources` carrying
143
+ * the concrete command line or path.
144
+ */
145
+ export interface V2PermissionEvaluation {
146
+ readonly sessionID: string;
147
+ readonly agent?: string;
148
+ readonly action: string;
149
+ readonly resources: ReadonlyArray<string>;
150
+ readonly metadata?: Record<string, unknown>;
151
+ effect: "allow" | "deny" | "ask";
152
+ message?: string;
153
+ }
154
+ export interface V2PermissionDomain {
155
+ readonly hook: V2Hooks<{
156
+ evaluate: V2PermissionEvaluation;
157
+ }>;
158
+ readonly list?: (input?: unknown) => Promise<unknown>;
159
+ readonly get?: (input?: unknown) => Promise<unknown>;
160
+ readonly reply?: (input?: unknown) => Promise<unknown>;
161
+ }
162
+ export interface V2SessionContext {
163
+ readonly agent?: string;
164
+ readonly system: unknown[];
165
+ readonly messages: unknown[];
166
+ readonly tools: Record<string, {
167
+ description: string;
168
+ input: unknown;
169
+ }>;
170
+ options: Record<string, unknown>;
171
+ }
172
+ export interface V2SessionHooks {
173
+ readonly context: V2SessionContext;
174
+ readonly compaction: V2SessionContext & {
175
+ result?: unknown;
176
+ };
177
+ }
178
+ export interface V2SessionDomain {
179
+ readonly hook: V2Hooks<V2SessionHooks>;
180
+ readonly [key: string]: unknown;
181
+ }
182
+ export interface V2ShellCreateBefore {
183
+ command: string;
184
+ cwd: string;
185
+ timeout: number;
186
+ shell: string;
187
+ env: Record<string, string | undefined>;
188
+ }
189
+ export interface V2ShellDomain {
190
+ readonly hook: V2Hooks<{
191
+ "create.before": V2ShellCreateBefore;
192
+ }>;
193
+ }
194
+ export interface V2StorageDomain {
195
+ readonly get: (key: string) => Promise<unknown>;
196
+ readonly set: (key: string, value: unknown) => Promise<void>;
197
+ readonly remove: (key: string) => Promise<void>;
198
+ readonly scan: (options: unknown) => Promise<unknown>;
199
+ }
200
+ export interface V2Event {
201
+ readonly type?: string;
202
+ readonly data?: unknown;
203
+ }
204
+ export interface V2Context {
205
+ readonly location?: {
206
+ readonly directory?: string;
207
+ readonly project?: {
208
+ readonly directory?: string;
209
+ readonly id?: string;
210
+ };
211
+ };
212
+ readonly options?: Record<string, unknown>;
213
+ readonly tool: V2ToolDomain;
214
+ readonly agent?: V2AgentDomain;
215
+ readonly permission?: V2PermissionDomain;
216
+ readonly session?: V2SessionDomain;
217
+ readonly shell?: V2ShellDomain;
218
+ readonly storage?: V2StorageDomain;
219
+ readonly event?: {
220
+ readonly subscribe: () => AsyncIterable<V2Event>;
221
+ };
222
+ readonly [key: string]: unknown;
223
+ }
224
+ export type V2Cleanup = () => Promise<void> | void;
225
+ export interface V2Plugin {
226
+ readonly id: string;
227
+ readonly setup: (ctx: V2Context) => Promise<V2Cleanup | void> | V2Cleanup | void;
228
+ }
229
+ //# sourceMappingURL=v2-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-types.d.ts","sourceRoot":"","sources":["../../src/host/v2-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Hand-written structural types for the OpenCode v2 plugin surface.
3
+ *
4
+ * We deliberately do NOT import `@opencode/plugin`: it is a separate package
5
+ * from the v1 SDK, and a v2 SDK that becomes a runtime dependency would break
6
+ * the dual-personality export for every v1 user who cannot resolve it. The
7
+ * shapes below cover only the members this plugin actually touches, and they
8
+ * are transcribed from `@opencode/plugin@2.0.16/dist/promise/*.d.ts` plus two
9
+ * live-host probes (2026-09-25) — the probe is what proves `hook()` returns a
10
+ * disposable registration and that `execute.before` can really deny.
11
+ *
12
+ * Kept intentionally loose (`unknown` where we only pass values through): a
13
+ * type that is wider than the host's never fails a build, and every field we
14
+ * READ is read defensively because the host makes no stability promise.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=v2-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-types.js","sourceRoot":"","sources":["../../src/host/v2-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The v2 personality: `Plugin.define({id, setup(ctx)})`.
3
+ *
4
+ * `Plugin.define` in @opencode/plugin@2.0.16 is literally `plugin => plugin`,
5
+ * so this module exports the plain object and the v2 SDK never becomes a
6
+ * runtime dependency — which is what keeps the dual-personality package
7
+ * installable by a v1 user who cannot resolve that package at all.
8
+ *
9
+ * Scope of this file (milestone M2): build the governed runtime on a
10
+ * filesystem-backed client shim, register the tm_* tools through
11
+ * `ctx.tool.transform`, and normalize the permission matrix onto the agents the
12
+ * CONFIG declares. It deliberately does NOT touch: the approval gate (#94), the
13
+ * session hooks / compaction / description appends (#93), or the browser
14
+ * (#95). Those need this seam proven live first.
15
+ *
16
+ * Two v1 behaviors do not carry over, and both absences are stated rather than
17
+ * discovered later:
18
+ * - creating agents: `AgentEditor` has no `add`, so the six roles must come
19
+ * from the user's config (the installer writes `agents/*.md`).
20
+ * - the conservative default-agent promotion: v1 read `cfg.default_agent` and
21
+ * only filled it when empty or "build". v2 exposes `default(id)` with NO
22
+ * getter, so "only if the user did not choose" is not expressible — the
23
+ * choice is between never promoting and promoting every boot. The user's
24
+ * standing instruction (2026-09-25) is that Team is ALWAYS the default, so
25
+ * this promotes unconditionally; `defaultAgent: false` in the plugin options
26
+ * opts out, exactly as on v1.
27
+ *
28
+ * The official confirmation dialog is absent as well, and for a different
29
+ * reason: probed on the live host, a plugin has no way to raise one.
30
+ * `askFnOf` therefore finds no bridge and every governed call fails closed with
31
+ * the v2-worded refusal set below.
32
+ */
33
+ import type { V2Plugin } from "./v2-types.js";
34
+ /** The refusal has to name the real reason: on v2 the absence is the new
35
+ * protocol, and "旧版协议" would send the model looking for an upgrade the
36
+ * user already installed. It must ALSO not point at a domain gate this
37
+ * personality no longer runs (the default is `"*"`), so the knob it names is
38
+ * the host's own permission config, and the address red line is excluded from
39
+ * "ask the user" because that one has no consent path at all. */
40
+ export declare const V2_NO_DIALOG_NOTE: string;
41
+ export declare const v2Personality: V2Plugin;
42
+ //# sourceMappingURL=v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2.d.ts","sourceRoot":"","sources":["../../src/host/v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAyBH,OAAO,KAAK,EAA0B,QAAQ,EAA8B,MAAM,eAAe,CAAA;AAEjG;;;;;kEAKkE;AAClE,eAAO,MAAM,iBAAiB,QAGmB,CAAA;AASjD,eAAO,MAAM,aAAa,EAAE,QAiyB3B,CAAA"}