{"version":3,"sources":["../src/tools/network-intercept.ts"],"names":["tool","z"],"mappings":"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","file":"chunk-76PP4N66.cjs","sourcesContent":["/**\n * network-intercept.ts — Intercept outgoing fetch, XHR, and WebSocket traffic.\n *\n * Patches window.fetch, XMLHttpRequest, and (optionally) WebSocket to log, modify,\n * mock, block, or delay requests. Useful for:\n *   - Debugging API calls (seeing exactly what headers/body are sent)\n *   - Mocking endpoints during dev without touching code\n *   - Auditing LLM/analytics traffic (\"what is careless sending where?\")\n *   - Rate-limiting, fault injection, UX testing with slow networks\n *   - Recording network tapes for replay (HAR format)\n *\n * SAFETY: This is GLOBAL — affects the whole tab. Call net_intercept_stop when done.\n * Rules persist across pause/resume; only net_intercept_stop clears them.\n */\nimport { tool } from '@strands-agents/sdk'\nimport { z } from 'zod'\n\ntype Action = 'log' | 'block' | 'mock' | 'delay' | 'modify'\n\ntype Rule = {\n  id: string\n  match: RegExp\n  action: Action\n  // mock\n  mockStatus?: number\n  mockBody?: string\n  mockHeaders?: Record<string, string>\n  // delay\n  delayMs?: number\n  // modify (applied AFTER the real response comes back; JSON-only right now)\n  modifyStatus?: number\n  modifyHeaders?: Record<string, string>\n  modifyBodyPatch?: Record<string, unknown> // shallow-merged into parsed JSON response\n}\n\ntype Entry = {\n  ts: number\n  method: string\n  url: string\n  status?: number\n  duration_ms: number\n  blocked?: boolean\n  mocked?: boolean\n  modified?: boolean\n  transport: 'fetch' | 'xhr' | 'ws'\n  request_headers?: Record<string, string>\n  request_body?: string\n  response_headers?: Record<string, string>\n  response_body?: string\n  error?: string\n}\n\nconst STATE = {\n  active: false,\n  paused: false, // paused = still installed, but pass everything through untouched\n  originalFetch: null as typeof fetch | null,\n  originalXHROpen: null as any,\n  originalXHRSend: null as any,\n  originalXHRSetHeader: null as any,\n  originalWebSocket: null as any,\n  rules: [] as Rule[],\n  log: [] as Entry[],\n  maxLog: 500,\n  captureBodies: false,\n  captureHeaders: false,\n  maxBodyBytes: 8000, // cap body captures\n  interceptWS: false,\n}\n\n// -- Helpers ----------------------------------------------------------------\n\nfunction matchRule(url: string): Rule | undefined {\n  for (const r of STATE.rules) if (r.match.test(url)) return r\n  return undefined\n}\n\nfunction pushLog(e: Entry) {\n  STATE.log.push(e)\n  if (STATE.log.length > STATE.maxLog) STATE.log.splice(0, STATE.log.length - STATE.maxLog)\n}\n\nfunction truncate(s: string | undefined | null, max = STATE.maxBodyBytes): string | undefined {\n  if (!s) return undefined\n  if (s.length <= max) return s\n  return s.slice(0, max) + `…[truncated, ${s.length} bytes total]`\n}\n\nfunction headersToObject(h: Headers | Record<string, string> | undefined): Record<string, string> {\n  if (!h) return {}\n  if (h instanceof Headers) {\n    const o: Record<string, string> = {}\n    h.forEach((v, k) => { o[k] = v })\n    return o\n  }\n  return { ...h }\n}\n\nfunction resolveUrl(input: any): string {\n  if (typeof input === 'string') return input\n  if (input instanceof URL) return input.href\n  if (input && typeof input === 'object' && typeof input.url === 'string') return input.url\n  try { return String(input) } catch { return '<unknown>' }\n}\n\nfunction resolveMethod(input: any, init: RequestInit | undefined): string {\n  // Request objects carry their method; init.method wins if explicitly set.\n  if (init?.method) return init.method.toUpperCase()\n  if (input && typeof input === 'object' && typeof input.method === 'string') return input.method.toUpperCase()\n  return 'GET'\n}\n\nasync function safeExtractReqBody(input: any, init: RequestInit | undefined): Promise<string | undefined> {\n  if (!STATE.captureBodies) return undefined\n  try {\n    if (init?.body != null) {\n      if (typeof init.body === 'string') return truncate(init.body)\n      if (init.body instanceof FormData) return truncate('[FormData]')\n      if (init.body instanceof URLSearchParams) return truncate(init.body.toString())\n      if (init.body instanceof Blob) return truncate(`[Blob ${init.body.size} bytes]`)\n      if (init.body instanceof ArrayBuffer) return truncate(`[ArrayBuffer ${init.body.byteLength} bytes]`)\n      return truncate(String(init.body))\n    }\n    if (input instanceof Request) {\n      // Clone before reading; original can only be read once.\n      const cloned = input.clone()\n      const text = await cloned.text()\n      return truncate(text)\n    }\n  } catch {\n    return '[body read failed]'\n  }\n  return undefined\n}\n\n// -- Fetch patching ---------------------------------------------------------\n\nfunction installFetch() {\n  if (STATE.originalFetch) return\n  STATE.originalFetch = window.fetch.bind(window)\n\n  window.fetch = (async (input: any, init?: RequestInit) => {\n    // Paused → passthrough without logging.\n    if (STATE.paused) return STATE.originalFetch!(input, init)\n\n    const url = resolveUrl(input)\n    const method = resolveMethod(input, init)\n    const start = performance.now()\n    const rule = matchRule(url)\n    const entry: Entry = { ts: Date.now(), method, url, duration_ms: 0, transport: 'fetch' }\n\n    if (STATE.captureHeaders) {\n      entry.request_headers = headersToObject(init?.headers as any) || (input instanceof Request ? headersToObject(input.headers) : {})\n    }\n    entry.request_body = await safeExtractReqBody(input, init)\n\n    try {\n      // BLOCK\n      if (rule?.action === 'block') {\n        entry.blocked = true\n        entry.status = -1\n        entry.duration_ms = performance.now() - start\n        entry.error = `Blocked by rule ${rule.id}`\n        pushLog(entry)\n        throw new Error(`Blocked by network-intercept rule ${rule.id}: ${url}`)\n      }\n\n      // DELAY (real fetch after wait)\n      if (rule?.action === 'delay') {\n        await new Promise((r) => setTimeout(r, rule.delayMs || 1000))\n      }\n\n      // MOCK (fully synthetic response)\n      if (rule?.action === 'mock') {\n        entry.mocked = true\n        entry.status = rule.mockStatus || 200\n        entry.duration_ms = performance.now() - start\n        if (STATE.captureBodies) entry.response_body = truncate(rule.mockBody ?? '')\n        if (STATE.captureHeaders) entry.response_headers = rule.mockHeaders || { 'content-type': 'application/json' }\n        pushLog(entry)\n        return new Response(rule.mockBody ?? '', {\n          status: rule.mockStatus || 200,\n          headers: rule.mockHeaders || { 'content-type': 'application/json' },\n        })\n      }\n\n      // Real request\n      const resp = await STATE.originalFetch!(input, init)\n      entry.status = resp.status\n      entry.duration_ms = performance.now() - start\n\n      if (STATE.captureHeaders) entry.response_headers = headersToObject(resp.headers)\n\n      // Optionally read body (clones the response so downstream still works).\n      let finalResp = resp\n      if (STATE.captureBodies || rule?.action === 'modify') {\n        try {\n          const cloned = resp.clone()\n          const text = await cloned.text()\n          entry.response_body = truncate(text)\n\n          if (rule?.action === 'modify') {\n            let newBody = text\n            let newStatus = rule.modifyStatus ?? resp.status\n            let newHeaders = {\n              ...headersToObject(resp.headers),\n              ...(rule.modifyHeaders || {}),\n            }\n            if (rule.modifyBodyPatch) {\n              try {\n                const parsed = text ? JSON.parse(text) : {}\n                const patched = { ...parsed, ...rule.modifyBodyPatch }\n                newBody = JSON.stringify(patched)\n              } catch {\n                // Not JSON — can't patch. Leave body alone.\n              }\n            }\n            entry.modified = true\n            entry.response_body = truncate(newBody)\n            finalResp = new Response(newBody, { status: newStatus, headers: newHeaders })\n          }\n        } catch {\n          // Body capture failed; carry on with original response.\n        }\n      }\n\n      pushLog(entry)\n      return finalResp\n    } catch (err) {\n      // Only log errors NOT already logged (e.g. block already logged above).\n      if (!entry.blocked) {\n        entry.duration_ms = performance.now() - start\n        if (!entry.status) entry.status = -1\n        entry.error = (err as Error)?.message || String(err)\n        pushLog(entry)\n      }\n      throw err\n    }\n  }) as any\n  STATE.active = true\n}\n\nfunction uninstallFetch() {\n  if (STATE.originalFetch) {\n    window.fetch = STATE.originalFetch\n    STATE.originalFetch = null\n  }\n}\n\n// -- XHR patching (NEW in iter 2) -------------------------------------------\n\nfunction installXHR() {\n  if (STATE.originalXHROpen) return\n  const OpenProto = XMLHttpRequest.prototype.open\n  const SendProto = XMLHttpRequest.prototype.send\n  const SetHeaderProto = XMLHttpRequest.prototype.setRequestHeader\n\n  STATE.originalXHROpen = OpenProto\n  STATE.originalXHRSend = SendProto\n  STATE.originalXHRSetHeader = SetHeaderProto\n\n  XMLHttpRequest.prototype.open = function (this: any, method: string, url: string, async?: boolean, user?: string, pass?: string) {\n    this.__ni_method = method.toUpperCase()\n    this.__ni_url = url\n    this.__ni_headers = {}\n    return OpenProto.apply(this, arguments as any)\n  }\n\n  XMLHttpRequest.prototype.setRequestHeader = function (this: any, name: string, value: string) {\n    if (STATE.captureHeaders) {\n      this.__ni_headers = this.__ni_headers || {}\n      this.__ni_headers[name] = value\n    }\n    return SetHeaderProto.apply(this, [name, value] as any)\n  }\n\n  XMLHttpRequest.prototype.send = function (this: any, body?: any) {\n    if (STATE.paused) return SendProto.apply(this, [body] as any)\n\n    const url = this.__ni_url || ''\n    const method = this.__ni_method || 'GET'\n    const start = performance.now()\n    const rule = matchRule(url)\n    const entry: Entry = { ts: Date.now(), method, url, duration_ms: 0, transport: 'xhr' }\n\n    if (STATE.captureHeaders) entry.request_headers = this.__ni_headers\n    if (STATE.captureBodies && body != null) {\n      if (typeof body === 'string') entry.request_body = truncate(body)\n      else if (body instanceof FormData) entry.request_body = '[FormData]'\n      else entry.request_body = truncate(String(body))\n    }\n\n    // BLOCK — synthesize an error via readystatechange\n    if (rule?.action === 'block') {\n      entry.blocked = true\n      entry.status = -1\n      entry.duration_ms = performance.now() - start\n      entry.error = `Blocked by rule ${rule.id}`\n      pushLog(entry)\n      // Dispatch as-if network error\n      Object.defineProperty(this, 'readyState', { value: 4, configurable: true })\n      Object.defineProperty(this, 'status', { value: 0, configurable: true })\n      setTimeout(() => {\n        try { this.dispatchEvent(new Event('error')) } catch {}\n        try { this.dispatchEvent(new Event('loadend')) } catch {}\n      }, 0)\n      return\n    }\n\n    // Hook load/error to log results\n    const origOnLoad = this.onload\n    const origOnError = this.onerror\n    const self = this\n\n    const finish = (status: number, err?: string) => {\n      entry.status = status\n      entry.duration_ms = performance.now() - start\n      if (STATE.captureHeaders) {\n        try {\n          const raw = self.getAllResponseHeaders()\n          entry.response_headers = Object.fromEntries(\n            raw.split('\\r\\n').filter(Boolean).map((line: string) => {\n              const idx = line.indexOf(':')\n              return [line.slice(0, idx).trim().toLowerCase(), line.slice(idx + 1).trim()]\n            }),\n          )\n        } catch {}\n      }\n      if (STATE.captureBodies) {\n        try { entry.response_body = truncate(self.responseText) } catch {}\n      }\n      if (err) entry.error = err\n      pushLog(entry)\n    }\n\n    this.addEventListener('load', () => finish(self.status))\n    this.addEventListener('error', () => finish(-1, 'xhr error event'))\n    this.addEventListener('abort', () => finish(-1, 'xhr aborted'))\n\n    const doSend = () => SendProto.apply(this, [body] as any)\n    if (rule?.action === 'delay') {\n      setTimeout(doSend, rule.delayMs || 1000)\n    } else {\n      doSend()\n    }\n  }\n}\n\nfunction uninstallXHR() {\n  if (STATE.originalXHROpen) {\n    XMLHttpRequest.prototype.open = STATE.originalXHROpen\n    XMLHttpRequest.prototype.send = STATE.originalXHRSend\n    XMLHttpRequest.prototype.setRequestHeader = STATE.originalXHRSetHeader\n    STATE.originalXHROpen = null\n    STATE.originalXHRSend = null\n    STATE.originalXHRSetHeader = null\n  }\n}\n\n// -- WebSocket patching (NEW in iter 3) -------------------------------------\n\nfunction installWebSocket() {\n  if (STATE.originalWebSocket) return\n  STATE.originalWebSocket = window.WebSocket\n  const Original = STATE.originalWebSocket\n\n  window.WebSocket = function (this: any, url: string, protocols?: string | string[]) {\n    if (STATE.paused) return new Original(url, protocols)\n\n    const start = performance.now()\n    const rule = matchRule(url)\n    const entry: Entry = { ts: Date.now(), method: 'WS', url, duration_ms: 0, transport: 'ws' }\n\n    if (rule?.action === 'block') {\n      entry.blocked = true\n      entry.status = -1\n      entry.duration_ms = performance.now() - start\n      entry.error = `Blocked by rule ${rule.id}`\n      pushLog(entry)\n      throw new Error(`WebSocket blocked by rule ${rule.id}: ${url}`)\n    }\n\n    const ws = new Original(url, protocols)\n    ws.addEventListener('open', () => {\n      entry.status = 101\n      entry.duration_ms = performance.now() - start\n      pushLog({ ...entry }) // log the connect\n    })\n    ws.addEventListener('error', () => {\n      entry.status = -1\n      entry.duration_ms = performance.now() - start\n      entry.error = 'ws error'\n      pushLog({ ...entry, ts: Date.now() })\n    })\n    ws.addEventListener('close', (ev: any) => {\n      pushLog({\n        ts: Date.now(),\n        method: 'WS-CLOSE',\n        url,\n        status: ev.code,\n        duration_ms: performance.now() - start,\n        transport: 'ws',\n      })\n    })\n    return ws\n  } as any\n  // preserve the static constants (cast because WebSocket.CONNECTING etc. are declared readonly in TS lib)\n  const WS: any = window.WebSocket\n  WS.CONNECTING = 0\n  WS.OPEN = 1\n  WS.CLOSING = 2\n  WS.CLOSED = 3\n  WS.prototype = Original.prototype\n}\n\nfunction uninstallWebSocket() {\n  if (STATE.originalWebSocket) {\n    window.WebSocket = STATE.originalWebSocket\n    STATE.originalWebSocket = null\n  }\n}\n\n// -- Public tools -----------------------------------------------------------\n\nexport const netInterceptStartTool = tool({\n  name: 'net_intercept_start',\n  description:\n    'Start intercepting network traffic. Patches window.fetch by default; pass xhr=true or ws=true to also patch those transports. ' +\n    'Use capture_bodies=true to include request/response bodies in the log (capped at max_body_bytes). capture_headers=true for headers.',\n  inputSchema: z.object({\n    maxLog: z.number().optional().describe('Max entries in the rolling log (default 500)'),\n    capture_headers: z.boolean().optional().describe('Capture request + response headers (default false — PII risk)'),\n    capture_bodies: z.boolean().optional().describe('Capture request + response bodies (default false — PII risk, slower)'),\n    max_body_bytes: z.number().optional().describe('Truncate captured bodies to this many bytes (default 8000)'),\n    xhr: z.boolean().optional().describe('Also patch XMLHttpRequest (default false)'),\n    ws: z.boolean().optional().describe('Also patch WebSocket (default false)'),\n  }),\n  callback: (input) => {\n    try {\n      if (input.maxLog) STATE.maxLog = input.maxLog\n      if (input.capture_bodies !== undefined) STATE.captureBodies = input.capture_bodies\n      if (input.capture_headers !== undefined) STATE.captureHeaders = input.capture_headers\n      if (input.max_body_bytes !== undefined) STATE.maxBodyBytes = input.max_body_bytes\n      STATE.paused = false\n      installFetch()\n      if (input.xhr) installXHR()\n      if (input.ws) { STATE.interceptWS = true; installWebSocket() }\n      return JSON.stringify({\n        status: 'success',\n        active: true,\n        fetch: true,\n        xhr: !!STATE.originalXHROpen,\n        ws: !!STATE.originalWebSocket,\n        capture_headers: STATE.captureHeaders,\n        capture_bodies: STATE.captureBodies,\n        max_body_bytes: STATE.maxBodyBytes,\n        maxLog: STATE.maxLog,\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const netInterceptStopTool = tool({\n  name: 'net_intercept_stop',\n  description: 'Stop intercepting and restore native fetch/XHR/WebSocket. Also clears rules. Use net_intercept_pause to temporarily disable without uninstalling.',\n  inputSchema: z.object({\n    keep_rules: z.boolean().optional().describe('Keep rules after stop (default false — legacy behavior)'),\n    keep_log: z.boolean().optional().describe('Keep captured log (default true)'),\n  }),\n  callback: (input) => {\n    try {\n      uninstallFetch()\n      uninstallXHR()\n      uninstallWebSocket()\n      STATE.active = false\n      STATE.paused = false\n      if (!input.keep_rules) STATE.rules = []\n      if (input.keep_log === false) STATE.log = []\n      return JSON.stringify({\n        status: 'success',\n        active: false,\n        rules_remaining: STATE.rules.length,\n        log_remaining: STATE.log.length,\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const netInterceptPauseTool = tool({\n  name: 'net_intercept_pause',\n  description: 'Pause interception without uninstalling. Rules + log are retained. Use net_intercept_resume to re-enable.',\n  inputSchema: z.object({}),\n  callback: () => {\n    STATE.paused = true\n    return JSON.stringify({ status: 'success', paused: true })\n  },\n})\n\nexport const netInterceptResumeTool = tool({\n  name: 'net_intercept_resume',\n  description: 'Resume a paused interception.',\n  inputSchema: z.object({}),\n  callback: () => {\n    STATE.paused = false\n    return JSON.stringify({ status: 'success', paused: false })\n  },\n})\n\nexport const netAddRuleTool = tool({\n  name: 'net_intercept_add_rule',\n  description:\n    'Add a rule. URL pattern is a regex string.\\n' +\n    'Actions:\\n' +\n    '  - \"log\": No-op, just ensures the URL is in the log (matches anything by default)\\n' +\n    '  - \"block\": Reject with an error. Fetch throws, XHR fires error, WS throws.\\n' +\n    '  - \"mock\": Return a synthetic response (provide mockStatus/mockBody/mockHeaders)\\n' +\n    '  - \"delay\": Pass through after delayMs (real response, stalled)\\n' +\n    '  - \"modify\": Let the real request run, then rewrite the response (provide modifyStatus, modifyHeaders, modifyBodyPatch — the patch is shallow-merged into the parsed JSON response).',\n  inputSchema: z.object({\n    id: z.string(),\n    match: z.string().describe('URL regex, e.g. \"api\\\\.github\\\\.com\"'),\n    action: z.enum(['log', 'block', 'mock', 'delay', 'modify']),\n    mockStatus: z.number().optional(),\n    mockBody: z.string().optional(),\n    mockHeaders: z.record(z.string(), z.string()).optional(),\n    delayMs: z.number().optional(),\n    modifyStatus: z.number().optional(),\n    modifyHeaders: z.record(z.string(), z.string()).optional(),\n    modifyBodyPatch: z.record(z.string(), z.unknown()).optional().describe('Object shallow-merged into JSON response body'),\n  }),\n  callback: (input) => {\n    try {\n      STATE.rules = STATE.rules.filter((r) => r.id !== input.id)\n      STATE.rules.push({\n        id: input.id,\n        match: new RegExp(input.match),\n        action: input.action,\n        mockStatus: input.mockStatus,\n        mockBody: input.mockBody,\n        mockHeaders: input.mockHeaders,\n        delayMs: input.delayMs,\n        modifyStatus: input.modifyStatus,\n        modifyHeaders: input.modifyHeaders,\n        modifyBodyPatch: input.modifyBodyPatch as any,\n      })\n      return JSON.stringify({ status: 'success', rules: STATE.rules.length, rule_ids: STATE.rules.map(r => r.id) })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const netRemoveRuleTool = tool({\n  name: 'net_intercept_remove_rule',\n  description: 'Remove a named rule.',\n  inputSchema: z.object({ id: z.string() }),\n  callback: (input) => {\n    const before = STATE.rules.length\n    STATE.rules = STATE.rules.filter((r) => r.id !== input.id)\n    return JSON.stringify({\n      status: 'success',\n      removed: before - STATE.rules.length,\n      rules: STATE.rules.length,\n      rule_ids: STATE.rules.map(r => r.id),\n    })\n  },\n})\n\nexport const netListRulesTool = tool({\n  name: 'net_intercept_rules',\n  description: 'List all active rules.',\n  inputSchema: z.object({}),\n  callback: () => {\n    return JSON.stringify({\n      status: 'success',\n      count: STATE.rules.length,\n      rules: STATE.rules.map(r => ({\n        id: r.id,\n        match: r.match.source,\n        action: r.action,\n        mockStatus: r.mockStatus,\n        delayMs: r.delayMs,\n      })),\n    })\n  },\n})\n\nexport const netGetLogTool = tool({\n  name: 'net_intercept_log',\n  description: 'Get the captured request log. Filter by URL substring, transport, status, etc.',\n  inputSchema: z.object({\n    limit: z.number().optional(),\n    filter: z.string().optional().describe('URL substring filter (case-insensitive)'),\n    transport: z.enum(['fetch', 'xhr', 'ws']).optional().describe('Filter by transport'),\n    only_errors: z.boolean().optional().describe('Only show entries with status >=400 or -1'),\n    only_blocked: z.boolean().optional(),\n    only_mocked: z.boolean().optional(),\n    only_modified: z.boolean().optional(),\n    include_bodies: z.boolean().optional().describe('Include body fields in output (default true if captured)'),\n  }),\n  callback: (input) => {\n    let items = STATE.log\n    if (input.filter) {\n      const q = input.filter.toLowerCase()\n      items = items.filter((e) => e.url.toLowerCase().includes(q))\n    }\n    if (input.transport) items = items.filter((e) => e.transport === input.transport)\n    if (input.only_errors) items = items.filter((e) => (e.status ?? 0) >= 400 || e.status === -1)\n    if (input.only_blocked) items = items.filter((e) => e.blocked)\n    if (input.only_mocked) items = items.filter((e) => e.mocked)\n    if (input.only_modified) items = items.filter((e) => e.modified)\n    if (input.limit) items = items.slice(-input.limit)\n\n    // Drop large body fields if not requested\n    if (input.include_bodies === false) {\n      items = items.map(({ request_body, response_body, ...rest }) => rest)\n    }\n\n    return JSON.stringify({\n      status: 'success',\n      active: STATE.active,\n      paused: STATE.paused,\n      total: STATE.log.length,\n      returned: items.length,\n      entries: items,\n    })\n  },\n})\n\nexport const netStatsTool = tool({\n  name: 'net_intercept_stats',\n  description: 'Aggregate statistics over the captured log: request count / avg+P50+P99 latency / bytes by host, by status class, by transport.',\n  inputSchema: z.object({\n    filter: z.string().optional().describe('URL substring filter'),\n  }),\n  callback: (input) => {\n    let items = STATE.log\n    if (input.filter) {\n      const q = input.filter.toLowerCase()\n      items = items.filter((e) => e.url.toLowerCase().includes(q))\n    }\n    if (items.length === 0) {\n      return JSON.stringify({ status: 'success', total: 0, hint: 'Empty log. Call net_intercept_start first.' })\n    }\n\n    const byHost: Record<string, { count: number; durs: number[]; errors: number; blocked: number; mocked: number }> = {}\n    const byStatus: Record<string, number> = {}\n    const byTransport: Record<string, number> = {}\n\n    for (const e of items) {\n      let host = '<invalid>'\n      try { host = new URL(e.url).host } catch {}\n      byHost[host] = byHost[host] || { count: 0, durs: [], errors: 0, blocked: 0, mocked: 0 }\n      byHost[host].count++\n      byHost[host].durs.push(e.duration_ms)\n      if ((e.status ?? 0) >= 400 || e.status === -1) byHost[host].errors++\n      if (e.blocked) byHost[host].blocked++\n      if (e.mocked) byHost[host].mocked++\n\n      const statusClass = e.status == null ? 'unknown' : e.status < 0 ? 'error' : `${Math.floor(e.status / 100)}xx`\n      byStatus[statusClass] = (byStatus[statusClass] || 0) + 1\n      byTransport[e.transport] = (byTransport[e.transport] || 0) + 1\n    }\n\n    const percentile = (arr: number[], p: number) => {\n      const sorted = [...arr].sort((a, b) => a - b)\n      const idx = Math.min(sorted.length - 1, Math.floor(sorted.length * p))\n      return sorted[idx] || 0\n    }\n\n    const hosts = Object.entries(byHost).map(([host, s]) => ({\n      host,\n      count: s.count,\n      errors: s.errors,\n      blocked: s.blocked,\n      mocked: s.mocked,\n      avg_ms: Number((s.durs.reduce((a, b) => a + b, 0) / s.durs.length).toFixed(2)),\n      p50_ms: Number(percentile(s.durs, 0.5).toFixed(2)),\n      p99_ms: Number(percentile(s.durs, 0.99).toFixed(2)),\n    })).sort((a, b) => b.count - a.count)\n\n    return JSON.stringify({\n      status: 'success',\n      total: items.length,\n      hosts,\n      status_classes: byStatus,\n      transports: byTransport,\n      time_range: {\n        first: new Date(items[0].ts).toISOString(),\n        last: new Date(items[items.length - 1].ts).toISOString(),\n      },\n    })\n  },\n})\n\nexport const netExportHarTool = tool({\n  name: 'net_intercept_export_har',\n  description: 'Export the captured log as a HAR (HTTP Archive) 1.2 document. Can be imported into Chrome DevTools Network panel for analysis.',\n  inputSchema: z.object({\n    filter: z.string().optional(),\n  }),\n  callback: (input) => {\n    let items = STATE.log.filter((e) => e.transport !== 'ws') // HAR doesn't model WS cleanly\n    if (input.filter) {\n      const q = input.filter.toLowerCase()\n      items = items.filter((e) => e.url.toLowerCase().includes(q))\n    }\n    const har = {\n      log: {\n        version: '1.2',\n        creator: { name: 'careless net_intercept', version: '1.0' },\n        pages: [],\n        entries: items.map((e) => ({\n          startedDateTime: new Date(e.ts).toISOString(),\n          time: e.duration_ms,\n          request: {\n            method: e.method,\n            url: e.url,\n            httpVersion: 'HTTP/1.1',\n            headers: Object.entries(e.request_headers || {}).map(([name, value]) => ({ name, value })),\n            queryString: [],\n            cookies: [],\n            headersSize: -1,\n            bodySize: e.request_body?.length ?? 0,\n            postData: e.request_body ? { mimeType: 'text/plain', text: e.request_body } : undefined,\n          },\n          response: {\n            status: e.status ?? 0,\n            statusText: e.error || '',\n            httpVersion: 'HTTP/1.1',\n            headers: Object.entries(e.response_headers || {}).map(([name, value]) => ({ name, value })),\n            cookies: [],\n            content: {\n              size: e.response_body?.length ?? 0,\n              mimeType: e.response_headers?.['content-type'] || 'application/octet-stream',\n              text: e.response_body || '',\n            },\n            redirectURL: '',\n            headersSize: -1,\n            bodySize: e.response_body?.length ?? 0,\n          },\n          cache: {},\n          timings: { send: 0, wait: e.duration_ms, receive: 0 },\n          _blocked: e.blocked,\n          _mocked: e.mocked,\n          _modified: e.modified,\n          _transport: e.transport,\n        })),\n      },\n    }\n    return JSON.stringify({ status: 'success', count: items.length, har })\n  },\n})\n\nexport const netClearLogTool = tool({\n  name: 'net_intercept_clear',\n  description: 'Clear the captured request log (rules remain).',\n  inputSchema: z.object({}),\n  callback: () => {\n    const n = STATE.log.length\n    STATE.log = []\n    return JSON.stringify({ status: 'success', cleared: n })\n  },\n})\n\nexport const NETWORK_INTERCEPT_TOOLS = [\n  netInterceptStartTool,\n  netInterceptStopTool,\n  netInterceptPauseTool,\n  netInterceptResumeTool,\n  netAddRuleTool,\n  netRemoveRuleTool,\n  netListRulesTool,\n  netGetLogTool,\n  netStatsTool,\n  netExportHarTool,\n  netClearLogTool,\n]\n"]}