refactor(acp): reduce bridge to automation protocol
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* Unit tests for the result-time contextual-diff computation (`src/diff.ts`):
|
||||
* the pure before/after → {@link FileDiff}[] hunk builder and the defensive
|
||||
* `meta` narrowing. These pin the exact hunk reconstruction (context lines,
|
||||
* multi-hunk replaceAll, pure insertion/deletion, no-op) the ACP bridge renders.
|
||||
* multi-hunk replaceAll, pure insertion/deletion, no-op) that UIs render.
|
||||
*/
|
||||
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
@@ -284,8 +284,8 @@ describe('bare provider (no dsh-fs-policy)', () => {
|
||||
})
|
||||
|
||||
// Per-session cwd: a relative file_path resolves against the calling session's workspace
|
||||
// (`exec.agent.session.header.cwd`), not the backend's config.cwd — so an ACP editor's
|
||||
// per-session dir wins, matching dsh-tool-bash.
|
||||
// (`exec.agent.session.header.cwd`), not the backend's config.cwd, so the
|
||||
// caller-selected session workspace wins, matching dsh-tool-bash.
|
||||
describe('per-session cwd', () => {
|
||||
let sessionDir: string
|
||||
beforeEach(async () => {
|
||||
|
||||
@@ -425,8 +425,8 @@ describe('edit tool', () => {
|
||||
})
|
||||
|
||||
describe('tool-owned presentation (pure presentCall)', () => {
|
||||
// presentCall is a pure display function of args (no I/O); it drives the ACP
|
||||
// card's title/kind and the `locations` an editor follows along to.
|
||||
// presentCall is a pure display function of args (no I/O); it drives the
|
||||
// card's title/kind and the `locations` a UI follows along to.
|
||||
const presentCall = async (name: string, args: unknown) => {
|
||||
const { ctx } = await setup()
|
||||
return ctx.tools.get(name)?.presentCall?.(args)
|
||||
@@ -478,7 +478,7 @@ describe('tool-owned presentation (pure presentCall)', () => {
|
||||
|
||||
describe('result-time contextual diff (meta + presentResult)', () => {
|
||||
// An edit records the applied contextual hunk on `tool/result` meta, and the tool's
|
||||
// presentResult narrows it back into a `diff` result card the bridge renders.
|
||||
// presentResult narrows it back into a replayable `diff` result card.
|
||||
const withContext = 'a\nb\nc\nOLD\nd\ne\nf\n'
|
||||
|
||||
it('edit: execute attaches the applied hunk as meta { diffs }', async () => {
|
||||
@@ -519,9 +519,8 @@ describe('result-time contextual diff (meta + presentResult)', () => {
|
||||
})
|
||||
|
||||
it('write CREATE: an empty applied-diff projection still falls back to the whole-file diff card', async () => {
|
||||
// A create has no prior content, yet the completed card must be a `diff` — an
|
||||
// ACP tool_call_update.content REPLACES the call's content, so a non-diff result would
|
||||
// clobber the pending new-file diff.
|
||||
// A create has no prior content, yet the completed replacement view must
|
||||
// remain a diff instead of clobbering the pending new-file diff with text.
|
||||
const { ctx } = await setup()
|
||||
const session = { header: {} }
|
||||
const result = await call(ctx, 'write', { file_path: 'new.txt', content: 'fresh\n' }, { session })
|
||||
|
||||
Reference in New Issue
Block a user