@defai.digital/ax-cli 0.1.1 → 0.2.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 (78) hide show
  1. package/README.md +24 -16
  2. package/automatosx.config.json +333 -0
  3. package/dist/agent/grok-agent.d.ts +7 -1
  4. package/dist/agent/grok-agent.js +22 -9
  5. package/dist/agent/grok-agent.js.map +1 -1
  6. package/dist/commands/mcp.js +1 -1
  7. package/dist/commands/mcp.js.map +1 -1
  8. package/dist/constants.d.ts +67 -1
  9. package/dist/constants.js +57 -1
  10. package/dist/constants.js.map +1 -1
  11. package/dist/grok/client.d.ts +133 -2
  12. package/dist/grok/client.js +173 -16
  13. package/dist/grok/client.js.map +1 -1
  14. package/dist/grok/types.d.ts +291 -0
  15. package/dist/grok/types.js +127 -0
  16. package/dist/grok/types.js.map +1 -0
  17. package/dist/index.js +3 -3
  18. package/dist/index.js.map +1 -1
  19. package/dist/mcp/config.d.ts +1 -1
  20. package/dist/mcp/config.js +28 -5
  21. package/dist/mcp/config.js.map +1 -1
  22. package/dist/mcp/transports.d.ts +6 -3
  23. package/dist/mcp/transports.js +18 -12
  24. package/dist/mcp/transports.js.map +1 -1
  25. package/dist/schemas/api-schemas.d.ts +569 -0
  26. package/dist/schemas/api-schemas.js +117 -0
  27. package/dist/schemas/api-schemas.js.map +1 -0
  28. package/dist/schemas/confirmation-schemas.d.ts +60 -0
  29. package/dist/schemas/confirmation-schemas.js +41 -0
  30. package/dist/schemas/confirmation-schemas.js.map +1 -0
  31. package/dist/schemas/index-unified.d.ts +12 -0
  32. package/dist/schemas/index-unified.js +17 -0
  33. package/dist/schemas/index-unified.js.map +1 -0
  34. package/dist/schemas/index.d.ts +8 -8
  35. package/dist/schemas/index.js +5 -4
  36. package/dist/schemas/index.js.map +1 -1
  37. package/dist/schemas/mcp-schemas.d.ts +171 -0
  38. package/dist/schemas/mcp-schemas.js +77 -0
  39. package/dist/schemas/mcp-schemas.js.map +1 -0
  40. package/dist/schemas/tool-schemas.d.ts +2 -2
  41. package/dist/tools/search.js +2 -2
  42. package/dist/tools/search.js.map +1 -1
  43. package/dist/tools/text-editor.js +6 -0
  44. package/dist/tools/text-editor.js.map +1 -1
  45. package/dist/ui/components/api-key-input.js +2 -2
  46. package/dist/ui/components/api-key-input.js.map +1 -1
  47. package/dist/ui/components/chat-history.js +2 -0
  48. package/dist/ui/components/chat-history.js.map +1 -1
  49. package/dist/ui/components/chat-interface.js +31 -1
  50. package/dist/ui/components/chat-interface.js.map +1 -1
  51. package/dist/ui/components/mcp-status.js +1 -1
  52. package/dist/ui/components/mcp-status.js.map +1 -1
  53. package/dist/ui/components/reasoning-display.d.ts +109 -0
  54. package/dist/ui/components/reasoning-display.js +110 -0
  55. package/dist/ui/components/reasoning-display.js.map +1 -0
  56. package/dist/ui/shared/max-sized-box.js +1 -1
  57. package/dist/ui/shared/max-sized-box.js.map +1 -1
  58. package/dist/utils/cache.d.ts +75 -0
  59. package/dist/utils/cache.js +137 -0
  60. package/dist/utils/cache.js.map +1 -0
  61. package/dist/utils/confirmation-service.js +2 -2
  62. package/dist/utils/confirmation-service.js.map +1 -1
  63. package/dist/utils/index.d.ts +13 -0
  64. package/dist/utils/index.js +23 -0
  65. package/dist/utils/index.js.map +1 -0
  66. package/dist/utils/path-validator.d.ts +30 -0
  67. package/dist/utils/path-validator.js +67 -0
  68. package/dist/utils/path-validator.js.map +1 -0
  69. package/dist/utils/performance.d.ts +72 -0
  70. package/dist/utils/performance.js +114 -0
  71. package/dist/utils/performance.js.map +1 -0
  72. package/dist/utils/settings-manager.js +2 -2
  73. package/dist/utils/settings-manager.js.map +1 -1
  74. package/dist/utils/token-counter.d.ts +8 -1
  75. package/dist/utils/token-counter.js +11 -10
  76. package/dist/utils/token-counter.js.map +1 -1
  77. package/eslint.config.js +60 -0
  78. package/package.json +6 -2
@@ -5,8 +5,64 @@
5
5
  export declare const AGENT_CONFIG: {
6
6
  readonly MAX_TOOL_ROUNDS: 400;
7
7
  readonly DEFAULT_TIMEOUT: 360000;
8
- readonly DEFAULT_MAX_TOKENS: 1536;
8
+ readonly DEFAULT_MAX_TOKENS: 8192;
9
9
  };
10
+ export declare const GLM_MODELS: {
11
+ readonly "glm-4.6": {
12
+ readonly name: "glm-4.6";
13
+ readonly contextWindow: 200000;
14
+ readonly maxOutputTokens: 128000;
15
+ readonly defaultMaxTokens: 8192;
16
+ readonly supportsThinking: true;
17
+ readonly defaultTemperature: 0.7;
18
+ readonly temperatureRange: {
19
+ readonly min: 0.6;
20
+ readonly max: 1;
21
+ };
22
+ readonly tokenEfficiency: 1.3;
23
+ };
24
+ readonly "grok-code-fast-1": {
25
+ readonly name: "grok-code-fast-1";
26
+ readonly contextWindow: 128000;
27
+ readonly maxOutputTokens: 4096;
28
+ readonly defaultMaxTokens: 1536;
29
+ readonly supportsThinking: false;
30
+ readonly defaultTemperature: 0.7;
31
+ readonly temperatureRange: {
32
+ readonly min: 0;
33
+ readonly max: 2;
34
+ };
35
+ readonly tokenEfficiency: 1;
36
+ };
37
+ readonly "glm-4-air": {
38
+ readonly name: "glm-4-air";
39
+ readonly contextWindow: 128000;
40
+ readonly maxOutputTokens: 8192;
41
+ readonly defaultMaxTokens: 4096;
42
+ readonly supportsThinking: false;
43
+ readonly defaultTemperature: 0.7;
44
+ readonly temperatureRange: {
45
+ readonly min: 0.6;
46
+ readonly max: 1;
47
+ };
48
+ readonly tokenEfficiency: 1.15;
49
+ };
50
+ readonly "glm-4-airx": {
51
+ readonly name: "glm-4-airx";
52
+ readonly contextWindow: 8192;
53
+ readonly maxOutputTokens: 8192;
54
+ readonly defaultMaxTokens: 2048;
55
+ readonly supportsThinking: false;
56
+ readonly defaultTemperature: 0.7;
57
+ readonly temperatureRange: {
58
+ readonly min: 0.6;
59
+ readonly max: 1;
60
+ };
61
+ readonly tokenEfficiency: 1.1;
62
+ };
63
+ };
64
+ export type SupportedModel = keyof typeof GLM_MODELS;
65
+ export declare const DEFAULT_MODEL: SupportedModel;
10
66
  export declare const FILE_CONFIG: {
11
67
  readonly MAX_FILE_SIZE: number;
12
68
  readonly MAX_BUFFER_SIZE: number;
@@ -29,6 +85,16 @@ export declare const TOKEN_CONFIG: {
29
85
  readonly TOKENS_FOR_REPLY_PRIMING: 3;
30
86
  readonly DEFAULT_MODEL: "gpt-4";
31
87
  readonly DEFAULT_ENCODING: "cl100k_base";
88
+ readonly CACHE_MAX_SIZE: 1000;
89
+ };
90
+ export declare const CACHE_CONFIG: {
91
+ readonly DEFAULT_MAX_SIZE: 1000;
92
+ readonly DEFAULT_TTL: 300000;
93
+ };
94
+ export declare const PERF_CONFIG: {
95
+ readonly DEBOUNCE_DELAY: 300;
96
+ readonly THROTTLE_LIMIT: 1000;
97
+ readonly SLOW_OPERATION_THRESHOLD: 1000;
32
98
  };
33
99
  export declare const TOOL_NAMES: {
34
100
  readonly BASH: "execute_bash";
package/dist/constants.js CHANGED
@@ -6,8 +6,52 @@
6
6
  export const AGENT_CONFIG = {
7
7
  MAX_TOOL_ROUNDS: 400,
8
8
  DEFAULT_TIMEOUT: 360000, // 6 minutes
9
- DEFAULT_MAX_TOKENS: 1536,
9
+ DEFAULT_MAX_TOKENS: 8192, // Updated for GLM-4.6 (was 1536)
10
10
  };
11
+ // GLM Model Configuration
12
+ export const GLM_MODELS = {
13
+ "glm-4.6": {
14
+ name: "glm-4.6",
15
+ contextWindow: 200000, // 200K tokens
16
+ maxOutputTokens: 128000, // 128K max output
17
+ defaultMaxTokens: 8192, // Conservative default
18
+ supportsThinking: true,
19
+ defaultTemperature: 0.7,
20
+ temperatureRange: { min: 0.6, max: 1.0 },
21
+ tokenEfficiency: 1.3, // 30% more efficient
22
+ },
23
+ "grok-code-fast-1": {
24
+ name: "grok-code-fast-1",
25
+ contextWindow: 128000, // 128K tokens
26
+ maxOutputTokens: 4096,
27
+ defaultMaxTokens: 1536,
28
+ supportsThinking: false,
29
+ defaultTemperature: 0.7,
30
+ temperatureRange: { min: 0.0, max: 2.0 },
31
+ tokenEfficiency: 1.0,
32
+ },
33
+ "glm-4-air": {
34
+ name: "glm-4-air",
35
+ contextWindow: 128000,
36
+ maxOutputTokens: 8192,
37
+ defaultMaxTokens: 4096,
38
+ supportsThinking: false,
39
+ defaultTemperature: 0.7,
40
+ temperatureRange: { min: 0.6, max: 1.0 },
41
+ tokenEfficiency: 1.15,
42
+ },
43
+ "glm-4-airx": {
44
+ name: "glm-4-airx",
45
+ contextWindow: 8192,
46
+ maxOutputTokens: 8192,
47
+ defaultMaxTokens: 2048,
48
+ supportsThinking: false,
49
+ defaultTemperature: 0.7,
50
+ temperatureRange: { min: 0.6, max: 1.0 },
51
+ tokenEfficiency: 1.1,
52
+ },
53
+ };
54
+ export const DEFAULT_MODEL = "glm-4.6";
11
55
  // File Operations
12
56
  export const FILE_CONFIG = {
13
57
  MAX_FILE_SIZE: 1024 * 1024, // 1MB
@@ -35,6 +79,18 @@ export const TOKEN_CONFIG = {
35
79
  TOKENS_FOR_REPLY_PRIMING: 3,
36
80
  DEFAULT_MODEL: 'gpt-4',
37
81
  DEFAULT_ENCODING: 'cl100k_base',
82
+ CACHE_MAX_SIZE: 1000, // Maximum cached token counts
83
+ };
84
+ // Cache Configuration
85
+ export const CACHE_CONFIG = {
86
+ DEFAULT_MAX_SIZE: 1000,
87
+ DEFAULT_TTL: 300000, // 5 minutes
88
+ };
89
+ // Performance Monitoring
90
+ export const PERF_CONFIG = {
91
+ DEBOUNCE_DELAY: 300, // ms
92
+ THROTTLE_LIMIT: 1000, // ms
93
+ SLOW_OPERATION_THRESHOLD: 1000, // ms - log warning if operation takes longer
38
94
  };
39
95
  // Tool Names
40
96
  export const TOOL_NAMES = {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,eAAe,EAAE,GAAG;IACpB,eAAe,EAAE,MAAM,EAAE,YAAY;IACrC,kBAAkB,EAAE,IAAI;CAChB,CAAC;AAEX,kBAAkB;AAClB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,aAAa,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM;IAClC,eAAe,EAAE,IAAI,GAAG,IAAI,EAAE,wBAAwB;IACtD,kBAAkB,EAAE,CAAC;CACb,CAAC;AAEX,wBAAwB;AACxB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,gBAAgB,EAAE,IAAI;CACd,CAAC;AAEX,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,OAAO;IACvB,eAAe,EAAE,KAAK,EAAE,aAAa;CAC7B,CAAC;AAEX,mBAAmB;AACnB,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,sBAAsB,EAAE,IAAI,EAAE,YAAY;IAC1C,yBAAyB,EAAE,IAAI,EAAE,WAAW;CACpC,CAAC;AAEX,iBAAiB;AACjB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kBAAkB,EAAE,CAAC;IACrB,wBAAwB,EAAE,CAAC;IAC3B,aAAa,EAAE,OAAO;IACtB,gBAAgB,EAAE,aAAa;CACvB,CAAC;AAEX,aAAa;AACb,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,oBAAoB;IACjC,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,eAAe;IAC3B,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,cAAc;IACtB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,kBAAkB;CACvB,CAAC;AAEX,iBAAiB;AACjB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,gBAAgB,EAAE,oHAAoH;IACtI,yBAAyB,EAAE,qCAAqC;IAChE,cAAc,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,QAAQ,QAAQ,YAAY;IAClE,oBAAoB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,UAAU,UAAU,gBAAgB;IAClF,cAAc,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,mBAAmB,QAAQ,EAAE;IACnE,mBAAmB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,wBAAwB,OAAO,EAAE;CACnE,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ChatCompletionMessageParam } from "openai/resources/chat";
2
+ import type { ChatOptions, GLM46StreamChunk } from "./types.js";
2
3
  export type GrokMessage = ChatCompletionMessageParam;
3
4
  export interface GrokTool {
4
5
  type: "function";
@@ -31,19 +32,149 @@ export interface GrokResponse {
31
32
  message: {
32
33
  role: string;
33
34
  content: string | null;
35
+ reasoning_content?: string;
34
36
  tool_calls?: GrokToolCall[];
35
37
  };
36
38
  finish_reason: string;
37
39
  }>;
40
+ usage?: {
41
+ prompt_tokens: number;
42
+ completion_tokens: number;
43
+ total_tokens: number;
44
+ reasoning_tokens?: number;
45
+ };
38
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
+ */
39
56
  export declare class GrokClient {
40
57
  private client;
41
58
  private currentModel;
42
59
  private defaultMaxTokens;
60
+ private defaultTemperature;
43
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;
44
78
  setModel(model: string): void;
45
79
  getCurrentModel(): string;
46
- chat(messages: GrokMessage[], tools?: GrokTool[], model?: string, searchOptions?: SearchOptions): Promise<GrokResponse>;
47
- chatStream(messages: GrokMessage[], tools?: GrokTool[], model?: string, searchOptions?: SearchOptions): AsyncGenerator<any, void, unknown>;
80
+ getModelConfig(): {
81
+ readonly name: "glm-4.6";
82
+ readonly contextWindow: 200000;
83
+ readonly maxOutputTokens: 128000;
84
+ readonly defaultMaxTokens: 8192;
85
+ readonly supportsThinking: true;
86
+ readonly defaultTemperature: 0.7;
87
+ readonly temperatureRange: {
88
+ readonly min: 0.6;
89
+ readonly max: 1;
90
+ };
91
+ readonly tokenEfficiency: 1.3;
92
+ } | {
93
+ readonly name: "grok-code-fast-1";
94
+ readonly contextWindow: 128000;
95
+ readonly maxOutputTokens: 4096;
96
+ readonly defaultMaxTokens: 1536;
97
+ readonly supportsThinking: false;
98
+ readonly defaultTemperature: 0.7;
99
+ readonly temperatureRange: {
100
+ readonly min: 0;
101
+ readonly max: 2;
102
+ };
103
+ readonly tokenEfficiency: 1;
104
+ } | {
105
+ readonly name: "glm-4-air";
106
+ readonly contextWindow: 128000;
107
+ readonly maxOutputTokens: 8192;
108
+ readonly defaultMaxTokens: 4096;
109
+ readonly supportsThinking: false;
110
+ readonly defaultTemperature: 0.7;
111
+ readonly temperatureRange: {
112
+ readonly min: 0.6;
113
+ readonly max: 1;
114
+ };
115
+ readonly tokenEfficiency: 1.15;
116
+ } | {
117
+ readonly name: "glm-4-airx";
118
+ readonly contextWindow: 8192;
119
+ readonly maxOutputTokens: 8192;
120
+ readonly defaultMaxTokens: 2048;
121
+ readonly supportsThinking: false;
122
+ readonly defaultTemperature: 0.7;
123
+ readonly temperatureRange: {
124
+ readonly min: 0.6;
125
+ readonly max: 1;
126
+ };
127
+ readonly tokenEfficiency: 1.1;
128
+ };
129
+ /**
130
+ * Chat completion with GLM-4.6 support
131
+ *
132
+ * @param messages - Conversation messages
133
+ * @param tools - Available tools/functions
134
+ * @param options - Chat options including temperature, thinking mode, etc.
135
+ * @returns Promise<GrokResponse>
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const response = await client.chat(messages, tools, {
140
+ * model: 'glm-4.6',
141
+ * temperature: 0.7,
142
+ * thinking: { type: 'enabled' },
143
+ * maxTokens: 8192
144
+ * });
145
+ * ```
146
+ */
147
+ chat(messages: GrokMessage[], tools?: GrokTool[], options?: ChatOptions): Promise<GrokResponse>;
148
+ /**
149
+ * Streaming chat completion with GLM-4.6 support
150
+ *
151
+ * Yields chunks including reasoning_content when thinking is enabled
152
+ *
153
+ * @param messages - Conversation messages
154
+ * @param tools - Available tools/functions
155
+ * @param options - Chat options including temperature, thinking mode, etc.
156
+ * @returns AsyncGenerator yielding GLM46StreamChunk
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const stream = client.chatStream(messages, tools, {
161
+ * thinking: { type: 'enabled' }
162
+ * });
163
+ *
164
+ * for await (const chunk of stream) {
165
+ * if (chunk.choices[0]?.delta?.reasoning_content) {
166
+ * console.log('Reasoning:', chunk.choices[0].delta.reasoning_content);
167
+ * }
168
+ * if (chunk.choices[0]?.delta?.content) {
169
+ * console.log('Content:', chunk.choices[0].delta.content);
170
+ * }
171
+ * }
172
+ * ```
173
+ */
174
+ chatStream(messages: GrokMessage[], tools?: GrokTool[], options?: ChatOptions): AsyncGenerator<GLM46StreamChunk, void, unknown>;
175
+ /**
176
+ * Search with web context (deprecated - use chat with searchOptions)
177
+ * @deprecated Use chat() with searchOptions parameter instead
178
+ */
48
179
  search(query: string, searchParameters?: SearchParameters): Promise<GrokResponse>;
49
180
  }
@@ -1,58 +1,210 @@
1
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
+ */
2
14
  export class GrokClient {
3
15
  client;
4
- currentModel = "grok-code-fast-1";
16
+ currentModel;
5
17
  defaultMaxTokens;
18
+ defaultTemperature;
6
19
  constructor(apiKey, model, baseURL) {
7
20
  this.client = new OpenAI({
8
21
  apiKey,
9
22
  baseURL: baseURL || process.env.GROK_BASE_URL || "https://api.x.ai/v1",
10
23
  timeout: 360000,
11
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
12
30
  const envMax = Number(process.env.GROK_MAX_TOKENS);
13
- this.defaultMaxTokens = Number.isFinite(envMax) && envMax > 0 ? envMax : 1536;
14
- if (model) {
15
- this.currentModel = model;
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
+ }
16
85
  }
17
86
  }
18
87
  setModel(model) {
19
- this.currentModel = model;
88
+ this.currentModel = this.validateModel(model);
20
89
  }
21
90
  getCurrentModel() {
22
91
  return this.currentModel;
23
92
  }
24
- async chat(messages, tools, model, searchOptions) {
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) {
25
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);
26
126
  const requestPayload = {
27
- model: model || this.currentModel,
127
+ model,
28
128
  messages,
29
129
  tools: tools || [],
30
130
  tool_choice: tools && tools.length > 0 ? "auto" : undefined,
31
- temperature: 0.7,
32
- max_tokens: this.defaultMaxTokens,
131
+ temperature,
132
+ max_tokens: maxTokens,
33
133
  };
134
+ // Add GLM-4.6 thinking parameter if specified
135
+ if (thinking) {
136
+ requestPayload.thinking = thinking;
137
+ }
34
138
  // Add search parameters if specified
35
139
  if (searchOptions?.search_parameters) {
36
140
  requestPayload.search_parameters = searchOptions.search_parameters;
37
141
  }
38
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
+ }
39
149
  return response;
40
150
  }
41
151
  catch (error) {
42
- throw new Error(`Grok API error: ${error.message}`);
152
+ // Enhance error message with context
153
+ const modelInfo = options?.model || this.currentModel;
154
+ throw new Error(`Grok API error (model: ${modelInfo}): ${error.message}`);
43
155
  }
44
156
  }
45
- async *chatStream(messages, tools, model, searchOptions) {
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) {
46
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);
47
195
  const requestPayload = {
48
- model: model || this.currentModel,
196
+ model,
49
197
  messages,
50
198
  tools: tools || [],
51
199
  tool_choice: tools && tools.length > 0 ? "auto" : undefined,
52
- temperature: 0.7,
53
- max_tokens: this.defaultMaxTokens,
200
+ temperature,
201
+ max_tokens: maxTokens,
54
202
  stream: true,
55
203
  };
204
+ // Add GLM-4.6 thinking parameter if specified
205
+ if (thinking) {
206
+ requestPayload.thinking = thinking;
207
+ }
56
208
  // Add search parameters if specified
57
209
  if (searchOptions?.search_parameters) {
58
210
  requestPayload.search_parameters = searchOptions.search_parameters;
@@ -63,9 +215,14 @@ export class GrokClient {
63
215
  }
64
216
  }
65
217
  catch (error) {
66
- throw new Error(`Grok API error: ${error.message}`);
218
+ const modelInfo = options?.model || this.currentModel;
219
+ throw new Error(`Grok API streaming error (model: ${modelInfo}): ${error.message}`);
67
220
  }
68
221
  }
222
+ /**
223
+ * Search with web context (deprecated - use chat with searchOptions)
224
+ * @deprecated Use chat() with searchOptions parameter instead
225
+ */
69
226
  async search(query, searchParameters) {
70
227
  const searchMessage = {
71
228
  role: "user",
@@ -74,7 +231,7 @@ export class GrokClient {
74
231
  const searchOptions = {
75
232
  search_parameters: searchParameters || { mode: "on" },
76
233
  };
77
- return this.chat([searchMessage], [], undefined, searchOptions);
234
+ return this.chat([searchMessage], [], { searchOptions });
78
235
  }
79
236
  }
80
237
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/grok/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/grok/client.ts"],"names":[],"mappings":"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"}