@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.
- package/LICENSE +21 -0
- package/README.md +497 -0
- package/dist/agent/grok-agent.d.ts +250 -0
- package/dist/agent/grok-agent.js +2480 -0
- package/dist/agent/grok-agent.js.map +1 -0
- package/dist/agent/index.d.ts +14 -0
- package/dist/agent/index.js +136 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.js +239 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/grok/client.d.ts +55 -0
- package/dist/grok/client.js +276 -0
- package/dist/grok/client.js.map +1 -0
- package/dist/grok/tools.d.ts +8 -0
- package/dist/grok/tools.js +878 -0
- package/dist/grok/tools.js.map +1 -0
- package/dist/hooks/use-enhanced-input.d.ts +38 -0
- package/dist/hooks/use-enhanced-input.js +228 -0
- package/dist/hooks/use-enhanced-input.js.map +1 -0
- package/dist/hooks/use-input-handler.d.ts +36 -0
- package/dist/hooks/use-input-handler.js +1099 -0
- package/dist/hooks/use-input-handler.js.map +1 -0
- package/dist/hooks/use-input-history.d.ts +9 -0
- package/dist/hooks/use-input-history.js +61 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +869 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +41 -0
- package/dist/mcp/client.js +224 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +13 -0
- package/dist/mcp/config.js +56 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/transports.d.ts +53 -0
- package/dist/mcp/transports.js +256 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/tools/character-tool.d.ts +27 -0
- package/dist/tools/character-tool.js +194 -0
- package/dist/tools/character-tool.js.map +1 -0
- package/dist/tools/clear-cache-tool.d.ts +14 -0
- package/dist/tools/clear-cache-tool.js +82 -0
- package/dist/tools/clear-cache-tool.js.map +1 -0
- package/dist/tools/confirmation-tool.d.ts +16 -0
- package/dist/tools/confirmation-tool.js +72 -0
- package/dist/tools/confirmation-tool.js.map +1 -0
- package/dist/tools/env-tool.d.ts +17 -0
- package/dist/tools/env-tool.js +89 -0
- package/dist/tools/env-tool.js.map +1 -0
- package/dist/tools/file-conversion-tool.d.ts +16 -0
- package/dist/tools/file-conversion-tool.js +181 -0
- package/dist/tools/file-conversion-tool.js.map +1 -0
- package/dist/tools/image-tool.d.ts +22 -0
- package/dist/tools/image-tool.js +268 -0
- package/dist/tools/image-tool.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/internet-tool.d.ts +11 -0
- package/dist/tools/internet-tool.js +108 -0
- package/dist/tools/internet-tool.js.map +1 -0
- package/dist/tools/introspect-tool.d.ts +11 -0
- package/dist/tools/introspect-tool.js +243 -0
- package/dist/tools/introspect-tool.js.map +1 -0
- package/dist/tools/morph-editor.d.ts +38 -0
- package/dist/tools/morph-editor.js +318 -0
- package/dist/tools/morph-editor.js.map +1 -0
- package/dist/tools/restart-tool.d.ts +7 -0
- package/dist/tools/restart-tool.js +24 -0
- package/dist/tools/restart-tool.js.map +1 -0
- package/dist/tools/search.d.ts +71 -0
- package/dist/tools/search.js +340 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/task-tool.d.ts +19 -0
- package/dist/tools/task-tool.js +115 -0
- package/dist/tools/task-tool.js.map +1 -0
- package/dist/tools/text-editor.d.ts +35 -0
- package/dist/tools/text-editor.js +669 -0
- package/dist/tools/text-editor.js.map +1 -0
- package/dist/tools/tool-discovery.d.ts +20 -0
- package/dist/tools/tool-discovery.js +45 -0
- package/dist/tools/tool-discovery.js.map +1 -0
- package/dist/tools/zsh.d.ts +13 -0
- package/dist/tools/zsh.js +168 -0
- package/dist/tools/zsh.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/app.d.ts +7 -0
- package/dist/ui/app.js +99 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/components/active-task-status.d.ts +7 -0
- package/dist/ui/components/active-task-status.js +37 -0
- package/dist/ui/components/active-task-status.js.map +1 -0
- package/dist/ui/components/api-key-input.d.ts +7 -0
- package/dist/ui/components/api-key-input.js +80 -0
- package/dist/ui/components/api-key-input.js.map +1 -0
- package/dist/ui/components/backend-status.d.ts +7 -0
- package/dist/ui/components/backend-status.js +85 -0
- package/dist/ui/components/backend-status.js.map +1 -0
- package/dist/ui/components/chat-history.d.ts +8 -0
- package/dist/ui/components/chat-history.js +187 -0
- package/dist/ui/components/chat-history.js.map +1 -0
- package/dist/ui/components/chat-input.d.ts +9 -0
- package/dist/ui/components/chat-input.js +63 -0
- package/dist/ui/components/chat-input.js.map +1 -0
- package/dist/ui/components/chat-interface.d.ts +9 -0
- package/dist/ui/components/chat-interface.js +389 -0
- package/dist/ui/components/chat-interface.js.map +1 -0
- package/dist/ui/components/command-suggestions.d.ts +17 -0
- package/dist/ui/components/command-suggestions.js +22 -0
- package/dist/ui/components/command-suggestions.js.map +1 -0
- package/dist/ui/components/confirmation-dialog.d.ts +11 -0
- package/dist/ui/components/confirmation-dialog.js +105 -0
- package/dist/ui/components/confirmation-dialog.js.map +1 -0
- package/dist/ui/components/context-status.d.ts +7 -0
- package/dist/ui/components/context-status.js +36 -0
- package/dist/ui/components/context-status.js.map +1 -0
- package/dist/ui/components/diff-renderer.d.ts +13 -0
- package/dist/ui/components/diff-renderer.js +206 -0
- package/dist/ui/components/diff-renderer.js.map +1 -0
- package/dist/ui/components/loading-spinner.d.ts +8 -0
- package/dist/ui/components/loading-spinner.js +64 -0
- package/dist/ui/components/loading-spinner.js.map +1 -0
- package/dist/ui/components/mcp-status.d.ts +5 -0
- package/dist/ui/components/mcp-status.js +57 -0
- package/dist/ui/components/mcp-status.js.map +1 -0
- package/dist/ui/components/model-selection.d.ts +12 -0
- package/dist/ui/components/model-selection.js +17 -0
- package/dist/ui/components/model-selection.js.map +1 -0
- package/dist/ui/components/mood-status.d.ts +7 -0
- package/dist/ui/components/mood-status.js +34 -0
- package/dist/ui/components/mood-status.js.map +1 -0
- package/dist/ui/components/persona-status.d.ts +7 -0
- package/dist/ui/components/persona-status.js +34 -0
- package/dist/ui/components/persona-status.js.map +1 -0
- package/dist/ui/shared/max-sized-box.d.ts +8 -0
- package/dist/ui/shared/max-sized-box.js +6 -0
- package/dist/ui/shared/max-sized-box.js.map +1 -0
- package/dist/ui/utils/code-colorizer.d.ts +2 -0
- package/dist/ui/utils/code-colorizer.js +7 -0
- package/dist/ui/utils/code-colorizer.js.map +1 -0
- package/dist/ui/utils/colors.d.ts +14 -0
- package/dist/ui/utils/colors.js +15 -0
- package/dist/ui/utils/colors.js.map +1 -0
- package/dist/ui/utils/markdown-renderer.d.ts +4 -0
- package/dist/ui/utils/markdown-renderer.js +40 -0
- package/dist/ui/utils/markdown-renderer.js.map +1 -0
- package/dist/utils/auth-helper.d.ts +63 -0
- package/dist/utils/auth-helper.js +129 -0
- package/dist/utils/auth-helper.js.map +1 -0
- package/dist/utils/chat-history-manager-sqlite.d.ts +92 -0
- package/dist/utils/chat-history-manager-sqlite.js +334 -0
- package/dist/utils/chat-history-manager-sqlite.js.map +1 -0
- package/dist/utils/chat-history-manager.d.ts +87 -0
- package/dist/utils/chat-history-manager.js +273 -0
- package/dist/utils/chat-history-manager.js.map +1 -0
- package/dist/utils/chat-history-manager.json-backup.d.ts +69 -0
- package/dist/utils/chat-history-manager.json-backup.js +215 -0
- package/dist/utils/chat-history-manager.json-backup.js.map +1 -0
- package/dist/utils/confirmation-service.d.ts +46 -0
- package/dist/utils/confirmation-service.js +165 -0
- package/dist/utils/confirmation-service.js.map +1 -0
- package/dist/utils/custom-instructions.d.ts +1 -0
- package/dist/utils/custom-instructions.js +30 -0
- package/dist/utils/custom-instructions.js.map +1 -0
- package/dist/utils/database-connection.d.ts +27 -0
- package/dist/utils/database-connection.js +81 -0
- package/dist/utils/database-connection.js.map +1 -0
- package/dist/utils/database-schema.d.ts +17 -0
- package/dist/utils/database-schema.js +93 -0
- package/dist/utils/database-schema.js.map +1 -0
- package/dist/utils/error-logger.d.ts +13 -0
- package/dist/utils/error-logger.js +56 -0
- package/dist/utils/error-logger.js.map +1 -0
- package/dist/utils/hook-executor.d.ts +59 -0
- package/dist/utils/hook-executor.js +351 -0
- package/dist/utils/hook-executor.js.map +1 -0
- package/dist/utils/model-config.d.ts +28 -0
- package/dist/utils/model-config.js +42 -0
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/path-utils.d.ts +4 -0
- package/dist/utils/path-utils.js +12 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +169 -0
- package/dist/utils/settings-manager.js +403 -0
- package/dist/utils/settings-manager.js.map +1 -0
- package/dist/utils/settings.d.ts +1 -0
- package/dist/utils/settings.js +4 -0
- package/dist/utils/settings.js.map +1 -0
- package/dist/utils/slash-commands.d.ts +25 -0
- package/dist/utils/slash-commands.js +454 -0
- package/dist/utils/slash-commands.js.map +1 -0
- package/dist/utils/startup-hook.d.ts +13 -0
- package/dist/utils/startup-hook.js +44 -0
- package/dist/utils/startup-hook.js.map +1 -0
- package/dist/utils/text-utils.d.ts +80 -0
- package/dist/utils/text-utils.js +182 -0
- package/dist/utils/text-utils.js.map +1 -0
- package/dist/utils/token-counter.d.ts +33 -0
- package/dist/utils/token-counter.js +78 -0
- package/dist/utils/token-counter.js.map +1 -0
- 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 @@
|
|
|
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>;
|