28 lines
796 B
TypeScript

import type { LlmProvider } from "@uncaged/nerve-workflow-utils";
import { createCursorRole } from "@uncaged/nerve-workflow-utils";
import { coderPrompt } from "./prompt.js";
import { z } from "zod";
export type CoderMeta = { filesCreated: boolean };
export const coderMetaSchema = z.object({
filesCreated: z.boolean().describe("true if the sense files were created"),
});
export type BuildCoderDeps = {
provider: LlmProvider;
cwd: string;
sensesDir: string;
nerveRoot: string;
};
export function buildCoderRole({ provider, cwd, sensesDir, nerveRoot }: BuildCoderDeps) {
return createCursorRole<CoderMeta>({
cwd,
mode: "default",
prompt: async (threadId) => coderPrompt({ threadId, sensesDir, nerveRoot }),
extract: { provider, schema: coderMetaSchema },
});
}