@dcyfr/ai 1.0.1 → 1.0.3
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 +21 -0
- package/README.md +19 -22
- package/bin/cli.js +12 -0
- package/bin/tui/config-wizard.js +107 -0
- package/bin/tui/validation-dashboard.js +123 -0
- package/bin/tui.js +259 -0
- package/dist/ai/agents/agent-loader.d.ts +131 -0
- package/dist/ai/agents/agent-loader.d.ts.map +1 -0
- package/dist/ai/agents/agent-loader.js +399 -0
- package/dist/ai/agents/agent-loader.js.map +1 -0
- package/dist/ai/agents/agent-registry.d.ts +120 -0
- package/dist/ai/agents/agent-registry.d.ts.map +1 -0
- package/dist/ai/agents/agent-registry.js +345 -0
- package/dist/ai/agents/agent-registry.js.map +1 -0
- package/dist/ai/agents/agent-router.d.ts +97 -0
- package/dist/ai/agents/agent-router.d.ts.map +1 -0
- package/dist/ai/agents/agent-router.js +375 -0
- package/dist/ai/agents/agent-router.js.map +1 -0
- package/dist/ai/agents/index.d.ts +10 -0
- package/dist/ai/agents/index.d.ts.map +1 -0
- package/dist/ai/agents/index.js +12 -0
- package/dist/ai/agents/index.js.map +1 -0
- package/dist/ai/agents/types.d.ts +264 -0
- package/dist/ai/agents/types.d.ts.map +1 -0
- package/dist/ai/agents/types.js +10 -0
- package/dist/ai/agents/types.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.d.ts +12 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.js +92 -0
- package/dist/ai/agents-builtin/architecture/architecture-reviewer.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.d.ts +12 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.js +103 -0
- package/dist/ai/agents-builtin/architecture/cloud-architect.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/database-architect.d.ts +12 -0
- package/dist/ai/agents-builtin/architecture/database-architect.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/database-architect.js +95 -0
- package/dist/ai/agents-builtin/architecture/database-architect.js.map +1 -0
- package/dist/ai/agents-builtin/architecture/index.d.ts +11 -0
- package/dist/ai/agents-builtin/architecture/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/architecture/index.js +11 -0
- package/dist/ai/agents-builtin/architecture/index.js.map +1 -0
- package/dist/ai/agents-builtin/content/index.d.ts +9 -0
- package/dist/ai/agents-builtin/content/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/content/index.js +9 -0
- package/dist/ai/agents-builtin/content/index.js.map +1 -0
- package/dist/ai/agents-builtin/content/technical-writer.d.ts +12 -0
- package/dist/ai/agents-builtin/content/technical-writer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/content/technical-writer.js +93 -0
- package/dist/ai/agents-builtin/content/technical-writer.js.map +1 -0
- package/dist/ai/agents-builtin/data/data-scientist.d.ts +12 -0
- package/dist/ai/agents-builtin/data/data-scientist.d.ts.map +1 -0
- package/dist/ai/agents-builtin/data/data-scientist.js +92 -0
- package/dist/ai/agents-builtin/data/data-scientist.js.map +1 -0
- package/dist/ai/agents-builtin/data/index.d.ts +9 -0
- package/dist/ai/agents-builtin/data/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/data/index.js +9 -0
- package/dist/ai/agents-builtin/data/index.js.map +1 -0
- package/dist/ai/agents-builtin/development/backend-architect.d.ts +12 -0
- package/dist/ai/agents-builtin/development/backend-architect.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/backend-architect.js +99 -0
- package/dist/ai/agents-builtin/development/backend-architect.js.map +1 -0
- package/dist/ai/agents-builtin/development/frontend-developer.d.ts +12 -0
- package/dist/ai/agents-builtin/development/frontend-developer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/frontend-developer.js +106 -0
- package/dist/ai/agents-builtin/development/frontend-developer.js.map +1 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.d.ts +12 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.js +86 -0
- package/dist/ai/agents-builtin/development/fullstack-developer.js.map +1 -0
- package/dist/ai/agents-builtin/development/index.d.ts +12 -0
- package/dist/ai/agents-builtin/development/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/index.js +12 -0
- package/dist/ai/agents-builtin/development/index.js.map +1 -0
- package/dist/ai/agents-builtin/development/typescript-pro.d.ts +12 -0
- package/dist/ai/agents-builtin/development/typescript-pro.d.ts.map +1 -0
- package/dist/ai/agents-builtin/development/typescript-pro.js +98 -0
- package/dist/ai/agents-builtin/development/typescript-pro.js.map +1 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.d.ts +12 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.js +98 -0
- package/dist/ai/agents-builtin/devops/devops-engineer.js.map +1 -0
- package/dist/ai/agents-builtin/devops/index.d.ts +9 -0
- package/dist/ai/agents-builtin/devops/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/devops/index.js +9 -0
- package/dist/ai/agents-builtin/devops/index.js.map +1 -0
- package/dist/ai/agents-builtin/index.d.ts +36 -0
- package/dist/ai/agents-builtin/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/index.js +107 -0
- package/dist/ai/agents-builtin/index.js.map +1 -0
- package/dist/ai/agents-builtin/performance/index.d.ts +9 -0
- package/dist/ai/agents-builtin/performance/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/performance/index.js +9 -0
- package/dist/ai/agents-builtin/performance/index.js.map +1 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.d.ts +12 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.d.ts.map +1 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.js +89 -0
- package/dist/ai/agents-builtin/performance/performance-profiler.js.map +1 -0
- package/dist/ai/agents-builtin/research/index.d.ts +9 -0
- package/dist/ai/agents-builtin/research/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/research/index.js +9 -0
- package/dist/ai/agents-builtin/research/index.js.map +1 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.d.ts +12 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.d.ts.map +1 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.js +83 -0
- package/dist/ai/agents-builtin/research/research-orchestrator.js.map +1 -0
- package/dist/ai/agents-builtin/security/index.d.ts +9 -0
- package/dist/ai/agents-builtin/security/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/security/index.js +9 -0
- package/dist/ai/agents-builtin/security/index.js.map +1 -0
- package/dist/ai/agents-builtin/security/security-engineer.d.ts +12 -0
- package/dist/ai/agents-builtin/security/security-engineer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/security/security-engineer.js +90 -0
- package/dist/ai/agents-builtin/security/security-engineer.js.map +1 -0
- package/dist/ai/agents-builtin/testing/debugger.d.ts +13 -0
- package/dist/ai/agents-builtin/testing/debugger.d.ts.map +1 -0
- package/dist/ai/agents-builtin/testing/debugger.js +89 -0
- package/dist/ai/agents-builtin/testing/debugger.js.map +1 -0
- package/dist/ai/agents-builtin/testing/index.d.ts +10 -0
- package/dist/ai/agents-builtin/testing/index.d.ts.map +1 -0
- package/dist/ai/agents-builtin/testing/index.js +10 -0
- package/dist/ai/agents-builtin/testing/index.js.map +1 -0
- package/dist/ai/agents-builtin/testing/test-engineer.d.ts +12 -0
- package/dist/ai/agents-builtin/testing/test-engineer.d.ts.map +1 -0
- package/dist/ai/agents-builtin/testing/test-engineer.js +93 -0
- package/dist/ai/agents-builtin/testing/test-engineer.js.map +1 -0
- package/dist/ai/config/loader.d.ts +19 -5
- package/dist/ai/config/loader.d.ts.map +1 -1
- package/dist/ai/config/loader.js +53 -18
- package/dist/ai/config/loader.js.map +1 -1
- package/dist/ai/config/schema.d.ts +600 -8
- package/dist/ai/config/schema.d.ts.map +1 -1
- package/dist/ai/config/schema.js +156 -0
- package/dist/ai/config/schema.js.map +1 -1
- package/dist/ai/index.d.ts +4 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +35 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/mcp/index.d.ts +8 -0
- package/dist/ai/mcp/index.d.ts.map +1 -0
- package/dist/ai/mcp/index.js +8 -0
- package/dist/ai/mcp/index.js.map +1 -0
- package/dist/ai/mcp/mcp-registry.d.ts +127 -0
- package/dist/ai/mcp/mcp-registry.d.ts.map +1 -0
- package/dist/ai/mcp/mcp-registry.js +355 -0
- package/dist/ai/mcp/mcp-registry.js.map +1 -0
- package/dist/ai/mcp/types.d.ts +126 -0
- package/dist/ai/mcp/types.d.ts.map +1 -0
- package/dist/ai/mcp/types.js +9 -0
- package/dist/ai/mcp/types.js.map +1 -0
- package/dist/ai/utils/storage.d.ts +6 -1
- package/dist/ai/utils/storage.d.ts.map +1 -1
- package/dist/ai/utils/storage.js +57 -22
- package/dist/ai/utils/storage.js.map +1 -1
- package/package.json +24 -8
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Router - Task routing and delegation
|
|
3
|
+
*
|
|
4
|
+
* Routes tasks to appropriate agents based on patterns, categories, and conditions.
|
|
5
|
+
* Supports delegation between agents and fallback chains.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/agents/agent-router
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { AgentRouter } from '@dcyfr/ai/agents/agent-router';
|
|
11
|
+
* import { AgentRegistry } from '@dcyfr/ai/agents/agent-registry';
|
|
12
|
+
*
|
|
13
|
+
* const registry = new AgentRegistry();
|
|
14
|
+
* const router = new AgentRouter(registry, {
|
|
15
|
+
* defaultAgent: 'fullstack-developer',
|
|
16
|
+
* delegationEnabled: true,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // Route a task
|
|
20
|
+
* const result = await router.route({
|
|
21
|
+
* description: 'Fix the failing tests',
|
|
22
|
+
* phase: 'implementation',
|
|
23
|
+
* filesInProgress: ['src/app.test.ts'],
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* console.log(`Routed to: ${result.agent.manifest.name}`);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Default routing rules based on task patterns
|
|
31
|
+
*/
|
|
32
|
+
const DEFAULT_ROUTING_RULES = [
|
|
33
|
+
// Testing patterns
|
|
34
|
+
{
|
|
35
|
+
pattern: /test|spec|jest|vitest|coverage|assertion/i,
|
|
36
|
+
agent: 'test-engineer',
|
|
37
|
+
priority: 10,
|
|
38
|
+
},
|
|
39
|
+
// Security patterns
|
|
40
|
+
{
|
|
41
|
+
pattern: /security|auth|vulnerab|owasp|xss|injection|encrypt/i,
|
|
42
|
+
agent: 'security-engineer',
|
|
43
|
+
priority: 10,
|
|
44
|
+
},
|
|
45
|
+
// Performance patterns
|
|
46
|
+
{
|
|
47
|
+
pattern: /performance|optimize|speed|memory|cpu|cache|lazy|bundle/i,
|
|
48
|
+
agent: 'performance-profiler',
|
|
49
|
+
priority: 10,
|
|
50
|
+
},
|
|
51
|
+
// Architecture patterns
|
|
52
|
+
{
|
|
53
|
+
pattern: /architect|design|refactor|pattern|structure|modular/i,
|
|
54
|
+
agent: 'architecture-reviewer',
|
|
55
|
+
priority: 20,
|
|
56
|
+
},
|
|
57
|
+
// Database patterns
|
|
58
|
+
{
|
|
59
|
+
pattern: /database|sql|postgres|mongo|redis|query|migration/i,
|
|
60
|
+
agent: 'database-architect',
|
|
61
|
+
priority: 20,
|
|
62
|
+
},
|
|
63
|
+
// DevOps patterns
|
|
64
|
+
{
|
|
65
|
+
pattern: /deploy|ci|cd|docker|kubernetes|aws|azure|infra/i,
|
|
66
|
+
agent: 'devops-engineer',
|
|
67
|
+
priority: 20,
|
|
68
|
+
},
|
|
69
|
+
// Data patterns
|
|
70
|
+
{
|
|
71
|
+
pattern: /data|analysis|ml|machine learning|model|dataset/i,
|
|
72
|
+
agent: 'data-scientist',
|
|
73
|
+
priority: 20,
|
|
74
|
+
},
|
|
75
|
+
// Documentation patterns
|
|
76
|
+
{
|
|
77
|
+
pattern: /document|readme|api doc|jsdoc|typedoc/i,
|
|
78
|
+
agent: 'technical-writer',
|
|
79
|
+
priority: 30,
|
|
80
|
+
},
|
|
81
|
+
// Research patterns
|
|
82
|
+
{
|
|
83
|
+
pattern: /research|investigate|explore|understand|analyze/i,
|
|
84
|
+
agent: 'research-orchestrator',
|
|
85
|
+
priority: 30,
|
|
86
|
+
},
|
|
87
|
+
// Frontend patterns
|
|
88
|
+
{
|
|
89
|
+
pattern: /frontend|react|vue|angular|css|style|ui|component/i,
|
|
90
|
+
agent: 'frontend-developer',
|
|
91
|
+
priority: 40,
|
|
92
|
+
},
|
|
93
|
+
// Backend patterns
|
|
94
|
+
{
|
|
95
|
+
pattern: /backend|api|server|endpoint|route|middleware/i,
|
|
96
|
+
agent: 'backend-architect',
|
|
97
|
+
priority: 40,
|
|
98
|
+
},
|
|
99
|
+
// Default development
|
|
100
|
+
{
|
|
101
|
+
pattern: /fix|bug|implement|feature|code|develop/i,
|
|
102
|
+
agent: 'fullstack-developer',
|
|
103
|
+
priority: 50,
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
/**
|
|
107
|
+
* Default router configuration
|
|
108
|
+
*/
|
|
109
|
+
const DEFAULT_CONFIG = {
|
|
110
|
+
defaultAgent: 'fullstack-developer',
|
|
111
|
+
routingRules: DEFAULT_ROUTING_RULES,
|
|
112
|
+
delegationEnabled: true,
|
|
113
|
+
maxDelegationDepth: 3,
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Agent Router - routes tasks to appropriate agents
|
|
117
|
+
*/
|
|
118
|
+
export class AgentRouter {
|
|
119
|
+
registry;
|
|
120
|
+
config;
|
|
121
|
+
delegationDepth = 0;
|
|
122
|
+
constructor(registry, config = {}) {
|
|
123
|
+
this.registry = registry;
|
|
124
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Route a task to the most appropriate agent
|
|
128
|
+
*/
|
|
129
|
+
async route(task) {
|
|
130
|
+
// Find matching rules sorted by priority
|
|
131
|
+
const matchedRules = this.findMatchingRules(task);
|
|
132
|
+
// Try each matched rule in priority order
|
|
133
|
+
for (const rule of matchedRules) {
|
|
134
|
+
const agent = this.registry.resolveAgent(rule.agent);
|
|
135
|
+
if (agent) {
|
|
136
|
+
const fallbacks = this.findFallbacks(agent, task);
|
|
137
|
+
return {
|
|
138
|
+
agent,
|
|
139
|
+
matchedRule: rule,
|
|
140
|
+
fallbacks,
|
|
141
|
+
confidence: this.calculateConfidence(rule, task),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Fall back to default agent
|
|
146
|
+
const defaultAgent = this.registry.resolveAgent(this.config.defaultAgent);
|
|
147
|
+
if (defaultAgent) {
|
|
148
|
+
return {
|
|
149
|
+
agent: defaultAgent,
|
|
150
|
+
fallbacks: [],
|
|
151
|
+
confidence: 0.5,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
throw new Error(`No agent found for task and default agent '${this.config.defaultAgent}' not available`);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Route with custom rules (merges with default rules)
|
|
158
|
+
*/
|
|
159
|
+
async routeWithRules(task, customRules) {
|
|
160
|
+
const originalRules = this.config.routingRules;
|
|
161
|
+
this.config.routingRules = [...customRules, ...originalRules];
|
|
162
|
+
try {
|
|
163
|
+
return await this.route(task);
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
this.config.routingRules = originalRules;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Delegate task to another agent
|
|
171
|
+
*/
|
|
172
|
+
async delegate(fromAgent, toAgentName, task) {
|
|
173
|
+
if (!this.config.delegationEnabled) {
|
|
174
|
+
throw new Error('Delegation is disabled');
|
|
175
|
+
}
|
|
176
|
+
if (this.config.maxDelegationDepth &&
|
|
177
|
+
this.delegationDepth >= this.config.maxDelegationDepth) {
|
|
178
|
+
throw new Error(`Maximum delegation depth (${this.config.maxDelegationDepth}) exceeded`);
|
|
179
|
+
}
|
|
180
|
+
// Check if delegation is allowed
|
|
181
|
+
if (fromAgent.manifest.delegatesTo &&
|
|
182
|
+
!fromAgent.manifest.delegatesTo.includes(toAgentName)) {
|
|
183
|
+
throw new Error(`Agent '${fromAgent.manifest.name}' cannot delegate to '${toAgentName}'`);
|
|
184
|
+
}
|
|
185
|
+
const toAgent = this.registry.resolveAgent(toAgentName);
|
|
186
|
+
if (!toAgent) {
|
|
187
|
+
throw new Error(`Delegation target agent '${toAgentName}' not found`);
|
|
188
|
+
}
|
|
189
|
+
this.delegationDepth++;
|
|
190
|
+
return toAgent;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Execute task with automatic fallback
|
|
194
|
+
*/
|
|
195
|
+
async executeWithFallback(context, primaryAgent, fallbacks) {
|
|
196
|
+
const agents = [primaryAgent, ...fallbacks];
|
|
197
|
+
for (let i = 0; i < agents.length; i++) {
|
|
198
|
+
const agent = agents[i];
|
|
199
|
+
const startTime = Date.now();
|
|
200
|
+
try {
|
|
201
|
+
// Call onBeforeExecute hook
|
|
202
|
+
if (agent.onBeforeExecute) {
|
|
203
|
+
await agent.onBeforeExecute(context);
|
|
204
|
+
}
|
|
205
|
+
// Execute agent (placeholder - actual execution depends on integration)
|
|
206
|
+
// In real usage, this would call the AI provider with the agent's prompt
|
|
207
|
+
const result = {
|
|
208
|
+
success: true,
|
|
209
|
+
agentName: agent.manifest.name,
|
|
210
|
+
executionTime: Date.now() - startTime,
|
|
211
|
+
fallbackUsed: i > 0,
|
|
212
|
+
originalAgent: i > 0 ? primaryAgent.manifest.name : undefined,
|
|
213
|
+
filesModified: [],
|
|
214
|
+
violations: [],
|
|
215
|
+
warnings: [],
|
|
216
|
+
};
|
|
217
|
+
// Call onAfterExecute hook
|
|
218
|
+
if (agent.onAfterExecute) {
|
|
219
|
+
await agent.onAfterExecute(context, result);
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
// Call onError hook
|
|
225
|
+
if (agent.onError) {
|
|
226
|
+
await agent.onError(error, context);
|
|
227
|
+
}
|
|
228
|
+
// If this was the last agent, throw the error
|
|
229
|
+
if (i === agents.length - 1) {
|
|
230
|
+
return {
|
|
231
|
+
success: false,
|
|
232
|
+
agentName: agent.manifest.name,
|
|
233
|
+
executionTime: Date.now() - startTime,
|
|
234
|
+
fallbackUsed: i > 0,
|
|
235
|
+
originalAgent: i > 0 ? primaryAgent.manifest.name : undefined,
|
|
236
|
+
filesModified: [],
|
|
237
|
+
violations: [],
|
|
238
|
+
warnings: [],
|
|
239
|
+
error: error,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
// Try next fallback
|
|
243
|
+
console.warn(`⚠️ Agent '${agent.manifest.name}' failed, trying fallback...`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Should never reach here
|
|
247
|
+
throw new Error('No agents available for execution');
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Add a routing rule
|
|
251
|
+
*/
|
|
252
|
+
addRule(rule) {
|
|
253
|
+
this.config.routingRules.push(rule);
|
|
254
|
+
// Re-sort by priority
|
|
255
|
+
this.config.routingRules.sort((a, b) => a.priority - b.priority);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Remove a routing rule by pattern
|
|
259
|
+
*/
|
|
260
|
+
removeRule(pattern) {
|
|
261
|
+
const patternStr = pattern.toString();
|
|
262
|
+
const index = this.config.routingRules.findIndex((r) => r.pattern.toString() === patternStr);
|
|
263
|
+
if (index !== -1) {
|
|
264
|
+
this.config.routingRules.splice(index, 1);
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get all routing rules
|
|
271
|
+
*/
|
|
272
|
+
getRules() {
|
|
273
|
+
return [...this.config.routingRules];
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Reset delegation depth
|
|
277
|
+
*/
|
|
278
|
+
resetDelegation() {
|
|
279
|
+
this.delegationDepth = 0;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Get current delegation depth
|
|
283
|
+
*/
|
|
284
|
+
getDelegationDepth() {
|
|
285
|
+
return this.delegationDepth;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Find matching routing rules for a task
|
|
289
|
+
*/
|
|
290
|
+
findMatchingRules(task) {
|
|
291
|
+
const matches = [];
|
|
292
|
+
for (const rule of this.config.routingRules) {
|
|
293
|
+
// Check pattern match
|
|
294
|
+
const pattern = rule.pattern instanceof RegExp
|
|
295
|
+
? rule.pattern
|
|
296
|
+
: new RegExp(rule.pattern, 'i');
|
|
297
|
+
const textToMatch = [
|
|
298
|
+
task.description,
|
|
299
|
+
...task.filesInProgress,
|
|
300
|
+
task.phase,
|
|
301
|
+
].join(' ');
|
|
302
|
+
if (pattern.test(textToMatch)) {
|
|
303
|
+
// Check condition if present
|
|
304
|
+
if (rule.condition && !rule.condition(task)) {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
matches.push(rule);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// Sort by priority (lower = higher priority)
|
|
311
|
+
return matches.sort((a, b) => a.priority - b.priority);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Find fallback agents for a primary agent
|
|
315
|
+
*/
|
|
316
|
+
findFallbacks(primaryAgent, task) {
|
|
317
|
+
const fallbacks = [];
|
|
318
|
+
const seen = new Set([primaryAgent.manifest.name]);
|
|
319
|
+
// Add agents from delegatesTo list
|
|
320
|
+
if (primaryAgent.manifest.delegatesTo) {
|
|
321
|
+
for (const name of primaryAgent.manifest.delegatesTo) {
|
|
322
|
+
if (seen.has(name))
|
|
323
|
+
continue;
|
|
324
|
+
const agent = this.registry.resolveAgent(name);
|
|
325
|
+
if (agent) {
|
|
326
|
+
fallbacks.push(agent);
|
|
327
|
+
seen.add(name);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// Add agents from same category
|
|
332
|
+
const categoryAgents = this.registry.getAgentsByCategory(primaryAgent.manifest.category);
|
|
333
|
+
for (const loaded of categoryAgents) {
|
|
334
|
+
if (seen.has(loaded.name))
|
|
335
|
+
continue;
|
|
336
|
+
if (loaded.enabled) {
|
|
337
|
+
fallbacks.push(loaded.agent);
|
|
338
|
+
seen.add(loaded.name);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Limit fallbacks to prevent infinite chains
|
|
342
|
+
return fallbacks.slice(0, 3);
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Calculate confidence score for a routing match
|
|
346
|
+
*/
|
|
347
|
+
calculateConfidence(rule, task) {
|
|
348
|
+
// Base confidence from priority (lower priority = higher confidence)
|
|
349
|
+
const priorityConfidence = Math.max(0, 1 - rule.priority / 100);
|
|
350
|
+
// Boost confidence if condition matched
|
|
351
|
+
const conditionBoost = rule.condition ? 0.1 : 0;
|
|
352
|
+
// Calculate final confidence (0-1)
|
|
353
|
+
return Math.min(1, priorityConfidence + conditionBoost);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Global agent router instance
|
|
358
|
+
*/
|
|
359
|
+
let globalRouter = null;
|
|
360
|
+
/**
|
|
361
|
+
* Get or create global agent router
|
|
362
|
+
*/
|
|
363
|
+
export function getGlobalAgentRouter(registry, config) {
|
|
364
|
+
if (!globalRouter) {
|
|
365
|
+
globalRouter = new AgentRouter(registry, config);
|
|
366
|
+
}
|
|
367
|
+
return globalRouter;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Reset global agent router
|
|
371
|
+
*/
|
|
372
|
+
export function resetGlobalAgentRouter() {
|
|
373
|
+
globalRouter = null;
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=agent-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-router.js","sourceRoot":"","sources":["../../../packages/ai/agents/agent-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Module - Exports for the agent framework
|
|
3
|
+
*
|
|
4
|
+
* @module @dcyfr/ai/agents
|
|
5
|
+
*/
|
|
6
|
+
export type { AgentCategory, AgentTier, AgentModel, AgentPermissionMode, AgentQualityGate, AgentProactiveTrigger, AgentSkill, AgentManifest, AgentHooks, Agent, LoadedAgent, AgentExecutionContext, AgentExecutionResult, AgentViolation, AgentRoutingRule, AgentRoutingResult, AgentRegistryConfig, AgentLoaderConfig, AgentRouterConfig, } from './types';
|
|
7
|
+
export { AgentLoader, AgentLoadError, AgentValidationError, getGlobalAgentLoader, resetGlobalAgentLoader, } from './agent-loader';
|
|
8
|
+
export { AgentRegistry, getGlobalAgentRegistry, resetGlobalAgentRegistry, } from './agent-registry';
|
|
9
|
+
export { AgentRouter, getGlobalAgentRouter, resetGlobalAgentRouter, } from './agent-router';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/ai/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,UAAU,EACV,KAAK,EACL,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Module - Exports for the agent framework
|
|
3
|
+
*
|
|
4
|
+
* @module @dcyfr/ai/agents
|
|
5
|
+
*/
|
|
6
|
+
// Agent Loader exports
|
|
7
|
+
export { AgentLoader, AgentLoadError, AgentValidationError, getGlobalAgentLoader, resetGlobalAgentLoader, } from './agent-loader';
|
|
8
|
+
// Agent Registry exports
|
|
9
|
+
export { AgentRegistry, getGlobalAgentRegistry, resetGlobalAgentRegistry, } from './agent-registry';
|
|
10
|
+
// Agent Router exports
|
|
11
|
+
export { AgentRouter, getGlobalAgentRouter, resetGlobalAgentRouter, } from './agent-router';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/ai/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyBH,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,yBAAyB;AACzB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Type Definitions for DCYFR AI Framework
|
|
3
|
+
*
|
|
4
|
+
* Defines the interfaces and types for the agent system including manifests,
|
|
5
|
+
* categories, tiers, and execution contexts.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/agents/types
|
|
8
|
+
*/
|
|
9
|
+
import type { ValidationSeverity, TaskContext } from '../types';
|
|
10
|
+
/**
|
|
11
|
+
* Agent category classification
|
|
12
|
+
* Used for organizing and routing agents by their specialization
|
|
13
|
+
*/
|
|
14
|
+
export type AgentCategory = 'core' | 'development' | 'architecture' | 'testing' | 'security' | 'performance' | 'content' | 'devops' | 'data' | 'research' | 'specialized';
|
|
15
|
+
/**
|
|
16
|
+
* Agent tier for OPSEC and loading priority
|
|
17
|
+
* - public: Available in @dcyfr/ai (npm)
|
|
18
|
+
* - private: Available in @dcyfr/agents (git+ssh)
|
|
19
|
+
* - project: Project-specific overrides
|
|
20
|
+
*/
|
|
21
|
+
export type AgentTier = 'public' | 'private' | 'project';
|
|
22
|
+
/**
|
|
23
|
+
* Model preference for agent execution
|
|
24
|
+
*/
|
|
25
|
+
export type AgentModel = 'haiku' | 'sonnet' | 'opus';
|
|
26
|
+
/**
|
|
27
|
+
* Permission mode for agent actions
|
|
28
|
+
*/
|
|
29
|
+
export type AgentPermissionMode = 'readonly' | 'acceptEdits' | 'full';
|
|
30
|
+
/**
|
|
31
|
+
* Quality gate definition for agent enforcement
|
|
32
|
+
*/
|
|
33
|
+
export interface AgentQualityGate {
|
|
34
|
+
name: string;
|
|
35
|
+
threshold: number;
|
|
36
|
+
metric: string;
|
|
37
|
+
failureMode: 'error' | 'warn' | 'skip';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Proactive trigger for agent activation
|
|
41
|
+
*/
|
|
42
|
+
export interface AgentProactiveTrigger {
|
|
43
|
+
/** Pattern to match (string or regex pattern string) */
|
|
44
|
+
pattern: string;
|
|
45
|
+
/** Action to take when triggered */
|
|
46
|
+
action: 'warn' | 'block' | 'fix' | 'suggest';
|
|
47
|
+
/** Message to display */
|
|
48
|
+
message: string;
|
|
49
|
+
/** Priority (lower = higher priority) */
|
|
50
|
+
priority?: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Agent skill reference
|
|
54
|
+
*/
|
|
55
|
+
export interface AgentSkill {
|
|
56
|
+
name: string;
|
|
57
|
+
path?: string;
|
|
58
|
+
required?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Agent manifest - complete agent definition
|
|
62
|
+
*/
|
|
63
|
+
export interface AgentManifest {
|
|
64
|
+
/** Unique agent identifier */
|
|
65
|
+
name: string;
|
|
66
|
+
/** Version following semver */
|
|
67
|
+
version: string;
|
|
68
|
+
/** Human-readable description */
|
|
69
|
+
description: string;
|
|
70
|
+
/** Agent category for routing */
|
|
71
|
+
category: AgentCategory;
|
|
72
|
+
/** Distribution tier */
|
|
73
|
+
tier: AgentTier;
|
|
74
|
+
/** Preferred model */
|
|
75
|
+
model: AgentModel;
|
|
76
|
+
/** Permission level */
|
|
77
|
+
permissionMode: AgentPermissionMode;
|
|
78
|
+
/** Tools the agent can use */
|
|
79
|
+
tools: string[];
|
|
80
|
+
/** Agents this agent can delegate to */
|
|
81
|
+
delegatesTo?: string[];
|
|
82
|
+
/** Agents that delegate to this one */
|
|
83
|
+
delegatedFrom?: string[];
|
|
84
|
+
/** Proactive triggers */
|
|
85
|
+
proactiveTriggers?: AgentProactiveTrigger[];
|
|
86
|
+
/** Quality gates to enforce */
|
|
87
|
+
qualityGates?: AgentQualityGate[];
|
|
88
|
+
/** Skills this agent uses */
|
|
89
|
+
skills?: AgentSkill[];
|
|
90
|
+
/** Author information */
|
|
91
|
+
author?: string;
|
|
92
|
+
/** License */
|
|
93
|
+
license?: string;
|
|
94
|
+
/** Custom configuration schema */
|
|
95
|
+
configSchema?: Record<string, unknown>;
|
|
96
|
+
/** Tags for filtering/searching */
|
|
97
|
+
tags?: string[];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Agent lifecycle hooks
|
|
101
|
+
*/
|
|
102
|
+
export interface AgentHooks {
|
|
103
|
+
/** Called when agent is loaded */
|
|
104
|
+
onLoad?: () => void | Promise<void>;
|
|
105
|
+
/** Called when agent is unloaded */
|
|
106
|
+
onUnload?: () => void | Promise<void>;
|
|
107
|
+
/** Called before agent executes */
|
|
108
|
+
onBeforeExecute?: (context: AgentExecutionContext) => void | Promise<void>;
|
|
109
|
+
/** Called after agent executes */
|
|
110
|
+
onAfterExecute?: (context: AgentExecutionContext, result: AgentExecutionResult) => void | Promise<void>;
|
|
111
|
+
/** Called when agent encounters an error */
|
|
112
|
+
onError?: (error: Error, context: AgentExecutionContext) => void | Promise<void>;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Complete agent definition
|
|
116
|
+
*/
|
|
117
|
+
export interface Agent extends AgentHooks {
|
|
118
|
+
/** Agent manifest */
|
|
119
|
+
manifest: AgentManifest;
|
|
120
|
+
/** System prompt for the agent */
|
|
121
|
+
systemPrompt?: string;
|
|
122
|
+
/** Instructions (markdown content) */
|
|
123
|
+
instructions?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Loaded agent wrapper with metadata
|
|
127
|
+
*/
|
|
128
|
+
export interface LoadedAgent {
|
|
129
|
+
name: string;
|
|
130
|
+
manifest: AgentManifest;
|
|
131
|
+
agent: Agent;
|
|
132
|
+
tier: AgentTier;
|
|
133
|
+
source: string;
|
|
134
|
+
loaded: Date;
|
|
135
|
+
enabled: boolean;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Agent execution context
|
|
139
|
+
*/
|
|
140
|
+
export interface AgentExecutionContext {
|
|
141
|
+
/** Task to execute */
|
|
142
|
+
task: TaskContext;
|
|
143
|
+
/** Agent configuration */
|
|
144
|
+
config: Record<string, unknown>;
|
|
145
|
+
/** Working directory */
|
|
146
|
+
workingDirectory: string;
|
|
147
|
+
/** Files in scope */
|
|
148
|
+
files: string[];
|
|
149
|
+
/** Additional metadata */
|
|
150
|
+
metadata?: Record<string, unknown>;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Agent execution result
|
|
154
|
+
*/
|
|
155
|
+
export interface AgentExecutionResult {
|
|
156
|
+
/** Whether execution was successful */
|
|
157
|
+
success: boolean;
|
|
158
|
+
/** Agent that executed */
|
|
159
|
+
agentName: string;
|
|
160
|
+
/** Execution time in ms */
|
|
161
|
+
executionTime: number;
|
|
162
|
+
/** Whether fallback was used */
|
|
163
|
+
fallbackUsed: boolean;
|
|
164
|
+
/** Original agent if fallback was used */
|
|
165
|
+
originalAgent?: string;
|
|
166
|
+
/** Files modified */
|
|
167
|
+
filesModified: string[];
|
|
168
|
+
/** Violations detected */
|
|
169
|
+
violations: AgentViolation[];
|
|
170
|
+
/** Warnings generated */
|
|
171
|
+
warnings: AgentViolation[];
|
|
172
|
+
/** Error if failed */
|
|
173
|
+
error?: Error;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Agent violation (from quality gates)
|
|
177
|
+
*/
|
|
178
|
+
export interface AgentViolation {
|
|
179
|
+
type: string;
|
|
180
|
+
severity: ValidationSeverity;
|
|
181
|
+
message: string;
|
|
182
|
+
file?: string;
|
|
183
|
+
line?: number;
|
|
184
|
+
column?: number;
|
|
185
|
+
agentName: string;
|
|
186
|
+
gateName?: string;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Routing rule for agent selection
|
|
190
|
+
*/
|
|
191
|
+
export interface AgentRoutingRule {
|
|
192
|
+
/** Pattern to match task description */
|
|
193
|
+
pattern: string | RegExp;
|
|
194
|
+
/** Agent to route to */
|
|
195
|
+
agent: string;
|
|
196
|
+
/** Priority (lower = higher priority) */
|
|
197
|
+
priority: number;
|
|
198
|
+
/** Condition function */
|
|
199
|
+
condition?: (task: TaskContext) => boolean;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Routing result from agent router
|
|
203
|
+
*/
|
|
204
|
+
export interface AgentRoutingResult {
|
|
205
|
+
/** Selected agent */
|
|
206
|
+
agent: Agent;
|
|
207
|
+
/** Matched rule */
|
|
208
|
+
matchedRule?: AgentRoutingRule;
|
|
209
|
+
/** Fallback agents if primary fails */
|
|
210
|
+
fallbacks: Agent[];
|
|
211
|
+
/** Confidence score (0-1) */
|
|
212
|
+
confidence: number;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Agent registry configuration
|
|
216
|
+
*/
|
|
217
|
+
export interface AgentRegistryConfig {
|
|
218
|
+
/** Enable auto-discovery of agents */
|
|
219
|
+
autoDiscover?: boolean;
|
|
220
|
+
/** Paths to search for project agents */
|
|
221
|
+
projectPaths?: string[];
|
|
222
|
+
/** Public tier configuration */
|
|
223
|
+
public?: {
|
|
224
|
+
enabled: boolean;
|
|
225
|
+
source?: string;
|
|
226
|
+
};
|
|
227
|
+
/** Private tier configuration */
|
|
228
|
+
private?: {
|
|
229
|
+
enabled: boolean;
|
|
230
|
+
source?: string;
|
|
231
|
+
};
|
|
232
|
+
/** Project tier configuration */
|
|
233
|
+
project?: {
|
|
234
|
+
enabled: boolean;
|
|
235
|
+
paths?: string[];
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Agent loader configuration
|
|
240
|
+
*/
|
|
241
|
+
export interface AgentLoaderConfig {
|
|
242
|
+
/** Search paths for agents */
|
|
243
|
+
searchPaths: string[];
|
|
244
|
+
/** Enable auto-discovery */
|
|
245
|
+
autoDiscover: boolean;
|
|
246
|
+
/** Failure mode */
|
|
247
|
+
failureMode: 'throw' | 'warn' | 'silent';
|
|
248
|
+
/** Timeout for agent operations (ms) */
|
|
249
|
+
timeout: number;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Agent router configuration
|
|
253
|
+
*/
|
|
254
|
+
export interface AgentRouterConfig {
|
|
255
|
+
/** Default agent to use if no match */
|
|
256
|
+
defaultAgent: string;
|
|
257
|
+
/** Routing rules */
|
|
258
|
+
routingRules: AgentRoutingRule[];
|
|
259
|
+
/** Enable delegation between agents */
|
|
260
|
+
delegationEnabled: boolean;
|
|
261
|
+
/** Maximum delegation depth */
|
|
262
|
+
maxDelegationDepth?: number;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=types.d.ts.map
|