daedalus-cli 3.63.2 → 3.65.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 +22 -3
- package/dist/agents/orchestrator.d.ts +3 -6
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +39 -843
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/subagent-runner.d.ts +18 -0
- package/dist/agents/subagent-runner.d.ts.map +1 -0
- package/dist/agents/subagent-runner.js +231 -0
- package/dist/agents/subagent-runner.js.map +1 -0
- package/dist/agents/subagent-runner.test.d.ts +2 -0
- package/dist/agents/subagent-runner.test.d.ts.map +1 -0
- package/dist/agents/subagent-runner.test.js +74 -0
- package/dist/agents/subagent-runner.test.js.map +1 -0
- package/dist/agents/task-delegator.d.ts +28 -0
- package/dist/agents/task-delegator.d.ts.map +1 -0
- package/dist/agents/task-delegator.js +542 -0
- package/dist/agents/task-delegator.js.map +1 -0
- package/dist/agents/task-delegator.test.d.ts +2 -0
- package/dist/agents/task-delegator.test.d.ts.map +1 -0
- package/dist/agents/task-delegator.test.js +83 -0
- package/dist/agents/task-delegator.test.js.map +1 -0
- package/dist/agents/turn-guards.d.ts +41 -0
- package/dist/agents/turn-guards.d.ts.map +1 -0
- package/dist/agents/turn-guards.js +325 -0
- package/dist/agents/turn-guards.js.map +1 -0
- package/dist/agents/turn-guards.test.d.ts +2 -0
- package/dist/agents/turn-guards.test.d.ts.map +1 -0
- package/dist/agents/turn-guards.test.js +123 -0
- package/dist/agents/turn-guards.test.js.map +1 -0
- package/dist/commands/agents.d.ts +5 -28
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +11 -1021
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/autopilot.d.ts +30 -0
- package/dist/commands/autopilot.d.ts.map +1 -0
- package/dist/commands/autopilot.js +372 -0
- package/dist/commands/autopilot.js.map +1 -0
- package/dist/commands/hunt.d.ts +3 -0
- package/dist/commands/hunt.d.ts.map +1 -0
- package/dist/commands/hunt.js +181 -0
- package/dist/commands/hunt.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +339 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/onboard.d.ts +3 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +109 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -7
- package/dist/config/index.js.map +1 -1
- package/dist/indexing/indexer.d.ts +1 -1
- package/dist/indexing/indexer.d.ts.map +1 -1
- package/dist/indexing/indexer.js +112 -89
- package/dist/indexing/indexer.js.map +1 -1
- package/dist/indexing/indexer.test.js +58 -2
- package/dist/indexing/indexer.test.js.map +1 -1
- package/dist/indexing/watcher.js +1 -1
- package/dist/indexing/watcher.js.map +1 -1
- package/dist/indexing/watcher.test.js +53 -16
- package/dist/indexing/watcher.test.js.map +1 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +32 -426
- package/dist/model.js.map +1 -1
- package/dist/router/fallback.test.js +67 -0
- package/dist/router/fallback.test.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +23 -2
- package/dist/router/index.js.map +1 -1
- package/dist/session/manager.d.ts +2 -2
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +9 -6
- package/dist/session/manager.js.map +1 -1
- package/dist/session/manager.test.js +5 -0
- package/dist/session/manager.test.js.map +1 -1
- package/dist/session/sqlite.d.ts +4 -0
- package/dist/session/sqlite.d.ts.map +1 -1
- package/dist/session/sqlite.js +17 -0
- package/dist/session/sqlite.js.map +1 -1
- package/dist/session/sqlite.test.js +10 -1
- package/dist/session/sqlite.test.js.map +1 -1
- package/dist/types.d.ts +17 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.test.js +19 -0
- package/dist/types.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-runner.test.js","sourceRoot":"","sources":["../../src/agents/subagent-runner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LocalRouter } from '../router/index.js';
|
|
2
|
+
import { ToolContext } from '../types.js';
|
|
3
|
+
import { SessionManager } from '../session/manager.js';
|
|
4
|
+
import type Database from 'better-sqlite3';
|
|
5
|
+
import type { DelegationTask, AgentResult } from './orchestrator-types.js';
|
|
6
|
+
import { SubAgentRunner } from './subagent-runner.js';
|
|
7
|
+
export interface TaskDelegatorOptions {
|
|
8
|
+
createPlan?: (goal: string, projectContext?: string) => Promise<string>;
|
|
9
|
+
parseDelegationTasks?: (plan: string, goal: string) => DelegationTask[];
|
|
10
|
+
printTaskList?: (tasks: DelegationTask[], forceFull?: boolean) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare class TaskDelegator {
|
|
13
|
+
private router;
|
|
14
|
+
private toolContext;
|
|
15
|
+
private sessionManager?;
|
|
16
|
+
private modelOverride?;
|
|
17
|
+
private subAgentRunner;
|
|
18
|
+
private options?;
|
|
19
|
+
results: AgentResult[];
|
|
20
|
+
constructor(router: LocalRouter, toolContext: ToolContext, sessionManager?: SessionManager, modelOverride?: string, subAgentRunner?: SubAgentRunner, options?: TaskDelegatorOptions);
|
|
21
|
+
getSubAgentRunner(): SubAgentRunner;
|
|
22
|
+
findStyleReference(taskGoal: string): string | null;
|
|
23
|
+
discoverDesignTokens(): string;
|
|
24
|
+
pickMemoryCategory(task: DelegationTask): 'code_pattern' | 'fix_resolution' | 'schema_contract' | 'build_rule';
|
|
25
|
+
getTaskRelatedSigmaIds(db: Database.Database, activeIds: string[], task: DelegationTask): string[];
|
|
26
|
+
delegateTask(task: DelegationTask, tasks?: DelegationTask[], goal?: string, projectContext?: string): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=task-delegator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-delegator.d.ts","sourceRoot":"","sources":["../../src/agents/task-delegator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,OAAO,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAyBvD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,cAAc,EAAE,CAAC;IACxE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAC,CAAuB;IAChC,OAAO,EAAE,WAAW,EAAE,CAAM;gBAGjC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,EACxB,cAAc,CAAC,EAAE,cAAc,EAC/B,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,cAAc,EAC/B,OAAO,CAAC,EAAE,oBAAoB;IAUhC,iBAAiB,IAAI,cAAc;IAInC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAyEnD,oBAAoB,IAAI,MAAM;IA4C9B,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,YAAY;IAQ9G,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE;IA6B5F,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyX1H"}
|
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import pc from 'picocolors';
|
|
4
|
+
import { BUILTIN_TOOLS } from '../tools/definitions.js';
|
|
5
|
+
import { getResolvedShellType } from '../tools/builtin/terminal.js';
|
|
6
|
+
import { mcpRegistry } from '../tools/mcp/registry.js';
|
|
7
|
+
import { getAgentRole, filterToolsForRole, roleLabel } from './roles.js';
|
|
8
|
+
import { cleanTaskText, extractFilePaths, extractRequirements, getFrameworkGuidance, orphanedModuleWarning, } from './orchestrator-validation.js';
|
|
9
|
+
import { isDeclaredError, verifyArtifacts, verifyArtifactsThoroughly, checkPlaceholders, fillPlaceholders, buildCleanSummary, isBuildErrorRelated, generateBuildErrorHint, runBuildVerification, attemptRepair, rollbackTaskPatches, verifySpecAssertions, } from './orchestrator-verification.js';
|
|
10
|
+
import { loadSpecContract, formatSpecForPromptSafe } from './spec.js';
|
|
11
|
+
import { SigmaMemEngine } from '../session/sigma-mem.js';
|
|
12
|
+
import { getSigmaMemories } from '../session/sqlite.js';
|
|
13
|
+
import { SubAgentRunner } from './subagent-runner.js';
|
|
14
|
+
export class TaskDelegator {
|
|
15
|
+
router;
|
|
16
|
+
toolContext;
|
|
17
|
+
sessionManager;
|
|
18
|
+
modelOverride;
|
|
19
|
+
subAgentRunner;
|
|
20
|
+
options;
|
|
21
|
+
results = [];
|
|
22
|
+
constructor(router, toolContext, sessionManager, modelOverride, subAgentRunner, options) {
|
|
23
|
+
this.router = router;
|
|
24
|
+
this.toolContext = toolContext;
|
|
25
|
+
this.sessionManager = sessionManager;
|
|
26
|
+
this.modelOverride = modelOverride;
|
|
27
|
+
this.subAgentRunner = subAgentRunner || new SubAgentRunner(router, toolContext, sessionManager, modelOverride);
|
|
28
|
+
this.options = options;
|
|
29
|
+
}
|
|
30
|
+
getSubAgentRunner() {
|
|
31
|
+
return this.subAgentRunner;
|
|
32
|
+
}
|
|
33
|
+
findStyleReference(taskGoal) {
|
|
34
|
+
let dir = '';
|
|
35
|
+
const fileMatch = taskGoal.match(/([A-Za-z0-9_\-/\\]+\.[a-zA-Z0-9]+)/);
|
|
36
|
+
if (fileMatch) {
|
|
37
|
+
dir = path.dirname(fileMatch[1].replace(/\\/g, '/'));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const dirMatch = taskGoal.match(/(?:in|at|to|under|inside)\s+(?:the\s+)?([A-Za-z0-9_\-/\\]{2,})(?:\s+(?:directory|folder|path))?/i);
|
|
41
|
+
if (dirMatch) {
|
|
42
|
+
dir = dirMatch[1].replace(/\\/g, '/').replace(/\/+$/, '');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const checkDirForReference = (searchDir) => {
|
|
46
|
+
if (!searchDir || !fs.existsSync(searchDir) || searchDir === '.')
|
|
47
|
+
return null;
|
|
48
|
+
let entries;
|
|
49
|
+
try {
|
|
50
|
+
entries = fs.readdirSync(searchDir);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const candidates = entries
|
|
56
|
+
.filter(f => !f.startsWith('.') && !f.includes('.test.') && !f.includes('.spec.') && !f.startsWith('__'))
|
|
57
|
+
.sort();
|
|
58
|
+
const target = candidates.find(f => /\.(tsx?|jsx?|vue|svelte)$/i.test(f))
|
|
59
|
+
|| candidates.find(f => /\.(css|scss|less)$/i.test(f))
|
|
60
|
+
|| candidates[0];
|
|
61
|
+
if (!target)
|
|
62
|
+
return null;
|
|
63
|
+
const fullPath = path.join(searchDir, target);
|
|
64
|
+
if (fs.statSync(fullPath).isDirectory())
|
|
65
|
+
return null;
|
|
66
|
+
try {
|
|
67
|
+
let content = fs.readFileSync(fullPath, 'utf8');
|
|
68
|
+
const lines = content.split('\n');
|
|
69
|
+
if (lines.length > 80) {
|
|
70
|
+
content = lines.slice(0, 80).join('\n') + '\n... (truncated)';
|
|
71
|
+
}
|
|
72
|
+
const isAppRouter = fs.existsSync(path.join(this.toolContext.projectRoot || process.cwd(), 'app'));
|
|
73
|
+
const antiPatterns = [
|
|
74
|
+
/legacyBehavior/,
|
|
75
|
+
/^\s*<[A-Za-z]/m,
|
|
76
|
+
];
|
|
77
|
+
if (isAppRouter) {
|
|
78
|
+
antiPatterns.push(/import\s+React\s+from\s+['"]react['"]/);
|
|
79
|
+
}
|
|
80
|
+
if (antiPatterns.some(re => re.test(content)))
|
|
81
|
+
return null;
|
|
82
|
+
return { fullPath, content };
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
let ref = checkDirForReference(dir);
|
|
89
|
+
if (ref) {
|
|
90
|
+
return `\nExisting file in ${dir}/ (use as a style reference for structure and import order only):\n--- ${ref.fullPath} ---\n${ref.content}\n--- end ---`;
|
|
91
|
+
}
|
|
92
|
+
if (dir && dir !== '.' && dir !== '') {
|
|
93
|
+
const parentDir = path.dirname(dir);
|
|
94
|
+
ref = checkDirForReference(parentDir);
|
|
95
|
+
if (ref) {
|
|
96
|
+
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 ---`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const commonDirs = ['src/components', 'components', 'src/pages', 'pages', 'app', 'src', 'lib'];
|
|
100
|
+
for (const commonDir of commonDirs) {
|
|
101
|
+
const fullCommonDir = path.join(this.toolContext.projectRoot || process.cwd(), commonDir);
|
|
102
|
+
ref = checkDirForReference(fullCommonDir);
|
|
103
|
+
if (ref) {
|
|
104
|
+
return `\nExisting file in ${commonDir}/ (use as a style reference for structure and import order only):\n--- ${ref.fullPath} ---\n${ref.content}\n--- end ---`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
discoverDesignTokens() {
|
|
110
|
+
const cwd = this.toolContext.projectRoot || process.cwd();
|
|
111
|
+
let tokens = '';
|
|
112
|
+
const twConfigs = ['tailwind.config.js', 'tailwind.config.ts', 'tailwind.config.cjs'];
|
|
113
|
+
for (const configName of twConfigs) {
|
|
114
|
+
const fullPath = path.join(cwd, configName);
|
|
115
|
+
if (fs.existsSync(fullPath)) {
|
|
116
|
+
try {
|
|
117
|
+
const content = fs.readFileSync(fullPath, 'utf8');
|
|
118
|
+
const themeMatch = content.match(/theme\s*:\s*\{[\s\S]*?\}/);
|
|
119
|
+
if (themeMatch) {
|
|
120
|
+
tokens += `\nTailwind Theme Configuration (from ${configName}):\n${themeMatch[0]}\n`;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const lines = content.split('\n').slice(0, 40).join('\n');
|
|
124
|
+
tokens += `\nTailwind Configuration Snippet (from ${configName}):\n${lines}\n`;
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
catch { /* ignore */ }
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const commonCssDirs = ['src', 'app', 'styles', 'src/styles', '.'];
|
|
132
|
+
const cssFileNames = ['globals.css', 'global.css', 'index.css', 'app.css', 'main.css'];
|
|
133
|
+
for (const dirName of commonCssDirs) {
|
|
134
|
+
for (const fileName of cssFileNames) {
|
|
135
|
+
const fullPath = path.join(cwd, dirName, fileName);
|
|
136
|
+
if (fs.existsSync(fullPath)) {
|
|
137
|
+
try {
|
|
138
|
+
const content = fs.readFileSync(fullPath, 'utf8');
|
|
139
|
+
const rootMatches = content.match(/:root\s*\{[\s\S]*?\}/g);
|
|
140
|
+
if (rootMatches && rootMatches.length > 0) {
|
|
141
|
+
tokens += `\nDesign Tokens / CSS Variables (from ${dirName}/${fileName}):\n${rootMatches.join('\n')}\n`;
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
catch { /* ignore */ }
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (tokens)
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
return tokens;
|
|
152
|
+
}
|
|
153
|
+
pickMemoryCategory(task) {
|
|
154
|
+
const goal = task.goal;
|
|
155
|
+
if (task.role === 'debugger' || /fix|debug|repair|resolve/i.test(goal))
|
|
156
|
+
return 'fix_resolution';
|
|
157
|
+
if (task.role === 'reviewer' || /verify|test|review|validate|inspect/i.test(goal))
|
|
158
|
+
return 'build_rule';
|
|
159
|
+
if (task.role === 'planner' || /spec|contract|interface/i.test(goal))
|
|
160
|
+
return 'schema_contract';
|
|
161
|
+
return 'code_pattern';
|
|
162
|
+
}
|
|
163
|
+
getTaskRelatedSigmaIds(db, activeIds, task) {
|
|
164
|
+
if (activeIds.length === 0)
|
|
165
|
+
return [];
|
|
166
|
+
const active = new Set(activeIds);
|
|
167
|
+
const paths = extractFilePaths(task.goal).map(p => p.toLowerCase());
|
|
168
|
+
const keywords = task.goal
|
|
169
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
170
|
+
.map(k => k.toLowerCase())
|
|
171
|
+
.filter(k => k.length >= 3);
|
|
172
|
+
const hasOverlap = (tags) => {
|
|
173
|
+
for (const tag of tags) {
|
|
174
|
+
const t = tag.toLowerCase();
|
|
175
|
+
if (paths.some(p => p.includes(t) || t.includes(p)))
|
|
176
|
+
return true;
|
|
177
|
+
if (keywords.some(k => k.includes(t) || t.includes(k)))
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
};
|
|
182
|
+
const related = new Set();
|
|
183
|
+
for (const row of getSigmaMemories(db, 0, 200)) {
|
|
184
|
+
if (!active.has(row.id))
|
|
185
|
+
continue;
|
|
186
|
+
let tags = [];
|
|
187
|
+
try {
|
|
188
|
+
const parsed = JSON.parse(row.tags);
|
|
189
|
+
if (Array.isArray(parsed))
|
|
190
|
+
tags = parsed.map(String);
|
|
191
|
+
}
|
|
192
|
+
catch { /* unparseable tags */ }
|
|
193
|
+
if (hasOverlap(tags))
|
|
194
|
+
related.add(row.id);
|
|
195
|
+
}
|
|
196
|
+
return activeIds.filter(id => related.has(id));
|
|
197
|
+
}
|
|
198
|
+
async delegateTask(task, tasks, goal, projectContext) {
|
|
199
|
+
const role = getAgentRole(task.role);
|
|
200
|
+
console.log(`\n[SPAWN] Delegating to ${roleLabel(role.name)}: ${task.goal}`);
|
|
201
|
+
const tools = filterToolsForRole([...BUILTIN_TOOLS, ...mcpRegistry.getToolDefinitions()], task.role);
|
|
202
|
+
const historyStartIndex = this.toolContext.patchHistory?.length || 0;
|
|
203
|
+
const currentDate = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });
|
|
204
|
+
let enrichedContext = `Current date: ${currentDate}\n`;
|
|
205
|
+
const projectRoot = this.toolContext.projectRoot || this.sessionManager?.projectRoot || process.cwd();
|
|
206
|
+
const specContract = loadSpecContract(projectRoot);
|
|
207
|
+
if (specContract) {
|
|
208
|
+
enrichedContext += `\n${formatSpecForPromptSafe(specContract, projectRoot)}\n`;
|
|
209
|
+
}
|
|
210
|
+
const shellType = getResolvedShellType();
|
|
211
|
+
if (shellType === 'bash') {
|
|
212
|
+
enrichedContext += '\n[SHELL] Terminal commands run in BASH (git-bash/MSYS) on this Windows host. Use bash syntax ONLY — NOT PowerShell/cmd. Specifically: use "$" for variables (never "$null"), avoid "Select-String"/"Where-Object", and never use PowerShell "{ ... }" script blocks. Example: ls -la dir || echo "missing".\n';
|
|
213
|
+
}
|
|
214
|
+
else if (shellType === 'powershell') {
|
|
215
|
+
enrichedContext += '\n[SHELL] Terminal commands run in POWERSHELL. Use PowerShell syntax ($, $null, Select-String are valid). Avoid bash-only constructs like "2>/dev/null" (use "2>$null").\n';
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
enrichedContext += '\n[SHELL] Terminal commands run in CMD (Windows command prompt). Use cmd.exe syntax (not bash, not PowerShell). Use "dir", "2>nul", "if exist".\n';
|
|
219
|
+
}
|
|
220
|
+
const frameworkBlock = projectContext
|
|
221
|
+
? `Follow the project framework conventions (e.g., Next.js pages go under pages/, Vue components under components/).\n`
|
|
222
|
+
: '';
|
|
223
|
+
const lessons = this.sessionManager ? this.sessionManager.getFailureLessons(task.role) : [];
|
|
224
|
+
const topLesson = lessons.length > 0 ? lessons.sort((a, b) => ((b.used_count || 0) - (a.used_count || 0)))[0] : null;
|
|
225
|
+
if (topLesson) {
|
|
226
|
+
enrichedContext += `[LESSON] Previously failed on: "${topLesson.error_snippet}" -> resolution: ${topLesson.resolution} (occurred ${topLesson.used_count}x)\n`;
|
|
227
|
+
}
|
|
228
|
+
const styleRef = this.findStyleReference(task.goal);
|
|
229
|
+
if (styleRef) {
|
|
230
|
+
enrichedContext += styleRef;
|
|
231
|
+
}
|
|
232
|
+
if (task.role === 'coder') {
|
|
233
|
+
const designTokens = this.discoverDesignTokens();
|
|
234
|
+
if (designTokens) {
|
|
235
|
+
enrichedContext += designTokens;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const taskReqs = extractRequirements(task.goal);
|
|
239
|
+
if (taskReqs.length > 0) {
|
|
240
|
+
enrichedContext += `\nRequirements:\n${taskReqs.slice(0, 4).map(r => ` - ${r}`).join('\n')}\n`;
|
|
241
|
+
}
|
|
242
|
+
if (taskReqs.length > 0 && task.role === 'coder') {
|
|
243
|
+
enrichedContext += `\nCRITICAL: You MUST implement every requirement above with real, specific content. Do NOT use generic filler like "Welcome to our platform", "We provide services", "Learn more about us", or placeholder text. Each requirement needs actual concrete content that a real business would publish.\n`;
|
|
244
|
+
}
|
|
245
|
+
const scopePaths = extractFilePaths(task.goal);
|
|
246
|
+
if (scopePaths.length > 0) {
|
|
247
|
+
enrichedContext += `\nSCOPE: only touch ${scopePaths.join(', ')}. Do NOT create a parallel module (e.g. a './foo/index.ts' beside an existing 'src/foo.ts') or expand into an unrelated refactor — if you find broken/duplicate adjacent code, fix the existing file in place.`;
|
|
248
|
+
}
|
|
249
|
+
const orphanWarn = this.toolContext.projectRoot
|
|
250
|
+
? orphanedModuleWarning(task.goal, this.toolContext.projectRoot)
|
|
251
|
+
: null;
|
|
252
|
+
if (orphanWarn) {
|
|
253
|
+
enrichedContext += `\n${orphanWarn}`;
|
|
254
|
+
}
|
|
255
|
+
enrichedContext += `\n${frameworkBlock}${task.context}`;
|
|
256
|
+
const frameworkRules = getFrameworkGuidance(projectContext, this.toolContext.projectRoot);
|
|
257
|
+
let sigmaMemBlock = '';
|
|
258
|
+
let activeSigmaMemoryIds = [];
|
|
259
|
+
const sigmaDb = SigmaMemEngine.resolveProjectMemDb(this.sessionManager, this.toolContext.projectRoot);
|
|
260
|
+
if (sigmaDb) {
|
|
261
|
+
const sigmaRes = SigmaMemEngine.getPromptContext(sigmaDb, task.role, 0.60, 5, extractFilePaths(task.goal));
|
|
262
|
+
sigmaMemBlock = sigmaRes.prompt;
|
|
263
|
+
activeSigmaMemoryIds = sigmaRes.activeMemoryIds;
|
|
264
|
+
SigmaMemEngine.markMemoriesUsed(sigmaDb, activeSigmaMemoryIds);
|
|
265
|
+
}
|
|
266
|
+
const systemExtra = `Project context:\n${projectContext || '(none discovered)'}${frameworkRules}${sigmaMemBlock}\n`;
|
|
267
|
+
if (frameworkRules && task.role === 'coder') {
|
|
268
|
+
enrichedContext = `IMPORTANT: The CODING RULES in your system context are mandatory and override any patterns you observe in style reference files or your training data.\n\n` + enrichedContext;
|
|
269
|
+
}
|
|
270
|
+
let result = await this.subAgentRunner.runAgent(role, task.goal, enrichedContext, tools, systemExtra);
|
|
271
|
+
if (process.env.DAEDALUS_ENSEMBLE === 'true' && task.role === 'coder' && !this.toolContext.abortSignal.aborted) {
|
|
272
|
+
const firstPatches = this.toolContext.patchHistory?.slice(historyStartIndex) || [];
|
|
273
|
+
const firstCount = firstPatches.length;
|
|
274
|
+
const secondRole = { ...role, temperature: 0.5 };
|
|
275
|
+
const secondResult = await this.subAgentRunner.runAgent(secondRole, task.goal, enrichedContext, tools, systemExtra);
|
|
276
|
+
const secondPatches = this.toolContext.patchHistory?.slice(historyStartIndex) || [];
|
|
277
|
+
const secondCount = secondPatches.length;
|
|
278
|
+
if (secondCount > firstCount) {
|
|
279
|
+
result = secondResult;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
if (this.toolContext.patchHistory) {
|
|
283
|
+
this.toolContext.patchHistory.length = historyStartIndex + firstCount;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (this.toolContext.abortSignal.aborted) {
|
|
288
|
+
this.results.push({
|
|
289
|
+
role: task.role,
|
|
290
|
+
goal: task.goal,
|
|
291
|
+
summary: 'Task aborted by user',
|
|
292
|
+
success: false,
|
|
293
|
+
});
|
|
294
|
+
task.status = 'failed';
|
|
295
|
+
task.error = 'Task aborted by user';
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const MAX_TURNS_SIGNAL = 'Agent reached max turns';
|
|
299
|
+
const PATCH_ABORT_PREFIX = 'Agent aborted: too many patch failures';
|
|
300
|
+
if (result.startsWith(PATCH_ABORT_PREFIX)) {
|
|
301
|
+
task.status = 'failed';
|
|
302
|
+
task.error = result.split('\n')[0];
|
|
303
|
+
if (task.role === 'coder' || task.role === 'debugger') {
|
|
304
|
+
await rollbackTaskPatches(this.toolContext, historyStartIndex);
|
|
305
|
+
}
|
|
306
|
+
this.results.push({ role: task.role, goal: task.goal, summary: result, success: false });
|
|
307
|
+
console.log(`[${pc.red('FAILED')}] ${role.name}: ${task.error}`);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
if (result === MAX_TURNS_SIGNAL) {
|
|
311
|
+
const partialWork = (this.toolContext.patchHistory?.length ?? 0) > historyStartIndex;
|
|
312
|
+
const depth = task.splitDepth ?? 0;
|
|
313
|
+
if (partialWork && depth < 3 && tasks && this.options?.createPlan && this.options?.parseDelegationTasks) {
|
|
314
|
+
console.log(`\n${pc.yellow('Task exceeded turn limit with partial progress.')} Splitting remaining work (depth ${depth + 1})...`);
|
|
315
|
+
const newPatches = this.toolContext.patchHistory?.slice(historyStartIndex) || [];
|
|
316
|
+
const filesDone = [...new Set(newPatches.map(p => p.filePath).filter(Boolean))];
|
|
317
|
+
task.status = 'completed';
|
|
318
|
+
this.results.push({
|
|
319
|
+
role: task.role,
|
|
320
|
+
goal: task.goal,
|
|
321
|
+
summary: 'Partially completed — splitting remaining work into sub-tasks',
|
|
322
|
+
success: true,
|
|
323
|
+
});
|
|
324
|
+
const doneCtx = filesDone.length > 0 ? `\nPartially completed files: ${filesDone.join(', ')}` : '';
|
|
325
|
+
const subPlan = await this.options.createPlan(`Continue the remaining work for: ${task.goal}${doneCtx}\nThe previous agent only got partial work done before hitting the turn limit. Break this into smaller, focused steps.`, projectContext);
|
|
326
|
+
const subTasks = this.options.parseDelegationTasks(subPlan, goal || task.goal);
|
|
327
|
+
const currentIndex = (tasks || []).indexOf(task);
|
|
328
|
+
const doneBeforeSplit = (tasks || []).filter((t, idx) => t.status === 'completed' && idx < currentIndex);
|
|
329
|
+
const deduped = subTasks.filter(st => {
|
|
330
|
+
if (doneBeforeSplit.length === 0 || st.role !== 'coder')
|
|
331
|
+
return true;
|
|
332
|
+
const newPaths = extractFilePaths(st.goal).map(p => p.toLowerCase());
|
|
333
|
+
if (newPaths.length === 0)
|
|
334
|
+
return true;
|
|
335
|
+
return !doneBeforeSplit.some(d => {
|
|
336
|
+
if (d.role !== 'coder')
|
|
337
|
+
return false;
|
|
338
|
+
const donePaths = extractFilePaths(d.goal).map(p => p.toLowerCase());
|
|
339
|
+
return donePaths.some(dp => newPaths.includes(dp));
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
const inheritCtx = filesDone.length > 0
|
|
343
|
+
? `Original goal: ${task.goal}\nProject root: ${this.toolContext.projectRoot || process.cwd()}\n\nIMPORTANT — Files that were partially created and MUST be completed or replaced:\n${filesDone.map(f => ` - ${f}`).join('\n')}\n\nThe previous agent left these files incomplete before hitting the turn limit. You MUST read each file, then either complete it with a proper implementation or replace it entirely. Check the existing project structure first — use read_file on existing files to understand what's already there before creating new ones.`
|
|
344
|
+
: `Original goal: ${task.goal}\nProject root: ${this.toolContext.projectRoot || process.cwd()}\n\nCheck the existing project structure first — use read_file on existing files to understand what's already there before creating new ones.`;
|
|
345
|
+
for (const st of deduped) {
|
|
346
|
+
st.status = 'pending';
|
|
347
|
+
st.splitDepth = depth + 1;
|
|
348
|
+
st.context = `${inheritCtx}\n\n${st.context}`;
|
|
349
|
+
tasks.push(st);
|
|
350
|
+
}
|
|
351
|
+
if (this.options?.printTaskList) {
|
|
352
|
+
this.options.printTaskList(tasks);
|
|
353
|
+
}
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
task.status = 'failed';
|
|
357
|
+
task.error = partialWork
|
|
358
|
+
? `Task still too large after ${depth} splits — manual review needed`
|
|
359
|
+
: 'Task too large and no work completed';
|
|
360
|
+
if (task.role === 'coder' || task.role === 'debugger') {
|
|
361
|
+
await rollbackTaskPatches(this.toolContext, historyStartIndex);
|
|
362
|
+
}
|
|
363
|
+
this.results.push({
|
|
364
|
+
role: task.role,
|
|
365
|
+
goal: task.goal,
|
|
366
|
+
summary: task.error,
|
|
367
|
+
success: false,
|
|
368
|
+
});
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
let verified = await verifyArtifacts(this.toolContext, task.role, task.goal, result, historyStartIndex);
|
|
372
|
+
let evidence = '';
|
|
373
|
+
let placeholderSites = [];
|
|
374
|
+
let checkLogs = '';
|
|
375
|
+
if (verified) {
|
|
376
|
+
placeholderSites = await checkPlaceholders(this.toolContext, historyStartIndex);
|
|
377
|
+
if (placeholderSites.length > 0) {
|
|
378
|
+
console.log(pc.yellow(`\nFound ${placeholderSites.length} placeholder(s) in written files`));
|
|
379
|
+
const filled = await fillPlaceholders(this.toolContext, historyStartIndex);
|
|
380
|
+
if (filled > 0) {
|
|
381
|
+
console.log(pc.green(` Auto-filled ${filled} trivial placeholder(s) (year, name, etc.)`));
|
|
382
|
+
}
|
|
383
|
+
placeholderSites = await checkPlaceholders(this.toolContext, historyStartIndex);
|
|
384
|
+
if (placeholderSites.length === 0) {
|
|
385
|
+
verified = true;
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
verified = false;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
if (verified && (task.role === 'coder' || task.role === 'debugger') && (this.toolContext.patchHistory?.length ?? 0) > historyStartIndex) {
|
|
393
|
+
const checkResult = await runBuildVerification(this.toolContext, historyStartIndex);
|
|
394
|
+
if (!checkResult.success) {
|
|
395
|
+
const modifiedFiles = this.toolContext.patchHistory.slice(historyStartIndex).map(p => p.filePath);
|
|
396
|
+
const isRelated = isBuildErrorRelated(checkResult.errorLogs || '', modifiedFiles, this.toolContext.projectRoot);
|
|
397
|
+
if (isRelated) {
|
|
398
|
+
verified = false;
|
|
399
|
+
checkLogs = (checkResult.errorLogs || 'Build check failed') + generateBuildErrorHint(checkResult.errorLogs || '');
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
console.log(pc.yellow(`\n[VERIFY] Build check failed, but errors appear to be in unrelated files. Ignoring build failure for this task.`));
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (verified) {
|
|
406
|
+
const specResult = await verifySpecAssertions(this.toolContext.projectRoot || process.cwd());
|
|
407
|
+
if (!specResult.success) {
|
|
408
|
+
console.log(pc.yellow(`\n[SpecFirst] Spec contract assertion check failed!`));
|
|
409
|
+
verified = false;
|
|
410
|
+
checkLogs = (specResult.errorLogs || 'Spec contract check failed');
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
if (!verified) {
|
|
415
|
+
let repairCtx = task.context;
|
|
416
|
+
if (placeholderSites.length > 0) {
|
|
417
|
+
const siteList = placeholderSites.map(s => ` - ${s}`).join('\n');
|
|
418
|
+
repairCtx += `\n\nPrevious attempt contained placeholders instead of real content:\n${siteList}\n\nYou MUST replace ALL placeholders with real content. Never output placeholder text like [Year], [Your Name], etc. Use actual values.`;
|
|
419
|
+
}
|
|
420
|
+
if (checkLogs) {
|
|
421
|
+
repairCtx += `\n\nPrevious attempt failed build/compilation verification. The check failed with the following error output:\n\`\`\`\n${checkLogs}\n\`\`\`\nPlease fix the build/compilation errors listed above.`;
|
|
422
|
+
}
|
|
423
|
+
const repaired = await attemptRepair({ toolContext: this.toolContext, runAgent: (r, g, c, t) => this.subAgentRunner.runAgent(r, g, c, t) }, task, {
|
|
424
|
+
summary: result,
|
|
425
|
+
}, repairCtx, historyStartIndex);
|
|
426
|
+
result = repaired.summary;
|
|
427
|
+
verified = repaired.success;
|
|
428
|
+
evidence = repaired.evidence || '';
|
|
429
|
+
if (verified) {
|
|
430
|
+
const stillPlaceholders = await checkPlaceholders(this.toolContext, historyStartIndex);
|
|
431
|
+
if (stillPlaceholders.length > 0) {
|
|
432
|
+
const filled = await fillPlaceholders(this.toolContext, historyStartIndex);
|
|
433
|
+
if (filled > 0)
|
|
434
|
+
console.log(pc.green(` Auto-filled ${filled} remaining trivial placeholder(s)`));
|
|
435
|
+
const remain = await checkPlaceholders(this.toolContext, historyStartIndex);
|
|
436
|
+
if (remain.length > 0) {
|
|
437
|
+
verified = false;
|
|
438
|
+
evidence = `Placeholders remain: ${remain.join('; ')}`;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
const resultForCheck = result.replace(/<think>[\s\S]*?<\/think>/gi, '').trim();
|
|
444
|
+
const success = verified && !isDeclaredError(resultForCheck) && verifyArtifactsThoroughly(this.toolContext, task.role, task.goal, resultForCheck, historyStartIndex);
|
|
445
|
+
if (success) {
|
|
446
|
+
const clean = buildCleanSummary(this.toolContext, task, result, historyStartIndex);
|
|
447
|
+
if (clean)
|
|
448
|
+
result = clean;
|
|
449
|
+
if (this.sessionManager?.projectMemDb) {
|
|
450
|
+
const related = this.getTaskRelatedSigmaIds(this.sessionManager.projectMemDb, activeSigmaMemoryIds, task);
|
|
451
|
+
SigmaMemEngine.rewardSuccessfulPass(this.sessionManager.projectMemDb, related.length > 0 ? related : activeSigmaMemoryIds);
|
|
452
|
+
SigmaMemEngine.recordVerifiedKnowledge(this.sessionManager.projectMemDb, {
|
|
453
|
+
agentRole: task.role,
|
|
454
|
+
category: this.pickMemoryCategory(task),
|
|
455
|
+
tags: extractFilePaths(task.goal),
|
|
456
|
+
summary: cleanTaskText(task.goal),
|
|
457
|
+
content: result.slice(0, 300),
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
task.status = success ? 'completed' : 'failed';
|
|
462
|
+
if (!success) {
|
|
463
|
+
task.error = resultForCheck.split('\n')[0] || result.split('\n')[0] || 'Unknown failure';
|
|
464
|
+
if (this.sessionManager?.projectMemDb) {
|
|
465
|
+
const related = this.getTaskRelatedSigmaIds(this.sessionManager.projectMemDb, activeSigmaMemoryIds, task);
|
|
466
|
+
if (related.length > 0) {
|
|
467
|
+
SigmaMemEngine.penalizeFailedAttempt(this.sessionManager.projectMemDb, related, task.error?.slice(0, 280));
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
if (task.role === 'coder' || task.role === 'debugger') {
|
|
471
|
+
await rollbackTaskPatches(this.toolContext, historyStartIndex);
|
|
472
|
+
}
|
|
473
|
+
if (this.sessionManager) {
|
|
474
|
+
try {
|
|
475
|
+
this.sessionManager.saveFailureLesson({
|
|
476
|
+
task_role: task.role,
|
|
477
|
+
goal_keywords: task.goal.split(' ').slice(0, 5).join(' '),
|
|
478
|
+
error_snippet: task.error.slice(0, 200),
|
|
479
|
+
resolution: 'Pending — retry may succeed with different approach',
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
catch { /* session not available */ }
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
this.results.push({
|
|
486
|
+
role: task.role,
|
|
487
|
+
goal: task.goal,
|
|
488
|
+
summary: result,
|
|
489
|
+
success,
|
|
490
|
+
...(evidence ? { evidence } : {}),
|
|
491
|
+
});
|
|
492
|
+
if (success) {
|
|
493
|
+
console.log(`[${pc.green('OK')}] ${role.name} completed`);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
console.log(`[${pc.red('FAILED')}] ${role.name}: ${task.error || 'verification failed'}`);
|
|
497
|
+
}
|
|
498
|
+
if (success && this.sessionManager && task.role !== 'reviewer') {
|
|
499
|
+
try {
|
|
500
|
+
const reviewerRole = getAgentRole('reviewer');
|
|
501
|
+
if (reviewerRole && !reviewerRole.canDelegate) {
|
|
502
|
+
const touchedFiles = (this.toolContext.patchHistory || [])
|
|
503
|
+
.filter((h) => h.filePath)
|
|
504
|
+
.map((h) => h.filePath);
|
|
505
|
+
const fileList = touchedFiles.length > 0
|
|
506
|
+
? `\nFILES_TOUCHED: ${touchedFiles.join(', ')}`
|
|
507
|
+
: '';
|
|
508
|
+
const truncatedResult = result.length > 6000 ? result.slice(0, 6000) + '\n...[result truncated for review]' : result;
|
|
509
|
+
const reviewContext = `TASK: ${task.goal}\n\nAgent result:\n${truncatedResult}${fileList}\n\nReview the files that were touched for this task. Use git_diff or list files modified recently. Check for syntax errors, correctness, and project health.`;
|
|
510
|
+
const reviewTools = filterToolsForRole([...BUILTIN_TOOLS, ...mcpRegistry.getToolDefinitions()], 'reviewer');
|
|
511
|
+
const review = await this.subAgentRunner.runAgent(reviewerRole, `Review files from task: ${task.goal}`, reviewContext, reviewTools);
|
|
512
|
+
const statusMatch = review.match(/STATUS:\s*(PASS|NEEDS_FIX|STOP)/i);
|
|
513
|
+
const verdict = statusMatch?.[1]?.toUpperCase() || 'PASS';
|
|
514
|
+
if ((verdict === 'NEEDS_FIX' || verdict === 'STOP') && (task.role === 'coder' || task.role === 'debugger')) {
|
|
515
|
+
console.log(pc.yellow(`\n[REVIEWER] Found issues — triggering repair pass...`));
|
|
516
|
+
const findingsMatch = review.match(/FINDINGS:([\s\S]*?)(?:RECOMMENDATION:|$)/i);
|
|
517
|
+
const findings = findingsMatch?.[1]?.trim() || review;
|
|
518
|
+
const repairGoal = `Fix the following reviewer findings in the files you just wrote for task: "${task.goal}"\n\nFINDINGS:\n${findings}\n\nApply targeted fixes only. Do not change unrelated code.`;
|
|
519
|
+
const coderRole = getAgentRole('coder');
|
|
520
|
+
if (coderRole) {
|
|
521
|
+
const repairTools = filterToolsForRole([...BUILTIN_TOOLS, ...mcpRegistry.getToolDefinitions()], 'coder');
|
|
522
|
+
await this.subAgentRunner.runAgent(coderRole, repairGoal, reviewContext, repairTools);
|
|
523
|
+
console.log(pc.green(`[REPAIR] Repair pass complete.`));
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
try {
|
|
527
|
+
const buildStatus = /build.*pass|no errors|pass/i.test(review) ? 'passing' : 'needs_attention';
|
|
528
|
+
this.sessionManager.saveProjectStatus({
|
|
529
|
+
build_status: buildStatus,
|
|
530
|
+
test_status: /test.*pass|no failures/i.test(review) ? 'passing' : 'unknown',
|
|
531
|
+
key_concerns: review.split('\n').filter(l => /ERROR|FAIL|STOP|needs_fix/i.test(l)).slice(0, 3).join('; '),
|
|
532
|
+
last_reviewed_at: Date.now(),
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
catch { /* status save failed, non-critical */ }
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
catch { /* review failed, non-critical */ }
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
//# sourceMappingURL=task-delegator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-delegator.js","sourceRoot":"","sources":["../../src/agents/task-delegator.ts"],"names":[],"mappings":"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"}
|