csa / test /unit-handler-truncation.mjs
ricebug's picture
Upload 76 files
ca8ab2d verified
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);