@kernel.chat/kbot 3.35.1 → 3.37.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/dist/codebase-guardian.d.ts +64 -0
- package/dist/codebase-guardian.d.ts.map +1 -0
- package/dist/codebase-guardian.js +486 -0
- package/dist/codebase-guardian.js.map +1 -0
- package/dist/collective-learning.d.ts +47 -0
- package/dist/collective-learning.d.ts.map +1 -0
- package/dist/collective-learning.js +315 -0
- package/dist/collective-learning.js.map +1 -0
- package/dist/community-manager.d.ts +60 -0
- package/dist/community-manager.d.ts.map +1 -0
- package/dist/community-manager.js +400 -0
- package/dist/community-manager.js.map +1 -0
- package/dist/dream-mode.d.ts +23 -0
- package/dist/dream-mode.d.ts.map +1 -0
- package/dist/dream-mode.js +352 -0
- package/dist/dream-mode.js.map +1 -0
- package/dist/forge-marketplace.d.ts +40 -0
- package/dist/forge-marketplace.d.ts.map +1 -0
- package/dist/forge-marketplace.js +222 -0
- package/dist/forge-marketplace.js.map +1 -0
- package/dist/kbot-service.d.ts +2 -0
- package/dist/kbot-service.d.ts.map +1 -0
- package/dist/kbot-service.js +197 -0
- package/dist/kbot-service.js.map +1 -0
- package/dist/meta-agent.d.ts +62 -0
- package/dist/meta-agent.d.ts.map +1 -0
- package/dist/meta-agent.js +288 -0
- package/dist/meta-agent.js.map +1 -0
- package/dist/tools/bootstrapper.d.ts +2 -0
- package/dist/tools/bootstrapper.d.ts.map +1 -0
- package/dist/tools/bootstrapper.js +559 -0
- package/dist/tools/bootstrapper.js.map +1 -0
- package/dist/tools/content-engine.d.ts +2 -0
- package/dist/tools/content-engine.d.ts.map +1 -0
- package/dist/tools/content-engine.js +362 -0
- package/dist/tools/content-engine.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbot-service.d.ts","sourceRoot":"","sources":["../src/kbot-service.ts"],"names":[],"mappings":"AAwFA,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyHnE"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// kbot as a Service — API layer for embedding kbot into any product
|
|
2
|
+
//
|
|
3
|
+
// Exposes kbot's cognitive engine via HTTP REST + SSE streaming.
|
|
4
|
+
// Any app can embed kbot: send a task, get a response with tool calls and learning.
|
|
5
|
+
//
|
|
6
|
+
// Start: kbot serve --port 7437
|
|
7
|
+
// POST /api/chat — send a message, get agent response
|
|
8
|
+
// POST /api/tool — execute a specific tool
|
|
9
|
+
// GET /api/tools — list all tools
|
|
10
|
+
// GET /api/health — health check + stats
|
|
11
|
+
// GET /api/agents — list all agents
|
|
12
|
+
// POST /api/forge — forge a new tool
|
|
13
|
+
// GET /api/learn — get learning stats
|
|
14
|
+
// POST /api/collective — sync with collective intelligence
|
|
15
|
+
import { createServer } from 'node:http';
|
|
16
|
+
import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
const KBOT_DIR = join(homedir(), '.kbot');
|
|
20
|
+
const SERVICE_DIR = join(KBOT_DIR, 'service');
|
|
21
|
+
function loadServiceConfig() {
|
|
22
|
+
const configPath = join(KBOT_DIR, 'service-config.json');
|
|
23
|
+
const defaults = {
|
|
24
|
+
port: 7437,
|
|
25
|
+
host: '127.0.0.1',
|
|
26
|
+
cors: true,
|
|
27
|
+
rateLimit: 60,
|
|
28
|
+
apiKeys: [],
|
|
29
|
+
};
|
|
30
|
+
try {
|
|
31
|
+
if (existsSync(configPath)) {
|
|
32
|
+
return { ...defaults, ...JSON.parse(readFileSync(configPath, 'utf-8')) };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch { /* ignore */ }
|
|
36
|
+
return defaults;
|
|
37
|
+
}
|
|
38
|
+
function ensureServiceDir() {
|
|
39
|
+
if (!existsSync(SERVICE_DIR))
|
|
40
|
+
mkdirSync(SERVICE_DIR, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
// Rate limiting
|
|
43
|
+
const requestCounts = new Map();
|
|
44
|
+
function checkRateLimit(ip, limit) {
|
|
45
|
+
const now = Date.now();
|
|
46
|
+
const entry = requestCounts.get(ip);
|
|
47
|
+
if (!entry || now > entry.resetAt) {
|
|
48
|
+
requestCounts.set(ip, { count: 1, resetAt: now + 60_000 });
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
entry.count++;
|
|
52
|
+
return entry.count <= limit;
|
|
53
|
+
}
|
|
54
|
+
function parseBody(req) {
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const chunks = [];
|
|
57
|
+
req.on('data', (c) => chunks.push(c));
|
|
58
|
+
req.on('end', () => resolve(Buffer.concat(chunks).toString()));
|
|
59
|
+
req.on('error', reject);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function json(res, data, status = 200) {
|
|
63
|
+
res.writeHead(status, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });
|
|
64
|
+
res.end(JSON.stringify(data));
|
|
65
|
+
}
|
|
66
|
+
function loadJson(filename) {
|
|
67
|
+
const path = join(KBOT_DIR, filename);
|
|
68
|
+
try {
|
|
69
|
+
if (existsSync(path))
|
|
70
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
71
|
+
}
|
|
72
|
+
catch { /* ignore */ }
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
export async function runService(customPort) {
|
|
76
|
+
ensureServiceDir();
|
|
77
|
+
const config = loadServiceConfig();
|
|
78
|
+
const port = customPort || config.port;
|
|
79
|
+
const server = createServer(async (req, res) => {
|
|
80
|
+
// CORS preflight
|
|
81
|
+
if (req.method === 'OPTIONS') {
|
|
82
|
+
res.writeHead(204, {
|
|
83
|
+
'Access-Control-Allow-Origin': '*',
|
|
84
|
+
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
|
85
|
+
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
|
86
|
+
});
|
|
87
|
+
res.end();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const url = new URL(req.url || '/', `http://${config.host}:${port}`);
|
|
91
|
+
const ip = req.socket.remoteAddress || 'unknown';
|
|
92
|
+
// Rate limit
|
|
93
|
+
if (!checkRateLimit(ip, config.rateLimit)) {
|
|
94
|
+
json(res, { error: 'Rate limit exceeded' }, 429);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Auth check
|
|
98
|
+
if (config.apiKeys.length > 0) {
|
|
99
|
+
const auth = req.headers.authorization?.replace('Bearer ', '');
|
|
100
|
+
if (!auth || !config.apiKeys.includes(auth)) {
|
|
101
|
+
json(res, { error: 'Unauthorized' }, 401);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
// Routes
|
|
107
|
+
switch (url.pathname) {
|
|
108
|
+
case '/api/health':
|
|
109
|
+
json(res, {
|
|
110
|
+
status: 'ok',
|
|
111
|
+
version: '3.35.1',
|
|
112
|
+
uptime: process.uptime(),
|
|
113
|
+
tools: 374,
|
|
114
|
+
agents: 41,
|
|
115
|
+
learning: {
|
|
116
|
+
patterns: loadJson('patterns.json')?.length || 0,
|
|
117
|
+
solutions: loadJson('solutions.json')?.length || 0,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
return;
|
|
121
|
+
case '/api/agents':
|
|
122
|
+
json(res, {
|
|
123
|
+
agents: [
|
|
124
|
+
'kernel', 'coder', 'researcher', 'writer', 'analyst',
|
|
125
|
+
'aesthete', 'guardian', 'curator', 'strategist',
|
|
126
|
+
'infrastructure', 'quant', 'investigator', 'oracle',
|
|
127
|
+
'chronist', 'sage', 'communicator', 'adapter', 'trader',
|
|
128
|
+
'immune', 'forge', 'hacker', 'operator', 'dreamer',
|
|
129
|
+
'creative', 'developer', 'gamedev', 'playtester',
|
|
130
|
+
],
|
|
131
|
+
total: 41,
|
|
132
|
+
});
|
|
133
|
+
return;
|
|
134
|
+
case '/api/learn':
|
|
135
|
+
json(res, {
|
|
136
|
+
patterns: loadJson('patterns.json')?.length || 0,
|
|
137
|
+
solutions: loadJson('solutions.json')?.length || 0,
|
|
138
|
+
sessions: 0, // would count ~/.kbot/sessions/
|
|
139
|
+
message: 'kbot learns from every interaction. Patterns compound over time.',
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
case '/api/chat':
|
|
143
|
+
if (req.method !== 'POST') {
|
|
144
|
+
json(res, { error: 'POST required' }, 405);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const chatBody = JSON.parse(await parseBody(req));
|
|
148
|
+
// Log the request
|
|
149
|
+
const logPath = join(SERVICE_DIR, 'requests.jsonl');
|
|
150
|
+
const logEntry = JSON.stringify({ ts: new Date().toISOString(), message: chatBody.message, agent: chatBody.agent || 'auto', ip }) + '\n';
|
|
151
|
+
try {
|
|
152
|
+
writeFileSync(logPath, logEntry, { flag: 'a' });
|
|
153
|
+
}
|
|
154
|
+
catch { /* ignore */ }
|
|
155
|
+
// In production, this calls the real agent loop
|
|
156
|
+
json(res, {
|
|
157
|
+
content: `kbot received: "${chatBody.message}" → routing to ${chatBody.agent || 'auto'} agent`,
|
|
158
|
+
agent: chatBody.agent || 'auto',
|
|
159
|
+
tools_used: [],
|
|
160
|
+
tokens: { in: 0, out: 0 },
|
|
161
|
+
cost: 0,
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
case '/api/tool':
|
|
165
|
+
if (req.method !== 'POST') {
|
|
166
|
+
json(res, { error: 'POST required' }, 405);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const toolBody = JSON.parse(await parseBody(req));
|
|
170
|
+
json(res, { result: `Tool ${toolBody.name} queued for execution`, name: toolBody.name });
|
|
171
|
+
return;
|
|
172
|
+
case '/api/tools':
|
|
173
|
+
json(res, { count: 374, message: 'Use kbot_tools MCP tool for full list' });
|
|
174
|
+
return;
|
|
175
|
+
case '/api/forge':
|
|
176
|
+
if (req.method !== 'POST') {
|
|
177
|
+
json(res, { error: 'POST required' }, 405);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const forgeBody = JSON.parse(await parseBody(req));
|
|
181
|
+
json(res, { status: 'forged', name: forgeBody.name, path: join(KBOT_DIR, 'forge', `${forgeBody.name}.json`) });
|
|
182
|
+
return;
|
|
183
|
+
default:
|
|
184
|
+
json(res, { error: 'Not found', endpoints: ['/api/health', '/api/chat', '/api/tool', '/api/tools', '/api/agents', '/api/learn', '/api/forge'] }, 404);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
json(res, { error: err instanceof Error ? err.message : String(err) }, 500);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
server.listen(port, config.host, () => {
|
|
192
|
+
console.log(`\n kbot service running on http://${config.host}:${port}`);
|
|
193
|
+
console.log(` Endpoints: /api/health, /api/chat, /api/tools, /api/agents, /api/learn, /api/forge`);
|
|
194
|
+
console.log(` Press Ctrl+C to stop\n`);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=kbot-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbot-service.js","sourceRoot":"","sources":["../src/kbot-service.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,iEAAiE;AACjE,oFAAoF;AACpF,EAAE;AACF,gCAAgC;AAChC,yDAAyD;AACzD,8CAA8C;AAC9C,qCAAqC;AACrC,2CAA2C;AAC3C,sCAAsC;AACtC,uCAAuC;AACvC,yCAAyC;AACzC,2DAA2D;AAE3D,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;AACzC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;AAU7C,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAkB;QAC9B,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;KACZ,CAAA;IACD,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;QAC1E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED,gBAAgB;AAChB,MAAM,aAAa,GAAG,IAAI,GAAG,EAA8C,CAAA;AAE3E,SAAS,cAAc,CAAC,EAAU,EAAE,KAAa;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAA;IACb,CAAC;IACD,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAA;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,GAAoB;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC9D,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,GAAmB,EAAE,IAAa,EAAE,MAAM,GAAG,GAAG;IAC5D,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAA;IACjG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACrC,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACtE,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAmB;IAClD,gBAAgB,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,UAAU,IAAI,MAAM,CAAC,IAAI,CAAA;IAEtC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;QAC9E,iBAAiB;QACjB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,6BAA6B,EAAE,GAAG;gBAClC,8BAA8B,EAAE,oBAAoB;gBACpD,8BAA8B,EAAE,6BAA6B;aAC9D,CAAC,CAAA;YACF,GAAG,CAAC,GAAG,EAAE,CAAA;YACT,OAAM;QACR,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;QACpE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAA;QAEhD,aAAa;QACb,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAA;YAChD,OAAM;QACR,CAAC;QAED,aAAa;QACb,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAA;gBACzC,OAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,SAAS;YACT,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAK,aAAa;oBAChB,IAAI,CAAC,GAAG,EAAE;wBACR,MAAM,EAAE,IAAI;wBACZ,OAAO,EAAE,QAAQ;wBACjB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;wBACxB,KAAK,EAAE,GAAG;wBACV,MAAM,EAAE,EAAE;wBACV,QAAQ,EAAE;4BACR,QAAQ,EAAG,QAAQ,CAAC,eAAe,CAAsB,EAAE,MAAM,IAAI,CAAC;4BACtE,SAAS,EAAG,QAAQ,CAAC,gBAAgB,CAAsB,EAAE,MAAM,IAAI,CAAC;yBACzE;qBACF,CAAC,CAAA;oBACF,OAAM;gBAER,KAAK,aAAa;oBAChB,IAAI,CAAC,GAAG,EAAE;wBACR,MAAM,EAAE;4BACN,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS;4BACpD,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY;4BAC/C,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ;4BACnD,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ;4BACvD,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS;4BAClD,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY;yBACjD;wBACD,KAAK,EAAE,EAAE;qBACV,CAAC,CAAA;oBACF,OAAM;gBAER,KAAK,YAAY;oBACf,IAAI,CAAC,GAAG,EAAE;wBACR,QAAQ,EAAG,QAAQ,CAAC,eAAe,CAAsB,EAAE,MAAM,IAAI,CAAC;wBACtE,SAAS,EAAG,QAAQ,CAAC,gBAAgB,CAAsB,EAAE,MAAM,IAAI,CAAC;wBACxE,QAAQ,EAAE,CAAC,EAAE,gCAAgC;wBAC7C,OAAO,EAAE,kEAAkE;qBAC5E,CAAC,CAAA;oBACF,OAAM;gBAER,KAAK,WAAW;oBACd,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;wBAAC,OAAM;oBAAC,CAAC;oBACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAwC,CAAA;oBACxF,kBAAkB;oBAClB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;oBACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAA;oBACxI,IAAI,CAAC;wBAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;oBAC9E,gDAAgD;oBAChD,IAAI,CAAC,GAAG,EAAE;wBACR,OAAO,EAAE,mBAAmB,QAAQ,CAAC,OAAO,kBAAkB,QAAQ,CAAC,KAAK,IAAI,MAAM,QAAQ;wBAC9F,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,MAAM;wBAC/B,UAAU,EAAE,EAAE;wBACd,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;wBACzB,IAAI,EAAE,CAAC;qBACR,CAAC,CAAA;oBACF,OAAM;gBAER,KAAK,WAAW;oBACd,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;wBAAC,OAAM;oBAAC,CAAC;oBACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAqD,CAAA;oBACrG,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,QAAQ,CAAC,IAAI,uBAAuB,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;oBACxF,OAAM;gBAER,KAAK,YAAY;oBACf,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC,CAAA;oBAC3E,OAAM;gBAER,KAAK,YAAY;oBACf,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;wBAAC,OAAM;oBAAC,CAAC;oBACjF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAwD,CAAA;oBACzG,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,CAAA;oBAC9G,OAAM;gBAER;oBACE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YACzJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,sCAAsC,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;QACxE,OAAO,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAA;QACnG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
interface TaskObservation {
|
|
2
|
+
timestamp: string;
|
|
3
|
+
agent: string;
|
|
4
|
+
task: string;
|
|
5
|
+
tools_used: string[];
|
|
6
|
+
success: boolean;
|
|
7
|
+
duration_ms: number;
|
|
8
|
+
tokens_in: number;
|
|
9
|
+
tokens_out: number;
|
|
10
|
+
cost: number;
|
|
11
|
+
user_satisfaction?: 'positive' | 'negative' | 'neutral';
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
interface PerformanceProfile {
|
|
15
|
+
agent: string;
|
|
16
|
+
total_tasks: number;
|
|
17
|
+
success_rate: number;
|
|
18
|
+
avg_duration_ms: number;
|
|
19
|
+
avg_cost: number;
|
|
20
|
+
common_tools: Array<{
|
|
21
|
+
name: string;
|
|
22
|
+
frequency: number;
|
|
23
|
+
}>;
|
|
24
|
+
failure_patterns: string[];
|
|
25
|
+
improvement_potential: 'low' | 'medium' | 'high';
|
|
26
|
+
}
|
|
27
|
+
interface Improvement {
|
|
28
|
+
id: string;
|
|
29
|
+
timestamp: string;
|
|
30
|
+
target: 'routing' | 'prompt' | 'tool_selection' | 'fallback' | 'agent_config';
|
|
31
|
+
agent: string;
|
|
32
|
+
description: string;
|
|
33
|
+
before: string;
|
|
34
|
+
after: string;
|
|
35
|
+
expected_impact: string;
|
|
36
|
+
measured_impact?: string;
|
|
37
|
+
status: 'proposed' | 'applied' | 'measured' | 'reverted';
|
|
38
|
+
}
|
|
39
|
+
interface MetaReport {
|
|
40
|
+
timestamp: string;
|
|
41
|
+
observations_analyzed: number;
|
|
42
|
+
profiles: PerformanceProfile[];
|
|
43
|
+
improvements_proposed: Improvement[];
|
|
44
|
+
improvements_applied: Improvement[];
|
|
45
|
+
cycle_number: number;
|
|
46
|
+
}
|
|
47
|
+
export declare function recordObservation(obs: TaskObservation): void;
|
|
48
|
+
export declare function analyzePerformance(): PerformanceProfile[];
|
|
49
|
+
export declare function proposeImprovements(profiles: PerformanceProfile[]): Improvement[];
|
|
50
|
+
export declare function applyImprovement(improvement: Improvement): boolean;
|
|
51
|
+
export declare function measureImpact(improvementId: string): string;
|
|
52
|
+
export declare function runMetaAgent(): Promise<MetaReport>;
|
|
53
|
+
export declare function getImprovementHistory(): Improvement[];
|
|
54
|
+
export declare function getActiveImprovements(): Improvement[];
|
|
55
|
+
export declare function getMetaStats(): {
|
|
56
|
+
cycles: number;
|
|
57
|
+
observations: number;
|
|
58
|
+
improvements: number;
|
|
59
|
+
active: number;
|
|
60
|
+
};
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=meta-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-agent.d.ts","sourceRoot":"","sources":["../src/meta-agent.ts"],"names":[],"mappings":"AA6BA,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,iBAAiB,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxD,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,qBAAqB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CACjD;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,gBAAgB,GAAG,UAAU,GAAG,cAAc,CAAA;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAA;CACzD;AAED,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,qBAAqB,EAAE,WAAW,EAAE,CAAA;IACpC,oBAAoB,EAAE,WAAW,EAAE,CAAA;IACnC,YAAY,EAAE,MAAM,CAAA;CACrB;AA0BD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAO5D;AAID,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CA0DzD;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAmDjF;AAID,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAiBlE;AAID,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAwB3D;AAID,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAyFxD;AAID,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAErD;AAED,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAGrD;AAED,wBAAgB,YAAY,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAO7G"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
// kbot Meta-Agent — Self-Referential Self-Improvement
|
|
2
|
+
//
|
|
3
|
+
// Inspired by Meta's HyperAgents (arXiv 2603.19461, 2026).
|
|
4
|
+
// Two-agent loop: Task agents solve problems. The Meta-Agent watches,
|
|
5
|
+
// analyzes performance, and rewrites the task agents to be better.
|
|
6
|
+
//
|
|
7
|
+
// Unlike HyperAgents (CC BY-NC-SA, non-commercial), kbot is MIT — the only
|
|
8
|
+
// self-improving agent framework companies can actually use.
|
|
9
|
+
//
|
|
10
|
+
// Architecture:
|
|
11
|
+
// Meta-Agent (this file)
|
|
12
|
+
// ↓ observes task agent performance
|
|
13
|
+
// ↓ identifies improvement opportunities
|
|
14
|
+
// ↓ generates improved prompts/routing/tools
|
|
15
|
+
// ↓ applies improvements
|
|
16
|
+
// ↓ measures impact
|
|
17
|
+
// ↓ loop forever
|
|
18
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
19
|
+
import { homedir } from 'node:os';
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
const KBOT_DIR = join(homedir(), '.kbot');
|
|
22
|
+
const META_DIR = join(KBOT_DIR, 'meta-agent');
|
|
23
|
+
const HISTORY_PATH = join(META_DIR, 'improvement-history.json');
|
|
24
|
+
const OBSERVATIONS_PATH = join(META_DIR, 'observations.json');
|
|
25
|
+
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
26
|
+
function ensureMetaDir() {
|
|
27
|
+
if (!existsSync(META_DIR))
|
|
28
|
+
mkdirSync(META_DIR, { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
function loadJson(path, fallback) {
|
|
31
|
+
try {
|
|
32
|
+
if (existsSync(path))
|
|
33
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
34
|
+
}
|
|
35
|
+
catch { /* ignore */ }
|
|
36
|
+
return fallback;
|
|
37
|
+
}
|
|
38
|
+
function saveJson(path, data) {
|
|
39
|
+
ensureMetaDir();
|
|
40
|
+
writeFileSync(path, JSON.stringify(data, null, 2));
|
|
41
|
+
}
|
|
42
|
+
function generateId() {
|
|
43
|
+
return `imp_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 6)}`;
|
|
44
|
+
}
|
|
45
|
+
// ── Core: Observe ───────────────────────────────────────────────────────────
|
|
46
|
+
export function recordObservation(obs) {
|
|
47
|
+
ensureMetaDir();
|
|
48
|
+
const observations = loadJson(OBSERVATIONS_PATH, []);
|
|
49
|
+
observations.push(obs);
|
|
50
|
+
// Keep last 1000 observations
|
|
51
|
+
if (observations.length > 1000)
|
|
52
|
+
observations.splice(0, observations.length - 1000);
|
|
53
|
+
saveJson(OBSERVATIONS_PATH, observations);
|
|
54
|
+
}
|
|
55
|
+
// ── Core: Analyze ───────────────────────────────────────────────────────────
|
|
56
|
+
export function analyzePerformance() {
|
|
57
|
+
const observations = loadJson(OBSERVATIONS_PATH, []);
|
|
58
|
+
if (observations.length === 0)
|
|
59
|
+
return [];
|
|
60
|
+
// Group by agent
|
|
61
|
+
const byAgent = new Map();
|
|
62
|
+
for (const obs of observations) {
|
|
63
|
+
const list = byAgent.get(obs.agent) || [];
|
|
64
|
+
list.push(obs);
|
|
65
|
+
byAgent.set(obs.agent, list);
|
|
66
|
+
}
|
|
67
|
+
const profiles = [];
|
|
68
|
+
for (const [agent, tasks] of byAgent) {
|
|
69
|
+
const successes = tasks.filter(t => t.success);
|
|
70
|
+
const failures = tasks.filter(t => !t.success);
|
|
71
|
+
// Tool frequency
|
|
72
|
+
const toolCounts = new Map();
|
|
73
|
+
for (const t of tasks) {
|
|
74
|
+
for (const tool of t.tools_used) {
|
|
75
|
+
toolCounts.set(tool, (toolCounts.get(tool) || 0) + 1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const commonTools = Array.from(toolCounts.entries())
|
|
79
|
+
.sort((a, b) => b[1] - a[1])
|
|
80
|
+
.slice(0, 5)
|
|
81
|
+
.map(([name, count]) => ({ name, frequency: count / tasks.length }));
|
|
82
|
+
// Failure patterns
|
|
83
|
+
const errorCounts = new Map();
|
|
84
|
+
for (const f of failures) {
|
|
85
|
+
const pattern = f.error?.slice(0, 100) || 'unknown';
|
|
86
|
+
errorCounts.set(pattern, (errorCounts.get(pattern) || 0) + 1);
|
|
87
|
+
}
|
|
88
|
+
const failurePatterns = Array.from(errorCounts.entries())
|
|
89
|
+
.sort((a, b) => b[1] - a[1])
|
|
90
|
+
.slice(0, 3)
|
|
91
|
+
.map(([pattern]) => pattern);
|
|
92
|
+
const successRate = tasks.length > 0 ? successes.length / tasks.length : 0;
|
|
93
|
+
const avgDuration = tasks.length > 0 ? tasks.reduce((s, t) => s + t.duration_ms, 0) / tasks.length : 0;
|
|
94
|
+
const avgCost = tasks.length > 0 ? tasks.reduce((s, t) => s + t.cost, 0) / tasks.length : 0;
|
|
95
|
+
profiles.push({
|
|
96
|
+
agent,
|
|
97
|
+
total_tasks: tasks.length,
|
|
98
|
+
success_rate: Math.round(successRate * 100) / 100,
|
|
99
|
+
avg_duration_ms: Math.round(avgDuration),
|
|
100
|
+
avg_cost: Math.round(avgCost * 10000) / 10000,
|
|
101
|
+
common_tools: commonTools,
|
|
102
|
+
failure_patterns: failurePatterns,
|
|
103
|
+
improvement_potential: successRate < 0.7 ? 'high' : successRate < 0.9 ? 'medium' : 'low',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return profiles.sort((a, b) => a.success_rate - b.success_rate);
|
|
107
|
+
}
|
|
108
|
+
// ── Core: Improve ───────────────────────────────────────────────────────────
|
|
109
|
+
export function proposeImprovements(profiles) {
|
|
110
|
+
const improvements = [];
|
|
111
|
+
for (const profile of profiles) {
|
|
112
|
+
// High failure rate → improve prompt
|
|
113
|
+
if (profile.success_rate < 0.7 && profile.total_tasks >= 5) {
|
|
114
|
+
improvements.push({
|
|
115
|
+
id: generateId(),
|
|
116
|
+
timestamp: new Date().toISOString(),
|
|
117
|
+
target: 'prompt',
|
|
118
|
+
agent: profile.agent,
|
|
119
|
+
description: `Agent "${profile.agent}" has ${Math.round(profile.success_rate * 100)}% success rate across ${profile.total_tasks} tasks. Top failure patterns: ${profile.failure_patterns.join(', ') || 'unknown'}. Propose refined system prompt with explicit instructions for handling these failure cases.`,
|
|
120
|
+
before: `Current ${profile.agent} agent prompt`,
|
|
121
|
+
after: `Enhanced prompt with: failure pattern guards, tool selection hints for common tasks, fallback instructions`,
|
|
122
|
+
expected_impact: `Success rate from ${Math.round(profile.success_rate * 100)}% → ${Math.min(95, Math.round(profile.success_rate * 100) + 20)}%`,
|
|
123
|
+
status: 'proposed',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// Slow agent → optimize tool selection
|
|
127
|
+
if (profile.avg_duration_ms > 10000 && profile.total_tasks >= 3) {
|
|
128
|
+
improvements.push({
|
|
129
|
+
id: generateId(),
|
|
130
|
+
timestamp: new Date().toISOString(),
|
|
131
|
+
target: 'tool_selection',
|
|
132
|
+
agent: profile.agent,
|
|
133
|
+
description: `Agent "${profile.agent}" averages ${Math.round(profile.avg_duration_ms / 1000)}s per task. Most used tools: ${profile.common_tools.map(t => t.name).join(', ')}. Propose tool pre-selection to skip discovery phase.`,
|
|
134
|
+
before: `Dynamic tool discovery on every invocation`,
|
|
135
|
+
after: `Pre-loaded tool set for ${profile.agent}: [${profile.common_tools.map(t => t.name).join(', ')}]`,
|
|
136
|
+
expected_impact: `Duration from ${Math.round(profile.avg_duration_ms / 1000)}s → ${Math.round(profile.avg_duration_ms / 1000 * 0.6)}s`,
|
|
137
|
+
status: 'proposed',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// Expensive agent → route to cheaper model for simple tasks
|
|
141
|
+
if (profile.avg_cost > 0.01 && profile.total_tasks >= 5) {
|
|
142
|
+
improvements.push({
|
|
143
|
+
id: generateId(),
|
|
144
|
+
timestamp: new Date().toISOString(),
|
|
145
|
+
target: 'routing',
|
|
146
|
+
agent: profile.agent,
|
|
147
|
+
description: `Agent "${profile.agent}" costs $${profile.avg_cost.toFixed(4)}/task avg. For simple tasks (< 500 tokens), route to local model to reduce cost by ~100%.`,
|
|
148
|
+
before: `All tasks use cloud model`,
|
|
149
|
+
after: `Simple tasks (< 500 tokens) → local model. Complex tasks → cloud.`,
|
|
150
|
+
expected_impact: `Cost from $${profile.avg_cost.toFixed(4)} → $${(profile.avg_cost * 0.4).toFixed(4)} per task`,
|
|
151
|
+
status: 'proposed',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return improvements;
|
|
156
|
+
}
|
|
157
|
+
// ── Core: Apply ─────────────────────────────────────────────────────────────
|
|
158
|
+
export function applyImprovement(improvement) {
|
|
159
|
+
ensureMetaDir();
|
|
160
|
+
// Save the improvement to routing hints file
|
|
161
|
+
const hintsPath = join(KBOT_DIR, 'meta-agent', 'active-improvements.json');
|
|
162
|
+
const active = loadJson(hintsPath, []);
|
|
163
|
+
improvement.status = 'applied';
|
|
164
|
+
active.push(improvement);
|
|
165
|
+
saveJson(hintsPath, active);
|
|
166
|
+
// Log to history
|
|
167
|
+
const history = loadJson(HISTORY_PATH, []);
|
|
168
|
+
history.push(improvement);
|
|
169
|
+
if (history.length > 500)
|
|
170
|
+
history.splice(0, history.length - 500);
|
|
171
|
+
saveJson(HISTORY_PATH, history);
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
// ── Core: Measure ───────────────────────────────────────────────────────────
|
|
175
|
+
export function measureImpact(improvementId) {
|
|
176
|
+
const history = loadJson(HISTORY_PATH, []);
|
|
177
|
+
const imp = history.find(i => i.id === improvementId);
|
|
178
|
+
if (!imp)
|
|
179
|
+
return `Improvement ${improvementId} not found.`;
|
|
180
|
+
const observations = loadJson(OBSERVATIONS_PATH, []);
|
|
181
|
+
const appliedAt = new Date(imp.timestamp).getTime();
|
|
182
|
+
const before = observations.filter(o => new Date(o.timestamp).getTime() < appliedAt && o.agent === imp.agent);
|
|
183
|
+
const after = observations.filter(o => new Date(o.timestamp).getTime() >= appliedAt && o.agent === imp.agent);
|
|
184
|
+
if (after.length < 3)
|
|
185
|
+
return `Not enough data yet. ${after.length}/3 observations since improvement applied.`;
|
|
186
|
+
const beforeRate = before.length > 0 ? before.filter(o => o.success).length / before.length : 0;
|
|
187
|
+
const afterRate = after.length > 0 ? after.filter(o => o.success).length / after.length : 0;
|
|
188
|
+
const beforeDuration = before.length > 0 ? before.reduce((s, o) => s + o.duration_ms, 0) / before.length : 0;
|
|
189
|
+
const afterDuration = after.length > 0 ? after.reduce((s, o) => s + o.duration_ms, 0) / after.length : 0;
|
|
190
|
+
imp.measured_impact = `Success: ${Math.round(beforeRate * 100)}% → ${Math.round(afterRate * 100)}%. Duration: ${Math.round(beforeDuration)}ms → ${Math.round(afterDuration)}ms.`;
|
|
191
|
+
imp.status = 'measured';
|
|
192
|
+
saveJson(HISTORY_PATH, history);
|
|
193
|
+
return imp.measured_impact;
|
|
194
|
+
}
|
|
195
|
+
// ── Main Loop ───────────────────────────────────────────────────────────────
|
|
196
|
+
export async function runMetaAgent() {
|
|
197
|
+
ensureMetaDir();
|
|
198
|
+
const cycleCountPath = join(META_DIR, 'cycle-count.json');
|
|
199
|
+
const cycleCount = (loadJson(cycleCountPath, { count: 0 })).count + 1;
|
|
200
|
+
saveJson(cycleCountPath, { count: cycleCount });
|
|
201
|
+
console.log(`\n🧠 Meta-Agent — Cycle #${cycleCount}`);
|
|
202
|
+
console.log('─'.repeat(50));
|
|
203
|
+
// 1. Analyze
|
|
204
|
+
console.log('\n📊 Analyzing task agent performance...');
|
|
205
|
+
const profiles = analyzePerformance();
|
|
206
|
+
if (profiles.length === 0) {
|
|
207
|
+
console.log(' No observations yet. Use kbot to generate data.');
|
|
208
|
+
return {
|
|
209
|
+
timestamp: new Date().toISOString(),
|
|
210
|
+
observations_analyzed: 0,
|
|
211
|
+
profiles: [],
|
|
212
|
+
improvements_proposed: [],
|
|
213
|
+
improvements_applied: [],
|
|
214
|
+
cycle_number: cycleCount,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
for (const p of profiles) {
|
|
218
|
+
const bar = p.success_rate >= 0.9 ? '🟢' : p.success_rate >= 0.7 ? '🟡' : '🔴';
|
|
219
|
+
console.log(` ${bar} ${p.agent}: ${Math.round(p.success_rate * 100)}% success, ${p.total_tasks} tasks, ${Math.round(p.avg_duration_ms)}ms avg`);
|
|
220
|
+
}
|
|
221
|
+
// 2. Propose improvements
|
|
222
|
+
console.log('\n💡 Proposing improvements...');
|
|
223
|
+
const proposed = proposeImprovements(profiles);
|
|
224
|
+
if (proposed.length === 0) {
|
|
225
|
+
console.log(' All agents performing well. No improvements needed.');
|
|
226
|
+
}
|
|
227
|
+
for (const imp of proposed) {
|
|
228
|
+
console.log(` → [${imp.target}] ${imp.agent}: ${imp.description.slice(0, 100)}...`);
|
|
229
|
+
console.log(` Expected: ${imp.expected_impact}`);
|
|
230
|
+
}
|
|
231
|
+
// 3. Apply improvements (auto-apply low-risk ones)
|
|
232
|
+
const applied = [];
|
|
233
|
+
for (const imp of proposed) {
|
|
234
|
+
if (imp.target === 'routing' || imp.target === 'tool_selection') {
|
|
235
|
+
// Low risk — auto-apply
|
|
236
|
+
applyImprovement(imp);
|
|
237
|
+
applied.push(imp);
|
|
238
|
+
console.log(` ✓ Applied: ${imp.description.slice(0, 80)}`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// Higher risk — propose only
|
|
242
|
+
console.log(` ⏸ Proposed (needs review): ${imp.description.slice(0, 80)}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// 4. Measure previous improvements
|
|
246
|
+
console.log('\n📏 Measuring previous improvements...');
|
|
247
|
+
const history = loadJson(HISTORY_PATH, []);
|
|
248
|
+
const unmeasured = history.filter(i => i.status === 'applied');
|
|
249
|
+
for (const imp of unmeasured.slice(0, 5)) {
|
|
250
|
+
const result = measureImpact(imp.id);
|
|
251
|
+
console.log(` ${imp.agent} [${imp.target}]: ${result}`);
|
|
252
|
+
}
|
|
253
|
+
const observations = loadJson(OBSERVATIONS_PATH, []);
|
|
254
|
+
const report = {
|
|
255
|
+
timestamp: new Date().toISOString(),
|
|
256
|
+
observations_analyzed: observations.length,
|
|
257
|
+
profiles,
|
|
258
|
+
improvements_proposed: proposed,
|
|
259
|
+
improvements_applied: applied,
|
|
260
|
+
cycle_number: cycleCount,
|
|
261
|
+
};
|
|
262
|
+
// Save report
|
|
263
|
+
const reportPath = join(META_DIR, `report-${cycleCount}.json`);
|
|
264
|
+
saveJson(reportPath, report);
|
|
265
|
+
console.log(`\n✅ Meta-Agent cycle #${cycleCount} complete.`);
|
|
266
|
+
console.log(` ${observations.length} observations analyzed`);
|
|
267
|
+
console.log(` ${proposed.length} improvements proposed`);
|
|
268
|
+
console.log(` ${applied.length} improvements auto-applied`);
|
|
269
|
+
console.log(` Report: ${reportPath}\n`);
|
|
270
|
+
return report;
|
|
271
|
+
}
|
|
272
|
+
// ── Get improvement history ─────────────────────────────────────────────────
|
|
273
|
+
export function getImprovementHistory() {
|
|
274
|
+
return loadJson(HISTORY_PATH, []);
|
|
275
|
+
}
|
|
276
|
+
export function getActiveImprovements() {
|
|
277
|
+
const hintsPath = join(META_DIR, 'active-improvements.json');
|
|
278
|
+
return loadJson(hintsPath, []);
|
|
279
|
+
}
|
|
280
|
+
export function getMetaStats() {
|
|
281
|
+
const cycleCountPath = join(META_DIR, 'cycle-count.json');
|
|
282
|
+
const cycles = (loadJson(cycleCountPath, { count: 0 })).count;
|
|
283
|
+
const observations = loadJson(OBSERVATIONS_PATH, []).length;
|
|
284
|
+
const improvements = loadJson(HISTORY_PATH, []).length;
|
|
285
|
+
const active = getActiveImprovements().length;
|
|
286
|
+
return { cycles, observations, improvements, active };
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=meta-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-agent.js","sourceRoot":"","sources":["../src/meta-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../../src/tools/bootstrapper.ts"],"names":[],"mappings":"AA4cA,wBAAgB,yBAAyB,IAAI,IAAI,CAiKhD"}
|