{"record":{"id":"6e14eb6a036a1a57","repo":"deepseek-ai/deepseek-harness","slug":"url-must-be-a-non-empty-string","errorCode":null,"errorMessage":"url must be a non-empty string","messagePattern":"url must be a non-empty string","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/web/tool-web/src/fetch.ts","lineNumber":89,"sourceCode":"    const row = node as HTMLTableRowElement\n    const border = isTableHeadingRow(row)\n      ? Array.from(row.cells, (cell, index) => renderTableCell(tableBorder(cell), index)).join('')\n      : ''\n    return `\\n${content}${border.length > 0 ? `\\n${border}` : ''}`\n  },\n})\n\n/**\n * Validate value constraints the schema DSL can't express: a non-blank `url`.\n * Throws a plain `Error` otherwise. No timeout parameter — the tool-call budget\n * is deployment policy declared via `fetchTimeoutMs` config and enforced by\n * `@deepseek-ai/dsh-tool-call-timeout-policy`, not a model argument.\n *\n * @param args - the schema-validated `web_fetch` arguments.\n * @returns the arguments as the seam's request fields.\n */\nexport function parseFetchArgs(args: { url: string }): { url: string } {\n  if (args.url.trim().length === 0) throw new Error('url must be a non-empty string')\n  return { url: args.url }\n}\n\n/**\n * Nesting-depth ceiling above which HTML skips conversion and passes through\n * raw. Conversion runs synchronously on the event loop, and unclosed-tag\n * nesting makes domino's tree (and turndown's walk over it) superlinear —\n * measured: depth 512 ≈ 0.15s, 2,000 ≈ 2s, 20,000 ≈ 5s — during which the\n * cooperative `fetchTimeoutMs` timer cannot fire. Real pages nest a few dozen\n * levels; 512 is far above content and far below weaponizable. A robustness\n * invariant, not a tunable.\n */\nconst MAX_CONVERSION_DEPTH = 512\n\n/** Elements that never take a closing tag, so they do not grow the lexical stack. */\nconst VOID_ELEMENTS = new Set([\n  'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n  'link', 'meta', 'param', 'source', 'track', 'wbr',","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/web/tool-web/src/fetch.ts#L71-L107","documentation":"Error \"url must be a non-empty string\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/web/tool-web/src/fetch.ts:89 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass a non-empty url string."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}