@te-river/opencode-team-mode 1.5.6 → 1.5.8

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 (77) hide show
  1. package/README.md +354 -528
  2. package/README.zh-CN.md +346 -480
  3. package/dist/agents.d.ts.map +1 -1
  4. package/dist/agents.js +44 -26
  5. package/dist/agents.js.map +1 -1
  6. package/dist/approval-gate.d.ts +5 -0
  7. package/dist/approval-gate.d.ts.map +1 -1
  8. package/dist/approval-gate.js +29 -0
  9. package/dist/approval-gate.js.map +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +27 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/prompts/lead.d.ts +1 -1
  14. package/dist/prompts/lead.d.ts.map +1 -1
  15. package/dist/prompts/lead.js +7 -4
  16. package/dist/prompts/lead.js.map +1 -1
  17. package/dist/prompts/shared.d.ts +1 -1
  18. package/dist/prompts/shared.d.ts.map +1 -1
  19. package/dist/prompts/shared.js +15 -13
  20. package/dist/prompts/shared.js.map +1 -1
  21. package/dist/prompts/specialists.d.ts +2 -2
  22. package/dist/prompts/specialists.d.ts.map +1 -1
  23. package/dist/prompts/specialists.js +31 -5
  24. package/dist/prompts/specialists.js.map +1 -1
  25. package/dist/tm/args-schema.d.ts +6 -0
  26. package/dist/tm/args-schema.d.ts.map +1 -1
  27. package/dist/tm/args-schema.js +23 -1
  28. package/dist/tm/args-schema.js.map +1 -1
  29. package/dist/tm/browser.d.ts.map +1 -1
  30. package/dist/tm/browser.js +35 -6
  31. package/dist/tm/browser.js.map +1 -1
  32. package/dist/tm/config.d.ts +16 -5
  33. package/dist/tm/config.d.ts.map +1 -1
  34. package/dist/tm/config.js +23 -6
  35. package/dist/tm/config.js.map +1 -1
  36. package/dist/tm/index.d.ts +11 -4
  37. package/dist/tm/index.d.ts.map +1 -1
  38. package/dist/tm/index.js +20 -6
  39. package/dist/tm/index.js.map +1 -1
  40. package/dist/tm/memory.d.ts +8 -2
  41. package/dist/tm/memory.d.ts.map +1 -1
  42. package/dist/tm/memory.js +31 -21
  43. package/dist/tm/memory.js.map +1 -1
  44. package/dist/tm/perm-ask.d.ts +37 -0
  45. package/dist/tm/perm-ask.d.ts.map +1 -0
  46. package/dist/tm/perm-ask.js +41 -0
  47. package/dist/tm/perm-ask.js.map +1 -0
  48. package/dist/tm/pipelines.d.ts.map +1 -1
  49. package/dist/tm/pipelines.js +7 -0
  50. package/dist/tm/pipelines.js.map +1 -1
  51. package/dist/tm/preview.d.ts.map +1 -1
  52. package/dist/tm/preview.js +32 -5
  53. package/dist/tm/preview.js.map +1 -1
  54. package/dist/tm/ptc/gate.d.ts.map +1 -1
  55. package/dist/tm/ptc/gate.js +4 -1
  56. package/dist/tm/ptc/gate.js.map +1 -1
  57. package/dist/tm/ptc/summary.d.ts.map +1 -1
  58. package/dist/tm/ptc/summary.js +5 -0
  59. package/dist/tm/ptc/summary.js.map +1 -1
  60. package/dist/tm/ptc/tool.d.ts.map +1 -1
  61. package/dist/tm/ptc/tool.js +2 -1
  62. package/dist/tm/ptc/tool.js.map +1 -1
  63. package/dist/tm/search.d.ts +58 -0
  64. package/dist/tm/search.d.ts.map +1 -0
  65. package/dist/tm/search.js +253 -0
  66. package/dist/tm/search.js.map +1 -0
  67. package/dist/tm/shell-bridge.d.ts +1 -1
  68. package/dist/tm/shell-bridge.d.ts.map +1 -1
  69. package/dist/tm/shell-bridge.js +52 -6
  70. package/dist/tm/shell-bridge.js.map +1 -1
  71. package/dist/tm/tools.js +1 -1
  72. package/dist/tm/webfetch.d.ts +36 -8
  73. package/dist/tm/webfetch.d.ts.map +1 -1
  74. package/dist/tm/webfetch.js +144 -23
  75. package/dist/tm/webfetch.js.map +1 -1
  76. package/docs/installation.md +219 -0
  77. package/package.json +3 -2
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * tm layer — the host `$` shell bridge + shell error hygiene. Split out of
3
- * the former tools.ts hub; behavior unchanged.
3
+ * the former tools.ts hub.
4
4
  */
5
5
  /**
6
6
  * Run a command through the host `$` bridge. The REAL host `$` is a
@@ -15,7 +15,11 @@
15
15
  */
16
16
  export async function runShellCommand($, command) {
17
17
  if (typeof $ !== "function") {
18
- throw new Error("宿主 shell 桥($)不可用");
18
+ // Desktop sidecar reality (1.18.30 probed): the plugin runs in a
19
+ // worker_threads worker on Electron's Node — neither input.$ nor Bun
20
+ // globals exist there. Go straight to the platform-shell spawn
21
+ // (governance already classified the command before this call).
22
+ return spawnShellFallback(command);
19
23
  }
20
24
  const shell = $;
21
25
  let proc;
@@ -37,10 +41,18 @@ export async function runShellCommand($, command) {
37
41
  }
38
42
  }
39
43
  if (proc == null) {
40
- // rethrow the ORIGINAL error (Error or shell-error object) — wrapping it
41
- // through String() would destroy stderr/stdout before cleanShellError
42
- // can extract line numbers
43
- throw lastErr ?? new Error("shell 桥调用失败");
44
+ // a $ shape that THREW carries the real shell error (stderr/stdout) —
45
+ // rethrow it so cleanShellError can extract the line; only a $ that is
46
+ // absent entirely (or returned nothing) falls back to the platform shell
47
+ if (lastErr != null)
48
+ throw lastErr;
49
+ // Desktop sidecar reality (1.18.30 probed): the plugin runs in a
50
+ // worker_threads worker on Electron's Node — neither input.$ nor Bun
51
+ // globals exist there, so every $ shape fails. Fall back to spawning
52
+ // the platform shell directly (PowerShell on win32 / bash elsewhere).
53
+ // Governance (P3 allowlist + R6) already classified the command BEFORE
54
+ // this call — the fallback runs only cleared commands.
55
+ return await spawnShellFallback(command);
44
56
  }
45
57
  const p = proc;
46
58
  if (typeof p.text === "function")
@@ -67,4 +79,38 @@ export function cleanShellError(err) {
67
79
  const m = /(?:line|行)\s*[:#]?\s*(\d+)/i.exec(raw);
68
80
  return { message: msg || "shell 执行失败", line: m ? Number(m[1]) : undefined };
69
81
  }
82
+ // ---------- platform-shell fallback (Desktop sidecar has no $ bridge) -----
83
+ async function spawnShellFallback(command) {
84
+ const { spawn } = await import("node:child_process");
85
+ const isWin = process.platform === "win32";
86
+ const exe = isWin ? "powershell.exe" : (process.env.SHELL || "bash");
87
+ const args = isWin
88
+ ? ["-NoProfile", "-NonInteractive", "-Command", command]
89
+ : ["-c", command];
90
+ return await new Promise((resolve, reject) => {
91
+ let child;
92
+ try {
93
+ child = spawn(exe, args, { windowsHide: true, timeout: 60_000 });
94
+ }
95
+ catch (e) {
96
+ reject(new Error(`平台 shell 回退启动失败:${e.message}`));
97
+ return;
98
+ }
99
+ let out = "";
100
+ let err = "";
101
+ child.stdout?.on("data", (d) => { out += d.toString(); });
102
+ child.stderr?.on("data", (d) => { err += d.toString(); });
103
+ child.on("error", (e) => reject(e));
104
+ child.on("close", (code) => {
105
+ if (code === 0)
106
+ resolve(out);
107
+ else {
108
+ const wrapped = new Error(err.trim() || `exit code ${code}`);
109
+ wrapped.stderr = err;
110
+ wrapped.stdout = out;
111
+ reject(wrapped);
112
+ }
113
+ });
114
+ });
115
+ }
70
116
  //# sourceMappingURL=shell-bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell-bridge.js","sourceRoot":"","sources":["../../src/tm/shell-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-bridge.js","sourceRoot":"","sources":["../../src/tm/shell-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAAU,EAAE,OAAe;IAC/D,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;QAC5B,iEAAiE;QACjE,qEAAqE;QACrE,gEAAgE;QAChE,gEAAgE;QAChE,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IACD,MAAM,KAAK,GAAG,CAAiC,CAAA;IAC/C,IAAI,IAAa,CAAA;IACjB,IAAI,OAAgB,CAAA;IACpB,KAAK,MAAM,OAAO,IAAI;QACpB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,sCAAsC;QACjG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,2BAA2B;QACnD,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,4BAA4B;KACnD,EAAE,CAAC;QACF,IAAI,CAAC;YACH,IAAI,GAAG,OAAO,EAAE,CAAA;YAChB,uEAAuE;YACvE,8DAA8D;YAC9D,IAAI,IAAI,IAAI,IAAI;gBAAE,MAAK;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,CAAA;QACf,CAAC;IACH,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,sEAAsE;QACtE,uEAAuE;QACvE,yEAAyE;QACzE,IAAI,OAAO,IAAI,IAAI;YAAE,MAAM,OAAO,CAAA;QAClC,iEAAiE;QACjE,qEAAqE;QACrE,sEAAsE;QACtE,sEAAsE;QACtE,uEAAuE;QACvE,uDAAuD;QACvD,OAAO,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;IACD,MAAM,CAAC,GAAG,IAAkD,CAAA;IAC5D,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/D,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACnD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;AAChC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,MAAM,CAAC,GAAG,GAAuE,CAAA;IACjF,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC;SAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAK,CAAY,CAAC,MAAM,GAAG,CAAC,CAAC;SAChE,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;SAC/C,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IACpD,MAAM,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjD,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;AAC7E,CAAC;AAED,6EAA6E;AAE7E,KAAK,UAAU,kBAAkB,CAAC,OAAe;IAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAA;IACpE,MAAM,IAAI,GAAG,KAAK;QAChB,CAAC,CAAC,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,CAAC;QACxD,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACnB,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,KAA+B,CAAA;QACnC,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;QAClE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAoB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YAC5D,OAAM;QACR,CAAC;QACD,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;QAChE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;QAChE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAA;iBACvB,CAAC;gBACJ,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,aAAa,IAAI,EAAE,CAG1D,CAAA;gBACD,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;gBACpB,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;gBACpB,MAAM,CAAC,OAAO,CAAC,CAAA;YACjB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
package/dist/tm/tools.js CHANGED
@@ -30,7 +30,7 @@ const TM_GREP_DESCRIPTION = `Full-text regex search inside the project (governed
30
30
  - Governance: results up to TM_OFFLOAD_THRESHOLD tokens return inline; larger ones are offloaded to a handle {offloaded, ref, access_token, expire_at, tokens, preview} whose preview carries match clues (file:line). Page through with tm_fetch.
31
31
  - Strategy: aggregate first (narrow pattern, counts), fetch raw lines only when needed.`;
32
32
  const TM_BASH_DESCRIPTION = `Run a READ-ONLY shell command in the project (governed passthrough of the built-in bash). Dialect: bash on POSIX, PowerShell-like on Windows (Get-Content / Get-ChildItem / Select-String work; ls/cat/dir are aliased).
33
- - Allowlist only (P3): ls cat head tail grep rg find awk sort uniq wc cut dir Get-Content Get-ChildItem Select-String Measure-Object — extend via TM_BASH_READONLY_ALLOWED. Anything else is rejected with a read-only suggestion or an ask to HUMAN.
33
+ - Allowlist only (P3): ls cat head tail grep rg find awk sort uniq wc cut dir Get-Content Get-ChildItem Select-String Measure-Object Select-Object Where-Object Sort-Object Group-Object — extend via TM_BASH_READONLY_ALLOWED. Anything else is rejected with a read-only suggestion or an ask to HUMAN.
34
34
  - R6 still applies on top: env dumps (env/printenv/set, $env:) and env-file paths are blocked exactly like the built-in bash — two layers, non-conflicting (R6 forbids, the allowlist permits).
35
35
  - Escapes rejected: output redirection (> >>), command substitution ($(), backticks, <() >()), find -delete/-exec, tail -f, Get-Content/Get-ChildItem -Wait, awk system(), rg --pre.
36
36
  - Governance: output up to TM_OFFLOAD_THRESHOLD tokens returns inline; larger output is offloaded to a tm_fetch handle. Use for aggregations (count/sort/uniq); for plain search prefer tm_grep (host index, auto-governed).`;
@@ -10,10 +10,11 @@
10
10
  *
11
11
  * Red lines carried over from the P5 network-zero era:
12
12
  * - only http(s) URLs — file:// and every other scheme rejected outright;
13
- * - the HOST must be on the allowlist (seeded with the four lookup hosts:
14
- * mobile.moegirl.org.cn / search.bilibili.com / cn.bing.com /
15
- * www.baidu.com; TM_WEBFETCH_ALLOWED_DOMAINS overrides, "*" opens every
16
- * host);
13
+ * - the HOST must be on the allowlist (seeded with the CN-reachable
14
+ * lookup hosts: moegirl wiki / bilibili / bing CN+int / baidu / sogou /
15
+ * 360 / npm registry / GitHub API — see config.ts
16
+ * DEFAULT_WEBFETCH_DOMAINS; TM_WEBFETCH_ALLOWED_DOMAINS overrides, "*"
17
+ * opens every host);
17
18
  * - redirects are followed MANUALLY and every hop re-checked against the
18
19
  * allowlist (an allowlisted shortener cannot bounce off-site);
19
20
  * - a URL naming an env file (isEnvFilePath) is refused — the R6 red
@@ -21,11 +22,10 @@
21
22
  * - response body capped at 2 MB, whole fetch under a hard 20 s timeout,
22
23
  * HTML stripped to text before governance.
23
24
  */
25
+ import { type TmAskFn } from "./perm-ask.js";
24
26
  import type { ToolResult } from "../types.js";
25
27
  import { type TmConfig } from "./config.js";
26
28
  import type { TmPipelines } from "./pipelines.js";
27
- /** Seeded allowlist — the four lookup hosts the design names. */
28
- export declare const DEFAULT_WEBFETCH_DOMAINS: readonly string[];
29
29
  /** True when `hostname` is the domain itself or a subdomain of it. */
30
30
  export declare function hostAllowed(hostname: string, allowlist: readonly string[]): boolean;
31
31
  export type UrlVerdict = {
@@ -34,6 +34,11 @@ export type UrlVerdict = {
34
34
  } | {
35
35
  ok: false;
36
36
  message: string;
37
+ /** Allowlist misses are ASKABLE (official dialog via ctx.ask); scheme /
38
+ * env-file / URL-shape violations are hard red lines, never
39
+ * dialog-governed. */
40
+ askable?: boolean;
41
+ url?: URL;
37
42
  };
38
43
  /**
39
44
  * Validate a fetch target: absolute http(s) URL, host on the allowlist
@@ -44,12 +49,29 @@ export declare function checkWebUrl(raw: unknown, allowlist: readonly string[]):
44
49
  /** Crude but dependency-free HTML → text (script/style/comments stripped,
45
50
  * block tags become newlines, common entities decoded). */
46
51
  export declare function htmlToText(html: string): string;
52
+ /** Search-engine result pages whose raw HTML is worth collapsing into a
53
+ * clean hit list (title + URL) instead of a wall of stripped page text. */
54
+ export declare const SEARCH_PAGE_RE: RegExp;
55
+ export interface SearchHit {
56
+ title: string;
57
+ url: string;
58
+ }
59
+ /**
60
+ * Pull external result hits (title + URL) out of a search-engine result
61
+ * page's RAW HTML. Dependency-free: anchor scan + noise filters (relative
62
+ * hrefs, click trackers, engine chrome, duplicates). Engines rearrange
63
+ * their markup often, so the filter set is intentionally loose — callers
64
+ * fall back to plain text extraction when the list comes back thin.
65
+ */
66
+ export declare function extractSearchHits(html: string, max?: number): SearchHit[];
67
+ /** Compact numbered rendering — what actually enters the context. */
68
+ export declare function renderSearchHits(query: string, engine: string, hits: SearchHit[]): string;
47
69
  export interface WebFetchResult {
48
70
  text: string;
49
71
  contentType: string;
50
72
  finalUrl: string;
51
73
  }
52
- type FetchImpl = (input: string, init?: Record<string, unknown>) => Promise<{
74
+ export type FetchImpl = (input: string, init?: Record<string, unknown>) => Promise<{
53
75
  ok?: boolean;
54
76
  status: number;
55
77
  headers: {
@@ -70,6 +92,13 @@ export declare function fetchWebText(url: URL, allowlist: readonly string[], opt
70
92
  timeoutMs?: number;
71
93
  maxBytes?: number;
72
94
  fetchImpl?: FetchImpl;
95
+ /** When provided, an allowlist-missed hop drives the OFFICIAL permission
96
+ * dialog (ctx.ask) instead of rejecting; approved hosts are remembered
97
+ * for the rest of THIS fetch only. */
98
+ ask?: TmAskFn;
99
+ /** Hosts already approved by the caller (e.g. the initial target) —
100
+ * their hops pass without a second dialog. */
101
+ skipAskHosts?: Set<string>;
73
102
  }): Promise<WebFetchResult>;
74
103
  /** Content extraction: HTML stripped to text; JSON kept for the json
75
104
  * preview branch; anything else passes through untouched. */
@@ -90,5 +119,4 @@ export declare function buildTmWebfetchTool(deps: {
90
119
  args: Record<string, unknown>;
91
120
  execute: (rawArgs: Record<string, unknown>, ctx: unknown) => Promise<ToolResult>;
92
121
  };
93
- export {};
94
122
  //# sourceMappingURL=webfetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webfetch.d.ts","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAKrD,CAAA;AASD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAOnF;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAElC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAwBlF;AAID;4DAC4D;AAC5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmB/C;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAC1E,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IAC7C,IAAI,CAAC,EAAE;QAAE,SAAS,IAAI,2BAA2B,CAAC,UAAU,CAAC,CAAA;KAAE,GAAG,IAAI,CAAA;IACtE,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7B,CAAC,CAAA;AA2BF;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAO,GAC1E,OAAO,CAAC,cAAc,CAAC,CAqCzB;AAED;8DAC8D;AAC9D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAKtG;AAUD;;0DAE0D;AAC1D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,SAAS,EAAE,WAAW,CAAA;IACtB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,GAAG;IACF,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CACjF,CAmCA"}
1
+ {"version":3,"file":"webfetch.d.ts","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,11 @@
10
10
  *
11
11
  * Red lines carried over from the P5 network-zero era:
12
12
  * - only http(s) URLs — file:// and every other scheme rejected outright;
13
- * - the HOST must be on the allowlist (seeded with the four lookup hosts:
14
- * mobile.moegirl.org.cn / search.bilibili.com / cn.bing.com /
15
- * www.baidu.com; TM_WEBFETCH_ALLOWED_DOMAINS overrides, "*" opens every
16
- * host);
13
+ * - the HOST must be on the allowlist (seeded with the CN-reachable
14
+ * lookup hosts: moegirl wiki / bilibili / bing CN+int / baidu / sogou /
15
+ * 360 / npm registry / GitHub API — see config.ts
16
+ * DEFAULT_WEBFETCH_DOMAINS; TM_WEBFETCH_ALLOWED_DOMAINS overrides, "*"
17
+ * opens every host);
17
18
  * - redirects are followed MANUALLY and every hop re-checked against the
18
19
  * allowlist (an allowlisted shortener cannot bounce off-site);
19
20
  * - a URL naming an env file (isEnvFilePath) is refused — the R6 red
@@ -22,16 +23,10 @@
22
23
  * HTML stripped to text before governance.
23
24
  */
24
25
  import { isEnvFilePath } from "../envprotect.js";
25
- import { shorten } from "./config.js";
26
+ import { askFnOf, askUserForTarget } from "./perm-ask.js";
27
+ import { shorten, DEFAULT_WEBFETCH_DOMAINS } from "./config.js";
26
28
  import { detectContentType } from "./preview.js";
27
29
  import { tmError, toToolResult } from "./result.js";
28
- /** Seeded allowlist — the four lookup hosts the design names. */
29
- export const DEFAULT_WEBFETCH_DOMAINS = [
30
- "mobile.moegirl.org.cn",
31
- "search.bilibili.com",
32
- "cn.bing.com",
33
- "www.baidu.com",
34
- ];
35
30
  const WEBFETCH_UA = "Mozilla/5.0 (compatible; TeamMode-tm_webfetch/1.0)";
36
31
  const WEBFETCH_TIMEOUT_MS = 20_000;
37
32
  const WEBFETCH_MAX_BYTES = 2_000_000;
@@ -72,8 +67,10 @@ export function checkWebUrl(raw, allowlist) {
72
67
  if (!allowlist.includes("*") && !hostAllowed(url.hostname, allowlist)) {
73
68
  return {
74
69
  ok: false,
70
+ askable: true,
71
+ url,
75
72
  message: `主机 "${url.hostname}" 不在 tm_webfetch 域名白名单内(预置: ${DEFAULT_WEBFETCH_DOMAINS.join(", ")})。` +
76
- `用 TM_WEBFETCH_ALLOWED_DOMAINS 扩展(逗号/分号分隔,"*" 放开全部主机)`,
73
+ `已请求用户批准(官方确认弹窗)——批准后本次放行;用 TM_WEBFETCH_ALLOWED_DOMAINS 可永久扩展(逗号/分号分隔,"*" 放开全部主机)`,
77
74
  };
78
75
  }
79
76
  return { ok: true, url };
@@ -101,11 +98,76 @@ export function htmlToText(html) {
101
98
  .replace(/\n{2,}/g, "\n")
102
99
  .trim();
103
100
  }
101
+ // ---------- search-result extraction ----------
102
+ /** Anchor tag scanner — captures the href (double- or single-quoted) plus
103
+ * the inner text. */
104
+ const ANCHOR_RE = /<a\b[^>]*href\s*=\s*(?:"([^"]*)"|'([^']*)')[^>]*>([\s\S]*?)<\/a\s*>/gi;
105
+ /** Search-engine result pages whose raw HTML is worth collapsing into a
106
+ * clean hit list (title + URL) instead of a wall of stripped page text. */
107
+ export const SEARCH_PAGE_RE = /(?:cn\.bing\.com|www\.bing\.com)\/search|\.baidu\.com\/s\b|sogou\.com\/web|so\.com\/s\b|search\.bilibili\.com\/all/i;
108
+ /** Click trackers / redirector links that point back at the engine instead
109
+ * of the destination (bing /ck/, baidu /link?, sogou /link?, ms fwlink). */
110
+ const ENGINE_TRACKER_RE = /bing\.com\/ck\/|baidu\.com\/link\?|sogou\.com\/link\?|go\.microsoft\.com\/fwlink/i;
111
+ function decodeEntities(s) {
112
+ return s
113
+ .replace(/&nbsp;/gi, " ")
114
+ .replace(/&amp;/gi, "&")
115
+ .replace(/&lt;/gi, "<")
116
+ .replace(/&gt;/gi, ">")
117
+ .replace(/&quot;/gi, '"')
118
+ .replace(/&#0?39;|&apos;/gi, "'");
119
+ }
120
+ /**
121
+ * Pull external result hits (title + URL) out of a search-engine result
122
+ * page's RAW HTML. Dependency-free: anchor scan + noise filters (relative
123
+ * hrefs, click trackers, engine chrome, duplicates). Engines rearrange
124
+ * their markup often, so the filter set is intentionally loose — callers
125
+ * fall back to plain text extraction when the list comes back thin.
126
+ */
127
+ export function extractSearchHits(html, max = 10) {
128
+ const hits = [];
129
+ const seen = new Set();
130
+ for (const m of html.matchAll(ANCHOR_RE)) {
131
+ const href = decodeEntities((m[1] ?? m[2] ?? "").trim());
132
+ if (!/^https?:\/\//i.test(href))
133
+ continue;
134
+ if (ENGINE_TRACKER_RE.test(href))
135
+ continue;
136
+ const title = decodeEntities(m[3].replace(/<[^>]+>/g, " "))
137
+ .replace(/\s+/g, " ")
138
+ .trim();
139
+ // <4 chars kills engine chrome (下一页 / 首页 / More) without risking real titles
140
+ if (title.length < 4)
141
+ continue;
142
+ const key = href.split("#")[0];
143
+ if (seen.has(key))
144
+ continue;
145
+ seen.add(key);
146
+ hits.push({ title: title.length > 110 ? title.slice(0, 110) + "…" : title, url: href });
147
+ if (hits.length >= max)
148
+ break;
149
+ }
150
+ return hits;
151
+ }
152
+ /** Compact numbered rendering — what actually enters the context. */
153
+ export function renderSearchHits(query, engine, hits) {
154
+ const lines = [`[search] ${engine} × "${query}" → ${hits.length} 条结果:`];
155
+ hits.forEach((h, i) => {
156
+ lines.push(`${i + 1}. ${h.title}`);
157
+ lines.push(` ${h.url}`);
158
+ });
159
+ lines.push("(读正文: tm_webfetch 结果 URL;JS 渲染页用 tm_browser 打开。)");
160
+ return lines.join("\n");
161
+ }
104
162
  const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
105
163
  async function readBodyCapped(res, maxBytes) {
106
164
  const reader = res.body?.getReader?.();
107
- if (!reader)
108
- return String(await res.text?.() ?? "");
165
+ if (!reader) {
166
+ // some hosts expose only text() (no streaming body) — the cap still
167
+ // applies, as a post-read string truncation
168
+ const t = String(await res.text?.() ?? "");
169
+ return t.length > maxBytes ? t.slice(0, maxBytes) + "\n…(响应体超出字节上限,已截断)" : t;
170
+ }
109
171
  const decoder = new TextDecoder("utf-8");
110
172
  let out = "";
111
173
  let bytes = 0;
@@ -136,11 +198,29 @@ export async function fetchWebText(url, allowlist, opts = {}) {
136
198
  const timeoutMs = opts.timeoutMs ?? WEBFETCH_TIMEOUT_MS;
137
199
  const maxBytes = opts.maxBytes ?? WEBFETCH_MAX_BYTES;
138
200
  let current = url;
201
+ const approvedHosts = opts.skipAskHosts ?? new Set();
139
202
  for (let hop = 0; hop <= WEBFETCH_MAX_REDIRECTS; hop++) {
140
203
  // every hop re-checked — an allowlisted shortener cannot bounce off-site
141
204
  const verdict = checkWebUrl(current.toString(), allowlist);
142
- if (!verdict.ok)
143
- throw new Error(verdict.message);
205
+ if (!verdict.ok) {
206
+ // an ASKABLE miss (allowlist only) can be walked through the official
207
+ // dialog; hard red lines (scheme / env-file / bad URL) never ask
208
+ if (!verdict.askable || !verdict.url)
209
+ throw new Error(verdict.message);
210
+ const host = verdict.url.hostname;
211
+ if (!approvedHosts.has(host)) {
212
+ if (!opts.ask)
213
+ throw new Error(verdict.message);
214
+ const outcome = await askUserForTarget({ ask: opts.ask }, {
215
+ permission: "tm_webfetch",
216
+ patterns: [current.toString()],
217
+ metadata: { source: "tm_webfetch redirect" },
218
+ });
219
+ if (outcome !== "approved")
220
+ throw new Error(verdict.message);
221
+ approvedHosts.add(host);
222
+ }
223
+ }
144
224
  const ctrl = new AbortController();
145
225
  const timer = setTimeout(() => ctrl.abort(), timeoutMs);
146
226
  try {
@@ -178,11 +258,11 @@ export function extractWebResponse(raw, contentType) {
178
258
  return { text: raw, isHtml: false };
179
259
  }
180
260
  // ---------- tool definition ----------
181
- const WEBFETCH_DESCRIPTION = `Fetch a web page through the governed pipeline (domain allowlist + threshold offload) — the FALLBACK web channel; PREFER user-configured MCP/browser/search tools when they are on your surface.
261
+ const WEBFETCH_DESCRIPTION = `Fetch a web page through the governed pipeline (domain allowlist + threshold offload) — use it for a KNOWN URL; for open-ended lookups PREFER tm_search (multi-engine, extracted results) and user-configured MCP/browser/search tools.
182
262
 
183
- - Seeded hosts: mobile.moegirl.org.cn (wiki term: https://mobile.moegirl.org.cn/TERM) · search.bilibili.com (https://search.bilibili.com/all?keyword=QUERY) · cn.bing.com (https://cn.bing.com/search?q=QUERY) · www.baidu.com (https://www.baidu.com/s?wd=QUERY). URL-encode the query (CJK terms too). Expand colloquial/abbreviated terms to canonical forms and fetch BOTH spellings.
263
+ - Seeded hosts (CN-reachable, no API keys): mobile.moegirl.org.cn (wiki term: https://mobile.moegirl.org.cn/TERM) · search.bilibili.com (https://search.bilibili.com/all?keyword=QUERY) · cn.bing.com (https://cn.bing.com/search?q=QUERY; append &ensearch=1 for international results) · www.baidu.com (https://www.baidu.com/s?wd=QUERY) · www.sogou.com (https://www.sogou.com/web?query=QUERY) · www.so.com (https://www.so.com/s?q=QUERY) · registry.npmjs.org (package JSON: https://registry.npmjs.org/<pkg>/latest, search: https://registry.npmjs.org/-/v1/search?text=QUERY) · api.github.com (repo search: https://api.github.com/search/repositories?q=QUERY) · raw.githubusercontent.com (raw docs/code) · ghproxy.net (mainland mirror for github raw: https://ghproxy.net/https://raw.githubusercontent.com/...). URL-encode the query (CJK terms too). Search-engine result pages are auto-extracted to a title+URL hit list. Expand colloquial/abbreviated terms to canonical forms and fetch BOTH spellings.
184
264
  - Governance: only http(s), hosts must be allowlisted (extend via TM_WEBFETCH_ALLOWED_DOMAINS, "*" opens all), redirects re-checked per hop, HTML stripped to text; output above TM_OFFLOAD_THRESHOLD tokens is offloaded to a handle — page with tm_fetch (try mode:"structure" first).
185
- - This is a governed tool: out-of-allowlist hosts are rejected, not dialog-governed.`;
265
+ - Governance: out-of-allowlist hosts route through the OFFICIAL confirmation dialog (approve to proceed once; the 10-min unanswered auto-reject applies); env-file URLs and non-http(s) schemes are hard-rejected with no dialog.`;
186
266
  /** Build the tm_webfetch ToolDefinition over the SHARED main pipelines
187
267
  * instance (same step counter as tm_read/tm_grep/tm_bash — refs stay
188
268
  * unambiguous). `fetchImpl` is injectable for tests. */
@@ -200,12 +280,53 @@ export function buildTmWebfetchTool(deps) {
200
280
  const args = rawArgs ?? {};
201
281
  const requested = typeof args.url === "string" ? args.url.trim() : "";
202
282
  const verdict = checkWebUrl(requested, allowlist);
203
- if (!verdict.ok)
204
- return toToolResult(tmError(tool, "permission", verdict.message));
283
+ if (!verdict.ok) {
284
+ // ASKABLE miss (allowlist only) → the OFFICIAL dialog decides, the
285
+ // plugin never self-allows; hard red lines reject outright
286
+ if (!verdict.askable || !verdict.url) {
287
+ return toToolResult(tmError(tool, "permission", verdict.message));
288
+ }
289
+ const outcome = await askUserForTarget(ctx, {
290
+ permission: tool,
291
+ patterns: [verdict.url.toString()],
292
+ metadata: { tool, url: shorten(requested, 200) },
293
+ });
294
+ if (outcome !== "approved") {
295
+ return toToolResult(tmError(tool, "permission", verdict.message +
296
+ (outcome === "rejected" ? "。用户未批准。" : "。宿主无法弹出确认窗口(旧版协议)。")));
297
+ }
298
+ }
205
299
  const stepId = pipelines.nextStepId();
206
300
  pipelines.store.appendTrajectory({ tool, step_id: stepId, event: "call" });
207
- const res = await fetchWebText(verdict.url, allowlist, { fetchImpl: deps.fetchImpl });
301
+ const approvedHosts = new Set([verdict.ok ? verdict.url.hostname : new URL(requested).hostname]);
302
+ const askFn = askFnOf(ctx) ?? undefined;
303
+ const res = await fetchWebText(verdict.ok ? verdict.url : new URL(requested), allowlist, {
304
+ fetchImpl: deps.fetchImpl,
305
+ ask: askFn,
306
+ skipAskHosts: approvedHosts,
307
+ });
308
+ // Search-engine result pages collapse to a clean hit list (title +
309
+ // URL) BEFORE governance — the stripped page text is ~90% engine
310
+ // chrome. Thin extraction (markup changed / anti-bot shell) falls
311
+ // through to the plain-text path.
312
+ if (SEARCH_PAGE_RE.test(res.finalUrl)) {
313
+ const hits = extractSearchHits(res.text);
314
+ if (hits.length > 0) {
315
+ const sp = (verdict.ok ? verdict.url : new URL(requested)).searchParams;
316
+ const query = sp.get("q") ?? sp.get("wd") ?? sp.get("query") ?? sp.get("keyword") ?? "";
317
+ const listing = renderSearchHits(query || res.finalUrl, "webfetch", hits);
318
+ return toToolResult(pipelines.govern(stepId, tool, listing, {
319
+ contentType: detectContentType(listing),
320
+ clue: `search url=${shorten(res.finalUrl, 120)}`,
321
+ }));
322
+ }
323
+ }
208
324
  const { text } = extractWebResponse(res.text, res.contentType);
325
+ if (!text.trim()) {
326
+ // anti-bot / JS-rendered pages (baidu is the usual offender) return
327
+ // an empty shell — tell the agent instead of storing nothing
328
+ return toToolResult(tmError(tool, "execute", "页面内容为空——该站点可能是反爬或 JS 渲染页(baidu 常见)。换 tm_search 的其他引擎(bing/sogou/so)、用 tm_browser 打开,或直接访问数据源 URL(如 registry.npmjs.org/<pkg>/latest)。"));
329
+ }
209
330
  const contentType = detectContentType(text);
210
331
  return toToolResult(pipelines.govern(stepId, tool, text, {
211
332
  contentType,
@@ -1 +1 @@
1
- {"version":3,"file":"webfetch.js","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAGnD,iEAAiE;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,uBAAuB;IACvB,qBAAqB;IACrB,aAAa;IACb,eAAe;CAChB,CAAA;AAED,MAAM,WAAW,GAAG,oDAAoD,CAAA;AACxE,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAClC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AACpC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAEhC,2CAA2C;AAE3C,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,SAA4B;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAClD,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,KAAK,CAAA;QACrC,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC;AAMD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,SAA4B;IACpE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;IACrD,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAA;IAC7E,CAAC;IACD,IAAI,GAAQ,CAAA;IACZ,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAA;IACzE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,GAAG,CAAC,QAAQ,sBAAsB,EAAE,CAAA;IACxF,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QACtE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,OAAO,GAAG,CAAC,QAAQ,+BAA+B,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACzF,sDAAsD;SACzD,CAAA;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AAC1B,CAAC;AAED,oCAAoC;AAEpC;4DAC4D;AAC5D,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,OAAO,CAAC,gCAAgC,EAAE,GAAG,CAAC;SAC9C,OAAO,CAAC,8BAA8B,EAAE,GAAG,CAAC;SAC5C,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;SAClD,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;SACpC,OAAO,CAAC,4DAA4D,EAAE,IAAI,CAAC;SAC3E,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,IAAI,EAAE,CAAA;AACX,CAAC;AAmBD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAE5D,KAAK,UAAU,cAAc,CAAC,GAG7B,EAAE,QAAgB;IACjB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAA;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,SAAS,CAAC;QACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAC3C,IAAI,IAAI;YAAE,MAAK;QACf,KAAK,IAAI,KAAK,CAAC,UAAU,CAAA;QACzB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACpC,GAAG,IAAI,oBAAoB,CAAA;YAC3B,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAQ,EACR,SAA4B,EAC5B,OAAyE,EAAE;IAE3E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAK,UAAoC,CAAC,KAAK,CAAA;IAC7E,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAA;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAA;IACpD,IAAI,OAAO,GAAG,GAAG,CAAA;IACjB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,sBAAsB,EAAE,GAAG,EAAE,EAAE,CAAC;QACvD,yEAAyE;QACzE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAA;QAC1D,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAA;QAClC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;QACvD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;gBAC7C,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;aACvC,CAAC,CAAmC,CAAA;YACrC,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBACvC,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,MAAM,gBAAgB,CAAC,CAAA;gBAC5D,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC/B,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,YAAY,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;YACpF,CAAC;YACD,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;YACnF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAA;QACjE,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,SAAS,sBAAsB,SAAS,CAAC,CAAA;AAC3D,CAAC;AAED;8DAC8D;AAC9D,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,WAAmB;IACjE,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAChD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AACrC,CAAC;AAED,wCAAwC;AAExC,MAAM,oBAAoB,GAAG;;;;qFAIwD,CAAA;AAErF;;0DAE0D;AAC1D,MAAM,UAAU,mBAAmB,CAAC,IAKnC;IAKC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,sBAAsB,CAAA;IAC5C,OAAO;QACL,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI;YACjB,GAAG,EAAE,EAAE,UAAU,EAAE,sFAAsF,EAAE;SAC5G;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAuB,EAAE;YACnD,MAAM,IAAI,GAAG,aAAa,CAAA;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAA;gBAC1B,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;gBACrE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBACjD,IAAI,CAAC,OAAO,CAAC,EAAE;oBAAE,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;gBAClF,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,CAAA;gBACrC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC1E,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;gBACrF,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;gBAC9D,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;gBAC3C,OAAO,YAAY,CACjB,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;oBACnC,WAAW;oBACX,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;iBAC1C,CAAC,CACH,CAAA;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,GAA2C,CAAA;gBACrD,IAAI,CAAC,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC7B,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAA;gBAC3E,CAAC;gBACD,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA;YAC3F,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"webfetch.js","sourceRoot":"","sources":["../../src/tm/webfetch.ts"],"names":[],"mappings":"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"}