@defai.digital/ax-cli 0.0.34
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/.automatosx/agents/aerospace-scientist.yaml +159 -0
- package/.automatosx/agents/architecture.yaml +244 -0
- package/.automatosx/agents/backend.yaml +172 -0
- package/.automatosx/agents/ceo.yaml +105 -0
- package/.automatosx/agents/creative-marketer.yaml +173 -0
- package/.automatosx/agents/cto.yaml +118 -0
- package/.automatosx/agents/data-scientist.yaml +200 -0
- package/.automatosx/agents/data.yaml +106 -0
- package/.automatosx/agents/design.yaml +115 -0
- package/.automatosx/agents/devops.yaml +124 -0
- package/.automatosx/agents/frontend.yaml +171 -0
- package/.automatosx/agents/fullstack.yaml +172 -0
- package/.automatosx/agents/mobile.yaml +185 -0
- package/.automatosx/agents/product.yaml +103 -0
- package/.automatosx/agents/quality.yaml +93 -0
- package/.automatosx/agents/quantum-engineer.yaml +167 -0
- package/.automatosx/agents/researcher.yaml +122 -0
- package/.automatosx/agents/security.yaml +115 -0
- package/.automatosx/agents/standard.yaml +214 -0
- package/.automatosx/agents/writer.yaml +122 -0
- package/.automatosx/feature-flags.json +13 -0
- package/.automatosx/memory/memory.db +0 -0
- package/.automatosx/providers/README.md +117 -0
- package/.automatosx/providers/grok-zai.yaml.template +61 -0
- package/.automatosx/providers/grok.yaml.template +71 -0
- package/.automatosx/status/backend-1763517593334-85037.json +9 -0
- package/.automatosx/status/quality-1763516867087-82043.json +9 -0
- package/.automatosx/status/quality-1763516976722-84817.json +9 -0
- package/.automatosx/status/security-1763517871950-87357.json +9 -0
- package/.automatosx/teams/business.yaml +56 -0
- package/.automatosx/teams/core.yaml +60 -0
- package/.automatosx/teams/design.yaml +58 -0
- package/.automatosx/teams/engineering.yaml +69 -0
- package/.automatosx/teams/research.yaml +56 -0
- package/.automatosx/templates/analyst.yaml +60 -0
- package/.automatosx/templates/assistant.yaml +48 -0
- package/.automatosx/templates/basic-agent.yaml +28 -0
- package/.automatosx/templates/code-reviewer.yaml +52 -0
- package/.automatosx/templates/debugger.yaml +63 -0
- package/.automatosx/templates/designer.yaml +69 -0
- package/.automatosx/templates/developer.yaml +60 -0
- package/.automatosx/templates/fullstack-developer.yaml +395 -0
- package/.automatosx/templates/qa-specialist.yaml +71 -0
- package/.claude/mcp/automatosx.json +244 -0
- package/.claude/settings.local.json +34 -0
- package/.grok/settings.json +37 -0
- package/LICENSE +26 -0
- package/README.md +518 -0
- package/automatosx/PRD/README.md +9 -0
- package/automatosx/tmp/README.md +10 -0
- package/automatosx.config.json +333 -0
- package/dist/agent/grok-agent.d.ts +52 -0
- package/dist/agent/grok-agent.js +627 -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 +49 -0
- package/dist/grok/client.js +80 -0
- package/dist/grok/client.js.map +1 -0
- package/dist/grok/tools.d.ts +8 -0
- package/dist/grok/tools.js +349 -0
- package/dist/grok/tools.js.map +1 -0
- package/dist/hooks/use-enhanced-input.d.ts +37 -0
- package/dist/hooks/use-enhanced-input.js +214 -0
- package/dist/hooks/use-enhanced-input.js.map +1 -0
- package/dist/hooks/use-input-handler.d.ts +34 -0
- package/dist/hooks/use-input-handler.js +608 -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 +69 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +339 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +31 -0
- package/dist/mcp/client.js +152 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +13 -0
- package/dist/mcp/config.js +43 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/transports.d.ts +48 -0
- package/dist/mcp/transports.js +217 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/schemas/index.d.ts +102 -0
- package/dist/schemas/index.js +105 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/tools/bash.d.ts +10 -0
- package/dist/tools/bash.js +82 -0
- package/dist/tools/bash.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/index.d.ts +6 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/morph-editor.d.ts +36 -0
- package/dist/tools/morph-editor.js +308 -0
- package/dist/tools/morph-editor.js.map +1 -0
- package/dist/tools/search.d.ts +68 -0
- package/dist/tools/search.js +300 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/text-editor.d.ts +16 -0
- package/dist/tools/text-editor.js +526 -0
- package/dist/tools/text-editor.js.map +1 -0
- package/dist/tools/todo-tool.d.ts +20 -0
- package/dist/tools/todo-tool.js +129 -0
- package/dist/tools/todo-tool.js.map +1 -0
- package/dist/types/index.d.ts +30 -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/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/chat-history.d.ts +8 -0
- package/dist/ui/components/chat-history.js +157 -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 +67 -0
- package/dist/ui/components/chat-input.js.map +1 -0
- package/dist/ui/components/chat-interface.d.ts +8 -0
- package/dist/ui/components/chat-interface.js +272 -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/diff-renderer.d.ts +13 -0
- package/dist/ui/components/diff-renderer.js +186 -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 +59 -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 +36 -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/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 +23 -0
- package/dist/ui/utils/markdown-renderer.js.map +1 -0
- package/dist/utils/confirmation-service.d.ts +32 -0
- package/dist/utils/confirmation-service.js +109 -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 +17 -0
- package/dist/utils/custom-instructions.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/settings-manager.d.ts +94 -0
- package/dist/utils/settings-manager.js +240 -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/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 +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-instructions.js","sourceRoot":"","sources":["../../src/utils/custom-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,UAAU,sBAAsB,CAAC,mBAA2B,OAAO,CAAC,GAAG,EAAE;IAC7E,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAEzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { UserSettings, ProjectSettings } from './settings-manager.js';
|
|
2
|
+
export interface ModelOption {
|
|
3
|
+
model: string;
|
|
4
|
+
}
|
|
5
|
+
export type ModelConfig = string;
|
|
6
|
+
export { UserSettings, ProjectSettings };
|
|
7
|
+
/**
|
|
8
|
+
* Get the effective current model
|
|
9
|
+
* Priority: project current model > user default model > system default
|
|
10
|
+
*/
|
|
11
|
+
export declare function getCurrentModel(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Load model configuration
|
|
14
|
+
* Priority: user-settings.json models > default hardcoded
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadModelConfig(): ModelOption[];
|
|
17
|
+
/**
|
|
18
|
+
* Get default models list
|
|
19
|
+
*/
|
|
20
|
+
export declare function getDefaultModels(): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Update the current model in project settings
|
|
23
|
+
*/
|
|
24
|
+
export declare function updateCurrentModel(modelName: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Update the user's default model preference
|
|
27
|
+
*/
|
|
28
|
+
export declare function updateDefaultModel(modelName: string): void;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getSettingsManager } from './settings-manager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get the effective current model
|
|
4
|
+
* Priority: project current model > user default model > system default
|
|
5
|
+
*/
|
|
6
|
+
export function getCurrentModel() {
|
|
7
|
+
const manager = getSettingsManager();
|
|
8
|
+
return manager.getCurrentModel();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Load model configuration
|
|
12
|
+
* Priority: user-settings.json models > default hardcoded
|
|
13
|
+
*/
|
|
14
|
+
export function loadModelConfig() {
|
|
15
|
+
const manager = getSettingsManager();
|
|
16
|
+
const models = manager.getAvailableModels();
|
|
17
|
+
return models.map(model => ({
|
|
18
|
+
model: model.trim()
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get default models list
|
|
23
|
+
*/
|
|
24
|
+
export function getDefaultModels() {
|
|
25
|
+
const manager = getSettingsManager();
|
|
26
|
+
return manager.getAvailableModels();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Update the current model in project settings
|
|
30
|
+
*/
|
|
31
|
+
export function updateCurrentModel(modelName) {
|
|
32
|
+
const manager = getSettingsManager();
|
|
33
|
+
manager.setCurrentModel(modelName);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Update the user's default model preference
|
|
37
|
+
*/
|
|
38
|
+
export function updateDefaultModel(modelName) {
|
|
39
|
+
const manager = getSettingsManager();
|
|
40
|
+
manager.updateUserSetting('defaultModel', modelName);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=model-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-config.js","sourceRoot":"","sources":["../../src/utils/model-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiC,MAAM,uBAAuB,CAAC;AAW1F;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAE5C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;KACpB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,kBAAkB,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-level settings stored in ~/.grok/user-settings.json
|
|
3
|
+
* These are global settings that apply across all projects
|
|
4
|
+
*/
|
|
5
|
+
export interface UserSettings {
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
baseURL?: string;
|
|
8
|
+
defaultModel?: string;
|
|
9
|
+
models?: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Project-level settings stored in .grok/settings.json
|
|
13
|
+
* These are project-specific settings
|
|
14
|
+
*/
|
|
15
|
+
export interface ProjectSettings {
|
|
16
|
+
model?: string;
|
|
17
|
+
mcpServers?: Record<string, any>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Unified settings manager that handles both user-level and project-level settings
|
|
21
|
+
*/
|
|
22
|
+
export declare class SettingsManager {
|
|
23
|
+
private static instance;
|
|
24
|
+
private userSettingsPath;
|
|
25
|
+
private projectSettingsPath;
|
|
26
|
+
private constructor();
|
|
27
|
+
/**
|
|
28
|
+
* Get singleton instance
|
|
29
|
+
*/
|
|
30
|
+
static getInstance(): SettingsManager;
|
|
31
|
+
/**
|
|
32
|
+
* Ensure directory exists for a given file path
|
|
33
|
+
*/
|
|
34
|
+
private ensureDirectoryExists;
|
|
35
|
+
/**
|
|
36
|
+
* Load user settings from ~/.grok/user-settings.json
|
|
37
|
+
*/
|
|
38
|
+
loadUserSettings(): UserSettings;
|
|
39
|
+
/**
|
|
40
|
+
* Save user settings to ~/.grok/user-settings.json
|
|
41
|
+
*/
|
|
42
|
+
saveUserSettings(settings: Partial<UserSettings>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Update a specific user setting
|
|
45
|
+
*/
|
|
46
|
+
updateUserSetting<K extends keyof UserSettings>(key: K, value: UserSettings[K]): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get a specific user setting
|
|
49
|
+
*/
|
|
50
|
+
getUserSetting<K extends keyof UserSettings>(key: K): UserSettings[K];
|
|
51
|
+
/**
|
|
52
|
+
* Load project settings from .grok/settings.json
|
|
53
|
+
*/
|
|
54
|
+
loadProjectSettings(): ProjectSettings;
|
|
55
|
+
/**
|
|
56
|
+
* Save project settings to .grok/settings.json
|
|
57
|
+
*/
|
|
58
|
+
saveProjectSettings(settings: Partial<ProjectSettings>): void;
|
|
59
|
+
/**
|
|
60
|
+
* Update a specific project setting
|
|
61
|
+
*/
|
|
62
|
+
updateProjectSetting<K extends keyof ProjectSettings>(key: K, value: ProjectSettings[K]): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get a specific project setting
|
|
65
|
+
*/
|
|
66
|
+
getProjectSetting<K extends keyof ProjectSettings>(key: K): ProjectSettings[K];
|
|
67
|
+
/**
|
|
68
|
+
* Get the current model with proper fallback logic:
|
|
69
|
+
* 1. Project-specific model setting
|
|
70
|
+
* 2. User's default model
|
|
71
|
+
* 3. System default
|
|
72
|
+
*/
|
|
73
|
+
getCurrentModel(): string;
|
|
74
|
+
/**
|
|
75
|
+
* Set the current model for the project
|
|
76
|
+
*/
|
|
77
|
+
setCurrentModel(model: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get available models list from user settings
|
|
80
|
+
*/
|
|
81
|
+
getAvailableModels(): string[];
|
|
82
|
+
/**
|
|
83
|
+
* Get API key from user settings or environment
|
|
84
|
+
*/
|
|
85
|
+
getApiKey(): string | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* Get base URL from user settings or environment
|
|
88
|
+
*/
|
|
89
|
+
getBaseURL(): string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Convenience function to get the singleton instance
|
|
93
|
+
*/
|
|
94
|
+
export declare function getSettingsManager(): SettingsManager;
|
|
@@ -0,0 +1,240 @@
|
|
|
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
|
+
*/
|
|
7
|
+
const DEFAULT_USER_SETTINGS = {
|
|
8
|
+
baseURL: "https://api.x.ai/v1",
|
|
9
|
+
defaultModel: "grok-code-fast-1",
|
|
10
|
+
models: [
|
|
11
|
+
"grok-code-fast-1",
|
|
12
|
+
"grok-4-latest",
|
|
13
|
+
"grok-3-latest",
|
|
14
|
+
"grok-3-fast",
|
|
15
|
+
"grok-3-mini-fast",
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Default values for project settings
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_PROJECT_SETTINGS = {
|
|
22
|
+
model: "grok-code-fast-1",
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Unified settings manager that handles both user-level and project-level settings
|
|
26
|
+
*/
|
|
27
|
+
export class SettingsManager {
|
|
28
|
+
static instance;
|
|
29
|
+
userSettingsPath;
|
|
30
|
+
projectSettingsPath;
|
|
31
|
+
constructor() {
|
|
32
|
+
// User settings path: ~/.grok/user-settings.json
|
|
33
|
+
this.userSettingsPath = path.join(os.homedir(), ".grok", "user-settings.json");
|
|
34
|
+
// Project settings path: .grok/settings.json (in current working directory)
|
|
35
|
+
this.projectSettingsPath = path.join(process.cwd(), ".grok", "settings.json");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get singleton instance
|
|
39
|
+
*/
|
|
40
|
+
static getInstance() {
|
|
41
|
+
if (!SettingsManager.instance) {
|
|
42
|
+
SettingsManager.instance = new SettingsManager();
|
|
43
|
+
}
|
|
44
|
+
return SettingsManager.instance;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ensure directory exists for a given file path
|
|
48
|
+
*/
|
|
49
|
+
ensureDirectoryExists(filePath) {
|
|
50
|
+
const dir = path.dirname(filePath);
|
|
51
|
+
if (!fs.existsSync(dir)) {
|
|
52
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load user settings from ~/.grok/user-settings.json
|
|
57
|
+
*/
|
|
58
|
+
loadUserSettings() {
|
|
59
|
+
try {
|
|
60
|
+
if (!fs.existsSync(this.userSettingsPath)) {
|
|
61
|
+
// Create default user settings if file doesn't exist
|
|
62
|
+
this.saveUserSettings(DEFAULT_USER_SETTINGS);
|
|
63
|
+
return { ...DEFAULT_USER_SETTINGS };
|
|
64
|
+
}
|
|
65
|
+
const content = fs.readFileSync(this.userSettingsPath, "utf-8");
|
|
66
|
+
const settings = JSON.parse(content);
|
|
67
|
+
// Merge with defaults to ensure all required fields exist
|
|
68
|
+
return { ...DEFAULT_USER_SETTINGS, ...settings };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.warn("Failed to load user settings:", error instanceof Error ? error.message : "Unknown error");
|
|
72
|
+
return { ...DEFAULT_USER_SETTINGS };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Save user settings to ~/.grok/user-settings.json
|
|
77
|
+
*/
|
|
78
|
+
saveUserSettings(settings) {
|
|
79
|
+
try {
|
|
80
|
+
this.ensureDirectoryExists(this.userSettingsPath);
|
|
81
|
+
// Read existing settings directly to avoid recursion
|
|
82
|
+
let existingSettings = { ...DEFAULT_USER_SETTINGS };
|
|
83
|
+
if (fs.existsSync(this.userSettingsPath)) {
|
|
84
|
+
try {
|
|
85
|
+
const content = fs.readFileSync(this.userSettingsPath, "utf-8");
|
|
86
|
+
const parsed = JSON.parse(content);
|
|
87
|
+
existingSettings = { ...DEFAULT_USER_SETTINGS, ...parsed };
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
// If file is corrupted, use defaults
|
|
91
|
+
console.warn("Corrupted user settings file, using defaults");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const mergedSettings = { ...existingSettings, ...settings };
|
|
95
|
+
fs.writeFileSync(this.userSettingsPath, JSON.stringify(mergedSettings, null, 2), { mode: 0o600 } // Secure permissions for API key
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.error("Failed to save user settings:", error instanceof Error ? error.message : "Unknown error");
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Update a specific user setting
|
|
105
|
+
*/
|
|
106
|
+
updateUserSetting(key, value) {
|
|
107
|
+
const settings = { [key]: value };
|
|
108
|
+
this.saveUserSettings(settings);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get a specific user setting
|
|
112
|
+
*/
|
|
113
|
+
getUserSetting(key) {
|
|
114
|
+
const settings = this.loadUserSettings();
|
|
115
|
+
return settings[key];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Load project settings from .grok/settings.json
|
|
119
|
+
*/
|
|
120
|
+
loadProjectSettings() {
|
|
121
|
+
try {
|
|
122
|
+
if (!fs.existsSync(this.projectSettingsPath)) {
|
|
123
|
+
// Create default project settings if file doesn't exist
|
|
124
|
+
this.saveProjectSettings(DEFAULT_PROJECT_SETTINGS);
|
|
125
|
+
return { ...DEFAULT_PROJECT_SETTINGS };
|
|
126
|
+
}
|
|
127
|
+
const content = fs.readFileSync(this.projectSettingsPath, "utf-8");
|
|
128
|
+
const settings = JSON.parse(content);
|
|
129
|
+
// Merge with defaults
|
|
130
|
+
return { ...DEFAULT_PROJECT_SETTINGS, ...settings };
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.warn("Failed to load project settings:", error instanceof Error ? error.message : "Unknown error");
|
|
134
|
+
return { ...DEFAULT_PROJECT_SETTINGS };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Save project settings to .grok/settings.json
|
|
139
|
+
*/
|
|
140
|
+
saveProjectSettings(settings) {
|
|
141
|
+
try {
|
|
142
|
+
this.ensureDirectoryExists(this.projectSettingsPath);
|
|
143
|
+
// Read existing settings directly to avoid recursion
|
|
144
|
+
let existingSettings = { ...DEFAULT_PROJECT_SETTINGS };
|
|
145
|
+
if (fs.existsSync(this.projectSettingsPath)) {
|
|
146
|
+
try {
|
|
147
|
+
const content = fs.readFileSync(this.projectSettingsPath, "utf-8");
|
|
148
|
+
const parsed = JSON.parse(content);
|
|
149
|
+
existingSettings = { ...DEFAULT_PROJECT_SETTINGS, ...parsed };
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
// If file is corrupted, use defaults
|
|
153
|
+
console.warn("Corrupted project settings file, using defaults");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const mergedSettings = { ...existingSettings, ...settings };
|
|
157
|
+
fs.writeFileSync(this.projectSettingsPath, JSON.stringify(mergedSettings, null, 2));
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
console.error("Failed to save project settings:", error instanceof Error ? error.message : "Unknown error");
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Update a specific project setting
|
|
166
|
+
*/
|
|
167
|
+
updateProjectSetting(key, value) {
|
|
168
|
+
const settings = { [key]: value };
|
|
169
|
+
this.saveProjectSettings(settings);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get a specific project setting
|
|
173
|
+
*/
|
|
174
|
+
getProjectSetting(key) {
|
|
175
|
+
const settings = this.loadProjectSettings();
|
|
176
|
+
return settings[key];
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get the current model with proper fallback logic:
|
|
180
|
+
* 1. Project-specific model setting
|
|
181
|
+
* 2. User's default model
|
|
182
|
+
* 3. System default
|
|
183
|
+
*/
|
|
184
|
+
getCurrentModel() {
|
|
185
|
+
const projectModel = this.getProjectSetting("model");
|
|
186
|
+
if (projectModel) {
|
|
187
|
+
return projectModel;
|
|
188
|
+
}
|
|
189
|
+
const userDefaultModel = this.getUserSetting("defaultModel");
|
|
190
|
+
if (userDefaultModel) {
|
|
191
|
+
return userDefaultModel;
|
|
192
|
+
}
|
|
193
|
+
return DEFAULT_PROJECT_SETTINGS.model || "grok-code-fast-1";
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Set the current model for the project
|
|
197
|
+
*/
|
|
198
|
+
setCurrentModel(model) {
|
|
199
|
+
this.updateProjectSetting("model", model);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get available models list from user settings
|
|
203
|
+
*/
|
|
204
|
+
getAvailableModels() {
|
|
205
|
+
const models = this.getUserSetting("models");
|
|
206
|
+
return models || DEFAULT_USER_SETTINGS.models || [];
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get API key from user settings or environment
|
|
210
|
+
*/
|
|
211
|
+
getApiKey() {
|
|
212
|
+
// First check environment variable
|
|
213
|
+
const envApiKey = process.env.GROK_API_KEY;
|
|
214
|
+
if (envApiKey) {
|
|
215
|
+
return envApiKey;
|
|
216
|
+
}
|
|
217
|
+
// Then check user settings
|
|
218
|
+
return this.getUserSetting("apiKey");
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get base URL from user settings or environment
|
|
222
|
+
*/
|
|
223
|
+
getBaseURL() {
|
|
224
|
+
// First check environment variable
|
|
225
|
+
const envBaseURL = process.env.GROK_BASE_URL;
|
|
226
|
+
if (envBaseURL) {
|
|
227
|
+
return envBaseURL;
|
|
228
|
+
}
|
|
229
|
+
// Then check user settings
|
|
230
|
+
const userBaseURL = this.getUserSetting("baseURL");
|
|
231
|
+
return (userBaseURL || DEFAULT_USER_SETTINGS.baseURL || "https://api.x.ai/v1");
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Convenience function to get the singleton instance
|
|
236
|
+
*/
|
|
237
|
+
export function getSettingsManager() {
|
|
238
|
+
return SettingsManager.getInstance();
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=settings-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/utils/settings-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text manipulation utilities for terminal input handling
|
|
3
|
+
* Inspired by Gemini CLI's text processing capabilities
|
|
4
|
+
*/
|
|
5
|
+
export interface TextPosition {
|
|
6
|
+
index: number;
|
|
7
|
+
line: number;
|
|
8
|
+
column: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TextSelection {
|
|
11
|
+
start: number;
|
|
12
|
+
end: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if a character is a word boundary
|
|
16
|
+
*/
|
|
17
|
+
export declare function isWordBoundary(char: string | undefined): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Find the start of the current word at the given position
|
|
20
|
+
*/
|
|
21
|
+
export declare function findWordStart(text: string, position: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* Find the end of the current word at the given position
|
|
24
|
+
*/
|
|
25
|
+
export declare function findWordEnd(text: string, position: number): number;
|
|
26
|
+
/**
|
|
27
|
+
* Move cursor to the previous word boundary
|
|
28
|
+
*/
|
|
29
|
+
export declare function moveToPreviousWord(text: string, position: number): number;
|
|
30
|
+
/**
|
|
31
|
+
* Move cursor to the next word boundary
|
|
32
|
+
*/
|
|
33
|
+
export declare function moveToNextWord(text: string, position: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* Delete the word before the cursor
|
|
36
|
+
*/
|
|
37
|
+
export declare function deleteWordBefore(text: string, position: number): {
|
|
38
|
+
text: string;
|
|
39
|
+
position: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Delete the word after the cursor
|
|
43
|
+
*/
|
|
44
|
+
export declare function deleteWordAfter(text: string, position: number): {
|
|
45
|
+
text: string;
|
|
46
|
+
position: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Get the current line and column from text position
|
|
50
|
+
*/
|
|
51
|
+
export declare function getTextPosition(text: string, index: number): TextPosition;
|
|
52
|
+
/**
|
|
53
|
+
* Move to the beginning of the current line
|
|
54
|
+
*/
|
|
55
|
+
export declare function moveToLineStart(text: string, position: number): number;
|
|
56
|
+
/**
|
|
57
|
+
* Move to the end of the current line
|
|
58
|
+
*/
|
|
59
|
+
export declare function moveToLineEnd(text: string, position: number): number;
|
|
60
|
+
/**
|
|
61
|
+
* Handle proper Unicode-aware character deletion
|
|
62
|
+
*/
|
|
63
|
+
export declare function deleteCharBefore(text: string, position: number): {
|
|
64
|
+
text: string;
|
|
65
|
+
position: number;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Handle proper Unicode-aware character deletion forward
|
|
69
|
+
*/
|
|
70
|
+
export declare function deleteCharAfter(text: string, position: number): {
|
|
71
|
+
text: string;
|
|
72
|
+
position: number;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Insert text at the given position with proper Unicode handling
|
|
76
|
+
*/
|
|
77
|
+
export declare function insertText(text: string, position: number, insert: string): {
|
|
78
|
+
text: string;
|
|
79
|
+
position: number;
|
|
80
|
+
};
|