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,32 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(git config:*)",
5
+ "Bash(git commit:*)",
6
+ "Bash(npm run build:*)",
7
+ "Bash(git add:*)",
8
+ "Bash(git push:*)",
9
+ "Bash(tree:*)",
10
+ "Bash(wc:*)",
11
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node -e:*)",
12
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\n\n// Mock the commands by simulating their output\nconsole.log\\(chalk.cyan\\(''\\\\nšŸ“š Grok Code CLI - Command Reference\\\\n''\\)\\);\n\nconsole.log\\(chalk.bold\\(''Session Management:''\\)\\);\nconsole.log\\('' /clear Clear conversation and start fresh''\\);\nconsole.log\\('' /save, /s Save current conversation''\\);\nconsole.log\\('' /history Show saved conversations''\\);\nconsole.log\\('' /resume [id] Resume a previous conversation''\\);\nconsole.log\\('' /rename <name> Rename current session''\\);\nconsole.log\\('' /export [file] Export conversation to file''\\);\nconsole.log\\('' /compact [focus] Reduce context size \\(keep last 20 messages\\)''\\);\nconsole.log\\('' /exit, /q Save and quit''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Configuration:''\\)\\);\nconsole.log\\('' /config Show current configuration''\\);\nconsole.log\\('' /model [name] Show or change the AI model''\\);\nconsole.log\\('' /stream Toggle streaming mode''\\);\nconsole.log\\('' /permissions View permission settings''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Status & Info:''\\)\\);\nconsole.log\\('' /status Show session status and info''\\);\nconsole.log\\('' /context Visualize context usage''\\);\nconsole.log\\('' /cost Show token usage and estimated cost''\\);\nconsole.log\\('' /usage Show usage statistics''\\);\nconsole.log\\('' /doctor Run diagnostics check''\\);\nconsole.log\\('' /version Show version''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Working Directory:''\\)\\);\nconsole.log\\('' /add-dir <path> Add a working directory''\\);\nconsole.log\\('' /pwd Show working directories''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.green\\(''āœ“ All 22 slash commands implemented!''\\)\\);\n\")",
13
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e:*)",
14
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\n\nconsole.log\\(chalk.cyan\\(''\\\\nšŸ“š Grok Code CLI - Command Reference\\\\n''\\)\\);\n\nconsole.log\\(chalk.bold\\(''Session Management:''\\)\\);\nconsole.log\\('' /clear Clear conversation and start fresh''\\);\nconsole.log\\('' /save, /s Save current conversation''\\);\nconsole.log\\('' /history Show saved conversations''\\);\nconsole.log\\('' /resume [id] Resume a previous conversation''\\);\nconsole.log\\('' /rename <name> Rename current session''\\);\nconsole.log\\('' /export [file] Export conversation to file''\\);\nconsole.log\\('' /compact [focus] Reduce context size \\(keep last 20 messages\\)''\\);\nconsole.log\\('' /exit, /q Save and quit''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Configuration:''\\)\\);\nconsole.log\\('' /config Show current configuration''\\);\nconsole.log\\('' /model [name] Show or change the AI model''\\);\nconsole.log\\('' /stream Toggle streaming mode''\\);\nconsole.log\\('' /permissions View permission settings''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Status & Info:''\\)\\);\nconsole.log\\('' /status Show session status and info''\\);\nconsole.log\\('' /context Visualize context usage''\\);\nconsole.log\\('' /cost Show token usage and estimated cost''\\);\nconsole.log\\('' /usage Show usage statistics''\\);\nconsole.log\\('' /doctor Run diagnostics check''\\);\nconsole.log\\('' /version Show version''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Project Setup:''\\)\\);\nconsole.log\\('' /init Initialize project with GROK.md''\\);\nconsole.log\\('' /review [focus] Request AI code review''\\);\nconsole.log\\('' /terminal-setup Show terminal configuration tips''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Working Directory:''\\)\\);\nconsole.log\\('' /add-dir <path> Add a working directory''\\);\nconsole.log\\('' /pwd Show working directories''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.bold\\(''Quick Aliases:''\\)\\);\nconsole.log\\('' /h, /c, /s, /q Help, Clear, Save, Quit''\\);\nconsole.log\\('' exit, quit Quit \\(same as /exit\\)''\\);\nconsole.log\\(\\);\n\nconsole.log\\(chalk.green\\(''āœ“ 25 slash commands implemented!''\\)\\);\n\")",
15
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node -e \"\nasync function getModels\\(\\) {\n const response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer '' + process.env.XAI_API_KEY }\n }\\);\n const data = await response.json\\(\\);\n console.log\\(''Available xAI Models:''\\);\n console.log\\(''=====================''\\);\n data.data.forEach\\(m => console.log\\(''- '' + m.id\\)\\);\n}\ngetModels\\(\\);\n\")",
16
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\n// Test dynamic model fetching from xAI API\nconst response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu'' },\n}\\);\n\nif \\(response.ok\\) {\n const data = await response.json\\(\\);\n console.log\\(''āœ… Successfully fetched models from xAI API''\\);\n console.log\\(''Total models:'', data.data.length\\);\n console.log\\(''\\\\nAvailable models:''\\);\n data.data.map\\(m => m.id\\).sort\\(\\).forEach\\(m => console.log\\('' -'', m\\)\\);\n} else {\n console.log\\(''āŒ Failed:'', response.status, response.statusText\\);\n}\n\")",
17
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\n\n// Simulate /model command display\nconsole.log\\(chalk.gray\\(''Fetching available models...\\\\n''\\)\\);\n\nconst response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu'' },\n}\\);\n\nconst data = await response.json\\(\\);\nconst availableModels = data.data.map\\(m => m.id\\).sort\\(\\);\nconst currentModel = ''grok-3'';\n\nconsole.log\\(chalk.cyan\\(''šŸ¤– Model Selection\\\\n''\\)\\);\nconsole.log\\('' '' + chalk.gray\\(''Current:''\\) + '' '' + chalk.green\\(currentModel\\) + ''\\\\n''\\);\n\n// Categorize models dynamically\nconst categories = {\n ''Grok 4'': [],\n ''Grok 3'': [],\n ''Grok 2'': [],\n ''Specialized'': [],\n ''Other'': [],\n};\n\nfor \\(const model of availableModels\\) {\n if \\(model.startsWith\\(''grok-4''\\)\\) {\n categories[''Grok 4''].push\\(model\\);\n } else if \\(model.startsWith\\(''grok-3''\\)\\) {\n categories[''Grok 3''].push\\(model\\);\n } else if \\(model.startsWith\\(''grok-2''\\)\\) {\n categories[''Grok 2''].push\\(model\\);\n } else if \\(model.includes\\(''code''\\) || model.includes\\(''vision''\\) || model.includes\\(''image''\\)\\) {\n categories[''Specialized''].push\\(model\\);\n } else {\n categories[''Other''].push\\(model\\);\n }\n}\n\nfor \\(const [category, models] of Object.entries\\(categories\\)\\) {\n if \\(models.length === 0\\) continue;\n console.log\\(chalk.bold\\('' '' + category + '':''\\)\\);\n for \\(const model of models\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n const isRecommended = model === ''grok-3'' || model === ''grok-4-0709'';\n const tag = isRecommended ? chalk.gray\\('' \\(recommended\\)''\\) : '''';\n console.log\\('' '' + chalk.cyan\\(''•''\\) + '' '' + model + current + tag\\);\n }\n console.log\\(\\);\n}\n\nconsole.log\\(chalk.gray\\('' '' + availableModels.length + '' models available from xAI API''\\)\\);\nconsole.log\\(chalk.gray\\('' Use /model <name> to switch.\\\\n''\\)\\);\n\")",
18
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\n\nconst response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu'' },\n}\\);\n\nconst data = await response.json\\(\\);\nconst availableModels = data.data.map\\(m => m.id\\).sort\\(\\);\n\n// Test partial matching\nconst testInputs = [''grok4'', ''4-0709'', ''code'', ''vision'', ''mini'', ''reasoning''];\n\nconsole.log\\(chalk.cyan\\(''šŸ” Testing partial model matching:\\\\n''\\)\\);\n\nfor \\(const input of testInputs\\) {\n const partialMatch = availableModels.find\\(m => m.toLowerCase\\(\\).includes\\(input.toLowerCase\\(\\)\\)\\);\n if \\(partialMatch\\) {\n console.log\\(chalk.green\\('' āœ“''\\) + '' \"\"'' + input + ''\"\" → '' + chalk.cyan\\(partialMatch\\)\\);\n } else {\n console.log\\(chalk.red\\('' āœ—''\\) + '' \"\"'' + input + ''\"\" → no match''\\);\n }\n}\n\")",
19
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\n\nconst response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu'' },\n}\\);\n\nconst data = await response.json\\(\\);\nconst availableModels = data.data.map\\(m => m.id\\).sort\\(\\);\n\n// Test improved partial matching\nconst testInputs = [''grok4'', ''grok 4'', ''grok-4'', ''4-0709'', ''code'', ''vision'', ''mini'', ''reasoning'', ''grok3''];\n\nconsole.log\\(chalk.cyan\\(''šŸ” Testing improved partial model matching:\\\\n''\\)\\);\n\nfor \\(const input of testInputs\\) {\n const normalized = input.toLowerCase\\(\\).replace\\(/grok\\\\s*\\(\\\\d\\)/g, ''grok-$1''\\);\n const partialMatch = availableModels.find\\(m =>\n m.toLowerCase\\(\\).includes\\(normalized\\) ||\n m.toLowerCase\\(\\).includes\\(input.toLowerCase\\(\\)\\)\n \\);\n if \\(partialMatch\\) {\n console.log\\(chalk.green\\('' āœ“''\\) + '' \"\"'' + input + ''\"\" → '' + chalk.cyan\\(partialMatch\\)\\);\n } else {\n console.log\\(chalk.red\\('' āœ—''\\) + '' \"\"'' + input + ''\"\" → no match''\\);\n }\n}\n\")",
20
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\n\n// Test /doctor command output\nconsole.log\\(chalk.cyan\\(''\\\\n🩺 Running diagnostics...\\\\n''\\)\\);\n\n// API Key check\nconst apiKey = process.env.XAI_API_KEY;\nconst keyCheck = apiKey && apiKey.startsWith\\(''xai-''\\) \n ? chalk.green\\(''āœ“''\\) + '' API Key API key is configured''\n : chalk.red\\(''āœ—''\\) + '' API Key Not configured'';\nconsole.log\\('' '' + keyCheck\\);\n\n// Node.js version\nconst nodeVersion = process.version;\nconst nodeMajor = parseInt\\(nodeVersion.slice\\(1\\)\\);\nconst nodeCheck = nodeMajor >= 18\n ? chalk.green\\(''āœ“''\\) + '' Node.js '' + nodeVersion + '' \\(>=18 required\\)''\n : chalk.red\\(''āœ—''\\) + '' Node.js '' + nodeVersion + '' \\(>=18 required\\)'';\nconsole.log\\('' '' + nodeCheck\\);\n\n// Working directory check\nimport { access, constants } from ''fs/promises'';\ntry {\n await access\\(process.cwd\\(\\), constants.R_OK | constants.W_OK\\);\n console.log\\('' '' + chalk.green\\(''āœ“''\\) + '' Working Dir Read/write access confirmed''\\);\n} catch {\n console.log\\('' '' + chalk.red\\(''āœ—''\\) + '' Working Dir No read/write access''\\);\n}\n\n// Config directory\nimport { homedir } from ''os'';\nconst configDir = homedir\\(\\) + ''/.config/grokcodecli'';\nconsole.log\\('' '' + chalk.green\\(''āœ“''\\) + '' Config Dir '' + configDir\\);\n\n// Git check\nimport { execSync } from ''child_process'';\ntry {\n execSync\\(''git --version'', { stdio: ''pipe'' }\\);\n console.log\\('' '' + chalk.green\\(''āœ“''\\) + '' Git Git is available''\\);\n} catch {\n console.log\\('' '' + chalk.yellow\\(''!''\\) + '' Git Not available''\\);\n}\n\n// API connection test\ntry {\n const response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer '' + apiKey },\n }\\);\n if \\(response.ok\\) {\n console.log\\('' '' + chalk.green\\(''āœ“''\\) + '' API Connection Connected to xAI API''\\);\n } else {\n console.log\\('' '' + chalk.red\\(''āœ—''\\) + '' API Connection '' + response.status + '' '' + response.statusText\\);\n }\n} catch \\(e\\) {\n console.log\\('' '' + chalk.red\\(''āœ—''\\) + '' API Connection '' + e.message\\);\n}\n\nconsole.log\\(''\\\\n '' + chalk.green\\(''All checks passed! Grok Code is ready.\\\\n''\\)\\);\n\")",
21
+ "Bash(node --input-type=module -e:*)",
22
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\n// Fetch and display all models from xAI\nconst response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu'' },\n}\\);\n\nconst data = await response.json\\(\\);\nconsole.log\\(''All xAI Models:''\\);\nconsole.log\\(''================''\\);\ndata.data.map\\(m => m.id\\).sort\\(\\).forEach\\(m => {\n const isReasoning = m.includes\\(''reasoning''\\);\n const tag = isReasoning ? '' [REASONING]'' : '''';\n console.log\\('' -'', m + tag\\);\n}\\);\n\")",
23
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\n\nconst response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu'' },\n}\\);\n\nconst data = await response.json\\(\\);\nconst availableModels = data.data.map\\(m => m.id\\).sort\\(\\);\nconst currentModel = ''grok-4-0709'';\n\nconsole.log\\(chalk.gray\\(''Fetching available models...''\\)\\);\nconsole.log\\(\\);\nconsole.log\\(chalk.cyan\\(''╭──────────────────────────────────────────────────────────────────────╮''\\)\\);\nconsole.log\\(chalk.cyan\\(''│''\\) + chalk.bold.cyan\\('' šŸ¤– Model Selection ''\\) + chalk.cyan\\(''│''\\)\\);\nconsole.log\\(chalk.cyan\\(''╰──────────────────────────────────────────────────────────────────────╯''\\)\\);\nconsole.log\\(\\);\nconsole.log\\('' '' + chalk.gray\\(''Current Model:''\\) + '' '' + chalk.bold.green\\(currentModel\\)\\);\nconsole.log\\(\\);\n\n// Better categorization\nconst grok41Reasoning = [];\nconst grok41NonReasoning = [];\nconst grok4Reasoning = [];\nconst grok4NonReasoning = [];\nconst grok4Other = [];\nconst grok3 = [];\nconst grok2 = [];\nconst specialized = [];\n\nfor \\(const model of availableModels\\) {\n if \\(model.startsWith\\(''grok-4-1''\\)\\) {\n if \\(model.includes\\(''non-reasoning''\\)\\) {\n grok41NonReasoning.push\\(model\\);\n } else if \\(model.includes\\(''reasoning''\\)\\) {\n grok41Reasoning.push\\(model\\);\n }\n } else if \\(model.startsWith\\(''grok-4''\\)\\) {\n if \\(model.includes\\(''non-reasoning''\\)\\) {\n grok4NonReasoning.push\\(model\\);\n } else if \\(model.includes\\(''reasoning''\\)\\) {\n grok4Reasoning.push\\(model\\);\n } else {\n grok4Other.push\\(model\\);\n }\n } else if \\(model.startsWith\\(''grok-3''\\)\\) {\n grok3.push\\(model\\);\n } else if \\(model.startsWith\\(''grok-2''\\)\\) {\n grok2.push\\(model\\);\n } else if \\(model.includes\\(''code''\\) || model.includes\\(''vision''\\) || model.includes\\(''image''\\)\\) {\n specialized.push\\(model\\);\n }\n}\n\n// Display Grok 4.1 \\(Latest\\)\nif \\(grok41Reasoning.length > 0 || grok41NonReasoning.length > 0\\) {\n console.log\\(chalk.bold.magenta\\('' ⭐ Grok 4.1 \\(Latest\\)''\\)\\);\n console.log\\(chalk.gray\\('' ─────────────────────────────────────────────────────────────────''\\)\\);\n for \\(const model of grok41Reasoning\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.green\\(''🧠''\\) + '' '' + chalk.green\\(model\\) + current + '' '' + chalk.yellow\\(''[REASONING]''\\)\\);\n }\n for \\(const model of grok41NonReasoning\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.cyan\\(''⚔''\\) + '' '' + model + current + '' '' + chalk.gray\\(''[FAST]''\\)\\);\n }\n console.log\\(\\);\n}\n\n// Display Grok 4\nif \\(grok4Reasoning.length > 0 || grok4NonReasoning.length > 0 || grok4Other.length > 0\\) {\n console.log\\(chalk.bold.cyan\\('' šŸš€ Grok 4''\\)\\);\n console.log\\(chalk.gray\\('' ─────────────────────────────────────────────────────────────────''\\)\\);\n for \\(const model of grok4Other\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.cyan\\(''•''\\) + '' '' + model + current + '' '' + chalk.gray\\(''\\(recommended\\)''\\)\\);\n }\n for \\(const model of grok4Reasoning\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.green\\(''🧠''\\) + '' '' + chalk.green\\(model\\) + current + '' '' + chalk.yellow\\(''[REASONING]''\\)\\);\n }\n for \\(const model of grok4NonReasoning\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.cyan\\(''⚔''\\) + '' '' + model + current + '' '' + chalk.gray\\(''[FAST]''\\)\\);\n }\n console.log\\(\\);\n}\n\n// Display Grok 3\nif \\(grok3.length > 0\\) {\n console.log\\(chalk.bold.blue\\('' šŸ“¦ Grok 3''\\)\\);\n console.log\\(chalk.gray\\('' ─────────────────────────────────────────────────────────────────''\\)\\);\n for \\(const model of grok3\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.cyan\\(''•''\\) + '' '' + model + current\\);\n }\n console.log\\(\\);\n}\n\n// Display Grok 2\nif \\(grok2.length > 0\\) {\n console.log\\(chalk.bold.gray\\('' šŸ“· Grok 2 \\(Vision/Image\\)''\\)\\);\n console.log\\(chalk.gray\\('' ─────────────────────────────────────────────────────────────────''\\)\\);\n for \\(const model of grok2\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.cyan\\(''•''\\) + '' '' + model + current\\);\n }\n console.log\\(\\);\n}\n\n// Display Specialized\nif \\(specialized.length > 0\\) {\n console.log\\(chalk.bold.yellow\\('' šŸ”§ Specialized''\\)\\);\n console.log\\(chalk.gray\\('' ─────────────────────────────────────────────────────────────────''\\)\\);\n for \\(const model of specialized\\) {\n const current = model === currentModel ? chalk.green\\('' ← current''\\) : '''';\n console.log\\('' '' + chalk.cyan\\(''•''\\) + '' '' + model + current\\);\n }\n console.log\\(\\);\n}\n\nconsole.log\\(chalk.gray\\('' '' + availableModels.length + '' models available • Use /model <name> to switch''\\)\\);\nconsole.log\\(chalk.gray\\('' 🧠 = Reasoning \\(best for complex tasks\\) • ⚔ = Fast \\(quick responses\\)''\\)\\);\nconsole.log\\(\\);\n\")",
24
+ "Bash(XAI_API_KEY=\"xai-TGckGPUWCb2JDfZu7autGWhnpqJqA8YJI5ZY6wp2X5rRed2Dko27UC5DwS9UsfKdSFGgxdToLrviILPu\" node --input-type=module -e \"\nimport chalk from ''chalk'';\nimport { access, constants } from ''fs/promises'';\nimport { execSync } from ''child_process'';\nimport { homedir } from ''os'';\n\n// Test /doctor command output\nconsole.log\\(\\);\nconsole.log\\(chalk.cyan\\(''╭──────────────────────────────────────────────────────────────────────╮''\\)\\);\nconsole.log\\(chalk.cyan\\(''│''\\) + chalk.bold.cyan\\('' 🩺 Grok Code CLI - Diagnostics ''\\) + chalk.cyan\\(''│''\\)\\);\nconsole.log\\(chalk.cyan\\(''╰──────────────────────────────────────────────────────────────────────╯''\\)\\);\nconsole.log\\(\\);\n\n// API Key check\nconst apiKey = process.env.XAI_API_KEY;\nconst keyCheck = apiKey && apiKey.startsWith\\(''xai-''\\) \n ? chalk.green\\(''āœ“''\\) + '' API Key '' + chalk.green\\(''Configured''\\)\n : chalk.red\\(''āœ—''\\) + '' API Key '' + chalk.red\\(''Not configured''\\);\nconsole.log\\('' '' + keyCheck\\);\n\n// Node.js version\nconst nodeVersion = process.version;\nconst nodeMajor = parseInt\\(nodeVersion.slice\\(1\\)\\);\nconst nodeCheck = nodeMajor >= 18\n ? chalk.green\\(''āœ“''\\) + '' Node.js '' + chalk.cyan\\(nodeVersion\\) + '' '' + chalk.gray\\(''\\(>=18 required\\)''\\)\n : chalk.red\\(''āœ—''\\) + '' Node.js '' + nodeVersion + chalk.red\\('' \\(>=18 required\\)''\\);\nconsole.log\\('' '' + nodeCheck\\);\n\n// Working directory check\ntry {\n await access\\(process.cwd\\(\\), constants.R_OK | constants.W_OK\\);\n console.log\\('' '' + chalk.green\\(''āœ“''\\) + '' Working Dir '' + chalk.green\\(''Read/write access OK''\\)\\);\n} catch {\n console.log\\('' '' + chalk.red\\(''āœ—''\\) + '' Working Dir '' + chalk.red\\(''No read/write access''\\)\\);\n}\n\n// Config directory\nconst configDir = homedir\\(\\) + ''/.config/grokcodecli'';\nconsole.log\\('' '' + chalk.green\\(''āœ“''\\) + '' Config Dir '' + chalk.gray\\(configDir\\)\\);\n\n// Git check\ntry {\n execSync\\(''git --version'', { stdio: ''pipe'' }\\);\n console.log\\('' '' + chalk.green\\(''āœ“''\\) + '' Git '' + chalk.green\\(''Available''\\)\\);\n} catch {\n console.log\\('' '' + chalk.yellow\\(''!''\\) + '' Git '' + chalk.yellow\\(''Not available''\\)\\);\n}\n\n// API connection test\ntry {\n const response = await fetch\\(''https://api.x.ai/v1/models'', {\n headers: { ''Authorization'': ''Bearer '' + apiKey },\n }\\);\n if \\(response.ok\\) {\n const data = await response.json\\(\\);\n console.log\\('' '' + chalk.green\\(''āœ“''\\) + '' API Connection '' + chalk.green\\(''Connected''\\) + '' '' + chalk.gray\\(''\\('' + data.data.length + '' models\\)''\\)\\);\n } else {\n console.log\\('' '' + chalk.red\\(''āœ—''\\) + '' API Connection '' + chalk.red\\(response.status + '' '' + response.statusText\\)\\);\n }\n} catch \\(e\\) {\n console.log\\('' '' + chalk.red\\(''āœ—''\\) + '' API Connection '' + chalk.red\\(e.message\\)\\);\n}\n\nconsole.log\\(\\);\nconsole.log\\(chalk.green\\('' All checks passed! Grok Code is ready to use.''\\)\\);\nconsole.log\\(\\);\n\")",
25
+ "Bash(npm link:*)",
26
+ "Bash(npm whoami:*)",
27
+ "Bash(npm login:*)",
28
+ "Bash(npm publish:*)",
29
+ "Bash(npm config set:*)"
30
+ ]
31
+ }
32
+ }