grokcodecli 0.1.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 (99) hide show
  1. package/.claude/settings.local.json +32 -0
  2. package/README.md +1464 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +61 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/loader.d.ts +34 -0
  8. package/dist/commands/loader.d.ts.map +1 -0
  9. package/dist/commands/loader.js +192 -0
  10. package/dist/commands/loader.js.map +1 -0
  11. package/dist/config/manager.d.ts +21 -0
  12. package/dist/config/manager.d.ts.map +1 -0
  13. package/dist/config/manager.js +203 -0
  14. package/dist/config/manager.js.map +1 -0
  15. package/dist/conversation/chat.d.ts +50 -0
  16. package/dist/conversation/chat.d.ts.map +1 -0
  17. package/dist/conversation/chat.js +1145 -0
  18. package/dist/conversation/chat.js.map +1 -0
  19. package/dist/conversation/history.d.ts +24 -0
  20. package/dist/conversation/history.d.ts.map +1 -0
  21. package/dist/conversation/history.js +103 -0
  22. package/dist/conversation/history.js.map +1 -0
  23. package/dist/grok/client.d.ts +86 -0
  24. package/dist/grok/client.d.ts.map +1 -0
  25. package/dist/grok/client.js +106 -0
  26. package/dist/grok/client.js.map +1 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +8 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/permissions/manager.d.ts +26 -0
  32. package/dist/permissions/manager.d.ts.map +1 -0
  33. package/dist/permissions/manager.js +170 -0
  34. package/dist/permissions/manager.js.map +1 -0
  35. package/dist/tools/bash.d.ts +8 -0
  36. package/dist/tools/bash.d.ts.map +1 -0
  37. package/dist/tools/bash.js +102 -0
  38. package/dist/tools/bash.js.map +1 -0
  39. package/dist/tools/edit.d.ts +9 -0
  40. package/dist/tools/edit.d.ts.map +1 -0
  41. package/dist/tools/edit.js +61 -0
  42. package/dist/tools/edit.js.map +1 -0
  43. package/dist/tools/glob.d.ts +7 -0
  44. package/dist/tools/glob.d.ts.map +1 -0
  45. package/dist/tools/glob.js +38 -0
  46. package/dist/tools/glob.js.map +1 -0
  47. package/dist/tools/grep.d.ts +8 -0
  48. package/dist/tools/grep.d.ts.map +1 -0
  49. package/dist/tools/grep.js +78 -0
  50. package/dist/tools/grep.js.map +1 -0
  51. package/dist/tools/read.d.ts +8 -0
  52. package/dist/tools/read.d.ts.map +1 -0
  53. package/dist/tools/read.js +96 -0
  54. package/dist/tools/read.js.map +1 -0
  55. package/dist/tools/registry.d.ts +42 -0
  56. package/dist/tools/registry.d.ts.map +1 -0
  57. package/dist/tools/registry.js +230 -0
  58. package/dist/tools/registry.js.map +1 -0
  59. package/dist/tools/webfetch.d.ts +10 -0
  60. package/dist/tools/webfetch.d.ts.map +1 -0
  61. package/dist/tools/webfetch.js +108 -0
  62. package/dist/tools/webfetch.js.map +1 -0
  63. package/dist/tools/websearch.d.ts +7 -0
  64. package/dist/tools/websearch.d.ts.map +1 -0
  65. package/dist/tools/websearch.js +180 -0
  66. package/dist/tools/websearch.js.map +1 -0
  67. package/dist/tools/write.d.ts +7 -0
  68. package/dist/tools/write.d.ts.map +1 -0
  69. package/dist/tools/write.js +80 -0
  70. package/dist/tools/write.js.map +1 -0
  71. package/dist/utils/security.d.ts +36 -0
  72. package/dist/utils/security.d.ts.map +1 -0
  73. package/dist/utils/security.js +227 -0
  74. package/dist/utils/security.js.map +1 -0
  75. package/dist/utils/ui.d.ts +49 -0
  76. package/dist/utils/ui.d.ts.map +1 -0
  77. package/dist/utils/ui.js +302 -0
  78. package/dist/utils/ui.js.map +1 -0
  79. package/package.json +45 -0
  80. package/src/cli.ts +68 -0
  81. package/src/commands/loader.ts +244 -0
  82. package/src/config/manager.ts +239 -0
  83. package/src/conversation/chat.ts +1294 -0
  84. package/src/conversation/history.ts +131 -0
  85. package/src/grok/client.ts +192 -0
  86. package/src/index.ts +8 -0
  87. package/src/permissions/manager.ts +208 -0
  88. package/src/tools/bash.ts +119 -0
  89. package/src/tools/edit.ts +73 -0
  90. package/src/tools/glob.ts +49 -0
  91. package/src/tools/grep.ts +96 -0
  92. package/src/tools/read.ts +116 -0
  93. package/src/tools/registry.ts +248 -0
  94. package/src/tools/webfetch.ts +127 -0
  95. package/src/tools/websearch.ts +219 -0
  96. package/src/tools/write.ts +94 -0
  97. package/src/utils/security.ts +259 -0
  98. package/src/utils/ui.ts +382 -0
  99. package/tsconfig.json +22 -0
@@ -0,0 +1,302 @@
1
+ /**
2
+ * UI Utilities
3
+ *
4
+ * Beautiful terminal output, syntax highlighting, progress indicators,
5
+ * and user experience enhancements.
6
+ */
7
+ import chalk from 'chalk';
8
+ // ============================================================================
9
+ // Box Drawing & Borders
10
+ // ============================================================================
11
+ export const BOX = {
12
+ topLeft: '╭',
13
+ topRight: '╮',
14
+ bottomLeft: '╰',
15
+ bottomRight: '╯',
16
+ horizontal: '─',
17
+ vertical: '│',
18
+ teeRight: '├',
19
+ teeLeft: '┤',
20
+ teeDown: '┬',
21
+ teeUp: '┴',
22
+ cross: '┼',
23
+ };
24
+ export function drawBox(content, options = {}) {
25
+ const { title = '', width = Math.max(...content.map(l => stripAnsi(l).length), title.length) + 4, padding = 1, borderColor = chalk.cyan, } = options;
26
+ const innerWidth = width - 2;
27
+ const lines = [];
28
+ // Top border
29
+ if (title) {
30
+ const titlePadded = ` ${title} `;
31
+ const leftPad = Math.floor((innerWidth - titlePadded.length) / 2);
32
+ const rightPad = innerWidth - leftPad - titlePadded.length;
33
+ lines.push(borderColor(BOX.topLeft) +
34
+ borderColor(BOX.horizontal.repeat(leftPad)) +
35
+ chalk.bold(titlePadded) +
36
+ borderColor(BOX.horizontal.repeat(rightPad)) +
37
+ borderColor(BOX.topRight));
38
+ }
39
+ else {
40
+ lines.push(borderColor(BOX.topLeft + BOX.horizontal.repeat(innerWidth) + BOX.topRight));
41
+ }
42
+ // Padding top
43
+ for (let i = 0; i < padding; i++) {
44
+ lines.push(borderColor(BOX.vertical) + ' '.repeat(innerWidth) + borderColor(BOX.vertical));
45
+ }
46
+ // Content
47
+ for (const line of content) {
48
+ const stripped = stripAnsi(line);
49
+ const pad = innerWidth - stripped.length - 2;
50
+ lines.push(borderColor(BOX.vertical) +
51
+ ' ' + line + ' '.repeat(Math.max(0, pad + 1)) +
52
+ borderColor(BOX.vertical));
53
+ }
54
+ // Padding bottom
55
+ for (let i = 0; i < padding; i++) {
56
+ lines.push(borderColor(BOX.vertical) + ' '.repeat(innerWidth) + borderColor(BOX.vertical));
57
+ }
58
+ // Bottom border
59
+ lines.push(borderColor(BOX.bottomLeft + BOX.horizontal.repeat(innerWidth) + BOX.bottomRight));
60
+ return lines.join('\n');
61
+ }
62
+ // ============================================================================
63
+ // Syntax Highlighting
64
+ // ============================================================================
65
+ const LANGUAGE_KEYWORDS = {
66
+ typescript: ['const', 'let', 'var', 'function', 'class', 'interface', 'type', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'async', 'await', 'new', 'this', 'extends', 'implements', 'private', 'public', 'protected', 'static', 'readonly'],
67
+ javascript: ['const', 'let', 'var', 'function', 'class', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'async', 'await', 'new', 'this', 'extends'],
68
+ python: ['def', 'class', 'import', 'from', 'return', 'if', 'elif', 'else', 'for', 'while', 'try', 'except', 'finally', 'with', 'as', 'yield', 'lambda', 'None', 'True', 'False', 'and', 'or', 'not', 'in', 'is', 'async', 'await'],
69
+ rust: ['fn', 'let', 'mut', 'const', 'struct', 'enum', 'impl', 'trait', 'pub', 'use', 'mod', 'match', 'if', 'else', 'for', 'while', 'loop', 'return', 'async', 'await', 'self', 'Self'],
70
+ go: ['func', 'var', 'const', 'type', 'struct', 'interface', 'package', 'import', 'return', 'if', 'else', 'for', 'range', 'switch', 'case', 'default', 'defer', 'go', 'chan', 'map', 'make', 'new'],
71
+ bash: ['if', 'then', 'else', 'elif', 'fi', 'for', 'do', 'done', 'while', 'case', 'esac', 'function', 'return', 'exit', 'export', 'local', 'readonly'],
72
+ };
73
+ const LANG_ALIASES = {
74
+ ts: 'typescript',
75
+ js: 'javascript',
76
+ py: 'python',
77
+ rs: 'rust',
78
+ sh: 'bash',
79
+ shell: 'bash',
80
+ zsh: 'bash',
81
+ };
82
+ export function highlightCode(code, language) {
83
+ const lang = language ? (LANG_ALIASES[language] || language).toLowerCase() : '';
84
+ const keywords = LANGUAGE_KEYWORDS[lang] || [];
85
+ let result = code;
86
+ // Highlight strings
87
+ result = result.replace(/(["'`])(?:(?!\1)[^\\]|\\.)*\1/g, chalk.green('$&'));
88
+ // Highlight numbers
89
+ result = result.replace(/\b(\d+\.?\d*)\b/g, chalk.yellow('$1'));
90
+ // Highlight comments
91
+ result = result.replace(/(\/\/.*$|#.*$)/gm, chalk.gray('$1'));
92
+ result = result.replace(/(\/\*[\s\S]*?\*\/)/g, chalk.gray('$1'));
93
+ // Highlight keywords
94
+ for (const keyword of keywords) {
95
+ const regex = new RegExp(`\\b(${keyword})\\b`, 'g');
96
+ result = result.replace(regex, chalk.magenta('$1'));
97
+ }
98
+ // Highlight function calls
99
+ result = result.replace(/\b([a-zA-Z_]\w*)\s*\(/g, chalk.blue('$1') + '(');
100
+ return result;
101
+ }
102
+ export function formatCodeBlock(code, language, showLineNumbers = true) {
103
+ const highlighted = highlightCode(code, language);
104
+ const lines = highlighted.split('\n');
105
+ const header = chalk.gray(`─── ${language || 'code'} ${'─'.repeat(Math.max(0, 40 - (language?.length || 4)))}`);
106
+ const footer = chalk.gray('─'.repeat(45));
107
+ if (showLineNumbers) {
108
+ const padding = String(lines.length).length;
109
+ const numberedLines = lines.map((line, i) => chalk.gray(String(i + 1).padStart(padding) + ' │ ') + line);
110
+ return `${header}\n${numberedLines.join('\n')}\n${footer}`;
111
+ }
112
+ return `${header}\n${highlighted}\n${footer}`;
113
+ }
114
+ // ============================================================================
115
+ // Progress & Status Indicators
116
+ // ============================================================================
117
+ export function progressBar(current, total, width = 30) {
118
+ const percent = Math.min(100, Math.round((current / total) * 100));
119
+ const filled = Math.round((percent / 100) * width);
120
+ const empty = width - filled;
121
+ const bar = chalk.green('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));
122
+ return `[${bar}] ${percent}%`;
123
+ }
124
+ export function spinner() {
125
+ const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
126
+ let i = 0;
127
+ let interval = null;
128
+ let text = '';
129
+ return {
130
+ start() {
131
+ interval = setInterval(() => {
132
+ process.stdout.write(`\r${chalk.cyan(frames[i])} ${text}`);
133
+ i = (i + 1) % frames.length;
134
+ }, 80);
135
+ },
136
+ stop(success = true) {
137
+ if (interval) {
138
+ clearInterval(interval);
139
+ const icon = success ? chalk.green('✓') : chalk.red('✗');
140
+ process.stdout.write(`\r${icon} ${text}\n`);
141
+ }
142
+ },
143
+ update(newText) {
144
+ text = newText;
145
+ },
146
+ };
147
+ }
148
+ // ============================================================================
149
+ // Badges & Tags
150
+ // ============================================================================
151
+ export function badge(text, type = 'info') {
152
+ const colors = {
153
+ info: chalk.bgCyan.black,
154
+ success: chalk.bgGreen.black,
155
+ warning: chalk.bgYellow.black,
156
+ error: chalk.bgRed.white,
157
+ };
158
+ return colors[type](` ${text} `);
159
+ }
160
+ export function tag(text, color = 'cyan') {
161
+ const colors = {
162
+ cyan: chalk.cyan,
163
+ green: chalk.green,
164
+ yellow: chalk.yellow,
165
+ red: chalk.red,
166
+ blue: chalk.blue,
167
+ magenta: chalk.magenta,
168
+ };
169
+ return colors[color](`[${text}]`);
170
+ }
171
+ // ============================================================================
172
+ // Welcome Screen & Branding
173
+ // ============================================================================
174
+ export function welcomeScreen(version, model, cwd) {
175
+ const logo = `
176
+ ██████╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗
177
+ ██╔════╝ ██╔══██╗██╔═══██╗██║ ██╔╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝
178
+ ██║ ███╗██████╔╝██║ ██║█████╔╝ ██║ ██║ ██║██║ ██║█████╗
179
+ ██║ ██║██╔══██╗██║ ██║██╔═██╗ ██║ ██║ ██║██║ ██║██╔══╝
180
+ ╚██████╔╝██║ ██║╚██████╔╝██║ ██╗ ╚██████╗╚██████╔╝██████╔╝███████╗
181
+ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝`;
182
+ const info = [
183
+ '',
184
+ ` ${chalk.gray('Version:')} ${chalk.cyan(version)}`,
185
+ ` ${chalk.gray('Model:')} ${chalk.green(model)}`,
186
+ ` ${chalk.gray('CWD:')} ${chalk.blue(cwd)}`,
187
+ '',
188
+ ` ${chalk.gray('Type')} ${chalk.cyan('/help')} ${chalk.gray('for commands,')} ${chalk.yellow('exit')} ${chalk.gray('to quit')}`,
189
+ '',
190
+ ];
191
+ return chalk.cyan(logo) + info.join('\n');
192
+ }
193
+ export function compactWelcome(version, model) {
194
+ return `
195
+ ${chalk.cyan('╭─────────────────────────────────────────────╮')}
196
+ ${chalk.cyan('│')} ${chalk.bold.cyan('🚀 Grok Code CLI')} ${chalk.gray(`v${version}`)} ${chalk.cyan('│')}
197
+ ${chalk.cyan('│')} ${chalk.gray('Model:')} ${chalk.green(model.padEnd(32))} ${chalk.cyan('│')}
198
+ ${chalk.cyan('│')} ${chalk.gray('Type /help for commands, exit to quit')} ${chalk.cyan('│')}
199
+ ${chalk.cyan('╰─────────────────────────────────────────────╯')}
200
+ `;
201
+ }
202
+ // ============================================================================
203
+ // Tips & Hints
204
+ // ============================================================================
205
+ const TIPS = [
206
+ 'Use /compact to reduce context when conversations get long',
207
+ 'Press Ctrl+C to cancel a running command',
208
+ 'Use /export conversation.md to save your chat',
209
+ 'The /doctor command checks your setup for issues',
210
+ 'You can resume previous sessions with /resume',
211
+ 'Use /model to switch between Grok 4, Grok 3 and specialized models',
212
+ 'The /context command shows how much context you\'re using',
213
+ 'Session are auto-saved - you can always pick up where you left off',
214
+ 'Use /history to see your recent conversations',
215
+ 'The Read, Write, and Edit tools work on any file type',
216
+ ];
217
+ export function randomTip() {
218
+ const tip = TIPS[Math.floor(Math.random() * TIPS.length)];
219
+ return chalk.gray(`💡 Tip: ${tip}`);
220
+ }
221
+ // ============================================================================
222
+ // Tables
223
+ // ============================================================================
224
+ export function table(headers, rows, options = {}) {
225
+ const { padding = 1, headerColor = chalk.bold.cyan } = options;
226
+ // Calculate column widths
227
+ const colWidths = headers.map((h, i) => {
228
+ const maxContent = Math.max(h.length, ...rows.map(r => stripAnsi(r[i] || '').length));
229
+ return maxContent + padding * 2;
230
+ });
231
+ // Build separator
232
+ const separator = BOX.horizontal;
233
+ const topBorder = BOX.topLeft + colWidths.map(w => separator.repeat(w)).join(BOX.teeDown) + BOX.topRight;
234
+ const midBorder = BOX.teeRight + colWidths.map(w => separator.repeat(w)).join(BOX.cross) + BOX.teeLeft;
235
+ const bottomBorder = BOX.bottomLeft + colWidths.map(w => separator.repeat(w)).join(BOX.teeUp) + BOX.bottomRight;
236
+ // Build header row
237
+ const headerRow = BOX.vertical + headers.map((h, i) => {
238
+ const padded = h.padStart(Math.floor((colWidths[i] + h.length) / 2)).padEnd(colWidths[i]);
239
+ return headerColor(padded);
240
+ }).join(BOX.vertical) + BOX.vertical;
241
+ // Build content rows
242
+ const contentRows = rows.map(row => BOX.vertical + row.map((cell, i) => {
243
+ const stripped = stripAnsi(cell || '');
244
+ const padded = ' '.repeat(padding) + cell + ' '.repeat(colWidths[i] - stripped.length - padding);
245
+ return padded;
246
+ }).join(BOX.vertical) + BOX.vertical);
247
+ return [topBorder, headerRow, midBorder, ...contentRows, bottomBorder].join('\n');
248
+ }
249
+ // ============================================================================
250
+ // Diff Display
251
+ // ============================================================================
252
+ export function formatDiff(oldContent, newContent) {
253
+ const oldLines = oldContent.split('\n');
254
+ const newLines = newContent.split('\n');
255
+ const lines = [];
256
+ let oldIdx = 0;
257
+ let newIdx = 0;
258
+ while (oldIdx < oldLines.length || newIdx < newLines.length) {
259
+ if (oldIdx >= oldLines.length) {
260
+ lines.push(chalk.green(`+ ${newLines[newIdx]}`));
261
+ newIdx++;
262
+ }
263
+ else if (newIdx >= newLines.length) {
264
+ lines.push(chalk.red(`- ${oldLines[oldIdx]}`));
265
+ oldIdx++;
266
+ }
267
+ else if (oldLines[oldIdx] === newLines[newIdx]) {
268
+ lines.push(chalk.gray(` ${oldLines[oldIdx]}`));
269
+ oldIdx++;
270
+ newIdx++;
271
+ }
272
+ else {
273
+ lines.push(chalk.red(`- ${oldLines[oldIdx]}`));
274
+ lines.push(chalk.green(`+ ${newLines[newIdx]}`));
275
+ oldIdx++;
276
+ newIdx++;
277
+ }
278
+ }
279
+ return lines.join('\n');
280
+ }
281
+ // ============================================================================
282
+ // Helpers
283
+ // ============================================================================
284
+ function stripAnsi(str) {
285
+ return str.replace(/\x1b\[[0-9;]*m/g, '');
286
+ }
287
+ export function truncate(str, maxLength, suffix = '...') {
288
+ if (str.length <= maxLength)
289
+ return str;
290
+ return str.slice(0, maxLength - suffix.length) + suffix;
291
+ }
292
+ export function indent(text, spaces = 2) {
293
+ const pad = ' '.repeat(spaces);
294
+ return text.split('\n').map(line => pad + line).join('\n');
295
+ }
296
+ export function divider(char = '─', length = 50) {
297
+ return chalk.gray(char.repeat(length));
298
+ }
299
+ export function timestamp() {
300
+ return chalk.gray(new Date().toLocaleTimeString());
301
+ }
302
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "grokcodecli",
3
+ "version": "0.1.0",
4
+ "description": "CLI coding assistant powered by Grok AI - like Claude Code but for xAI's Grok models",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "grok": "dist/cli.js"
8
+ },
9
+ "type": "module",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/cli.js",
14
+ "lint": "eslint src --ext .ts,.tsx",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "grok",
19
+ "xai",
20
+ "cli",
21
+ "ai",
22
+ "coding",
23
+ "assistant",
24
+ "terminal"
25
+ ],
26
+ "author": "singhpratech",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/singhpratech/grokcodeclix.git"
31
+ },
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ },
35
+ "dependencies": {
36
+ "chalk": "^5.3.0",
37
+ "commander": "^12.1.0",
38
+ "conf": "^13.0.1",
39
+ "glob": "^10.3.10"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.10.0",
43
+ "typescript": "^5.3.3"
44
+ }
45
+ }
package/src/cli.ts ADDED
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Command } from 'commander';
4
+ import { GrokChat } from './conversation/chat.js';
5
+ import { ConfigManager } from './config/manager.js';
6
+ import chalk from 'chalk';
7
+
8
+ const program = new Command();
9
+
10
+ program
11
+ .name('grok')
12
+ .description('CLI coding assistant powered by Grok AI')
13
+ .version('0.1.0');
14
+
15
+ program
16
+ .command('chat', { isDefault: true })
17
+ .description('Start an interactive chat session')
18
+ .option('-m, --model <model>', 'Grok model to use', 'grok-4-0709')
19
+ .option('-r, --resume [sessionId]', 'Resume a previous conversation')
20
+ .action(async (options) => {
21
+ const config = new ConfigManager();
22
+ const apiKey = await config.getApiKey();
23
+
24
+ if (!apiKey) {
25
+ console.log(chalk.yellow('No API key found. Run `grok auth` to set up your xAI API key.'));
26
+ process.exit(1);
27
+ }
28
+
29
+ const chat = new GrokChat({
30
+ apiKey,
31
+ model: options.model,
32
+ });
33
+
34
+ if (options.resume !== undefined) {
35
+ const sessionId = typeof options.resume === 'string' ? options.resume : undefined;
36
+ await chat.resume(sessionId);
37
+ } else {
38
+ await chat.start();
39
+ }
40
+ });
41
+
42
+ program
43
+ .command('auth')
44
+ .description('Authenticate with xAI API')
45
+ .action(async () => {
46
+ const config = new ConfigManager();
47
+ await config.setupAuth();
48
+ });
49
+
50
+ program
51
+ .command('config')
52
+ .description('Manage configuration')
53
+ .option('--show', 'Show current configuration')
54
+ .option('--reset', 'Reset configuration to defaults')
55
+ .action(async (options) => {
56
+ const config = new ConfigManager();
57
+
58
+ if (options.show) {
59
+ await config.show();
60
+ } else if (options.reset) {
61
+ await config.reset();
62
+ console.log(chalk.green('Configuration reset to defaults.'));
63
+ } else {
64
+ await config.interactive();
65
+ }
66
+ });
67
+
68
+ program.parse();