{"id":"deepseek-harness","repo":"geoqiao/paseo-deepseek-harness","url":"https://github.com/geoqiao/paseo-deepseek-harness","name":"deepseek-harness","description":"DeepSeek Harness through its official ACP profile for Paseo 0.8.","categories":["provider"],"platforms":[],"caveats":["Experimental: requires Paseo 0.8, daemon Node >=22.19, and a separately installed official DSH with credentials.","Only DSH 0.1.5-rc.1 and 0.1.5-rc.2 are accepted; plugins and DSH tools are trusted, unsandboxed code.","Resumes native DSH context without transcript replay; Paseo retains displayed history.","No raw token deltas, slash commands, steering, plans or terminal UI; real vision/MCP services are untested.","Discovery can leave empty DSH sessions; DSH profiles are authoritative and Paseo's extra system prompt is not injected.","Real macOS daemon turns, full outputs and restart resume passed; desktop UI and native iOS/Android checks remain unverified."],"images":[],"health":{"manifestValid":true,"hasReadme":true,"hasLicense":true,"hasTests":true,"hasTypecheckScript":true,"updatedRecently":true},"scannedAt":"2026-09-12T18:23:56.205Z","addedAt":"2026-09-12T19:27:34+03:00","version":"0.1.0-beta.2","security":{"status":"passed","blockingFindings":0,"advisoryFindings":0,"scannedAt":"2026-09-12T18:22:29.747Z","commit":"f764d0aa7a853c6c04fcdc5dc45b82224157ad08"},"license":"MIT","paseoVersionRequirement":">=0.8.0 <0.9.0","manifest":{"id":"deepseek-harness","requirements":{"paseo":">=0.8.0 <0.9.0"},"build":[["npm","ci","--ignore-scripts","--legacy-peer-deps","--no-audit","--no-fund"],["npm","run","check"]]},"repoMeta":{"stars":0,"defaultBranch":"main","pushedAt":"2026-09-12T10:17:24Z"},"owner":{"login":"geoqiao","avatarUrl":"https://avatars.githubusercontent.com/u/105639506?v=4"},"readmeText":"# DeepSeek Harness for Paseo\n\n**Use the official DeepSeek Harness in Paseo — with native context resume and complete tool results.**\n\nA community-maintained Paseo 0.8 provider plugin, not a replacement agent loop\nor an official DeepSeek/Paseo endorsement. It runs `dsh --profile acp`; Paseo\nowns the chat UI. No custom client surface or patched Paseo app is required.\n\n[Install](#install-prerequisites) · [Compatibility](#acp-compatibility-and-limitations) · [Verification](docs/verification.md) · [Code review](docs/code-review.md)\n\n> [!IMPORTANT]\n> **Requirements:** Paseo 0.8.x, daemon Node.js 22.19.0 or newer, and a\n> separately installed official DeepSeek Harness executable. The supported and\n> tested DSH versions are **0.1.5-rc.1** and **0.1.5-rc.2**. The executable\n> must be able to run dsh --version and dsh --profile acp.\n\n## What it does\n\n- Registers provider ID deepseek-harness with Paseo.\n- Launches the official ACP profile directly, without a shell and without a\n  headless flag.\n- Uses Paseo's public runAcpProvider shim for ACP lifecycle, permissions,\n  prompts, timeline mapping, usage and configuration.\n- Presents DSH's live model and reasoning-effort options without rewriting\n  their wire IDs. DSH model IDs are opaque JSON strings.\n- Passes configured MCP servers, images, environment variables and working\n  directories to DSH session runtimes.\n- Keeps complete raw tool output. The adapter maps an ACP tool update whose\n  output is represented by typed content blocks, but has no rawOutput, to\n  rawOutput: { content: ... } without flattening or truncating it.\n\n## Install prerequisites\n\nInstall a verified official DSH version **on the daemon machine**, then check\nthat the daemon can find the executable on its PATH:\n\n~~~sh\nnpm install -g --ignore-scripts @deepseek-ai/dsh@0.1.5-rc.2\ndsh --version\n~~~\n\nConfigure a DeepSeek key through official DSH **Settings → Models** (`dsh web`),\nor its documented environment/configuration mechanism. The official local\nstore is `$DSH_HOME/.credentials.yaml`, with owner-only permissions on POSIX.\nSee the [official model configuration guide](https://github.com/deepseek-ai/deepseek-harness/blob/183f08e9c6dde7e36cd2318eaee70b0da08fb35e/docs/user/guide/providers.md).\n\nThe plugin does not download, install, update or restart DSH. DSH itself owns\ncredentials and provider configuration. Credentials may be supplied through\nDSH's normal configuration or environment; the plugin does not read DSH credential files,\nmirror sessions, or read private DSH transcripts.\n\nBy default the plugin resolves the executable as `dsh`. Set\n`DSH_PASEO_COMMAND` in the **daemon's environment** to an executable path to use\nanother installation; setting it only in an unrelated terminal does not update\na running desktop-managed daemon. This is a path, not a shell command string.\n`DSH_PASEO_PROFILE` defaults to `acp`; any override must still expose the ACP\nstdio protocol, not the web/TUI profile. Custom profiles are untested.\nCapability/catalog/session-list probes use the daemon environment. Session runtimes\nreceive that environment merged with per-session Paseo overrides, so variables\nsuch as `DSH_HOME` are preserved for the session.\nThe parent process environment is never mutated.\n\nThe verified runtime compositions use CLI 0.1.5-rc.1 or 0.1.5-rc.2 with\n@deepseek-ai/dsh-acp 0.1.5-rc.2 and ACP SDK 1.4.0. The plugin probes the CLI\nversion and explicitly accepts only the two DSH versions listed above; it\ndoes not claim compatibility with other package closures.\n\n## ACP compatibility and limitations\n\nDSH advertises session/resume but not ACP's older top-level loadSession\ncapability. Paseo 0.8's public ACP shim uses session/load when it sees\npersistence. A small typed stdio adapter therefore does the following:\n\n1. After initialize, if the peer has session/resume and does not have\n   loadSession, it exposes loadSession only to the private shim-facing\n   stream.\n2. It translates that stream's session/load request to session/resume,\n   keeping the same session ID, cwd, MCP servers, request ID and other fields.\n3. It does not synthesize transcript replay. The shim emits\n   restoration: \"core\" and Paseo owns the displayed history; DSH resumes\n   context without replaying old updates.\n4. It never retries with a new session after a resume error.\n\nAll other ACP frames pass through unchanged except for the narrow tool-output\nprojection described above. Existing rawOutput wins, including null.\nPermission, error, cancellation, image, MCP, response and notification\npayloads are not flattened or discarded. The provider deliberately does not\nadvertise or implement raw token deltas, commands, steering, plans,\nterminals, elicitation, client filesystem operations or other unsupported DSH\nsurfaces. DSH model and reasoning configuration is exposed when the ACP\nserver advertises it. The public ACP shim emits complete timeline snapshots;\nthis plugin does not claim token-level or UI streaming.\n\nThe plugin has no local persistence layer, no daemon-side DSH session mirror,\nno custom persona or provider preset, and no permission-policy override.\nActivity or another Paseo client may choose how to preview a complete tool\nresult; this provider does not truncate it.\n\nThe native Paseo timeline works without another plugin. Optional\n[Readable Agent Activity](https://github.com/geoqiao/paseo-readable-activity)\nadds bounded readable previews; **that separate renderer** requires Full detail.\n\n**Known side effects and boundaries:** catalog discovery uses ACP `session/new`\nand can leave empty sessions in DSH's native session list. DSH profile settings\nremain authoritative; the generic ACP shim does not inject Paseo's extra\n`systemPrompt`. Real vision/MCP services, custom profiles, Windows and native\niOS/Android clients have not been exercised. See [verification](docs/verification.md).\n\n## Paseo installation\n\nReview this trusted, unsandboxed plugin and install the directory or public\nrepository on the intended daemon. For a repository installation:\n\n~~~sh\npaseo plugin add geoqiao/paseo-deepseek-harness --ref v0.1.0-beta.2 --host <your-host>\npaseo plugin ls --host <your-host>\n~~~\n\nSelect **DeepSeek Harness** when creating an agent in Paseo. Model and thinking\nchoices come from the installed DSH profile. Plugins and DSH tools are trusted,\nunsandboxed code; file permissions do not hide credentials from tools running\nas your OS user. This adapter does not add a security sandbox.\n\nThe source manifest requires >=0.8.0 <0.9.0. Do not restart the daemon for\nthis plugin. Follow Paseo's global plugin-enable and per-installation\nenable/disable rules; an existing disabled installation should remain\ndisabled unless the user explicitly enables it.\n\n## Development and test entry point\n\nThe production entry is index.server.ts. The reusable server-side factory is\nserver/provider.ts:\n\n- `createDeepSeekHarnessProvider(options?)` returns a public\n  `ProviderRegistration` plus an idempotent async `dispose()`;\n- `createProvider` is an alias;\n- `createDshAcpStream` and `createAcpCompatibilityStream` are exported from\n  `server/dsh-compatibility.ts` for focused ACP and lifecycle tests.\n\nThis makes an independent temporary script able to call the same\nProviderRegistration.connect, send, onEvent and close path used by Paseo.\nCall `await provider.dispose()` when the owner stops, including if a connection\nis still being established or the host has already started closing it. The\nproduction entry does this in its async cleanup. Supply a key only in the child environment when performing an opt-in\nreal-model check; do not persist it in this repository.\n\nFrom this directory:\n\n~~~sh\nnpm ci --ignore-scripts --legacy-peer-deps --no-audit --no-fund\nnpm run typecheck\nnpm run lint\nnpm test\n~~~\n\nThe tests use the installed public Paseo 0.8 SDK, public runAcpProvider, ACP\nSDK 1.4.0 framing, and a fake ACP peer process. They cover catalog discovery,\nmodel and thinking options, multi-turn prompts, configuration, persistence\nresume, tool output fidelity, images, MCP, permissions, errors, cancellation,\nEOF and startup cleanup, concurrent environment/cwd isolation, unsupported\ncapabilities, direct stream guards, and public-provider close during version\nprobe, initialize, and prompt. Real DSH/model credentials are intentionally\nnot part of the automated fixture.\n\n## Verification record\n\nAutomated checks use `npm run typecheck`, `npm run lint` and `npm test`.\nThe [verification record](docs/verification.md) distinguishes fake-peer protocol\ntests, real official-API calls, actual daemon integration and untested clients.\n\nA separate live check in the parent workspace exercised this production\nprovider factory through the public Paseo SDK and the official DSH ACP peer.\nIt ran three real-inference rounds for each of CLI `0.1.5-rc.1` and\n`0.1.5-rc.2` (the recorded four-model/v4-flash, reasoning-off checks passed),\nincluding two-turn memory, file write/read, a complete tool-output tail over\n8,000 characters, and recovery of the same persistence context after both the provider\nand DSH processes restarted. Five usage events were received in each run; emitted events\nvalidated with the public `ProviderEventSchema`. Both installation closures\nresolved to DSH ACP `0.1.5-rc.2` and ACP SDK `1.4.0`.\n\nSeparately, an installed macOS Paseo 0.8.0 daemon completed real turns and kept\ntool-output tails, prior displayed history and DSH context through a plugin\ndisable/enable cycle. An initial host IPC shutdown race was fixed by explicit\nasync cleanup ownership; the repeated installed cycle had no new IPC errors,\nand the following real turn retained context and history. The current **32-test** suite\nincludes pending-connect and close-ordering regressions; exact evidence is\ntracked in [verification](docs/verification.md).\nThe [post-release review](docs/code-review.md) adds diagnostic-redaction, timeout,\nmissing-workspace and defensive-input regressions without changing the ACP mappings.\nThese are backend tests, not a desktop UI matrix or mobile-device test. Official DSH does not provide raw token deltas,\nprovider-specific commands, steering, transcript replay, or its own plan/\nterminal UI surfaces; those are not claimed by this plugin. Credentials and\nprivate session contents are not stored in the repository.\n\n## Community catalog\n\nSubmitted to paseo.cafe in [PR #87](https://github.com/paseo-cafe/paseo-cafe/pull/87).\n**Pending maintainer review — not yet accepted or listed.** The entry uses the\n`provider` category and flags prerequisites, beta compatibility, safety,\npersistence semantics, unsupported surfaces and verification limits. Its source\nis [docs/catalog-entry.json](docs/catalog-entry.json); publication of this plugin\nand acceptance into the community catalog are separate actions.\n\n## License\n\nMIT. DeepSeek Harness and its official packages remain under their own\nlicenses.\n"}