2nd dokployH
Three corrections from review, none of which change behaviour. attemptStreaming promised output "as the command produces it", which spawnSync cannot do: it returns only after the child exits, and the two streams are echoed one after the other, so their interleaving is lost. For an npm publish that is visible — notices go to stderr while the `+ name@version` confirmation goes to stdout, so the confirmation prints first. The helper is now attemptEchoed and its contract says buffered, echoed after exit, stdout before stderr; live progress would need an asynchronous spawn with data listeners. The traversal comment claimed a node on the stack is a cycle only peer edges can form, and that skipping it drops just that edge. The cycle does carry a peer edge, because the install edges were proved acyclic a moment earlier, but the back edge that reaches the stacked node need not be the peer one — which is what the post-condition exists to catch, so the comment now points at it instead of asserting an invariant the traversal does not have. The `if (placed.has(member.name)) return` after leaving the stack was unreachable: a re-entrant visit returns at the top guard while the member is on the stack, so it can never be placed by the time the recursion unwinds. |
||
|---|---|---|
| .agents | ||
| .claude | ||
| .github | ||
| apps | ||
| assets | ||
| docs | ||
| examples | ||
| native | ||
| packages | ||
| patches | ||
| python | ||
| scripts | ||
| vendor | ||
| website | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .jscpd.json | ||
| .oxlintrc.json | ||
| .oxlintrc.staged.json | ||
| .rgignore | ||
| AGENTS.md | ||
| BENCHMARK.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.i18n.yaml | ||
| CONTRIBUTING.md | ||
| CONTRIBUTING.zh.md | ||
| knip.json | ||
| lefthook.yml | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| pytest.ini | ||
| README.i18n.yaml | ||
| README.md | ||
| README.zh.md | ||
| THIRD_PARTY_NOTICES.md | ||
| tsconfig.base.client.json | ||
| tsconfig.base.json | ||
| tsconfig.client.json | ||
| tsconfig.host.json | ||
| tsconfig.json | ||
| tsdown.config.ts | ||
| vitest.config.ts | ||
| vitest.e2e.config.ts | ||
| vitest.shared.ts | ||
| vitest.snapshot.config.ts | ||
| vitest.web-stress.config.ts | ||
| vitest.web.config.ts | ||
| vitest.web.perf.config.ts | ||
DeepSeek Harness
English | 中文
DeepSeek Harness (dsh) is an open-source agent harness developed by DeepSeek AI.
It uses an architecture where everything is a plugin, and is powered by Cordis, whose design is described in A Programming Paradigm for Spatiotemporal Composability.
Developer preview
DeepSeek Harness is currently in developer preview and is iterating rapidly. THERE WILL BE COMPATIBILITY-BREAKING CHANGES.
Run
Run from npm
Install Node.js, then run:
npx @deepseek-ai/dsh web
The command starts the Web UI, served at http://127.0.0.1:3080 by default. See Web UI guide.
Run from source
To run from a repository checkout:
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
Community and support
- Feel free to submit feedback or bug reports through GitHub Discussions.
- Add the
dsh-plugintopic to your plugin repository for discoverability. - Join DeepSeek Harness Discord community.
Contributing
See CONTRIBUTING.md.
Development
Start with the development guide and architecture documentation.
For agents, follow AGENTS.md.
License
Third-party dependencies and their licenses are disclosed in THIRD_PARTY_NOTICES.md.