deepseek-harness/packages
Chinesezjc a4d4404708 feat(ui-tool): render read_image results as the image
A settled top-level `read_image` call printed its raw attachment object as
literal text in the tool card — `{"type":"image","attachment":{…}}` —
instead of the image, because no presentation metadata told a client card
how to present the reference and the tool-card layer had no image concept.

Host: `read_image` declares an `output.presentationMeta` persisting
`{ path }` only. The attachment reference deliberately lives in the
settled result content — the single record a `tools/post-execute`
replacement rewrites — not in `meta`; the id is opaque and
provider-owned, checked for existence only.

Client: `imageCardModel` derives the card from the call head, the meta
path, the result's own image block, and a shape-matched envelope. ToolRow
gains an `image` card slot; the `read_image` toolview declares the
Tool-owned `tool.call.images` slot as its child and dispatches the
gallery through it. ui-chat down-threads the session-authorized loader
(`ChatNodeOwnerProps.loadImage`), so the tool layer supplies only derived
references plus the loader and never imports an attachment
implementation; ui-attachment fills the slot with its message gallery
renderer. The card keeps the envelope text below the gallery for the
no-attachment-plugin deployment. An image-bearing tool registers a keyed
toolview; the generic fallback keeps its flattened text. `read_image`
joins the read variant with its own locale title key; both rows share
`read-family-row.tsx`.

Verification: `read-image.spec.ts` (metadata projection, envelope by
shape, reference narrowing, real-execution round trip, rejection
branches incl. non-digest ids), `image-card.client.spec.tsx` (derivation,
row render site dispatching the slot, keyed registration with the
child-slot declaration, empty-slot fallbacks, media-type enum), keyless
snapshots (`read-image-gif` added; read-image/-dimension/-reencode
updated to the `{path}` meta), five injected-defect negative controls,
and a demo GIF recorded from this PR's head through the official
image-capable model.
2026-08-29 17:41:05 +08:00
..
acp Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
api chore: package.json update 2026-08-29 14:26:43 +08:00
attachment release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
boot release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
bundle Merge remote-tracking branch 'origin/master' into schedule-web-catalog 2026-08-28 14:45:30 +08:00
client feat(ui-tool): render read_image results as the image 2026-08-29 17:41:05 +08:00
code-runtime release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
compaction Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
context Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
core chore: package.json update 2026-08-29 14:26:43 +08:00
credentials release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
e2b Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
examples Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
experimental feat(ui-tool): render read_image results as the image 2026-08-29 17:41:05 +08:00
extensions feat(ui-tool): render read_image results as the image 2026-08-29 17:41:05 +08:00
feedback release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
fs feat(ui-tool): render read_image results as the image 2026-08-29 17:41:05 +08:00
goal refactor(goal, permission, plan): require the projection registry 2026-08-28 12:37:17 +08:00
guard Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
hooks Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
host Merge origin/master into codex/remove-knip 2026-08-28 12:07:36 +08:00
identity release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
interaction refactor(goal, permission, plan): require the projection registry 2026-08-28 12:37:17 +08:00
jobs release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
llm chore: package.json update 2026-08-29 14:26:43 +08:00
lsp release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
mcp release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
plan refactor(goal, permission, plan): require the projection registry 2026-08-28 12:37:17 +08:00
preset refactor(api): converge the Remote failure vocabulary and client surface 2026-08-28 22:37:36 +08:00
runtime-diagnostics release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
sandbox Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
schedule Merge remote-tracking branch 'origin/master' into schedule-web-catalog 2026-08-28 14:45:30 +08:00
sdk Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
session Merge pull request #1756 from deepseek-harness/worktree/fix-settings-focus 2026-08-28 17:25:40 +08:00
session-query chore: package.json update 2026-08-29 14:26:43 +08:00
settings release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
shell Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
skill release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
spill release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
storage release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
subagent refactor(api): converge the Remote failure vocabulary and client surface 2026-08-28 22:37:36 +08:00
subprocess release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
terminal Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
test-support docs(api): document the converged ctx.remote programming surface 2026-08-28 22:37:36 +08:00
todo Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
typert chore: package.json update 2026-08-29 14:26:43 +08:00
util Merge pull request #3299 from deepseek-harness/worktree/fix-subagent-settings-label-color 2026-08-29 13:17:27 +08:00
web fix(web-search): guide users to endpoint settings 2026-08-28 11:45:27 +08:00
webhook release(dsh): 0.1.2-alpha.1 2026-08-28 00:50:12 +08:00
workflow Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations 2026-08-28 10:59:30 +08:00
workspace refactor(api): converge the Remote failure vocabulary and client surface 2026-08-28 22:37:36 +08:00
AGENTS.md docs: drop the Remote-failure bullet from packages/AGENTS.md 2026-08-28 23:01:54 +08:00
CLAUDE.md
README.i18n.yaml fix: repair merged README remnants and note links after the master rebase 2026-08-27 23:14:33 +08:00
README.md fix: repair merged README remnants and note links after the master rebase 2026-08-27 23:14:33 +08:00
README.zh.md fix: repair merged README remnants and note links after the master rebase 2026-08-27 23:14:33 +08:00

description kind
The DeepSeek Harness package workspace: how the npm packages under packages/ are grouped, what each group owns, and the conventions that bind them. package-group

Packages

English | 中文

Summary

The harness is assembled from npm packages under packages/, grouped by capability family: sessions and the agent loop, model-facing tools, shell and filesystem execution, web access, subagents, and the rest. Use this page as the top-level map: find the owning group, then open its README for the package list. Every package is scoped @deepseek-ai/dsh-* and lives in exactly one group; each group README is the authoritative package map for its family.

Table of Contents


Package groups

Every package lives in exactly one group; new packages join existing groups, and a new group updates its own README and this table.

Group Role
core/ Product API spine: sessions, prompts, tools, agent services, and the concrete loop
api/ Remote BFF assembly and Typert RPC gateway
typert/ Type graph generation, artifact loading, and runtime registry
goal/ Same-session goal persistence and lifecycle
schedule/ Session-local scheduled follow-ups
feedback/ Human feedback capture and command
identity/ Shared anonymous identity
llm/ LLM capability family: abstract service + provider adapters
e2b/ E2B remote-runtime providers
subprocess/ Subprocess capability family: Service Definition + local process-tree provider
shell/ Bash capability family: executor seam, local impl, model-facing tools
terminal/ Persistent PTY capability family: owner-scoped sessions, local implementation, model-facing tools
code-runtime/ Code-execution capability family: Service Definition + worker-thread provider + PTC mode Consumer
sandbox/ Process-confinement seam; bwrap/Landlock/Seatbelt backends
fs/ Filesystem capability family: seam, local impl, model-facing file tools, discovery tools
lsp/ LSP capability family: seam, generic stdio provider, and the lsp tool
skill/ Skill capability family: provider registry, local provider, model-facing catalog/loader
compaction/ Compaction capability family: Service Definition + basic provider + command Consumer
context/ Model-visible request context: workspace instructions, time context, references
subagent/ Subagent capability family: provider-registry contract and model-facing delegation tools
jobs/ Generic background-job runtime and model-facing job control tools
experimental/ Private prototypes and internal-only plugins
workflow/ Workflow seam, worker-thread engine, and model-facing workflow/ralph tools
webhook/ Verified external events, trusted rules, and fire-and-forget Workspace Sessions
web/ Web capability family: seam, search/fetch providers, model-facing web tools
attachment/ Durable attachment identity, validation, local content-addressed storage
spill/ Spill capability family: storage seam, local impl, tool-result spill policy
todo/ The model-facing todo_write tool
plan/ Plan collaboration state with a direct entry command and reviewed exit
preset/ Per-session agent composition from preset cordis.yml files
guard/ Loop-hygiene guards: advisory repeat-call reminders + the tools/execute deadline enforcer
bundle/ Installable dsh --profile patch layers
extensions/ Agent runtime self-modification: live plugin/service inspection and model-written mount/unmount
hooks/ Hook bridges + the shared Claude Code / Codex wire-protocol library
session/ Durable session data plane: persistence seam + backends, projection seam, log-backed titles, session reporting
session-query/ Session retrieval family: logical corpus, bounded reads, lineage, semantic filtering, SQLite full-text search
settings/ User-settings seam + file-backed provider
credentials/ Credential-reference and credential-record seam + env-over-.env provider + authorization flows that ask a human
storage/ Non-session storage hub + backends + domain form
workspace/ Workspace entity
sdk/ Out-of-process SDK: JSON-RPC protocol and TypeScript client/server
acp/ Automation-only Agent Client Protocol server
interaction/ Human-collaboration plane: approval/interaction seams, permission preset, commands, ask-user tool
boot/ Shared app-bin boot glue
host/ Web-GUI host half: API gateway + HTTP route server
client/ Web-GUI browser half: shell, wire, object services, slots, ui-* plugins
examples/ Reusable composition bundles for tests and custom deployments
test-support/ Support infrastructure (testkits, invariants, replay, Loader smokes)
runtime-diagnostics/ Runtime diagnostics: package-owned invariant checks and reports
util/ Low-level zero-dependency utilities shared across groups (Branded<B>, home/path helpers, timeout, retention)

Release expectations

Most groups are product — stable API. The exceptions: e2b/ is a POC, experimental/ is unreleased, and examples/, test-support/, runtime-diagnostics/, and util/ are support with lower compatibility expectations.


Dependencies

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

Extension plugins depend on Service Definitions, never concrete providers. 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 separate Service Definition / Service Provider / Consumer roles when they evolve independently; see capability seams.


Package README contracts

Every package README covers purpose, configuration, extension points, and Model Experience unless the model-agnostic omission allowlist exempts it. It also carries ## Known Limitations and Deferred Work or uses its allowlist. Package conventions — exports, service access, invariants, tests — live in packages/AGENTS.md.


Dev Note

Working context for maintainers — click to expand

None.