@defai.digital/ax-cli 3.4.6 → 3.5.2

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 (211) hide show
  1. package/LICENSE +2 -6
  2. package/README.md +90 -2
  3. package/dist/analyzers/ast/parser.d.ts +59 -0
  4. package/dist/analyzers/ast/parser.js +293 -0
  5. package/dist/analyzers/ast/parser.js.map +1 -0
  6. package/dist/analyzers/ast/types.d.ts +107 -0
  7. package/dist/analyzers/ast/types.js +7 -0
  8. package/dist/analyzers/ast/types.js.map +1 -0
  9. package/dist/analyzers/code-smells/base-smell-detector.d.ts +30 -0
  10. package/dist/analyzers/code-smells/base-smell-detector.js +44 -0
  11. package/dist/analyzers/code-smells/base-smell-detector.js.map +1 -0
  12. package/dist/analyzers/code-smells/code-smell-analyzer.d.ts +30 -0
  13. package/dist/analyzers/code-smells/code-smell-analyzer.js +167 -0
  14. package/dist/analyzers/code-smells/code-smell-analyzer.js.map +1 -0
  15. package/dist/analyzers/code-smells/detectors/data-clumps-detector.d.ts +11 -0
  16. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js +66 -0
  17. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js.map +1 -0
  18. package/dist/analyzers/code-smells/detectors/dead-code-detector.d.ts +11 -0
  19. package/dist/analyzers/code-smells/detectors/dead-code-detector.js +53 -0
  20. package/dist/analyzers/code-smells/detectors/dead-code-detector.js.map +1 -0
  21. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.d.ts +11 -0
  22. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +51 -0
  23. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -0
  24. package/dist/analyzers/code-smells/detectors/feature-envy-detector.d.ts +11 -0
  25. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js +64 -0
  26. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js.map +1 -0
  27. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.d.ts +11 -0
  28. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js +56 -0
  29. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js.map +1 -0
  30. package/dist/analyzers/code-smells/detectors/large-class-detector.d.ts +13 -0
  31. package/dist/analyzers/code-smells/detectors/large-class-detector.js +58 -0
  32. package/dist/analyzers/code-smells/detectors/large-class-detector.js.map +1 -0
  33. package/dist/analyzers/code-smells/detectors/long-method-detector.d.ts +12 -0
  34. package/dist/analyzers/code-smells/detectors/long-method-detector.js +52 -0
  35. package/dist/analyzers/code-smells/detectors/long-method-detector.js.map +1 -0
  36. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.d.ts +12 -0
  37. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js +50 -0
  38. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js.map +1 -0
  39. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.d.ts +12 -0
  40. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js +54 -0
  41. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js.map +1 -0
  42. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.d.ts +13 -0
  43. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js +71 -0
  44. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js.map +1 -0
  45. package/dist/analyzers/code-smells/index.d.ts +16 -0
  46. package/dist/analyzers/code-smells/index.js +19 -0
  47. package/dist/analyzers/code-smells/index.js.map +1 -0
  48. package/dist/analyzers/code-smells/types.d.ts +82 -0
  49. package/dist/analyzers/code-smells/types.js +30 -0
  50. package/dist/analyzers/code-smells/types.js.map +1 -0
  51. package/dist/analyzers/dependency/circular-detector.d.ts +17 -0
  52. package/dist/analyzers/dependency/circular-detector.js +71 -0
  53. package/dist/analyzers/dependency/circular-detector.js.map +1 -0
  54. package/dist/analyzers/dependency/coupling-calculator.d.ts +24 -0
  55. package/dist/analyzers/dependency/coupling-calculator.js +86 -0
  56. package/dist/analyzers/dependency/coupling-calculator.js.map +1 -0
  57. package/dist/analyzers/dependency/dependency-analyzer.d.ts +40 -0
  58. package/dist/analyzers/dependency/dependency-analyzer.js +214 -0
  59. package/dist/analyzers/dependency/dependency-analyzer.js.map +1 -0
  60. package/dist/analyzers/dependency/dependency-graph.d.ts +57 -0
  61. package/dist/analyzers/dependency/dependency-graph.js +186 -0
  62. package/dist/analyzers/dependency/dependency-graph.js.map +1 -0
  63. package/dist/analyzers/dependency/index.d.ts +8 -0
  64. package/dist/analyzers/dependency/index.js +8 -0
  65. package/dist/analyzers/dependency/index.js.map +1 -0
  66. package/dist/analyzers/dependency/types.d.ts +105 -0
  67. package/dist/analyzers/dependency/types.js +5 -0
  68. package/dist/analyzers/dependency/types.js.map +1 -0
  69. package/dist/analyzers/git/churn-calculator.d.ts +34 -0
  70. package/dist/analyzers/git/churn-calculator.js +214 -0
  71. package/dist/analyzers/git/churn-calculator.js.map +1 -0
  72. package/dist/analyzers/git/git-analyzer.d.ts +19 -0
  73. package/dist/analyzers/git/git-analyzer.js +71 -0
  74. package/dist/analyzers/git/git-analyzer.js.map +1 -0
  75. package/dist/analyzers/git/hotspot-detector.d.ts +34 -0
  76. package/dist/analyzers/git/hotspot-detector.js +170 -0
  77. package/dist/analyzers/git/hotspot-detector.js.map +1 -0
  78. package/dist/analyzers/git/index.d.ts +7 -0
  79. package/dist/analyzers/git/index.js +7 -0
  80. package/dist/analyzers/git/index.js.map +1 -0
  81. package/dist/analyzers/git/types.d.ts +88 -0
  82. package/dist/analyzers/git/types.js +5 -0
  83. package/dist/analyzers/git/types.js.map +1 -0
  84. package/dist/analyzers/metrics/halstead-calculator.d.ts +30 -0
  85. package/dist/analyzers/metrics/halstead-calculator.js +150 -0
  86. package/dist/analyzers/metrics/halstead-calculator.js.map +1 -0
  87. package/dist/analyzers/metrics/index.d.ts +9 -0
  88. package/dist/analyzers/metrics/index.js +9 -0
  89. package/dist/analyzers/metrics/index.js.map +1 -0
  90. package/dist/analyzers/metrics/maintainability-calculator.d.ts +17 -0
  91. package/dist/analyzers/metrics/maintainability-calculator.js +46 -0
  92. package/dist/analyzers/metrics/maintainability-calculator.js.map +1 -0
  93. package/dist/analyzers/metrics/metrics-analyzer.d.ts +32 -0
  94. package/dist/analyzers/metrics/metrics-analyzer.js +140 -0
  95. package/dist/analyzers/metrics/metrics-analyzer.js.map +1 -0
  96. package/dist/analyzers/metrics/types.d.ts +67 -0
  97. package/dist/analyzers/metrics/types.js +5 -0
  98. package/dist/analyzers/metrics/types.js.map +1 -0
  99. package/dist/analyzers/security/base-detector.d.ts +58 -0
  100. package/dist/analyzers/security/base-detector.js +104 -0
  101. package/dist/analyzers/security/base-detector.js.map +1 -0
  102. package/dist/analyzers/security/detectors/command-injection-detector.d.ts +12 -0
  103. package/dist/analyzers/security/detectors/command-injection-detector.js +84 -0
  104. package/dist/analyzers/security/detectors/command-injection-detector.js.map +1 -0
  105. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.d.ts +16 -0
  106. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js +140 -0
  107. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js.map +1 -0
  108. package/dist/analyzers/security/detectors/insecure-deserialization-detector.d.ts +12 -0
  109. package/dist/analyzers/security/detectors/insecure-deserialization-detector.js +109 -0
  110. package/dist/analyzers/security/detectors/insecure-deserialization-detector.js.map +1 -0
  111. package/dist/analyzers/security/detectors/insecure-random-detector.d.ts +12 -0
  112. package/dist/analyzers/security/detectors/insecure-random-detector.js +61 -0
  113. package/dist/analyzers/security/detectors/insecure-random-detector.js.map +1 -0
  114. package/dist/analyzers/security/detectors/path-traversal-detector.d.ts +12 -0
  115. package/dist/analyzers/security/detectors/path-traversal-detector.js +82 -0
  116. package/dist/analyzers/security/detectors/path-traversal-detector.js.map +1 -0
  117. package/dist/analyzers/security/detectors/sql-injection-detector.d.ts +12 -0
  118. package/dist/analyzers/security/detectors/sql-injection-detector.js +88 -0
  119. package/dist/analyzers/security/detectors/sql-injection-detector.js.map +1 -0
  120. package/dist/analyzers/security/detectors/weak-crypto-detector.d.ts +12 -0
  121. package/dist/analyzers/security/detectors/weak-crypto-detector.js +104 -0
  122. package/dist/analyzers/security/detectors/weak-crypto-detector.js.map +1 -0
  123. package/dist/analyzers/security/detectors/xss-detector.d.ts +12 -0
  124. package/dist/analyzers/security/detectors/xss-detector.js +90 -0
  125. package/dist/analyzers/security/detectors/xss-detector.js.map +1 -0
  126. package/dist/analyzers/security/index.d.ts +16 -0
  127. package/dist/analyzers/security/index.js +18 -0
  128. package/dist/analyzers/security/index.js.map +1 -0
  129. package/dist/analyzers/security/security-analyzer.d.ts +38 -0
  130. package/dist/analyzers/security/security-analyzer.js +215 -0
  131. package/dist/analyzers/security/security-analyzer.js.map +1 -0
  132. package/dist/analyzers/security/types.d.ts +95 -0
  133. package/dist/analyzers/security/types.js +7 -0
  134. package/dist/analyzers/security/types.js.map +1 -0
  135. package/dist/commands/memory.js +1 -1
  136. package/dist/commands/memory.js.map +1 -1
  137. package/dist/commands/setup.js +6 -1
  138. package/dist/commands/setup.js.map +1 -1
  139. package/dist/hooks/use-enhanced-input.d.ts +0 -1
  140. package/dist/hooks/use-enhanced-input.js.map +1 -1
  141. package/dist/mcp/health.js +4 -2
  142. package/dist/mcp/health.js.map +1 -1
  143. package/dist/mcp/validation.js +12 -6
  144. package/dist/mcp/validation.js.map +1 -1
  145. package/dist/tools/analysis-tools.d.ts +73 -0
  146. package/dist/tools/analysis-tools.js +422 -0
  147. package/dist/tools/analysis-tools.js.map +1 -0
  148. package/dist/tools/bash.js +2 -1
  149. package/dist/tools/bash.js.map +1 -1
  150. package/dist/ui/components/chat-history.js +1 -1
  151. package/dist/ui/components/chat-history.js.map +1 -1
  152. package/dist/ui/components/chat-interface.js +3 -2
  153. package/dist/ui/components/chat-interface.js.map +1 -1
  154. package/dist/ui/components/confirmation-dialog.js +1 -1
  155. package/dist/ui/components/confirmation-dialog.js.map +1 -1
  156. package/dist/ui/components/welcome-panel.js +1 -1
  157. package/dist/ui/components/welcome-panel.js.map +1 -1
  158. package/dist/ui/hooks/use-chat-reducer.d.ts +61 -0
  159. package/dist/ui/hooks/use-chat-reducer.js +118 -0
  160. package/dist/ui/hooks/use-chat-reducer.js.map +1 -0
  161. package/dist/ui/hooks/use-enhanced-input.d.ts +40 -0
  162. package/dist/ui/hooks/use-enhanced-input.js +254 -0
  163. package/dist/ui/hooks/use-enhanced-input.js.map +1 -0
  164. package/dist/ui/hooks/use-input-handler.d.ts +46 -0
  165. package/dist/ui/hooks/use-input-handler.js +1434 -0
  166. package/dist/ui/hooks/use-input-handler.js.map +1 -0
  167. package/dist/ui/hooks/use-input-history.d.ts +9 -0
  168. package/dist/ui/hooks/use-input-history.js +117 -0
  169. package/dist/ui/hooks/use-input-history.js.map +1 -0
  170. package/dist/utils/config-loader.js +3 -3
  171. package/dist/utils/config-loader.js.map +1 -1
  172. package/dist/utils/parallel-analyzer.js +7 -11
  173. package/dist/utils/parallel-analyzer.js.map +1 -1
  174. package/dist/utils/paste-collapse.d.ts +46 -0
  175. package/dist/utils/paste-collapse.js +77 -0
  176. package/dist/utils/paste-collapse.js.map +1 -0
  177. package/dist/utils/settings-manager.js +16 -2
  178. package/dist/utils/settings-manager.js.map +1 -1
  179. package/dist/utils/streaming-analyzer.js +9 -21
  180. package/dist/utils/streaming-analyzer.js.map +1 -1
  181. package/package.json +5 -5
  182. package/vitest.config.ts +1 -0
  183. package/dist/commands/weather.d.ts +0 -8
  184. package/dist/commands/weather.js +0 -160
  185. package/dist/commands/weather.js.map +0 -1
  186. package/dist/grok/client.d.ts +0 -144
  187. package/dist/grok/client.js +0 -237
  188. package/dist/grok/client.js.map +0 -1
  189. package/dist/grok/tools.d.ts +0 -8
  190. package/dist/grok/tools.js +0 -318
  191. package/dist/grok/tools.js.map +0 -1
  192. package/dist/grok/types.d.ts +0 -291
  193. package/dist/grok/types.js +0 -127
  194. package/dist/grok/types.js.map +0 -1
  195. package/dist/tools/morph-editor.d.ts +0 -36
  196. package/dist/tools/morph-editor.js +0 -308
  197. package/dist/tools/morph-editor.js.map +0 -1
  198. package/dist/ui/components/session-recovery.d.ts +0 -12
  199. package/dist/ui/components/session-recovery.js +0 -93
  200. package/dist/ui/components/session-recovery.js.map +0 -1
  201. package/dist/utils/model-config.d.ts +0 -28
  202. package/dist/utils/model-config.js +0 -43
  203. package/dist/utils/model-config.js.map +0 -1
  204. package/dist/utils/tool-helpers.d.ts +0 -25
  205. package/dist/utils/tool-helpers.js +0 -79
  206. package/dist/utils/tool-helpers.js.map +0 -1
  207. /package/{automatosx.config.json → ax.config.json} +0 -0
  208. /package/{config → config-defaults}/messages.yaml +0 -0
  209. /package/{config → config-defaults}/models.yaml +0 -0
  210. /package/{config → config-defaults}/prompts.yaml +0 -0
  211. /package/{config → config-defaults}/settings.yaml +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defai.digital/ax-cli",
3
- "version": "3.4.6",
3
+ "version": "3.5.2",
4
4
  "description": "Enterprise-Class AI Command Line Interface - Primary support for GLM (General Language Model) with multi-provider AI orchestration powered by AutomatosX.",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -26,20 +26,20 @@
26
26
  },
27
27
  "files": [
28
28
  "dist",
29
- "config",
29
+ "config-defaults",
30
30
  "packages/schemas/dist",
31
31
  "packages/schemas/package.json",
32
32
  ".ax-cli",
33
33
  "LICENSE",
34
34
  "README.md",
35
- "automatosx.config.json",
35
+ "ax.config.json",
36
36
  "eslint.config.js",
37
37
  "vitest.config.ts"
38
38
  ],
39
39
  "scripts": {
40
- "build": "npm run build:schemas && tsc",
40
+ "build": "npm run build:schemas && tsc && chmod +x dist/index.js",
41
41
  "build:schemas": "cd packages/schemas && npm run build",
42
- "build:bun": "bun run tsc",
42
+ "build:bun": "bun run tsc && chmod +x dist/index.js",
43
43
  "dev": "bun run src/index.ts",
44
44
  "dev:node": "tsx src/index.ts",
45
45
  "start": "node dist/index.js",
package/vitest.config.ts CHANGED
@@ -4,6 +4,7 @@ export default defineConfig({
4
4
  test: {
5
5
  globals: true,
6
6
  environment: 'node',
7
+ testTimeout: 60000, // 60s timeout for analyzer tests (AST parsing is slow in CI, especially on Windows)
7
8
  exclude: [
8
9
  '**/node_modules/**',
9
10
  '**/dist/**',
@@ -1,8 +0,0 @@
1
- import { Command } from 'commander';
2
- /**
3
- * Create the weather command
4
- *
5
- * Uses curl to fetch weather data from OpenWeatherMap API
6
- * Requires OPENWEATHER_API_KEY environment variable
7
- */
8
- export declare function createWeatherCommand(): Command;
@@ -1,160 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import { BashTool } from '../tools/bash.js';
4
- /**
5
- * Create the weather command
6
- *
7
- * Uses curl to fetch weather data from OpenWeatherMap API
8
- * Requires OPENWEATHER_API_KEY environment variable
9
- */
10
- export function createWeatherCommand() {
11
- const weatherCommand = new Command('weather');
12
- weatherCommand.description('Get weather information for a location');
13
- // Get weather command
14
- weatherCommand
15
- .command('get')
16
- .description('Get current weather for a location')
17
- .argument('<location>', 'Location to get weather for (e.g., "Toronto", "New York, US")')
18
- .option('-d, --days <number>', 'Number of days to forecast (1-5)', '1')
19
- .option('-f, --forecast', 'Show forecast instead of current weather', false)
20
- .option('-k, --api-key <key>', 'OpenWeatherMap API key (overrides environment variable)')
21
- .action(async (location, options) => {
22
- try {
23
- const apiKey = options.apiKey || process.env.OPENWEATHER_API_KEY;
24
- if (!apiKey) {
25
- console.error(chalk.red('❌ OpenWeatherMap API key is required'));
26
- console.log(chalk.yellow('Set OPENWEATHER_API_KEY environment variable or use --api-key option'));
27
- console.log(chalk.gray('Get a free API key at: https://openweathermap.org/api'));
28
- process.exit(1);
29
- }
30
- const days = Math.min(Math.max(parseInt(options.days) || 1, 1), 5);
31
- const endpoint = options.forecast ? 'forecast' : 'weather';
32
- // Build the API URL
33
- let url = `https://api.openweathermap.org/data/2.5/${endpoint}?q=${encodeURIComponent(location)}&appid=${apiKey}&units=metric`;
34
- // If forecast and more than 1 day, use the 5 day / 3 hour forecast endpoint
35
- if (options.forecast && days > 1) {
36
- url = `https://api.openweathermap.org/data/2.5/forecast?q=${encodeURIComponent(location)}&appid=${apiKey}&units=metric`;
37
- }
38
- console.log(chalk.blue(`🌤️ Fetching weather data for ${location}...`));
39
- const bashTool = new BashTool();
40
- const result = await bashTool.execute(`curl -s "${url}"`);
41
- if (result.error) {
42
- console.error(chalk.red('❌ Error fetching weather data:'), result.error);
43
- process.exit(1);
44
- }
45
- try {
46
- const weatherData = JSON.parse(result.output || '{}');
47
- if (weatherData.cod && weatherData.cod !== "200") {
48
- console.error(chalk.red('❌ Weather API error:'), weatherData.message || 'Unknown error');
49
- process.exit(1);
50
- }
51
- if (options.forecast) {
52
- displayForecast(weatherData, location, days);
53
- }
54
- else {
55
- displayCurrentWeather(weatherData, location);
56
- }
57
- }
58
- catch (parseError) {
59
- console.error(chalk.red('❌ Error parsing weather data:'), parseError instanceof Error ? parseError.message : 'Unknown error');
60
- process.exit(1);
61
- }
62
- }
63
- catch (error) {
64
- console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : 'Unknown error');
65
- process.exit(1);
66
- }
67
- });
68
- return weatherCommand;
69
- }
70
- function displayCurrentWeather(data, location) {
71
- const { main, weather, wind, clouds, name } = data;
72
- console.log(chalk.bold.blue(`\n🌤️ Current Weather for ${name || location}\n`));
73
- if (weather && weather.length > 0) {
74
- const icon = getWeatherIcon(weather[0].main);
75
- console.log(`${icon} ${weather[0].description.charAt(0).toUpperCase() + weather[0].description.slice(1)}`);
76
- }
77
- if (main) {
78
- console.log(`🌡️ Temperature: ${Math.round(main.temp)}°C (feels like ${Math.round(main.feels_like)}°C)`);
79
- console.log(`💧 Humidity: ${main.humidity}%`);
80
- console.log(`📊 Pressure: ${main.pressure} hPa`);
81
- }
82
- if (wind) {
83
- console.log(`💨 Wind: ${wind.speed} m/s${wind.deg ? ` (${getWindDirection(wind.deg)})` : ''}`);
84
- }
85
- if (clouds) {
86
- console.log(`☁️ Cloudiness: ${clouds.all}%`);
87
- }
88
- console.log();
89
- }
90
- function displayForecast(data, location, days) {
91
- console.log(chalk.bold.blue(`\n📅 Weather Forecast for ${location} (${days} day${days > 1 ? 's' : ''})\n`));
92
- if (data.list && Array.isArray(data.list)) {
93
- // Group forecasts by day
94
- const dailyForecasts = {};
95
- data.list.forEach((item) => {
96
- const date = new Date(item.dt * 1000).toLocaleDateString();
97
- if (!dailyForecasts[date]) {
98
- dailyForecasts[date] = [];
99
- }
100
- dailyForecasts[date].push(item);
101
- });
102
- // Display each day's forecast
103
- Object.entries(dailyForecasts).slice(0, days).forEach(([date, forecasts]) => {
104
- console.log(chalk.bold(date));
105
- // Get midday forecast (or first available)
106
- const middayForecast = forecasts.find((f) => {
107
- const hour = new Date(f.dt * 1000).getHours();
108
- return hour >= 12 && hour <= 15;
109
- }) || forecasts[0];
110
- if (middayForecast) {
111
- const { main, weather, wind } = middayForecast;
112
- const time = new Date(middayForecast.dt * 1000).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
113
- if (weather && weather.length > 0) {
114
- const icon = getWeatherIcon(weather[0].main);
115
- console.log(` ${icon} ${time} - ${weather[0].description.charAt(0).toUpperCase() + weather[0].description.slice(1)}`);
116
- }
117
- if (main) {
118
- console.log(` 🌡️ ${Math.round(main.temp)}°C (feels like ${Math.round(main.feels_like)}°C)`);
119
- console.log(` 💧 ${main.humidity}%`);
120
- }
121
- if (wind) {
122
- console.log(` 💨 ${wind.speed} m/s`);
123
- }
124
- }
125
- console.log();
126
- });
127
- }
128
- else if (data.main && data.weather) {
129
- // Single day forecast (current weather endpoint with forecast data)
130
- displayCurrentWeather(data, location);
131
- }
132
- else {
133
- console.log(chalk.yellow('⚠️ No forecast data available'));
134
- }
135
- }
136
- function getWeatherIcon(condition) {
137
- const icons = {
138
- 'Clear': '☀️',
139
- 'Clouds': '☁️',
140
- 'Rain': '🌧️',
141
- 'Drizzle': '🌦️',
142
- 'Thunderstorm': '⛈️',
143
- 'Snow': '❄️',
144
- 'Mist': '🌫️',
145
- 'Fog': '🌫️',
146
- 'Haze': '🌫️',
147
- 'Dust': '🌫️',
148
- 'Sand': '🌫️',
149
- 'Ash': '🌋',
150
- 'Squall': '💨',
151
- 'Tornado': '🌪️'
152
- };
153
- return icons[condition] || '🌤️';
154
- }
155
- function getWindDirection(degrees) {
156
- const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];
157
- const index = Math.round(degrees / 45) % 8;
158
- return directions[index];
159
- }
160
- //# sourceMappingURL=weather.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"weather.js","sourceRoot":"","sources":["../../src/commands/weather.ts"],"names":[],"mappings":"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"}
@@ -1,144 +0,0 @@
1
- import type { ChatCompletionMessageParam } from "openai/resources/chat";
2
- import type { ChatOptions, GLM46StreamChunk } from "./types.js";
3
- export type GrokMessage = ChatCompletionMessageParam;
4
- export interface GrokTool {
5
- type: "function";
6
- function: {
7
- name: string;
8
- description: string;
9
- parameters: {
10
- type: "object";
11
- properties: Record<string, any>;
12
- required: string[];
13
- };
14
- };
15
- }
16
- export interface GrokToolCall {
17
- id: string;
18
- type: "function";
19
- function: {
20
- name: string;
21
- arguments: string;
22
- };
23
- }
24
- export interface SearchParameters {
25
- mode?: "auto" | "on" | "off";
26
- }
27
- export interface SearchOptions {
28
- search_parameters?: SearchParameters;
29
- }
30
- export interface GrokResponse {
31
- choices: Array<{
32
- message: {
33
- role: string;
34
- content: string | null;
35
- reasoning_content?: string;
36
- tool_calls?: GrokToolCall[];
37
- };
38
- finish_reason: string;
39
- }>;
40
- usage?: {
41
- prompt_tokens: number;
42
- completion_tokens: number;
43
- total_tokens: number;
44
- reasoning_tokens?: number;
45
- };
46
- }
47
- /**
48
- * GrokClient - Enhanced client for GLM-4.6 API
49
- *
50
- * Supports advanced features including:
51
- * - Thinking/reasoning mode
52
- * - Configurable temperature (0.6-1.0 for GLM-4.6)
53
- * - Extended context windows (up to 200K tokens)
54
- * - Multiple model support
55
- */
56
- export declare class GrokClient {
57
- private client;
58
- private currentModel;
59
- private defaultMaxTokens;
60
- private defaultTemperature;
61
- constructor(apiKey: string, model?: string, baseURL?: string);
62
- /**
63
- * Validate and normalize model name
64
- */
65
- private validateModel;
66
- /**
67
- * Validate temperature for current model
68
- */
69
- private validateTemperature;
70
- /**
71
- * Validate max tokens for current model
72
- */
73
- private validateMaxTokens;
74
- /**
75
- * Validate thinking configuration for current model
76
- */
77
- private validateThinking;
78
- setModel(model: string): void;
79
- getCurrentModel(): string;
80
- getModelConfig(): {
81
- name: string;
82
- contextWindow: number;
83
- maxOutputTokens: number;
84
- defaultMaxTokens: number;
85
- supportsThinking: boolean;
86
- defaultTemperature: number;
87
- temperatureRange: {
88
- min: number;
89
- max: number;
90
- };
91
- tokenEfficiency: number;
92
- };
93
- /**
94
- * Chat completion with GLM-4.6 support
95
- *
96
- * @param messages - Conversation messages
97
- * @param tools - Available tools/functions
98
- * @param options - Chat options including temperature, thinking mode, etc.
99
- * @returns Promise<GrokResponse>
100
- *
101
- * @example
102
- * ```typescript
103
- * const response = await client.chat(messages, tools, {
104
- * model: 'glm-4.6',
105
- * temperature: 0.7,
106
- * thinking: { type: 'enabled' },
107
- * maxTokens: 8192
108
- * });
109
- * ```
110
- */
111
- chat(messages: GrokMessage[], tools?: GrokTool[], options?: ChatOptions): Promise<GrokResponse>;
112
- /**
113
- * Streaming chat completion with GLM-4.6 support
114
- *
115
- * Yields chunks including reasoning_content when thinking is enabled
116
- *
117
- * @param messages - Conversation messages
118
- * @param tools - Available tools/functions
119
- * @param options - Chat options including temperature, thinking mode, etc.
120
- * @returns AsyncGenerator yielding GLM46StreamChunk
121
- *
122
- * @example
123
- * ```typescript
124
- * const stream = client.chatStream(messages, tools, {
125
- * thinking: { type: 'enabled' }
126
- * });
127
- *
128
- * for await (const chunk of stream) {
129
- * if (chunk.choices[0]?.delta?.reasoning_content) {
130
- * console.log('Reasoning:', chunk.choices[0].delta.reasoning_content);
131
- * }
132
- * if (chunk.choices[0]?.delta?.content) {
133
- * console.log('Content:', chunk.choices[0].delta.content);
134
- * }
135
- * }
136
- * ```
137
- */
138
- chatStream(messages: GrokMessage[], tools?: GrokTool[], options?: ChatOptions): AsyncGenerator<GLM46StreamChunk, void, unknown>;
139
- /**
140
- * Search with web context (deprecated - use chat with searchOptions)
141
- * @deprecated Use chat() with searchOptions parameter instead
142
- */
143
- search(query: string, searchParameters?: SearchParameters): Promise<GrokResponse>;
144
- }
@@ -1,237 +0,0 @@
1
- import OpenAI from "openai";
2
- import { safeValidateGrokResponse } from "../schemas/api-schemas.js";
3
- import { ErrorCategory, createErrorMessage } from "../utils/error-handler.js";
4
- import { GLM_MODELS, DEFAULT_MODEL } from "../constants.js";
5
- /**
6
- * GrokClient - Enhanced client for GLM-4.6 API
7
- *
8
- * Supports advanced features including:
9
- * - Thinking/reasoning mode
10
- * - Configurable temperature (0.6-1.0 for GLM-4.6)
11
- * - Extended context windows (up to 200K tokens)
12
- * - Multiple model support
13
- */
14
- export class GrokClient {
15
- client;
16
- currentModel;
17
- defaultMaxTokens;
18
- defaultTemperature;
19
- constructor(apiKey, model, baseURL) {
20
- this.client = new OpenAI({
21
- apiKey,
22
- baseURL: baseURL || process.env.GROK_BASE_URL || "https://api.x.ai/v1",
23
- timeout: 360000,
24
- });
25
- // Set model with validation
26
- this.currentModel = this.validateModel(model || DEFAULT_MODEL);
27
- // Get model configuration
28
- const modelConfig = GLM_MODELS[this.currentModel];
29
- // Set defaults from environment or model config
30
- const envMax = Number(process.env.GROK_MAX_TOKENS);
31
- this.defaultMaxTokens = Number.isFinite(envMax) && envMax > 0
32
- ? Math.min(envMax, modelConfig.maxOutputTokens)
33
- : modelConfig.defaultMaxTokens;
34
- const envTemp = Number(process.env.GROK_TEMPERATURE);
35
- this.defaultTemperature = Number.isFinite(envTemp) &&
36
- envTemp >= modelConfig.temperatureRange.min &&
37
- envTemp <= modelConfig.temperatureRange.max
38
- ? envTemp
39
- : modelConfig.defaultTemperature;
40
- }
41
- /**
42
- * Validate and normalize model name
43
- */
44
- validateModel(model) {
45
- if (model in GLM_MODELS) {
46
- return model;
47
- }
48
- console.warn(`Unknown model "${model}", using default: ${DEFAULT_MODEL}`);
49
- return DEFAULT_MODEL;
50
- }
51
- /**
52
- * Validate temperature for current model
53
- */
54
- validateTemperature(temperature, model) {
55
- const config = GLM_MODELS[model];
56
- const { min, max } = config.temperatureRange;
57
- if (temperature < min || temperature > max) {
58
- throw new Error(`Temperature ${temperature} is out of range for model ${model}. ` +
59
- `Valid range: ${min} - ${max}`);
60
- }
61
- }
62
- /**
63
- * Validate max tokens for current model
64
- */
65
- validateMaxTokens(maxTokens, model) {
66
- const config = GLM_MODELS[model];
67
- if (maxTokens > config.maxOutputTokens) {
68
- throw new Error(`Max tokens ${maxTokens} exceeds limit for model ${model}. ` +
69
- `Maximum: ${config.maxOutputTokens}`);
70
- }
71
- if (maxTokens < 1) {
72
- throw new Error(`Max tokens must be at least 1, got ${maxTokens}`);
73
- }
74
- }
75
- /**
76
- * Validate thinking configuration for current model
77
- */
78
- validateThinking(thinking, model) {
79
- if (thinking && thinking.type === "enabled") {
80
- const config = GLM_MODELS[model];
81
- if (!config.supportsThinking) {
82
- throw new Error(`Thinking mode is not supported by model ${model}. ` +
83
- `Use glm-4.6 for thinking capabilities.`);
84
- }
85
- }
86
- }
87
- setModel(model) {
88
- this.currentModel = this.validateModel(model);
89
- }
90
- getCurrentModel() {
91
- return this.currentModel;
92
- }
93
- getModelConfig() {
94
- return GLM_MODELS[this.currentModel];
95
- }
96
- /**
97
- * Chat completion with GLM-4.6 support
98
- *
99
- * @param messages - Conversation messages
100
- * @param tools - Available tools/functions
101
- * @param options - Chat options including temperature, thinking mode, etc.
102
- * @returns Promise<GrokResponse>
103
- *
104
- * @example
105
- * ```typescript
106
- * const response = await client.chat(messages, tools, {
107
- * model: 'glm-4.6',
108
- * temperature: 0.7,
109
- * thinking: { type: 'enabled' },
110
- * maxTokens: 8192
111
- * });
112
- * ```
113
- */
114
- async chat(messages, tools, options) {
115
- try {
116
- // Merge options with defaults
117
- const model = this.validateModel(options?.model || this.currentModel);
118
- const temperature = options?.temperature ?? this.defaultTemperature;
119
- const maxTokens = options?.maxTokens ?? this.defaultMaxTokens;
120
- const thinking = options?.thinking;
121
- const searchOptions = options?.searchOptions;
122
- // Validate parameters
123
- this.validateTemperature(temperature, model);
124
- this.validateMaxTokens(maxTokens, model);
125
- this.validateThinking(thinking, model);
126
- const requestPayload = {
127
- model,
128
- messages,
129
- tools: tools || [],
130
- tool_choice: tools && tools.length > 0 ? "auto" : undefined,
131
- temperature,
132
- max_tokens: maxTokens,
133
- };
134
- // Add GLM-4.6 thinking parameter if specified
135
- if (thinking) {
136
- requestPayload.thinking = thinking;
137
- }
138
- // Add search parameters if specified
139
- if (searchOptions?.search_parameters) {
140
- requestPayload.search_parameters = searchOptions.search_parameters;
141
- }
142
- const response = await this.client.chat.completions.create(requestPayload);
143
- // Validate response structure
144
- const validationResult = safeValidateGrokResponse(response);
145
- if (!validationResult.success) {
146
- console.warn(createErrorMessage(ErrorCategory.VALIDATION, 'Grok API response validation', validationResult.error || 'Invalid response structure'));
147
- // Return response anyway for backward compatibility, but log warning
148
- }
149
- return response;
150
- }
151
- catch (error) {
152
- // Enhance error message with context
153
- const modelInfo = options?.model || this.currentModel;
154
- throw new Error(`Grok API error (model: ${modelInfo}): ${error.message}`);
155
- }
156
- }
157
- /**
158
- * Streaming chat completion with GLM-4.6 support
159
- *
160
- * Yields chunks including reasoning_content when thinking is enabled
161
- *
162
- * @param messages - Conversation messages
163
- * @param tools - Available tools/functions
164
- * @param options - Chat options including temperature, thinking mode, etc.
165
- * @returns AsyncGenerator yielding GLM46StreamChunk
166
- *
167
- * @example
168
- * ```typescript
169
- * const stream = client.chatStream(messages, tools, {
170
- * thinking: { type: 'enabled' }
171
- * });
172
- *
173
- * for await (const chunk of stream) {
174
- * if (chunk.choices[0]?.delta?.reasoning_content) {
175
- * console.log('Reasoning:', chunk.choices[0].delta.reasoning_content);
176
- * }
177
- * if (chunk.choices[0]?.delta?.content) {
178
- * console.log('Content:', chunk.choices[0].delta.content);
179
- * }
180
- * }
181
- * ```
182
- */
183
- async *chatStream(messages, tools, options) {
184
- try {
185
- // Merge options with defaults
186
- const model = this.validateModel(options?.model || this.currentModel);
187
- const temperature = options?.temperature ?? this.defaultTemperature;
188
- const maxTokens = options?.maxTokens ?? this.defaultMaxTokens;
189
- const thinking = options?.thinking;
190
- const searchOptions = options?.searchOptions;
191
- // Validate parameters
192
- this.validateTemperature(temperature, model);
193
- this.validateMaxTokens(maxTokens, model);
194
- this.validateThinking(thinking, model);
195
- const requestPayload = {
196
- model,
197
- messages,
198
- tools: tools || [],
199
- tool_choice: tools && tools.length > 0 ? "auto" : undefined,
200
- temperature,
201
- max_tokens: maxTokens,
202
- stream: true,
203
- };
204
- // Add GLM-4.6 thinking parameter if specified
205
- if (thinking) {
206
- requestPayload.thinking = thinking;
207
- }
208
- // Add search parameters if specified
209
- if (searchOptions?.search_parameters) {
210
- requestPayload.search_parameters = searchOptions.search_parameters;
211
- }
212
- const stream = (await this.client.chat.completions.create(requestPayload));
213
- for await (const chunk of stream) {
214
- yield chunk;
215
- }
216
- }
217
- catch (error) {
218
- const modelInfo = options?.model || this.currentModel;
219
- throw new Error(`Grok API streaming error (model: ${modelInfo}): ${error.message}`);
220
- }
221
- }
222
- /**
223
- * Search with web context (deprecated - use chat with searchOptions)
224
- * @deprecated Use chat() with searchOptions parameter instead
225
- */
226
- async search(query, searchParameters) {
227
- const searchMessage = {
228
- role: "user",
229
- content: query,
230
- };
231
- const searchOptions = {
232
- search_parameters: searchParameters || { mode: "on" },
233
- };
234
- return this.chat([searchMessage], [], { searchOptions });
235
- }
236
- }
237
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/grok/client.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { GrokTool } from "./client.js";
2
- import { MCPManager, MCPTool } from "../mcp/client.js";
3
- export declare const GROK_TOOLS: GrokTool[];
4
- export declare function getMCPManager(): MCPManager;
5
- export declare function initializeMCPServers(): Promise<void>;
6
- export declare function convertMCPToolToGrokTool(mcpTool: MCPTool): GrokTool;
7
- export declare function addMCPToolsToGrokTools(baseTools: GrokTool[]): GrokTool[];
8
- export declare function getAllGrokTools(): Promise<GrokTool[]>;