wyrm-mcp 3.2.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.
Files changed (87) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +384 -0
  3. package/dist/analytics.d.ts +100 -0
  4. package/dist/analytics.d.ts.map +1 -0
  5. package/dist/analytics.js +368 -0
  6. package/dist/analytics.js.map +1 -0
  7. package/dist/auto-orchestrator.d.ts +118 -0
  8. package/dist/auto-orchestrator.d.ts.map +1 -0
  9. package/dist/auto-orchestrator.js +325 -0
  10. package/dist/auto-orchestrator.js.map +1 -0
  11. package/dist/autoconfig.d.ts +89 -0
  12. package/dist/autoconfig.d.ts.map +1 -0
  13. package/dist/autoconfig.js +576 -0
  14. package/dist/autoconfig.js.map +1 -0
  15. package/dist/cli.d.ts +148 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +281 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/cloud-backup.d.ts +100 -0
  20. package/dist/cloud-backup.d.ts.map +1 -0
  21. package/dist/cloud-backup.js +545 -0
  22. package/dist/cloud-backup.js.map +1 -0
  23. package/dist/crypto.d.ts +72 -0
  24. package/dist/crypto.d.ts.map +1 -0
  25. package/dist/crypto.js +164 -0
  26. package/dist/crypto.js.map +1 -0
  27. package/dist/database.d.ts +218 -0
  28. package/dist/database.d.ts.map +1 -0
  29. package/dist/database.js +1058 -0
  30. package/dist/database.js.map +1 -0
  31. package/dist/http-auth.d.ts +68 -0
  32. package/dist/http-auth.d.ts.map +1 -0
  33. package/dist/http-auth.js +296 -0
  34. package/dist/http-auth.js.map +1 -0
  35. package/dist/http-fast.d.ts +13 -0
  36. package/dist/http-fast.d.ts.map +1 -0
  37. package/dist/http-fast.js +325 -0
  38. package/dist/http-fast.js.map +1 -0
  39. package/dist/http-server.d.ts +12 -0
  40. package/dist/http-server.d.ts.map +1 -0
  41. package/dist/http-server.js +383 -0
  42. package/dist/http-server.js.map +1 -0
  43. package/dist/index.d.ts +19 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +1695 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/license.d.ts +177 -0
  48. package/dist/license.d.ts.map +1 -0
  49. package/dist/license.js +405 -0
  50. package/dist/license.js.map +1 -0
  51. package/dist/logger.d.ts +76 -0
  52. package/dist/logger.d.ts.map +1 -0
  53. package/dist/logger.js +195 -0
  54. package/dist/logger.js.map +1 -0
  55. package/dist/performance.d.ts +114 -0
  56. package/dist/performance.d.ts.map +1 -0
  57. package/dist/performance.js +228 -0
  58. package/dist/performance.js.map +1 -0
  59. package/dist/resilience.d.ts +146 -0
  60. package/dist/resilience.d.ts.map +1 -0
  61. package/dist/resilience.js +563 -0
  62. package/dist/resilience.js.map +1 -0
  63. package/dist/security.d.ts +68 -0
  64. package/dist/security.d.ts.map +1 -0
  65. package/dist/security.js +215 -0
  66. package/dist/security.js.map +1 -0
  67. package/dist/setup.d.ts +21 -0
  68. package/dist/setup.d.ts.map +1 -0
  69. package/dist/setup.js +261 -0
  70. package/dist/setup.js.map +1 -0
  71. package/dist/summarizer.d.ts +30 -0
  72. package/dist/summarizer.d.ts.map +1 -0
  73. package/dist/summarizer.js +139 -0
  74. package/dist/summarizer.js.map +1 -0
  75. package/dist/sync.d.ts +39 -0
  76. package/dist/sync.d.ts.map +1 -0
  77. package/dist/sync.js +356 -0
  78. package/dist/sync.js.map +1 -0
  79. package/dist/types.d.ts +267 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +30 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/vectors.d.ts +103 -0
  84. package/dist/vectors.d.ts.map +1 -0
  85. package/dist/vectors.js +311 -0
  86. package/dist/vectors.js.map +1 -0
  87. package/package.json +73 -0
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Wyrm Analytics — Persistent Usage Tracking & Cost Monitoring
3
+ *
4
+ * @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
5
+ * @license Proprietary - See LICENSE file for details.
6
+ * @module analytics
7
+ * @version 3.2.0
8
+ */
9
+ // ==================== CONSTANTS ====================
10
+ /** Claude Sonnet pricing per 1M tokens */
11
+ const COST_PER_MILLION_INPUT = 3;
12
+ const COST_PER_MILLION_OUTPUT = 15;
13
+ const BUFFER_FLUSH_THRESHOLD = 50;
14
+ const FLUSH_INTERVAL_MS = 30_000;
15
+ const DEFAULT_RETAIN_DAYS = 90;
16
+ // ==================== ANALYTICS CLASS ====================
17
+ export class WyrmAnalytics {
18
+ db;
19
+ insertStmt;
20
+ batchBuffer;
21
+ flushInterval;
22
+ constructor(db) {
23
+ this.db = db;
24
+ this.batchBuffer = [];
25
+ this.initTables();
26
+ this.insertStmt = this.db.prepare(`
27
+ INSERT INTO usage_events (tool_name, tokens_in, tokens_out, cached, response_ms, success, error_message, timestamp)
28
+ VALUES (@tool_name, @tokens_in, @tokens_out, @cached, @response_ms, @success, @error_message, @timestamp)
29
+ `);
30
+ this.flushInterval = setInterval(() => {
31
+ this.flush();
32
+ }, FLUSH_INTERVAL_MS);
33
+ // Don't let the timer keep the process alive
34
+ if (this.flushInterval.unref) {
35
+ this.flushInterval.unref();
36
+ }
37
+ }
38
+ // ==================== SCHEMA ====================
39
+ initTables() {
40
+ this.db.exec(`
41
+ CREATE TABLE IF NOT EXISTS usage_events (
42
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
43
+ tool_name TEXT NOT NULL,
44
+ tokens_in INTEGER DEFAULT 0,
45
+ tokens_out INTEGER DEFAULT 0,
46
+ cached INTEGER DEFAULT 0,
47
+ response_ms INTEGER DEFAULT 0,
48
+ success INTEGER DEFAULT 1,
49
+ error_message TEXT,
50
+ timestamp TEXT DEFAULT (datetime('now'))
51
+ );
52
+
53
+ CREATE TABLE IF NOT EXISTS cost_tracking (
54
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
55
+ period TEXT NOT NULL,
56
+ tool_name TEXT NOT NULL,
57
+ call_count INTEGER DEFAULT 0,
58
+ total_tokens_in INTEGER DEFAULT 0,
59
+ total_tokens_out INTEGER DEFAULT 0,
60
+ cached_count INTEGER DEFAULT 0,
61
+ avg_response_ms REAL DEFAULT 0,
62
+ error_count INTEGER DEFAULT 0,
63
+ estimated_cost_usd REAL DEFAULT 0,
64
+ updated_at TEXT DEFAULT (datetime('now')),
65
+ UNIQUE(period, tool_name)
66
+ );
67
+
68
+ CREATE INDEX IF NOT EXISTS idx_usage_events_tool ON usage_events(tool_name);
69
+ CREATE INDEX IF NOT EXISTS idx_usage_events_ts ON usage_events(timestamp);
70
+ CREATE INDEX IF NOT EXISTS idx_cost_tracking_period ON cost_tracking(period);
71
+ `);
72
+ }
73
+ // ==================== RECORDING ====================
74
+ /** Record a single tool usage event */
75
+ record(event) {
76
+ this.batchBuffer.push(event);
77
+ if (this.batchBuffer.length >= BUFFER_FLUSH_THRESHOLD) {
78
+ this.flush();
79
+ }
80
+ }
81
+ /** Flush buffered events to disk */
82
+ flush() {
83
+ if (this.batchBuffer.length === 0)
84
+ return;
85
+ const events = this.batchBuffer.splice(0);
86
+ const insertMany = this.db.transaction((batch) => {
87
+ for (const event of batch) {
88
+ this.insertStmt.run({
89
+ tool_name: event.tool,
90
+ tokens_in: event.tokens_in,
91
+ tokens_out: event.tokens_out,
92
+ cached: event.cached ? 1 : 0,
93
+ response_ms: event.ms,
94
+ success: event.success !== false ? 1 : 0,
95
+ error_message: event.error ?? null,
96
+ timestamp: event.timestamp,
97
+ });
98
+ }
99
+ });
100
+ insertMany(events);
101
+ this.updateCostTracking(events);
102
+ }
103
+ /** Update cost_tracking aggregates from a batch of events */
104
+ updateCostTracking(events) {
105
+ const groups = new Map();
106
+ for (const event of events) {
107
+ const period = event.timestamp.slice(0, 7); // YYYY-MM
108
+ const key = `${period}:${event.tool}`;
109
+ let group = groups.get(key);
110
+ if (!group) {
111
+ group = { tool: event.tool, period, calls: 0, tokens_in: 0, tokens_out: 0, cached: 0, total_ms: 0, errors: 0 };
112
+ groups.set(key, group);
113
+ }
114
+ group.calls++;
115
+ group.tokens_in += event.tokens_in;
116
+ group.tokens_out += event.tokens_out;
117
+ if (event.cached)
118
+ group.cached++;
119
+ group.total_ms += event.ms;
120
+ if (event.success === false)
121
+ group.errors++;
122
+ }
123
+ const upsertStmt = this.db.prepare(`
124
+ INSERT INTO cost_tracking (period, tool_name, call_count, total_tokens_in, total_tokens_out, cached_count, avg_response_ms, error_count, estimated_cost_usd, updated_at)
125
+ VALUES (@period, @tool_name, @call_count, @total_tokens_in, @total_tokens_out, @cached_count, @avg_response_ms, @error_count, @estimated_cost_usd, datetime('now'))
126
+ ON CONFLICT(period, tool_name) DO UPDATE SET
127
+ call_count = call_count + @call_count,
128
+ total_tokens_in = total_tokens_in + @total_tokens_in,
129
+ total_tokens_out = total_tokens_out + @total_tokens_out,
130
+ cached_count = cached_count + @cached_count,
131
+ avg_response_ms = (avg_response_ms * call_count + @avg_response_ms * @call_count) / (call_count + @call_count),
132
+ error_count = error_count + @error_count,
133
+ estimated_cost_usd = estimated_cost_usd + @estimated_cost_usd,
134
+ updated_at = datetime('now')
135
+ `);
136
+ const upsertMany = this.db.transaction((entries) => {
137
+ for (const group of entries.values()) {
138
+ const cost = this.estimateCost(group.tokens_in, group.tokens_out);
139
+ upsertStmt.run({
140
+ period: group.period,
141
+ tool_name: group.tool,
142
+ call_count: group.calls,
143
+ total_tokens_in: group.tokens_in,
144
+ total_tokens_out: group.tokens_out,
145
+ cached_count: group.cached,
146
+ avg_response_ms: group.calls > 0 ? group.total_ms / group.calls : 0,
147
+ error_count: group.errors,
148
+ estimated_cost_usd: cost,
149
+ });
150
+ }
151
+ });
152
+ upsertMany(groups);
153
+ }
154
+ // ==================== QUERIES ====================
155
+ /** Get dashboard summary for a time period */
156
+ dashboard(days = 30) {
157
+ // Ensure buffered data is included
158
+ this.flush();
159
+ const start = new Date();
160
+ start.setDate(start.getDate() - days);
161
+ const startStr = start.toISOString().slice(0, 10);
162
+ const endStr = new Date().toISOString().slice(0, 10);
163
+ const summary = this.db.prepare(`
164
+ SELECT
165
+ COUNT(*) AS total_calls,
166
+ COUNT(DISTINCT tool_name) AS unique_tools,
167
+ COALESCE(SUM(tokens_in), 0) AS total_tokens_in,
168
+ COALESCE(SUM(tokens_out), 0) AS total_tokens_out,
169
+ CASE WHEN COUNT(*) > 0
170
+ THEN ROUND(SUM(cached) * 100.0 / COUNT(*), 2)
171
+ ELSE 0
172
+ END AS cache_hit_rate,
173
+ COALESCE(ROUND(AVG(response_ms), 2), 0) AS avg_response_ms,
174
+ CASE WHEN COUNT(*) > 0
175
+ THEN ROUND(SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2)
176
+ ELSE 0
177
+ END AS error_rate
178
+ FROM usage_events
179
+ WHERE timestamp >= @start
180
+ `).get({ start: startStr });
181
+ const top_tools = this.db.prepare(`
182
+ SELECT
183
+ tool_name AS tool,
184
+ COUNT(*) AS calls,
185
+ COALESCE(SUM(tokens_in + tokens_out), 0) AS tokens
186
+ FROM usage_events
187
+ WHERE timestamp >= @start
188
+ GROUP BY tool_name
189
+ ORDER BY calls DESC
190
+ LIMIT 10
191
+ `).all({ start: startStr });
192
+ const daily = this.db.prepare(`
193
+ SELECT
194
+ DATE(timestamp) AS date,
195
+ COUNT(*) AS calls,
196
+ COALESCE(SUM(tokens_in + tokens_out), 0) AS tokens,
197
+ SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS errors
198
+ FROM usage_events
199
+ WHERE timestamp >= @start
200
+ GROUP BY DATE(timestamp)
201
+ ORDER BY date ASC
202
+ `).all({ start: startStr });
203
+ const estimated_cost_usd = this.estimateCost(summary.total_tokens_in, summary.total_tokens_out);
204
+ return {
205
+ period: { start: startStr, end: endStr },
206
+ summary: {
207
+ total_calls: summary.total_calls,
208
+ unique_tools: summary.unique_tools,
209
+ total_tokens_in: summary.total_tokens_in,
210
+ total_tokens_out: summary.total_tokens_out,
211
+ cache_hit_rate: summary.cache_hit_rate,
212
+ avg_response_ms: summary.avg_response_ms,
213
+ error_rate: summary.error_rate,
214
+ estimated_cost_usd,
215
+ },
216
+ top_tools,
217
+ daily,
218
+ };
219
+ }
220
+ /** Get per-tool breakdown */
221
+ toolBreakdown(toolName, days = 30) {
222
+ this.flush();
223
+ const start = new Date();
224
+ start.setDate(start.getDate() - days);
225
+ const startStr = start.toISOString().slice(0, 10);
226
+ const stats = this.db.prepare(`
227
+ SELECT
228
+ COUNT(*) AS total_calls,
229
+ COALESCE(ROUND(AVG(tokens_in), 2), 0) AS avg_tokens_in,
230
+ COALESCE(ROUND(AVG(tokens_out), 2), 0) AS avg_tokens_out,
231
+ COALESCE(ROUND(AVG(response_ms), 2), 0) AS avg_response_ms,
232
+ CASE WHEN COUNT(*) > 0
233
+ THEN ROUND(SUM(cached) * 100.0 / COUNT(*), 2)
234
+ ELSE 0
235
+ END AS cache_hit_rate,
236
+ CASE WHEN COUNT(*) > 0
237
+ THEN ROUND(SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2)
238
+ ELSE 0
239
+ END AS error_rate
240
+ FROM usage_events
241
+ WHERE tool_name = @tool AND timestamp >= @start
242
+ `).get({ tool: toolName, start: startStr });
243
+ const daily = this.db.prepare(`
244
+ SELECT
245
+ DATE(timestamp) AS date,
246
+ COUNT(*) AS calls
247
+ FROM usage_events
248
+ WHERE tool_name = @tool AND timestamp >= @start
249
+ GROUP BY DATE(timestamp)
250
+ ORDER BY date ASC
251
+ `).all({ tool: toolName, start: startStr });
252
+ return {
253
+ tool: toolName,
254
+ total_calls: stats.total_calls,
255
+ avg_tokens_in: stats.avg_tokens_in,
256
+ avg_tokens_out: stats.avg_tokens_out,
257
+ avg_response_ms: stats.avg_response_ms,
258
+ cache_hit_rate: stats.cache_hit_rate,
259
+ error_rate: stats.error_rate,
260
+ daily,
261
+ };
262
+ }
263
+ /** Get cost estimate for a period */
264
+ costReport(period) {
265
+ this.flush();
266
+ const targetPeriod = period ?? new Date().toISOString().slice(0, 7);
267
+ const tools = this.db.prepare(`
268
+ SELECT
269
+ tool_name AS tool,
270
+ call_count AS calls,
271
+ total_tokens_in AS tokens_in,
272
+ total_tokens_out AS tokens_out,
273
+ estimated_cost_usd AS cost_usd
274
+ FROM cost_tracking
275
+ WHERE period = @period
276
+ ORDER BY estimated_cost_usd DESC
277
+ `).all({ period: targetPeriod });
278
+ const total_cost_usd = tools.reduce((sum, t) => sum + t.cost_usd, 0);
279
+ // Project monthly cost based on days elapsed in the period
280
+ const now = new Date();
281
+ const periodYear = parseInt(targetPeriod.slice(0, 4), 10);
282
+ const periodMonth = parseInt(targetPeriod.slice(5, 7), 10) - 1;
283
+ const periodStart = new Date(periodYear, periodMonth, 1);
284
+ const periodEnd = new Date(periodYear, periodMonth + 1, 0); // last day of month
285
+ const totalDaysInMonth = periodEnd.getDate();
286
+ const elapsed = Math.max(1, Math.ceil((now.getTime() - periodStart.getTime()) / (1000 * 60 * 60 * 24)));
287
+ const daysToProject = Math.min(elapsed, totalDaysInMonth);
288
+ const projected_monthly_usd = totalDaysInMonth > 0
289
+ ? Math.round(((total_cost_usd / daysToProject) * totalDaysInMonth) * 100) / 100
290
+ : total_cost_usd;
291
+ return {
292
+ period: targetPeriod,
293
+ tools,
294
+ total_cost_usd: Math.round(total_cost_usd * 100) / 100,
295
+ projected_monthly_usd,
296
+ };
297
+ }
298
+ /** Clean up old events (retention policy) */
299
+ cleanup(retainDays = DEFAULT_RETAIN_DAYS) {
300
+ this.flush();
301
+ const cutoff = new Date();
302
+ cutoff.setDate(cutoff.getDate() - retainDays);
303
+ const cutoffStr = cutoff.toISOString().slice(0, 10);
304
+ // Aggregate old events into cost_tracking before deleting
305
+ const oldEvents = this.db.prepare(`
306
+ SELECT
307
+ STRFTIME('%Y-%m', timestamp) AS period,
308
+ tool_name,
309
+ COUNT(*) AS call_count,
310
+ COALESCE(SUM(tokens_in), 0) AS total_tokens_in,
311
+ COALESCE(SUM(tokens_out), 0) AS total_tokens_out,
312
+ SUM(cached) AS cached_count,
313
+ COALESCE(AVG(response_ms), 0) AS avg_response_ms,
314
+ SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS error_count
315
+ FROM usage_events
316
+ WHERE timestamp < @cutoff
317
+ GROUP BY STRFTIME('%Y-%m', timestamp), tool_name
318
+ `).all({ cutoff: cutoffStr });
319
+ const upsertStmt = this.db.prepare(`
320
+ INSERT INTO cost_tracking (period, tool_name, call_count, total_tokens_in, total_tokens_out, cached_count, avg_response_ms, error_count, estimated_cost_usd, updated_at)
321
+ VALUES (@period, @tool_name, @call_count, @total_tokens_in, @total_tokens_out, @cached_count, @avg_response_ms, @error_count, @estimated_cost_usd, datetime('now'))
322
+ ON CONFLICT(period, tool_name) DO UPDATE SET
323
+ call_count = call_count + @call_count,
324
+ total_tokens_in = total_tokens_in + @total_tokens_in,
325
+ total_tokens_out = total_tokens_out + @total_tokens_out,
326
+ cached_count = cached_count + @cached_count,
327
+ avg_response_ms = (avg_response_ms * call_count + @avg_response_ms * @call_count) / (call_count + @call_count),
328
+ error_count = error_count + @error_count,
329
+ estimated_cost_usd = estimated_cost_usd + @estimated_cost_usd,
330
+ updated_at = datetime('now')
331
+ `);
332
+ const cleanupTxn = this.db.transaction(() => {
333
+ for (const row of oldEvents) {
334
+ const cost = this.estimateCost(row.total_tokens_in, row.total_tokens_out);
335
+ upsertStmt.run({
336
+ period: row.period,
337
+ tool_name: row.tool_name,
338
+ call_count: row.call_count,
339
+ total_tokens_in: row.total_tokens_in,
340
+ total_tokens_out: row.total_tokens_out,
341
+ cached_count: row.cached_count,
342
+ avg_response_ms: row.avg_response_ms,
343
+ error_count: row.error_count,
344
+ estimated_cost_usd: cost,
345
+ });
346
+ }
347
+ const result = this.db.prepare(`
348
+ DELETE FROM usage_events WHERE timestamp < @cutoff
349
+ `).run({ cutoff: cutoffStr });
350
+ return result.changes;
351
+ });
352
+ const deleted = cleanupTxn();
353
+ return { deleted };
354
+ }
355
+ /** Shutdown: flush remaining buffer and clear timer */
356
+ shutdown() {
357
+ clearInterval(this.flushInterval);
358
+ this.flush();
359
+ }
360
+ // ==================== HELPERS ====================
361
+ /** Estimate USD cost from token counts (Claude Sonnet rates) */
362
+ estimateCost(tokensIn, tokensOut) {
363
+ const inputCost = (tokensIn / 1_000_000) * COST_PER_MILLION_INPUT;
364
+ const outputCost = (tokensOut / 1_000_000) * COST_PER_MILLION_OUTPUT;
365
+ return Math.round((inputCost + outputCost) * 1_000_000) / 1_000_000;
366
+ }
367
+ }
368
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Wyrm Auto-Orchestrator - Automatically apply reasoning patterns
3
+ *
4
+ * This layer intercepts task requests and automatically applies
5
+ * the best multi-agent reasoning pattern based on task classification.
6
+ *
7
+ * Patterns applied automatically:
8
+ * - Haiku Boosting: All content generation via few-shot + self-critique
9
+ * - Ensemble Voting: Decisions (architecture, design, strategy) via N approaches + vote
10
+ * - Task Decomposition: Large features via subtasks + parallel execution
11
+ * - Verification: High-risk code changes via multi-angle review
12
+ *
13
+ * @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
14
+ * @license Proprietary - See LICENSE file for details.
15
+ */
16
+ export type TaskType = 'decision' | 'generation' | 'research' | 'verification' | 'decomposition';
17
+ export interface ClassifiedTask {
18
+ type: TaskType;
19
+ confidence: number;
20
+ description: string;
21
+ complexity: 'low' | 'medium' | 'high';
22
+ recommendedApproach: string;
23
+ parallelBlocks?: number;
24
+ }
25
+ export interface OrchestrationConfig {
26
+ autoOrchestrateEnabled: boolean;
27
+ minConfidenceThreshold: number;
28
+ maxParallelAgents: number;
29
+ defaultHaikuBoosting: boolean;
30
+ trackMetrics: boolean;
31
+ thinkingBudget?: number;
32
+ }
33
+ export interface OrchestrationResult {
34
+ taskType: TaskType;
35
+ approach: string;
36
+ results: unknown;
37
+ quality: number;
38
+ costSavings: number;
39
+ parallelExecutionTime: number;
40
+ confidence: number;
41
+ appliedPatterns: string[];
42
+ metrics: {
43
+ tokensBoosting: number;
44
+ tokensEnsemble: number;
45
+ tokensVerification: number;
46
+ totalTokens: number;
47
+ };
48
+ }
49
+ /**
50
+ * Classify incoming task based on multiple signals
51
+ */
52
+ export declare function classifyTask(input: string, context?: {
53
+ projectType?: string;
54
+ recentTasks?: string[];
55
+ complexity?: string;
56
+ }): ClassifiedTask;
57
+ /**
58
+ * Default orchestration config
59
+ */
60
+ export declare function getDefaultConfig(): OrchestrationConfig;
61
+ /**
62
+ * Apply appropriate orchestration pattern
63
+ */
64
+ export declare function orchestrateTask(task: string, config?: OrchestrationConfig): Promise<OrchestrationResult>;
65
+ /**
66
+ * Orchestration middleware for agent context
67
+ *
68
+ * Usage in agent:
69
+ * ```typescript
70
+ * const config = getDefaultConfig();
71
+ * const task = "Design a microservice architecture for a real-time collaboration tool";
72
+ * const plan = await orchestrateTask(task, config);
73
+ *
74
+ * if (plan.appliedPatterns.length > 0) {
75
+ * // Auto-orchestration active
76
+ * // Implementation would:
77
+ * // 1. Spawn parallel agents (if ensemble/decomposition)
78
+ * // 2. Apply boosting (if generation)
79
+ * // 3. Run reviews (if verification)
80
+ * // 4. Synthesize results
81
+ * // 5. Store metrics in Wyrm
82
+ * }
83
+ * ```
84
+ */
85
+ export declare class AutoOrchestrator {
86
+ private config;
87
+ private taskHistory;
88
+ constructor(config?: Partial<OrchestrationConfig>);
89
+ /**
90
+ * Process incoming task with auto-orchestration
91
+ */
92
+ processTask(task: string): Promise<OrchestrationResult>;
93
+ /**
94
+ * Get task classification insight
95
+ */
96
+ getTaskDistribution(): Record<TaskType, number>;
97
+ /**
98
+ * Get orchestration effectiveness stats
99
+ */
100
+ getStats(): {
101
+ tasksProcessed: number;
102
+ distribution: Record<TaskType, number>;
103
+ estimatedQualityBoost: number;
104
+ estimatedCostSavings: number;
105
+ averageComplexity: 'low' | 'medium' | 'high';
106
+ };
107
+ /**
108
+ * Get pattern set for task type
109
+ */
110
+ private getPatternSetForType;
111
+ /**
112
+ * Update config at runtime
113
+ */
114
+ updateConfig(updates: Partial<OrchestrationConfig>): void;
115
+ }
116
+ export declare function getGlobalOrchestrator(): AutoOrchestrator;
117
+ export declare function initializeOrchestrator(config?: Partial<OrchestrationConfig>): AutoOrchestrator;
118
+ //# sourceMappingURL=auto-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-orchestrator.d.ts","sourceRoot":"","sources":["../src/auto-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,YAAY,GACZ,UAAU,GACV,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,cAAc,CA2DhB;AAgCD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,CAStD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,mBAAwC,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAmE9B;AA+BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAwB;gBAE/B,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAOjD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAY7D;;OAEG;IACH,mBAAmB,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;IAgB/C;;OAEG;IACH,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,qBAAqB,EAAE,MAAM,CAAC;QAC9B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,iBAAiB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;KAC9C;IA6BD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;CAG1D;AAOD,wBAAgB,qBAAqB,IAAI,gBAAgB,CAKxD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,CAG9F"}