@zds-ai/cli 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 (204) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +497 -0
  3. package/dist/agent/grok-agent.d.ts +250 -0
  4. package/dist/agent/grok-agent.js +2480 -0
  5. package/dist/agent/grok-agent.js.map +1 -0
  6. package/dist/agent/index.d.ts +14 -0
  7. package/dist/agent/index.js +136 -0
  8. package/dist/agent/index.js.map +1 -0
  9. package/dist/commands/mcp.d.ts +2 -0
  10. package/dist/commands/mcp.js +239 -0
  11. package/dist/commands/mcp.js.map +1 -0
  12. package/dist/grok/client.d.ts +55 -0
  13. package/dist/grok/client.js +276 -0
  14. package/dist/grok/client.js.map +1 -0
  15. package/dist/grok/tools.d.ts +8 -0
  16. package/dist/grok/tools.js +878 -0
  17. package/dist/grok/tools.js.map +1 -0
  18. package/dist/hooks/use-enhanced-input.d.ts +38 -0
  19. package/dist/hooks/use-enhanced-input.js +228 -0
  20. package/dist/hooks/use-enhanced-input.js.map +1 -0
  21. package/dist/hooks/use-input-handler.d.ts +36 -0
  22. package/dist/hooks/use-input-handler.js +1099 -0
  23. package/dist/hooks/use-input-handler.js.map +1 -0
  24. package/dist/hooks/use-input-history.d.ts +9 -0
  25. package/dist/hooks/use-input-history.js +61 -0
  26. package/dist/hooks/use-input-history.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +869 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/mcp/client.d.ts +41 -0
  31. package/dist/mcp/client.js +224 -0
  32. package/dist/mcp/client.js.map +1 -0
  33. package/dist/mcp/config.d.ts +13 -0
  34. package/dist/mcp/config.js +56 -0
  35. package/dist/mcp/config.js.map +1 -0
  36. package/dist/mcp/transports.d.ts +53 -0
  37. package/dist/mcp/transports.js +256 -0
  38. package/dist/mcp/transports.js.map +1 -0
  39. package/dist/tools/character-tool.d.ts +27 -0
  40. package/dist/tools/character-tool.js +194 -0
  41. package/dist/tools/character-tool.js.map +1 -0
  42. package/dist/tools/clear-cache-tool.d.ts +14 -0
  43. package/dist/tools/clear-cache-tool.js +82 -0
  44. package/dist/tools/clear-cache-tool.js.map +1 -0
  45. package/dist/tools/confirmation-tool.d.ts +16 -0
  46. package/dist/tools/confirmation-tool.js +72 -0
  47. package/dist/tools/confirmation-tool.js.map +1 -0
  48. package/dist/tools/env-tool.d.ts +17 -0
  49. package/dist/tools/env-tool.js +89 -0
  50. package/dist/tools/env-tool.js.map +1 -0
  51. package/dist/tools/file-conversion-tool.d.ts +16 -0
  52. package/dist/tools/file-conversion-tool.js +181 -0
  53. package/dist/tools/file-conversion-tool.js.map +1 -0
  54. package/dist/tools/image-tool.d.ts +22 -0
  55. package/dist/tools/image-tool.js +268 -0
  56. package/dist/tools/image-tool.js.map +1 -0
  57. package/dist/tools/index.d.ts +14 -0
  58. package/dist/tools/index.js +15 -0
  59. package/dist/tools/index.js.map +1 -0
  60. package/dist/tools/internet-tool.d.ts +11 -0
  61. package/dist/tools/internet-tool.js +108 -0
  62. package/dist/tools/internet-tool.js.map +1 -0
  63. package/dist/tools/introspect-tool.d.ts +11 -0
  64. package/dist/tools/introspect-tool.js +243 -0
  65. package/dist/tools/introspect-tool.js.map +1 -0
  66. package/dist/tools/morph-editor.d.ts +38 -0
  67. package/dist/tools/morph-editor.js +318 -0
  68. package/dist/tools/morph-editor.js.map +1 -0
  69. package/dist/tools/restart-tool.d.ts +7 -0
  70. package/dist/tools/restart-tool.js +24 -0
  71. package/dist/tools/restart-tool.js.map +1 -0
  72. package/dist/tools/search.d.ts +71 -0
  73. package/dist/tools/search.js +340 -0
  74. package/dist/tools/search.js.map +1 -0
  75. package/dist/tools/task-tool.d.ts +19 -0
  76. package/dist/tools/task-tool.js +115 -0
  77. package/dist/tools/task-tool.js.map +1 -0
  78. package/dist/tools/text-editor.d.ts +35 -0
  79. package/dist/tools/text-editor.js +669 -0
  80. package/dist/tools/text-editor.js.map +1 -0
  81. package/dist/tools/tool-discovery.d.ts +20 -0
  82. package/dist/tools/tool-discovery.js +45 -0
  83. package/dist/tools/tool-discovery.js.map +1 -0
  84. package/dist/tools/zsh.d.ts +13 -0
  85. package/dist/tools/zsh.js +168 -0
  86. package/dist/tools/zsh.js.map +1 -0
  87. package/dist/types/index.d.ts +31 -0
  88. package/dist/types/index.js +2 -0
  89. package/dist/types/index.js.map +1 -0
  90. package/dist/ui/app.d.ts +7 -0
  91. package/dist/ui/app.js +99 -0
  92. package/dist/ui/app.js.map +1 -0
  93. package/dist/ui/components/active-task-status.d.ts +7 -0
  94. package/dist/ui/components/active-task-status.js +37 -0
  95. package/dist/ui/components/active-task-status.js.map +1 -0
  96. package/dist/ui/components/api-key-input.d.ts +7 -0
  97. package/dist/ui/components/api-key-input.js +80 -0
  98. package/dist/ui/components/api-key-input.js.map +1 -0
  99. package/dist/ui/components/backend-status.d.ts +7 -0
  100. package/dist/ui/components/backend-status.js +85 -0
  101. package/dist/ui/components/backend-status.js.map +1 -0
  102. package/dist/ui/components/chat-history.d.ts +8 -0
  103. package/dist/ui/components/chat-history.js +187 -0
  104. package/dist/ui/components/chat-history.js.map +1 -0
  105. package/dist/ui/components/chat-input.d.ts +9 -0
  106. package/dist/ui/components/chat-input.js +63 -0
  107. package/dist/ui/components/chat-input.js.map +1 -0
  108. package/dist/ui/components/chat-interface.d.ts +9 -0
  109. package/dist/ui/components/chat-interface.js +389 -0
  110. package/dist/ui/components/chat-interface.js.map +1 -0
  111. package/dist/ui/components/command-suggestions.d.ts +17 -0
  112. package/dist/ui/components/command-suggestions.js +22 -0
  113. package/dist/ui/components/command-suggestions.js.map +1 -0
  114. package/dist/ui/components/confirmation-dialog.d.ts +11 -0
  115. package/dist/ui/components/confirmation-dialog.js +105 -0
  116. package/dist/ui/components/confirmation-dialog.js.map +1 -0
  117. package/dist/ui/components/context-status.d.ts +7 -0
  118. package/dist/ui/components/context-status.js +36 -0
  119. package/dist/ui/components/context-status.js.map +1 -0
  120. package/dist/ui/components/diff-renderer.d.ts +13 -0
  121. package/dist/ui/components/diff-renderer.js +206 -0
  122. package/dist/ui/components/diff-renderer.js.map +1 -0
  123. package/dist/ui/components/loading-spinner.d.ts +8 -0
  124. package/dist/ui/components/loading-spinner.js +64 -0
  125. package/dist/ui/components/loading-spinner.js.map +1 -0
  126. package/dist/ui/components/mcp-status.d.ts +5 -0
  127. package/dist/ui/components/mcp-status.js +57 -0
  128. package/dist/ui/components/mcp-status.js.map +1 -0
  129. package/dist/ui/components/model-selection.d.ts +12 -0
  130. package/dist/ui/components/model-selection.js +17 -0
  131. package/dist/ui/components/model-selection.js.map +1 -0
  132. package/dist/ui/components/mood-status.d.ts +7 -0
  133. package/dist/ui/components/mood-status.js +34 -0
  134. package/dist/ui/components/mood-status.js.map +1 -0
  135. package/dist/ui/components/persona-status.d.ts +7 -0
  136. package/dist/ui/components/persona-status.js +34 -0
  137. package/dist/ui/components/persona-status.js.map +1 -0
  138. package/dist/ui/shared/max-sized-box.d.ts +8 -0
  139. package/dist/ui/shared/max-sized-box.js +6 -0
  140. package/dist/ui/shared/max-sized-box.js.map +1 -0
  141. package/dist/ui/utils/code-colorizer.d.ts +2 -0
  142. package/dist/ui/utils/code-colorizer.js +7 -0
  143. package/dist/ui/utils/code-colorizer.js.map +1 -0
  144. package/dist/ui/utils/colors.d.ts +14 -0
  145. package/dist/ui/utils/colors.js +15 -0
  146. package/dist/ui/utils/colors.js.map +1 -0
  147. package/dist/ui/utils/markdown-renderer.d.ts +4 -0
  148. package/dist/ui/utils/markdown-renderer.js +40 -0
  149. package/dist/ui/utils/markdown-renderer.js.map +1 -0
  150. package/dist/utils/auth-helper.d.ts +63 -0
  151. package/dist/utils/auth-helper.js +129 -0
  152. package/dist/utils/auth-helper.js.map +1 -0
  153. package/dist/utils/chat-history-manager-sqlite.d.ts +92 -0
  154. package/dist/utils/chat-history-manager-sqlite.js +334 -0
  155. package/dist/utils/chat-history-manager-sqlite.js.map +1 -0
  156. package/dist/utils/chat-history-manager.d.ts +87 -0
  157. package/dist/utils/chat-history-manager.js +273 -0
  158. package/dist/utils/chat-history-manager.js.map +1 -0
  159. package/dist/utils/chat-history-manager.json-backup.d.ts +69 -0
  160. package/dist/utils/chat-history-manager.json-backup.js +215 -0
  161. package/dist/utils/chat-history-manager.json-backup.js.map +1 -0
  162. package/dist/utils/confirmation-service.d.ts +46 -0
  163. package/dist/utils/confirmation-service.js +165 -0
  164. package/dist/utils/confirmation-service.js.map +1 -0
  165. package/dist/utils/custom-instructions.d.ts +1 -0
  166. package/dist/utils/custom-instructions.js +30 -0
  167. package/dist/utils/custom-instructions.js.map +1 -0
  168. package/dist/utils/database-connection.d.ts +27 -0
  169. package/dist/utils/database-connection.js +81 -0
  170. package/dist/utils/database-connection.js.map +1 -0
  171. package/dist/utils/database-schema.d.ts +17 -0
  172. package/dist/utils/database-schema.js +93 -0
  173. package/dist/utils/database-schema.js.map +1 -0
  174. package/dist/utils/error-logger.d.ts +13 -0
  175. package/dist/utils/error-logger.js +56 -0
  176. package/dist/utils/error-logger.js.map +1 -0
  177. package/dist/utils/hook-executor.d.ts +59 -0
  178. package/dist/utils/hook-executor.js +351 -0
  179. package/dist/utils/hook-executor.js.map +1 -0
  180. package/dist/utils/model-config.d.ts +28 -0
  181. package/dist/utils/model-config.js +42 -0
  182. package/dist/utils/model-config.js.map +1 -0
  183. package/dist/utils/path-utils.d.ts +4 -0
  184. package/dist/utils/path-utils.js +12 -0
  185. package/dist/utils/path-utils.js.map +1 -0
  186. package/dist/utils/settings-manager.d.ts +169 -0
  187. package/dist/utils/settings-manager.js +403 -0
  188. package/dist/utils/settings-manager.js.map +1 -0
  189. package/dist/utils/settings.d.ts +1 -0
  190. package/dist/utils/settings.js +4 -0
  191. package/dist/utils/settings.js.map +1 -0
  192. package/dist/utils/slash-commands.d.ts +25 -0
  193. package/dist/utils/slash-commands.js +454 -0
  194. package/dist/utils/slash-commands.js.map +1 -0
  195. package/dist/utils/startup-hook.d.ts +13 -0
  196. package/dist/utils/startup-hook.js +44 -0
  197. package/dist/utils/startup-hook.js.map +1 -0
  198. package/dist/utils/text-utils.d.ts +80 -0
  199. package/dist/utils/text-utils.js +182 -0
  200. package/dist/utils/text-utils.js.map +1 -0
  201. package/dist/utils/token-counter.d.ts +33 -0
  202. package/dist/utils/token-counter.js +78 -0
  203. package/dist/utils/token-counter.js.map +1 -0
  204. package/package.json +102 -0
@@ -0,0 +1,403 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import * as os from "os";
4
+ /**
5
+ * Default values for user settings
6
+ * Note: baseURL and defaultModel are typically set by environment variables or helpers
7
+ */
8
+ const DEFAULT_USER_SETTINGS = {
9
+ baseURL: "https://api.x.ai/v1", // Grok default
10
+ defaultModel: "grok-code-fast-1",
11
+ models: [
12
+ "grok-code-fast-1",
13
+ "grok-4-latest",
14
+ "grok-3-latest",
15
+ "grok-3-fast",
16
+ "grok-3-mini-fast",
17
+ ],
18
+ };
19
+ /**
20
+ * Default values for project settings
21
+ */
22
+ const DEFAULT_PROJECT_SETTINGS = {
23
+ model: "grok-code-fast-1",
24
+ };
25
+ /**
26
+ * Unified settings manager that handles both user-level and project-level settings
27
+ */
28
+ export class SettingsManager {
29
+ static instance;
30
+ userSettingsPath;
31
+ projectSettingsPath;
32
+ constructor() {
33
+ // User settings path: ~/.grok/user-settings.json
34
+ this.userSettingsPath = path.join(os.homedir(), ".grok", "user-settings.json");
35
+ // Project settings path: .grok/settings.json (in current working directory)
36
+ this.projectSettingsPath = path.join(process.cwd(), ".grok", "settings.json");
37
+ }
38
+ /**
39
+ * Get singleton instance
40
+ */
41
+ static getInstance() {
42
+ if (!SettingsManager.instance) {
43
+ SettingsManager.instance = new SettingsManager();
44
+ }
45
+ return SettingsManager.instance;
46
+ }
47
+ /**
48
+ * Ensure directory exists for a given file path
49
+ */
50
+ ensureDirectoryExists(filePath) {
51
+ const dir = path.dirname(filePath);
52
+ if (!fs.existsSync(dir)) {
53
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
54
+ }
55
+ }
56
+ /**
57
+ * Load user settings from ~/.grok/user-settings.json
58
+ */
59
+ loadUserSettings() {
60
+ try {
61
+ if (!fs.existsSync(this.userSettingsPath)) {
62
+ // Create default user settings if file doesn't exist
63
+ this.saveUserSettings(DEFAULT_USER_SETTINGS);
64
+ return { ...DEFAULT_USER_SETTINGS };
65
+ }
66
+ const content = fs.readFileSync(this.userSettingsPath, "utf-8");
67
+ const settings = JSON.parse(content);
68
+ // Merge with defaults to ensure all required fields exist
69
+ return { ...DEFAULT_USER_SETTINGS, ...settings };
70
+ }
71
+ catch (error) {
72
+ console.warn("Failed to load user settings:", error instanceof Error ? error.message : "Unknown error");
73
+ return { ...DEFAULT_USER_SETTINGS };
74
+ }
75
+ }
76
+ /**
77
+ * Save user settings to ~/.grok/user-settings.json
78
+ */
79
+ saveUserSettings(settings) {
80
+ try {
81
+ this.ensureDirectoryExists(this.userSettingsPath);
82
+ // Read existing settings directly to avoid recursion
83
+ let existingSettings = { ...DEFAULT_USER_SETTINGS };
84
+ if (fs.existsSync(this.userSettingsPath)) {
85
+ try {
86
+ const content = fs.readFileSync(this.userSettingsPath, "utf-8");
87
+ const parsed = JSON.parse(content);
88
+ existingSettings = { ...DEFAULT_USER_SETTINGS, ...parsed };
89
+ }
90
+ catch (error) {
91
+ // If file is corrupted, use defaults
92
+ console.warn("Corrupted user settings file, using defaults");
93
+ }
94
+ }
95
+ const mergedSettings = { ...existingSettings, ...settings };
96
+ fs.writeFileSync(this.userSettingsPath, JSON.stringify(mergedSettings, null, 2), { mode: 0o600 } // Secure permissions for API key
97
+ );
98
+ }
99
+ catch (error) {
100
+ console.error("Failed to save user settings:", error instanceof Error ? error.message : "Unknown error");
101
+ throw error;
102
+ }
103
+ }
104
+ /**
105
+ * Update a specific user setting
106
+ */
107
+ updateUserSetting(key, value) {
108
+ const settings = { [key]: value };
109
+ this.saveUserSettings(settings);
110
+ }
111
+ /**
112
+ * Get a specific user setting
113
+ */
114
+ getUserSetting(key) {
115
+ const settings = this.loadUserSettings();
116
+ return settings[key];
117
+ }
118
+ /**
119
+ * Load project settings from .grok/settings.json
120
+ */
121
+ loadProjectSettings() {
122
+ try {
123
+ if (!fs.existsSync(this.projectSettingsPath)) {
124
+ // Return defaults without creating file
125
+ return { ...DEFAULT_PROJECT_SETTINGS };
126
+ }
127
+ const content = fs.readFileSync(this.projectSettingsPath, "utf-8");
128
+ // Handle empty files
129
+ if (!content.trim()) {
130
+ return { ...DEFAULT_PROJECT_SETTINGS };
131
+ }
132
+ const settings = JSON.parse(content);
133
+ // Merge with defaults
134
+ return { ...DEFAULT_PROJECT_SETTINGS, ...settings };
135
+ }
136
+ catch (error) {
137
+ console.warn("Failed to load project settings:", error instanceof Error ? error.message : "Unknown error");
138
+ return { ...DEFAULT_PROJECT_SETTINGS };
139
+ }
140
+ }
141
+ /**
142
+ * Save project settings to .grok/settings.json
143
+ * Note: This is a no-op - project settings are not used in ZDS agent workflow
144
+ */
145
+ saveProjectSettings(settings) {
146
+ // Do nothing - all settings are stored in ~/.grok/user-settings.json
147
+ // This prevents creating .grok/settings.json files scattered around the filesystem
148
+ }
149
+ /**
150
+ * Update a specific project setting
151
+ */
152
+ updateProjectSetting(key, value) {
153
+ const settings = { [key]: value };
154
+ this.saveProjectSettings(settings);
155
+ }
156
+ /**
157
+ * Get a specific project setting
158
+ */
159
+ getProjectSetting(key) {
160
+ const settings = this.loadProjectSettings();
161
+ return settings[key];
162
+ }
163
+ /**
164
+ * Get the current model with proper fallback logic:
165
+ * 1. Project-specific model setting
166
+ * 2. User's default model
167
+ * 3. System default
168
+ */
169
+ getCurrentModel() {
170
+ const projectModel = this.getProjectSetting("model");
171
+ if (projectModel) {
172
+ return projectModel;
173
+ }
174
+ const userDefaultModel = this.getUserSetting("defaultModel");
175
+ if (userDefaultModel) {
176
+ return userDefaultModel;
177
+ }
178
+ return DEFAULT_PROJECT_SETTINGS.model || "grok-code-fast-1";
179
+ }
180
+ /**
181
+ * Set the current model for the project
182
+ */
183
+ setCurrentModel(model) {
184
+ this.updateProjectSetting("model", model);
185
+ }
186
+ /**
187
+ * Get available models list from user settings
188
+ */
189
+ getAvailableModels() {
190
+ const models = this.getUserSetting("models");
191
+ return models || DEFAULT_USER_SETTINGS.models || [];
192
+ }
193
+ /**
194
+ * Get API key from user settings or environment
195
+ */
196
+ getApiKey() {
197
+ // First check environment variable
198
+ const envApiKey = process.env.GROK_API_KEY;
199
+ if (envApiKey) {
200
+ return envApiKey;
201
+ }
202
+ // Then check user settings
203
+ return this.getUserSetting("apiKey");
204
+ }
205
+ /**
206
+ * Get startup hook command from user settings
207
+ */
208
+ getStartupHook() {
209
+ return this.getUserSetting("startupHook");
210
+ }
211
+ /**
212
+ * Get instance hook command from user settings
213
+ */
214
+ getInstanceHook() {
215
+ return this.getUserSetting("instanceHook");
216
+ }
217
+ /**
218
+ * Get task approval hook command from user settings
219
+ * Used for validating all task operations (start/transition/stop)
220
+ */
221
+ getTaskApprovalHook() {
222
+ return this.getUserSetting("taskApprovalHook");
223
+ }
224
+ /**
225
+ * Get tool approval hook command from user settings
226
+ */
227
+ getToolApprovalHook() {
228
+ return this.getUserSetting("toolApprovalHook");
229
+ }
230
+ /**
231
+ * Get persona hook command from user settings
232
+ */
233
+ getPersonaHook() {
234
+ return this.getUserSetting("personaHook");
235
+ }
236
+ /**
237
+ * Check if persona hook is mandatory
238
+ */
239
+ isPersonaHookMandatory() {
240
+ return this.getUserSetting("personaHookMandatory") ?? false;
241
+ }
242
+ /**
243
+ * Get mood hook command from user settings
244
+ */
245
+ getMoodHook() {
246
+ return this.getUserSetting("moodHook");
247
+ }
248
+ /**
249
+ * Check if mood hook is mandatory
250
+ */
251
+ isMoodHookMandatory() {
252
+ return this.getUserSetting("moodHookMandatory") ?? false;
253
+ }
254
+ /**
255
+ * Detect if we're running in a GUI environment or text-only (SSH/terminal)
256
+ * Returns true if GUI is available, false for text-only
257
+ */
258
+ isGuiAvailable() {
259
+ // Check if SSH session
260
+ if (process.env.SSH_CONNECTION || process.env.SSH_CLIENT || process.env.SSH_TTY) {
261
+ return false;
262
+ }
263
+ // Check platform-specific GUI indicators
264
+ if (process.platform === "darwin") {
265
+ // macOS: Check if we have GUI session (not ssh, not screen/tmux)
266
+ return !process.env.STY && !process.env.TMUX;
267
+ }
268
+ else if (process.platform === "linux") {
269
+ // Linux: Check for X11 or Wayland display
270
+ return !!(process.env.DISPLAY || process.env.WAYLAND_DISPLAY);
271
+ }
272
+ else if (process.platform === "win32") {
273
+ // Windows: Assume GUI available unless in WSL SSH
274
+ return true;
275
+ }
276
+ // Default to text-only if uncertain
277
+ return false;
278
+ }
279
+ /**
280
+ * Get context view helper command from user settings
281
+ * Auto-detects GUI vs text-only environment
282
+ */
283
+ getContextViewHelper() {
284
+ const isGui = this.isGuiAvailable();
285
+ if (isGui) {
286
+ // GUI mode
287
+ const guiHelper = this.getUserSetting("contextViewHelperGui");
288
+ if (guiHelper) {
289
+ return guiHelper;
290
+ }
291
+ // Platform-specific GUI defaults
292
+ if (process.platform === "darwin") {
293
+ return "open"; // macOS: open in default app
294
+ }
295
+ else if (process.platform === "linux") {
296
+ return "xdg-open"; // Linux: open in default app
297
+ }
298
+ else if (process.platform === "win32") {
299
+ return "start"; // Windows: open in default app
300
+ }
301
+ }
302
+ // Text mode
303
+ const textHelper = this.getUserSetting("contextViewHelper");
304
+ if (textHelper) {
305
+ return textHelper;
306
+ }
307
+ // Fall back to environment variable
308
+ const pager = process.env.PAGER;
309
+ if (pager) {
310
+ return pager;
311
+ }
312
+ // Fall back to common pagers
313
+ return "less -R"; // -R for color support
314
+ }
315
+ /**
316
+ * Get context edit helper command from user settings
317
+ * Auto-detects GUI vs text-only environment
318
+ */
319
+ getContextEditHelper() {
320
+ const isGui = this.isGuiAvailable();
321
+ if (isGui) {
322
+ // GUI mode
323
+ const guiHelper = this.getUserSetting("contextEditHelperGui");
324
+ if (guiHelper) {
325
+ return guiHelper;
326
+ }
327
+ // Platform-specific GUI defaults
328
+ if (process.platform === "darwin") {
329
+ return "open -e"; // macOS: open in TextEdit
330
+ }
331
+ else if (process.platform === "linux") {
332
+ return "xdg-open"; // Linux: open in default editor
333
+ }
334
+ else if (process.platform === "win32") {
335
+ return "notepad"; // Windows: Notepad
336
+ }
337
+ }
338
+ // Text mode
339
+ const textHelper = this.getUserSetting("contextEditHelper");
340
+ if (textHelper) {
341
+ return textHelper;
342
+ }
343
+ // Fall back to environment variables
344
+ const editor = process.env.EDITOR || process.env.VISUAL;
345
+ if (editor) {
346
+ return editor;
347
+ }
348
+ // Fall back to common editors
349
+ return "nano";
350
+ }
351
+ /**
352
+ * Get base URL from user settings or environment
353
+ */
354
+ getBaseURL() {
355
+ // First check environment variable
356
+ const envBaseURL = process.env.GROK_BASE_URL;
357
+ if (envBaseURL) {
358
+ return envBaseURL;
359
+ }
360
+ // Then check user settings, then use default
361
+ const userBaseURL = this.getUserSetting("baseURL");
362
+ return userBaseURL || DEFAULT_USER_SETTINGS.baseURL || "https://api.x.ai/v1";
363
+ }
364
+ /**
365
+ * Get temperature from user settings
366
+ * Defaults to 0.7 if not set
367
+ */
368
+ getTemperature() {
369
+ const temperature = this.getUserSetting("temperature");
370
+ if (temperature !== undefined && temperature >= 0 && temperature <= 2) {
371
+ return temperature;
372
+ }
373
+ return 0.7; // Default temperature
374
+ }
375
+ /**
376
+ * Get max tokens from user settings or environment
377
+ * Priority: user settings > ZDS_AI_AGENT_MAX_TOKENS env var > undefined
378
+ * Returns undefined if not set (allows API to use its default)
379
+ */
380
+ getMaxTokens() {
381
+ // First check user settings
382
+ const settingsMaxTokens = this.getUserSetting("maxTokens");
383
+ if (settingsMaxTokens !== undefined && Number.isInteger(settingsMaxTokens) && settingsMaxTokens > 0) {
384
+ return settingsMaxTokens;
385
+ }
386
+ // Then check environment variable (set by hooks)
387
+ const envMaxTokens = process.env.ZDS_AI_AGENT_MAX_TOKENS;
388
+ if (envMaxTokens) {
389
+ const parsed = parseInt(envMaxTokens);
390
+ if (Number.isInteger(parsed) && parsed > 0) {
391
+ return parsed;
392
+ }
393
+ }
394
+ return undefined; // No default - let API decide
395
+ }
396
+ }
397
+ /**
398
+ * Convenience function to get the singleton instance
399
+ */
400
+ export function getSettingsManager() {
401
+ return SettingsManager.getInstance();
402
+ }
403
+ //# sourceMappingURL=settings-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/utils/settings-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAqCzB;;;GAGG;AACH,MAAM,qBAAqB,GAA0B;IACnD,OAAO,EAAE,qBAAqB,EAAE,eAAe;IAC/C,YAAY,EAAE,kBAAkB;IAChC,MAAM,EAAE;QACN,kBAAkB;QAClB,eAAe;QACf,eAAe;QACf,aAAa;QACb,kBAAkB;KACnB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAA6B;IACzD,KAAK,EAAE,kBAAkB;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,eAAe;IAClB,MAAM,CAAC,QAAQ,CAAkB;IAEjC,gBAAgB,CAAS;IACzB,mBAAmB,CAAS;IAEpC;QACE,iDAAiD;QACjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAC/B,EAAE,CAAC,OAAO,EAAE,EACZ,OAAO,EACP,oBAAoB,CACrB,CAAC;QAEF,4EAA4E;QAC5E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAClC,OAAO,CAAC,GAAG,EAAE,EACb,OAAO,EACP,eAAe,CAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC9B,eAAe,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,eAAe,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,QAAgB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACI,gBAAgB;QACrB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC1C,qDAAqD;gBACrD,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;gBAC7C,OAAO,EAAE,GAAG,qBAAqB,EAAE,CAAC;YACtC,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAErC,0DAA0D;YAC1D,OAAO,EAAE,GAAG,qBAAqB,EAAE,GAAG,QAAQ,EAAE,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,+BAA+B,EAC/B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAC;YACF,OAAO,EAAE,GAAG,qBAAqB,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,QAA+B;QACrD,IAAI,CAAC;YACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAElD,qDAAqD;YACrD,IAAI,gBAAgB,GAAiB,EAAE,GAAG,qBAAqB,EAAE,CAAC;YAClE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;oBAChE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACnC,gBAAgB,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC7D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,qCAAqC;oBACrC,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YAED,MAAM,cAAc,GAAG,EAAE,GAAG,gBAAgB,EAAE,GAAG,QAAQ,EAAE,CAAC;YAE5D,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EACvC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,iCAAiC;aAClD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,+BAA+B,EAC/B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACI,iBAAiB,CACtB,GAAM,EACN,KAAsB;QAEtB,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAA2B,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,cAAc,CAA+B,GAAM;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC7C,wCAAwC;gBACxC,OAAO,EAAE,GAAG,wBAAwB,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAEnE,qBAAqB;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,OAAO,EAAE,GAAG,wBAAwB,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAErC,sBAAsB;YACtB,OAAO,EAAE,GAAG,wBAAwB,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,kCAAkC,EAClC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAC;YACF,OAAO,EAAE,GAAG,wBAAwB,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,QAAkC;QAC3D,qEAAqE;QACrE,mFAAmF;IACrF,CAAC;IAED;;OAEG;IACI,oBAAoB,CACzB,GAAM,EACN,KAAyB;QAEzB,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAA8B,CAAC;QAC9D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,iBAAiB,CACtB,GAAM;QAEN,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,eAAe;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC7D,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,OAAO,wBAAwB,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC9D,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,KAAa;QAClC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,kBAAkB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,MAAM,IAAI,qBAAqB,CAAC,MAAM,IAAI,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,SAAS;QACd,mCAAmC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,2BAA2B;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,cAAc;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,eAAe;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,mBAAmB;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,cAAc;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,sBAAsB;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC;IAC9D,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACI,cAAc;QACnB,uBAAuB;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yCAAyC;QACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,iEAAiE;YACjE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/C,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,0CAA0C;YAC1C,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,kDAAkD;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oCAAoC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACI,oBAAoB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEpC,IAAI,KAAK,EAAE,CAAC;YACV,WAAW;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;YAC9D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,iCAAiC;YACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC,CAAC,6BAA6B;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACxC,OAAO,UAAU,CAAC,CAAC,6BAA6B;YAClD,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAC,CAAC,+BAA+B;YACjD,CAAC;QACH,CAAC;QAED,YAAY;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAC5D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,oCAAoC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6BAA6B;QAC7B,OAAO,SAAS,CAAC,CAAC,uBAAuB;IAC3C,CAAC;IAED;;;OAGG;IACI,oBAAoB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEpC,IAAI,KAAK,EAAE,CAAC;YACV,WAAW;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;YAC9D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,iCAAiC;YACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,SAAS,CAAC,CAAC,0BAA0B;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACxC,OAAO,UAAU,CAAC,CAAC,gCAAgC;YACrD,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACxC,OAAO,SAAS,CAAC,CAAC,mBAAmB;YACvC,CAAC;QACH,CAAC;QAED,YAAY;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAC5D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,qCAAqC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,8BAA8B;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,UAAU;QACf,mCAAmC;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,6CAA6C;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,WAAW,IAAI,qBAAqB,CAAC,OAAO,IAAI,qBAAqB,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACI,cAAc;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACtE,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,sBAAsB;IACpC,CAAC;IAED;;;;OAIG;IACI,YAAY;QACjB,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,iBAAiB,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;YACpG,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,iDAAiD;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACzD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC,CAAC,8BAA8B;IAClD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC,WAAW,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1 @@
1
+ export { getSettingsManager, UserSettings, ProjectSettings } from './settings-manager.js';
@@ -0,0 +1,4 @@
1
+ // This file is kept for potential future convenience functions
2
+ // All settings management should use getSettingsManager() from './settings-manager.js'
3
+ export { getSettingsManager } from './settings-manager.js';
4
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/utils/settings.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uFAAuF;AAEvF,OAAO,EAAE,kBAAkB,EAAiC,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { GrokAgent, ChatEntry } from "../agent/grok-agent.js";
2
+ /**
3
+ * Interface for slash command handlers
4
+ * Allows different contexts (UI vs headless) to provide their own implementations
5
+ */
6
+ export interface SlashCommandContext {
7
+ agent: GrokAgent;
8
+ addChatEntry: (entry: ChatEntry) => void;
9
+ clearInput?: () => void;
10
+ resetHistory?: () => void;
11
+ setProcessingStates?: (states: {
12
+ isProcessing?: boolean;
13
+ isStreaming?: boolean;
14
+ tokenCount?: number;
15
+ processingTime?: number;
16
+ }) => void;
17
+ setTotalTokenUsage?: (updater: number | ((prev: number) => number)) => void;
18
+ isHeadless?: boolean;
19
+ isInkMode?: boolean;
20
+ }
21
+ /**
22
+ * Process slash commands
23
+ * Returns true if command was handled, false if it should be processed as normal input
24
+ */
25
+ export declare function processSlashCommand(input: string, context: SlashCommandContext): Promise<boolean>;