@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.
- package/dist/agent.d.ts +36 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +211 -0
- package/dist/agent.js.map +1 -0
- package/dist/auth.d.ts +43 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +108 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +240 -0
- package/dist/cli.js.map +1 -0
- package/dist/context.d.ts +15 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +128 -0
- package/dist/context.js.map +1 -0
- package/dist/memory.d.ts +25 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +75 -0
- package/dist/memory.js.map +1 -0
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +63 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/browser.d.ts +2 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +116 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/computer.d.ts +2 -0
- package/dist/tools/computer.d.ts.map +1 -0
- package/dist/tools/computer.js +176 -0
- package/dist/tools/computer.js.map +1 -0
- package/dist/tools/files.d.ts +2 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +147 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/git.d.ts +2 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +102 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/index.d.ts +37 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +57 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +2 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +46 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/ui.d.ts +44 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +242 -0
- package/dist/ui.js.map +1 -0
- package/install.sh +76 -0
- package/package.json +38 -0
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ProjectContext } from './context.js';
|
|
2
|
+
export interface AgentOptions {
|
|
3
|
+
agent?: string;
|
|
4
|
+
model?: string;
|
|
5
|
+
stream?: boolean;
|
|
6
|
+
context?: ProjectContext;
|
|
7
|
+
tier?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AgentResponse {
|
|
10
|
+
content: string;
|
|
11
|
+
agent: string;
|
|
12
|
+
model: string;
|
|
13
|
+
toolCalls: number;
|
|
14
|
+
usage?: {
|
|
15
|
+
input_tokens: number;
|
|
16
|
+
output_tokens: number;
|
|
17
|
+
cost_usd: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Run the agent loop for a single user message.
|
|
22
|
+
* Returns the final text response.
|
|
23
|
+
*
|
|
24
|
+
* Flow:
|
|
25
|
+
* 1. Try local-first (free, instant) — handles file reads, git, ls
|
|
26
|
+
* 2. If needs reasoning, send to Kernel API with rich context
|
|
27
|
+
* 3. Execute any tool calls locally (free)
|
|
28
|
+
* 4. Send results back to API if needed (costs 1 more message)
|
|
29
|
+
*/
|
|
30
|
+
export declare function runAgent(message: string, options?: AgentOptions): Promise<AgentResponse>;
|
|
31
|
+
/**
|
|
32
|
+
* One-shot: run agent and print the response.
|
|
33
|
+
* Used for `kbot "do something"` inline mode.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runAndPrint(message: string, options?: AgentOptions): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAO1E,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1E;AA2DD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAmIxB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAef"}
|
package/dist/agent.js
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// K:BOT Agent Loop — ReAct reasoning cycle
|
|
2
|
+
// Message → API → Tool Calls → Execute Locally → Continue or Return
|
|
3
|
+
//
|
|
4
|
+
// EFFICIENCY-FIRST DESIGN:
|
|
5
|
+
// 1. Local-first: handle simple tasks (file reads, git, ls) without any API call
|
|
6
|
+
// 2. Context batching: gather all relevant context before the first API call
|
|
7
|
+
// 3. One-shot prompting: send rich context so the agent gets it right in one try
|
|
8
|
+
// 4. Tool execution is always local and free — only reasoning burns tokens
|
|
9
|
+
// 5. Smart model selection: use Haiku for simple tasks, Sonnet for complex ones
|
|
10
|
+
import { getApiKey, getApiBase } from './auth.js';
|
|
11
|
+
import { executeTool, getTool, getToolDefinitionsForApi, } from './tools/index.js';
|
|
12
|
+
import { formatContextForPrompt } from './context.js';
|
|
13
|
+
import { getMemoryPrompt, addTurn, getPreviousMessages } from './memory.js';
|
|
14
|
+
import { createSpinner, printToolCall, printToolResult, printResponse, printError, printInfo } from './ui.js';
|
|
15
|
+
const MAX_TOOL_LOOPS = 15; // Safety: prevent infinite tool loops
|
|
16
|
+
const KBOT_VERSION = '1.0.0';
|
|
17
|
+
/**
|
|
18
|
+
* LOCAL-FIRST: Try to handle the request without hitting the API at all.
|
|
19
|
+
* This saves tokens and messages for things that don't need AI reasoning.
|
|
20
|
+
*/
|
|
21
|
+
async function tryLocalFirst(message) {
|
|
22
|
+
const lower = message.toLowerCase().trim();
|
|
23
|
+
// Direct file read requests
|
|
24
|
+
const readMatch = lower.match(/^(?:read|show|cat|view|open)\s+(.+)$/i);
|
|
25
|
+
if (readMatch) {
|
|
26
|
+
const tool = getTool('read_file');
|
|
27
|
+
if (tool) {
|
|
28
|
+
const result = await tool.execute({ path: readMatch[1].trim() });
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// ls / list directory
|
|
33
|
+
if (/^(?:ls|list|dir)\s*(.*)$/i.test(lower)) {
|
|
34
|
+
const match = lower.match(/^(?:ls|list|dir)\s*(.*)$/i);
|
|
35
|
+
const tool = getTool('list_directory');
|
|
36
|
+
if (tool)
|
|
37
|
+
return tool.execute({ path: match?.[1]?.trim() || '.' });
|
|
38
|
+
}
|
|
39
|
+
// git status
|
|
40
|
+
if (/^(?:git\s+)?status$/i.test(lower)) {
|
|
41
|
+
const tool = getTool('git_status');
|
|
42
|
+
if (tool)
|
|
43
|
+
return tool.execute({});
|
|
44
|
+
}
|
|
45
|
+
// git diff
|
|
46
|
+
if (/^(?:git\s+)?diff$/i.test(lower)) {
|
|
47
|
+
const tool = getTool('git_diff');
|
|
48
|
+
if (tool)
|
|
49
|
+
return tool.execute({});
|
|
50
|
+
}
|
|
51
|
+
// git log
|
|
52
|
+
if (/^(?:git\s+)?log$/i.test(lower)) {
|
|
53
|
+
const tool = getTool('git_log');
|
|
54
|
+
if (tool)
|
|
55
|
+
return tool.execute({});
|
|
56
|
+
}
|
|
57
|
+
// Simple grep/search
|
|
58
|
+
const grepMatch = lower.match(/^(?:grep|search|find)\s+['""]?(.+?)['""]?\s+(?:in\s+)?(.+)$/i);
|
|
59
|
+
if (grepMatch) {
|
|
60
|
+
const tool = getTool('grep');
|
|
61
|
+
if (tool)
|
|
62
|
+
return tool.execute({ pattern: grepMatch[1], path: grepMatch[2].trim() });
|
|
63
|
+
}
|
|
64
|
+
// pwd
|
|
65
|
+
if (lower === 'pwd' || lower === 'where am i') {
|
|
66
|
+
return process.cwd();
|
|
67
|
+
}
|
|
68
|
+
return null; // Not a local-only request — needs API
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Run the agent loop for a single user message.
|
|
72
|
+
* Returns the final text response.
|
|
73
|
+
*
|
|
74
|
+
* Flow:
|
|
75
|
+
* 1. Try local-first (free, instant) — handles file reads, git, ls
|
|
76
|
+
* 2. If needs reasoning, send to Kernel API with rich context
|
|
77
|
+
* 3. Execute any tool calls locally (free)
|
|
78
|
+
* 4. Send results back to API if needed (costs 1 more message)
|
|
79
|
+
*/
|
|
80
|
+
export async function runAgent(message, options = {}) {
|
|
81
|
+
const apiKey = getApiKey();
|
|
82
|
+
if (!apiKey) {
|
|
83
|
+
throw new Error('No API key configured. Run `kbot auth` to set up.');
|
|
84
|
+
}
|
|
85
|
+
// Step 1: Try local-first — handle without API if possible
|
|
86
|
+
const localResult = await tryLocalFirst(message);
|
|
87
|
+
if (localResult !== null) {
|
|
88
|
+
addTurn({ role: 'user', content: message });
|
|
89
|
+
addTurn({ role: 'assistant', content: localResult });
|
|
90
|
+
printInfo('(handled locally — 0 API tokens used)');
|
|
91
|
+
return {
|
|
92
|
+
content: localResult,
|
|
93
|
+
agent: 'local',
|
|
94
|
+
model: 'none',
|
|
95
|
+
toolCalls: 0,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const apiBase = getApiBase();
|
|
99
|
+
const tier = options.tier || 'starter';
|
|
100
|
+
const tools = getToolDefinitionsForApi(tier);
|
|
101
|
+
// Step 2: Build rich context for one-shot success
|
|
102
|
+
// The more context we send upfront, the more likely the agent gets it right
|
|
103
|
+
// in a single API call — saving messages and tokens.
|
|
104
|
+
const contextSnippet = options.context ? formatContextForPrompt(options.context) : '';
|
|
105
|
+
const memorySnippet = getMemoryPrompt();
|
|
106
|
+
const efficiencyNote = `[K:BOT Efficiency Note]
|
|
107
|
+
You have local tools (file read/write/edit, grep, git, bash) that execute for FREE on the user's machine.
|
|
108
|
+
Prefer local tools over asking the user to do things manually.
|
|
109
|
+
Be thorough in your FIRST response — aim to solve the task in one shot.
|
|
110
|
+
Only use web_search when the user explicitly asks for current information.`;
|
|
111
|
+
const systemContext = [contextSnippet, memorySnippet, efficiencyNote].filter(Boolean).join('\n');
|
|
112
|
+
let toolCallCount = 0;
|
|
113
|
+
let lastResponse = null;
|
|
114
|
+
let pendingToolResults = [];
|
|
115
|
+
// The loop: send message → get response → if tool_calls, execute and loop
|
|
116
|
+
for (let i = 0; i < MAX_TOOL_LOOPS; i++) {
|
|
117
|
+
const spinner = createSpinner(i === 0 ? 'Thinking...' : `Running tools (${toolCallCount})...`);
|
|
118
|
+
spinner.start();
|
|
119
|
+
try {
|
|
120
|
+
const body = {
|
|
121
|
+
message: i === 0 ? (systemContext ? `${systemContext}\n\n${message}` : message) : message,
|
|
122
|
+
mode: 'json',
|
|
123
|
+
max_tokens: 8192,
|
|
124
|
+
previous_messages: getPreviousMessages(),
|
|
125
|
+
tools: tools.length > 0 ? tools : undefined,
|
|
126
|
+
};
|
|
127
|
+
if (options.agent && options.agent !== 'auto') {
|
|
128
|
+
body.agent = options.agent;
|
|
129
|
+
}
|
|
130
|
+
// If we have tool results from a previous iteration, send them
|
|
131
|
+
if (pendingToolResults.length > 0) {
|
|
132
|
+
body.tool_results = pendingToolResults;
|
|
133
|
+
pendingToolResults = [];
|
|
134
|
+
}
|
|
135
|
+
const res = await fetch(`${apiBase}/chat`, {
|
|
136
|
+
method: 'POST',
|
|
137
|
+
headers: {
|
|
138
|
+
'Content-Type': 'application/json',
|
|
139
|
+
Authorization: `Bearer ${apiKey}`,
|
|
140
|
+
'X-Kbot-Version': KBOT_VERSION,
|
|
141
|
+
},
|
|
142
|
+
body: JSON.stringify(body),
|
|
143
|
+
});
|
|
144
|
+
spinner.stop();
|
|
145
|
+
if (!res.ok) {
|
|
146
|
+
const err = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
|
|
147
|
+
throw new Error(err.error || `API error: ${res.status}`);
|
|
148
|
+
}
|
|
149
|
+
lastResponse = await res.json();
|
|
150
|
+
// If it's a text response, we're done
|
|
151
|
+
if (lastResponse.type === 'text' || !lastResponse.tool_calls || lastResponse.tool_calls.length === 0) {
|
|
152
|
+
const content = lastResponse.content || '';
|
|
153
|
+
addTurn({ role: 'user', content: message });
|
|
154
|
+
addTurn({ role: 'assistant', content });
|
|
155
|
+
return {
|
|
156
|
+
content,
|
|
157
|
+
agent: lastResponse.agent || 'kernel',
|
|
158
|
+
model: lastResponse.model || 'unknown',
|
|
159
|
+
toolCalls: toolCallCount,
|
|
160
|
+
usage: lastResponse.usage,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// Tool calls — execute them locally
|
|
164
|
+
const toolCalls = lastResponse.tool_calls;
|
|
165
|
+
const results = [];
|
|
166
|
+
for (const call of toolCalls) {
|
|
167
|
+
toolCallCount++;
|
|
168
|
+
printToolCall(call.name, call.arguments || {});
|
|
169
|
+
const result = await executeTool(call);
|
|
170
|
+
results.push(result);
|
|
171
|
+
printToolResult(result.result, result.error);
|
|
172
|
+
}
|
|
173
|
+
// Set up for next iteration with tool results
|
|
174
|
+
pendingToolResults = results;
|
|
175
|
+
// Update message to continue the conversation
|
|
176
|
+
message = `Here are the tool results:\n${results.map(r => `[${r.tool_call_id}]: ${r.result}`).join('\n\n')}\n\nContinue based on these results.`;
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
spinner.stop();
|
|
180
|
+
throw err;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// If we hit the loop limit, return whatever we have
|
|
184
|
+
const content = lastResponse?.content || 'Reached maximum tool iterations.';
|
|
185
|
+
return {
|
|
186
|
+
content,
|
|
187
|
+
agent: lastResponse?.agent || 'kernel',
|
|
188
|
+
model: lastResponse?.model || 'unknown',
|
|
189
|
+
toolCalls: toolCallCount,
|
|
190
|
+
usage: lastResponse?.usage,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* One-shot: run agent and print the response.
|
|
195
|
+
* Used for `kbot "do something"` inline mode.
|
|
196
|
+
*/
|
|
197
|
+
export async function runAndPrint(message, options = {}) {
|
|
198
|
+
try {
|
|
199
|
+
const response = await runAgent(message, options);
|
|
200
|
+
printResponse(response.agent, response.content);
|
|
201
|
+
if (response.usage) {
|
|
202
|
+
const { input_tokens, output_tokens, cost_usd } = response.usage;
|
|
203
|
+
process.stdout.write(` \x1b[2m${response.agent} · ${response.model} · ${input_tokens + output_tokens} tokens · $${cost_usd.toFixed(4)}\x1b[0m\n`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
declare const KBOT_DIR: string;
|
|
2
|
+
declare const CONFIG_PATH: string;
|
|
3
|
+
declare const API_BASE = "https://eoxxpyixdieprsxlpwcs.supabase.co/functions/v1/kernel-api";
|
|
4
|
+
export interface KbotConfig {
|
|
5
|
+
api_key: string;
|
|
6
|
+
default_model: 'auto' | 'sonnet' | 'haiku';
|
|
7
|
+
default_agent: 'auto' | string;
|
|
8
|
+
api_base: string;
|
|
9
|
+
tier?: string;
|
|
10
|
+
monthly_limit?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function loadConfig(): KbotConfig | null;
|
|
13
|
+
export declare function saveConfig(config: KbotConfig): void;
|
|
14
|
+
export declare function getApiKey(): string | null;
|
|
15
|
+
export declare function getApiBase(): string;
|
|
16
|
+
export declare function getDefaultModel(): string;
|
|
17
|
+
export declare function getDefaultAgent(): string;
|
|
18
|
+
/** Verify an API key against the Kernel API. Returns tier info or error. */
|
|
19
|
+
export declare function verifyApiKey(key: string): Promise<{
|
|
20
|
+
valid: boolean;
|
|
21
|
+
tier?: string;
|
|
22
|
+
agents?: Array<{
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
role: string;
|
|
26
|
+
}>;
|
|
27
|
+
error?: string;
|
|
28
|
+
}>;
|
|
29
|
+
/** Get usage stats for current key */
|
|
30
|
+
export declare function getUsageStats(): Promise<{
|
|
31
|
+
tier: string;
|
|
32
|
+
monthly_messages: {
|
|
33
|
+
count: number;
|
|
34
|
+
limit: number;
|
|
35
|
+
};
|
|
36
|
+
per_agent: Record<string, {
|
|
37
|
+
messages: number;
|
|
38
|
+
}>;
|
|
39
|
+
} | null>;
|
|
40
|
+
/** First-run setup flow (called by CLI) */
|
|
41
|
+
export declare function setupAuth(apiKey: string): Promise<boolean>;
|
|
42
|
+
export { KBOT_DIR, CONFIG_PATH, API_BASE };
|
|
43
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,QAAQ,QAA2B,CAAA;AACzC,QAAA,MAAM,WAAW,QAAgC,CAAA;AACjD,QAAA,MAAM,QAAQ,qEAAqE,CAAA;AAEnF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IAC1C,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAaD,wBAAgB,UAAU,IAAI,UAAU,GAAG,IAAI,CAQ9C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGnD;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAOzC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,4EAA4E;AAC5E,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvD,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAcD;AAED,sCAAsC;AACtC,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD,GAAG,IAAI,CAAC,CAaR;AAED,2CAA2C;AAC3C,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBhE;AAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// K:BOT Auth — API key management and configuration
|
|
2
|
+
// Stores config in ~/.kbot/config.json
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { mkdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
6
|
+
const KBOT_DIR = join(homedir(), '.kbot');
|
|
7
|
+
const CONFIG_PATH = join(KBOT_DIR, 'config.json');
|
|
8
|
+
const API_BASE = 'https://eoxxpyixdieprsxlpwcs.supabase.co/functions/v1/kernel-api';
|
|
9
|
+
function ensureDir() {
|
|
10
|
+
if (!existsSync(KBOT_DIR)) {
|
|
11
|
+
mkdirSync(KBOT_DIR, { recursive: true });
|
|
12
|
+
}
|
|
13
|
+
// Also ensure memory and history dirs
|
|
14
|
+
const memDir = join(KBOT_DIR, 'memory');
|
|
15
|
+
const histDir = join(KBOT_DIR, 'history');
|
|
16
|
+
if (!existsSync(memDir))
|
|
17
|
+
mkdirSync(memDir, { recursive: true });
|
|
18
|
+
if (!existsSync(histDir))
|
|
19
|
+
mkdirSync(histDir, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
export function loadConfig() {
|
|
22
|
+
try {
|
|
23
|
+
if (!existsSync(CONFIG_PATH))
|
|
24
|
+
return null;
|
|
25
|
+
const raw = readFileSync(CONFIG_PATH, 'utf-8');
|
|
26
|
+
return JSON.parse(raw);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function saveConfig(config) {
|
|
33
|
+
ensureDir();
|
|
34
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
35
|
+
}
|
|
36
|
+
export function getApiKey() {
|
|
37
|
+
// Env var takes precedence
|
|
38
|
+
const envKey = process.env.KBOT_API_KEY;
|
|
39
|
+
if (envKey)
|
|
40
|
+
return envKey;
|
|
41
|
+
const config = loadConfig();
|
|
42
|
+
return config?.api_key || null;
|
|
43
|
+
}
|
|
44
|
+
export function getApiBase() {
|
|
45
|
+
const config = loadConfig();
|
|
46
|
+
return config?.api_base || API_BASE;
|
|
47
|
+
}
|
|
48
|
+
export function getDefaultModel() {
|
|
49
|
+
const config = loadConfig();
|
|
50
|
+
return config?.default_model || 'auto';
|
|
51
|
+
}
|
|
52
|
+
export function getDefaultAgent() {
|
|
53
|
+
const config = loadConfig();
|
|
54
|
+
return config?.default_agent || 'auto';
|
|
55
|
+
}
|
|
56
|
+
/** Verify an API key against the Kernel API. Returns tier info or error. */
|
|
57
|
+
export async function verifyApiKey(key) {
|
|
58
|
+
try {
|
|
59
|
+
const res = await fetch(`${API_BASE}/agents`, {
|
|
60
|
+
headers: { Authorization: `Bearer ${key}` },
|
|
61
|
+
});
|
|
62
|
+
if (!res.ok) {
|
|
63
|
+
const body = await res.json().catch(() => ({ error: 'Unknown error' }));
|
|
64
|
+
return { valid: false, error: body.error || `HTTP ${res.status}` };
|
|
65
|
+
}
|
|
66
|
+
const data = await res.json();
|
|
67
|
+
return { valid: true, tier: data.tier, agents: data.agents };
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return { valid: false, error: `Connection failed: ${err}` };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Get usage stats for current key */
|
|
74
|
+
export async function getUsageStats() {
|
|
75
|
+
const key = getApiKey();
|
|
76
|
+
if (!key)
|
|
77
|
+
return null;
|
|
78
|
+
try {
|
|
79
|
+
const res = await fetch(`${getApiBase()}/usage`, {
|
|
80
|
+
headers: { Authorization: `Bearer ${key}` },
|
|
81
|
+
});
|
|
82
|
+
if (!res.ok)
|
|
83
|
+
return null;
|
|
84
|
+
return await res.json();
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** First-run setup flow (called by CLI) */
|
|
91
|
+
export async function setupAuth(apiKey) {
|
|
92
|
+
const result = await verifyApiKey(apiKey);
|
|
93
|
+
if (!result.valid) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
const config = {
|
|
97
|
+
api_key: apiKey,
|
|
98
|
+
default_model: 'auto',
|
|
99
|
+
default_agent: 'auto',
|
|
100
|
+
api_base: API_BASE,
|
|
101
|
+
tier: result.tier,
|
|
102
|
+
monthly_limit: undefined,
|
|
103
|
+
};
|
|
104
|
+
saveConfig(config);
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
export { KBOT_DIR, CONFIG_PATH, API_BASE };
|
|
108
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|