- Refactor reviewPass function to identify states with review checks instead of specific review types. - Introduce review policies (HUMAN, AGENT, AUTO) to control PR review processes based on developer levels. - Update projectTick to handle review policies and step routing labels for reviewers and testers. - Add detailed reviewer instructions to templates for clarity on review responsibilities. - Implement role:level label management, allowing dynamic creation of labels based on project configuration. - Enhance task_update tool to support state and level updates, ensuring at least one parameter is provided. - Update work_finish tool to include reviewer actions (approve, reject) in task completion. - Modify work_start tool to utilize role-level detection for better level assignment. - Add tests for new functionalities, including review routing and level detection from labels.
97 lines
2.5 KiB
TypeScript
97 lines
2.5 KiB
TypeScript
/**
|
|
* roles/registry.ts — Single source of truth for all worker roles.
|
|
*
|
|
* Adding a new role? Just add an entry here. Everything else derives from this.
|
|
*
|
|
* Each role defines:
|
|
* - Identity (id, displayName)
|
|
* - Levels and models
|
|
* - Emoji for announcements
|
|
* - Valid completion results
|
|
* - Session key matching
|
|
* - Notification preferences
|
|
*/
|
|
import type { RoleConfig } from "./types.js";
|
|
|
|
export const ROLE_REGISTRY: Record<string, RoleConfig> = {
|
|
developer: {
|
|
id: "developer",
|
|
displayName: "DEVELOPER",
|
|
levels: ["junior", "medior", "senior"],
|
|
defaultLevel: "medior",
|
|
models: {
|
|
junior: "anthropic/claude-haiku-4-5",
|
|
medior: "anthropic/claude-sonnet-4-5",
|
|
senior: "anthropic/claude-opus-4-6",
|
|
},
|
|
emoji: {
|
|
junior: "⚡",
|
|
medior: "🔧",
|
|
senior: "🧠",
|
|
},
|
|
fallbackEmoji: "🔧",
|
|
completionResults: ["done", "blocked"],
|
|
sessionKeyPattern: "developer",
|
|
notifications: { onStart: true, onComplete: true },
|
|
},
|
|
|
|
tester: {
|
|
id: "tester",
|
|
displayName: "TESTER",
|
|
levels: ["junior", "medior", "senior"],
|
|
defaultLevel: "medior",
|
|
models: {
|
|
junior: "anthropic/claude-haiku-4-5",
|
|
medior: "anthropic/claude-sonnet-4-5",
|
|
senior: "anthropic/claude-opus-4-6",
|
|
},
|
|
emoji: {
|
|
junior: "⚡",
|
|
medior: "🔍",
|
|
senior: "🧠",
|
|
},
|
|
fallbackEmoji: "🔍",
|
|
completionResults: ["pass", "fail", "refine", "blocked"],
|
|
sessionKeyPattern: "tester",
|
|
notifications: { onStart: true, onComplete: true },
|
|
},
|
|
|
|
architect: {
|
|
id: "architect",
|
|
displayName: "ARCHITECT",
|
|
levels: ["junior", "senior"],
|
|
defaultLevel: "junior",
|
|
models: {
|
|
junior: "anthropic/claude-sonnet-4-5",
|
|
senior: "anthropic/claude-opus-4-6",
|
|
},
|
|
emoji: {
|
|
junior: "📐",
|
|
senior: "🏗️",
|
|
},
|
|
fallbackEmoji: "🏗️",
|
|
completionResults: ["done", "blocked"],
|
|
sessionKeyPattern: "architect",
|
|
notifications: { onStart: true, onComplete: true },
|
|
},
|
|
|
|
reviewer: {
|
|
id: "reviewer",
|
|
displayName: "REVIEWER",
|
|
levels: ["junior", "senior"],
|
|
defaultLevel: "junior",
|
|
models: {
|
|
junior: "anthropic/claude-haiku-4-5",
|
|
senior: "anthropic/claude-sonnet-4-5",
|
|
},
|
|
emoji: {
|
|
junior: "👁️",
|
|
senior: "🔬",
|
|
},
|
|
fallbackEmoji: "👁️",
|
|
completionResults: ["approve", "reject", "blocked"],
|
|
sessionKeyPattern: "reviewer",
|
|
notifications: { onStart: true, onComplete: true },
|
|
},
|
|
};
|