Review found two defects in the previous commit's ordering fix. @pku-xht: `historyStateFor` copied the attached session's events, the handler then awaited `presenterScopeFor`, and only then read the projection baseline off the still-live Session. An append during that await served events cut at N beside a baseline folded to N+1 — one response describing two moments. The same restructure had also moved the baseline read outside the `try`, so a failing snapshot escaped the structured `internal` error. Both awaits now happen before the cut: `historySourceFor` resolves which session serves the read, `presenterScopeFor` ensures the recorded composition, and `historyCutOf` then reads events and baseline adjacently with nothing between them. The whole sequence is back inside the try. The invariant judged any scoped assembly with a chain of one as an unjoined agent, which rejects a legitimate assembly in a standing preset key (that key has no parent of its own). It now gates on `context.agent` — a scope-only read is not an agent and is out of range by construction rather than by a premise about who else calls `assemble` — and asks the roster's own `composedPreset()` instead of introspecting chain length. The advisory warning uses the same relation. Also from review: the `2026-08-05-per-agent-tool-presentation` note still described `presentAs` as per-agent, which standing mounts made false and this branch's own rewording contradicts; the duplicated "process-wide unit table" argument collapses to the Agent Note with pointers from the five copies; a dead `.sort()` before `arrayContaining`; and change-history narration in the tool-cordis README.
scaffold/ — create, launch, and drive projects from outside
English | 中文
This group contains developer tooling for Harness projects and the client stack for driving a Harness runtime from another process. Folders are role-named; npm names converge on dsh-sdk-* through the FIXME-tracked renames in the regrouping Agent Note.
| Package | Role |
|---|---|
helper/ |
Provides the shared project-editing domain |
scripts/ |
Provides the dsh-sdk project commands |
create-sdk/ |
Creates new SDK projects |
protocol/ |
Defines the SDK runtime wire protocol |
client/ |
Drives a Harness runtime through the TypeScript client API |
server/ |
Serves out-of-process SDK clients over stdio JSON-RPC |
telemetry/ |
Provides launcher telemetry, consent, and redaction primitives |
@deepseek-ai/create-sdk follows npm's scoped initializer naming convention; the other packages follow the repository's @deepseek-ai/dsh-* convention. See the developer-project workflow, project-editing architecture, and TypeScript SDK design.