diff --git a/packages/node-runtime/src/ai/summary/__tests__/summary.test.ts b/packages/node-runtime/src/ai/summary/__tests__/summary.test.ts index f66192bf..b552a32f 100644 --- a/packages/node-runtime/src/ai/summary/__tests__/summary.test.ts +++ b/packages/node-runtime/src/ai/summary/__tests__/summary.test.ts @@ -107,6 +107,28 @@ describe('generateSessionSummary', () => { assert.equal(result.summary, 'Mock summary result') }) + it('does not write generated summary plaintext to logs', async () => { + const messages: SummaryMessage[] = Array.from({ length: 5 }, (_, index) => ({ + senderName: `User${index}`, + content: `Message content number ${index} with enough text`, + })) + const logMessages: string[] = [] + const deps = mockDeps(messages) + deps.logger = { + info: (_category, message) => logMessages.push(message), + error: (_category, message) => logMessages.push(message), + } + + const result = await generateSessionSummary(deps, 7) + + assert.equal(result.success, true) + assert.ok(logMessages.some((message) => message.includes('segment 7'))) + assert.equal( + logMessages.some((message) => message.includes('Mock summary result')), + false + ) + }) + const errorCases: Array<{ name: string; messages: SummaryMessage[] | null }> = [ { name: 'returns error when too few messages', messages: [{ senderName: 'A', content: 'hi' }] }, { name: 'returns error when session not found', messages: null }, diff --git a/packages/node-runtime/src/ai/summary/index.ts b/packages/node-runtime/src/ai/summary/index.ts index 4e811e21..0a0e0576 100644 --- a/packages/node-runtime/src/ai/summary/index.ts +++ b/packages/node-runtime/src/ai/summary/index.ts @@ -308,7 +308,8 @@ export async function generateSessionSummary( summary = postProcessSummary(summary, lengthLimit) deps.saveSummary(segmentId, summary) - log?.info('Summary', `Summary generated: "${summary.slice(0, 50)}..."`) + // 摘要属于用户聊天内容,日志只记录定位故障所需的元数据,避免持久化明文。 + log?.info('Summary', `Summary generated for segment ${segmentId} (${summary.length} characters)`) return { success: true, summary } } catch (error) { log?.error('Summary', 'Summary generation failed', error) diff --git a/src/components/analysis/MemoryTab.vue b/src/components/analysis/MemoryTab.vue index 6563af27..a21858c3 100644 --- a/src/components/analysis/MemoryTab.vue +++ b/src/components/analysis/MemoryTab.vue @@ -1,33 +1,32 @@ diff --git a/src/components/common/ChatRecord/ChatRecordDrawer.vue b/src/components/common/ChatRecord/ChatRecordDrawer.vue index 8984e17f..410b5355 100644 --- a/src/components/common/ChatRecord/ChatRecordDrawer.vue +++ b/src/components/common/ChatRecord/ChatRecordDrawer.vue @@ -1,25 +1,15 @@ - - diff --git a/src/components/common/ChatRecord/ChatRecordWorkspace.vue b/src/components/common/ChatRecord/ChatRecordWorkspace.vue new file mode 100644 index 00000000..8fa6f058 --- /dev/null +++ b/src/components/common/ChatRecord/ChatRecordWorkspace.vue @@ -0,0 +1,264 @@ + + + + + diff --git a/src/components/common/ChatRecord/FilterPanel.vue b/src/components/common/ChatRecord/FilterPanel.vue index c8d13586..abe04a1a 100644 --- a/src/components/common/ChatRecord/FilterPanel.vue +++ b/src/components/common/ChatRecord/FilterPanel.vue @@ -124,42 +124,37 @@ function resetFilter() {