grokcodecli 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/.claude/settings.local.json +3 -1
- package/dist/cli.js +35 -4
- package/dist/cli.js.map +1 -1
- package/dist/config/manager.d.ts +1 -1
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +16 -20
- package/dist/config/manager.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +41 -4
- package/src/config/manager.ts +19 -23
package/dist/cli.js
CHANGED
|
@@ -15,11 +15,23 @@ program
|
|
|
15
15
|
.option('-r, --resume [sessionId]', 'Resume a previous conversation')
|
|
16
16
|
.action(async (options) => {
|
|
17
17
|
const config = new ConfigManager();
|
|
18
|
-
|
|
18
|
+
let apiKey = await config.getApiKey();
|
|
19
|
+
// If no API key, run auth flow automatically (don't exit!)
|
|
19
20
|
if (!apiKey) {
|
|
20
|
-
console.log(chalk.yellow('No API key found.
|
|
21
|
-
|
|
21
|
+
console.log(chalk.yellow('\n No API key found. Let\'s set one up!\n'));
|
|
22
|
+
const success = await config.setupAuth();
|
|
23
|
+
if (!success) {
|
|
24
|
+
console.log(chalk.red('\n Authentication failed. Please try again with `grok`.\n'));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
// Get the newly set API key
|
|
28
|
+
apiKey = await config.getApiKey();
|
|
29
|
+
if (!apiKey) {
|
|
30
|
+
console.log(chalk.red('\n Could not retrieve API key. Please try again.\n'));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
22
33
|
}
|
|
34
|
+
// Start chat automatically after auth or if already authenticated
|
|
23
35
|
const chat = new GrokChat({
|
|
24
36
|
apiKey,
|
|
25
37
|
model: options.model,
|
|
@@ -37,7 +49,26 @@ program
|
|
|
37
49
|
.description('Authenticate with xAI API')
|
|
38
50
|
.action(async () => {
|
|
39
51
|
const config = new ConfigManager();
|
|
40
|
-
await config.setupAuth();
|
|
52
|
+
const success = await config.setupAuth();
|
|
53
|
+
if (success) {
|
|
54
|
+
// After successful auth, ask if they want to start chatting
|
|
55
|
+
const readline = await import('readline');
|
|
56
|
+
const rl = readline.createInterface({
|
|
57
|
+
input: process.stdin,
|
|
58
|
+
output: process.stdout,
|
|
59
|
+
});
|
|
60
|
+
const answer = await new Promise((resolve) => {
|
|
61
|
+
rl.question(chalk.bold.green('❯ ') + 'Start chatting now? [Y/n]: ', resolve);
|
|
62
|
+
});
|
|
63
|
+
rl.close();
|
|
64
|
+
if (answer.toLowerCase() !== 'n') {
|
|
65
|
+
const apiKey = await config.getApiKey();
|
|
66
|
+
if (apiKey) {
|
|
67
|
+
const chat = new GrokChat({ apiKey });
|
|
68
|
+
await chat.start();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
41
72
|
});
|
|
42
73
|
program
|
|
43
74
|
.command('config')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACpC,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,aAAa,CAAC;KACjE,MAAM,CAAC,0BAA0B,EAAE,gCAAgC,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config/manager.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare class ConfigManager {
|
|
|
12
12
|
setApiKey(apiKey: string): Promise<void>;
|
|
13
13
|
get(key: keyof GrokConfig): GrokConfig[keyof GrokConfig];
|
|
14
14
|
set<K extends keyof GrokConfig>(key: K, value: GrokConfig[K]): void;
|
|
15
|
-
setupAuth(): Promise<
|
|
15
|
+
setupAuth(): Promise<boolean>;
|
|
16
16
|
show(): Promise<void>;
|
|
17
17
|
reset(): Promise<void>;
|
|
18
18
|
interactive(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAMA,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAoCD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAmB;;IAS3B,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IASxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,GAAG,CAAC,GAAG,EAAE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC;IAIxD,GAAG,CAAC,CAAC,SAAS,MAAM,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAI7D,SAAS,IAAI,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAMA,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAoCD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAmB;;IAS3B,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IASxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,GAAG,CAAC,GAAG,EAAE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC;IAIxD,GAAG,CAAC,CAAC,SAAS,MAAM,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAI7D,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAmI7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAKnC"}
|
package/dist/config/manager.js
CHANGED
|
@@ -80,17 +80,15 @@ export class ConfigManager {
|
|
|
80
80
|
console.log(chalk.bold(' Welcome to Grok Code!'));
|
|
81
81
|
console.log();
|
|
82
82
|
console.log(chalk.gray(' To use Grok Code, you need an API key from xAI.'));
|
|
83
|
-
console.log(chalk.gray(' We\'ll open your browser to the xAI console where you can:'));
|
|
84
83
|
console.log();
|
|
85
|
-
console.log(chalk.cyan('
|
|
86
|
-
console.log(chalk.cyan(' 2.') + ' Go to API Keys section');
|
|
87
|
-
console.log(chalk.cyan(' 3.') + ' Create a new API key');
|
|
88
|
-
console.log(chalk.cyan(' 4.') + ' Copy the key and paste it here');
|
|
84
|
+
console.log(chalk.cyan(' How would you like to authenticate?'));
|
|
89
85
|
console.log();
|
|
86
|
+
console.log(' ' + chalk.bold.cyan('[1]') + ' Open browser to get API key ' + chalk.gray('(recommended)'));
|
|
87
|
+
console.log(' ' + chalk.bold.cyan('[2]') + ' Paste API key directly ' + chalk.gray('(if you already have one)'));
|
|
88
|
+
console.log();
|
|
89
|
+
const choice = await question(chalk.bold.green('❯ ') + 'Choose [1/2]: ');
|
|
90
90
|
const xaiUrl = 'https://console.x.ai/';
|
|
91
|
-
|
|
92
|
-
const openChoice = await question(chalk.bold.green('❯ ') + 'Open xAI Console in browser? [Y/n]: ');
|
|
93
|
-
if (openChoice.toLowerCase() !== 'n') {
|
|
91
|
+
if (choice.trim() === '1' || choice.trim() === '') {
|
|
94
92
|
console.log();
|
|
95
93
|
console.log(chalk.cyan(' ⏳ Opening browser...'));
|
|
96
94
|
try {
|
|
@@ -114,19 +112,18 @@ export class ConfigManager {
|
|
|
114
112
|
}
|
|
115
113
|
else {
|
|
116
114
|
console.log();
|
|
117
|
-
console.log(chalk.gray(`
|
|
115
|
+
console.log(chalk.gray(` Get your API key from: ${chalk.cyan(xaiUrl)}`));
|
|
118
116
|
console.log();
|
|
119
117
|
}
|
|
120
|
-
// Get API key
|
|
121
|
-
console.log(chalk.gray(' Paste your API key below
|
|
118
|
+
// Get API key
|
|
119
|
+
console.log(chalk.gray(' Paste your API key below:'));
|
|
122
120
|
console.log();
|
|
123
121
|
const apiKey = await question(chalk.bold.green('❯ ') + 'API Key: ');
|
|
124
122
|
if (!apiKey.trim()) {
|
|
125
123
|
console.log();
|
|
126
124
|
console.log(chalk.red(' ✗ API key cannot be empty.'));
|
|
127
|
-
console.log(chalk.gray(' Run `grok auth` to try again.\n'));
|
|
128
125
|
rl.close();
|
|
129
|
-
return;
|
|
126
|
+
return false;
|
|
130
127
|
}
|
|
131
128
|
// Validate the key with spinner
|
|
132
129
|
console.log();
|
|
@@ -148,9 +145,8 @@ export class ConfigManager {
|
|
|
148
145
|
console.log(`\r${chalk.red(' ✗ Invalid API key. Please check and try again.')} `);
|
|
149
146
|
console.log();
|
|
150
147
|
console.log(chalk.gray(' Make sure you copied the complete key starting with "xai-"'));
|
|
151
|
-
console.log(chalk.gray(' Run `grok auth` to try again.\n'));
|
|
152
148
|
rl.close();
|
|
153
|
-
return;
|
|
149
|
+
return false;
|
|
154
150
|
}
|
|
155
151
|
// Get available models to show
|
|
156
152
|
const data = await response.json();
|
|
@@ -164,19 +160,19 @@ export class ConfigManager {
|
|
|
164
160
|
console.log(chalk.cyan('│') + ` ` + chalk.cyan('│'));
|
|
165
161
|
console.log(chalk.cyan('│') + ` ${chalk.gray('API Key:')} ${chalk.green('✓ Saved securely')} ` + chalk.cyan('│'));
|
|
166
162
|
console.log(chalk.cyan('│') + ` ${chalk.gray('Models:')} ${chalk.cyan(modelCount + ' available')} ` + chalk.cyan('│'));
|
|
167
|
-
console.log(chalk.cyan('│') + ` ${chalk.gray('Config:')} ${chalk.blue(this.config.path.slice(0, 45))}...` + chalk.cyan('│'));
|
|
168
|
-
console.log(chalk.cyan('│') + ` ` + chalk.cyan('│'));
|
|
169
|
-
console.log(chalk.cyan('│') + ` ${chalk.bold('Get started:')} ${chalk.cyan('grok')} ` + chalk.cyan('│'));
|
|
170
163
|
console.log(chalk.cyan('╰──────────────────────────────────────────────────────────────────────╯'));
|
|
171
164
|
console.log();
|
|
165
|
+
rl.close();
|
|
166
|
+
return true;
|
|
172
167
|
}
|
|
173
168
|
catch (error) {
|
|
174
169
|
clearInterval(spinner);
|
|
175
170
|
console.log(`\r${chalk.red(' ✗ Error validating key: ' + error.message)} `);
|
|
176
171
|
console.log();
|
|
177
|
-
console.log(chalk.gray(' Check your internet connection and try again
|
|
172
|
+
console.log(chalk.gray(' Check your internet connection and try again.'));
|
|
173
|
+
rl.close();
|
|
174
|
+
return false;
|
|
178
175
|
}
|
|
179
|
-
rl.close();
|
|
180
176
|
}
|
|
181
177
|
async show() {
|
|
182
178
|
console.log(chalk.cyan('\n📋 Current Configuration\n'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAU9B,MAAM,QAAQ,GAA+B;IAC3C,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,8BAA8B;AAC9B,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtB,IAAI,GAAW,CAAC;QAEhB,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,QAAQ;gBACX,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;gBACtB,MAAM;YACR,KAAK,OAAO;gBACV,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;gBAC1B,MAAM;YACR;gBACE,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,MAAM,CAAmB;IAEjC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAa;YACjC,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,QAAsB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS;QACb,mCAAmC;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACnE,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,6BAA6B;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,GAAqB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAA6B,GAAM,EAAE,KAAoB;QAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAmB,EAAE;YACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC7B,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,wBAAwB;QACxB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5I,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,+BAA+B,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAC7G,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,0BAA0B,GAAG,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACpH,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,uBAAuB,CAAC;QAEvC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAElD,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC,CAAC;gBAC/F,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,cAAc;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACvD,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gCAAgC;QAChC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;YAC9F,UAAU,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAChD,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,4BAA4B,EAAE;gBACzD,OAAO,EAAE;oBACP,eAAe,EAAE,UAAU,MAAM,CAAC,IAAI,EAAE,EAAE;iBAC3C;aACF,CAAC,CAAC;YAEH,aAAa,CAAC,OAAO,CAAC,CAAC;YAEvB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,YAAY,CAAC,CAAC;gBAC5F,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC,CAAC;gBACxF,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,KAAK,CAAC;YACf,CAAC;YAED,+BAA+B;YAC/B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAgC,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;YAE1C,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAEpC,oBAAoB;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,mCAAmC,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;YACpG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,yEAAyE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7I,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,wEAAwE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1H,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,wCAAwC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3J,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,4CAA4C,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACrK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;YACpG,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,4BAA4B,GAAI,KAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjG,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC3E,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,mBAAoB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC7F,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAuB,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACvE,CAAC;CACF"}
|
package/package.json
CHANGED
package/src/cli.ts
CHANGED
|
@@ -19,13 +19,28 @@ program
|
|
|
19
19
|
.option('-r, --resume [sessionId]', 'Resume a previous conversation')
|
|
20
20
|
.action(async (options) => {
|
|
21
21
|
const config = new ConfigManager();
|
|
22
|
-
|
|
22
|
+
let apiKey = await config.getApiKey();
|
|
23
23
|
|
|
24
|
+
// If no API key, run auth flow automatically (don't exit!)
|
|
24
25
|
if (!apiKey) {
|
|
25
|
-
console.log(chalk.yellow('No API key found.
|
|
26
|
-
|
|
26
|
+
console.log(chalk.yellow('\n No API key found. Let\'s set one up!\n'));
|
|
27
|
+
const success = await config.setupAuth();
|
|
28
|
+
|
|
29
|
+
if (!success) {
|
|
30
|
+
console.log(chalk.red('\n Authentication failed. Please try again with `grok`.\n'));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Get the newly set API key
|
|
35
|
+
apiKey = await config.getApiKey();
|
|
36
|
+
|
|
37
|
+
if (!apiKey) {
|
|
38
|
+
console.log(chalk.red('\n Could not retrieve API key. Please try again.\n'));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
27
41
|
}
|
|
28
42
|
|
|
43
|
+
// Start chat automatically after auth or if already authenticated
|
|
29
44
|
const chat = new GrokChat({
|
|
30
45
|
apiKey,
|
|
31
46
|
model: options.model,
|
|
@@ -44,7 +59,29 @@ program
|
|
|
44
59
|
.description('Authenticate with xAI API')
|
|
45
60
|
.action(async () => {
|
|
46
61
|
const config = new ConfigManager();
|
|
47
|
-
await config.setupAuth();
|
|
62
|
+
const success = await config.setupAuth();
|
|
63
|
+
|
|
64
|
+
if (success) {
|
|
65
|
+
// After successful auth, ask if they want to start chatting
|
|
66
|
+
const readline = await import('readline');
|
|
67
|
+
const rl = readline.createInterface({
|
|
68
|
+
input: process.stdin,
|
|
69
|
+
output: process.stdout,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const answer = await new Promise<string>((resolve) => {
|
|
73
|
+
rl.question(chalk.bold.green('❯ ') + 'Start chatting now? [Y/n]: ', resolve);
|
|
74
|
+
});
|
|
75
|
+
rl.close();
|
|
76
|
+
|
|
77
|
+
if (answer.toLowerCase() !== 'n') {
|
|
78
|
+
const apiKey = await config.getApiKey();
|
|
79
|
+
if (apiKey) {
|
|
80
|
+
const chat = new GrokChat({ apiKey });
|
|
81
|
+
await chat.start();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
48
85
|
});
|
|
49
86
|
|
|
50
87
|
program
|
package/src/config/manager.ts
CHANGED
|
@@ -77,7 +77,7 @@ export class ConfigManager {
|
|
|
77
77
|
this.config.set(key, value);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
async setupAuth(): Promise<
|
|
80
|
+
async setupAuth(): Promise<boolean> {
|
|
81
81
|
const rl = readline.createInterface({
|
|
82
82
|
input: process.stdin,
|
|
83
83
|
output: process.stdout,
|
|
@@ -101,20 +101,18 @@ export class ConfigManager {
|
|
|
101
101
|
console.log(chalk.bold(' Welcome to Grok Code!'));
|
|
102
102
|
console.log();
|
|
103
103
|
console.log(chalk.gray(' To use Grok Code, you need an API key from xAI.'));
|
|
104
|
-
console.log(chalk.gray(' We\'ll open your browser to the xAI console where you can:'));
|
|
105
104
|
console.log();
|
|
106
|
-
console.log(chalk.cyan('
|
|
107
|
-
console.log(
|
|
108
|
-
console.log(chalk.cyan('
|
|
109
|
-
console.log(chalk.cyan('
|
|
105
|
+
console.log(chalk.cyan(' How would you like to authenticate?'));
|
|
106
|
+
console.log();
|
|
107
|
+
console.log(' ' + chalk.bold.cyan('[1]') + ' Open browser to get API key ' + chalk.gray('(recommended)'));
|
|
108
|
+
console.log(' ' + chalk.bold.cyan('[2]') + ' Paste API key directly ' + chalk.gray('(if you already have one)'));
|
|
110
109
|
console.log();
|
|
111
110
|
|
|
112
|
-
const
|
|
111
|
+
const choice = await question(chalk.bold.green('❯ ') + 'Choose [1/2]: ');
|
|
113
112
|
|
|
114
|
-
|
|
115
|
-
const openChoice = await question(chalk.bold.green('❯ ') + 'Open xAI Console in browser? [Y/n]: ');
|
|
113
|
+
const xaiUrl = 'https://console.x.ai/';
|
|
116
114
|
|
|
117
|
-
if (
|
|
115
|
+
if (choice.trim() === '1' || choice.trim() === '') {
|
|
118
116
|
console.log();
|
|
119
117
|
console.log(chalk.cyan(' ⏳ Opening browser...'));
|
|
120
118
|
|
|
@@ -137,21 +135,20 @@ export class ConfigManager {
|
|
|
137
135
|
}
|
|
138
136
|
} else {
|
|
139
137
|
console.log();
|
|
140
|
-
console.log(chalk.gray(`
|
|
138
|
+
console.log(chalk.gray(` Get your API key from: ${chalk.cyan(xaiUrl)}`));
|
|
141
139
|
console.log();
|
|
142
140
|
}
|
|
143
141
|
|
|
144
|
-
// Get API key
|
|
145
|
-
console.log(chalk.gray(' Paste your API key below
|
|
142
|
+
// Get API key
|
|
143
|
+
console.log(chalk.gray(' Paste your API key below:'));
|
|
146
144
|
console.log();
|
|
147
145
|
const apiKey = await question(chalk.bold.green('❯ ') + 'API Key: ');
|
|
148
146
|
|
|
149
147
|
if (!apiKey.trim()) {
|
|
150
148
|
console.log();
|
|
151
149
|
console.log(chalk.red(' ✗ API key cannot be empty.'));
|
|
152
|
-
console.log(chalk.gray(' Run `grok auth` to try again.\n'));
|
|
153
150
|
rl.close();
|
|
154
|
-
return;
|
|
151
|
+
return false;
|
|
155
152
|
}
|
|
156
153
|
|
|
157
154
|
// Validate the key with spinner
|
|
@@ -178,9 +175,8 @@ export class ConfigManager {
|
|
|
178
175
|
console.log(`\r${chalk.red(' ✗ Invalid API key. Please check and try again.')} `);
|
|
179
176
|
console.log();
|
|
180
177
|
console.log(chalk.gray(' Make sure you copied the complete key starting with "xai-"'));
|
|
181
|
-
console.log(chalk.gray(' Run `grok auth` to try again.\n'));
|
|
182
178
|
rl.close();
|
|
183
|
-
return;
|
|
179
|
+
return false;
|
|
184
180
|
}
|
|
185
181
|
|
|
186
182
|
// Get available models to show
|
|
@@ -197,19 +193,19 @@ export class ConfigManager {
|
|
|
197
193
|
console.log(chalk.cyan('│') + ` ` + chalk.cyan('│'));
|
|
198
194
|
console.log(chalk.cyan('│') + ` ${chalk.gray('API Key:')} ${chalk.green('✓ Saved securely')} ` + chalk.cyan('│'));
|
|
199
195
|
console.log(chalk.cyan('│') + ` ${chalk.gray('Models:')} ${chalk.cyan(modelCount + ' available')} ` + chalk.cyan('│'));
|
|
200
|
-
console.log(chalk.cyan('│') + ` ${chalk.gray('Config:')} ${chalk.blue(this.config.path.slice(0, 45))}...` + chalk.cyan('│'));
|
|
201
|
-
console.log(chalk.cyan('│') + ` ` + chalk.cyan('│'));
|
|
202
|
-
console.log(chalk.cyan('│') + ` ${chalk.bold('Get started:')} ${chalk.cyan('grok')} ` + chalk.cyan('│'));
|
|
203
196
|
console.log(chalk.cyan('╰──────────────────────────────────────────────────────────────────────╯'));
|
|
204
197
|
console.log();
|
|
198
|
+
|
|
199
|
+
rl.close();
|
|
200
|
+
return true;
|
|
205
201
|
} catch (error) {
|
|
206
202
|
clearInterval(spinner);
|
|
207
203
|
console.log(`\r${chalk.red(' ✗ Error validating key: ' + (error as Error).message)} `);
|
|
208
204
|
console.log();
|
|
209
|
-
console.log(chalk.gray(' Check your internet connection and try again
|
|
205
|
+
console.log(chalk.gray(' Check your internet connection and try again.'));
|
|
206
|
+
rl.close();
|
|
207
|
+
return false;
|
|
210
208
|
}
|
|
211
|
-
|
|
212
|
-
rl.close();
|
|
213
209
|
}
|
|
214
210
|
|
|
215
211
|
async show(): Promise<void> {
|