Represent tool results as tool-role messages and migrate released wrappers without losing outer own JSON fields, call identity, error state, or writer field order. Refuse nested or wrapper-only information that has no lossless current representation before successor publication. Validate current event relationships directly instead of projecting V4 data back into V3. Keep lifecycle, PTC, title/command, compaction, system-field and retired-syntax checks on catalog restoration and ordinary JSONL opens. The Worker JSON equality helper must inspect own keys so it cannot admit PTC arguments that Node rejects. Keep the source role change, required native admission and consumer fixture updates in one complete review layer. Explain shared-type changes in the persistence record and the native reader rationale in its existing note. Use checked branded fixture identities and discriminant narrowing instead of unknown double casts; fixture values and assertions remain intact. This recomposes the original tool-role work by _Kerman with the independently validated migration and admission repairs by Tianyi Cui. Frozen generations and snapshot input version selection are retained. Co-authored-by: Tianyi Cui <[email protected]>
description, kind
| description | kind |
|---|---|
| The core group map: the session log, system-prompt assembly, tool registry, agent vocabulary, and default loop that form the product API spine. | package-group |
packages/core
English | 中文
Summary
Use the core packages to build or extend an agent that records durable session history, assembles system prompts, exposes tools, selects a default model, and runs model turns. These packages define the shared APIs used by every composition, while executable product assemblies live under packages/bundle. Choose this group when developing agent behavior or replacing one of those capabilities; start with dsh-base when you need the default runnable composition.
Table of Contents
Packages
| Package | Role | ctx key |
|---|---|---|
scope/ |
Scoped registration and event routing that isolate one agent's contributions | library — no ctx key |
session/ |
The append-only session event log every agent's history derives from | ctx.sessions |
system-prompt/ |
System-prompt assembly from ordered sections, tool schemas, and variables | ctx.systemPrompt |
tools/ |
The tool registry and guarded execution pipeline the loop dispatches through | ctx.tools |
agent-tool-presentation/ |
Per-agent tool-presentation selector for presets | no ctx key |
agent/ |
The Agent handle plugins program against, plus its live registry and events |
ctx.agents |
agent-default-model/ |
The deployment default model selection entry points apply to fresh agents | ctx.agentDefaultModel |
agent-loop/ |
The default agent driver: creates agents and runs the turn and step lifecycle | ctx.agentLoop |
scope supplies the shared scoping primitive; agent owns the public Agent contract, while agent-loop is its default implementation, so extension plugins depend on agent and the driver stays swappable. agent-default-model owns the deployment selection an entry point applies when a session has none of its own. Runnable compositions live under packages/bundle; this group owns only the swappable spine pieces.
Related documentation
- Core subsystem — the package-by-package loop map and the
Agenthandle contracts. - Session subsystem — the session event vocabulary and derived history.
- System-prompt subsystem — prompt section, dynamic context, and tool-schema types.
- Tools subsystem — the tool execution pipeline and presentation vocabulary.
- Scoped registration subsystem — the scoped-layer primitive these registries build on.
- Architecture — the turn flow and where new behavior goes.
- Base bundle — the default product composition.
- SDK minimal bundle — a complete standalone composition with a deliberately smaller feature set.
Dev Note
Working context for maintainers — click to expand
None.