grok-cli-hurry-mode 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/.grok/settings.json +3 -0
  2. package/LICENSE +21 -0
  3. package/README.md +452 -0
  4. package/dist/agent/grok-agent.d.ts +54 -0
  5. package/dist/agent/grok-agent.js +674 -0
  6. package/dist/agent/grok-agent.js.map +1 -0
  7. package/dist/agent/index.d.ts +14 -0
  8. package/dist/agent/index.js +137 -0
  9. package/dist/agent/index.js.map +1 -0
  10. package/dist/commands/mcp.d.ts +2 -0
  11. package/dist/commands/mcp.js +245 -0
  12. package/dist/commands/mcp.js.map +1 -0
  13. package/dist/grok/client.d.ts +49 -0
  14. package/dist/grok/client.js +85 -0
  15. package/dist/grok/client.js.map +1 -0
  16. package/dist/grok/tools.d.ts +8 -0
  17. package/dist/grok/tools.js +357 -0
  18. package/dist/grok/tools.js.map +1 -0
  19. package/dist/hooks/use-enhanced-input.d.ts +37 -0
  20. package/dist/hooks/use-enhanced-input.js +217 -0
  21. package/dist/hooks/use-enhanced-input.js.map +1 -0
  22. package/dist/hooks/use-input-handler.d.ts +34 -0
  23. package/dist/hooks/use-input-handler.js +611 -0
  24. package/dist/hooks/use-input-handler.js.map +1 -0
  25. package/dist/hooks/use-input-history.d.ts +9 -0
  26. package/dist/hooks/use-input-history.js +64 -0
  27. package/dist/hooks/use-input-history.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +151949 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/mcp/client.d.ts +29 -0
  32. package/dist/mcp/client.js +167 -0
  33. package/dist/mcp/client.js.map +1 -0
  34. package/dist/mcp/config.d.ts +13 -0
  35. package/dist/mcp/config.js +51 -0
  36. package/dist/mcp/config.js.map +1 -0
  37. package/dist/mcp/transports.d.ts +51 -0
  38. package/dist/mcp/transports.js +229 -0
  39. package/dist/mcp/transports.js.map +1 -0
  40. package/dist/node_modules/react/index.js +1841 -0
  41. package/dist/tools/bash.d.ts +10 -0
  42. package/dist/tools/bash.js +81 -0
  43. package/dist/tools/bash.js.map +1 -0
  44. package/dist/tools/confirmation-tool.d.ts +16 -0
  45. package/dist/tools/confirmation-tool.js +75 -0
  46. package/dist/tools/confirmation-tool.js.map +1 -0
  47. package/dist/tools/index.d.ts +6 -0
  48. package/dist/tools/index.js +16 -0
  49. package/dist/tools/index.js.map +1 -0
  50. package/dist/tools/morph-editor.d.ts +36 -0
  51. package/dist/tools/morph-editor.js +347 -0
  52. package/dist/tools/morph-editor.js.map +1 -0
  53. package/dist/tools/search.d.ts +69 -0
  54. package/dist/tools/search.js +341 -0
  55. package/dist/tools/search.js.map +1 -0
  56. package/dist/tools/text-editor.d.ts +16 -0
  57. package/dist/tools/text-editor.js +565 -0
  58. package/dist/tools/text-editor.js.map +1 -0
  59. package/dist/tools/todo-tool.d.ts +20 -0
  60. package/dist/tools/todo-tool.js +135 -0
  61. package/dist/tools/todo-tool.js.map +1 -0
  62. package/dist/types/index.d.ts +30 -0
  63. package/dist/types/index.js +3 -0
  64. package/dist/types/index.js.map +1 -0
  65. package/dist/ui/app.d.ts +7 -0
  66. package/dist/ui/app.js +160 -0
  67. package/dist/ui/app.js.map +1 -0
  68. package/dist/ui/components/api-key-input.d.ts +7 -0
  69. package/dist/ui/components/api-key-input.js +124 -0
  70. package/dist/ui/components/api-key-input.js.map +1 -0
  71. package/dist/ui/components/chat-history.d.ts +8 -0
  72. package/dist/ui/components/chat-history.js +177 -0
  73. package/dist/ui/components/chat-history.js.map +1 -0
  74. package/dist/ui/components/chat-input.d.ts +9 -0
  75. package/dist/ui/components/chat-input.js +87 -0
  76. package/dist/ui/components/chat-input.js.map +1 -0
  77. package/dist/ui/components/chat-interface.d.ts +8 -0
  78. package/dist/ui/components/chat-interface.js +344 -0
  79. package/dist/ui/components/chat-interface.js.map +1 -0
  80. package/dist/ui/components/command-suggestions.d.ts +17 -0
  81. package/dist/ui/components/command-suggestions.js +68 -0
  82. package/dist/ui/components/command-suggestions.js.map +1 -0
  83. package/dist/ui/components/confirmation-dialog.d.ts +11 -0
  84. package/dist/ui/components/confirmation-dialog.js +167 -0
  85. package/dist/ui/components/confirmation-dialog.js.map +1 -0
  86. package/dist/ui/components/diff-renderer.d.ts +13 -0
  87. package/dist/ui/components/diff-renderer.js +217 -0
  88. package/dist/ui/components/diff-renderer.js.map +1 -0
  89. package/dist/ui/components/loading-spinner.d.ts +8 -0
  90. package/dist/ui/components/loading-spinner.js +92 -0
  91. package/dist/ui/components/loading-spinner.js.map +1 -0
  92. package/dist/ui/components/mcp-status.d.ts +5 -0
  93. package/dist/ui/components/mcp-status.js +74 -0
  94. package/dist/ui/components/mcp-status.js.map +1 -0
  95. package/dist/ui/components/model-selection.d.ts +12 -0
  96. package/dist/ui/components/model-selection.js +28 -0
  97. package/dist/ui/components/model-selection.js.map +1 -0
  98. package/dist/ui/shared/max-sized-box.d.ts +8 -0
  99. package/dist/ui/shared/max-sized-box.js +15 -0
  100. package/dist/ui/shared/max-sized-box.js.map +1 -0
  101. package/dist/ui/utils/code-colorizer.d.ts +2 -0
  102. package/dist/ui/utils/code-colorizer.js +18 -0
  103. package/dist/ui/utils/code-colorizer.js.map +1 -0
  104. package/dist/ui/utils/colors.d.ts +14 -0
  105. package/dist/ui/utils/colors.js +18 -0
  106. package/dist/ui/utils/colors.js.map +1 -0
  107. package/dist/ui/utils/markdown-renderer.d.ts +4 -0
  108. package/dist/ui/utils/markdown-renderer.js +29 -0
  109. package/dist/ui/utils/markdown-renderer.js.map +1 -0
  110. package/dist/utils/confirmation-service.d.ts +33 -0
  111. package/dist/utils/confirmation-service.js +113 -0
  112. package/dist/utils/confirmation-service.js.map +1 -0
  113. package/dist/utils/custom-instructions.d.ts +1 -0
  114. package/dist/utils/custom-instructions.js +53 -0
  115. package/dist/utils/custom-instructions.js.map +1 -0
  116. package/dist/utils/model-config.d.ts +28 -0
  117. package/dist/utils/model-config.js +49 -0
  118. package/dist/utils/model-config.js.map +1 -0
  119. package/dist/utils/settings-manager.d.ts +94 -0
  120. package/dist/utils/settings-manager.js +275 -0
  121. package/dist/utils/settings-manager.js.map +1 -0
  122. package/dist/utils/settings.d.ts +1 -0
  123. package/dist/utils/settings.js +8 -0
  124. package/dist/utils/settings.js.map +1 -0
  125. package/dist/utils/text-utils.d.ts +80 -0
  126. package/dist/utils/text-utils.js +197 -0
  127. package/dist/utils/text-utils.js.map +1 -0
  128. package/dist/utils/token-counter.d.ts +33 -0
  129. package/dist/utils/token-counter.js +83 -0
  130. package/dist/utils/token-counter.js.map +1 -0
  131. package/dist/yoga.wasm +0 -0
  132. package/eslint.config.mjs +28 -0
  133. package/fix.awk +41 -0
  134. package/grok-logo-screenshot.png +0 -0
  135. package/package.json +68 -0
  136. package/sed_cmd.sh +35 -0
  137. package/temp.txt +29 -0
@@ -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,275 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SettingsManager = void 0;
37
+ exports.getSettingsManager = getSettingsManager;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const os = __importStar(require("os"));
41
+ /**
42
+ * Default values for user settings
43
+ */
44
+ const DEFAULT_USER_SETTINGS = {
45
+ baseURL: "https://api.x.ai/v1",
46
+ defaultModel: "grok-code-fast-1",
47
+ models: [
48
+ "grok-code-fast-1",
49
+ "grok-4-latest",
50
+ "grok-3-latest",
51
+ "grok-3-fast",
52
+ "grok-3-mini-fast",
53
+ ],
54
+ };
55
+ /**
56
+ * Default values for project settings
57
+ */
58
+ const DEFAULT_PROJECT_SETTINGS = {
59
+ model: "grok-code-fast-1",
60
+ };
61
+ /**
62
+ * Unified settings manager that handles both user-level and project-level settings
63
+ */
64
+ class SettingsManager {
65
+ constructor() {
66
+ // User settings path: ~/.grok/user-settings.json
67
+ this.userSettingsPath = path.join(os.homedir(), ".grok", "user-settings.json");
68
+ // Project settings path: .grok/settings.json (in current working directory)
69
+ this.projectSettingsPath = path.join(process.cwd(), ".grok", "settings.json");
70
+ }
71
+ /**
72
+ * Get singleton instance
73
+ */
74
+ static getInstance() {
75
+ if (!SettingsManager.instance) {
76
+ SettingsManager.instance = new SettingsManager();
77
+ }
78
+ return SettingsManager.instance;
79
+ }
80
+ /**
81
+ * Ensure directory exists for a given file path
82
+ */
83
+ ensureDirectoryExists(filePath) {
84
+ const dir = path.dirname(filePath);
85
+ if (!fs.existsSync(dir)) {
86
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
87
+ }
88
+ }
89
+ /**
90
+ * Load user settings from ~/.grok/user-settings.json
91
+ */
92
+ loadUserSettings() {
93
+ try {
94
+ if (!fs.existsSync(this.userSettingsPath)) {
95
+ // Create default user settings if file doesn't exist
96
+ this.saveUserSettings(DEFAULT_USER_SETTINGS);
97
+ return { ...DEFAULT_USER_SETTINGS };
98
+ }
99
+ const content = fs.readFileSync(this.userSettingsPath, "utf-8");
100
+ const settings = JSON.parse(content);
101
+ // Merge with defaults to ensure all required fields exist
102
+ return { ...DEFAULT_USER_SETTINGS, ...settings };
103
+ }
104
+ catch (error) {
105
+ console.warn("Failed to load user settings:", error instanceof Error ? error.message : "Unknown error");
106
+ return { ...DEFAULT_USER_SETTINGS };
107
+ }
108
+ }
109
+ /**
110
+ * Save user settings to ~/.grok/user-settings.json
111
+ */
112
+ saveUserSettings(settings) {
113
+ try {
114
+ this.ensureDirectoryExists(this.userSettingsPath);
115
+ // Read existing settings directly to avoid recursion
116
+ let existingSettings = { ...DEFAULT_USER_SETTINGS };
117
+ if (fs.existsSync(this.userSettingsPath)) {
118
+ try {
119
+ const content = fs.readFileSync(this.userSettingsPath, "utf-8");
120
+ const parsed = JSON.parse(content);
121
+ existingSettings = { ...DEFAULT_USER_SETTINGS, ...parsed };
122
+ }
123
+ catch (error) {
124
+ // If file is corrupted, use defaults
125
+ console.warn("Corrupted user settings file, using defaults");
126
+ }
127
+ }
128
+ const mergedSettings = { ...existingSettings, ...settings };
129
+ fs.writeFileSync(this.userSettingsPath, JSON.stringify(mergedSettings, null, 2), { mode: 0o600 } // Secure permissions for API key
130
+ );
131
+ }
132
+ catch (error) {
133
+ console.error("Failed to save user settings:", error instanceof Error ? error.message : "Unknown error");
134
+ throw error;
135
+ }
136
+ }
137
+ /**
138
+ * Update a specific user setting
139
+ */
140
+ updateUserSetting(key, value) {
141
+ const settings = { [key]: value };
142
+ this.saveUserSettings(settings);
143
+ }
144
+ /**
145
+ * Get a specific user setting
146
+ */
147
+ getUserSetting(key) {
148
+ const settings = this.loadUserSettings();
149
+ return settings[key];
150
+ }
151
+ /**
152
+ * Load project settings from .grok/settings.json
153
+ */
154
+ loadProjectSettings() {
155
+ try {
156
+ if (!fs.existsSync(this.projectSettingsPath)) {
157
+ // Create default project settings if file doesn't exist
158
+ this.saveProjectSettings(DEFAULT_PROJECT_SETTINGS);
159
+ return { ...DEFAULT_PROJECT_SETTINGS };
160
+ }
161
+ const content = fs.readFileSync(this.projectSettingsPath, "utf-8");
162
+ const settings = JSON.parse(content);
163
+ // Merge with defaults
164
+ return { ...DEFAULT_PROJECT_SETTINGS, ...settings };
165
+ }
166
+ catch (error) {
167
+ console.warn("Failed to load project settings:", error instanceof Error ? error.message : "Unknown error");
168
+ return { ...DEFAULT_PROJECT_SETTINGS };
169
+ }
170
+ }
171
+ /**
172
+ * Save project settings to .grok/settings.json
173
+ */
174
+ saveProjectSettings(settings) {
175
+ try {
176
+ this.ensureDirectoryExists(this.projectSettingsPath);
177
+ // Read existing settings directly to avoid recursion
178
+ let existingSettings = { ...DEFAULT_PROJECT_SETTINGS };
179
+ if (fs.existsSync(this.projectSettingsPath)) {
180
+ try {
181
+ const content = fs.readFileSync(this.projectSettingsPath, "utf-8");
182
+ const parsed = JSON.parse(content);
183
+ existingSettings = { ...DEFAULT_PROJECT_SETTINGS, ...parsed };
184
+ }
185
+ catch (error) {
186
+ // If file is corrupted, use defaults
187
+ console.warn("Corrupted project settings file, using defaults");
188
+ }
189
+ }
190
+ const mergedSettings = { ...existingSettings, ...settings };
191
+ fs.writeFileSync(this.projectSettingsPath, JSON.stringify(mergedSettings, null, 2));
192
+ }
193
+ catch (error) {
194
+ console.error("Failed to save project settings:", error instanceof Error ? error.message : "Unknown error");
195
+ throw error;
196
+ }
197
+ }
198
+ /**
199
+ * Update a specific project setting
200
+ */
201
+ updateProjectSetting(key, value) {
202
+ const settings = { [key]: value };
203
+ this.saveProjectSettings(settings);
204
+ }
205
+ /**
206
+ * Get a specific project setting
207
+ */
208
+ getProjectSetting(key) {
209
+ const settings = this.loadProjectSettings();
210
+ return settings[key];
211
+ }
212
+ /**
213
+ * Get the current model with proper fallback logic:
214
+ * 1. Project-specific model setting
215
+ * 2. User's default model
216
+ * 3. System default
217
+ */
218
+ getCurrentModel() {
219
+ const projectModel = this.getProjectSetting("model");
220
+ if (projectModel) {
221
+ return projectModel;
222
+ }
223
+ const userDefaultModel = this.getUserSetting("defaultModel");
224
+ if (userDefaultModel) {
225
+ return userDefaultModel;
226
+ }
227
+ return DEFAULT_PROJECT_SETTINGS.model || "grok-code-fast-1";
228
+ }
229
+ /**
230
+ * Set the current model for the project
231
+ */
232
+ setCurrentModel(model) {
233
+ this.updateProjectSetting("model", model);
234
+ }
235
+ /**
236
+ * Get available models list from user settings
237
+ */
238
+ getAvailableModels() {
239
+ const models = this.getUserSetting("models");
240
+ return models || DEFAULT_USER_SETTINGS.models || [];
241
+ }
242
+ /**
243
+ * Get API key from user settings or environment
244
+ */
245
+ getApiKey() {
246
+ // First check environment variable
247
+ const envApiKey = process.env.GROK_API_KEY;
248
+ if (envApiKey) {
249
+ return envApiKey;
250
+ }
251
+ // Then check user settings
252
+ return this.getUserSetting("apiKey");
253
+ }
254
+ /**
255
+ * Get base URL from user settings or environment
256
+ */
257
+ getBaseURL() {
258
+ // First check environment variable
259
+ const envBaseURL = process.env.GROK_BASE_URL;
260
+ if (envBaseURL) {
261
+ return envBaseURL;
262
+ }
263
+ // Then check user settings
264
+ const userBaseURL = this.getUserSetting("baseURL");
265
+ return (userBaseURL || DEFAULT_USER_SETTINGS.baseURL || "https://api.x.ai/v1");
266
+ }
267
+ }
268
+ exports.SettingsManager = SettingsManager;
269
+ /**
270
+ * Convenience function to get the singleton instance
271
+ */
272
+ function getSettingsManager() {
273
+ return SettingsManager.getInstance();
274
+ }
275
+ //# 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,8 @@
1
+ "use strict";
2
+ // This file is kept for potential future convenience functions
3
+ // All settings management should use getSettingsManager() from './settings-manager.js'
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.getSettingsManager = void 0;
6
+ var settings_manager_js_1 = require("./settings-manager.js");
7
+ Object.defineProperty(exports, "getSettingsManager", { enumerable: true, get: function () { return settings_manager_js_1.getSettingsManager; } });
8
+ //# 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,6DAA0F;AAAjF,yHAAA,kBAAkB,OAAA"}
@@ -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
+ };
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * Text manipulation utilities for terminal input handling
4
+ * Inspired by Gemini CLI's text processing capabilities
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.isWordBoundary = isWordBoundary;
8
+ exports.findWordStart = findWordStart;
9
+ exports.findWordEnd = findWordEnd;
10
+ exports.moveToPreviousWord = moveToPreviousWord;
11
+ exports.moveToNextWord = moveToNextWord;
12
+ exports.deleteWordBefore = deleteWordBefore;
13
+ exports.deleteWordAfter = deleteWordAfter;
14
+ exports.getTextPosition = getTextPosition;
15
+ exports.moveToLineStart = moveToLineStart;
16
+ exports.moveToLineEnd = moveToLineEnd;
17
+ exports.deleteCharBefore = deleteCharBefore;
18
+ exports.deleteCharAfter = deleteCharAfter;
19
+ exports.insertText = insertText;
20
+ /**
21
+ * Check if a character is a word boundary
22
+ */
23
+ function isWordBoundary(char) {
24
+ if (!char)
25
+ return true;
26
+ return /\s/.test(char) || /[^\w]/.test(char);
27
+ }
28
+ /**
29
+ * Find the start of the current word at the given position
30
+ */
31
+ function findWordStart(text, position) {
32
+ if (position <= 0)
33
+ return 0;
34
+ let pos = position - 1;
35
+ while (pos > 0 && !isWordBoundary(text[pos])) {
36
+ pos--;
37
+ }
38
+ // If we stopped at a word boundary, move forward to the actual word start
39
+ if (pos > 0 && isWordBoundary(text[pos])) {
40
+ pos++;
41
+ }
42
+ return pos;
43
+ }
44
+ /**
45
+ * Find the end of the current word at the given position
46
+ */
47
+ function findWordEnd(text, position) {
48
+ if (position >= text.length)
49
+ return text.length;
50
+ let pos = position;
51
+ while (pos < text.length && !isWordBoundary(text[pos])) {
52
+ pos++;
53
+ }
54
+ return pos;
55
+ }
56
+ /**
57
+ * Move cursor to the previous word boundary
58
+ */
59
+ function moveToPreviousWord(text, position) {
60
+ if (position <= 0)
61
+ return 0;
62
+ let pos = position - 1;
63
+ // Skip whitespace
64
+ while (pos > 0 && isWordBoundary(text[pos])) {
65
+ pos--;
66
+ }
67
+ // Find start of the word
68
+ while (pos > 0 && !isWordBoundary(text[pos - 1])) {
69
+ pos--;
70
+ }
71
+ return pos;
72
+ }
73
+ /**
74
+ * Move cursor to the next word boundary
75
+ */
76
+ function moveToNextWord(text, position) {
77
+ if (position >= text.length)
78
+ return text.length;
79
+ let pos = position;
80
+ // Skip current word
81
+ while (pos < text.length && !isWordBoundary(text[pos])) {
82
+ pos++;
83
+ }
84
+ // Skip whitespace
85
+ while (pos < text.length && isWordBoundary(text[pos])) {
86
+ pos++;
87
+ }
88
+ return pos;
89
+ }
90
+ /**
91
+ * Delete the word before the cursor
92
+ */
93
+ function deleteWordBefore(text, position) {
94
+ const wordStart = moveToPreviousWord(text, position);
95
+ const newText = text.slice(0, wordStart) + text.slice(position);
96
+ return {
97
+ text: newText,
98
+ position: wordStart,
99
+ };
100
+ }
101
+ /**
102
+ * Delete the word after the cursor
103
+ */
104
+ function deleteWordAfter(text, position) {
105
+ const wordEnd = moveToNextWord(text, position);
106
+ const newText = text.slice(0, position) + text.slice(wordEnd);
107
+ return {
108
+ text: newText,
109
+ position,
110
+ };
111
+ }
112
+ /**
113
+ * Get the current line and column from text position
114
+ */
115
+ function getTextPosition(text, index) {
116
+ const lines = text.slice(0, index).split('\n');
117
+ return {
118
+ index,
119
+ line: lines.length - 1,
120
+ column: lines[lines.length - 1].length,
121
+ };
122
+ }
123
+ /**
124
+ * Move to the beginning of the current line
125
+ */
126
+ function moveToLineStart(text, position) {
127
+ const beforeCursor = text.slice(0, position);
128
+ const lastNewlineIndex = beforeCursor.lastIndexOf('\n');
129
+ return lastNewlineIndex === -1 ? 0 : lastNewlineIndex + 1;
130
+ }
131
+ /**
132
+ * Move to the end of the current line
133
+ */
134
+ function moveToLineEnd(text, position) {
135
+ const afterCursor = text.slice(position);
136
+ const nextNewlineIndex = afterCursor.indexOf('\n');
137
+ return nextNewlineIndex === -1 ? text.length : position + nextNewlineIndex;
138
+ }
139
+ /**
140
+ * Handle proper Unicode-aware character deletion
141
+ */
142
+ function deleteCharBefore(text, position) {
143
+ if (position <= 0) {
144
+ return { text, position };
145
+ }
146
+ // Handle surrogate pairs and combining characters
147
+ let deleteCount = 1;
148
+ const charBefore = text.charAt(position - 1);
149
+ // Check for high surrogate (first part of surrogate pair)
150
+ if (position >= 2) {
151
+ const charBeforeBefore = text.charAt(position - 2);
152
+ if (charBeforeBefore >= '\uD800' && charBeforeBefore <= '\uDBFF' &&
153
+ charBefore >= '\uDC00' && charBefore <= '\uDFFF') {
154
+ deleteCount = 2;
155
+ }
156
+ }
157
+ const newText = text.slice(0, position - deleteCount) + text.slice(position);
158
+ return {
159
+ text: newText,
160
+ position: position - deleteCount,
161
+ };
162
+ }
163
+ /**
164
+ * Handle proper Unicode-aware character deletion forward
165
+ */
166
+ function deleteCharAfter(text, position) {
167
+ if (position >= text.length) {
168
+ return { text, position };
169
+ }
170
+ // Handle surrogate pairs and combining characters
171
+ let deleteCount = 1;
172
+ const charAfter = text.charAt(position);
173
+ // Check for high surrogate (first part of surrogate pair)
174
+ if (position + 1 < text.length) {
175
+ const charAfterAfter = text.charAt(position + 1);
176
+ if (charAfter >= '\uD800' && charAfter <= '\uDBFF' &&
177
+ charAfterAfter >= '\uDC00' && charAfterAfter <= '\uDFFF') {
178
+ deleteCount = 2;
179
+ }
180
+ }
181
+ const newText = text.slice(0, position) + text.slice(position + deleteCount);
182
+ return {
183
+ text: newText,
184
+ position,
185
+ };
186
+ }
187
+ /**
188
+ * Insert text at the given position with proper Unicode handling
189
+ */
190
+ function insertText(text, position, insert) {
191
+ const newText = text.slice(0, position) + insert + text.slice(position);
192
+ return {
193
+ text: newText,
194
+ position: position + insert.length,
195
+ };
196
+ }
197
+ //# sourceMappingURL=text-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-utils.js","sourceRoot":"","sources":["../../src/utils/text-utils.ts"],"names":[],"mappings":"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"}