import { describe, expect, it } from 'vitest';
import {
AGENT_PROCESS_PREVIEW_MAX_CHARS,
agentProcessPreview,
} from '../src/features/project-workspace/agentProcessPreview';
describe('思考过程单行预览模型', () => {
it('去掉 Markdown 符号与链接目标,只留字面文字', () => {
expect(agentProcessPreview('**Planning** 一下')).toBe('Planning 一下');
expect(
agentProcessPreview(
'先看 [设计文档](https://internal.example/secret) 再动手',
),
).toBe('先看 设计文档 再动手');
expect(agentProcessPreview('用 `npm run build` 验证')).toBe(
'用 npm run build 验证',
);
});
it('原始 HTML 不进预览(不渲染、也不当文字)', () => {
expect(agentProcessPreview('')).toBe('');
expect(agentProcessPreview('
')).toBe('');
expect(
agentProcessPreview('先检查\n\n\n\n再继续'),
).toBe('先检查 再继续');
// 行内 HTML 与其文字内容都不泄漏。
expect(agentProcessPreview('结果 加粗 完成')).toBe('结果 加粗 完成');
});
it('GFM 删除线按同源插件解析,波浪号不进预览', () => {
// 与正文同源:删除线保留其文字(正文里也是这段字),但 `~~` 控制符不进预览。
expect(agentProcessPreview('~~删除这段~~ 保留这段')).toBe(
'删除这段 保留这段',
);
expect(agentProcessPreview('~~删除~~')).toBe('删除');
});
it('压成单行并按上限省略', () => {
expect(agentProcessPreview('第一行\n\n第二行')).toBe('第一行 第二行');
expect(agentProcessPreview('- 第一项\n- 第二项')).toBe('第一项 第二项');
const long = 'x'.repeat(AGENT_PROCESS_PREVIEW_MAX_CHARS + 20);
const preview = agentProcessPreview(long);
expect(preview.endsWith('…')).toBe(true);
expect(preview.length).toBeLessThanOrEqual(
AGENT_PROCESS_PREVIEW_MAX_CHARS + 1,
);
expect(agentProcessPreview('')).toBe('');
expect(agentProcessPreview(' ')).toBe('');
});
});