openpencil/packages/harness/tests/protocol.test.ts
Danila Poyarkov 83a5ea1b42
feat(ai): add HarnessAgent sidecar foundation (#560)
* feat(ai): add HarnessAgent sidecar foundation

* feat(ai): integrate Pi as a Harness provider

* fix(ai): harden Harness provider integration

* fix(ai): address Harness integration review

* fix(ai): align Harness code with project conventions

* fix(ai): preserve Harness sessions on cancellation

* test(ai): cover Harness JSONL framing

* refactor(ai): generalize Harness sidecar adapters

* fix(ci): build Harness sidecar for native checks
2026-08-19 17:41:10 +03:00

62 lines
1.7 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { MAX_PROMPT_LENGTH, parseHarnessRequest } from '../src/protocol'
describe('harness sidecar protocol', () => {
test('parses a provider-neutral session configuration', () => {
expect(
parseHarnessRequest(
JSON.stringify({
id: 'request-1',
method: 'session.create',
params: {
sessionId: 'session-1',
configuration: {
adapter: 'pi',
sandbox: 'just-bash',
model: 'provider/model',
settings: { thinkingLevel: 'high' }
}
}
})
)
).toMatchObject({
method: 'session.create',
params: {
configuration: { adapter: 'pi', sandbox: 'just-bash', model: 'provider/model' }
}
})
})
test('parses a turn request', () => {
expect(
parseHarnessRequest(
JSON.stringify({
id: 'request-1',
method: 'session.turn',
params: { sessionId: 'session-1', prompt: 'Inspect the document' }
})
)
).toEqual({
id: 'request-1',
method: 'session.turn',
params: { sessionId: 'session-1', prompt: 'Inspect the document' }
})
})
test('rejects unknown methods and oversized prompts', () => {
expect(() =>
parseHarnessRequest(JSON.stringify({ id: 'request-1', method: 'unknown' }))
).toThrow('Unknown harness method')
expect(() =>
parseHarnessRequest(
JSON.stringify({
id: 'request-1',
method: 'session.turn',
params: { sessionId: 'session-1', prompt: 'x'.repeat(MAX_PROMPT_LENGTH + 1) }
})
)
).toThrow('prompt exceeds')
})
})