0xkobold 0.4.3 → 0.5.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/README.md +226 -383
- package/dist/package.json +13 -4
- package/dist/src/agent/DraconicCapabilityRouter.js +556 -0
- package/dist/src/agent/DraconicCapabilityRouter.js.map +1 -0
- package/dist/src/agent/DraconicErrorClassifier.js +606 -0
- package/dist/src/agent/DraconicErrorClassifier.js.map +1 -0
- package/dist/src/agent/DraconicRunRegistry.js +460 -0
- package/dist/src/agent/DraconicRunRegistry.js.map +1 -0
- package/dist/src/agent/DraconicTokenPredictor.js +500 -0
- package/dist/src/agent/DraconicTokenPredictor.js.map +1 -0
- package/dist/src/agent/embedded-runner.js +3 -2
- package/dist/src/agent/embedded-runner.js.map +1 -1
- package/dist/src/cli/commands/doctor.js +199 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/migrate-from-openclaw.js +39 -0
- package/dist/src/cli/commands/migrate-from-openclaw.js.map +1 -0
- package/dist/src/cli/commands/migrate.js +6 -4
- package/dist/src/cli/commands/migrate.js.map +1 -1
- package/dist/src/cli/program.js +3 -1
- package/dist/src/cli/program.js.map +1 -1
- package/dist/src/config/unified-config.js +195 -0
- package/dist/src/config/unified-config.js.map +1 -0
- package/dist/src/cron/notifications.js +1 -1
- package/dist/src/cron/notifications.js.map +1 -1
- package/dist/src/cron/runner.js +9 -3
- package/dist/src/cron/runner.js.map +1 -1
- package/dist/src/event-bus/index.js +3 -1
- package/dist/src/event-bus/index.js.map +1 -1
- package/dist/src/extensions/community/draconic-messenger-wrapper.js +35 -0
- package/dist/src/extensions/community/draconic-messenger-wrapper.js.map +1 -0
- package/dist/src/extensions/community/draconic-subagents-wrapper.js +115 -0
- package/dist/src/extensions/community/draconic-subagents-wrapper.js.map +1 -0
- package/dist/src/extensions/core/compaction-safeguard-v2.js +95 -0
- package/dist/src/extensions/core/compaction-safeguard-v2.js.map +1 -0
- package/dist/src/extensions/core/compaction-safeguard.js +206 -137
- package/dist/src/extensions/core/compaction-safeguard.js.map +1 -1
- package/dist/src/extensions/core/config-extension.js +122 -0
- package/dist/src/extensions/core/config-extension.js.map +1 -0
- package/dist/src/extensions/core/draconic-hoard-extension.js +194 -0
- package/dist/src/extensions/core/draconic-hoard-extension.js.map +1 -0
- package/dist/src/extensions/core/draconic-lair-extension.js +146 -0
- package/dist/src/extensions/core/draconic-lair-extension.js.map +1 -0
- package/dist/src/extensions/core/draconic-safety-extension.js +402 -0
- package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -0
- package/dist/src/extensions/core/ext-manager.js +40 -0
- package/dist/src/extensions/core/ext-manager.js.map +1 -0
- package/dist/src/extensions/core/gateway-extension.js +413 -624
- package/dist/src/extensions/core/gateway-extension.js.map +1 -1
- package/dist/src/extensions/core/generative-agents-extension.js +704 -0
- package/dist/src/extensions/core/generative-agents-extension.js.map +1 -0
- package/dist/src/extensions/core/memory-bootstrap-extension.js +279 -0
- package/dist/src/extensions/core/memory-bootstrap-extension.js.map +1 -0
- package/dist/src/extensions/core/ollama-extension.js +442 -0
- package/dist/src/extensions/core/ollama-extension.js.map +1 -0
- package/dist/src/extensions/core/ollama-router-extension.js +34 -93
- package/dist/src/extensions/core/ollama-router-extension.js.map +1 -1
- package/dist/src/extensions/core/perennial-memory-extension.js +5 -2
- package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
- package/dist/src/extensions/core/persona-loader-extension.js +41 -15
- package/dist/src/extensions/core/persona-loader-extension.js.map +1 -1
- package/dist/src/extensions/core/pi-notify-extension.js +6 -0
- package/dist/src/extensions/core/pi-notify-extension.js.map +1 -1
- package/dist/src/extensions/core/session-bridge-extension.js +8 -72
- package/dist/src/extensions/core/session-bridge-extension.js.map +1 -1
- package/dist/src/extensions/core/tui-integration-extension-fixed.js +3 -0
- package/dist/src/extensions/core/tui-integration-extension-fixed.js.map +1 -0
- package/dist/src/extensions/core/tui-integration-extension.js +984 -0
- package/dist/src/extensions/core/tui-integration-extension.js.map +1 -0
- package/dist/src/gateway/persistence/AgentStore.js +399 -0
- package/dist/src/gateway/persistence/AgentStore.js.map +1 -0
- package/dist/src/gateway/persistence/index.js +9 -0
- package/dist/src/gateway/persistence/index.js.map +1 -0
- package/dist/src/hoard/DraconicHoardSystem.js +465 -0
- package/dist/src/hoard/DraconicHoardSystem.js.map +1 -0
- package/dist/src/index.js +7 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/infra/DraconicConnectionPool.js +492 -0
- package/dist/src/infra/DraconicConnectionPool.js.map +1 -0
- package/dist/src/lair/DraconicLairSystem.js +387 -0
- package/dist/src/lair/DraconicLairSystem.js.map +1 -0
- package/dist/src/llm/ollama.js +143 -99
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/migration/openclaw.js +5 -5
- package/dist/src/migration/openclaw.js.map +1 -1
- package/dist/src/pi-config.js +52 -27
- package/dist/src/pi-config.js.map +1 -1
- package/dist/src/sessions/SessionManager.js +416 -0
- package/dist/src/sessions/SessionManager.js.map +1 -0
- package/dist/src/sessions/SessionStore.js +580 -0
- package/dist/src/sessions/SessionStore.js.map +1 -0
- package/dist/src/sessions/UnifiedSessionBridge.js +394 -0
- package/dist/src/sessions/UnifiedSessionBridge.js.map +1 -0
- package/dist/src/sessions/index.js +15 -0
- package/dist/src/sessions/index.js.map +1 -0
- package/dist/src/sessions/migration/index.js +156 -0
- package/dist/src/sessions/migration/index.js.map +1 -0
- package/dist/src/sessions/types.js +8 -0
- package/dist/src/sessions/types.js.map +1 -0
- package/dist/src/skills/framework.js +1 -1
- package/dist/src/skills/framework.js.map +1 -1
- package/dist/src/tui/commands/final-functions.js +39 -0
- package/dist/src/tui/commands/final-functions.js.map +1 -0
- package/dist/src/tui/commands/natural-language-commands.js +231 -0
- package/dist/src/tui/commands/natural-language-commands.js.map +1 -0
- package/dist/src/tui/commands/orchestration-commands.js +340 -0
- package/dist/src/tui/commands/orchestration-commands.js.map +1 -0
- package/dist/src/tui/commands/orchestration-final-section.js +84 -0
- package/dist/src/tui/commands/orchestration-final-section.js.map +1 -0
- package/dist/src/tui/components/agent-tree-overlay.js +210 -0
- package/dist/src/tui/components/agent-tree-overlay.js.map +1 -0
- package/dist/src/tui/components/agent-tree-panel.js +229 -0
- package/dist/src/tui/components/agent-tree-panel.js.map +1 -0
- package/dist/src/tui/components/sidebar.js +82 -0
- package/dist/src/tui/components/sidebar.js.map +1 -0
- package/dist/src/tui/components/status-bar.js +115 -0
- package/dist/src/tui/components/status-bar.js.map +1 -0
- package/dist/src/tui/components/tree-header.js +85 -0
- package/dist/src/tui/components/tree-header.js.map +1 -0
- package/dist/src/tui/draconic-tui.js +291 -0
- package/dist/src/tui/draconic-tui.js.map +1 -0
- package/dist/src/tui/index.js +93 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/pi-tui-integration.js +260 -0
- package/dist/src/tui/pi-tui-integration.js.map +1 -0
- package/dist/src/utils/nl-patterns.js +145 -0
- package/dist/src/utils/nl-patterns.js.map +1 -0
- package/package.json +13 -4
- package/scripts/migrate-from-openclaw.sh +498 -0
- package/HEARTBEAT.md +0 -121
- package/USAGE.md +0 -191
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "0xkobold",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Your digital familiar -
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Your digital familiar - multi-agent AI with memory, reflection, and semantic search (v0.5.0 - Draconic Intelligence)",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"update:framework": "bun run src/cli/index.ts update framework",
|
|
30
30
|
"setup-hooks": "bash scripts/install-hooks.sh",
|
|
31
31
|
"prepublishOnly": "bun run build",
|
|
32
|
-
"postinstall": "node scripts/postinstall.js || echo 'Welcome to 0xKobold! Run: 0xkobold setup'"
|
|
32
|
+
"postinstall": "node scripts/postinstall.js && node scripts/link-pi-extensions.js || echo 'Welcome to 0xKobold! Run: 0xkobold setup'"
|
|
33
33
|
},
|
|
34
34
|
"keywords": [
|
|
35
35
|
"ai",
|
|
@@ -51,7 +51,14 @@
|
|
|
51
51
|
"discord.js": "^14.25.1",
|
|
52
52
|
"glob": "^10.5.0",
|
|
53
53
|
"json5": "^2.2.3",
|
|
54
|
+
"node-machine-id": "^1.1.12",
|
|
54
55
|
"node-telegram-bot-api": "^0.67.0",
|
|
56
|
+
"pi-extmgr": "^0.1.23",
|
|
57
|
+
"pi-librarian": "^1.3.0",
|
|
58
|
+
"pi-memory-md": "^0.1.1",
|
|
59
|
+
"pi-messenger": "^0.13.0",
|
|
60
|
+
"pi-subagents": "^0.11.1",
|
|
61
|
+
"pi-web-access": "^0.10.2",
|
|
55
62
|
"playwright": "^1.58.2",
|
|
56
63
|
"react": "^19.2.4",
|
|
57
64
|
"sharp": "^0.33.5",
|
|
@@ -73,11 +80,13 @@
|
|
|
73
80
|
"private": false,
|
|
74
81
|
"files": [
|
|
75
82
|
"dist",
|
|
83
|
+
"scripts/migrate-from-openclaw.sh",
|
|
76
84
|
"scripts/postinstall.js",
|
|
77
85
|
"README.md",
|
|
78
86
|
"LICENSE",
|
|
79
87
|
"package.json",
|
|
80
|
-
"
|
|
88
|
+
"SOUL.md",
|
|
89
|
+
"IDENTITY.md",
|
|
81
90
|
"HEARTBEAT.md",
|
|
82
91
|
"skills/",
|
|
83
92
|
".agents/skills/"
|
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🧠 Draconic Capability Router
|
|
3
|
+
*
|
|
4
|
+
* Superior to OpenClaw (which can't route):
|
|
5
|
+
* - Analyzes tasks and routes to best agent
|
|
6
|
+
* - Historical performance tracking
|
|
7
|
+
* - Dynamic model selection
|
|
8
|
+
* - Confidence scoring
|
|
9
|
+
*
|
|
10
|
+
* "Every task finds its perfect agent"
|
|
11
|
+
*/
|
|
12
|
+
import { EventEmitter } from "node:events";
|
|
13
|
+
/**
|
|
14
|
+
* 🐉 Draconic Capability Router
|
|
15
|
+
*
|
|
16
|
+
* Superior to OpenClaw: Intelligent task routing
|
|
17
|
+
*/
|
|
18
|
+
export class DraconicCapabilityRouter extends EventEmitter {
|
|
19
|
+
// Domain detection patterns
|
|
20
|
+
domainPatterns = [
|
|
21
|
+
{
|
|
22
|
+
patterns: [/code|implement|refactor|fix|debug|write|function|class|method/i],
|
|
23
|
+
domain: "coding",
|
|
24
|
+
weight: 1.0,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
patterns: [/research|search|find|explore|analyze|investigate|look.*up/i],
|
|
28
|
+
domain: "research",
|
|
29
|
+
weight: 1.0,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
patterns: [/plan|design|architect|structure|organize/i],
|
|
33
|
+
domain: "planning",
|
|
34
|
+
weight: 1.0,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
patterns: [/review|check|validate|verify|audit/i],
|
|
38
|
+
domain: "review",
|
|
39
|
+
weight: 1.0,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
patterns: [/document|readme|comment|explain/i],
|
|
43
|
+
domain: "documentation",
|
|
44
|
+
weight: 0.8,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
patterns: [/test|spec|coverage|unit.*test/i],
|
|
48
|
+
domain: "testing",
|
|
49
|
+
weight: 0.9,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
patterns: [/web|http|fetch|api|endpoint|request/i],
|
|
53
|
+
domain: "web",
|
|
54
|
+
weight: 1.0,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
patterns: [/database|sql|query|migration|schema/i],
|
|
58
|
+
domain: "database",
|
|
59
|
+
weight: 1.0,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
patterns: [/security|auth|encrypt|vulnerability|safe/i],
|
|
63
|
+
domain: "security",
|
|
64
|
+
weight: 1.0,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
patterns: [/config|setting|environment|variable/i],
|
|
68
|
+
domain: "configuration",
|
|
69
|
+
weight: 0.7,
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
// Performance tracking
|
|
73
|
+
performanceMetrics = new Map();
|
|
74
|
+
// Model selection preferences - Cloud Ollama Strategy
|
|
75
|
+
// minimax-m2.5:cloud for worker, reviewer, specialist
|
|
76
|
+
// kimi-k2.5:cloud for coordinator, researcher, planner
|
|
77
|
+
modelPreferences = {
|
|
78
|
+
coordinator: ["kimi-k2.5:cloud", "claude-3-opus", "gpt-4"],
|
|
79
|
+
specialist: ["minimax-m2.5:cloud", "claude-3-sonnet", "gpt-4-turbo"],
|
|
80
|
+
researcher: ["kimi-k2.5:cloud", "claude-3-sonnet", "gpt-4-turbo"],
|
|
81
|
+
planner: ["kimi-k2.5:cloud", "claude-3-opus", "gpt-4"],
|
|
82
|
+
reviewer: ["minimax-m2.5:cloud", "claude-3-sonnet", "gpt-4-turbo"],
|
|
83
|
+
worker: ["minimax-m2.5:cloud", "claude-3-haiku", "gpt-3.5-turbo"],
|
|
84
|
+
};
|
|
85
|
+
// Task history
|
|
86
|
+
taskHistory = [];
|
|
87
|
+
static instance = null;
|
|
88
|
+
static getInstance() {
|
|
89
|
+
if (!DraconicCapabilityRouter.instance) {
|
|
90
|
+
DraconicCapabilityRouter.instance = new DraconicCapabilityRouter();
|
|
91
|
+
}
|
|
92
|
+
return DraconicCapabilityRouter.instance;
|
|
93
|
+
}
|
|
94
|
+
constructor() {
|
|
95
|
+
super();
|
|
96
|
+
this.initializeMetrics();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Analyze task and route to best agent
|
|
100
|
+
* Superior to OpenClaw: Deep analysis + confidence
|
|
101
|
+
*/
|
|
102
|
+
analyze(task, history) {
|
|
103
|
+
// 1. Extract characteristics
|
|
104
|
+
const characteristics = this.analyzeTask(task);
|
|
105
|
+
// 2. Determine complexity
|
|
106
|
+
const complexity = this.assessComplexity(task, characteristics);
|
|
107
|
+
// 3. Route based on characteristics
|
|
108
|
+
const routing = this.routeByCharacteristics(characteristics, complexity);
|
|
109
|
+
// 4. Adjust based on history
|
|
110
|
+
const adjustedRouting = this.adjustByHistory(routing, history);
|
|
111
|
+
// 5. Generate breakdown
|
|
112
|
+
const subtasks = this.generateSubtasks(task, adjustedRouting.agentType, complexity);
|
|
113
|
+
// 6. Select model
|
|
114
|
+
const suggestedModel = this.selectModel(adjustedRouting.agentType, characteristics);
|
|
115
|
+
// Calculate confidence
|
|
116
|
+
const confidence = this.calculateConfidence(adjustedRouting.agentType, characteristics, adjustedRouting.reason);
|
|
117
|
+
// Estimate duration
|
|
118
|
+
const estimatedDuration = this.estimateDuration(adjustedRouting.agentType, characteristics, complexity);
|
|
119
|
+
// Get suggested capabilities
|
|
120
|
+
const suggestedCapabilities = this.getCapabilitiesFor(adjustedRouting.agentType, characteristics);
|
|
121
|
+
return {
|
|
122
|
+
agentType: adjustedRouting.agentType,
|
|
123
|
+
confidence,
|
|
124
|
+
reason: adjustedRouting.reason,
|
|
125
|
+
subtasks,
|
|
126
|
+
suggestedModel,
|
|
127
|
+
estimatedDuration,
|
|
128
|
+
suggestedCapabilities,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Analyze task characteristics
|
|
133
|
+
*/
|
|
134
|
+
analyzeTask(task) {
|
|
135
|
+
const domains = new Map();
|
|
136
|
+
for (const pattern of this.domainPatterns) {
|
|
137
|
+
let matches = 0;
|
|
138
|
+
for (const regex of pattern.patterns) {
|
|
139
|
+
const matchCount = (task.match(regex) || []).length;
|
|
140
|
+
matches += matchCount;
|
|
141
|
+
}
|
|
142
|
+
if (matches > 0) {
|
|
143
|
+
domains.set(pattern.domain, (domains.get(pattern.domain) || 0) + matches * pattern.weight);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Sort by score
|
|
147
|
+
const sortedDomains = Array.from(domains.entries())
|
|
148
|
+
.sort((a, b) => b[1] - a[1])
|
|
149
|
+
.map(([d]) => d);
|
|
150
|
+
const requiresResearch = sortedDomains.includes("research");
|
|
151
|
+
const requiresPlanning = sortedDomains.includes("planning");
|
|
152
|
+
const requiresReview = sortedDomains.includes("review");
|
|
153
|
+
// Estimate complexity
|
|
154
|
+
const wordCount = task.split(/\s+/).length;
|
|
155
|
+
const codeCount = (task.match(/```/g) || []).length;
|
|
156
|
+
let complexity;
|
|
157
|
+
if (wordCount > 100 || requiresPlanning)
|
|
158
|
+
complexity = "complex";
|
|
159
|
+
else if (wordCount > 30 || requiresResearch)
|
|
160
|
+
complexity = "medium";
|
|
161
|
+
else
|
|
162
|
+
complexity = "simple";
|
|
163
|
+
// Estimate tokens (rough)
|
|
164
|
+
const estimatedTokens = wordCount * 2 + codeCount * 50;
|
|
165
|
+
return {
|
|
166
|
+
complexity,
|
|
167
|
+
domain: sortedDomains.slice(0, 3), // Top 3 domains
|
|
168
|
+
requiresResearch,
|
|
169
|
+
requiresPlanning,
|
|
170
|
+
requiresReview,
|
|
171
|
+
estimatedDuration: 0, // Will be calculated
|
|
172
|
+
estimatedTokens,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Assess task complexity
|
|
177
|
+
*/
|
|
178
|
+
assessComplexity(task, characteristics) {
|
|
179
|
+
// Additional complexity heuristics
|
|
180
|
+
let score = 0;
|
|
181
|
+
// Multiple domains = more complex
|
|
182
|
+
score += characteristics.domain.length * 10;
|
|
183
|
+
// Research requirement
|
|
184
|
+
if (characteristics.requiresResearch)
|
|
185
|
+
score += 20;
|
|
186
|
+
if (characteristics.requiresPlanning)
|
|
187
|
+
score += 30;
|
|
188
|
+
// Keywords indicating complexity
|
|
189
|
+
const complexKeywords = [
|
|
190
|
+
/refactor|restructure|redesign/i,
|
|
191
|
+
/architecture|system|framework/i,
|
|
192
|
+
/optimize|performance|scal/i,
|
|
193
|
+
/security|auth|encrypt/i,
|
|
194
|
+
/database|schema|migration/i,
|
|
195
|
+
];
|
|
196
|
+
for (const kw of complexKeywords) {
|
|
197
|
+
if (kw.test(task))
|
|
198
|
+
score += 15;
|
|
199
|
+
}
|
|
200
|
+
// Simple keywords reduce complexity
|
|
201
|
+
const simpleKeywords = [/simple|easy|quick|small/i];
|
|
202
|
+
for (const kw of simpleKeywords) {
|
|
203
|
+
if (kw.test(task))
|
|
204
|
+
score -= 10;
|
|
205
|
+
}
|
|
206
|
+
if (score >= 50)
|
|
207
|
+
return "complex";
|
|
208
|
+
if (score >= 20)
|
|
209
|
+
return "medium";
|
|
210
|
+
return "simple";
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Route based on characteristics
|
|
214
|
+
*/
|
|
215
|
+
routeByCharacteristics(characteristics, complexity) {
|
|
216
|
+
// Domain-based routing logic
|
|
217
|
+
const domains = characteristics.domain;
|
|
218
|
+
// Coordination needed
|
|
219
|
+
if (complexity === "complex" && domains.length > 2) {
|
|
220
|
+
return {
|
|
221
|
+
agentType: "coordinator",
|
|
222
|
+
reason: `Complex multi-domain task (${domains.join(", ")}) requires coordination`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// Planning focus
|
|
226
|
+
if (characteristics.requiresPlanning || domains.includes("planning")) {
|
|
227
|
+
return {
|
|
228
|
+
agentType: "planner",
|
|
229
|
+
reason: "Task requires architecture/design planning",
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Review focus
|
|
233
|
+
if (characteristics.requiresReview || domains.includes("review")) {
|
|
234
|
+
return {
|
|
235
|
+
agentType: "reviewer",
|
|
236
|
+
reason: "Task is primarily review/validation",
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
// Research focus
|
|
240
|
+
if (characteristics.requiresResearch || domains.includes("research")) {
|
|
241
|
+
return {
|
|
242
|
+
agentType: "researcher",
|
|
243
|
+
reason: "Task requires exploration and analysis",
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
// Coding focus
|
|
247
|
+
if (domains.includes("coding")) {
|
|
248
|
+
// Complex coding = specialist
|
|
249
|
+
if (complexity === "complex") {
|
|
250
|
+
return {
|
|
251
|
+
agentType: "specialist",
|
|
252
|
+
reason: "Complex coding task requires focused implementation",
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
// Simple coding = worker
|
|
256
|
+
return {
|
|
257
|
+
agentType: "worker",
|
|
258
|
+
reason: "Straightforward coding task",
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
// Default
|
|
262
|
+
if (complexity === "simple") {
|
|
263
|
+
return {
|
|
264
|
+
agentType: "worker",
|
|
265
|
+
reason: "Simple task, general worker suitable",
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
agentType: "specialist",
|
|
270
|
+
reason: "Medium complexity task requiring focused attention",
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Adjust routing based on history
|
|
275
|
+
*/
|
|
276
|
+
adjustByHistory(routing, history) {
|
|
277
|
+
if (!history || history.tasks.length === 0) {
|
|
278
|
+
return routing;
|
|
279
|
+
}
|
|
280
|
+
// Check recent performance of this agent type
|
|
281
|
+
const recentTasks = history.tasks.slice(-10);
|
|
282
|
+
const agentTasks = recentTasks.filter((t) => t.agentType === routing.agentType);
|
|
283
|
+
if (agentTasks.length >= 3) {
|
|
284
|
+
const successRate = agentTasks.filter((t) => t.success).length / agentTasks.length;
|
|
285
|
+
if (successRate < 0.5) {
|
|
286
|
+
// Low success rate, try alternative
|
|
287
|
+
const alternatives = ["coordinator", "specialist", "worker"];
|
|
288
|
+
const alternative = alternatives.find((a) => a !== routing.agentType);
|
|
289
|
+
if (alternative) {
|
|
290
|
+
return {
|
|
291
|
+
agentType: alternative,
|
|
292
|
+
reason: `${routing.agentType} had low success rate (${(successRate * 100).toFixed(0)}%), trying ${alternative}`,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return routing;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Generate subtask breakdown
|
|
301
|
+
*/
|
|
302
|
+
generateSubtasks(task, agentType, complexity) {
|
|
303
|
+
const subtasks = [];
|
|
304
|
+
let index = 0;
|
|
305
|
+
switch (agentType) {
|
|
306
|
+
case "coordinator":
|
|
307
|
+
subtasks.push({
|
|
308
|
+
index: index++,
|
|
309
|
+
description: "Analyze task requirements",
|
|
310
|
+
agentType: "researcher",
|
|
311
|
+
estimatedTokens: 2000,
|
|
312
|
+
dependencies: [],
|
|
313
|
+
});
|
|
314
|
+
subtasks.push({
|
|
315
|
+
index: index++,
|
|
316
|
+
description: "Plan implementation approach",
|
|
317
|
+
agentType: "planner",
|
|
318
|
+
estimatedTokens: 3000,
|
|
319
|
+
dependencies: [0],
|
|
320
|
+
});
|
|
321
|
+
subtasks.push({
|
|
322
|
+
index: index++,
|
|
323
|
+
description: "Implement solution",
|
|
324
|
+
agentType: "specialist",
|
|
325
|
+
estimatedTokens: 5000,
|
|
326
|
+
dependencies: [1],
|
|
327
|
+
});
|
|
328
|
+
subtasks.push({
|
|
329
|
+
index: index++,
|
|
330
|
+
description: "Review implementation",
|
|
331
|
+
agentType: "reviewer",
|
|
332
|
+
estimatedTokens: 2000,
|
|
333
|
+
dependencies: [2],
|
|
334
|
+
});
|
|
335
|
+
break;
|
|
336
|
+
case "planner":
|
|
337
|
+
subtasks.push({
|
|
338
|
+
index: index++,
|
|
339
|
+
description: "Research existing code patterns",
|
|
340
|
+
agentType: "researcher",
|
|
341
|
+
estimatedTokens: 2000,
|
|
342
|
+
dependencies: [],
|
|
343
|
+
});
|
|
344
|
+
subtasks.push({
|
|
345
|
+
index: index++,
|
|
346
|
+
description: "Design architecture",
|
|
347
|
+
agentType: "planner",
|
|
348
|
+
estimatedTokens: 4000,
|
|
349
|
+
dependencies: [0],
|
|
350
|
+
});
|
|
351
|
+
break;
|
|
352
|
+
default:
|
|
353
|
+
// Single task for specialized agents
|
|
354
|
+
subtasks.push({
|
|
355
|
+
index: 0,
|
|
356
|
+
description: task.slice(0, 100),
|
|
357
|
+
agentType,
|
|
358
|
+
estimatedTokens: complexity === "complex" ? 5000 : complexity === "medium" ? 3000 : 1500,
|
|
359
|
+
dependencies: [],
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return subtasks;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Select best available model
|
|
366
|
+
*/
|
|
367
|
+
selectModel(agentType, characteristics) {
|
|
368
|
+
const preferences = this.modelPreferences[agentType];
|
|
369
|
+
// For simple tasks, downgrade
|
|
370
|
+
if (characteristics.complexity === "simple" && preferences.length > 1) {
|
|
371
|
+
return preferences[preferences.length - 1]; // Cheapest/fastest
|
|
372
|
+
}
|
|
373
|
+
// For complex tasks, upgrade
|
|
374
|
+
if (characteristics.complexity === "complex") {
|
|
375
|
+
return preferences[0]; // Best model
|
|
376
|
+
}
|
|
377
|
+
return preferences[Math.floor(preferences.length / 2)]; // Middle option
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Calculate confidence score
|
|
381
|
+
*/
|
|
382
|
+
calculateConfidence(agentType, characteristics, reason) {
|
|
383
|
+
let confidence = 0.8; // Base
|
|
384
|
+
// Domain clarity increases confidence
|
|
385
|
+
if (characteristics.domain.length === 1)
|
|
386
|
+
confidence += 0.1;
|
|
387
|
+
if (characteristics.domain.length > 3)
|
|
388
|
+
confidence -= 0.1;
|
|
389
|
+
// Known type increases confidence
|
|
390
|
+
const knownTypes = ["coordinator", "specialist", "researcher", "planner", "reviewer", "worker"];
|
|
391
|
+
if (knownTypes.includes(agentType))
|
|
392
|
+
confidence += 0.05;
|
|
393
|
+
// Complexity alignment
|
|
394
|
+
if (characteristics.complexity === "simple" && agentType === "worker")
|
|
395
|
+
confidence += 0.05;
|
|
396
|
+
if (characteristics.complexity === "complex" && agentType === "coordinator")
|
|
397
|
+
confidence += 0.05;
|
|
398
|
+
return Math.min(0.95, confidence);
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Estimate duration based on characteristics
|
|
402
|
+
*/
|
|
403
|
+
estimateDuration(agentType, characteristics, complexity) {
|
|
404
|
+
const baseDuration = {
|
|
405
|
+
simple: 15000,
|
|
406
|
+
medium: 45000,
|
|
407
|
+
complex: 120000,
|
|
408
|
+
}[complexity];
|
|
409
|
+
const agentMultiplier = {
|
|
410
|
+
coordinator: 1.5, // Coordination overhead
|
|
411
|
+
planner: 1.3,
|
|
412
|
+
researcher: 1.2,
|
|
413
|
+
specialist: 1.0,
|
|
414
|
+
reviewer: 0.8,
|
|
415
|
+
worker: 0.9,
|
|
416
|
+
}[agentType];
|
|
417
|
+
return baseDuration * agentMultiplier;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Get suggested capabilities
|
|
421
|
+
*/
|
|
422
|
+
getCapabilitiesFor(agentType, characteristics) {
|
|
423
|
+
const baseCapabilities = {
|
|
424
|
+
coordinator: ["task-delegation", "planning", "coordination"],
|
|
425
|
+
specialist: ["coding", "refactoring", "debugging", "implementation"],
|
|
426
|
+
researcher: ["research", "analysis", "documentation", "search"],
|
|
427
|
+
planner: ["planning", "architecture-design", "task-breakdown"],
|
|
428
|
+
reviewer: ["code-review", "quality-assurance", "security-review"],
|
|
429
|
+
worker: ["file-ops", "shell", "general"],
|
|
430
|
+
};
|
|
431
|
+
const capabilities = [...baseCapabilities[agentType]];
|
|
432
|
+
// Add domain-specific capabilities
|
|
433
|
+
for (const domain of characteristics.domain) {
|
|
434
|
+
capabilities.push(domain);
|
|
435
|
+
}
|
|
436
|
+
return [...new Set(capabilities)];
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Record outcome for learning
|
|
440
|
+
*/
|
|
441
|
+
recordOutcome(task, agentType, domains, duration, tokens, success) {
|
|
442
|
+
this.taskHistory.push({
|
|
443
|
+
task,
|
|
444
|
+
agentType,
|
|
445
|
+
domains,
|
|
446
|
+
duration,
|
|
447
|
+
tokens,
|
|
448
|
+
success,
|
|
449
|
+
timestamp: Date.now(),
|
|
450
|
+
});
|
|
451
|
+
// Keep only last 1000
|
|
452
|
+
if (this.taskHistory.length > 1000) {
|
|
453
|
+
this.taskHistory = this.taskHistory.slice(-1000);
|
|
454
|
+
}
|
|
455
|
+
// Update metrics
|
|
456
|
+
this.updateMetrics(agentType, success, duration, tokens, domains);
|
|
457
|
+
this.emit("outcome.recorded", { agentType, success, duration });
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Update agent performance metrics
|
|
461
|
+
*/
|
|
462
|
+
updateMetrics(agentType, success, duration, tokens, domains) {
|
|
463
|
+
const metrics = this.performanceMetrics.get(agentType) ?? this.createEmptyMetrics();
|
|
464
|
+
metrics.totalTasks++;
|
|
465
|
+
if (success)
|
|
466
|
+
metrics.successfulTasks++;
|
|
467
|
+
// Update averages
|
|
468
|
+
metrics.averageDuration = this.ewma(metrics.averageDuration, duration);
|
|
469
|
+
metrics.averageTokens = this.ewma(metrics.averageTokens, tokens);
|
|
470
|
+
metrics.successRate = metrics.successfulTasks / metrics.totalTasks;
|
|
471
|
+
// Update domain stats
|
|
472
|
+
for (const domain of domains) {
|
|
473
|
+
if (!metrics.byDomain[domain]) {
|
|
474
|
+
metrics.byDomain[domain] = { tasks: 0, successRate: 0 };
|
|
475
|
+
}
|
|
476
|
+
const domainStats = metrics.byDomain[domain];
|
|
477
|
+
domainStats.tasks++;
|
|
478
|
+
const prevSuccesses = domainStats.successRate * (domainStats.tasks - 1);
|
|
479
|
+
domainStats.successRate = (prevSuccesses + (success ? 1 : 0)) / domainStats.tasks;
|
|
480
|
+
}
|
|
481
|
+
this.performanceMetrics.set(agentType, metrics);
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Exponential weighted moving average
|
|
485
|
+
*/
|
|
486
|
+
ewma(current, value, alpha = 0.3) {
|
|
487
|
+
if (current === 0)
|
|
488
|
+
return value;
|
|
489
|
+
return alpha * value + (1 - alpha) * current;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Get agent performance
|
|
493
|
+
*/
|
|
494
|
+
getPerformance(agentType) {
|
|
495
|
+
return this.performanceMetrics.get(agentType);
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Get all performance metrics
|
|
499
|
+
*/
|
|
500
|
+
getAllPerformance() {
|
|
501
|
+
return new Map(this.performanceMetrics);
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Get recommendations based on history
|
|
505
|
+
*/
|
|
506
|
+
getRecommendations() {
|
|
507
|
+
const recommendations = [];
|
|
508
|
+
for (const [agentType, metrics] of this.performanceMetrics) {
|
|
509
|
+
if (metrics.totalTasks >= 5) {
|
|
510
|
+
if (metrics.successRate < 0.5) {
|
|
511
|
+
recommendations.push({
|
|
512
|
+
observation: `${agentType} has low success rate`,
|
|
513
|
+
recommendation: `Consider using alternative agent types for ${agentType} tasks`,
|
|
514
|
+
confidence: metrics.totalTasks / 20,
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
if (metrics.averageDuration > 60000) {
|
|
518
|
+
recommendations.push({
|
|
519
|
+
observation: `${agentType} tasks are slow`,
|
|
520
|
+
recommendation: `Consider breaking ${agentType} tasks into smaller subtasks`,
|
|
521
|
+
confidence: 0.7,
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
return recommendations.sort((a, b) => b.confidence - a.confidence);
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Initialize empty metrics
|
|
530
|
+
*/
|
|
531
|
+
initializeMetrics() {
|
|
532
|
+
const types = ["coordinator", "specialist", "researcher", "planner", "reviewer", "worker"];
|
|
533
|
+
for (const type of types) {
|
|
534
|
+
this.performanceMetrics.set(type, this.createEmptyMetrics());
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
createEmptyMetrics() {
|
|
538
|
+
return {
|
|
539
|
+
totalTasks: 0,
|
|
540
|
+
successfulTasks: 0,
|
|
541
|
+
averageDuration: 0,
|
|
542
|
+
averageTokens: 0,
|
|
543
|
+
averageQuality: 0,
|
|
544
|
+
successRate: 0,
|
|
545
|
+
byDomain: {},
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
// Export singleton
|
|
550
|
+
export const getDraconicCapabilityRouter = DraconicCapabilityRouter.getInstance;
|
|
551
|
+
// Convenience function
|
|
552
|
+
export function analyzeTask(task, history) {
|
|
553
|
+
return getDraconicCapabilityRouter().analyze(task, history);
|
|
554
|
+
}
|
|
555
|
+
// Types already exported at top of file
|
|
556
|
+
//# sourceMappingURL=DraconicCapabilityRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DraconicCapabilityRouter.js","sourceRoot":"","sources":["../../../src/agent/DraconicCapabilityRouter.ts"],"names":[],"mappings":"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"}
|