All checks were successful
ci/woodpecker/push/api Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com> Co-committed-by: Jason Woltje <jason@diversecanvas.com>
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
import { Injectable, NotFoundException } from "@nestjs/common";
|
|
import { PrismaService } from "../prisma/prisma.service";
|
|
import { Prisma } from "@prisma/client";
|
|
import type { UpsertAgentMemoryDto } from "./dto";
|
|
|
|
@Injectable()
|
|
export class AgentMemoryService {
|
|
constructor(private readonly prisma: PrismaService) {}
|
|
|
|
/**
|
|
* Upsert a memory entry for an agent.
|
|
*/
|
|
async upsert(workspaceId: string, agentId: string, key: string, dto: UpsertAgentMemoryDto) {
|
|
return this.prisma.agentMemory.upsert({
|
|
where: {
|
|
workspaceId_agentId_key: { workspaceId, agentId, key },
|
|
},
|
|
create: {
|
|
workspaceId,
|
|
agentId,
|
|
key,
|
|
value: dto.value as Prisma.InputJsonValue,
|
|
},
|
|
update: {
|
|
value: dto.value as Prisma.InputJsonValue,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* List all memory entries for an agent in a workspace.
|
|
*/
|
|
async findAll(workspaceId: string, agentId: string) {
|
|
return this.prisma.agentMemory.findMany({
|
|
where: { workspaceId, agentId },
|
|
orderBy: { key: "asc" },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get a single memory entry by key.
|
|
*/
|
|
async findOne(workspaceId: string, agentId: string, key: string) {
|
|
const entry = await this.prisma.agentMemory.findUnique({
|
|
where: {
|
|
workspaceId_agentId_key: { workspaceId, agentId, key },
|
|
},
|
|
});
|
|
|
|
if (!entry) {
|
|
throw new NotFoundException(`Memory key "${key}" not found for agent "${agentId}"`);
|
|
}
|
|
|
|
return entry;
|
|
}
|
|
|
|
/**
|
|
* Delete a memory entry by key.
|
|
*/
|
|
async remove(workspaceId: string, agentId: string, key: string) {
|
|
const entry = await this.prisma.agentMemory.findUnique({
|
|
where: {
|
|
workspaceId_agentId_key: { workspaceId, agentId, key },
|
|
},
|
|
});
|
|
|
|
if (!entry) {
|
|
throw new NotFoundException(`Memory key "${key}" not found for agent "${agentId}"`);
|
|
}
|
|
|
|
await this.prisma.agentMemory.delete({
|
|
where: {
|
|
workspaceId_agentId_key: { workspaceId, agentId, key },
|
|
},
|
|
});
|
|
|
|
return { message: "Memory entry deleted successfully" };
|
|
}
|
|
}
|