deepseek-harness/packages/core
Yichen Jiang 5ed79887fb fix(web): correct the preset-layer contracts review found stale
None of these change behavior; each said something that was not true.

`SessionCwdConflict`'s doc block had been left stranded above the
`AgentPresetConflict` inserted under it, so one class carried a comment
about the other and the second carried none.

The roster comment named a `.system` directory that does not exist; the
shipped root is `config/agent-presets/`, and `system` is the trust its
entries carry.

The real-composition test attributed the disabled `api-gateway` row to
"side effects outside this process" alongside the port and the exporter.
It is disabled for a different reason — the api-proxy cannot mount in
this layer at all — and hiding that behind the same phrase would leave a
later layer unable to tell whether the line can come out.

One test claimed to refuse an adoption while asserting only that the
header records the preset; it now says what it checks.

`PERSONA_SECTION`/`PERSONA_ORDER` existed twice, once in the registry
that declares the slot and once restated in the row that replaces it —
a drift that would land a preset's persona beside the deployment's
instead of shadowing it. The registry exports them now.

The preset conflict message read "already runs agent preset undefined"
for a session that records none, which is the shape a deployment with no
roster produces; it names that case instead, with the regression that
reaches it through the gateway.

Finally, `PresetTree.write()` drops the `loader/config-update` the
inherited method emits — recorded on the override, since a future
edit-while-running flow needs its own persistence path.
2026-08-07 00:35:30 +08:00
..
agent feat(web): compose a web session's agent from a named preset 2026-08-07 00:35:30 +08:00
agent-loop fix(agent): route loop dispatches through prebuilt fused dispatcher 2026-08-06 13:44:23 +08:00
scope refactor(agent): unify agent-scoped event signatures as payload objects 2026-08-06 12:13:14 +08:00
session feat(web): compose a web session's agent from a named preset 2026-08-07 00:35:30 +08:00
system-prompt fix(web): correct the preset-layer contracts review found stale 2026-08-07 00:35:30 +08:00
tools Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification 2026-08-05 13:53:35 +08:00
README.i18n.yaml docs: rescan rebased documentation hierarchy 2026-08-05 16:16:57 +08:00
README.md docs: apply hierarchy across the corpus 2026-08-05 16:13:28 +08:00
README.zh.md docs: rescan rebased documentation hierarchy 2026-08-05 16:16:57 +08:00

core/ — product API spine

English | 中文

The session log, system-prompt assembly, tool registry, agent vocabulary, and concrete loop that form the harness's default control spine. These are product packages — the stable surface plugins and consumers build against.

Package Role ctx key
scope/ Scoped-context registration primitive library — no ctx key
session/ Event-sourced session log and in-memory store ctx.sessions
system-prompt/ Prompt and tool-schema assembly registry ctx.systemPrompt
tools/ Scoped tool registry and execution pipeline ctx.tools
agent/ Agent interface, registry, and event vocabulary ctx.agents
agent-loop/ Default concrete agent driver ctx.agentLoop

scope supplies the shared scoping primitive. agent owns the public seam, while agent-loop is its default implementation; extension plugins depend on the seam so the driver remains swappable.

Runnable compositions belong to examples/agent-spine-demo; this group owns only the swappable spine pieces.