{"_id":"@amaster.ai/dsh-a2a","_rev":"4-67e409f4269e7c64738404c6c03c2be6","name":"@amaster.ai/dsh-a2a","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@amaster.ai/dsh-a2a","version":"0.1.0","license":"MIT","_id":"@amaster.ai/dsh-a2a@0.1.0","maintainers":[{"name":"qianchuan","email":"qdgemi@gmail.com"},{"name":"thornhill","email":"gpyx529@gmail.com"},{"name":"licy_mail","email":"licy_mail@qq.com"},{"name":"weaxs","email":"459312872@qq.com"},{"name":"2betop","email":"2betop.cn@gmail.com"},{"name":"lmaomaoz","email":"lmaomaoz@live.com"},{"name":"xiaojiaolv","email":"dfsq757@sina.com"},{"name":"xudong.ray","email":"xudzhang0914@gmail.com"}],"homepage":"https://github.com/TGYD-helige/dsh-plugins#readme","bugs":{"url":"https://github.com/TGYD-helige/dsh-plugins/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"384be8a944074febc1d49aa2745eb0f0be4055f7","tarball":"https://registry.npmjs.org/@amaster.ai/dsh-a2a/-/dsh-a2a-0.1.0.tgz","fileCount":21,"integrity":"sha512-5tkNx5nQosLwyJjHCsc3WrCMnbXEMGzPM/zmiySz/UYinhB7cV6V665OiAZ/NK+klvBmuCg3XRjAKkljGqzSnQ==","signatures":[{"sig":"MEUCIQCtPu+BmxWF7klSJHSwEcz3/627cFwxyQpVVb/O16LJngIgfcBJsLlfvL0HW+zX+dCkRRav4+65McLAY/GEaISeR80=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1720702},"main":"lib/index.js","type":"module","_from":"file:amaster.ai-dsh-a2a-0.1.0.tgz","types":"lib/types/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"xiaojiaolv","email":"dfsq757@sina.com"},"_resolved":"/tmp/aeecef9d355441f43d86a18138a78b5a/amaster.ai-dsh-a2a-0.1.0.tgz","_integrity":"sha512-5tkNx5nQosLwyJjHCsc3WrCMnbXEMGzPM/zmiySz/UYinhB7cV6V665OiAZ/NK+klvBmuCg3XRjAKkljGqzSnQ==","repository":{"url":"git+https://github.com/TGYD-helige/dsh-plugins.git","type":"git","directory":"packages/dsh-a2a"},"_npmVersion":"10.9.8","description":"A2A protocol (JSON-RPC + SSE) server plugin for DeepSeek Harness: expose dsh agents as A2A agents.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.0","@a2a-js/sdk":"^1.1.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","ioredis":"^5.0.0","typescript":"^5.6.3","@types/node":"^22.0.0","@types/express":"^4.17.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"0.1.0-rc.7","@google-cloud/storage":"^7.0.0","@deepseek-ai/dsh-agent":"0.1.0-rc.7","@deepseek-ai/dsh-session":"0.1.0-rc.7"},"peerDependencies":{"ioredis":"^5.0.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"0.1.0-rc.7","@google-cloud/storage":"^7.0.0","@deepseek-ai/dsh-agent":"0.1.0-rc.7","@deepseek-ai/dsh-session":"0.1.0-rc.7"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@google-cloud/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-a2a_0.1.0_1787917858634_0.6118225273597799","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@amaster.ai/dsh-a2a","version":"0.1.1","license":"MIT","_id":"@amaster.ai/dsh-a2a@0.1.1","maintainers":[{"name":"qianchuan","email":"qdgemi@gmail.com"},{"name":"thornhill","email":"gpyx529@gmail.com"},{"name":"licy_mail","email":"licy_mail@qq.com"},{"name":"weaxs","email":"459312872@qq.com"},{"name":"2betop","email":"2betop.cn@gmail.com"},{"name":"lmaomaoz","email":"lmaomaoz@live.com"},{"name":"xiaojiaolv","email":"dfsq757@sina.com"},{"name":"xudong.ray","email":"xudzhang0914@gmail.com"}],"homepage":"https://github.com/TGYD-helige/dsh-plugins#readme","bugs":{"url":"https://github.com/TGYD-helige/dsh-plugins/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"aa2fc6bb52c3cff996f94688900bf3db0e582561","tarball":"https://registry.npmjs.org/@amaster.ai/dsh-a2a/-/dsh-a2a-0.1.1.tgz","fileCount":21,"integrity":"sha512-yUhd1oHLfYV1pgDWECiR6hhhuRQ9kdR0MIelyScnQLiIPLXAutiNuF/71tceCSjQKm7p2Voc+8dOeqfSQHGwXw==","signatures":[{"sig":"MEUCIQCZqjKU5kOw5qKgaqq+Uc2+BL9QJin5JJmBcpSi20psDgIgaHpk3M4wqV8TzLrnpEYVeMxwMhWulaUQntbMqiSo728=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1721076},"main":"lib/index.js","type":"module","_from":"file:amaster.ai-dsh-a2a-0.1.1.tgz","types":"lib/types/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"xiaojiaolv","email":"dfsq757@sina.com"},"_resolved":"/tmp/a03230ab762f33840f443c70ffe7c1c3/amaster.ai-dsh-a2a-0.1.1.tgz","_integrity":"sha512-yUhd1oHLfYV1pgDWECiR6hhhuRQ9kdR0MIelyScnQLiIPLXAutiNuF/71tceCSjQKm7p2Voc+8dOeqfSQHGwXw==","repository":{"url":"git+https://github.com/TGYD-helige/dsh-plugins.git","type":"git","directory":"packages/dsh-a2a"},"_npmVersion":"10.9.8","description":"A2A protocol (JSON-RPC + SSE) server plugin for DeepSeek Harness: expose dsh agents as A2A agents.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.0","@a2a-js/sdk":"^1.1.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","ioredis":"^5.0.0","typescript":"^5.6.3","@types/node":"^22.0.0","@types/express":"^4.17.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"0.1.2-rc.1","@google-cloud/storage":"^7.0.0","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1"},"peerDependencies":{"ioredis":"^5.0.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"0.1.2-rc.1","@google-cloud/storage":"^7.0.0","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@google-cloud/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-a2a_0.1.1_1788596560140_0.9771828948626018","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@amaster.ai/dsh-a2a","version":"0.1.2","license":"MIT","_id":"@amaster.ai/dsh-a2a@0.1.2","maintainers":[{"name":"qianchuan","email":"qdgemi@gmail.com"},{"name":"thornhill","email":"gpyx529@gmail.com"},{"name":"licy_mail","email":"licy_mail@qq.com"},{"name":"weaxs","email":"459312872@qq.com"},{"name":"2betop","email":"2betop.cn@gmail.com"},{"name":"lmaomaoz","email":"lmaomaoz@live.com"},{"name":"xiaojiaolv","email":"dfsq757@sina.com"},{"name":"xudong.ray","email":"xudzhang0914@gmail.com"}],"homepage":"https://github.com/TGYD-helige/dsh-plugins#readme","bugs":{"url":"https://github.com/TGYD-helige/dsh-plugins/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"92a0d6d5117f0c04b0f2b03e9fdecc6e3d12887c","tarball":"https://registry.npmjs.org/@amaster.ai/dsh-a2a/-/dsh-a2a-0.1.2.tgz","fileCount":21,"integrity":"sha512-6b9FrUQ+pBW6Ruyydy6BZZup3HrsFScYcHw3rTtbHn8xJiXK1xMde4eb9wzWPVyRWjHpmR7qvlBRgG6VrPhiuw==","signatures":[{"sig":"MEUCIEjqrIutrRN87lQMUygDo8DofgVSP7WLRbm/VHfmGeqLAiEAxbF7jDIkowI5RXZSXqgASRLJ13Gn5MnG5qKb1KOfmEE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1723148},"main":"lib/index.js","type":"module","_from":"file:amaster.ai-dsh-a2a-0.1.2.tgz","types":"lib/types/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"xiaojiaolv","email":"dfsq757@sina.com"},"_resolved":"/tmp/a6cad7903972be01d3cdf7f906bb27ff/amaster.ai-dsh-a2a-0.1.2.tgz","_integrity":"sha512-6b9FrUQ+pBW6Ruyydy6BZZup3HrsFScYcHw3rTtbHn8xJiXK1xMde4eb9wzWPVyRWjHpmR7qvlBRgG6VrPhiuw==","repository":{"url":"git+https://github.com/TGYD-helige/dsh-plugins.git","type":"git","directory":"packages/dsh-a2a"},"_npmVersion":"10.9.8","description":"A2A protocol (JSON-RPC + SSE) server plugin for DeepSeek Harness: expose dsh agents as A2A agents.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.0","@a2a-js/sdk":"^1.1.0","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","ioredis":"^5.0.0","typescript":"^5.6.3","@types/node":"^22.0.0","@types/express":"^4.17.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"0.1.5-rc.1","@google-cloud/storage":"^7.0.0","@deepseek-ai/dsh-agent":"0.1.5-rc.1","@deepseek-ai/dsh-session":"0.1.5-rc.1"},"peerDependencies":{"ioredis":"^5.0.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"0.1.5-rc.1","@google-cloud/storage":"^7.0.0","@deepseek-ai/dsh-agent":"0.1.5-rc.1","@deepseek-ai/dsh-session":"0.1.5-rc.1"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@google-cloud/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-a2a_0.1.2_1789115234592_0.911797934388809","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@amaster.ai/dsh-a2a","version":"0.1.3","description":"A2A protocol (JSON-RPC + SSE) server plugin for DeepSeek Harness: expose dsh agents as A2A agents.","type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./package.json":"./package.json"},"license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/TGYD-helige/dsh-plugins.git","directory":"packages/dsh-a2a"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dependencies":{"@a2a-js/sdk":"^1.1.0","@deepseek-ai/schemastery":"^3.18.1","express":"^4.21.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-agent":"^0.1.5-rc.1","@deepseek-ai/dsh-llm":"^0.1.5-rc.1","@deepseek-ai/dsh-session":"^0.1.5-rc.1","@google-cloud/storage":"^7.0.0","ioredis":"^5.0.0"},"peerDependenciesMeta":{"@google-cloud/storage":{"optional":true},"ioredis":{"optional":true}},"devDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-agent":"0.1.5-rc.1","@deepseek-ai/dsh-llm":"0.1.5-rc.1","@deepseek-ai/dsh-session":"0.1.5-rc.1","@google-cloud/storage":"^7.0.0","@types/express":"^4.17.21","@types/node":"^22.0.0","ioredis":"^5.0.0","typescript":"^5.6.3","vitest":"^4.1.11"},"engines":{"node":"^20.19 || ^22.12 || >=24.0"},"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run"},"_id":"@amaster.ai/dsh-a2a@0.1.3","bugs":{"url":"https://github.com/TGYD-helige/dsh-plugins/issues"},"homepage":"https://github.com/TGYD-helige/dsh-plugins#readme","_integrity":"sha512-xCXGvLBOe7HzgYDDaMh6/CQhkSyRTp4QqmV/tCysMj43P2TbFYX0rJ9rqnjRqYUQvA46hjptNKF+6m1AFDV2tw==","_resolved":"/tmp/46389066ac96a562cbf858f4bd9abf85/amaster.ai-dsh-a2a-0.1.3.tgz","_from":"file:amaster.ai-dsh-a2a-0.1.3.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-xCXGvLBOe7HzgYDDaMh6/CQhkSyRTp4QqmV/tCysMj43P2TbFYX0rJ9rqnjRqYUQvA46hjptNKF+6m1AFDV2tw==","shasum":"8e485c4c7e10f3e4312a0b7a1e4a9058b8f891ec","tarball":"https://registry.npmjs.org/@amaster.ai/dsh-a2a/-/dsh-a2a-0.1.3.tgz","fileCount":21,"unpackedSize":1723151,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDR7P3gVumL3bFVX3zuxFiQgCC1g5KrixHbCugqUYEAdAiEA2Ru9Bz6E0DE8XZty3IklUzJ4mihCYI3MolY52hQlMdU="}]},"_npmUser":{"name":"xiaojiaolv","email":"dfsq757@sina.com"},"directories":{},"maintainers":[{"name":"qianchuan","email":"qdgemi@gmail.com"},{"name":"thornhill","email":"gpyx529@gmail.com"},{"name":"licy_mail","email":"licy_mail@qq.com"},{"name":"weaxs","email":"459312872@qq.com"},{"name":"2betop","email":"2betop.cn@gmail.com"},{"name":"lmaomaoz","email":"lmaomaoz@live.com"},{"name":"xiaojiaolv","email":"dfsq757@sina.com"},{"name":"xudong.ray","email":"xudzhang0914@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-a2a_0.1.3_1789442844245_0.1847323699242236"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-28T11:50:58.428Z","modified":"2026-09-15T03:27:24.591Z","0.1.0":"2026-08-28T11:50:58.808Z","0.1.1":"2026-09-05T08:22:40.407Z","0.1.2":"2026-09-11T08:27:14.775Z","0.1.3":"2026-09-15T03:27:24.427Z"},"bugs":{"url":"https://github.com/TGYD-helige/dsh-plugins/issues"},"license":"MIT","homepage":"https://github.com/TGYD-helige/dsh-plugins#readme","repository":{"type":"git","url":"git+https://github.com/TGYD-helige/dsh-plugins.git","directory":"packages/dsh-a2a"},"description":"A2A protocol (JSON-RPC + SSE) server plugin for DeepSeek Harness: expose dsh agents as A2A agents.","maintainers":[{"name":"qianchuan","email":"qdgemi@gmail.com"},{"name":"thornhill","email":"gpyx529@gmail.com"},{"name":"licy_mail","email":"licy_mail@qq.com"},{"name":"weaxs","email":"459312872@qq.com"},{"name":"2betop","email":"2betop.cn@gmail.com"},{"name":"lmaomaoz","email":"lmaomaoz@live.com"},{"name":"xiaojiaolv","email":"dfsq757@sina.com"},{"name":"xudong.ray","email":"xudzhang0914@gmail.com"}],"readme":"# @amaster.ai/dsh-a2a\n\n![dsh-a2a preview](preview.png)\n\nA2A protocol server plugin for [DeepSeek Harness (dsh)](https://github.com/deepseek-ai/deepseek-harness): expose dsh agents as [A2A](https://github.com/a2aproject) agents — streaming turns, task cancel, agent card, and pluggable task-state stores. Speaks **A2A 1.0** (JSON-RPC + SSE) on [`@a2a-js/sdk`](https://github.com/a2aproject/a2a-js) 1.x, with the SDK's opt-in **v0.3 compatibility layer** kept on so pre-1.0 clients keep working. Ported from the source project's `packages/a2a-server`.\n\n`dsh-a2a` is the network boundary for a dsh agent. It gives A2A clients a stable task-oriented interface while the agent continues to use the profile's models, presets, tools, and workspace rules.\n\n## Install\n\n```sh\ndsh plugin --profile my-agent add @amaster.ai/dsh-a2a\n```\n\n## Configuration\n\nDisabled by default. Configure via the profile's `cordis.patch.yml`:\n\n```yaml\n- insert:\n    - id: a2a\n      name: '@amaster.ai/dsh-a2a'\n      config:\n        enabled: true\n        host: 127.0.0.1        # no auth built in — keep loopback or front with a proxy\n        port: 41241\n        basePath: /a2a\n        cwd: /srv/agent-workspaces\n        agent:\n          provider: ''       # dsh provider/model for A2A sessions; empty = profile default\n          model: ''\n          preset: ''         # agent preset mounted per task; empty = deployment default\n        card:\n          name: my-agent\n          description: My dsh agent over A2A\n          version: 0.1.0\n          publicUrl: https://agent.example.com\n        taskStore: redis       # memory | redis | gcs\n        redis:\n          url: redis://127.0.0.1:6379\n          keyPrefix: a2a\n          ttlSeconds: 86400\n        gcs:\n          bucket: my-agent-archives\n          prefix: tasks\n          keyFilename: ''      # GOOGLE_APPLICATION_CREDENTIALS path; empty = ADC\n```\n\n## Endpoints\n\n- `GET /.well-known/agent-card.json` — agent card: A2A 1.0 shape for `A2A-Version: 1.0` clients, the 0.3 shape for headerless clients (the legacy `/.well-known/agent.json` path is served as an alias)\n- `POST <basePath>/` — JSON-RPC. v1 methods: `SendMessage` (blocking by default, `configuration.returnImmediately: true` returns after the first event), `SendStreamingMessage` (SSE), `GetTask`, `ListTasks` (filter + cursor pagination), `CancelTask`, `SubscribeToTask` (the current task is the first event; the bus stays alive while the task is interrupted, so interrupted tasks can be re-followed live). v0.3 spellings (`message/send`, `message/stream`, `tasks/get`, `tasks/cancel`, `tasks/resubscribe`) keep working through the compat layer.\n\n## Behavior notes\n\n- **One task = one dsh session.** The A2A `contextId` IS the dsh session id. A completed turn ends `input-required`, not `completed` — the task is a conversation and stays continuable; `CancelTask` and turn errors are terminal (`canceled` / `failed`), and the SDK rejects follow-ups addressed at a terminal `taskId` (send with only the `contextId` to continue the session under a fresh task id).\n- **Agents are full preset citizens.** Each task's agent is created with the deployment's default model selection (`agentDefaultModel`) and mounts its agent preset (the web profile keeps all tools inside presets — without one the agent would see an empty tool catalog). `agent.preset` pins a specific preset.\n- **Streaming aggregation.** Text deltas of a turn share one `messageId`, so clients accumulate them into a single message; reasoning deltas ride a separate `messageId` and are marked `metadata.dshAgent.kind: 'thought'`. The turn-final event's message carries the full assembled text, so blocking `SendMessage` clients read the answer from `result.task.status.message`. Tool calls/results are data parts marked `tool-call` / `tool-result`; token usage lands in `metadata.usage` of the final event. A2A 1.0 has no `final` flag — terminal and interrupted states close the stream.\n- **Text-only boundary** for now: `SendMessage` rejects messages with non-text parts (file/url/data) with a failed task.\n- **No approval bridge**: dsh ships the mid-turn approval seam only as the optional `dsh-user-approval` package, which headless profiles do not compose, so tools that would ask are governed by the profile's own approval setup; the A2A side never enters a mid-turn `input-required`.\n- **One in-flight message per task** is the supported flow (send the next message after the turn-final event). dsh serializes queued follow-ups into successive turns, but concurrent requests share one event bus — a second in-flight request may resolve with the first turn's final event.\n- **Restart**: persisted task shells survive in Redis/GCS, but live agents do not — continuing after a restart starts a fresh session (a client-supplied `contextId` names it).\n\n## Task stores\n\nA2A **task state** (status + metadata) is separate from conversation history — use [dsh-storage](../dsh-storage) for the latter. Every backend persists a sanitized metadata shell (history/artifacts stripped) and saves only on task-state transitions, so token-rate stream events never reach the backend.\n\n- `memory` (default) — in-process, lost on restart\n- `redis` — task JSON under `<keyPrefix>:tasks:<taskId>` with a TTL; requires the `ioredis` peer\n- `gcs` — gzipped task JSON at `<prefix>/<taskId>/metadata.json.gz` (same layout as the source project's `GCSTaskStore`); requires the `@google-cloud/storage` peer. `archiveWorkspace()` (tar of the workspace) exists but is not wired to the lifecycle yet.\n\n## Security\n\ndsh ships **no authentication or authorization**. The server binds `127.0.0.1` by default; if you expose it, put an authenticated reverse proxy in front and treat every agent as running with the host process's OS privileges.\n\n## Compatibility\n\nPinned dsh/cordis versions live in the [root compat matrix](../../README.md#compatibility). Event payloads ride pre-release dsh APIs (`@deepseek-ai/dsh-{agent,session,llm}@0.1.5-rc.1`) — check the `TODO(verify)` markers in `src/` before upgrading dsh.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}