@kernel.chat/kbot 2.12.0 → 2.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -6
- package/dist/changelog.d.ts +21 -0
- package/dist/changelog.d.ts.map +1 -0
- package/dist/changelog.js +204 -0
- package/dist/changelog.js.map +1 -0
- package/dist/cli.js +43 -114
- package/dist/cli.js.map +1 -1
- package/dist/completions.d.ts +2 -0
- package/dist/completions.d.ts.map +1 -0
- package/dist/completions.js +526 -0
- package/dist/completions.js.map +1 -0
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +381 -0
- package/dist/doctor.js.map +1 -0
- package/dist/ide/acp-server.js +1 -1
- package/dist/tutorial.d.ts +3 -0
- package/dist/tutorial.d.ts.map +1 -0
- package/dist/tutorial.js +195 -0
- package/dist/tutorial.js.map +1 -0
- package/package.json +19 -13
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
// K:BOT Doctor — Comprehensive diagnostic tool
|
|
2
|
+
// Checks the user's kbot setup: Node.js, npm, API keys, providers,
|
|
3
|
+
// local runtimes, git, disk usage, learning data, shell.
|
|
4
|
+
//
|
|
5
|
+
// Never displays API keys or secrets.
|
|
6
|
+
// All checks are non-blocking — errors are caught and reported.
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
10
|
+
import { execSync } from 'node:child_process';
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { loadConfig, isByokEnabled, getByokProvider, isLocalProvider, PROVIDERS, isOllamaRunning, KBOT_DIR, } from './auth.js';
|
|
13
|
+
import { getExtendedStats } from './learning.js';
|
|
14
|
+
// ── Version constant (kept in sync with cli.ts) ──
|
|
15
|
+
const INSTALLED_VERSION = '2.12.0';
|
|
16
|
+
// ── Helpers ──
|
|
17
|
+
/** Run a shell command and return stdout, or null on failure */
|
|
18
|
+
function execQuiet(cmd, timeoutMs = 5000) {
|
|
19
|
+
try {
|
|
20
|
+
return execSync(cmd, { encoding: 'utf-8', timeout: timeoutMs, stdio: 'pipe' }).trim();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Calculate total size of a directory in bytes (non-recursive if too deep) */
|
|
27
|
+
function dirSize(dirPath) {
|
|
28
|
+
let total = 0;
|
|
29
|
+
try {
|
|
30
|
+
const entries = readdirSync(dirPath, { withFileTypes: true });
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
const full = join(dirPath, entry.name);
|
|
33
|
+
try {
|
|
34
|
+
if (entry.isFile()) {
|
|
35
|
+
total += statSync(full).size;
|
|
36
|
+
}
|
|
37
|
+
else if (entry.isDirectory()) {
|
|
38
|
+
total += dirSize(full);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Skip inaccessible entries
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Directory doesn't exist or can't be read
|
|
48
|
+
}
|
|
49
|
+
return total;
|
|
50
|
+
}
|
|
51
|
+
/** Format bytes into a human-readable string */
|
|
52
|
+
function formatBytes(bytes) {
|
|
53
|
+
if (bytes < 1024)
|
|
54
|
+
return `${bytes} B`;
|
|
55
|
+
if (bytes < 1024 * 1024)
|
|
56
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
57
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
58
|
+
}
|
|
59
|
+
/** Parse a semver-like string into comparable parts */
|
|
60
|
+
function parseSemver(v) {
|
|
61
|
+
const clean = v.replace(/^v/, '');
|
|
62
|
+
const parts = clean.split('.').map(Number);
|
|
63
|
+
return [parts[0] || 0, parts[1] || 0, parts[2] || 0];
|
|
64
|
+
}
|
|
65
|
+
/** Compare two semver strings: -1 = a < b, 0 = equal, 1 = a > b */
|
|
66
|
+
function compareSemver(a, b) {
|
|
67
|
+
const [a0, a1, a2] = parseSemver(a);
|
|
68
|
+
const [b0, b1, b2] = parseSemver(b);
|
|
69
|
+
if (a0 !== b0)
|
|
70
|
+
return a0 < b0 ? -1 : 1;
|
|
71
|
+
if (a1 !== b1)
|
|
72
|
+
return a1 < b1 ? -1 : 1;
|
|
73
|
+
if (a2 !== b2)
|
|
74
|
+
return a2 < b2 ? -1 : 1;
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
// ── Individual checks ──
|
|
78
|
+
function checkNodeVersion() {
|
|
79
|
+
const version = process.version; // e.g. "v20.11.0"
|
|
80
|
+
const [major] = parseSemver(version);
|
|
81
|
+
if (major >= 20) {
|
|
82
|
+
return { name: 'Node.js', status: 'pass', message: `${version}` };
|
|
83
|
+
}
|
|
84
|
+
return { name: 'Node.js', status: 'fail', message: `${version} — requires >= 20. Upgrade at nodejs.org` };
|
|
85
|
+
}
|
|
86
|
+
function checkNpmVersion() {
|
|
87
|
+
const version = execQuiet('npm --version');
|
|
88
|
+
if (version) {
|
|
89
|
+
return { name: 'npm', status: 'pass', message: `v${version}` };
|
|
90
|
+
}
|
|
91
|
+
return { name: 'npm', status: 'warn', message: 'not found' };
|
|
92
|
+
}
|
|
93
|
+
function checkKbotVersion() {
|
|
94
|
+
const installed = INSTALLED_VERSION;
|
|
95
|
+
const latest = execQuiet('npm view @kernel.chat/kbot version', 8000);
|
|
96
|
+
if (!latest) {
|
|
97
|
+
return { name: 'kbot version', status: 'pass', message: `v${installed} (could not check latest)` };
|
|
98
|
+
}
|
|
99
|
+
const cmp = compareSemver(installed, latest);
|
|
100
|
+
if (cmp >= 0) {
|
|
101
|
+
return { name: 'kbot version', status: 'pass', message: `v${installed} (latest)` };
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
name: 'kbot version',
|
|
105
|
+
status: 'warn',
|
|
106
|
+
message: `v${installed} — update available: v${latest} (run: kbot update)`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function checkApiKey() {
|
|
110
|
+
const config = loadConfig();
|
|
111
|
+
if (!config) {
|
|
112
|
+
return { name: 'API key', status: 'fail', message: 'no config found — run: kbot auth' };
|
|
113
|
+
}
|
|
114
|
+
if (!config.byok_enabled) {
|
|
115
|
+
// Check if any env var provides a key
|
|
116
|
+
if (isByokEnabled()) {
|
|
117
|
+
const provider = getByokProvider();
|
|
118
|
+
const providerName = PROVIDERS[provider]?.name || provider;
|
|
119
|
+
return { name: 'API key', status: 'pass', message: `configured via environment variable (${providerName})` };
|
|
120
|
+
}
|
|
121
|
+
return { name: 'API key', status: 'fail', message: 'not configured — run: kbot auth' };
|
|
122
|
+
}
|
|
123
|
+
const provider = config.byok_provider || 'anthropic';
|
|
124
|
+
const providerName = PROVIDERS[provider]?.name || provider;
|
|
125
|
+
const hasKey = !!config.byok_key;
|
|
126
|
+
if (isLocalProvider(provider)) {
|
|
127
|
+
return { name: 'API key', status: 'pass', message: `${providerName} (local — no key required)` };
|
|
128
|
+
}
|
|
129
|
+
if (hasKey) {
|
|
130
|
+
return { name: 'API key', status: 'pass', message: `configured (${providerName})` };
|
|
131
|
+
}
|
|
132
|
+
return { name: 'API key', status: 'fail', message: `provider set to ${providerName} but no key found — run: kbot auth` };
|
|
133
|
+
}
|
|
134
|
+
async function checkProviderReachable() {
|
|
135
|
+
const config = loadConfig();
|
|
136
|
+
const byokActive = isByokEnabled();
|
|
137
|
+
if (!byokActive && !config?.byok_enabled) {
|
|
138
|
+
return { name: 'Provider reachable', status: 'warn', message: 'no provider configured — skipped' };
|
|
139
|
+
}
|
|
140
|
+
const provider = config?.byok_provider || getByokProvider();
|
|
141
|
+
const providerConfig = PROVIDERS[provider];
|
|
142
|
+
if (!providerConfig) {
|
|
143
|
+
return { name: 'Provider reachable', status: 'fail', message: `unknown provider: ${provider}` };
|
|
144
|
+
}
|
|
145
|
+
// For local providers, check their health endpoints
|
|
146
|
+
if (isLocalProvider(provider)) {
|
|
147
|
+
try {
|
|
148
|
+
const url = provider === 'openclaw'
|
|
149
|
+
? providerConfig.apiUrl.replace('/v1/chat/completions', '/health')
|
|
150
|
+
: providerConfig.apiUrl.replace('/v1/chat/completions', '/v1/models');
|
|
151
|
+
// Ollama uses a different base path
|
|
152
|
+
const checkUrl = provider === 'ollama'
|
|
153
|
+
? providerConfig.apiUrl.replace('/v1/chat/completions', '/api/tags')
|
|
154
|
+
: url;
|
|
155
|
+
const res = await fetch(checkUrl, { signal: AbortSignal.timeout(3000) });
|
|
156
|
+
if (res.ok) {
|
|
157
|
+
return { name: 'Provider reachable', status: 'pass', message: `${providerConfig.name} is responding` };
|
|
158
|
+
}
|
|
159
|
+
return { name: 'Provider reachable', status: 'fail', message: `${providerConfig.name} returned ${res.status}` };
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return { name: 'Provider reachable', status: 'fail', message: `${providerConfig.name} not responding` };
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// For cloud providers, do a lightweight HEAD/GET to the API base
|
|
166
|
+
try {
|
|
167
|
+
// Strip the specific endpoint to get the base domain
|
|
168
|
+
const url = new URL(providerConfig.apiUrl);
|
|
169
|
+
const baseUrl = `${url.protocol}//${url.host}`;
|
|
170
|
+
const res = await fetch(baseUrl, {
|
|
171
|
+
method: 'HEAD',
|
|
172
|
+
signal: AbortSignal.timeout(5000),
|
|
173
|
+
});
|
|
174
|
+
// Any response (even 401/404) means the host is reachable
|
|
175
|
+
return { name: 'Provider reachable', status: 'pass', message: `${providerConfig.name} host is reachable` };
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return { name: 'Provider reachable', status: 'warn', message: `${providerConfig.name} host unreachable — check your network` };
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function checkLocalRuntimes() {
|
|
182
|
+
const runtimes = [];
|
|
183
|
+
// Ollama (default port 11434)
|
|
184
|
+
const ollamaUp = await isOllamaRunning();
|
|
185
|
+
if (ollamaUp)
|
|
186
|
+
runtimes.push('Ollama');
|
|
187
|
+
// LM Studio (default port 1234)
|
|
188
|
+
try {
|
|
189
|
+
const lmHost = process.env.LMSTUDIO_HOST || 'http://localhost:1234';
|
|
190
|
+
const res = await fetch(`${lmHost}/v1/models`, { signal: AbortSignal.timeout(2000) });
|
|
191
|
+
if (res.ok)
|
|
192
|
+
runtimes.push('LM Studio');
|
|
193
|
+
}
|
|
194
|
+
catch { /* not running */ }
|
|
195
|
+
// Jan (default port 1337)
|
|
196
|
+
try {
|
|
197
|
+
const janHost = process.env.JAN_HOST || 'http://localhost:1337';
|
|
198
|
+
const res = await fetch(`${janHost}/v1/models`, { signal: AbortSignal.timeout(2000) });
|
|
199
|
+
if (res.ok)
|
|
200
|
+
runtimes.push('Jan');
|
|
201
|
+
}
|
|
202
|
+
catch { /* not running */ }
|
|
203
|
+
// OpenClaw (default port 18789)
|
|
204
|
+
try {
|
|
205
|
+
const openclawHost = process.env.OPENCLAW_HOST || 'http://127.0.0.1:18789';
|
|
206
|
+
const res = await fetch(`${openclawHost}/health`, { signal: AbortSignal.timeout(2000) });
|
|
207
|
+
if (res.ok)
|
|
208
|
+
runtimes.push('OpenClaw');
|
|
209
|
+
}
|
|
210
|
+
catch { /* not running */ }
|
|
211
|
+
if (runtimes.length > 0) {
|
|
212
|
+
return { name: 'Local runtimes', status: 'pass', message: runtimes.join(', ') };
|
|
213
|
+
}
|
|
214
|
+
return { name: 'Local runtimes', status: 'warn', message: 'none detected (Ollama, LM Studio, Jan, OpenClaw)' };
|
|
215
|
+
}
|
|
216
|
+
function checkGit() {
|
|
217
|
+
const version = execQuiet('git --version');
|
|
218
|
+
if (version) {
|
|
219
|
+
return { name: 'Git', status: 'pass', message: version };
|
|
220
|
+
}
|
|
221
|
+
return { name: 'Git', status: 'fail', message: 'not found — install git for version control tools' };
|
|
222
|
+
}
|
|
223
|
+
function checkDiskUsage() {
|
|
224
|
+
if (!existsSync(KBOT_DIR)) {
|
|
225
|
+
return { name: 'Disk usage', status: 'pass', message: '~/.kbot/ does not exist yet' };
|
|
226
|
+
}
|
|
227
|
+
const size = dirSize(KBOT_DIR);
|
|
228
|
+
const formatted = formatBytes(size);
|
|
229
|
+
if (size > 100 * 1024 * 1024) {
|
|
230
|
+
return { name: 'Disk usage', status: 'warn', message: `~/.kbot/ is ${formatted} — consider running: kbot compact` };
|
|
231
|
+
}
|
|
232
|
+
return { name: 'Disk usage', status: 'pass', message: `~/.kbot/ is ${formatted}` };
|
|
233
|
+
}
|
|
234
|
+
function checkLearningData() {
|
|
235
|
+
try {
|
|
236
|
+
const stats = getExtendedStats();
|
|
237
|
+
const parts = [];
|
|
238
|
+
if (stats.patternsCount > 0)
|
|
239
|
+
parts.push(`${stats.patternsCount} patterns`);
|
|
240
|
+
if (stats.solutionsCount > 0)
|
|
241
|
+
parts.push(`${stats.solutionsCount} solutions`);
|
|
242
|
+
if (stats.knowledgeCount > 0)
|
|
243
|
+
parts.push(`${stats.knowledgeCount} knowledge entries`);
|
|
244
|
+
if (stats.correctionsCount > 0)
|
|
245
|
+
parts.push(`${stats.correctionsCount} corrections`);
|
|
246
|
+
if (stats.projectsCount > 0)
|
|
247
|
+
parts.push(`${stats.projectsCount} projects`);
|
|
248
|
+
if (parts.length === 0) {
|
|
249
|
+
return { name: 'Learning data', status: 'warn', message: 'no data yet — kbot learns as you use it' };
|
|
250
|
+
}
|
|
251
|
+
return { name: 'Learning data', status: 'pass', message: parts.join(', ') };
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return { name: 'Learning data', status: 'warn', message: 'could not read learning data' };
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function checkShell() {
|
|
258
|
+
const shell = process.env.SHELL || '';
|
|
259
|
+
const shellName = shell.split('/').pop() || 'unknown';
|
|
260
|
+
if (!shell) {
|
|
261
|
+
return { name: 'Shell', status: 'warn', message: 'SHELL env var not set' };
|
|
262
|
+
}
|
|
263
|
+
// Check if kbot completions are installed
|
|
264
|
+
let completionsInstalled = false;
|
|
265
|
+
const home = homedir();
|
|
266
|
+
try {
|
|
267
|
+
if (shellName === 'zsh') {
|
|
268
|
+
// Check common zsh completion paths
|
|
269
|
+
const zshCompPaths = [
|
|
270
|
+
join(home, '.zsh/completions/_kbot'),
|
|
271
|
+
join(home, '.zfunc/_kbot'),
|
|
272
|
+
'/usr/local/share/zsh/site-functions/_kbot',
|
|
273
|
+
'/opt/homebrew/share/zsh/site-functions/_kbot',
|
|
274
|
+
];
|
|
275
|
+
completionsInstalled = zshCompPaths.some(p => existsSync(p));
|
|
276
|
+
}
|
|
277
|
+
else if (shellName === 'bash') {
|
|
278
|
+
const bashCompPaths = [
|
|
279
|
+
join(home, '.bash_completion.d/kbot'),
|
|
280
|
+
'/etc/bash_completion.d/kbot',
|
|
281
|
+
'/usr/local/etc/bash_completion.d/kbot',
|
|
282
|
+
];
|
|
283
|
+
completionsInstalled = bashCompPaths.some(p => existsSync(p));
|
|
284
|
+
}
|
|
285
|
+
else if (shellName === 'fish') {
|
|
286
|
+
const fishCompPaths = [
|
|
287
|
+
join(home, '.config/fish/completions/kbot.fish'),
|
|
288
|
+
'/usr/share/fish/vendor_completions.d/kbot.fish',
|
|
289
|
+
];
|
|
290
|
+
completionsInstalled = fishCompPaths.some(p => existsSync(p));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
// Ignore filesystem errors
|
|
295
|
+
}
|
|
296
|
+
const completionStatus = completionsInstalled ? ', completions installed' : '';
|
|
297
|
+
return { name: 'Shell', status: 'pass', message: `${shellName}${completionStatus}` };
|
|
298
|
+
}
|
|
299
|
+
// ── Main runner ──
|
|
300
|
+
export async function runDoctor() {
|
|
301
|
+
const checks = [];
|
|
302
|
+
// Synchronous checks
|
|
303
|
+
checks.push(checkNodeVersion());
|
|
304
|
+
checks.push(checkNpmVersion());
|
|
305
|
+
checks.push(checkKbotVersion());
|
|
306
|
+
checks.push(checkApiKey());
|
|
307
|
+
// Async checks — run in parallel for speed
|
|
308
|
+
const [providerResult, runtimesResult] = await Promise.all([
|
|
309
|
+
checkProviderReachable().catch(() => ({
|
|
310
|
+
name: 'Provider reachable', status: 'warn', message: 'check failed unexpectedly',
|
|
311
|
+
})),
|
|
312
|
+
checkLocalRuntimes().catch(() => ({
|
|
313
|
+
name: 'Local runtimes', status: 'warn', message: 'check failed unexpectedly',
|
|
314
|
+
})),
|
|
315
|
+
]);
|
|
316
|
+
checks.push(providerResult);
|
|
317
|
+
checks.push(runtimesResult);
|
|
318
|
+
// More synchronous checks
|
|
319
|
+
checks.push(checkGit());
|
|
320
|
+
checks.push(checkDiskUsage());
|
|
321
|
+
checks.push(checkLearningData());
|
|
322
|
+
checks.push(checkShell());
|
|
323
|
+
// Determine overall status
|
|
324
|
+
let overall = 'pass';
|
|
325
|
+
for (const check of checks) {
|
|
326
|
+
if (check.status === 'fail') {
|
|
327
|
+
overall = 'fail';
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
if (check.status === 'warn') {
|
|
331
|
+
overall = 'warn';
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
checks,
|
|
336
|
+
timestamp: new Date().toISOString(),
|
|
337
|
+
overall,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
// ── Formatter ──
|
|
341
|
+
// Color palette matching ui.ts
|
|
342
|
+
const useColor = !process.env.NO_COLOR && process.stdout.isTTY !== false;
|
|
343
|
+
const GREEN = useColor ? chalk.hex('#4ADE80') : chalk;
|
|
344
|
+
const RED = useColor ? chalk.hex('#F87171') : chalk;
|
|
345
|
+
const YELLOW = useColor ? chalk.hex('#FBBF24') : chalk;
|
|
346
|
+
const DIM = useColor ? chalk.dim : ((s) => s);
|
|
347
|
+
const ACCENT = useColor ? chalk.hex('#A78BFA') : chalk;
|
|
348
|
+
const STATUS_ICON = {
|
|
349
|
+
pass: GREEN('✓'),
|
|
350
|
+
warn: YELLOW('!'),
|
|
351
|
+
fail: RED('✗'),
|
|
352
|
+
};
|
|
353
|
+
export function formatDoctorReport(report) {
|
|
354
|
+
const lines = [];
|
|
355
|
+
lines.push('');
|
|
356
|
+
lines.push(` ${ACCENT('K:BOT Doctor')}`);
|
|
357
|
+
lines.push(` ${DIM('─'.repeat(50))}`);
|
|
358
|
+
lines.push('');
|
|
359
|
+
for (const check of report.checks) {
|
|
360
|
+
const icon = STATUS_ICON[check.status];
|
|
361
|
+
const nameCol = check.name.padEnd(20);
|
|
362
|
+
lines.push(` ${icon} ${nameCol}${check.message}`);
|
|
363
|
+
}
|
|
364
|
+
lines.push('');
|
|
365
|
+
lines.push(` ${DIM('─'.repeat(50))}`);
|
|
366
|
+
// Summary
|
|
367
|
+
if (report.overall === 'pass') {
|
|
368
|
+
lines.push(` ${GREEN('All checks passed.')} Ready to go!`);
|
|
369
|
+
}
|
|
370
|
+
else if (report.overall === 'warn') {
|
|
371
|
+
const warnCount = report.checks.filter(c => c.status === 'warn').length;
|
|
372
|
+
lines.push(` ${YELLOW(`${warnCount} warning${warnCount > 1 ? 's' : ''}.`)} kbot will work, but check the items above.`);
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
const failCount = report.checks.filter(c => c.status === 'fail').length;
|
|
376
|
+
lines.push(` ${RED(`${failCount} issue${failCount > 1 ? 's' : ''} found.`)} Fix the items marked ${RED('✗')} above.`);
|
|
377
|
+
}
|
|
378
|
+
lines.push('');
|
|
379
|
+
return lines.join('\n');
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/ide/acp-server.js
CHANGED
|
@@ -11,7 +11,7 @@ import { initBridge, chat, executeCommand, getStatus, getAgents, getContext, get
|
|
|
11
11
|
import { formatDiagnostics } from './lsp-bridge.js';
|
|
12
12
|
const AGENT_IDENTITY = {
|
|
13
13
|
name: 'K:BOT',
|
|
14
|
-
version: '2.
|
|
14
|
+
version: '2.13.1',
|
|
15
15
|
description: 'Open-source terminal AI agent — 39 specialists, 167 tools, 19 providers, local-first',
|
|
16
16
|
capabilities: ['chat', 'codeAction', 'diagnostics', 'tools'],
|
|
17
17
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial.d.ts","sourceRoot":"","sources":["../src/tutorial.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAqL/C,wBAAsB,WAAW,CAC/B,EAAE,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
package/dist/tutorial.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// K:BOT Interactive Tutorial — Step-by-step walkthrough for new users
|
|
2
|
+
//
|
|
3
|
+
// Triggered by /tutorial in the REPL. Walks through 6 steps covering
|
|
4
|
+
// the key features of kbot: asking questions, specialists, tools,
|
|
5
|
+
// saving work, local mode, and power features.
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { printInfo, printSuccess, status, divider } from './ui.js';
|
|
8
|
+
// ── Color palette (matches ui.ts) ──
|
|
9
|
+
const ACCENT = chalk.hex('#A78BFA'); // soft violet
|
|
10
|
+
const GREEN = chalk.hex('#4ADE80'); // success
|
|
11
|
+
const CYAN = chalk.hex('#67E8F9'); // code/paths
|
|
12
|
+
const DIM = chalk.dim; // secondary text
|
|
13
|
+
// ── Steps ──
|
|
14
|
+
const STEPS = [
|
|
15
|
+
{
|
|
16
|
+
title: 'Ask kbot anything',
|
|
17
|
+
body: [
|
|
18
|
+
'kbot works two ways:',
|
|
19
|
+
'',
|
|
20
|
+
` ${chalk.bold('One-shot')} — Run a single command from your terminal:`,
|
|
21
|
+
` ${CYAN('$ kbot "explain what this project does"')}`,
|
|
22
|
+
'',
|
|
23
|
+
` ${chalk.bold('Interactive')} — Start a conversation (what you\'re doing now):`,
|
|
24
|
+
` ${CYAN('$ kbot')}`,
|
|
25
|
+
` Then just type your question and press Enter.`,
|
|
26
|
+
'',
|
|
27
|
+
'kbot reads your project files, understands context, and gives',
|
|
28
|
+
'answers tailored to whatever you\'re working on.',
|
|
29
|
+
],
|
|
30
|
+
example: 'what files are in this directory?',
|
|
31
|
+
tip: 'You can pipe output too: kbot "list all functions" | grep async',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: 'Meet the specialists',
|
|
35
|
+
body: [
|
|
36
|
+
'kbot has 39 specialist agents. Each one is an expert in a',
|
|
37
|
+
'different area. You don\'t need to pick one — kbot routes your',
|
|
38
|
+
'message to the right specialist automatically.',
|
|
39
|
+
'',
|
|
40
|
+
` ${chalk.hex('#4ADE80')('coder')} Write, fix, and explain code`,
|
|
41
|
+
` ${chalk.hex('#60A5FA')('researcher')} Find information and explain topics`,
|
|
42
|
+
` ${chalk.hex('#FB923C')('writer')} Draft emails, docs, blog posts`,
|
|
43
|
+
` ${chalk.hex('#F472B6')('analyst')} Break down data and strategy`,
|
|
44
|
+
` ${chalk.hex('#8B4513')('guardian')} Review code for security issues`,
|
|
45
|
+
` ${ACCENT('kernel')} General questions, anything else`,
|
|
46
|
+
'',
|
|
47
|
+
'To force a specific agent, use the /agent command:',
|
|
48
|
+
` ${CYAN('/agent researcher')}`,
|
|
49
|
+
],
|
|
50
|
+
example: '/agent',
|
|
51
|
+
tip: 'kbot learns which agents you use most and routes faster over time.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
title: 'Use tools',
|
|
55
|
+
body: [
|
|
56
|
+
'kbot doesn\'t just talk — it can take action. It has 167 built-in',
|
|
57
|
+
'tools for working with your files and system:',
|
|
58
|
+
'',
|
|
59
|
+
` ${chalk.bold('Files')} Read, write, search, and edit files`,
|
|
60
|
+
` ${chalk.bold('Terminal')} Run shell commands (with safety checks)`,
|
|
61
|
+
` ${chalk.bold('Git')} Commit, diff, branch, and manage repos`,
|
|
62
|
+
` ${chalk.bold('GitHub')} Create issues, PRs, review code`,
|
|
63
|
+
` ${chalk.bold('Search')} Look things up on the web`,
|
|
64
|
+
` ${chalk.bold('Browser')} Open and interact with web pages`,
|
|
65
|
+
'',
|
|
66
|
+
'Just describe what you want. kbot picks the right tools:',
|
|
67
|
+
` ${CYAN('"find all TODO comments in this project"')}`,
|
|
68
|
+
` ${CYAN('"create a .gitignore for a Node.js project"')}`,
|
|
69
|
+
],
|
|
70
|
+
example: 'list all files in this directory sorted by size',
|
|
71
|
+
tip: 'kbot asks for confirmation before running anything destructive.',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
title: 'Save your work',
|
|
75
|
+
body: [
|
|
76
|
+
'Every conversation can be saved and picked up later.',
|
|
77
|
+
'',
|
|
78
|
+
` ${chalk.white('/save')} ${DIM('[name]')} Save this conversation`,
|
|
79
|
+
` ${chalk.white('/resume')} ${DIM('<id>')} Load a saved conversation`,
|
|
80
|
+
` ${chalk.white('/sessions')} List all saved conversations`,
|
|
81
|
+
'',
|
|
82
|
+
'You can also teach kbot facts it will remember forever:',
|
|
83
|
+
` ${CYAN('/remember I prefer TypeScript over JavaScript')}`,
|
|
84
|
+
` ${CYAN('/remember Our API base URL is https://api.example.com')}`,
|
|
85
|
+
'',
|
|
86
|
+
'kbot also learns automatically — it picks up patterns from',
|
|
87
|
+
'how you work and gets better over time.',
|
|
88
|
+
],
|
|
89
|
+
example: '/remember This is my first time using kbot',
|
|
90
|
+
tip: 'Use /compact to compress long conversations and save tokens.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
title: 'Go local',
|
|
94
|
+
body: [
|
|
95
|
+
'kbot can run entirely on your machine — no API key needed,',
|
|
96
|
+
'no data leaves your computer. Great for private work.',
|
|
97
|
+
'',
|
|
98
|
+
` ${chalk.bold('Ollama')} ${DIM('(recommended)')}`,
|
|
99
|
+
` ${CYAN('$ kbot local')} Start with a local model`,
|
|
100
|
+
` ${CYAN('$ kbot local llama3')} Use a specific model`,
|
|
101
|
+
` ${CYAN('/ollama')} Switch to local in a conversation`,
|
|
102
|
+
'',
|
|
103
|
+
` ${chalk.bold('OpenClaw')} ${DIM('(built-in)')}`,
|
|
104
|
+
` ${CYAN('$ kbot openclaw')} Use the built-in local engine`,
|
|
105
|
+
'',
|
|
106
|
+
'Local models are free and private. They\'re great for simple',
|
|
107
|
+
'tasks. For complex work, cloud models are more capable.',
|
|
108
|
+
],
|
|
109
|
+
example: '/ollama',
|
|
110
|
+
tip: 'First run downloads the model (~4GB). After that, it starts instantly.',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
title: 'Power features',
|
|
114
|
+
body: [
|
|
115
|
+
'Once you\'re comfortable, try these advanced features:',
|
|
116
|
+
'',
|
|
117
|
+
` ${chalk.white('/plan')} ${DIM('<task>')} Let kbot plan and execute multi-step tasks`,
|
|
118
|
+
` ${DIM(' "Plan: refactor the auth module into smaller files"')}`,
|
|
119
|
+
'',
|
|
120
|
+
` ${chalk.white('/matrix')} Create your own custom agents`,
|
|
121
|
+
` ${DIM(' Build an agent that knows your codebase inside out')}`,
|
|
122
|
+
'',
|
|
123
|
+
` ${chalk.white('/worktree')} Work in an isolated git branch`,
|
|
124
|
+
` ${DIM(' Experiment without affecting your main branch')}`,
|
|
125
|
+
'',
|
|
126
|
+
` ${chalk.white('/mimic')} ${DIM('<style>')} Code like a specific tool`,
|
|
127
|
+
` ${DIM(' /mimic claude-code, /mimic cursor, /mimic copilot')}`,
|
|
128
|
+
'',
|
|
129
|
+
` ${chalk.white('/thinking')} See how kbot reasons through problems`,
|
|
130
|
+
],
|
|
131
|
+
example: '/help',
|
|
132
|
+
tip: 'Type /help anytime to see all available commands.',
|
|
133
|
+
},
|
|
134
|
+
];
|
|
135
|
+
// ── Wait for user input ──
|
|
136
|
+
function waitForInput(rl, promptText) {
|
|
137
|
+
return new Promise((resolve) => {
|
|
138
|
+
rl.question(promptText, (answer) => resolve(answer.trim()));
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// ── Render a single step ──
|
|
142
|
+
function renderStep(step, index, total) {
|
|
143
|
+
const stepLabel = `Step ${index + 1} of ${total}`;
|
|
144
|
+
status();
|
|
145
|
+
divider();
|
|
146
|
+
status();
|
|
147
|
+
status(` ${ACCENT(stepLabel)} ${chalk.bold(step.title)}`);
|
|
148
|
+
status();
|
|
149
|
+
for (const line of step.body) {
|
|
150
|
+
status(` ${line}`);
|
|
151
|
+
}
|
|
152
|
+
status();
|
|
153
|
+
status(` ${GREEN('Try it:')} ${CYAN(step.example)}`);
|
|
154
|
+
if (step.tip) {
|
|
155
|
+
status(` ${DIM(`Tip: ${step.tip}`)}`);
|
|
156
|
+
}
|
|
157
|
+
status();
|
|
158
|
+
}
|
|
159
|
+
// ── Main tutorial runner ──
|
|
160
|
+
export async function runTutorial(rl) {
|
|
161
|
+
status();
|
|
162
|
+
status(` ${ACCENT('K:BOT Tutorial')}`);
|
|
163
|
+
status(` ${DIM('A quick tour of what kbot can do. Takes about 3 minutes.')}`);
|
|
164
|
+
status();
|
|
165
|
+
status(` ${DIM('Press Enter to go to the next step.')}`);
|
|
166
|
+
status(` ${DIM('Type q to quit anytime.')}`);
|
|
167
|
+
for (let i = 0; i < STEPS.length; i++) {
|
|
168
|
+
renderStep(STEPS[i], i, STEPS.length);
|
|
169
|
+
const promptText = i < STEPS.length - 1
|
|
170
|
+
? ` ${DIM('[Enter → next step, q → quit]')} `
|
|
171
|
+
: ` ${DIM('[Enter → finish]')} `;
|
|
172
|
+
const input = await waitForInput(rl, promptText);
|
|
173
|
+
if (input.toLowerCase() === 'q') {
|
|
174
|
+
status();
|
|
175
|
+
printInfo('Tutorial ended. Type /help to see all commands.');
|
|
176
|
+
status();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Finish
|
|
181
|
+
status();
|
|
182
|
+
divider();
|
|
183
|
+
status();
|
|
184
|
+
printSuccess('Tutorial complete!');
|
|
185
|
+
status();
|
|
186
|
+
status(` ${chalk.bold('You\'re ready to go.')} Here\'s what to do next:`);
|
|
187
|
+
status();
|
|
188
|
+
status(` ${DIM('•')} Just type a question or task to get started`);
|
|
189
|
+
status(` ${DIM('•')} Type ${CYAN('/help')} to see all commands`);
|
|
190
|
+
status(` ${DIM('•')} Type ${CYAN('/save')} to save your work before you leave`);
|
|
191
|
+
status();
|
|
192
|
+
printInfo('The more you use kbot, the smarter it gets. Have fun!');
|
|
193
|
+
status();
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=tutorial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial.js","sourceRoot":"","sources":["../src/tutorial.ts"],"names":[],"mappings":"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"}
|