@kernel.chat/kbot 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/agent.d.ts +36 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +211 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/auth.d.ts +43 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +108 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/cli.d.ts +3 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +240 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/context.d.ts +15 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +128 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/memory.d.ts +25 -0
  18. package/dist/memory.d.ts.map +1 -0
  19. package/dist/memory.js +75 -0
  20. package/dist/memory.js.map +1 -0
  21. package/dist/tools/bash.d.ts +2 -0
  22. package/dist/tools/bash.d.ts.map +1 -0
  23. package/dist/tools/bash.js +63 -0
  24. package/dist/tools/bash.js.map +1 -0
  25. package/dist/tools/browser.d.ts +2 -0
  26. package/dist/tools/browser.d.ts.map +1 -0
  27. package/dist/tools/browser.js +116 -0
  28. package/dist/tools/browser.js.map +1 -0
  29. package/dist/tools/computer.d.ts +2 -0
  30. package/dist/tools/computer.d.ts.map +1 -0
  31. package/dist/tools/computer.js +176 -0
  32. package/dist/tools/computer.js.map +1 -0
  33. package/dist/tools/files.d.ts +2 -0
  34. package/dist/tools/files.d.ts.map +1 -0
  35. package/dist/tools/files.js +147 -0
  36. package/dist/tools/files.js.map +1 -0
  37. package/dist/tools/git.d.ts +2 -0
  38. package/dist/tools/git.d.ts.map +1 -0
  39. package/dist/tools/git.js +102 -0
  40. package/dist/tools/git.js.map +1 -0
  41. package/dist/tools/index.d.ts +37 -0
  42. package/dist/tools/index.d.ts.map +1 -0
  43. package/dist/tools/index.js +57 -0
  44. package/dist/tools/index.js.map +1 -0
  45. package/dist/tools/search.d.ts +2 -0
  46. package/dist/tools/search.d.ts.map +1 -0
  47. package/dist/tools/search.js +46 -0
  48. package/dist/tools/search.js.map +1 -0
  49. package/dist/ui.d.ts +44 -0
  50. package/dist/ui.d.ts.map +1 -0
  51. package/dist/ui.js +242 -0
  52. package/dist/ui.js.map +1 -0
  53. package/install.sh +76 -0
  54. package/package.json +38 -0
@@ -0,0 +1,57 @@
1
+ // K:BOT Tool Registry
2
+ // Tools are executed locally — only AI reasoning goes through the API.
3
+ // This saves tokens, messages, and latency.
4
+ const registry = new Map();
5
+ export function registerTool(tool) {
6
+ registry.set(tool.name, tool);
7
+ }
8
+ export function getTool(name) {
9
+ return registry.get(name);
10
+ }
11
+ export function getAllTools() {
12
+ return Array.from(registry.values());
13
+ }
14
+ export function getToolsForTier(tier) {
15
+ const tierOrder = ['free', 'starter', 'growth', 'enterprise'];
16
+ const tierIndex = tierOrder.indexOf(tier);
17
+ if (tierIndex === -1)
18
+ return getAllTools();
19
+ return getAllTools().filter(t => tierOrder.indexOf(t.tier) <= tierIndex);
20
+ }
21
+ /** Get tool definitions in Claude tool-use format for the API */
22
+ export function getToolDefinitionsForApi(tier) {
23
+ return getToolsForTier(tier).map(t => ({
24
+ name: t.name,
25
+ description: t.description,
26
+ }));
27
+ }
28
+ /** Execute a tool call locally. Returns the result string. */
29
+ export async function executeTool(call) {
30
+ const tool = registry.get(call.name);
31
+ if (!tool) {
32
+ return { tool_call_id: call.id, result: `Unknown tool: ${call.name}`, error: true };
33
+ }
34
+ try {
35
+ const result = await tool.execute(call.arguments);
36
+ return { tool_call_id: call.id, result };
37
+ }
38
+ catch (err) {
39
+ return {
40
+ tool_call_id: call.id,
41
+ result: `Tool error: ${err instanceof Error ? err.message : String(err)}`,
42
+ error: true,
43
+ };
44
+ }
45
+ }
46
+ /** Register all built-in tools. Call once at startup. */
47
+ export async function registerAllTools() {
48
+ const { registerFileTools } = await import('./files.js');
49
+ const { registerBashTools } = await import('./bash.js');
50
+ const { registerGitTools } = await import('./git.js');
51
+ const { registerSearchTools } = await import('./search.js');
52
+ registerFileTools();
53
+ registerBashTools();
54
+ registerGitTools();
55
+ registerSearchTools();
56
+ }
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,uEAAuE;AACvE,4CAA4C;AA4B5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAA;AAElD,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,WAAW,EAAE,CAAA;IAC1C,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAA;AAC1E,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACrF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACjD,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAA;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,EAAE;YACrB,MAAM,EAAE,eAAe,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACzE,KAAK,EAAE,IAAI;SACZ,CAAA;IACH,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IACxD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;IACvD,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IACrD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAC3D,iBAAiB,EAAE,CAAA;IACnB,iBAAiB,EAAE,CAAA;IACnB,gBAAgB,EAAE,CAAA;IAClB,mBAAmB,EAAE,CAAA;AACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function registerSearchTools(): void;
2
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAMA,wBAAgB,mBAAmB,IAAI,IAAI,CAyC1C"}
@@ -0,0 +1,46 @@
1
+ // K:BOT Search Tool — Web search via the Kernel API
2
+ // This is the one tool that DOES use an API call (counted against message limit)
3
+ import { getApiKey, getApiBase } from '../auth.js';
4
+ import { registerTool } from './index.js';
5
+ export function registerSearchTools() {
6
+ registerTool({
7
+ name: 'web_search',
8
+ description: 'Search the web for current information. Uses your Kernel API quota — use sparingly.',
9
+ parameters: {
10
+ query: { type: 'string', description: 'Search query', required: true },
11
+ },
12
+ tier: 'starter',
13
+ async execute(args) {
14
+ const query = String(args.query);
15
+ const apiKey = getApiKey();
16
+ if (!apiKey)
17
+ return 'Error: No API key configured. Run `kbot auth` first.';
18
+ try {
19
+ const res = await fetch(`${getApiBase()}/chat`, {
20
+ method: 'POST',
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ Authorization: `Bearer ${apiKey}`,
24
+ 'X-Kbot-Version': '1.0.0',
25
+ },
26
+ body: JSON.stringify({
27
+ message: `Search the web for: ${query}\n\nReturn a concise summary of the top results with key facts and sources.`,
28
+ agent: 'researcher',
29
+ mode: 'json',
30
+ max_tokens: 2048,
31
+ }),
32
+ });
33
+ if (!res.ok) {
34
+ const err = await res.json().catch(() => ({ error: 'Unknown' }));
35
+ return `Search failed: ${err.error || `HTTP ${res.status}`}`;
36
+ }
37
+ const data = await res.json();
38
+ return data.content || 'No results found';
39
+ }
40
+ catch (err) {
41
+ return `Search error: ${err instanceof Error ? err.message : String(err)}`;
42
+ }
43
+ },
44
+ });
45
+ }
46
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,iFAAiF;AAEjF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,UAAU,mBAAmB;IACjC,YAAY,CAAC;QACX,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,qFAAqF;QAClG,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;SACvE;QACD,IAAI,EAAE,SAAS;QACf,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,IAAI,CAAC,MAAM;gBAAE,OAAO,sDAAsD,CAAA;YAE1E,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,EAAE,OAAO,EAAE;oBAC9C,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;wBACjC,gBAAgB,EAAE,OAAO;qBAC1B;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,uBAAuB,KAAK,6EAA6E;wBAClH,KAAK,EAAE,YAAY;wBACnB,IAAI,EAAE,MAAM;wBACZ,UAAU,EAAE,IAAI;qBACjB,CAAC;iBACH,CAAC,CAAA;gBAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;oBAChE,OAAO,kBAAkB,GAAG,CAAC,KAAK,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAA;gBAC9D,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;gBAC7B,OAAO,IAAI,CAAC,OAAO,IAAI,kBAAkB,CAAA;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;YAC5E,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ import { type Ora } from 'ora';
2
+ export declare function agentColor(agentId: string): (text: string) => string;
3
+ export declare function agentIcon(agentId: string): string;
4
+ /** The K:BOT prompt */
5
+ export declare function prompt(): string;
6
+ /** Main ASCII art banner — shown on REPL startup */
7
+ export declare function banner(): string;
8
+ /** Compact banner — shown for one-shot mode */
9
+ export declare function bannerCompact(): string;
10
+ /** Auth flow banner */
11
+ export declare function bannerAuth(): string;
12
+ /** Matrix-style connection animation text */
13
+ export declare function matrixConnect(tier: string, agentCount: number): string;
14
+ /** Create a thinking spinner */
15
+ export declare function createSpinner(text?: string): Ora;
16
+ /** Print an agent response with icon and agent name */
17
+ export declare function printResponse(agentId: string, content: string): void;
18
+ /** Print a tool execution */
19
+ export declare function printToolCall(toolName: string, args: Record<string, unknown>): void;
20
+ /** Print tool result (truncated) */
21
+ export declare function printToolResult(result: string, error?: boolean): void;
22
+ /** Print usage stats with visual bar */
23
+ export declare function printUsage(stats: {
24
+ tier: string;
25
+ monthly_messages: {
26
+ count: number;
27
+ limit: number;
28
+ };
29
+ }): void;
30
+ /** Print error */
31
+ export declare function printError(message: string): void;
32
+ /** Print success */
33
+ export declare function printSuccess(message: string): void;
34
+ /** Print info */
35
+ export declare function printInfo(message: string): void;
36
+ /** Print a warning */
37
+ export declare function printWarn(message: string): void;
38
+ /** Print a divider line */
39
+ export declare function divider(): void;
40
+ /** Print help screen with ASCII styling */
41
+ export declare function printHelp(): void;
42
+ /** Goodbye message */
43
+ export declare function printGoodbye(): void;
44
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAIA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAwDnC,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAEpE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,uBAAuB;AACvB,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,oDAAoD;AACpD,wBAAgB,MAAM,IAAI,MAAM,CAiB/B;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,uBAAuB;AACvB,wBAAgB,UAAU,IAAI,MAAM,CASnC;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQtE;AAED,gCAAgC;AAChC,wBAAgB,aAAa,CAAC,IAAI,SAAgB,GAAG,GAAG,CAMvD;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAapE;AAED,6BAA6B;AAC7B,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKnF;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAMrE;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAW5G;AASD,kBAAkB;AAClB,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,oBAAoB;AACpB,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,iBAAiB;AACjB,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,sBAAsB;AACtB,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AA2BD,2BAA2B;AAC3B,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,2CAA2C;AAC3C,wBAAgB,SAAS,IAAI,IAAI,CAuBhC;AAED,sBAAsB;AACtB,wBAAgB,YAAY,IAAI,IAAI,CAInC"}
package/dist/ui.js ADDED
@@ -0,0 +1,242 @@
1
+ // K:BOT Terminal UI — ASCII art branding, colors, spinners, markdown rendering
2
+ // Minimal dependencies. Beautiful terminal output.
3
+ import chalk from 'chalk';
4
+ 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');
14
+ /** Agent color map */
15
+ const AGENT_COLORS = {
16
+ kernel: AMETHYST,
17
+ researcher: SLATE_BLUE,
18
+ coder: SAGE,
19
+ writer: WARM_BROWN,
20
+ analyst: MAUVE,
21
+ aesthete: chalk.hex('#C4956A'),
22
+ guardian: chalk.hex('#8B4513'),
23
+ curator: chalk.hex('#708090'),
24
+ 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: '⚡',
55
+ };
56
+ export function agentColor(agentId) {
57
+ return AGENT_COLORS[agentId] || AMETHYST;
58
+ }
59
+ export function agentIcon(agentId) {
60
+ return AGENT_ICONS[agentId] || '●';
61
+ }
62
+ /** The K:BOT prompt */
63
+ 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');
84
+ }
85
+ /** Compact banner — shown for one-shot mode */
86
+ export function bannerCompact() {
87
+ return `\n ${AMETHYST('K:BOT')} ${chalk.dim('·')} ${AMETHYST_DIM('Kernel Matrix')}\n`;
88
+ }
89
+ /** Auth flow banner */
90
+ 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');
99
+ }
100
+ /** Matrix-style connection animation text */
101
+ 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');
109
+ }
110
+ /** Create a thinking spinner */
111
+ export function createSpinner(text = 'Thinking...') {
112
+ return ora({
113
+ text: AMETHYST_DIM(text),
114
+ color: 'magenta',
115
+ spinner: 'dots',
116
+ });
117
+ }
118
+ /** Print an agent response with icon and agent name */
119
+ export function printResponse(agentId, content) {
120
+ 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);
128
+ for (const line of formatted.split('\n')) {
129
+ console.log(` ${line}`);
130
+ }
131
+ console.log();
132
+ }
133
+ /** Print a tool execution */
134
+ export function printToolCall(toolName, args) {
135
+ 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})`));
139
+ }
140
+ /** Print tool result (truncated) */
141
+ export function printToolResult(result, error) {
142
+ 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}`));
147
+ }
148
+ /** Print usage stats with visual bar */
149
+ export function printUsage(stats) {
150
+ const { tier, monthly_messages } = stats;
151
+ 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 */
168
+ export function printError(message) {
169
+ console.log(chalk.red(` ✗ ${message}`));
170
+ }
171
+ /** Print success */
172
+ export function printSuccess(message) {
173
+ console.log(SAGE(` ✓ ${message}`));
174
+ }
175
+ /** Print info */
176
+ export function printInfo(message) {
177
+ console.log(chalk.dim(` ${message}`));
178
+ }
179
+ /** Print a warning */
180
+ export function printWarn(message) {
181
+ console.log(chalk.yellow(` ⚠ ${message}`));
182
+ }
183
+ /** Simple markdown formatting for terminal */
184
+ function formatMarkdown(text) {
185
+ return text
186
+ // Headers
187
+ .replace(/^### (.+)$/gm, (_m, h) => chalk.bold(AMETHYST_DIM(h)))
188
+ .replace(/^## (.+)$/gm, (_m, h) => chalk.bold.underline(h))
189
+ .replace(/^# (.+)$/gm, (_m, h) => chalk.bold.underline(h))
190
+ // Bold
191
+ .replace(/\*\*(.+?)\*\*/g, (_m, t) => chalk.bold(t))
192
+ // Italic
193
+ .replace(/\*(.+?)\*/g, (_m, t) => chalk.italic(t))
194
+ // 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
+ })
201
+ // Bullet points
202
+ .replace(/^- (.+)$/gm, (_m, t) => `${AMETHYST_DIM('•')} ${t}`)
203
+ .replace(/^\* (.+)$/gm, (_m, t) => `${AMETHYST_DIM('•')} ${t}`)
204
+ // Numbered lists
205
+ .replace(/^(\d+)\. (.+)$/gm, (_m, n, t) => `${chalk.dim(`${n}.`)} ${t}`);
206
+ }
207
+ /** Print a divider line */
208
+ export function divider() {
209
+ console.log(chalk.dim(' ' + '─'.repeat(50)));
210
+ }
211
+ /** Print help screen with ASCII styling */
212
+ export function printHelp() {
213
+ const lines = [
214
+ '',
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`,
225
+ '',
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`,
232
+ '',
233
+ ];
234
+ console.log(lines.join('\n'));
235
+ }
236
+ /** Goodbye message */
237
+ export function printGoodbye() {
238
+ console.log();
239
+ console.log(` ${AMETHYST_DIM('Matrix disconnected.')}`);
240
+ console.log();
241
+ }
242
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/install.sh ADDED
@@ -0,0 +1,76 @@
1
+ #!/bin/bash
2
+ # Install K:BOT — Kernel's terminal AI agent
3
+ # Usage: curl -fsSL https://kernel.chat/install.sh | bash
4
+ #
5
+ # This script:
6
+ # 1. Detects your platform (macOS/Linux, arm64/x64)
7
+ # 2. Installs kbot via npm globally
8
+ # 3. Creates ~/.kbot/ directory
9
+ # 4. Prompts for API key setup
10
+
11
+ set -e
12
+
13
+ BOLD="\033[1m"
14
+ DIM="\033[2m"
15
+ PURPLE="\033[35m"
16
+ GREEN="\033[32m"
17
+ RED="\033[31m"
18
+ RESET="\033[0m"
19
+
20
+ echo ""
21
+ echo -e "${PURPLE}${BOLD}┌─────────────────────────────────────┐${RESET}"
22
+ echo -e "${PURPLE}${BOLD}│ K:BOT — Kernel Terminal Agent │${RESET}"
23
+ echo -e "${PURPLE}${BOLD}│ 17 agents. Multi-model. Your CLI. │${RESET}"
24
+ echo -e "${PURPLE}${BOLD}└─────────────────────────────────────┘${RESET}"
25
+ echo ""
26
+
27
+ # Check Node.js
28
+ if ! command -v node &> /dev/null; then
29
+ echo -e "${RED}Error: Node.js is required (v20+). Install from https://nodejs.org${RESET}"
30
+ exit 1
31
+ fi
32
+
33
+ NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
34
+ if [ "$NODE_VERSION" -lt 20 ]; then
35
+ echo -e "${RED}Error: Node.js v20+ required (found v${NODE_VERSION}). Please upgrade.${RESET}"
36
+ exit 1
37
+ fi
38
+
39
+ # Check npm
40
+ if ! command -v npm &> /dev/null; then
41
+ echo -e "${RED}Error: npm is required. It usually comes with Node.js.${RESET}"
42
+ exit 1
43
+ fi
44
+
45
+ echo -e "${DIM}Installing @antigravity/kbot...${RESET}"
46
+
47
+ # Install globally via npm
48
+ npm install -g @antigravity/kbot 2>/dev/null || {
49
+ echo -e "${DIM}Global install needs permissions. Trying with sudo...${RESET}"
50
+ sudo npm install -g @antigravity/kbot
51
+ }
52
+
53
+ # Create config directory
54
+ mkdir -p "$HOME/.kbot/memory"
55
+ mkdir -p "$HOME/.kbot/history"
56
+
57
+ echo ""
58
+ echo -e "${GREEN}${BOLD}✓ K:BOT installed successfully!${RESET}"
59
+ echo ""
60
+
61
+ # Check if already configured
62
+ if [ -f "$HOME/.kbot/config.json" ]; then
63
+ echo -e "${DIM}API key already configured.${RESET}"
64
+ echo ""
65
+ echo -e " Run ${BOLD}kbot${RESET} to start chatting."
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"
71
+ fi
72
+
73
+ echo ""
74
+ echo -e "${DIM}Documentation: kernel.chat/#/api-docs${RESET}"
75
+ echo -e "${DIM}Support: api@kernel.chat${RESET}"
76
+ echo ""
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@kernel.chat/kbot",
3
+ "version": "1.0.0",
4
+ "description": "K:BOT — Kernel's terminal AI agent. Access 17 specialist agents from your command line.",
5
+ "type": "module",
6
+ "bin": {
7
+ "kbot": "./dist/cli.js"
8
+ },
9
+ "main": "./dist/agent.js",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx src/cli.ts",
13
+ "start": "node dist/cli.js"
14
+ },
15
+ "keywords": ["ai", "cli", "agent", "kernel", "terminal"],
16
+ "author": "Antigravity Group",
17
+ "license": "MIT",
18
+ "dependencies": {
19
+ "chalk": "^5.3.0",
20
+ "commander": "^12.1.0",
21
+ "marked": "^14.0.0",
22
+ "marked-terminal": "^7.2.0",
23
+ "ora": "^8.1.0",
24
+ "readline": "^1.3.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.0.0",
28
+ "tsx": "^4.19.0",
29
+ "typescript": "^5.9.0"
30
+ },
31
+ "engines": {
32
+ "node": ">=20"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "install.sh"
37
+ ]
38
+ }