@pentoshi/clai 3.8.19 → 3.8.21

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 (176) hide show
  1. package/README.md +8 -5
  2. package/dist/agent/compaction-summary.d.ts +1 -1
  3. package/dist/agent/compaction-summary.js +3 -2
  4. package/dist/agent/compaction-summary.js.map +1 -1
  5. package/dist/agent/context-breakdown.d.ts +37 -0
  6. package/dist/agent/context-breakdown.js +145 -0
  7. package/dist/agent/context-breakdown.js.map +1 -0
  8. package/dist/agent/context-manager.d.ts +29 -2
  9. package/dist/agent/context-manager.js +125 -17
  10. package/dist/agent/context-manager.js.map +1 -1
  11. package/dist/agent/continue-orient.d.ts +39 -0
  12. package/dist/agent/continue-orient.js +152 -0
  13. package/dist/agent/continue-orient.js.map +1 -0
  14. package/dist/agent/reliability-policy.d.ts +85 -0
  15. package/dist/agent/reliability-policy.js +158 -0
  16. package/dist/agent/reliability-policy.js.map +1 -0
  17. package/dist/agent/runner.js +280 -141
  18. package/dist/agent/runner.js.map +1 -1
  19. package/dist/agent/session-state.d.ts +13 -1
  20. package/dist/agent/session-state.js +30 -17
  21. package/dist/agent/session-state.js.map +1 -1
  22. package/dist/agent/stop-summary.d.ts +2 -2
  23. package/dist/agent/stop-summary.js +23 -4
  24. package/dist/agent/stop-summary.js.map +1 -1
  25. package/dist/agent/task-evidence.js +13 -0
  26. package/dist/agent/task-evidence.js.map +1 -1
  27. package/dist/agent/tool-history.d.ts +12 -0
  28. package/dist/agent/tool-history.js +159 -0
  29. package/dist/agent/tool-history.js.map +1 -1
  30. package/dist/agent/tool-output-formatting.d.ts +4 -0
  31. package/dist/agent/tool-output-formatting.js +21 -8
  32. package/dist/agent/tool-output-formatting.js.map +1 -1
  33. package/dist/app/controllers/session-compact-helper.d.ts +2 -0
  34. package/dist/app/controllers/session-compact-helper.js +14 -5
  35. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  36. package/dist/app/controllers/session-controller.d.ts +6 -0
  37. package/dist/app/controllers/session-controller.js +27 -2
  38. package/dist/app/controllers/session-controller.js.map +1 -1
  39. package/dist/commands/providers.js +57 -26
  40. package/dist/commands/providers.js.map +1 -1
  41. package/dist/index.js +3 -3
  42. package/dist/index.js.map +1 -1
  43. package/dist/llm/gemini.js +4 -1
  44. package/dist/llm/gemini.js.map +1 -1
  45. package/dist/llm/http.js +22 -12
  46. package/dist/llm/http.js.map +1 -1
  47. package/dist/llm/key-rotation.d.ts +52 -0
  48. package/dist/llm/key-rotation.js +122 -0
  49. package/dist/llm/key-rotation.js.map +1 -0
  50. package/dist/llm/provider.d.ts +2 -0
  51. package/dist/llm/provider.js +8 -0
  52. package/dist/llm/provider.js.map +1 -1
  53. package/dist/llm/router.d.ts +15 -2
  54. package/dist/llm/router.js +318 -125
  55. package/dist/llm/router.js.map +1 -1
  56. package/dist/prompts/embedded.js +1 -1
  57. package/dist/prompts/embedded.js.map +1 -1
  58. package/dist/prompts/index.d.ts +25 -0
  59. package/dist/prompts/index.js +55 -7
  60. package/dist/prompts/index.js.map +1 -1
  61. package/dist/prompts/system.agent.md +4 -3
  62. package/dist/repl/slash-commands.js +14 -8
  63. package/dist/repl/slash-commands.js.map +1 -1
  64. package/dist/repl.d.ts +4 -1
  65. package/dist/repl.js +12 -2
  66. package/dist/repl.js.map +1 -1
  67. package/dist/store/config.d.ts +18 -0
  68. package/dist/store/config.js +9 -0
  69. package/dist/store/config.js.map +1 -1
  70. package/dist/store/history.d.ts +8 -0
  71. package/dist/store/history.js +38 -0
  72. package/dist/store/history.js.map +1 -1
  73. package/dist/store/keys.d.ts +55 -0
  74. package/dist/store/keys.js +226 -21
  75. package/dist/store/keys.js.map +1 -1
  76. package/dist/store/logs.js +35 -12
  77. package/dist/store/logs.js.map +1 -1
  78. package/dist/store/paths.d.ts +13 -0
  79. package/dist/store/paths.js +23 -1
  80. package/dist/store/paths.js.map +1 -1
  81. package/dist/store/session-workspace.d.ts +79 -0
  82. package/dist/store/session-workspace.js +199 -0
  83. package/dist/store/session-workspace.js.map +1 -0
  84. package/dist/tools/definitions.js +17 -2
  85. package/dist/tools/definitions.js.map +1 -1
  86. package/dist/tools/http.d.ts +10 -0
  87. package/dist/tools/http.js +293 -58
  88. package/dist/tools/http.js.map +1 -1
  89. package/dist/tools/pentest-workflows.js +38 -19
  90. package/dist/tools/pentest-workflows.js.map +1 -1
  91. package/dist/tools/registry.js +26 -2
  92. package/dist/tools/registry.js.map +1 -1
  93. package/dist/tools/shell.d.ts +1 -1
  94. package/dist/tui/format-keys.js +29 -6
  95. package/dist/tui/format-keys.js.map +1 -1
  96. package/dist/tui-v2/app/App.js +39 -1
  97. package/dist/tui-v2/app/App.js.map +1 -1
  98. package/dist/tui-v2/app/command-handlers.js +1 -2
  99. package/dist/tui-v2/app/command-handlers.js.map +1 -1
  100. package/dist/tui-v2/app/commands/config-commands.d.ts +1 -2
  101. package/dist/tui-v2/app/commands/config-commands.js +1 -11
  102. package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
  103. package/dist/tui-v2/app/commands/key-commands.d.ts +1 -1
  104. package/dist/tui-v2/app/commands/key-commands.js +148 -63
  105. package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
  106. package/dist/tui-v2/app/commands/picker-commands.js +13 -7
  107. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  108. package/dist/tui-v2/bootstrap/composition-root.js +8 -5
  109. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
  110. package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -4
  111. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  112. package/dist/tui-v2/components/modal/keys-modal.d.ts +19 -0
  113. package/dist/tui-v2/components/modal/keys-modal.js +203 -0
  114. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -0
  115. package/dist/tui-v2/components/modal/secret-modal.d.ts +3 -1
  116. package/dist/tui-v2/components/modal/secret-modal.js +110 -18
  117. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  118. package/dist/tui-v2/components/overlay/overlay-host.js +6 -2
  119. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  120. package/dist/tui-v2/components/pager/pager-line.js +5 -2
  121. package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
  122. package/dist/tui-v2/components/pager/pager.js +6 -3
  123. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  124. package/dist/tui-v2/components/plan/use-pane-presence.d.ts +6 -4
  125. package/dist/tui-v2/components/plan/use-pane-presence.js +8 -45
  126. package/dist/tui-v2/components/plan/use-pane-presence.js.map +1 -1
  127. package/dist/tui-v2/components/toast/toast-anim.d.ts +5 -4
  128. package/dist/tui-v2/components/toast/toast-anim.js +10 -7
  129. package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
  130. package/dist/tui-v2/components/toast/toast-host.d.ts +9 -3
  131. package/dist/tui-v2/components/toast/toast-host.js +124 -26
  132. package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
  133. package/dist/tui-v2/components/transcript/assistant-message.js +4 -1
  134. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  135. package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
  136. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  137. package/dist/tui-v2/components/transcript/file-diff-card.js +3 -23
  138. package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
  139. package/dist/tui-v2/components/transcript/linkable-text.js +9 -2
  140. package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
  141. package/dist/tui-v2/components/transcript/selectable-line.d.ts +22 -0
  142. package/dist/tui-v2/components/transcript/selectable-line.js +24 -0
  143. package/dist/tui-v2/components/transcript/selectable-line.js.map +1 -0
  144. package/dist/tui-v2/components/transcript/thinking-block.js +3 -1
  145. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  146. package/dist/tui-v2/components/transcript/tool-card.d.ts +5 -3
  147. package/dist/tui-v2/components/transcript/tool-card.js +39 -33
  148. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  149. package/dist/tui-v2/components/transcript/use-click-without-drag.js +4 -1
  150. package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -1
  151. package/dist/tui-v2/components/transcript/user-message.js +1 -1
  152. package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
  153. package/dist/tui-v2/controllers/overlay-controller.d.ts +42 -0
  154. package/dist/tui-v2/controllers/overlay-controller.js +53 -0
  155. package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
  156. package/dist/tui-v2/rendering/batch-sections.d.ts +15 -4
  157. package/dist/tui-v2/rendering/batch-sections.js +157 -64
  158. package/dist/tui-v2/rendering/batch-sections.js.map +1 -1
  159. package/dist/tui-v2/rendering/format-help.js +1 -1
  160. package/dist/tui-v2/rendering/format-help.js.map +1 -1
  161. package/dist/tui-v2/rendering/open-tool-output.js +10 -7
  162. package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
  163. package/dist/tui-v2/rendering/pager-markdown.d.ts +9 -0
  164. package/dist/tui-v2/rendering/pager-markdown.js +46 -0
  165. package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
  166. package/dist/tui-v2/rendering/pager-view-policy.d.ts +6 -3
  167. package/dist/tui-v2/rendering/pager-view-policy.js +9 -13
  168. package/dist/tui-v2/rendering/pager-view-policy.js.map +1 -1
  169. package/dist/tui-v2/rendering/sanitize-display.js +3 -1
  170. package/dist/tui-v2/rendering/sanitize-display.js.map +1 -1
  171. package/dist/tui-v2/state/transcript-reducer.js +70 -30
  172. package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
  173. package/dist/types.d.ts +7 -0
  174. package/dist/version.generated.d.ts +2 -2
  175. package/dist/version.generated.js +2 -2
  176. package/package.json +1 -1
@@ -1,9 +1,89 @@
1
1
  import net from "node:net";
2
2
  import { lookup } from "node:dns/promises";
3
+ import { Agent } from "undici";
3
4
  import { isBlockedAddress } from "./web/ssrf-guard.js";
4
5
  import { toReadableText } from "./web/readable.js";
5
- const DEFAULT_MAX_BYTES = 256 * 1024;
6
- const DEFAULT_RETRIES = 2;
6
+ /** Shared undici agent that skips cert verification (authorized pentest only). */
7
+ let insecureTlsAgent;
8
+ function getInsecureTlsAgent() {
9
+ if (!insecureTlsAgent) {
10
+ insecureTlsAgent = new Agent({
11
+ connect: {
12
+ rejectUnauthorized: false,
13
+ },
14
+ });
15
+ }
16
+ return insecureTlsAgent;
17
+ }
18
+ /** Flatten error + nested cause(s) for TLS code matching. */
19
+ function errorText(error, depth = 0) {
20
+ if (depth > 4 || error == null)
21
+ return "";
22
+ if (typeof error === "string")
23
+ return error;
24
+ if (error instanceof Error) {
25
+ const cause = error.cause !== undefined ? errorText(error.cause, depth + 1) : "";
26
+ const code = "code" in error && typeof error.code === "string"
27
+ ? String(error.code)
28
+ : "";
29
+ return `${error.message} ${code} ${cause}`;
30
+ }
31
+ if (typeof error === "object") {
32
+ const rec = error;
33
+ const code = typeof rec.code === "string" ? rec.code : "";
34
+ const message = typeof rec.message === "string" ? rec.message : "";
35
+ const cause = rec.cause !== undefined ? errorText(rec.cause, depth + 1) : "";
36
+ try {
37
+ return `${message} ${code} ${cause} ${JSON.stringify(error)}`;
38
+ }
39
+ catch {
40
+ return `${message} ${code} ${cause}`;
41
+ }
42
+ }
43
+ return String(error);
44
+ }
45
+ /** True when the error is a TLS hostname/cert mismatch (common for https://IP). */
46
+ export function isTlsCertNameError(error) {
47
+ const text = errorText(error);
48
+ return (/ERR_TLS_CERT_ALTNAME_INVALID/i.test(text) ||
49
+ /Hostname\/IP does not match certificate/i.test(text) ||
50
+ /certificate.*altname/i.test(text) ||
51
+ /UNABLE_TO_VERIFY_LEAF_SIGNATURE/i.test(text) ||
52
+ /DEPTH_ZERO_SELF_SIGNED_CERT/i.test(text) ||
53
+ /SELF_SIGNED_CERT/i.test(text) ||
54
+ /unable to verify the first certificate/i.test(text));
55
+ }
56
+ function formatTlsNetworkError(error, url) {
57
+ const base = error instanceof Error ? error.message : String(error);
58
+ if (!isTlsCertNameError(error))
59
+ return base;
60
+ let host = url;
61
+ try {
62
+ host = new URL(url).hostname;
63
+ }
64
+ catch {
65
+ /* keep raw */
66
+ }
67
+ const byIp = net.isIP(host.replace(/^\[|\]$/g, "")) !== 0;
68
+ return (`${base}\n\n` +
69
+ `TLS certificate did not validate for this URL` +
70
+ (byIp
71
+ ? ` (you connected by IP ${host}; the cert is almost always issued for a hostname, not the IP).`
72
+ : `.`) +
73
+ `\nAuthorized testing options:\n` +
74
+ ` 1. Retry with the hostname that matches the cert (from SAN/CN), or\n` +
75
+ ` 2. http.fetch with insecureTls=true (or tlsInsecure=true) to skip verification and still capture evidence, or\n` +
76
+ ` 3. shell: curl -k -i ${url}\n` +
77
+ `Evidence taken with insecureTls is still valid for recon; record that TLS verification was disabled.`);
78
+ }
79
+ /** Capture budget for body bytes (artifact + evidence build). Model context is capped later. */
80
+ const DEFAULT_MAX_BYTES = 128 * 1024;
81
+ /**
82
+ * Default retries for remote evidence: 0 so intentional 5xx/probe responses are
83
+ * not silently rewritten. Callers may pass retries; owned loopback still soft-
84
+ * retries connection refused.
85
+ */
86
+ const DEFAULT_RETRIES = 0;
7
87
  const RETRY_STATUSES = new Set([408, 425, 429, 500, 502, 503, 504]);
8
88
  const ALLOWED_METHODS = new Set([
9
89
  "GET",
@@ -14,6 +94,11 @@ const ALLOWED_METHODS = new Set([
14
94
  "DELETE",
15
95
  "OPTIONS",
16
96
  ]);
97
+ /** Browser-like default UA — less fingerprint noise than clai-http-fetch/*. */
98
+ const DEFAULT_USER_AGENT = "Mozilla/5.0 (compatible; clai/1.0; +https://github.com/pentoshi007/clai) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36";
99
+ const DEFAULT_TIMEOUT_MS = 15_000;
100
+ const MIN_TIMEOUT_MS = 3_000;
101
+ const MAX_TIMEOUT_MS = 60_000;
17
102
  /**
18
103
  * Block (or require explicit ownership confirmation for) requests that
19
104
  * target loopback, private, link-local, or cloud-metadata addresses.
@@ -125,6 +210,11 @@ function isConnectionRefusedError(error) {
125
210
  /\bother side closed\b/i.test(msg) ||
126
211
  /\bsocket hang up\b/i.test(msg));
127
212
  }
213
+ function clampTimeoutMs(value) {
214
+ if (value === undefined || !Number.isFinite(value))
215
+ return DEFAULT_TIMEOUT_MS;
216
+ return Math.max(MIN_TIMEOUT_MS, Math.min(MAX_TIMEOUT_MS, Math.floor(value)));
217
+ }
128
218
  export async function httpFetch(url, options = {}) {
129
219
  let target;
130
220
  try {
@@ -177,7 +267,7 @@ export async function httpFetch(url, options = {}) {
177
267
  return { ok: false, output: initialDenial, exitCode: 1 };
178
268
  const headers = new Headers(options.headers);
179
269
  if (!headers.has("user-agent")) {
180
- headers.set("user-agent", "clai-http-fetch/1.1");
270
+ headers.set("user-agent", DEFAULT_USER_AGENT);
181
271
  }
182
272
  if (!headers.has("accept")) {
183
273
  headers.set("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.5");
@@ -185,6 +275,7 @@ export async function httpFetch(url, options = {}) {
185
275
  if (!headers.has("accept-language")) {
186
276
  headers.set("accept-language", "en-US,en;q=0.8");
187
277
  }
278
+ const insecureTls = Boolean(options.insecureTls);
188
279
  const init = {
189
280
  method,
190
281
  headers,
@@ -193,6 +284,10 @@ export async function httpFetch(url, options = {}) {
193
284
  if (options.body !== undefined && method !== "GET" && method !== "HEAD") {
194
285
  init.body = options.body;
195
286
  }
287
+ // Node undici: skip cert checks for authorized IP/lab HTTPS probes.
288
+ if (insecureTls && target.protocol === "https:") {
289
+ init.dispatcher = getInsecureTlsAgent();
290
+ }
196
291
  // Local dev: try localhost / 127.0.0.1 / ::1 until one accepts (Vite dual-stack).
197
292
  const urlCandidates = ownedLoopback && (method === "GET" || method === "HEAD")
198
293
  ? loopbackUrlCandidates(url)
@@ -201,24 +296,26 @@ export async function httpFetch(url, options = {}) {
201
296
  let attempts = 0;
202
297
  let lastNetworkError;
203
298
  let usedUrl = url;
204
- // Extra retries for local probes (server often not ready on first tick).
205
- const baseRetries = method === "GET" || method === "HEAD"
299
+ let redirectHops = [];
300
+ const timeoutMs = clampTimeoutMs(options.timeoutMs);
301
+ // Status retries only when caller opts in (default 0). Loopback keeps soft
302
+ // connection-refused retries below regardless of status-retry budget.
303
+ const statusRetryLimit = method === "GET" || method === "HEAD"
206
304
  ? clampRetries(options.retries ?? DEFAULT_RETRIES)
207
305
  : 0;
208
- const retryLimit = ownedLoopback
209
- ? Math.max(baseRetries, 4)
210
- : baseRetries;
306
+ const connRetryLimit = ownedLoopback
307
+ ? Math.max(statusRetryLimit, 4)
308
+ : statusRetryLimit;
211
309
  try {
212
310
  candidateLoop: for (let ci = 0; ci < urlCandidates.length; ci += 1) {
213
311
  const candidateUrl = urlCandidates[ci];
214
312
  usedUrl = candidateUrl;
215
- // Fresh attempt counter per candidate, but keep total for the message.
216
313
  let localAttempts = 0;
217
314
  for (;;) {
218
315
  attempts += 1;
219
316
  localAttempts += 1;
220
317
  const controller = new AbortController();
221
- const timer = setTimeout(() => controller.abort(), 15000);
318
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
222
319
  const onParentAbort = () => controller.abort();
223
320
  if (options.signal) {
224
321
  if (options.signal.aborted) {
@@ -229,6 +326,7 @@ export async function httpFetch(url, options = {}) {
229
326
  try {
230
327
  let requestUrl = candidateUrl;
231
328
  let redirects = 0;
329
+ redirectHops = [];
232
330
  for (;;) {
233
331
  response = await fetch(requestUrl, {
234
332
  ...init,
@@ -239,6 +337,15 @@ export async function httpFetch(url, options = {}) {
239
337
  break;
240
338
  if (redirects >= 10)
241
339
  throw new Error("Too many redirects (maximum 10)");
340
+ const setCookies = typeof response.headers.getSetCookie === "function"
341
+ ? response.headers.getSetCookie()
342
+ : multiHeader(response.headers, "set-cookie");
343
+ redirectHops.push({
344
+ status: response.status,
345
+ url: requestUrl,
346
+ location,
347
+ setCookies,
348
+ });
242
349
  const next = new URL(location, requestUrl);
243
350
  const denial = await authorizeDestination(next);
244
351
  if (denial)
@@ -247,13 +354,12 @@ export async function httpFetch(url, options = {}) {
247
354
  requestUrl = next.toString();
248
355
  redirects += 1;
249
356
  }
250
- if (localAttempts <= retryLimit &&
357
+ if (localAttempts <= statusRetryLimit &&
251
358
  RETRY_STATUSES.has(response.status)) {
252
359
  await drainResponse(response);
253
360
  await sleep(retryDelayMs(localAttempts));
254
361
  continue;
255
362
  }
256
- // Success for this candidate
257
363
  break candidateLoop;
258
364
  }
259
365
  catch (error) {
@@ -262,7 +368,7 @@ export async function httpFetch(url, options = {}) {
262
368
  error.name === "AbortError" &&
263
369
  !options.signal?.aborted;
264
370
  const errMsg = isTimeout
265
- ? "Request timed out after 15s"
371
+ ? `Request timed out after ${timeoutMs}ms`
266
372
  : error instanceof Error
267
373
  ? error.message
268
374
  : String(error);
@@ -271,17 +377,16 @@ export async function httpFetch(url, options = {}) {
271
377
  }
272
378
  // Connection refused on loopback → try next address or retry.
273
379
  if (ownedLoopback && isConnectionRefusedError(error)) {
274
- if (localAttempts <= retryLimit) {
380
+ if (localAttempts <= connRetryLimit) {
275
381
  await sleep(Math.min(400 * localAttempts, 1500));
276
382
  continue;
277
383
  }
278
- // Exhausted retries for this host — try next loopback candidate.
279
384
  if (ci + 1 < urlCandidates.length) {
280
385
  break; // next candidate
281
386
  }
282
387
  throw new Error(errMsg);
283
388
  }
284
- if (localAttempts > retryLimit) {
389
+ if (localAttempts > statusRetryLimit) {
285
390
  throw new Error(errMsg);
286
391
  }
287
392
  await sleep(retryDelayMs(localAttempts));
@@ -299,9 +404,10 @@ export async function httpFetch(url, options = {}) {
299
404
  const tried = urlCandidates.length > 1
300
405
  ? ` (tried ${urlCandidates.join(" → ")})`
301
406
  : "";
407
+ const detail = formatTlsNetworkError(error, usedUrl || url);
302
408
  return {
303
409
  ok: false,
304
- output: `Network error after ${attempts} attempt${attempts === 1 ? "" : "s"}${tried}: ${error instanceof Error ? error.message : String(error)}`,
410
+ output: `Network error after ${attempts} attempt${attempts === 1 ? "" : "s"}${tried}: ${detail}`,
305
411
  exitCode: 1,
306
412
  };
307
413
  }
@@ -354,59 +460,30 @@ export async function httpFetch(url, options = {}) {
354
460
  }
355
461
  }
356
462
  else {
357
- // No streaming body (eg HEAD or empty 204). Fall through with empty text.
358
463
  collected = "";
359
464
  }
360
- const headerLines = [];
361
- response.headers.forEach((v, k) => headerLines.push(`${k}: ${v}`));
362
- const headerBlock = headerLines.length > 0 ? `Headers:\n${headerLines.join("\n")}\n\n` : "";
363
- const truncNote = truncated
364
- ? `\n... (truncated at ${limit.toLocaleString()} bytes)`
365
- : "";
366
465
  const contentType = response.headers.get("content-type") ?? "";
367
466
  const isBinary = isBinaryContentType(contentType) || isBinaryContent(collected);
368
- const displayBody = isBinary
369
- ? `[Binary content (${contentType || "unknown content type"}) - raw body suppressed]`
370
- : collected;
371
- const body = method === "HEAD" ? "" : displayBody;
372
- const readable = method !== "HEAD" && !isBinary && contentType.toLowerCase().includes("html")
373
- ? toReadableText(collected)
374
- : "";
375
467
  const finalUrl = response.url || usedUrl;
376
- const meta = {
468
+ const evidence = formatHttpEvidence({
469
+ method,
377
470
  requestedUrl: url,
471
+ usedUrl,
378
472
  finalUrl,
379
- probedUrl: usedUrl !== url ? usedUrl : undefined,
380
473
  status: response.status,
381
474
  statusText: response.statusText,
382
- ok: response.ok,
383
- method,
384
475
  attempts,
385
- retried: attempts > 1,
386
- headers: Object.fromEntries([...response.headers.entries()].sort(([a], [b]) => a.localeCompare(b))),
387
- contentType,
388
476
  bytesRead,
389
477
  truncated,
390
- truncatedAt: truncated ? limit : undefined,
391
- lastNetworkError: lastNetworkError instanceof Error
392
- ? lastNetworkError.message
393
- : lastNetworkError
394
- ? String(lastNetworkError)
395
- : undefined,
396
- };
397
- const evidence = [
398
- `${response.status} ${response.statusText} ${finalUrl}`,
399
- `attempts=${attempts} bytes=${bytesRead}${truncated ? ` truncated@${limit}` : ""}${usedUrl !== url ? ` via=${usedUrl}` : ""}`,
400
- "",
401
- "Metadata:",
402
- JSON.stringify(meta, null, 2),
403
- "",
404
- headerBlock.trimEnd(),
405
- readable ? `\nReadable content:\n${readable}\n` : "",
406
- method === "HEAD" ? "" : `Raw body:\n${body}${truncNote}`,
407
- ]
408
- .filter((part) => part !== "")
409
- .join("\n");
478
+ limit,
479
+ contentType,
480
+ headers: response.headers,
481
+ body: collected,
482
+ isBinary,
483
+ redirectHops,
484
+ lastNetworkError,
485
+ insecureTls,
486
+ });
410
487
  return {
411
488
  ok: true,
412
489
  output: evidence,
@@ -414,6 +491,164 @@ export async function httpFetch(url, options = {}) {
414
491
  truncated,
415
492
  };
416
493
  }
494
+ function multiHeader(headers, name) {
495
+ const out = [];
496
+ headers.forEach((value, key) => {
497
+ if (key.toLowerCase() === name.toLowerCase())
498
+ out.push(value);
499
+ });
500
+ return out;
501
+ }
502
+ /** Headers always kept in evidence (security / fingerprint / cookies). */
503
+ const PRIORITY_HEADER_RE = /^(set-cookie|server|x-powered-by|x-aspnet|x-generator|x-frame-options|x-content-type-options|x-xss-protection|content-security-policy|content-type|location|www-authenticate|access-control-|strict-transport|referrer-policy|permissions-policy|cross-origin-|cache-control|via|cf-ray|x-request-id|x-amz-|x-served|link|allow|retry-after)$/i;
504
+ function formatHttpEvidence(input) {
505
+ const lines = [];
506
+ lines.push(`${input.status} ${input.statusText} ${input.method} ${input.finalUrl}`);
507
+ if (input.insecureTls) {
508
+ lines.push("TLS: verification DISABLED (insecureTls=true) — hostname/cert not validated; authorized-test only.");
509
+ }
510
+ if (input.redirectHops.length > 0) {
511
+ const chain = [
512
+ ...input.redirectHops.map((h) => `${h.status} ${h.url} → ${h.location}`),
513
+ `${input.status} ${input.finalUrl}`,
514
+ ];
515
+ lines.push(`redirects: ${chain.join(" → ")}`);
516
+ for (const hop of input.redirectHops) {
517
+ if (hop.setCookies.length) {
518
+ lines.push(` hop ${hop.status} set-cookie: ${hop.setCookies.join("; ")}`);
519
+ }
520
+ }
521
+ }
522
+ const metaBits = [
523
+ `attempts=${input.attempts}`,
524
+ `bytes=${input.bytesRead}`,
525
+ ];
526
+ if (input.truncated)
527
+ metaBits.push(`truncated@${input.limit}`);
528
+ if (input.usedUrl !== input.requestedUrl)
529
+ metaBits.push(`via=${input.usedUrl}`);
530
+ if (input.requestedUrl !== input.finalUrl && input.redirectHops.length === 0) {
531
+ metaBits.push(`requested=${input.requestedUrl}`);
532
+ }
533
+ lines.push(metaBits.join(" "));
534
+ if (input.finalUrl.startsWith("https:") && !input.insecureTls) {
535
+ lines.push("TLS: leaf cert not captured by http.fetch — use web.fetch with includeTls=true for fingerprint/SAN.");
536
+ }
537
+ // ALL response headers, always — cheap vs body and critical for pentest.
538
+ // Security/fingerprint headers first for scannability; remainder sorted after.
539
+ const allHeaders = [];
540
+ input.headers.forEach((v, k) => allHeaders.push([k, v]));
541
+ allHeaders.sort(([a], [b]) => a.localeCompare(b));
542
+ const priority = [];
543
+ const rest = [];
544
+ for (const [k, v] of allHeaders) {
545
+ const line = `${k}: ${v}`;
546
+ if (PRIORITY_HEADER_RE.test(k))
547
+ priority.push(line);
548
+ else
549
+ rest.push(line);
550
+ }
551
+ lines.push("");
552
+ lines.push("Headers:");
553
+ for (const line of priority)
554
+ lines.push(line);
555
+ for (const line of rest)
556
+ lines.push(line);
557
+ const tech = deriveTechHints(input.headers, input.body, input.contentType);
558
+ if (tech) {
559
+ lines.push("");
560
+ lines.push(`Tech hints: ${tech}`);
561
+ }
562
+ if (input.method !== "HEAD") {
563
+ lines.push("");
564
+ lines.push("Body:");
565
+ if (input.isBinary) {
566
+ lines.push(`[Binary content (${input.contentType || "unknown content type"}) — raw body suppressed]`);
567
+ }
568
+ else {
569
+ const ct = input.contentType.toLowerCase();
570
+ const isHtml = ct.includes("html");
571
+ const isJson = ct.includes("json") ||
572
+ ct.includes("javascript") ||
573
+ ct.includes("xml") ||
574
+ ct.startsWith("text/");
575
+ // Single representation: readable HTML OR raw text/json — never both.
576
+ let bodyText = isHtml
577
+ ? toReadableText(input.body) || input.body
578
+ : input.body;
579
+ // Error pages: keep status/headers rich, body shorter.
580
+ const isError = input.status >= 400;
581
+ const bodyCap = isError
582
+ ? 3_000
583
+ : isHtml
584
+ ? 6_000
585
+ : isJson
586
+ ? 12_000
587
+ : 8_000;
588
+ // Body is the only intentional truncate — status/headers/redirects stay full.
589
+ if (bodyText.length > bodyCap) {
590
+ bodyText =
591
+ bodyText.slice(0, bodyCap) +
592
+ `\n... (body truncated at ${bodyCap.toLocaleString()} chars — headers/status above are complete; re-fetch with higher maxBytes or page if you need more body)`;
593
+ }
594
+ if (input.truncated && !bodyText.includes("capture truncated")) {
595
+ bodyText += `\n... (wire capture stopped at ${input.limit.toLocaleString()} bytes — raise maxBytes for more body)`;
596
+ }
597
+ lines.push(bodyText || "(empty)");
598
+ }
599
+ }
600
+ if (input.lastNetworkError) {
601
+ const err = input.lastNetworkError instanceof Error
602
+ ? input.lastNetworkError.message
603
+ : String(input.lastNetworkError);
604
+ if (err) {
605
+ lines.push("");
606
+ lines.push(`note: earlier network error during retries: ${err}`);
607
+ }
608
+ }
609
+ return lines.join("\n");
610
+ }
611
+ /** Header-derived stack hints only — never invent products. */
612
+ function deriveTechHints(headers, body, contentType) {
613
+ const bits = [];
614
+ const server = headers.get("server");
615
+ if (server)
616
+ bits.push(`server=${server}`);
617
+ const powered = headers.get("x-powered-by");
618
+ if (powered)
619
+ bits.push(`x-powered-by=${powered}`);
620
+ const gen = headers.get("x-generator");
621
+ if (gen)
622
+ bits.push(`x-generator=${gen}`);
623
+ const cookies = typeof headers.getSetCookie === "function"
624
+ ? headers.getSetCookie()
625
+ : multiHeader(headers, "set-cookie");
626
+ if (cookies.length) {
627
+ const names = cookies
628
+ .map((c) => c.split("=")[0]?.trim())
629
+ .filter(Boolean)
630
+ .slice(0, 8);
631
+ if (names.length)
632
+ bits.push(`cookies=${names.join(",")}`);
633
+ }
634
+ if (contentType)
635
+ bits.push(`content-type=${contentType.split(";")[0]?.trim()}`);
636
+ // Light path markers from body (safe, non-invented).
637
+ const sample = body.slice(0, 8_000);
638
+ if (/\/_next\//i.test(sample) || /__NEXT_DATA__/i.test(sample)) {
639
+ bits.push("marker=next.js");
640
+ }
641
+ else if (/wp-content|wordpress/i.test(sample)) {
642
+ bits.push("marker=wordpress");
643
+ }
644
+ else if (/csrfmiddlewaretoken|django/i.test(sample)) {
645
+ bits.push("marker=django");
646
+ }
647
+ else if (/react/i.test(sample) && /data-reactroot|__REACT/i.test(sample)) {
648
+ bits.push("marker=react");
649
+ }
650
+ return bits.join("; ");
651
+ }
417
652
  function clampRetries(value) {
418
653
  if (!Number.isFinite(value))
419
654
  return DEFAULT_RETRIES;
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/tools/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/tools/http.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,kFAAkF;AAClF,IAAI,gBAAmC,CAAC;AACxC,SAAS,mBAAmB;IAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,IAAI,KAAK,CAAC;YAC3B,OAAO,EAAE;gBACP,kBAAkB,EAAE,KAAK;aAC1B;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,6DAA6D;AAC7D,SAAS,SAAS,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,GACR,MAAM,IAAI,KAAK,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ;YACvE,CAAC,CAAC,MAAM,CAAE,KAA0B,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,IAAI,CAAC;YACH,OAAO,GAAG,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,OAAO,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,CACL,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC;QACrD,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7C,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,GAAW;IACxD,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,CACL,GAAG,IAAI,MAAM;QACb,+CAA+C;QAC/C,CAAC,IAAI;YACH,CAAC,CAAC,yBAAyB,IAAI,iEAAiE;YAChG,CAAC,CAAC,GAAG,CAAC;QACR,iCAAiC;QACjC,wEAAwE;QACxE,mHAAmH;QACnH,0BAA0B,GAAG,IAAI;QACjC,sGAAsG,CACvG,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC;AACrC;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AACH,+EAA+E;AAC/E,MAAM,kBAAkB,GACtB,gJAAgJ,CAAC;AACnJ,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,cAAc,GAAG,MAAM,CAAC;AAS9B;;;;;;;;;GASG;AACH,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,KAAK,GAAG,UAAU,CAChB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAC/C,qBAAqB,CACtB,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,8DAA8D;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,KAAK,SAAS;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,IACE,CAAC,KAAK,WAAW;QACjB,CAAC,KAAK,uBAAuB;QAC7B,CAAC,KAAK,eAAe;QACrB,CAAC,KAAK,cAAc;QACpB,CAAC,KAAK,WAAW;QACjB,CAAC,KAAK,KAAK;QACX,CAAC,KAAK,iBAAiB,EACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,cAAc;IACd,IAAI,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAExC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAQ,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrC,iDAAiD;YACjD,CAAC,CAAC,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,iEAAiE;IACjE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,CAAC;QAClB,IAAI,CAAC,WAAW,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC;QACvC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;QAClC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAChC,CAAC;AACJ,CAAC;AAqBD,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,UAAwB,EAAE;IAE1B,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,gCAAgC,MAAM,CAAC,QAAQ,EAAE;YACzD,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,4BAA4B,MAAM,EAAE;YAC5C,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7E,wEAAwE;IACxE,yEAAyE;IACzE,8EAA8E;IAC9E,MAAM,oBAAoB,GAAG,KAAK,EAAE,WAAgB,EAA+B,EAAE;QACnF,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvF,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO,uDAAuD,QAAQ,mCAAmC,CAAC;QAC5G,CAAC;QACD,uEAAuE;QACvE,IAAI,OAAO,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAC;YACvF,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAAE,OAAO,+BAA+B,WAAW,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5G,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,aAAa;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAE5E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CACT,QAAQ,EACR,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,IAAI,GAAyC;QACjD,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,QAAQ;KACnB,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACxE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,oEAAoE;IACpE,IAAI,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,mBAAmB,EAAE,CAAC;IAC1C,CAAC;IAED,kFAAkF;IAClF,MAAM,aAAa,GACjB,aAAa,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC;QACtD,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC;QAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEZ,IAAI,QAA8B,CAAC;IACnC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,gBAAyB,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,IAAI,YAAY,GAAkB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,gBAAgB,GACpB,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;QACnC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;QAClD,CAAC,CAAC,CAAC,CAAC;IACR,MAAM,cAAc,GAAG,aAAa;QAClC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,gBAAgB,CAAC;IAErB,IAAI,CAAC;QACH,aAAa,EAAE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACnE,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAE,CAAC;YACxC,OAAO,GAAG,YAAY,CAAC;YACvB,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,SAAS,CAAC;gBACR,QAAQ,IAAI,CAAC,CAAC;gBACd,aAAa,IAAI,CAAC,CAAC;gBACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;gBAC9D,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBAC3B,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;oBACtD,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC1D,CAAC;gBACD,IAAI,CAAC;oBACH,IAAI,UAAU,GAAG,YAAY,CAAC;oBAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;oBAClB,YAAY,GAAG,EAAE,CAAC;oBAClB,SAAS,CAAC;wBACR,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;4BACjC,GAAG,IAAI;4BACP,MAAM,EAAE,UAAU,CAAC,MAAM;yBAC1B,CAAC,CAAC;wBACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBAClD,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;4BAAE,MAAM;wBAC1E,IAAI,SAAS,IAAI,EAAE;4BAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;wBACxE,MAAM,UAAU,GACd,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,KAAK,UAAU;4BACjD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE;4BACjC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;wBAClD,YAAY,CAAC,IAAI,CAAC;4BAChB,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,GAAG,EAAE,UAAU;4BACf,QAAQ;4BACR,UAAU;yBACX,CAAC,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;wBAC3C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,MAAM;4BAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;wBACpC,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAC9B,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC7B,SAAS,IAAI,CAAC,CAAC;oBACjB,CAAC;oBACD,IACE,aAAa,IAAI,gBAAgB;wBACjC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EACnC,CAAC;wBACD,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAC9B,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;wBACzC,SAAS;oBACX,CAAC;oBACD,MAAM,aAAa,CAAC;gBACtB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gBAAgB,GAAG,KAAK,CAAC;oBACzB,MAAM,SAAS,GACb,KAAK,YAAY,KAAK;wBACtB,KAAK,CAAC,IAAI,KAAK,YAAY;wBAC3B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC3B,MAAM,MAAM,GAAG,SAAS;wBACtB,CAAC,CAAC,2BAA2B,SAAS,IAAI;wBAC1C,CAAC,CAAC,KAAK,YAAY,KAAK;4BACtB,CAAC,CAAC,KAAK,CAAC,OAAO;4BACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,8DAA8D;oBAC9D,IAAI,aAAa,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;wBACrD,IAAI,aAAa,IAAI,cAAc,EAAE,CAAC;4BACpC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;4BACjD,SAAS;wBACX,CAAC;wBACD,IAAI,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;4BAClC,MAAM,CAAC,iBAAiB;wBAC1B,CAAC;wBACD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,IAAI,aAAa,GAAG,gBAAgB,EAAE,CAAC;wBACrC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC3C,CAAC;wBAAS,CAAC;oBACT,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GACT,aAAa,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,WAAW,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;YACzC,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;QAC5D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,uBAAuB,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,KAAK,MAAM,EAAE;YAChG,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,yCAAyC;YACjD,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,SAAS,GAAG,KAAK,EAAE,CAAC;gBACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;gBACpC,IAAI,KAAK,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC;oBACjC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5E,SAAS,IAAI,SAAS,CAAC;oBACvB,SAAS,GAAG,IAAI,CAAC;oBACjB,IAAI,CAAC;wBACH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,kDAAkD;oBACpD,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;YAChC,CAAC;YACD,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC;IACzC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,MAAM;QACN,YAAY,EAAE,GAAG;QACjB,OAAO;QACP,QAAQ;QACR,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,QAAQ;QACR,SAAS;QACT,SAAS;QACT,KAAK;QACL,WAAW;QACX,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,SAAS;QACf,QAAQ;QACR,YAAY;QACZ,gBAAgB;QAChB,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,CAAC;QACX,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB,EAAE,IAAY;IACjD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0EAA0E;AAC1E,MAAM,kBAAkB,GACtB,gVAAgV,CAAC;AAEnV,SAAS,kBAAkB,CAAC,KAkB3B;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CACxE,CAAC;IACF,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CACR,oGAAoG,CACrG,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG;YACZ,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,QAAQ,EAAE,CAC9C;YACD,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;SACpC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CACR,SAAS,GAAG,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,YAAY,KAAK,CAAC,QAAQ,EAAE;QAC5B,SAAS,KAAK,CAAC,SAAS,EAAE;KAC3B,CAAC;IACF,IAAI,KAAK,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,YAAY;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CACR,qGAAqG,CACtG,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,+EAA+E;IAC/E,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3E,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CACR,oBAAoB,KAAK,CAAC,WAAW,IAAI,sBAAsB,0BAA0B,CAC1F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,MAAM,GACV,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACnB,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACzB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAClB,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzB,sEAAsE;YACtE,IAAI,QAAQ,GAAG,MAAM;gBACnB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI;gBAC1C,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,uDAAuD;YACvD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO;gBACrB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,MAAM;wBACN,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,KAAK,CAAC;YACd,8EAA8E;YAC9E,IAAI,QAAQ,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;gBAC9B,QAAQ;oBACN,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;wBAC1B,4BAA4B,OAAO,CAAC,cAAc,EAAE,0GAA0G,CAAC;YACnK,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC/D,QAAQ,IAAI,kCAAkC,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,wCAAwC,CAAC;YACrH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,MAAM,GAAG,GACP,KAAK,CAAC,gBAAgB,YAAY,KAAK;YACrC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO;YAChC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrC,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+DAA+D;AAC/D,SAAS,eAAe,CACtB,OAAgB,EAChB,IAAY,EACZ,WAAmB;IAEnB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5C,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,GAAG;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,YAAY,KAAK,UAAU;QACxC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE;QACxB,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,OAAO;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;aACnC,MAAM,CAAC,OAAO,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAChF,qDAAqD;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAkB;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,oBAAoB;IACpE,IACE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC;QACzC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAChC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAChC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClC,qDAAqD;QACrD,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAC1D,iBAAiB,EAAE,CAAC;YACpB,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,24 +1,40 @@
1
1
  import { httpFetch } from "./http.js";
2
- async function runBoundedRequests(requests, options, concurrency = 4) {
2
+ async function runBoundedRequests(requests, options, concurrency = 4, onProgress) {
3
3
  const results = [];
4
4
  let cursor = 0;
5
- const workers = Array.from({ length: Math.min(concurrency, requests.length) }, async () => {
6
- for (;;) {
7
- const index = cursor++;
8
- const request = requests[index];
9
- if (!request)
10
- return;
11
- const result = await httpFetch(request.url, {
12
- method: "GET",
13
- headers: request.headers,
14
- maxBytes: 128 * 1024,
15
- signal: options?.signal,
16
- authorizeHop: options?.authorizeNetworkHop,
17
- });
18
- results[index] = { request, result };
19
- }
20
- });
21
- await Promise.all(workers);
5
+ let finished = 0;
6
+ const total = requests.length;
7
+ // Heartbeats keep the runner stall watchdog alive during multi-request scans
8
+ // (each hop can take up to ~15s; 100 paths at concurrency 4 can take minutes).
9
+ const heartbeat = setInterval(() => {
10
+ onProgress?.(`[webDiscover] still running — ${finished}/${total} finished, ${Math.min(concurrency, total - finished)} in flight\n`);
11
+ }, 8_000);
12
+ heartbeat.unref?.();
13
+ try {
14
+ const workers = Array.from({ length: Math.min(concurrency, requests.length) }, async () => {
15
+ for (;;) {
16
+ const index = cursor++;
17
+ const request = requests[index];
18
+ if (!request)
19
+ return;
20
+ onProgress?.(`[webDiscover] #${index + 1}/${total} ${request.label} starting\n`);
21
+ const result = await httpFetch(request.url, {
22
+ method: "GET",
23
+ headers: request.headers,
24
+ maxBytes: 128 * 1024,
25
+ signal: options?.signal,
26
+ authorizeHop: options?.authorizeNetworkHop,
27
+ });
28
+ results[index] = { request, result };
29
+ finished += 1;
30
+ onProgress?.(`[webDiscover] #${index + 1}/${total} ${request.label} ${result.ok ? "ok" : "fail"} (${finished}/${total})\n`);
31
+ }
32
+ });
33
+ await Promise.all(workers);
34
+ }
35
+ finally {
36
+ clearInterval(heartbeat);
37
+ }
22
38
  return results;
23
39
  }
24
40
  export async function discoverWebSurface(baseUrl, paths, options) {
@@ -28,7 +44,10 @@ export async function discoverWebSurface(baseUrl, paths, options) {
28
44
  label: path,
29
45
  url: new URL(path.startsWith("/") ? path : `/${path}`, base).toString(),
30
46
  }));
31
- const results = await runBoundedRequests(requests, options);
47
+ options?.onOutput?.(`[webDiscover] starting ${requests.length} bounded request(s), concurrency=4\n`, "stdout");
48
+ const results = await runBoundedRequests(requests, options, 4, (line) => {
49
+ options?.onOutput?.(line, "stdout");
50
+ });
32
51
  const observations = results.map(({ request, result }) => `${request.label}: ${result.ok ? "reachable" : "failed"}\n${result.output.slice(0, 2_000)}`);
33
52
  return {
34
53
  ok: results.some(({ result }) => result.ok),