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,357 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GROK_TOOLS = void 0;
4
+ exports.getMCPManager = getMCPManager;
5
+ exports.initializeMCPServers = initializeMCPServers;
6
+ exports.convertMCPToolToGrokTool = convertMCPToolToGrokTool;
7
+ exports.addMCPToolsToGrokTools = addMCPToolsToGrokTools;
8
+ exports.getAllGrokTools = getAllGrokTools;
9
+ const client_js_1 = require("../mcp/client.js");
10
+ const config_js_1 = require("../mcp/config.js");
11
+ const BASE_GROK_TOOLS = [
12
+ {
13
+ type: "function",
14
+ function: {
15
+ name: "view_file",
16
+ description: "View contents of a file or list directory contents",
17
+ parameters: {
18
+ type: "object",
19
+ properties: {
20
+ path: {
21
+ type: "string",
22
+ description: "Path to file or directory to view",
23
+ },
24
+ start_line: {
25
+ type: "number",
26
+ description: "Starting line number for partial file view (optional)",
27
+ },
28
+ end_line: {
29
+ type: "number",
30
+ description: "Ending line number for partial file view (optional)",
31
+ },
32
+ },
33
+ required: ["path"],
34
+ },
35
+ },
36
+ },
37
+ {
38
+ type: "function",
39
+ function: {
40
+ name: "create_file",
41
+ description: "Create a new file with specified content",
42
+ parameters: {
43
+ type: "object",
44
+ properties: {
45
+ path: {
46
+ type: "string",
47
+ description: "Path where the file should be created",
48
+ },
49
+ content: {
50
+ type: "string",
51
+ description: "Content to write to the file",
52
+ },
53
+ },
54
+ required: ["path", "content"],
55
+ },
56
+ },
57
+ },
58
+ {
59
+ type: "function",
60
+ function: {
61
+ name: "str_replace_editor",
62
+ description: "Replace specific text in a file. Use this for single line edits only",
63
+ parameters: {
64
+ type: "object",
65
+ properties: {
66
+ path: {
67
+ type: "string",
68
+ description: "Path to the file to edit",
69
+ },
70
+ old_str: {
71
+ type: "string",
72
+ description: "Text to replace (must match exactly, or will use fuzzy matching for multi-line strings)",
73
+ },
74
+ new_str: {
75
+ type: "string",
76
+ description: "Text to replace with",
77
+ },
78
+ replace_all: {
79
+ type: "boolean",
80
+ description: "Replace all occurrences (default: false, only replaces first occurrence)",
81
+ },
82
+ },
83
+ required: ["path", "old_str", "new_str"],
84
+ },
85
+ },
86
+ },
87
+ {
88
+ type: "function",
89
+ function: {
90
+ name: "bash",
91
+ description: "Execute a bash command",
92
+ parameters: {
93
+ type: "object",
94
+ properties: {
95
+ command: {
96
+ type: "string",
97
+ description: "The bash command to execute",
98
+ },
99
+ },
100
+ required: ["command"],
101
+ },
102
+ },
103
+ },
104
+ {
105
+ type: "function",
106
+ function: {
107
+ name: "search",
108
+ description: "Unified search tool for finding text content or files (similar to Cursor's search)",
109
+ parameters: {
110
+ type: "object",
111
+ properties: {
112
+ query: {
113
+ type: "string",
114
+ description: "Text to search for or file name/path pattern",
115
+ },
116
+ search_type: {
117
+ type: "string",
118
+ enum: ["text", "files", "both"],
119
+ description: "Type of search: 'text' for content search, 'files' for file names, 'both' for both (default: 'both')",
120
+ },
121
+ include_pattern: {
122
+ type: "string",
123
+ description: "Glob pattern for files to include (e.g. '*.ts', '*.js')",
124
+ },
125
+ exclude_pattern: {
126
+ type: "string",
127
+ description: "Glob pattern for files to exclude (e.g. '*.log', 'node_modules')",
128
+ },
129
+ case_sensitive: {
130
+ type: "boolean",
131
+ description: "Whether search should be case sensitive (default: false)",
132
+ },
133
+ whole_word: {
134
+ type: "boolean",
135
+ description: "Whether to match whole words only (default: false)",
136
+ },
137
+ regex: {
138
+ type: "boolean",
139
+ description: "Whether query is a regex pattern (default: false)",
140
+ },
141
+ max_results: {
142
+ type: "number",
143
+ description: "Maximum number of results to return (default: 50)",
144
+ },
145
+ file_types: {
146
+ type: "array",
147
+ items: { type: "string" },
148
+ description: "File types to search (e.g. ['js', 'ts', 'py'])",
149
+ },
150
+ include_hidden: {
151
+ type: "boolean",
152
+ description: "Whether to include hidden files (default: false)",
153
+ },
154
+ },
155
+ required: ["query"],
156
+ },
157
+ },
158
+ },
159
+ {
160
+ type: "function",
161
+ function: {
162
+ name: "create_todo_list",
163
+ description: "Create a new todo list for planning and tracking tasks",
164
+ parameters: {
165
+ type: "object",
166
+ properties: {
167
+ todos: {
168
+ type: "array",
169
+ description: "Array of todo items",
170
+ items: {
171
+ type: "object",
172
+ properties: {
173
+ id: {
174
+ type: "string",
175
+ description: "Unique identifier for the todo item",
176
+ },
177
+ content: {
178
+ type: "string",
179
+ description: "Description of the todo item",
180
+ },
181
+ status: {
182
+ type: "string",
183
+ enum: ["pending", "in_progress", "completed"],
184
+ description: "Current status of the todo item",
185
+ },
186
+ priority: {
187
+ type: "string",
188
+ enum: ["high", "medium", "low"],
189
+ description: "Priority level of the todo item",
190
+ },
191
+ },
192
+ required: ["id", "content", "status", "priority"],
193
+ },
194
+ },
195
+ },
196
+ required: ["todos"],
197
+ },
198
+ },
199
+ },
200
+ {
201
+ type: "function",
202
+ function: {
203
+ name: "update_todo_list",
204
+ description: "Update existing todos in the todo list",
205
+ parameters: {
206
+ type: "object",
207
+ properties: {
208
+ updates: {
209
+ type: "array",
210
+ description: "Array of todo updates",
211
+ items: {
212
+ type: "object",
213
+ properties: {
214
+ id: {
215
+ type: "string",
216
+ description: "ID of the todo item to update",
217
+ },
218
+ status: {
219
+ type: "string",
220
+ enum: ["pending", "in_progress", "completed"],
221
+ description: "New status for the todo item",
222
+ },
223
+ content: {
224
+ type: "string",
225
+ description: "New content for the todo item",
226
+ },
227
+ priority: {
228
+ type: "string",
229
+ enum: ["high", "medium", "low"],
230
+ description: "New priority for the todo item",
231
+ },
232
+ },
233
+ required: ["id"],
234
+ },
235
+ },
236
+ },
237
+ required: ["updates"],
238
+ },
239
+ },
240
+ },
241
+ ];
242
+ // Morph Fast Apply tool (conditional)
243
+ const MORPH_EDIT_TOOL = {
244
+ type: "function",
245
+ function: {
246
+ name: "edit_file",
247
+ description: "Use this tool to make an edit to an existing file.\n\nThis will be read by a less intelligent model, which will quickly apply the edit. You should make it clear what the edit is, while also minimizing the unchanged code you write.\nWhen writing the edit, you should specify each edit in sequence, with the special comment // ... existing code ... to represent unchanged code in between edited lines.\n\nFor example:\n\n// ... existing code ...\nFIRST_EDIT\n// ... existing code ...\nSECOND_EDIT\n// ... existing code ...\nTHIRD_EDIT\n// ... existing code ...\n\nYou should still bias towards repeating as few lines of the original file as possible to convey the change.\nBut, each edit should contain sufficient context of unchanged lines around the code you're editing to resolve ambiguity.\nDO NOT omit spans of pre-existing code (or comments) without using the // ... existing code ... comment to indicate its absence. If you omit the existing code comment, the model may inadvertently delete these lines.\nIf you plan on deleting a section, you must provide context before and after to delete it. If the initial code is ```code \\n Block 1 \\n Block 2 \\n Block 3 \\n code```, and you want to remove Block 2, you would output ```// ... existing code ... \\n Block 1 \\n Block 3 \\n // ... existing code ...```.\nMake sure it is clear what the edit should be, and where it should be applied.\nMake edits to a file in a single edit_file call instead of multiple edit_file calls to the same file. The apply model can handle many distinct edits at once.",
248
+ parameters: {
249
+ type: "object",
250
+ properties: {
251
+ target_file: {
252
+ type: "string",
253
+ description: "The target file to modify."
254
+ },
255
+ instructions: {
256
+ type: "string",
257
+ description: "A single sentence instruction describing what you are going to do for the sketched edit. This is used to assist the less intelligent model in applying the edit. Use the first person to describe what you are going to do. Use it to disambiguate uncertainty in the edit."
258
+ },
259
+ code_edit: {
260
+ type: "string",
261
+ description: "Specify ONLY the precise lines of code that you wish to edit. NEVER specify or write out unchanged code. Instead, represent all unchanged code using the comment of the language you're editing in - example: // ... existing code ..."
262
+ }
263
+ },
264
+ required: ["target_file", "instructions", "code_edit"]
265
+ }
266
+ }
267
+ };
268
+ // Function to build tools array conditionally
269
+ function buildGrokTools() {
270
+ const tools = [...BASE_GROK_TOOLS];
271
+ // Add Morph Fast Apply tool if API key is available
272
+ if (process.env.MORPH_API_KEY) {
273
+ tools.splice(3, 0, MORPH_EDIT_TOOL); // Insert after str_replace_editor
274
+ }
275
+ return tools;
276
+ }
277
+ // Export dynamic tools array
278
+ exports.GROK_TOOLS = buildGrokTools();
279
+ // Global MCP manager instance
280
+ let mcpManager = null;
281
+ function getMCPManager() {
282
+ if (!mcpManager) {
283
+ mcpManager = new client_js_1.MCPManager();
284
+ }
285
+ return mcpManager;
286
+ }
287
+ async function initializeMCPServers() {
288
+ const manager = getMCPManager();
289
+ const config = (0, config_js_1.loadMCPConfig)();
290
+ // Store original stderr.write
291
+ const originalStderrWrite = process.stderr.write;
292
+ // Temporarily suppress stderr to hide verbose MCP connection logs
293
+ process.stderr.write = function (chunk, encoding, callback) {
294
+ // Filter out mcp-remote verbose logs
295
+ const chunkStr = chunk.toString();
296
+ if (chunkStr.includes('[') && (chunkStr.includes('Using existing client port') ||
297
+ chunkStr.includes('Connecting to remote server') ||
298
+ chunkStr.includes('Using transport strategy') ||
299
+ chunkStr.includes('Connected to remote server') ||
300
+ chunkStr.includes('Local STDIO server running') ||
301
+ chunkStr.includes('Proxy established successfully') ||
302
+ chunkStr.includes('Local→Remote') ||
303
+ chunkStr.includes('Remote→Local'))) {
304
+ // Suppress these verbose logs
305
+ if (callback)
306
+ callback();
307
+ return true;
308
+ }
309
+ // Allow other stderr output
310
+ return originalStderrWrite.call(this, chunk, encoding, callback);
311
+ };
312
+ try {
313
+ for (const serverConfig of config.servers) {
314
+ try {
315
+ await manager.addServer(serverConfig);
316
+ }
317
+ catch (error) {
318
+ console.warn(`Failed to initialize MCP server ${serverConfig.name}:`, error);
319
+ }
320
+ }
321
+ }
322
+ finally {
323
+ // Restore original stderr.write
324
+ process.stderr.write = originalStderrWrite;
325
+ }
326
+ }
327
+ function convertMCPToolToGrokTool(mcpTool) {
328
+ return {
329
+ type: "function",
330
+ function: {
331
+ name: mcpTool.name,
332
+ description: mcpTool.description,
333
+ parameters: mcpTool.inputSchema || {
334
+ type: "object",
335
+ properties: {},
336
+ required: []
337
+ }
338
+ }
339
+ };
340
+ }
341
+ function addMCPToolsToGrokTools(baseTools) {
342
+ if (!mcpManager) {
343
+ return baseTools;
344
+ }
345
+ const mcpTools = mcpManager.getTools();
346
+ const grokMCPTools = mcpTools.map(convertMCPToolToGrokTool);
347
+ return [...baseTools, ...grokMCPTools];
348
+ }
349
+ async function getAllGrokTools() {
350
+ const manager = getMCPManager();
351
+ // Try to initialize servers if not already done, but don't block
352
+ manager.ensureServersInitialized().catch(() => {
353
+ // Ignore initialization errors to avoid blocking
354
+ });
355
+ return addMCPToolsToGrokTools(exports.GROK_TOOLS);
356
+ }
357
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/grok/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface Key {
2
+ name?: string;
3
+ ctrl?: boolean;
4
+ meta?: boolean;
5
+ shift?: boolean;
6
+ paste?: boolean;
7
+ sequence?: string;
8
+ upArrow?: boolean;
9
+ downArrow?: boolean;
10
+ leftArrow?: boolean;
11
+ rightArrow?: boolean;
12
+ return?: boolean;
13
+ escape?: boolean;
14
+ tab?: boolean;
15
+ backspace?: boolean;
16
+ delete?: boolean;
17
+ }
18
+ export interface EnhancedInputHook {
19
+ input: string;
20
+ cursorPosition: number;
21
+ isMultiline: boolean;
22
+ setInput: (text: string) => void;
23
+ setCursorPosition: (position: number) => void;
24
+ clearInput: () => void;
25
+ insertAtCursor: (text: string) => void;
26
+ resetHistory: () => void;
27
+ handleInput: (inputChar: string, key: Key) => void;
28
+ }
29
+ interface UseEnhancedInputProps {
30
+ onSubmit?: (text: string) => void;
31
+ onEscape?: () => void;
32
+ onSpecialKey?: (key: Key) => boolean;
33
+ disabled?: boolean;
34
+ multiline?: boolean;
35
+ }
36
+ export declare function useEnhancedInput({ onSubmit, onEscape, onSpecialKey, disabled, multiline, }?: UseEnhancedInputProps): EnhancedInputHook;
37
+ export {};
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEnhancedInput = useEnhancedInput;
4
+ const react_1 = require("react");
5
+ const text_utils_js_1 = require("../utils/text-utils.js");
6
+ const use_input_history_js_1 = require("./use-input-history.js");
7
+ function useEnhancedInput({ onSubmit, onEscape, onSpecialKey, disabled = false, multiline = false, } = {}) {
8
+ const [input, setInputState] = (0, react_1.useState)("");
9
+ const [cursorPosition, setCursorPositionState] = (0, react_1.useState)(0);
10
+ const isMultilineRef = (0, react_1.useRef)(multiline);
11
+ const { addToHistory, navigateHistory, resetHistory, setOriginalInput, isNavigatingHistory, } = (0, use_input_history_js_1.useInputHistory)();
12
+ const setInput = (0, react_1.useCallback)((text) => {
13
+ setInputState(text);
14
+ setCursorPositionState(Math.min(text.length, cursorPosition));
15
+ if (!isNavigatingHistory()) {
16
+ setOriginalInput(text);
17
+ }
18
+ }, [cursorPosition, isNavigatingHistory, setOriginalInput]);
19
+ const setCursorPosition = (0, react_1.useCallback)((position) => {
20
+ setCursorPositionState(Math.max(0, Math.min(input.length, position)));
21
+ }, [input.length]);
22
+ const clearInput = (0, react_1.useCallback)(() => {
23
+ setInputState("");
24
+ setCursorPositionState(0);
25
+ setOriginalInput("");
26
+ }, [setOriginalInput]);
27
+ const insertAtCursor = (0, react_1.useCallback)((text) => {
28
+ const result = (0, text_utils_js_1.insertText)(input, cursorPosition, text);
29
+ setInputState(result.text);
30
+ setCursorPositionState(result.position);
31
+ setOriginalInput(result.text);
32
+ }, [input, cursorPosition, setOriginalInput]);
33
+ const handleSubmit = (0, react_1.useCallback)(() => {
34
+ if (input.trim()) {
35
+ addToHistory(input);
36
+ onSubmit?.(input);
37
+ clearInput();
38
+ }
39
+ }, [input, addToHistory, onSubmit, clearInput]);
40
+ const handleInput = (0, react_1.useCallback)((inputChar, key) => {
41
+ if (disabled)
42
+ return;
43
+ // Handle Ctrl+C - check multiple ways it could be detected
44
+ if ((key.ctrl && inputChar === "c") || inputChar === "\x03") {
45
+ setInputState("");
46
+ setCursorPositionState(0);
47
+ setOriginalInput("");
48
+ return;
49
+ }
50
+ // Allow special key handler to override default behavior
51
+ if (onSpecialKey?.(key)) {
52
+ return;
53
+ }
54
+ // Handle Escape
55
+ if (key.escape) {
56
+ onEscape?.();
57
+ return;
58
+ }
59
+ // Handle Enter/Return
60
+ if (key.return) {
61
+ if (multiline && key.shift) {
62
+ // Shift+Enter in multiline mode inserts newline
63
+ const result = (0, text_utils_js_1.insertText)(input, cursorPosition, "\n");
64
+ setInputState(result.text);
65
+ setCursorPositionState(result.position);
66
+ setOriginalInput(result.text);
67
+ }
68
+ else {
69
+ handleSubmit();
70
+ }
71
+ return;
72
+ }
73
+ // Handle history navigation
74
+ if ((key.upArrow || key.name === 'up') && !key.ctrl && !key.meta) {
75
+ const historyInput = navigateHistory("up");
76
+ if (historyInput !== null) {
77
+ setInputState(historyInput);
78
+ setCursorPositionState(historyInput.length);
79
+ }
80
+ return;
81
+ }
82
+ if ((key.downArrow || key.name === 'down') && !key.ctrl && !key.meta) {
83
+ const historyInput = navigateHistory("down");
84
+ if (historyInput !== null) {
85
+ setInputState(historyInput);
86
+ setCursorPositionState(historyInput.length);
87
+ }
88
+ return;
89
+ }
90
+ // Handle cursor movement - ignore meta flag for arrows as it's unreliable in terminals
91
+ // Only do word movement if ctrl is pressed AND no arrow escape sequence is in inputChar
92
+ if ((key.leftArrow || key.name === 'left') && key.ctrl && !inputChar.includes('[')) {
93
+ const newPos = (0, text_utils_js_1.moveToPreviousWord)(input, cursorPosition);
94
+ setCursorPositionState(newPos);
95
+ return;
96
+ }
97
+ if ((key.rightArrow || key.name === 'right') && key.ctrl && !inputChar.includes('[')) {
98
+ const newPos = (0, text_utils_js_1.moveToNextWord)(input, cursorPosition);
99
+ setCursorPositionState(newPos);
100
+ return;
101
+ }
102
+ // Handle regular cursor movement - single character (ignore meta flag)
103
+ if (key.leftArrow || key.name === 'left') {
104
+ const newPos = Math.max(0, cursorPosition - 1);
105
+ setCursorPositionState(newPos);
106
+ return;
107
+ }
108
+ if (key.rightArrow || key.name === 'right') {
109
+ const newPos = Math.min(input.length, cursorPosition + 1);
110
+ setCursorPositionState(newPos);
111
+ return;
112
+ }
113
+ // Handle Home/End keys or Ctrl+A/E
114
+ if ((key.ctrl && inputChar === "a") || key.name === "home") {
115
+ setCursorPositionState(0); // Simple start of input
116
+ return;
117
+ }
118
+ if ((key.ctrl && inputChar === "e") || key.name === "end") {
119
+ setCursorPositionState(input.length); // Simple end of input
120
+ return;
121
+ }
122
+ // Handle deletion - check multiple ways backspace might be detected
123
+ // Backspace can be detected in different ways depending on terminal
124
+ // In some terminals, backspace shows up as delete:true with empty inputChar
125
+ const isBackspace = key.backspace ||
126
+ key.name === 'backspace' ||
127
+ inputChar === '\b' ||
128
+ inputChar === '\x7f' ||
129
+ (key.delete && inputChar === '' && !key.shift);
130
+ if (isBackspace) {
131
+ if (key.ctrl || key.meta) {
132
+ // Ctrl/Cmd + Backspace: Delete word before cursor
133
+ const result = (0, text_utils_js_1.deleteWordBefore)(input, cursorPosition);
134
+ setInputState(result.text);
135
+ setCursorPositionState(result.position);
136
+ setOriginalInput(result.text);
137
+ }
138
+ else {
139
+ // Regular backspace
140
+ const result = (0, text_utils_js_1.deleteCharBefore)(input, cursorPosition);
141
+ setInputState(result.text);
142
+ setCursorPositionState(result.position);
143
+ setOriginalInput(result.text);
144
+ }
145
+ return;
146
+ }
147
+ // Handle forward delete (Del key) - but not if it was already handled as backspace above
148
+ if ((key.delete && inputChar !== '') || (key.ctrl && inputChar === "d")) {
149
+ if (key.ctrl || key.meta) {
150
+ // Ctrl/Cmd + Delete: Delete word after cursor
151
+ const result = (0, text_utils_js_1.deleteWordAfter)(input, cursorPosition);
152
+ setInputState(result.text);
153
+ setCursorPositionState(result.position);
154
+ setOriginalInput(result.text);
155
+ }
156
+ else {
157
+ // Regular delete
158
+ const result = (0, text_utils_js_1.deleteCharAfter)(input, cursorPosition);
159
+ setInputState(result.text);
160
+ setCursorPositionState(result.position);
161
+ setOriginalInput(result.text);
162
+ }
163
+ return;
164
+ }
165
+ // Handle Ctrl+K: Delete from cursor to end of line
166
+ if (key.ctrl && inputChar === "k") {
167
+ const lineEnd = (0, text_utils_js_1.moveToLineEnd)(input, cursorPosition);
168
+ const newText = input.slice(0, cursorPosition) + input.slice(lineEnd);
169
+ setInputState(newText);
170
+ setOriginalInput(newText);
171
+ return;
172
+ }
173
+ // Handle Ctrl+U: Delete from cursor to start of line
174
+ if (key.ctrl && inputChar === "u") {
175
+ const lineStart = (0, text_utils_js_1.moveToLineStart)(input, cursorPosition);
176
+ const newText = input.slice(0, lineStart) + input.slice(cursorPosition);
177
+ setInputState(newText);
178
+ setCursorPositionState(lineStart);
179
+ setOriginalInput(newText);
180
+ return;
181
+ }
182
+ // Handle Ctrl+W: Delete word before cursor
183
+ if (key.ctrl && inputChar === "w") {
184
+ const result = (0, text_utils_js_1.deleteWordBefore)(input, cursorPosition);
185
+ setInputState(result.text);
186
+ setCursorPositionState(result.position);
187
+ setOriginalInput(result.text);
188
+ return;
189
+ }
190
+ // Handle Ctrl+X: Clear entire input
191
+ if (key.ctrl && inputChar === "x") {
192
+ setInputState("");
193
+ setCursorPositionState(0);
194
+ setOriginalInput("");
195
+ return;
196
+ }
197
+ // Handle regular character input
198
+ if (inputChar && !key.ctrl && !key.meta) {
199
+ const result = (0, text_utils_js_1.insertText)(input, cursorPosition, inputChar);
200
+ setInputState(result.text);
201
+ setCursorPositionState(result.position);
202
+ setOriginalInput(result.text);
203
+ }
204
+ }, [disabled, onSpecialKey, input, cursorPosition, multiline, handleSubmit, navigateHistory, setOriginalInput]);
205
+ return {
206
+ input,
207
+ cursorPosition,
208
+ isMultiline: isMultilineRef.current,
209
+ setInput,
210
+ setCursorPosition,
211
+ clearInput,
212
+ insertAtCursor,
213
+ resetHistory,
214
+ handleInput,
215
+ };
216
+ }
217
+ //# sourceMappingURL=use-enhanced-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-enhanced-input.js","sourceRoot":"","sources":["../../src/hooks/use-enhanced-input.ts"],"names":[],"mappings":"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"}