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.
- package/LICENSE +30 -21
- package/README.md +6 -1
- package/bin/codevf-mcp.js +11 -0
- package/dist/commands/fix.d.ts +5 -1
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +170 -13
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +72 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-tools.d.ts +17 -0
- package/dist/commands/mcp-tools.d.ts.map +1 -0
- package/dist/commands/mcp-tools.js +237 -0
- package/dist/commands/mcp-tools.js.map +1 -0
- package/dist/commands/setup.d.ts +8 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +250 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/welcome.d.ts +9 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +175 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/index.js +194 -149
- package/dist/index.js.map +1 -1
- package/dist/lib/api/client.d.ts +28 -0
- package/dist/lib/api/client.d.ts.map +1 -0
- package/dist/lib/api/client.js +66 -0
- package/dist/lib/api/client.js.map +1 -0
- package/dist/lib/api/tasks.d.ts +36 -0
- package/dist/lib/api/tasks.d.ts.map +1 -0
- package/dist/lib/api/tasks.js +62 -0
- package/dist/lib/api/tasks.js.map +1 -0
- package/dist/lib/api/websocket.d.ts +50 -0
- package/dist/lib/api/websocket.d.ts.map +1 -0
- package/dist/lib/api/websocket.js +153 -0
- package/dist/lib/api/websocket.js.map +1 -0
- package/dist/lib/auth/oauth-flow.d.ts +37 -0
- package/dist/lib/auth/oauth-flow.d.ts.map +1 -0
- package/dist/lib/auth/oauth-flow.js +119 -0
- package/dist/lib/auth/oauth-flow.js.map +1 -0
- package/dist/lib/auth/token-manager.d.ts +26 -0
- package/dist/lib/auth/token-manager.d.ts.map +1 -0
- package/dist/lib/auth/token-manager.js +87 -0
- package/dist/lib/auth/token-manager.js.map +1 -0
- package/dist/lib/config/manager.d.ts +50 -0
- package/dist/lib/config/manager.d.ts.map +1 -0
- package/dist/lib/config/manager.js +84 -0
- package/dist/lib/config/manager.js.map +1 -0
- package/dist/lib/utils/errors.d.ts +28 -0
- package/dist/lib/utils/errors.d.ts.map +1 -0
- package/dist/lib/utils/errors.js +44 -0
- package/dist/lib/utils/errors.js.map +1 -0
- package/dist/lib/utils/logger.d.ts +20 -0
- package/dist/lib/utils/logger.d.ts.map +1 -0
- package/dist/lib/utils/logger.js +40 -0
- package/dist/lib/utils/logger.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +158 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools/chat.d.ts +30 -0
- package/dist/mcp/tools/chat.d.ts.map +1 -0
- package/dist/mcp/tools/chat.js +82 -0
- package/dist/mcp/tools/chat.js.map +1 -0
- package/dist/mcp/tools/instant.d.ts +36 -0
- package/dist/mcp/tools/instant.d.ts.map +1 -0
- package/dist/mcp/tools/instant.js +100 -0
- package/dist/mcp/tools/instant.js.map +1 -0
- package/dist/modules/aiAgent.d.ts +75 -0
- package/dist/modules/aiAgent.d.ts.map +1 -0
- package/dist/modules/aiAgent.js +707 -0
- package/dist/modules/aiAgent.js.map +1 -0
- package/dist/modules/api.d.ts +7 -0
- package/dist/modules/api.d.ts.map +1 -1
- package/dist/modules/api.js +13 -4
- package/dist/modules/api.js.map +1 -1
- package/dist/modules/commandHandler.d.ts +40 -0
- package/dist/modules/commandHandler.d.ts.map +1 -0
- package/dist/modules/commandHandler.js +345 -0
- package/dist/modules/commandHandler.js.map +1 -0
- package/dist/modules/config.d.ts +2 -0
- package/dist/modules/config.d.ts.map +1 -1
- package/dist/modules/config.js +9 -0
- package/dist/modules/config.js.map +1 -1
- package/dist/modules/constants.d.ts +83 -0
- package/dist/modules/constants.d.ts.map +1 -0
- package/dist/modules/constants.js +75 -0
- package/dist/modules/constants.js.map +1 -0
- package/dist/modules/permissions.d.ts +14 -0
- package/dist/modules/permissions.d.ts.map +1 -1
- package/dist/modules/permissions.js +94 -0
- package/dist/modules/permissions.js.map +1 -1
- package/dist/modules/toolRegistry.d.ts +50 -0
- package/dist/modules/toolRegistry.d.ts.map +1 -0
- package/dist/modules/toolRegistry.js +114 -0
- package/dist/modules/toolRegistry.js.map +1 -0
- package/dist/modules/tunnel.d.ts +33 -0
- package/dist/modules/tunnel.d.ts.map +1 -0
- package/dist/modules/tunnel.js +79 -0
- package/dist/modules/tunnel.js.map +1 -0
- package/dist/modules/vibeHelper.d.ts +16 -0
- package/dist/modules/vibeHelper.d.ts.map +1 -0
- package/dist/modules/vibeHelper.js +38 -0
- package/dist/modules/vibeHelper.js.map +1 -0
- package/dist/modules/websocket.d.ts +9 -0
- package/dist/modules/websocket.d.ts.map +1 -1
- package/dist/modules/websocket.js +70 -0
- package/dist/modules/websocket.js.map +1 -1
- package/dist/tools/consultEngineer.d.ts +13 -0
- package/dist/tools/consultEngineer.d.ts.map +1 -0
- package/dist/tools/consultEngineer.js +161 -0
- package/dist/tools/consultEngineer.js.map +1 -0
- package/dist/tools/realtimeChat.d.ts +9 -0
- package/dist/tools/realtimeChat.d.ts.map +1 -0
- package/dist/tools/realtimeChat.js +101 -0
- package/dist/tools/realtimeChat.js.map +1 -0
- package/dist/types/index.d.ts +183 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/InteractiveApp.d.ts +13 -0
- package/dist/ui/InteractiveApp.d.ts.map +1 -0
- package/dist/ui/InteractiveApp.js +84 -0
- package/dist/ui/InteractiveApp.js.map +1 -0
- package/dist/ui/InteractivePrompt.d.ts +53 -0
- package/dist/ui/InteractivePrompt.d.ts.map +1 -0
- package/dist/ui/InteractivePrompt.js +422 -0
- package/dist/ui/InteractivePrompt.js.map +1 -0
- package/dist/ui/LiveSession.d.ts +2 -0
- package/dist/ui/LiveSession.d.ts.map +1 -1
- package/dist/ui/LiveSession.js +461 -180
- package/dist/ui/LiveSession.js.map +1 -1
- package/dist/ui/PromptInput.d.ts +14 -0
- package/dist/ui/PromptInput.d.ts.map +1 -0
- package/dist/ui/PromptInput.js +206 -0
- package/dist/ui/PromptInput.js.map +1 -0
- package/dist/ui/SessionUI.d.ts +40 -0
- package/dist/ui/SessionUI.d.ts.map +1 -0
- package/dist/ui/SessionUI.js +227 -0
- package/dist/ui/SessionUI.js.map +1 -0
- package/dist/ui/input/Command.d.ts +22 -0
- package/dist/ui/input/Command.d.ts.map +1 -0
- package/dist/ui/input/Command.js +30 -0
- package/dist/ui/input/Command.js.map +1 -0
- package/dist/ui/input/CustomInput.d.ts +15 -0
- package/dist/ui/input/CustomInput.d.ts.map +1 -0
- package/dist/ui/input/CustomInput.js +182 -0
- package/dist/ui/input/CustomInput.js.map +1 -0
- package/dist/ui/input/handlers/handleCursor.d.ts +22 -0
- package/dist/ui/input/handlers/handleCursor.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleCursor.js +53 -0
- package/dist/ui/input/handlers/handleCursor.js.map +1 -0
- package/dist/ui/input/handlers/handleEdit.d.ts +18 -0
- package/dist/ui/input/handlers/handleEdit.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleEdit.js +55 -0
- package/dist/ui/input/handlers/handleEdit.js.map +1 -0
- package/dist/ui/input/handlers/handleHistory.d.ts +18 -0
- package/dist/ui/input/handlers/handleHistory.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleHistory.js +85 -0
- package/dist/ui/input/handlers/handleHistory.js.map +1 -0
- package/dist/ui/input/handlers/handlePaste.d.ts +19 -0
- package/dist/ui/input/handlers/handlePaste.d.ts.map +1 -0
- package/dist/ui/input/handlers/handlePaste.js +49 -0
- package/dist/ui/input/handlers/handlePaste.js.map +1 -0
- package/dist/ui/input/handlers/handleSubmit.d.ts +18 -0
- package/dist/ui/input/handlers/handleSubmit.d.ts.map +1 -0
- package/dist/ui/input/handlers/handleSubmit.js +39 -0
- package/dist/ui/input/handlers/handleSubmit.js.map +1 -0
- package/dist/ui/input/helpers.d.ts +4 -0
- package/dist/ui/input/helpers.d.ts.map +1 -0
- package/dist/ui/input/helpers.js +13 -0
- package/dist/ui/input/helpers.js.map +1 -0
- package/dist/ui/input/keyMatchers.d.ts +14 -0
- package/dist/ui/input/keyMatchers.d.ts.map +1 -0
- package/dist/ui/input/keyMatchers.js +49 -0
- package/dist/ui/input/keyMatchers.js.map +1 -0
- package/dist/ui/input/types.d.ts +33 -0
- package/dist/ui/input/types.d.ts.map +1 -0
- package/dist/ui/input/types.js +2 -0
- package/dist/ui/input/types.js.map +1 -0
- package/dist/ui/promptWithModes.d.ts +12 -0
- package/dist/ui/promptWithModes.d.ts.map +1 -0
- package/dist/ui/promptWithModes.js +24 -0
- package/dist/ui/promptWithModes.js.map +1 -0
- package/dist/ui/renderPrompt.d.ts +12 -0
- package/dist/ui/renderPrompt.d.ts.map +1 -0
- package/dist/ui/renderPrompt.js +14 -0
- package/dist/ui/renderPrompt.js.map +1 -0
- package/dist/ui/simplePrompt.d.ts +7 -0
- package/dist/ui/simplePrompt.d.ts.map +1 -0
- package/dist/ui/simplePrompt.js +38 -0
- package/dist/ui/simplePrompt.js.map +1 -0
- package/dist/ui/spinner.d.ts +7 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +13 -0
- package/dist/ui/spinner.js.map +1 -0
- package/package.json +36 -25
- package/ARCHITECTURE.md +0 -285
- package/BUILD_SUMMARY.md +0 -340
- 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"}
|