From ec73e11c9b6c702b5394c2db4e39a4d3602952af Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Fri, 19 Jun 2026 09:29:41 +0800 Subject: [PATCH] refactor(acp-example): snapshot goldens are JSONL, not pretty-printed .txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The goldens now mirror the shape of the surfaces they capture — one compact JSON record per line — matching the wire (NDJSON stdout) and disk (JSONL session log) formats, renamed *.golden.jsonl. They stay grep/jq-able and faithful to what the agent emits, where the prior pretty-printed .txt was a reformatted representation. Both normalizers drop the 2-space indent; the normalizer spec asserts the compact form. All 11 goldens regenerated; replay remains deterministic (8/8 across runs). --- .../2026-06-19-acp-snapshot-tests.md | 2 +- examples/acp-agent/tests/acp.snapshot.ts | 6 +- .../tests/snapshot-normalize.spec.ts | 10 +- .../acp-agent/tests/snapshot-normalize.ts | 16 +- .../snapshots/cancel/session.golden.jsonl | 8 + .../tests/snapshots/cancel/session.golden.txt | 95 -- .../snapshots/cancel/stdout.golden.jsonl | 5 + .../tests/snapshots/cancel/stdout.golden.txt | 62 - .../error-finish/session.golden.jsonl | 7 + .../snapshots/error-finish/session.golden.txt | 79 - .../error-finish/stdout.golden.jsonl | 4 + .../snapshots/error-finish/stdout.golden.txt | 49 - .../snapshots/handshake/stdout.golden.jsonl | 2 + .../snapshots/handshake/stdout.golden.txt | 27 - .../snapshots/multi-turn/session.golden.jsonl | 66 + .../snapshots/multi-turn/session.golden.txt | 929 ----------- .../snapshots/multi-turn/stdout.golden.jsonl | 45 + .../snapshots/multi-turn/stdout.golden.txt | 615 ------- .../snapshots/text-turn/session.golden.jsonl | 35 + .../snapshots/text-turn/session.golden.txt | 489 ------ .../snapshots/text-turn/stdout.golden.jsonl | 25 + .../snapshots/text-turn/stdout.golden.txt | 342 ---- .../tool-call-turn/session.golden.jsonl | 100 ++ .../tool-call-turn/session.golden.txt | 1469 ----------------- .../tool-call-turn/stdout.golden.jsonl | 51 + .../tool-call-turn/stdout.golden.txt | 723 -------- 26 files changed, 366 insertions(+), 4895 deletions(-) create mode 100644 examples/acp-agent/tests/snapshots/cancel/session.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/cancel/session.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/cancel/stdout.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/cancel/stdout.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/error-finish/session.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/error-finish/session.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/error-finish/stdout.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/error-finish/stdout.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/handshake/stdout.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/handshake/stdout.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/multi-turn/session.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/multi-turn/session.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/text-turn/session.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/text-turn/session.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/text-turn/stdout.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/text-turn/stdout.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.txt create mode 100644 examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.jsonl delete mode 100644 examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.txt diff --git a/docs/rfc/implemented/2026-06-19-acp-snapshot-tests.md b/docs/rfc/implemented/2026-06-19-acp-snapshot-tests.md index db05031169..470e1baf74 100644 --- a/docs/rfc/implemented/2026-06-19-acp-snapshot-tests.md +++ b/docs/rfc/implemented/2026-06-19-acp-snapshot-tests.md @@ -57,7 +57,7 @@ A snapshot run asserts **two** normalized goldens, because the harness's externa The two are genuinely additive: stdout is the bridge's *lossy projection* of the log (it drops `usage`, `step/*`, exact `seq`/`time`, and renders tool I/O differently), so a loop/tool/turn-structure regression can change the JSONL while leaving the stdout projection identical, and a bridge-translation regression can change stdout while the JSONL is untouched. Asserting the JSONL equality also echoes the proposed [universal replay fixture](../proposed/2026-06-11-deterministic-and-stress-testing.md) idea. -Both surfaces contain non-deterministic values that a pure normalization function scrubs **before** the snapshot: `randomUUID()` session ids → `{{sessionId}}`, the temp `mkdtemp` cwd → `{{cwd}}` (it appears in terminal-card `_meta` and the log header), JSON-RPC ids → a stable sequence, and the log's per-event `time` (epoch ms) + header `createdAt` dropped or zeroed. Real bash runs during replay, so the JSONL normalizer additionally stabilizes tool-output volatility (any embedded paths/pids/timestamps) — scenarios keep bash commands tightly constrained (`echo`, file writes; no `date`/`env`/background/large-output) so this surface is small. The goldens hold normalized, stable-stringified frames/events (not opaque bytes) for clean, line-diffable PRs; a separate raw-purity assertion keeps the guarantee that every stdout line parses as JSON (no logger leak onto the protocol channel). Vitest's `toMatchFileSnapshot` provides the golden store and the `-u`/`--update` "accept the diff" workflow. +Both surfaces contain non-deterministic values that a pure normalization function scrubs **before** the snapshot: `randomUUID()` session ids → `{{sessionId}}`, the temp `mkdtemp` cwd → `{{cwd}}` (it appears in terminal-card `_meta` and the log header), JSON-RPC ids → a stable sequence, and the log's per-event `time` (epoch ms) + header `createdAt` dropped or zeroed (the log's `seq` is left intact — it is deterministic by contract, `seq = log.length`). Real bash runs during replay, so the JSONL normalizer additionally stabilizes tool-output volatility (any embedded paths/pids/timestamps) — scenarios keep bash commands tightly constrained (`echo`, file writes; no `date`/`env`/background/large-output) so this surface is small. The goldens are themselves **JSONL** — one compact, normalized record per line, in the same shape as the surfaces they mirror (NDJSON on the wire, JSONL on disk: `stdout.golden.jsonl`, `session.golden.jsonl`), so they stay `grep`/`jq`-able and faithful to what the agent actually emits. A separate raw-purity assertion keeps the guarantee that every stdout line parses as JSON (no logger leak onto the protocol channel). Vitest's `toMatchFileSnapshot` provides the golden store and the `-u`/`--update` "accept the diff" workflow. ### Isolation: normalization now, sandbox later diff --git a/examples/acp-agent/tests/acp.snapshot.ts b/examples/acp-agent/tests/acp.snapshot.ts index 8aa4a6309b..08a3f5ccc0 100644 --- a/examples/acp-agent/tests/acp.snapshot.ts +++ b/examples/acp-agent/tests/acp.snapshot.ts @@ -72,12 +72,12 @@ for (const scenario of SCENARIOS) { } await expect(normalizeStdout(result.rawStdout, ctx)) - .toMatchFileSnapshot(join(dir, 'stdout.golden.txt')) + .toMatchFileSnapshot(join(dir, 'stdout.golden.jsonl')) if (scenario.hasModelTurn) { expect(result.sessionLog, 'a model scenario must persist a session log').toBeDefined() await expect(normalizeSessionLog(result.sessionLog as string, ctx)) - .toMatchFileSnapshot(join(dir, 'session.golden.txt')) + .toMatchFileSnapshot(join(dir, 'session.golden.jsonl')) } }) }) @@ -99,7 +99,7 @@ describe('snapshot fixtures', () => { const dir = join(SNAPSHOTS_DIR, name) expect(existsSync(join(dir, 'input.json')), `${name}/input.json`).toBe(true) expect(existsSync(join(dir, 'session.jsonl')), `${name}/session.jsonl`).toBe(true) - expect(existsSync(join(dir, 'stdout.golden.txt')), `${name}/stdout.golden.txt`).toBe(true) + expect(existsSync(join(dir, 'stdout.golden.jsonl')), `${name}/stdout.golden.jsonl`).toBe(true) } }) }) diff --git a/examples/acp-agent/tests/snapshot-normalize.spec.ts b/examples/acp-agent/tests/snapshot-normalize.spec.ts index 339cb8493f..bfdeab5dc8 100644 --- a/examples/acp-agent/tests/snapshot-normalize.spec.ts +++ b/examples/acp-agent/tests/snapshot-normalize.spec.ts @@ -19,8 +19,8 @@ describe('normalizeStdout', () => { JSON.stringify({ jsonrpc: '2.0', id: 99, method: 'session/new' }), ].join('\n') const out = normalizeStdout(raw, ctx) - expect(out).toContain('"id": 1') - expect(out).toContain('"id": 2') + expect(out).toContain('"id":1') + expect(out).toContain('"id":2') expect(out).not.toContain('42') expect(out).not.toContain('99') }) @@ -65,14 +65,14 @@ describe('normalizeSessionLog', () => { it('zeroes the header createdAt', () => { const out = normalizeSessionLog(`${header({})}\n`, ctx) - expect(out).toContain('"createdAt": 0') + expect(out).toContain('"createdAt":0') expect(out).not.toContain('123') }) it('zeroes each event time but keeps seq', () => { const out = normalizeSessionLog(`${header({})}\n${event({ seq: 7, time: 999 })}\n`, ctx) - expect(out).toContain('"time": 0') - expect(out).toContain('"seq": 7') // seq is deterministic — NOT scrubbed + expect(out).toContain('"time":0') + expect(out).toContain('"seq":7') // seq is deterministic — NOT scrubbed expect(out).not.toContain('999') }) diff --git a/examples/acp-agent/tests/snapshot-normalize.ts b/examples/acp-agent/tests/snapshot-normalize.ts index c729c429b8..f863913591 100644 --- a/examples/acp-agent/tests/snapshot-normalize.ts +++ b/examples/acp-agent/tests/snapshot-normalize.ts @@ -53,10 +53,11 @@ function scrubValue(value: unknown, ctx: NormalizeContext): unknown { /** * Normalize a raw stdout transcript (newline-delimited JSON-RPC frames) into a - * stable, line-diffable golden: one pretty-printed frame per block, with the - * JSON-RPC `id` rewritten to a per-transcript sequence (1, 2, 3, …) and all - * volatile strings scrubbed. Throws if any non-empty line is not valid JSON — - * that doubles as the stdout-purity check (no logger leaked onto the protocol). + * stable golden in the SAME shape as the wire: one compact JSON frame per line + * (NDJSON), with the JSON-RPC `id` rewritten to a per-transcript sequence + * (1, 2, 3, …) and all volatile strings scrubbed. Throws if any non-empty line + * is not valid JSON — that doubles as the stdout-purity check (no logger leaked + * onto the protocol). */ export function normalizeStdout(rawStdout: string, ctx: NormalizeContext): string { const lines = rawStdout.split('\n').filter(line => line.trim().length > 0) @@ -76,14 +77,15 @@ export function normalizeStdout(rawStdout: string, ctx: NormalizeContext): strin } return scrubValue(frame, ctx) as Record }) - return frames.map(f => JSON.stringify(f, null, 2)).join('\n') + '\n' + return frames.map(f => JSON.stringify(f)).join('\n') + '\n' } /** * Normalize a session JSONL log into a stable golden: the header line's * volatile fields (`createdAt`, `id`, `cwd`) and every event's `time` are * zeroed/scrubbed, all volatile strings scrubbed, and `seq` is LEFT INTACT - * (deterministic by contract). One pretty-printed record per block. + * (deterministic by contract). Output is JSONL in the same shape as the input — + * one compact record per line. */ export function normalizeSessionLog(rawLog: string, ctx: NormalizeContext): string { const lines = rawLog.split('\n').filter(line => line.trim().length > 0) @@ -98,5 +100,5 @@ export function normalizeSessionLog(rawLog: string, ctx: NormalizeContext): stri } return scrubValue(record, ctx) as Record }) - return records.map(r => JSON.stringify(r, null, 2)).join('\n') + '\n' + return records.map(r => JSON.stringify(r)).join('\n') + '\n' } diff --git a/examples/acp-agent/tests/snapshots/cancel/session.golden.jsonl b/examples/acp-agent/tests/snapshots/cancel/session.golden.jsonl new file mode 100644 index 0000000000..ecb5155beb --- /dev/null +++ b/examples/acp-agent/tests/snapshots/cancel/session.golden.jsonl @@ -0,0 +1,8 @@ +{"type":"session","version":1,"id":"{{sessionId}}","createdAt":0,"cwd":"{{cwd}}"} +{"type":"turn/start","seq":0,"time":0,"data":{"turn":1,"trigger":{"kind":"message","source":{"kind":"user"}}}} +{"type":"user/message","seq":1,"time":0,"data":{"content":[{"type":"text","text":"Start a long task; this turn will be cancelled mid-stream."}],"source":{"kind":"user"}}} +{"type":"step/start","seq":2,"time":0,"data":{"turn":1,"step":1}} +{"type":"assistant/chunk","seq":3,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"text"}}} +{"type":"assistant/chunk","seq":4,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"text-delta","index":0,"text":"partial"}}} +{"type":"step/end","seq":5,"time":0,"data":{"turn":1,"step":1}} +{"type":"turn/end","seq":6,"time":0,"data":{"turn":1,"reason":{"kind":"aborted","reason":"session/cancel"}}} diff --git a/examples/acp-agent/tests/snapshots/cancel/session.golden.txt b/examples/acp-agent/tests/snapshots/cancel/session.golden.txt deleted file mode 100644 index c928bf58f3..0000000000 --- a/examples/acp-agent/tests/snapshots/cancel/session.golden.txt +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "session", - "version": 1, - "id": "{{sessionId}}", - "createdAt": 0, - "cwd": "{{cwd}}" -} -{ - "type": "turn/start", - "seq": 0, - "time": 0, - "data": { - "turn": 1, - "trigger": { - "kind": "message", - "source": { - "kind": "user" - } - } - } -} -{ - "type": "user/message", - "seq": 1, - "time": 0, - "data": { - "content": [ - { - "type": "text", - "text": "Start a long task; this turn will be cancelled mid-stream." - } - ], - "source": { - "kind": "user" - } - } -} -{ - "type": "step/start", - "seq": 2, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "assistant/chunk", - "seq": 3, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-start", - "index": 0, - "blockType": "text" - } - } -} -{ - "type": "assistant/chunk", - "seq": 4, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "text-delta", - "index": 0, - "text": "partial" - } - } -} -{ - "type": "step/end", - "seq": 5, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "turn/end", - "seq": 6, - "time": 0, - "data": { - "turn": 1, - "reason": { - "kind": "aborted", - "reason": "session/cancel" - } - } -} diff --git a/examples/acp-agent/tests/snapshots/cancel/stdout.golden.jsonl b/examples/acp-agent/tests/snapshots/cancel/stdout.golden.jsonl new file mode 100644 index 0000000000..86ac88d0f4 --- /dev/null +++ b/examples/acp-agent/tests/snapshots/cancel/stdout.golden.jsonl @@ -0,0 +1,5 @@ +{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,"agentInfo":{"name":"deepseek-harness-acp","version":"0.0.1"},"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":false}},"authMethods":[]}} +{"jsonrpc":"2.0","id":2,"result":{"sessionId":"{{sessionId}}"}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"user_message_chunk","content":{"type":"text","text":"Start a long task; this turn will be cancelled mid-stream."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"partial"}}}} +{"jsonrpc":"2.0","id":3,"result":{"stopReason":"cancelled"}} diff --git a/examples/acp-agent/tests/snapshots/cancel/stdout.golden.txt b/examples/acp-agent/tests/snapshots/cancel/stdout.golden.txt deleted file mode 100644 index 42cb46e45c..0000000000 --- a/examples/acp-agent/tests/snapshots/cancel/stdout.golden.txt +++ /dev/null @@ -1,62 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "protocolVersion": 1, - "agentInfo": { - "name": "deepseek-harness-acp", - "version": "0.0.1" - }, - "agentCapabilities": { - "loadSession": true, - "promptCapabilities": { - "image": false, - "audio": false, - "embeddedContext": false - } - }, - "authMethods": [] - } -} -{ - "jsonrpc": "2.0", - "id": 2, - "result": { - "sessionId": "{{sessionId}}" - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "user_message_chunk", - "content": { - "type": "text", - "text": "Start a long task; this turn will be cancelled mid-stream." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "partial" - } - } - } -} -{ - "jsonrpc": "2.0", - "id": 3, - "result": { - "stopReason": "cancelled" - } -} diff --git a/examples/acp-agent/tests/snapshots/error-finish/session.golden.jsonl b/examples/acp-agent/tests/snapshots/error-finish/session.golden.jsonl new file mode 100644 index 0000000000..fcf2cde49f --- /dev/null +++ b/examples/acp-agent/tests/snapshots/error-finish/session.golden.jsonl @@ -0,0 +1,7 @@ +{"type":"session","version":1,"id":"{{sessionId}}","createdAt":0,"cwd":"{{cwd}}"} +{"type":"turn/start","seq":0,"time":0,"data":{"turn":1,"trigger":{"kind":"message","source":{"kind":"user"}}}} +{"type":"user/message","seq":1,"time":0,"data":{"content":[{"type":"text","text":"This prompt triggers a recorded provider error."}],"source":{"kind":"user"}}} +{"type":"step/start","seq":2,"time":0,"data":{"turn":1,"step":1}} +{"type":"step/end","seq":3,"time":0,"data":{"turn":1,"step":1}} +{"type":"error","seq":4,"time":0,"data":{"turn":1,"step":1,"message":"simulated provider error (HTTP 401)","code":"AUTH"}} +{"type":"turn/end","seq":5,"time":0,"data":{"turn":1,"reason":{"kind":"error","message":"simulated provider error (HTTP 401)","code":"AUTH"}}} diff --git a/examples/acp-agent/tests/snapshots/error-finish/session.golden.txt b/examples/acp-agent/tests/snapshots/error-finish/session.golden.txt deleted file mode 100644 index ae8b1914c3..0000000000 --- a/examples/acp-agent/tests/snapshots/error-finish/session.golden.txt +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "session", - "version": 1, - "id": "{{sessionId}}", - "createdAt": 0, - "cwd": "{{cwd}}" -} -{ - "type": "turn/start", - "seq": 0, - "time": 0, - "data": { - "turn": 1, - "trigger": { - "kind": "message", - "source": { - "kind": "user" - } - } - } -} -{ - "type": "user/message", - "seq": 1, - "time": 0, - "data": { - "content": [ - { - "type": "text", - "text": "This prompt triggers a recorded provider error." - } - ], - "source": { - "kind": "user" - } - } -} -{ - "type": "step/start", - "seq": 2, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "step/end", - "seq": 3, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "error", - "seq": 4, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "message": "simulated provider error (HTTP 401)", - "code": "AUTH" - } -} -{ - "type": "turn/end", - "seq": 5, - "time": 0, - "data": { - "turn": 1, - "reason": { - "kind": "error", - "message": "simulated provider error (HTTP 401)", - "code": "AUTH" - } - } -} diff --git a/examples/acp-agent/tests/snapshots/error-finish/stdout.golden.jsonl b/examples/acp-agent/tests/snapshots/error-finish/stdout.golden.jsonl new file mode 100644 index 0000000000..e978f8969b --- /dev/null +++ b/examples/acp-agent/tests/snapshots/error-finish/stdout.golden.jsonl @@ -0,0 +1,4 @@ +{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,"agentInfo":{"name":"deepseek-harness-acp","version":"0.0.1"},"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":false}},"authMethods":[]}} +{"jsonrpc":"2.0","id":2,"result":{"sessionId":"{{sessionId}}"}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"user_message_chunk","content":{"type":"text","text":"This prompt triggers a recorded provider error."}}}} +{"jsonrpc":"2.0","id":3,"error":{"code":-32603,"message":"Internal error: turn failed: simulated provider error (HTTP 401)"}} diff --git a/examples/acp-agent/tests/snapshots/error-finish/stdout.golden.txt b/examples/acp-agent/tests/snapshots/error-finish/stdout.golden.txt deleted file mode 100644 index 8babe5e15b..0000000000 --- a/examples/acp-agent/tests/snapshots/error-finish/stdout.golden.txt +++ /dev/null @@ -1,49 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "protocolVersion": 1, - "agentInfo": { - "name": "deepseek-harness-acp", - "version": "0.0.1" - }, - "agentCapabilities": { - "loadSession": true, - "promptCapabilities": { - "image": false, - "audio": false, - "embeddedContext": false - } - }, - "authMethods": [] - } -} -{ - "jsonrpc": "2.0", - "id": 2, - "result": { - "sessionId": "{{sessionId}}" - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "user_message_chunk", - "content": { - "type": "text", - "text": "This prompt triggers a recorded provider error." - } - } - } -} -{ - "jsonrpc": "2.0", - "id": 3, - "error": { - "code": -32603, - "message": "Internal error: turn failed: simulated provider error (HTTP 401)" - } -} diff --git a/examples/acp-agent/tests/snapshots/handshake/stdout.golden.jsonl b/examples/acp-agent/tests/snapshots/handshake/stdout.golden.jsonl new file mode 100644 index 0000000000..ad3f94a046 --- /dev/null +++ b/examples/acp-agent/tests/snapshots/handshake/stdout.golden.jsonl @@ -0,0 +1,2 @@ +{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,"agentInfo":{"name":"deepseek-harness-acp","version":"0.0.1"},"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":false}},"authMethods":[]}} +{"jsonrpc":"2.0","id":2,"result":{"sessionId":"{{sessionId}}"}} diff --git a/examples/acp-agent/tests/snapshots/handshake/stdout.golden.txt b/examples/acp-agent/tests/snapshots/handshake/stdout.golden.txt deleted file mode 100644 index ec34bb7f4a..0000000000 --- a/examples/acp-agent/tests/snapshots/handshake/stdout.golden.txt +++ /dev/null @@ -1,27 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "protocolVersion": 1, - "agentInfo": { - "name": "deepseek-harness-acp", - "version": "0.0.1" - }, - "agentCapabilities": { - "loadSession": true, - "promptCapabilities": { - "image": false, - "audio": false, - "embeddedContext": false - } - }, - "authMethods": [] - } -} -{ - "jsonrpc": "2.0", - "id": 2, - "result": { - "sessionId": "{{sessionId}}" - } -} diff --git a/examples/acp-agent/tests/snapshots/multi-turn/session.golden.jsonl b/examples/acp-agent/tests/snapshots/multi-turn/session.golden.jsonl new file mode 100644 index 0000000000..4623cc674d --- /dev/null +++ b/examples/acp-agent/tests/snapshots/multi-turn/session.golden.jsonl @@ -0,0 +1,66 @@ +{"type":"session","version":1,"id":"{{sessionId}}","createdAt":0,"cwd":"{{cwd}}"} +{"type":"turn/start","seq":0,"time":0,"data":{"turn":1,"trigger":{"kind":"message","source":{"kind":"user"}}}} +{"type":"user/message","seq":1,"time":0,"data":{"content":[{"type":"text","text":"Reply with exactly the word: ONE. No tools."}],"source":{"kind":"user"}}} +{"type":"step/start","seq":2,"time":0,"data":{"turn":1,"step":1}} +{"type":"assistant/chunk","seq":3,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}}} +{"type":"assistant/chunk","seq":4,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"The"}}} +{"type":"assistant/chunk","seq":5,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" user"}}} +{"type":"assistant/chunk","seq":6,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" wants"}}} +{"type":"assistant/chunk","seq":7,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" me"}}} +{"type":"assistant/chunk","seq":8,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" to"}}} +{"type":"assistant/chunk","seq":9,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" reply"}}} +{"type":"assistant/chunk","seq":10,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" with"}}} +{"type":"assistant/chunk","seq":11,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" exactly"}}} +{"type":"assistant/chunk","seq":12,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" the"}}} +{"type":"assistant/chunk","seq":13,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" word"}}} +{"type":"assistant/chunk","seq":14,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" \""}}} +{"type":"assistant/chunk","seq":15,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"ONE"}}} +{"type":"assistant/chunk","seq":16,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"\""}}} +{"type":"assistant/chunk","seq":17,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" and"}}} +{"type":"assistant/chunk","seq":18,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" no"}}} +{"type":"assistant/chunk","seq":19,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" tools"}}} +{"type":"assistant/chunk","seq":20,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"."}}} +{"type":"assistant/chunk","seq":21,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":1,"blockType":"text"}}} +{"type":"assistant/chunk","seq":22,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"text-delta","index":1,"text":"ONE"}}} +{"type":"assistant/chunk","seq":23,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to reply with exactly the word \"ONE\" and no tools."}}}} +{"type":"assistant/chunk","seq":24,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"ONE"}}}} +{"type":"assistant/chunk","seq":25,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"usage","usage":{"inputTokens":113,"outputTokens":19,"cacheReadTokens":768,"reasoningTokens":17}}}} +{"type":"assistant/chunk","seq":26,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"finish","reason":{"kind":"stop"}}}} +{"type":"assistant/message","seq":27,"time":0,"data":{"turn":1,"step":1,"content":[{"type":"reasoning","text":"The user wants me to reply with exactly the word \"ONE\" and no tools."},{"type":"text","text":"ONE"}]}} +{"type":"usage","seq":28,"time":0,"data":{"turn":1,"step":1,"usage":{"inputTokens":113,"outputTokens":19,"cacheReadTokens":768,"reasoningTokens":17}}} +{"type":"step/end","seq":29,"time":0,"data":{"turn":1,"step":1}} +{"type":"turn/end","seq":30,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}} +{"type":"turn/start","seq":31,"time":0,"data":{"turn":2,"trigger":{"kind":"message","source":{"kind":"user"}}}} +{"type":"user/message","seq":32,"time":0,"data":{"content":[{"type":"text","text":"Reply with exactly the word: TWO. No tools."}],"source":{"kind":"user"}}} +{"type":"step/start","seq":33,"time":0,"data":{"turn":2,"step":1}} +{"type":"assistant/chunk","seq":34,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}}} +{"type":"assistant/chunk","seq":35,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"The"}}} +{"type":"assistant/chunk","seq":36,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" user"}}} +{"type":"assistant/chunk","seq":37,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" wants"}}} +{"type":"assistant/chunk","seq":38,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" me"}}} +{"type":"assistant/chunk","seq":39,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" to"}}} +{"type":"assistant/chunk","seq":40,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" reply"}}} +{"type":"assistant/chunk","seq":41,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" with"}}} +{"type":"assistant/chunk","seq":42,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" exactly"}}} +{"type":"assistant/chunk","seq":43,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" the"}}} +{"type":"assistant/chunk","seq":44,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" word"}}} +{"type":"assistant/chunk","seq":45,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" \""}}} +{"type":"assistant/chunk","seq":46,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"T"}}} +{"type":"assistant/chunk","seq":47,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"WO"}}} +{"type":"assistant/chunk","seq":48,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"\""}}} +{"type":"assistant/chunk","seq":49,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" and"}}} +{"type":"assistant/chunk","seq":50,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" use"}}} +{"type":"assistant/chunk","seq":51,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" no"}}} +{"type":"assistant/chunk","seq":52,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" tools"}}} +{"type":"assistant/chunk","seq":53,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"."}}} +{"type":"assistant/chunk","seq":54,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"block-start","index":1,"blockType":"text"}}} +{"type":"assistant/chunk","seq":55,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"text-delta","index":1,"text":"T"}}} +{"type":"assistant/chunk","seq":56,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"text-delta","index":1,"text":"WO"}}} +{"type":"assistant/chunk","seq":57,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to reply with exactly the word \"TWO\" and use no tools."}}}} +{"type":"assistant/chunk","seq":58,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"TWO"}}}} +{"type":"assistant/chunk","seq":59,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"usage","usage":{"inputTokens":129,"outputTokens":22,"cacheReadTokens":768,"reasoningTokens":19}}}} +{"type":"assistant/chunk","seq":60,"time":0,"data":{"turn":2,"step":1,"chunk":{"type":"finish","reason":{"kind":"stop"}}}} +{"type":"assistant/message","seq":61,"time":0,"data":{"turn":2,"step":1,"content":[{"type":"reasoning","text":"The user wants me to reply with exactly the word \"TWO\" and use no tools."},{"type":"text","text":"TWO"}]}} +{"type":"usage","seq":62,"time":0,"data":{"turn":2,"step":1,"usage":{"inputTokens":129,"outputTokens":22,"cacheReadTokens":768,"reasoningTokens":19}}} +{"type":"step/end","seq":63,"time":0,"data":{"turn":2,"step":1}} +{"type":"turn/end","seq":64,"time":0,"data":{"turn":2,"reason":{"kind":"completed"}}} diff --git a/examples/acp-agent/tests/snapshots/multi-turn/session.golden.txt b/examples/acp-agent/tests/snapshots/multi-turn/session.golden.txt deleted file mode 100644 index fd80eb9713..0000000000 --- a/examples/acp-agent/tests/snapshots/multi-turn/session.golden.txt +++ /dev/null @@ -1,929 +0,0 @@ -{ - "type": "session", - "version": 1, - "id": "{{sessionId}}", - "createdAt": 0, - "cwd": "{{cwd}}" -} -{ - "type": "turn/start", - "seq": 0, - "time": 0, - "data": { - "turn": 1, - "trigger": { - "kind": "message", - "source": { - "kind": "user" - } - } - } -} -{ - "type": "user/message", - "seq": 1, - "time": 0, - "data": { - "content": [ - { - "type": "text", - "text": "Reply with exactly the word: ONE. No tools." - } - ], - "source": { - "kind": "user" - } - } -} -{ - "type": "step/start", - "seq": 2, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "assistant/chunk", - "seq": 3, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-start", - "index": 0, - "blockType": "reasoning" - } - } -} -{ - "type": "assistant/chunk", - "seq": 4, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "The" - } - } -} -{ - "type": "assistant/chunk", - "seq": 5, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " user" - } - } -} -{ - "type": "assistant/chunk", - "seq": 6, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " wants" - } - } -} -{ - "type": "assistant/chunk", - "seq": 7, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " me" - } - } -} -{ - "type": "assistant/chunk", - "seq": 8, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " to" - } - } -} -{ - "type": "assistant/chunk", - "seq": 9, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " reply" - } - } -} -{ - "type": "assistant/chunk", - "seq": 10, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " with" - } - } -} -{ - "type": "assistant/chunk", - "seq": 11, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " exactly" - } - } -} -{ - "type": "assistant/chunk", - "seq": 12, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " the" - } - } -} -{ - "type": "assistant/chunk", - "seq": 13, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " word" - } - } -} -{ - "type": "assistant/chunk", - "seq": 14, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " \"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 15, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "ONE" - } - } -} -{ - "type": "assistant/chunk", - "seq": 16, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 17, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " and" - } - } -} -{ - "type": "assistant/chunk", - "seq": 18, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " no" - } - } -} -{ - "type": "assistant/chunk", - "seq": 19, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " tools" - } - } -} -{ - "type": "assistant/chunk", - "seq": 20, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "." - } - } -} -{ - "type": "assistant/chunk", - "seq": 21, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-start", - "index": 1, - "blockType": "text" - } - } -} -{ - "type": "assistant/chunk", - "seq": 22, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "text-delta", - "index": 1, - "text": "ONE" - } - } -} -{ - "type": "assistant/chunk", - "seq": 23, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-end", - "index": 0, - "block": { - "type": "reasoning", - "text": "The user wants me to reply with exactly the word \"ONE\" and no tools." - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 24, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-end", - "index": 1, - "block": { - "type": "text", - "text": "ONE" - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 25, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "usage", - "usage": { - "inputTokens": 113, - "outputTokens": 19, - "cacheReadTokens": 768, - "reasoningTokens": 17 - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 26, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "finish", - "reason": { - "kind": "stop" - } - } - } -} -{ - "type": "assistant/message", - "seq": 27, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "content": [ - { - "type": "reasoning", - "text": "The user wants me to reply with exactly the word \"ONE\" and no tools." - }, - { - "type": "text", - "text": "ONE" - } - ] - } -} -{ - "type": "usage", - "seq": 28, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "usage": { - "inputTokens": 113, - "outputTokens": 19, - "cacheReadTokens": 768, - "reasoningTokens": 17 - } - } -} -{ - "type": "step/end", - "seq": 29, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "turn/end", - "seq": 30, - "time": 0, - "data": { - "turn": 1, - "reason": { - "kind": "completed" - } - } -} -{ - "type": "turn/start", - "seq": 31, - "time": 0, - "data": { - "turn": 2, - "trigger": { - "kind": "message", - "source": { - "kind": "user" - } - } - } -} -{ - "type": "user/message", - "seq": 32, - "time": 0, - "data": { - "content": [ - { - "type": "text", - "text": "Reply with exactly the word: TWO. No tools." - } - ], - "source": { - "kind": "user" - } - } -} -{ - "type": "step/start", - "seq": 33, - "time": 0, - "data": { - "turn": 2, - "step": 1 - } -} -{ - "type": "assistant/chunk", - "seq": 34, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "block-start", - "index": 0, - "blockType": "reasoning" - } - } -} -{ - "type": "assistant/chunk", - "seq": 35, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "The" - } - } -} -{ - "type": "assistant/chunk", - "seq": 36, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " user" - } - } -} -{ - "type": "assistant/chunk", - "seq": 37, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " wants" - } - } -} -{ - "type": "assistant/chunk", - "seq": 38, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " me" - } - } -} -{ - "type": "assistant/chunk", - "seq": 39, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " to" - } - } -} -{ - "type": "assistant/chunk", - "seq": 40, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " reply" - } - } -} -{ - "type": "assistant/chunk", - "seq": 41, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " with" - } - } -} -{ - "type": "assistant/chunk", - "seq": 42, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " exactly" - } - } -} -{ - "type": "assistant/chunk", - "seq": 43, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " the" - } - } -} -{ - "type": "assistant/chunk", - "seq": 44, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " word" - } - } -} -{ - "type": "assistant/chunk", - "seq": 45, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " \"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 46, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "T" - } - } -} -{ - "type": "assistant/chunk", - "seq": 47, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "WO" - } - } -} -{ - "type": "assistant/chunk", - "seq": 48, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 49, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " and" - } - } -} -{ - "type": "assistant/chunk", - "seq": 50, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " use" - } - } -} -{ - "type": "assistant/chunk", - "seq": 51, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " no" - } - } -} -{ - "type": "assistant/chunk", - "seq": 52, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " tools" - } - } -} -{ - "type": "assistant/chunk", - "seq": 53, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "." - } - } -} -{ - "type": "assistant/chunk", - "seq": 54, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "block-start", - "index": 1, - "blockType": "text" - } - } -} -{ - "type": "assistant/chunk", - "seq": 55, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "text-delta", - "index": 1, - "text": "T" - } - } -} -{ - "type": "assistant/chunk", - "seq": 56, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "text-delta", - "index": 1, - "text": "WO" - } - } -} -{ - "type": "assistant/chunk", - "seq": 57, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "block-end", - "index": 0, - "block": { - "type": "reasoning", - "text": "The user wants me to reply with exactly the word \"TWO\" and use no tools." - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 58, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "block-end", - "index": 1, - "block": { - "type": "text", - "text": "TWO" - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 59, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "usage", - "usage": { - "inputTokens": 129, - "outputTokens": 22, - "cacheReadTokens": 768, - "reasoningTokens": 19 - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 60, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "chunk": { - "type": "finish", - "reason": { - "kind": "stop" - } - } - } -} -{ - "type": "assistant/message", - "seq": 61, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "content": [ - { - "type": "reasoning", - "text": "The user wants me to reply with exactly the word \"TWO\" and use no tools." - }, - { - "type": "text", - "text": "TWO" - } - ] - } -} -{ - "type": "usage", - "seq": 62, - "time": 0, - "data": { - "turn": 2, - "step": 1, - "usage": { - "inputTokens": 129, - "outputTokens": 22, - "cacheReadTokens": 768, - "reasoningTokens": 19 - } - } -} -{ - "type": "step/end", - "seq": 63, - "time": 0, - "data": { - "turn": 2, - "step": 1 - } -} -{ - "type": "turn/end", - "seq": 64, - "time": 0, - "data": { - "turn": 2, - "reason": { - "kind": "completed" - } - } -} diff --git a/examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.jsonl b/examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.jsonl new file mode 100644 index 0000000000..d0c1644cfc --- /dev/null +++ b/examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.jsonl @@ -0,0 +1,45 @@ +{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,"agentInfo":{"name":"deepseek-harness-acp","version":"0.0.1"},"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":false}},"authMethods":[]}} +{"jsonrpc":"2.0","id":2,"result":{"sessionId":"{{sessionId}}"}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"user_message_chunk","content":{"type":"text","text":"Reply with exactly the word: ONE. No tools."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"The"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" user"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" wants"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" me"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" to"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" reply"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" with"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" exactly"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" the"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" word"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" \""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"ONE"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"\""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" and"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" no"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" tools"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"ONE"}}}} +{"jsonrpc":"2.0","id":3,"result":{"stopReason":"end_turn"}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"user_message_chunk","content":{"type":"text","text":"Reply with exactly the word: TWO. No tools."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"The"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" user"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" wants"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" me"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" to"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" reply"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" with"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" exactly"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" the"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" word"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" \""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"T"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"WO"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"\""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" and"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" use"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" no"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" tools"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"T"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"WO"}}}} +{"jsonrpc":"2.0","id":4,"result":{"stopReason":"end_turn"}} diff --git a/examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.txt b/examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.txt deleted file mode 100644 index 80a6f71aef..0000000000 --- a/examples/acp-agent/tests/snapshots/multi-turn/stdout.golden.txt +++ /dev/null @@ -1,615 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "protocolVersion": 1, - "agentInfo": { - "name": "deepseek-harness-acp", - "version": "0.0.1" - }, - "agentCapabilities": { - "loadSession": true, - "promptCapabilities": { - "image": false, - "audio": false, - "embeddedContext": false - } - }, - "authMethods": [] - } -} -{ - "jsonrpc": "2.0", - "id": 2, - "result": { - "sessionId": "{{sessionId}}" - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "user_message_chunk", - "content": { - "type": "text", - "text": "Reply with exactly the word: ONE. No tools." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "The" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " user" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " wants" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " me" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " to" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " reply" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " with" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " exactly" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " the" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " word" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " \"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "ONE" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "\"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " and" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " no" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " tools" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "ONE" - } - } - } -} -{ - "jsonrpc": "2.0", - "id": 3, - "result": { - "stopReason": "end_turn" - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "user_message_chunk", - "content": { - "type": "text", - "text": "Reply with exactly the word: TWO. No tools." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "The" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " user" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " wants" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " me" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " to" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " reply" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " with" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " exactly" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " the" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " word" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " \"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "T" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "WO" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "\"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " and" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " use" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " no" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " tools" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "T" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "WO" - } - } - } -} -{ - "jsonrpc": "2.0", - "id": 4, - "result": { - "stopReason": "end_turn" - } -} diff --git a/examples/acp-agent/tests/snapshots/text-turn/session.golden.jsonl b/examples/acp-agent/tests/snapshots/text-turn/session.golden.jsonl new file mode 100644 index 0000000000..a25f008246 --- /dev/null +++ b/examples/acp-agent/tests/snapshots/text-turn/session.golden.jsonl @@ -0,0 +1,35 @@ +{"type":"session","version":1,"id":"{{sessionId}}","createdAt":0,"cwd":"{{cwd}}"} +{"type":"turn/start","seq":0,"time":0,"data":{"turn":1,"trigger":{"kind":"message","source":{"kind":"user"}}}} +{"type":"user/message","seq":1,"time":0,"data":{"content":[{"type":"text","text":"Reply with exactly the word: PONG. Do not use any tools."}],"source":{"kind":"user"}}} +{"type":"step/start","seq":2,"time":0,"data":{"turn":1,"step":1}} +{"type":"assistant/chunk","seq":3,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}}} +{"type":"assistant/chunk","seq":4,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"The"}}} +{"type":"assistant/chunk","seq":5,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" user"}}} +{"type":"assistant/chunk","seq":6,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" wants"}}} +{"type":"assistant/chunk","seq":7,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" me"}}} +{"type":"assistant/chunk","seq":8,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" to"}}} +{"type":"assistant/chunk","seq":9,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" reply"}}} +{"type":"assistant/chunk","seq":10,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" with"}}} +{"type":"assistant/chunk","seq":11,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" exactly"}}} +{"type":"assistant/chunk","seq":12,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" the"}}} +{"type":"assistant/chunk","seq":13,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" word"}}} +{"type":"assistant/chunk","seq":14,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" \""}}} +{"type":"assistant/chunk","seq":15,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"P"}}} +{"type":"assistant/chunk","seq":16,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"ONG"}}} +{"type":"assistant/chunk","seq":17,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"\""}}} +{"type":"assistant/chunk","seq":18,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" without"}}} +{"type":"assistant/chunk","seq":19,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" using"}}} +{"type":"assistant/chunk","seq":20,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" any"}}} +{"type":"assistant/chunk","seq":21,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" tools"}}} +{"type":"assistant/chunk","seq":22,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"."}}} +{"type":"assistant/chunk","seq":23,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":1,"blockType":"text"}}} +{"type":"assistant/chunk","seq":24,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"text-delta","index":1,"text":"P"}}} +{"type":"assistant/chunk","seq":25,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"text-delta","index":1,"text":"ONG"}}} +{"type":"assistant/chunk","seq":26,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to reply with exactly the word \"PONG\" without using any tools."}}}} +{"type":"assistant/chunk","seq":27,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"PONG"}}}} +{"type":"assistant/chunk","seq":28,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"usage","usage":{"inputTokens":117,"outputTokens":22,"cacheReadTokens":768,"reasoningTokens":19}}}} +{"type":"assistant/chunk","seq":29,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"finish","reason":{"kind":"stop"}}}} +{"type":"assistant/message","seq":30,"time":0,"data":{"turn":1,"step":1,"content":[{"type":"reasoning","text":"The user wants me to reply with exactly the word \"PONG\" without using any tools."},{"type":"text","text":"PONG"}]}} +{"type":"usage","seq":31,"time":0,"data":{"turn":1,"step":1,"usage":{"inputTokens":117,"outputTokens":22,"cacheReadTokens":768,"reasoningTokens":19}}} +{"type":"step/end","seq":32,"time":0,"data":{"turn":1,"step":1}} +{"type":"turn/end","seq":33,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/examples/acp-agent/tests/snapshots/text-turn/session.golden.txt b/examples/acp-agent/tests/snapshots/text-turn/session.golden.txt deleted file mode 100644 index c61e27694e..0000000000 --- a/examples/acp-agent/tests/snapshots/text-turn/session.golden.txt +++ /dev/null @@ -1,489 +0,0 @@ -{ - "type": "session", - "version": 1, - "id": "{{sessionId}}", - "createdAt": 0, - "cwd": "{{cwd}}" -} -{ - "type": "turn/start", - "seq": 0, - "time": 0, - "data": { - "turn": 1, - "trigger": { - "kind": "message", - "source": { - "kind": "user" - } - } - } -} -{ - "type": "user/message", - "seq": 1, - "time": 0, - "data": { - "content": [ - { - "type": "text", - "text": "Reply with exactly the word: PONG. Do not use any tools." - } - ], - "source": { - "kind": "user" - } - } -} -{ - "type": "step/start", - "seq": 2, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "assistant/chunk", - "seq": 3, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-start", - "index": 0, - "blockType": "reasoning" - } - } -} -{ - "type": "assistant/chunk", - "seq": 4, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "The" - } - } -} -{ - "type": "assistant/chunk", - "seq": 5, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " user" - } - } -} -{ - "type": "assistant/chunk", - "seq": 6, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " wants" - } - } -} -{ - "type": "assistant/chunk", - "seq": 7, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " me" - } - } -} -{ - "type": "assistant/chunk", - "seq": 8, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " to" - } - } -} -{ - "type": "assistant/chunk", - "seq": 9, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " reply" - } - } -} -{ - "type": "assistant/chunk", - "seq": 10, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " with" - } - } -} -{ - "type": "assistant/chunk", - "seq": 11, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " exactly" - } - } -} -{ - "type": "assistant/chunk", - "seq": 12, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " the" - } - } -} -{ - "type": "assistant/chunk", - "seq": 13, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " word" - } - } -} -{ - "type": "assistant/chunk", - "seq": 14, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " \"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 15, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "P" - } - } -} -{ - "type": "assistant/chunk", - "seq": 16, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "ONG" - } - } -} -{ - "type": "assistant/chunk", - "seq": 17, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 18, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " without" - } - } -} -{ - "type": "assistant/chunk", - "seq": 19, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " using" - } - } -} -{ - "type": "assistant/chunk", - "seq": 20, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " any" - } - } -} -{ - "type": "assistant/chunk", - "seq": 21, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " tools" - } - } -} -{ - "type": "assistant/chunk", - "seq": 22, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "." - } - } -} -{ - "type": "assistant/chunk", - "seq": 23, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-start", - "index": 1, - "blockType": "text" - } - } -} -{ - "type": "assistant/chunk", - "seq": 24, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "text-delta", - "index": 1, - "text": "P" - } - } -} -{ - "type": "assistant/chunk", - "seq": 25, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "text-delta", - "index": 1, - "text": "ONG" - } - } -} -{ - "type": "assistant/chunk", - "seq": 26, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-end", - "index": 0, - "block": { - "type": "reasoning", - "text": "The user wants me to reply with exactly the word \"PONG\" without using any tools." - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 27, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-end", - "index": 1, - "block": { - "type": "text", - "text": "PONG" - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 28, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "usage", - "usage": { - "inputTokens": 117, - "outputTokens": 22, - "cacheReadTokens": 768, - "reasoningTokens": 19 - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 29, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "finish", - "reason": { - "kind": "stop" - } - } - } -} -{ - "type": "assistant/message", - "seq": 30, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "content": [ - { - "type": "reasoning", - "text": "The user wants me to reply with exactly the word \"PONG\" without using any tools." - }, - { - "type": "text", - "text": "PONG" - } - ] - } -} -{ - "type": "usage", - "seq": 31, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "usage": { - "inputTokens": 117, - "outputTokens": 22, - "cacheReadTokens": 768, - "reasoningTokens": 19 - } - } -} -{ - "type": "step/end", - "seq": 32, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "turn/end", - "seq": 33, - "time": 0, - "data": { - "turn": 1, - "reason": { - "kind": "completed" - } - } -} diff --git a/examples/acp-agent/tests/snapshots/text-turn/stdout.golden.jsonl b/examples/acp-agent/tests/snapshots/text-turn/stdout.golden.jsonl new file mode 100644 index 0000000000..61d0e31953 --- /dev/null +++ b/examples/acp-agent/tests/snapshots/text-turn/stdout.golden.jsonl @@ -0,0 +1,25 @@ +{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,"agentInfo":{"name":"deepseek-harness-acp","version":"0.0.1"},"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":false}},"authMethods":[]}} +{"jsonrpc":"2.0","id":2,"result":{"sessionId":"{{sessionId}}"}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"user_message_chunk","content":{"type":"text","text":"Reply with exactly the word: PONG. Do not use any tools."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"The"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" user"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" wants"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" me"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" to"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" reply"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" with"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" exactly"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" the"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" word"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" \""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"P"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"ONG"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"\""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" without"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" using"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" any"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" tools"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"P"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"ONG"}}}} +{"jsonrpc":"2.0","id":3,"result":{"stopReason":"end_turn"}} diff --git a/examples/acp-agent/tests/snapshots/text-turn/stdout.golden.txt b/examples/acp-agent/tests/snapshots/text-turn/stdout.golden.txt deleted file mode 100644 index be961bc8c9..0000000000 --- a/examples/acp-agent/tests/snapshots/text-turn/stdout.golden.txt +++ /dev/null @@ -1,342 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "protocolVersion": 1, - "agentInfo": { - "name": "deepseek-harness-acp", - "version": "0.0.1" - }, - "agentCapabilities": { - "loadSession": true, - "promptCapabilities": { - "image": false, - "audio": false, - "embeddedContext": false - } - }, - "authMethods": [] - } -} -{ - "jsonrpc": "2.0", - "id": 2, - "result": { - "sessionId": "{{sessionId}}" - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "user_message_chunk", - "content": { - "type": "text", - "text": "Reply with exactly the word: PONG. Do not use any tools." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "The" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " user" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " wants" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " me" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " to" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " reply" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " with" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " exactly" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " the" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " word" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " \"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "P" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "ONG" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "\"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " without" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " using" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " any" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " tools" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "P" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "ONG" - } - } - } -} -{ - "jsonrpc": "2.0", - "id": 3, - "result": { - "stopReason": "end_turn" - } -} diff --git a/examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.jsonl b/examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.jsonl new file mode 100644 index 0000000000..2608bc8f95 --- /dev/null +++ b/examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.jsonl @@ -0,0 +1,100 @@ +{"type":"session","version":1,"id":"{{sessionId}}","createdAt":0,"cwd":"{{cwd}}"} +{"type":"turn/start","seq":0,"time":0,"data":{"turn":1,"trigger":{"kind":"message","source":{"kind":"user"}}}} +{"type":"user/message","seq":1,"time":0,"data":{"content":[{"type":"text","text":"Use the bash tool to run exactly: echo SNAPSHOT_OK. Then reply with the single word DONE and stop."}],"source":{"kind":"user"}}} +{"type":"step/start","seq":2,"time":0,"data":{"turn":1,"step":1}} +{"type":"assistant/chunk","seq":3,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}}} +{"type":"assistant/chunk","seq":4,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"The"}}} +{"type":"assistant/chunk","seq":5,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" user"}}} +{"type":"assistant/chunk","seq":6,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" wants"}}} +{"type":"assistant/chunk","seq":7,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" me"}}} +{"type":"assistant/chunk","seq":8,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" to"}}} +{"type":"assistant/chunk","seq":9,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" run"}}} +{"type":"assistant/chunk","seq":10,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" a"}}} +{"type":"assistant/chunk","seq":11,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" specific"}}} +{"type":"assistant/chunk","seq":12,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" command"}}} +{"type":"assistant/chunk","seq":13,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" and"}}} +{"type":"assistant/chunk","seq":14,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" then"}}} +{"type":"assistant/chunk","seq":15,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" reply"}}} +{"type":"assistant/chunk","seq":16,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" with"}}} +{"type":"assistant/chunk","seq":17,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":" D"}}} +{"type":"assistant/chunk","seq":18,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"ONE"}}} +{"type":"assistant/chunk","seq":19,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"reasoning-delta","index":0,"text":"."}}} +{"type":"assistant/chunk","seq":20,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":1,"blockType":"tool-call"}}} +{"type":"assistant/chunk","seq":21,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":""}}} +{"type":"assistant/chunk","seq":22,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"{"}}} +{"type":"assistant/chunk","seq":23,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":24,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"command"}}} +{"type":"assistant/chunk","seq":25,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":26,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":": "}}} +{"type":"assistant/chunk","seq":27,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":28,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"echo"}}} +{"type":"assistant/chunk","seq":29,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":" S"}}} +{"type":"assistant/chunk","seq":30,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"NA"}}} +{"type":"assistant/chunk","seq":31,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"PS"}}} +{"type":"assistant/chunk","seq":32,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"H"}}} +{"type":"assistant/chunk","seq":33,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"OT"}}} +{"type":"assistant/chunk","seq":34,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"_OK"}}} +{"type":"assistant/chunk","seq":35,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":36,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":", "}}} +{"type":"assistant/chunk","seq":37,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":38,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"description"}}} +{"type":"assistant/chunk","seq":39,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":40,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":": "}}} +{"type":"assistant/chunk","seq":41,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":42,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"Run"}}} +{"type":"assistant/chunk","seq":43,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":" the"}}} +{"type":"assistant/chunk","seq":44,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":" exact"}}} +{"type":"assistant/chunk","seq":45,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":" echo"}}} +{"type":"assistant/chunk","seq":46,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":" command"}}} +{"type":"assistant/chunk","seq":47,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":" requested"}}} +{"type":"assistant/chunk","seq":48,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"\""}}} +{"type":"assistant/chunk","seq":49,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":1,"id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","argumentsDelta":"}"}}} +{"type":"assistant/chunk","seq":50,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The user wants me to run a specific command and then reply with DONE."}}}} +{"type":"assistant/chunk","seq":51,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":1,"block":{"type":"tool-call","id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","arguments":"{\"command\": \"echo SNAPSHOT_OK\", \"description\": \"Run the exact echo command requested\"}"}}}} +{"type":"assistant/chunk","seq":52,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"usage","usage":{"inputTokens":129,"outputTokens":86,"cacheReadTokens":768,"reasoningTokens":16}}}} +{"type":"assistant/chunk","seq":53,"time":0,"data":{"turn":1,"step":1,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}} +{"type":"assistant/message","seq":54,"time":0,"data":{"turn":1,"step":1,"content":[{"type":"reasoning","text":"The user wants me to run a specific command and then reply with DONE."},{"type":"tool-call","id":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","arguments":"{\"command\": \"echo SNAPSHOT_OK\", \"description\": \"Run the exact echo command requested\"}"}]}} +{"type":"usage","seq":55,"time":0,"data":{"turn":1,"step":1,"usage":{"inputTokens":129,"outputTokens":86,"cacheReadTokens":768,"reasoningTokens":16}}} +{"type":"tool/call","seq":56,"time":0,"data":{"turn":1,"step":1,"callId":"call_00_waDnb5eZcD1dBV49O7F39256","name":"bash","arguments":"{\"command\": \"echo SNAPSHOT_OK\", \"description\": \"Run the exact echo command requested\"}"}} +{"type":"tool/result","seq":57,"time":0,"data":{"turn":1,"step":1,"callId":"call_00_waDnb5eZcD1dBV49O7F39256","content":[{"type":"text","text":"SNAPSHOT_OK\n"}],"isError":false}} +{"type":"step/end","seq":58,"time":0,"data":{"turn":1,"step":1}} +{"type":"step/start","seq":59,"time":0,"data":{"turn":1,"step":2}} +{"type":"assistant/chunk","seq":60,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"block-start","index":0,"blockType":"reasoning"}}} +{"type":"assistant/chunk","seq":61,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"The"}}} +{"type":"assistant/chunk","seq":62,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" command"}}} +{"type":"assistant/chunk","seq":63,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" ran"}}} +{"type":"assistant/chunk","seq":64,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" successfully"}}} +{"type":"assistant/chunk","seq":65,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" and"}}} +{"type":"assistant/chunk","seq":66,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" output"}}} +{"type":"assistant/chunk","seq":67,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" \""}}} +{"type":"assistant/chunk","seq":68,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"S"}}} +{"type":"assistant/chunk","seq":69,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"NA"}}} +{"type":"assistant/chunk","seq":70,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"PS"}}} +{"type":"assistant/chunk","seq":71,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"H"}}} +{"type":"assistant/chunk","seq":72,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"OT"}}} +{"type":"assistant/chunk","seq":73,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"_OK"}}} +{"type":"assistant/chunk","seq":74,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"\"."}}} +{"type":"assistant/chunk","seq":75,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" Now"}}} +{"type":"assistant/chunk","seq":76,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" I"}}} +{"type":"assistant/chunk","seq":77,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" need"}}} +{"type":"assistant/chunk","seq":78,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" to"}}} +{"type":"assistant/chunk","seq":79,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" reply"}}} +{"type":"assistant/chunk","seq":80,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" with"}}} +{"type":"assistant/chunk","seq":81,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" the"}}} +{"type":"assistant/chunk","seq":82,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" single"}}} +{"type":"assistant/chunk","seq":83,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" word"}}} +{"type":"assistant/chunk","seq":84,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":" \""}}} +{"type":"assistant/chunk","seq":85,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"D"}}} +{"type":"assistant/chunk","seq":86,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"ONE"}}} +{"type":"assistant/chunk","seq":87,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"reasoning-delta","index":0,"text":"\"."}}} +{"type":"assistant/chunk","seq":88,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"block-start","index":1,"blockType":"text"}}} +{"type":"assistant/chunk","seq":89,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"text-delta","index":1,"text":"D"}}} +{"type":"assistant/chunk","seq":90,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"text-delta","index":1,"text":"ONE"}}} +{"type":"assistant/chunk","seq":91,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"block-end","index":0,"block":{"type":"reasoning","text":"The command ran successfully and output \"SNAPSHOT_OK\". Now I need to reply with the single word \"DONE\"."}}}} +{"type":"assistant/chunk","seq":92,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"block-end","index":1,"block":{"type":"text","text":"DONE"}}}} +{"type":"assistant/chunk","seq":93,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"usage","usage":{"inputTokens":105,"outputTokens":30,"cacheReadTokens":896,"reasoningTokens":27}}}} +{"type":"assistant/chunk","seq":94,"time":0,"data":{"turn":1,"step":2,"chunk":{"type":"finish","reason":{"kind":"stop"}}}} +{"type":"assistant/message","seq":95,"time":0,"data":{"turn":1,"step":2,"content":[{"type":"reasoning","text":"The command ran successfully and output \"SNAPSHOT_OK\". Now I need to reply with the single word \"DONE\"."},{"type":"text","text":"DONE"}]}} +{"type":"usage","seq":96,"time":0,"data":{"turn":1,"step":2,"usage":{"inputTokens":105,"outputTokens":30,"cacheReadTokens":896,"reasoningTokens":27}}} +{"type":"step/end","seq":97,"time":0,"data":{"turn":1,"step":2}} +{"type":"turn/end","seq":98,"time":0,"data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.txt b/examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.txt deleted file mode 100644 index 87ee87fcc8..0000000000 --- a/examples/acp-agent/tests/snapshots/tool-call-turn/session.golden.txt +++ /dev/null @@ -1,1469 +0,0 @@ -{ - "type": "session", - "version": 1, - "id": "{{sessionId}}", - "createdAt": 0, - "cwd": "{{cwd}}" -} -{ - "type": "turn/start", - "seq": 0, - "time": 0, - "data": { - "turn": 1, - "trigger": { - "kind": "message", - "source": { - "kind": "user" - } - } - } -} -{ - "type": "user/message", - "seq": 1, - "time": 0, - "data": { - "content": [ - { - "type": "text", - "text": "Use the bash tool to run exactly: echo SNAPSHOT_OK. Then reply with the single word DONE and stop." - } - ], - "source": { - "kind": "user" - } - } -} -{ - "type": "step/start", - "seq": 2, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "assistant/chunk", - "seq": 3, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-start", - "index": 0, - "blockType": "reasoning" - } - } -} -{ - "type": "assistant/chunk", - "seq": 4, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "The" - } - } -} -{ - "type": "assistant/chunk", - "seq": 5, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " user" - } - } -} -{ - "type": "assistant/chunk", - "seq": 6, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " wants" - } - } -} -{ - "type": "assistant/chunk", - "seq": 7, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " me" - } - } -} -{ - "type": "assistant/chunk", - "seq": 8, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " to" - } - } -} -{ - "type": "assistant/chunk", - "seq": 9, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " run" - } - } -} -{ - "type": "assistant/chunk", - "seq": 10, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " a" - } - } -} -{ - "type": "assistant/chunk", - "seq": 11, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " specific" - } - } -} -{ - "type": "assistant/chunk", - "seq": 12, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " command" - } - } -} -{ - "type": "assistant/chunk", - "seq": 13, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " and" - } - } -} -{ - "type": "assistant/chunk", - "seq": 14, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " then" - } - } -} -{ - "type": "assistant/chunk", - "seq": 15, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " reply" - } - } -} -{ - "type": "assistant/chunk", - "seq": 16, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " with" - } - } -} -{ - "type": "assistant/chunk", - "seq": 17, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " D" - } - } -} -{ - "type": "assistant/chunk", - "seq": 18, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "ONE" - } - } -} -{ - "type": "assistant/chunk", - "seq": 19, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "." - } - } -} -{ - "type": "assistant/chunk", - "seq": 20, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-start", - "index": 1, - "blockType": "tool-call" - } - } -} -{ - "type": "assistant/chunk", - "seq": 21, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "" - } - } -} -{ - "type": "assistant/chunk", - "seq": 22, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "{" - } - } -} -{ - "type": "assistant/chunk", - "seq": 23, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 24, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "command" - } - } -} -{ - "type": "assistant/chunk", - "seq": 25, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 26, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": ": " - } - } -} -{ - "type": "assistant/chunk", - "seq": 27, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 28, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "echo" - } - } -} -{ - "type": "assistant/chunk", - "seq": 29, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": " S" - } - } -} -{ - "type": "assistant/chunk", - "seq": 30, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "NA" - } - } -} -{ - "type": "assistant/chunk", - "seq": 31, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "PS" - } - } -} -{ - "type": "assistant/chunk", - "seq": 32, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "H" - } - } -} -{ - "type": "assistant/chunk", - "seq": 33, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "OT" - } - } -} -{ - "type": "assistant/chunk", - "seq": 34, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "_OK" - } - } -} -{ - "type": "assistant/chunk", - "seq": 35, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 36, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": ", " - } - } -} -{ - "type": "assistant/chunk", - "seq": 37, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 38, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "description" - } - } -} -{ - "type": "assistant/chunk", - "seq": 39, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 40, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": ": " - } - } -} -{ - "type": "assistant/chunk", - "seq": 41, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 42, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "Run" - } - } -} -{ - "type": "assistant/chunk", - "seq": 43, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": " the" - } - } -} -{ - "type": "assistant/chunk", - "seq": 44, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": " exact" - } - } -} -{ - "type": "assistant/chunk", - "seq": 45, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": " echo" - } - } -} -{ - "type": "assistant/chunk", - "seq": 46, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": " command" - } - } -} -{ - "type": "assistant/chunk", - "seq": 47, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": " requested" - } - } -} -{ - "type": "assistant/chunk", - "seq": 48, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "\"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 49, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "tool-call-delta", - "index": 1, - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "argumentsDelta": "}" - } - } -} -{ - "type": "assistant/chunk", - "seq": 50, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-end", - "index": 0, - "block": { - "type": "reasoning", - "text": "The user wants me to run a specific command and then reply with DONE." - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 51, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "block-end", - "index": 1, - "block": { - "type": "tool-call", - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "arguments": "{\"command\": \"echo SNAPSHOT_OK\", \"description\": \"Run the exact echo command requested\"}" - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 52, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "usage", - "usage": { - "inputTokens": 129, - "outputTokens": 86, - "cacheReadTokens": 768, - "reasoningTokens": 16 - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 53, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "chunk": { - "type": "finish", - "reason": { - "kind": "tool-calls" - } - } - } -} -{ - "type": "assistant/message", - "seq": 54, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "content": [ - { - "type": "reasoning", - "text": "The user wants me to run a specific command and then reply with DONE." - }, - { - "type": "tool-call", - "id": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "arguments": "{\"command\": \"echo SNAPSHOT_OK\", \"description\": \"Run the exact echo command requested\"}" - } - ] - } -} -{ - "type": "usage", - "seq": 55, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "usage": { - "inputTokens": 129, - "outputTokens": 86, - "cacheReadTokens": 768, - "reasoningTokens": 16 - } - } -} -{ - "type": "tool/call", - "seq": 56, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "callId": "call_00_waDnb5eZcD1dBV49O7F39256", - "name": "bash", - "arguments": "{\"command\": \"echo SNAPSHOT_OK\", \"description\": \"Run the exact echo command requested\"}" - } -} -{ - "type": "tool/result", - "seq": 57, - "time": 0, - "data": { - "turn": 1, - "step": 1, - "callId": "call_00_waDnb5eZcD1dBV49O7F39256", - "content": [ - { - "type": "text", - "text": "SNAPSHOT_OK\n" - } - ], - "isError": false - } -} -{ - "type": "step/end", - "seq": 58, - "time": 0, - "data": { - "turn": 1, - "step": 1 - } -} -{ - "type": "step/start", - "seq": 59, - "time": 0, - "data": { - "turn": 1, - "step": 2 - } -} -{ - "type": "assistant/chunk", - "seq": 60, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "block-start", - "index": 0, - "blockType": "reasoning" - } - } -} -{ - "type": "assistant/chunk", - "seq": 61, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "The" - } - } -} -{ - "type": "assistant/chunk", - "seq": 62, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " command" - } - } -} -{ - "type": "assistant/chunk", - "seq": 63, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " ran" - } - } -} -{ - "type": "assistant/chunk", - "seq": 64, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " successfully" - } - } -} -{ - "type": "assistant/chunk", - "seq": 65, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " and" - } - } -} -{ - "type": "assistant/chunk", - "seq": 66, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " output" - } - } -} -{ - "type": "assistant/chunk", - "seq": 67, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " \"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 68, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "S" - } - } -} -{ - "type": "assistant/chunk", - "seq": 69, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "NA" - } - } -} -{ - "type": "assistant/chunk", - "seq": 70, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "PS" - } - } -} -{ - "type": "assistant/chunk", - "seq": 71, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "H" - } - } -} -{ - "type": "assistant/chunk", - "seq": 72, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "OT" - } - } -} -{ - "type": "assistant/chunk", - "seq": 73, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "_OK" - } - } -} -{ - "type": "assistant/chunk", - "seq": 74, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "\"." - } - } -} -{ - "type": "assistant/chunk", - "seq": 75, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " Now" - } - } -} -{ - "type": "assistant/chunk", - "seq": 76, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " I" - } - } -} -{ - "type": "assistant/chunk", - "seq": 77, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " need" - } - } -} -{ - "type": "assistant/chunk", - "seq": 78, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " to" - } - } -} -{ - "type": "assistant/chunk", - "seq": 79, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " reply" - } - } -} -{ - "type": "assistant/chunk", - "seq": 80, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " with" - } - } -} -{ - "type": "assistant/chunk", - "seq": 81, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " the" - } - } -} -{ - "type": "assistant/chunk", - "seq": 82, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " single" - } - } -} -{ - "type": "assistant/chunk", - "seq": 83, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " word" - } - } -} -{ - "type": "assistant/chunk", - "seq": 84, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": " \"" - } - } -} -{ - "type": "assistant/chunk", - "seq": 85, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "D" - } - } -} -{ - "type": "assistant/chunk", - "seq": 86, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "ONE" - } - } -} -{ - "type": "assistant/chunk", - "seq": 87, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "reasoning-delta", - "index": 0, - "text": "\"." - } - } -} -{ - "type": "assistant/chunk", - "seq": 88, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "block-start", - "index": 1, - "blockType": "text" - } - } -} -{ - "type": "assistant/chunk", - "seq": 89, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "text-delta", - "index": 1, - "text": "D" - } - } -} -{ - "type": "assistant/chunk", - "seq": 90, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "text-delta", - "index": 1, - "text": "ONE" - } - } -} -{ - "type": "assistant/chunk", - "seq": 91, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "block-end", - "index": 0, - "block": { - "type": "reasoning", - "text": "The command ran successfully and output \"SNAPSHOT_OK\". Now I need to reply with the single word \"DONE\"." - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 92, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "block-end", - "index": 1, - "block": { - "type": "text", - "text": "DONE" - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 93, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "usage", - "usage": { - "inputTokens": 105, - "outputTokens": 30, - "cacheReadTokens": 896, - "reasoningTokens": 27 - } - } - } -} -{ - "type": "assistant/chunk", - "seq": 94, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "chunk": { - "type": "finish", - "reason": { - "kind": "stop" - } - } - } -} -{ - "type": "assistant/message", - "seq": 95, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "content": [ - { - "type": "reasoning", - "text": "The command ran successfully and output \"SNAPSHOT_OK\". Now I need to reply with the single word \"DONE\"." - }, - { - "type": "text", - "text": "DONE" - } - ] - } -} -{ - "type": "usage", - "seq": 96, - "time": 0, - "data": { - "turn": 1, - "step": 2, - "usage": { - "inputTokens": 105, - "outputTokens": 30, - "cacheReadTokens": 896, - "reasoningTokens": 27 - } - } -} -{ - "type": "step/end", - "seq": 97, - "time": 0, - "data": { - "turn": 1, - "step": 2 - } -} -{ - "type": "turn/end", - "seq": 98, - "time": 0, - "data": { - "turn": 1, - "reason": { - "kind": "completed" - } - } -} diff --git a/examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.jsonl b/examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.jsonl new file mode 100644 index 0000000000..c7169a8d7c --- /dev/null +++ b/examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.jsonl @@ -0,0 +1,51 @@ +{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":1,"agentInfo":{"name":"deepseek-harness-acp","version":"0.0.1"},"agentCapabilities":{"loadSession":true,"promptCapabilities":{"image":false,"audio":false,"embeddedContext":false}},"authMethods":[]}} +{"jsonrpc":"2.0","id":2,"result":{"sessionId":"{{sessionId}}"}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"user_message_chunk","content":{"type":"text","text":"Use the bash tool to run exactly: echo SNAPSHOT_OK. Then reply with the single word DONE and stop."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"The"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" user"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" wants"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" me"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" to"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" run"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" a"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" specific"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" command"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" and"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" then"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" reply"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" with"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" D"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"ONE"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"tool_call","toolCallId":"call_00_waDnb5eZcD1dBV49O7F39256","title":"echo SNAPSHOT_OK","kind":"execute","status":"in_progress","rawInput":"echo SNAPSHOT_OK","content":[{"type":"content","content":{"type":"text","text":"Run the exact echo command requested"}}]}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"tool_call_update","toolCallId":"call_00_waDnb5eZcD1dBV49O7F39256","status":"completed","content":[{"type":"content","content":{"type":"text","text":"```console\nSNAPSHOT_OK\n```"}}]}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"The"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" command"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" ran"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" successfully"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" and"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" output"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" \""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"S"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"NA"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"PS"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"H"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"OT"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"_OK"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"\"."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" Now"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" I"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" need"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" to"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" reply"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" with"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" the"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" single"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" word"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":" \""}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"D"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"ONE"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_thought_chunk","content":{"type":"text","text":"\"."}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"D"}}}} +{"jsonrpc":"2.0","method":"session/update","params":{"sessionId":"{{sessionId}}","update":{"sessionUpdate":"agent_message_chunk","content":{"type":"text","text":"ONE"}}}} +{"jsonrpc":"2.0","id":3,"result":{"stopReason":"end_turn"}} diff --git a/examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.txt b/examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.txt deleted file mode 100644 index f5b5cdb3f1..0000000000 --- a/examples/acp-agent/tests/snapshots/tool-call-turn/stdout.golden.txt +++ /dev/null @@ -1,723 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "protocolVersion": 1, - "agentInfo": { - "name": "deepseek-harness-acp", - "version": "0.0.1" - }, - "agentCapabilities": { - "loadSession": true, - "promptCapabilities": { - "image": false, - "audio": false, - "embeddedContext": false - } - }, - "authMethods": [] - } -} -{ - "jsonrpc": "2.0", - "id": 2, - "result": { - "sessionId": "{{sessionId}}" - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "user_message_chunk", - "content": { - "type": "text", - "text": "Use the bash tool to run exactly: echo SNAPSHOT_OK. Then reply with the single word DONE and stop." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "The" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " user" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " wants" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " me" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " to" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " run" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " a" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " specific" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " command" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " and" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " then" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " reply" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " with" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " D" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "ONE" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "tool_call", - "toolCallId": "call_00_waDnb5eZcD1dBV49O7F39256", - "title": "echo SNAPSHOT_OK", - "kind": "execute", - "status": "in_progress", - "rawInput": "echo SNAPSHOT_OK", - "content": [ - { - "type": "content", - "content": { - "type": "text", - "text": "Run the exact echo command requested" - } - } - ] - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "tool_call_update", - "toolCallId": "call_00_waDnb5eZcD1dBV49O7F39256", - "status": "completed", - "content": [ - { - "type": "content", - "content": { - "type": "text", - "text": "```console\nSNAPSHOT_OK\n```" - } - } - ] - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "The" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " command" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " ran" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " successfully" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " and" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " output" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " \"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "S" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "NA" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "PS" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "H" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "OT" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "_OK" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "\"." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " Now" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " I" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " need" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " to" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " reply" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " with" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " the" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " single" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " word" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": " \"" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "D" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "ONE" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_thought_chunk", - "content": { - "type": "text", - "text": "\"." - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "D" - } - } - } -} -{ - "jsonrpc": "2.0", - "method": "session/update", - "params": { - "sessionId": "{{sessionId}}", - "update": { - "sessionUpdate": "agent_message_chunk", - "content": { - "type": "text", - "text": "ONE" - } - } - } -} -{ - "jsonrpc": "2.0", - "id": 3, - "result": { - "stopReason": "end_turn" - } -}