吸收数字员工长期记忆闭环
This commit is contained in:
@@ -17,8 +17,13 @@ import {
|
||||
saveDigitalEmployeeCronSettings,
|
||||
readDigitalEmployeeScheduleRuns,
|
||||
saveDigitalEmployeeUiState,
|
||||
listDigitalEmployeeMemories,
|
||||
upsertDigitalEmployeeMemory,
|
||||
deleteDigitalEmployeeMemory,
|
||||
syncQimingclawMemoryEntries,
|
||||
type DigitalEmployeeManagedService,
|
||||
type DigitalEmployeeGovernanceCommandRecord,
|
||||
type DigitalEmployeeMemoryUpsertInput,
|
||||
type DigitalEmployeeServiceStatus,
|
||||
type DigitalEmployeeSnapshot,
|
||||
type DigitalEmployeeUiStateUpdate,
|
||||
@@ -33,6 +38,7 @@ import {
|
||||
} from "../services/digitalEmployee/syncService";
|
||||
import { listDigitalEmployeePlanTemplates } from "../services/digitalEmployee/planTemplateService";
|
||||
import { listDigitalEmployeeSkillCapabilities } from "../services/digitalEmployee/skillCatalogService";
|
||||
import { memoryService } from "../services/memory";
|
||||
|
||||
export function registerDigitalEmployeeHandlers(ctx: HandlerContext): void {
|
||||
ipcMain.handle("digitalEmployee:getSnapshot", async () => {
|
||||
@@ -70,6 +76,50 @@ export function registerDigitalEmployeeHandlers(ctx: HandlerContext): void {
|
||||
return listDigitalEmployeePlanTemplates();
|
||||
});
|
||||
|
||||
ipcMain.handle("digitalEmployee:listMemories", async (_, options?: { query?: string; category?: string; limit?: number }) => {
|
||||
if (memoryService.isInitialized()) {
|
||||
syncQimingclawMemoryEntries(memoryService.listMemories({ status: "active", limit: options?.limit ?? 300 }));
|
||||
}
|
||||
return listDigitalEmployeeMemories(options ?? {});
|
||||
});
|
||||
|
||||
ipcMain.handle("digitalEmployee:addMemory", async (_, input: DigitalEmployeeMemoryUpsertInput) => {
|
||||
const content = typeof input?.content === "string" ? input.content : "";
|
||||
const category = typeof input?.category === "string" ? input.category : "fact";
|
||||
const key = typeof input?.key === "string" && input.key.trim() ? input.key.trim() : undefined;
|
||||
let memoryServiceId: string | null = null;
|
||||
if (memoryService.isInitialized()) {
|
||||
memoryServiceId = memoryService.addMemory({
|
||||
id: input.id || key,
|
||||
text: content,
|
||||
category: category as never,
|
||||
source: "core",
|
||||
sourcePath: "MEMORY.md",
|
||||
status: "active",
|
||||
});
|
||||
}
|
||||
return upsertDigitalEmployeeMemory({
|
||||
...input,
|
||||
id: input.id || memoryServiceId || key,
|
||||
key: key || memoryServiceId || input.id,
|
||||
content,
|
||||
category,
|
||||
source: memoryServiceId ? "qimingclaw-memory-service" : "qimingclaw-digital-local",
|
||||
payload: {
|
||||
...(input.payload ?? {}),
|
||||
memoryServiceId,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
ipcMain.handle("digitalEmployee:deleteMemory", async (_, keyOrId: string) => {
|
||||
const deleted = deleteDigitalEmployeeMemory(keyOrId);
|
||||
if (deleted && memoryService.isInitialized()) {
|
||||
memoryService.deleteMemory(deleted.id);
|
||||
}
|
||||
return deleted;
|
||||
});
|
||||
|
||||
ipcMain.handle(
|
||||
"digitalEmployee:saveUiState",
|
||||
async (_, update: DigitalEmployeeUiStateUpdate) => {
|
||||
|
||||
Reference in New Issue
Block a user