deepseek-ai/deepseek-harness · error · SearchError
SEARCH_FAILED
SEARCH_FAILED
Error message
grep received malformed ripgrep --json output (a line is not JSON)
What it means
Error "grep received malformed ripgrep --json output (a line is not JSON)" thrown in deepseek-ai/deepseek-harness.
Source
Thrown at packages/fs/tool-fs-search/src/grep.ts:140
*/
function malformedRecord(detail: string, cause?: unknown): SearchError {
return new SearchError(`grep received malformed ripgrep --json output (${detail})`, 'SEARCH_FAILED', cause !== undefined ? { cause } : undefined)
}
/**
* Parse one `rg --json` NDJSON line into a match, `undefined` for the
* non-match record types (`begin`/`end`/`context`/`summary`). A line that is
* not JSON, or a `match` record missing its path / line number / line content,
* throws {@link SearchError} `SEARCH_FAILED`. A match whose line is not valid
* UTF-8 (ripgrep sends base64 `bytes` instead of `text`) yields a placeholder
* preview rather than failing the whole search.
*/
function parseRecord(line: string): GrepMatch | undefined {
let parsed: unknown
try {
parsed = JSON.parse(line)
} catch (error: unknown) {
throw malformedRecord('a line is not JSON', error)
}
if (typeof parsed !== 'object' || parsed === null) throw malformedRecord('a record is not an object')
const record = parsed as { type?: unknown; data?: unknown }
// Non-match record types (begin/end/context/summary — and any future type)
// are transport framing, not results: skipped, not malformed.
if (record.type !== 'match') return undefined
if (typeof record.data !== 'object' || record.data === null) throw malformedRecord('a match record has no data')
const data = record.data as { path?: unknown; line_number?: unknown; lines?: unknown }
const pathText = typeof data.path === 'object' && data.path !== null ? (data.path as { text?: unknown }).text : undefined
if (typeof pathText !== 'string') throw malformedRecord('a match record has no path text')
if (typeof data.line_number !== 'number') throw malformedRecord('a match record has no line number')
if (typeof data.lines !== 'object' || data.lines === null) throw malformedRecord('a match record has no line content')
const lines = data.lines as { text?: unknown; bytes?: unknown }
if (typeof lines.text === 'string') {
return { path: pathText, lineNumber: data.line_number, line: lines.text.replace(/\r?\n$/, '') }
}
if (typeof lines.bytes === 'string') {
return { path: pathText, lineNumber: data.line_number, line: '(line is not valid UTF-8)' }View on GitHub (pinned to b150a551b8)
Solutions
- Upgrade or reinstall ripgrep; verify that rg --json output is not intercepted or corrupted.
When it happens
Trigger: Thrown at packages/fs/tool-fs-search/src/grep.ts:140 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24).
Data as JSON: /api/errors/007e1c2ebbbac4c7.
Report an issue: GitHub.