/** * snippetUnits — cut a tool result into citable AttributionUnits for the * `'data'` channel. * * `explainChoice` can only credit the data channel with units to point * at — a raw tool result (arbitrary JSON or prose) is not citable as one * blob. This helper cuts it at the natural citation grain so a pick like * "open dress d42" can be attributed to the exact search-result snippet * that returned d42: * * • a string → one unit per sentence/line (non-empty, trimmed), * • an array element that is an object → ONE unit summarizing it — its * primitive fields joined as `key: value` pairs (a search hit, a row), * • any other object → its primitive fields grouped into one unit, * then the walk continues into nested objects/arrays, * • null/undefined/booleans/empty strings/functions/symbols → skipped. * * Bounded and total: at most `max` units, each truncated to `maxLength` * characters; circular references are guarded (WeakSet) — weird input * yields fewer units, never a throw. * * Pattern: pure synchronous function, zero imports beyond the shared * types — `src/lib/influence-core/` leaf. No embedding happens * here; the units feed `attributeChoice` / `explainChoice`. * * Honest claim: this is a CUTTER, not a ranker — it decides what is * quotable, not what mattered. Whether a snippet explains the pick is * the (proxy) verdict of the similarity scoring downstream. */ import type { AttributionUnit } from './types.js'; export interface SnippetUnitsOptions { /** Channel tag stamped on every unit. Default `'data'`. */ readonly channel?: string; /** Unit id prefix — ids become `'-1'`, `'-2'`, … Default `'data'`. */ readonly idPrefix?: string; /** Cap on units returned. Default 12. */ readonly max?: number; /** Cap on characters per unit text (ellipsis included). Default 200. */ readonly maxLength?: number; } /** * Cut `value` (a tool result — arbitrary JSON value or prose string) * into at most `max` citable units for the data channel. */ export declare function snippetUnits(value: unknown, options?: SnippetUnitsOptions): AttributionUnit[];