@te-river/opencode-team-mode 1.5.5 → 1.5.7

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 (163) hide show
  1. package/README.md +544 -634
  2. package/README.zh-CN.md +511 -576
  3. package/dist/agents.d.ts +6 -1
  4. package/dist/agents.d.ts.map +1 -1
  5. package/dist/agents.js +113 -533
  6. package/dist/agents.js.map +1 -1
  7. package/dist/approval-gate.d.ts +16 -0
  8. package/dist/approval-gate.d.ts.map +1 -1
  9. package/dist/approval-gate.js +8 -1
  10. package/dist/approval-gate.js.map +1 -1
  11. package/dist/blackboard.d.ts.map +1 -1
  12. package/dist/blackboard.js +3 -2
  13. package/dist/blackboard.js.map +1 -1
  14. package/dist/commands.d.ts.map +1 -1
  15. package/dist/commands.js +7 -6
  16. package/dist/commands.js.map +1 -1
  17. package/dist/envprotect/bash-classify.d.ts +42 -0
  18. package/dist/envprotect/bash-classify.d.ts.map +1 -0
  19. package/dist/envprotect/bash-classify.js +221 -0
  20. package/dist/envprotect/bash-classify.js.map +1 -0
  21. package/dist/envprotect/gate-predicates.d.ts +57 -0
  22. package/dist/envprotect/gate-predicates.d.ts.map +1 -0
  23. package/dist/envprotect/gate-predicates.js +174 -0
  24. package/dist/envprotect/gate-predicates.js.map +1 -0
  25. package/dist/envprotect/hook.d.ts +45 -0
  26. package/dist/envprotect/hook.d.ts.map +1 -0
  27. package/dist/envprotect/hook.js +158 -0
  28. package/dist/envprotect/hook.js.map +1 -0
  29. package/dist/envprotect/path-classify.d.ts +16 -0
  30. package/dist/envprotect/path-classify.d.ts.map +1 -0
  31. package/dist/envprotect/path-classify.js +72 -0
  32. package/dist/envprotect/path-classify.js.map +1 -0
  33. package/dist/envprotect/patterns.d.ts +77 -0
  34. package/dist/envprotect/patterns.d.ts.map +1 -0
  35. package/dist/envprotect/patterns.js +182 -0
  36. package/dist/envprotect/patterns.js.map +1 -0
  37. package/dist/envprotect.d.ts +19 -217
  38. package/dist/envprotect.d.ts.map +1 -1
  39. package/dist/envprotect.js +18 -803
  40. package/dist/envprotect.js.map +1 -1
  41. package/dist/fs-safe.d.ts +16 -0
  42. package/dist/fs-safe.d.ts.map +1 -0
  43. package/dist/fs-safe.js +56 -0
  44. package/dist/fs-safe.js.map +1 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +22 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/prompts/lead.d.ts +7 -0
  49. package/dist/prompts/lead.d.ts.map +1 -0
  50. package/dist/prompts/lead.js +233 -0
  51. package/dist/prompts/lead.js.map +1 -0
  52. package/dist/prompts/shared.d.ts +8 -0
  53. package/dist/prompts/shared.d.ts.map +1 -0
  54. package/dist/prompts/shared.js +120 -0
  55. package/dist/prompts/shared.js.map +1 -0
  56. package/dist/prompts/specialists.d.ts +12 -0
  57. package/dist/prompts/specialists.d.ts.map +1 -0
  58. package/dist/prompts/specialists.js +241 -0
  59. package/dist/prompts/specialists.js.map +1 -0
  60. package/dist/shell-text.d.ts +14 -0
  61. package/dist/shell-text.d.ts.map +1 -0
  62. package/dist/shell-text.js +16 -0
  63. package/dist/shell-text.js.map +1 -0
  64. package/dist/tm/args-schema.d.ts +42 -0
  65. package/dist/tm/args-schema.d.ts.map +1 -0
  66. package/dist/tm/args-schema.js +213 -0
  67. package/dist/tm/args-schema.js.map +1 -0
  68. package/dist/tm/browser.d.ts +52 -0
  69. package/dist/tm/browser.d.ts.map +1 -0
  70. package/dist/tm/browser.js +361 -0
  71. package/dist/tm/browser.js.map +1 -0
  72. package/dist/tm/client-unwrap.d.ts +38 -0
  73. package/dist/tm/client-unwrap.d.ts.map +1 -0
  74. package/dist/tm/client-unwrap.js +113 -0
  75. package/dist/tm/client-unwrap.js.map +1 -0
  76. package/dist/tm/config.d.ts +55 -19
  77. package/dist/tm/config.d.ts.map +1 -1
  78. package/dist/tm/config.js +74 -19
  79. package/dist/tm/config.js.map +1 -1
  80. package/dist/tm/guard.d.ts.map +1 -1
  81. package/dist/tm/guard.js +4 -7
  82. package/dist/tm/guard.js.map +1 -1
  83. package/dist/tm/index.d.ts +24 -7
  84. package/dist/tm/index.d.ts.map +1 -1
  85. package/dist/tm/index.js +111 -21
  86. package/dist/tm/index.js.map +1 -1
  87. package/dist/tm/memory.d.ts +88 -0
  88. package/dist/tm/memory.d.ts.map +1 -0
  89. package/dist/tm/memory.js +360 -0
  90. package/dist/tm/memory.js.map +1 -0
  91. package/dist/tm/pipelines.d.ts +58 -0
  92. package/dist/tm/pipelines.d.ts.map +1 -0
  93. package/dist/tm/pipelines.js +308 -0
  94. package/dist/tm/pipelines.js.map +1 -0
  95. package/dist/tm/preview.d.ts +6 -1
  96. package/dist/tm/preview.d.ts.map +1 -1
  97. package/dist/tm/preview.js +63 -13
  98. package/dist/tm/preview.js.map +1 -1
  99. package/dist/tm/ptc/budgets.d.ts +38 -0
  100. package/dist/tm/ptc/budgets.d.ts.map +1 -0
  101. package/dist/tm/ptc/budgets.js +59 -0
  102. package/dist/tm/ptc/budgets.js.map +1 -0
  103. package/dist/tm/ptc/contract.d.ts +131 -0
  104. package/dist/tm/ptc/contract.d.ts.map +1 -0
  105. package/dist/tm/ptc/contract.js +47 -0
  106. package/dist/tm/ptc/contract.js.map +1 -0
  107. package/dist/tm/ptc/driver.d.ts +37 -0
  108. package/dist/tm/ptc/driver.d.ts.map +1 -0
  109. package/dist/tm/ptc/driver.js +181 -0
  110. package/dist/tm/ptc/driver.js.map +1 -0
  111. package/dist/tm/ptc/engines.d.ts +32 -0
  112. package/dist/tm/ptc/engines.d.ts.map +1 -0
  113. package/dist/tm/ptc/engines.js +201 -0
  114. package/dist/tm/ptc/engines.js.map +1 -0
  115. package/dist/tm/ptc/gate.d.ts +28 -0
  116. package/dist/tm/ptc/gate.d.ts.map +1 -0
  117. package/dist/tm/ptc/gate.js +130 -0
  118. package/dist/tm/ptc/gate.js.map +1 -0
  119. package/dist/tm/ptc/index.d.ts +19 -0
  120. package/dist/tm/ptc/index.d.ts.map +1 -0
  121. package/dist/tm/ptc/index.js +15 -0
  122. package/dist/tm/ptc/index.js.map +1 -0
  123. package/dist/tm/ptc/pscan.d.ts +11 -0
  124. package/dist/tm/ptc/pscan.d.ts.map +1 -0
  125. package/dist/tm/ptc/pscan.js +27 -0
  126. package/dist/tm/ptc/pscan.js.map +1 -0
  127. package/dist/tm/ptc/summary.d.ts +17 -0
  128. package/dist/tm/ptc/summary.d.ts.map +1 -0
  129. package/dist/tm/ptc/summary.js +112 -0
  130. package/dist/tm/ptc/summary.js.map +1 -0
  131. package/dist/tm/ptc/tool.d.ts +35 -0
  132. package/dist/tm/ptc/tool.d.ts.map +1 -0
  133. package/dist/tm/ptc/tool.js +136 -0
  134. package/dist/tm/ptc/tool.js.map +1 -0
  135. package/dist/tm/ptc.d.ts +45 -26
  136. package/dist/tm/ptc.d.ts.map +1 -1
  137. package/dist/tm/ptc.js +71 -45
  138. package/dist/tm/ptc.js.map +1 -1
  139. package/dist/tm/result.d.ts +34 -0
  140. package/dist/tm/result.d.ts.map +1 -0
  141. package/dist/tm/result.js +87 -0
  142. package/dist/tm/result.js.map +1 -0
  143. package/dist/tm/search.d.ts +58 -0
  144. package/dist/tm/search.d.ts.map +1 -0
  145. package/dist/tm/search.js +229 -0
  146. package/dist/tm/search.js.map +1 -0
  147. package/dist/tm/shell-bridge.d.ts +22 -0
  148. package/dist/tm/shell-bridge.d.ts.map +1 -0
  149. package/dist/tm/shell-bridge.js +116 -0
  150. package/dist/tm/shell-bridge.js.map +1 -0
  151. package/dist/tm/store.d.ts.map +1 -1
  152. package/dist/tm/store.js +2 -1
  153. package/dist/tm/store.js.map +1 -1
  154. package/dist/tm/tools.d.ts +13 -71
  155. package/dist/tm/tools.d.ts.map +1 -1
  156. package/dist/tm/tools.js +22 -656
  157. package/dist/tm/tools.js.map +1 -1
  158. package/dist/tm/webfetch.d.ts +109 -0
  159. package/dist/tm/webfetch.d.ts.map +1 -0
  160. package/dist/tm/webfetch.js +305 -0
  161. package/dist/tm/webfetch.js.map +1 -0
  162. package/docs/installation.md +201 -0
  163. package/package.json +4 -3
@@ -6,20 +6,34 @@
6
6
  * (same fail-soft philosophy as blackboard.resolveTtlMs and
7
7
  * envprotect.resolveEnvProtectMode).
8
8
  *
9
- * Token 口径 (estimate basis): tokens ≈ chars/4, ceil. This is a rough
10
- * ASCII/code calibration; CJK text is under-counted by it (one CJK char is
11
- * closer to a full token than to 0.25). Two design choices keep that honest:
12
- * the conservative boundary (estimate == threshold still offloads) and the
13
- * hard preview cap — a mis-estimate can only make governance MORE aggressive,
14
- * never less. This口径 is pinned by test-tm-tools.mjs.
9
+ * Token 口径 (estimate basis): CJK-range code points ≈ one token each,
10
+ * everything else tokens ≈ chars/4, ceil. Pure chars/4 under-counted CJK
11
+ * up to 4× — the LESS-governed direction for CJK-heavy payloads — so CJK
12
+ * now counts as a full token (offload earlier, the safe direction). Two
13
+ * design choices keep the estimate honest: the conservative boundary
14
+ * (estimate == threshold still offloads) and the hard preview cap. This
15
+ * 口径 is pinned by test-tm-tools.mjs.
15
16
  *
16
- * Naming note: TM_BLACKBOARD_DIR (this module, run-payload store under the
17
- * project root, default `.blackboard/`) is a DIFFERENT artifact from the
18
- * team blackboard in blackboard.ts (`.git/opencode-team/`, plugin options).
19
- * They share a philosophy (TTL sweeper is the sole cleanup path), not code.
17
+ * Naming note: TM_BLACKBOARD_DIR (this module, run-payload store, default
18
+ * AUTO = `<repo>/.git/opencode-team/blackboard`) is a DIFFERENT artifact
19
+ * from the team blackboard in blackboard.ts (`.git/opencode-team/`,
20
+ * plugin options). They share a root philosophy (TTL sweeper is the sole
21
+ * cleanup path), not code.
20
22
  */
21
- /** Default tm_bash read-only allowlist (P3, command-level). */
23
+ /** Default tm_bash read-only allowlist (P3, command-level). The PS
24
+ * -Object entries are pure pipeline formatters — no write capability. */
22
25
  export declare const DEFAULT_BASH_READONLY_ALLOWED: readonly string[];
26
+ /**
27
+ * Seeded tm_webfetch / tm_search domain allowlist — every host the search
28
+ * engines and data sources ride (all reachable from mainland China without
29
+ * API keys): wiki term / bilibili search / bing CN + international / baidu /
30
+ * sogou / 360, the npm registry (JSON search + package metadata) and the
31
+ * GitHub search API (JSON). Subdomains of an entry are included;
32
+ * TM_WEBFETCH_ALLOWED_DOMAINS overrides the list (comma/semicolon
33
+ * separated; a lone "*" opens every host — keep the engine hosts or
34
+ * tm_search's engines lose their targets).
35
+ */
36
+ export declare const DEFAULT_WEBFETCH_DOMAINS: readonly string[];
23
37
  export interface TmConfig {
24
38
  /** Offload boundary in estimated tokens (estimate == threshold offloads). */
25
39
  offloadThreshold: number;
@@ -29,14 +43,21 @@ export interface TmConfig {
29
43
  previewMaxTokens: number;
30
44
  /** Single tm_fetch segment cap in lines. */
31
45
  fetchMaxLines: number;
32
- /** Run-payload store dir (relative to project root, or absolute). */
46
+ /** Run-payload store dir. Empty = AUTO (<repo>/.git/opencode-team/blackboard,
47
+ * tmpdir fallback); explicit value = absolute, or relative to project root. */
33
48
  blackboardDir: string;
34
- /** Trajectory store dir (relative to project root, or absolute). */
49
+ /** Trajectory store dir. Empty = AUTO (<repo>/.git/opencode-team/trajectory,
50
+ * tmpdir fallback); explicit value = absolute, or relative to project root. */
35
51
  trajectoryDir: string;
36
52
  /** Handle TTL in days (expire_at + physical sweep of expired run dirs). */
37
53
  blackboardTtlDays: number;
38
54
  /** P3 read-only command allowlist for tm_bash. */
39
55
  bashReadonlyAllowed: string[];
56
+ /** tm_webfetch domain allowlist (subdomains included; "*" = any host). */
57
+ webfetchAllowedDomains: string[];
58
+ /** tm_memory GLOBAL scope dir. Empty = auto (~/.opencode-team/memories/global
59
+ * — user-level, follows the user across projects). */
60
+ memoryGlobalDir: string;
40
61
  /** Hard cap on a PTC program source string length (chars). */
41
62
  ptcMaxProgramChars: number;
42
63
  /** Ceiling for per-run bridge-call budget (callers may only tighten). */
@@ -53,8 +74,8 @@ export declare const TM_CONFIG_DEFAULTS: {
53
74
  readonly previewLines: 20;
54
75
  readonly previewMaxTokens: 80;
55
76
  readonly fetchMaxLines: 2000;
56
- readonly blackboardDir: ".blackboard/";
57
- readonly trajectoryDir: ".trajectory/";
77
+ readonly blackboardDir: "";
78
+ readonly trajectoryDir: "";
58
79
  readonly blackboardTtlDays: 7;
59
80
  readonly ptcMaxProgramChars: 4000;
60
81
  readonly ptcMaxCalls: 20;
@@ -83,15 +104,30 @@ export declare const PTC_BUDGET_BOUNDS: {
83
104
  };
84
105
  type EnvLike = Record<string, string | undefined>;
85
106
  /**
86
- * Parse `TM_BASH_READONLY_ALLOWED`. Unset/absent -> null (caller applies the
87
- * default list). An explicitly EMPTY string parses to [] (deny-all bash) —
88
- * an explicit user choice is respected; separator is comma or semicolon.
107
+ * Parse a comma/semicolon-separated allowlist env var. Unset/absent -> null
108
+ * (caller applies the default). An explicitly EMPTY string parses to []
109
+ * (deny-all) — an explicit user choice is respected. Shared by
110
+ * TM_BASH_READONLY_ALLOWED and TM_WEBFETCH_ALLOWED_DOMAINS.
89
111
  */
90
112
  export declare function parseAllowlistEnv(raw: unknown): string[] | null;
113
+ /** Historical alias — identical grammar to parseAllowlistEnv. */
114
+ export declare const parseWebfetchAllowlistEnv: typeof parseAllowlistEnv;
91
115
  /** Resolve the full tm-tools config from an env-like record (default: process.env). */
92
116
  export declare function resolveTmConfig(env?: EnvLike): TmConfig;
117
+ /** Token cost of ONE code point — CJK-range ≈ 1 token (kana / Hangul /
118
+ * fullwidth / CJK punctuation all sit above U+2E80), everything else ≈ 0.25
119
+ * (chars/4). Shared by estimateTokens and preview.capTokens so the two
120
+ * can never drift apart (a chars/4 cap would under-count CJK bodies 4×). */
121
+ export declare function tokenCostOf(cp: number): number;
93
122
  /**
94
- * Token estimate — chars/4, ceil (口径 documented above). Empty input = 0.
123
+ * Token estimate — CJK-aware: CJK-range code points count ≈ one token each,
124
+ * everything else chars/4, ceil. The pure chars/4 basis under-counted CJK
125
+ * up to 4× (one CJK char ≈ one token), which let CJK-heavy payloads ride
126
+ * inline PAST the threshold — a mis-estimate in the LESS-governed
127
+ * direction. Counting CJK as a full token errs the other way (offload
128
+ * earlier), the safe direction for context size. The conservative
129
+ * boundary (estimate == threshold still offloads) is unchanged. Empty
130
+ * input = 0.
95
131
  */
96
132
  export declare function estimateTokens(text: string): number;
97
133
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAI1D,CAAA;AAED,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAA;IACxB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAA;IACpB,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,CAAA;IACxB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAA;IACrB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAA;IACrB,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAA;IACzB,kDAAkD;IAClD,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAE7B,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAA;IAC1B,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAA;IACpB,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CACxC;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAarB,CAAA;AAEV,mEAAmE;AACnE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAKpB,CAAA;AAEV,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAmBjD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CAG/D;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,GAAE,OAAqB,GAAG,QAAQ,CAiBpE;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAExE;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;0EAC0E;AAC1E,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAK1D,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAUrD,CAAA;AAED,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAA;IACxB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAA;IACpB,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,CAAA;IACxB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB;oFACgF;IAChF,aAAa,EAAE,MAAM,CAAA;IACrB;oFACgF;IAChF,aAAa,EAAE,MAAM,CAAA;IACrB,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAA;IACzB,kDAAkD;IAClD,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,0EAA0E;IAC1E,sBAAsB,EAAE,MAAM,EAAE,CAAA;IAChC;2DACuD;IACvD,eAAe,EAAE,MAAM,CAAA;IAEvB,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAA;IAC1B,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAA;IACpB,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CACxC;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAmBrB,CAAA;AAEV,mEAAmE;AACnE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAKpB,CAAA;AAEV,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAmBjD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CAG/D;AAED,iEAAiE;AACjE,eAAO,MAAM,yBAAyB,0BAAoB,CAAA;AAE1D,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,GAAE,OAAqB,GAAG,QAAQ,CAoBpE;AAMD;;;6EAG6E;AAC7E,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAExE;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D"}
package/dist/tm/config.js CHANGED
@@ -6,31 +6,62 @@
6
6
  * (same fail-soft philosophy as blackboard.resolveTtlMs and
7
7
  * envprotect.resolveEnvProtectMode).
8
8
  *
9
- * Token 口径 (estimate basis): tokens ≈ chars/4, ceil. This is a rough
10
- * ASCII/code calibration; CJK text is under-counted by it (one CJK char is
11
- * closer to a full token than to 0.25). Two design choices keep that honest:
12
- * the conservative boundary (estimate == threshold still offloads) and the
13
- * hard preview cap — a mis-estimate can only make governance MORE aggressive,
14
- * never less. This口径 is pinned by test-tm-tools.mjs.
9
+ * Token 口径 (estimate basis): CJK-range code points ≈ one token each,
10
+ * everything else tokens ≈ chars/4, ceil. Pure chars/4 under-counted CJK
11
+ * up to 4× — the LESS-governed direction for CJK-heavy payloads — so CJK
12
+ * now counts as a full token (offload earlier, the safe direction). Two
13
+ * design choices keep the estimate honest: the conservative boundary
14
+ * (estimate == threshold still offloads) and the hard preview cap. This
15
+ * 口径 is pinned by test-tm-tools.mjs.
15
16
  *
16
- * Naming note: TM_BLACKBOARD_DIR (this module, run-payload store under the
17
- * project root, default `.blackboard/`) is a DIFFERENT artifact from the
18
- * team blackboard in blackboard.ts (`.git/opencode-team/`, plugin options).
19
- * They share a philosophy (TTL sweeper is the sole cleanup path), not code.
17
+ * Naming note: TM_BLACKBOARD_DIR (this module, run-payload store, default
18
+ * AUTO = `<repo>/.git/opencode-team/blackboard`) is a DIFFERENT artifact
19
+ * from the team blackboard in blackboard.ts (`.git/opencode-team/`,
20
+ * plugin options). They share a root philosophy (TTL sweeper is the sole
21
+ * cleanup path), not code.
20
22
  */
21
- /** Default tm_bash read-only allowlist (P3, command-level). */
23
+ /** Default tm_bash read-only allowlist (P3, command-level). The PS
24
+ * -Object entries are pure pipeline formatters — no write capability. */
22
25
  export const DEFAULT_BASH_READONLY_ALLOWED = [
23
26
  "ls", "cat", "head", "tail", "grep", "rg", "find", "awk", "sort", "uniq",
24
27
  "wc", "cut", "dir", "Get-Content", "Get-ChildItem", "Select-String",
25
- "Measure-Object",
28
+ "Measure-Object", "Select-Object", "Where-Object", "Sort-Object",
29
+ "Group-Object",
30
+ ];
31
+ /**
32
+ * Seeded tm_webfetch / tm_search domain allowlist — every host the search
33
+ * engines and data sources ride (all reachable from mainland China without
34
+ * API keys): wiki term / bilibili search / bing CN + international / baidu /
35
+ * sogou / 360, the npm registry (JSON search + package metadata) and the
36
+ * GitHub search API (JSON). Subdomains of an entry are included;
37
+ * TM_WEBFETCH_ALLOWED_DOMAINS overrides the list (comma/semicolon
38
+ * separated; a lone "*" opens every host — keep the engine hosts or
39
+ * tm_search's engines lose their targets).
40
+ */
41
+ export const DEFAULT_WEBFETCH_DOMAINS = [
42
+ "mobile.moegirl.org.cn",
43
+ "search.bilibili.com",
44
+ "cn.bing.com",
45
+ "www.bing.com",
46
+ "www.baidu.com",
47
+ "www.sogou.com",
48
+ "www.so.com",
49
+ "registry.npmjs.org",
50
+ "api.github.com",
26
51
  ];
27
52
  export const TM_CONFIG_DEFAULTS = {
28
53
  offloadThreshold: 2000,
29
54
  previewLines: 20,
30
55
  previewMaxTokens: 80,
31
56
  fetchMaxLines: 2000,
32
- blackboardDir: ".blackboard/",
33
- trajectoryDir: ".trajectory/",
57
+ // Empty string = AUTO: resolve git-aware at runtime —
58
+ // <repo>/.git/opencode-team/{blackboard,trajectory} (tmpdir fallback for
59
+ // non-git workspaces). Keeps the payload/trajectory stores out of the
60
+ // user's working tree (user projects never had .blackboard/.trajectory
61
+ // gitignore entries). An explicit TM_BLACKBOARD_DIR / TM_TRAJECTORY_DIR
62
+ // keeps the old semantics: absolute, or relative to the project root.
63
+ blackboardDir: "",
64
+ trajectoryDir: "",
34
65
  blackboardTtlDays: 7,
35
66
  ptcMaxProgramChars: 4000,
36
67
  ptcMaxCalls: 20,
@@ -65,15 +96,18 @@ function envStr(env, key, def) {
65
96
  return v === "" ? def : v;
66
97
  }
67
98
  /**
68
- * Parse `TM_BASH_READONLY_ALLOWED`. Unset/absent -> null (caller applies the
69
- * default list). An explicitly EMPTY string parses to [] (deny-all bash) —
70
- * an explicit user choice is respected; separator is comma or semicolon.
99
+ * Parse a comma/semicolon-separated allowlist env var. Unset/absent -> null
100
+ * (caller applies the default). An explicitly EMPTY string parses to []
101
+ * (deny-all) — an explicit user choice is respected. Shared by
102
+ * TM_BASH_READONLY_ALLOWED and TM_WEBFETCH_ALLOWED_DOMAINS.
71
103
  */
72
104
  export function parseAllowlistEnv(raw) {
73
105
  if (typeof raw !== "string")
74
106
  return null;
75
107
  return raw.split(/[,;]/).map((s) => s.trim()).filter(Boolean);
76
108
  }
109
+ /** Historical alias — identical grammar to parseAllowlistEnv. */
110
+ export const parseWebfetchAllowlistEnv = parseAllowlistEnv;
77
111
  /** Resolve the full tm-tools config from an env-like record (default: process.env). */
78
112
  export function resolveTmConfig(env = process.env) {
79
113
  const allowlist = parseAllowlistEnv(env.TM_BASH_READONLY_ALLOWED);
@@ -86,6 +120,8 @@ export function resolveTmConfig(env = process.env) {
86
120
  trajectoryDir: envStr(env, "TM_TRAJECTORY_DIR", TM_CONFIG_DEFAULTS.trajectoryDir),
87
121
  blackboardTtlDays: envInt(env, "TM_BLACKBOARD_TTL", TM_CONFIG_DEFAULTS.blackboardTtlDays, 1, 365),
88
122
  bashReadonlyAllowed: allowlist ?? [...DEFAULT_BASH_READONLY_ALLOWED],
123
+ webfetchAllowedDomains: parseAllowlistEnv(env.TM_WEBFETCH_ALLOWED_DOMAINS) ?? [...DEFAULT_WEBFETCH_DOMAINS],
124
+ memoryGlobalDir: envStr(env, "TM_MEMORY_GLOBAL_DIR", ""),
89
125
  ptcMaxProgramChars: envInt(env, "TM_PTC_MAX_PROGRAM_CHARS", TM_CONFIG_DEFAULTS.ptcMaxProgramChars, PTC_BUDGET_BOUNDS.programChars.min, PTC_BUDGET_BOUNDS.programChars.max),
90
126
  ptcMaxCalls: envInt(env, "TM_PTC_MAX_CALLS", TM_CONFIG_DEFAULTS.ptcMaxCalls, PTC_BUDGET_BOUNDS.maxCalls.min, PTC_BUDGET_BOUNDS.maxCalls.max),
91
127
  ptcMaxErrors: envInt(env, "TM_PTC_MAX_ERRORS", TM_CONFIG_DEFAULTS.ptcMaxErrors, PTC_BUDGET_BOUNDS.maxErrors.min, PTC_BUDGET_BOUNDS.maxErrors.max),
@@ -97,11 +133,30 @@ function resolveEngine(raw) {
97
133
  const v = typeof raw === "string" ? raw.trim().toLowerCase() : "";
98
134
  return v === "worker" || v === "inline" ? v : "auto";
99
135
  }
136
+ /** Token cost of ONE code point — CJK-range ≈ 1 token (kana / Hangul /
137
+ * fullwidth / CJK punctuation all sit above U+2E80), everything else ≈ 0.25
138
+ * (chars/4). Shared by estimateTokens and preview.capTokens so the two
139
+ * can never drift apart (a chars/4 cap would under-count CJK bodies 4×). */
140
+ export function tokenCostOf(cp) {
141
+ return cp >= 0x2e80 ? 1 : 0.25;
142
+ }
100
143
  /**
101
- * Token estimate — chars/4, ceil (口径 documented above). Empty input = 0.
144
+ * Token estimate — CJK-aware: CJK-range code points count ≈ one token each,
145
+ * everything else chars/4, ceil. The pure chars/4 basis under-counted CJK
146
+ * up to 4× (one CJK char ≈ one token), which let CJK-heavy payloads ride
147
+ * inline PAST the threshold — a mis-estimate in the LESS-governed
148
+ * direction. Counting CJK as a full token errs the other way (offload
149
+ * earlier), the safe direction for context size. The conservative
150
+ * boundary (estimate == threshold still offloads) is unchanged. Empty
151
+ * input = 0.
102
152
  */
103
153
  export function estimateTokens(text) {
104
- return Math.ceil((text?.length ?? 0) / 4);
154
+ if (!text)
155
+ return 0;
156
+ let cost = 0;
157
+ for (const ch of text)
158
+ cost += tokenCostOf(ch.codePointAt(0) ?? 0);
159
+ return Math.ceil(cost);
105
160
  }
106
161
  /**
107
162
  * Offload decision. estimate == threshold ALSO offloads — the conservative
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;0EAC0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAsB;IAC9D,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;IACxE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe;IACnE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa;IAChE,cAAc;CACf,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,uBAAuB;IACvB,qBAAqB;IACrB,aAAa;IACb,cAAc;IACd,eAAe;IACf,eAAe;IACf,YAAY;IACZ,oBAAoB;IACpB,gBAAgB;CACjB,CAAA;AAuCD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,EAAE;IAChB,gBAAgB,EAAE,EAAE;IACpB,aAAa,EAAE,IAAI;IACnB,sDAAsD;IACtD,yEAAyE;IACzE,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,sEAAsE;IACtE,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,MAAM;CACT,CAAA;AAEV,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE;IAC9B,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9B,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;IACrC,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE;CAC/B,CAAA;AAIV,SAAS,MAAM,CAAC,GAAY,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;IAC9E,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,GAAG,CAAA;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAA;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG;QAAE,OAAO,GAAG,CAAA;IAClC,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,MAAM,CAAC,GAAY,EAAE,GAAW,EAAE,GAAW;IACpD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAA;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACpB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC/D,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAA;AAE1D,uFAAuF;AACvF,MAAM,UAAU,eAAe,CAAC,MAAe,OAAO,CAAC,GAAG;IACxD,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;IACjE,OAAO;QACL,gBAAgB,EAAE,MAAM,CAAC,GAAG,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,EAAE,UAAU,CAAC;QACzG,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC;QACvF,gBAAgB,EAAE,MAAM,CAAC,GAAG,EAAE,uBAAuB,EAAE,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,EAAE,OAAO,CAAC;QACxG,aAAa,EAAE,MAAM,CAAC,GAAG,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,aAAa,EAAE,CAAC,EAAE,SAAS,CAAC;QAChG,aAAa,EAAE,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,aAAa,CAAC;QACjF,aAAa,EAAE,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,aAAa,CAAC;QACjF,iBAAiB,EAAE,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,iBAAiB,EAAE,CAAC,EAAE,GAAG,CAAC;QACjG,mBAAmB,EAAE,SAAS,IAAI,CAAC,GAAG,6BAA6B,CAAC;QACpE,sBAAsB,EACpB,iBAAiB,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC;QACrF,eAAe,EAAE,MAAM,CAAC,GAAG,EAAE,sBAAsB,EAAE,EAAE,CAAC;QACxD,kBAAkB,EAAE,MAAM,CAAC,GAAG,EAAE,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC;QAC1K,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5I,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC;QACjJ,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC;QACjJ,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;KAC5C,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AACtD,CAAC;AACD;;;6EAG6E;AAC7E,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAA;IACnB,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,MAAM,EAAE,IAAI,IAAI;QAAE,IAAI,IAAI,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAClE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,SAAiB;IAC7D,OAAO,MAAM,IAAI,SAAS,CAAA;AAC5B,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,OAAO,CAAC,IAAa,EAAE,GAAW;IAChD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACxD,OAAO,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;AACrE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/tm/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAuED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,YAAY,CAwHd;AAID,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWpE;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAWlC;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,EAClB,SAAS,GAAE,SAAS,MAAM,EAAO,GAChC,gBAAgB,CAyBlB"}
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/tm/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAmED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,YAAY,CAwHd;AAID,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWpE;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAWlC;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,EAClB,SAAS,GAAE,SAAS,MAAM,EAAO,GAChC,gBAAgB,CAyBlB"}
package/dist/tm/guard.js CHANGED
@@ -24,13 +24,10 @@
24
24
  import * as fs from "node:fs";
25
25
  import * as path from "node:path";
26
26
  import { shorten } from "./config.js";
27
- /**
28
- * Split a command into shell segments so compound statements and pipelines
29
- * are checked at every boundary (mirrors envprotect's segmentation).
30
- */
31
- function segments(command) {
32
- return command.split(/&&|\|\||[;\n|&]/);
33
- }
27
+ import { splitShellSegments } from "../shell-text.js";
28
+ // statement segmentation is the shared implementation in ../shell-text.ts;
29
+ // local name kept for the call sites below.
30
+ const segments = splitShellSegments;
34
31
  /**
35
32
  * Quoted-span blanking — ONE shared implementation for every quote-aware
36
33
  * view (two prior review rounds both traced back to drifted copies). A
@@ -1 +1 @@
1
- {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/tm/guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/tm/guard.ts"],"names":[],"mappings":"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"}
@@ -9,18 +9,27 @@
9
9
  *
10
10
  * It generates the run identity (run id + process-random HMAC key), resolves
11
11
  * the env config, sweeps expired run payloads (startup-only TTL reclamation)
12
- * and assembles the four statically-registered tools (T0.4-verified shape:
13
- * `{ tool: { tm_read: { description, args, execute(args, ctx) } } }`).
12
+ * and assembles the governed tool surface (tm_read / tm_grep / tm_bash /
13
+ * tm_fetch + tm_memory / tm_search / tm_webfetch / tm_browser / tm_ptc_run;
14
+ * T0.4-verified shape: `{ tool: { tm_read: { description, args,
15
+ * execute(args, ctx) } } }`).
14
16
  */
15
17
  import type { PluginInput, ToolDefinition } from "../types.js";
16
18
  import { type EnvProtectMode } from "../envprotect.js";
17
19
  import { type TmConfig } from "./config.js";
18
20
  import { RunStore } from "./store.js";
21
+ export { rmForceSafe } from "../fs-safe.js";
22
+ export { buildTmMemoryTool, MEMORY_CATEGORIES, MEMORY_CONTENT_MAX, MEMORY_TITLE_MAX, projectSlug, scoreMemory, parseMemoryMarkdown, renderMemoryMarkdown, } from "./memory.js";
23
+ export { buildTmBrowserTool, findBrowserExecutable, resolveHeadless } from "./browser.js";
19
24
  export interface TmRuntime {
20
25
  runId: string;
21
26
  config: TmConfig;
22
27
  store: RunStore;
28
+ /** The ONE main pipeline instance (exposed for tests + tool builders). */
29
+ pipelines: ReturnType<typeof import("./pipelines.js").buildPipelines>;
23
30
  tools: Record<string, ToolDefinition>;
31
+ /** Kill any long-lived session the tools own (tm_browser child process). */
32
+ dispose: () => void;
24
33
  }
25
34
  export interface CreateTmToolsOptions {
26
35
  /** R6 mode — pass the plugin-level resolved value to keep ONE source. */
@@ -29,13 +38,21 @@ export interface CreateTmToolsOptions {
29
38
  extra?: RegExp[];
30
39
  }
31
40
  export declare function createTmTools(input: PluginInput, opts?: CreateTmToolsOptions): Promise<TmRuntime>;
32
- export { DEFAULT_BASH_READONLY_ALLOWED, estimateTokens, parseAllowlistEnv, resolveTmConfig, shouldOffload, shorten, TM_CONFIG_DEFAULTS, } from "./config.js";
41
+ export { DEFAULT_BASH_READONLY_ALLOWED, DEFAULT_WEBFETCH_DOMAINS, estimateTokens, parseAllowlistEnv, parseWebfetchAllowlistEnv, resolveTmConfig, shouldOffload, shorten, TM_CONFIG_DEFAULTS, } from "./config.js";
33
42
  export { buildRef, hmacToken, isExpired, newRunId, parseRef, REF_PATTERN, verifyToken, } from "./refs.js";
34
43
  export { RunStore, USAGE_JSONL_RELPATH } from "./store.js";
35
44
  export { buildPreview, buildStructureSummary, capTokens, contentTypeForPath, detectContentType, sniffContentType, } from "./preview.js";
36
45
  export { assertReadablePath, classifyReadonlyCommand, isInsideDir, } from "./guard.js";
37
- export { buildTmTools, buildPipelines, HANDLE_INVALID_MESSAGE, tmError } from "./tools.js";
38
- export type { TmDeps, TmPhase, TmPipelines } from "./tools.js";
39
- export { BRIDGE_ALLOW, InlineSequentialEngine, InlineVmEngine, WorkerEngine, PTC_LABEL_MAX, PTC_STATUS_VALUES, RETRYABLE_PHASES, PTC_SUMMARY_HEADER, PTC_OK_SECTION, PTC_OK_HEADER, PTC_ERR_SECTION, PTC_ERR_HEADER, PTC_RETURN_PREFIX, PTC_ERRORFULL_PREFIX, buildPtcRunTool, createGateBridge, parsePtcArgs, pipelineBridge, renderPtcSummary, resolvePtcBudgets, runPtc, selectEngine, staticPscan, } from "./ptc.js";
40
- export type { PtcStatus, PtcEngine, PtcEngineName, PtcBridge, PtcCallResult, PtcErrorBody, PtcRunRequest, PtcRpcRequest, PtcRpcResponse, PtcRpcAbort, PtcEngineMessage, PtcBudgets, PtcStepRecord, PtcRunOutcome, RunPtcOptions, } from "./ptc.js";
46
+ export { buildTmTools } from "./tools.js";
47
+ export { buildPipelines } from "./pipelines.js";
48
+ export type { TmDeps, TmPipelines } from "./pipelines.js";
49
+ export { buildPtcArgsSchema, buildWebfetchArgsSchema, buildSearchArgsSchema } from "./args-schema.js";
50
+ export { toToolResult, HANDLE_INVALID_MESSAGE, tmError } from "./result.js";
51
+ export type { TmPhase } from "./result.js";
52
+ export { runShellCommand, cleanShellError } from "./shell-bridge.js";
53
+ export { buildTmWebfetchTool, checkWebUrl, extractWebResponse, extractSearchHits, renderSearchHits, fetchWebText, hostAllowed, htmlToText, } from "./webfetch.js";
54
+ export type { SearchHit } from "./webfetch.js";
55
+ export { buildTmSearchTool, SEARCH_ENGINES, SEARCH_ENGINE_NAMES, renderNpmResults, renderGithubResults, renderWikiResults, } from "./search.js";
56
+ export { BRIDGE_ALLOW, InlineSequentialEngine, InlineVmEngine, WorkerEngine, PTC_LABEL_MAX, PTC_STATUS_VALUES, RETRYABLE_PHASES, PTC_SUMMARY_HEADER, PTC_OK_SECTION, PTC_OK_HEADER, PTC_ERR_SECTION, PTC_ERR_HEADER, PTC_RETURN_PREFIX, PTC_ERRORFULL_PREFIX, buildPtcRunTool, createGateBridge, parsePtcArgs, pipelineBridge, renderPtcSummary, resolvePtcBudgets, runPtc, selectEngine, staticPscan, } from "./ptc/index.js";
57
+ export type { PtcStatus, PtcEngine, PtcEngineName, PtcBridge, PtcCallResult, PtcErrorBody, PtcRunRequest, PtcRpcRequest, PtcRpcResponse, PtcRpcAbort, PtcEngineMessage, PtcBudgets, PtcStepRecord, PtcRunOutcome, RunPtcOptions, } from "./ptc/index.js";
41
58
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tm/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,QAAQ,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAA;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,SAAS,CAAC,CA+DpB;AAID,OAAO,EACL,6BAA6B,EAC7B,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,OAAO,EACP,kBAAkB,GACnB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,GACZ,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC1F,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAK9D,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAA;AACjB,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tm/index.ts"],"names":[],"mappings":"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"}
package/dist/tm/index.js CHANGED
@@ -9,16 +9,31 @@
9
9
  *
10
10
  * It generates the run identity (run id + process-random HMAC key), resolves
11
11
  * the env config, sweeps expired run payloads (startup-only TTL reclamation)
12
- * and assembles the four statically-registered tools (T0.4-verified shape:
13
- * `{ tool: { tm_read: { description, args, execute(args, ctx) } } }`).
12
+ * and assembles the governed tool surface (tm_read / tm_grep / tm_bash /
13
+ * tm_fetch + tm_memory / tm_search / tm_webfetch / tm_browser / tm_ptc_run;
14
+ * T0.4-verified shape: `{ tool: { tm_read: { description, args,
15
+ * execute(args, ctx) } } }`).
14
16
  */
15
17
  import * as crypto from "node:crypto";
18
+ import * as fs from "node:fs";
19
+ import * as os from "node:os";
20
+ import * as path from "node:path";
21
+ import { findRepoRoot } from "../blackboard.js";
16
22
  import { parseExtraDeny, resolveEnvProtectMode, } from "../envprotect.js";
17
23
  import { resolveTmConfig } from "./config.js";
18
24
  import { hmacToken, newRunId } from "./refs.js";
19
25
  import { RunStore } from "./store.js";
20
- import { buildTmTools, buildPipelines } from "./tools.js";
21
- import { buildPtcRunTool } from "./ptc.js";
26
+ import { buildTmTools } from "./tools.js";
27
+ import { buildPipelines } from "./pipelines.js";
28
+ import { buildPtcArgsSchema, buildWebfetchArgsSchema, buildMemoryArgsSchema, buildBrowserArgsSchema, buildSearchArgsSchema } from "./args-schema.js";
29
+ import { buildPtcRunTool } from "./ptc/index.js";
30
+ import { buildTmWebfetchTool } from "./webfetch.js";
31
+ import { buildTmSearchTool } from "./search.js";
32
+ export { rmForceSafe } from "../fs-safe.js";
33
+ export { buildTmMemoryTool, MEMORY_CATEGORIES, MEMORY_CONTENT_MAX, MEMORY_TITLE_MAX, projectSlug, scoreMemory, parseMemoryMarkdown, renderMemoryMarkdown, } from "./memory.js";
34
+ export { buildTmBrowserTool, findBrowserExecutable, resolveHeadless } from "./browser.js";
35
+ import { buildTmMemoryTool } from "./memory.js";
36
+ import { buildTmBrowserTool } from "./browser.js";
22
37
  export async function createTmTools(input, opts = {}) {
23
38
  const cfg = resolveTmConfig(process.env);
24
39
  const directory = typeof input?.directory === "string" && input.directory.length > 0
@@ -27,10 +42,34 @@ export async function createTmTools(input, opts = {}) {
27
42
  const runId = newRunId();
28
43
  const hmacKey = crypto.randomBytes(32);
29
44
  const accessToken = hmacToken(hmacKey, runId);
45
+ // Store roots — AUTO default resolves git-aware: under <repo>/.git, so
46
+ // the payload/trajectory stores never pollute the user's working tree
47
+ // (user projects never had .blackboard/.trajectory gitignore entries).
48
+ // The .git-is-a-directory check covers worktrees where .git is a FILE
49
+ // pointing elsewhere. Explicit TM_BLACKBOARD_DIR / TM_TRAJECTORY_DIR
50
+ // overrides keep the old semantics (absolute, or relative to project
51
+ // root — RunStore handles both).
52
+ const repo = findRepoRoot(directory);
53
+ const gitDir = repo ? path.join(repo, ".git") : null;
54
+ const gitUsable = gitDir !== null &&
55
+ (() => {
56
+ try {
57
+ return fs.statSync(gitDir).isDirectory();
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ })();
63
+ const storeBase = gitUsable
64
+ ? path.join(gitDir, "opencode-team")
65
+ : path.join(os.tmpdir(), "opencode-team");
66
+ // User-level global memory root — OUTSIDE any repo, so "global" scope
67
+ // really follows the user across projects (repo scope stays in .git).
68
+ const globalMemoriesDir = cfg.memoryGlobalDir || path.join(os.homedir(), ".opencode-team", "memories", "global");
30
69
  const store = new RunStore({
31
70
  projectRoot: directory,
32
- blackboardDir: cfg.blackboardDir,
33
- trajectoryDir: cfg.trajectoryDir,
71
+ blackboardDir: cfg.blackboardDir || path.join(storeBase, "blackboard"),
72
+ trajectoryDir: cfg.trajectoryDir || path.join(storeBase, "trajectory"),
34
73
  runId,
35
74
  ttlDays: cfg.blackboardTtlDays,
36
75
  });
@@ -40,12 +79,17 @@ export async function createTmTools(input, opts = {}) {
40
79
  const mode = opts.mode ?? resolveEnvProtectMode(process.env.TM_ENV_PROTECT);
41
80
  const extra = opts.extra ?? parseExtraDeny(process.env.TM_ENV_PROTECT_EXTRA_DENY);
42
81
  const expireAt = Date.now() + cfg.blackboardTtlDays * 24 * 60 * 60 * 1000;
43
- const tools = await buildTmTools({
82
+ // Bun shell ($): try input.$ first (T0.4② verified), then Bun globals
83
+ // (desktop loader may not pass $ through; Bun exposes it globally).
84
+ // Resolved ONCE and shared by the main pipelines AND the PTC pipeline
85
+ // instance below — v1.5.4 added the fallback to the main path only, so
86
+ // PTC's tm.bash bridging died with "宿主 shell 桥($)不可用" on desktops
87
+ // where input.$ is absent.
88
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
+ const shellBridge = input?.$ ?? globalThis.$ ?? globalThis.Bun?.$;
90
+ const deps = {
44
91
  client: input?.client,
45
- // Bun shell ($): try input.$ first (T0.4② verified), then Bun globals
46
- // (desktop loader may not pass $ through; Bun exposes it globally).
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- $: input?.$ ?? globalThis.$ ?? globalThis.Bun?.$,
92
+ $: shellBridge,
49
93
  cfg,
50
94
  store,
51
95
  runId,
@@ -54,13 +98,49 @@ export async function createTmTools(input, opts = {}) {
54
98
  expireAt,
55
99
  mode,
56
100
  extra,
101
+ };
102
+ // ONE main pipeline instance shared by the four tools AND tm_webfetch —
103
+ // a shared step counter keeps their refs unambiguous (a second instance
104
+ // would re-emit s0001 and cross-contaminate offloaded payloads).
105
+ const pipelines = buildPipelines(deps);
106
+ const tools = await buildTmTools(deps, pipelines);
107
+ // tm_webfetch — the governed web FALLBACK channel. Registered on the
108
+ // host tool surface for everyone, but the AGENT PERMISSION map gates who
109
+ // sees it: explicit allow for team + researcher only (agents.ts), explicit
110
+ // deny for the other four (overrides the tm_* wildcard).
111
+ const webfetchArgs = await buildWebfetchArgsSchema();
112
+ tools.tm_webfetch = buildTmWebfetchTool({ pipelines, cfg, args: webfetchArgs });
113
+ // tm_search — the governed search FRONT: multi-engine (bing/bing-int/
114
+ // sogou/so/baidu/bilibili + npm/github JSON), extracted title+URL hit
115
+ // lists, same pipeline + allowlist as tm_webfetch. Network-role tool
116
+ // like the other two web channels (agents.ts gates who sees it).
117
+ tools.tm_search = buildTmSearchTool({ pipelines, cfg, args: await buildSearchArgsSchema() });
118
+ // tm_memory — project/global memory mirror (Markdown + frontmatter under
119
+ // the same git-aware store base). Available to ALL agents: memory is not
120
+ // a network channel, it is shared project knowledge.
121
+ const memoryArgs = await buildMemoryArgsSchema();
122
+ tools.tm_memory = buildTmMemoryTool({
123
+ storeBase,
124
+ globalRoot: globalMemoriesDir,
125
+ directory,
126
+ cfg,
127
+ pipelines,
128
+ args: memoryArgs,
57
129
  });
130
+ // tm_browser — governed interactive browser (Plan C, headful CDP pipe).
131
+ // Network role tool: team + researcher carry the allow; the other four
132
+ // hold an explicit deny (overrides the tm_* wildcard). dispose() kills
133
+ // the browser child when the host tears the plugin down.
134
+ const browserTool = buildTmBrowserTool({ pipelines, cfg, args: await buildBrowserArgsSchema() });
135
+ tools.tm_browser = browserTool;
58
136
  // M3: build tm_ptc_run using a separate pipeline instance (governance
59
- // reused verbatim; step counter is independent — store handles any
60
- // step-id overlap via tool-name-prefixed files).
137
+ // reused verbatim). Its step counter starts at s0001 again — the
138
+ // "ptc-" stepPrefix namespaces its step ids so offloaded payloads can
139
+ // never collide with same-numbered main-pipeline steps in the shared
140
+ // run store (refs ignore seq, so a collision would corrupt tm_fetch).
61
141
  const ptcDeps = {
62
142
  client: input?.client,
63
- $: input?.$,
143
+ $: shellBridge,
64
144
  cfg,
65
145
  store,
66
146
  runId,
@@ -69,6 +149,7 @@ export async function createTmTools(input, opts = {}) {
69
149
  expireAt,
70
150
  mode,
71
151
  extra,
152
+ stepPrefix: "ptc-",
72
153
  };
73
154
  const ptcPipelines = buildPipelines(ptcDeps);
74
155
  const ptcTool = buildPtcRunTool({
@@ -77,20 +158,29 @@ export async function createTmTools(input, opts = {}) {
77
158
  nextStepId: ptcPipelines.nextStepId,
78
159
  ctx: { directory },
79
160
  accessToken,
161
+ args: await buildPtcArgsSchema(),
80
162
  pipelines: ptcPipelines,
81
163
  });
82
164
  tools.tm_ptc_run = ptcTool;
83
- return { runId, config: cfg, store, tools };
165
+ return { runId, config: cfg, store, pipelines, tools, dispose: () => browserTool.dispose() };
84
166
  }
85
167
  // ---------- re-exports (stable import surface for tests + plugin entry) ----------
86
- export { DEFAULT_BASH_READONLY_ALLOWED, estimateTokens, parseAllowlistEnv, resolveTmConfig, shouldOffload, shorten, TM_CONFIG_DEFAULTS, } from "./config.js";
168
+ export { DEFAULT_BASH_READONLY_ALLOWED, DEFAULT_WEBFETCH_DOMAINS, estimateTokens, parseAllowlistEnv, parseWebfetchAllowlistEnv, resolveTmConfig, shouldOffload, shorten, TM_CONFIG_DEFAULTS, } from "./config.js";
87
169
  export { buildRef, hmacToken, isExpired, newRunId, parseRef, REF_PATTERN, verifyToken, } from "./refs.js";
88
170
  export { RunStore, USAGE_JSONL_RELPATH } from "./store.js";
89
171
  export { buildPreview, buildStructureSummary, capTokens, contentTypeForPath, detectContentType, sniffContentType, } from "./preview.js";
90
172
  export { assertReadablePath, classifyReadonlyCommand, isInsideDir, } from "./guard.js";
91
- export { buildTmTools, buildPipelines, HANDLE_INVALID_MESSAGE, tmError } from "./tools.js";
92
- // ---------- tm_ptc_run (M1 contract skeleton) ----------
93
- // NOTE: `buildPtcRunTool` is exported for tests + future M3 wiring, but index
94
- // does NOT add tm_ptc_run to the registered `tools` map yet (design §10/M3).
95
- export { BRIDGE_ALLOW, InlineSequentialEngine, InlineVmEngine, WorkerEngine, PTC_LABEL_MAX, PTC_STATUS_VALUES, RETRYABLE_PHASES, PTC_SUMMARY_HEADER, PTC_OK_SECTION, PTC_OK_HEADER, PTC_ERR_SECTION, PTC_ERR_HEADER, PTC_RETURN_PREFIX, PTC_ERRORFULL_PREFIX, buildPtcRunTool, createGateBridge, parsePtcArgs, pipelineBridge, renderPtcSummary, resolvePtcBudgets, runPtc, selectEngine, staticPscan, } from "./ptc.js";
173
+ export { buildTmTools } from "./tools.js";
174
+ export { buildPipelines } from "./pipelines.js";
175
+ export { buildPtcArgsSchema, buildWebfetchArgsSchema, buildSearchArgsSchema } from "./args-schema.js";
176
+ export { toToolResult, HANDLE_INVALID_MESSAGE, tmError } from "./result.js";
177
+ export { runShellCommand, cleanShellError } from "./shell-bridge.js";
178
+ export { buildTmWebfetchTool, checkWebUrl, extractWebResponse, extractSearchHits, renderSearchHits, fetchWebText, hostAllowed, htmlToText, } from "./webfetch.js";
179
+ export { buildTmSearchTool, SEARCH_ENGINES, SEARCH_ENGINE_NAMES, renderNpmResults, renderGithubResults, renderWikiResults, } from "./search.js";
180
+ // ---------- tm_ptc_run ----------
181
+ // Built here with its own pipeline instance (governance reused verbatim;
182
+ // step counter is independent — store handles any step-id overlap via
183
+ // tool-name-prefixed files) and MERGED into the registered `tools` map
184
+ // below, so all five tools ship in the `tool` segment.
185
+ export { BRIDGE_ALLOW, InlineSequentialEngine, InlineVmEngine, WorkerEngine, PTC_LABEL_MAX, PTC_STATUS_VALUES, RETRYABLE_PHASES, PTC_SUMMARY_HEADER, PTC_OK_SECTION, PTC_OK_HEADER, PTC_ERR_SECTION, PTC_ERR_HEADER, PTC_RETURN_PREFIX, PTC_ERRORFULL_PREFIX, buildPtcRunTool, createGateBridge, parsePtcArgs, pipelineBridge, renderPtcSummary, resolvePtcBudgets, runPtc, selectEngine, staticPscan, } from "./ptc/index.js";
96
186
  //# sourceMappingURL=index.js.map