universal-agent-memory 1.0.17 → 1.0.18

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.
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Task Planner
3
+ *
4
+ * Tier 1 of the Multi-Model Architecture.
5
+ * Responsible for:
6
+ * - Task decomposition into subtasks
7
+ * - Dependency analysis
8
+ * - Model assignment for each subtask
9
+ * - Quality assurance routing
10
+ */
11
+ import { randomUUID } from 'crypto';
12
+ // UUID generator
13
+ const uuidv4 = () => randomUUID();
14
+ const DEFAULT_OPTIONS = {
15
+ maxSubtasks: 10,
16
+ maxDepth: 3,
17
+ enableParallelization: true,
18
+ estimateTokenBudget: true,
19
+ };
20
+ /**
21
+ * Task Planner - decomposes tasks and creates execution plans
22
+ */
23
+ export class TaskPlanner {
24
+ router;
25
+ config;
26
+ options;
27
+ constructor(router, config, options = {}) {
28
+ this.router = router;
29
+ this.config = config;
30
+ this.options = { ...DEFAULT_OPTIONS, ...options };
31
+ }
32
+ /**
33
+ * Create an execution plan for a task
34
+ */
35
+ createPlan(taskDescription) {
36
+ const planId = uuidv4();
37
+ // Classify the overall task
38
+ const classification = this.router.classifyTask(taskDescription);
39
+ // Decompose if needed
40
+ const subtasks = classification.requiresPlanning
41
+ ? this.decomposeTask(taskDescription, classification.complexity)
42
+ : [this.createSingleSubtask(taskDescription, classification)];
43
+ // Build dependency graph
44
+ const dependencies = this.analyzeDependencies(subtasks);
45
+ // Assign models to subtasks
46
+ const modelAssignments = this.assignModels(subtasks);
47
+ // Estimate cost and duration
48
+ const estimatedCost = this.estimateTotalCost(subtasks, modelAssignments);
49
+ const estimatedDuration = this.estimateDuration(subtasks, dependencies);
50
+ return {
51
+ id: planId,
52
+ originalTask: taskDescription,
53
+ subtasks,
54
+ dependencies,
55
+ modelAssignments,
56
+ estimatedCost,
57
+ estimatedDuration,
58
+ created: new Date(),
59
+ };
60
+ }
61
+ /**
62
+ * Decompose a complex task into subtasks
63
+ */
64
+ decomposeTask(taskDescription, complexity) {
65
+ const subtasks = [];
66
+ const lowerTask = taskDescription.toLowerCase();
67
+ // Analysis/understanding phase
68
+ if (complexity === 'high' || complexity === 'critical') {
69
+ subtasks.push({
70
+ id: uuidv4(),
71
+ title: 'Analyze requirements',
72
+ description: `Understand the requirements and constraints for: ${taskDescription}`,
73
+ type: 'planning',
74
+ complexity: 'medium',
75
+ inputs: ['task_description'],
76
+ outputs: ['requirements_analysis', 'constraints_list'],
77
+ constraints: ['Must identify all edge cases', 'Must note dependencies'],
78
+ });
79
+ }
80
+ // Design phase for architectural tasks
81
+ if (lowerTask.includes('architecture') || lowerTask.includes('design') || lowerTask.includes('refactor')) {
82
+ subtasks.push({
83
+ id: uuidv4(),
84
+ title: 'Design solution',
85
+ description: 'Create detailed design for the solution including interfaces, patterns, and structure',
86
+ type: 'planning',
87
+ complexity: 'high',
88
+ inputs: ['requirements_analysis'],
89
+ outputs: ['design_document', 'interface_definitions'],
90
+ constraints: ['Must follow SOLID principles', 'Must be testable'],
91
+ });
92
+ }
93
+ // Implementation phase
94
+ subtasks.push({
95
+ id: uuidv4(),
96
+ title: 'Implement solution',
97
+ description: 'Write the code implementing the required functionality',
98
+ type: 'coding',
99
+ complexity: complexity === 'critical' ? 'high' : complexity,
100
+ inputs: subtasks.length > 0 ? ['design_document'] : ['task_description'],
101
+ outputs: ['source_code'],
102
+ constraints: ['Must have proper error handling', 'Must be well-typed'],
103
+ });
104
+ // Testing phase
105
+ if (complexity !== 'low') {
106
+ subtasks.push({
107
+ id: uuidv4(),
108
+ title: 'Write tests',
109
+ description: 'Create unit tests and integration tests for the implementation',
110
+ type: 'coding',
111
+ complexity: 'medium',
112
+ inputs: ['source_code'],
113
+ outputs: ['test_code'],
114
+ constraints: ['Must achieve >80% coverage', 'Must test edge cases'],
115
+ });
116
+ }
117
+ // Review phase for critical tasks
118
+ if (complexity === 'critical' || lowerTask.includes('security')) {
119
+ subtasks.push({
120
+ id: uuidv4(),
121
+ title: 'Security review',
122
+ description: 'Review code for security vulnerabilities and best practices',
123
+ type: 'review',
124
+ complexity: 'high',
125
+ inputs: ['source_code'],
126
+ outputs: ['security_report', 'recommendations'],
127
+ constraints: ['Must check OWASP top 10', 'Must verify input validation'],
128
+ });
129
+ }
130
+ // Documentation for significant changes
131
+ if (complexity === 'high' || complexity === 'critical') {
132
+ subtasks.push({
133
+ id: uuidv4(),
134
+ title: 'Update documentation',
135
+ description: 'Update documentation to reflect the changes',
136
+ type: 'documentation',
137
+ complexity: 'low',
138
+ inputs: ['source_code', 'design_document'],
139
+ outputs: ['documentation'],
140
+ constraints: ['Must include usage examples', 'Must document breaking changes'],
141
+ });
142
+ }
143
+ return subtasks;
144
+ }
145
+ /**
146
+ * Create a single subtask for simple tasks
147
+ */
148
+ createSingleSubtask(taskDescription, classification) {
149
+ return {
150
+ id: uuidv4(),
151
+ title: 'Execute task',
152
+ description: taskDescription,
153
+ type: classification.taskType,
154
+ complexity: classification.complexity,
155
+ inputs: ['task_description'],
156
+ outputs: ['result'],
157
+ constraints: [],
158
+ };
159
+ }
160
+ /**
161
+ * Analyze dependencies between subtasks
162
+ */
163
+ analyzeDependencies(subtasks) {
164
+ const dependencies = new Map();
165
+ // Build output-to-subtask mapping
166
+ const outputProducers = new Map();
167
+ for (const subtask of subtasks) {
168
+ for (const output of subtask.outputs) {
169
+ outputProducers.set(output, subtask.id);
170
+ }
171
+ }
172
+ // Find dependencies based on inputs
173
+ for (const subtask of subtasks) {
174
+ const deps = [];
175
+ for (const input of subtask.inputs) {
176
+ const producer = outputProducers.get(input);
177
+ if (producer && producer !== subtask.id) {
178
+ deps.push(producer);
179
+ }
180
+ }
181
+ if (deps.length > 0) {
182
+ dependencies.set(subtask.id, [...new Set(deps)]);
183
+ }
184
+ }
185
+ return dependencies;
186
+ }
187
+ /**
188
+ * Assign models to subtasks based on routing
189
+ */
190
+ assignModels(subtasks) {
191
+ const assignments = new Map();
192
+ for (const subtask of subtasks) {
193
+ const selection = this.router.selectModel(subtask.complexity, subtask.type, [] // Could extract keywords from description
194
+ );
195
+ assignments.set(subtask.id, selection.model.id);
196
+ }
197
+ return assignments;
198
+ }
199
+ /**
200
+ * Estimate total cost for the plan
201
+ */
202
+ estimateTotalCost(subtasks, assignments) {
203
+ let totalCost = 0;
204
+ for (const subtask of subtasks) {
205
+ const modelId = assignments.get(subtask.id);
206
+ const model = modelId ? this.router.getModel(modelId) : undefined;
207
+ if (model) {
208
+ // Estimate tokens based on complexity
209
+ const tokenMultiplier = {
210
+ low: 1,
211
+ medium: 2,
212
+ high: 4,
213
+ critical: 6,
214
+ };
215
+ const baseTokens = 5000;
216
+ const estimatedTokens = baseTokens * tokenMultiplier[subtask.complexity];
217
+ totalCost += this.router.estimateCost(model, estimatedTokens, estimatedTokens / 2);
218
+ }
219
+ }
220
+ return totalCost;
221
+ }
222
+ /**
223
+ * Estimate duration considering parallelization
224
+ */
225
+ estimateDuration(subtasks, dependencies) {
226
+ if (!this.options.enableParallelization) {
227
+ // Sequential execution
228
+ return subtasks.reduce((total, subtask) => {
229
+ const baseTime = 30000; // 30 seconds base
230
+ const multiplier = {
231
+ low: 1,
232
+ medium: 2,
233
+ high: 4,
234
+ critical: 6,
235
+ };
236
+ return total + baseTime * multiplier[subtask.complexity];
237
+ }, 0);
238
+ }
239
+ // Parallel execution - find critical path
240
+ const subtaskDurations = new Map();
241
+ for (const subtask of subtasks) {
242
+ const baseTime = 30000;
243
+ const multiplier = {
244
+ low: 1,
245
+ medium: 2,
246
+ high: 4,
247
+ critical: 6,
248
+ };
249
+ subtaskDurations.set(subtask.id, baseTime * multiplier[subtask.complexity]);
250
+ }
251
+ // Calculate earliest completion time for each subtask
252
+ const completionTimes = new Map();
253
+ const queue = subtasks.filter(s => !dependencies.has(s.id)).map(s => s.id);
254
+ while (queue.length > 0) {
255
+ const subtaskId = queue.shift();
256
+ const deps = dependencies.get(subtaskId) || [];
257
+ const maxDepTime = deps.length > 0
258
+ ? Math.max(...deps.map(d => completionTimes.get(d) || 0))
259
+ : 0;
260
+ completionTimes.set(subtaskId, maxDepTime + (subtaskDurations.get(subtaskId) || 0));
261
+ // Add dependent subtasks to queue
262
+ for (const subtask of subtasks) {
263
+ const subtaskDeps = dependencies.get(subtask.id) || [];
264
+ if (subtaskDeps.includes(subtaskId) && !completionTimes.has(subtask.id)) {
265
+ const allDepsComplete = subtaskDeps.every(d => completionTimes.has(d));
266
+ if (allDepsComplete) {
267
+ queue.push(subtask.id);
268
+ }
269
+ }
270
+ }
271
+ }
272
+ return Math.max(...Array.from(completionTimes.values()), 0);
273
+ }
274
+ /**
275
+ * Get execution order respecting dependencies
276
+ */
277
+ getExecutionOrder(plan) {
278
+ const levels = [];
279
+ const completed = new Set();
280
+ const remaining = new Set(plan.subtasks.map(s => s.id));
281
+ while (remaining.size > 0) {
282
+ const currentLevel = [];
283
+ for (const subtaskId of remaining) {
284
+ const deps = plan.dependencies.get(subtaskId) || [];
285
+ const allDepsComplete = deps.every(d => completed.has(d));
286
+ if (allDepsComplete) {
287
+ currentLevel.push(subtaskId);
288
+ }
289
+ }
290
+ if (currentLevel.length === 0 && remaining.size > 0) {
291
+ // Circular dependency or bug - just add remaining
292
+ currentLevel.push(...remaining);
293
+ remaining.clear();
294
+ }
295
+ for (const id of currentLevel) {
296
+ remaining.delete(id);
297
+ completed.add(id);
298
+ }
299
+ if (currentLevel.length > 0) {
300
+ levels.push(currentLevel);
301
+ }
302
+ }
303
+ return levels;
304
+ }
305
+ /**
306
+ * Visualize the plan as text
307
+ */
308
+ visualizePlan(plan) {
309
+ const lines = [
310
+ `=== Execution Plan: ${plan.id.slice(0, 8)} ===`,
311
+ `Task: ${plan.originalTask.slice(0, 80)}${plan.originalTask.length > 80 ? '...' : ''}`,
312
+ `Estimated Cost: $${plan.estimatedCost.toFixed(4)}`,
313
+ `Estimated Duration: ${Math.round(plan.estimatedDuration / 1000)}s`,
314
+ '',
315
+ 'Subtasks:',
316
+ ];
317
+ const executionOrder = this.getExecutionOrder(plan);
318
+ let level = 1;
319
+ for (const levelTasks of executionOrder) {
320
+ lines.push(` Level ${level} (parallel):`);
321
+ for (const taskId of levelTasks) {
322
+ const subtask = plan.subtasks.find(s => s.id === taskId);
323
+ const modelId = plan.modelAssignments.get(taskId);
324
+ if (subtask) {
325
+ lines.push(` - [${subtask.complexity.toUpperCase()}] ${subtask.title}`);
326
+ lines.push(` Type: ${subtask.type}, Model: ${modelId || 'default'}`);
327
+ const deps = plan.dependencies.get(taskId);
328
+ if (deps && deps.length > 0) {
329
+ lines.push(` Depends on: ${deps.map(d => plan.subtasks.find(s => s.id === d)?.title || d).join(', ')}`);
330
+ }
331
+ }
332
+ }
333
+ level++;
334
+ }
335
+ return lines.join('\n');
336
+ }
337
+ }
338
+ /**
339
+ * Create a planner instance
340
+ */
341
+ export function createPlanner(router, config, options) {
342
+ return new TaskPlanner(router, config, options);
343
+ }
344
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/models/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Model Router
3
+ *
4
+ * Routes tasks to appropriate models based on:
5
+ * - Task complexity and type
6
+ * - Routing rules configuration
7
+ * - Cost optimization strategy
8
+ * - Available model capabilities
9
+ */
10
+ import { ModelConfig, MultiModelConfig, TaskClassificationResult, TaskComplexity, ModelSelection, RoutingRule, ModelRole } from './types.js';
11
+ /**
12
+ * Model Router - routes tasks to appropriate models
13
+ */
14
+ export declare class ModelRouter {
15
+ private config;
16
+ private models;
17
+ private routingRules;
18
+ private roleAssignments;
19
+ constructor(config: MultiModelConfig);
20
+ private initializeModels;
21
+ private initializeRoles;
22
+ /**
23
+ * Classify a task to determine complexity and type
24
+ */
25
+ classifyTask(taskDescription: string): TaskClassificationResult;
26
+ /**
27
+ * Select the appropriate model for a task
28
+ */
29
+ selectModel(complexity: TaskComplexity, taskType: string, keywords: string[]): ModelSelection;
30
+ private buildReasoning;
31
+ /**
32
+ * Estimate cost for a model invocation
33
+ */
34
+ estimateCost(model: ModelConfig, inputTokens: number, outputTokens: number): number;
35
+ /**
36
+ * Get model by ID
37
+ */
38
+ getModel(modelId: string): ModelConfig | undefined;
39
+ /**
40
+ * Get model for a specific role
41
+ */
42
+ getModelForRole(role: ModelRole): ModelConfig | undefined;
43
+ /**
44
+ * Get all configured models
45
+ */
46
+ getAllModels(): ModelConfig[];
47
+ /**
48
+ * Get routing analysis for debugging
49
+ */
50
+ analyzeRouting(taskDescription: string): {
51
+ classification: TaskClassificationResult;
52
+ matchedRules: Array<{
53
+ rule: RoutingRule;
54
+ matched: boolean;
55
+ reason: string;
56
+ }>;
57
+ costComparison: Array<{
58
+ model: string;
59
+ cost: number;
60
+ }>;
61
+ };
62
+ }
63
+ /**
64
+ * Create a router instance from config
65
+ */
66
+ export declare function createRouter(config: MultiModelConfig): ModelRouter;
67
+ /**
68
+ * Default router with cost-optimized settings
69
+ */
70
+ export declare function createCostOptimizedRouter(): ModelRouter;
71
+ /**
72
+ * Default router with performance-first settings
73
+ */
74
+ export declare function createPerformanceRouter(): ModelRouter;
75
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/models/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,WAAW,EAEX,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,WAAW,EAEX,SAAS,EACV,MAAM,YAAY,CAAC;AAgCpB;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,eAAe,CAAyB;gBAEpC,MAAM,EAAE,gBAAgB;IAgBpC,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,wBAAwB;IAmE/D;;OAEG;IACH,WAAW,CACT,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,cAAc;IA8DjB,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAMnF;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIlD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAKzD;;OAEG;IACH,YAAY,IAAI,WAAW,EAAE;IAI7B;;OAEG;IACH,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG;QACvC,cAAc,EAAE,wBAAwB,CAAC;QACzC,YAAY,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,WAAW,CAAC;YAAC,OAAO,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC7E,cAAc,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxD;CAuDF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAElE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,WAAW,CAkBvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,WAAW,CAYrD"}