@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.
Files changed (181) hide show
  1. package/.automatosx/agents/aerospace-scientist.yaml +159 -0
  2. package/.automatosx/agents/architecture.yaml +244 -0
  3. package/.automatosx/agents/backend.yaml +172 -0
  4. package/.automatosx/agents/ceo.yaml +105 -0
  5. package/.automatosx/agents/creative-marketer.yaml +173 -0
  6. package/.automatosx/agents/cto.yaml +118 -0
  7. package/.automatosx/agents/data-scientist.yaml +200 -0
  8. package/.automatosx/agents/data.yaml +106 -0
  9. package/.automatosx/agents/design.yaml +115 -0
  10. package/.automatosx/agents/devops.yaml +124 -0
  11. package/.automatosx/agents/frontend.yaml +171 -0
  12. package/.automatosx/agents/fullstack.yaml +172 -0
  13. package/.automatosx/agents/mobile.yaml +185 -0
  14. package/.automatosx/agents/product.yaml +103 -0
  15. package/.automatosx/agents/quality.yaml +93 -0
  16. package/.automatosx/agents/quantum-engineer.yaml +167 -0
  17. package/.automatosx/agents/researcher.yaml +122 -0
  18. package/.automatosx/agents/security.yaml +115 -0
  19. package/.automatosx/agents/standard.yaml +214 -0
  20. package/.automatosx/agents/writer.yaml +122 -0
  21. package/.automatosx/feature-flags.json +13 -0
  22. package/.automatosx/memory/memory.db +0 -0
  23. package/.automatosx/providers/README.md +117 -0
  24. package/.automatosx/providers/grok-zai.yaml.template +61 -0
  25. package/.automatosx/providers/grok.yaml.template +71 -0
  26. package/.automatosx/status/backend-1763517593334-85037.json +9 -0
  27. package/.automatosx/status/quality-1763516867087-82043.json +9 -0
  28. package/.automatosx/status/quality-1763516976722-84817.json +9 -0
  29. package/.automatosx/status/security-1763517871950-87357.json +9 -0
  30. package/.automatosx/teams/business.yaml +56 -0
  31. package/.automatosx/teams/core.yaml +60 -0
  32. package/.automatosx/teams/design.yaml +58 -0
  33. package/.automatosx/teams/engineering.yaml +69 -0
  34. package/.automatosx/teams/research.yaml +56 -0
  35. package/.automatosx/templates/analyst.yaml +60 -0
  36. package/.automatosx/templates/assistant.yaml +48 -0
  37. package/.automatosx/templates/basic-agent.yaml +28 -0
  38. package/.automatosx/templates/code-reviewer.yaml +52 -0
  39. package/.automatosx/templates/debugger.yaml +63 -0
  40. package/.automatosx/templates/designer.yaml +69 -0
  41. package/.automatosx/templates/developer.yaml +60 -0
  42. package/.automatosx/templates/fullstack-developer.yaml +395 -0
  43. package/.automatosx/templates/qa-specialist.yaml +71 -0
  44. package/.claude/mcp/automatosx.json +244 -0
  45. package/.claude/settings.local.json +34 -0
  46. package/.grok/settings.json +37 -0
  47. package/LICENSE +26 -0
  48. package/README.md +518 -0
  49. package/automatosx/PRD/README.md +9 -0
  50. package/automatosx/tmp/README.md +10 -0
  51. package/automatosx.config.json +333 -0
  52. package/dist/agent/grok-agent.d.ts +52 -0
  53. package/dist/agent/grok-agent.js +627 -0
  54. package/dist/agent/grok-agent.js.map +1 -0
  55. package/dist/agent/index.d.ts +14 -0
  56. package/dist/agent/index.js +136 -0
  57. package/dist/agent/index.js.map +1 -0
  58. package/dist/commands/mcp.d.ts +2 -0
  59. package/dist/commands/mcp.js +239 -0
  60. package/dist/commands/mcp.js.map +1 -0
  61. package/dist/grok/client.d.ts +49 -0
  62. package/dist/grok/client.js +80 -0
  63. package/dist/grok/client.js.map +1 -0
  64. package/dist/grok/tools.d.ts +8 -0
  65. package/dist/grok/tools.js +349 -0
  66. package/dist/grok/tools.js.map +1 -0
  67. package/dist/hooks/use-enhanced-input.d.ts +37 -0
  68. package/dist/hooks/use-enhanced-input.js +214 -0
  69. package/dist/hooks/use-enhanced-input.js.map +1 -0
  70. package/dist/hooks/use-input-handler.d.ts +34 -0
  71. package/dist/hooks/use-input-handler.js +608 -0
  72. package/dist/hooks/use-input-handler.js.map +1 -0
  73. package/dist/hooks/use-input-history.d.ts +9 -0
  74. package/dist/hooks/use-input-history.js +69 -0
  75. package/dist/hooks/use-input-history.js.map +1 -0
  76. package/dist/index.d.ts +2 -0
  77. package/dist/index.js +339 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/mcp/client.d.ts +31 -0
  80. package/dist/mcp/client.js +152 -0
  81. package/dist/mcp/client.js.map +1 -0
  82. package/dist/mcp/config.d.ts +13 -0
  83. package/dist/mcp/config.js +43 -0
  84. package/dist/mcp/config.js.map +1 -0
  85. package/dist/mcp/transports.d.ts +48 -0
  86. package/dist/mcp/transports.js +217 -0
  87. package/dist/mcp/transports.js.map +1 -0
  88. package/dist/schemas/index.d.ts +102 -0
  89. package/dist/schemas/index.js +105 -0
  90. package/dist/schemas/index.js.map +1 -0
  91. package/dist/tools/bash.d.ts +10 -0
  92. package/dist/tools/bash.js +82 -0
  93. package/dist/tools/bash.js.map +1 -0
  94. package/dist/tools/confirmation-tool.d.ts +16 -0
  95. package/dist/tools/confirmation-tool.js +72 -0
  96. package/dist/tools/confirmation-tool.js.map +1 -0
  97. package/dist/tools/index.d.ts +6 -0
  98. package/dist/tools/index.js +7 -0
  99. package/dist/tools/index.js.map +1 -0
  100. package/dist/tools/morph-editor.d.ts +36 -0
  101. package/dist/tools/morph-editor.js +308 -0
  102. package/dist/tools/morph-editor.js.map +1 -0
  103. package/dist/tools/search.d.ts +68 -0
  104. package/dist/tools/search.js +300 -0
  105. package/dist/tools/search.js.map +1 -0
  106. package/dist/tools/text-editor.d.ts +16 -0
  107. package/dist/tools/text-editor.js +526 -0
  108. package/dist/tools/text-editor.js.map +1 -0
  109. package/dist/tools/todo-tool.d.ts +20 -0
  110. package/dist/tools/todo-tool.js +129 -0
  111. package/dist/tools/todo-tool.js.map +1 -0
  112. package/dist/types/index.d.ts +30 -0
  113. package/dist/types/index.js +2 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/dist/ui/app.d.ts +7 -0
  116. package/dist/ui/app.js +99 -0
  117. package/dist/ui/app.js.map +1 -0
  118. package/dist/ui/components/api-key-input.d.ts +7 -0
  119. package/dist/ui/components/api-key-input.js +80 -0
  120. package/dist/ui/components/api-key-input.js.map +1 -0
  121. package/dist/ui/components/chat-history.d.ts +8 -0
  122. package/dist/ui/components/chat-history.js +157 -0
  123. package/dist/ui/components/chat-history.js.map +1 -0
  124. package/dist/ui/components/chat-input.d.ts +9 -0
  125. package/dist/ui/components/chat-input.js +67 -0
  126. package/dist/ui/components/chat-input.js.map +1 -0
  127. package/dist/ui/components/chat-interface.d.ts +8 -0
  128. package/dist/ui/components/chat-interface.js +272 -0
  129. package/dist/ui/components/chat-interface.js.map +1 -0
  130. package/dist/ui/components/command-suggestions.d.ts +17 -0
  131. package/dist/ui/components/command-suggestions.js +22 -0
  132. package/dist/ui/components/command-suggestions.js.map +1 -0
  133. package/dist/ui/components/confirmation-dialog.d.ts +11 -0
  134. package/dist/ui/components/confirmation-dialog.js +105 -0
  135. package/dist/ui/components/confirmation-dialog.js.map +1 -0
  136. package/dist/ui/components/diff-renderer.d.ts +13 -0
  137. package/dist/ui/components/diff-renderer.js +186 -0
  138. package/dist/ui/components/diff-renderer.js.map +1 -0
  139. package/dist/ui/components/loading-spinner.d.ts +8 -0
  140. package/dist/ui/components/loading-spinner.js +59 -0
  141. package/dist/ui/components/loading-spinner.js.map +1 -0
  142. package/dist/ui/components/mcp-status.d.ts +5 -0
  143. package/dist/ui/components/mcp-status.js +36 -0
  144. package/dist/ui/components/mcp-status.js.map +1 -0
  145. package/dist/ui/components/model-selection.d.ts +12 -0
  146. package/dist/ui/components/model-selection.js +17 -0
  147. package/dist/ui/components/model-selection.js.map +1 -0
  148. package/dist/ui/shared/max-sized-box.d.ts +8 -0
  149. package/dist/ui/shared/max-sized-box.js +6 -0
  150. package/dist/ui/shared/max-sized-box.js.map +1 -0
  151. package/dist/ui/utils/code-colorizer.d.ts +2 -0
  152. package/dist/ui/utils/code-colorizer.js +7 -0
  153. package/dist/ui/utils/code-colorizer.js.map +1 -0
  154. package/dist/ui/utils/colors.d.ts +14 -0
  155. package/dist/ui/utils/colors.js +15 -0
  156. package/dist/ui/utils/colors.js.map +1 -0
  157. package/dist/ui/utils/markdown-renderer.d.ts +4 -0
  158. package/dist/ui/utils/markdown-renderer.js +23 -0
  159. package/dist/ui/utils/markdown-renderer.js.map +1 -0
  160. package/dist/utils/confirmation-service.d.ts +32 -0
  161. package/dist/utils/confirmation-service.js +109 -0
  162. package/dist/utils/confirmation-service.js.map +1 -0
  163. package/dist/utils/custom-instructions.d.ts +1 -0
  164. package/dist/utils/custom-instructions.js +17 -0
  165. package/dist/utils/custom-instructions.js.map +1 -0
  166. package/dist/utils/model-config.d.ts +28 -0
  167. package/dist/utils/model-config.js +42 -0
  168. package/dist/utils/model-config.js.map +1 -0
  169. package/dist/utils/settings-manager.d.ts +94 -0
  170. package/dist/utils/settings-manager.js +240 -0
  171. package/dist/utils/settings-manager.js.map +1 -0
  172. package/dist/utils/settings.d.ts +1 -0
  173. package/dist/utils/settings.js +4 -0
  174. package/dist/utils/settings.js.map +1 -0
  175. package/dist/utils/text-utils.d.ts +80 -0
  176. package/dist/utils/text-utils.js +182 -0
  177. package/dist/utils/text-utils.js.map +1 -0
  178. package/dist/utils/token-counter.d.ts +33 -0
  179. package/dist/utils/token-counter.js +78 -0
  180. package/dist/utils/token-counter.js.map +1 -0
  181. 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,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,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
+ };