deepseek-harness/packages
imccyu bbde18caff refactor(gui): dissolve the tool ring into per-view keyed slots
Four rounds of structural rework on the conversation surface, converging
on one registration model for the whole client:

- Review fixes: open() leaves the inject factory (SessionsService owns
  the semantic); ConversationService mounts via ctx.plugin(); the
  bespoke view registry retires into the 'conversation.view' list slot.
- Ring alignment: createChatView factory retired (components get
  everything through checkable shares at the register call site); the
  hand-rolled t/i18n threading is deleted wholesale — a future
  framework-level i18n will supply t as a standard prop keyed by slot
  name, so no interim manual channel.
- Toolview dissolution: ToolViewRegistry / ToolViewResolver /
  ToolViewOutlet / ctx.toolviews retire. Tool rows are entries of the
  'conversation.chat.toolview' keyed slot (scope: session) declared by
  the chat entry; ToolRowOwnerProps is the unified owner payload;
  GenericToolCard becomes the call-site fallback; registrants are plain
  plugins (inject ['slots','conversation'] as the load-order seam);
  session-dimension dispatch moves into components (useSessions reads
  parentId); trajectory/waterfall gain same-shape slots the day they
  render tool rows (RendersCheck rejects empty declarations). Slot
  names mirror the composition path (<domain>.<entry>.<hole>).
- Staging follows current: cell()/binding() are pure resolution
  (render-safe); the constructor subscribes to the list store and
  followCurrent opens the event window when the current session
  changes — staging IS the open signal, business verbs are the timing,
  React render/commit is decoupled from window lifecycle. A masked
  current (projection gap) keeps the stage untouched so deferred
  teardown semantics survive reconnects.

Agent Note: .agents/notes/implemented/architecture/
2026-07-23-toolview-dissolution.md (bilingual pair) records the
decision, the four rejected alternatives, and the accepted semantic
changes; the web client architecture note and packages/client/AGENTS.md
carry the current-state narrative.

Verified: typecheck 0, duplication 0 clones (478 files), full coverage
run 6190 passed with zero threshold errors, knip 0, doc-sync 24/24,
client aggregate tsc 0, render-count checks (one commit per chunk, zero
row re-renders under streaming) green.
2026-07-23 17:49:47 +08:00
..
bash Merge remote-tracking branch 'origin/master' into codex/session-scoped-sandbox-roots 2026-07-22 21:37:30 +08:00
client refactor(gui): dissolve the tool ring into per-view keyed slots 2026-07-23 17:49:47 +08:00
code-runtime Merge branch 'codex/invariant-package-registration-gate' into codex/package-invariant-checks 2026-07-20 19:55:46 +08:00
compact Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 21:06:50 +08:00
context Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 21:27:18 +08:00
cordis feat(tui): add interactive extension service 2026-07-22 21:30:17 -07:00
core Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 23:17:02 +08:00
examples Merge remote-tracking branch 'origin/master' into worktree/pr468-retarget-latest-master 2026-07-22 23:00:05 +08:00
fs Merge remote-tracking branch 'origin/master' into codex/session-scoped-sandbox-roots 2026-07-22 21:37:30 +08:00
goal Merge master into codex/session-title 2026-07-21 22:59:41 +08:00
guard Merge commit 'refs/codex/unblock/master-current' into HEAD 2026-07-21 20:20:53 +08:00
hooks Merge remote-tracking branch 'origin/master' into codex/session-scoped-sandbox-roots 2026-07-22 21:37:30 +08:00
host feat(web): inject workspace instructions 2026-07-23 14:11:25 +08:00
llm Merge remote-tracking branch 'origin/master' into worktree/pr504-retarget-latest-master 2026-07-22 20:55:12 +08:00
lsp Merge origin/master into worktree/ci-under-minute 2026-07-22 17:15:46 +08:00
mcp Merge commit 'refs/codex/unblock/master-current' into HEAD 2026-07-21 20:20:53 +08:00
plan refactor(plan): remove generic mode abstraction 2026-07-22 16:57:23 +08:00
pty Merge updated rfc/pty into feature/persistent-pty-sessions 2026-07-22 22:43:20 +08:00
sandbox Merge remote-tracking branch 'origin/master' into codex/session-scoped-sandbox-roots 2026-07-22 21:37:30 +08:00
sdk test(windows): make coverage fixtures portable 2026-07-22 13:10:48 +08:00
session-persistence Merge commit 'refs/codex-unblock/20260722-pr338-master' into HEAD 2026-07-22 22:37:16 +08:00
session-query Merge remote-tracking branch 'origin/master' into worktree/session-reference 2026-07-22 10:21:17 +08:00
session-title fix(session-reference): bind snapshots to prompts 2026-07-22 17:34:31 +08:00
skill Merge origin/master into worktree/ci-under-minute 2026-07-22 17:15:46 +08:00
spill Merge master into worktree-windows-runtime 2026-07-21 23:39:14 +08:00
subagent test(windows): make coverage fixtures portable 2026-07-22 13:10:48 +08:00
support Merge commit 'refs/codex-unblock/20260722-pr338-master' into HEAD 2026-07-22 22:37:16 +08:00
tasks Merge commit 'refs/codex/unblock/master-current' into HEAD 2026-07-21 20:20:53 +08:00
timeout Merge commit 'refs/codex/unblock/master-current' into HEAD 2026-07-21 20:20:53 +08:00
todo Merge commit 'refs/codex/unblock/master-current' into HEAD 2026-07-21 20:20:53 +08:00
ui Merge branch 'master' into worktree/pr504-vendored-cordis-hot-reload 2026-07-23 17:19:42 +08:00
util Merge master into worktree-windows-runtime 2026-07-21 23:39:14 +08:00
web test(web): disable unreliable DeepSeek search smoke 2026-07-22 12:37:42 +08:00
workflow Merge commit 'refs/codex/unblock/master-current' into HEAD 2026-07-21 20:20:53 +08:00
AGENTS.md docs(ts): document the solution-root TypeScript project layout 2026-07-23 03:59:35 +08:00
CLAUDE.md Document the codebase thoroughly and tighten type safety 2026-06-11 13:01:00 +08:00
README.md Merge refreshed rfc/pty into feature/persistent-pty-sessions 2026-07-22 21:12:16 +08:00

Packages

Packages use the @deepseek-ai/dsh-* scope. Each is a Cordis Service subclass or function plugin; contributions use ctx.effect(), ctx.on(), or ctx.waterfall(). Authoring rules: package and root.

Hierarchy

Packages live at packages/<group>/<pkg>/; groups are containers, while names remain @deepseek-ai/dsh-<pkg>. Each group README is the canonical package/ctx-key map.

Group Role Release expectation
core/ Product API spine: sessions, prompts, tools, agent services, and the concrete loop Product — stable surface
goal/ Persisted same-session goal state and lifecycle Product — stable surface
llm/ LLM capability family: the abstract service + provider adapters Product — stable surface
bash/ Bash capability family: executor seam, local impl, model-facing tool Product — stable surface
pty/ Persistent PTY capability family: owner-scoped sessions, local implementation, and model-facing tools Product — stable surface
code-runtime/ Code-execution capability family: the runtime seam for model-written programs + a worker-thread backend Product — stable surface
sandbox/ Process-confinement seam; bwrap/Landlock/Seatbelt backends Product — stable surface
fs/ Filesystem capability family: seam, local impl, model-facing file tools, bash-backed discovery tools Product — stable surface
lsp/ LSP capability family: seam, generic stdio provider, and the lsp tool Product — stable surface
skill/ Skill capability family: the provider registry, local provider, and model-facing catalog/loader Product — stable surface
compact/ Compaction capability family: the abstract seam + a basic backend (tool deferred) Product — stable surface
context/ Model-visible request context, including workspace instructions and time context Product — stable surface
subagent/ Subagent capability family: the provider-registry seam and the model-facing delegation tool Product — stable surface
tasks/ Generic background-task runtime and model-facing task_* control tools Product — stable surface
workflow/ Workflow capability family: the script-engine seam, worker-thread engine, and model-facing workflow and fresh-agent ralph tools Product — stable surface
web/ Web capability family: seam, search/fetch provider impls, and the model-facing web tools Product — stable surface
spill/ Spill capability family: storage seam, local impl, tool-result spill policy Product — stable surface
todo/ Todo/planning family: the model-facing todo_write tool Product — stable surface
plan/ Plan collaboration state with a direct entry command and reviewed exit Product — stable surface
timeout/ Tool-call timeout policy: the tools/execute deadline enforcer Product — stable surface
guard/ Loop-hygiene guards: advisory repeat-call reminders Product — stable surface
cordis/ Self-referential runtime toolset: inspect the live runtime's plugins and services, mount/unmount model-written plugins (design) Product — stable surface
hooks/ Hook bridges + the shared Claude Code / Codex wire-protocol library Product — stable surface
session-persistence/ Persistence capability family: the seam + JSONL/SQLite backends Product — stable surface
session-query/ Session retrieval: logical corpus, bounded reads, lineage, and event relationships Product — stable surface
session-title/ Log-backed session titles: fallback service, shared LLM policy, and opt-in providers Product — stable surface
sdk/ Project SDK tooling Product — stable surface
ui/ Editor/client integration surfaces: ACP bridge, JSON-RPC SDK server, user-approval/user-interaction seams, ask-user tool Product — stable surface
examples/ Demo bundles (agent-spine + TUI/one-shot CLI/ACP/JSON-RPC bins) the leaves load Support — example infra
support/ Support infrastructure (testkits, invariants, replay, Loader smokes) Support — lower compatibility expectations
util/ Low-level zero-dependency utilities shared across groups (Branded<B>, Harness home/path helpers, timeout, retention) Support — small, stable, harness-dep-free

Groups distinguish product API from support infrastructure. New packages join an existing group; a new group updates its README and this table.

Dependencies

The dependency graph is generated: docs/module-graph.md (pnpm run gen-module-graph, freshness-gated in CI).

Extension plugins depend on interfaces, never the concrete loop. dsh-agent-loop is swappable; UI, hook, and tool plugins use dsh-agent. Composition bundles, including dsh-agent-spine-demo, may depend on spine plugins. Capabilities split into interface / implementation / consumer packages; see capability seams.

Package READMEs cover purpose, APIs, extension points, and Model Experience unless on the model-agnostic omission allowlist. They also carry ## Known Limitations and Deferred Work or use its allowlist.