docs: rebalance prose cleanup and add trimming skill

This commit is contained in:
Tianyi Cui
2026-07-13 23:27:00 +08:00
parent fcdc318dda
commit 148046b9c8
392 changed files with 2801 additions and 1754 deletions

View File

@@ -63,8 +63,8 @@ describe('BlockAssembler', () => {
it('throws from assemble() when a partial has an unhandled blockType', () => {
const assembler = new BlockAssembler()
// A partial whose blockType is not text/reasoning/tool-call cannot be assembled without its
// block-end.
// Unknown declaration-merged block types cannot be assembled from partial deltas. Opening a
// plugin-added `video` block without its required `block-end` exercises that failure.
assembler.push({ type: 'block-start', index: 0, blockType: 'video' } as unknown as StreamChunk)
expect(() => assembler.blocks()).toThrow('cannot assemble incomplete block of type "video"')
})
@@ -133,10 +133,9 @@ describe('assertNever', () => {
})
})
describe('BlockAssembler regressions (property-test findings)', () => {
describe('BlockAssembler duplicate-close contract', () => {
it('first block-end wins: a duplicate block-end for a closed index is ignored', () => {
// Found by fast-check (the property-testing RFC): two block-ends at the same index made the
// streamed prefix (first block) disagree with final blocks() (second block).
// The first close wins so streamed and final output cannot disagree.
const chunks: StreamChunk[] = [
{ type: 'block-end', index: 0, block: { type: 'reasoning', text: 'first' } },
{ type: 'block-end', index: 0, block: { type: 'text', text: 'second' } },