Repository navigation
A surface for tools built on top of the harness, plus two recorder fixes and a memory fix.
New, for downstream tools
transcribeFile(bytes, opts)andsoundcheck stt <file>— transcribe a whole file and get the full result: transcript, confidence, the word timeline (start, end, confidence, punctuated form), optional utterance segments, and the media duration. Repeatable--keyterm,--utterances, content type inferred from the extension. Containerized audio declares its own encoding and sample rate, so neither is sent.judgeText(transcript, rubric, backend?)andsoundcheck judge --transcript <file>— run a rubric against text from anywhere, with no scenario and no trace rendering.similarity(expected, heard, { ignoreFillers })— a 0..1 closeness score on the same canonicalization the gate uses, folding contractions and optionally dropping disfluencies first.findPhrase(words, expectedText, { from, to })— locate an expected line in a word timeline within a time window, for offset and boundary checks.--offlineon every command — a hard refusal at every network entry point, REST and WebSocket alike. The key resolves from four locations, so a dry run could otherwise reach the API; with this it cannot, and no key is required.
Fixed
- Audio dropouts in the whole-call recording. Agent audio arriving while the recorder was paused between turns was discarded, and the recorder zero-padded whatever had not arrived within each 100 ms tick — silent holes inside words. Audio is now always captured, the paused window is flushed contiguously on resume, and a jitter buffer with short seam ramps replaces the padding. A third instance of the same class was then found in the fix itself: a per-turn done-stamp went stale when one turn carried several speech segments, so the second segment was released as zero-padded slivers.
- The comparison diff no longer allocates a quadratic table. Small inputs keep the same recurrence and tie-break in a flat
Int32Array; above four million cells it switches to Hirschberg's linear-space algorithm. A 10,000-token diff now takes 577 ms and 4 MB of heap.
Also
- Red-team scenarios (
redTeam) andstopWhen: { toolCalled }, so a scripted call ends when the behavior under test occurs instead of reading lines that plead for something already done. - New gallery demos: a realistic agent that refuses several times under a bereavement pretext and then waives verification, beside the well-built agent on the identical script with every gate green.
256 offline checks, no key and no network. Published to npm via trusted publishing with provenance.