v0.1.2: 全项目代码审查修复 + 子代理编排器 + 上下文压缩 + 并行工具执行
后端修复: Ollama adapter 移除死代码/修复超时硬编码/iteration硬编码/pullModel无超时/流异常断开补发DONE; SSE解析器支持非字符串arguments; Sandbox fail-closed安全加固; IPC移除未使用变量 新增功能: TaskOrchestrator子任务编排器; DelegateTaskTool委派工具; Agent Loop并行工具执行; 上下文自动压缩; 记忆检索注入System Prompt 前端修复: useAgentStream text_delta thought累积bug; 工具调用状态正确流转; 修复重复stateChange事件; TraceStep.thought正确填充
This commit is contained in:
@@ -85,6 +85,23 @@ export function registerAllIPCHandlers(
|
||||
const workspaceFiles = workspaceService.getFiles();
|
||||
const systemPrompt = contextBuilder.buildSystemPrompt(workspaceFiles);
|
||||
|
||||
// 检索与用户消息相关的记忆,注入到 System Prompt 动态区
|
||||
try {
|
||||
const memories = memoryManager.search(userMessage.content, { topK: 5, minImportance: 0.3 });
|
||||
if (memories.length > 0) {
|
||||
const memorySection = memories.map((m, i) =>
|
||||
`[${i + 1}] (${m.type}, 重要度: ${m.importance.toFixed(1)}) ${m.content.slice(0, 200)}`,
|
||||
).join('\n');
|
||||
const memoryBlock = `## Relevant Memories (Retrieved)\n${memorySection}`;
|
||||
systemPrompt.dynamicReminders = systemPrompt.dynamicReminders
|
||||
? `${systemPrompt.dynamicReminders}\n\n---\n\n${memoryBlock}`
|
||||
: memoryBlock;
|
||||
log.debug(`[AGENT] Injected ${memories.length} memories into system prompt`);
|
||||
}
|
||||
} catch (err) {
|
||||
log.warn('[AGENT] Memory retrieval failed, proceeding without memories:', err);
|
||||
}
|
||||
|
||||
// 监听 Agent Loop 事件
|
||||
const onStreamEvent = (event: MetonaStreamEvent) => {
|
||||
if (!mainWindow.isDestroyed()) {
|
||||
@@ -502,7 +519,6 @@ export function registerAllIPCHandlers(
|
||||
|
||||
ipcMain.handle('data:export', async (_event, sessionId?: string) => {
|
||||
try {
|
||||
const db = sessionService.getDB();
|
||||
if (sessionId) {
|
||||
// 导出单个会话
|
||||
const messages = sessionService.getMessages(sessionId);
|
||||
@@ -524,8 +540,8 @@ export function registerAllIPCHandlers(
|
||||
});
|
||||
|
||||
ipcMain.handle('data:clearSessions', async () => {
|
||||
const db = sessionService.getDB();
|
||||
try {
|
||||
const db = sessionService.getDB();
|
||||
db.exec('BEGIN');
|
||||
db.exec('DELETE FROM messages');
|
||||
db.exec('DELETE FROM sessions');
|
||||
@@ -533,6 +549,7 @@ export function registerAllIPCHandlers(
|
||||
log.info('[DATA] All sessions cleared');
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
try { db.exec('ROLLBACK'); } catch { /* 忽略回滚错误 */ }
|
||||
return { success: false, error: (error as Error).message };
|
||||
}
|
||||
});
|
||||
@@ -551,9 +568,9 @@ export function registerAllIPCHandlers(
|
||||
});
|
||||
|
||||
ipcMain.handle('data:clearAuditLogs', async () => {
|
||||
// 审计日志是 INSERT-ONLY,需要先禁用触发器
|
||||
const db = sessionService.getDB();
|
||||
try {
|
||||
// 审计日志是 INSERT-ONLY,需要先禁用触发器
|
||||
const db = sessionService.getDB();
|
||||
db.exec('BEGIN');
|
||||
db.exec('DROP TRIGGER IF EXISTS audit_no_delete');
|
||||
db.exec('DELETE FROM audit_logs');
|
||||
@@ -567,6 +584,7 @@ export function registerAllIPCHandlers(
|
||||
log.info('[DATA] Audit logs cleared');
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
try { db.exec('ROLLBACK'); } catch { /* 忽略回滚错误 */ }
|
||||
return { success: false, error: (error as Error).message };
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user