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.
- package/LICENSE +667 -0
- package/README.md +384 -0
- package/dist/analytics.d.ts +100 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +368 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auto-orchestrator.d.ts +118 -0
- package/dist/auto-orchestrator.d.ts.map +1 -0
- package/dist/auto-orchestrator.js +325 -0
- package/dist/auto-orchestrator.js.map +1 -0
- package/dist/autoconfig.d.ts +89 -0
- package/dist/autoconfig.d.ts.map +1 -0
- package/dist/autoconfig.js +576 -0
- package/dist/autoconfig.js.map +1 -0
- package/dist/cli.d.ts +148 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +281 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud-backup.d.ts +100 -0
- package/dist/cloud-backup.d.ts.map +1 -0
- package/dist/cloud-backup.js +545 -0
- package/dist/cloud-backup.js.map +1 -0
- package/dist/crypto.d.ts +72 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +164 -0
- package/dist/crypto.js.map +1 -0
- package/dist/database.d.ts +218 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +1058 -0
- package/dist/database.js.map +1 -0
- package/dist/http-auth.d.ts +68 -0
- package/dist/http-auth.d.ts.map +1 -0
- package/dist/http-auth.js +296 -0
- package/dist/http-auth.js.map +1 -0
- package/dist/http-fast.d.ts +13 -0
- package/dist/http-fast.d.ts.map +1 -0
- package/dist/http-fast.js +325 -0
- package/dist/http-fast.js.map +1 -0
- package/dist/http-server.d.ts +12 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +383 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1695 -0
- package/dist/index.js.map +1 -0
- package/dist/license.d.ts +177 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +405 -0
- package/dist/license.js.map +1 -0
- package/dist/logger.d.ts +76 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +195 -0
- package/dist/logger.js.map +1 -0
- package/dist/performance.d.ts +114 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +228 -0
- package/dist/performance.js.map +1 -0
- package/dist/resilience.d.ts +146 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +563 -0
- package/dist/resilience.js.map +1 -0
- package/dist/security.d.ts +68 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +215 -0
- package/dist/security.js.map +1 -0
- package/dist/setup.d.ts +21 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +261 -0
- package/dist/setup.js.map +1 -0
- package/dist/summarizer.d.ts +30 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +139 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/sync.d.ts +39 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +356 -0
- package/dist/sync.js.map +1 -0
- package/dist/types.d.ts +267 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- package/dist/vectors.d.ts +103 -0
- package/dist/vectors.d.ts.map +1 -0
- package/dist/vectors.js +311 -0
- package/dist/vectors.js.map +1 -0
- 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"}
|