Add assertNever with closed-vs-extensible exhaustiveness guidance

assertNever (dsh-llm) marks unreachable defaults on CLOSED unions:
adding a StreamChunk variant now breaks compilation at
BlockAssembler.push, and a value escaping its type at runtime throws
with diagnostics. The module doc and a new AGENTS.md convention spell
out the dividing line: merge-extensible unions (SessionEventMap,
ContentBlockMap, …) must NOT use assertNever — plugin-added variants
are valid unknown values there; handle known cases and fall through
with a comment.
This commit is contained in:
Tianyi Cui
2026-06-11 15:21:25 +08:00
parent 225ed051b1
commit 370b5d3aab
5 changed files with 60 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ import type { ContentBlock, GenerateOptions, GenerateResult, StreamChunk } from
import { BlockAssembler } from './assembler.ts'
export * from './brand.ts'
export * from './never.ts'
export * from './types.ts'
export { BlockAssembler } from './assembler.ts'