refactor: merge 7 workflow-role-* packages into templates

- planner/coder/reviewer/tester/committer → workflow-template-develop/src/roles/
- preparer/submitter → workflow-template-solve-issue/src/roles/
- Moved tests, updated imports, removed role packages
- 219 tests pass, build clean

Closes #76
Refs #75, #73

小橘 🍊
This commit is contained in:
2026-05-07 14:45:11 +00:00
parent c3272be760
commit 9c8b98a551
43 changed files with 38 additions and 252 deletions
-15
View File
@@ -1,15 +0,0 @@
{
"name": "@uncaged/workflow-role-coder",
"version": "0.1.0",
"type": "module",
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "echo 'TODO'",
"test": "echo no tests"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -1 +0,0 @@
export { type CoderMeta, coderMetaSchema, coderRole } from "./coder.js";
@@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist",
"composite": true
},
"include": ["src/**/*.ts"],
"references": [{ "path": "../workflow" }]
}
@@ -1,15 +0,0 @@
{
"name": "@uncaged/workflow-role-committer",
"version": "0.1.0",
"type": "module",
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "echo 'TODO'",
"test": "bun test"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -1 +0,0 @@
export { type CommitterMeta, committerMetaSchema, committerRole } from "./committer.js";
@@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist",
"composite": true
},
"include": ["src/**/*.ts"],
"references": [{ "path": "../workflow" }]
}
@@ -1,15 +0,0 @@
{
"name": "@uncaged/workflow-role-planner",
"version": "0.1.0",
"type": "module",
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "echo 'TODO'",
"test": "echo no tests"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -1,6 +0,0 @@
export {
type PlannerMeta,
phaseSchema,
plannerMetaSchema,
plannerRole,
} from "./planner.js";
@@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist",
"composite": true
},
"include": ["src/**/*.ts"],
"references": [{ "path": "../workflow" }]
}
@@ -1,15 +0,0 @@
{
"name": "@uncaged/workflow-role-preparer",
"version": "0.1.0",
"type": "module",
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "echo 'TODO'",
"test": "echo no tests"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -1,8 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist"
},
"include": ["src"]
}
@@ -1,15 +0,0 @@
{
"name": "@uncaged/workflow-role-reviewer",
"version": "0.1.0",
"type": "module",
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "echo 'TODO'",
"test": "bun test"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -1 +0,0 @@
export { type ReviewerMeta, reviewerMetaSchema, reviewerRole } from "./reviewer.js";
@@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist",
"composite": true
},
"include": ["src/**/*.ts"],
"references": [{ "path": "../workflow" }]
}
@@ -1,15 +0,0 @@
{
"name": "@uncaged/workflow-role-submitter",
"version": "0.1.0",
"type": "module",
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "echo 'TODO'",
"test": "bun test"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -1 +0,0 @@
export { type SubmitterMeta, submitterMetaSchema, submitterRole } from "./submitter.js";
@@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist",
"composite": true
},
"include": ["src/**/*.ts"],
"references": [{ "path": "../workflow" }]
}
@@ -1,15 +0,0 @@
{
"name": "@uncaged/workflow-role-tester",
"version": "0.1.0",
"type": "module",
"main": "src/index.ts",
"types": "src/index.ts",
"scripts": {
"build": "echo 'TODO'",
"test": "bun test"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"zod": "^4.0.0"
}
}
@@ -1 +0,0 @@
export { type TesterMeta, testerMetaSchema, testerRole } from "./tester.js";
@@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist",
"composite": true
},
"include": ["src/**/*.ts"],
"references": [{ "path": "../workflow" }]
}
@@ -1,6 +1,6 @@
import { describe, expect, test } from "bun:test"; import { describe, expect, test } from "bun:test";
import { committerMetaSchema, committerRole } from "../src/committer.js"; import { committerMetaSchema, committerRole } from "../src/roles/committer.js";
describe("committerRole", () => { describe("committerRole", () => {
test("committed sample validates against schema", () => { test("committed sample validates against schema", () => {
@@ -6,12 +6,9 @@ import {
START, START,
validateWorkflowDescriptor, validateWorkflowDescriptor,
} from "@uncaged/workflow"; } from "@uncaged/workflow";
import type { CommitterMeta } from "@uncaged/workflow-role-committer";
import type { PlannerMeta } from "@uncaged/workflow-role-planner";
import { buildDevelopDescriptor } from "../src/descriptor.js"; import { buildDevelopDescriptor } from "../src/descriptor.js";
import { developModerator } from "../src/index.js"; import { developModerator } from "../src/index.js";
import type { CommitterMeta, PlannerMeta } from "../src/roles/index.js";
import type { DevelopMeta } from "../src/roles.js"; import type { DevelopMeta } from "../src/roles.js";
const DEFAULT_PHASES: PlannerMeta["phases"] = [ const DEFAULT_PHASES: PlannerMeta["phases"] = [
@@ -1,6 +1,6 @@
import { describe, expect, test } from "bun:test"; import { describe, expect, test } from "bun:test";
import { reviewerMetaSchema, reviewerRole } from "../src/reviewer.js"; import { reviewerMetaSchema, reviewerRole } from "../src/roles/reviewer.js";
describe("reviewerRole", () => { describe("reviewerRole", () => {
test("approved sample validates against schema", () => { test("approved sample validates against schema", () => {
@@ -10,10 +10,6 @@
}, },
"dependencies": { "dependencies": {
"@uncaged/workflow": "workspace:*", "@uncaged/workflow": "workspace:*",
"@uncaged/workflow-role-coder": "workspace:*", "zod": "^4.0.0"
"@uncaged/workflow-role-committer": "workspace:*",
"@uncaged/workflow-role-planner": "workspace:*",
"@uncaged/workflow-role-reviewer": "workspace:*",
"@uncaged/workflow-role-tester": "workspace:*"
} }
} }
@@ -10,34 +10,26 @@ import {
import { developModerator } from "./moderator.js"; import { developModerator } from "./moderator.js";
import { DEVELOP_WORKFLOW_DESCRIPTION, type DevelopMeta, developRoles } from "./roles.js"; import { DEVELOP_WORKFLOW_DESCRIPTION, type DevelopMeta, developRoles } from "./roles.js";
export { buildDevelopDescriptor } from "./descriptor.js";
export { developModerator } from "./moderator.js";
export { export {
type CoderMeta, type CoderMeta,
type CommitterMeta,
coderMetaSchema, coderMetaSchema,
coderRole, coderRole,
} from "@uncaged/workflow-role-coder";
export {
type CommitterMeta,
committerMetaSchema, committerMetaSchema,
committerRole, committerRole,
} from "@uncaged/workflow-role-committer";
export {
type PlannerMeta, type PlannerMeta,
phaseSchema, phaseSchema,
plannerMetaSchema, plannerMetaSchema,
plannerRole, plannerRole,
} from "@uncaged/workflow-role-planner";
export {
type ReviewerMeta, type ReviewerMeta,
reviewerMetaSchema, reviewerMetaSchema,
reviewerRole, reviewerRole,
} from "@uncaged/workflow-role-reviewer";
export {
type TesterMeta, type TesterMeta,
testerMetaSchema, testerMetaSchema,
testerRole, testerRole,
} from "@uncaged/workflow-role-tester"; } from "./roles/index.js";
export { buildDevelopDescriptor } from "./descriptor.js";
export { developModerator } from "./moderator.js";
export { export {
DEVELOP_WORKFLOW_DESCRIPTION, DEVELOP_WORKFLOW_DESCRIPTION,
type DevelopMeta, type DevelopMeta,
@@ -1,9 +1,9 @@
import type { RoleDefinition } from "@uncaged/workflow"; import type { RoleDefinition } from "@uncaged/workflow";
import { type CoderMeta, coderRole } from "@uncaged/workflow-role-coder"; import { type CoderMeta, coderRole } from "./roles/coder.js";
import { type CommitterMeta, committerRole } from "@uncaged/workflow-role-committer"; import { type CommitterMeta, committerRole } from "./roles/committer.js";
import { type PlannerMeta, plannerRole } from "@uncaged/workflow-role-planner"; import { type PlannerMeta, plannerRole } from "./roles/planner.js";
import { type ReviewerMeta, reviewerRole } from "@uncaged/workflow-role-reviewer"; import { type ReviewerMeta, reviewerRole } from "./roles/reviewer.js";
import { type TesterMeta, testerRole } from "@uncaged/workflow-role-tester"; import { type TesterMeta, testerRole } from "./roles/tester.js";
export const DEVELOP_WORKFLOW_DESCRIPTION = export const DEVELOP_WORKFLOW_DESCRIPTION =
"Plan phases, implement incrementally, review, verify with tests/build/lint, and commit (planner → coder [repeat per phase] → reviewer → tester → committer)."; "Plan phases, implement incrementally, review, verify with tests/build/lint, and commit (planner → coder [repeat per phase] → reviewer → tester → committer).";
@@ -0,0 +1,10 @@
export { type CoderMeta, coderMetaSchema, coderRole } from "./coder.js";
export { type CommitterMeta, committerMetaSchema, committerRole } from "./committer.js";
export {
type PlannerMeta,
phaseSchema,
plannerMetaSchema,
plannerRole,
} from "./planner.js";
export { type ReviewerMeta, reviewerMetaSchema, reviewerRole } from "./reviewer.js";
export { type TesterMeta, testerMetaSchema, testerRole } from "./tester.js";
@@ -6,12 +6,5 @@
"composite": true "composite": true
}, },
"include": ["src/**/*.ts"], "include": ["src/**/*.ts"],
"references": [ "references": [{ "path": "../workflow" }]
{ "path": "../workflow" },
{ "path": "../workflow-role-coder" },
{ "path": "../workflow-role-committer" },
{ "path": "../workflow-role-planner" },
{ "path": "../workflow-role-reviewer" },
{ "path": "../workflow-role-tester" }
]
} }
@@ -11,13 +11,10 @@ import {
START, START,
validateWorkflowDescriptor, validateWorkflowDescriptor,
} from "@uncaged/workflow"; } from "@uncaged/workflow";
import type { PreparerMeta } from "@uncaged/workflow-role-preparer";
import type { SubmitterMeta } from "@uncaged/workflow-role-submitter";
import { buildSolveIssueDescriptor } from "../src/descriptor.js"; import { buildSolveIssueDescriptor } from "../src/descriptor.js";
import type { DeveloperMeta } from "../src/developer.js"; import type { DeveloperMeta } from "../src/developer.js";
import { createSolveIssueRun, solveIssueModerator } from "../src/index.js"; import { createSolveIssueRun, solveIssueModerator } from "../src/index.js";
import type { PreparerMeta, SubmitterMeta } from "../src/roles/index.js";
import type { SolveIssueMeta } from "../src/roles.js"; import type { SolveIssueMeta } from "../src/roles.js";
function jsonResponse(payload: Record<string, unknown>): Response { function jsonResponse(payload: Record<string, unknown>): Response {
@@ -1,6 +1,6 @@
import { describe, expect, test } from "bun:test"; import { describe, expect, test } from "bun:test";
import { submitterMetaSchema, submitterRole } from "../src/submitter.js"; import { submitterMetaSchema, submitterRole } from "../src/roles/submitter.js";
describe("submitterRole", () => { describe("submitterRole", () => {
test("submitted sample validates against schema", () => { test("submitted sample validates against schema", () => {
@@ -10,8 +10,6 @@
}, },
"dependencies": { "dependencies": {
"@uncaged/workflow": "workspace:*", "@uncaged/workflow": "workspace:*",
"@uncaged/workflow-role-preparer": "workspace:*",
"@uncaged/workflow-role-submitter": "workspace:*",
"zod": "^4.0.0" "zod": "^4.0.0"
} }
} }
@@ -11,16 +11,6 @@ import {
import { solveIssueModerator } from "./moderator.js"; import { solveIssueModerator } from "./moderator.js";
import { SOLVE_ISSUE_WORKFLOW_DESCRIPTION, type SolveIssueMeta, solveIssueRoles } from "./roles.js"; import { SOLVE_ISSUE_WORKFLOW_DESCRIPTION, type SolveIssueMeta, solveIssueRoles } from "./roles.js";
export {
type PreparerMeta,
preparerMetaSchema,
preparerRole,
} from "@uncaged/workflow-role-preparer";
export {
type SubmitterMeta,
submitterMetaSchema,
submitterRole,
} from "@uncaged/workflow-role-submitter";
export { buildSolveIssueDescriptor } from "./descriptor.js"; export { buildSolveIssueDescriptor } from "./descriptor.js";
export { export {
type DeveloperMeta, type DeveloperMeta,
@@ -28,6 +18,14 @@ export {
developerRole, developerRole,
} from "./developer.js"; } from "./developer.js";
export { solveIssueModerator } from "./moderator.js"; export { solveIssueModerator } from "./moderator.js";
export {
type PreparerMeta,
preparerMetaSchema,
preparerRole,
type SubmitterMeta,
submitterMetaSchema,
submitterRole,
} from "./roles/index.js";
export { export {
SOLVE_ISSUE_WORKFLOW_DESCRIPTION, SOLVE_ISSUE_WORKFLOW_DESCRIPTION,
type SolveIssueMeta, type SolveIssueMeta,
@@ -1,8 +1,7 @@
import type { RoleDefinition } from "@uncaged/workflow"; import type { RoleDefinition } from "@uncaged/workflow";
import { type PreparerMeta, preparerRole } from "@uncaged/workflow-role-preparer";
import { type SubmitterMeta, submitterRole } from "@uncaged/workflow-role-submitter";
import { type DeveloperMeta, developerRole } from "./developer.js"; import { type DeveloperMeta, developerRole } from "./developer.js";
import { type PreparerMeta, preparerRole } from "./roles/preparer.js";
import { type SubmitterMeta, submitterRole } from "./roles/submitter.js";
export const SOLVE_ISSUE_WORKFLOW_DESCRIPTION = export const SOLVE_ISSUE_WORKFLOW_DESCRIPTION =
"Resolve an issue end-to-end by preparing the repo, delegating implementation to the develop workflow, and opening a pull request (preparer → developer → submitter)."; "Resolve an issue end-to-end by preparing the repo, delegating implementation to the develop workflow, and opening a pull request (preparer → developer → submitter).";
@@ -3,3 +3,4 @@ export {
preparerMetaSchema, preparerMetaSchema,
preparerRole, preparerRole,
} from "./preparer.js"; } from "./preparer.js";
export { type SubmitterMeta, submitterMetaSchema, submitterRole } from "./submitter.js";
@@ -6,9 +6,5 @@
"composite": true "composite": true
}, },
"include": ["src/**/*.ts"], "include": ["src/**/*.ts"],
"references": [ "references": [{ "path": "../workflow" }]
{ "path": "../workflow" },
{ "path": "../workflow-role-preparer" },
{ "path": "../workflow-role-submitter" }
]
} }
-7
View File
@@ -19,13 +19,6 @@
"references": [ "references": [
{ "path": "packages/workflow" }, { "path": "packages/workflow" },
{ "path": "packages/workflow-agent-llm" }, { "path": "packages/workflow-agent-llm" },
{ "path": "packages/workflow-role-committer" },
{ "path": "packages/workflow-role-coder" },
{ "path": "packages/workflow-role-planner" },
{ "path": "packages/workflow-role-preparer" },
{ "path": "packages/workflow-role-reviewer" },
{ "path": "packages/workflow-role-submitter" },
{ "path": "packages/workflow-role-tester" },
{ "path": "packages/workflow-agent-cursor" }, { "path": "packages/workflow-agent-cursor" },
{ "path": "packages/workflow-agent-hermes" }, { "path": "packages/workflow-agent-hermes" },
{ "path": "packages/workflow-util-agent" }, { "path": "packages/workflow-util-agent" },