moving
This commit is contained in:
@@ -1,11 +1,32 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { createLogger } from '@waggle/hive-mind-shim-core';
|
||||
import {
|
||||
buildHookBridgeOptions,
|
||||
parseHookArgs,
|
||||
pickStringField,
|
||||
pickStringFromObject,
|
||||
safeJsonParse,
|
||||
} from '../../src/hooks/_shared.js';
|
||||
|
||||
describe('buildHookBridgeOptions', () => {
|
||||
it('uses one bounded attempt for every Claude hook', () => {
|
||||
const logger = createLogger({ name: 'claude-hook-test' });
|
||||
const sessionStart = buildHookBridgeOptions(
|
||||
logger,
|
||||
'C:\\waggle\\hive-mind-cli.js',
|
||||
);
|
||||
expect(sessionStart).toMatchObject({
|
||||
logger,
|
||||
cli_path: 'C:\\waggle\\hive-mind-cli.js',
|
||||
timeout_ms: 10_000,
|
||||
max_retries: 0,
|
||||
});
|
||||
const stop = buildHookBridgeOptions(logger, 'C:\\waggle\\hive-mind-cli.js');
|
||||
expect(stop.timeout_ms).toBe(10_000);
|
||||
expect(stop.max_retries).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('safeJsonParse', () => {
|
||||
it('returns {} for empty / whitespace input', () => {
|
||||
expect(safeJsonParse('')).toEqual({});
|
||||
|
||||
@@ -3,12 +3,39 @@ import { runStop, stopHandler } from '../../src/hooks/stop.js';
|
||||
import { makeHookCaptures, makeMockBridge } from './_test-helpers.js';
|
||||
|
||||
describe('stop handler', () => {
|
||||
it('extracts response from payload.response or payload.assistant_message', () => {
|
||||
it('extracts response from current and legacy Claude Stop payload fields', () => {
|
||||
expect(stopHandler.parse({ response: 'r' }).response).toBe('r');
|
||||
expect(stopHandler.parse({ assistant_message: 'a' }).response).toBe('a');
|
||||
expect(stopHandler.parse({ last_assistant_message: 'latest' }).response).toBe('latest');
|
||||
expect(stopHandler.parse({
|
||||
last_assistant_message: 'current',
|
||||
response: 'legacy',
|
||||
}).response).toBe('current');
|
||||
expect(stopHandler.parse({}).response).toBe('');
|
||||
});
|
||||
|
||||
it('saves the assistant turn from a Claude Code 2.1 host-shaped payload', async () => {
|
||||
const bridge = makeMockBridge();
|
||||
const cap = makeHookCaptures();
|
||||
await runStop({
|
||||
readStdin: async () => JSON.stringify({
|
||||
session_id: 'host-session',
|
||||
transcript_path: 'C:\\tmp\\transcript.jsonl',
|
||||
cwd: 'C:\\project',
|
||||
hook_event_name: 'Stop',
|
||||
stop_hook_active: false,
|
||||
last_assistant_message: 'CLAUDE_HOST_CANARY_OK',
|
||||
}),
|
||||
writeStdout: cap.writeStdout,
|
||||
exit: cap.exit,
|
||||
bridge,
|
||||
});
|
||||
|
||||
expect(bridge.saveMemory).toHaveBeenCalledTimes(1);
|
||||
expect(bridge.saveMemory.mock.calls[0][0].content).toContain('CLAUDE_HOST_CANARY_OK');
|
||||
expect(cap.exits).toEqual([0]);
|
||||
});
|
||||
|
||||
it('summarizes long responses and saves an important frame', async () => {
|
||||
const bridge = makeMockBridge();
|
||||
const cap = makeHookCaptures();
|
||||
|
||||
Reference in New Issue
Block a user