@te-river/opencode-team-mode 1.5.15 → 1.6.1

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 (196) hide show
  1. package/README.md +853 -690
  2. package/README.zh-CN.md +761 -631
  3. package/dist/agents.d.ts +5 -3
  4. package/dist/agents.d.ts.map +1 -1
  5. package/dist/agents.js +19 -8
  6. package/dist/agents.js.map +1 -1
  7. package/dist/capabilities.d.ts +1 -1
  8. package/dist/capabilities.js +2 -2
  9. package/dist/capabilities.js.map +1 -1
  10. package/dist/host/note.d.ts +7 -0
  11. package/dist/host/note.d.ts.map +1 -0
  12. package/dist/host/note.js +28 -0
  13. package/dist/host/note.js.map +1 -0
  14. package/dist/host/v1.d.ts +14 -0
  15. package/dist/host/v1.d.ts.map +1 -0
  16. package/dist/host/v1.js +340 -0
  17. package/dist/host/v1.js.map +1 -0
  18. package/dist/host/v2-browser-gate.d.ts +45 -0
  19. package/dist/host/v2-browser-gate.d.ts.map +1 -0
  20. package/dist/host/v2-browser-gate.js +319 -0
  21. package/dist/host/v2-browser-gate.js.map +1 -0
  22. package/dist/host/v2-capabilities.d.ts +68 -0
  23. package/dist/host/v2-capabilities.d.ts.map +1 -0
  24. package/dist/host/v2-capabilities.js +146 -0
  25. package/dist/host/v2-capabilities.js.map +1 -0
  26. package/dist/host/v2-client.d.ts +53 -0
  27. package/dist/host/v2-client.d.ts.map +1 -0
  28. package/dist/host/v2-client.js +193 -0
  29. package/dist/host/v2-client.js.map +1 -0
  30. package/dist/host/v2-events.d.ts +56 -0
  31. package/dist/host/v2-events.d.ts.map +1 -0
  32. package/dist/host/v2-events.js +158 -0
  33. package/dist/host/v2-events.js.map +1 -0
  34. package/dist/host/v2-guard.d.ts +101 -0
  35. package/dist/host/v2-guard.d.ts.map +1 -0
  36. package/dist/host/v2-guard.js +199 -0
  37. package/dist/host/v2-guard.js.map +1 -0
  38. package/dist/host/v2-offload.d.ts +148 -0
  39. package/dist/host/v2-offload.d.ts.map +1 -0
  40. package/dist/host/v2-offload.js +288 -0
  41. package/dist/host/v2-offload.js.map +1 -0
  42. package/dist/host/v2-permissions.d.ts +123 -0
  43. package/dist/host/v2-permissions.d.ts.map +1 -0
  44. package/dist/host/v2-permissions.js +190 -0
  45. package/dist/host/v2-permissions.js.map +1 -0
  46. package/dist/host/v2-probe.d.ts +85 -0
  47. package/dist/host/v2-probe.d.ts.map +1 -0
  48. package/dist/host/v2-probe.js +268 -0
  49. package/dist/host/v2-probe.js.map +1 -0
  50. package/dist/host/v2-scope.d.ts +51 -0
  51. package/dist/host/v2-scope.d.ts.map +1 -0
  52. package/dist/host/v2-scope.js +58 -0
  53. package/dist/host/v2-scope.js.map +1 -0
  54. package/dist/host/v2-session-client.d.ts +74 -0
  55. package/dist/host/v2-session-client.d.ts.map +1 -0
  56. package/dist/host/v2-session-client.js +171 -0
  57. package/dist/host/v2-session-client.js.map +1 -0
  58. package/dist/host/v2-session.d.ts +85 -0
  59. package/dist/host/v2-session.d.ts.map +1 -0
  60. package/dist/host/v2-session.js +171 -0
  61. package/dist/host/v2-session.js.map +1 -0
  62. package/dist/host/v2-subagent.d.ts +157 -0
  63. package/dist/host/v2-subagent.d.ts.map +1 -0
  64. package/dist/host/v2-subagent.js +286 -0
  65. package/dist/host/v2-subagent.js.map +1 -0
  66. package/dist/host/v2-tool.d.ts +67 -0
  67. package/dist/host/v2-tool.d.ts.map +1 -0
  68. package/dist/host/v2-tool.js +209 -0
  69. package/dist/host/v2-tool.js.map +1 -0
  70. package/dist/host/v2-transcript.d.ts +73 -0
  71. package/dist/host/v2-transcript.d.ts.map +1 -0
  72. package/dist/host/v2-transcript.js +151 -0
  73. package/dist/host/v2-transcript.js.map +1 -0
  74. package/dist/host/v2-types.d.ts +229 -0
  75. package/dist/host/v2-types.d.ts.map +1 -0
  76. package/dist/host/v2-types.js +17 -0
  77. package/dist/host/v2-types.js.map +1 -0
  78. package/dist/host/v2.d.ts +42 -0
  79. package/dist/host/v2.d.ts.map +1 -0
  80. package/dist/host/v2.js +706 -0
  81. package/dist/host/v2.js.map +1 -0
  82. package/dist/host-hooks.d.ts +13 -2
  83. package/dist/host-hooks.d.ts.map +1 -1
  84. package/dist/host-hooks.js +18 -5
  85. package/dist/host-hooks.js.map +1 -1
  86. package/dist/index.d.ts +23 -17
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +29 -326
  89. package/dist/index.js.map +1 -1
  90. package/dist/prompts/lead.d.ts +1 -1
  91. package/dist/prompts/lead.d.ts.map +1 -1
  92. package/dist/prompts/lead.js +452 -359
  93. package/dist/prompts/lead.js.map +1 -1
  94. package/dist/prompts/shared.d.ts +2 -2
  95. package/dist/prompts/shared.d.ts.map +1 -1
  96. package/dist/prompts/shared.js +89 -17
  97. package/dist/prompts/shared.js.map +1 -1
  98. package/dist/prompts/specialists.d.ts +2 -2
  99. package/dist/prompts/specialists.d.ts.map +1 -1
  100. package/dist/prompts/specialists.js +44 -10
  101. package/dist/prompts/specialists.js.map +1 -1
  102. package/dist/task-offload.d.ts +83 -0
  103. package/dist/task-offload.d.ts.map +1 -0
  104. package/dist/task-offload.js +174 -0
  105. package/dist/task-offload.js.map +1 -0
  106. package/dist/tm/args-schema.d.ts +4 -0
  107. package/dist/tm/args-schema.d.ts.map +1 -1
  108. package/dist/tm/args-schema.js +36 -3
  109. package/dist/tm/args-schema.js.map +1 -1
  110. package/dist/tm/board.d.ts +113 -0
  111. package/dist/tm/board.d.ts.map +1 -0
  112. package/dist/tm/board.js +275 -0
  113. package/dist/tm/board.js.map +1 -0
  114. package/dist/tm/browser.d.ts +325 -6
  115. package/dist/tm/browser.d.ts.map +1 -1
  116. package/dist/tm/browser.js +1360 -135
  117. package/dist/tm/browser.js.map +1 -1
  118. package/dist/tm/config.d.ts +36 -25
  119. package/dist/tm/config.d.ts.map +1 -1
  120. package/dist/tm/config.js +29 -7
  121. package/dist/tm/config.js.map +1 -1
  122. package/dist/tm/dispatch.d.ts +133 -53
  123. package/dist/tm/dispatch.d.ts.map +1 -1
  124. package/dist/tm/dispatch.js +481 -279
  125. package/dist/tm/dispatch.js.map +1 -1
  126. package/dist/tm/dupe-guard.d.ts +16 -3
  127. package/dist/tm/dupe-guard.d.ts.map +1 -1
  128. package/dist/tm/dupe-guard.js +27 -7
  129. package/dist/tm/dupe-guard.js.map +1 -1
  130. package/dist/tm/egress.d.ts +44 -0
  131. package/dist/tm/egress.d.ts.map +1 -0
  132. package/dist/tm/egress.js +191 -0
  133. package/dist/tm/egress.js.map +1 -0
  134. package/dist/tm/guard.js +1 -1
  135. package/dist/tm/guard.js.map +1 -1
  136. package/dist/tm/index.d.ts +67 -2
  137. package/dist/tm/index.d.ts.map +1 -1
  138. package/dist/tm/index.js +228 -20
  139. package/dist/tm/index.js.map +1 -1
  140. package/dist/tm/ledger.d.ts +114 -0
  141. package/dist/tm/ledger.d.ts.map +1 -0
  142. package/dist/tm/ledger.js +308 -0
  143. package/dist/tm/ledger.js.map +1 -0
  144. package/dist/tm/perm-ask.d.ts +45 -5
  145. package/dist/tm/perm-ask.d.ts.map +1 -1
  146. package/dist/tm/perm-ask.js +107 -7
  147. package/dist/tm/perm-ask.js.map +1 -1
  148. package/dist/tm/pipelines.d.ts.map +1 -1
  149. package/dist/tm/pipelines.js +24 -2
  150. package/dist/tm/pipelines.js.map +1 -1
  151. package/dist/tm/preview.d.ts +55 -0
  152. package/dist/tm/preview.d.ts.map +1 -1
  153. package/dist/tm/preview.js +225 -0
  154. package/dist/tm/preview.js.map +1 -1
  155. package/dist/tm/ptc/tool.d.ts.map +1 -1
  156. package/dist/tm/ptc/tool.js +2 -4
  157. package/dist/tm/ptc/tool.js.map +1 -1
  158. package/dist/tm/pty.d.ts.map +1 -1
  159. package/dist/tm/pty.js +6 -3
  160. package/dist/tm/pty.js.map +1 -1
  161. package/dist/tm/search.d.ts +5 -0
  162. package/dist/tm/search.d.ts.map +1 -1
  163. package/dist/tm/search.js +40 -8
  164. package/dist/tm/search.js.map +1 -1
  165. package/dist/tm/serp-loop.d.ts +45 -0
  166. package/dist/tm/serp-loop.d.ts.map +1 -0
  167. package/dist/tm/serp-loop.js +80 -0
  168. package/dist/tm/serp-loop.js.map +1 -0
  169. package/dist/tm/stats.d.ts +26 -0
  170. package/dist/tm/stats.d.ts.map +1 -1
  171. package/dist/tm/stats.js +194 -4
  172. package/dist/tm/stats.js.map +1 -1
  173. package/dist/tm/webfetch.d.ts +56 -0
  174. package/dist/tm/webfetch.d.ts.map +1 -1
  175. package/dist/tm/webfetch.js +187 -19
  176. package/dist/tm/webfetch.js.map +1 -1
  177. package/dist/tool-coerce.d.ts +24 -0
  178. package/dist/tool-coerce.d.ts.map +1 -0
  179. package/dist/tool-coerce.js +63 -0
  180. package/dist/tool-coerce.js.map +1 -0
  181. package/dist/types.d.ts +7 -1
  182. package/dist/types.d.ts.map +1 -1
  183. package/docs/installation-v2.md +436 -0
  184. package/docs/installation.md +81 -2
  185. package/docs/research/agent-data-exchange.md +117 -0
  186. package/docs/research/browser-pane.md +89 -0
  187. package/docs/research/host-http-api.md +132 -0
  188. package/docs/research/host-subagent-injection.md +187 -0
  189. package/docs/research/plugin-loader-contract.md +261 -0
  190. package/docs/research/v2-builtin-tools.md +447 -0
  191. package/docs/v2-port-notes.md +315 -0
  192. package/index.js +7 -0
  193. package/package.json +4 -1
  194. package/scripts/gen-v2-config.mjs +304 -0
  195. package/scripts/lib/config-surgery.cjs +239 -0
  196. package/scripts/lib/fake-ctx.mjs +146 -0
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Plan B — the host's own background sub-agent, with our context governance.
3
+ *
4
+ * WHY THIS FILE EXISTS
5
+ * The built-in `task { background: true }` is the only sub-agent path the
6
+ * desktop can SHOW: its card links to the live child session, and on completion
7
+ * the host wakes the parent by prompting it with a synthetic text part holding
8
+ * the child's FULL reply (`TaskTool.injectBackgroundResult` → `renderOutput` →
9
+ * `ops.prompt({parts:[{type:"text", synthetic:true, text}]})`, read out of the
10
+ * desktop binary). Nothing a plugin returns can ever be that card — the
11
+ * renderer's registry holds only its own tool names.
12
+ *
13
+ * So we take the other half of the deal: the injection is a message arriving at
14
+ * the parent session, and `chat.message` hands plugins that message's `parts`
15
+ * array BEFORE the host persists them (the binary keeps iterating the same
16
+ * `resolvedParts` after the trigger). We swap an oversized body for a preview
17
+ * and a pointer, and the parent gets visibility + wake from the host while the
18
+ * full text stays out of the context window.
19
+ *
20
+ * WHAT THIS MUST NEVER DO
21
+ * Rewrite something the user typed. Three independent locks, all required:
22
+ * 1. `part.synthetic === true` — a typed message is never synthetic;
23
+ * 2. the text must match the host's own `<task id="…" state="completed">`
24
+ * envelope exactly, `<task_result>` included;
25
+ * 3. the body must exceed the same text-tier offload threshold every other
26
+ * governed result passes.
27
+ * Miss any one and the part is left byte-for-byte alone: a false negative costs
28
+ * a big message, a false positive silently deletes someone's content.
29
+ *
30
+ * NO DISK WRITE. The full text already lives in the child session — copying it
31
+ * into our store would put the user's most private payload (this is how the
32
+ * feature gets used) on disk for no gain. The pointer says: `tm_join {ids:[…]}`
33
+ * to pull it deliberately, or open the card.
34
+ */
35
+ import { buildPreview } from "./tm/preview.js";
36
+ import { estimateTokens } from "./tm/config.js";
37
+ /** The host's own wrapper — `renderOutput()` in the desktop binary. */
38
+ const ENVELOPE_RE = /^<task id="([^"]+)" state="completed">([\s\S]*)<\/task>$/;
39
+ const RESULT_RE = /<task_result>([\s\S]*)<\/task_result>/;
40
+ const SUMMARY_RE = /<summary>([\s\S]*?)<\/summary>/;
41
+ /** Parse the host's completed-task envelope; null when it is anything else. */
42
+ export function parseTaskEnvelope(text) {
43
+ if (typeof text !== "string")
44
+ return null;
45
+ const t = text.trim();
46
+ const env = ENVELOPE_RE.exec(t);
47
+ if (!env)
48
+ return null;
49
+ const inner = env[2] ?? "";
50
+ const res = RESULT_RE.exec(inner);
51
+ if (!res)
52
+ return null;
53
+ // The host joins its envelope lines with "\n", so the captured body carries
54
+ // the wrapper's newlines — they are not part of the reply.
55
+ const body = (res[1] ?? "").trim();
56
+ if (!body)
57
+ return null;
58
+ return {
59
+ sessionId: (env[1] ?? "").trim(),
60
+ summary: (SUMMARY_RE.exec(inner)?.[1] ?? "").trim(),
61
+ body,
62
+ };
63
+ }
64
+ /** The replacement: same envelope, same summary, preview + a way to the whole. */
65
+ export function renderOffloadedTask(env, preview, tokens, previewTokens) {
66
+ return [
67
+ `<task id="${env.sessionId}" state="completed">`,
68
+ ...(env.summary ? [`<summary>${env.summary}</summary>`] : []),
69
+ `<task_result tokens="${tokens}" delivered="preview-only">`,
70
+ preview,
71
+ ``,
72
+ `[TeamMode 上下文治理] 这条后台子任务的完整回复(约 ${tokens} token)没有进入本会话——`,
73
+ `它一个字都没丢,就在子会话 ${env.sessionId} 里。需要时二选一:`,
74
+ `① tm_join { ids: ["${env.sessionId}"] } 取回(可加 includeText:false 只看状态);`,
75
+ `② 在 UI 里点开这张 task 卡片,直接看那个子会话。`,
76
+ `只要上面这段就够回答的问题,不要为此多花一次往返。`,
77
+ `</task_result>`,
78
+ `</task>`,
79
+ ].join("\n");
80
+ }
81
+ /* --------------------------------------------------------------------------
82
+ * v2's envelope is a DIFFERENT SHAPE, and this is not a stylistic note: the
83
+ * v1 string `<task id=` occurs ZERO times in the 2.0.16 host binary, so a
84
+ * matcher written against it can never fire there. What v2 actually emits was
85
+ * read out of the host's own result mapping (read-only; nothing here assumes a
86
+ * doc said it):
87
+ * synchronous tool result -> `<subagent sessionID="X" state="completed">{output}</subagent>`
88
+ * background completion -> `<subagent sessionID="X" state="{status}" description="D">{text}</subagent>`
89
+ * Without this the honest reading of `task_envelopes: 0` was "no child reply
90
+ * was big enough" when the truth is "the matcher cannot see this host's
91
+ * format" -- the fail-loud rule applied to our own telemetry.
92
+ * ------------------------------------------------------------------------ */
93
+ const SUBAGENT_RE = /^<subagent\s+sessionID="([^"]*)"\s+state="([^"]*)"(?:\s+description="([^"]*)")?\s*>([\s\S]*?)<\/subagent>\s*$/;
94
+ /** Recognise either host spelling. Returns null for anything else, including a
95
+ * v2 envelope whose state is not a completed-looking word — an interrupted or
96
+ * failed child has nothing to offload, and rewriting it would hide why it failed. */
97
+ export function parseHostEnvelope(text) {
98
+ if (typeof text !== "string")
99
+ return null;
100
+ const t = text.trim();
101
+ const v1 = parseTaskEnvelope(t);
102
+ if (v1)
103
+ return { sessionId: v1.sessionId, state: "completed", description: "", body: v1.body, form: "v1-task" };
104
+ const m = SUBAGENT_RE.exec(t);
105
+ if (!m)
106
+ return null;
107
+ const state = (m[2] ?? "").trim();
108
+ if (state !== "completed")
109
+ return null;
110
+ const body = (m[4] ?? "").trim();
111
+ if (!body)
112
+ return null;
113
+ return { sessionId: (m[1] ?? "").trim(), state, description: (m[3] ?? "").trim(), body, form: "v2-subagent" };
114
+ }
115
+ /** The v2 replacement: SAME wrapper, same attributes, preview + a pointer in
116
+ * place of the body. The envelope is what the host and the UI key on, so it is
117
+ * reproduced rather than replaced by our own object. */
118
+ export function renderOffloadedSubagent(env, preview, tokens) {
119
+ const attrs = [`sessionID="${env.sessionId}"`, `state="${env.state}"`, ...(env.description ? [`description="${env.description}"`] : [])];
120
+ return [
121
+ `<subagent ${attrs.join(" ")}>`,
122
+ preview,
123
+ ``,
124
+ `[TeamMode 上下文治理] 这条子代理回复的全文(约 ${tokens} token)没有进入本会话——`,
125
+ `一个字都没丢,就在子会话 ${env.sessionId} 里。需要时二选一:`,
126
+ `① tm_join { ids: ["${env.sessionId}"] };② 在界面里点开这张子代理卡片直接看那个会话。`,
127
+ `只要上面那段预览就够回答的问题,不要为此再花一次往返。`,
128
+ `</subagent>`,
129
+ ].join(`
130
+ `);
131
+ }
132
+ export function createTaskOffload(deps) {
133
+ return (input, output) => {
134
+ try {
135
+ if (!deps.enabled)
136
+ return;
137
+ // A user-role message is what the injection is; never touch an assistant
138
+ // part, and never touch anything that is not a synthetic text part.
139
+ if (output?.message?.role !== "user")
140
+ return;
141
+ const parts = Array.isArray(output.parts) ? output.parts : [];
142
+ for (const part of parts) {
143
+ if (!part || part.type !== "text" || part.synthetic !== true)
144
+ continue;
145
+ const env = parseTaskEnvelope(part.text);
146
+ if (!env)
147
+ continue;
148
+ const tokens = estimateTokens(env.body);
149
+ const offload = tokens >= deps.thresholdTokens;
150
+ deps.log?.({
151
+ tool: "task_offload",
152
+ step_id: "chat.message",
153
+ event: "envelope",
154
+ action: offload ? "offloaded" : "passthrough",
155
+ session_id: input?.sessionID ?? "",
156
+ child: env.sessionId,
157
+ tokens,
158
+ threshold: deps.thresholdTokens,
159
+ });
160
+ if (!offload)
161
+ continue;
162
+ const preview = buildPreview(env.body, "text", {
163
+ lines: deps.previewLines,
164
+ maxTokens: deps.previewMaxTokens,
165
+ });
166
+ part.text = renderOffloadedTask(env, preview, tokens, estimateTokens(preview));
167
+ }
168
+ }
169
+ catch {
170
+ // A governance hook that throws would eat the message. Fail open, always.
171
+ }
172
+ };
173
+ }
174
+ //# sourceMappingURL=task-offload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-offload.js","sourceRoot":"","sources":["../src/task-offload.ts"],"names":[],"mappings":"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"}
@@ -69,4 +69,8 @@ export declare function buildMemoryArgsSchema(): Promise<Record<string, unknown>
69
69
  * is the fix, not a validation layer.
70
70
  */
71
71
  export declare function buildBrowserArgsSchema(): Promise<Record<string, unknown>>;
72
+ /** tm_board_write — four strings, and the shape of the PATH is the tool's
73
+ * business, not the model's (that is what makes it safe to hand a writer to a
74
+ * role that owns no file tool). */
75
+ export declare function buildBoardArgsSchema(): Promise<Record<string, unknown>>;
72
76
  //# sourceMappingURL=args-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"args-schema.d.ts","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoCH,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAuFlF;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAE3B;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2D3E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0ChF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2BlC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA+C9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiE/E"}
1
+ {"version":3,"file":"args-schema.d.ts","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuCH,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAuFlF;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAE3B;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2D3E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0ChF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2BlC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA+C9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyE/E;AACD;;oCAEoC;AACpC,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoB7E"}
@@ -9,6 +9,9 @@
9
9
  * times), even though flat args reached execute fine.
10
10
  */
11
11
  import { resolveTmConfig } from "./config.js";
12
+ // The browser verb list lives in ONE place (browser.ts). A second hand-written
13
+ // copy here is how a shipped verb went missing from the tool schema.
14
+ import { BROWSER_ACTION_MENU, BROWSER_PLAYWRIGHT_ACTIONS } from "./browser.js";
12
15
  /**
13
16
  * Load zod when the host environment provides it (opencode ships it as a
14
17
  * peer); fall back to plain arg descriptors so the plugin never hard-depends
@@ -283,11 +286,17 @@ export async function buildMemoryArgsSchema() {
283
286
  */
284
287
  export async function buildBrowserArgsSchema() {
285
288
  const z = await loadZod();
286
- const ACTION_LIST = "navigate_page | take_snapshot | click | fill | hover | drag | press_key | select_page | upload_file | wait_for | evaluate_script | list_console_messages | list_network_requests | list_pages | take_screenshot | handle_dialog (16 playwright verbs) | open | navigate | read | screenshot | close (compat verbs).";
289
+ // Derived from the action table itself (browser.ts) — the hand-written verb
290
+ // list here is how `new_page` and `close_page` went missing from the schema
291
+ // while the gate accepted them.
292
+ const ACTION_LIST = `${BROWSER_ACTION_MENU} (required) — the ${BROWSER_PLAYWRIGHT_ACTIONS.length} chrome-devtools-mcp verbs, ` +
293
+ `plus open|navigate|read|screenshot|close (compat) and allow_host (ask the user to un-block ONE script domain).`;
287
294
  if (!z) {
288
295
  return {
289
- action: { descriptor: `action: ${ACTION_LIST} (required)` },
290
- url: { descriptor: "url: string (open/navigate/navigate_page, allowlisted https)" },
296
+ action: { descriptor: `action: ${ACTION_LIST}` },
297
+ id: { descriptor: 'id: which browser ("b1" from open) — one per agent; required once more than one is live, another agent\'s id is refused' },
298
+ url: { descriptor: "url: string (open/navigate/navigate_page/new_page, allowlisted https)" },
299
+ host: { descriptor: "host: one bare domain for allow_host (no wildcards, no URL, no port)" },
291
300
  image: { descriptor: "image: true with take_screenshot — inline the PNG pixels in this result" },
292
301
  uid: { descriptor: "uid: snapshot [uid=eN] token (click/fill/hover/drag/upload_file/wait_for)" },
293
302
  selector: { descriptor: "selector: CSS/text locator escape hatch (only when a snapshot cannot express the node)" },
@@ -314,7 +323,9 @@ export async function buildBrowserArgsSchema() {
314
323
  const bool = (d) => zz.boolean().optional().describe(d);
315
324
  return {
316
325
  action: zz.string().describe(ACTION_LIST),
326
+ id: str('Which browser to drive — the id `open` returned ("b1"). Each agent gets its OWN browser: the id is required as soon as more than one is live, another agent\'s id is refused with the owner named, and close {id:"all"} closes all of yours.'),
317
327
  url: str("Absolute https URL on an allowlisted host (open/navigate/navigate_page). URL-encode the query (CJK terms too)."),
328
+ host: str("allow_host only: ONE bare domain whose script the subresource gate blocked (e.g. bkssl.bdimg.com). Wildcards/URLs/ports are refused — the user approves exactly this string."),
318
329
  image: bool("take_screenshot only: inline the PNG pixels into this tool result (default false = path only; pixels cost context, so ask only when the screenshot IS the evidence)."),
319
330
  uid: str("Snapshot [uid=eN] token from the LATEST take_snapshot (click/fill/hover/drag source/upload_file/wait_for)."),
320
331
  selector: str("CSS/text locator escape hatch — only for a node the snapshot cannot express; never guess locators."),
@@ -334,4 +345,26 @@ export async function buildBrowserArgsSchema() {
334
345
  fullPage: bool("take_screenshot captures the full page (default: viewport only)."),
335
346
  };
336
347
  }
348
+ /** tm_board_write — four strings, and the shape of the PATH is the tool's
349
+ * business, not the model's (that is what makes it safe to hand a writer to a
350
+ * role that owns no file tool). */
351
+ export async function buildBoardArgsSchema() {
352
+ const z = await loadZod();
353
+ if (!z) {
354
+ return {
355
+ task: { descriptor: "task: task-slug folder (required)" },
356
+ topic: { descriptor: "topic: file topic (required)" },
357
+ content: { descriptor: "content: the deliverable text (required)" },
358
+ session: { descriptor: "session: existing session-key folder (optional; stamped when omitted)" },
359
+ };
360
+ }
361
+ const zz = z;
362
+ const str = (d) => zz.string().optional().describe(d);
363
+ return {
364
+ task: zz.string().describe("Task-slug folder under the session — use the one the dispatch named (a new slug creates it). Path separators collapse to '-', so 'auth/design' becomes 'auth-design'."),
365
+ topic: zz.string().describe("What this file IS (design / report / findings). It becomes NN-<your-role>-<topic>.md; the NN and any -rN revision suffix are chosen here and a revision NEVER overwrites."),
366
+ content: zz.string().describe("The deliverable itself. It goes to disk and is NOT echoed back — after the write, the report carries the path this tool returns, never the text."),
367
+ session: str("The conversation's session-key folder. Pass the one the lead's dispatch named so every role writes into the same folder; omit it and this tool stamps yyyyMMdd-HHmmss for you."),
368
+ };
369
+ }
337
370
  //# sourceMappingURL=args-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"args-schema.js","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args-schema.js","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * tm_board_write — the write side of the blackboard (2026-09-23).
3
+ *
4
+ * Why it exists: the board is the one place an oversized deliverable is
5
+ * supposed to go, but reaching it needs a file tool — and three of the six
6
+ * roles carry none. `architect` and `researcher` have no write/edit/bash at
7
+ * all (a deliberate permission-matrix decision), so every "write the design
8
+ * doc to the board" dispatch ended as `BLACKBOARD WRITE FAILED` with the
9
+ * document pasted inline anyway — the reply shape this team exists to enforce
10
+ * (skeleton + path, never a wall of text) was un-followable for exactly the two
11
+ * roles that produce the longest artifacts. Even the documented session folder
12
+ * is out of reach: creating it means running `Get-Date`, which those roles
13
+ * cannot run either.
14
+ *
15
+ * What this is NOT: a general file writer. It places a NEW markdown file
16
+ * inside `<board-root>/<session-key>/<task-slug>/` and nothing else — no
17
+ * overwrite (a revision is a new `-rN` round, per the documented layout), no
18
+ * traversal (each segment is a sanitized slug, then realpath-verified against
19
+ * the root), no workspace or user paths, no `.env` family. The reply returns
20
+ * the path plus the byte count, never the content: bytes riding back through
21
+ * the context window is the very thing the board exists to avoid.
22
+ */
23
+ import type { ToolResult } from "../types.js";
24
+ import type { TmPipelines } from "./pipelines.js";
25
+ /** Content cap for one board file (characters). A deliverable past this is not
26
+ * a board file — it is two, or it is the wrong tool. */
27
+ export declare const BOARD_MAX_CONTENT_CHARS = 200000;
28
+ /** Files per session folder (across its task dirs): the TTL sweeper is the only
29
+ * reclaim path by design, so an unbounded count is a disk leak. */
30
+ export declare const BOARD_MAX_FILES_PER_SESSION = 200;
31
+ export declare const BOARD_MAX_TASKS_PER_SESSION = 40;
32
+ /** `yyyyMMdd-HHmmss`, local — the SAME shape the blackboard note tells the lead
33
+ * to build with `Get-Date -Format yyyyMMdd-HHmmss` / `date +%Y%m%d-%H%M%S`, so
34
+ * a tool-made session folder is indistinguishable from a hand-made one. */
35
+ export declare function sessionKeyStamp(now?: Date): string;
36
+ /**
37
+ * One path segment out of untrusted model text. Separators and `..` are
38
+ * REWRITTEN rather than rejected (a model that writes `auth/design` means the
39
+ * task `auth-design`), anything that cannot survive a filename is dropped, and
40
+ * CJK is preserved because this project's users write CJK. "" means "nothing
41
+ * usable was given", which the caller turns into an args error.
42
+ */
43
+ export declare function sanitizeSlug(raw: unknown, max?: number): string;
44
+ /** `NN` for the next file in a task dir: max existing ordinal + 1, so a hand
45
+ * -written `07-…md` the lead created is counted too. */
46
+ export declare function nextOrdinal(names: readonly string[]): number;
47
+ /** The round suffix for a revision: "" when the base name is free, else
48
+ * `-r2`, `-r3`… — never a rewrite, because the board's history IS the audit
49
+ * trail the lead reads back. */
50
+ export declare function roundSuffix(names: readonly string[], base: string): string;
51
+ /** The `NN` that anchors a revision: a family keeps the number its first file
52
+ * got, so `01-architect-design.md` and `01-architect-design-r2.md` sit
53
+ * together in a listing. Advancing the ordinal instead (the first version of
54
+ * this code did) means a revision never gets the `-rN` suffix the documented
55
+ * layout promises, and the round history becomes invisible. */
56
+ export declare function findFamily(names: readonly string[], role: string, topic: string): {
57
+ base: string;
58
+ round: string;
59
+ } | null;
60
+ export interface BoardTarget {
61
+ dir: string;
62
+ file: string;
63
+ rel: string;
64
+ round: string;
65
+ }
66
+ /**
67
+ * Plan the write: `<root>/<session>/<task>/<NN>-<role>-<topic><round>.md`.
68
+ * Every segment is sanitized and the resolved session/task pair is checked
69
+ * against the root by REALPATH, because a task dir somebody made earlier could
70
+ * be a symlink pointing at `~/.ssh` — and a writer that only strings paths
71
+ * together would follow it happily.
72
+ */
73
+ export declare function planBoardWrite(opts: {
74
+ root: string;
75
+ session: string;
76
+ task: string;
77
+ role: string;
78
+ topic: string;
79
+ list: (dir: string) => string[];
80
+ }): BoardTarget | {
81
+ error: string;
82
+ };
83
+ /** Count what this session folder already holds, so the caps can be enforced
84
+ * before another 400 files arrive. Never throws: an unreadable tree simply
85
+ * counts as nothing. */
86
+ export declare function sessionUsage(root: string, session: string): {
87
+ files: number;
88
+ tasks: number;
89
+ };
90
+ /** Atomic-ish: write a sibling temp file then rename, so a crash mid-write
91
+ * cannot leave a half-written board file that a reader mistakes for the real
92
+ * deliverable. (win32 rename over an existing target throws — which is fine
93
+ * here, because the name was chosen as unused.) */
94
+ export declare function writeNewFile(file: string, text: string): void;
95
+ export declare function buildBoardWriteTool(deps: {
96
+ pipelines: TmPipelines;
97
+ /** The board root the blackboard note publishes: `<repo>/.git/opencode-team`
98
+ * (or the sharded temp fallback). Injected, not recomputed, so a write can
99
+ * never land somewhere the lead was never told to read. */
100
+ boardRoot: string;
101
+ cfg?: {
102
+ boardMaxChars?: number;
103
+ boardMaxFiles?: number;
104
+ };
105
+ args?: Record<string, unknown>;
106
+ /** seam for the session-key stamp in tests */
107
+ stamp?: () => string;
108
+ }): {
109
+ description: string;
110
+ args: Record<string, unknown>;
111
+ execute: (rawArgs: Record<string, unknown>, ctx: unknown) => Promise<ToolResult>;
112
+ };
113
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/tm/board.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD;yDACyD;AACzD,eAAO,MAAM,uBAAuB,SAAU,CAAA;AAC9C;oEACoE;AACpE,eAAO,MAAM,2BAA2B,MAAM,CAAA;AAC9C,eAAO,MAAM,2BAA2B,KAAK,CAAA;AAE7C;;4EAE4E;AAC5E,wBAAgB,eAAe,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAM9D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,MAAM,CAU3D;AAED;yDACyD;AACzD,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAO5D;AAED;;iCAEiC;AACjC,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;;;gEAIgE;AAChE,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAaxC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;CAChC,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAkClC;AAED;;yBAEyB;AACzB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiB5F;AAED;;;oDAGoD;AACpD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAa7D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,SAAS,EAAE,WAAW,CAAA;IACtB;;gEAE4D;IAC5D,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,GAAG;IACF,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CACjF,CA4FA"}