daedalus-cli 1.37.5 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/agents/ensemble.d.ts.map +1 -1
- package/dist/agents/ensemble.js +12 -6
- package/dist/agents/ensemble.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +2 -1
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +185 -61
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/roles.d.ts.map +1 -1
- package/dist/agents/roles.js +26 -0
- package/dist/agents/roles.js.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +8 -0
- package/dist/router/index.js.map +1 -1
- package/dist/tools/builtin/files.d.ts.map +1 -1
- package/dist/tools/builtin/files.js +16 -7
- package/dist/tools/builtin/files.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.38.0](https://github.com/bgill55/daedalus/compare/v1.37.6...v1.38.0) (2026-07-05)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **cli:** enhance code generation quality, prompts, verification pipelines, and design token integration ([83aed68](https://github.com/bgill55/daedalus/commit/83aed68cba1c4b4985870515505af0966fd6263f))
|
|
7
|
+
|
|
8
|
+
## [1.37.6](https://github.com/bgill55/daedalus/compare/v1.37.5...v1.37.6) (2026-07-04)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* add arg validation to patch tool and optimize router openai request compatibility ([538af50](https://github.com/bgill55/daedalus/commit/538af507b61b1f90cc7d71fc441a41652c1b213a))
|
|
14
|
+
|
|
1
15
|
## [1.37.5](https://github.com/bgill55/daedalus/compare/v1.37.4...v1.37.5) (2026-07-04)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensemble.d.ts","sourceRoot":"","sources":["../../src/agents/ensemble.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ensemble.d.ts","sourceRoot":"","sources":["../../src/agents/ensemble.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAsFvD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAmMf"}
|
package/dist/agents/ensemble.js
CHANGED
|
@@ -5,6 +5,8 @@ import { execSync } from 'child_process';
|
|
|
5
5
|
import { getAgentRole, filterToolsForRole } from './roles.js';
|
|
6
6
|
import { BUILTIN_TOOLS } from '../tools/definitions.js';
|
|
7
7
|
import { executeToolCalls } from '../tools/executor.js';
|
|
8
|
+
import { detectProjectStack } from '../config/stack.js';
|
|
9
|
+
import { Orchestrator } from './orchestrator.js';
|
|
8
10
|
async function executeAgentRole(roleName, modelName, goal, context, router, toolContext, temperatureOverride) {
|
|
9
11
|
const role = getAgentRole(roleName);
|
|
10
12
|
const tools = filterToolsForRole(BUILTIN_TOOLS, roleName);
|
|
@@ -158,11 +160,17 @@ export async function runEnsembleWorkflow(goal, context, config, router) {
|
|
|
158
160
|
testsPass = false;
|
|
159
161
|
}
|
|
160
162
|
cand.testsPass = testsPass;
|
|
163
|
+
const projectStack = detectProjectStack(context.projectRoot || process.cwd());
|
|
164
|
+
const frameworkRules = Orchestrator.getFrameworkGuidance(projectStack);
|
|
161
165
|
const criticGoal = `You are evaluating a candidate code draft to solve the following goal:
|
|
162
166
|
|
|
163
167
|
GOAL:
|
|
164
168
|
${goal}
|
|
165
169
|
|
|
170
|
+
PROJECT CONTEXT:
|
|
171
|
+
${projectStack || '(none detected)'}
|
|
172
|
+
${frameworkRules || '(none)'}
|
|
173
|
+
|
|
166
174
|
PROPOSED CHANGES (GIT DIFF):
|
|
167
175
|
${cand.diff}
|
|
168
176
|
|
|
@@ -175,13 +183,11 @@ If the changes are perfect and ready to merge, also include the word "APPROVED"
|
|
|
175
183
|
cand.critique = reviewResult;
|
|
176
184
|
const scoreMatch = reviewResult.match(/SCORE:\s*(\d+)/i);
|
|
177
185
|
const criticScore = scoreMatch ? parseInt(scoreMatch[1], 10) : 5;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
if (testsPass)
|
|
182
|
-
totalScore += 5;
|
|
186
|
+
// Multiplicative scoring: compilation is a major multiplier, tests are a bonus
|
|
187
|
+
let totalScore = criticScore * (compiles ? 1.5 : 0.5) * (testsPass ? 1.2 : 0.8);
|
|
188
|
+
totalScore = Number(totalScore.toFixed(1)); // clean output
|
|
183
189
|
cand.score = totalScore;
|
|
184
|
-
console.log(pc.gray(`Candidate ${idx + 1} (${cand.model}): Compiles=${compiles}, TestsPass=${testsPass}, Score=${totalScore}
|
|
190
|
+
console.log(pc.gray(`Candidate ${idx + 1} (${cand.model}): Compiles=${compiles}, TestsPass=${testsPass}, Score=${totalScore} (Critic: ${criticScore})`));
|
|
185
191
|
try {
|
|
186
192
|
execSync('git reset --hard HEAD', { cwd, stdio: 'ignore' });
|
|
187
193
|
execSync('git clean -fd', { cwd, stdio: 'ignore' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensemble.js","sourceRoot":"","sources":["../../src/agents/ensemble.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ensemble.js","sourceRoot":"","sources":["../../src/agents/ensemble.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,11 +65,12 @@ export declare class Orchestrator {
|
|
|
65
65
|
private verifyArtifactsThoroughly;
|
|
66
66
|
private buildCleanSummary;
|
|
67
67
|
private static isUnnecessaryConfigTask;
|
|
68
|
-
|
|
68
|
+
static getFrameworkGuidance(projectContext?: string): string;
|
|
69
69
|
private static extractRequirements;
|
|
70
70
|
private static extractFilePaths;
|
|
71
71
|
private static buildDependencyGraph;
|
|
72
72
|
private findStyleReference;
|
|
73
|
+
private discoverDesignTokens;
|
|
73
74
|
private delegateTask;
|
|
74
75
|
private runAgent;
|
|
75
76
|
private executeOpenAIToolCalls;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,OAAO,EAAE,WAAW,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAM;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAK;gBAEzB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,cAAc;YAOrG,YAAY;YAiBZ,sBAAsB;IA2C9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwDlC,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,WAAW,EAAE,GAC7B,OAAO,CAAC,MAAM,CAAC;YAgCJ,UAAU;IAoGxB,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,MAAM,CAAC,gBAAgB;YAmBjB,iBAAiB;YAuFjB,WAAW;YAsIX,eAAe;IAwE7B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAoD/B,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAQxC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAiI;IAE7J,OAAO,CAAC,MAAM,CAAC,aAAa;IAO5B,OAAO,CAAC,MAAM,CAAC,aAAa;IAqC5B,OAAO,CAAC,MAAM,CAAC,aAAa;IAM5B,OAAO,CAAC,MAAM,CAAC,eAAe;IAK9B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,oBAAoB;IAmG5B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,oBAAoB;YAkBd,eAAe;YAsCf,iBAAiB;YA0BjB,gBAAgB;YAgChB,aAAa;IAgE3B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,MAAM,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1125,12 +1125,37 @@ export class Orchestrator {
|
|
|
1125
1125
|
- COMPONENT STRUCTURE: Every .tsx page file must export a single default function component. Do NOT write raw JSX tags outside a function body.
|
|
1126
1126
|
- IMPORTS: Use next/link for navigation, next/image for images. Do not use react-router-dom.
|
|
1127
1127
|
- TAILWIND: If Tailwind CSS is detected, use Tailwind utility classes for all styling. Do not write inline styles or separate .css files for component styling.\n`;
|
|
1128
|
+
}
|
|
1129
|
+
if (/\b(React)\b/i.test(ctx) && !/\bNext\.js\b/i.test(ctx)) {
|
|
1130
|
+
return `\n\nREACT SPA PRODUCTION CODING RULES (MANDATORY):
|
|
1131
|
+
- ROUTING: Use react-router-dom v6+ with createBrowserRouter/RouterProvider. Lazy-load routes with React.lazy() and Suspense if possible.
|
|
1132
|
+
- STATE: Use React hooks (useState, useReducer, useContext) for local state. For complex global state, use a lightweight manager like Zustand or Redux Toolkit.
|
|
1133
|
+
- DATA FETCHING: Use custom hooks wrapping fetch/axios. Keep API calls out of UI component bodies.
|
|
1134
|
+
- COMPONENT STRUCTURE: Export a single default component per file. Avoid mixing business logic directly with presentation components.\n`;
|
|
1128
1135
|
}
|
|
1129
1136
|
if (/\b(Vue|Nuxt)\b/i.test(ctx)) {
|
|
1130
|
-
return
|
|
1137
|
+
return `\n\nVUE/NUXT PRODUCTION CODING RULES (MANDATORY):
|
|
1138
|
+
- ROUTING: Vue Router (or file-based pages/ in Nuxt). New pages typically need route entries added to the router config, not config files like vue.config.js.
|
|
1139
|
+
- COMPONENTS: Use Single File Components (.vue). Match the existing \`<script setup>\` or Options API style exactly.
|
|
1140
|
+
- STATE: Use Pinia or Vuex for global state. Use standard refs/computed for local reactive state.\n`;
|
|
1131
1141
|
}
|
|
1132
1142
|
if (/\bExpress\b/i.test(ctx)) {
|
|
1133
|
-
return
|
|
1143
|
+
return `\n\nEXPRESS PRODUCTION CODING RULES (MANDATORY):
|
|
1144
|
+
- ROUTING: Express requires explicit route handlers. New endpoints must be added to the server/ or routes/ directory, and registered on the main express application.
|
|
1145
|
+
- CONTROLLERS: Keep request/response handler functions in controller files, separate from route definitions.
|
|
1146
|
+
- ERROR HANDLING: Always wrap route logic in try/catch or async-error-handler middleware and forward to next(err).\n`;
|
|
1147
|
+
}
|
|
1148
|
+
if (/\b(Python|Flask|Django|FastAPI)\b/i.test(ctx)) {
|
|
1149
|
+
return `\n\nPYTHON PRODUCTION CODING RULES (MANDATORY):
|
|
1150
|
+
- STRUCTURE: Follow the framework's conventional project layout.
|
|
1151
|
+
- TYPING: Use type hints on all function signatures. Use Pydantic models for request/response schemas.
|
|
1152
|
+
- ASYNC: Use async/await where the framework supports it (FastAPI, async Django views).\n`;
|
|
1153
|
+
}
|
|
1154
|
+
if (/\b(Vanilla JS|HTML)\b/i.test(ctx)) {
|
|
1155
|
+
return `\n\nVANILLA JS/HTML PRODUCTION CODING RULES (MANDATORY):
|
|
1156
|
+
- STRUCTURE: Keep JS in separate .js files, CSS in separate .css files. Use ES modules (type="module") for scripts.
|
|
1157
|
+
- DOM: Use querySelector/querySelectorAll. Never use document.write or innerHTML for user-supplied content.
|
|
1158
|
+
- EVENTS: Use addEventListener, never inline event handlers (onclick="...").\n`;
|
|
1134
1159
|
}
|
|
1135
1160
|
return '';
|
|
1136
1161
|
}
|
|
@@ -1194,59 +1219,128 @@ export class Orchestrator {
|
|
|
1194
1219
|
findStyleReference(taskGoal) {
|
|
1195
1220
|
// Extract target directory from goal
|
|
1196
1221
|
let dir = '';
|
|
1197
|
-
// Try file path first: "src/pages/about.tsx" → "src/pages"
|
|
1198
1222
|
const fileMatch = taskGoal.match(/([A-Za-z0-9_\-/\\]+\.[a-zA-Z0-9]+)/);
|
|
1199
1223
|
if (fileMatch) {
|
|
1200
1224
|
dir = path.dirname(fileMatch[1].replace(/\\/g, '/'));
|
|
1201
1225
|
}
|
|
1202
1226
|
else {
|
|
1203
|
-
// Try explicit directory: "in src/components/" or "at pages/"
|
|
1204
1227
|
const dirMatch = taskGoal.match(/(?:in|at|to|under|inside)\s+(?:the\s+)?([A-Za-z0-9_\-/\\]{2,})(?:\s+(?:directory|folder|path))?/i);
|
|
1205
1228
|
if (dirMatch) {
|
|
1206
1229
|
dir = dirMatch[1].replace(/\\/g, '/').replace(/\/+$/, '');
|
|
1207
1230
|
}
|
|
1208
1231
|
}
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1232
|
+
const checkDirForReference = (searchDir) => {
|
|
1233
|
+
if (!searchDir || !fs.existsSync(searchDir) || searchDir === '.')
|
|
1234
|
+
return null;
|
|
1235
|
+
let entries;
|
|
1236
|
+
try {
|
|
1237
|
+
entries = fs.readdirSync(searchDir);
|
|
1238
|
+
}
|
|
1239
|
+
catch {
|
|
1240
|
+
return null;
|
|
1241
|
+
}
|
|
1242
|
+
const candidates = entries
|
|
1243
|
+
.filter(f => !f.startsWith('.') && !f.includes('.test.') && !f.includes('.spec.') && !f.startsWith('__'))
|
|
1244
|
+
.sort();
|
|
1245
|
+
const target = candidates.find(f => /\.(tsx?|jsx?|vue|svelte)$/i.test(f))
|
|
1246
|
+
|| candidates.find(f => /\.(css|scss|less)$/i.test(f))
|
|
1247
|
+
|| candidates[0];
|
|
1248
|
+
if (!target)
|
|
1249
|
+
return null;
|
|
1250
|
+
const fullPath = path.join(searchDir, target);
|
|
1251
|
+
if (fs.statSync(fullPath).isDirectory())
|
|
1252
|
+
return null;
|
|
1253
|
+
try {
|
|
1254
|
+
let content = fs.readFileSync(fullPath, 'utf8');
|
|
1255
|
+
const lines = content.split('\n');
|
|
1256
|
+
if (lines.length > 80) {
|
|
1257
|
+
content = lines.slice(0, 80).join('\n') + '\n... (truncated)';
|
|
1258
|
+
}
|
|
1259
|
+
const isAppRouter = fs.existsSync(path.join(process.cwd(), 'app'));
|
|
1260
|
+
const antiPatterns = [
|
|
1261
|
+
/legacyBehavior/,
|
|
1262
|
+
/^\s*<[A-Za-z]/m,
|
|
1263
|
+
];
|
|
1264
|
+
if (isAppRouter) {
|
|
1265
|
+
antiPatterns.push(/import\s+React\s+from\s+['"]react['"]/);
|
|
1266
|
+
}
|
|
1267
|
+
if (antiPatterns.some(re => re.test(content)))
|
|
1268
|
+
return null;
|
|
1269
|
+
return { fullPath, content };
|
|
1270
|
+
}
|
|
1271
|
+
catch {
|
|
1272
|
+
return null;
|
|
1273
|
+
}
|
|
1274
|
+
};
|
|
1275
|
+
// 1. Try target directory
|
|
1276
|
+
let ref = checkDirForReference(dir);
|
|
1277
|
+
if (ref) {
|
|
1278
|
+
return `\nExisting file in ${dir}/ (use as a style reference for structure and import order only):\n--- ${ref.fullPath} ---\n${ref.content}\n--- end ---`;
|
|
1215
1279
|
}
|
|
1216
|
-
|
|
1217
|
-
|
|
1280
|
+
// 2. Try parent directory if target directory doesn't have reference
|
|
1281
|
+
if (dir && dir !== '.' && dir !== '') {
|
|
1282
|
+
const parentDir = path.dirname(dir);
|
|
1283
|
+
ref = checkDirForReference(parentDir);
|
|
1284
|
+
if (ref) {
|
|
1285
|
+
return `\nExisting file in sibling/parent ${parentDir}/ (use as a style reference for structure and import order only):\n--- ${ref.fullPath} ---\n${ref.content}\n--- end ---`;
|
|
1286
|
+
}
|
|
1218
1287
|
}
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
return null;
|
|
1227
|
-
const fullPath = path.join(dir, target);
|
|
1228
|
-
let content;
|
|
1229
|
-
try {
|
|
1230
|
-
content = fs.readFileSync(fullPath, 'utf8');
|
|
1231
|
-
const lines = content.split('\n');
|
|
1232
|
-
if (lines.length > 50) {
|
|
1233
|
-
content = lines.slice(0, 50).join('\n') + '\n... (truncated)';
|
|
1288
|
+
// 3. Try common directories in the project
|
|
1289
|
+
const commonDirs = ['src/components', 'components', 'src/pages', 'pages', 'app', 'src', 'lib'];
|
|
1290
|
+
for (const commonDir of commonDirs) {
|
|
1291
|
+
const fullCommonDir = path.join(process.cwd(), commonDir);
|
|
1292
|
+
ref = checkDirForReference(fullCommonDir);
|
|
1293
|
+
if (ref) {
|
|
1294
|
+
return `\nExisting file in ${commonDir}/ (use as a style reference for structure and import order only):\n--- ${ref.fullPath} ---\n${ref.content}\n--- end ---`;
|
|
1234
1295
|
}
|
|
1235
1296
|
}
|
|
1236
|
-
|
|
1237
|
-
|
|
1297
|
+
return null;
|
|
1298
|
+
}
|
|
1299
|
+
discoverDesignTokens() {
|
|
1300
|
+
const cwd = process.cwd();
|
|
1301
|
+
let tokens = '';
|
|
1302
|
+
// 1. Try to find tailwind config
|
|
1303
|
+
const twConfigs = ['tailwind.config.js', 'tailwind.config.ts', 'tailwind.config.cjs'];
|
|
1304
|
+
for (const configName of twConfigs) {
|
|
1305
|
+
const fullPath = path.join(cwd, configName);
|
|
1306
|
+
if (fs.existsSync(fullPath)) {
|
|
1307
|
+
try {
|
|
1308
|
+
const content = fs.readFileSync(fullPath, 'utf8');
|
|
1309
|
+
const themeMatch = content.match(/theme\s*:\s*\{[\s\S]*?\}/);
|
|
1310
|
+
if (themeMatch) {
|
|
1311
|
+
tokens += `\nTailwind Theme Configuration (from ${configName}):\n${themeMatch[0]}\n`;
|
|
1312
|
+
}
|
|
1313
|
+
else {
|
|
1314
|
+
const lines = content.split('\n').slice(0, 40).join('\n');
|
|
1315
|
+
tokens += `\nTailwind Configuration Snippet (from ${configName}):\n${lines}\n`;
|
|
1316
|
+
}
|
|
1317
|
+
break;
|
|
1318
|
+
}
|
|
1319
|
+
catch { /* ignore */ }
|
|
1320
|
+
}
|
|
1238
1321
|
}
|
|
1239
|
-
|
|
1240
|
-
const
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1322
|
+
// 2. Try to find CSS custom properties in global CSS files
|
|
1323
|
+
const commonCssDirs = ['src', 'app', 'styles', 'src/styles', '.'];
|
|
1324
|
+
const cssFileNames = ['globals.css', 'global.css', 'index.css', 'app.css', 'main.css'];
|
|
1325
|
+
for (const dirName of commonCssDirs) {
|
|
1326
|
+
for (const fileName of cssFileNames) {
|
|
1327
|
+
const fullPath = path.join(cwd, dirName, fileName);
|
|
1328
|
+
if (fs.existsSync(fullPath)) {
|
|
1329
|
+
try {
|
|
1330
|
+
const content = fs.readFileSync(fullPath, 'utf8');
|
|
1331
|
+
const rootMatches = content.match(/:root\s*\{[\s\S]*?\}/g);
|
|
1332
|
+
if (rootMatches && rootMatches.length > 0) {
|
|
1333
|
+
tokens += `\nDesign Tokens / CSS Variables (from ${dirName}/${fileName}):\n${rootMatches.join('\n')}\n`;
|
|
1334
|
+
}
|
|
1335
|
+
break;
|
|
1336
|
+
}
|
|
1337
|
+
catch { /* ignore */ }
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1340
|
+
if (tokens)
|
|
1341
|
+
break;
|
|
1246
1342
|
}
|
|
1247
|
-
|
|
1248
|
-
return null;
|
|
1249
|
-
return `\nExisting file in ${dir}/ (use as a style reference for structure and import order only):\n--- ${fullPath} ---\n${content}\n--- end ---`;
|
|
1343
|
+
return tokens;
|
|
1250
1344
|
}
|
|
1251
1345
|
async delegateTask(task, tasks, goal, projectContext) {
|
|
1252
1346
|
const role = getAgentRole(task.role);
|
|
@@ -1271,6 +1365,13 @@ export class Orchestrator {
|
|
|
1271
1365
|
if (styleRef) {
|
|
1272
1366
|
enrichedContext += styleRef;
|
|
1273
1367
|
}
|
|
1368
|
+
// Discover and inject design tokens if coder task
|
|
1369
|
+
if (task.role === 'coder') {
|
|
1370
|
+
const designTokens = this.discoverDesignTokens();
|
|
1371
|
+
if (designTokens) {
|
|
1372
|
+
enrichedContext += designTokens;
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1274
1375
|
// Extract explicit requirements from the task goal only
|
|
1275
1376
|
const taskReqs = Orchestrator.extractRequirements(task.goal);
|
|
1276
1377
|
if (taskReqs.length > 0) {
|
|
@@ -1705,18 +1806,24 @@ export class Orchestrator {
|
|
|
1705
1806
|
async runBuildVerification() {
|
|
1706
1807
|
const cwd = process.cwd();
|
|
1707
1808
|
let command = '';
|
|
1809
|
+
let lintCommand = '';
|
|
1708
1810
|
// Auto-discover verification command
|
|
1709
1811
|
if (fs.existsSync(path.join(cwd, 'package.json'))) {
|
|
1710
1812
|
try {
|
|
1711
1813
|
const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
|
|
1712
|
-
if (pkg.scripts
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1814
|
+
if (pkg.scripts) {
|
|
1815
|
+
if (pkg.scripts['daedalus-check']) {
|
|
1816
|
+
command = 'npm run daedalus-check';
|
|
1817
|
+
}
|
|
1818
|
+
else if (fs.existsSync(path.join(cwd, 'tsconfig.json'))) {
|
|
1819
|
+
command = 'npx tsc --noEmit';
|
|
1820
|
+
}
|
|
1821
|
+
else if (pkg.scripts.build) {
|
|
1822
|
+
command = 'npm run build';
|
|
1823
|
+
}
|
|
1824
|
+
if (pkg.scripts.lint) {
|
|
1825
|
+
lintCommand = 'npm run lint';
|
|
1826
|
+
}
|
|
1720
1827
|
}
|
|
1721
1828
|
}
|
|
1722
1829
|
catch { /* ignored */ }
|
|
@@ -1727,24 +1834,41 @@ export class Orchestrator {
|
|
|
1727
1834
|
else if (fs.existsSync(path.join(cwd, 'go.mod'))) {
|
|
1728
1835
|
command = 'go build ./...';
|
|
1729
1836
|
}
|
|
1730
|
-
if (!command) {
|
|
1837
|
+
if (!command && !lintCommand) {
|
|
1731
1838
|
return { success: true };
|
|
1732
1839
|
}
|
|
1733
|
-
console.log(pc.cyan(`\n[VERIFY] Running verification command: "${command}"...`));
|
|
1734
1840
|
const { exec } = await import('child_process');
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
}
|
|
1841
|
+
const runCmd = (cmd) => {
|
|
1842
|
+
return new Promise((resolve) => {
|
|
1843
|
+
exec(cmd, { cwd, timeout: 30000 }, (error, stdout, stderr) => {
|
|
1844
|
+
if (error) {
|
|
1845
|
+
resolve({ success: false, logs: (stdout + '\n' + stderr).trim() });
|
|
1846
|
+
}
|
|
1847
|
+
else {
|
|
1848
|
+
resolve({ success: true });
|
|
1849
|
+
}
|
|
1850
|
+
});
|
|
1746
1851
|
});
|
|
1747
|
-
}
|
|
1852
|
+
};
|
|
1853
|
+
if (command) {
|
|
1854
|
+
console.log(pc.cyan(`\n[VERIFY] Running verification command: "${command}"...`));
|
|
1855
|
+
const res = await runCmd(command);
|
|
1856
|
+
if (!res.success) {
|
|
1857
|
+
console.log(pc.red(`[VERIFY] Verification failed!`));
|
|
1858
|
+
return { success: false, errorLogs: res.logs };
|
|
1859
|
+
}
|
|
1860
|
+
console.log(pc.green(`[VERIFY] Verification passed.`));
|
|
1861
|
+
}
|
|
1862
|
+
if (lintCommand) {
|
|
1863
|
+
console.log(pc.cyan(`\n[VERIFY] Running linter command: "${lintCommand}"...`));
|
|
1864
|
+
const res = await runCmd(lintCommand);
|
|
1865
|
+
if (!res.success) {
|
|
1866
|
+
console.log(pc.red(`[VERIFY] Linter failed!`));
|
|
1867
|
+
return { success: false, errorLogs: res.logs };
|
|
1868
|
+
}
|
|
1869
|
+
console.log(pc.green(`[VERIFY] Linter passed.`));
|
|
1870
|
+
}
|
|
1871
|
+
return { success: true };
|
|
1748
1872
|
}
|
|
1749
1873
|
isBuildErrorRelated(errorLogs, modifiedFiles) {
|
|
1750
1874
|
if (!errorLogs)
|