@kernel.chat/kbot 3.38.0 → 3.39.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.
@@ -0,0 +1,23 @@
1
+ import type { Server } from 'node:http';
2
+ export interface ForgeServerTool {
3
+ /** Tool name (snake_case) */
4
+ name: string;
5
+ /** Human-readable description */
6
+ description: string;
7
+ /** Tool implementation code */
8
+ code: string;
9
+ /** Author username or anonymous */
10
+ author: string;
11
+ /** Semver version */
12
+ version: string;
13
+ /** ISO timestamp of creation */
14
+ created: string;
15
+ /** ISO timestamp of last update */
16
+ updated: string;
17
+ /** Categorization tags */
18
+ tags: string[];
19
+ }
20
+ /** Start the Forge Marketplace HTTP server.
21
+ * Returns the running server instance. */
22
+ export declare function startForgeServer(port?: number): Server;
23
+ //# sourceMappingURL=forge-marketplace-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-marketplace-server.d.ts","sourceRoot":"","sources":["../src/forge-marketplace-server.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAYvC,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,0BAA0B;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAybD;2CAC2C;AAC3C,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CA+FtD"}
@@ -0,0 +1,457 @@
1
+ // kbot Forge Marketplace Server — Local-first HTTP server for tool sharing
2
+ //
3
+ // Run on one machine for personal use or deploy for the community.
4
+ // Other kbot instances can publish tools and download from this server.
5
+ //
6
+ // Routes:
7
+ // POST /api/forge/publish — publish a forged tool
8
+ // GET /api/forge/marketplace — list all tools sorted by downloads
9
+ // GET /api/forge/tools/:name — get a specific tool
10
+ // POST /api/forge/rate — rate a tool (1-5)
11
+ // GET /api/forge/trending — top 10 by downloads this week
12
+ // GET /api/forge/recommend — recommend tools for a project type
13
+ //
14
+ // Stores everything in ~/.kbot/forge-server/ as JSON files.
15
+ // Uses only Node built-ins. No external dependencies.
16
+ import { createServer } from 'node:http';
17
+ import { homedir } from 'node:os';
18
+ import { join } from 'node:path';
19
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, } from 'node:fs';
20
+ const KBOT_DIR = join(homedir(), '.kbot');
21
+ const SERVER_DIR = join(KBOT_DIR, 'forge-server');
22
+ const TOOLS_DIR = join(SERVER_DIR, 'tools');
23
+ const RATINGS_FILE = join(SERVER_DIR, 'ratings.json');
24
+ const DOWNLOADS_FILE = join(SERVER_DIR, 'downloads.json');
25
+ const DEFAULT_PORT = 7439;
26
+ // ── Project type to tag mapping for recommendations ──
27
+ const PROJECT_TAG_MAP = {
28
+ react: ['react', 'frontend', 'component', 'jsx', 'tsx', 'ui'],
29
+ nextjs: ['nextjs', 'react', 'ssr', 'fullstack', 'api'],
30
+ vue: ['vue', 'frontend', 'component', 'ui'],
31
+ angular: ['angular', 'frontend', 'component', 'typescript'],
32
+ svelte: ['svelte', 'frontend', 'component', 'ui'],
33
+ python: ['python', 'pip', 'backend', 'script'],
34
+ django: ['django', 'python', 'backend', 'api', 'orm'],
35
+ flask: ['flask', 'python', 'backend', 'api'],
36
+ rust: ['rust', 'cargo', 'systems', 'cli'],
37
+ go: ['go', 'golang', 'backend', 'cli', 'api'],
38
+ node: ['node', 'npm', 'typescript', 'javascript', 'backend'],
39
+ express: ['express', 'node', 'api', 'backend', 'middleware'],
40
+ docker: ['docker', 'container', 'devops', 'deploy'],
41
+ terraform: ['terraform', 'iac', 'devops', 'cloud'],
42
+ kubernetes: ['kubernetes', 'k8s', 'devops', 'container', 'deploy'],
43
+ };
44
+ // ── Helpers ──
45
+ function ensureDir(dir) {
46
+ if (!existsSync(dir))
47
+ mkdirSync(dir, { recursive: true });
48
+ }
49
+ function loadJSON(path, fallback) {
50
+ try {
51
+ if (existsSync(path)) {
52
+ return JSON.parse(readFileSync(path, 'utf-8'));
53
+ }
54
+ }
55
+ catch {
56
+ // Corrupt file
57
+ }
58
+ return fallback;
59
+ }
60
+ function saveJSON(path, data) {
61
+ const parentDir = join(path, '..');
62
+ ensureDir(parentDir);
63
+ writeFileSync(path, JSON.stringify(data, null, 2));
64
+ }
65
+ function loadRatings() {
66
+ return loadJSON(RATINGS_FILE, { tools: {} });
67
+ }
68
+ function saveRatings(store) {
69
+ saveJSON(RATINGS_FILE, store);
70
+ }
71
+ function loadDownloads() {
72
+ return loadJSON(DOWNLOADS_FILE, { tools: {} });
73
+ }
74
+ function saveDownloads(store) {
75
+ saveJSON(DOWNLOADS_FILE, store);
76
+ }
77
+ /** Get the ISO week string for a date (YYYY-Www) */
78
+ function getISOWeek(date) {
79
+ const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
80
+ const dayNum = d.getUTCDay() || 7;
81
+ d.setUTCDate(d.getUTCDate() + 4 - dayNum);
82
+ const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
83
+ const weekNo = Math.ceil((((d.getTime() - yearStart.getTime()) / 86400000) + 1) / 7);
84
+ return `${d.getUTCFullYear()}-W${String(weekNo).padStart(2, '0')}`;
85
+ }
86
+ /** Record a download event for a tool */
87
+ function recordDownload(name) {
88
+ const store = loadDownloads();
89
+ if (!store.tools[name]) {
90
+ store.tools[name] = { name, total: 0, weekly: {} };
91
+ }
92
+ store.tools[name].total++;
93
+ const week = getISOWeek(new Date());
94
+ store.tools[name].weekly[week] = (store.tools[name].weekly[week] || 0) + 1;
95
+ saveDownloads(store);
96
+ }
97
+ /** Load a tool from disk */
98
+ function loadTool(name) {
99
+ const toolPath = join(TOOLS_DIR, `${name}.json`);
100
+ return loadJSON(toolPath, null);
101
+ }
102
+ /** List all tools on disk */
103
+ function listAllTools() {
104
+ ensureDir(TOOLS_DIR);
105
+ const files = readdirSync(TOOLS_DIR).filter(f => f.endsWith('.json'));
106
+ const tools = [];
107
+ for (const file of files) {
108
+ try {
109
+ const tool = JSON.parse(readFileSync(join(TOOLS_DIR, file), 'utf-8'));
110
+ tools.push(tool);
111
+ }
112
+ catch {
113
+ // Skip corrupt files
114
+ }
115
+ }
116
+ return tools;
117
+ }
118
+ /** Parse JSON body from request */
119
+ function parseBody(req) {
120
+ return new Promise((resolve, reject) => {
121
+ const chunks = [];
122
+ let size = 0;
123
+ const MAX_BODY = 5 * 1024 * 1024; // 5MB
124
+ req.on('data', (chunk) => {
125
+ size += chunk.length;
126
+ if (size > MAX_BODY) {
127
+ reject(new Error('Body too large'));
128
+ req.destroy();
129
+ return;
130
+ }
131
+ chunks.push(chunk);
132
+ });
133
+ req.on('end', () => {
134
+ try {
135
+ const body = Buffer.concat(chunks).toString('utf-8');
136
+ resolve(body ? JSON.parse(body) : {});
137
+ }
138
+ catch {
139
+ reject(new Error('Invalid JSON'));
140
+ }
141
+ });
142
+ req.on('error', reject);
143
+ });
144
+ }
145
+ /** Send JSON response */
146
+ function sendJSON(res, status, data) {
147
+ const body = JSON.stringify(data);
148
+ res.writeHead(status, {
149
+ 'Content-Type': 'application/json',
150
+ 'Content-Length': Buffer.byteLength(body),
151
+ 'Access-Control-Allow-Origin': '*',
152
+ });
153
+ res.end(body);
154
+ }
155
+ /** Parse URL query parameters */
156
+ function parseQuery(url) {
157
+ const params = {};
158
+ const idx = url.indexOf('?');
159
+ if (idx === -1)
160
+ return params;
161
+ const query = url.slice(idx + 1);
162
+ for (const pair of query.split('&')) {
163
+ const eqIdx = pair.indexOf('=');
164
+ if (eqIdx === -1) {
165
+ params[decodeURIComponent(pair)] = '';
166
+ }
167
+ else {
168
+ params[decodeURIComponent(pair.slice(0, eqIdx))] = decodeURIComponent(pair.slice(eqIdx + 1));
169
+ }
170
+ }
171
+ return params;
172
+ }
173
+ /** Extract path without query string */
174
+ function getPath(url) {
175
+ const idx = url.indexOf('?');
176
+ return idx === -1 ? url : url.slice(0, idx);
177
+ }
178
+ // ── Route Handlers ──
179
+ /** POST /api/forge/publish — accepts a forged tool JSON, saves to disk */
180
+ async function handlePublish(req, res) {
181
+ const body = await parseBody(req);
182
+ if (!body.name || typeof body.name !== 'string') {
183
+ sendJSON(res, 400, { error: 'Missing required field: name' });
184
+ return;
185
+ }
186
+ if (!body.description || typeof body.description !== 'string') {
187
+ sendJSON(res, 400, { error: 'Missing required field: description' });
188
+ return;
189
+ }
190
+ if (!body.code || typeof body.code !== 'string') {
191
+ sendJSON(res, 400, { error: 'Missing required field: code' });
192
+ return;
193
+ }
194
+ // Sanitize name to safe filesystem characters
195
+ const safeName = body.name.replace(/[^a-z0-9_-]/gi, '_').toLowerCase();
196
+ const now = new Date().toISOString();
197
+ const existing = loadTool(safeName);
198
+ const tool = {
199
+ name: safeName,
200
+ description: body.description,
201
+ code: body.code,
202
+ author: typeof body.author === 'string' ? body.author : 'anonymous',
203
+ version: typeof body.version === 'string' ? body.version : '1.0.0',
204
+ created: existing?.created || now,
205
+ updated: now,
206
+ tags: Array.isArray(body.tags) ? body.tags.filter((t) => typeof t === 'string') : [],
207
+ };
208
+ ensureDir(TOOLS_DIR);
209
+ saveJSON(join(TOOLS_DIR, `${safeName}.json`), tool);
210
+ sendJSON(res, 200, {
211
+ success: true,
212
+ name: safeName,
213
+ message: `Tool "${safeName}" published successfully.`,
214
+ });
215
+ }
216
+ /** GET /api/forge/marketplace — returns all published tools sorted by downloads */
217
+ function handleMarketplace(_req, res) {
218
+ const tools = listAllTools();
219
+ const downloads = loadDownloads();
220
+ const ratings = loadRatings();
221
+ const enriched = tools.map(tool => ({
222
+ name: tool.name,
223
+ description: tool.description,
224
+ author: tool.author,
225
+ version: tool.version,
226
+ created: tool.created,
227
+ updated: tool.updated,
228
+ tags: tool.tags,
229
+ downloads: downloads.tools[tool.name]?.total || 0,
230
+ rating: ratings.tools[tool.name]?.average || 0,
231
+ rating_count: ratings.tools[tool.name]?.count || 0,
232
+ }));
233
+ // Sort by downloads descending
234
+ enriched.sort((a, b) => b.downloads - a.downloads);
235
+ sendJSON(res, 200, { tools: enriched, total: enriched.length });
236
+ }
237
+ /** GET /api/forge/tools/:name — returns a specific tool, records download */
238
+ function handleGetTool(name, res) {
239
+ const safeName = name.replace(/[^a-z0-9_-]/gi, '_').toLowerCase();
240
+ const tool = loadTool(safeName);
241
+ if (!tool) {
242
+ sendJSON(res, 404, { error: `Tool "${safeName}" not found.` });
243
+ return;
244
+ }
245
+ // Record download
246
+ recordDownload(safeName);
247
+ const downloads = loadDownloads();
248
+ const ratings = loadRatings();
249
+ sendJSON(res, 200, {
250
+ ...tool,
251
+ downloads: downloads.tools[safeName]?.total || 0,
252
+ rating: ratings.tools[safeName]?.average || 0,
253
+ rating_count: ratings.tools[safeName]?.count || 0,
254
+ });
255
+ }
256
+ /** POST /api/forge/rate — accepts name + rating (1-5) */
257
+ async function handleRate(req, res) {
258
+ const body = await parseBody(req);
259
+ if (!body.name || typeof body.name !== 'string') {
260
+ sendJSON(res, 400, { error: 'Missing required field: name' });
261
+ return;
262
+ }
263
+ if (typeof body.rating !== 'number' || !Number.isInteger(body.rating) || body.rating < 1 || body.rating > 5) {
264
+ sendJSON(res, 400, { error: 'Rating must be an integer between 1 and 5.' });
265
+ return;
266
+ }
267
+ const safeName = body.name.replace(/[^a-z0-9_-]/gi, '_').toLowerCase();
268
+ // Verify tool exists
269
+ const tool = loadTool(safeName);
270
+ if (!tool) {
271
+ sendJSON(res, 404, { error: `Tool "${safeName}" not found.` });
272
+ return;
273
+ }
274
+ const store = loadRatings();
275
+ if (!store.tools[safeName]) {
276
+ store.tools[safeName] = { name: safeName, ratings: [], average: 0, count: 0 };
277
+ }
278
+ const toolRating = store.tools[safeName];
279
+ toolRating.ratings.push(body.rating);
280
+ // Cap stored ratings at 1000 to avoid unbounded growth
281
+ if (toolRating.ratings.length > 1000) {
282
+ toolRating.ratings = toolRating.ratings.slice(-1000);
283
+ }
284
+ toolRating.count = toolRating.ratings.length;
285
+ toolRating.average = Math.round((toolRating.ratings.reduce((sum, r) => sum + r, 0) / toolRating.count) * 100) / 100;
286
+ saveRatings(store);
287
+ sendJSON(res, 200, {
288
+ success: true,
289
+ name: safeName,
290
+ average: toolRating.average,
291
+ count: toolRating.count,
292
+ });
293
+ }
294
+ /** GET /api/forge/trending — top 10 by downloads this week */
295
+ function handleTrending(_req, res) {
296
+ const tools = listAllTools();
297
+ const downloads = loadDownloads();
298
+ const ratings = loadRatings();
299
+ const currentWeek = getISOWeek(new Date());
300
+ const enriched = tools.map(tool => {
301
+ const dl = downloads.tools[tool.name];
302
+ return {
303
+ name: tool.name,
304
+ description: tool.description,
305
+ author: tool.author,
306
+ version: tool.version,
307
+ tags: tool.tags,
308
+ downloads_total: dl?.total || 0,
309
+ downloads_this_week: dl?.weekly[currentWeek] || 0,
310
+ rating: ratings.tools[tool.name]?.average || 0,
311
+ rating_count: ratings.tools[tool.name]?.count || 0,
312
+ };
313
+ });
314
+ // Sort by weekly downloads descending, then total as tiebreaker
315
+ enriched.sort((a, b) => {
316
+ const weekDiff = b.downloads_this_week - a.downloads_this_week;
317
+ return weekDiff !== 0 ? weekDiff : b.downloads_total - a.downloads_total;
318
+ });
319
+ sendJSON(res, 200, { tools: enriched.slice(0, 10), week: currentWeek });
320
+ }
321
+ /** GET /api/forge/recommend?type=react — recommend tools for project type */
322
+ function handleRecommend(req, res) {
323
+ const query = parseQuery(req.url || '');
324
+ const projectType = (query.type || '').toLowerCase().trim();
325
+ if (!projectType) {
326
+ sendJSON(res, 400, {
327
+ error: 'Missing query parameter: type',
328
+ supported_types: Object.keys(PROJECT_TAG_MAP),
329
+ });
330
+ return;
331
+ }
332
+ const relevantTags = PROJECT_TAG_MAP[projectType] || [projectType];
333
+ const tagSet = new Set(relevantTags);
334
+ const tools = listAllTools();
335
+ const downloads = loadDownloads();
336
+ const ratings = loadRatings();
337
+ // Score each tool by tag overlap + downloads + rating
338
+ const scored = tools.map(tool => {
339
+ const tagOverlap = tool.tags.filter(t => tagSet.has(t.toLowerCase())).length;
340
+ const dl = downloads.tools[tool.name]?.total || 0;
341
+ const rating = ratings.tools[tool.name]?.average || 0;
342
+ // Weighted relevance score
343
+ const score = (tagOverlap * 10) + (rating * 2) + Math.log2(dl + 1);
344
+ return {
345
+ name: tool.name,
346
+ description: tool.description,
347
+ author: tool.author,
348
+ version: tool.version,
349
+ tags: tool.tags,
350
+ downloads: dl,
351
+ rating,
352
+ rating_count: ratings.tools[tool.name]?.count || 0,
353
+ relevance_score: Math.round(score * 100) / 100,
354
+ };
355
+ }).filter(t => {
356
+ // Must have at least one matching tag or the project type in name/description
357
+ const hasTagMatch = t.tags.some(tag => tagSet.has(tag.toLowerCase()));
358
+ const hasNameMatch = t.name.includes(projectType);
359
+ const hasDescMatch = t.description.toLowerCase().includes(projectType);
360
+ return hasTagMatch || hasNameMatch || hasDescMatch;
361
+ });
362
+ // Sort by relevance score descending
363
+ scored.sort((a, b) => b.relevance_score - a.relevance_score);
364
+ sendJSON(res, 200, {
365
+ tools: scored.slice(0, 20),
366
+ project_type: projectType,
367
+ matched_tags: relevantTags,
368
+ });
369
+ }
370
+ // ── Server ──
371
+ /** Start the Forge Marketplace HTTP server.
372
+ * Returns the running server instance. */
373
+ export function startForgeServer(port) {
374
+ const listenPort = port ?? DEFAULT_PORT;
375
+ // Ensure storage directories exist
376
+ ensureDir(SERVER_DIR);
377
+ ensureDir(TOOLS_DIR);
378
+ const server = createServer(async (req, res) => {
379
+ // CORS preflight
380
+ if (req.method === 'OPTIONS') {
381
+ res.writeHead(204, {
382
+ 'Access-Control-Allow-Origin': '*',
383
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
384
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
385
+ });
386
+ res.end();
387
+ return;
388
+ }
389
+ const method = req.method || 'GET';
390
+ const path = getPath(req.url || '/');
391
+ try {
392
+ // POST /api/forge/publish
393
+ if (method === 'POST' && path === '/api/forge/publish') {
394
+ await handlePublish(req, res);
395
+ return;
396
+ }
397
+ // GET /api/forge/marketplace
398
+ if (method === 'GET' && path === '/api/forge/marketplace') {
399
+ handleMarketplace(req, res);
400
+ return;
401
+ }
402
+ // GET /api/forge/tools/:name
403
+ if (method === 'GET' && path.startsWith('/api/forge/tools/')) {
404
+ const name = path.slice('/api/forge/tools/'.length);
405
+ if (!name) {
406
+ sendJSON(res, 400, { error: 'Tool name is required.' });
407
+ return;
408
+ }
409
+ handleGetTool(decodeURIComponent(name), res);
410
+ return;
411
+ }
412
+ // POST /api/forge/rate
413
+ if (method === 'POST' && path === '/api/forge/rate') {
414
+ await handleRate(req, res);
415
+ return;
416
+ }
417
+ // GET /api/forge/trending
418
+ if (method === 'GET' && path === '/api/forge/trending') {
419
+ handleTrending(req, res);
420
+ return;
421
+ }
422
+ // GET /api/forge/recommend
423
+ if (method === 'GET' && path === '/api/forge/recommend') {
424
+ handleRecommend(req, res);
425
+ return;
426
+ }
427
+ // Health check
428
+ if (method === 'GET' && (path === '/' || path === '/health')) {
429
+ const toolCount = listAllTools().length;
430
+ sendJSON(res, 200, {
431
+ status: 'ok',
432
+ service: 'kbot-forge-marketplace',
433
+ tools: toolCount,
434
+ uptime: process.uptime(),
435
+ });
436
+ return;
437
+ }
438
+ // 404
439
+ sendJSON(res, 404, { error: 'Not found', path });
440
+ }
441
+ catch (err) {
442
+ const message = err instanceof Error ? err.message : 'Internal server error';
443
+ if (process.env.KBOT_DEBUG) {
444
+ console.error(`[forge-server] ${method} ${path} error:`, message);
445
+ }
446
+ sendJSON(res, 500, { error: message });
447
+ }
448
+ });
449
+ server.listen(listenPort, () => {
450
+ if (process.env.KBOT_DEBUG || !process.env.KBOT_QUIET) {
451
+ console.log(`[forge-server] Marketplace running on http://localhost:${listenPort}`);
452
+ console.log(`[forge-server] Storage: ${SERVER_DIR}`);
453
+ }
454
+ });
455
+ return server;
456
+ }
457
+ //# sourceMappingURL=forge-marketplace-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-marketplace-server.js","sourceRoot":"","sources":["../src/forge-marketplace-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kernel.chat/kbot",
3
- "version": "3.38.0",
3
+ "version": "3.39.0",
4
4
  "description": "The only AI agent that builds its own tools — and defends itself. Self-Defense System: HMAC memory integrity, prompt injection detection, knowledge sanitization, forge verification, anomaly detection, incident logging. Cybersecurity tools: dep_audit, secret_scan, ssl_check, headers_check, cve_lookup, port_scan, owasp_check. Machine-aware situated intelligence: full hardware profiling (CPU, GPU, RAM, display, battery, dev tools), resource-adaptive tool pipeline, memory-pressure throttling, GPU-accelerated model routing. Multi-channel cognitive engine: email agent, iMessage agent, consultation pipeline, Trader agent with paper trading & DeFi, 26 specialist agents, 345+ tools, 20 providers. Finance stack: 31 tools across market data, wallet & swaps, stocks, and sentiment. Synthesis Engine: closed-loop intelligence compounding. Runtime tool forging, Forge Registry, autopoietic health, immune self-audit. Cost-aware model routing, fallback chains, Bayesian skill routing. 11 local models (Llama 3.3, Qwen 3, DeepSeek R1, Codestral 22B). Embedded llama.cpp, MCP server, SDK. MIT.",
5
5
  "type": "module",
6
6
  "repository": {