2nd dokployH
Find a file
Tianyi Cui 2df41ee1d3 fix: make the six registration methods atomic under a throwing change-listener (P1-1)
llm.registerAdapter, agents.register, sessions.create, systemPrompt.section,
systemPrompt.tools, and tools.register each mutated state, emitted a change
event, then returned the disposer. In Cordis a synchronous throw before the
effect returns its disposer leaves nothing for the fiber to collect, so a
throwing change-listener leaked the registry entry permanently — HMR/dispose
could not clean it, and the duplicate-name/already-exists check stayed wedged
until restart.

Convert each to the generator-effect pattern already proven in
AgentLoop.create: mutate state, `yield` the disposer that undoes it (collected
before the next step runs, so it is torn down if a later step throws), THEN
emit the change event. The existing duplicate-name throws are unchanged — they
fire before any mutation, so they correctly leak nothing. No public API change:
generator effects are still synchronous SyncEffects and register() keeps
returning its fire-and-forget disposer wrapper.

Tests: a listener-throw rollback test for all six methods — register with a
change-listener that throws, assert the call throws AND the registry is clean
(entry absent; a subsequent listener-free register of the same name succeeds
and contributes exactly once). For systemPrompt (no duplicate-name check) the
two tests assert assembly is clean. Verified each fails against the pre-fix
emit-before-return-disposer form.
2026-06-15 01:06:13 +08:00
.agents/skills/dsh-code-review docs: correct the doc-sync gate claim in the code-review skill (PR1 review) 2026-06-14 23:14:46 +08:00
.claude docs: accuracy sweep, architecture restructure, two ADRs, review skill 2026-06-13 22:05:34 +08:00
.github/workflows build: run doc-sync gates in the local pre-push hook too 2026-06-14 10:40:20 +08:00
docs fix(agent-loop): append step/start before emitting agent/step-start (P1-6) 2026-06-14 23:18:41 +08:00
examples feat(invariants): dev-mode event-contract assertions + session-log freeze (RFC 005 pt 3, RFC 008) 2026-06-13 23:25:12 +08:00
packages fix: make the six registration methods atomic under a throwing change-listener (P1-1) 2026-06-15 01:06:13 +08:00
scripts fix(scripts): harden event-taxonomy brace walk against JSDoc braces (PR 4) 2026-06-14 00:54:47 +08:00
vendor docs: accuracy sweep, architecture restructure, two ADRs, review skill 2026-06-13 22:05:34 +08:00
.gitignore build: doc-sync gates — typecheck doc code blocks + verify event taxonomy (RFC 006 pts 1-2) 2026-06-14 00:47:38 +08:00
.yarnrc.yml Set up monorepo infra: Yarn 4 workspaces, tsc -b + dumble build, vitest 2026-06-11 10:52:45 +08:00
AGENTS.md docs: sync high-authority docs with the doc-sync gate and dsh-invariants (P1-16) 2026-06-14 23:07:52 +08:00
CLAUDE.md Initialize repo with README, AGENTS.md, and CLAUDE.md symlink 2026-06-10 22:58:56 +08:00
eslint.config.mjs Replace dumble with tsdown for JS bundling 2026-06-11 22:34:43 +08:00
knip.json Add examples/coding-agent and the docs cookbook 2026-06-13 18:30:50 +08:00
lefthook.yml build: run doc-sync gates in the local pre-push hook too 2026-06-14 10:40:20 +08:00
LICENSE Initialize repo with README, AGENTS.md, and CLAUDE.md symlink 2026-06-10 22:58:56 +08:00
package.json build: run doc-sync gates in the local pre-push hook too 2026-06-14 10:40:20 +08:00
README.md docs: split README guidance by audience 2026-06-14 10:50:10 +08:00
tsconfig.base.json feat(invariants): dev-mode event-contract assertions + session-log freeze (RFC 005 pt 3, RFC 008) 2026-06-13 23:25:12 +08:00
tsconfig.build.json feat(invariants): dev-mode event-contract assertions + session-log freeze (RFC 005 pt 3, RFC 008) 2026-06-13 23:25:12 +08:00
tsconfig.json Fix CI: order steps by artifact dependency, resolve fresh-clone builds 2026-06-11 23:10:43 +08:00
tsconfig.test.json Set up monorepo infra: Yarn 4 workspaces, tsc -b + dumble build, vitest 2026-06-11 10:52:45 +08:00
tsconfig.typecheck.json feat(invariants): dev-mode event-contract assertions + session-log freeze (RFC 005 pt 3, RFC 008) 2026-06-13 23:25:12 +08:00
tsdown.config.ts Replace dumble with tsdown for JS bundling 2026-06-11 22:34:43 +08:00
vitest.config.ts Document why vite-tsconfig-paths can't be replaced by resolve.tsconfigPaths 2026-06-11 23:24:41 +08:00
vitest.e2e.config.ts Add examples/coding-agent and the docs cookbook 2026-06-13 18:30:50 +08:00
yarn.config.cjs Add repo hygiene gates: knip, publint, yarn constraints 2026-06-11 15:04:50 +08:00
yarn.lock fix(agent-loop): always close a started turn and any open step on error (P1-5) 2026-06-15 01:06:13 +08:00

DeepSeek Harness

Monorepo for the DeepSeek Harness group.

Projects

  • DeepSeek Code — DeepSeek's coding agent product.

Development

This monorepo is built on the Cordis framework (vendored as source under vendor/), microkernel-style: everything is a plugin.

yarn install
yarn test          # vitest
yarn demo:echo     # runnable echo-agent example (no API key needed)
yarn demo:coding   # the real DeepSeek coding agent (needs DEEPSEEK_API_KEY)

For humans, start with the development guide for local setup, hooks, environment variables, and quality gates, then read the architecture design before package work. Local context lives in packages/ and vendor/.

For agents, follow AGENTS.md.