46 lines
1.8 KiB
TypeScript
46 lines
1.8 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { deliveryTargetFromCommand, replyTextFromResult } from './agent-delivery'
|
|
|
|
// Sender-side inter-agent deliveries render as "Messaged X" / "Message from
|
|
// X" notices instead of terminal transcript rows. This pins the detection
|
|
// (the canonical Bot Mode command shape) and the reply extraction.
|
|
describe('delivery command detection', () => {
|
|
it('matches the canonical delivery command', () => {
|
|
const cmd = 'hermes -p turqoise chat --in ~ -c "Bot Chat" -Q -q "Message from 🤖 Hermes (@hermes): hi there"'
|
|
|
|
expect(deliveryTargetFromCommand(cmd)).toBe('turqoise')
|
|
})
|
|
|
|
it('matches with a cd prefix and timeout wrapper', () => {
|
|
const cmd = 'cd ~ && timeout 240 hermes -p mr-tester chat --in "~" -Q -q "Message from 🤖 Hermes: hello"'
|
|
|
|
expect(deliveryTargetFromCommand(cmd)).toBe('mr-tester')
|
|
})
|
|
|
|
it('ignores ordinary terminal commands', () => {
|
|
expect(deliveryTargetFromCommand('ls -la')).toBeNull()
|
|
expect(deliveryTargetFromCommand('hermes -p turqoise chat -q "plain question"')).toBeNull()
|
|
expect(deliveryTargetFromCommand('hermes sessions list')).toBeNull()
|
|
})
|
|
})
|
|
|
|
describe('reply extraction', () => {
|
|
it('strips session_id bookkeeping and keeps the reply', () => {
|
|
const output = 'session_id: 20260813_220347_f69ac6\nHi Hermes! Good to hear from you.'
|
|
|
|
expect(replyTextFromResult({ output })).toBe('Hi Hermes! Good to hear from you.')
|
|
})
|
|
|
|
it('unwraps JSON-shaped terminal results', () => {
|
|
const result = JSON.stringify({ exit_code: 0, output: 'session_id: abc\nack' })
|
|
|
|
expect(replyTextFromResult(result)).toBe('ack')
|
|
})
|
|
|
|
it('returns empty for empty results', () => {
|
|
expect(replyTextFromResult(undefined)).toBe('')
|
|
expect(replyTextFromResult({ output: '' })).toBe('')
|
|
})
|
|
})
|