codevf 1.0.0 → 1.0.1

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 (199) hide show
  1. package/LICENSE +30 -21
  2. package/README.md +6 -1
  3. package/bin/codevf-mcp.js +11 -0
  4. package/dist/commands/fix.d.ts +5 -1
  5. package/dist/commands/fix.d.ts.map +1 -1
  6. package/dist/commands/fix.js +170 -13
  7. package/dist/commands/fix.js.map +1 -1
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +72 -2
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/mcp-tools.d.ts +17 -0
  12. package/dist/commands/mcp-tools.d.ts.map +1 -0
  13. package/dist/commands/mcp-tools.js +237 -0
  14. package/dist/commands/mcp-tools.js.map +1 -0
  15. package/dist/commands/setup.d.ts +8 -0
  16. package/dist/commands/setup.d.ts.map +1 -0
  17. package/dist/commands/setup.js +250 -0
  18. package/dist/commands/setup.js.map +1 -0
  19. package/dist/commands/welcome.d.ts +9 -0
  20. package/dist/commands/welcome.d.ts.map +1 -0
  21. package/dist/commands/welcome.js +175 -0
  22. package/dist/commands/welcome.js.map +1 -0
  23. package/dist/index.js +194 -149
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/api/client.d.ts +28 -0
  26. package/dist/lib/api/client.d.ts.map +1 -0
  27. package/dist/lib/api/client.js +66 -0
  28. package/dist/lib/api/client.js.map +1 -0
  29. package/dist/lib/api/tasks.d.ts +36 -0
  30. package/dist/lib/api/tasks.d.ts.map +1 -0
  31. package/dist/lib/api/tasks.js +62 -0
  32. package/dist/lib/api/tasks.js.map +1 -0
  33. package/dist/lib/api/websocket.d.ts +50 -0
  34. package/dist/lib/api/websocket.d.ts.map +1 -0
  35. package/dist/lib/api/websocket.js +153 -0
  36. package/dist/lib/api/websocket.js.map +1 -0
  37. package/dist/lib/auth/oauth-flow.d.ts +37 -0
  38. package/dist/lib/auth/oauth-flow.d.ts.map +1 -0
  39. package/dist/lib/auth/oauth-flow.js +119 -0
  40. package/dist/lib/auth/oauth-flow.js.map +1 -0
  41. package/dist/lib/auth/token-manager.d.ts +26 -0
  42. package/dist/lib/auth/token-manager.d.ts.map +1 -0
  43. package/dist/lib/auth/token-manager.js +87 -0
  44. package/dist/lib/auth/token-manager.js.map +1 -0
  45. package/dist/lib/config/manager.d.ts +50 -0
  46. package/dist/lib/config/manager.d.ts.map +1 -0
  47. package/dist/lib/config/manager.js +84 -0
  48. package/dist/lib/config/manager.js.map +1 -0
  49. package/dist/lib/utils/errors.d.ts +28 -0
  50. package/dist/lib/utils/errors.d.ts.map +1 -0
  51. package/dist/lib/utils/errors.js +44 -0
  52. package/dist/lib/utils/errors.js.map +1 -0
  53. package/dist/lib/utils/logger.d.ts +20 -0
  54. package/dist/lib/utils/logger.d.ts.map +1 -0
  55. package/dist/lib/utils/logger.js +40 -0
  56. package/dist/lib/utils/logger.js.map +1 -0
  57. package/dist/mcp/index.d.ts +7 -0
  58. package/dist/mcp/index.d.ts.map +1 -0
  59. package/dist/mcp/index.js +158 -0
  60. package/dist/mcp/index.js.map +1 -0
  61. package/dist/mcp/tools/chat.d.ts +30 -0
  62. package/dist/mcp/tools/chat.d.ts.map +1 -0
  63. package/dist/mcp/tools/chat.js +82 -0
  64. package/dist/mcp/tools/chat.js.map +1 -0
  65. package/dist/mcp/tools/instant.d.ts +36 -0
  66. package/dist/mcp/tools/instant.d.ts.map +1 -0
  67. package/dist/mcp/tools/instant.js +100 -0
  68. package/dist/mcp/tools/instant.js.map +1 -0
  69. package/dist/modules/aiAgent.d.ts +75 -0
  70. package/dist/modules/aiAgent.d.ts.map +1 -0
  71. package/dist/modules/aiAgent.js +707 -0
  72. package/dist/modules/aiAgent.js.map +1 -0
  73. package/dist/modules/api.d.ts +7 -0
  74. package/dist/modules/api.d.ts.map +1 -1
  75. package/dist/modules/api.js +13 -4
  76. package/dist/modules/api.js.map +1 -1
  77. package/dist/modules/commandHandler.d.ts +40 -0
  78. package/dist/modules/commandHandler.d.ts.map +1 -0
  79. package/dist/modules/commandHandler.js +345 -0
  80. package/dist/modules/commandHandler.js.map +1 -0
  81. package/dist/modules/config.d.ts +2 -0
  82. package/dist/modules/config.d.ts.map +1 -1
  83. package/dist/modules/config.js +9 -0
  84. package/dist/modules/config.js.map +1 -1
  85. package/dist/modules/constants.d.ts +83 -0
  86. package/dist/modules/constants.d.ts.map +1 -0
  87. package/dist/modules/constants.js +75 -0
  88. package/dist/modules/constants.js.map +1 -0
  89. package/dist/modules/permissions.d.ts +14 -0
  90. package/dist/modules/permissions.d.ts.map +1 -1
  91. package/dist/modules/permissions.js +94 -0
  92. package/dist/modules/permissions.js.map +1 -1
  93. package/dist/modules/toolRegistry.d.ts +50 -0
  94. package/dist/modules/toolRegistry.d.ts.map +1 -0
  95. package/dist/modules/toolRegistry.js +114 -0
  96. package/dist/modules/toolRegistry.js.map +1 -0
  97. package/dist/modules/tunnel.d.ts +33 -0
  98. package/dist/modules/tunnel.d.ts.map +1 -0
  99. package/dist/modules/tunnel.js +79 -0
  100. package/dist/modules/tunnel.js.map +1 -0
  101. package/dist/modules/vibeHelper.d.ts +16 -0
  102. package/dist/modules/vibeHelper.d.ts.map +1 -0
  103. package/dist/modules/vibeHelper.js +38 -0
  104. package/dist/modules/vibeHelper.js.map +1 -0
  105. package/dist/modules/websocket.d.ts +9 -0
  106. package/dist/modules/websocket.d.ts.map +1 -1
  107. package/dist/modules/websocket.js +70 -0
  108. package/dist/modules/websocket.js.map +1 -1
  109. package/dist/tools/consultEngineer.d.ts +13 -0
  110. package/dist/tools/consultEngineer.d.ts.map +1 -0
  111. package/dist/tools/consultEngineer.js +161 -0
  112. package/dist/tools/consultEngineer.js.map +1 -0
  113. package/dist/tools/realtimeChat.d.ts +9 -0
  114. package/dist/tools/realtimeChat.d.ts.map +1 -0
  115. package/dist/tools/realtimeChat.js +101 -0
  116. package/dist/tools/realtimeChat.js.map +1 -0
  117. package/dist/types/index.d.ts +183 -0
  118. package/dist/types/index.d.ts.map +1 -1
  119. package/dist/types/index.js.map +1 -1
  120. package/dist/ui/InteractiveApp.d.ts +13 -0
  121. package/dist/ui/InteractiveApp.d.ts.map +1 -0
  122. package/dist/ui/InteractiveApp.js +84 -0
  123. package/dist/ui/InteractiveApp.js.map +1 -0
  124. package/dist/ui/InteractivePrompt.d.ts +53 -0
  125. package/dist/ui/InteractivePrompt.d.ts.map +1 -0
  126. package/dist/ui/InteractivePrompt.js +422 -0
  127. package/dist/ui/InteractivePrompt.js.map +1 -0
  128. package/dist/ui/LiveSession.d.ts +2 -0
  129. package/dist/ui/LiveSession.d.ts.map +1 -1
  130. package/dist/ui/LiveSession.js +461 -180
  131. package/dist/ui/LiveSession.js.map +1 -1
  132. package/dist/ui/PromptInput.d.ts +14 -0
  133. package/dist/ui/PromptInput.d.ts.map +1 -0
  134. package/dist/ui/PromptInput.js +206 -0
  135. package/dist/ui/PromptInput.js.map +1 -0
  136. package/dist/ui/SessionUI.d.ts +40 -0
  137. package/dist/ui/SessionUI.d.ts.map +1 -0
  138. package/dist/ui/SessionUI.js +227 -0
  139. package/dist/ui/SessionUI.js.map +1 -0
  140. package/dist/ui/input/Command.d.ts +22 -0
  141. package/dist/ui/input/Command.d.ts.map +1 -0
  142. package/dist/ui/input/Command.js +30 -0
  143. package/dist/ui/input/Command.js.map +1 -0
  144. package/dist/ui/input/CustomInput.d.ts +15 -0
  145. package/dist/ui/input/CustomInput.d.ts.map +1 -0
  146. package/dist/ui/input/CustomInput.js +182 -0
  147. package/dist/ui/input/CustomInput.js.map +1 -0
  148. package/dist/ui/input/handlers/handleCursor.d.ts +22 -0
  149. package/dist/ui/input/handlers/handleCursor.d.ts.map +1 -0
  150. package/dist/ui/input/handlers/handleCursor.js +53 -0
  151. package/dist/ui/input/handlers/handleCursor.js.map +1 -0
  152. package/dist/ui/input/handlers/handleEdit.d.ts +18 -0
  153. package/dist/ui/input/handlers/handleEdit.d.ts.map +1 -0
  154. package/dist/ui/input/handlers/handleEdit.js +55 -0
  155. package/dist/ui/input/handlers/handleEdit.js.map +1 -0
  156. package/dist/ui/input/handlers/handleHistory.d.ts +18 -0
  157. package/dist/ui/input/handlers/handleHistory.d.ts.map +1 -0
  158. package/dist/ui/input/handlers/handleHistory.js +85 -0
  159. package/dist/ui/input/handlers/handleHistory.js.map +1 -0
  160. package/dist/ui/input/handlers/handlePaste.d.ts +19 -0
  161. package/dist/ui/input/handlers/handlePaste.d.ts.map +1 -0
  162. package/dist/ui/input/handlers/handlePaste.js +49 -0
  163. package/dist/ui/input/handlers/handlePaste.js.map +1 -0
  164. package/dist/ui/input/handlers/handleSubmit.d.ts +18 -0
  165. package/dist/ui/input/handlers/handleSubmit.d.ts.map +1 -0
  166. package/dist/ui/input/handlers/handleSubmit.js +39 -0
  167. package/dist/ui/input/handlers/handleSubmit.js.map +1 -0
  168. package/dist/ui/input/helpers.d.ts +4 -0
  169. package/dist/ui/input/helpers.d.ts.map +1 -0
  170. package/dist/ui/input/helpers.js +13 -0
  171. package/dist/ui/input/helpers.js.map +1 -0
  172. package/dist/ui/input/keyMatchers.d.ts +14 -0
  173. package/dist/ui/input/keyMatchers.d.ts.map +1 -0
  174. package/dist/ui/input/keyMatchers.js +49 -0
  175. package/dist/ui/input/keyMatchers.js.map +1 -0
  176. package/dist/ui/input/types.d.ts +33 -0
  177. package/dist/ui/input/types.d.ts.map +1 -0
  178. package/dist/ui/input/types.js +2 -0
  179. package/dist/ui/input/types.js.map +1 -0
  180. package/dist/ui/promptWithModes.d.ts +12 -0
  181. package/dist/ui/promptWithModes.d.ts.map +1 -0
  182. package/dist/ui/promptWithModes.js +24 -0
  183. package/dist/ui/promptWithModes.js.map +1 -0
  184. package/dist/ui/renderPrompt.d.ts +12 -0
  185. package/dist/ui/renderPrompt.d.ts.map +1 -0
  186. package/dist/ui/renderPrompt.js +14 -0
  187. package/dist/ui/renderPrompt.js.map +1 -0
  188. package/dist/ui/simplePrompt.d.ts +7 -0
  189. package/dist/ui/simplePrompt.d.ts.map +1 -0
  190. package/dist/ui/simplePrompt.js +38 -0
  191. package/dist/ui/simplePrompt.js.map +1 -0
  192. package/dist/ui/spinner.d.ts +7 -0
  193. package/dist/ui/spinner.d.ts.map +1 -0
  194. package/dist/ui/spinner.js +13 -0
  195. package/dist/ui/spinner.js.map +1 -0
  196. package/package.json +36 -25
  197. package/ARCHITECTURE.md +0 -285
  198. package/BUILD_SUMMARY.md +0 -340
  199. package/QUICKSTART.md +0 -180
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../src/ui/input/Command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,OAAO;IAEjB,MAAM,WAAW;IAGjB,KAAK,UAAU;IAGf,UAAU,cAAc;IACxB,YAAY,gBAAgB;IAG5B,WAAW,eAAe;IAC1B,YAAY,gBAAgB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;IAGX,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,WAAW,eAAe;IAG1B,IAAI,SAAS;IACb,MAAM,WAAW;IAGjB,UAAU,cAAc;IACxB,iBAAiB,oBAAoB;CACtC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Command enum for standardized keyboard actions
3
+ * Following gemini-cli's pattern for type-safe command references
4
+ */
5
+ export var Command;
6
+ (function (Command) {
7
+ // Submission
8
+ Command["SUBMIT"] = "submit";
9
+ // Paste operations
10
+ Command["PASTE"] = "paste";
11
+ // History navigation
12
+ Command["HISTORY_UP"] = "historyUp";
13
+ Command["HISTORY_DOWN"] = "historyDown";
14
+ // Cursor movement
15
+ Command["CURSOR_LEFT"] = "cursorLeft";
16
+ Command["CURSOR_RIGHT"] = "cursorRight";
17
+ Command["HOME"] = "home";
18
+ Command["END"] = "end";
19
+ // Text editing
20
+ Command["BACKSPACE"] = "backspace";
21
+ Command["DELETE"] = "delete";
22
+ Command["INSERT_CHAR"] = "insertChar";
23
+ // Control
24
+ Command["EXIT"] = "exit";
25
+ Command["ESCAPE"] = "escape";
26
+ // Mode toggles
27
+ Command["CYCLE_MODE"] = "cycleMode";
28
+ Command["TOGGLE_AGENT_MODE"] = "toggleAgentMode";
29
+ })(Command || (Command = {}));
30
+ //# sourceMappingURL=Command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.js","sourceRoot":"","sources":["../../../src/ui/input/Command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,OA6BX;AA7BD,WAAY,OAAO;IACjB,aAAa;IACb,4BAAiB,CAAA;IAEjB,mBAAmB;IACnB,0BAAe,CAAA;IAEf,qBAAqB;IACrB,mCAAwB,CAAA;IACxB,uCAA4B,CAAA;IAE5B,kBAAkB;IAClB,qCAA0B,CAAA;IAC1B,uCAA4B,CAAA;IAC5B,wBAAa,CAAA;IACb,sBAAW,CAAA;IAEX,eAAe;IACf,kCAAuB,CAAA;IACvB,4BAAiB,CAAA;IACjB,qCAA0B,CAAA;IAE1B,UAAU;IACV,wBAAa,CAAA;IACb,4BAAiB,CAAA;IAEjB,eAAe;IACf,mCAAwB,CAAA;IACxB,gDAAqC,CAAA;AACvC,CAAC,EA7BW,OAAO,KAAP,OAAO,QA6BlB"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { AgentMode, RoutingMode } from '../../modules/constants.js';
3
+ interface CustomInputProps {
4
+ placeholder?: string;
5
+ onSubmit: (text: string) => void;
6
+ routingMode: RoutingMode;
7
+ aiEnabled: boolean;
8
+ agentMode: AgentMode;
9
+ onModeChange: (mode: RoutingMode) => void;
10
+ onAgentModeChange: (mode: AgentMode) => void;
11
+ isAiProcessing?: boolean;
12
+ }
13
+ export declare const CustomInput: React.FC<CustomInputProps>;
14
+ export {};
15
+ //# sourceMappingURL=CustomInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomInput.d.ts","sourceRoot":"","sources":["../../../src/ui/input/CustomInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAgBrD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGpE,UAAU,gBAAgB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,iBAAiB,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA+NlD,CAAC"}
@@ -0,0 +1,182 @@
1
+ import React, { useState, useCallback } from 'react';
2
+ import { Box, Text, useInput, useApp } from 'ink';
3
+ import chalk from 'chalk';
4
+ import { Command } from './Command.js';
5
+ import { matchCommand } from './keyMatchers.js';
6
+ import { handlePaste, clearPaste } from './handlers/handlePaste.js';
7
+ import { handleHistoryUp, handleHistoryDown, addToHistory } from './handlers/handleHistory.js';
8
+ import { handleCursorLeft, handleCursorRight, handleHome, handleEnd, } from './handlers/handleCursor.js';
9
+ import { handleInsertChar, handleBackspace, handleDelete } from './handlers/handleEdit.js';
10
+ import { handleSubmit, isInputEmpty } from './handlers/handleSubmit.js';
11
+ import { cycleRoutingMode, toggleAgentMode } from './helpers.js';
12
+ export const CustomInput = ({ placeholder = 'Type your message...', onSubmit, routingMode, aiEnabled, agentMode, onModeChange, onAgentModeChange, isAiProcessing = false, }) => {
13
+ const { exit } = useApp();
14
+ // State management
15
+ const [inputState, setInputState] = useState({
16
+ input: '',
17
+ cursorCol: 0,
18
+ historyIndex: -1,
19
+ tempInput: '',
20
+ pastedContent: null,
21
+ });
22
+ const [history, setHistory] = useState({
23
+ entries: [],
24
+ maxSize: 100,
25
+ });
26
+ // Centralized input router
27
+ const handleInputEvent = useCallback((inputChar, key) => {
28
+ // Exit (Ctrl+C)
29
+ if (matchCommand(Command.EXIT, key, inputChar)) {
30
+ exit();
31
+ process.exit(0);
32
+ return;
33
+ }
34
+ // Escape - clear paste if present
35
+ if (matchCommand(Command.ESCAPE, key, inputChar)) {
36
+ if (inputState.pastedContent !== null) {
37
+ setInputState(clearPaste);
38
+ }
39
+ return;
40
+ }
41
+ // Tab - toggle routing mode
42
+ if (matchCommand(Command.CYCLE_MODE, key, inputChar)) {
43
+ const newMode = cycleRoutingMode(routingMode, aiEnabled);
44
+ if (!newMode) {
45
+ console.log(chalk.yellow('\n [!] AI mode not available'));
46
+ console.log(chalk.dim(' Run ') + chalk.white('codevf init') + chalk.dim(' to enable'));
47
+ return;
48
+ }
49
+ onModeChange(newMode);
50
+ return;
51
+ }
52
+ // Shift+Tab - toggle agent mode between build and plan
53
+ if (matchCommand(Command.TOGGLE_AGENT_MODE, key, inputChar)) {
54
+ const nextAgentMode = toggleAgentMode(agentMode);
55
+ onAgentModeChange(nextAgentMode);
56
+ console.log(chalk.yellow(`\n [!] Agent mode switched to ${nextAgentMode === 'build' ? 'build' : 'plan'}`));
57
+ return;
58
+ }
59
+ // Backspace - delete typed text first, then clear paste if no typed text
60
+ if (matchCommand(Command.BACKSPACE, key, inputChar)) {
61
+ if (inputState.pastedContent !== null && inputState.input.length === 0) {
62
+ // No typed text - clear the paste placeholder
63
+ setInputState(clearPaste);
64
+ }
65
+ else {
66
+ // Has typed text - delete last character
67
+ setInputState(handleBackspace);
68
+ }
69
+ return;
70
+ }
71
+ // Submit (Enter)
72
+ if (matchCommand(Command.SUBMIT, key, inputChar)) {
73
+ const { text, newState } = handleSubmit(inputState);
74
+ if (!isInputEmpty(inputState)) {
75
+ // Add to history
76
+ setHistory((prev) => addToHistory(prev, text));
77
+ // Call onSubmit callback
78
+ onSubmit(text);
79
+ // Reset state
80
+ setInputState(newState);
81
+ }
82
+ return;
83
+ }
84
+ // Paste detection (multi-character input) - ONLY if not already showing placeholder
85
+ if (matchCommand(Command.PASTE, key, inputChar) && inputState.pastedContent === null) {
86
+ setInputState((prev) => handlePaste(prev, inputChar));
87
+ return;
88
+ }
89
+ // History navigation
90
+ if (matchCommand(Command.HISTORY_UP, key, inputChar)) {
91
+ setInputState((prev) => handleHistoryUp(prev, history));
92
+ return;
93
+ }
94
+ if (matchCommand(Command.HISTORY_DOWN, key, inputChar)) {
95
+ setInputState((prev) => handleHistoryDown(prev, history));
96
+ return;
97
+ }
98
+ // Cursor movement
99
+ if (matchCommand(Command.CURSOR_LEFT, key, inputChar)) {
100
+ setInputState(handleCursorLeft);
101
+ return;
102
+ }
103
+ if (matchCommand(Command.CURSOR_RIGHT, key, inputChar)) {
104
+ setInputState(handleCursorRight);
105
+ return;
106
+ }
107
+ if (matchCommand(Command.HOME, key, inputChar)) {
108
+ setInputState(handleHome);
109
+ return;
110
+ }
111
+ if (matchCommand(Command.END, key, inputChar)) {
112
+ setInputState(handleEnd);
113
+ return;
114
+ }
115
+ // Delete
116
+ if (matchCommand(Command.DELETE, key, inputChar)) {
117
+ setInputState(handleDelete);
118
+ return;
119
+ }
120
+ // Insert character (regular typing)
121
+ if (matchCommand(Command.INSERT_CHAR, key, inputChar)) {
122
+ setInputState((prev) => handleInsertChar(prev, inputChar));
123
+ return;
124
+ }
125
+ }, [
126
+ agentMode,
127
+ aiEnabled,
128
+ inputState,
129
+ history,
130
+ onAgentModeChange,
131
+ onModeChange,
132
+ onSubmit,
133
+ routingMode,
134
+ exit,
135
+ ]);
136
+ useInput(handleInputEvent, { isActive: !isAiProcessing });
137
+ // Rendering logic
138
+ const renderInput = () => {
139
+ const { input, cursorCol, pastedContent } = inputState;
140
+ // Paste placeholder with optional additional text
141
+ if (pastedContent !== null) {
142
+ const lines = pastedContent.split('\n').length;
143
+ const chars = pastedContent.length;
144
+ const placeholder = `[Pasted ${lines} lines, ${chars} chars]`;
145
+ // Show placeholder + typed text
146
+ if (input.length > 0) {
147
+ const beforeCursor = input.slice(0, cursorCol);
148
+ const atCursor = input[cursorCol] || ' ';
149
+ const afterCursor = input.slice(cursorCol + 1);
150
+ return (React.createElement(Text, null,
151
+ chalk.yellow(placeholder),
152
+ " ",
153
+ beforeCursor,
154
+ chalk.inverse(atCursor),
155
+ afterCursor));
156
+ }
157
+ // Just placeholder with cursor
158
+ return (React.createElement(Text, null,
159
+ chalk.yellow(placeholder),
160
+ chalk.inverse(' '),
161
+ React.createElement(Text, { dimColor: true }, " Type to add more, Enter to send, Esc/Backspace to clear")));
162
+ }
163
+ // Empty input - show placeholder with cursor
164
+ if (input === '') {
165
+ return (React.createElement(Text, null,
166
+ chalk.inverse(' '),
167
+ React.createElement(Text, { dimColor: true },
168
+ " ",
169
+ placeholder)));
170
+ }
171
+ // Regular input with cursor
172
+ const beforeCursor = input.slice(0, cursorCol);
173
+ const atCursor = input[cursorCol] || ' ';
174
+ const afterCursor = input.slice(cursorCol + 1);
175
+ return (React.createElement(Text, null,
176
+ beforeCursor,
177
+ chalk.inverse(atCursor),
178
+ afterCursor));
179
+ };
180
+ return React.createElement(Box, null, renderInput());
181
+ };
182
+ //# sourceMappingURL=CustomInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomInput.js","sourceRoot":"","sources":["../../../src/ui/input/CustomInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { InputState } from '../types.js';
2
+ /**
3
+ * Handles cursor movement (left/right/home/end)
4
+ * Simplified for single-line input only
5
+ */
6
+ /**
7
+ * Move cursor left
8
+ */
9
+ export declare function handleCursorLeft(state: InputState): InputState;
10
+ /**
11
+ * Move cursor right
12
+ */
13
+ export declare function handleCursorRight(state: InputState): InputState;
14
+ /**
15
+ * Move cursor to start of line (Home / Ctrl+A)
16
+ */
17
+ export declare function handleHome(state: InputState): InputState;
18
+ /**
19
+ * Move cursor to end of line (End / Ctrl+E)
20
+ */
21
+ export declare function handleEnd(state: InputState): InputState;
22
+ //# sourceMappingURL=handleCursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCursor.d.ts","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handleCursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAY9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAY/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAMxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAMvD"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Handles cursor movement (left/right/home/end)
3
+ * Simplified for single-line input only
4
+ */
5
+ /**
6
+ * Move cursor left
7
+ */
8
+ export function handleCursorLeft(state) {
9
+ const { cursorCol } = state;
10
+ if (cursorCol > 0) {
11
+ return {
12
+ ...state,
13
+ cursorCol: cursorCol - 1,
14
+ historyIndex: -1,
15
+ };
16
+ }
17
+ return state;
18
+ }
19
+ /**
20
+ * Move cursor right
21
+ */
22
+ export function handleCursorRight(state) {
23
+ const { cursorCol, input } = state;
24
+ if (cursorCol < input.length) {
25
+ return {
26
+ ...state,
27
+ cursorCol: cursorCol + 1,
28
+ historyIndex: -1,
29
+ };
30
+ }
31
+ return state;
32
+ }
33
+ /**
34
+ * Move cursor to start of line (Home / Ctrl+A)
35
+ */
36
+ export function handleHome(state) {
37
+ return {
38
+ ...state,
39
+ cursorCol: 0,
40
+ historyIndex: -1,
41
+ };
42
+ }
43
+ /**
44
+ * Move cursor to end of line (End / Ctrl+E)
45
+ */
46
+ export function handleEnd(state) {
47
+ return {
48
+ ...state,
49
+ cursorCol: state.input.length,
50
+ historyIndex: -1,
51
+ };
52
+ }
53
+ //# sourceMappingURL=handleCursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCursor.js","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handleCursor.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE5B,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO;YACL,GAAG,KAAK;YACR,SAAS,EAAE,SAAS,GAAG,CAAC;YACxB,YAAY,EAAE,CAAC,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEnC,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,OAAO;YACL,GAAG,KAAK;YACR,SAAS,EAAE,SAAS,GAAG,CAAC;YACxB,YAAY,EAAE,CAAC,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO;QACL,GAAG,KAAK;QACR,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,CAAC,CAAC;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,OAAO;QACL,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;QAC7B,YAAY,EAAE,CAAC,CAAC;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { InputState } from '../types.js';
2
+ /**
3
+ * Handles text editing operations (insert/backspace/delete)
4
+ * Simplified for single-line input
5
+ */
6
+ /**
7
+ * Insert a character at cursor position
8
+ */
9
+ export declare function handleInsertChar(state: InputState, char: string): InputState;
10
+ /**
11
+ * Handle backspace (delete character before cursor)
12
+ */
13
+ export declare function handleBackspace(state: InputState): InputState;
14
+ /**
15
+ * Handle delete (delete character at cursor)
16
+ */
17
+ export declare function handleDelete(state: InputState): InputState;
18
+ //# sourceMappingURL=handleEdit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleEdit.d.ts","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handleEdit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM,GACX,UAAU,CAaZ;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAiB7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAgB1D"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Handles text editing operations (insert/backspace/delete)
3
+ * Simplified for single-line input
4
+ */
5
+ /**
6
+ * Insert a character at cursor position
7
+ */
8
+ export function handleInsertChar(state, char) {
9
+ const { input, cursorCol } = state;
10
+ const beforeCursor = input.slice(0, cursorCol);
11
+ const afterCursor = input.slice(cursorCol);
12
+ const newInput = beforeCursor + char + afterCursor;
13
+ return {
14
+ ...state,
15
+ input: newInput,
16
+ cursorCol: cursorCol + 1,
17
+ historyIndex: -1,
18
+ };
19
+ }
20
+ /**
21
+ * Handle backspace (delete character before cursor)
22
+ */
23
+ export function handleBackspace(state) {
24
+ const { input, cursorCol } = state;
25
+ if (cursorCol > 0) {
26
+ const beforeCursor = input.slice(0, cursorCol - 1);
27
+ const afterCursor = input.slice(cursorCol);
28
+ const newInput = beforeCursor + afterCursor;
29
+ return {
30
+ ...state,
31
+ input: newInput,
32
+ cursorCol: cursorCol - 1,
33
+ historyIndex: -1,
34
+ };
35
+ }
36
+ return state;
37
+ }
38
+ /**
39
+ * Handle delete (delete character at cursor)
40
+ */
41
+ export function handleDelete(state) {
42
+ const { input, cursorCol } = state;
43
+ if (cursorCol < input.length) {
44
+ const beforeCursor = input.slice(0, cursorCol);
45
+ const afterCursor = input.slice(cursorCol + 1);
46
+ const newInput = beforeCursor + afterCursor;
47
+ return {
48
+ ...state,
49
+ input: newInput,
50
+ historyIndex: -1,
51
+ };
52
+ }
53
+ return state;
54
+ }
55
+ //# sourceMappingURL=handleEdit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleEdit.js","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handleEdit.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAiB,EACjB,IAAY;IAEZ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEnC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,GAAG,WAAW,CAAC;IAEnD,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,SAAS,GAAG,CAAC;QACxB,YAAY,EAAE,CAAC,CAAC;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEnC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;QAE5C,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,SAAS,GAAG,CAAC;YACxB,YAAY,EAAE,CAAC,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEnC,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;QAE5C,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,QAAQ;YACf,YAAY,EAAE,CAAC,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { InputState, HistoryState } from '../types.js';
2
+ /**
3
+ * Handles command history navigation (up/down arrows)
4
+ * Simplified for single-line input
5
+ */
6
+ /**
7
+ * Navigate backward through history (up arrow)
8
+ */
9
+ export declare function handleHistoryUp(state: InputState, history: HistoryState): InputState;
10
+ /**
11
+ * Navigate forward through history (down arrow)
12
+ */
13
+ export declare function handleHistoryDown(state: InputState, history: HistoryState): InputState;
14
+ /**
15
+ * Add entry to history (called on submit)
16
+ */
17
+ export declare function addToHistory(history: HistoryState, entry: string): HistoryState;
18
+ //# sourceMappingURL=handleHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleHistory.d.ts","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handleHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvD;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,GACpB,UAAU,CAoCZ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,GACpB,UAAU,CAiCZ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,GACZ,YAAY,CAYd"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Handles command history navigation (up/down arrows)
3
+ * Simplified for single-line input
4
+ */
5
+ /**
6
+ * Navigate backward through history (up arrow)
7
+ */
8
+ export function handleHistoryUp(state, history) {
9
+ const { entries } = history;
10
+ const { historyIndex, input } = state;
11
+ // No history available
12
+ if (entries.length === 0) {
13
+ return state;
14
+ }
15
+ // First time accessing history - save current input
16
+ if (historyIndex === -1) {
17
+ const newIndex = 0;
18
+ return {
19
+ ...state,
20
+ input: entries[newIndex],
21
+ cursorCol: entries[newIndex].length,
22
+ historyIndex: newIndex,
23
+ tempInput: input,
24
+ };
25
+ }
26
+ // Already in history - navigate backward
27
+ if (historyIndex < entries.length - 1) {
28
+ const newIndex = historyIndex + 1;
29
+ return {
30
+ ...state,
31
+ input: entries[newIndex],
32
+ cursorCol: entries[newIndex].length,
33
+ historyIndex: newIndex,
34
+ };
35
+ }
36
+ // At oldest entry - no change
37
+ return state;
38
+ }
39
+ /**
40
+ * Navigate forward through history (down arrow)
41
+ */
42
+ export function handleHistoryDown(state, history) {
43
+ const { entries } = history;
44
+ const { historyIndex, tempInput } = state;
45
+ // Not in history mode - no-op
46
+ if (historyIndex === -1) {
47
+ return state;
48
+ }
49
+ // Navigate forward
50
+ if (historyIndex > 0) {
51
+ const newIndex = historyIndex - 1;
52
+ return {
53
+ ...state,
54
+ input: entries[newIndex],
55
+ cursorCol: entries[newIndex].length,
56
+ historyIndex: newIndex,
57
+ };
58
+ }
59
+ // At newest entry - restore tempInput
60
+ if (historyIndex === 0) {
61
+ return {
62
+ ...state,
63
+ input: tempInput,
64
+ cursorCol: tempInput.length,
65
+ historyIndex: -1,
66
+ tempInput: '',
67
+ };
68
+ }
69
+ return state;
70
+ }
71
+ /**
72
+ * Add entry to history (called on submit)
73
+ */
74
+ export function addToHistory(history, entry) {
75
+ // Don't add empty entries or duplicates
76
+ if (!entry.trim() || entry === history.entries[0]) {
77
+ return history;
78
+ }
79
+ const newEntries = [entry, ...history.entries].slice(0, history.maxSize);
80
+ return {
81
+ ...history,
82
+ entries: newEntries,
83
+ };
84
+ }
85
+ //# sourceMappingURL=handleHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleHistory.js","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handleHistory.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAiB,EACjB,OAAqB;IAErB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEtC,uBAAuB;IACvB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oDAAoD;IACpD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,CAAC,CAAC;QAEnB,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;YACxB,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM;YACnC,YAAY,EAAE,QAAQ;YACtB,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAC;QAElC,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;YACxB,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM;YACnC,YAAY,EAAE,QAAQ;SACvB,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAiB,EACjB,OAAqB;IAErB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE1C,8BAA8B;IAC9B,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;IACnB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAC;QAElC,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;YACxB,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM;YACnC,YAAY,EAAE,QAAQ;SACvB,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,SAAS,CAAC,MAAM;YAC3B,YAAY,EAAE,CAAC,CAAC;YAChB,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAqB,EACrB,KAAa;IAEb,wCAAwC;IACxC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzE,OAAO;QACL,GAAG,OAAO;QACV,OAAO,EAAE,UAAU;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { InputState } from '../types.js';
2
+ /**
3
+ * Handles paste operations with placeholder
4
+ * SIMPLIFIED: Show "[Pasted content]" placeholder only for multi-line pastes, allow typing after
5
+ *
6
+ * Algorithm:
7
+ * 1. Detect paste by inputChar.length > 1
8
+ * 2. Store full pasted content in pastedContent only if it contains newlines
9
+ * 3. Display placeholder "[Pasted content]" + any typed text (only for multi-line)
10
+ * 4. For single-line pastes, insert directly into input
11
+ * 5. User can type more text after the placeholder
12
+ * 6. On submit, combine pasted content + typed text
13
+ */
14
+ export declare function handlePaste(state: InputState, pastedText: string): InputState;
15
+ /**
16
+ * Clear pasted content and return to normal input
17
+ */
18
+ export declare function clearPaste(state: InputState): InputState;
19
+ //# sourceMappingURL=handlePaste.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlePaste.d.ts","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handlePaste.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAwB7E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAOxD"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Handles paste operations with placeholder
3
+ * SIMPLIFIED: Show "[Pasted content]" placeholder only for multi-line pastes, allow typing after
4
+ *
5
+ * Algorithm:
6
+ * 1. Detect paste by inputChar.length > 1
7
+ * 2. Store full pasted content in pastedContent only if it contains newlines
8
+ * 3. Display placeholder "[Pasted content]" + any typed text (only for multi-line)
9
+ * 4. For single-line pastes, insert directly into input
10
+ * 5. User can type more text after the placeholder
11
+ * 6. On submit, combine pasted content + typed text
12
+ */
13
+ export function handlePaste(state, pastedText) {
14
+ // Check if pasted text contains newlines (multi-line)
15
+ const isMultiLine = pastedText.includes('\n') || pastedText.includes('\r');
16
+ if (isMultiLine) {
17
+ // Multi-line paste: use placeholder
18
+ return {
19
+ ...state,
20
+ input: '', // Clear any existing input when pasting
21
+ cursorCol: 0,
22
+ pastedContent: pastedText,
23
+ historyIndex: -1, // Reset history navigation
24
+ };
25
+ }
26
+ else {
27
+ // Single-line paste: insert directly into input
28
+ const newInput = state.input.slice(0, state.cursorCol) + pastedText + state.input.slice(state.cursorCol);
29
+ return {
30
+ ...state,
31
+ input: newInput,
32
+ cursorCol: state.cursorCol + pastedText.length,
33
+ pastedContent: null, // No placeholder for single-line
34
+ historyIndex: -1, // Reset history navigation
35
+ };
36
+ }
37
+ }
38
+ /**
39
+ * Clear pasted content and return to normal input
40
+ */
41
+ export function clearPaste(state) {
42
+ return {
43
+ ...state,
44
+ input: '',
45
+ cursorCol: 0,
46
+ pastedContent: null,
47
+ };
48
+ }
49
+ //# sourceMappingURL=handlePaste.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlePaste.js","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handlePaste.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB,EAAE,UAAkB;IAC/D,sDAAsD;IACtD,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3E,IAAI,WAAW,EAAE,CAAC;QAChB,oCAAoC;QACpC,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,EAAE,EAAE,wCAAwC;YACnD,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,UAAU;YACzB,YAAY,EAAE,CAAC,CAAC,EAAE,2BAA2B;SAC9C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,gDAAgD;QAChD,MAAM,QAAQ,GACZ,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1F,OAAO;YACL,GAAG,KAAK;YACR,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM;YAC9C,aAAa,EAAE,IAAI,EAAE,iCAAiC;YACtD,YAAY,EAAE,CAAC,CAAC,EAAE,2BAA2B;SAC9C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,aAAa,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { InputState } from '../types.js';
2
+ /**
3
+ * Handles submission (Enter key) and state reset
4
+ * Returns pasted content if present, otherwise regular input
5
+ */
6
+ /**
7
+ * Handle submit (Enter key)
8
+ * Returns the submitted text and the reset state
9
+ */
10
+ export declare function handleSubmit(state: InputState): {
11
+ text: string;
12
+ newState: InputState;
13
+ };
14
+ /**
15
+ * Check if the current input is empty
16
+ */
17
+ export declare function isInputEmpty(state: InputState): boolean;
18
+ //# sourceMappingURL=handleSubmit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleSubmit.d.ts","sourceRoot":"","sources":["../../../../src/ui/input/handlers/handleSubmit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;CACtB,CAuBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAGvD"}