mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
ACP v1 requires every agent to accept text AND resource_link prompt content; the automation rewrite dropped the resource_link half of that baseline. Restore the old bracketed-reference flattening in the codec, reject only beyond-baseline blocks, and update the package contract and Agent Note. Also release the per-session prompt slot when agent.send() throws synchronously (an agent disposed outside the bridge would otherwise wedge the session into permanent 'already in flight' rejections), drop the tautological version-negotiation branch, prove the scenario env layer reaches the snapshot subprocess, pin bridge-side fail-closed permission errors, and correct two overpromising test names.
39 lines
1.7 KiB
TypeScript
39 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import type { TurnEndReason } from '@deepseek-ai/dsh-session'
|
|
import { acpPromptToText, promptHasUnsupportedContent, turnEndToStopReason } from '../src/codec.ts'
|
|
|
|
describe('ACP automation codec', () => {
|
|
it('maps every known turn outcome to a legal stop reason', () => {
|
|
const cases: [TurnEndReason, string][] = [
|
|
[{ kind: 'completed' }, 'end_turn'],
|
|
[{ kind: 'max-tokens' }, 'max_tokens'],
|
|
[{ kind: 'aborted' }, 'cancelled'],
|
|
[{ kind: 'disposed' }, 'cancelled'],
|
|
[{ kind: 'rejected', reason: 'blocked' }, 'cancelled'],
|
|
[{ kind: 'interrupted' }, 'cancelled'],
|
|
[{ kind: 'error', step: 1, message: 'boom' }, 'end_turn'],
|
|
]
|
|
for (const [reason, expected] of cases) expect(turnEndToStopReason(reason)).toBe(expected)
|
|
})
|
|
|
|
it('uses a legal fallback for merge-extensible future outcomes', () => {
|
|
expect(turnEndToStopReason({ kind: 'future' } as unknown as TurnEndReason)).toBe('end_turn')
|
|
})
|
|
|
|
it('flattens baseline blocks and rejects everything richer', () => {
|
|
expect(acpPromptToText([{ type: 'text', text: 'a' }, { type: 'text', text: 'b' }])).toBe('ab')
|
|
expect(acpPromptToText([
|
|
{ type: 'text', text: 'see' },
|
|
{ type: 'resource_link', name: 'x', uri: 'file:///x' },
|
|
])).toBe('see\n[resource_link name="x" uri="file:///x"]\n')
|
|
expect(acpPromptToText([{ type: 'image', data: '', mimeType: 'image/png' }])).toBe('')
|
|
expect(promptHasUnsupportedContent([
|
|
{ type: 'text', text: 'ok' },
|
|
{ type: 'resource_link', name: 'x', uri: 'file:///x' },
|
|
])).toBe(false)
|
|
expect(promptHasUnsupportedContent([
|
|
{ type: 'image', data: '', mimeType: 'image/png' },
|
|
])).toBe(true)
|
|
})
|
|
})
|