mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
Codex's re-confirmation pass verified both blocker fixes correct but found doc/comment drift the fix commit missed: - session/index.ts + session/README.md: "minimal v1 header" → "minimal header (stamped with the current SESSION_FORMAT_VERSION)" — the version is 0, not 1. - session/index.ts deriveMessages comment listed "usage, and errors" as trace data — those standalone events no longer exist; only boundaries + chunks are. - session-persistence RFC: "no v1 migration" → the pinned-v0 pre-release stance. - collapse-trace-only RFC format-version note: reframed off the "bump the version and reject" wording (which now reads as the OTHER AGENTS.md stance) onto the pinned-0 unstable stance the session log actually uses. - agent-loop/loop.ts finishError JSDoc: "with a logged `error` event" → the failure is recorded on turn/end.reason (no standalone error event). - acp/acp-feature-support.md (two spots): usage is recorded on assistant/message now, not as standalone internal usage events. - Regenerate the cordis catalog (finishError JSDoc line shift).
core/ — product API spine
The packages every harness build is assembled from: the session log, the system-prompt assembly, the tool registry, the agent vocabulary, and the one concrete loop that drives them. These are product packages — the stable surface plugins and consumers build against.
| Package | Role | ctx key |
|---|---|---|
session/ |
Event-sourced session log + in-memory store | ctx.sessions |
system-prompt/ |
Prompt-section + tool-schema assembly registry | ctx.systemPrompt |
tools/ |
Tool registry + tools/execute waterfall |
ctx.tools |
agent/ |
Agent interface, registry, agent/* event vocabulary |
ctx.agents |
agent-loop/ |
The concrete loop plugin: ReactLoopAgent + the loop driver |
ctx.agentLoop |
agent-loop is the one concrete implementation of the agent seam and lives here because it is the harness's default product loop; everything else in core/ is interface/vocabulary. Plugins depend on the agent vocabulary, never on agent-loop directly, so the loop stays swappable.