小橘 🍊(NEKO Team) c585e0d8a8 Refactor committer into Hermes agent with branch/commit/push workflow
Add solve-issue committer after implement; replace develop-sense and develop-workflow script roles with createRole(hermesAdapter). Implement prompt no longer does git; publish prompt asks for meaningful PR titles.

Refs #9

Made-with: Cursor
2026-04-29 10:44:28 +00:00

75 lines
2.3 KiB
TypeScript

import type { StartStep, WorkflowDefinition } from "@uncaged/nerve-core";
import { createCursorAdapter, cursorAdapter } from "@uncaged/nerve-adapter-cursor";
import { hermesAdapter } from "@uncaged/nerve-adapter-hermes";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { coderPrompt } from "./roles/coder/prompt.js";
import { coderMetaSchema } from "./roles/coder/index.js";
import { plannerPrompt } from "./roles/planner/prompt.js";
import { plannerMetaSchema } from "./roles/planner/index.js";
import { reviewerPrompt } from "./roles/reviewer/prompt.js";
import { reviewerMetaSchema } from "./roles/reviewer/index.js";
import { testerPrompt } from "./roles/tester/prompt.js";
import { testerMetaSchema } from "./roles/tester/index.js";
import { buildWorkspaceCommitterRole } from "./roles/committer/index.js";
import { moderator } from "./moderator.js";
import type { WorkflowMeta } from "./moderator.js";
export type BuildDevelopWorkflowDeps = {
extract: LlmExtractorConfig;
nerveRoot: string;
};
const CURSOR_TIMEOUT_MS = 300_000;
export function buildDevelopWorkflow({
extract,
nerveRoot,
}: BuildDevelopWorkflowDeps): WorkflowDefinition<WorkflowMeta> {
const roles = {
planner: createRole(
createCursorAdapter({
type: "cursor",
mode: "ask",
model: "auto",
timeout: CURSOR_TIMEOUT_MS,
}),
async (start: StartStep) => plannerPrompt({ threadId: start.meta.threadId }),
plannerMetaSchema,
extract,
),
coder: createRole(
cursorAdapter,
async (start: StartStep) => coderPrompt({ threadId: start.meta.threadId }),
coderMetaSchema,
extract,
),
reviewer: createRole(
hermesAdapter,
async (start: StartStep) =>
reviewerPrompt({ threadId: start.meta.threadId, nerveRoot }),
reviewerMetaSchema,
extract,
),
tester: createRole(
hermesAdapter,
async (start: StartStep) =>
testerPrompt({ threadId: start.meta.threadId, nerveRoot }),
testerMetaSchema,
extract,
),
committer: buildWorkspaceCommitterRole({
extract,
nerveRoot,
workflowName: "develop-workflow",
}),
};
return {
name: "develop-workflow",
roles,
moderator,
};
}