d4551/deepseek-harness--packages-client-ui-projection ↗★ 4
@deepseek-ai/dsh-client-ui-projection
Pure projections from durable Session data to Client view values, statically linked and seeded once for every Client row 适合需统一读取会话视图值的开发者,含上下文来源、助手块分类与工具调用记录
설치
검증된 bundle이 없거나 호환성 검사에 실패했습니다. 먼저 저장소 설명을 읽어 주세요. 전체 README 읽기 ↗
description: "Pure projections from durable Session data to Client view values, statically linked and seeded once for every Client row." kind: "package-library"
@deepseek-ai/dsh-client-ui-projection
English | 中文
Summary
Durable-source to view-value folds every Client row reads the same way: context provenance and presentation form, Assistant block classification and stream accumulation, inbox splices and input-message records, Tool-call records and the subcall-graph bound, synthetic seq offsets, display-safe failure fields, the subagent descendant index, and the one-shot composer settlement adapter. A Conversation target decides what it renders from these values; how a logged source maps onto them has one owner here.
Membership rule: an export belongs in this package only when it is a stateless function or a frozen constant with no Cordis API, no module state, and no runtime identity a caller compares. That is what lets apps/web link one copy statically and the shell seed it into the frozen module table as a PLATFORM_MODULES word, so every dynamic Client bundle resolves the same instance instead of carrying its own. Anything with lifecycle, registration, or shared mutable state belongs on a Cordis service instead — uiSession.registerPendingInteraction owns the pending-interaction publication and settlement it used to share with this package.
The package takes no runtime dependency on any Client row. It reads the Conversation record and match types from @deepseek-ai/dsh-client-ui-conversation/client with import type only, so the edge is erased before emit and the browser module graph stays one-way.
Table of Contents
Model Experience
None, as this package projects already-logged Session data into browser view values and registers nothing model-facing.
KV Cache effect
None; the folds neither assemble nor send model requests.
Known Limitations and Deferred Work
- The Conversation record types stay in
ui-conversation— the folds here produceAssistantBlock,RunningToolCall, and their siblings, but those declarations remain with the merge-extensibleConversationTurnDataMap/ConversationStepDataMapmaps that other rows augment. Moving them would relocate everydeclare moduletarget, so this package type-imports them and the type graph points from the shared layer at the row rather than the other way round. - Adding an export is a shell change — a new name here is only reachable once
PLATFORM_MODULESandpackages/client/web/src/seed.tscarry the package, so a consumer cannot pick it up from a package-local build alone.
Dev Note
Working context for maintainers — click to expand
bun run verify-client-packages enforces the two halves of the static channel: a PLATFORM_MODULES word whose owner is a workspace package must build through the staticLinked preset, and a dynamic consumer declares this package only in devDependencies. A consumer needs no dsh.client.external row — the gate rejects repeating a baseline module.