- Replaced raw model aliases with developer tiers (junior, medior, senior, qa) in dispatch and model selection logic. - Updated `dispatchTask` to resolve models based on tiers and plugin configuration. - Modified `selectModel` to return tier names instead of model aliases based on task description. - Implemented migration logic for transitioning from old model aliases to new tier names in worker state. - Added setup logic for agent creation and model configuration in `setup.ts`. - Created shared templates for workspace files and instructions for DEV/QA workers. - Enhanced project registration to scaffold role files based on developer tiers. - Updated task management tools to reflect changes in model selection and tier assignment. - Introduced a new `devclaw_setup` tool for agent-driven setup and configuration. - Updated plugin configuration schema to support model mapping per developer tier.
89 lines
2.2 KiB
TypeScript
89 lines
2.2 KiB
TypeScript
/**
|
|
* Model selection for dev/qa tasks.
|
|
* Keyword heuristic fallback — used when the orchestrator doesn't specify a tier.
|
|
* Returns tier names (junior, medior, senior, qa) instead of model aliases.
|
|
*/
|
|
|
|
export type ModelRecommendation = {
|
|
tier: string;
|
|
reason: string;
|
|
};
|
|
|
|
// Keywords that indicate simple tasks
|
|
const SIMPLE_KEYWORDS = [
|
|
"typo",
|
|
"fix typo",
|
|
"rename",
|
|
"update text",
|
|
"change color",
|
|
"minor",
|
|
"small",
|
|
"css",
|
|
"style",
|
|
"copy",
|
|
"wording",
|
|
];
|
|
|
|
// Keywords that indicate complex tasks
|
|
const COMPLEX_KEYWORDS = [
|
|
"architect",
|
|
"refactor",
|
|
"redesign",
|
|
"system-wide",
|
|
"migration",
|
|
"database schema",
|
|
"security",
|
|
"performance",
|
|
"infrastructure",
|
|
"multi-service",
|
|
];
|
|
|
|
/**
|
|
* Select appropriate developer tier based on task description.
|
|
*
|
|
* Developer tiers:
|
|
* - junior: very simple (typos, single-file fixes, CSS tweaks)
|
|
* - medior: standard DEV (features, bug fixes, multi-file changes)
|
|
* - senior: deep/architectural (system-wide refactoring, novel design)
|
|
* - qa: all QA tasks (code inspection, validation, test runs)
|
|
*/
|
|
export function selectModel(
|
|
issueTitle: string,
|
|
issueDescription: string,
|
|
role: "dev" | "qa",
|
|
): ModelRecommendation {
|
|
if (role === "qa") {
|
|
return {
|
|
tier: "qa",
|
|
reason: "Default QA tier for code inspection and validation",
|
|
};
|
|
}
|
|
|
|
const text = `${issueTitle} ${issueDescription}`.toLowerCase();
|
|
const wordCount = text.split(/\s+/).length;
|
|
|
|
// Check for simple task indicators
|
|
const isSimple = SIMPLE_KEYWORDS.some((kw) => text.includes(kw));
|
|
if (isSimple && wordCount < 100) {
|
|
return {
|
|
tier: "junior",
|
|
reason: `Simple task detected (keywords: ${SIMPLE_KEYWORDS.filter((kw) => text.includes(kw)).join(", ")})`,
|
|
};
|
|
}
|
|
|
|
// Check for complex task indicators
|
|
const isComplex = COMPLEX_KEYWORDS.some((kw) => text.includes(kw));
|
|
if (isComplex || wordCount > 500) {
|
|
return {
|
|
tier: "senior",
|
|
reason: `Complex task detected (${isComplex ? "keywords: " + COMPLEX_KEYWORDS.filter((kw) => text.includes(kw)).join(", ") : "long description"})`,
|
|
};
|
|
}
|
|
|
|
// Default: medior for standard dev work
|
|
return {
|
|
tier: "medior",
|
|
reason: "Standard dev task — multi-file changes, features, bug fixes",
|
|
};
|
|
}
|