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
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { GrokChat } from './conversation/chat.js';
4
+ import { ConfigManager } from './config/manager.js';
5
+ import chalk from 'chalk';
6
+ const program = new Command();
7
+ program
8
+ .name('grok')
9
+ .description('CLI coding assistant powered by Grok AI')
10
+ .version('0.1.0');
11
+ program
12
+ .command('chat', { isDefault: true })
13
+ .description('Start an interactive chat session')
14
+ .option('-m, --model <model>', 'Grok model to use', 'grok-4-0709')
15
+ .option('-r, --resume [sessionId]', 'Resume a previous conversation')
16
+ .action(async (options) => {
17
+ const config = new ConfigManager();
18
+ const apiKey = await config.getApiKey();
19
+ if (!apiKey) {
20
+ console.log(chalk.yellow('No API key found. Run `grok auth` to set up your xAI API key.'));
21
+ process.exit(1);
22
+ }
23
+ const chat = new GrokChat({
24
+ apiKey,
25
+ model: options.model,
26
+ });
27
+ if (options.resume !== undefined) {
28
+ const sessionId = typeof options.resume === 'string' ? options.resume : undefined;
29
+ await chat.resume(sessionId);
30
+ }
31
+ else {
32
+ await chat.start();
33
+ }
34
+ });
35
+ program
36
+ .command('auth')
37
+ .description('Authenticate with xAI API')
38
+ .action(async () => {
39
+ const config = new ConfigManager();
40
+ await config.setupAuth();
41
+ });
42
+ program
43
+ .command('config')
44
+ .description('Manage configuration')
45
+ .option('--show', 'Show current configuration')
46
+ .option('--reset', 'Reset configuration to defaults')
47
+ .action(async (options) => {
48
+ const config = new ConfigManager();
49
+ if (options.show) {
50
+ await config.show();
51
+ }
52
+ else if (options.reset) {
53
+ await config.reset();
54
+ console.log(chalk.green('Configuration reset to defaults.'));
55
+ }
56
+ else {
57
+ await config.interactive();
58
+ }
59
+ });
60
+ program.parse();
61
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +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,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC;QACxB,MAAM;QACN,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,SAAS,EAAE,iCAAiC,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Custom Commands Loader
3
+ *
4
+ * Loads custom slash commands from:
5
+ * - .grok/commands/ (project-specific)
6
+ * - ~/.grok/commands/ (user-specific)
7
+ */
8
+ export interface CustomCommand {
9
+ name: string;
10
+ description: string;
11
+ content: string;
12
+ source: 'project' | 'user';
13
+ filePath: string;
14
+ argumentHint?: string;
15
+ allowedTools?: string[];
16
+ model?: string;
17
+ }
18
+ /**
19
+ * Load all custom commands
20
+ */
21
+ export declare function loadCustomCommands(): Promise<CustomCommand[]>;
22
+ /**
23
+ * Process command arguments
24
+ */
25
+ export declare function processCommandArgs(content: string, args: string): string;
26
+ /**
27
+ * Get command help text
28
+ */
29
+ export declare function getCommandHelp(commands: CustomCommand[]): string;
30
+ /**
31
+ * Initialize custom commands directory structure
32
+ */
33
+ export declare function initCommandsDir(): Promise<void>;
34
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/commands/loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0FD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAoBnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CA6BhE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAwCrD"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Custom Commands Loader
3
+ *
4
+ * Loads custom slash commands from:
5
+ * - .grok/commands/ (project-specific)
6
+ * - ~/.grok/commands/ (user-specific)
7
+ */
8
+ import * as fs from 'fs/promises';
9
+ import * as path from 'path';
10
+ import * as os from 'os';
11
+ import chalk from 'chalk';
12
+ /**
13
+ * Parse frontmatter from markdown content
14
+ */
15
+ function parseFrontmatter(content) {
16
+ const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
17
+ if (!match) {
18
+ return { frontmatter: {}, body: content };
19
+ }
20
+ const frontmatter = {};
21
+ const lines = match[1].split('\n');
22
+ for (const line of lines) {
23
+ const colonIdx = line.indexOf(':');
24
+ if (colonIdx > 0) {
25
+ const key = line.slice(0, colonIdx).trim();
26
+ const value = line.slice(colonIdx + 1).trim();
27
+ frontmatter[key] = value;
28
+ }
29
+ }
30
+ return { frontmatter, body: match[2] };
31
+ }
32
+ /**
33
+ * Load commands from a directory
34
+ */
35
+ async function loadCommandsFromDir(dir, source, namespace) {
36
+ const commands = [];
37
+ try {
38
+ const entries = await fs.readdir(dir, { withFileTypes: true });
39
+ for (const entry of entries) {
40
+ const fullPath = path.join(dir, entry.name);
41
+ if (entry.isDirectory()) {
42
+ // Recurse into subdirectories with namespace
43
+ const subCommands = await loadCommandsFromDir(fullPath, source, namespace ? `${namespace}:${entry.name}` : entry.name);
44
+ commands.push(...subCommands);
45
+ }
46
+ else if (entry.name.endsWith('.md')) {
47
+ // Load markdown command file
48
+ try {
49
+ const content = await fs.readFile(fullPath, 'utf-8');
50
+ const { frontmatter, body } = parseFrontmatter(content);
51
+ const name = entry.name.replace(/\.md$/, '');
52
+ const fullName = namespace ? `${name}` : name;
53
+ commands.push({
54
+ name: fullName,
55
+ description: frontmatter.description || `Custom command from ${source}`,
56
+ content: body.trim(),
57
+ source,
58
+ filePath: fullPath,
59
+ argumentHint: frontmatter['argument-hint'],
60
+ allowedTools: frontmatter['allowed-tools']?.split(',').map(s => s.trim()),
61
+ model: frontmatter.model,
62
+ });
63
+ }
64
+ catch (err) {
65
+ // Skip files that can't be read
66
+ console.error(chalk.yellow(`Warning: Could not load command ${fullPath}`));
67
+ }
68
+ }
69
+ }
70
+ }
71
+ catch {
72
+ // Directory doesn't exist, return empty
73
+ }
74
+ return commands;
75
+ }
76
+ /**
77
+ * Load all custom commands
78
+ */
79
+ export async function loadCustomCommands() {
80
+ const commands = [];
81
+ // Load project commands
82
+ const projectDir = path.join(process.cwd(), '.grok', 'commands');
83
+ const projectCommands = await loadCommandsFromDir(projectDir, 'project');
84
+ commands.push(...projectCommands);
85
+ // Load user commands
86
+ const userDir = path.join(os.homedir(), '.grok', 'commands');
87
+ const userCommands = await loadCommandsFromDir(userDir, 'user');
88
+ // User commands only added if not overridden by project
89
+ for (const cmd of userCommands) {
90
+ if (!commands.find(c => c.name === cmd.name)) {
91
+ commands.push(cmd);
92
+ }
93
+ }
94
+ return commands;
95
+ }
96
+ /**
97
+ * Process command arguments
98
+ */
99
+ export function processCommandArgs(content, args) {
100
+ let result = content;
101
+ // Replace $ARGUMENTS with all args
102
+ result = result.replace(/\$ARGUMENTS/g, args);
103
+ // Replace $1, $2, etc. with individual args
104
+ const argList = args.split(/\s+/).filter(Boolean);
105
+ for (let i = 0; i < argList.length; i++) {
106
+ result = result.replace(new RegExp(`\\$${i + 1}`, 'g'), argList[i]);
107
+ }
108
+ // Process bash execution (!`command`)
109
+ result = result.replace(/!\`([^`]+)\`/g, (_, cmd) => {
110
+ // Return placeholder - actual execution happens in chat
111
+ return `[Execute: ${cmd}]`;
112
+ });
113
+ // Process file references (@path)
114
+ result = result.replace(/@([^\s]+)/g, (_, filePath) => {
115
+ return `[Read file: ${filePath}]`;
116
+ });
117
+ return result;
118
+ }
119
+ /**
120
+ * Get command help text
121
+ */
122
+ export function getCommandHelp(commands) {
123
+ if (commands.length === 0) {
124
+ return chalk.gray('No custom commands found.');
125
+ }
126
+ const lines = [];
127
+ const projectCmds = commands.filter(c => c.source === 'project');
128
+ const userCmds = commands.filter(c => c.source === 'user');
129
+ if (projectCmds.length > 0) {
130
+ lines.push(chalk.bold('Project Commands:'));
131
+ for (const cmd of projectCmds) {
132
+ const hint = cmd.argumentHint ? chalk.gray(` ${cmd.argumentHint}`) : '';
133
+ lines.push(` /${cmd.name}${hint}`);
134
+ lines.push(` ${chalk.gray(cmd.description)}`);
135
+ }
136
+ lines.push('');
137
+ }
138
+ if (userCmds.length > 0) {
139
+ lines.push(chalk.bold('User Commands:'));
140
+ for (const cmd of userCmds) {
141
+ const hint = cmd.argumentHint ? chalk.gray(` ${cmd.argumentHint}`) : '';
142
+ lines.push(` /${cmd.name}${hint}`);
143
+ lines.push(` ${chalk.gray(cmd.description)}`);
144
+ }
145
+ }
146
+ return lines.join('\n');
147
+ }
148
+ /**
149
+ * Initialize custom commands directory structure
150
+ */
151
+ export async function initCommandsDir() {
152
+ const projectDir = path.join(process.cwd(), '.grok', 'commands');
153
+ try {
154
+ await fs.mkdir(projectDir, { recursive: true });
155
+ // Create example command
156
+ const examplePath = path.join(projectDir, 'review.md');
157
+ try {
158
+ await fs.access(examplePath);
159
+ }
160
+ catch {
161
+ await fs.writeFile(examplePath, `---
162
+ description: Review the current code changes
163
+ argument-hint: [focus-area]
164
+ ---
165
+
166
+ Please review the recent code changes in this project.
167
+
168
+ Focus on:
169
+ - Code quality and best practices
170
+ - Potential bugs or issues
171
+ - Security concerns
172
+ - Performance implications
173
+
174
+ $ARGUMENTS
175
+ `);
176
+ }
177
+ // Create .gitignore for commands
178
+ const gitignorePath = path.join(process.cwd(), '.grok', '.gitignore');
179
+ try {
180
+ await fs.access(gitignorePath);
181
+ }
182
+ catch {
183
+ await fs.writeFile(gitignorePath, `# Ignore local-only files
184
+ *.local.md
185
+ `);
186
+ }
187
+ }
188
+ catch (err) {
189
+ // Ignore errors
190
+ }
191
+ }
192
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/commands/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ interface GrokConfig {
2
+ apiKey?: string;
3
+ model: string;
4
+ temperature: number;
5
+ maxTokens: number;
6
+ autoApprove: string[];
7
+ }
8
+ export declare class ConfigManager {
9
+ private config;
10
+ constructor();
11
+ getApiKey(): Promise<string | undefined>;
12
+ setApiKey(apiKey: string): Promise<void>;
13
+ get(key: keyof GrokConfig): GrokConfig[keyof GrokConfig];
14
+ set<K extends keyof GrokConfig>(key: K, value: GrokConfig[K]): void;
15
+ setupAuth(): Promise<void>;
16
+ show(): Promise<void>;
17
+ reset(): Promise<void>;
18
+ interactive(): Promise<void>;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +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,IAAI,CAAC;IAuI1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAKnC"}
@@ -0,0 +1,203 @@
1
+ import Conf from 'conf';
2
+ import chalk from 'chalk';
3
+ import * as readline from 'readline';
4
+ import { exec } from 'child_process';
5
+ import { platform } from 'os';
6
+ const defaults = {
7
+ model: 'grok-4-0709',
8
+ temperature: 0.7,
9
+ maxTokens: 16384,
10
+ autoApprove: [],
11
+ };
12
+ // Open URL in default browser
13
+ function openBrowser(url) {
14
+ return new Promise((resolve, reject) => {
15
+ const os = platform();
16
+ let cmd;
17
+ switch (os) {
18
+ case 'darwin':
19
+ cmd = `open "${url}"`;
20
+ break;
21
+ case 'win32':
22
+ cmd = `start "" "${url}"`;
23
+ break;
24
+ default:
25
+ cmd = `xdg-open "${url}"`;
26
+ }
27
+ exec(cmd, (error) => {
28
+ if (error) {
29
+ reject(error);
30
+ }
31
+ else {
32
+ resolve();
33
+ }
34
+ });
35
+ });
36
+ }
37
+ export class ConfigManager {
38
+ config;
39
+ constructor() {
40
+ this.config = new Conf({
41
+ projectName: 'grokcodecli',
42
+ defaults: defaults,
43
+ });
44
+ }
45
+ async getApiKey() {
46
+ // Check environment variable first
47
+ const envKey = process.env.XAI_API_KEY || process.env.GROK_API_KEY;
48
+ if (envKey)
49
+ return envKey;
50
+ // Fall back to stored config
51
+ return this.config.get('apiKey');
52
+ }
53
+ async setApiKey(apiKey) {
54
+ this.config.set('apiKey', apiKey);
55
+ }
56
+ get(key) {
57
+ return this.config.get(key);
58
+ }
59
+ set(key, value) {
60
+ this.config.set(key, value);
61
+ }
62
+ async setupAuth() {
63
+ const rl = readline.createInterface({
64
+ input: process.stdin,
65
+ output: process.stdout,
66
+ });
67
+ const question = (prompt) => {
68
+ return new Promise((resolve) => {
69
+ rl.question(prompt, (answer) => {
70
+ resolve(answer);
71
+ });
72
+ });
73
+ };
74
+ // Beautiful auth header
75
+ console.log();
76
+ console.log(chalk.cyan('╭──────────────────────────────────────────────────────────────────────╮'));
77
+ console.log(chalk.cyan('│') + chalk.bold.cyan(' 🔐 Grok Code CLI - Authentication ') + chalk.cyan('│'));
78
+ console.log(chalk.cyan('╰──────────────────────────────────────────────────────────────────────╯'));
79
+ console.log();
80
+ console.log(chalk.bold(' Welcome to Grok Code!'));
81
+ console.log();
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
+ console.log();
85
+ console.log(chalk.cyan(' 1.') + ' Sign in or create an account');
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');
89
+ console.log();
90
+ const xaiUrl = 'https://console.x.ai/';
91
+ // Ask to open browser
92
+ const openChoice = await question(chalk.bold.green('❯ ') + 'Open xAI Console in browser? [Y/n]: ');
93
+ if (openChoice.toLowerCase() !== 'n') {
94
+ console.log();
95
+ console.log(chalk.cyan(' ⏳ Opening browser...'));
96
+ try {
97
+ await openBrowser(xaiUrl);
98
+ console.log(chalk.green(' ✓ Browser opened!'));
99
+ console.log();
100
+ console.log(chalk.gray(' ─────────────────────────────────────────────────────────────────'));
101
+ console.log(chalk.gray(' Follow these steps in the browser:'));
102
+ console.log(chalk.gray(' 1. Sign in to your xAI account'));
103
+ console.log(chalk.gray(' 2. Click on "API Keys" in the sidebar'));
104
+ console.log(chalk.gray(' 3. Click "Create API Key"'));
105
+ console.log(chalk.gray(' 4. Copy the key (starts with "xai-")'));
106
+ console.log(chalk.gray(' ─────────────────────────────────────────────────────────────────'));
107
+ console.log();
108
+ }
109
+ catch {
110
+ console.log(chalk.yellow(' ⚠ Could not open browser automatically.'));
111
+ console.log(chalk.gray(` Please visit: ${chalk.cyan(xaiUrl)}`));
112
+ console.log();
113
+ }
114
+ }
115
+ else {
116
+ console.log();
117
+ console.log(chalk.gray(` Visit: ${chalk.cyan(xaiUrl)}`));
118
+ console.log();
119
+ }
120
+ // Get API key with masked input visual
121
+ console.log(chalk.gray(' Paste your API key below (it will be hidden):'));
122
+ console.log();
123
+ const apiKey = await question(chalk.bold.green('❯ ') + 'API Key: ');
124
+ if (!apiKey.trim()) {
125
+ console.log();
126
+ console.log(chalk.red(' ✗ API key cannot be empty.'));
127
+ console.log(chalk.gray(' Run `grok auth` to try again.\n'));
128
+ rl.close();
129
+ return;
130
+ }
131
+ // Validate the key with spinner
132
+ console.log();
133
+ process.stdout.write(chalk.cyan(' ⠋ Validating API key...'));
134
+ const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
135
+ let frameIndex = 0;
136
+ const spinner = setInterval(() => {
137
+ process.stdout.write(`\r${chalk.cyan(' ' + frames[frameIndex] + ' Validating API key...')}`);
138
+ frameIndex = (frameIndex + 1) % frames.length;
139
+ }, 80);
140
+ try {
141
+ const response = await fetch('https://api.x.ai/v1/models', {
142
+ headers: {
143
+ 'Authorization': `Bearer ${apiKey.trim()}`,
144
+ },
145
+ });
146
+ clearInterval(spinner);
147
+ if (!response.ok) {
148
+ console.log(`\r${chalk.red(' ✗ Invalid API key. Please check and try again.')} `);
149
+ console.log();
150
+ 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
+ rl.close();
153
+ return;
154
+ }
155
+ // Get available models to show
156
+ const data = await response.json();
157
+ const modelCount = data.data?.length || 0;
158
+ await this.setApiKey(apiKey.trim());
159
+ // Success animation
160
+ console.log(`\r${chalk.green(' ✓ API key validated!')} `);
161
+ console.log();
162
+ console.log(chalk.cyan('╭──────────────────────────────────────────────────────────────────────╮'));
163
+ console.log(chalk.cyan('│') + chalk.bold.green(' 🎉 Authentication Successful! ') + chalk.cyan('│'));
164
+ console.log(chalk.cyan('│') + ` ` + chalk.cyan('│'));
165
+ console.log(chalk.cyan('│') + ` ${chalk.gray('API Key:')} ${chalk.green('✓ Saved securely')} ` + chalk.cyan('│'));
166
+ 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
+ console.log(chalk.cyan('╰──────────────────────────────────────────────────────────────────────╯'));
171
+ console.log();
172
+ }
173
+ catch (error) {
174
+ clearInterval(spinner);
175
+ console.log(`\r${chalk.red(' ✗ Error validating key: ' + error.message)} `);
176
+ console.log();
177
+ console.log(chalk.gray(' Check your internet connection and try again.\n'));
178
+ }
179
+ rl.close();
180
+ }
181
+ async show() {
182
+ console.log(chalk.cyan('\n📋 Current Configuration\n'));
183
+ const apiKey = await this.getApiKey();
184
+ console.log(` API Key: ${apiKey ? chalk.green('✓ Set') : chalk.red('✗ Not set')}`);
185
+ console.log(` Model: ${this.get('model')}`);
186
+ console.log(` Temperature: ${this.get('temperature')}`);
187
+ console.log(` Max Tokens: ${this.get('maxTokens')}`);
188
+ console.log(` Auto-approve: ${this.get('autoApprove').join(', ') || 'none'}`);
189
+ console.log(`\n Config file: ${this.config.path}\n`);
190
+ }
191
+ async reset() {
192
+ this.config.clear();
193
+ Object.entries(defaults).forEach(([key, value]) => {
194
+ this.config.set(key, value);
195
+ });
196
+ }
197
+ async interactive() {
198
+ await this.show();
199
+ console.log(chalk.gray('Use `grok config --reset` to reset to defaults.'));
200
+ console.log(chalk.gray('Use `grok auth` to update your API key.\n'));
201
+ }
202
+ }
203
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export interface ChatOptions {
2
+ apiKey: string;
3
+ model?: string;
4
+ resume?: boolean;
5
+ sessionId?: string;
6
+ }
7
+ export declare class GrokChat {
8
+ private client;
9
+ private messages;
10
+ private rl;
11
+ private permissions;
12
+ private history;
13
+ private config;
14
+ private session;
15
+ private useStreaming;
16
+ private workingDirs;
17
+ private tokenUsage;
18
+ private sessionStartTime;
19
+ private apiKey;
20
+ constructor(options: ChatOptions);
21
+ start(): Promise<void>;
22
+ resume(sessionId?: string): Promise<void>;
23
+ private loop;
24
+ private handleCommand;
25
+ private handleCompact;
26
+ private handleResume;
27
+ private handleRename;
28
+ private handleExport;
29
+ private handleConfig;
30
+ private handleModel;
31
+ private handlePermissions;
32
+ private showStatus;
33
+ private showContext;
34
+ private showCost;
35
+ private showUsage;
36
+ private runDoctor;
37
+ private handleAddDir;
38
+ private showHistory;
39
+ private handleInit;
40
+ private handleReview;
41
+ private showTerminalSetup;
42
+ private showHelp;
43
+ private processMessage;
44
+ private getResponse;
45
+ private getStreamingResponse;
46
+ private executeToolCall;
47
+ private saveSession;
48
+ private printMarkdown;
49
+ }
50
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/conversation/chat.ts"],"names":[],"mappings":"AA4CA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAAwE;IAC1F,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,WAAW;IAa1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCtB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA0CjC,IAAI;YAsCJ,aAAa;YAqJb,aAAa;YAkBb,YAAY;YAoCZ,YAAY;YAeZ,YAAY;YAwBZ,YAAY;YAeZ,WAAW;IAyLzB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,SAAS;YASH,SAAS;IAsFvB,OAAO,CAAC,YAAY;YAiBN,WAAW;YAoBX,UAAU;YAmDV,YAAY;IA6B1B,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,QAAQ;YA+DF,cAAc;YAmBd,WAAW;YAoCX,oBAAoB;YAuFpB,eAAe;YAgGf,WAAW;IAOzB,OAAO,CAAC,aAAa;CAQtB"}