The consumer-side restated declare-merges retire (user ruling: one home per projection key): TodoPanel imports the todos merge and TodoItem through @deepseek-ai/dsh-tool-todo/client, and the manager takes the title merge through @deepseek-ai/dsh-session-title/client — both pure-type outlets re-exporting the domain's single-source types.ts, so no host value import or Context merge enters the client program (type-only edges, exempt from the plugin value-import ban). Workspace deps and tsconfig references added. Also aligns the fixture's empty-log tail block with the host convention (asOfSeq -1 with empty values, block always present on tail requests).
session-title/ — log-backed session-title capability family
English | 中文
Durable session-title state, one optional asynchronous provider seam, and two opt-in model-backed implementations. The built-in first-message fallback is part of the service, so every composition can title a session without an auxiliary model call.
| Package | Role | ctx key |
|---|---|---|
session-title/ |
Log fold, deterministic fallback, provider registry, and refresh API | ctx.sessionTitle |
session-title-llm/ |
Shared route, request logging, prompt, timeout, stream, and validation helper | — |
session-title-first-message-llm/ |
Optional provider using the first eligible human message | registers on ctx.sessionTitle |
session-title-all-messages-llm/ |
Optional provider using every eligible human message | registers on ctx.sessionTitle |
Only one provider may register at a time. The shared demo spine mounts the fallback service but leaves both model providers outside default composition, so deployments choose auxiliary cost and retitling cadence explicitly.