Implements the RFC 010 MVP: a new `@deepseek-ai/dsh-acp` package bridges the harness agent to the Agent Client Protocol (JSON-RPC 2.0 over newline-delimited stdio), so Zed and other ACP editors can drive the coding agent — streaming render, tool-call display, and resumable sessions via `session/load`. - packages/acp: AgentSideConnection wiring; initialize/newSession/loadSession/ prompt/cancel; a total TurnEndReason→StopReason codec; settle-once with a fallback chain (agent/turn-end → logged turn/end → idle); single-session guard; cwd-must-equal-launch-dir validation; load replays from the persisted event log (assistant/chunk→agent_message_chunk, tool/call/result→tool_call*). - agent: add Agent.whenIdle() quiescence signal to the interface; LoopAgent implements it (resolves on the first running→idle/disposed transition). The bridge awaits it on disposal so teardown reaches quiescence, not just abort. - examples: extract the shared provider/tool core into examples/base.yml; coding-agent nest-includes it; new examples/acp-agent serves the agent over ACP with JSONL persistence and no stdout logger (stdout is the protocol). - Permission gate deferred (TODO(rfc010-permission-gate)): tools run with the executor's full authority; only the Agent→sessionId ownership seam is laid down. Cancel is best-effort for a not-yet-started queued turn (TODO(rfc010-cancel-prestep)). RFC 010 stays `proposed`. - Docs: package README + Zed snippet; client-driver cookbook section; root and packages layout/commands; RFC 010 implementation-status note. 48 bridge tests + whenIdle coverage; 100% per-file coverage; e2e boots the example as a subprocess and verifies a written file on disk (key-gated, with a no-key stdout-purity check).
52 lines
1.7 KiB
JSON
52 lines
1.7 KiB
JSON
{
|
|
"name": "@deepseek-ai/dsh-root",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"type": "module",
|
|
"packageManager": "yarn@4.14.1",
|
|
"engines": {
|
|
"node": ">=24"
|
|
},
|
|
"workspaces": [
|
|
"vendor/*",
|
|
"packages/*"
|
|
],
|
|
"scripts": {
|
|
"build": "tsc -b tsconfig.build.json && tsdown",
|
|
"typecheck": "tsc -b tsconfig.build.json && tsc -p tsconfig.typecheck.json",
|
|
"lint": "eslint .",
|
|
"lint:fix": "eslint . --fix",
|
|
"test": "vitest run",
|
|
"test:coverage": "vitest run --coverage",
|
|
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
"knip": "knip",
|
|
"publint": "tsx scripts/publint-all.ts",
|
|
"doc-typecheck": "tsx scripts/doc-typecheck.ts",
|
|
"verify-event-taxonomy": "tsx scripts/verify-event-taxonomy.ts",
|
|
"doc-sync": "yarn doc-typecheck && yarn verify-event-taxonomy",
|
|
"hygiene": "yarn knip && yarn publint && yarn constraints",
|
|
"demo:echo": "node --expose-internals --import tsx examples/echo-agent/start.ts",
|
|
"demo:coding": "node --expose-internals --import tsx examples/coding-agent/start.ts",
|
|
"demo:acp": "node --expose-internals --import tsx examples/acp-agent/start.ts",
|
|
"postinstall": "lefthook install"
|
|
},
|
|
"devDependencies": {
|
|
"@agentclientprotocol/sdk": "0.25.1",
|
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
"@types/node": "^25.3.5",
|
|
"@vitest/coverage-v8": "^4.1.8",
|
|
"@yarnpkg/types": "^4.0.1",
|
|
"eslint": "^10.4.1",
|
|
"fast-check": "^4.8.0",
|
|
"knip": "^6.16.1",
|
|
"lefthook": "^2.1.9",
|
|
"publint": "^0.3.21",
|
|
"tsdown": "^0.22.2",
|
|
"tsx": "^4.22.4",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "^8.61.0",
|
|
"vite-tsconfig-paths": "^6.1.1",
|
|
"vitest": "^4.1.8"
|
|
}
|
|
}
|