2nd dokployH
Find a file
Tianyi Cui 53283003e9 feat(i18n): unit-mapped briefings with mechanical --apply, adopting the #684 planner mechanics
The briefing now maps each update at the narrowest safely aligned
granularity, widening deterministically on mapping failure: a change
confined to the pair's byte-identical code fences is computed outright
(--apply splices it into the counterpart and validates the result
against the pairing gate's structural signature before writing);
otherwise changed Markdown units — headings, paragraphs, table rows,
list items, fences, block quotes, HTML blocks, thematic breaks, link
definitions, matched by container-scoped kind sequences — each carry
their last-confirmed source, current source, and current counterpart
text; units that do not align fall back to depth-matched heading
sections (depth only, so translated heading text still maps); and when
sections do not align either, or both sides drifted, the briefing says
so and withholds the mapping. Terminology rows now match the changed
spans only, English terms on word boundaries with plural inflections,
and Chinese-target briefings track each relevant term's document-wide
first occurrence — a moved occurrence pulls the vacated and receiving
spans into the briefing with an explanatory note.

The unit mapping, mechanical code splice, and first-occurrence tracking
adopt the planner design from the incremental prompt-pipeline PR (#684),
whose provider-backed bake-off independently validated the same scope
ladder; this PR carries those mechanics into the agent-facing briefing
path so both consumers of the consistency records behave alike. The
prior line-hunk section mapping and its heading-text alignment (which
could not map cross-language sections) are replaced wholesale.

Docs: SKILL.md update path, i18n README pair, development.md pair, and
the briefed-updates Agent Note pair brought along; the development.md
fence edit was applied with --apply itself, and the prose updates were
made through the new unit/section briefings.
2026-07-27 02:31:07 +08:00
.agents feat(i18n): unit-mapped briefings with mechanical --apply, adopting the #684 planner mechanics 2026-07-27 02:31:07 +08:00
.claude docs: accuracy sweep, architecture restructure, two ADRs, review skill 2026-06-13 22:05:34 +08:00
.github ci: reuse the primary Linux build 2026-07-23 18:02:17 +08:00
apps Merge branch 'master' into code-mode-ui/live-parallel 2026-07-26 21:04:03 +08:00
assets docs: make the top-level README product-first 2026-07-23 00:15:44 +08:00
bin refactor: drop obsolete expose-internals flag 2026-07-23 20:35:09 +08:00
docs feat(i18n): unit-mapped briefings with mechanical --apply, adopting the #684 planner mechanics 2026-07-27 02:31:07 +08:00
examples Merge branch 'master' into code-mode-ui/live-parallel 2026-07-26 21:04:03 +08:00
native docs: translate remaining READMEs 2026-07-26 05:06:39 +08:00
packages Merge remote-tracking branch 'origin/master' into worktree/fix-clean-symlink-boundary 2026-07-26 21:34:58 +08:00
python fix(python-sdk): preserve reused session ancestry 2026-07-24 12:21:10 +08:00
scripts feat(i18n): unit-mapped briefings with mechanical --apply, adopting the #684 planner mechanics 2026-07-27 02:31:07 +08:00
skills/create-dsh-sdk-project Remove the stdio agent 2026-07-20 19:26:04 +08:00
vendor fix(vendor/include): keep config reloads resilient 2026-07-22 17:50:45 +08:00
website docs(site): publish translated core data pages 2026-07-24 18:07:56 +08:00
.editorconfig Declare LF and final-newline conventions in .editorconfig 2026-07-15 16:09:12 +08:00
.gitattributes Pin LF working trees via .gitattributes 2026-07-15 16:09:12 +08:00
.gitignore feat(web): add workspace-aware session flow 2026-07-25 17:45:26 +08:00
.gitlab-ci.yml python: derive release version from repository 2026-07-13 17:49:01 +08:00
.jscpd.json chore: tighten TypeScript duplication lint 2026-07-14 00:24:04 +08:00
AGENTS.md docs: preserve incremental PR retarget checkpoints 2026-07-26 21:59:03 +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 fix(ci): isolate lint from NodeNext temp consumers 2026-07-23 16:57:59 +08:00
knip.json Merge branch 'master' into worktree/dsh-arg-parser 2026-07-25 17:48:21 +08:00
lefthook.yml Revert "chore: run primary CI before push" 2026-07-23 14:02:58 +08:00
LICENSE Initialize repo with README, AGENTS.md, and CLAUDE.md symlink 2026-06-10 22:58:56 +08:00
package.json feat(i18n): briefing generator and pair-scoped pairing gate 2026-07-27 00:44:21 +08:00
pnpm-lock.yaml Merge branch 'master' into code-mode-ui/host-foundation 2026-07-26 20:07:43 +08:00
pnpm-workspace.yaml Merge latest master through rfc/pty into feature/persistent-pty-sessions 2026-07-22 21:21:58 +08:00
pytest.ini Merge remote-tracking branch 'origin/master' into codex/trim-ai-prose 2026-07-14 00:40:36 +08:00
README.i18n.yaml fix(demo): build client plugin bundles before serving dsh web 2026-07-23 16:37:56 +08:00
README.md fix(demo): build client plugin bundles before serving dsh web 2026-07-23 16:37:56 +08:00
README.zh.md fix(demo): build client plugin bundles before serving dsh web 2026-07-23 16:37:56 +08:00
tsconfig.base.client.json refactor(tsconfig): single root solution graph over host/client aggregates 2026-07-23 03:59:05 +08:00
tsconfig.base.json refactor(gui): copy-free settings shell; ui-settings-general owns ownerless copy 2026-07-26 12:40:17 +08:00
tsconfig.client.json refactor(gui): copy-free settings shell; ui-settings-general owns ownerless copy 2026-07-26 12:40:17 +08:00
tsconfig.host.json feat(web): render Code Mode sub-calls as native rows nested under the run_code row 2026-07-26 04:02:38 +08:00
tsconfig.json refactor(tsconfig): single root solution graph over host/client aggregates 2026-07-23 03:59:05 +08:00
tsdown.config.ts refactor(tsconfig): single root solution graph over host/client aggregates 2026-07-23 03:59:05 +08:00
vitest.config.ts Merge branch 'master' into worktree/dsh-arg-parser 2026-07-25 17:48:21 +08:00
vitest.e2e.config.ts refactor(cli): unify the arg grammar — one program, --config flag, real web subcommand 2026-07-25 15:47:55 +08:00
vitest.snapshot.config.ts Merge remote-tracking branch 'origin/master' into worktree/pr348-retarget-latest-master 2026-07-23 22:46:19 +08:00
vitest.web.config.ts Merge remote-tracking branch 'origin/master' into web-e2e-lane 2026-07-25 18:19:22 +08:00

DeepSeek Harness

English | 中文

DeepSeek Harness (dsh) is an open-source coding agent built on the DeepSeek Harness SDK.

It uses an architecture where everything is a plugin.

Install

Install dsh with one command:

curl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh

The installer requires git and Node ^22.19 || >=24, offers to install pnpm when it is missing, and prompts for a DeepSeek API key.

The installer clones DeepSeek Harness to ~/.dsh/source, links dsh into ~/.local/bin, and launches it. Re-running the command updates the checkout. See scripts/install.sh for alternate install locations and other options.

Use DeepSeek Harness

Web UI

For the recommended local interface, build the frontend after installation and after each update, then start the Web UI:

pnpm --dir ~/.dsh/source run build && pnpm --dir ~/.dsh/source run build:web
dsh web

The Web UI is served at http://127.0.0.1:3080 by default.

TUI

Start the full-screen terminal interface:

dsh

Headless

Run one task, print the final answer, and exit:

dsh -p "summarize this workspace"

Why DeepSeek Harness

Built-in capabilities cover file reading, editing, and search; shell execution; reusable skills; task tracking; subagents and workflows; persistent sessions; and context compaction. The TUI also includes Plan Mode.

  • Everything is a plugin. Models, tools, policies, storage, context management, and interfaces are composable Cordis plugins, so deployments can extend or replace behavior without forking the agent loop. See the architecture for the underlying design.
  • Code Mode (opt-in). It exposes a run_code tool and a generated TypeScript SDK; only program output re-enters model context. See Code Mode.
  • Self-referential Cordis tools are opt-in. They let the agent inspect its live runtime and mount or unmount plugins while it runs. See the Cordis tools.

Community

Follow DeepSeek Harness on Twitter for project updates.

Development

pnpm install
pnpm run test:coverage

Start with the development guide and read the architecture before changing packages.

For agents, follow AGENTS.md.

DeepSeek Harness is currently pre-release.

License

BSD 3-Clause