File size: 2,024 Bytes
ca8ab2d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | import { shouldAutoContinueTruncatedToolResponse } from '../dist/handler.js';
let passed = 0;
let failed = 0;
function test(name, fn) {
try {
fn();
console.log(` ✅ ${name}`);
passed++;
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
console.error(` ❌ ${name}`);
console.error(` ${message}`);
failed++;
}
}
function assertEqual(actual, expected, message) {
if (actual !== expected) {
throw new Error(message || `Expected ${expected}, got ${actual}`);
}
}
console.log('\n📦 handler 截断续写判定\n');
test('短参数工具调用可恢复时不再继续续写', () => {
const text = [
'我先读取配置文件。',
'',
'```json action',
'{',
' "tool": "Read",',
' "parameters": {',
' "file_path": "/app/config.yaml"',
' }',
].join('\n');
assertEqual(
shouldAutoContinueTruncatedToolResponse(text, true),
false,
'Read 这类短参数工具不应继续续写',
);
});
test('大参数写入工具仍然继续续写', () => {
const longContent = 'A'.repeat(4000);
const text = [
'```json action',
'{',
' "tool": "Write",',
' "parameters": {',
' "file_path": "/tmp/large.txt",',
` "content": "${longContent}`,
].join('\n');
assertEqual(
shouldAutoContinueTruncatedToolResponse(text, true),
true,
'Write 大内容仍应继续续写以补全参数',
);
});
test('无工具代码块但文本明显截断时继续续写', () => {
const text = '```ts\nexport const answer = {';
assertEqual(
shouldAutoContinueTruncatedToolResponse(text, true),
true,
'未形成可恢复工具调用时应继续续写',
);
});
console.log(`\n结果: ${passed} 通过 / ${failed} 失败 / ${passed + failed} 总计\n`);
if (failed > 0) process.exit(1);
|