@te-river/opencode-team-mode 1.7.2 → 1.7.4

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 (178) hide show
  1. package/README.md +1008 -849
  2. package/README.zh-CN.md +905 -756
  3. package/dist/host/v2-browser-gate.d.ts +4 -1
  4. package/dist/host/v2-browser-gate.d.ts.map +1 -1
  5. package/dist/host/v2-browser-gate.js +1 -1
  6. package/dist/host/v2-browser-gate.js.map +1 -1
  7. package/dist/host/v2-capabilities.js +1 -1
  8. package/dist/host/v2-capabilities.js.map +1 -1
  9. package/dist/host/v2-events.d.ts +8 -2
  10. package/dist/host/v2-events.d.ts.map +1 -1
  11. package/dist/host/v2-events.js +16 -2
  12. package/dist/host/v2-events.js.map +1 -1
  13. package/dist/host/v2-guard.d.ts +3 -45
  14. package/dist/host/v2-guard.d.ts.map +1 -1
  15. package/dist/host/v2-guard.js +10 -73
  16. package/dist/host/v2-guard.js.map +1 -1
  17. package/dist/host/v2-offload.d.ts +12 -2
  18. package/dist/host/v2-offload.d.ts.map +1 -1
  19. package/dist/host/v2-offload.js +9 -9
  20. package/dist/host/v2-offload.js.map +1 -1
  21. package/dist/host/v2-probe-chain.d.ts +5 -1
  22. package/dist/host/v2-probe-chain.d.ts.map +1 -1
  23. package/dist/host/v2-probe-chain.js +4 -6
  24. package/dist/host/v2-probe-chain.js.map +1 -1
  25. package/dist/host/v2-probe.d.ts.map +1 -1
  26. package/dist/host/v2-probe.js +2 -1
  27. package/dist/host/v2-probe.js.map +1 -1
  28. package/dist/host/v2-prune.d.ts +5 -1
  29. package/dist/host/v2-prune.d.ts.map +1 -1
  30. package/dist/host/v2-prune.js +8 -14
  31. package/dist/host/v2-prune.js.map +1 -1
  32. package/dist/host/v2-retry.d.ts +10 -3
  33. package/dist/host/v2-retry.d.ts.map +1 -1
  34. package/dist/host/v2-retry.js +14 -16
  35. package/dist/host/v2-retry.js.map +1 -1
  36. package/dist/host/v2-session.d.ts +6 -2
  37. package/dist/host/v2-session.d.ts.map +1 -1
  38. package/dist/host/v2-session.js +7 -13
  39. package/dist/host/v2-session.js.map +1 -1
  40. package/dist/host/v2.d.ts +0 -5
  41. package/dist/host/v2.d.ts.map +1 -1
  42. package/dist/host/v2.js +32 -73
  43. package/dist/host/v2.js.map +1 -1
  44. package/dist/prompts/lead.d.ts +1 -1
  45. package/dist/prompts/lead.d.ts.map +1 -1
  46. package/dist/prompts/lead.js +47 -19
  47. package/dist/prompts/lead.js.map +1 -1
  48. package/dist/prompts/shared.d.ts +1 -1
  49. package/dist/prompts/shared.d.ts.map +1 -1
  50. package/dist/prompts/shared.js +16 -0
  51. package/dist/prompts/shared.js.map +1 -1
  52. package/dist/prompts/specialists.d.ts +1 -1
  53. package/dist/prompts/specialists.d.ts.map +1 -1
  54. package/dist/prompts/specialists.js +1 -1
  55. package/dist/tm/args-schema.d.ts +1 -1
  56. package/dist/tm/args-schema.js +6 -6
  57. package/dist/tm/args-schema.js.map +1 -1
  58. package/dist/tm/board.js +2 -2
  59. package/dist/tm/board.js.map +1 -1
  60. package/dist/tm/config-files.d.ts +41 -17
  61. package/dist/tm/config-files.d.ts.map +1 -1
  62. package/dist/tm/config-files.js +68 -73
  63. package/dist/tm/config-files.js.map +1 -1
  64. package/dist/tm/config-layers.d.ts +65 -33
  65. package/dist/tm/config-layers.d.ts.map +1 -1
  66. package/dist/tm/config-layers.js +164 -81
  67. package/dist/tm/config-layers.js.map +1 -1
  68. package/dist/tm/config-template.d.ts +32 -0
  69. package/dist/tm/config-template.d.ts.map +1 -0
  70. package/dist/tm/config-template.js +74 -0
  71. package/dist/tm/config-template.js.map +1 -0
  72. package/dist/tm/config.d.ts +113 -140
  73. package/dist/tm/config.d.ts.map +1 -1
  74. package/dist/tm/config.js +100 -200
  75. package/dist/tm/config.js.map +1 -1
  76. package/dist/tm/dispatch.d.ts +0 -9
  77. package/dist/tm/dispatch.d.ts.map +1 -1
  78. package/dist/tm/dispatch.js +14 -16
  79. package/dist/tm/dispatch.js.map +1 -1
  80. package/dist/tm/index.d.ts +12 -12
  81. package/dist/tm/index.d.ts.map +1 -1
  82. package/dist/tm/index.js +48 -26
  83. package/dist/tm/index.js.map +1 -1
  84. package/dist/tm/ledger.d.ts +7 -3
  85. package/dist/tm/ledger.d.ts.map +1 -1
  86. package/dist/tm/ledger.js +5 -4
  87. package/dist/tm/ledger.js.map +1 -1
  88. package/dist/tm/memory.js +3 -3
  89. package/dist/tm/pipelines.js +1 -1
  90. package/dist/tm/search.js +6 -6
  91. package/dist/tm/search.js.map +1 -1
  92. package/dist/tm/stats.js +2 -2
  93. package/dist/tm/stats.js.map +1 -1
  94. package/dist/tm/tools.js +2 -2
  95. package/dist/tm/webfetch.d.ts +5 -2
  96. package/dist/tm/webfetch.d.ts.map +1 -1
  97. package/dist/tm/webfetch.js +24 -18
  98. package/dist/tm/webfetch.js.map +1 -1
  99. package/docs/installation-v2.md +59 -38
  100. package/docs/installation.md +4 -4
  101. package/package.json +1 -1
  102. package/scripts/gen-v2-config.mjs +8 -7
  103. package/dist/approval-gate.d.ts +0 -205
  104. package/dist/approval-gate.d.ts.map +0 -1
  105. package/dist/approval-gate.js +0 -627
  106. package/dist/approval-gate.js.map +0 -1
  107. package/dist/host/v1.d.ts +0 -14
  108. package/dist/host/v1.d.ts.map +0 -1
  109. package/dist/host/v1.js +0 -340
  110. package/dist/host/v1.js.map +0 -1
  111. package/dist/host/v2-client.d.ts +0 -53
  112. package/dist/host/v2-client.d.ts.map +0 -1
  113. package/dist/host/v2-client.js +0 -193
  114. package/dist/host/v2-client.js.map +0 -1
  115. package/dist/host/v2-transcript.d.ts +0 -73
  116. package/dist/host/v2-transcript.d.ts.map +0 -1
  117. package/dist/host/v2-transcript.js +0 -151
  118. package/dist/host/v2-transcript.js.map +0 -1
  119. package/dist/host-hooks.d.ts +0 -126
  120. package/dist/host-hooks.d.ts.map +0 -1
  121. package/dist/host-hooks.js +0 -284
  122. package/dist/host-hooks.js.map +0 -1
  123. package/dist/tm/bash-timeout.d.ts +0 -72
  124. package/dist/tm/bash-timeout.d.ts.map +0 -1
  125. package/dist/tm/bash-timeout.js +0 -100
  126. package/dist/tm/bash-timeout.js.map +0 -1
  127. package/dist/tm/browser.d.ts +0 -642
  128. package/dist/tm/browser.d.ts.map +0 -1
  129. package/dist/tm/browser.js +0 -2836
  130. package/dist/tm/browser.js.map +0 -1
  131. package/dist/tm/ptc/budgets.d.ts +0 -59
  132. package/dist/tm/ptc/budgets.d.ts.map +0 -1
  133. package/dist/tm/ptc/budgets.js +0 -138
  134. package/dist/tm/ptc/budgets.js.map +0 -1
  135. package/dist/tm/ptc/contract.d.ts +0 -171
  136. package/dist/tm/ptc/contract.d.ts.map +0 -1
  137. package/dist/tm/ptc/contract.js +0 -85
  138. package/dist/tm/ptc/contract.js.map +0 -1
  139. package/dist/tm/ptc/driver.d.ts +0 -40
  140. package/dist/tm/ptc/driver.d.ts.map +0 -1
  141. package/dist/tm/ptc/driver.js +0 -213
  142. package/dist/tm/ptc/driver.js.map +0 -1
  143. package/dist/tm/ptc/engines.d.ts +0 -43
  144. package/dist/tm/ptc/engines.d.ts.map +0 -1
  145. package/dist/tm/ptc/engines.js +0 -454
  146. package/dist/tm/ptc/engines.js.map +0 -1
  147. package/dist/tm/ptc/gate.d.ts +0 -28
  148. package/dist/tm/ptc/gate.d.ts.map +0 -1
  149. package/dist/tm/ptc/gate.js +0 -130
  150. package/dist/tm/ptc/gate.js.map +0 -1
  151. package/dist/tm/ptc/index.d.ts +0 -19
  152. package/dist/tm/ptc/index.d.ts.map +0 -1
  153. package/dist/tm/ptc/index.js +0 -15
  154. package/dist/tm/ptc/index.js.map +0 -1
  155. package/dist/tm/ptc/pscan.d.ts +0 -30
  156. package/dist/tm/ptc/pscan.d.ts.map +0 -1
  157. package/dist/tm/ptc/pscan.js +0 -341
  158. package/dist/tm/ptc/pscan.js.map +0 -1
  159. package/dist/tm/ptc/summary.d.ts +0 -17
  160. package/dist/tm/ptc/summary.d.ts.map +0 -1
  161. package/dist/tm/ptc/summary.js +0 -134
  162. package/dist/tm/ptc/summary.js.map +0 -1
  163. package/dist/tm/ptc/tool.d.ts +0 -66
  164. package/dist/tm/ptc/tool.d.ts.map +0 -1
  165. package/dist/tm/ptc/tool.js +0 -231
  166. package/dist/tm/ptc/tool.js.map +0 -1
  167. package/dist/tm/ptc.d.ts +0 -298
  168. package/dist/tm/ptc.d.ts.map +0 -1
  169. package/dist/tm/ptc.js +0 -865
  170. package/dist/tm/ptc.js.map +0 -1
  171. package/dist/tm/pty.d.ts +0 -70
  172. package/dist/tm/pty.d.ts.map +0 -1
  173. package/dist/tm/pty.js +0 -245
  174. package/dist/tm/pty.js.map +0 -1
  175. package/dist/tool-coerce.d.ts +0 -24
  176. package/dist/tool-coerce.d.ts.map +0 -1
  177. package/dist/tool-coerce.js +0 -63
  178. package/dist/tool-coerce.js.map +0 -1
@@ -1,16 +1,20 @@
1
1
  /**
2
2
  * Layered `team-mode` configuration — the PURE layer (package ①, 2026-10-06).
3
3
  *
4
+ * `team-mode.jsonc` is the ONLY configuration source. There is no `TM_*`
5
+ * config env var any more: the registry below carries each key's default and
6
+ * its one-line doc, and the template generator (`config-template.ts`) renders
7
+ * the global file straight from it, so a comment and a key can never drift.
8
+ *
4
9
  * Two file layers only, per the user's decision (2026-10-06): the host's own
5
10
  * config has NO session layer (opencode.ai/v2/docs/config), so neither do we.
6
11
  *
7
- * env < global < project
12
+ * global < project
8
13
  *
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
+ * Within the project layer the `.opencode/` file wins over the direct one,
15
+ * mirroring the host's own discovery order (direct files merged
16
+ * farthest→closest, then `.opencode/` dirs in the same order — every
17
+ * discovered `.opencode` config overrides every direct config).
14
18
  *
15
19
  * This module is deliberately IO-free: it takes raw JSONC text (or null when
16
20
  * a file does not exist) and returns a resolved view. Reading the files,
@@ -23,93 +27,185 @@
23
27
  * parse");
24
28
  * - a single key with the WRONG TYPE is dropped from that layer only, and
25
29
  * 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).
30
+ * - a RED-LINE key is honored ONLY in the GLOBAL file (D1). Written in a
31
+ * project file it is IGNORED outright and reported (see RED_LINE_EXEMPT_KEYS).
28
32
  */
33
+ /** Default tm_bash read-only allowlist (P3, command-level). The PS
34
+ * -Object entries are pure pipeline formatters — no write capability. */
35
+ export const DEFAULT_BASH_READONLY_ALLOWED = [
36
+ "ls", "cat", "head", "tail", "grep", "rg", "find", "awk", "sort", "uniq",
37
+ "wc", "cut", "dir", "Get-Content", "Get-ChildItem", "Select-String",
38
+ "Measure-Object", "Select-Object", "Where-Object", "Sort-Object",
39
+ "Group-Object", "Test-Path",
40
+ // Process LISTING, read-only and write-free. An agent verifying that a
41
+ // process really exited (a leftover browser, a stray server) had no allowed
42
+ // way to ask the OS, and a claim the user cannot check is worth less than one
43
+ // they can. findstr joins it for the same reason: `tasklist | findstr /i
44
+ // msedge` is the natural Windows spelling of that check, and refusing it only
45
+ // turned one call into two (live evidence: refused, then re-run with
46
+ // Select-String).
47
+ "tasklist", "ps", "findstr",
48
+ ];
29
49
  /**
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.
50
+ * Seeded tm_webfetch / tm_search domain allowlist — every host the search
51
+ * engines and data sources ride (all reachable from mainland China without
52
+ * API keys): wiki term / bilibili search / bing CN + international / baidu /
53
+ * sogou / 360, the npm registry (JSON search + package metadata) and the
54
+ * GitHub (search API + repo pages + raw/gist content), its ghproxy.net
55
+ * mainland mirror, and PARENT domains for baidu/moegirl so every sibling
56
+ * subdomain (baike./tieba./mzh./mobile.) is covered. A site's OWN asset CDN
57
+ * on a brand-unrelated domain has to be seeded too — same-site cannot infer it,
58
+ * and blocking it is what makes a page render blank (bdimg.com below is that
59
+ * case, measured). Subdomains of an entry are included; a lone "*" opens
60
+ * every host.
61
+ */
62
+ export const DEFAULT_WEBFETCH_DOMAINS = [
63
+ // CN search engines + content (parent domains cover every sibling subdomain)
64
+ "baidu.com", // www. search / baike. encyclopedia / tieba. — real sessions hit baike.baidu.com
65
+ // Baidu's OWN static + anti-spam CDN. Not a subdomain of baidu.com, so a
66
+ // same-site subresource policy can never infer it, and a page whose own
67
+ // bundle we block is a blank page we then report as "no content" — that is
68
+ // the bug this seed closes (measured 2026-09-23: baike.baidu.com/ rendered 0
69
+ // addressable nodes while the identical client with this host allowed
70
+ // rendered 260).
71
+ "bdimg.com", // bkssl. challenge scripts / resource. / static. asset bundles
72
+ "moegirl.org.cn", // mobile. term / mzh. main site — real sessions hit mzh
73
+ "bilibili.com", // search. / www. video pages / space.
74
+ "www.sogou.com",
75
+ "www.so.com",
76
+ "cn.bing.com",
77
+ "www.bing.com",
78
+ "zhihu.com", // CN Q&A
79
+ "juejin.cn", // CN dev community
80
+ "csdn.net", // CN dev blogs
81
+ "cnblogs.com", // CN dev blogs
82
+ "gitee.com", // CN code hosting
83
+ // international dev sources (reachable from CN, no API keys)
84
+ "github.com",
85
+ "api.github.com",
86
+ "raw.githubusercontent.com",
87
+ "gist.githubusercontent.com",
88
+ "ghproxy.net", // mainland mirror for github raw
89
+ "stackoverflow.com",
90
+ "npmjs.org", // registry. + www. package pages
91
+ "pypi.org",
92
+ "learn.microsoft.com",
93
+ ];
94
+ /**
95
+ * The honored-key registry — the single source of truth for keys, types,
96
+ * defaults and docs. Extend it when a new knob is wired: an unlisted real
97
+ * knob would be reported as "unknown" (a false positive), and a key missing
98
+ * here is missing from the generated template too.
32
99
  *
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.
100
+ * `default` is the ONLY default source; `resolveConfig` (src/tm/config.ts)
101
+ * fills it and clamps `number` values to `min`/`max`. A `number` whose
102
+ * default is an integer is truncated to an integer; a fractional default
103
+ * (searchRelevanceFloor, retryJitter) keeps its fraction.
37
104
  */
38
105
  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: "ptcWebBridge", env: "TM_PTC_WEB_BRIDGE", type: "string" },
73
- { key: "hitBlacklist", env: "TM_HIT_BLACKLIST", type: "string[]" },
74
- { key: "envProtectExtraDeny", env: "TM_ENV_PROTECT_EXTRA_DENY", type: "string" },
75
- { key: "shellEnv", env: "TM_SHELL_ENV", type: "string" },
76
- { key: "agentTemperature", env: "TM_AGENT_TEMPERATURE", type: "string" },
77
- { key: "compactionContext", env: "TM_COMPACTION_CONTEXT", type: "string" },
78
- // ---- RED-LINE knobs: a file value is ignored, always env/default ----
106
+ // ---- offload / preview / store ----
107
+ { key: "offloadThreshold", type: "number", default: 2000, min: 0, max: 10_000_000, doc: "卸载阈值(估算 token;等于阈值也卸载)。" },
108
+ { key: "previewLines", type: "number", default: 20, min: 1, max: 1000, doc: "预览构建器最多扫描的原始行数。" },
109
+ { key: "previewMaxTokens", type: "number", default: 80, min: 10, max: 100_000, doc: "预览的硬上限(估算 token)。" },
110
+ { key: "fetchMaxLines", type: "number", default: 2000, min: 1, max: 1_000_000, doc: "tm_fetch 单段最多返回的行数。" },
111
+ { key: "blackboardDir", type: "string", default: "", doc: "运行载荷存储目录;空 = 自动(<repo>/.git/opencode-team/blackboard)。" },
112
+ { key: "trajectoryDir", type: "string", default: "", doc: "轨迹存储目录;空 = 自动(<repo>/.git/opencode-team/trajectory)。" },
113
+ { key: "blackboardTtlDays", type: "number", default: 7, min: 1, max: 365, doc: "句柄 TTL(天),也是过期运行目录的清理周期。" },
114
+ { key: "memoryGlobalDir", type: "string", default: "", doc: "tm_memory 全局作用域目录;空 = 自动(~/.opencode-team/memories/global)。" },
115
+ { key: "memorySessionTtlMin", type: "number", default: 240, min: 1, max: 100_000, doc: "tm_memory 会话作用域条目 TTL(分钟)。" },
116
+ { key: "memoryMaxEntries", type: "number", default: 200, min: 1, max: 100_000, doc: "tm_memory 每个作用域的最大条目数;超限时 add 报错并提示 compact/forget。" },
117
+ { key: "memoryStaleDays", type: "number", default: 30, min: 0, max: 3650, doc: "tm_memory 陈旧标记天数;0 = 关闭 [stale Nd] 标记。" },
118
+ { key: "memorySessionPersist", type: "string", default: "", doc: "tm_memory 会话持久化:空 = 仅进程内;\"1\" = 同时落盘。" },
119
+ // ---- search ----
120
+ { key: "searchDefaultEngine", type: "string", default: "auto", doc: "tm_search 默认引擎;auto = 按查询分类并行扇出。" },
121
+ { key: "searchMaxHits", type: "number", default: 10, min: 3, max: 30, doc: "每个引擎腿与最终融合列表保留的命中数。" },
122
+ { key: "searchWeights", type: "record", default: {}, doc: "按引擎覆盖融合权重,如 {\"bing\": 0.2};未列出的沿用内置表。" },
123
+ { key: "searchDisabledEngines", type: "string[]", default: [], doc: "从引擎名册与所有 auto 路由中移除的引擎名。" },
124
+ { key: "searchRelevanceFloor", type: "number", default: 0.35, min: 0, max: 1, doc: "零重叠命中的权重系数(降权保留,不删除)。" },
125
+ { key: "hitBlacklist", type: "string[]", default: [], doc: "搜索结果里额外屏蔽的域名(与内置 maimai.cn 合并)。" },
126
+ // ---- offload tiering / web cache ----
127
+ { key: "offloadThresholdText", type: "number", default: 4000, min: 0, max: 10_000_000, doc: "文本/日志类卸载阈值;全局阈值显式设置且本键未设时继承全局。" },
128
+ { key: "offloadThresholdData", type: "number", default: 2000, min: 0, max: 10_000_000, doc: "json/csv/代码/二进制类卸载阈值;继承规则同上。" },
129
+ { key: "webCacheTtlSec", type: "number", default: 300, min: 0, max: 86_400, doc: "URL 级缓存 TTL(秒);0 = 关闭。" },
130
+ // ---- join / board ----
131
+ { key: "joinMaxWaitMs", type: "number", default: 60_000, min: 0, max: 600_000, doc: "tm_join 单次有界等待的上限(毫秒)。" },
132
+ { key: "boardMaxChars", type: "number", default: 200_000, min: 1_000, max: 2_000_000, doc: "tm_board_write 单个文件的字符上限。" },
133
+ { key: "boardMaxFiles", type: "number", default: 200, min: 4, max: 2_000, doc: "tm_board_write 每个会话目录的文件数上限。" },
134
+ // ---- task offload / store reclaim ----
135
+ { key: "taskOffload", type: "string", default: "on", enum: ["on", "off"], doc: "宿主后台子代理的大回复是否卸载为预览 + tm_join 指针;off = 原样注入。" },
136
+ { key: "storeReclaim", type: "string", default: "on", enum: ["on", "off"], doc: "启动时回收升级遗留的存储分片;off = 保留磁盘现状(测试用)。" },
137
+ // ---- bash timeout ----
138
+ { key: "bashTimeoutMaxMs", type: "number", default: 0, min: 0, max: 3_600_000, doc: "内置 shell 工具 timeout 参数的全局上限(毫秒);0 = 不限。" },
139
+ { key: "bashTimeoutProbeMs", type: "number", default: 60_000, min: 0, max: 600_000, doc: "只读探针命令的 timeout 上限(毫秒);0 = 关闭。" },
140
+ // ---- orphaned (kept so an existing config still parses) ----
141
+ { key: "askTimeoutFloorMin", type: "number", default: 1, min: 1, max: 1440, doc: "(已孤儿)v1 审批门 ask 超时的下限(分钟);保留以便旧配置继续解析。" },
142
+ // ---- v1-only knobs (listed + parseable; no v2 reader) ----
143
+ { key: "agentTemperature", type: "string", default: "", doc: "(v1-only)按角色覆盖 temperature,如 reviewer=0.05;team=0.4。" },
144
+ { key: "compactionContext", type: "string", default: "on", enum: ["on", "off"], doc: "(v1-only)压缩时推送必须存活的上下文清单。" },
145
+ { key: "shellEnv", type: "string", default: "", doc: "(v1-only)注入 shell 的 K=V;K2=V2 白名单透传。" },
146
+ { key: "ptcWebBridge", type: "string", default: "on", enum: ["on", "off"], doc: "(v1-only)tm_ptc_run 的 web 桥。" },
147
+ // ---- native offload / probe chain ----
148
+ { key: "nativeOffload", type: "string", default: "on", enum: ["on", "off"], doc: "宿主原生工具(read/grep/shell…)的大结果是否按 JIT 治理卸载;off = 原样进上下文。" },
149
+ { key: "nativeSnapshotMaxTokens", type: "number", default: 1200, min: 100, max: 20_000, doc: "原生浏览器快照按寻址行保留的 token 预算。" },
150
+ { key: "nativeReportMaxTokens", type: "number", default: 1600, min: 200, max: 20_000, doc: "原生报告形结果按表格保留的 token 预算。" },
151
+ { key: "probeChain", type: "string", default: "on", enum: ["on", "off"], doc: "连续原生 read/grep/glob/shell 后追加一行 Code Mode 采用提示;off = 关闭。" },
152
+ { key: "probeChainAfter", type: "number", default: 3, min: 0, max: 1000, doc: "连续多少次原生调用后开始提示;0 = 关闭。" },
153
+ // ---- v2 request layers ----
154
+ { key: "v2CodeMode", type: "string", default: "", doc: "v2 工具交付:direct = 发送 options.codemode=false;空 = 目录模式。" },
155
+ { key: "prune", type: "string", default: "on", enum: ["on", "off"], doc: "上下文裁剪(已结算消息替换为指针);off = 关闭。" },
156
+ { key: "pruneAtPercent", type: "number", default: 70, min: 40, max: 90, doc: "上下文裁剪启动的窗口占比(%)。" },
157
+ { key: "pruneKeepTailPercent", type: "number", default: 40, min: 0, max: 90, doc: "裁剪时尾部逐字保留的窗口占比(%)。" },
158
+ { key: "retry", type: "string", default: "on", enum: ["on", "off"], doc: "错峰重试(识别限流 + 注入等待 + 冷却);off = 关闭。" },
159
+ { key: "retryBaseMs", type: "number", default: 5000, min: 1, max: 3_600_000, doc: "重试退避基数(毫秒)。" },
160
+ { key: "retryMaxMs", type: "number", default: 60_000, min: 1, max: 3_600_000, doc: "重试退避上限(毫秒)。" },
161
+ { key: "retryJitter", type: "number", default: 0.3, min: 0, max: 0.95, doc: "重试退避抖动比例。" },
162
+ { key: "retryBreakAfter", type: "number", default: 5, min: 1, max: 1000, doc: "连续多少次错误后触发断路器。" },
163
+ { key: "retryCooldownMs", type: "number", default: 60_000, min: 0, max: 3_600_000, doc: "断路器冷却时长(毫秒)。" },
164
+ { key: "splitAdvice", type: "string", default: "on", enum: ["on", "off"], doc: "派发 brief 过大时注入拆分建议;off = 关闭。" },
165
+ { key: "splitBriefTokens", type: "number", default: 4000, min: 200, max: 200_000, doc: "触发拆分建议的 brief token 阈值。" },
166
+ { key: "splitMaxCriteria", type: "number", default: 3, min: 1, max: 50, doc: "拆分建议里每条交付的验收标准上限。" },
167
+ { key: "v2BrowserGate", type: "string", default: "on", enum: ["on", "off"], doc: "原生 browser_* 目录的域名/地址/R6 门禁;off = 关闭。" },
168
+ { key: "ledgerMaxItems", type: "number", default: 200, min: 10, max: 100_000, doc: "tm_ledger 每个会话的最大条目数。" },
169
+ // ---- RED-LINE knobs: honored ONLY in the global file (D1) ----
79
170
  {
80
171
  key: "envProtect",
81
- env: "TM_ENV_PROTECT",
82
172
  type: "string",
173
+ default: "strict",
83
174
  redLine: true,
84
175
  redLineReason: "R6 判定模式,off 即关掉环境防护;项目文件可被提交共享,不得关掉红线",
176
+ doc: "R6 环境防护模式(strict/standard/off)。",
85
177
  },
86
178
  {
87
179
  key: "r6FineAsk",
88
- env: "TM_R6_FINE_ASK",
89
180
  type: "string",
181
+ default: "",
90
182
  redLine: true,
91
183
  redLineReason: "R6 ask 策略,决定每条命令是否走细粒度判定;文件不得放宽",
184
+ doc: "R6 细粒度 ask 策略;off = 每条 shell 命令都升为 ask。",
92
185
  },
93
186
  {
94
187
  key: "privateSpace",
95
- env: "TM_PRIVATE_SPACE",
96
188
  type: "string",
189
+ default: "deny",
97
190
  redLine: true,
98
191
  redLineReason: "地址红线门,allow 会放开整段私网;文件不得放宽",
192
+ doc: "私网地址策略(allow/deny/ask)。",
99
193
  },
100
194
  {
101
195
  key: "webfetchAllowedDomains",
102
- env: "TM_WEBFETCH_ALLOWED_DOMAINS",
103
196
  type: "string[]",
197
+ default: DEFAULT_WEBFETCH_DOMAINS,
104
198
  redLine: true,
105
199
  redLineReason: "网络出网白名单;项目文件可被提交共享,不得放宽",
200
+ doc: "网络出网白名单(含子域;\"*\" = 任意主机)。",
106
201
  },
107
202
  {
108
203
  key: "bashReadonlyAllowed",
109
- env: "TM_BASH_READONLY_ALLOWED",
110
204
  type: "string[]",
205
+ default: DEFAULT_BASH_READONLY_ALLOWED,
111
206
  redLine: true,
112
207
  redLineReason: "P3 只读门;放宽即扩大可执行命令面",
208
+ doc: "P3 只读命令白名单(tm_bash / shell 探针)。",
113
209
  },
114
210
  ];
115
211
  /** The red-line keys, derived from the registry (single source of truth). */
@@ -218,7 +314,7 @@ export function parseJsonc(src) {
218
314
  // ---------------------------------------------------------------------------
219
315
  // Merge
220
316
  // ---------------------------------------------------------------------------
221
- function isPlainObject(v) {
317
+ export function isPlainObject(v) {
222
318
  return typeof v === "object" && v !== null && !Array.isArray(v);
223
319
  }
224
320
  function typeOk(type, v) {
@@ -233,11 +329,6 @@ function typeOk(type, v) {
233
329
  return isPlainObject(v) && Object.values(v).every((x) => typeof x === "number");
234
330
  }
235
331
  }
236
- /** `TM_CONFIG_ENV_ONLY` is truthy on 1/true/on/yes (case-insensitive). */
237
- function envOnlyFromEnv(env) {
238
- const raw = env.TM_CONFIG_ENV_ONLY;
239
- return typeof raw === "string" && /^(1|true|on|yes)$/i.test(raw.trim());
240
- }
241
332
  function projectLayerList(projectLayer) {
242
333
  if (projectLayer == null)
243
334
  return [];
@@ -251,13 +342,12 @@ function projectLayerList(projectLayer) {
251
342
  return out;
252
343
  }
253
344
  /**
254
- * Resolve the layered config. Pure: no IO, no globals read except the `env`
255
- * record handed in. See the module header for the three rules.
345
+ * Resolve the layered config. Pure: no IO, no globals. See the module
346
+ * header for the three rules.
256
347
  */
257
348
  export function resolveLayeredConfig(input) {
258
- const { env } = input;
259
349
  const exempt = new Set(input.exempt ?? RED_LINE_EXEMPT_KEYS);
260
- const envOnlyActive = input.envOnly ?? envOnlyFromEnv(env);
350
+ const envOnlyActive = input.envOnly ?? false;
261
351
  // Ordered low→high. envOnly removes every file layer BEFORE any parse.
262
352
  const fileLayers = [];
263
353
  if (!envOnlyActive) {
@@ -284,30 +374,23 @@ export function resolveLayeredConfig(input) {
284
374
  continue;
285
375
  }
286
376
  for (const [key, value] of Object.entries(obj)) {
287
- if (exempt.has(key)) {
288
- ignoredRedLineKeys.push({ key, layer: layer.name, value });
289
- continue;
290
- }
291
377
  const spec = KEY_BY_NAME.get(key);
292
378
  if (!spec) {
293
379
  unknownKeys.push({ key, layer: layer.name });
294
380
  continue;
295
381
  }
382
+ // D1: a red-line key is honored ONLY in the global file.
383
+ if (spec.redLine && layer.name !== "global") {
384
+ ignoredRedLineKeys.push({ key, layer: layer.name, value });
385
+ continue;
386
+ }
296
387
  if (!typeOk(spec.type, value))
297
388
  continue; // drop this key from THIS layer only
298
389
  fileValues.set(key, { value, source: layer.name });
299
390
  }
300
391
  }
301
- // env is the lowest layer; files override it.
302
392
  const values = {};
303
393
  const perKeySource = {};
304
- for (const spec of CONFIG_KEYS) {
305
- const raw = env[spec.env];
306
- if (typeof raw === "string" && raw.trim() !== "") {
307
- values[spec.key] = raw;
308
- perKeySource[spec.key] = "env";
309
- }
310
- }
311
394
  for (const [key, { value, source }] of fileValues) {
312
395
  values[key] = value;
313
396
  perKeySource[key] = source;
@@ -1 +1 @@
1
- {"version":3,"file":"config-layers.js","sourceRoot":"","sources":["../../src/tm/config-layers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-layers.js","sourceRoot":"","sources":["../../src/tm/config-layers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The global `team-mode.jsonc` template + its idempotent writer.
3
+ *
4
+ * `renderConfigTemplate()` walks `CONFIG_KEYS` and nothing else, so a comment,
5
+ * a key and its default can never drift from the registry. `ensureGlobalConfig`
6
+ * writes it ATOMICALLY (tmp + rename) and ONLY when the file is absent — an
7
+ * existing file is never overwritten (the user's edits are theirs).
8
+ *
9
+ * The plugin calls this at boot (see `createTmTools`), so a fresh install gets
10
+ * a fully-commented config listing every key. `TM_CONFIG_AUTOCREATE=off` (an
11
+ * internal/test switch) or the plugin option `autoCreate:false` turns it off.
12
+ */
13
+ /** Render the full global config file (JSONC, every registry key listed).
14
+ *
15
+ * Every key is written as a COMMENT, so the auto-created file sets NOTHING:
16
+ * the registry defaults answer, and a personality's `configDefaults` (v2's
17
+ * `webfetchAllowedDomains: ["*"]`) is not shadowed by a file nobody edited.
18
+ * A user uncomments the keys they want to change. The file is valid JSONC
19
+ * (`{}` once the comments are masked). */
20
+ export declare function renderConfigTemplate(): string;
21
+ export type AutoCreateState = "created" | "present" | "off" | "failed";
22
+ /**
23
+ * Ensure the global config file exists. `autoCreate:false` writes nothing
24
+ * and reports `off`. An existing file is left byte-for-byte untouched
25
+ * (`present`). A missing one is written atomically (`created`). A write
26
+ * that THROWS reports `failed` — distinct from `present`, so the boot row
27
+ * does not claim a file exists when the write never landed.
28
+ */
29
+ export declare function ensureGlobalConfig(globalDir: string, opts?: {
30
+ autoCreate?: boolean;
31
+ }): AutoCreateState;
32
+ //# sourceMappingURL=config-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-template.d.ts","sourceRoot":"","sources":["../../src/tm/config-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH;;;;;;2CAM2C;AAC3C,wBAAgB,oBAAoB,IAAI,MAAM,CAU7C;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEtE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,eAAe,CAoB1G"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * The global `team-mode.jsonc` template + its idempotent writer.
3
+ *
4
+ * `renderConfigTemplate()` walks `CONFIG_KEYS` and nothing else, so a comment,
5
+ * a key and its default can never drift from the registry. `ensureGlobalConfig`
6
+ * writes it ATOMICALLY (tmp + rename) and ONLY when the file is absent — an
7
+ * existing file is never overwritten (the user's edits are theirs).
8
+ *
9
+ * The plugin calls this at boot (see `createTmTools`), so a fresh install gets
10
+ * a fully-commented config listing every key. `TM_CONFIG_AUTOCREATE=off` (an
11
+ * internal/test switch) or the plugin option `autoCreate:false` turns it off.
12
+ */
13
+ import * as fs from "node:fs";
14
+ import * as path from "node:path";
15
+ import { CONFIG_KEYS } from "./config-layers.js";
16
+ import { CONFIG_FILE_NAME } from "./config-files.js";
17
+ /** The file header — Chinese, and the only prose the template carries. */
18
+ const HEADER = [
19
+ "// team-mode.jsonc — TeamMode 唯一配置源",
20
+ "// 本文件由插件首次启动时自动生成;删除后下次启动会重新生成。",
21
+ "// 层序:全局(本文件) < 项目(<repo>/team-mode.jsonc 或 <repo>/.opencode/team-mode.jsonc)",
22
+ "// 红线键(redLine)只能在本全局文件里设置;项目文件设置会被忽略。",
23
+ ].join("\n");
24
+ /** Render the full global config file (JSONC, every registry key listed).
25
+ *
26
+ * Every key is written as a COMMENT, so the auto-created file sets NOTHING:
27
+ * the registry defaults answer, and a personality's `configDefaults` (v2's
28
+ * `webfetchAllowedDomains: ["*"]`) is not shadowed by a file nobody edited.
29
+ * A user uncomments the keys they want to change. The file is valid JSONC
30
+ * (`{}` once the comments are masked). */
31
+ export function renderConfigTemplate() {
32
+ const lines = [HEADER, "{"];
33
+ CONFIG_KEYS.forEach((spec, i) => {
34
+ const doc = spec.redLine ? `${spec.doc}(红线:仅全局)` : spec.doc;
35
+ lines.push(` // ${doc}`);
36
+ const comma = i === CONFIG_KEYS.length - 1 ? "" : ",";
37
+ lines.push(` // ${JSON.stringify(spec.key)}: ${JSON.stringify(spec.default)}${comma}`);
38
+ });
39
+ lines.push("}");
40
+ return lines.join("\n") + "\n";
41
+ }
42
+ /**
43
+ * Ensure the global config file exists. `autoCreate:false` writes nothing
44
+ * and reports `off`. An existing file is left byte-for-byte untouched
45
+ * (`present`). A missing one is written atomically (`created`). A write
46
+ * that THROWS reports `failed` — distinct from `present`, so the boot row
47
+ * does not claim a file exists when the write never landed.
48
+ */
49
+ export function ensureGlobalConfig(globalDir, opts = {}) {
50
+ if (opts.autoCreate === false)
51
+ return "off";
52
+ const file = path.join(globalDir, CONFIG_FILE_NAME);
53
+ try {
54
+ if (fs.existsSync(file))
55
+ return "present";
56
+ }
57
+ catch {
58
+ /* fall through to the write attempt */
59
+ }
60
+ try {
61
+ fs.mkdirSync(globalDir, { recursive: true });
62
+ const tmp = `${file}.tmp-${process.pid}-${Date.now()}`;
63
+ fs.writeFileSync(tmp, renderConfigTemplate(), "utf8");
64
+ fs.renameSync(tmp, file);
65
+ return "created";
66
+ }
67
+ catch {
68
+ // A read-only config dir must not cost the session its tools; the file
69
+ // simply stays absent and the registry defaults answer. Reported as
70
+ // `failed` so the boot row does not read as "a file is there".
71
+ return "failed";
72
+ }
73
+ }
74
+ //# sourceMappingURL=config-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-template.js","sourceRoot":"","sources":["../../src/tm/config-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,0EAA0E;AAC1E,MAAM,MAAM,GAAG;IACb,qCAAqC;IACrC,kCAAkC;IAClC,+EAA+E;IAC/E,wCAAwC;CACzC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ;;;;;;2CAM2C;AAC3C,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA;QAC3D,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAA;QACzB,MAAM,KAAK,GAAG,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QACrD,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAChC,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,OAAiC,EAAE;IACvF,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;IACnD,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IACD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QACtD,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,EAAE,MAAM,CAAC,CAAA;QACrD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACxB,OAAO,SAAS,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,qEAAqE;QACrE,+DAA+D;QAC/D,OAAO,QAAQ,CAAA;IACjB,CAAC;AACH,CAAC"}