2nd dokployH
Find a file
imccyu 1b0ea07bce refactor(gui): slot system standard — single register, four props shares, framework store seat
The definitive slot model for the web client, replacing the first-generation
define/register two-step, ScopedSlots whitelist faces, and binding handles:

- 'root' is the only a-priori slot (SlotsService built-in); the shell renders
  exactly ctx.slots.renderSlot('root', {}).
- register is the single API: children = slot declaration + render
  authorization + runtime spec in one options object; misconfiguration fails
  loud at load (duplicate declaration, undeclared contribution, one store
  handle under two scopes).
- Component props arrive in four auto-derived shares: PropsRuntime<K>
  (owner params + session/global standard kits via declare-merge),
  PropsRenderSlots<S>, PropsStore<H>, and the inject business face.
  sessionId is framework-supplied; hooks are framework-made only.
- Framework store seat: defineStore factories declare schema/actions/persist;
  read = useStore, write = baked actions only; store scope derives from the
  mounting entry; per-session persist keys and clearPersisted lifecycle.
- inject factories read the apply closure's own ctx (binding handles retired;
  root-ctx back door closed); SessionProvider is self-wired render-prop.
- Rendering sits behind the SlotRenderer install seam; runtime stays
  React-free; ownership ledger keyed to the single entry axis closes the
  stale-authority window (StaleAuthorizationError probes).

Docs: the slot type-chain note is refreshed in place as the slot system
standard RFC (bilingual pair re-recorded); the web client architecture RFC
defers its slot sections there; packages/client/AGENTS.md gains the slot and
props discipline; gui-testing/web-styling notes drop missions/ references.

Tests: suites rewritten to the standard (props fed directly, real store
engines via createXXXStore().create(), no render machinery); load-time
negative samples for declaration/authorization/store conflicts; verified by
real-host playwright run (three columns, empty state, collapse, keyed session
remount, cross-slot selection sharing).

docs(ui-sidebar): point contract reference at the committed slot standard RFC

missions/ is workspace-local and never committed; the README must not cite it.
2026-07-23 03:25:11 +08:00
.agents refactor(gui): slot system standard — single register, four props shares, framework store seat 2026-07-23 03:25:11 +08:00
.claude docs: accuracy sweep, architecture restructure, two ADRs, review skill 2026-06-13 22:05:34 +08:00
.github ci: remove critical setup variance 2026-07-22 20:29:33 +08:00
apps Merge remote-tracking branch 'origin/master' into worktree/web-bind-address 2026-07-22 21:51:05 +08:00
bin feat(cli): dsh CLI with personal config overlays from ~/.config/dsh 2026-07-22 14:29:28 +08:00
docs refactor(gui): slot system standard — single register, four props shares, framework store seat 2026-07-23 03:25:11 +08:00
examples Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 23:17:02 +08:00
native docs(landlock-run): align source and release guidance 2026-07-20 12:25:43 +08:00
packages refactor(gui): slot system standard — single register, four props shares, framework store seat 2026-07-23 03:25:11 +08:00
python Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 22:38:17 +08:00
scripts Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 23:17:02 +08:00
skills/create-dsh-sdk-project Remove the stdio agent 2026-07-20 19:26:04 +08:00
vendor chore: extract vendored Cordis hot-reload fix 2026-07-22 17:30:45 +08:00
website Merge latest master through rfc/pty into feature/persistent-pty-sessions 2026-07-22 21:21:58 +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(gui): step1 skeleton — dsc web serves built web UI over booted harness host 2026-07-22 16:24:44 +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 Merge refreshed rfc/pty into feature/persistent-pty-sessions 2026-07-22 21:12:16 +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 Merge latest master into tui-staging-merge-1 2026-07-22 20:45:24 +08:00
knip.json Merge master into worktree/semantic-session-checkpoints 2026-07-22 21:49:24 +08:00
lefthook.yml chore: keep local git hooks fast 2026-07-22 16:37:20 +08:00
LICENSE Initialize repo with README, AGENTS.md, and CLAUDE.md symlink 2026-06-10 22:58:56 +08:00
package.json Merge branch 'master' into worktree/run-all-gates 2026-07-22 21:10:45 +08:00
pnpm-lock.yaml Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 23:17:02 +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 docs: regenerate catalogs, graphs, and the README pairing record after the rebase 2026-07-22 14:30:01 +08:00
README.md Retire the readline front door and the repl-agent example 2026-07-22 14:29:27 +08:00
README.zh.md Retire the readline front door and the repl-agent example 2026-07-22 14:29:27 +08:00
tsconfig.base.json Merge refreshed rfc/pty into feature/persistent-pty-sessions 2026-07-22 21:12:16 +08:00
tsconfig.build.json Merge updated rfc/pty into feature/persistent-pty-sessions 2026-07-22 22:43:20 +08:00
tsconfig.client.json feat(gui): step1 skeleton — dsc web serves built web UI over booted harness host 2026-07-22 16:24:44 +08:00
tsconfig.json Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 23:17:02 +08:00
tsconfig.vitest.json feat(gui): step1 skeleton — dsc web serves built web UI over booted harness host 2026-07-22 16:24:44 +08:00
tsdown.config.ts fix(build): exclude Vite app from package bundling 2026-07-22 21:03:37 +08:00
vitest.config.ts Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 21:06:50 +08:00
vitest.e2e.config.ts feat(gui): step1 skeleton — dsc web serves built web UI over booted harness host 2026-07-22 16:24:44 +08:00
vitest.snapshot.config.ts Merge remote-tracking branch 'origin/codex/invariant-service-seam' into codex/invariant-package-registration-gate 2026-07-20 00:35:06 +08:00
vitest.web.config.ts feat(gui): step1 skeleton — dsc web serves built web UI over booted harness host 2026-07-22 16:24:44 +08:00

DeepSeek Harness

English | 中文

The DeepSeek Harness SDK is a plugin-based SDK for building agent harnesses.

Install

Install the dsh coding agent with one line — it needs git and Node ^22.19 || >=24, and offers to install pnpm if it is missing:

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

It clones the harness to ~/.dsh/source, runs pnpm install, symlinks dsh into ~/.local/bin (offering to add it to your PATH), prompts once for your DEEPSEEK_API_KEY, and launches dsh; re-running it updates an existing checkout. Run from inside a checkout (sh scripts/install.sh) it reuses that checkout and skips the clone. The overridable DSH_* variables are documented in scripts/install.sh.

Development

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

pnpm install
pnpm run test          # vitest
# Agent demos require DEEPSEEK_API_KEY.
pnpm run demo:tui      # full-screen TUI coding agent
pnpm run demo:headless "task" # one-shot coding agent
pnpm run demo:cordis   # self-referential agent demo
pnpm run demo:acp      # ACP server agent demo

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

For agents, follow AGENTS.md.