@kernel.chat/kbot 1.3.1 → 2.3.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.
Files changed (176) hide show
  1. package/README.md +94 -0
  2. package/dist/agent.d.ts +9 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +576 -119
  5. package/dist/agent.js.map +1 -1
  6. package/dist/auth.d.ts +20 -35
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +224 -66
  9. package/dist/auth.js.map +1 -1
  10. package/dist/auth.test.d.ts +2 -0
  11. package/dist/auth.test.d.ts.map +1 -0
  12. package/dist/auth.test.js +89 -0
  13. package/dist/auth.test.js.map +1 -0
  14. package/dist/build-targets.d.ts +37 -0
  15. package/dist/build-targets.d.ts.map +1 -0
  16. package/dist/build-targets.js +507 -0
  17. package/dist/build-targets.js.map +1 -0
  18. package/dist/cli.js +1210 -130
  19. package/dist/cli.js.map +1 -1
  20. package/dist/context.d.ts +2 -0
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js +72 -22
  23. package/dist/context.js.map +1 -1
  24. package/dist/hooks.d.ts +27 -0
  25. package/dist/hooks.d.ts.map +1 -0
  26. package/dist/hooks.js +145 -0
  27. package/dist/hooks.js.map +1 -0
  28. package/dist/ide/acp-server.d.ts +6 -0
  29. package/dist/ide/acp-server.d.ts.map +1 -0
  30. package/dist/ide/acp-server.js +319 -0
  31. package/dist/ide/acp-server.js.map +1 -0
  32. package/dist/ide/bridge.d.ts +128 -0
  33. package/dist/ide/bridge.d.ts.map +1 -0
  34. package/dist/ide/bridge.js +185 -0
  35. package/dist/ide/bridge.js.map +1 -0
  36. package/dist/ide/index.d.ts +5 -0
  37. package/dist/ide/index.d.ts.map +1 -0
  38. package/dist/ide/index.js +11 -0
  39. package/dist/ide/index.js.map +1 -0
  40. package/dist/ide/lsp-bridge.d.ts +27 -0
  41. package/dist/ide/lsp-bridge.d.ts.map +1 -0
  42. package/dist/ide/lsp-bridge.js +267 -0
  43. package/dist/ide/lsp-bridge.js.map +1 -0
  44. package/dist/ide/mcp-server.d.ts +7 -0
  45. package/dist/ide/mcp-server.d.ts.map +1 -0
  46. package/dist/ide/mcp-server.js +451 -0
  47. package/dist/ide/mcp-server.js.map +1 -0
  48. package/dist/learning.d.ts +179 -0
  49. package/dist/learning.d.ts.map +1 -0
  50. package/dist/learning.js +829 -0
  51. package/dist/learning.js.map +1 -0
  52. package/dist/learning.test.d.ts +2 -0
  53. package/dist/learning.test.d.ts.map +1 -0
  54. package/dist/learning.test.js +115 -0
  55. package/dist/learning.test.js.map +1 -0
  56. package/dist/matrix.d.ts +49 -0
  57. package/dist/matrix.d.ts.map +1 -0
  58. package/dist/matrix.js +302 -0
  59. package/dist/matrix.js.map +1 -0
  60. package/dist/memory.d.ts +11 -0
  61. package/dist/memory.d.ts.map +1 -1
  62. package/dist/memory.js +54 -2
  63. package/dist/memory.js.map +1 -1
  64. package/dist/multimodal.d.ts +57 -0
  65. package/dist/multimodal.d.ts.map +1 -0
  66. package/dist/multimodal.js +206 -0
  67. package/dist/multimodal.js.map +1 -0
  68. package/dist/permissions.d.ts +21 -0
  69. package/dist/permissions.d.ts.map +1 -0
  70. package/dist/permissions.js +122 -0
  71. package/dist/permissions.js.map +1 -0
  72. package/dist/planner.d.ts +54 -0
  73. package/dist/planner.d.ts.map +1 -0
  74. package/dist/planner.js +298 -0
  75. package/dist/planner.js.map +1 -0
  76. package/dist/plugins.d.ts +30 -0
  77. package/dist/plugins.d.ts.map +1 -0
  78. package/dist/plugins.js +135 -0
  79. package/dist/plugins.js.map +1 -0
  80. package/dist/sessions.d.ts +38 -0
  81. package/dist/sessions.d.ts.map +1 -0
  82. package/dist/sessions.js +177 -0
  83. package/dist/sessions.js.map +1 -0
  84. package/dist/streaming.d.ts +88 -0
  85. package/dist/streaming.d.ts.map +1 -0
  86. package/dist/streaming.js +317 -0
  87. package/dist/streaming.js.map +1 -0
  88. package/dist/tools/background.d.ts +2 -0
  89. package/dist/tools/background.d.ts.map +1 -0
  90. package/dist/tools/background.js +163 -0
  91. package/dist/tools/background.js.map +1 -0
  92. package/dist/tools/bash.d.ts.map +1 -1
  93. package/dist/tools/bash.js +26 -1
  94. package/dist/tools/bash.js.map +1 -1
  95. package/dist/tools/browser.js +7 -7
  96. package/dist/tools/browser.js.map +1 -1
  97. package/dist/tools/build-matrix.d.ts +2 -0
  98. package/dist/tools/build-matrix.d.ts.map +1 -0
  99. package/dist/tools/build-matrix.js +463 -0
  100. package/dist/tools/build-matrix.js.map +1 -0
  101. package/dist/tools/computer.js +5 -5
  102. package/dist/tools/computer.js.map +1 -1
  103. package/dist/tools/fetch.d.ts +2 -0
  104. package/dist/tools/fetch.d.ts.map +1 -0
  105. package/dist/tools/fetch.js +106 -0
  106. package/dist/tools/fetch.js.map +1 -0
  107. package/dist/tools/files.d.ts.map +1 -1
  108. package/dist/tools/files.js +112 -6
  109. package/dist/tools/files.js.map +1 -1
  110. package/dist/tools/git.js +3 -3
  111. package/dist/tools/git.js.map +1 -1
  112. package/dist/tools/github.d.ts +2 -0
  113. package/dist/tools/github.d.ts.map +1 -0
  114. package/dist/tools/github.js +196 -0
  115. package/dist/tools/github.js.map +1 -0
  116. package/dist/tools/index.d.ts +29 -5
  117. package/dist/tools/index.d.ts.map +1 -1
  118. package/dist/tools/index.js +136 -20
  119. package/dist/tools/index.js.map +1 -1
  120. package/dist/tools/index.test.d.ts +2 -0
  121. package/dist/tools/index.test.d.ts.map +1 -0
  122. package/dist/tools/index.test.js +162 -0
  123. package/dist/tools/index.test.js.map +1 -0
  124. package/dist/tools/matrix.d.ts +2 -0
  125. package/dist/tools/matrix.d.ts.map +1 -0
  126. package/dist/tools/matrix.js +79 -0
  127. package/dist/tools/matrix.js.map +1 -0
  128. package/dist/tools/mcp-client.d.ts +2 -0
  129. package/dist/tools/mcp-client.d.ts.map +1 -0
  130. package/dist/tools/mcp-client.js +295 -0
  131. package/dist/tools/mcp-client.js.map +1 -0
  132. package/dist/tools/notebook.d.ts +2 -0
  133. package/dist/tools/notebook.d.ts.map +1 -0
  134. package/dist/tools/notebook.js +207 -0
  135. package/dist/tools/notebook.js.map +1 -0
  136. package/dist/tools/openclaw.d.ts +2 -0
  137. package/dist/tools/openclaw.d.ts.map +1 -0
  138. package/dist/tools/openclaw.js +187 -0
  139. package/dist/tools/openclaw.js.map +1 -0
  140. package/dist/tools/parallel.d.ts +2 -0
  141. package/dist/tools/parallel.d.ts.map +1 -0
  142. package/dist/tools/parallel.js +60 -0
  143. package/dist/tools/parallel.js.map +1 -0
  144. package/dist/tools/sandbox.d.ts +2 -0
  145. package/dist/tools/sandbox.d.ts.map +1 -0
  146. package/dist/tools/sandbox.js +352 -0
  147. package/dist/tools/sandbox.js.map +1 -0
  148. package/dist/tools/search.d.ts.map +1 -1
  149. package/dist/tools/search.js +135 -28
  150. package/dist/tools/search.js.map +1 -1
  151. package/dist/tools/subagent.d.ts +4 -0
  152. package/dist/tools/subagent.d.ts.map +1 -0
  153. package/dist/tools/subagent.js +260 -0
  154. package/dist/tools/subagent.js.map +1 -0
  155. package/dist/tools/tasks.d.ts +14 -0
  156. package/dist/tools/tasks.d.ts.map +1 -0
  157. package/dist/tools/tasks.js +210 -0
  158. package/dist/tools/tasks.js.map +1 -0
  159. package/dist/tools/worktree.d.ts +2 -0
  160. package/dist/tools/worktree.d.ts.map +1 -0
  161. package/dist/tools/worktree.js +223 -0
  162. package/dist/tools/worktree.js.map +1 -0
  163. package/dist/tui.d.ts +73 -0
  164. package/dist/tui.d.ts.map +1 -0
  165. package/dist/tui.js +257 -0
  166. package/dist/tui.js.map +1 -0
  167. package/dist/ui.d.ts +11 -19
  168. package/dist/ui.d.ts.map +1 -1
  169. package/dist/ui.js +143 -171
  170. package/dist/ui.js.map +1 -1
  171. package/dist/updater.d.ts +3 -0
  172. package/dist/updater.d.ts.map +1 -0
  173. package/dist/updater.js +70 -0
  174. package/dist/updater.js.map +1 -0
  175. package/install.sh +5 -7
  176. package/package.json +9 -5
package/dist/ui.js CHANGED
@@ -1,242 +1,214 @@
1
- // K:BOT Terminal UI — ASCII art branding, colors, spinners, markdown rendering
2
- // Minimal dependencies. Beautiful terminal output.
1
+ // K:BOT Terminal UI — Modern 2026 CLI design
2
+ // Follows: clig.dev guidelines, Claude Code patterns, gh CLI conventions.
3
+ // Supports NO_COLOR, TTY detection. An 8th grader can read every message.
4
+ //
5
+ // stderr vs stdout (clig.dev best practice):
6
+ // stdout = content (AI responses, tool output) — safe to pipe
7
+ // stderr = status (spinners, banners, errors, tool calls) — humans only
3
8
  import chalk from 'chalk';
4
9
  import ora from 'ora';
5
- // Brand colors Rubin palette
6
- const AMETHYST = chalk.hex('#6B5B95');
7
- const AMETHYST_DIM = chalk.hex('#9688BF');
8
- const SAGE = chalk.hex('#6B8E6B');
9
- const WARM_BROWN = chalk.hex('#B8875C');
10
- const SLATE_BLUE = chalk.hex('#5B8BA0');
11
- const MAUVE = chalk.hex('#A0768C');
12
- const IVORY = chalk.hex('#FAF9F6');
13
- const SLATE = chalk.hex('#1F1E1D');
10
+ // ── NO_COLOR support (clig.dev / no-color.org standard) ──
11
+ const useColor = !process.env.NO_COLOR && process.stdout.isTTY !== false;
12
+ // ── Output channels ──
13
+ // Status/progress stderr (doesn't pollute pipes)
14
+ // Content stdout (pipeable)
15
+ let _quiet = false;
16
+ export function setQuiet(q) { _quiet = q; }
17
+ export const status = (...args) => { if (!_quiet)
18
+ console.error(...args); };
19
+ export const content = (...args) => console.log(...args);
20
+ // ── Color palette ──
21
+ // Subtle, dark-mode-friendly. One accent color, everything else is gray.
22
+ const ACCENT = useColor ? chalk.hex('#A78BFA') : chalk; // soft violet (primary)
23
+ const ACCENT_DIM = useColor ? chalk.hex('#7C6CB0') : chalk; // muted violet
24
+ const GREEN = useColor ? chalk.hex('#4ADE80') : chalk; // success
25
+ const RED = useColor ? chalk.hex('#F87171') : chalk; // error
26
+ const YELLOW = useColor ? chalk.hex('#FBBF24') : chalk; // warning
27
+ const CYAN = useColor ? chalk.hex('#67E8F9') : chalk; // code/paths
28
+ const DIM = useColor ? chalk.dim : ((s) => s); // secondary text
14
29
  /** Agent color map */
15
30
  const AGENT_COLORS = {
16
- kernel: AMETHYST,
17
- researcher: SLATE_BLUE,
18
- coder: SAGE,
19
- writer: WARM_BROWN,
20
- analyst: MAUVE,
31
+ kernel: ACCENT,
32
+ researcher: chalk.hex('#60A5FA'),
33
+ coder: chalk.hex('#4ADE80'),
34
+ writer: chalk.hex('#FB923C'),
35
+ analyst: chalk.hex('#F472B6'),
21
36
  aesthete: chalk.hex('#C4956A'),
22
37
  guardian: chalk.hex('#8B4513'),
23
38
  curator: chalk.hex('#708090'),
24
39
  strategist: chalk.hex('#DAA520'),
25
- infrastructure: chalk.hex('#4682B4'),
26
- quant: chalk.hex('#228B22'),
27
- investigator: chalk.hex('#8B0000'),
28
- oracle: chalk.hex('#9370DB'),
29
- chronist: chalk.hex('#CD853F'),
30
- sage: chalk.hex('#2F4F4F'),
31
- communicator: chalk.hex('#DB7093'),
32
- adapter: chalk.hex('#20B2AA'),
33
- local: chalk.hex('#888888'),
34
- };
35
- /** Agent icons */
36
- const AGENT_ICONS = {
37
- kernel: '◆',
38
- researcher: '◈',
39
- coder: '⟐',
40
- writer: '◇',
41
- analyst: '▣',
42
- aesthete: '✦',
43
- guardian: '◉',
44
- curator: '❖',
45
- strategist: '▲',
46
- infrastructure: '⬡',
47
- quant: '∑',
48
- investigator: '⊕',
49
- oracle: '☉',
50
- chronist: '◷',
51
- sage: '✧',
52
- communicator: '◎',
53
- adapter: '⟳',
54
- local: '⚡',
40
+ local: DIM,
55
41
  };
42
+ /** Register a custom agent's color (for matrix agents) */
43
+ export function registerAgentVisuals(id, _icon, color) {
44
+ AGENT_COLORS[id] = chalk.hex(color);
45
+ }
56
46
  export function agentColor(agentId) {
57
- return AGENT_COLORS[agentId] || AMETHYST;
47
+ return AGENT_COLORS[agentId] || ACCENT;
58
48
  }
59
49
  export function agentIcon(agentId) {
60
- return AGENT_ICONS[agentId] || '●';
61
- }
62
- /** The K:BOT prompt */
50
+ // Simple, consistent — no exotic unicode
51
+ const icons = {
52
+ kernel: '●', researcher: '◆', coder: '▸', writer: '✎',
53
+ analyst: '◇', local: '⚡',
54
+ };
55
+ return icons[agentId] || '●';
56
+ }
57
+ // ── Prompt ──
63
58
  export function prompt() {
64
- return `${AMETHYST('K')}${chalk.dim(':')}${AMETHYST('BOT')} ${chalk.dim('')} `;
65
- }
66
- /** Main ASCII art banner — shown on REPL startup */
67
- export function banner() {
68
- const art = [
69
- '',
70
- ` ${AMETHYST('██╗ ██╗')}${chalk.dim(':')}${AMETHYST('██████╗ ██████╗ ████████╗')}`,
71
- ` ${AMETHYST('██║ ██╔╝')} ${AMETHYST('██╔══██╗██╔═══██╗╚══██╔══╝')}`,
72
- ` ${AMETHYST('█████╔╝')} ${AMETHYST('██████╔╝██║ ██║ ██║')}`,
73
- ` ${AMETHYST('██╔═██╗')} ${AMETHYST('██╔══██╗██║ ██║ ██║')}`,
74
- ` ${AMETHYST('██║ ██╗')}${chalk.dim(':')}${AMETHYST('██████╔╝╚██████╔╝ ██║')}`,
75
- ` ${AMETHYST('╚═╝ ╚═╝')} ${AMETHYST('╚═════╝ ╚═════╝ ╚═╝')}`,
76
- '',
77
- ` ${chalk.dim('─────────────────────────────────────')}`,
78
- ` ${AMETHYST_DIM('Kernel Matrix Terminal Agent')}`,
79
- ` ${chalk.dim('17 agents · multi-model · local-first')}`,
80
- ` ${chalk.dim('─────────────────────────────────────')}`,
81
- '',
82
- ];
83
- return art.join('\n');
59
+ // Show current directory basename like Claude Code: kbot ~/project
60
+ const cwd = process.cwd();
61
+ const home = process.env.HOME || '';
62
+ const short = home && cwd.startsWith(home) ? '~' + cwd.slice(home.length) : cwd;
63
+ // Only show the last 2 path segments to keep it compact
64
+ const parts = short.split('/');
65
+ const display = parts.length > 3 ? parts.slice(-2).join('/') : short;
66
+ return `${DIM(display)} ${ACCENT('')} `;
67
+ }
68
+ // ── Banners ──
69
+ export function banner(version) {
70
+ const v = version ? chalk.dim(` v${version}`) : '';
71
+ return `\n ${ACCENT('kbot')}${v}\n`;
84
72
  }
85
- /** Compact banner — shown for one-shot mode */
86
73
  export function bannerCompact() {
87
- return `\n ${AMETHYST('K:BOT')} ${chalk.dim('·')} ${AMETHYST_DIM('Kernel Matrix')}\n`;
74
+ return ''; // No banner in one-shot — just run
88
75
  }
89
- /** Auth flow banner */
90
76
  export function bannerAuth() {
91
- const art = [
92
- '',
93
- ` ${AMETHYST('╔═══════════════════════════════════╗')}`,
94
- ` ${AMETHYST('║')} ${chalk.bold('K:BOT')} ${chalk.dim('— Terminal Agent Setup')} ${AMETHYST('║')}`,
95
- ` ${AMETHYST('╚═══════════════════════════════════╝')}`,
96
- '',
97
- ];
98
- return art.join('\n');
77
+ return `\n ${ACCENT('kbot')} ${DIM('setup')}\n`;
99
78
  }
100
- /** Matrix-style connection animation text */
101
79
  export function matrixConnect(tier, agentCount) {
102
- const lines = [
103
- ` ${SAGE('✓')} ${chalk.dim('Connected to')} ${AMETHYST('Kernel Matrix')}`,
104
- ` ${SAGE('✓')} ${chalk.dim('Tier:')} ${chalk.bold(tier)} ${chalk.dim('·')} ${chalk.dim(`${agentCount} agents available`)}`,
105
- ` ${SAGE('✓')} ${chalk.dim('Tools: local-first execution (file, git, bash)')}`,
106
- '',
107
- ];
108
- return lines.join('\n');
80
+ return ` ${GREEN('●')} ${DIM(`${tier} · ${agentCount} agents · ready`)}\n`;
109
81
  }
110
- /** Create a thinking spinner */
82
+ // ── Spinner ──
111
83
  export function createSpinner(text = 'Thinking...') {
112
84
  return ora({
113
- text: AMETHYST_DIM(text),
85
+ text: DIM(text),
114
86
  color: 'magenta',
115
87
  spinner: 'dots',
88
+ stream: process.stderr, // Spinners go to stderr — don't pollute piped output
116
89
  });
117
90
  }
118
- /** Print an agent response with icon and agent name */
119
- export function printResponse(agentId, content) {
91
+ // ── Output ──
92
+ /** Print an agent response (content → stdout, agent label → stderr) */
93
+ export function printResponse(agentId, text) {
120
94
  const color = agentColor(agentId);
121
- const icon = agentIcon(agentId);
122
- console.log();
123
- console.log(color(` ${icon} ${agentId}`));
124
- console.log(chalk.dim(' ' + '─'.repeat(40)));
125
- console.log();
126
- // Simple markdown-to-terminal rendering
127
- const formatted = formatMarkdown(content);
95
+ content();
96
+ // Show which agent responded (subtle, like Claude Code's model indicator)
97
+ if (agentId !== 'kernel' && agentId !== 'auto' && agentId !== 'local') {
98
+ status(` ${color('')} ${DIM(agentId)}`);
99
+ }
100
+ // Render markdown to stdout — this is the pipeable content
101
+ const formatted = formatMarkdown(text);
128
102
  for (const line of formatted.split('\n')) {
129
- console.log(` ${line}`);
103
+ content(` ${line}`);
130
104
  }
131
- console.log();
105
+ content();
132
106
  }
133
- /** Print a tool execution */
107
+ /** Print a tool execution — compact, one line (stderr — status) */
134
108
  export function printToolCall(toolName, args) {
135
109
  const summary = Object.entries(args)
136
- .map(([k, v]) => `${k}=${typeof v === 'string' && v.length > 40 ? v.slice(0, 40) + '...' : v}`)
137
- .join(', ');
138
- console.log(AMETHYST_DIM(` ⚡ ${toolName}`) + chalk.dim(`(${summary})`));
110
+ .slice(0, 3) // Max 3 args shown
111
+ .map(([k, v]) => {
112
+ const val = typeof v === 'string' ? (v.length > 30 ? v.slice(0, 30) + '…' : v) : String(v);
113
+ return `${DIM(k + '=')}${val}`;
114
+ })
115
+ .join(' ');
116
+ status(` ${ACCENT_DIM('▸')} ${chalk.white(toolName)} ${summary}`);
139
117
  }
140
- /** Print tool result (truncated) */
118
+ /** Print tool result (truncated, stderr — status) */
141
119
  export function printToolResult(result, error) {
142
120
  const lines = result.split('\n');
143
- const preview = lines.slice(0, 5).join('\n');
144
- const truncated = lines.length > 5 ? `\n ${chalk.dim(`... (${lines.length - 5} more lines)`)}` : '';
145
- const color = error ? chalk.red : chalk.dim;
146
- console.log(color(` ${preview}${truncated}`));
121
+ const preview = lines.slice(0, 3).join('\n');
122
+ const more = lines.length > 3 ? `\n ${DIM(` +${lines.length - 3} lines`)}` : '';
123
+ const color = error ? RED : DIM;
124
+ status(color(` ${preview.split('\n').join('\n ')}${more}`));
147
125
  }
148
- /** Print usage stats with visual bar */
126
+ /** Print usage stats (stderr status) */
149
127
  export function printUsage(stats) {
150
128
  const { tier, monthly_messages } = stats;
151
129
  const pct = Math.round((monthly_messages.count / monthly_messages.limit) * 100);
152
- const bar = renderBar(pct);
153
- console.log();
154
- console.log(` ${AMETHYST('▣')} ${chalk.bold('Usage')}`);
155
- console.log(chalk.dim(' ' + ''.repeat(40)));
156
- console.log(` Tier ${chalk.bold(tier)}`);
157
- console.log(` Messages ${monthly_messages.count} ${chalk.dim('/')} ${monthly_messages.limit}`);
158
- console.log(` ${bar} ${pct}%`);
159
- console.log();
160
- }
161
- function renderBar(pct) {
162
- const total = 30;
163
- const filled = Math.round((pct / 100) * total);
164
- const color = pct > 90 ? chalk.red : pct > 70 ? chalk.yellow : AMETHYST;
165
- return ` ${color('█'.repeat(filled))}${chalk.dim('░'.repeat(total - filled))}`;
166
- }
167
- /** Print error */
130
+ const barLen = 20;
131
+ const filled = Math.round((pct / 100) * barLen);
132
+ const barColor = pct > 90 ? RED : pct > 70 ? YELLOW : GREEN;
133
+ const bar = barColor('━'.repeat(filled)) + DIM(''.repeat(barLen - filled));
134
+ status();
135
+ status(` ${chalk.bold('Usage')} ${DIM(tier)}`);
136
+ status(` ${bar} ${monthly_messages.count}/${monthly_messages.limit} ${DIM(`(${pct}%)`)}`);
137
+ status();
138
+ }
139
+ // ── Status messages (all stderr — never pollute piped output) ──
168
140
  export function printError(message) {
169
- console.log(chalk.red(` ✗ ${message}`));
141
+ status(` ${RED('')} ${message}`);
170
142
  }
171
- /** Print success */
172
143
  export function printSuccess(message) {
173
- console.log(SAGE(` ✓ ${message}`));
144
+ status(` ${GREEN('')} ${message}`);
174
145
  }
175
- /** Print info */
176
146
  export function printInfo(message) {
177
- console.log(chalk.dim(` ${message}`));
147
+ status(` ${DIM(message)}`);
178
148
  }
179
- /** Print a warning */
180
149
  export function printWarn(message) {
181
- console.log(chalk.yellow(` ${message}`));
150
+ status(` ${YELLOW('!')} ${message}`);
182
151
  }
183
- /** Simple markdown formatting for terminal */
152
+ // ── Markdown rendering ──
184
153
  function formatMarkdown(text) {
185
154
  return text
155
+ // Code blocks — render with left border
156
+ .replace(/```[\w]*\n([\s\S]*?)```/g, (_match, code) => {
157
+ const lines = code.split('\n');
158
+ return lines.map((l) => `${DIM('│')} ${CYAN(l)}`).join('\n');
159
+ })
186
160
  // Headers
187
- .replace(/^### (.+)$/gm, (_m, h) => chalk.bold(AMETHYST_DIM(h)))
188
- .replace(/^## (.+)$/gm, (_m, h) => chalk.bold.underline(h))
161
+ .replace(/^### (.+)$/gm, (_m, h) => chalk.bold(h))
162
+ .replace(/^## (.+)$/gm, (_m, h) => chalk.bold(h))
189
163
  .replace(/^# (.+)$/gm, (_m, h) => chalk.bold.underline(h))
190
164
  // Bold
191
165
  .replace(/\*\*(.+?)\*\*/g, (_m, t) => chalk.bold(t))
192
166
  // Italic
193
167
  .replace(/\*(.+?)\*/g, (_m, t) => chalk.italic(t))
194
168
  // Inline code
195
- .replace(/`([^`]+)`/g, (_m, c) => chalk.cyan(c))
196
- // Code blocks (simple — just color them)
197
- .replace(/```[\w]*\n([\s\S]*?)```/g, (_match, code) => {
198
- const lines = code.split('\n');
199
- return lines.map((l) => `${chalk.dim('│')} ${chalk.cyan(l)}`).join('\n');
200
- })
169
+ .replace(/`([^`]+)`/g, (_m, c) => CYAN(c))
201
170
  // Bullet points
202
- .replace(/^- (.+)$/gm, (_m, t) => `${AMETHYST_DIM('•')} ${t}`)
203
- .replace(/^\* (.+)$/gm, (_m, t) => `${AMETHYST_DIM('•')} ${t}`)
171
+ .replace(/^[-*] (.+)$/gm, (_m, t) => `${DIM('•')} ${t}`)
204
172
  // Numbered lists
205
- .replace(/^(\d+)\. (.+)$/gm, (_m, n, t) => `${chalk.dim(`${n}.`)} ${t}`);
173
+ .replace(/^(\d+)\. (.+)$/gm, (_m, n, t) => `${DIM(`${n}.`)} ${t}`);
206
174
  }
207
- /** Print a divider line */
175
+ // ── Divider ──
208
176
  export function divider() {
209
- console.log(chalk.dim(' ' + '─'.repeat(50)));
177
+ status(DIM(' ' + '─'.repeat(50)));
210
178
  }
211
- /** Print help screen with ASCII styling */
179
+ // ── Help ──
212
180
  export function printHelp() {
213
181
  const lines = [
214
182
  '',
215
- ` ${AMETHYST('Commands')}`,
216
- chalk.dim(' ' + '─'.repeat(40)),
217
- ` ${chalk.bold('/agent')} ${chalk.dim('<name>')} Switch agent ${chalk.dim('(kernel, researcher, coder, writer, analyst)')}`,
218
- ` ${chalk.bold('/model')} ${chalk.dim('<name>')} Switch model ${chalk.dim('(auto, sonnet, haiku)')}`,
219
- ` ${chalk.bold('/usage')} Show usage stats`,
220
- ` ${chalk.bold('/clear')} Clear conversation`,
221
- ` ${chalk.bold('/context')} Show project context`,
222
- ` ${chalk.bold('/memory')} ${chalk.dim('[clear]')} View or clear persistent memory`,
223
- ` ${chalk.bold('/help')} Show this help`,
224
- ` ${chalk.bold('/quit')} Exit`,
183
+ ` ${chalk.bold('Just type to chat.')} K:BOT does the rest.`,
184
+ '',
185
+ ` ${chalk.bold('Commands')}`,
186
+ ` ${DIM(''.repeat(44))}`,
187
+ ` ${chalk.white('/clear')} Reset conversation`,
188
+ ` ${chalk.white('/save')} ${DIM('[name]')} Save this session`,
189
+ ` ${chalk.white('/resume')} ${DIM('<id>')} Pick up a saved session`,
190
+ ` ${chalk.white('/model')} ${DIM('<name>')} Switch AI model`,
191
+ ` ${chalk.white('/agent')} ${DIM('<name>')} Switch specialist ${DIM('(coder, writer, researcher)')}`,
192
+ ` ${chalk.white('/remember')} ${DIM('<…>')} Teach kbot a fact`,
193
+ ` ${chalk.white('/thinking')} Show AI reasoning`,
194
+ ` ${chalk.white('/help')} This screen`,
195
+ ` ${chalk.white('/quit')} Exit`,
196
+ '',
197
+ ` ${chalk.bold('AI Provider')}`,
198
+ ` ${DIM('─'.repeat(44))}`,
199
+ ` ${chalk.white('/ollama')} ${DIM('[model]')} Local AI (free, private)`,
200
+ ` ${chalk.white('/provider')} Show current provider`,
201
+ ` ${DIM('kbot auth')} Set up an API key`,
225
202
  '',
226
- ` ${AMETHYST('Tips')}`,
227
- chalk.dim(' ' + '─'.repeat(40)),
228
- ` ${chalk.dim('•')} Simple commands ${chalk.dim('(ls, git status, cat file)')} run locally — ${SAGE('free')}`,
229
- ` ${chalk.dim('•')} AI reasoning goes through the Kernel Matrix — uses quota`,
230
- ` ${chalk.dim('•')} Use ${chalk.bold('--agent coder')} to force a specialist`,
231
- ` ${chalk.dim('•')} Set ${chalk.bold('KBOT_API_KEY')} env var to skip auth`,
203
+ ` ${DIM('More: /matrix /mimic /plan /compact /worktree /plugins /dashboard')}`,
232
204
  '',
233
205
  ];
234
- console.log(lines.join('\n'));
206
+ status(lines.join('\n'));
235
207
  }
236
- /** Goodbye message */
208
+ // ── Goodbye ──
237
209
  export function printGoodbye() {
238
- console.log();
239
- console.log(` ${AMETHYST_DIM('Matrix disconnected.')}`);
240
- console.log();
210
+ status();
211
+ status(` ${DIM('Bye.')}`);
212
+ status();
241
213
  }
242
214
  //# sourceMappingURL=ui.js.map
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Check for updates. Returns update message or null. Fully non-blocking. */
2
+ export declare function checkForUpdate(currentVersion: string): string | null;
3
+ //# sourceMappingURL=updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAgDA,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4BpE"}
@@ -0,0 +1,70 @@
1
+ // K:BOT Auto-Updater — checks npm for newer version
2
+ //
3
+ // Runs on startup (fully non-blocking). If a newer version exists:
4
+ // 1. Prints a short update message with install command
5
+ // 2. Caches last-check timestamp to avoid checking every run (max once per 4 hours)
6
+ // 3. Does NOT auto-install — that's slow and can break the session
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
10
+ import { exec } from 'node:child_process';
11
+ const KBOT_DIR = join(homedir(), '.kbot');
12
+ const UPDATE_CACHE = join(KBOT_DIR, 'update-check.json');
13
+ const PACKAGE_NAME = '@kernel.chat/kbot';
14
+ const CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000; // 4 hours (was 1 hour — too frequent)
15
+ function readCache() {
16
+ try {
17
+ if (!existsSync(UPDATE_CACHE))
18
+ return null;
19
+ return JSON.parse(readFileSync(UPDATE_CACHE, 'utf-8'));
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ function writeCache(cache) {
26
+ try {
27
+ if (!existsSync(KBOT_DIR))
28
+ mkdirSync(KBOT_DIR, { recursive: true });
29
+ writeFileSync(UPDATE_CACHE, JSON.stringify(cache));
30
+ }
31
+ catch {
32
+ // Non-critical — skip
33
+ }
34
+ }
35
+ function isNewer(latest, current) {
36
+ const [lMaj, lMin, lPatch] = latest.split('.').map(Number);
37
+ const [cMaj, cMin, cPatch] = current.split('.').map(Number);
38
+ if (lMaj !== cMaj)
39
+ return lMaj > cMaj;
40
+ if (lMin !== cMin)
41
+ return lMin > cMin;
42
+ return lPatch > cPatch;
43
+ }
44
+ /** Check for updates. Returns update message or null. Fully non-blocking. */
45
+ export function checkForUpdate(currentVersion) {
46
+ // Skip in dev mode
47
+ if (process.env.KBOT_DEV)
48
+ return null;
49
+ const cache = readCache();
50
+ const now = Date.now();
51
+ // Use cached result if fresh enough
52
+ if (cache && (now - cache.lastCheck) < CHECK_INTERVAL_MS) {
53
+ if (cache.latestVersion && isNewer(cache.latestVersion, currentVersion)) {
54
+ return `Update available: ${currentVersion} → ${cache.latestVersion} (npm i -g ${PACKAGE_NAME})`;
55
+ }
56
+ return null;
57
+ }
58
+ // Check npm registry in the BACKGROUND — don't block startup
59
+ exec(`npm view ${PACKAGE_NAME} version 2>/dev/null`, { timeout: 5000 }, (err, stdout) => {
60
+ const latest = stdout?.trim() || null;
61
+ writeCache({ lastCheck: Date.now(), latestVersion: latest });
62
+ // If update found, it will show next time (we don't block this session)
63
+ });
64
+ // Show cached result if we have one
65
+ if (cache?.latestVersion && isNewer(cache.latestVersion, currentVersion)) {
66
+ return `Update available: ${currentVersion} → ${cache.latestVersion} (npm i -g ${PACKAGE_NAME})`;
67
+ }
68
+ return null;
69
+ }
70
+ //# sourceMappingURL=updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
package/install.sh CHANGED
@@ -42,12 +42,12 @@ if ! command -v npm &> /dev/null; then
42
42
  exit 1
43
43
  fi
44
44
 
45
- echo -e "${DIM}Installing @antigravity/kbot...${RESET}"
45
+ echo -e "${DIM}Installing @kernel.chat/kbot...${RESET}"
46
46
 
47
47
  # Install globally via npm
48
- npm install -g @antigravity/kbot 2>/dev/null || {
48
+ npm install -g @kernel.chat/kbot 2>/dev/null || {
49
49
  echo -e "${DIM}Global install needs permissions. Trying with sudo...${RESET}"
50
- sudo npm install -g @antigravity/kbot
50
+ sudo npm install -g @kernel.chat/kbot
51
51
  }
52
52
 
53
53
  # Create config directory
@@ -64,10 +64,8 @@ if [ -f "$HOME/.kbot/config.json" ]; then
64
64
  echo ""
65
65
  echo -e " Run ${BOLD}kbot${RESET} to start chatting."
66
66
  else
67
- echo -e " ${BOLD}Next steps:${RESET}"
68
- echo -e " 1. Get an API key at ${PURPLE}kernel.chat/#/api-docs${RESET}"
69
- echo -e " 2. Run ${BOLD}kbot auth${RESET} to configure"
70
- echo -e " 3. Run ${BOLD}kbot${RESET} to start chatting"
67
+ echo -e " ${BOLD}Next step:${RESET}"
68
+ echo -e " Run ${BOLD}kbot${RESET} — it will walk you through setup."
71
69
  fi
72
70
 
73
71
  echo ""
package/package.json CHANGED
@@ -1,27 +1,31 @@
1
1
  {
2
2
  "name": "@kernel.chat/kbot",
3
- "version": "1.3.1",
4
- "description": "K:BOT — Kernel's terminal AI agent. Access 17 specialist agents from your command line.",
3
+ "version": "2.3.1",
4
+ "description": "K:BOT — Open-source terminal AI agent. 17 specialists, 60+ tools, 14 providers, local-first.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "kbot": "./dist/cli.js"
8
8
  },
9
9
  "main": "./dist/agent.js",
10
10
  "scripts": {
11
- "build": "tsc",
11
+ "build": "tsc && chmod +x dist/cli.js",
12
12
  "dev": "tsx src/cli.ts",
13
- "start": "node dist/cli.js"
13
+ "start": "node dist/cli.js",
14
+ "test": "tsx --test src/**/*.test.ts",
15
+ "typecheck": "tsc --noEmit"
14
16
  },
15
17
  "keywords": ["ai", "cli", "agent", "kernel", "terminal"],
16
18
  "author": "Antigravity Group",
17
19
  "license": "MIT",
18
20
  "dependencies": {
21
+ "@modelcontextprotocol/sdk": "^1.0.0",
19
22
  "chalk": "^5.3.0",
20
23
  "commander": "^12.1.0",
21
24
  "marked": "^14.0.0",
22
25
  "marked-terminal": "^7.2.0",
23
26
  "ora": "^8.1.0",
24
- "readline": "^1.3.0"
27
+ "readline": "^1.3.0",
28
+ "zod": "^3.23.0"
25
29
  },
26
30
  "devDependencies": {
27
31
  "@types/node": "^22.0.0",