@te-river/opencode-team-mode 1.6.2 → 1.7.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.
Files changed (198) hide show
  1. package/README.md +117 -118
  2. package/README.zh-CN.md +98 -100
  3. package/dist/agents.d.ts.map +1 -1
  4. package/dist/agents.js +89 -79
  5. package/dist/agents.js.map +1 -1
  6. package/dist/approval-gate.d.ts +8 -9
  7. package/dist/approval-gate.d.ts.map +1 -1
  8. package/dist/approval-gate.js +13 -14
  9. package/dist/approval-gate.js.map +1 -1
  10. package/dist/capabilities.d.ts +11 -37
  11. package/dist/capabilities.d.ts.map +1 -1
  12. package/dist/capabilities.js +11 -141
  13. package/dist/capabilities.js.map +1 -1
  14. package/dist/commands.js +1 -1
  15. package/dist/envprotect/hook.d.ts +12 -31
  16. package/dist/envprotect/hook.d.ts.map +1 -1
  17. package/dist/envprotect/hook.js +13 -91
  18. package/dist/envprotect/hook.js.map +1 -1
  19. package/dist/envprotect/patterns.d.ts +6 -4
  20. package/dist/envprotect/patterns.d.ts.map +1 -1
  21. package/dist/envprotect/patterns.js +6 -4
  22. package/dist/envprotect/patterns.js.map +1 -1
  23. package/dist/envprotect.d.ts +1 -1
  24. package/dist/envprotect.d.ts.map +1 -1
  25. package/dist/envprotect.js +1 -1
  26. package/dist/envprotect.js.map +1 -1
  27. package/dist/host/v2-browser-gate.d.ts +19 -1
  28. package/dist/host/v2-browser-gate.d.ts.map +1 -1
  29. package/dist/host/v2-browser-gate.js +47 -6
  30. package/dist/host/v2-browser-gate.js.map +1 -1
  31. package/dist/host/v2-capabilities.d.ts +33 -0
  32. package/dist/host/v2-capabilities.d.ts.map +1 -1
  33. package/dist/host/v2-capabilities.js +50 -1
  34. package/dist/host/v2-capabilities.js.map +1 -1
  35. package/dist/host/v2-compaction.d.ts +129 -0
  36. package/dist/host/v2-compaction.d.ts.map +1 -0
  37. package/dist/host/v2-compaction.js +346 -0
  38. package/dist/host/v2-compaction.js.map +1 -0
  39. package/dist/host/v2-default-agent.d.ts +37 -0
  40. package/dist/host/v2-default-agent.d.ts.map +1 -0
  41. package/dist/host/v2-default-agent.js +128 -0
  42. package/dist/host/v2-default-agent.js.map +1 -0
  43. package/dist/host/v2-events.d.ts +2 -0
  44. package/dist/host/v2-events.d.ts.map +1 -1
  45. package/dist/host/v2-events.js +27 -0
  46. package/dist/host/v2-events.js.map +1 -1
  47. package/dist/host/v2-guard.d.ts +178 -0
  48. package/dist/host/v2-guard.d.ts.map +1 -1
  49. package/dist/host/v2-guard.js +324 -8
  50. package/dist/host/v2-guard.js.map +1 -1
  51. package/dist/host/v2-offload.d.ts +1 -1
  52. package/dist/host/v2-offload.js +2 -2
  53. package/dist/host/v2-permissions.d.ts +45 -44
  54. package/dist/host/v2-permissions.d.ts.map +1 -1
  55. package/dist/host/v2-permissions.js +48 -49
  56. package/dist/host/v2-permissions.js.map +1 -1
  57. package/dist/host/v2-probe-chain.d.ts +93 -0
  58. package/dist/host/v2-probe-chain.d.ts.map +1 -0
  59. package/dist/host/v2-probe-chain.js +146 -0
  60. package/dist/host/v2-probe-chain.js.map +1 -0
  61. package/dist/host/v2-prune.d.ts +157 -0
  62. package/dist/host/v2-prune.d.ts.map +1 -0
  63. package/dist/host/v2-prune.js +507 -0
  64. package/dist/host/v2-prune.js.map +1 -0
  65. package/dist/host/v2-retry.d.ts +143 -0
  66. package/dist/host/v2-retry.d.ts.map +1 -0
  67. package/dist/host/v2-retry.js +315 -0
  68. package/dist/host/v2-retry.js.map +1 -0
  69. package/dist/host/v2-scope.d.ts.map +1 -1
  70. package/dist/host/v2-scope.js +14 -7
  71. package/dist/host/v2-scope.js.map +1 -1
  72. package/dist/host/v2-session-client.d.ts +24 -0
  73. package/dist/host/v2-session-client.d.ts.map +1 -1
  74. package/dist/host/v2-session-client.js +243 -3
  75. package/dist/host/v2-session-client.js.map +1 -1
  76. package/dist/host/v2-session.d.ts +72 -1
  77. package/dist/host/v2-session.d.ts.map +1 -1
  78. package/dist/host/v2-session.js +154 -10
  79. package/dist/host/v2-session.js.map +1 -1
  80. package/dist/host/v2-tool.d.ts +2 -3
  81. package/dist/host/v2-tool.d.ts.map +1 -1
  82. package/dist/host/v2-tool.js +2 -3
  83. package/dist/host/v2-tool.js.map +1 -1
  84. package/dist/host/v2-types.d.ts +25 -0
  85. package/dist/host/v2-types.d.ts.map +1 -1
  86. package/dist/host/v2.d.ts +14 -12
  87. package/dist/host/v2.d.ts.map +1 -1
  88. package/dist/host/v2.js +500 -73
  89. package/dist/host/v2.js.map +1 -1
  90. package/dist/identity.d.ts +27 -0
  91. package/dist/identity.d.ts.map +1 -0
  92. package/dist/identity.js +34 -0
  93. package/dist/identity.js.map +1 -0
  94. package/dist/index.d.ts +9 -24
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +17 -27
  97. package/dist/index.js.map +1 -1
  98. package/dist/prompts/lead.d.ts +1 -1
  99. package/dist/prompts/lead.d.ts.map +1 -1
  100. package/dist/prompts/lead.js +38 -25
  101. package/dist/prompts/lead.js.map +1 -1
  102. package/dist/prompts/shared.d.ts +2 -2
  103. package/dist/prompts/shared.d.ts.map +1 -1
  104. package/dist/prompts/shared.js +66 -56
  105. package/dist/prompts/shared.js.map +1 -1
  106. package/dist/prompts/specialists.d.ts +2 -2
  107. package/dist/prompts/specialists.d.ts.map +1 -1
  108. package/dist/prompts/specialists.js +53 -83
  109. package/dist/prompts/specialists.js.map +1 -1
  110. package/dist/tm/args-schema.d.ts +7 -32
  111. package/dist/tm/args-schema.d.ts.map +1 -1
  112. package/dist/tm/args-schema.js +12 -153
  113. package/dist/tm/args-schema.js.map +1 -1
  114. package/dist/tm/board.d.ts +10 -9
  115. package/dist/tm/board.d.ts.map +1 -1
  116. package/dist/tm/board.js +11 -10
  117. package/dist/tm/board.js.map +1 -1
  118. package/dist/tm/config-files.d.ts +81 -0
  119. package/dist/tm/config-files.d.ts.map +1 -0
  120. package/dist/tm/config-files.js +209 -0
  121. package/dist/tm/config-files.js.map +1 -0
  122. package/dist/tm/config-layers.d.ts +117 -0
  123. package/dist/tm/config-layers.d.ts.map +1 -0
  124. package/dist/tm/config-layers.js +320 -0
  125. package/dist/tm/config-layers.js.map +1 -0
  126. package/dist/tm/config.d.ts +10 -101
  127. package/dist/tm/config.d.ts.map +1 -1
  128. package/dist/tm/config.js +17 -71
  129. package/dist/tm/config.js.map +1 -1
  130. package/dist/tm/dispatch.d.ts +115 -21
  131. package/dist/tm/dispatch.d.ts.map +1 -1
  132. package/dist/tm/dispatch.js +424 -67
  133. package/dist/tm/dispatch.js.map +1 -1
  134. package/dist/tm/egress.d.ts +19 -7
  135. package/dist/tm/egress.d.ts.map +1 -1
  136. package/dist/tm/egress.js +21 -9
  137. package/dist/tm/egress.js.map +1 -1
  138. package/dist/tm/index.d.ts +23 -20
  139. package/dist/tm/index.d.ts.map +1 -1
  140. package/dist/tm/index.js +117 -116
  141. package/dist/tm/index.js.map +1 -1
  142. package/dist/tm/ledger.d.ts +9 -2
  143. package/dist/tm/ledger.d.ts.map +1 -1
  144. package/dist/tm/ledger.js +4 -1
  145. package/dist/tm/ledger.js.map +1 -1
  146. package/dist/tm/perm-ask.d.ts +3 -3
  147. package/dist/tm/perm-ask.d.ts.map +1 -1
  148. package/dist/tm/perm-ask.js +3 -3
  149. package/dist/tm/perm-ask.js.map +1 -1
  150. package/dist/tm/pipelines.d.ts +12 -11
  151. package/dist/tm/pipelines.d.ts.map +1 -1
  152. package/dist/tm/pipelines.js +40 -207
  153. package/dist/tm/pipelines.js.map +1 -1
  154. package/dist/tm/preview.d.ts +1 -1
  155. package/dist/tm/preview.js +3 -3
  156. package/dist/tm/preview.js.map +1 -1
  157. package/dist/tm/refs.d.ts +31 -4
  158. package/dist/tm/refs.d.ts.map +1 -1
  159. package/dist/tm/refs.js +48 -4
  160. package/dist/tm/refs.js.map +1 -1
  161. package/dist/tm/result.d.ts +1 -1
  162. package/dist/tm/result.d.ts.map +1 -1
  163. package/dist/tm/result.js +4 -3
  164. package/dist/tm/result.js.map +1 -1
  165. package/dist/tm/search.d.ts +2 -2
  166. package/dist/tm/search.js +7 -7
  167. package/dist/tm/search.js.map +1 -1
  168. package/dist/tm/serp-loop.d.ts +19 -7
  169. package/dist/tm/serp-loop.d.ts.map +1 -1
  170. package/dist/tm/serp-loop.js +24 -9
  171. package/dist/tm/serp-loop.js.map +1 -1
  172. package/dist/tm/stats.d.ts +12 -27
  173. package/dist/tm/stats.d.ts.map +1 -1
  174. package/dist/tm/stats.js +43 -45
  175. package/dist/tm/stats.js.map +1 -1
  176. package/dist/tm/store.d.ts +18 -5
  177. package/dist/tm/store.d.ts.map +1 -1
  178. package/dist/tm/store.js +39 -9
  179. package/dist/tm/store.js.map +1 -1
  180. package/dist/tm/tools.d.ts +7 -5
  181. package/dist/tm/tools.d.ts.map +1 -1
  182. package/dist/tm/tools.js +10 -41
  183. package/dist/tm/tools.js.map +1 -1
  184. package/dist/tm/webfetch.d.ts +1 -1
  185. package/dist/tm/webfetch.d.ts.map +1 -1
  186. package/dist/tm/webfetch.js +38 -23
  187. package/dist/tm/webfetch.js.map +1 -1
  188. package/dist/types.d.ts +40 -123
  189. package/dist/types.d.ts.map +1 -1
  190. package/dist/types.js +7 -21
  191. package/dist/types.js.map +1 -1
  192. package/docs/installation-v2.md +109 -33
  193. package/docs/installation.md +9 -0
  194. package/docs/research/browser-pane.md +5 -0
  195. package/docs/v2-port-notes.md +87 -0
  196. package/package.json +1 -1
  197. package/scripts/gen-v2-config.mjs +246 -94
  198. package/scripts/lib/fake-ctx.mjs +75 -0
@@ -0,0 +1,320 @@
1
+ /**
2
+ * Layered `team-mode` configuration — the PURE layer (package ①, 2026-10-06).
3
+ *
4
+ * Two file layers only, per the user's decision (2026-10-06): the host's own
5
+ * config has NO session layer (opencode.ai/v2/docs/config), so neither do we.
6
+ *
7
+ * env < global < project
8
+ *
9
+ * A file WINS over env for the same key. Within the project layer the
10
+ * `.opencode/` file wins over the direct one, mirroring the host's own
11
+ * discovery order (direct files merged farthest→closest, then `.opencode/`
12
+ * dirs in the same order — every discovered `.opencode` config overrides
13
+ * every direct config).
14
+ *
15
+ * This module is deliberately IO-free: it takes raw JSONC text (or null when
16
+ * a file does not exist) and returns a resolved view. Reading the files,
17
+ * the scope gate and the trajectory line are package ②'s job.
18
+ *
19
+ * Three rules the design pins, each implemented here:
20
+ * - a layer that fails to PARSE is skipped WHOLE and reported — never a
21
+ * half-applied config (a syntax error in a project file must not take the
22
+ * global layer down with it, and must not apply "the keys that happened to
23
+ * parse");
24
+ * - a single key with the WRONG TYPE is dropped from that layer only, and
25
+ * the next layer down answers for it;
26
+ * - a RED-LINE key written in a file is IGNORED outright and always resolves
27
+ * from env/default (see RED_LINE_EXEMPT_KEYS).
28
+ */
29
+ /**
30
+ * The honored-key registry. Extend it when a new knob is wired — an
31
+ * unlisted real knob would be reported as "unknown", a false positive.
32
+ *
33
+ * The first block mirrors `resolveTmConfig` (src/tm/config.ts) one-for-one;
34
+ * the red-line block adds the three knobs that live OUTSIDE TmConfig
35
+ * (envProtect / r6FineAsk / privateSpace) plus the four the design names as
36
+ * file-overridable but that are read directly from process.env.
37
+ */
38
+ export const CONFIG_KEYS = [
39
+ // ---- resolveTmConfig surface (src/tm/config.ts:379) ----
40
+ { key: "offloadThreshold", env: "TM_OFFLOAD_THRESHOLD", type: "number" },
41
+ { key: "previewLines", env: "TM_PREVIEW_LINES", type: "number" },
42
+ { key: "previewMaxTokens", env: "TM_PREVIEW_MAX_TOKENS", type: "number" },
43
+ { key: "fetchMaxLines", env: "TM_FETCH_MAX_LINES", type: "number" },
44
+ { key: "blackboardDir", env: "TM_BLACKBOARD_DIR", type: "string" },
45
+ { key: "trajectoryDir", env: "TM_TRAJECTORY_DIR", type: "string" },
46
+ { key: "blackboardTtlDays", env: "TM_BLACKBOARD_TTL", type: "number" },
47
+ { key: "bashReadonlyAllowed", env: "TM_BASH_READONLY_ALLOWED", type: "string[]" },
48
+ { key: "webfetchAllowedDomains", env: "TM_WEBFETCH_ALLOWED_DOMAINS", type: "string[]" },
49
+ { key: "memoryGlobalDir", env: "TM_MEMORY_GLOBAL_DIR", type: "string" },
50
+ { key: "memorySessionTtlMin", env: "TM_MEMORY_SESSION_TTL_MIN", type: "number" },
51
+ { key: "memoryMaxEntries", env: "TM_MEMORY_MAX_ENTRIES", type: "number" },
52
+ { key: "memoryStaleDays", env: "TM_MEMORY_STALE_DAYS", type: "number" },
53
+ { key: "memorySessionPersist", env: "TM_MEMORY_SESSION_PERSIST", type: "string" },
54
+ { key: "searchDefaultEngine", env: "TM_SEARCH_DEFAULT_ENGINE", type: "string" },
55
+ { key: "searchMaxHits", env: "TM_SEARCH_MAX_HITS", type: "number" },
56
+ { key: "searchWeights", env: "TM_SEARCH_WEIGHTS", type: "record" },
57
+ { key: "searchDisabledEngines", env: "TM_SEARCH_DISABLED_ENGINES", type: "string[]" },
58
+ { key: "searchRelevanceFloor", env: "TM_SEARCH_RELEVANCE_FLOOR", type: "number" },
59
+ { key: "offloadThresholdText", env: "TM_OFFLOAD_THRESHOLD_TEXT", type: "number" },
60
+ { key: "offloadThresholdData", env: "TM_OFFLOAD_THRESHOLD_DATA", type: "number" },
61
+ { key: "webCacheTtlSec", env: "TM_WEB_CACHE_TTL_SEC", type: "number" },
62
+ { key: "joinMaxWaitMs", env: "TM_JOIN_MAX_WAIT_MS", type: "number" },
63
+ { key: "boardMaxChars", env: "TM_BOARD_MAX_CHARS", type: "number" },
64
+ { key: "boardMaxFiles", env: "TM_BOARD_MAX_FILES", type: "number" },
65
+ { key: "taskOffload", env: "TM_TASK_OFFLOAD", type: "string" },
66
+ { key: "storeReclaim", env: "TM_STORE_RECLAIM", type: "string" },
67
+ { key: "askTimeoutFloorMin", env: "TM_ASK_TIMEOUT_FLOOR_MIN", type: "number" },
68
+ { key: "bashTimeoutMaxMs", env: "TM_BASH_TIMEOUT_MAX_MS", type: "number" },
69
+ { key: "bashTimeoutProbeMs", env: "TM_BASH_TIMEOUT_PROBE_MS", type: "number" },
70
+ // ---- knobs read directly from process.env (design §4 names them file-overridable) ----
71
+ { key: "nativeOffload", env: "TM_NATIVE_OFFLOAD", type: "string" },
72
+ { key: "compactTrigger", env: "TM_COMPACT_TRIGGER", type: "string" },
73
+ { key: "compactAtPercent", env: "TM_COMPACT_AT_PERCENT", type: "number" },
74
+ { key: "compactMinMs", env: "TM_COMPACT_MIN_MS", type: "number" },
75
+ { key: "ptcWebBridge", env: "TM_PTC_WEB_BRIDGE", type: "string" },
76
+ { key: "hitBlacklist", env: "TM_HIT_BLACKLIST", type: "string[]" },
77
+ { key: "envProtectExtraDeny", env: "TM_ENV_PROTECT_EXTRA_DENY", type: "string" },
78
+ { key: "shellEnv", env: "TM_SHELL_ENV", type: "string" },
79
+ { key: "agentTemperature", env: "TM_AGENT_TEMPERATURE", type: "string" },
80
+ { key: "compactionContext", env: "TM_COMPACTION_CONTEXT", type: "string" },
81
+ // ---- RED-LINE knobs: a file value is ignored, always env/default ----
82
+ {
83
+ key: "envProtect",
84
+ env: "TM_ENV_PROTECT",
85
+ type: "string",
86
+ redLine: true,
87
+ redLineReason: "R6 判定模式,off 即关掉环境防护;项目文件可被提交共享,不得关掉红线",
88
+ },
89
+ {
90
+ key: "r6FineAsk",
91
+ env: "TM_R6_FINE_ASK",
92
+ type: "string",
93
+ redLine: true,
94
+ redLineReason: "R6 ask 策略,决定每条命令是否走细粒度判定;文件不得放宽",
95
+ },
96
+ {
97
+ key: "privateSpace",
98
+ env: "TM_PRIVATE_SPACE",
99
+ type: "string",
100
+ redLine: true,
101
+ redLineReason: "地址红线门,allow 会放开整段私网;文件不得放宽",
102
+ },
103
+ {
104
+ key: "webfetchAllowedDomains",
105
+ env: "TM_WEBFETCH_ALLOWED_DOMAINS",
106
+ type: "string[]",
107
+ redLine: true,
108
+ redLineReason: "网络出网白名单;项目文件可被提交共享,不得放宽",
109
+ },
110
+ {
111
+ key: "bashReadonlyAllowed",
112
+ env: "TM_BASH_READONLY_ALLOWED",
113
+ type: "string[]",
114
+ redLine: true,
115
+ redLineReason: "P3 只读门;放宽即扩大可执行命令面",
116
+ },
117
+ ];
118
+ /** The red-line keys, derived from the registry (single source of truth). */
119
+ export const RED_LINE_EXEMPT_KEYS = CONFIG_KEYS.filter((k) => k.redLine).map((k) => k.key);
120
+ const KEY_BY_NAME = new Map(CONFIG_KEYS.map((k) => [k.key, k]));
121
+ // ---------------------------------------------------------------------------
122
+ // JSONC
123
+ // ---------------------------------------------------------------------------
124
+ /**
125
+ * Mask `//` and block comments to spaces at IDENTICAL offsets, so a
126
+ * commented-out key can never be mistaken for a live one. String contents
127
+ * (including a `//` inside a string) are preserved byte-for-byte. Ported
128
+ * from scripts/lib/config-surgery.cjs:19 — deliberately re-implemented here
129
+ * rather than imported, so the pure layer carries no CJS dependency.
130
+ */
131
+ export function maskJsoncComments(src) {
132
+ let out = "";
133
+ let i = 0;
134
+ let inStr = false;
135
+ let esc = false;
136
+ while (i < src.length) {
137
+ const c = src[i];
138
+ if (inStr) {
139
+ out += c;
140
+ if (esc)
141
+ esc = false;
142
+ else if (c === "\\")
143
+ esc = true;
144
+ else if (c === '"')
145
+ inStr = false;
146
+ i++;
147
+ continue;
148
+ }
149
+ if (c === '"') {
150
+ inStr = true;
151
+ out += c;
152
+ i++;
153
+ continue;
154
+ }
155
+ if (c === "/" && src[i + 1] === "/") {
156
+ while (i < src.length && src[i] !== "\n") {
157
+ out += " ";
158
+ i++;
159
+ }
160
+ continue;
161
+ }
162
+ if (c === "/" && src[i + 1] === "*") {
163
+ while (i < src.length && !(src[i] === "*" && src[i + 1] === "/")) {
164
+ out += src[i] === "\n" ? "\n" : " ";
165
+ i++;
166
+ }
167
+ out += " ";
168
+ i += 2;
169
+ continue;
170
+ }
171
+ out += c;
172
+ i++;
173
+ }
174
+ return out;
175
+ }
176
+ /** Drop a comma that is followed (past whitespace) by `}` or `]`, outside
177
+ * strings. The host tolerates a trailing comma; JSON.parse does not. */
178
+ function stripTrailingCommas(masked) {
179
+ let out = "";
180
+ let i = 0;
181
+ let inStr = false;
182
+ let esc = false;
183
+ while (i < masked.length) {
184
+ const c = masked[i];
185
+ if (inStr) {
186
+ out += c;
187
+ if (esc)
188
+ esc = false;
189
+ else if (c === "\\")
190
+ esc = true;
191
+ else if (c === '"')
192
+ inStr = false;
193
+ i++;
194
+ continue;
195
+ }
196
+ if (c === '"') {
197
+ inStr = true;
198
+ out += c;
199
+ i++;
200
+ continue;
201
+ }
202
+ if (c === ",") {
203
+ let j = i + 1;
204
+ while (j < masked.length && /\s/.test(masked[j]))
205
+ j++;
206
+ if (masked[j] === "}" || masked[j] === "]") {
207
+ i++; // drop the trailing comma
208
+ continue;
209
+ }
210
+ }
211
+ out += c;
212
+ i++;
213
+ }
214
+ return out;
215
+ }
216
+ /** Parse JSONC (comments + trailing commas) into a value. Throws on a real
217
+ * syntax error — the caller turns that into a whole-layer skip. */
218
+ export function parseJsonc(src) {
219
+ return JSON.parse(stripTrailingCommas(maskJsoncComments(src)));
220
+ }
221
+ // ---------------------------------------------------------------------------
222
+ // Merge
223
+ // ---------------------------------------------------------------------------
224
+ function isPlainObject(v) {
225
+ return typeof v === "object" && v !== null && !Array.isArray(v);
226
+ }
227
+ function typeOk(type, v) {
228
+ switch (type) {
229
+ case "number":
230
+ return typeof v === "number" && Number.isFinite(v);
231
+ case "string":
232
+ return typeof v === "string";
233
+ case "string[]":
234
+ return Array.isArray(v) && v.every((x) => typeof x === "string");
235
+ case "record":
236
+ return isPlainObject(v) && Object.values(v).every((x) => typeof x === "number");
237
+ }
238
+ }
239
+ /** `TM_CONFIG_ENV_ONLY` is truthy on 1/true/on/yes (case-insensitive). */
240
+ function envOnlyFromEnv(env) {
241
+ const raw = env.TM_CONFIG_ENV_ONLY;
242
+ return typeof raw === "string" && /^(1|true|on|yes)$/i.test(raw.trim());
243
+ }
244
+ function projectLayerList(projectLayer) {
245
+ if (projectLayer == null)
246
+ return [];
247
+ const texts = Array.isArray(projectLayer) ? projectLayer : [projectLayer];
248
+ const out = [];
249
+ texts.forEach((text, i) => {
250
+ if (typeof text !== "string")
251
+ return;
252
+ out.push({ name: i === 0 ? "project" : "project:.opencode", text });
253
+ });
254
+ return out;
255
+ }
256
+ /**
257
+ * Resolve the layered config. Pure: no IO, no globals read except the `env`
258
+ * record handed in. See the module header for the three rules.
259
+ */
260
+ export function resolveLayeredConfig(input) {
261
+ const { env } = input;
262
+ const exempt = new Set(input.exempt ?? RED_LINE_EXEMPT_KEYS);
263
+ const envOnlyActive = input.envOnly ?? envOnlyFromEnv(env);
264
+ // Ordered low→high. envOnly removes every file layer BEFORE any parse.
265
+ const fileLayers = [];
266
+ if (!envOnlyActive) {
267
+ if (typeof input.globalLayer === "string")
268
+ fileLayers.push({ name: "global", text: input.globalLayer });
269
+ fileLayers.push(...projectLayerList(input.projectLayer));
270
+ }
271
+ const skippedLayers = [];
272
+ const ignoredRedLineKeys = [];
273
+ const unknownKeys = [];
274
+ // key -> {value, source}; later layers overwrite earlier ones.
275
+ const fileValues = new Map();
276
+ for (const layer of fileLayers) {
277
+ let obj;
278
+ try {
279
+ obj = parseJsonc(layer.text);
280
+ }
281
+ catch (e) {
282
+ skippedLayers.push({ name: layer.name, reason: e instanceof Error ? e.message : String(e) });
283
+ continue;
284
+ }
285
+ if (!isPlainObject(obj)) {
286
+ skippedLayers.push({ name: layer.name, reason: "顶层不是 JSON 对象" });
287
+ continue;
288
+ }
289
+ for (const [key, value] of Object.entries(obj)) {
290
+ if (exempt.has(key)) {
291
+ ignoredRedLineKeys.push({ key, layer: layer.name, value });
292
+ continue;
293
+ }
294
+ const spec = KEY_BY_NAME.get(key);
295
+ if (!spec) {
296
+ unknownKeys.push({ key, layer: layer.name });
297
+ continue;
298
+ }
299
+ if (!typeOk(spec.type, value))
300
+ continue; // drop this key from THIS layer only
301
+ fileValues.set(key, { value, source: layer.name });
302
+ }
303
+ }
304
+ // env is the lowest layer; files override it.
305
+ const values = {};
306
+ const perKeySource = {};
307
+ for (const spec of CONFIG_KEYS) {
308
+ const raw = env[spec.env];
309
+ if (typeof raw === "string" && raw.trim() !== "") {
310
+ values[spec.key] = raw;
311
+ perKeySource[spec.key] = "env";
312
+ }
313
+ }
314
+ for (const [key, { value, source }] of fileValues) {
315
+ values[key] = value;
316
+ perKeySource[key] = source;
317
+ }
318
+ return { values, perKeySource, skippedLayers, ignoredRedLineKeys, unknownKeys, envOnlyActive };
319
+ }
320
+ //# sourceMappingURL=config-layers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-layers.js","sourceRoot":"","sources":["../../src/tm/config-layers.ts"],"names":[],"mappings":"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"}
@@ -34,8 +34,8 @@ export declare const DEFAULT_BASH_READONLY_ALLOWED: readonly string[];
34
34
  * agents bouncing off baike.baidu.com and mzh.moegirl.org.cn (the agent-install flow points
35
35
  * agents at the installation guide on exactly these hosts). A site's OWN
36
36
  * asset CDN on a brand-unrelated domain has to be seeded too — same-site
37
- * cannot infer it, and blocking it is what makes tm_browser report a blank
38
- * page (bdimg.com below is that case, measured). Subdomains of
37
+ * cannot infer it, and blocking it is what makes a page render blank
38
+ * (bdimg.com below is that case, measured). Subdomains of
39
39
  * an entry are included;
40
40
  * TM_WEBFETCH_ALLOWED_DOMAINS overrides the list (comma/semicolon
41
41
  * separated; a lone "*" opens every host — keep the engine hosts or
@@ -66,16 +66,6 @@ export interface TmConfig {
66
66
  /** tm_memory GLOBAL scope dir. Empty = auto (~/.opencode-team/memories/global
67
67
  * — user-level, follows the user across projects). */
68
68
  memoryGlobalDir: string;
69
- /** Hard cap on a PTC program source string length (chars). */
70
- ptcMaxProgramChars: number;
71
- /** Ceiling for per-run bridge-call budget (callers may only tighten). */
72
- ptcMaxCalls: number;
73
- /** Ceiling for per-run error budget (callers may only tighten). */
74
- ptcMaxErrors: number;
75
- /** Ceiling for per-run wall-clock timeout in ms (callers may only tighten). */
76
- ptcTimeoutMs: number;
77
- /** Engine selection: auto (worker→inline fallback) | worker | inline. */
78
- ptcEngine: "auto" | "worker" | "inline";
79
69
  /** tm_memory session-scope entry TTL in minutes (lazy + boot sweep).
80
70
  * Consumed by memory.ts (T1). */
81
71
  memorySessionTtlMin: number;
@@ -122,52 +112,6 @@ export interface TmConfig {
122
112
  * explicit `TM_OFFLOAD_THRESHOLD_DATA` always wins. Consumed by
123
113
  * pipelines.ts `offloadThresholdFor` (T4 tiering — now live). */
124
114
  offloadThresholdData: number;
125
- /** tm_browser engine: "playwright" (default; a failed playwright-core
126
- * import degrades to legacy CDP at runtime) | "cdp-legacy".
127
- * Consumed by browser.ts (T5). */
128
- browserEngine: "playwright" | "cdp-legacy";
129
- /** Hard cap (estimated tokens) for tm_browser snapshot payloads.
130
- * Consumed by browser.ts (T5). */
131
- browserSnapshotMaxTokens: number;
132
- /** tm_browser SUBRESOURCE policy — what the in-page network gate does with
133
- * everything a page pulls AFTER the navigation itself was allowed.
134
- * Gating subresources by the CONTENT allowlist (the pre-v1.5.13 behavior)
135
- * silently aborts every img/css/js the site serves from its own CDN, so
136
- * pages render picture-less and the agent reports "no images".
137
- * same-site (default) — passive types (image/media/font/stylesheet)
138
- * always pass; an EXECUTABLE resource (script/xhr/fetch/document/…)
139
- * passes only when its registrable site is one this session actually
140
- * navigated to;
141
- * passive — passive types pass, everything else stays on the allowlist;
142
- * off — the legacy verbatim behavior (every request re-checked).
143
- * Consumed by browser.ts. */
144
- browserSubresource: "same-site" | "passive" | "off";
145
- /** TM_BROWSER_ASK_EVAL (default on) — `evaluate_script` runs arbitrary JS in
146
- * the user's OWN browser, which is the one verb the domain allowlist cannot
147
- * cover: the allowlist limits where we NAVIGATE, not what a loaded page
148
- * hands back (cookies, localStorage, any token in the DOM). So this verb
149
- * asks the official dialog once per browser session, and refuses when the
150
- * host gives us no ask bridge (tm_pty's rule). `off` restores the
151
- * pre-v1.5.14 behaviour; result redaction is NOT switchable. */
152
- browserAskEval: "on" | "off";
153
- /** Ceiling on PNG bytes tm_browser will base64-inline as a tool-result
154
- * attachment (an oversized screenshot stays path-only + says why).
155
- * Consumed by browser.ts. */
156
- browserImageMaxBytes: number;
157
- /** Idle wall-clock after which tm_browser closes an untouched session on
158
- * its own — the safety net for the "agent claims it closed the window but
159
- * it is still on screen" class. 0 disables the reaper. Consumed by
160
- * browser.ts. */
161
- browserIdleCloseMs: number;
162
- /** Ceiling on concurrent tm_pty sessions this plugin started (issue #6's
163
- * async shell): each one is a real process the user approved, so the
164
- * count is bounded rather than left to the model's enthusiasm.
165
- * Consumed by pty.ts. */
166
- ptyMax: number;
167
- /** tm_ptc_run web bridge: "on" (default) exposes tm.search/tm.webfetch
168
- * facades to PTC programs; "off" removes them from the bridge set.
169
- * Consumed by ptc/* (T6). */
170
- ptcWebBridge: "on" | "off";
171
115
  /** TM_WEB_CACHE_TTL_SEC (default 300; 0 disables) — how long a governed
172
116
  * fetch body may be re-served for the SAME URL. The web channel is the
173
117
  * slowest thing the team does and the most duplicated (lead + researcher
@@ -186,7 +130,7 @@ export interface TmConfig {
186
130
  joinMaxWaitMs: number;
187
131
  /** tm_board_write: one board file's character cap and one session folder's file cap.
188
132
  * The board is the ONLY oversized-deliverable channel, and the roles that
189
- * need it most (architect / researcher) own no file tool at all, so the caps
133
+ * need it most (architect / researcher) own no write-capable file tool, so the caps
190
134
  * are what keeps a governed writer from becoming a disk leak. */
191
135
  boardMaxChars: number;
192
136
  boardMaxFiles: number;
@@ -204,25 +148,22 @@ export interface TmConfig {
204
148
  * TTL-expired entries — never a live run. `off` keeps the disk as is; the
205
149
  * test runner sets it so a suite cannot mutate the developer's real Temp. */
206
150
  storeReclaim: "on" | "off";
207
- /** Floor (minutes) for the approval-gate ask timeout. LIVE (Wave A/T2):
208
- * approval-gate.ts `resolveAskTimeoutMs` clamps the reply with
209
- * `Math.max(min, resolveTmConfig(env).askTimeoutFloorMin)` — this knob
210
- * drives the floor, replacing the old hardcoded MIN_ASK_TIMEOUT_MIN=3.
211
- * DEFAULTED TO 1 (user directive): a reject that lands on an already-
212
- * closed request is classified benign `already-closed` by T2's
213
- * classifyReplyFailure, so the ~120s replied-event bus lag no longer
214
- * forces a 3-min floor — an unanswered dialog auto-rejects after 1 min. */
151
+ /** Floor (minutes) for the (v1) approval-gate ask timeout. ORPHANED: its
152
+ * only consumer, approval-gate.ts `resolveAskTimeoutMs`, was deleted with
153
+ * the v1 personality (v2 raises no plugin dialog, so there is no timer to
154
+ * floor). The knob is still parsed so an existing config keeps resolving;
155
+ * nothing reads it. DEFAULTED TO 1. */
215
156
  askTimeoutFloorMin: number;
216
157
  /** Ceiling (ms) forced onto the built-in bash tool's `timeout` ARG through
217
158
  * the official `tool.execute.before` hook. 0 (default) = no cap: a build
218
159
  * or test run stays whatever the model asked for. Consumed by
219
- * bash-timeout.ts. */
160
+ * src/host/v2-guard.ts (applyV2ShellTimeoutClamp). */
220
161
  bashTimeoutMaxMs: number;
221
162
  /** Ceiling (ms) for a bash command that the P3 read-only allowlist already
222
163
  * classifies as a pure probe (ls/grep/rg/cat/Get-ChildItem …). Those
223
164
  * never legitimately need the host's 120 s default, and models routinely
224
165
  * set 120000+ on them, so this one ships ENABLED. 0 disables.
225
- * Consumed by bash-timeout.ts. */
166
+ * Consumed by src/host/v2-guard.ts (applyV2ShellTimeoutClamp). */
226
167
  bashTimeoutProbeMs: number;
227
168
  }
228
169
  export declare const TM_CONFIG_DEFAULTS: {
@@ -233,11 +174,6 @@ export declare const TM_CONFIG_DEFAULTS: {
233
174
  readonly blackboardDir: "";
234
175
  readonly trajectoryDir: "";
235
176
  readonly blackboardTtlDays: 7;
236
- readonly ptcMaxProgramChars: 4000;
237
- readonly ptcMaxCalls: 20;
238
- readonly ptcMaxErrors: 3;
239
- readonly ptcTimeoutMs: 60000;
240
- readonly ptcEngine: "auto";
241
177
  readonly memorySessionTtlMin: 240;
242
178
  readonly memoryMaxEntries: 200;
243
179
  readonly memoryStaleDays: 30;
@@ -249,14 +185,6 @@ export declare const TM_CONFIG_DEFAULTS: {
249
185
  readonly searchRelevanceFloor: 0.35;
250
186
  readonly offloadThresholdText: 4000;
251
187
  readonly offloadThresholdData: 2000;
252
- readonly browserEngine: "playwright";
253
- readonly browserSnapshotMaxTokens: 1200;
254
- readonly browserSubresource: "same-site";
255
- readonly browserAskEval: "on";
256
- readonly browserImageMaxBytes: 400000;
257
- readonly browserIdleCloseMs: 180000;
258
- readonly ptyMax: 4;
259
- readonly ptcWebBridge: "on";
260
188
  readonly webCacheTtlSec: 300;
261
189
  readonly joinMaxWaitMs: 60000;
262
190
  readonly boardMaxChars: 200000;
@@ -267,25 +195,6 @@ export declare const TM_CONFIG_DEFAULTS: {
267
195
  readonly bashTimeoutMaxMs: 0;
268
196
  readonly bashTimeoutProbeMs: 60000;
269
197
  };
270
- /** Inclusive ceilings/floors for the PTC budgets (design §4.3). */
271
- export declare const PTC_BUDGET_BOUNDS: {
272
- readonly maxCalls: {
273
- readonly min: 1;
274
- readonly max: 200;
275
- };
276
- readonly maxErrors: {
277
- readonly min: 1;
278
- readonly max: 50;
279
- };
280
- readonly timeoutMs: {
281
- readonly min: 5000;
282
- readonly max: 600000;
283
- };
284
- readonly programChars: {
285
- readonly min: 200;
286
- readonly max: 200000;
287
- };
288
- };
289
198
  type EnvLike = Record<string, string | undefined>;
290
199
  /** TM_SEARCH_WEIGHTS — `bing=0.2,hn=0.3` into a partial weight table. A
291
200
  * malformed pair is dropped (not the whole var), so one typo cannot silently
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"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"}