@puukis/core 0.1.0 → 0.1.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/dist/cli/commands/onboarding.d.ts +3 -0
- package/dist/cli/commands/onboarding.d.ts.map +1 -0
- package/dist/cli/commands/onboarding.js +548 -0
- package/dist/cli/commands/onboarding.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/package.json +8 -8
- package/LICENSE +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboarding.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAkCrE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F1E"}
|
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { promises as fs } from 'node:fs';
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
import * as readline from 'node:readline';
|
|
6
|
+
import { createInterface } from 'node:readline/promises';
|
|
7
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
8
|
+
import { getFlagString, hasFlag } from '../argv.js';
|
|
9
|
+
import { getConfigDir, updateEnvFile } from '../../config/env.js';
|
|
10
|
+
import { runAuthCommand } from './auth.js';
|
|
11
|
+
const RESET = '\x1b[0m';
|
|
12
|
+
const BOLD = '\x1b[1m';
|
|
13
|
+
const ACCENT = '\x1b[38;2;255;90;45m';
|
|
14
|
+
const ACCENT_DIM = '\x1b[38;2;209;74;34m';
|
|
15
|
+
const INFO = '\x1b[38;2;255;138;91m';
|
|
16
|
+
const SUCCESS = '\x1b[38;2;47;191;113m';
|
|
17
|
+
const WARN = '\x1b[38;2;255;176;32m';
|
|
18
|
+
const MUTED = '\x1b[38;2;139;127;119m';
|
|
19
|
+
const DEFAULT_CHAT_URL = 'http://localhost:18790';
|
|
20
|
+
const DEFAULT_ALLOWED_BINARIES = ['git', 'ls', 'npm', 'cat', 'node', 'python3'];
|
|
21
|
+
export async function runOnboardingCommand(args) {
|
|
22
|
+
const promptable = isPromptable();
|
|
23
|
+
const noPrompt = hasFlag(args.flags, 'no-prompt') || !promptable;
|
|
24
|
+
const defaultsOnly = hasFlag(args.flags, 'defaults') || noPrompt;
|
|
25
|
+
const noRun = hasFlag(args.flags, 'no-run');
|
|
26
|
+
const state = createDefaultState();
|
|
27
|
+
const workspaceFlag = getFlagString(args.flags, 'workspace-path', '').trim();
|
|
28
|
+
if (workspaceFlag.length > 0) {
|
|
29
|
+
state.workspacePath = expandHomePath(workspaceFlag);
|
|
30
|
+
}
|
|
31
|
+
printHeader();
|
|
32
|
+
if (defaultsOnly) {
|
|
33
|
+
if (!promptable) {
|
|
34
|
+
logWarn('No interactive TTY detected. Applying deterministic defaults.');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
logInfo('Applying deterministic defaults.');
|
|
38
|
+
}
|
|
39
|
+
await persistOnboardingState(state);
|
|
40
|
+
await finishOnboarding(state, {
|
|
41
|
+
noPrompt,
|
|
42
|
+
noRun,
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const continueSetup = await selectMenu('Continue setup?', [
|
|
47
|
+
{
|
|
48
|
+
label: 'Continue setup',
|
|
49
|
+
description: 'Configure provider, auth, and security mode now.',
|
|
50
|
+
value: true,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
label: 'Exit',
|
|
54
|
+
description: 'Leave existing configuration unchanged.',
|
|
55
|
+
value: false,
|
|
56
|
+
},
|
|
57
|
+
], 0);
|
|
58
|
+
if (!continueSetup) {
|
|
59
|
+
logWarn('Onboarding cancelled.');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const spicyMode = await selectMenu('Choose security mode', [
|
|
63
|
+
{
|
|
64
|
+
label: 'Safe Mode (Recommended)',
|
|
65
|
+
description: 'Sandboxed workspace with safer defaults.',
|
|
66
|
+
value: false,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: 'Spicy Mode',
|
|
70
|
+
description: 'Full host access. High-risk, unrestricted execution.',
|
|
71
|
+
value: true,
|
|
72
|
+
},
|
|
73
|
+
], 0);
|
|
74
|
+
if (spicyMode) {
|
|
75
|
+
const ack = await promptText('Type I ACCEPT THE RISK to enable Spicy Mode (or press Enter to keep Safe Mode)', '');
|
|
76
|
+
if (ack === 'I ACCEPT THE RISK') {
|
|
77
|
+
state.spicyModeEnabled = true;
|
|
78
|
+
logWarn('Spicy Mode enabled.');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
state.spicyModeEnabled = false;
|
|
82
|
+
logOk('Safe Mode kept.');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
state.spicyModeEnabled = false;
|
|
87
|
+
logOk('Safe Mode enabled.');
|
|
88
|
+
}
|
|
89
|
+
await collectProviderSettings(state, args);
|
|
90
|
+
await persistOnboardingState(state);
|
|
91
|
+
await finishOnboarding(state, {
|
|
92
|
+
noPrompt: false,
|
|
93
|
+
noRun,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function printHeader() {
|
|
97
|
+
console.log('');
|
|
98
|
+
for (const line of renderStaticPanel('Keygate Onboarding', 'Configure provider, auth, and startup behavior.')) {
|
|
99
|
+
console.log(line);
|
|
100
|
+
}
|
|
101
|
+
console.log('');
|
|
102
|
+
}
|
|
103
|
+
function createDefaultState() {
|
|
104
|
+
return {
|
|
105
|
+
provider: 'openai',
|
|
106
|
+
model: 'gpt-4o',
|
|
107
|
+
apiKey: '',
|
|
108
|
+
ollamaHost: '',
|
|
109
|
+
spicyModeEnabled: false,
|
|
110
|
+
workspacePath: path.join(os.homedir(), 'keygate-workspace'),
|
|
111
|
+
port: 18790,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async function collectProviderSettings(state, args) {
|
|
115
|
+
while (true) {
|
|
116
|
+
const provider = await selectMenu('Choose provider', [
|
|
117
|
+
{
|
|
118
|
+
label: 'OpenAI',
|
|
119
|
+
description: 'Use OpenAI API key and model selection.',
|
|
120
|
+
value: 'openai',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
label: 'OpenAI Codex (ChatGPT OAuth)',
|
|
124
|
+
description: 'Runs keygate auth login immediately.',
|
|
125
|
+
value: 'openai-codex',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
label: 'Google Gemini',
|
|
129
|
+
description: 'Use Gemini API key and model selection.',
|
|
130
|
+
value: 'gemini',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
label: 'Ollama',
|
|
134
|
+
description: 'Use local Ollama endpoint and local model.',
|
|
135
|
+
value: 'ollama',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
label: 'Skip for now',
|
|
139
|
+
description: 'Use safe default provider config.',
|
|
140
|
+
value: 'skip',
|
|
141
|
+
},
|
|
142
|
+
], 1);
|
|
143
|
+
if (provider === 'skip') {
|
|
144
|
+
state.provider = 'openai';
|
|
145
|
+
state.model = 'gpt-4o';
|
|
146
|
+
state.apiKey = '';
|
|
147
|
+
state.ollamaHost = '';
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (provider === 'openai') {
|
|
151
|
+
state.provider = 'openai';
|
|
152
|
+
state.model = await promptText('OpenAI model', 'gpt-4o');
|
|
153
|
+
state.apiKey = await promptSecret('OpenAI API key');
|
|
154
|
+
state.ollamaHost = '';
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (provider === 'gemini') {
|
|
158
|
+
state.provider = 'gemini';
|
|
159
|
+
state.model = await promptText('Gemini model', 'gemini-1.5-pro');
|
|
160
|
+
state.apiKey = await promptSecret('Gemini API key');
|
|
161
|
+
state.ollamaHost = '';
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (provider === 'ollama') {
|
|
165
|
+
state.provider = 'ollama';
|
|
166
|
+
state.model = await promptText('Ollama model', 'llama3');
|
|
167
|
+
state.ollamaHost = await promptText('Ollama host', 'http://127.0.0.1:11434');
|
|
168
|
+
state.apiKey = '';
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
state.provider = 'openai-codex';
|
|
172
|
+
state.model = await promptText('Codex model', 'openai-codex/gpt-5.3');
|
|
173
|
+
state.apiKey = '';
|
|
174
|
+
state.ollamaHost = '';
|
|
175
|
+
const loggedIn = await runCodexLogin(args);
|
|
176
|
+
if (loggedIn) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
logInfo('Returning to provider selection...');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function runCodexLogin(args) {
|
|
183
|
+
try {
|
|
184
|
+
await runAuthCommand({
|
|
185
|
+
positional: ['auth', 'login'],
|
|
186
|
+
flags: {
|
|
187
|
+
provider: 'openai-codex',
|
|
188
|
+
...(hasFlag(args.flags, 'device-auth') ? { 'device-auth': true } : {}),
|
|
189
|
+
...(hasFlag(args.flags, 'no-device-fallback') ? { 'no-device-fallback': true } : {}),
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
logOk('Codex login completed.');
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
197
|
+
logWarn('Codex login failed or was cancelled.');
|
|
198
|
+
console.log(`${MUTED}${message}${RESET}`);
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async function persistOnboardingState(state) {
|
|
203
|
+
const configDir = getConfigDir();
|
|
204
|
+
const workspacePath = expandHomePath(state.workspacePath);
|
|
205
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
206
|
+
await fs.mkdir(workspacePath, { recursive: true });
|
|
207
|
+
await updateEnvFile({
|
|
208
|
+
LLM_PROVIDER: state.provider,
|
|
209
|
+
LLM_MODEL: state.model,
|
|
210
|
+
LLM_API_KEY: state.apiKey,
|
|
211
|
+
LLM_OLLAMA_HOST: state.ollamaHost,
|
|
212
|
+
SPICY_MODE_ENABLED: state.spicyModeEnabled ? 'true' : 'false',
|
|
213
|
+
WORKSPACE_PATH: workspacePath,
|
|
214
|
+
PORT: String(state.port),
|
|
215
|
+
});
|
|
216
|
+
const config = {
|
|
217
|
+
llm: {
|
|
218
|
+
provider: state.provider,
|
|
219
|
+
model: state.model,
|
|
220
|
+
},
|
|
221
|
+
security: {
|
|
222
|
+
spicyModeEnabled: state.spicyModeEnabled,
|
|
223
|
+
workspacePath,
|
|
224
|
+
allowedBinaries: DEFAULT_ALLOWED_BINARIES,
|
|
225
|
+
},
|
|
226
|
+
server: {
|
|
227
|
+
port: state.port,
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
await fs.writeFile(path.join(configDir, 'config.json'), `${JSON.stringify(config, null, 2)}\n`, 'utf8');
|
|
231
|
+
}
|
|
232
|
+
async function finishOnboarding(state, options) {
|
|
233
|
+
const chatUrl = getChatUrl();
|
|
234
|
+
console.log('');
|
|
235
|
+
for (const line of renderStaticPanel('Onboarding Complete', 'Keygate is configured and ready.')) {
|
|
236
|
+
console.log(line);
|
|
237
|
+
}
|
|
238
|
+
logOk(`Provider: ${state.provider}`);
|
|
239
|
+
logOk(`Model: ${state.model}`);
|
|
240
|
+
logOk(`Spicy Mode Enabled: ${state.spicyModeEnabled}`);
|
|
241
|
+
logInfo(`Chat URL: ${chatUrl}`);
|
|
242
|
+
if (options.noRun || options.noPrompt || !isPromptable()) {
|
|
243
|
+
printManualRunInstructions(chatUrl);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const runNow = await selectMenu('Run web app now or later manually?', [
|
|
247
|
+
{
|
|
248
|
+
label: 'Run now',
|
|
249
|
+
description: 'Start keygate and open the web UI automatically.',
|
|
250
|
+
value: true,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
label: 'Run later manually',
|
|
254
|
+
description: 'Show command and URL only.',
|
|
255
|
+
value: false,
|
|
256
|
+
},
|
|
257
|
+
], 0);
|
|
258
|
+
if (!runNow) {
|
|
259
|
+
printManualRunInstructions(chatUrl);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
queueOpenUrl(chatUrl);
|
|
263
|
+
logInfo('Starting keygate...');
|
|
264
|
+
const exitCode = await runKeygateServe();
|
|
265
|
+
if (exitCode !== 0) {
|
|
266
|
+
process.exitCode = exitCode;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
function printManualRunInstructions(chatUrl) {
|
|
270
|
+
console.log('');
|
|
271
|
+
console.log(`${MUTED}Run manually when ready:${RESET}`);
|
|
272
|
+
console.log(`${BOLD} keygate${RESET}`);
|
|
273
|
+
console.log(`${MUTED}Then open:${RESET} ${chatUrl}`);
|
|
274
|
+
}
|
|
275
|
+
function queueOpenUrl(url) {
|
|
276
|
+
setTimeout(() => {
|
|
277
|
+
void openExternalUrl(url);
|
|
278
|
+
}, 1200);
|
|
279
|
+
}
|
|
280
|
+
function getChatUrl() {
|
|
281
|
+
const configuredUrl = process.env['KEYGATE_CHAT_URL']?.trim();
|
|
282
|
+
if (!configuredUrl) {
|
|
283
|
+
return DEFAULT_CHAT_URL;
|
|
284
|
+
}
|
|
285
|
+
return configuredUrl;
|
|
286
|
+
}
|
|
287
|
+
async function runKeygateServe() {
|
|
288
|
+
const entry = process.argv[1] ? path.resolve(process.argv[1]) : '';
|
|
289
|
+
const command = entry.length > 0 ? process.execPath : 'keygate';
|
|
290
|
+
const args = entry.length > 0 ? [entry] : [];
|
|
291
|
+
return new Promise((resolve, reject) => {
|
|
292
|
+
const child = spawn(command, args, {
|
|
293
|
+
stdio: 'inherit',
|
|
294
|
+
env: process.env,
|
|
295
|
+
});
|
|
296
|
+
child.once('error', (error) => {
|
|
297
|
+
reject(error);
|
|
298
|
+
});
|
|
299
|
+
child.once('exit', (code) => {
|
|
300
|
+
resolve(code ?? 0);
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
async function openExternalUrl(url) {
|
|
305
|
+
const platform = process.platform;
|
|
306
|
+
const command = platform === 'darwin'
|
|
307
|
+
? { cmd: 'open', args: [url] }
|
|
308
|
+
: platform === 'win32'
|
|
309
|
+
? { cmd: 'cmd', args: ['/c', 'start', '', url] }
|
|
310
|
+
: { cmd: 'xdg-open', args: [url] };
|
|
311
|
+
return new Promise((resolve) => {
|
|
312
|
+
const child = spawn(command.cmd, command.args, {
|
|
313
|
+
stdio: 'ignore',
|
|
314
|
+
detached: platform !== 'win32',
|
|
315
|
+
});
|
|
316
|
+
child.once('error', () => {
|
|
317
|
+
resolve(false);
|
|
318
|
+
});
|
|
319
|
+
child.once('spawn', () => {
|
|
320
|
+
child.unref();
|
|
321
|
+
resolve(true);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
async function promptText(prompt, defaultValue) {
|
|
326
|
+
const rl = createInterface({ input, output });
|
|
327
|
+
try {
|
|
328
|
+
const suffix = defaultValue.length > 0 ? ` [${defaultValue}]` : '';
|
|
329
|
+
const answer = (await rl.question(`${INFO}›${RESET} ${prompt}${suffix}: `)).trim();
|
|
330
|
+
if (answer.length === 0) {
|
|
331
|
+
return defaultValue;
|
|
332
|
+
}
|
|
333
|
+
return answer;
|
|
334
|
+
}
|
|
335
|
+
finally {
|
|
336
|
+
rl.close();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
async function promptSecret(prompt) {
|
|
340
|
+
if (!isPromptable()) {
|
|
341
|
+
return '';
|
|
342
|
+
}
|
|
343
|
+
const stdin = input;
|
|
344
|
+
const previousRawMode = stdin.isRaw ?? false;
|
|
345
|
+
let value = '';
|
|
346
|
+
output.write(`${INFO}›${RESET} ${prompt}: `);
|
|
347
|
+
return new Promise((resolve, reject) => {
|
|
348
|
+
const onData = (chunk) => {
|
|
349
|
+
const text = chunk.toString('utf8');
|
|
350
|
+
for (const char of text) {
|
|
351
|
+
if (char === '\r' || char === '\n') {
|
|
352
|
+
cleanup();
|
|
353
|
+
output.write('\n');
|
|
354
|
+
resolve(value);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
if (char === '\u0003') {
|
|
358
|
+
cleanup();
|
|
359
|
+
output.write('\n');
|
|
360
|
+
reject(new Error('Onboarding cancelled.'));
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (char === '\u007f' || char === '\b') {
|
|
364
|
+
if (value.length > 0) {
|
|
365
|
+
value = value.slice(0, -1);
|
|
366
|
+
output.write('\b \b');
|
|
367
|
+
}
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
value += char;
|
|
371
|
+
output.write('•');
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
const cleanup = () => {
|
|
375
|
+
stdin.off('data', onData);
|
|
376
|
+
if (stdin.setRawMode) {
|
|
377
|
+
stdin.setRawMode(previousRawMode);
|
|
378
|
+
}
|
|
379
|
+
stdin.pause();
|
|
380
|
+
};
|
|
381
|
+
if (stdin.setRawMode) {
|
|
382
|
+
stdin.setRawMode(true);
|
|
383
|
+
}
|
|
384
|
+
stdin.resume();
|
|
385
|
+
stdin.on('data', onData);
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
async function selectMenu(title, options, defaultIndex) {
|
|
389
|
+
if (!isPromptable()) {
|
|
390
|
+
return options[Math.max(0, Math.min(defaultIndex, options.length - 1))].value;
|
|
391
|
+
}
|
|
392
|
+
if (options.length === 0) {
|
|
393
|
+
throw new Error('selectMenu requires at least one option.');
|
|
394
|
+
}
|
|
395
|
+
const stdin = input;
|
|
396
|
+
const previousRawMode = stdin.isRaw ?? false;
|
|
397
|
+
let selectedIndex = Math.max(0, Math.min(defaultIndex, options.length - 1));
|
|
398
|
+
let renderedLineCount = 0;
|
|
399
|
+
readline.emitKeypressEvents(stdin);
|
|
400
|
+
return new Promise((resolve, reject) => {
|
|
401
|
+
const cleanup = () => {
|
|
402
|
+
stdin.off('keypress', onKeypress);
|
|
403
|
+
if (stdin.setRawMode) {
|
|
404
|
+
stdin.setRawMode(previousRawMode);
|
|
405
|
+
}
|
|
406
|
+
stdin.pause();
|
|
407
|
+
clearRenderedFrame(renderedLineCount);
|
|
408
|
+
output.write('\x1b[?25h');
|
|
409
|
+
logInfo(`${title}: ${options[selectedIndex].label}`);
|
|
410
|
+
};
|
|
411
|
+
const render = () => {
|
|
412
|
+
clearRenderedFrame(renderedLineCount);
|
|
413
|
+
const lines = renderMenuFrame(title, options, selectedIndex);
|
|
414
|
+
output.write(`${lines.join('\n')}\n`);
|
|
415
|
+
renderedLineCount = lines.length;
|
|
416
|
+
};
|
|
417
|
+
const onKeypress = (str, key) => {
|
|
418
|
+
if (key?.ctrl && key.name === 'c') {
|
|
419
|
+
cleanup();
|
|
420
|
+
reject(new Error('Onboarding cancelled.'));
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
if (key?.name === 'up' || key?.name === 'k') {
|
|
424
|
+
selectedIndex = selectedIndex <= 0 ? options.length - 1 : selectedIndex - 1;
|
|
425
|
+
render();
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
if (key?.name === 'down' || key?.name === 'j') {
|
|
429
|
+
selectedIndex = (selectedIndex + 1) % options.length;
|
|
430
|
+
render();
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
if (key?.name === 'return' || key?.name === 'enter') {
|
|
434
|
+
const value = options[selectedIndex].value;
|
|
435
|
+
cleanup();
|
|
436
|
+
resolve(value);
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
if (/^[1-9]$/.test(str)) {
|
|
440
|
+
const numericIndex = Number.parseInt(str, 10) - 1;
|
|
441
|
+
if (numericIndex >= 0 && numericIndex < options.length) {
|
|
442
|
+
selectedIndex = numericIndex;
|
|
443
|
+
render();
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
output.write('\x1b[?25l');
|
|
448
|
+
if (stdin.setRawMode) {
|
|
449
|
+
stdin.setRawMode(true);
|
|
450
|
+
}
|
|
451
|
+
stdin.resume();
|
|
452
|
+
stdin.on('keypress', onKeypress);
|
|
453
|
+
render();
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
function renderMenuFrame(title, options, selectedIndex) {
|
|
457
|
+
const menuWidth = getPreferredMenuWidth();
|
|
458
|
+
const innerWidth = menuWidth - 2;
|
|
459
|
+
const contentWidth = innerWidth - 2;
|
|
460
|
+
const lines = [];
|
|
461
|
+
lines.push(`${ACCENT}┌${'─'.repeat(innerWidth)}┐${RESET}`);
|
|
462
|
+
lines.push(`${ACCENT}│${RESET} ${BOLD}${padText(title, contentWidth)}${RESET} ${ACCENT}│${RESET}`);
|
|
463
|
+
lines.push(`${ACCENT}├${'─'.repeat(innerWidth)}┤${RESET}`);
|
|
464
|
+
options.forEach((option, index) => {
|
|
465
|
+
const isSelected = index === selectedIndex;
|
|
466
|
+
const marker = isSelected ? `${ACCENT}❯${RESET}` : ' ';
|
|
467
|
+
const labelPrefix = `${index + 1}) `;
|
|
468
|
+
const labelText = `${labelPrefix}${option.label}`;
|
|
469
|
+
const label = isSelected ? `${BOLD}${padText(labelText, contentWidth - 2)}${RESET}` : padText(labelText, contentWidth - 2);
|
|
470
|
+
lines.push(`${ACCENT}│${RESET} ${marker} ${label} ${ACCENT}│${RESET}`);
|
|
471
|
+
lines.push(`${ACCENT}│${RESET} ${MUTED}${padText(option.description, contentWidth - 3)}${RESET} ${ACCENT}│${RESET}`);
|
|
472
|
+
});
|
|
473
|
+
lines.push(`${ACCENT}└${'─'.repeat(innerWidth)}┘${RESET}`);
|
|
474
|
+
lines.push(`${ACCENT_DIM} ↑/↓ move • Enter select • 1-9 quick select • Ctrl+C cancel${RESET}`);
|
|
475
|
+
return lines;
|
|
476
|
+
}
|
|
477
|
+
function renderStaticPanel(title, subtitle) {
|
|
478
|
+
const panelWidth = getPreferredMenuWidth();
|
|
479
|
+
const innerWidth = panelWidth - 2;
|
|
480
|
+
const contentWidth = innerWidth - 2;
|
|
481
|
+
return [
|
|
482
|
+
`${ACCENT}┌${'─'.repeat(innerWidth)}┐${RESET}`,
|
|
483
|
+
`${ACCENT}│${RESET} ${BOLD}${padText(title, contentWidth)}${RESET} ${ACCENT}│${RESET}`,
|
|
484
|
+
`${ACCENT}├${'─'.repeat(innerWidth)}┤${RESET}`,
|
|
485
|
+
`${ACCENT}│${RESET} ${MUTED}${padText(subtitle, contentWidth)}${RESET} ${ACCENT}│${RESET}`,
|
|
486
|
+
`${ACCENT}└${'─'.repeat(innerWidth)}┘${RESET}`,
|
|
487
|
+
];
|
|
488
|
+
}
|
|
489
|
+
function getPreferredMenuWidth() {
|
|
490
|
+
const columns = output.columns ?? 80;
|
|
491
|
+
return Math.max(64, Math.min(96, columns - 2));
|
|
492
|
+
}
|
|
493
|
+
function clearRenderedFrame(lineCount) {
|
|
494
|
+
if (lineCount <= 0) {
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
readline.moveCursor(output, 0, -lineCount);
|
|
498
|
+
for (let index = 0; index < lineCount; index += 1) {
|
|
499
|
+
readline.clearLine(output, 0);
|
|
500
|
+
if (index < lineCount - 1) {
|
|
501
|
+
readline.moveCursor(output, 0, 1);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
if (lineCount > 1) {
|
|
505
|
+
readline.moveCursor(output, 0, -(lineCount - 1));
|
|
506
|
+
}
|
|
507
|
+
readline.cursorTo(output, 0);
|
|
508
|
+
}
|
|
509
|
+
function truncateText(value, maxLength) {
|
|
510
|
+
const chars = Array.from(value);
|
|
511
|
+
if (chars.length <= maxLength) {
|
|
512
|
+
return value;
|
|
513
|
+
}
|
|
514
|
+
if (maxLength <= 1) {
|
|
515
|
+
return chars.slice(0, maxLength).join('');
|
|
516
|
+
}
|
|
517
|
+
return `${chars.slice(0, maxLength - 1).join('')}…`;
|
|
518
|
+
}
|
|
519
|
+
function padText(value, maxLength) {
|
|
520
|
+
const truncated = truncateText(value, maxLength);
|
|
521
|
+
const visibleLength = Array.from(truncated).length;
|
|
522
|
+
if (visibleLength >= maxLength) {
|
|
523
|
+
return truncated;
|
|
524
|
+
}
|
|
525
|
+
return `${truncated}${' '.repeat(maxLength - visibleLength)}`;
|
|
526
|
+
}
|
|
527
|
+
function expandHomePath(value) {
|
|
528
|
+
if (value === '~') {
|
|
529
|
+
return os.homedir();
|
|
530
|
+
}
|
|
531
|
+
if (value.startsWith('~/')) {
|
|
532
|
+
return path.join(os.homedir(), value.slice(2));
|
|
533
|
+
}
|
|
534
|
+
return value;
|
|
535
|
+
}
|
|
536
|
+
function isPromptable() {
|
|
537
|
+
return Boolean(input.isTTY && output.isTTY);
|
|
538
|
+
}
|
|
539
|
+
function logInfo(message) {
|
|
540
|
+
console.log(`${INFO}i${RESET} ${message}`);
|
|
541
|
+
}
|
|
542
|
+
function logOk(message) {
|
|
543
|
+
console.log(`${SUCCESS}✓${RESET} ${message}`);
|
|
544
|
+
}
|
|
545
|
+
function logWarn(message) {
|
|
546
|
+
console.log(`${WARN}!${RESET} ${message}`);
|
|
547
|
+
}
|
|
548
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../src/cli/commands/onboarding.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAQA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA4C7D;AAED,wBAAgB,SAAS,IAAI,IAAI,CAgBhC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { parseArgs } from './argv.js';
|
|
2
2
|
import { runOnboardCommand } from './commands/onboard.js';
|
|
3
|
+
import { runOnboardingCommand } from './commands/onboarding.js';
|
|
3
4
|
import { runAuthCommand } from './commands/auth.js';
|
|
4
5
|
import { runInstallCommand } from './commands/install.js';
|
|
5
6
|
import { runUninstallCommand } from './commands/uninstall.js';
|
|
@@ -25,6 +26,9 @@ export async function runCli(argv) {
|
|
|
25
26
|
case 'onboard':
|
|
26
27
|
await runOnboardCommand(args);
|
|
27
28
|
return true;
|
|
29
|
+
case 'onboarding':
|
|
30
|
+
await runOnboardingCommand(args);
|
|
31
|
+
return true;
|
|
28
32
|
case 'auth':
|
|
29
33
|
await runAuthCommand(args);
|
|
30
34
|
return true;
|
|
@@ -46,6 +50,7 @@ export function printHelp() {
|
|
|
46
50
|
|
|
47
51
|
Usage:
|
|
48
52
|
keygate serve
|
|
53
|
+
keygate onboarding [--no-prompt] [--defaults] [--no-run]
|
|
49
54
|
keygate onboard --auth-choice openai-codex [--device-auth]
|
|
50
55
|
keygate auth login --provider openai-codex [--device-auth]
|
|
51
56
|
keygate install codex [--method npm|brew]
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,SAAS,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnE,SAAS,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,KAAK,WAAW;YACd,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,SAAS,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnE,SAAS,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,KAAK,YAAY;YACf,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,KAAK,WAAW;YACd,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcb,CAAC,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@puukis/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Keygate core - Gateway, Brain, and Tool executor",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
"files": [
|
|
16
16
|
"dist/**/*"
|
|
17
17
|
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"dev": "tsx watch src/main.ts",
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest"
|
|
23
|
+
},
|
|
18
24
|
"dependencies": {
|
|
19
25
|
"@google/generative-ai": "^0.21.0",
|
|
20
26
|
"better-sqlite3": "^11.7.0",
|
|
@@ -35,11 +41,5 @@
|
|
|
35
41
|
},
|
|
36
42
|
"publishConfig": {
|
|
37
43
|
"access": "public"
|
|
38
|
-
},
|
|
39
|
-
"scripts": {
|
|
40
|
-
"dev": "tsx watch src/main.ts",
|
|
41
|
-
"build": "tsc",
|
|
42
|
-
"test": "vitest run",
|
|
43
|
-
"test:watch": "vitest"
|
|
44
44
|
}
|
|
45
|
-
}
|
|
45
|
+
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024 Puukis
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|