341ff656dc
Phase 2 of #23: - Planner schema compact: {hash, title} only, details stored via CAS CLI - Planner prompt instructs agent to shell out `cas put` for each phase - Coder prompt instructs agent to `cas get` for phase details, report hash - Moderator compares hashes instead of names - Removed COMPLETED_PHASE_SENTINELS — hash matching eliminates ambiguity Refs #23
27 lines
1.3 KiB
TypeScript
27 lines
1.3 KiB
TypeScript
import type { RoleDefinition } from "@uncaged/workflow";
|
|
import * as z from "zod/v4";
|
|
|
|
export const coderMetaSchema = z.object({
|
|
completedPhase: z.string(),
|
|
filesChanged: z.array(z.string()),
|
|
summary: z.string(),
|
|
});
|
|
|
|
export type CoderMeta = z.infer<typeof coderMetaSchema>;
|
|
|
|
const CODER_SYSTEM = `You are a **coder**. Read the thread for the plan and work on the NEXT incomplete phase only.
|
|
Each planner phase is identified by a content-hash and a title. To read a phase's full details (name, description, acceptance criteria), run:
|
|
|
|
uncaged-workflow cas get <thread-id> <hash>
|
|
|
|
Report which phase you completed using the phase **hash** (not the title). If you legitimately finish every remaining phase in this single turn, set completedPhase to the **last** phase hash in the plan (the workflow treats that as full completion). List the files you changed and summarize what you did.`;
|
|
|
|
export const coderRole: RoleDefinition<CoderMeta> = {
|
|
description:
|
|
"Implements the next incomplete planner phase and reports structured completion metadata.",
|
|
systemPrompt: CODER_SYSTEM,
|
|
extractPrompt:
|
|
"Extract completedPhase: the planner phase hash finished this round (exact hash string from the plan). If multiple phases were finished in one round, use the last finished phase hash. Extract filesChanged and a summary of the work.",
|
|
schema: coderMetaSchema,
|
|
};
|