@kernel.chat/kbot 3.36.0 → 3.38.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,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":"AAAA,sDAAsD;AACtD,EAAE;AACF,2DAA2D;AAC3D,sEAAsE;AACtE,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;AAC7D,EAAE;AACF,gBAAgB;AAChB,2BAA2B;AAC3B,0CAA0C;AAC1C,+CAA+C;AAC/C,mDAAmD;AACnD,+BAA+B;AAC/B,0BAA0B;AAC1B,uBAAuB;AAEvB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,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,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAA;AAC/D,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;AAmD7D,+EAA+E;AAE/E,SAAS,aAAa;IACpB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACrE,CAAC;AAED,SAAS,QAAQ,CAAI,IAAY,EAAE,QAAW;IAC5C,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAM,CAAA;IAC3E,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAa;IAC3C,aAAa,EAAE,CAAA;IACf,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AACnF,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,GAAoB;IACpD,aAAa,EAAE,CAAA;IACf,MAAM,YAAY,GAAG,QAAQ,CAAoB,iBAAiB,EAAE,EAAE,CAAC,CAAA;IACvE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtB,8BAA8B;IAC9B,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI;QAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClF,QAAQ,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAA;AAC3C,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,kBAAkB;IAChC,MAAM,YAAY,GAAG,QAAQ,CAAoB,iBAAiB,EAAE,EAAE,CAAC,CAAA;IACvE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAExC,iBAAiB;IACjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAA;IACpD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,QAAQ,GAAyB,EAAE,CAAA;IAEzC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAE9C,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;QAC5C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBAChC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;aACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEtE,mBAAmB;QACnB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAA;QAC7C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,SAAS,CAAA;YACnD,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/D,CAAC;QACD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;aACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAA;QAE9B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACtG,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAE3F,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK;YACL,WAAW,EAAE,KAAK,CAAC,MAAM;YACzB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;YACjD,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACxC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK;YAC7C,YAAY,EAAE,WAAW;YACzB,gBAAgB,EAAE,eAAe;YACjC,qBAAqB,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;SACzF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAA;AACjE,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,mBAAmB,CAAC,QAA8B;IAChE,MAAM,YAAY,GAAkB,EAAE,CAAA;IAEtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,qCAAqC;QACrC,IAAI,OAAO,CAAC,YAAY,GAAG,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;YAC3D,YAAY,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,UAAU,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,yBAAyB,OAAO,CAAC,WAAW,iCAAiC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,8FAA8F;gBAC9S,MAAM,EAAE,WAAW,OAAO,CAAC,KAAK,eAAe;gBAC/C,KAAK,EAAE,4GAA4G;gBACnH,eAAe,EAAE,qBAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG;gBAC/I,MAAM,EAAE,UAAU;aACnB,CAAC,CAAA;QACJ,CAAC;QAED,uCAAuC;QACvC,IAAI,OAAO,CAAC,eAAe,GAAG,KAAK,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;YAChE,YAAY,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,UAAU,OAAO,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,gCAAgC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uDAAuD;gBACnO,MAAM,EAAE,4CAA4C;gBACpD,KAAK,EAAE,2BAA2B,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACxG,eAAe,EAAE,iBAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG;gBACtI,MAAM,EAAE,UAAU;aACnB,CAAC,CAAA;QACJ,CAAC;QAED,4DAA4D;QAC5D,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;YACxD,YAAY,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,UAAU,OAAO,CAAC,KAAK,YAAY,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,2FAA2F;gBACtK,MAAM,EAAE,2BAA2B;gBACnC,KAAK,EAAE,mEAAmE;gBAC1E,eAAe,EAAE,cAAc,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;gBAC/G,MAAM,EAAE,UAAU;aACnB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB,CAAC,WAAwB;IACvD,aAAa,EAAE,CAAA;IAEf,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAA;IAC1E,MAAM,MAAM,GAAG,QAAQ,CAAgB,SAAS,EAAE,EAAE,CAAC,CAAA;IACrD,WAAW,CAAC,MAAM,GAAG,SAAS,CAAA;IAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAE3B,iBAAiB;IACjB,MAAM,OAAO,GAAG,QAAQ,CAAgB,YAAY,EAAE,EAAE,CAAC,CAAA;IACzD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACzB,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IACjE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAE/B,OAAO,IAAI,CAAA;AACb,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,MAAM,OAAO,GAAG,QAAQ,CAAgB,YAAY,EAAE,EAAE,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,CAAA;IACrD,IAAI,CAAC,GAAG;QAAE,OAAO,eAAe,aAAa,aAAa,CAAA;IAE1D,MAAM,YAAY,GAAG,QAAQ,CAAoB,iBAAiB,EAAE,EAAE,CAAC,CAAA;IACvE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;IAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;IAC7G,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;IAE7G,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,wBAAwB,KAAK,CAAC,MAAM,4CAA4C,CAAA;IAE7G,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/F,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAE3F,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5G,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAExG,GAAG,CAAC,eAAe,GAAG,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAA;IAChL,GAAG,CAAC,MAAM,GAAG,UAAU,CAAA;IACvB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAE/B,OAAO,GAAG,CAAC,eAAe,CAAA;AAC5B,CAAC;AAED,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,aAAa,EAAE,CAAA;IAEf,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAoB,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;IACxF,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;IAE/C,OAAO,CAAC,GAAG,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAE3B,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAA;IAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;QACjE,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,qBAAqB,EAAE,CAAC;YACxB,QAAQ,EAAE,EAAE;YACZ,qBAAqB,EAAE,EAAE;YACzB,oBAAoB,EAAE,EAAE;YACxB,YAAY,EAAE,UAAU;SACzB,CAAA;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QAC9E,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,WAAW,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;IACnJ,CAAC;IAED,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;IACvE,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QACrF,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,eAAe,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,mDAAmD;IACnD,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YAChE,wBAAwB;YACxB,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACrB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9D,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,OAAO,CAAC,GAAG,CAAC,iCAAiC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAgB,YAAY,EAAE,EAAE,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;IAC9D,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAoB,iBAAiB,EAAE,EAAE,CAAC,CAAA;IAEvE,MAAM,MAAM,GAAe;QACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,qBAAqB,EAAE,YAAY,CAAC,MAAM;QAC1C,QAAQ;QACR,qBAAqB,EAAE,QAAQ;QAC/B,oBAAoB,EAAE,OAAO;QAC7B,YAAY,EAAE,UAAU;KACzB,CAAA;IAED,cAAc;IACd,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,UAAU,OAAO,CAAC,CAAA;IAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAE5B,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,YAAY,CAAC,CAAA;IAC5D,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,MAAM,wBAAwB,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,wBAAwB,CAAC,CAAA;IAC1D,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,4BAA4B,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,IAAI,CAAC,CAAA;IAEzC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,qBAAqB;IACnC,OAAO,QAAQ,CAAgB,YAAY,EAAE,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAA;IAC5D,OAAO,QAAQ,CAAgB,SAAS,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAoB,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAChF,MAAM,YAAY,GAAG,QAAQ,CAAoB,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IAC9E,MAAM,YAAY,GAAG,QAAQ,CAAgB,YAAY,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IACrE,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC,MAAM,CAAA;IAC7C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAA;AACvD,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { type BridgeStatus } from '../ide/bridge.js';
2
+ export interface PluginContext {
3
+ /** Working directory for kbot to operate in */
4
+ cwd?: string;
5
+ /** Default agent to use */
6
+ agent?: string;
7
+ /** API tier override */
8
+ tier?: string;
9
+ /** Skip starting the MCP server (e.g., if already running) */
10
+ skipMcp?: boolean;
11
+ }
12
+ export interface SkillDefinition {
13
+ /** Skill name (matches manifest) */
14
+ name: string;
15
+ /** Human-readable description */
16
+ description: string;
17
+ /** Path to the skill markdown file */
18
+ file: string;
19
+ /** The kbot CLI command this skill maps to */
20
+ command: string;
21
+ }
22
+ export interface PluginManifest {
23
+ name: string;
24
+ version: string;
25
+ description: string;
26
+ homepage: string;
27
+ repository: string;
28
+ license: string;
29
+ mcpServers: Record<string, {
30
+ command: string;
31
+ args: string[];
32
+ env: Record<string, string>;
33
+ }>;
34
+ channels: Record<string, {
35
+ command: string;
36
+ args: string[];
37
+ }>;
38
+ skills: Array<{
39
+ name: string;
40
+ description: string;
41
+ file: string;
42
+ }>;
43
+ }
44
+ /**
45
+ * Load and return the plugin manifest.
46
+ */
47
+ export declare function getManifest(): PluginManifest;
48
+ /**
49
+ * Skill definitions mapping Claude Code slash commands to kbot CLI commands.
50
+ */
51
+ export declare const skills: SkillDefinition[];
52
+ /**
53
+ * Load the markdown content of a skill file.
54
+ */
55
+ export declare function loadSkillContent(skillName: string): string | null;
56
+ /**
57
+ * Activate the kbot plugin.
58
+ *
59
+ * Initializes the IDE bridge (registers tools, gathers project context)
60
+ * and optionally starts the MCP server for tool communication.
61
+ */
62
+ export declare function activate(context?: PluginContext): Promise<BridgeStatus>;
63
+ /**
64
+ * Deactivate the kbot plugin. Cleans up resources.
65
+ */
66
+ export declare function deactivate(): void;
67
+ /**
68
+ * Check if the plugin is currently activated.
69
+ */
70
+ export declare function isActivated(): boolean;
71
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAA4C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAI9F,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAA;IAC5F,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC7D,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACnE;AAUD;;GAEG;AACH,wBAAgB,WAAW,IAAI,cAAc,CAW5C;AAID;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,eAAe,EA+BnC,CAAA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBjE;AAID;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA0BjF;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC"}
@@ -0,0 +1,133 @@
1
+ // kbot Claude Code Plugin — Entry point
2
+ //
3
+ // Bridges kbot's full cognitive engine into Claude Code as a plugin.
4
+ // Starts the MCP server, registers tools, sets up the Channel for
5
+ // two-way communication, and exports skills that map to kbot commands.
6
+ //
7
+ // Usage:
8
+ // As a Claude Code plugin, this module is loaded automatically when
9
+ // the plugin manifest is registered. It can also be imported directly:
10
+ //
11
+ // import { activate, deactivate, skills } from './plugin/index.js'
12
+ // await activate({ cwd: process.cwd() })
13
+ import { readFileSync, existsSync } from 'node:fs';
14
+ import { join, dirname } from 'node:path';
15
+ import { fileURLToPath } from 'node:url';
16
+ import { startMcpServer } from '../ide/mcp-server.js';
17
+ import { initBridge, getStatus } from '../ide/bridge.js';
18
+ // ── State ───────────────────────────────────────────────────────────────────
19
+ let activated = false;
20
+ // ── Manifest ────────────────────────────────────────────────────────────────
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ /**
23
+ * Load and return the plugin manifest.
24
+ */
25
+ export function getManifest() {
26
+ const manifestPath = join(__dirname, 'manifest.json');
27
+ if (!existsSync(manifestPath)) {
28
+ // Fallback for compiled output where manifest.json may be at a different relative path
29
+ const altPath = join(__dirname, '..', 'plugin', 'manifest.json');
30
+ if (existsSync(altPath)) {
31
+ return JSON.parse(readFileSync(altPath, 'utf-8'));
32
+ }
33
+ throw new Error(`kbot plugin manifest not found at ${manifestPath}`);
34
+ }
35
+ return JSON.parse(readFileSync(manifestPath, 'utf-8'));
36
+ }
37
+ // ── Skills ──────────────────────────────────────────────────────────────────
38
+ /**
39
+ * Skill definitions mapping Claude Code slash commands to kbot CLI commands.
40
+ */
41
+ export const skills = [
42
+ {
43
+ name: 'dream',
44
+ description: 'Run kbot dream mode — memory consolidation, meta-agent cycle, forge speculation, and self-benchmarking',
45
+ file: 'skills/dream.md',
46
+ command: 'kbot dream',
47
+ },
48
+ {
49
+ name: 'dashboard',
50
+ description: "Show kbot's live learning dashboard — tool usage, agent routing, growth metrics",
51
+ file: 'skills/dashboard.md',
52
+ command: 'kbot dashboard',
53
+ },
54
+ {
55
+ name: 'pair',
56
+ description: 'Start pair programming mode — file watcher with real-time AI suggestions and auto-fix',
57
+ file: 'skills/pair.md',
58
+ command: 'kbot pair',
59
+ },
60
+ {
61
+ name: 'guardian',
62
+ description: 'Run codebase guardian — detect duplicates, co-change patterns, and complexity hotspots',
63
+ file: 'skills/guardian.md',
64
+ command: 'kbot guardian',
65
+ },
66
+ {
67
+ name: 'meta',
68
+ description: 'Run meta-agent cycle — analyze task agent performance, propose and apply improvements',
69
+ file: 'skills/meta.md',
70
+ command: 'kbot meta',
71
+ },
72
+ ];
73
+ /**
74
+ * Load the markdown content of a skill file.
75
+ */
76
+ export function loadSkillContent(skillName) {
77
+ const skill = skills.find(s => s.name === skillName);
78
+ if (!skill)
79
+ return null;
80
+ const skillPath = join(__dirname, skill.file);
81
+ if (existsSync(skillPath)) {
82
+ return readFileSync(skillPath, 'utf-8');
83
+ }
84
+ // Fallback for compiled output
85
+ const altPath = join(__dirname, '..', 'plugin', skill.file);
86
+ if (existsSync(altPath)) {
87
+ return readFileSync(altPath, 'utf-8');
88
+ }
89
+ return null;
90
+ }
91
+ // ── Lifecycle ───────────────────────────────────────────────────────────────
92
+ /**
93
+ * Activate the kbot plugin.
94
+ *
95
+ * Initializes the IDE bridge (registers tools, gathers project context)
96
+ * and optionally starts the MCP server for tool communication.
97
+ */
98
+ export async function activate(context = {}) {
99
+ if (activated) {
100
+ return getStatus();
101
+ }
102
+ const bridgeConfig = {
103
+ cwd: context.cwd,
104
+ agent: context.agent,
105
+ tier: context.tier,
106
+ };
107
+ // Initialize the bridge — registers all tools and gathers project context
108
+ await initBridge(bridgeConfig);
109
+ // Start MCP server unless explicitly skipped
110
+ if (!context.skipMcp) {
111
+ // Start in background — the MCP server runs on stdio and blocks,
112
+ // so we only start it if this is the main plugin entry point
113
+ startMcpServer(bridgeConfig).catch((err) => {
114
+ const message = err instanceof Error ? err.message : String(err);
115
+ console.error(`[kbot plugin] MCP server error: ${message}`);
116
+ });
117
+ }
118
+ activated = true;
119
+ return getStatus();
120
+ }
121
+ /**
122
+ * Deactivate the kbot plugin. Cleans up resources.
123
+ */
124
+ export function deactivate() {
125
+ activated = false;
126
+ }
127
+ /**
128
+ * Check if the plugin is currently activated.
129
+ */
130
+ export function isActivated() {
131
+ return activated;
132
+ }
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export interface VoiceLoopOptions {
2
+ /** macOS TTS voice name (default: 'Samantha') */
3
+ voice?: string;
4
+ /** Whisper model size: 'tiny' | 'base' | 'small' | 'medium' | 'large' (default: 'base') */
5
+ model?: WhisperModel;
6
+ /** kbot agent to route to: 'auto' uses agent routing, or specify a specialist (default: 'auto') */
7
+ agent?: string;
8
+ /** Language code for Whisper transcription (default: 'en') */
9
+ language?: string;
10
+ /** TTS speech rate in words per minute (default: 190) */
11
+ rate?: number;
12
+ /** Maximum recording duration in seconds (default: 15) */
13
+ maxRecordSeconds?: number;
14
+ /** Silence threshold for recording stop — sox silence detection (default: '1.5') */
15
+ silenceThreshold?: string;
16
+ /** Ollama host URL (default: from OLLAMA_HOST env or 'http://localhost:11434') */
17
+ ollamaHost?: string;
18
+ /** Ollama model for chat (default: 'gemma3:12b') */
19
+ ollamaModel?: string;
20
+ /** OpenAI API key for Whisper fallback (reads from config if not provided) */
21
+ openaiApiKey?: string;
22
+ }
23
+ export type WhisperModel = 'tiny' | 'base' | 'small' | 'medium' | 'large';
24
+ export interface VoiceLoopState {
25
+ running: boolean;
26
+ voice: string;
27
+ model: WhisperModel;
28
+ agent: string;
29
+ language: string;
30
+ rate: number;
31
+ maxRecordSeconds: number;
32
+ silenceThreshold: string;
33
+ ollamaHost: string;
34
+ ollamaModel: string;
35
+ whisperBackend: 'local' | 'api' | 'none';
36
+ recorder: 'rec' | 'arecord' | 'none';
37
+ ttsAvailable: boolean;
38
+ turnCount: number;
39
+ conversationHistory: Array<{
40
+ role: 'user' | 'assistant';
41
+ content: string;
42
+ }>;
43
+ }
44
+ /**
45
+ * Run the kbot voice conversation loop.
46
+ *
47
+ * 1. Print status banner
48
+ * 2. Record audio until silence detected (or accept text input)
49
+ * 3. Transcribe with Whisper (local or API)
50
+ * 4. Route to Ollama for agent inference
51
+ * 5. Speak the response with macOS `say`
52
+ * 6. Loop back to step 2
53
+ */
54
+ export declare function runVoiceLoop(options?: VoiceLoopOptions): Promise<void>;
55
+ /** Get the current voice loop state description (for diagnostics) */
56
+ export declare function describeVoiceCapabilities(): string;
57
+ /** List available macOS voices */
58
+ export declare function listMacVoices(): string[];
59
+ //# sourceMappingURL=voice-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-loop.d.ts","sourceRoot":"","sources":["../src/voice-loop.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2FAA2F;IAC3F,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEzE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;IACxC,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAA;IACpC,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5E;AA2aD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4I5E;AAMD,qEAAqE;AACrE,wBAAgB,yBAAyB,IAAI,MAAM,CASlD;AAED,kCAAkC;AAClC,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAexC"}