@te-river/opencode-team-mode 1.5.11 → 1.5.13
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.
- package/README.md +154 -57
- package/README.zh-CN.md +126 -47
- package/dist/agents.d.ts +5 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +37 -11
- package/dist/agents.js.map +1 -1
- package/dist/approval-gate.d.ts +54 -16
- package/dist/approval-gate.d.ts.map +1 -1
- package/dist/approval-gate.js +163 -42
- package/dist/approval-gate.js.map +1 -1
- package/dist/host-hooks.d.ts +115 -0
- package/dist/host-hooks.d.ts.map +1 -0
- package/dist/host-hooks.js +270 -0
- package/dist/host-hooks.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -4
- package/dist/index.js.map +1 -1
- package/dist/prompts/lead.d.ts +1 -1
- package/dist/prompts/lead.d.ts.map +1 -1
- package/dist/prompts/lead.js +88 -6
- package/dist/prompts/lead.js.map +1 -1
- package/dist/prompts/shared.d.ts +1 -1
- package/dist/prompts/shared.d.ts.map +1 -1
- package/dist/prompts/shared.js +203 -119
- package/dist/prompts/shared.js.map +1 -1
- package/dist/prompts/specialists.d.ts +2 -2
- package/dist/prompts/specialists.d.ts.map +1 -1
- package/dist/prompts/specialists.js +73 -23
- package/dist/prompts/specialists.js.map +1 -1
- package/dist/tm/args-schema.d.ts +31 -1
- package/dist/tm/args-schema.d.ts.map +1 -1
- package/dist/tm/args-schema.js +155 -39
- package/dist/tm/args-schema.js.map +1 -1
- package/dist/tm/bash-timeout.d.ts +72 -0
- package/dist/tm/bash-timeout.d.ts.map +1 -0
- package/dist/tm/bash-timeout.js +100 -0
- package/dist/tm/bash-timeout.js.map +1 -0
- package/dist/tm/browser.d.ts +250 -20
- package/dist/tm/browser.d.ts.map +1 -1
- package/dist/tm/browser.js +1200 -143
- package/dist/tm/browser.js.map +1 -1
- package/dist/tm/config.d.ts +129 -0
- package/dist/tm/config.d.ts.map +1 -1
- package/dist/tm/config.js +117 -1
- package/dist/tm/config.js.map +1 -1
- package/dist/tm/dispatch.d.ts +95 -0
- package/dist/tm/dispatch.d.ts.map +1 -0
- package/dist/tm/dispatch.js +369 -0
- package/dist/tm/dispatch.js.map +1 -0
- package/dist/tm/index.d.ts +32 -7
- package/dist/tm/index.d.ts.map +1 -1
- package/dist/tm/index.js +74 -5
- package/dist/tm/index.js.map +1 -1
- package/dist/tm/memory.d.ts +88 -10
- package/dist/tm/memory.d.ts.map +1 -1
- package/dist/tm/memory.js +881 -99
- package/dist/tm/memory.js.map +1 -1
- package/dist/tm/pipelines.d.ts +26 -3
- package/dist/tm/pipelines.d.ts.map +1 -1
- package/dist/tm/pipelines.js +167 -11
- package/dist/tm/pipelines.js.map +1 -1
- package/dist/tm/ptc/budgets.d.ts +22 -1
- package/dist/tm/ptc/budgets.d.ts.map +1 -1
- package/dist/tm/ptc/budgets.js +87 -8
- package/dist/tm/ptc/budgets.js.map +1 -1
- package/dist/tm/ptc/contract.d.ts +49 -9
- package/dist/tm/ptc/contract.d.ts.map +1 -1
- package/dist/tm/ptc/contract.js +41 -3
- package/dist/tm/ptc/contract.js.map +1 -1
- package/dist/tm/ptc/driver.d.ts +5 -2
- package/dist/tm/ptc/driver.d.ts.map +1 -1
- package/dist/tm/ptc/driver.js +47 -15
- package/dist/tm/ptc/driver.js.map +1 -1
- package/dist/tm/ptc/engines.d.ts +15 -4
- package/dist/tm/ptc/engines.d.ts.map +1 -1
- package/dist/tm/ptc/engines.js +281 -28
- package/dist/tm/ptc/engines.js.map +1 -1
- package/dist/tm/ptc/index.d.ts +4 -4
- package/dist/tm/ptc/index.d.ts.map +1 -1
- package/dist/tm/ptc/index.js +2 -2
- package/dist/tm/ptc/index.js.map +1 -1
- package/dist/tm/ptc/pscan.d.ts +20 -1
- package/dist/tm/ptc/pscan.d.ts.map +1 -1
- package/dist/tm/ptc/pscan.js +328 -14
- package/dist/tm/ptc/pscan.js.map +1 -1
- package/dist/tm/ptc/summary.d.ts.map +1 -1
- package/dist/tm/ptc/summary.js +23 -1
- package/dist/tm/ptc/summary.js.map +1 -1
- package/dist/tm/ptc/tool.d.ts +34 -3
- package/dist/tm/ptc/tool.d.ts.map +1 -1
- package/dist/tm/ptc/tool.js +117 -20
- package/dist/tm/ptc/tool.js.map +1 -1
- package/dist/tm/pty.d.ts +70 -0
- package/dist/tm/pty.d.ts.map +1 -0
- package/dist/tm/pty.js +242 -0
- package/dist/tm/pty.js.map +1 -0
- package/dist/tm/search.d.ts +128 -15
- package/dist/tm/search.d.ts.map +1 -1
- package/dist/tm/search.js +556 -47
- package/dist/tm/search.js.map +1 -1
- package/dist/tm/shell-bridge.d.ts +14 -1
- package/dist/tm/shell-bridge.d.ts.map +1 -1
- package/dist/tm/shell-bridge.js +57 -10
- package/dist/tm/shell-bridge.js.map +1 -1
- package/dist/tm/webfetch.d.ts +29 -7
- package/dist/tm/webfetch.d.ts.map +1 -1
- package/dist/tm/webfetch.js +117 -15
- package/dist/tm/webfetch.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/installation.md +216 -17
- package/package.json +5 -2
|
@@ -132,13 +132,29 @@ the repo), you may use that tooling as designed.
|
|
|
132
132
|
|
|
133
133
|
## UI verification (tm_browser — you carry it)
|
|
134
134
|
For user-visible frontend changes, verify through the governed tm_browser
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
135
|
+
— snapshot-first, never screenshot-guessing:
|
|
136
|
+
1. \`open { url }\` once, \`navigate_page\` for follow-ups; take_snapshot
|
|
137
|
+
FIRST and act ONLY on the [uid=…] tokens it returned — guessed
|
|
138
|
+
selectors or guessed text are BANNED (the \`selector\` escape hatch is
|
|
139
|
+
only for a node the snapshot cannot express).
|
|
140
|
+
2. One action, one observation: after click/fill/press_key, take_snapshot
|
|
141
|
+
(or read) again BEFORE concluding; never stack blind actions.
|
|
142
|
+
3. Popups, dialogs and new tabs fold into the SAME observation round —
|
|
143
|
+
handle_dialog / select_page plus one take_snapshot, not one round each.
|
|
144
|
+
4. Waits: \`wait_for { text }\` inside a 3000 ms budget (the engine
|
|
145
|
+
default); never networkidle, never sleep-then-pray.
|
|
146
|
+
5. take_screenshot ONLY for what a snapshot cannot show (layout, color,
|
|
147
|
+
canvas); the aria snapshot / page text is your primary observation.
|
|
148
|
+
6. Finish with \`close\`. The tool drives the user's own Chromium-family
|
|
149
|
+
browser headful (playwright engine primary, degraded CDP pipe when
|
|
150
|
+
playwright-core is absent; display-less hosts run headless
|
|
151
|
+
automatically), on an isolated temp profile with a domain-allowlisted
|
|
152
|
+
network layer. Your use is UI verification of THIS project (local dev
|
|
153
|
+
servers, deployed preview routes) — open web browsing stays with the
|
|
154
|
+
lead and the researcher.
|
|
155
|
+
If tm_browser is unavailable on this host, the action you need is not
|
|
156
|
+
offered by the degraded engine, or the route needs credentials you were
|
|
157
|
+
not given, end your report with:
|
|
142
158
|
\`UI NOT VERIFIED: <what still needs manual checking>\`
|
|
143
159
|
so the lead can relay it honestly to the user. Pretending otherwise is
|
|
144
160
|
worse than admitting the gap.
|
|
@@ -194,18 +210,41 @@ by the team — flag prominently if that is the case.
|
|
|
194
210
|
## Web lookups (two channels)
|
|
195
211
|
You are one of the two network roles (the other is the team lead).
|
|
196
212
|
1. HIGH priority — TeamMode governed tools:
|
|
197
|
-
- tm_search (open-ended lookups):
|
|
198
|
-
engine
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
213
|
+
- tm_search (open-ended lookups): pass the RAW query with
|
|
214
|
+
engine:"auto" (the default) — it classifies the query, fans the
|
|
215
|
+
matching engines out IN PARALLEL, dedupes and fuses them into one
|
|
216
|
+
ranked hit list, so a hit two engines agree on outranks one
|
|
217
|
+
engine's confident junk. Engines behind auto: bing (the only live
|
|
218
|
+
CN HTML SERP) · stackoverflow · hn · github · npm · moegirl ·
|
|
219
|
+
bilibili; name one explicitly only for a second opinion.
|
|
220
|
+
ONE SEARCH IS A SAMPLE, NOT A SEARCH: if the list does not answer
|
|
221
|
+
the question, re-query 2-3 times with a narrowed or translated
|
|
222
|
+
phrasing (a Chinese concept often has better material under its
|
|
223
|
+
English term, and vice versa) BEFORE concluding "not found", and
|
|
224
|
+
record what each query was for in EVIDENCE. An empty result names
|
|
225
|
+
the alternative engines — switch, never retry the same one.
|
|
203
226
|
- tm_webfetch (known URL): one governed GET of an allowlisted page;
|
|
204
|
-
search-engine result pages it fetches are auto-extracted to hit
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
227
|
+
search-engine result pages it fetches are auto-extracted to hit
|
|
228
|
+
lists. A hit tagged (域名不在白名单,需批准)needs the approval
|
|
229
|
+
dialog before it can be read — prefer a hit you can fetch, or
|
|
230
|
+
tm_browser it.
|
|
231
|
+
- tm_browser (interactive): snapshot-first automation — open →
|
|
232
|
+
take_snapshot → act ONLY on the [uid=eN] tokens → observe again.
|
|
233
|
+
16 playwright verbs (navigate_page, take_snapshot, click, fill,
|
|
234
|
+
hover, drag, press_key, select_page, upload_file, wait_for,
|
|
235
|
+
evaluate_script, list_console_messages, list_network_requests,
|
|
236
|
+
list_pages, take_screenshot, handle_dialog) plus compat verbs open
|
|
237
|
+
/ navigate / read (page text) / screenshot / close. On a desktop
|
|
238
|
+
this opens a VISIBLE window of the user's OWN browser channel (an
|
|
239
|
+
Edge Beta default opens Edge Beta); headless only when the operator
|
|
240
|
+
sets TM_BROWSER_HEADLESS — there is no headless parameter for you
|
|
241
|
+
to pass. When a snapshot ends with "N 个子资源请求被拦截" the
|
|
242
|
+
governance gate trimmed the page: that is NOT "the site has no
|
|
243
|
+
images" — report the blocked hosts in FINDINGS instead. When your
|
|
244
|
+
UI work is done, action:"close" and quote the tool's own line
|
|
245
|
+
(已确认关闭 vs 警告:关闭未完全成功) — never tell the user a window
|
|
246
|
+
is gone because you asked for it to close. Isolated temp profile;
|
|
247
|
+
navigation is domain-allowlisted at the network layer.
|
|
209
248
|
2. FALLBACK — user-configured MCP/plugin tools (browser automation, web
|
|
210
249
|
search, page fetchers) for what tm_search / tm_browser / tm_webfetch
|
|
211
250
|
cannot do.
|
|
@@ -213,17 +252,19 @@ You are one of the two network roles (the other is the team lead).
|
|
|
213
252
|
TM_WEBFETCH_ALLOWED_DOMAINS):
|
|
214
253
|
- wiki term: https://mobile.moegirl.org.cn/TERM
|
|
215
254
|
- bilibili: https://search.bilibili.com/all?keyword=QUERY
|
|
216
|
-
- bing: https://cn.bing.com/search?q=QUERY
|
|
217
|
-
|
|
218
|
-
-
|
|
219
|
-
- sogou: https://www.sogou.com/web?query=QUERY
|
|
220
|
-
- 360: https://www.so.com/s?q=QUERY
|
|
255
|
+
- bing: https://cn.bing.com/search?q=QUERY
|
|
256
|
+
- SO question: https://api.stackexchange.com/2.3/search/advanced?order=desc&sort=relevance&q=QUERY&site=stackoverflow
|
|
257
|
+
- HN story: https://hn.algolia.com/api/v1/search?query=QUERY&tags=story
|
|
221
258
|
- npm pkg: https://registry.npmjs.org/<pkg>/latest
|
|
222
259
|
- npm search: https://registry.npmjs.org/-/v1/search?text=QUERY
|
|
223
260
|
- gh repos: https://api.github.com/search/repositories?q=QUERY
|
|
224
261
|
- gh raw: https://raw.githubusercontent.com/<owner>/<repo>/<branch>/<path>
|
|
225
262
|
- gh mirror: https://ghproxy.net/https://raw.githubusercontent.com/...
|
|
226
263
|
(use when raw.githubusercontent.com is unreachable)
|
|
264
|
+
sogou / so(360) / baidu / international bing are DEAD ENDS from a CN
|
|
265
|
+
host (a live benchmark showed anti-bot shells and 100% empty pages) —
|
|
266
|
+
never build a search URL there, even though their domains stay on the
|
|
267
|
+
fetch allowlist.
|
|
227
268
|
URL-encode the query (CJK terms too). Expand colloquial, abbreviated,
|
|
228
269
|
or aliased terms to canonical forms and fetch BOTH spellings before
|
|
229
270
|
concluding "not found".
|
|
@@ -231,6 +272,15 @@ Oversized pages come back as a handle — page with tm_fetch (try
|
|
|
231
272
|
mode:"structure" first). Never fabricate page content — an unfetchable
|
|
232
273
|
claim stays unfetched and is reported as a gap.
|
|
233
274
|
|
|
275
|
+
## Recon batching (PTC-first)
|
|
276
|
+
Local-repo recon is PTC-first: multi-file reading, bulk grep+read
|
|
277
|
+
aggregation, cross-referencing searches → ONE tm_ptc_run program
|
|
278
|
+
(tm.read / tm.grep / tm.bash ride inside; ALWAYS \`return\` the
|
|
279
|
+
aggregated findings). Firing single lookups one at a time for one
|
|
280
|
+
question wastes the team's time and tokens. The same rule covers
|
|
281
|
+
independent web calls: two unrelated tm_search queries belong in one
|
|
282
|
+
round (or one PTC program), never in two.
|
|
283
|
+
|
|
234
284
|
## Behavioral constraints
|
|
235
285
|
- When analyzing dependencies, output call-graph diagrams in mermaid format.
|
|
236
286
|
- When the code under study involves authentication/authorization, tag each
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specialists.js","sourceRoot":"","sources":["../../src/prompts/specialists.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B/B,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBjC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C9B,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"specialists.js","sourceRoot":"","sources":["../../src/prompts/specialists.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B/B,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBjC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C9B,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E5B,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GhC,CAAA"}
|
package/dist/tm/args-schema.d.ts
CHANGED
|
@@ -27,8 +27,20 @@ export declare function buildWebfetchArgsSchema(): Promise<Record<string, unknow
|
|
|
27
27
|
* tm_search args — same ZodRawShape treatment (BUG#3 class); descriptor
|
|
28
28
|
* fallback when zod is absent. tm/index awaits this and passes the result
|
|
29
29
|
* into buildTmSearchTool as `deps.args`.
|
|
30
|
+
*
|
|
31
|
+
* Wave B M1 — the engine list is DERIVED from search.ts's live
|
|
32
|
+
* `SEARCH_ENGINE_NAMES` + `AUTO_ENGINE_KEY`, never hand-written: a static
|
|
33
|
+
* copy here once drifted to a dead roster (bing-int/sogou/so/baidu kept,
|
|
34
|
+
* stackoverflow/hn/auto missing, default lied "bing"). Because
|
|
35
|
+
* buildTmSearchTool uses `deps.args ?? fallback`, this schema IS the
|
|
36
|
+
* model-visible surface in production (the search.ts fallback never fires),
|
|
37
|
+
* so it must not go stale. `defaultEngine` falls back to
|
|
38
|
+
* resolveTmConfig().searchDefaultEngine so the descriptor states the real
|
|
39
|
+
* default (auto) — callers may pass cfg.searchDefaultEngine explicitly.
|
|
40
|
+
* The §6m-s anti-drift test asserts the descriptor names every
|
|
41
|
+
* SEARCH_ENGINE_NAMES entry and none of the removed engines.
|
|
30
42
|
*/
|
|
31
|
-
export declare function buildSearchArgsSchema(): Promise<Record<string, unknown>>;
|
|
43
|
+
export declare function buildSearchArgsSchema(defaultEngine?: string): Promise<Record<string, unknown>>;
|
|
32
44
|
/**
|
|
33
45
|
* tm_memory args — same ZodRawShape treatment (BUG#3 class); descriptor
|
|
34
46
|
* fallback when zod is absent.
|
|
@@ -37,6 +49,24 @@ export declare function buildMemoryArgsSchema(): Promise<Record<string, unknown>
|
|
|
37
49
|
/**
|
|
38
50
|
* tm_browser args — same ZodRawShape treatment (BUG#3 class); descriptor
|
|
39
51
|
* fallback when zod is absent.
|
|
52
|
+
*
|
|
53
|
+
* STRIP BEHAVIOR / WHY EVERY FIELD IS DECLARED: this is a RAW shape, never
|
|
54
|
+
* wrapped in z.object() (BUG#3), so no zod-level .strip()/.passthrough()
|
|
55
|
+
* applies and execute() reads rawArgs verbatim. But the host serializes
|
|
56
|
+
* exactly these keys into the LLM parameter spec — an undeclared field is
|
|
57
|
+
* invisible to the model and never reaches browser.ts, i.e. the shape is a
|
|
58
|
+
* CLOSED param surface in effect. T5's 16 playwright verbs
|
|
59
|
+
* (BROWSER_PLAYWRIGHT_ACTIONS, browser.ts:505) + the 5 compat verbs consume
|
|
60
|
+
* 19 fields across execute/act (args.uid/selector/targetUid/targetSelector/
|
|
61
|
+
* text/key/function/expression/filePath/files/index/timeoutMs/dialogAction/
|
|
62
|
+
* promptText/clear/fullPage/image, browser.ts act() + execute()) — every one
|
|
63
|
+
* is declared below, or the corresponding verb silently loses its input.
|
|
64
|
+
*
|
|
65
|
+
* `headless` is DELIBERATELY not declared (2026-09-18): it used to be a model
|
|
66
|
+
* arg, `Boolean("false")` read as true, and one such call pinned the whole
|
|
67
|
+
* host process to a headless browser that every anti-bot gate then rejected.
|
|
68
|
+
* Mode is an operator setting (TM_BROWSER_HEADLESS) — a closed surface here
|
|
69
|
+
* is the fix, not a validation layer.
|
|
40
70
|
*/
|
|
41
71
|
export declare function buildBrowserArgsSchema(): Promise<Record<string, unknown>>;
|
|
42
72
|
//# sourceMappingURL=args-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args-schema.d.ts","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"args-schema.d.ts","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoCH,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAuFlF;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAE3B;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2D3E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6BhF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2BlC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA+C9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiE/E"}
|
package/dist/tm/args-schema.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* ...}}` garbage args in real sessions (the model wrapped its args 3/3
|
|
9
9
|
* times), even though flat args reached execute fine.
|
|
10
10
|
*/
|
|
11
|
+
import { resolveTmConfig } from "./config.js";
|
|
11
12
|
/**
|
|
12
13
|
* Load zod when the host environment provides it (opencode ships it as a
|
|
13
14
|
* peer); fall back to plain arg descriptors so the plugin never hard-depends
|
|
@@ -41,7 +42,7 @@ async function buildArgsSchemas() {
|
|
|
41
42
|
tm_read: describe(null, null, "path: string (required)"),
|
|
42
43
|
tm_grep: describe(null, null, "pattern: string (required), path: string (optional)"),
|
|
43
44
|
tm_bash: describe(null, null, "command: string (required, read-only allowlisted)"),
|
|
44
|
-
tm_fetch: describe(null, null, "ref: string (required), access_token: string, offset: int, limit: int, mode: lines|structure"),
|
|
45
|
+
tm_fetch: describe(null, null, "ref: string (required), access_token: string, offset: int, limit: int, mode: lines|structure, fields: dot-path (json handle projection)"),
|
|
45
46
|
};
|
|
46
47
|
}
|
|
47
48
|
const zz = z;
|
|
@@ -54,10 +55,13 @@ async function buildArgsSchemas() {
|
|
|
54
55
|
},
|
|
55
56
|
tm_grep: {
|
|
56
57
|
pattern: zz.string().describe("Regex to search (ripgrep syntax)."),
|
|
58
|
+
// describe-LAST on every optional chain — zod v4 drops a description
|
|
59
|
+
// applied before .optional() when the shape is serialized (see
|
|
60
|
+
// buildMemoryArgsSchema); a required field's describe stays first.
|
|
57
61
|
path: zz
|
|
58
62
|
.string()
|
|
59
|
-
.
|
|
60
|
-
.
|
|
63
|
+
.optional()
|
|
64
|
+
.describe("Optional directory scope, relative to the project root."),
|
|
61
65
|
},
|
|
62
66
|
tm_bash: {
|
|
63
67
|
command: zz
|
|
@@ -70,24 +74,28 @@ async function buildArgsSchemas() {
|
|
|
70
74
|
.describe("Offload handle ref: tm://runs/{run_id}/steps/{step_id}/result"),
|
|
71
75
|
access_token: zz
|
|
72
76
|
.string()
|
|
73
|
-
.
|
|
74
|
-
.
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("HMAC token from the offload handle (may also ride the ref fragment)."),
|
|
75
79
|
offset: zz
|
|
76
80
|
.number()
|
|
77
81
|
.int()
|
|
78
82
|
.min(0)
|
|
79
|
-
.
|
|
80
|
-
.
|
|
83
|
+
.optional()
|
|
84
|
+
.describe("0-based line offset of the first line to return."),
|
|
81
85
|
limit: zz
|
|
82
86
|
.number()
|
|
83
87
|
.int()
|
|
84
88
|
.min(1)
|
|
85
|
-
.
|
|
86
|
-
.
|
|
89
|
+
.optional()
|
|
90
|
+
.describe("Max lines per fetch, capped at TM_FETCH_MAX_LINES (default 2000)."),
|
|
87
91
|
mode: zz
|
|
88
92
|
.enum(["lines", "structure"])
|
|
89
|
-
.
|
|
90
|
-
.
|
|
93
|
+
.optional()
|
|
94
|
+
.describe("structure = ~100-token TOC / key tree / error-line map; try it first."),
|
|
95
|
+
fields: zz
|
|
96
|
+
.string()
|
|
97
|
+
.optional()
|
|
98
|
+
.describe("Dot-path projection over a JSON handle (T4): e.g. items[].name or user.email; returns ONLY the matched values. Ignored on a non-JSON handle."),
|
|
91
99
|
},
|
|
92
100
|
};
|
|
93
101
|
}
|
|
@@ -104,7 +112,7 @@ export async function buildPtcArgsSchema() {
|
|
|
104
112
|
return {
|
|
105
113
|
program: { descriptor: "program: string (required, async fn body, ≤TM_PTC_MAX_PROGRAM_CHARS)" },
|
|
106
114
|
label: { descriptor: "label: string (optional, ≤80 chars)" },
|
|
107
|
-
budgets: { descriptor: "budgets: { max_calls?, max_errors?, timeout_ms? } (optional, tighten-only)" },
|
|
115
|
+
budgets: { descriptor: "budgets: { max_calls?, max_errors?, timeout_ms? } (optional, tighten-only; any other key is rejected)" },
|
|
108
116
|
};
|
|
109
117
|
}
|
|
110
118
|
const zz = z;
|
|
@@ -112,11 +120,25 @@ export async function buildPtcArgsSchema() {
|
|
|
112
120
|
program: zz
|
|
113
121
|
.string()
|
|
114
122
|
.describe("Async function body. Available: tm.read(args), tm.grep(args), tm.bash(args), tm.fetch(args) — each returns {ok:true, data} or {ok:false, error:{tool,phase,line?,message}}. `return` a value for the aggregation summary."),
|
|
115
|
-
|
|
123
|
+
// Wave B Minor③: zod v4 DROPS a description set before .optional() when
|
|
124
|
+
// the shape is serialized, so every optional chain here is describe-LAST
|
|
125
|
+
// (matches buildMemoryArgsSchema / buildBrowserArgsSchema).
|
|
126
|
+
label: zz.string().optional().describe("Optional run label (≤80 chars)."),
|
|
127
|
+
// Fix batch T1: an EXPLICIT zod object — z.any() let host-side arg
|
|
128
|
+
// handling mangle the budgets value so parsePtcArgs never saw it and
|
|
129
|
+
// the caller's budgets silently fell back to the defaults.
|
|
130
|
+
// Wave B Minor②: .strict() rejects unknown budget keys (a typo like
|
|
131
|
+
// max_call silently read as an omitted default before — now it fails
|
|
132
|
+
// loudly). parsePtcArgs enforces the same at the runtime layer.
|
|
116
133
|
budgets: zz
|
|
117
|
-
.
|
|
118
|
-
.describe("
|
|
119
|
-
.optional(),
|
|
134
|
+
.object({
|
|
135
|
+
max_calls: zz.number().int().min(1).optional().describe("Max bridged tm_* calls (tighten-only)."),
|
|
136
|
+
max_errors: zz.number().int().min(1).optional().describe("Max failed bridged calls (tighten-only)."),
|
|
137
|
+
timeout_ms: zz.number().int().min(1).optional().describe("Wall-clock budget in ms (floor 5000, tighten-only)."),
|
|
138
|
+
})
|
|
139
|
+
.strict()
|
|
140
|
+
.optional()
|
|
141
|
+
.describe("Optional budgets object { max_calls?, max_errors?, timeout_ms? } — tighten-only, clamped to the TM_PTC_* ceilings. Unknown keys are rejected."),
|
|
120
142
|
};
|
|
121
143
|
}
|
|
122
144
|
/**
|
|
@@ -129,35 +151,58 @@ export async function buildWebfetchArgsSchema() {
|
|
|
129
151
|
if (!z) {
|
|
130
152
|
return {
|
|
131
153
|
url: { descriptor: "url: string (required, absolute https URL on an allowlisted host, query URL-encoded)" },
|
|
154
|
+
fields: { descriptor: "fields: string (optional, dot-path projection over a JSON response, e.g. items[].name; ignored on non-JSON)" },
|
|
132
155
|
};
|
|
133
156
|
}
|
|
157
|
+
// describe-LAST on the optional `fields` chain (zod v4 drops a
|
|
158
|
+
// description set before .optional(); see buildMemoryArgsSchema).
|
|
134
159
|
const zz = z;
|
|
135
160
|
return {
|
|
136
161
|
url: zz
|
|
137
162
|
.string()
|
|
138
|
-
.describe("Absolute https URL on an allowlisted host (seeded: mobile.moegirl.org.cn, search.bilibili.com, cn.bing.com, www.baidu.com, www.sogou.com, www.so.com, registry.npmjs.org, api.github.com). URL-encode the query (CJK terms too)."),
|
|
163
|
+
.describe("Absolute https URL on an allowlisted host (seeded: mobile.moegirl.org.cn, search.bilibili.com, cn.bing.com, www.baidu.com, www.sogou.com, www.so.com, registry.npmjs.org, api.github.com, api.stackexchange.com, hn.algolia.com). URL-encode the query (CJK terms too)."),
|
|
164
|
+
fields: zz
|
|
165
|
+
.string()
|
|
166
|
+
.optional()
|
|
167
|
+
.describe("Dot-path projection over a JSON response body (Wave B M2): e.g. items[].name or user.email — returns ONLY the matched values, mirroring tm_fetch's `fields`. Ignored when the response is not JSON."),
|
|
139
168
|
};
|
|
140
169
|
}
|
|
141
170
|
/**
|
|
142
171
|
* tm_search args — same ZodRawShape treatment (BUG#3 class); descriptor
|
|
143
172
|
* fallback when zod is absent. tm/index awaits this and passes the result
|
|
144
173
|
* into buildTmSearchTool as `deps.args`.
|
|
174
|
+
*
|
|
175
|
+
* Wave B M1 — the engine list is DERIVED from search.ts's live
|
|
176
|
+
* `SEARCH_ENGINE_NAMES` + `AUTO_ENGINE_KEY`, never hand-written: a static
|
|
177
|
+
* copy here once drifted to a dead roster (bing-int/sogou/so/baidu kept,
|
|
178
|
+
* stackoverflow/hn/auto missing, default lied "bing"). Because
|
|
179
|
+
* buildTmSearchTool uses `deps.args ?? fallback`, this schema IS the
|
|
180
|
+
* model-visible surface in production (the search.ts fallback never fires),
|
|
181
|
+
* so it must not go stale. `defaultEngine` falls back to
|
|
182
|
+
* resolveTmConfig().searchDefaultEngine so the descriptor states the real
|
|
183
|
+
* default (auto) — callers may pass cfg.searchDefaultEngine explicitly.
|
|
184
|
+
* The §6m-s anti-drift test asserts the descriptor names every
|
|
185
|
+
* SEARCH_ENGINE_NAMES entry and none of the removed engines.
|
|
145
186
|
*/
|
|
146
|
-
export async function buildSearchArgsSchema() {
|
|
187
|
+
export async function buildSearchArgsSchema(defaultEngine) {
|
|
188
|
+
const { AUTO_ENGINE_KEY, SEARCH_ENGINE_NAMES } = await import("./search.js");
|
|
189
|
+
const defEngine = (defaultEngine && defaultEngine.trim()) || resolveTmConfig().searchDefaultEngine || AUTO_ENGINE_KEY;
|
|
190
|
+
const engineList = `${AUTO_ENGINE_KEY}|${SEARCH_ENGINE_NAMES.join("|")}`;
|
|
191
|
+
const engineDesc = `engine: ${engineList} (optional, default ${defEngine}). ` +
|
|
192
|
+
`"${AUTO_ENGINE_KEY}" classifies the query and fans the matching engines out in parallel ` +
|
|
193
|
+
`(weighted-RRF fused top-10); an explicit name runs that single engine ` +
|
|
194
|
+
`(bing = the live CN HTML SERP; stackoverflow/hn/npm/github/moegirl/bilibili = structured JSON).`;
|
|
147
195
|
const z = await loadZod();
|
|
148
196
|
if (!z) {
|
|
149
197
|
return {
|
|
150
198
|
query: { descriptor: "query: string (required, raw text — CJK fine, encoded here)" },
|
|
151
|
-
engine: { descriptor:
|
|
199
|
+
engine: { descriptor: engineDesc },
|
|
152
200
|
};
|
|
153
201
|
}
|
|
154
202
|
const zz = z;
|
|
155
203
|
return {
|
|
156
204
|
query: zz.string().describe("Raw search query — pass text as-is; the tool URL-encodes it (CJK included)."),
|
|
157
|
-
engine: zz
|
|
158
|
-
.string()
|
|
159
|
-
.describe("bing (default) | bing-int (international results) | sogou | so (360) | baidu | bilibili | moegirl (wiki search API, structured) | npm (registry search, structured) | github (repo search API, structured).")
|
|
160
|
-
.optional(),
|
|
205
|
+
engine: zz.string().optional().describe(engineDesc),
|
|
161
206
|
};
|
|
162
207
|
}
|
|
163
208
|
/**
|
|
@@ -168,46 +213,117 @@ export async function buildMemoryArgsSchema() {
|
|
|
168
213
|
const z = await loadZod();
|
|
169
214
|
if (!z) {
|
|
170
215
|
return {
|
|
171
|
-
action: { descriptor: "action: add|search|list|forget (required)" },
|
|
216
|
+
action: { descriptor: "action: add|search|list|forget|compact (required)" },
|
|
172
217
|
title: { descriptor: "title: string (add/forget)" },
|
|
173
218
|
content: { descriptor: "content: string (add, ≤4000 chars)" },
|
|
174
219
|
category: { descriptor: "category: string (add, optional)" },
|
|
175
220
|
keywords: { descriptor: "keywords: string[] or comma string (add, optional)" },
|
|
176
221
|
usage_scenario: { descriptor: "usage_scenario: string[] or comma string (add, optional)" },
|
|
177
222
|
query: { descriptor: "query: string (search)" },
|
|
178
|
-
scope: { descriptor:
|
|
223
|
+
scope: { descriptor: 'scope: project|global|session (optional, default project; compact also accepts "all")' },
|
|
224
|
+
apply: { descriptor: "apply: boolean (compact only; absent = dry-run, true performs the merges)" },
|
|
179
225
|
};
|
|
180
226
|
}
|
|
227
|
+
// `.optional().describe(...)` — the description MUST be applied to the
|
|
228
|
+
// FINAL wrapper: zod (v4 confirmed) drops a description set before
|
|
229
|
+
// .optional() when the host serializes the shape, so describe-first would
|
|
230
|
+
// leave the model blind to the very text this descriptor exists to carry.
|
|
181
231
|
const zz = z;
|
|
182
232
|
return {
|
|
183
|
-
action: zz.string().describe("add | search | list | forget."),
|
|
184
|
-
title: zz.string().describe("Memory title (add/forget).")
|
|
185
|
-
content: zz.string().describe("One condensed fact, ≤4000 chars (add).")
|
|
186
|
-
category: zz.string().describe("Category slug, e.g. project_tech_stack (add, optional).")
|
|
187
|
-
keywords: zz.string().describe("Comma-separated keywords (add, optional).")
|
|
188
|
-
usage_scenario: zz.string().describe("Comma-separated when-to-use scenarios (add, optional).")
|
|
189
|
-
query: zz.string().describe("Search query (search).")
|
|
190
|
-
scope: zz
|
|
233
|
+
action: zz.string().describe("add | search | list | forget | compact."),
|
|
234
|
+
title: zz.string().optional().describe("Memory title (add/forget)."),
|
|
235
|
+
content: zz.string().optional().describe("One condensed fact, ≤4000 chars (add)."),
|
|
236
|
+
category: zz.string().optional().describe("Category slug, e.g. project_tech_stack (add, optional)."),
|
|
237
|
+
keywords: zz.string().optional().describe("Comma-separated keywords (add, optional)."),
|
|
238
|
+
usage_scenario: zz.string().optional().describe("Comma-separated when-to-use scenarios (add, optional)."),
|
|
239
|
+
query: zz.string().optional().describe("Search query (search)."),
|
|
240
|
+
scope: zz
|
|
241
|
+
.string()
|
|
242
|
+
.optional()
|
|
243
|
+
.describe('project (default) | global | session (transient, this conversation only); compact also accepts "all".'),
|
|
244
|
+
// memory.ts execute() reads args.apply (truthy gate on compact); the raw
|
|
245
|
+
// shape IS the model-visible param surface (the host serializes it into
|
|
246
|
+
// the LLM parameter spec), so an undeclared key is unreachable — declare
|
|
247
|
+
// it here or the model can never request a real compaction.
|
|
248
|
+
apply: zz
|
|
249
|
+
.boolean()
|
|
250
|
+
.optional()
|
|
251
|
+
.describe("compact only: absent = dry-run (report planned merges), true = perform them (originals backed up under memories/.compact-backup/)."),
|
|
191
252
|
};
|
|
192
253
|
}
|
|
193
254
|
/**
|
|
194
255
|
* tm_browser args — same ZodRawShape treatment (BUG#3 class); descriptor
|
|
195
256
|
* fallback when zod is absent.
|
|
257
|
+
*
|
|
258
|
+
* STRIP BEHAVIOR / WHY EVERY FIELD IS DECLARED: this is a RAW shape, never
|
|
259
|
+
* wrapped in z.object() (BUG#3), so no zod-level .strip()/.passthrough()
|
|
260
|
+
* applies and execute() reads rawArgs verbatim. But the host serializes
|
|
261
|
+
* exactly these keys into the LLM parameter spec — an undeclared field is
|
|
262
|
+
* invisible to the model and never reaches browser.ts, i.e. the shape is a
|
|
263
|
+
* CLOSED param surface in effect. T5's 16 playwright verbs
|
|
264
|
+
* (BROWSER_PLAYWRIGHT_ACTIONS, browser.ts:505) + the 5 compat verbs consume
|
|
265
|
+
* 19 fields across execute/act (args.uid/selector/targetUid/targetSelector/
|
|
266
|
+
* text/key/function/expression/filePath/files/index/timeoutMs/dialogAction/
|
|
267
|
+
* promptText/clear/fullPage/image, browser.ts act() + execute()) — every one
|
|
268
|
+
* is declared below, or the corresponding verb silently loses its input.
|
|
269
|
+
*
|
|
270
|
+
* `headless` is DELIBERATELY not declared (2026-09-18): it used to be a model
|
|
271
|
+
* arg, `Boolean("false")` read as true, and one such call pinned the whole
|
|
272
|
+
* host process to a headless browser that every anti-bot gate then rejected.
|
|
273
|
+
* Mode is an operator setting (TM_BROWSER_HEADLESS) — a closed surface here
|
|
274
|
+
* is the fix, not a validation layer.
|
|
196
275
|
*/
|
|
197
276
|
export async function buildBrowserArgsSchema() {
|
|
198
277
|
const z = await loadZod();
|
|
278
|
+
const ACTION_LIST = "navigate_page | take_snapshot | click | fill | hover | drag | press_key | select_page | upload_file | wait_for | evaluate_script | list_console_messages | list_network_requests | list_pages | take_screenshot | handle_dialog (16 playwright verbs) | open | navigate | read | screenshot | close (compat verbs).";
|
|
199
279
|
if (!z) {
|
|
200
280
|
return {
|
|
201
|
-
action: { descriptor:
|
|
202
|
-
url: { descriptor:
|
|
203
|
-
|
|
281
|
+
action: { descriptor: `action: ${ACTION_LIST} (required)` },
|
|
282
|
+
url: { descriptor: "url: string (open/navigate/navigate_page, allowlisted https)" },
|
|
283
|
+
image: { descriptor: "image: true with take_screenshot — inline the PNG pixels in this result" },
|
|
284
|
+
uid: { descriptor: "uid: snapshot [uid=eN] token (click/fill/hover/drag/upload_file/wait_for)" },
|
|
285
|
+
selector: { descriptor: "selector: CSS/text locator escape hatch (only when a snapshot cannot express the node)" },
|
|
286
|
+
targetUid: { descriptor: "targetUid: drag destination uid" },
|
|
287
|
+
targetSelector: { descriptor: "targetSelector: drag destination selector" },
|
|
288
|
+
text: { descriptor: "text: fill value / wait_for visible text" },
|
|
289
|
+
key: { descriptor: "key: press_key chord, e.g. Enter|Control+A" },
|
|
290
|
+
function: { descriptor: "function: JS function source for evaluate_script" },
|
|
291
|
+
expression: { descriptor: "expression: alias of function (evaluate_script)" },
|
|
292
|
+
filePath: { descriptor: "filePath: local file path for upload_file" },
|
|
293
|
+
files: { descriptor: "files: alias of filePath — single path or array of paths" },
|
|
294
|
+
index: { descriptor: "index: select_page target tab index from list_pages" },
|
|
295
|
+
timeoutMs: { descriptor: "timeoutMs: wait_for budget in ms (default 3000, clamped 100..30000)" },
|
|
296
|
+
dialogAction: { descriptor: "dialogAction: accept|dismiss for handle_dialog (default accept)" },
|
|
297
|
+
promptText: { descriptor: "promptText: prompt-dialog reply text for handle_dialog accept" },
|
|
298
|
+
clear: { descriptor: "clear: drain the console buffer after list_console_messages" },
|
|
299
|
+
fullPage: { descriptor: "fullPage: take_screenshot captures the full page (default viewport only)" },
|
|
204
300
|
};
|
|
205
301
|
}
|
|
302
|
+
// describe-LAST on every optional chain — zod v4 drops a description set
|
|
303
|
+
// before .optional() when the shape is serialized (see buildMemoryArgsSchema).
|
|
206
304
|
const zz = z;
|
|
305
|
+
const str = (d) => zz.string().optional().describe(d);
|
|
306
|
+
const bool = (d) => zz.boolean().optional().describe(d);
|
|
207
307
|
return {
|
|
208
|
-
action: zz.string().describe(
|
|
209
|
-
url:
|
|
210
|
-
|
|
308
|
+
action: zz.string().describe(ACTION_LIST),
|
|
309
|
+
url: str("Absolute https URL on an allowlisted host (open/navigate/navigate_page). URL-encode the query (CJK terms too)."),
|
|
310
|
+
image: bool("take_screenshot only: inline the PNG pixels into this tool result (default false = path only; pixels cost context, so ask only when the screenshot IS the evidence)."),
|
|
311
|
+
uid: str("Snapshot [uid=eN] token from the LATEST take_snapshot (click/fill/hover/drag source/upload_file/wait_for)."),
|
|
312
|
+
selector: str("CSS/text locator escape hatch — only for a node the snapshot cannot express; never guess locators."),
|
|
313
|
+
targetUid: str("drag destination uid from the latest take_snapshot."),
|
|
314
|
+
targetSelector: str("drag destination selector escape hatch."),
|
|
315
|
+
text: str("fill value, or the visible text to wait for with wait_for (uid or text — one of them)."),
|
|
316
|
+
key: str('press_key chord, e.g. "Enter" or "Control+A".'),
|
|
317
|
+
function: str("JS function/expression source for evaluate_script (returns the JSON-serialized value)."),
|
|
318
|
+
expression: str("Alias of function for evaluate_script."),
|
|
319
|
+
filePath: str("Local file path for upload_file (must exist on disk)."),
|
|
320
|
+
files: zz.any().optional().describe("Alias of filePath for upload_file — a single path or an array of paths."),
|
|
321
|
+
index: zz.number().int().min(0).optional().describe("select_page target tab index (0-based, from list_pages)."),
|
|
322
|
+
timeoutMs: zz.number().int().min(100).optional().describe("wait_for visibility budget in ms (engine default 3000, clamped to 30000)."),
|
|
323
|
+
dialogAction: str("handle_dialog verdict: accept (default) | dismiss."),
|
|
324
|
+
promptText: str("Reply text when handle_dialog accepts a prompt()-type dialog."),
|
|
325
|
+
clear: bool("Drain the buffered console messages after list_console_messages."),
|
|
326
|
+
fullPage: bool("take_screenshot captures the full page (default: viewport only)."),
|
|
211
327
|
};
|
|
212
328
|
}
|
|
213
329
|
//# sourceMappingURL=args-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args-schema.js","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,KAAK,UAAU,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAA;QAClB,MAAM,GAAG,GAAY,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,CAAC,GACJ,GAAuB,EAAE,CAAC;YAC1B,GAAqC,EAAE,OAAO,EAAE,CAAC;YAClD,IAAI,CAAA;QACN,OAAO,CAAC,IAAI,OAAQ,CAA0B,CAAC,MAAM,KAAK,UAAU;YAClE,CAAC,CAAE,CAA6B;YAChC,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,CAAiC,EACjC,MAAe,EACf,QAAgB;IAEhB,IAAI,CAAC,IAAI,OAAQ,CAA0B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClE,OAAO,MAAiC,CAAA;IAC1C,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;AACjC,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,CAAC,GAAG,MAAM,OAAO,EAAE,CAAA;IACzB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,yBAAyB,CAAC;YACxD,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,qDAAqD,CAAC;YACpF,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,mDAAmD,CAAC;YAClF,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"args-schema.js","sourceRoot":"","sources":["../../src/tm/args-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in bash TIMEOUT discipline (issue #6 of 2026-09-18).
|
|
3
|
+
*
|
|
4
|
+
* Where the 120 s comes from: the host's shell tool resolves
|
|
5
|
+
* `flags.bashDefaultTimeoutMs ?? 2 * 60 * 1e3` (verified in the shipped
|
|
6
|
+
* desktop bundle) — so when a model omits `timeout`, 120 s is the HOST
|
|
7
|
+
* default, and models that do pass one routinely pass 120000+ for a
|
|
8
|
+
* `Get-ChildItem`. Three serialised probes then cost the user six minutes
|
|
9
|
+
* of dead air, and every one of them was allowed to run for a reason no
|
|
10
|
+
* model ever had.
|
|
11
|
+
*
|
|
12
|
+
* The plugin owns no shell timer, so the ONE non-invasive lever is the
|
|
13
|
+
* official `tool.execute.before` hook, whose `output.args` is explicitly
|
|
14
|
+
* mutable. Two ceilings, both opt-out:
|
|
15
|
+
* - `TM_BASH_TIMEOUT_PROBE_MS` (default 60 000) — only for a command the
|
|
16
|
+
* P3 read-only allowlist already accepts (ls / grep / rg / cat /
|
|
17
|
+
* Get-ChildItem …). A pure probe has no legitimate reason to outlive
|
|
18
|
+
* a minute, and this is where the wasted 120 s actually sits.
|
|
19
|
+
* - `TM_BASH_TIMEOUT_MAX_MS` (default 0 = OFF) — a global cap for
|
|
20
|
+
* everything else. Off by default on purpose: a build/test run may
|
|
21
|
+
* legitimately need minutes, and silently killing one is worse than a
|
|
22
|
+
* slow one. A user who wants the ceiling sets it.
|
|
23
|
+
*
|
|
24
|
+
* This clamps a number the model already volunteered; it never ADDS a
|
|
25
|
+
* timeout where the model supplied none (that would turn the host's default
|
|
26
|
+
* into OUR default, which is not this plugin's call to make).
|
|
27
|
+
*/
|
|
28
|
+
export type BashTimeoutVerdict = {
|
|
29
|
+
changed: false;
|
|
30
|
+
via: "none" | "already-short";
|
|
31
|
+
} | {
|
|
32
|
+
changed: true;
|
|
33
|
+
via: "probe" | "max";
|
|
34
|
+
from: number;
|
|
35
|
+
to: number;
|
|
36
|
+
};
|
|
37
|
+
/** Parse the model-supplied timeout defensively: the host schema says a
|
|
38
|
+
* positive integer of MILLISECONDS, but an LLM hands us `"120000"`,
|
|
39
|
+
* `120000.0`, or omits it entirely. Anything unreadable means "no
|
|
40
|
+
* timeout was supplied" and is left alone. */
|
|
41
|
+
export declare function parseTimeoutArg(raw: unknown): number | null;
|
|
42
|
+
/**
|
|
43
|
+
* Decide the clamped timeout for one bash call.
|
|
44
|
+
* `probeMs`/`maxMs` of 0 disable that ceiling.
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveBashTimeout(opts: {
|
|
47
|
+
command: string;
|
|
48
|
+
timeoutMs: number | null;
|
|
49
|
+
probeMs: number;
|
|
50
|
+
maxMs: number;
|
|
51
|
+
readonlyAllowed: readonly string[];
|
|
52
|
+
}): BashTimeoutVerdict;
|
|
53
|
+
/**
|
|
54
|
+
* The hook fragment. Returns true when it mutated `args.timeout` — the
|
|
55
|
+
* caller may log that, and the trajectory keeps a count so a user asking
|
|
56
|
+
* "why did my probe get killed at 60 s?" has an answer.
|
|
57
|
+
*
|
|
58
|
+
* Everything here is defensive by contract: `output.args` is `any` on the
|
|
59
|
+
* host side, a non-bash tool must be untouched, and a malformed payload
|
|
60
|
+
* must never turn into a thrown error inside a permission-adjacent hook.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createBashTimeoutHook(deps: {
|
|
63
|
+
probeMs: number;
|
|
64
|
+
maxMs: number;
|
|
65
|
+
readonlyAllowed: readonly string[];
|
|
66
|
+
onClamp?: (info: {
|
|
67
|
+
via: string;
|
|
68
|
+
from: number;
|
|
69
|
+
to: number;
|
|
70
|
+
}) => void;
|
|
71
|
+
}): (input: unknown, output: unknown) => boolean;
|
|
72
|
+
//# sourceMappingURL=bash-timeout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-timeout.d.ts","sourceRoot":"","sources":["../../src/tm/bash-timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,GACjD;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAErE;;;+CAG+C;AAC/C,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAO3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,GAAG,kBAAkB,CAQrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACpE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAyB/C"}
|