@kernel.chat/kbot 3.37.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.
Files changed (38) hide show
  1. package/README.md +111 -7
  2. package/dist/agent-teams.d.ts +55 -0
  3. package/dist/agent-teams.d.ts.map +1 -0
  4. package/dist/agent-teams.js +135 -0
  5. package/dist/agent-teams.js.map +1 -0
  6. package/dist/autonomous-contributor.d.ts +88 -0
  7. package/dist/autonomous-contributor.d.ts.map +1 -0
  8. package/dist/autonomous-contributor.js +862 -0
  9. package/dist/autonomous-contributor.js.map +1 -0
  10. package/dist/collective-network.d.ts +102 -0
  11. package/dist/collective-network.d.ts.map +1 -0
  12. package/dist/collective-network.js +634 -0
  13. package/dist/collective-network.js.map +1 -0
  14. package/dist/community-autopilot.d.ts +98 -0
  15. package/dist/community-autopilot.d.ts.map +1 -0
  16. package/dist/community-autopilot.js +676 -0
  17. package/dist/community-autopilot.js.map +1 -0
  18. package/dist/cross-device-sync.d.ts +36 -0
  19. package/dist/cross-device-sync.d.ts.map +1 -0
  20. package/dist/cross-device-sync.js +532 -0
  21. package/dist/cross-device-sync.js.map +1 -0
  22. package/dist/forge-marketplace-server.d.ts +23 -0
  23. package/dist/forge-marketplace-server.d.ts.map +1 -0
  24. package/dist/forge-marketplace-server.js +457 -0
  25. package/dist/forge-marketplace-server.js.map +1 -0
  26. package/dist/hooks-integration.d.ts +89 -0
  27. package/dist/hooks-integration.d.ts.map +1 -0
  28. package/dist/hooks-integration.js +457 -0
  29. package/dist/hooks-integration.js.map +1 -0
  30. package/dist/plugin/index.d.ts +71 -0
  31. package/dist/plugin/index.d.ts.map +1 -0
  32. package/dist/plugin/index.js +133 -0
  33. package/dist/plugin/index.js.map +1 -0
  34. package/dist/voice-loop.d.ts +59 -0
  35. package/dist/voice-loop.d.ts.map +1 -0
  36. package/dist/voice-loop.js +525 -0
  37. package/dist/voice-loop.js.map +1 -0
  38. package/package.json +1 -1
@@ -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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"}
@@ -0,0 +1,89 @@
1
+ /** Claude Code hook event types */
2
+ export type HookEventType = 'FileChanged' | 'TaskCompleted' | 'SessionStart' | 'SessionEnd' | 'StopFailure';
3
+ /** Data payload for each hook event */
4
+ export interface FileChangedData {
5
+ file: string;
6
+ changeType?: 'create' | 'edit' | 'delete' | 'rename';
7
+ diff?: string;
8
+ }
9
+ export interface TaskCompletedData {
10
+ task: string;
11
+ agent: string;
12
+ success: boolean;
13
+ duration_ms: number;
14
+ tokens_in?: number;
15
+ tokens_out?: number;
16
+ cost?: number;
17
+ tools_used?: string[];
18
+ error?: string;
19
+ }
20
+ export interface SessionStartData {
21
+ cwd: string;
22
+ agent?: string;
23
+ resumeFrom?: string;
24
+ }
25
+ export interface SessionEndData {
26
+ cwd: string;
27
+ agent?: string;
28
+ turnCount?: number;
29
+ duration_ms?: number;
30
+ }
31
+ export interface StopFailureData {
32
+ reason: string;
33
+ command?: string;
34
+ exitCode?: number;
35
+ stderr?: string;
36
+ }
37
+ export type HookEventData = FileChangedData | TaskCompletedData | SessionStartData | SessionEndData | StopFailureData;
38
+ /** Result from handling a hook event */
39
+ export interface HookHandlerResult {
40
+ event: HookEventType;
41
+ handled: boolean;
42
+ subsystem: string;
43
+ output?: string;
44
+ error?: string;
45
+ duration_ms: number;
46
+ }
47
+ /** Claude Code settings.json hook configuration shape */
48
+ export interface ClaudeHookConfig {
49
+ event: string;
50
+ command: string;
51
+ timeout?: number;
52
+ matcher?: string;
53
+ }
54
+ export interface ClaudeHooksSection {
55
+ hooks: ClaudeHookConfig[];
56
+ }
57
+ /**
58
+ * Generate the hooks configuration JSON for Claude Code's settings.json.
59
+ *
60
+ * This produces the `hooks` array that should be merged into
61
+ * `.claude/settings.json` or `~/.claude/settings.json`.
62
+ *
63
+ * Each hook calls `kbot hook-dispatch <event>` with context passed via
64
+ * environment variables.
65
+ *
66
+ * @param options.kbotPath - Path to kbot binary (default: 'kbot')
67
+ * @param options.timeout - Default timeout in ms (default: 30000)
68
+ * @returns The hooks section for settings.json
69
+ */
70
+ export declare function generateHooksConfig(options?: {
71
+ kbotPath?: string;
72
+ timeout?: number;
73
+ }): ClaudeHooksSection;
74
+ /**
75
+ * Dispatch a Claude Code hook event to the appropriate kbot subsystem.
76
+ *
77
+ * @param event - The hook event type
78
+ * @param data - Event-specific payload
79
+ * @returns Result of handling the event
80
+ */
81
+ export declare function handleHookEvent(event: HookEventType, data: HookEventData): Promise<HookHandlerResult>;
82
+ /**
83
+ * Read existing Claude Code settings.json and merge kbot hooks into it.
84
+ * Returns the merged JSON object. Does not write to disk.
85
+ *
86
+ * @param settingsPath - Path to settings.json (default: .claude/settings.json)
87
+ */
88
+ export declare function mergeHooksIntoSettings(settingsPath?: string, kbotPath?: string): Record<string, unknown>;
89
+ //# sourceMappingURL=hooks-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-integration.d.ts","sourceRoot":"","sources":["../src/hooks-integration.ts"],"names":[],"mappings":"AAyBA,mCAAmC;AACnC,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,eAAe,GACf,cAAc,GACd,YAAY,GACZ,aAAa,CAAA;AAEjB,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,cAAc,GACd,eAAe,CAAA;AAEnB,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAA;CAC1B;AAwCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,kBAAkB,CAkCrB;AAMD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA0C5B;AAqVD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB"}