* feat(release): publish package source, declaration maps, and documentation Every release member publishes its TypeScript source and the declaration maps that resolve into it, and @deepseek-ai/dsh publishes the repository Markdown documentation staged from docs/ at prepack time. The ./src/* export most members already declared now resolves for an installed consumer, and a consumer editor follows a declaration to the implementation. Bundled JavaScript maps stay unpublished; the vendored family and the Desktop runtime file policy are unchanged. Rationale: .agents/notes/implemented/process/2026-10-08-published-source-and-docs.md * feat(release): publish JavaScript maps and compress bundles Every emitted JavaScript map ships beside the bundle it describes, and the workspace build and the client preset compress bundles without mangling identifiers. The documentation payload now mirrors the website publication manifest and is removed again by `postpack`; Desktop and the Python executable exclude the published source, documentation, and maps; `clean` removes a staged copy. Typert's publication contract gains the Remote declaration map. * fix(release): keep node bundles readable for the worker image The browser worker image lowers `yield*` only as a whole statement and rewrites `for await` loops by their source layout, so compressed node-side entries either fail that lowering or lower to unparseable code. Only the browser bundles keep compression, which removes about a third of their text. The bundle-purity assertion now matches the module-loader call regardless of the quote style compression picks, and the release-pack fixture exercises the installed package's new documentation requirement. * feat(release): publish the whole documentation tree `@deepseek-ai/dsh` copies `docs/` in full instead of the website's page set: the maintainer documents, the generated migration records, the translation guidelines, and the `*.i18n.yaml` consistency records ship with the installed package, so the documentation's own links resolve without a checkout. * feat(release): publish the upgrade guides with the documentation The staged documentation keeps the website's page set and adds every `docs/upgrade-guide/` document, which is what an installed reader consults when a released change breaks something. The rest of the maintainer tree stays out. * test(release): expect source and maps in master's new payload cases * feat(release): keep installed docs and source readable in Desktop Desktop keeps the published src/ and docs/ trees inside app.asar, and every model shell call receives DSH_INSTALL_DIR and DSH_NODE_EXECUTABLE so an agent can read them through Electron's Node mode. Staging also generates docs/upgrade-guide/README.md, an index of the upgrade guides grouped by the release they upgrade from. Minified client bundles print string literals with backticks: the worker image packer now recognizes those chunk requests, client license banners are prepended after minification so their text survives, and the affected artifact tests accept either quote. * test(desktop): read archived docs through the Windows PowerShell form Regenerate the config catalog for the shifted shell-env source line. * test(desktop): wait for the GUI-subsystem Electron process from PowerShell * build(release): publish source and maps from the message-quotes package * build(release): publish source and maps from packages new on master * build(release): publish source and maps from the tool-office package
description, kind
| description | kind |
|---|---|
| Standalone SDK profile with a persistent shell, image reading, automatic context compaction, and a Session working-directory tool for a minimal cross-platform coding agent without the shared base bundle. | package-bundle |
@deepseek-ai/dsh-sdk-minimal
English | 中文
Summary
Use dsh --profile sdk-minimal when an SDK client needs a small, explicit coding-agent runtime. By default, the profile advertises a platform-selected persistent shell, read_image, and working_directory, persists sessions as uncompressed JSONL, and selects the model from the SDK initialization request. It supplies a complete Cordis tree and excludes dsh-base, Web, settings, managed credentials, telemetry, text file tools, workspace instructions, skills, jobs, and subagents. Its danger-full-access policy lets the shell modify any path available to the process, so use it only with an isolated workspace.
Table of Contents
- Use this package
- Understand the implementation
- Further Exploration
- Model Experience
- Known Limitations and Deferred Work
- Dev Note
Use this package
Launch the profile directly or select it from the Python SDK. Supply an explicit DSH_HOME, use a disposable workspace, and provide the model credential through DEEPSEEK_API_KEY.
export DSH_HOME=/absolute/path/to/example-dsh-home
dsh --profile sdk-minimal
DSH_CONTEXT_WINDOW sets the fallback capacity for a model absent from the adapter's advisory catalog. DSH_SYSTEM_PROMPT replaces the default persona. The SDK initialization request is the sole model selection and overrides environment defaults.
Use dsh plugin --profile sdk-minimal to manage persistent external dependencies. Profile, home, and ordered --patch files can replace rows or insert bundles above the complete default tree. The shipped template applies patches only at startup.
The profile mounts exactly one persistent shell stack: Bash on Linux and macOS, or PowerShell on Windows. Both stacks use a 300-second timeout and one owner-scoped terminal; the other platform's rows remain disabled.
Session checkpoints flush history before each model request, top-level tool execution, and agent step. Dispatch waits for the flush and stops if persistence fails, so the first model request also waits for native file-lock initialization. The final response still depends on background writes or successful shutdown; checkpoints do not make forced termination safe for unflushed events.
Like every shipped profile, it mounts MCP resources once. Configure only MCP client entries to add servers. Clients mounted by another provider also count as configured. With no server configured in the caller's scope, MCP contributes no prompt text or tools and the default remains the shell, read_image, and working_directory tools.
Understand the implementation
Implementation internals — click to expand
The bundle's single insert is the complete application tree: SDK stdio startup and JSON-RPC serving, one environment-configured DeepSeek adapter, the explicit agent core, conditional MCP resource tools, local filesystem, image attachments, automatic context compaction, and subprocess services, Session working-directory state and its tool, a platform-selected persistent shell PTY, and uncompressed JSONL persistence under $DSH_HOME/sessions. It does not inherit another bundle, so every extra row is an explicit profile change.
Source map
| File | Role |
|---|---|
cordis.patch.yml |
Complete standalone profile tree and its environment-backed defaults |
src/index.ts |
Bundle package entry |
tests/sdk-minimal.spec.ts |
Exact composition, profile-name, and platform-selection checks |
Further Exploration
- Python SDK example — launches this profile from Python against an explicit Harness home.
- SDK application bundle — the JSON-RPC application layer reused by full and minimal SDK profiles.
- Base bundle — the full product foundation that this profile deliberately omits.
Model Experience
Minimal coding-agent composition
What the model sees
The system prompt is DSH_SYSTEM_PROMPT or You are a helpful software engineer assistant.. With no MCP server configured, the advertised tools are read_image, working_directory, and owner-scoped persistent bash on Linux/macOS or pwsh on Windows. Required user context supplies the current directory. Optional runtime context, text file tools, workspace instructions, skills, jobs controls, and Harness identity are absent.
Token effect
By default, one stable persona, three tool schemas, and user context for the initial directory and subsequent changes. Configured MCP servers add their tools, shared resource tools, and available server instructions. Images consume model input tokens. When images exceed the route budget, image offload permanently replaces older image occurrences with attachment/path placeholders and retries the request or compaction summary. Automatic compaction sends an additional summarization request when context pressure reaches the configured threshold and replaces older model-visible history with its summary; the durable JSONL log retains those events.
KV Cache effect
Stable for a fixed persona, platform, provider, model, and bundle patch stack. Compaction replaces part of the request history and can reduce cache reuse. Image offload also ends cache reuse at the first changed image. Profile changes take effect on the next process.
Known Limitations and Deferred Work
- The composition intentionally omits shared product services — select
dsh --profile sdkwhen settings, managed credentials, policy presets, telemetry, Web tools, or the full default tool roster are required. - Image reading requires an image-capable model — select a route whose adapter declares image input; text-only routes return a tool error. Images are stored under
$DSH_HOME/attachments/v1. - Compaction is automatic — configure compaction-basic through profile patches. SDK prompt text does not execute
/compactor other slash commands. - User patches can expand the tree and corrupt stdout — profile customization is trusted application composition; a plugin that writes ordinary text to stdout can break JSON-RPC framing.
Dev Note
Working context for maintainers — click to expand
None.