agent-ecosystem/test/main/services/team/HistoricalBoardMcpRawProbe.test.ts

99 lines
3.1 KiB
TypeScript

import { mkdtemp, rm, writeFile } from 'fs/promises';
import { tmpdir } from 'os';
import path from 'path';
import { afterEach, describe, expect, it } from 'vitest';
import { HistoricalBoardMcpRawProbe } from '../../../../src/main/services/team/taskLogs/stream/HistoricalBoardMcpRawProbe';
import type { TeamTask } from '../../../../src/shared/types';
function makeTask(): TeamTask {
return {
id: '11111111-2222-3333-4444-555555555555',
displayId: 'abcd1234',
subject: 'Test task',
status: 'in_progress',
};
}
describe('HistoricalBoardMcpRawProbe', () => {
let tempDir: string | null = null;
afterEach(async () => {
if (tempDir) {
await rm(tempDir, { recursive: true, force: true });
tempDir = null;
}
});
it('returns only files that contain both a task reference and board MCP marker', async () => {
tempDir = await mkdtemp(path.join(tmpdir(), 'historical-board-raw-probe-'));
const hitFile = path.join(tempDir, 'hit.jsonl');
const taskOnlyFile = path.join(tempDir, 'task-only.jsonl');
const markerOnlyFile = path.join(tempDir, 'marker-only.jsonl');
await writeFile(
hitFile,
JSON.stringify({
message: {
content: [
{
type: 'tool_use',
name: 'mcp__agent-teams__task_add_comment',
input: { taskId: '#abcd1234' },
},
],
},
}) + '\n',
'utf8'
);
await writeFile(taskOnlyFile, 'the task #abcd1234 is mentioned without a tool\n', 'utf8');
await writeFile(markerOnlyFile, 'mcp__agent-teams__task_add_comment unrelated\n', 'utf8');
const result = await new HistoricalBoardMcpRawProbe().findCandidateFiles({
task: makeTask(),
transcriptFiles: [markerOnlyFile, hitFile, taskOnlyFile],
});
expect(result.filePaths).toEqual([hitFile]);
expect(result.scannedFileCount).toBe(3);
expect(result.hitCount).toBe(1);
});
it('matches canonical task ids as well as display ids', async () => {
tempDir = await mkdtemp(path.join(tmpdir(), 'historical-board-raw-probe-'));
const hitFile = path.join(tempDir, 'hit-canonical.jsonl');
await writeFile(
hitFile,
'agent_teams_task_complete ' + '11111111-2222-3333-4444-555555555555\n',
'utf8'
);
const result = await new HistoricalBoardMcpRawProbe().findCandidateFiles({
task: makeTask(),
transcriptFiles: [hitFile],
});
expect(result.filePaths).toEqual([hitFile]);
});
it('does not match task subject text without task id or display id evidence', async () => {
tempDir = await mkdtemp(path.join(tmpdir(), 'historical-board-raw-probe-'));
const subjectOnlyFile = path.join(tempDir, 'subject-only.jsonl');
await writeFile(
subjectOnlyFile,
'mcp__agent-teams__task_add_comment mentions only Test task subject text\n',
'utf8'
);
const result = await new HistoricalBoardMcpRawProbe().findCandidateFiles({
task: makeTask(),
transcriptFiles: [subjectOnlyFile],
});
expect(result.filePaths).toEqual([]);
expect(result.scannedFileCount).toBe(1);
expect(result.hitCount).toBe(0);
});
});