@te-river/opencode-team-mode 1.5.0 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +157 -53
  2. package/README.zh-CN.md +137 -53
  3. package/dist/agents.d.ts.map +1 -1
  4. package/dist/agents.js +128 -26
  5. package/dist/agents.js.map +1 -1
  6. package/dist/approval-gate.d.ts +147 -0
  7. package/dist/approval-gate.d.ts.map +1 -0
  8. package/dist/approval-gate.js +471 -0
  9. package/dist/approval-gate.js.map +1 -0
  10. package/dist/commands.js +3 -3
  11. package/dist/commands.js.map +1 -1
  12. package/dist/envprotect.d.ts +234 -0
  13. package/dist/envprotect.d.ts.map +1 -0
  14. package/dist/envprotect.js +820 -0
  15. package/dist/envprotect.js.map +1 -0
  16. package/dist/index.d.ts +5 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +112 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/tm/config.d.ts +105 -0
  21. package/dist/tm/config.d.ts.map +1 -0
  22. package/dist/tm/config.js +118 -0
  23. package/dist/tm/config.js.map +1 -0
  24. package/dist/tm/guard.d.ts +56 -0
  25. package/dist/tm/guard.d.ts.map +1 -0
  26. package/dist/tm/guard.js +249 -0
  27. package/dist/tm/guard.js.map +1 -0
  28. package/dist/tm/index.d.ts +41 -0
  29. package/dist/tm/index.d.ts.map +1 -0
  30. package/dist/tm/index.js +93 -0
  31. package/dist/tm/index.js.map +1 -0
  32. package/dist/tm/preview.d.ts +46 -0
  33. package/dist/tm/preview.d.ts.map +1 -0
  34. package/dist/tm/preview.js +354 -0
  35. package/dist/tm/preview.js.map +1 -0
  36. package/dist/tm/ptc.d.ts +279 -0
  37. package/dist/tm/ptc.d.ts.map +1 -0
  38. package/dist/tm/ptc.js +839 -0
  39. package/dist/tm/ptc.js.map +1 -0
  40. package/dist/tm/refs.d.ts +37 -0
  41. package/dist/tm/refs.d.ts.map +1 -0
  42. package/dist/tm/refs.js +58 -0
  43. package/dist/tm/refs.js.map +1 -0
  44. package/dist/tm/store.d.ts +95 -0
  45. package/dist/tm/store.d.ts.map +1 -0
  46. package/dist/tm/store.js +222 -0
  47. package/dist/tm/store.js.map +1 -0
  48. package/dist/tm/tools.d.ts +84 -0
  49. package/dist/tm/tools.d.ts.map +1 -0
  50. package/dist/tm/tools.js +710 -0
  51. package/dist/tm/tools.js.map +1 -0
  52. package/dist/types.d.ts +155 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/package.json +3 -2
@@ -0,0 +1,354 @@
1
+ /**
2
+ * JIT layer-2 tools — content-aware previews (the soul of the offload handle)
3
+ * plus the L1 "structure" summaries for tm_fetch mode:"structure".
4
+ *
5
+ * Five branches, chosen by content_type (path hint) with sniffing fallback:
6
+ * json -> first 3 keys: path + type + magnitude
7
+ * csv -> header + 2 sample rows + total rows x cols
8
+ * log -> first 3 lines + pattern stats (ERROR x N, ...) + path:line refs
9
+ * code -> function/class signature list (with line numbers)
10
+ * binary -> type + size + "不可预览"
11
+ *
12
+ * RED LINE: previews are hard-capped at TM_PREVIEW_MAX_TOKENS (default 80
13
+ * estimated tokens). A bloated preview is an R4 regression — the cap is
14
+ * enforced by composition (body budget = cap - meta) so clue + hint lines
15
+ * always survive truncation.
16
+ */
17
+ import * as path from "node:path";
18
+ import { estimateTokens, shorten } from "./config.js";
19
+ const CODE_EXTENSIONS = new Set([
20
+ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".py", ".go", ".rs", ".java",
21
+ ".c", ".h", ".cpp", ".hpp", ".cs", ".rb", ".php", ".swift", ".kt", ".kts",
22
+ ".scala", ".sh", ".bash", ".ps1", ".psm1", ".sql", ".css", ".scss", ".less",
23
+ ".html", ".htm", ".vue", ".svelte", ".lua", ".pl", ".r", ".dart",
24
+ ]);
25
+ const BINARY_EXTENSIONS = new Set([
26
+ ".png", ".jpg", ".jpeg", ".gif", ".webp", ".ico", ".bmp", ".pdf", ".zip",
27
+ ".gz", ".tgz", ".tar", ".bz2", ".7z", ".rar", ".exe", ".dll", ".so",
28
+ ".dylib", ".bin", ".dat", ".woff", ".woff2", ".ttf", ".otf", ".eot",
29
+ ".mp3", ".wav", ".flac", ".mp4", ".mov", ".avi", ".mkv", ".sqlite", ".db",
30
+ ".class", ".jar", ".wasm", ".node", ".pyc",
31
+ ]);
32
+ /** Content type derived from the file extension (deterministic hint). */
33
+ export function contentTypeForPath(p) {
34
+ const ext = path.extname(String(p ?? "")).toLowerCase();
35
+ if (ext === ".json" || ext === ".jsonc")
36
+ return "json";
37
+ if (ext === ".csv" || ext === ".tsv")
38
+ return "csv";
39
+ if (ext === ".log")
40
+ return "log";
41
+ if (BINARY_EXTENSIONS.has(ext))
42
+ return "binary";
43
+ if (CODE_EXTENSIONS.has(ext))
44
+ return "code";
45
+ return "text";
46
+ }
47
+ function looksBinary(sample) {
48
+ if (sample.includes("\0"))
49
+ return true;
50
+ let bad = 0;
51
+ for (const ch of sample) {
52
+ const c = ch.codePointAt(0) ?? 0;
53
+ if (c < 9 || (c > 13 && c < 32))
54
+ bad++;
55
+ }
56
+ return sample.length > 0 && bad / sample.length > 0.05;
57
+ }
58
+ /** Consistent column delimiter across the first few non-empty lines, if any. */
59
+ function detectDelimiter(lines) {
60
+ const head = lines.slice(0, Math.min(4, lines.length));
61
+ for (const d of [",", "\t", ";", "|"]) {
62
+ const counts = head.map((l) => l.split(d).length);
63
+ if (Math.min(...counts) >= 2 && counts.every((c) => c === counts[0]))
64
+ return d;
65
+ }
66
+ return null;
67
+ }
68
+ /**
69
+ * Sniff content type when no path hint exists (or the hint was plain "text").
70
+ * Order: binary -> json -> csv -> code -> text. Logs and plain text share
71
+ * the same preview branch, so no separate sniff rule is needed for them.
72
+ */
73
+ export function sniffContentType(content) {
74
+ const sample = content.slice(0, 4096);
75
+ if (looksBinary(sample))
76
+ return "binary";
77
+ const trimmed = content.trimStart();
78
+ if (trimmed.startsWith("{") || trimmed.startsWith("["))
79
+ return "json";
80
+ const lines = content.split(/\r?\n/).filter((l) => l.trim()).slice(0, 5);
81
+ if (lines.length >= 2 && detectDelimiter(lines))
82
+ return "csv";
83
+ if (/(?:^|\n)\s*(?:export\s+)?(?:async\s+)?(?:function|class|interface|def)\b/.test(sample) ||
84
+ /(?:^|\n)\s*(?:import|from|package|using|namespace)\b/.test(sample)) {
85
+ return "code";
86
+ }
87
+ return "text";
88
+ }
89
+ /**
90
+ * Resolve the effective branch: a path-derived hint wins (deterministic);
91
+ * plain-text hints and missing hints fall through to sniffing (which may
92
+ * still upgrade the content to json / csv / code / binary).
93
+ */
94
+ export function detectContentType(content, hint) {
95
+ if (hint && hint !== "text")
96
+ return hint;
97
+ return sniffContentType(content);
98
+ }
99
+ /** Hard cap by estimated tokens (chars/4): never exceed maxTokens. */
100
+ export function capTokens(text, maxTokens) {
101
+ const marker = " …(截断)";
102
+ const maxChars = Math.max(8, maxTokens * 4);
103
+ if (text.length <= maxChars)
104
+ return text;
105
+ const usable = maxChars - marker.length; // marker lives INSIDE the budget
106
+ const cut = text.slice(0, usable);
107
+ const trimmed = cut.replace(/\s+\S*$/, ""); // back off to the last word boundary
108
+ const body = trimmed.length >= usable * 0.6 ? trimmed : cut;
109
+ return body + marker;
110
+ }
111
+ // ---------- five preview branches ----------
112
+ function describeJsonValue(v) {
113
+ if (v === null)
114
+ return "null";
115
+ switch (typeof v) {
116
+ case "string":
117
+ return `string(len=${v.length})`;
118
+ case "number":
119
+ case "boolean":
120
+ return `${typeof v}=${v}`;
121
+ case "object":
122
+ return Array.isArray(v)
123
+ ? `array[len=${v.length}]`
124
+ : `object[keys=${Object.keys(v).length}]`;
125
+ default:
126
+ return typeof v;
127
+ }
128
+ }
129
+ function jsonPreview(content) {
130
+ const text = content.trim();
131
+ if (!text.startsWith("{") && !text.startsWith("["))
132
+ return null;
133
+ let obj;
134
+ try {
135
+ obj = JSON.parse(text);
136
+ }
137
+ catch {
138
+ return null;
139
+ }
140
+ if (Array.isArray(obj)) {
141
+ return `array[len=${obj.length}],元素样本: ${obj.slice(0, 3).map(describeJsonValue).join(", ")}`;
142
+ }
143
+ if (obj && typeof obj === "object") {
144
+ const entries = Object.entries(obj);
145
+ const head = entries.slice(0, 3).map(([k, v]) => `${k}: ${describeJsonValue(v)}`);
146
+ const more = entries.length > 3 ? `(其余 ${entries.length - 3} 键省略)` : "";
147
+ return head.join("; ") + more;
148
+ }
149
+ return `scalar: ${describeJsonValue(obj)}`;
150
+ }
151
+ function csvPreview(content) {
152
+ const lines = content.split(/\r?\n/).filter((l) => l.trim());
153
+ if (lines.length < 2)
154
+ return null;
155
+ const delim = detectDelimiter(lines);
156
+ if (!delim)
157
+ return null;
158
+ const cols = lines[0].split(delim).length;
159
+ const shown = [lines[0], ...lines.slice(1, 3)].map((l) => shorten(l, 110));
160
+ const label = delim === "\t" ? "TAB" : delim;
161
+ shown.push(`共 ${lines.length} 行 × ${cols} 列(分隔符 "${label}")`);
162
+ return shown.join("\n");
163
+ }
164
+ const PATH_LINE_REF = /(?:[A-Za-z0-9_.\-]+[\\/])*[A-Za-z0-9_.\-]+\.[A-Za-z0-9]{1,8}:\d{1,6}/g;
165
+ function collectPathLineRefs(content, max) {
166
+ const seen = new Set();
167
+ for (const m of content.matchAll(PATH_LINE_REF)) {
168
+ seen.add(m[0]);
169
+ if (seen.size >= max)
170
+ break;
171
+ }
172
+ return [...seen];
173
+ }
174
+ /** log + plain text share one branch: head lines + pattern stats + refs. */
175
+ function textPreview(content) {
176
+ const lines = content.split(/\r?\n/);
177
+ const head = lines.filter((l) => l.trim()).slice(0, 3).map((l) => shorten(l, 90));
178
+ const count = (re) => (content.match(re) ?? []).length;
179
+ const fatal = count(/\bFATAL\b/g);
180
+ const error = count(/\bERROR\b/g);
181
+ const warn = count(/\bWARN(?:ING)?\b/g);
182
+ const info = count(/\bINFO\b/g);
183
+ const stats = [
184
+ fatal ? `FATAL×${fatal}` : "",
185
+ error ? `ERROR×${error}` : "",
186
+ warn ? `WARN×${warn}` : "",
187
+ info ? `INFO×${info}` : "",
188
+ ].filter(Boolean).join(" ");
189
+ const refs = collectPathLineRefs(content, 3);
190
+ const parts = [head.length ? head.join("\n") : "(空内容)", `共 ${lines.length} 行`];
191
+ if (stats)
192
+ parts.push(stats);
193
+ if (refs.length)
194
+ parts.push(`位置: ${refs.join(", ")}`);
195
+ return parts.join("\n");
196
+ }
197
+ const SIGNATURE_PATTERNS = [
198
+ ["function", /(?:export\s+)?(?:default\s+)?(?:async\s+)?function\s*\*?\s*([A-Za-z0-9_$]+)/g],
199
+ ["class", /(?:export\s+)?(?:abstract\s+)?class\s+([A-Za-z0-9_$]+)/g],
200
+ ["interface", /(?:export\s+)?interface\s+([A-Za-z0-9_$]+)/g],
201
+ ["type", /(?:export\s+)?type\s+([A-Za-z0-9_$]+)\s*[=<]/g],
202
+ ["def", /^[ \t]*(?:async\s+)?def\s+([A-Za-z0-9_]+)/gm],
203
+ ["fn", /^[ \t]*(?:pub(?:\([^)]*\))?\s+)?fn\s+([A-Za-z0-9_]+)/gm],
204
+ ["const-fn", /(?:export\s+)?(?:const|let|var)\s+([A-Za-z0-9_$]+)\s*=\s*(?:async\s*)?\(/g],
205
+ ];
206
+ function lineOfIndex(content, index) {
207
+ let line = 1;
208
+ for (let i = 0; i < index && i < content.length; i++) {
209
+ if (content.charCodeAt(i) === 10)
210
+ line++;
211
+ }
212
+ return line;
213
+ }
214
+ function codePreview(content, maxSignatures = 10) {
215
+ const found = [];
216
+ for (const [kind, re] of SIGNATURE_PATTERNS) {
217
+ for (const m of content.matchAll(re)) {
218
+ found.push(`L${lineOfIndex(content, m.index ?? 0)}: ${kind} ${m[1]}`);
219
+ if (found.length >= maxSignatures)
220
+ break;
221
+ }
222
+ if (found.length >= maxSignatures)
223
+ break;
224
+ }
225
+ if (found.length === 0)
226
+ return null;
227
+ const more = found.length >= maxSignatures ? "(更多签名省略)" : "";
228
+ return found.join("\n") + more;
229
+ }
230
+ function binaryPreview(content) {
231
+ return `二进制内容(binary),大小 ${content.length} bytes,不可预览`;
232
+ }
233
+ /**
234
+ * Compose body + clue + one-line hint, then enforce the token cap WITHOUT
235
+ * cutting the meta lines (body gets the residual budget; if the cap is too
236
+ * tight for meaningful body content the meta shrinks first, body last).
237
+ */
238
+ function composeCapped(body, clue, maxTokens) {
239
+ const HINT = "提示: 先聚合再决定是否取原文(tm_fetch 分段取回)";
240
+ let meta = clue ? `线索: ${clue}\n${HINT}` : HINT;
241
+ let budget = maxTokens - estimateTokens(meta) - 1;
242
+ if (budget < 20) {
243
+ meta = HINT;
244
+ budget = maxTokens - estimateTokens(meta) - 1;
245
+ }
246
+ if (budget < 20) {
247
+ meta = "";
248
+ budget = maxTokens;
249
+ }
250
+ const cappedBody = capTokens(body, budget);
251
+ return meta ? `${cappedBody}\n${meta}` : cappedBody;
252
+ }
253
+ /** Build the governed preview for offloaded content. Never throws. */
254
+ export function buildPreview(content, contentType, opts = {}) {
255
+ const maxTokens = Math.max(10, Math.trunc(opts.maxTokens ?? 80));
256
+ let body;
257
+ try {
258
+ switch (contentType) {
259
+ case "binary":
260
+ body = binaryPreview(content);
261
+ break;
262
+ case "json":
263
+ body = jsonPreview(content) ?? textPreview(content);
264
+ break;
265
+ case "csv":
266
+ body = csvPreview(content) ?? textPreview(content);
267
+ break;
268
+ case "code":
269
+ body = codePreview(content) ?? textPreview(content);
270
+ break;
271
+ default:
272
+ body = textPreview(content);
273
+ }
274
+ }
275
+ catch {
276
+ body = textPreview(content);
277
+ }
278
+ return composeCapped(body, opts.clue, maxTokens);
279
+ }
280
+ // ---------- L1 structure summaries (tm_fetch mode:"structure") ----------
281
+ function structureJson(content) {
282
+ let obj;
283
+ try {
284
+ obj = JSON.parse(content.trim());
285
+ }
286
+ catch {
287
+ return null;
288
+ }
289
+ if (Array.isArray(obj))
290
+ return `array[len=${obj.length}]`;
291
+ if (obj && typeof obj === "object") {
292
+ const entries = Object.entries(obj).slice(0, 15);
293
+ return entries.map(([k, v]) => `${k}: ${describeJsonValue(v)}`).join("\n");
294
+ }
295
+ return `scalar: ${describeJsonValue(obj)}`;
296
+ }
297
+ function structureCsv(content) {
298
+ const lines = content.split(/\r?\n/).filter((l) => l.trim());
299
+ if (lines.length < 2)
300
+ return null;
301
+ const delim = detectDelimiter(lines);
302
+ if (!delim)
303
+ return null;
304
+ const cols = lines[0].split(delim).length;
305
+ return `表头: ${shorten(lines[0], 100)}\n共 ${lines.length} 行 × ${cols} 列`;
306
+ }
307
+ function structureText(content) {
308
+ const lines = content.split(/\r?\n/);
309
+ const errLines = [];
310
+ const warnLines = [];
311
+ const headings = [];
312
+ for (let i = 0; i < lines.length; i++) {
313
+ if (errLines.length < 8 && /\bERROR\b/.test(lines[i]))
314
+ errLines.push(i + 1);
315
+ else if (warnLines.length < 8 && /\bWARN(?:ING)?\b/.test(lines[i]))
316
+ warnLines.push(i + 1);
317
+ if (headings.length < 6 && /^#{1,3}\s+\S/.test(lines[i])) {
318
+ headings.push(`L${i + 1}: ${shorten(lines[i].trim(), 60)}`);
319
+ }
320
+ }
321
+ const parts = [`共 ${lines.length} 行`];
322
+ if (errLines.length)
323
+ parts.push(`ERROR 行: ${errLines.join(",")}`);
324
+ if (warnLines.length)
325
+ parts.push(`WARN 行: ${warnLines.join(",")}`);
326
+ if (headings.length)
327
+ parts.push(headings.join("\n"));
328
+ return parts.join("\n");
329
+ }
330
+ /** ~100-token-level L1 map of an offloaded payload (TOC / key tree / error lines). */
331
+ export function buildStructureSummary(content, contentType) {
332
+ let summary;
333
+ try {
334
+ switch (contentType) {
335
+ case "json":
336
+ summary = structureJson(content) ?? structureText(content);
337
+ break;
338
+ case "csv":
339
+ summary = structureCsv(content) ?? structureText(content);
340
+ break;
341
+ case "code":
342
+ summary = (codePreview(content, 12) ?? structureText(content)) +
343
+ `\n共 ${content.split(/\r?\n/).length} 行`;
344
+ break;
345
+ default:
346
+ summary = structureText(content);
347
+ }
348
+ }
349
+ catch {
350
+ summary = structureText(content);
351
+ }
352
+ return capTokens(summary, 100);
353
+ }
354
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/tm/preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * tm_ptc_run — M1 contract + aggregation skeleton (NO sandbox).
3
+ *
4
+ * Design: .git/opencode-team/.../ptc-run/02-architect-ptc-run-design.md §2/§3/§4/§6.
5
+ * Milestone split (design §10): this is **M1 only** — args schema, the engine
6
+ * RPC seam frozen for M2, the StepGate failure governance (error / call /
7
+ * time budgets, ≤1 retry on idempotent phases, produced-output preservation),
8
+ * the five-state status enum, the char-pinned aggregation summary, composite
9
+ * step numbers (`sXXXX.kNN`) and the trajectory event shapes.
10
+ *
11
+ * Deliberately NOT here in M1 (deferred):
12
+ * - the worker/RPC engine + inline-VM sandbox (M2 — the `PtcEngine` seam
13
+ * below is frozen so M2 adds an engine without touching this contract);
14
+ * - the program-source static pre-scan is WRITTEN but NOT wired into the run
15
+ * path (M2 attaches it) — `staticPscan`, marked unused here;
16
+ * - registering `tm_ptc_run` into the tm_* tool set (M3 role/whitelist
17
+ * wiring) — `buildPtcRunTool` exists and is fully exercised by tests, but
18
+ * index.ts does NOT merge it into `tools` yet.
19
+ *
20
+ * Governance is REUSED, never forked (D6 lock): the inline bridge calls the
21
+ * exact four exported pipelines (`buildPipelines`), so threshold offload,
22
+ * P2/P3, R6 and handle/TTL semantics apply to every bridged call verbatim.
23
+ * PTC is NOT a bypass layer.
24
+ */
25
+ import type { ToolDefinition } from "../types.js";
26
+ import { type TmConfig } from "./config.js";
27
+ import type { RunStore } from "./store.js";
28
+ import { tmError, type TmPipelines, type TmPhase } from "./tools.js";
29
+ /** The five PTC run statuses (design §2). */
30
+ export declare const PTC_STATUS_VALUES: readonly ["ok", "stopped-error-budget", "stopped-call-budget", "timeout", "engine-error"];
31
+ export type PtcStatus = (typeof PTC_STATUS_VALUES)[number];
32
+ export type BridgeTool = "tm_read" | "tm_grep" | "tm_bash" | "tm_fetch";
33
+ /** Bridge allow set — read-only; tm_ptc_run itself is excluded (no nesting). */
34
+ export declare const BRIDGE_ALLOW: readonly BridgeTool[];
35
+ /** Phases safe to retry once (idempotent read-only bridges; design §4.2). */
36
+ export declare const RETRYABLE_PHASES: readonly TmPhase[];
37
+ /** Error body the bridge surfaces (T1.4 shape: tool/phase/message/line?). */
38
+ export interface PtcErrorBody {
39
+ tool: string;
40
+ phase: TmPhase;
41
+ message: string;
42
+ line?: number;
43
+ }
44
+ /** A single bridged-call outcome (design §2 program protocol). */
45
+ export type PtcCallResult = {
46
+ ok: true;
47
+ data: unknown;
48
+ } | {
49
+ ok: false;
50
+ error: PtcErrorBody;
51
+ };
52
+ /** The bridge the engine drives — in M1 it wraps the four pipelines. */
53
+ export interface PtcBridge {
54
+ call(tool: BridgeTool, args: Record<string, unknown>): Promise<PtcCallResult>;
55
+ }
56
+ /** Parent → engine: run the program. */
57
+ export interface PtcRunRequest {
58
+ program: string;
59
+ /** monotonic token so a caller can correlate a call with its response. */
60
+ startDeadlineMs: number;
61
+ }
62
+ /** Engine → driver: a single bridged call to execute under the gate. */
63
+ export interface PtcRpcRequest {
64
+ t: "call";
65
+ id: number;
66
+ tool: BridgeTool;
67
+ args: Record<string, unknown>;
68
+ }
69
+ /** Driver → engine: the gated result of a call. */
70
+ export interface PtcRpcResponse {
71
+ t: "result";
72
+ id: number;
73
+ r: PtcCallResult;
74
+ }
75
+ /** Driver → engine: stop the run (budget / time hit); engine must unwind. */
76
+ export interface PtcRpcAbort {
77
+ t: "abort";
78
+ id: number;
79
+ reason: "timeout" | "error-budget" | "call-budget";
80
+ }
81
+ export type PtcEngineMessage = PtcRpcRequest | PtcRpcResponse | PtcRpcAbort;
82
+ export type PtcEngineName = "worker" | "inline";
83
+ /** The engine seam. M1 ships `InlineSequentialEngine`; M2 adds `WorkerEngine`
84
+ * (over MessagePort) with the SAME shape, so neither the driver nor the
85
+ * contract changes across milestones. */
86
+ export interface PtcEngine {
87
+ readonly name: PtcEngineName;
88
+ /**
89
+ * Run `program`, driving every bridge call through `bridge` (already
90
+ * gate-wrapped by the driver). Resolve with the program's return value;
91
+ * reject with a `PtcStopSignal` for a budget/time stop, or any other Error
92
+ * for an engine/program fault. `signal` lets the driver race a timeout.
93
+ */
94
+ run(program: string, bridge: PtcBridge, signal: AbortSignal): Promise<unknown>;
95
+ }
96
+ export interface PtcBudgets {
97
+ maxCalls: number;
98
+ maxErrors: number;
99
+ timeoutMs: number;
100
+ }
101
+ export interface PtcCallerBudgets {
102
+ max_calls?: unknown;
103
+ max_errors?: unknown;
104
+ timeout_ms?: unknown;
105
+ }
106
+ export declare function resolvePtcBudgets(cfg: TmConfig, budgets: PtcCallerBudgets | undefined | null): PtcBudgets;
107
+ export declare const PTC_LABEL_MAX = 80;
108
+ export interface PtcValidArgs {
109
+ program: string;
110
+ label: string;
111
+ budgets: PtcBudgets;
112
+ }
113
+ export type PtcArgsResult = {
114
+ ok: true;
115
+ args: PtcValidArgs;
116
+ } | {
117
+ ok: false;
118
+ error: ReturnType<typeof tmError>;
119
+ };
120
+ /**
121
+ * Validate + normalize tm_ptc_run args. `program` over the length cap is a
122
+ * hard args error (a program cannot be meaningfully truncated); `label` over
123
+ * 80 is truncated; `budgets` are clamped toward the env ceilings.
124
+ */
125
+ export declare function parsePtcArgs(raw: Record<string, unknown> | undefined, cfg: TmConfig): PtcArgsResult;
126
+ /** Static scan of a program string. M1 EXPOSES + tests this but does NOT call
127
+ * it in the run path (the sandbox that needs it lands in M2). */
128
+ export declare function staticPscan(program: string): {
129
+ rejected: boolean;
130
+ tokens: string[];
131
+ };
132
+ export interface PtcStepRecord {
133
+ n: number;
134
+ tool: BridgeTool;
135
+ ok: boolean;
136
+ ms: number;
137
+ /** ok rows: estimated tokens (inline text) or the offload handle's tokens. */
138
+ tokens: number;
139
+ /** ok rows: "inline" or a short ref code for an offloaded payload. */
140
+ dest: string;
141
+ /** ok rows: the offload ref (when the data was a handle), else null. */
142
+ ref?: string | null;
143
+ /** err rows only. */
144
+ phase?: TmPhase;
145
+ line?: number;
146
+ retry?: boolean;
147
+ message?: string;
148
+ errorRef?: string;
149
+ }
150
+ export interface PtcRunOutcome {
151
+ label: string;
152
+ status: PtcStatus;
153
+ steps: PtcStepRecord[];
154
+ okCount: number;
155
+ errCount: number;
156
+ retries: number;
157
+ calls: number;
158
+ ms: number;
159
+ engine: PtcEngineName;
160
+ degraded: boolean;
161
+ returnValue: unknown;
162
+ returned: boolean;
163
+ /** set when the program threw (status=engine-error). */
164
+ engineError?: PtcErrorBody;
165
+ parentStepId: string;
166
+ }
167
+ export declare class InlineSequentialEngine implements PtcEngine {
168
+ readonly name: PtcEngineName;
169
+ run(program: string, bridge: PtcBridge, signal: AbortSignal): Promise<unknown>;
170
+ }
171
+ /**
172
+ * Worker engine — runs the program in a dedicated `worker_threads.Worker`
173
+ * with `env:{}` (process.env emptied), `resourceLimits`, and `terminate()`
174
+ * for hard timeout kills. The bootstrap source is a build-time template
175
+ * string constant (zero runtime file IO, zero new deps, passes tsc).
176
+ *
177
+ * Probe result (P1, %TEMP%): ALL-GREEN on Node 24 / win32 — eval bootstrap,
178
+ * postMessage bidirectional, terminate (9 ms), resourceLimits, env:{} all
179
+ * verified. Auto chain = worker-first, inline fallback.
180
+ */
181
+ export declare class WorkerEngine implements PtcEngine {
182
+ readonly name: PtcEngineName;
183
+ run(program: string, bridge: PtcBridge, signal: AbortSignal): Promise<unknown>;
184
+ }
185
+ /**
186
+ * Inline-vm engine — runs the program inside `node:vm` with a compile
187
+ * timeout for synchronous busy-loops. Same `PtcEngine` seam as
188
+ * `InlineSequentialEngine` (M1) and `WorkerEngine` (M2).
189
+ *
190
+ * KNOWN RESIDUAL RISK (design §3, declared): `vm.compileFunction`'s
191
+ * `timeout` only kills synchronous CPU-bound loops. An `await` yields
192
+ * back to the event loop, so a pure-JS busy-wait between awaits can only
193
+ * be caught by the next bridge call's step-budget pre-check. This is the
194
+ * accepted trade-off for the inline fallback; the primary worker engine
195
+ * does not share this limitation (`worker.terminate()` is wall-clock).
196
+ */
197
+ export declare class InlineVmEngine implements PtcEngine {
198
+ readonly name: PtcEngineName;
199
+ run(program: string, bridge: PtcBridge, signal: AbortSignal): Promise<unknown>;
200
+ }
201
+ interface GateState {
202
+ calls: number;
203
+ errors: number;
204
+ retries: number;
205
+ steps: PtcStepRecord[];
206
+ stopReason?: "timeout" | "error-budget" | "call-budget";
207
+ }
208
+ /**
209
+ * Wrap a raw bridge with the StepGate. Every call: enforce time/call budget
210
+ * (throw a stop that unwinds the program), assign a composite step id
211
+ * `parent.kNN`, retry ≤1 on idempotent phases, record + persist errors, and
212
+ * trip the error budget. The gate lives ONLY here (outside the engine), per
213
+ * design §3 ("决策进代码").
214
+ */
215
+ export declare function createGateBridge(raw: PtcBridge, parent: string, budgets: PtcBudgets, state: GateState, opts: {
216
+ now: () => number;
217
+ deadlineAt: number;
218
+ store?: RunStore;
219
+ trajectoryParent?: string;
220
+ }): PtcBridge;
221
+ export interface EngineSelection {
222
+ engine: PtcEngine;
223
+ /** true when the auto chain degraded from worker to inline. */
224
+ degraded: boolean;
225
+ }
226
+ /**
227
+ * Select the PTC engine based on the TM_PTC_ENGINE mode.
228
+ * - "worker": WorkerEngine only (throws on failure → engine-error status).
229
+ * - "inline": InlineVmEngine only (vm timeout for sync busy-loops).
230
+ * - "auto" (default): try WorkerEngine first; on failure → InlineVmEngine
231
+ * with `degraded=true` (marked `degraded-engine` in the summary).
232
+ *
233
+ * Probe result (P1, %TEMP%): ALL-GREEN on Node 24/win32 — auto chain =
234
+ * worker-first, inline fallback. Design §3 table.
235
+ */
236
+ export declare function selectEngine(mode: "auto" | "worker" | "inline", bridge: PtcBridge): EngineSelection;
237
+ export interface RunPtcOptions {
238
+ program: string;
239
+ label: string;
240
+ budgets: PtcBudgets;
241
+ parentStepId: string;
242
+ cfg: TmConfig;
243
+ store?: RunStore;
244
+ bridge: PtcBridge;
245
+ engine?: PtcEngine;
246
+ now?: () => number;
247
+ }
248
+ export declare function runPtc(o: RunPtcOptions): Promise<PtcRunOutcome>;
249
+ export declare const PTC_SUMMARY_HEADER = "PTC \u6458\u8981";
250
+ export declare const PTC_OK_SECTION = "-- \u6210\u529F\u5206\u90E8\uFF08\u22648 \u884C\uFF0C\u8D85\u51FA\u6574\u8868\u5378\u8F7D\uFF09";
251
+ export declare const PTC_OK_HEADER = " # tool ms tokens \u843D\u70B9(inline|ref \u77ED\u7801)";
252
+ export declare const PTC_ERR_SECTION = "-- \u9519\u8BEF\u5206\u90E8\uFF08\u5168\u91CF\u9519\u8BEF\u5DF2\u843D run store\uFF09";
253
+ export declare const PTC_ERR_HEADER = " # tool phase line retry message(\u622A\u65AD)";
254
+ export declare const PTC_RETURN_PREFIX = "\u8FD4\u56DE\u503C: ";
255
+ export declare const PTC_ERRORFULL_PREFIX = "\u9519\u8BEF\u5168\u6587: ";
256
+ /** Render the fixed-shape aggregation summary. `offload` is used to route an
257
+ * oversized success/error table (or return value) to a run-store handle. */
258
+ export declare function renderPtcSummary(o: PtcRunOutcome, offload?: (content: string, kind: string) => string): string;
259
+ /**
260
+ * Real M1 bridge: delegate each call to the corresponding exported pipeline,
261
+ * `ctx` passed through untouched, and normalize the pipeline's `unknown`
262
+ * result into `PtcCallResult` (TmErrorBody -> ok:false; anything else -> the
263
+ * already-governed data). Governance is entirely the pipelines'.
264
+ */
265
+ export declare function pipelineBridge(pipelines: TmPipelines, ctx: unknown): PtcBridge;
266
+ /** Build the tm_ptc_run ToolDefinition. Registered in the tool segment
267
+ * when the agent's whitelist grants tm_ptc_run (M3). */
268
+ export declare function buildPtcRunTool(deps: {
269
+ cfg: TmConfig;
270
+ store: RunStore;
271
+ nextStepId: () => string;
272
+ ctx: unknown;
273
+ accessToken: string;
274
+ engine?: PtcEngine;
275
+ pipelines?: TmPipelines;
276
+ bridge?: PtcBridge;
277
+ }): ToolDefinition;
278
+ export {};
279
+ //# sourceMappingURL=ptc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ptc.d.ts","sourceRoot":"","sources":["../../src/tm/ptc.ts"],"names":[],"mappings":"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"}