@kernel.chat/kbot 2.27.0 → 3.0.1
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 +115 -13
- package/dist/agent.d.ts +15 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +187 -48
- package/dist/agent.js.map +1 -1
- package/dist/checkpoint.d.ts +79 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +220 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/cli.js +55 -4
- package/dist/cli.js.map +1 -1
- package/dist/ide/bridge.d.ts +2 -0
- package/dist/ide/bridge.d.ts.map +1 -1
- package/dist/ide/bridge.js +1 -0
- package/dist/ide/bridge.js.map +1 -1
- package/dist/ide/mcp-server.d.ts.map +1 -1
- package/dist/ide/mcp-server.js +27 -7
- package/dist/ide/mcp-server.js.map +1 -1
- package/dist/learned-router.d.ts +9 -7
- package/dist/learned-router.d.ts.map +1 -1
- package/dist/learned-router.js +36 -10
- package/dist/learned-router.js.map +1 -1
- package/dist/learning.d.ts +4 -0
- package/dist/learning.d.ts.map +1 -1
- package/dist/learning.js +17 -0
- package/dist/learning.js.map +1 -1
- package/dist/multimodal.d.ts +6 -0
- package/dist/multimodal.d.ts.map +1 -1
- package/dist/multimodal.js +45 -0
- package/dist/multimodal.js.map +1 -1
- package/dist/sdk.d.ts +165 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +230 -0
- package/dist/sdk.js.map +1 -0
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +38 -0
- package/dist/serve.js.map +1 -1
- package/dist/skill-rating.d.ts +92 -0
- package/dist/skill-rating.d.ts.map +1 -0
- package/dist/skill-rating.js +352 -0
- package/dist/skill-rating.js.map +1 -0
- package/dist/streaming.d.ts +75 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +211 -3
- package/dist/streaming.js.map +1 -1
- package/dist/task-ledger.d.ts +10 -0
- package/dist/task-ledger.d.ts.map +1 -1
- package/dist/task-ledger.js +28 -0
- package/dist/task-ledger.js.map +1 -1
- package/dist/telemetry.d.ts +52 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +219 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/terminal-caps.d.ts +20 -0
- package/dist/terminal-caps.d.ts.map +1 -0
- package/dist/terminal-caps.js +80 -0
- package/dist/terminal-caps.js.map +1 -0
- package/dist/tool-pipeline.d.ts +86 -0
- package/dist/tool-pipeline.d.ts.map +1 -0
- package/dist/tool-pipeline.js +200 -0
- package/dist/tool-pipeline.js.map +1 -0
- package/dist/tools/index.d.ts +45 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +168 -108
- package/dist/tools/index.js.map +1 -1
- package/dist/tui.d.ts +1 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +71 -11
- package/dist/tui.js.map +1 -1
- package/dist/ui-adapter.d.ts +73 -0
- package/dist/ui-adapter.d.ts.map +1 -0
- package/dist/ui-adapter.js +139 -0
- package/dist/ui-adapter.js.map +1 -0
- package/dist/ui.d.ts +3 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +21 -2
- package/dist/ui.js.map +1 -1
- package/package.json +22 -3
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
// K:BOT Bayesian Skill Rating — OpenSkill-style Agent Routing
|
|
2
|
+
//
|
|
3
|
+
// Each agent maintains a {mu, sigma} rating per task category.
|
|
4
|
+
// mu = estimated skill level, sigma = uncertainty.
|
|
5
|
+
// Ratings update after each routing outcome using a simplified
|
|
6
|
+
// Bradley-Terry model. Over time, agents with proven track records
|
|
7
|
+
// in specific categories get routed to preferentially.
|
|
8
|
+
//
|
|
9
|
+
// This sits between exact-intent match and keyword voting in the
|
|
10
|
+
// routing cascade (Level 1.5), providing probabilistic confidence
|
|
11
|
+
// that improves with every interaction.
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
15
|
+
// ── Constants ──
|
|
16
|
+
/** Default mu (mean skill estimate) — standard OpenSkill default */
|
|
17
|
+
const INITIAL_MU = 25.0;
|
|
18
|
+
/** Default sigma (uncertainty) — standard OpenSkill default: mu/3 */
|
|
19
|
+
const INITIAL_SIGMA = INITIAL_MU / 3; // ~8.333
|
|
20
|
+
/** Minimum sigma floor to prevent ratings from becoming completely rigid */
|
|
21
|
+
const MIN_SIGMA = 0.5;
|
|
22
|
+
/** Persistence path */
|
|
23
|
+
const RATINGS_DIR = join(homedir(), '.kbot', 'memory');
|
|
24
|
+
const RATINGS_FILE = join(RATINGS_DIR, 'skill-ratings.json');
|
|
25
|
+
// ── Category keyword maps for fast classification ──
|
|
26
|
+
const CATEGORY_KEYWORDS = {
|
|
27
|
+
coding: [
|
|
28
|
+
'code', 'function', 'implement', 'build', 'create', 'component', 'module',
|
|
29
|
+
'class', 'interface', 'type', 'typescript', 'javascript', 'python', 'rust',
|
|
30
|
+
'react', 'node', 'api', 'endpoint', 'route', 'hook', 'scaffold', 'generate',
|
|
31
|
+
'import', 'export', 'async', 'package', 'npm', 'install',
|
|
32
|
+
],
|
|
33
|
+
debugging: [
|
|
34
|
+
'fix', 'bug', 'error', 'crash', 'debug', 'broken', 'fail', 'issue',
|
|
35
|
+
'exception', 'stack', 'trace', 'undefined', 'null', 'hang', 'freeze',
|
|
36
|
+
'memory', 'leak', 'infinite', 'loop', 'regression', 'broken',
|
|
37
|
+
],
|
|
38
|
+
refactoring: [
|
|
39
|
+
'refactor', 'clean', 'reorganize', 'restructure', 'simplify', 'extract',
|
|
40
|
+
'rename', 'move', 'split', 'merge', 'consolidate', 'deduplicate',
|
|
41
|
+
'optimize', 'improve', 'modernize',
|
|
42
|
+
],
|
|
43
|
+
research: [
|
|
44
|
+
'research', 'find', 'compare', 'benchmark', 'search', 'alternative',
|
|
45
|
+
'documentation', 'docs', 'article', 'paper', 'study', 'investigate',
|
|
46
|
+
'explore', 'discover', 'learn', 'understand', 'explain', 'difference',
|
|
47
|
+
'versus', 'pros', 'cons', 'tradeoff', 'best practice',
|
|
48
|
+
],
|
|
49
|
+
analysis: [
|
|
50
|
+
'analyze', 'strategy', 'plan', 'architecture', 'review', 'audit',
|
|
51
|
+
'evaluate', 'assess', 'performance', 'cost', 'pricing', 'metric',
|
|
52
|
+
'dashboard', 'report', 'insight', 'decision', 'priority', 'roadmap',
|
|
53
|
+
],
|
|
54
|
+
writing: [
|
|
55
|
+
'write', 'draft', 'blog', 'email', 'document', 'readme', 'changelog',
|
|
56
|
+
'announcement', 'copy', 'content', 'marketing', 'social', 'tweet',
|
|
57
|
+
'newsletter', 'story', 'essay', 'summary', 'summarize', 'proofread',
|
|
58
|
+
'edit', 'article', 'post',
|
|
59
|
+
],
|
|
60
|
+
devops: [
|
|
61
|
+
'deploy', 'ship', 'release', 'publish', 'ci', 'cd', 'pipeline',
|
|
62
|
+
'docker', 'kubernetes', 'container', 'server', 'host', 'cloud',
|
|
63
|
+
'aws', 'gcp', 'azure', 'infrastructure', 'terraform', 'nginx',
|
|
64
|
+
'monitor', 'log', 'uptime',
|
|
65
|
+
],
|
|
66
|
+
security: [
|
|
67
|
+
'security', 'vulnerability', 'exploit', 'attack', 'auth', 'permission',
|
|
68
|
+
'encrypt', 'decrypt', 'token', 'secret', 'credential', 'ssl', 'tls',
|
|
69
|
+
'certificate', 'firewall', 'audit', 'scan', 'penetration', 'xss',
|
|
70
|
+
'csrf', 'injection', 'sanitize',
|
|
71
|
+
],
|
|
72
|
+
design: [
|
|
73
|
+
'design', 'ui', 'ux', 'layout', 'color', 'font', 'typography',
|
|
74
|
+
'responsive', 'mobile', 'animation', 'css', 'style', 'theme',
|
|
75
|
+
'palette', 'icon', 'illustration', 'wireframe', 'mockup', 'figma',
|
|
76
|
+
'accessibility', 'a11y',
|
|
77
|
+
],
|
|
78
|
+
data: [
|
|
79
|
+
'data', 'database', 'sql', 'query', 'table', 'schema', 'migration',
|
|
80
|
+
'csv', 'json', 'parse', 'transform', 'aggregate', 'statistics',
|
|
81
|
+
'chart', 'graph', 'visualization', 'analytics', 'etl', 'pipeline',
|
|
82
|
+
],
|
|
83
|
+
communication: [
|
|
84
|
+
'email', 'message', 'notify', 'announce', 'broadcast', 'communicate',
|
|
85
|
+
'present', 'pitch', 'propose', 'negotiate', 'feedback', 'slack',
|
|
86
|
+
'discord', 'webhook',
|
|
87
|
+
],
|
|
88
|
+
general: [
|
|
89
|
+
'help', 'hello', 'hey', 'hi', 'thanks', 'what', 'how', 'why',
|
|
90
|
+
'general', 'chat', 'talk', 'opinion', 'think', 'advice',
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
// ── All known agent IDs ──
|
|
94
|
+
const ALL_AGENTS = [
|
|
95
|
+
'kernel', 'researcher', 'coder', 'writer', 'analyst',
|
|
96
|
+
'aesthete', 'guardian', 'curator', 'strategist',
|
|
97
|
+
'infrastructure', 'quant', 'investigator', 'oracle',
|
|
98
|
+
'chronist', 'sage', 'communicator', 'adapter',
|
|
99
|
+
'creative', 'developer',
|
|
100
|
+
];
|
|
101
|
+
// ── Core ──
|
|
102
|
+
function ensureDir() {
|
|
103
|
+
if (!existsSync(RATINGS_DIR))
|
|
104
|
+
mkdirSync(RATINGS_DIR, { recursive: true });
|
|
105
|
+
}
|
|
106
|
+
function defaultRating() {
|
|
107
|
+
return { mu: INITIAL_MU, sigma: INITIAL_SIGMA };
|
|
108
|
+
}
|
|
109
|
+
function initializeRatings() {
|
|
110
|
+
const ratings = {};
|
|
111
|
+
for (const agent of ALL_AGENTS) {
|
|
112
|
+
ratings[agent] = { _overall: defaultRating() };
|
|
113
|
+
}
|
|
114
|
+
return ratings;
|
|
115
|
+
}
|
|
116
|
+
export class SkillRatingSystem {
|
|
117
|
+
ratings;
|
|
118
|
+
dirty = false;
|
|
119
|
+
constructor() {
|
|
120
|
+
this.ratings = this.loadSync();
|
|
121
|
+
}
|
|
122
|
+
// ── Persistence ──
|
|
123
|
+
loadSync() {
|
|
124
|
+
ensureDir();
|
|
125
|
+
try {
|
|
126
|
+
if (existsSync(RATINGS_FILE)) {
|
|
127
|
+
const data = JSON.parse(readFileSync(RATINGS_FILE, 'utf-8'));
|
|
128
|
+
// Ensure all known agents exist (in case new agents were added)
|
|
129
|
+
for (const agent of ALL_AGENTS) {
|
|
130
|
+
if (!data[agent]) {
|
|
131
|
+
data[agent] = { _overall: defaultRating() };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return data;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch { /* corrupted file — reinitialize */ }
|
|
138
|
+
return initializeRatings();
|
|
139
|
+
}
|
|
140
|
+
async save() {
|
|
141
|
+
if (!this.dirty)
|
|
142
|
+
return;
|
|
143
|
+
ensureDir();
|
|
144
|
+
try {
|
|
145
|
+
writeFileSync(RATINGS_FILE, JSON.stringify(this.ratings, null, 2));
|
|
146
|
+
this.dirty = false;
|
|
147
|
+
}
|
|
148
|
+
catch { /* non-critical */ }
|
|
149
|
+
}
|
|
150
|
+
async load() {
|
|
151
|
+
this.ratings = this.loadSync();
|
|
152
|
+
}
|
|
153
|
+
// ── Category Classification ──
|
|
154
|
+
/**
|
|
155
|
+
* Classify a message into a task category using keyword matching.
|
|
156
|
+
* Fast, no LLM call needed.
|
|
157
|
+
*/
|
|
158
|
+
categorizeMessage(message) {
|
|
159
|
+
const lower = message.toLowerCase().replace(/[^a-z0-9\s]/g, ' ');
|
|
160
|
+
const words = lower.split(/\s+/).filter(w => w.length > 1);
|
|
161
|
+
const wordSet = new Set(words);
|
|
162
|
+
let bestCategory = 'general';
|
|
163
|
+
let bestScore = 0;
|
|
164
|
+
for (const [category, keywords] of Object.entries(CATEGORY_KEYWORDS)) {
|
|
165
|
+
let score = 0;
|
|
166
|
+
for (const kw of keywords) {
|
|
167
|
+
if (kw.includes(' ')) {
|
|
168
|
+
// Multi-word keyword — check substring
|
|
169
|
+
if (lower.includes(kw))
|
|
170
|
+
score += 2;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
if (wordSet.has(kw))
|
|
174
|
+
score += 1;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (score > bestScore) {
|
|
178
|
+
bestScore = score;
|
|
179
|
+
bestCategory = category;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return bestCategory;
|
|
183
|
+
}
|
|
184
|
+
// ── Rating Queries ──
|
|
185
|
+
/**
|
|
186
|
+
* Get a rating for a specific agent and category.
|
|
187
|
+
* Returns the category-specific rating if it exists, otherwise the overall rating.
|
|
188
|
+
*/
|
|
189
|
+
getRating(agent, category) {
|
|
190
|
+
const agentRatings = this.ratings[agent];
|
|
191
|
+
if (!agentRatings)
|
|
192
|
+
return defaultRating();
|
|
193
|
+
return agentRatings[category] || agentRatings._overall || defaultRating();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Conservative rating estimate: mu - 2*sigma
|
|
197
|
+
* This is the lower bound of the ~95% confidence interval.
|
|
198
|
+
* Agents need to both be good AND have enough data to rank highly.
|
|
199
|
+
*/
|
|
200
|
+
conservativeEstimate(rating) {
|
|
201
|
+
return rating.mu - 2 * rating.sigma;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get agents ranked by conservative estimate for a given category.
|
|
205
|
+
*/
|
|
206
|
+
getRankedAgents(category) {
|
|
207
|
+
const ranked = [];
|
|
208
|
+
for (const agent of ALL_AGENTS) {
|
|
209
|
+
const rating = this.getRating(agent, category);
|
|
210
|
+
// Confidence: how much uncertainty has been reduced from the initial state
|
|
211
|
+
// 0 = no data (sigma === INITIAL_SIGMA), 1 = fully certain (sigma === MIN_SIGMA)
|
|
212
|
+
const confidence = 1 - (rating.sigma / INITIAL_SIGMA);
|
|
213
|
+
ranked.push({ agent, rating, confidence: Math.max(0, confidence) });
|
|
214
|
+
}
|
|
215
|
+
// Sort by conservative estimate (mu - 2*sigma), descending
|
|
216
|
+
ranked.sort((a, b) => this.conservativeEstimate(b.rating) - this.conservativeEstimate(a.rating));
|
|
217
|
+
return ranked;
|
|
218
|
+
}
|
|
219
|
+
// ── Rating Updates (Bradley-Terry) ──
|
|
220
|
+
/**
|
|
221
|
+
* Update an agent's rating based on an outcome.
|
|
222
|
+
*
|
|
223
|
+
* Uses a simplified Bradley-Terry model:
|
|
224
|
+
* beta = sigma / 2 (dynamics factor)
|
|
225
|
+
* c = sqrt(2 * beta^2 + sigma^2) (normalization factor)
|
|
226
|
+
* K = sigma^2 / c (update magnitude — bigger when uncertain)
|
|
227
|
+
* mu_new = mu + K * outcome_factor
|
|
228
|
+
* sigma_new = sigma * sqrt(max(1 - sigma^2/c^2, epsilon))
|
|
229
|
+
*
|
|
230
|
+
* outcome_factor: win = +1, loss = -1, draw = 0
|
|
231
|
+
*/
|
|
232
|
+
recordOutcome(agent, category, outcome) {
|
|
233
|
+
// Ensure agent entry exists
|
|
234
|
+
if (!this.ratings[agent]) {
|
|
235
|
+
this.ratings[agent] = { _overall: defaultRating() };
|
|
236
|
+
}
|
|
237
|
+
// Ensure category entry exists
|
|
238
|
+
if (!this.ratings[agent][category]) {
|
|
239
|
+
this.ratings[agent][category] = defaultRating();
|
|
240
|
+
}
|
|
241
|
+
// Update category-specific rating
|
|
242
|
+
this.updateRating(this.ratings[agent][category], outcome);
|
|
243
|
+
// Also update overall rating (with dampened effect)
|
|
244
|
+
if (!this.ratings[agent]._overall) {
|
|
245
|
+
this.ratings[agent]._overall = defaultRating();
|
|
246
|
+
}
|
|
247
|
+
this.updateRating(this.ratings[agent]._overall, outcome, 0.5);
|
|
248
|
+
this.dirty = true;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Core Bradley-Terry update step.
|
|
252
|
+
* @param rating The rating to mutate in place
|
|
253
|
+
* @param outcome The match outcome
|
|
254
|
+
* @param dampen Dampen the update (0-1), 1 = full update
|
|
255
|
+
*/
|
|
256
|
+
updateRating(rating, outcome, dampen = 1.0) {
|
|
257
|
+
const outcomeFactor = outcome === 'win' ? 1 : outcome === 'loss' ? -1 : 0;
|
|
258
|
+
if (outcomeFactor === 0) {
|
|
259
|
+
// Draw: only reduce sigma slightly (we still learned something)
|
|
260
|
+
rating.sigma = Math.max(MIN_SIGMA, rating.sigma * 0.995);
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
const beta = rating.sigma / 2;
|
|
264
|
+
const cSquared = 2 * beta * beta + rating.sigma * rating.sigma;
|
|
265
|
+
const c = Math.sqrt(cSquared);
|
|
266
|
+
// K factor — update magnitude, proportional to uncertainty
|
|
267
|
+
const K = (rating.sigma * rating.sigma) / c;
|
|
268
|
+
// Update mu
|
|
269
|
+
rating.mu += K * outcomeFactor * dampen;
|
|
270
|
+
// Reduce sigma — we're more certain after observing an outcome
|
|
271
|
+
// sigma_new = sigma * sqrt(1 - sigma^2/c^2)
|
|
272
|
+
const sigmaFactor = 1 - (rating.sigma * rating.sigma) / cSquared;
|
|
273
|
+
rating.sigma = Math.max(MIN_SIGMA, rating.sigma * Math.sqrt(Math.max(sigmaFactor, 0.01)));
|
|
274
|
+
}
|
|
275
|
+
// ── High-Level Routing ──
|
|
276
|
+
/**
|
|
277
|
+
* Get the best agent for a task based on Bayesian skill ratings.
|
|
278
|
+
*
|
|
279
|
+
* Returns null if all agents still have high uncertainty (not enough data).
|
|
280
|
+
* The confidence threshold ensures we only route when we have meaningful signal.
|
|
281
|
+
*/
|
|
282
|
+
getAgentForTask(message) {
|
|
283
|
+
const category = this.categorizeMessage(message);
|
|
284
|
+
const ranked = this.getRankedAgents(category);
|
|
285
|
+
if (ranked.length === 0)
|
|
286
|
+
return null;
|
|
287
|
+
const top = ranked[0];
|
|
288
|
+
// Only route if confidence > 0.3 (sigma has decreased meaningfully)
|
|
289
|
+
if (top.confidence <= 0.3)
|
|
290
|
+
return null;
|
|
291
|
+
// Also check that the top agent is meaningfully better than the second
|
|
292
|
+
// (avoid routing when all agents are effectively tied)
|
|
293
|
+
if (ranked.length > 1) {
|
|
294
|
+
const topEst = this.conservativeEstimate(top.rating);
|
|
295
|
+
const secondEst = this.conservativeEstimate(ranked[1].rating);
|
|
296
|
+
// Require at least 1.0 point gap for meaningful differentiation
|
|
297
|
+
if (topEst - secondEst < 1.0)
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
agent: top.agent,
|
|
302
|
+
confidence: top.confidence,
|
|
303
|
+
category,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
// ── Stats ──
|
|
307
|
+
/**
|
|
308
|
+
* Get summary stats for each agent: their top category and confidence level.
|
|
309
|
+
*/
|
|
310
|
+
getStats() {
|
|
311
|
+
const stats = {};
|
|
312
|
+
for (const agent of ALL_AGENTS) {
|
|
313
|
+
const agentRatings = this.ratings[agent];
|
|
314
|
+
if (!agentRatings)
|
|
315
|
+
continue;
|
|
316
|
+
let bestCategory = 'general';
|
|
317
|
+
let bestMu = INITIAL_MU;
|
|
318
|
+
let bestSigma = INITIAL_SIGMA;
|
|
319
|
+
for (const [cat, rating] of Object.entries(agentRatings)) {
|
|
320
|
+
if (cat === '_overall')
|
|
321
|
+
continue;
|
|
322
|
+
const r = rating;
|
|
323
|
+
if (r.mu > bestMu || (r.mu === bestMu && r.sigma < bestSigma)) {
|
|
324
|
+
bestMu = r.mu;
|
|
325
|
+
bestSigma = r.sigma;
|
|
326
|
+
bestCategory = cat;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
const confidence = 1 - (bestSigma / INITIAL_SIGMA);
|
|
330
|
+
stats[agent] = {
|
|
331
|
+
topCategory: bestCategory,
|
|
332
|
+
confidence: Math.max(0, confidence),
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
return stats;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Get raw ratings for an agent (for debugging/display).
|
|
339
|
+
*/
|
|
340
|
+
getAgentRatings(agent) {
|
|
341
|
+
return this.ratings[agent] || null;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// ── Singleton ──
|
|
345
|
+
let _instance = null;
|
|
346
|
+
export function getSkillRatingSystem() {
|
|
347
|
+
if (!_instance) {
|
|
348
|
+
_instance = new SkillRatingSystem();
|
|
349
|
+
}
|
|
350
|
+
return _instance;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=skill-rating.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-rating.js","sourceRoot":"","sources":["../src/skill-rating.ts"],"names":[],"mappings":"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"}
|
package/dist/streaming.d.ts
CHANGED
|
@@ -67,6 +67,7 @@ export declare function streamAnthropicResponse(apiKey: string, apiUrl: string,
|
|
|
67
67
|
}>, options?: {
|
|
68
68
|
thinking?: boolean;
|
|
69
69
|
thinkingBudget?: number;
|
|
70
|
+
responseStream?: ResponseStream;
|
|
70
71
|
}): Promise<StreamState>;
|
|
71
72
|
/**
|
|
72
73
|
* Stream a response from OpenAI-compatible APIs.
|
|
@@ -79,7 +80,80 @@ export declare function streamOpenAIResponse(apiKey: string, apiUrl: string, mod
|
|
|
79
80
|
name: string;
|
|
80
81
|
description: string;
|
|
81
82
|
input_schema: Record<string, unknown>;
|
|
82
|
-
}
|
|
83
|
+
}>, options?: {
|
|
84
|
+
responseStream?: ResponseStream;
|
|
85
|
+
}): Promise<StreamState>;
|
|
86
|
+
export type ResponseStreamEvent = {
|
|
87
|
+
type: 'thinking_start';
|
|
88
|
+
} | {
|
|
89
|
+
type: 'thinking_delta';
|
|
90
|
+
text: string;
|
|
91
|
+
} | {
|
|
92
|
+
type: 'thinking_end';
|
|
93
|
+
} | {
|
|
94
|
+
type: 'content_delta';
|
|
95
|
+
text: string;
|
|
96
|
+
} | {
|
|
97
|
+
type: 'content_end';
|
|
98
|
+
} | {
|
|
99
|
+
type: 'tool_call_start';
|
|
100
|
+
id: string;
|
|
101
|
+
name: string;
|
|
102
|
+
} | {
|
|
103
|
+
type: 'tool_call_delta';
|
|
104
|
+
id: string;
|
|
105
|
+
json: string;
|
|
106
|
+
} | {
|
|
107
|
+
type: 'tool_call_end';
|
|
108
|
+
id: string;
|
|
109
|
+
name: string;
|
|
110
|
+
} | {
|
|
111
|
+
type: 'tool_result';
|
|
112
|
+
id: string;
|
|
113
|
+
name: string;
|
|
114
|
+
result: string;
|
|
115
|
+
error?: string;
|
|
116
|
+
} | {
|
|
117
|
+
type: 'usage';
|
|
118
|
+
inputTokens: number;
|
|
119
|
+
outputTokens: number;
|
|
120
|
+
} | {
|
|
121
|
+
type: 'error';
|
|
122
|
+
message: string;
|
|
123
|
+
code?: string;
|
|
124
|
+
} | {
|
|
125
|
+
type: 'done';
|
|
126
|
+
content: string;
|
|
127
|
+
thinking?: string;
|
|
128
|
+
};
|
|
129
|
+
export type ResponseStreamListener = (event: ResponseStreamEvent) => void;
|
|
130
|
+
export declare class ResponseStream {
|
|
131
|
+
private listeners;
|
|
132
|
+
private _content;
|
|
133
|
+
private _thinking;
|
|
134
|
+
private _toolCalls;
|
|
135
|
+
private _usage;
|
|
136
|
+
private _done;
|
|
137
|
+
/** Subscribe to events. Returns an unsubscribe function. */
|
|
138
|
+
on(listener: ResponseStreamListener): () => void;
|
|
139
|
+
/** Emit an event to all listeners, tracking accumulated state. */
|
|
140
|
+
emit(event: ResponseStreamEvent): void;
|
|
141
|
+
get content(): string;
|
|
142
|
+
get thinking(): string;
|
|
143
|
+
get usage(): {
|
|
144
|
+
inputTokens: number;
|
|
145
|
+
outputTokens: number;
|
|
146
|
+
};
|
|
147
|
+
get isDone(): boolean;
|
|
148
|
+
/** Async iterator for SDK consumers: `for await (const event of stream) { ... }` */
|
|
149
|
+
[Symbol.asyncIterator](): AsyncGenerator<ResponseStreamEvent>;
|
|
150
|
+
/** Create terminal listener (writes to stdout/stderr like current behavior) */
|
|
151
|
+
static createTerminalListener(): ResponseStreamListener;
|
|
152
|
+
/** Create SSE listener (for HTTP serve mode) */
|
|
153
|
+
static createSSEListener(res: {
|
|
154
|
+
write: (data: string) => void;
|
|
155
|
+
}): ResponseStreamListener;
|
|
156
|
+
}
|
|
83
157
|
/**
|
|
84
158
|
* Format thinking text for display (summarized).
|
|
85
159
|
* Used when showing thinking after the fact rather than streaming.
|
package/dist/streaming.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAkCA,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAA;QACV,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAClE,KAAK,EAAE;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAA;QACtD,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;CACxD;AAED,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;IACtD,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAW/C;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EACnD,KAAK,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,EAC3F,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
|