feat: AI 会话支持按轮保存完整笔记
This commit is contained in:
@@ -180,7 +180,7 @@ test('messages 支持 limit 与 before 游标翻页', () => {
|
||||
|
||||
// --- 字段限长 ---
|
||||
|
||||
test('字段限长与 store.limitedString 一致:超长截断而不是抛错', () => {
|
||||
test('受限字段超长时截断而不是抛错', () => {
|
||||
const { sessions } = fresh('limits');
|
||||
const L = sessions.LIMITS;
|
||||
const meta = sessions.create({ title: '标'.repeat(L.title + 50) });
|
||||
@@ -189,15 +189,31 @@ test('字段限长与 store.limitedString 一致:超长截断而不是抛错',
|
||||
assert.strictEqual(user.text.length, L.question, `user 文本应截到 question=${L.question}`);
|
||||
const p = sessions.appendAssistant(meta.id, {});
|
||||
const done = sessions.finishAssistant(meta.id, p.id, {
|
||||
text: '答'.repeat(L.messageText + 100),
|
||||
text: '回答',
|
||||
error: '错'.repeat(L.errorText + 100)
|
||||
});
|
||||
assert.strictEqual(done.text.length, L.messageText, `assistant 文本应截到 messageText=${L.messageText}`);
|
||||
assert.strictEqual(done.text, '回答');
|
||||
assert.strictEqual(done.error.length, L.errorText, `error 应截到 ${L.errorText}`);
|
||||
const renamed = sessions.rename(meta.id, '新'.repeat(L.title + 10));
|
||||
assert.strictEqual(renamed.title.length, L.title);
|
||||
});
|
||||
|
||||
test('超过 20000 字的 assistant 正文经 append、finish 与磁盘恢复后保持完整', () => {
|
||||
const { sessions, dir } = fresh('long-assistant');
|
||||
const meta = sessions.create({});
|
||||
sessions.appendUser(meta.id, { text: '请生成长回答' });
|
||||
const initial = `占位开头${'初'.repeat(21000)}占位结尾`;
|
||||
const placeholder = sessions.appendAssistant(meta.id, { text: initial });
|
||||
assert.strictEqual(placeholder.text, initial, 'appendAssistant 不应静默截断 assistant 正文');
|
||||
const answer = `回答开头${'答'.repeat(25000)}回答结尾`;
|
||||
const done = sessions.finishAssistant(meta.id, placeholder.id, { text: answer });
|
||||
assert.strictEqual(done.text, answer, 'finishAssistant 不应静默截断 assistant 正文');
|
||||
const raw = JSON.parse(fs.readFileSync(sessionFile(dir, meta.id), 'utf8'));
|
||||
assert.strictEqual(raw.messages[1].text, answer, '超过 20000 字的回答必须完整落盘');
|
||||
const restored = at(dir).sessions.messages(meta.id);
|
||||
assert.strictEqual(restored.messages[1].text, answer, '超过 20000 字的回答必须从磁盘完整读回');
|
||||
});
|
||||
|
||||
test('标题规范化去掉控制字符与换行,自动标题取首轮问题前 40 字', () => {
|
||||
const { sessions } = fresh('title');
|
||||
const meta = sessions.create({ title: ' 带\n换行\u0007和控制符 ' });
|
||||
|
||||
Reference in New Issue
Block a user