feat(memory): add gated agent recall and lifecycle controls

This commit is contained in:
john
2026-07-16 21:05:27 +08:00
parent c1012da120
commit 6e460336f7
13 changed files with 655 additions and 3 deletions
+31
View File
@@ -2291,6 +2291,37 @@ api.post('/user-memory/v1/sync', async (req, res) => {
}
});
api.get('/user-memory/v1/items', async (req, res) => {
const capabilityState = await ensureUserMemoryCapability(req, res);
if (!capabilityState) return;
try {
const items = await memoryV2.listMemories?.({
userId: req.currentUser.id,
status: String(req.query?.status ?? 'active'),
limit: req.query?.limit,
offset: req.query?.offset,
}) ?? [];
return res.json({ ok: true, items });
} catch (err) {
return res.status(500).json({ message: err instanceof Error ? err.message : '读取长期记忆失败' });
}
});
api.delete('/user-memory/v1/items/:memoryId', async (req, res) => {
const capabilityState = await ensureUserMemoryCapability(req, res);
if (!capabilityState) return;
try {
const result = await memoryV2.forgetMemory?.({
userId: req.currentUser.id,
memoryId: req.params.memoryId,
}) ?? { ok: false, skipped: true, reason: 'unavailable' };
if (result.skipped) return res.status(409).json(result);
return res.json(result);
} catch (err) {
return res.status(500).json({ message: err instanceof Error ? err.message : '删除长期记忆失败' });
}
});
api.get('/mindspace/v1/space', async (req, res) => {
if (!mindSpace || !ensureMindSpaceEnabled(res, req)) return;
const space = await mindSpace.getSpace(req.currentUser.id);