wave-code 0.0.3 → 0.0.5
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/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +69 -95
- package/dist/components/MemoryDisplay.js +1 -1
- package/dist/components/MemoryTypeSelector.js +1 -1
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +2 -1
- package/dist/components/SubagentBlock.d.ts +1 -1
- package/dist/components/SubagentBlock.d.ts.map +1 -1
- package/dist/components/SubagentBlock.js +12 -2
- package/dist/components/ToolResultDisplay.js +1 -1
- package/dist/contexts/useChat.d.ts +2 -1
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +18 -0
- package/dist/hooks/useInputManager.d.ts +91 -0
- package/dist/hooks/useInputManager.d.ts.map +1 -0
- package/dist/hooks/useInputManager.js +319 -0
- package/dist/index.js +9 -9
- package/dist/managers/InputManager.d.ts +169 -0
- package/dist/managers/InputManager.d.ts.map +1 -0
- package/dist/managers/InputManager.js +806 -0
- package/dist/print-cli.d.ts +7 -0
- package/dist/print-cli.d.ts.map +1 -0
- package/dist/{plain-cli.js → print-cli.js} +21 -2
- package/dist/utils/constants.d.ts +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/fileSearch.d.ts +20 -0
- package/dist/utils/fileSearch.d.ts.map +1 -0
- package/dist/utils/fileSearch.js +102 -0
- package/dist/utils/logger.js +3 -3
- package/dist/utils/usageSummary.d.ts +27 -0
- package/dist/utils/usageSummary.d.ts.map +1 -0
- package/dist/utils/usageSummary.js +82 -0
- package/package.json +2 -2
- package/src/components/InputBox.tsx +114 -153
- package/src/components/MemoryDisplay.tsx +1 -1
- package/src/components/MemoryTypeSelector.tsx +1 -1
- package/src/components/MessageList.tsx +14 -10
- package/src/components/SubagentBlock.tsx +14 -3
- package/src/components/ToolResultDisplay.tsx +1 -1
- package/src/contexts/useChat.tsx +23 -0
- package/src/hooks/useInputManager.ts +443 -0
- package/src/index.ts +9 -9
- package/src/managers/InputManager.ts +1102 -0
- package/src/{plain-cli.ts → print-cli.ts} +21 -3
- package/src/utils/constants.ts +1 -1
- package/src/utils/fileSearch.ts +133 -0
- package/src/utils/logger.ts +3 -3
- package/src/utils/usageSummary.ts +125 -0
- package/dist/hooks/useBashHistorySelector.d.ts +0 -15
- package/dist/hooks/useBashHistorySelector.d.ts.map +0 -1
- package/dist/hooks/useBashHistorySelector.js +0 -61
- package/dist/hooks/useCommandSelector.d.ts +0 -24
- package/dist/hooks/useCommandSelector.d.ts.map +0 -1
- package/dist/hooks/useCommandSelector.js +0 -98
- package/dist/hooks/useFileSelector.d.ts +0 -16
- package/dist/hooks/useFileSelector.d.ts.map +0 -1
- package/dist/hooks/useFileSelector.js +0 -174
- package/dist/hooks/useImageManager.d.ts +0 -13
- package/dist/hooks/useImageManager.d.ts.map +0 -1
- package/dist/hooks/useImageManager.js +0 -46
- package/dist/hooks/useInputHistory.d.ts +0 -11
- package/dist/hooks/useInputHistory.d.ts.map +0 -1
- package/dist/hooks/useInputHistory.js +0 -64
- package/dist/hooks/useInputKeyboardHandler.d.ts +0 -83
- package/dist/hooks/useInputKeyboardHandler.d.ts.map +0 -1
- package/dist/hooks/useInputKeyboardHandler.js +0 -507
- package/dist/hooks/useInputState.d.ts +0 -14
- package/dist/hooks/useInputState.d.ts.map +0 -1
- package/dist/hooks/useInputState.js +0 -57
- package/dist/hooks/useMemoryTypeSelector.d.ts +0 -9
- package/dist/hooks/useMemoryTypeSelector.d.ts.map +0 -1
- package/dist/hooks/useMemoryTypeSelector.js +0 -27
- package/dist/plain-cli.d.ts +0 -7
- package/dist/plain-cli.d.ts.map +0 -1
- package/src/hooks/useBashHistorySelector.ts +0 -77
- package/src/hooks/useCommandSelector.ts +0 -131
- package/src/hooks/useFileSelector.ts +0 -227
- package/src/hooks/useImageManager.ts +0 -64
- package/src/hooks/useInputHistory.ts +0 -74
- package/src/hooks/useInputKeyboardHandler.ts +0 -778
- package/src/hooks/useInputState.ts +0 -66
- package/src/hooks/useMemoryTypeSelector.ts +0 -40
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../src/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../src/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAWtD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEpE,eAAO,MAAM,sBAAsB,yGACqE,CAAC;AAEzG,eAAO,MAAM,6BAA6B,QAGzC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,IAAI,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAClD;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAqO5C,CAAC"}
|
|
@@ -1,118 +1,92 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useCallback, useEffect } from "react";
|
|
3
3
|
import { Box, Text } from "ink";
|
|
4
|
+
import { useInput } from "ink";
|
|
4
5
|
import { FileSelector } from "./FileSelector.js";
|
|
5
6
|
import { CommandSelector } from "./CommandSelector.js";
|
|
6
7
|
import { BashHistorySelector } from "./BashHistorySelector.js";
|
|
7
8
|
import { MemoryTypeSelector } from "./MemoryTypeSelector.js";
|
|
8
9
|
import { BashShellManager } from "./BashShellManager.js";
|
|
9
10
|
import { McpManager } from "./McpManager.js";
|
|
10
|
-
import {
|
|
11
|
-
import { useFileSelector } from "../hooks/useFileSelector.js";
|
|
12
|
-
import { useCommandSelector } from "../hooks/useCommandSelector.js";
|
|
13
|
-
import { useBashHistorySelector } from "../hooks/useBashHistorySelector.js";
|
|
14
|
-
import { useMemoryTypeSelector } from "../hooks/useMemoryTypeSelector.js";
|
|
15
|
-
import { useInputHistory } from "../hooks/useInputHistory.js";
|
|
16
|
-
import { useInputKeyboardHandler } from "../hooks/useInputKeyboardHandler.js";
|
|
17
|
-
import { useImageManager } from "../hooks/useImageManager.js";
|
|
11
|
+
import { useInputManager } from "../hooks/useInputManager.js";
|
|
18
12
|
export const INPUT_PLACEHOLDER_TEXT = "Type your message (use @ to reference files, / for commands, ! for bash history, # to add memory)...";
|
|
19
13
|
export const INPUT_PLACEHOLDER_TEXT_PREFIX = INPUT_PLACEHOLDER_TEXT.substring(0, 10);
|
|
20
14
|
export const InputBox = ({ isLoading = false, isCommandRunning = false, workdir, userInputHistory = [], sendMessage = () => { }, abortMessage = () => { }, saveMemory = async () => { }, mcpServers = [], connectMcpServer = async () => false, disconnectMcpServer = async () => false, slashCommands = [], hasSlashCommand = () => false, }) => {
|
|
21
15
|
// Get current working directory
|
|
22
16
|
const currentWorkdir = workdir || process.cwd();
|
|
23
|
-
//
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
const { inputText,
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
|
|
17
|
+
// Simple history navigation reset function
|
|
18
|
+
const resetHistoryNavigation = useCallback(() => {
|
|
19
|
+
// This will be handled by InputManager through callbacks
|
|
20
|
+
}, []);
|
|
21
|
+
// Input manager with all input state and functionality (including images)
|
|
22
|
+
const { inputText, cursorPosition, clearInput,
|
|
23
|
+
// Image management
|
|
24
|
+
attachedImages, clearImages,
|
|
25
|
+
// File selector
|
|
26
|
+
showFileSelector, filteredFiles, fileSearchQuery: searchQuery, handleFileSelect: handleFileSelectorSelect, handleCancelFileSelect,
|
|
27
|
+
// Command selector
|
|
28
|
+
showCommandSelector, commandSearchQuery, handleCommandSelect: handleCommandSelectorSelect, handleCommandInsert: handleCommandSelectorInsert, handleCancelCommandSelect,
|
|
29
|
+
// Bash history selector
|
|
30
|
+
showBashHistorySelector, bashHistorySearchQuery, handleBashHistorySelect: handleBashHistorySelectorSelect, handleBashHistoryExecute, handleCancelBashHistorySelect,
|
|
31
|
+
// Memory type selector
|
|
32
|
+
showMemoryTypeSelector, memoryMessage, handleMemoryTypeSelect: handleMemoryTypeSelectorSelect, handleCancelMemoryTypeSelect,
|
|
33
|
+
// Bash/MCP Manager
|
|
34
|
+
showBashManager, showMcpManager, setShowBashManager, setShowMcpManager,
|
|
35
|
+
// Input history
|
|
36
|
+
setUserInputHistory,
|
|
37
|
+
// Main handler
|
|
38
|
+
handleInput, } = useInputManager({
|
|
33
39
|
onShowBashManager: () => setShowBashManager(true),
|
|
34
40
|
onShowMcpManager: () => setShowMcpManager(true),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
onSendMessage: sendMessage,
|
|
42
|
+
onHasSlashCommand: hasSlashCommand,
|
|
43
|
+
onSaveMemory: saveMemory,
|
|
44
|
+
onAbortMessage: abortMessage,
|
|
45
|
+
onResetHistoryNavigation: resetHistoryNavigation,
|
|
39
46
|
});
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
});
|
|
48
|
-
// Image management functionality (includes clipboard paste)
|
|
49
|
-
const { attachedImages, clearImages, handlePasteImage } = useImageManager(insertTextAtCursor);
|
|
50
|
-
// Keyboard handling
|
|
51
|
-
const { handleFileSelect, handleCommandSelect, handleBashHistorySelect, handleBashHistoryExecute: keyboardHandleBashHistoryExecute, handleMemoryTypeSelect, } = useInputKeyboardHandler({
|
|
52
|
-
inputText,
|
|
53
|
-
setInputText,
|
|
54
|
-
cursorPosition,
|
|
55
|
-
setCursorPosition,
|
|
56
|
-
moveCursorLeft,
|
|
57
|
-
moveCursorRight,
|
|
58
|
-
moveCursorToStart,
|
|
59
|
-
moveCursorToEnd,
|
|
60
|
-
deleteCharAtCursor,
|
|
61
|
-
insertTextAtCursor,
|
|
62
|
-
clearInput,
|
|
63
|
-
resetHistoryNavigation,
|
|
64
|
-
navigateHistory,
|
|
65
|
-
handlePasteImage,
|
|
66
|
-
attachedImages,
|
|
67
|
-
clearImages,
|
|
68
|
-
showFileSelector,
|
|
69
|
-
activateFileSelector,
|
|
70
|
-
handleFileSelect: handleFileSelectorSelect,
|
|
71
|
-
handleCancelFileSelect,
|
|
72
|
-
updateSearchQuery,
|
|
73
|
-
checkForAtDeletion,
|
|
74
|
-
atPosition,
|
|
75
|
-
showCommandSelector,
|
|
76
|
-
activateCommandSelector,
|
|
77
|
-
handleCommandSelect: handleCommandSelectorSelect,
|
|
78
|
-
handleCommandInsert: handleCommandSelectorInsert,
|
|
79
|
-
handleCancelCommandSelect,
|
|
80
|
-
updateCommandSearchQuery,
|
|
81
|
-
checkForSlashDeletion,
|
|
82
|
-
slashPosition,
|
|
83
|
-
showBashHistorySelector,
|
|
84
|
-
activateBashHistorySelector,
|
|
85
|
-
handleBashHistorySelect: handleBashHistorySelectorSelect,
|
|
86
|
-
handleBashHistoryExecute,
|
|
87
|
-
handleCancelBashHistorySelect,
|
|
88
|
-
updateBashHistorySearchQuery,
|
|
89
|
-
checkForExclamationDeletion,
|
|
90
|
-
exclamationPosition,
|
|
91
|
-
showMemoryTypeSelector,
|
|
92
|
-
activateMemoryTypeSelector,
|
|
93
|
-
handleMemoryTypeSelect: handleMemoryTypeSelectorSelect,
|
|
94
|
-
showBashManager,
|
|
95
|
-
showMcpManager,
|
|
96
|
-
isCommandRunning,
|
|
97
|
-
isLoading,
|
|
98
|
-
sendMessage,
|
|
99
|
-
abortMessage,
|
|
100
|
-
saveMemory,
|
|
47
|
+
// Set user input history when it changes
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
setUserInputHistory(userInputHistory);
|
|
50
|
+
}, [userInputHistory, setUserInputHistory]);
|
|
51
|
+
// Use the InputManager's unified input handler
|
|
52
|
+
useInput(async (input, key) => {
|
|
53
|
+
await handleInput(input, key, attachedImages, isLoading, isCommandRunning, clearImages);
|
|
101
54
|
});
|
|
55
|
+
// Handler functions for keyboard events
|
|
56
|
+
const handleFileSelect = useCallback((filePath) => {
|
|
57
|
+
handleFileSelectorSelect(filePath);
|
|
58
|
+
}, [handleFileSelectorSelect]);
|
|
59
|
+
const handleCommandSelect = useCallback((command) => {
|
|
60
|
+
handleCommandSelectorSelect(command);
|
|
61
|
+
}, [handleCommandSelectorSelect]);
|
|
62
|
+
const handleBashHistorySelect = useCallback((command) => {
|
|
63
|
+
handleBashHistorySelectorSelect(command);
|
|
64
|
+
}, [handleBashHistorySelectorSelect]);
|
|
65
|
+
const keyboardHandleBashHistoryExecute = useCallback((command) => {
|
|
66
|
+
const commandToExecute = handleBashHistoryExecute(command);
|
|
67
|
+
// Clear input box and execute command, ensure command starts with !
|
|
68
|
+
const bashCommand = commandToExecute.startsWith("!")
|
|
69
|
+
? commandToExecute
|
|
70
|
+
: `!${commandToExecute}`;
|
|
71
|
+
clearInput();
|
|
72
|
+
sendMessage(bashCommand);
|
|
73
|
+
}, [handleBashHistoryExecute, clearInput, sendMessage]);
|
|
74
|
+
const handleMemoryTypeSelect = useCallback(async (type) => {
|
|
75
|
+
const currentMessage = inputText.trim();
|
|
76
|
+
if (currentMessage.startsWith("#")) {
|
|
77
|
+
await saveMemory(currentMessage, type);
|
|
78
|
+
}
|
|
79
|
+
// Call the handler function to close the selector
|
|
80
|
+
handleMemoryTypeSelectorSelect(type);
|
|
81
|
+
// Clear input box
|
|
82
|
+
clearInput();
|
|
83
|
+
}, [inputText, saveMemory, handleMemoryTypeSelectorSelect, clearInput]);
|
|
102
84
|
const isPlaceholder = !inputText;
|
|
103
85
|
const placeholderText = INPUT_PLACEHOLDER_TEXT;
|
|
104
86
|
// Create adapter function for CommandSelector
|
|
105
87
|
const handleCommandInsert = useCallback((command) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
setCursorPosition(result.newCursorPosition);
|
|
109
|
-
}, [
|
|
110
|
-
handleCommandSelectorInsert,
|
|
111
|
-
inputText,
|
|
112
|
-
cursorPosition,
|
|
113
|
-
setInputText,
|
|
114
|
-
setCursorPosition,
|
|
115
|
-
]);
|
|
88
|
+
handleCommandSelectorInsert(command);
|
|
89
|
+
}, [handleCommandSelectorInsert]);
|
|
116
90
|
// Split text into three parts: before cursor, cursor position, after cursor
|
|
117
91
|
const displayText = isPlaceholder ? placeholderText : inputText;
|
|
118
92
|
const beforeCursor = displayText.substring(0, cursorPosition);
|
|
@@ -120,5 +94,5 @@ export const InputBox = ({ isLoading = false, isCommandRunning = false, workdir,
|
|
|
120
94
|
const afterCursor = displayText.substring(cursorPosition + 1);
|
|
121
95
|
// Always show cursor, allow user to continue input during loading
|
|
122
96
|
const shouldShowCursor = true;
|
|
123
|
-
return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [showFileSelector && (_jsx(FileSelector, { files: filteredFiles, searchQuery: searchQuery, onSelect: handleFileSelect, onCancel: handleCancelFileSelect })), showCommandSelector && (_jsx(CommandSelector, { searchQuery: commandSearchQuery, onSelect: handleCommandSelect, onInsert: handleCommandInsert, onCancel: handleCancelCommandSelect, commands: slashCommands })), showBashHistorySelector && (_jsx(BashHistorySelector, { searchQuery: bashHistorySearchQuery, workdir: currentWorkdir, onSelect: handleBashHistorySelect, onExecute: keyboardHandleBashHistoryExecute, onCancel: handleCancelBashHistorySelect })), showMemoryTypeSelector && (_jsx(MemoryTypeSelector, { message: memoryMessage, onSelect: handleMemoryTypeSelect, onCancel: handleCancelMemoryTypeSelect })), showBashManager && (_jsx(BashShellManager, { onCancel: () => setShowBashManager(false) })), showMcpManager && (_jsx(McpManager, { onCancel: () => setShowMcpManager(false), servers: mcpServers, onConnectServer: connectMcpServer, onDisconnectServer: disconnectMcpServer })), showBashManager || showMcpManager || (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, children: _jsx(
|
|
97
|
+
return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [showFileSelector && (_jsx(FileSelector, { files: filteredFiles, searchQuery: searchQuery, onSelect: handleFileSelect, onCancel: handleCancelFileSelect })), showCommandSelector && (_jsx(CommandSelector, { searchQuery: commandSearchQuery, onSelect: handleCommandSelect, onInsert: handleCommandInsert, onCancel: handleCancelCommandSelect, commands: slashCommands })), showBashHistorySelector && (_jsx(BashHistorySelector, { searchQuery: bashHistorySearchQuery, workdir: currentWorkdir, onSelect: handleBashHistorySelect, onExecute: keyboardHandleBashHistoryExecute, onCancel: handleCancelBashHistorySelect })), showMemoryTypeSelector && (_jsx(MemoryTypeSelector, { message: memoryMessage, onSelect: handleMemoryTypeSelect, onCancel: handleCancelMemoryTypeSelect })), showBashManager && (_jsx(BashShellManager, { onCancel: () => setShowBashManager(false) })), showMcpManager && (_jsx(McpManager, { onCancel: () => setShowMcpManager(false), servers: mcpServers, onConnectServer: connectMcpServer, onDisconnectServer: disconnectMcpServer })), showBashManager || showMcpManager || (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, children: _jsx(Text, { color: isPlaceholder ? "gray" : "white", children: shouldShowCursor ? (_jsxs(_Fragment, { children: [beforeCursor, _jsx(Text, { backgroundColor: "white", color: "black", children: atCursor }), afterCursor] })) : (displayText) }) }))] }));
|
|
124
98
|
};
|
|
@@ -18,7 +18,7 @@ export const MemoryDisplay = ({ block }) => {
|
|
|
18
18
|
return `Memory saved to ${storagePath || "user-memory.md"}`;
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
21
|
-
return `Memory saved to ${storagePath || "
|
|
21
|
+
return `Memory saved to ${storagePath || "AGENTS.md"}`;
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: getStatusColor(), children: [getStatusIcon(), " "] }), _jsx(Text, { color: getStatusColor(), children: getStatusText() })] }), content && (_jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Box, { borderLeft: true, borderColor: isSuccess ? "green" : "red", paddingLeft: 1, children: _jsx(Text, { color: "gray", children: content }) }) })), isSuccess && (_jsx(Box, { paddingLeft: 2, marginTop: 1, children: _jsx(Text, { color: "yellow", dimColor: true, children: getStorageText() }) }))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA2G9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAyGlD,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
import { Box, Text } from "ink";
|
|
4
|
+
import { MessageSource } from "wave-agent-sdk";
|
|
4
5
|
import { DiffViewer } from "./DiffViewer.js";
|
|
5
6
|
import { CommandOutputDisplay } from "./CommandOutputDisplay.js";
|
|
6
7
|
import { ToolResultDisplay } from "./ToolResultDisplay.js";
|
|
@@ -11,7 +12,7 @@ import { usePagination } from "../hooks/usePagination.js";
|
|
|
11
12
|
// Function to render a single message
|
|
12
13
|
const renderMessageItem = (message, originalIndex, isExpanded, previousMessage) => {
|
|
13
14
|
const shouldShowHeader = previousMessage?.role !== message.role;
|
|
14
|
-
return (_jsxs(Box, { flexDirection: "column", children: [shouldShowHeader && (_jsx(Box, { children: _jsxs(Text, { color: message.role === "user" ? "cyan" : "green", bold: true, children: [message.role === "user" ? "👤 You" : "🤖 Assistant", _jsxs(Text, { color: "gray", dimColor: true, children: [" ", "#", originalIndex + 1] })] }) })), _jsx(Box, { marginLeft: 2, flexDirection: "column", gap: 1, marginTop: shouldShowHeader ? 1 : 0, children: message.blocks.map((block, blockIndex) => (_jsxs(Box, { children: [block.type === "text" && block.content.trim() && (_jsx(Box, { children:
|
|
15
|
+
return (_jsxs(Box, { flexDirection: "column", children: [shouldShowHeader && (_jsx(Box, { children: _jsxs(Text, { color: message.role === "user" ? "cyan" : "green", bold: true, children: [message.role === "user" ? "👤 You" : "🤖 Assistant", _jsxs(Text, { color: "gray", dimColor: true, children: [" ", "#", originalIndex + 1] })] }) })), _jsx(Box, { marginLeft: 2, flexDirection: "column", gap: 1, marginTop: shouldShowHeader ? 1 : 0, children: message.blocks.map((block, blockIndex) => (_jsxs(Box, { children: [block.type === "text" && block.content.trim() && (_jsx(Box, { children: _jsxs(Text, { children: [block.customCommandContent && (_jsxs(Text, { color: "cyan", bold: true, children: ["\u26A1", " "] })), block.source === MessageSource.HOOK && (_jsxs(Text, { color: "magenta", bold: true, children: ["\uD83D\uDD17", " "] })), block.content] }) })), block.type === "error" && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["\u274C Error: ", block.content] }) })), block.type === "diff" && (_jsx(DiffViewer, { block: block, isExpanded: isExpanded })), block.type === "command_output" && (_jsx(CommandOutputDisplay, { block: block, isExpanded: isExpanded })), block.type === "tool" && (_jsx(ToolResultDisplay, { block: block, isExpanded: isExpanded })), block.type === "image" && (_jsxs(Box, { children: [_jsx(Text, { color: "magenta", bold: true, children: "\uD83D\uDCF7 Image" }), block.imageUrls && block.imageUrls.length > 0 && (_jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(", block.imageUrls.length, ")"] }))] })), block.type === "memory" && _jsx(MemoryDisplay, { block: block }), block.type === "compress" && (_jsx(CompressDisplay, { block: block, isExpanded: isExpanded })), block.type === "subagent" && (_jsx(SubagentBlock, { block: block, isExpanded: isExpanded }))] }, blockIndex))) })] }, `message-${originalIndex}`));
|
|
15
16
|
};
|
|
16
17
|
export const MessageList = ({ messages, isLoading = false, isCommandRunning = false, isCompressing = false, latestTotalTokens = 0, isExpanded = false, }) => {
|
|
17
18
|
// Use original messages for pagination calculation
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { SubagentBlock as SubagentBlockType } from "wave-agent-sdk
|
|
2
|
+
import type { SubagentBlock as SubagentBlockType } from "wave-agent-sdk";
|
|
3
3
|
interface SubagentBlockProps {
|
|
4
4
|
block: SubagentBlockType;
|
|
5
5
|
isExpanded?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubagentBlock.d.ts","sourceRoot":"","sources":["../../src/components/SubagentBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EACV,aAAa,IAAI,iBAAiB,EAGnC,MAAM,
|
|
1
|
+
{"version":3,"file":"SubagentBlock.d.ts","sourceRoot":"","sources":["../../src/components/SubagentBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EACV,aAAa,IAAI,iBAAiB,EAGnC,MAAM,gBAAgB,CAAC;AAuCxB,UAAU,kBAAkB;IAC1B,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAuFtD,CAAC"}
|
|
@@ -2,9 +2,19 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
import { ToolResultDisplay } from "./ToolResultDisplay.js";
|
|
4
4
|
const MessageBlockRenderer = ({ block, isExpanded, }) => {
|
|
5
|
+
const truncateText = (text, maxLines) => {
|
|
6
|
+
const lines = text.split("\n");
|
|
7
|
+
if (lines.length <= maxLines) {
|
|
8
|
+
return text;
|
|
9
|
+
}
|
|
10
|
+
return lines.slice(0, maxLines).join("\n") + "\n...";
|
|
11
|
+
};
|
|
5
12
|
switch (block.type) {
|
|
6
|
-
case "text":
|
|
7
|
-
|
|
13
|
+
case "text": {
|
|
14
|
+
const maxLines = isExpanded ? 50 : 10;
|
|
15
|
+
const truncatedContent = truncateText(block.content, maxLines);
|
|
16
|
+
return _jsx(Text, { children: truncatedContent });
|
|
17
|
+
}
|
|
8
18
|
case "error":
|
|
9
19
|
return _jsxs(Text, { color: "red", children: ["\u274C Error: ", block.content] });
|
|
10
20
|
case "tool":
|
|
@@ -48,5 +48,5 @@ export const ToolResultDisplay = ({ block, isExpanded = false, }) => {
|
|
|
48
48
|
return null;
|
|
49
49
|
};
|
|
50
50
|
const shortResult = getShortResult();
|
|
51
|
-
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "magenta", children: "\uD83D\uDD27 " }), _jsx(Text, { color: "white", children: toolName }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" (", compactParams, ")"] })), _jsxs(Text, { color: getStatusColor(), children: [" ", getStatusText()] }), hasImages() && _jsxs(Text, { color: "blue", children: [" ", getImageIndicator()] })] }), !isExpanded && shortResult && (_jsx(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: shortResult.split("\n").map((line, index) => (_jsx(Text, { color: "white", children: line }, index))) })), isExpanded && parameters && (_jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Parameters:" }), _jsx(Text, { color: "gray", children: parameters })] })), isExpanded && result && (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "green", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Result:" }), _jsx(Text, { color: "white", children: result })] }) })), error && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", typeof error === "string" ? error : String(error)] }) }))] }));
|
|
51
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "magenta", children: "\uD83D\uDD27 " }), _jsx(Text, { color: "white", children: toolName }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" (", compactParams, ")"] })), _jsxs(Text, { color: getStatusColor(), children: [" ", getStatusText()] }), hasImages() && _jsxs(Text, { color: "blue", children: [" ", getImageIndicator()] })] }), !isExpanded && shortResult && !error && (_jsx(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: shortResult.split("\n").map((line, index) => (_jsx(Text, { color: "white", children: line }, index))) })), isExpanded && parameters && (_jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Parameters:" }), _jsx(Text, { color: "gray", children: parameters })] })), isExpanded && result && (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "green", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Result:" }), _jsx(Text, { color: "white", children: result })] }) })), error && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", typeof error === "string" ? error : String(error)] }) }))] }));
|
|
52
52
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { Message, McpServerStatus, BackgroundShell, SlashCommand } from "wave-agent-sdk";
|
|
2
|
+
import type { Message, McpServerStatus, BackgroundShell, SlashCommand, Usage } from "wave-agent-sdk";
|
|
3
3
|
export interface ChatContextType {
|
|
4
4
|
messages: Message[];
|
|
5
5
|
isLoading: boolean;
|
|
@@ -27,6 +27,7 @@ export interface ChatContextType {
|
|
|
27
27
|
killBackgroundShell: (shellId: string) => boolean;
|
|
28
28
|
slashCommands: SlashCommand[];
|
|
29
29
|
hasSlashCommand: (commandId: string) => boolean;
|
|
30
|
+
usages: Usage[];
|
|
30
31
|
}
|
|
31
32
|
export declare const useChat: () => ChatContextType;
|
|
32
33
|
export interface ChatProviderProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,
|
|
1
|
+
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,EACZ,KAAK,EACN,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B,UAAU,EAAE,OAAO,CAAC;IAEpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,wBAAwB,EAAE,CACxB,OAAO,EAAE,MAAM,KACZ;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAElD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAEhD,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAID,eAAO,MAAM,OAAO,uBAMnB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA2PpD,CAAC"}
|
package/dist/contexts/useChat.js
CHANGED
|
@@ -4,6 +4,7 @@ import { useInput } from "ink";
|
|
|
4
4
|
import { useAppConfig } from "./useAppConfig.js";
|
|
5
5
|
import { Agent } from "wave-agent-sdk";
|
|
6
6
|
import { logger } from "../utils/logger.js";
|
|
7
|
+
import { displayUsageSummary } from "../utils/usageSummary.js";
|
|
7
8
|
const ChatContext = createContext(null);
|
|
8
9
|
export const useChat = () => {
|
|
9
10
|
const context = useContext(ChatContext);
|
|
@@ -30,6 +31,8 @@ export const ChatProvider = ({ children }) => {
|
|
|
30
31
|
const [backgroundShells, setBackgroundShells] = useState([]);
|
|
31
32
|
// Command state
|
|
32
33
|
const [slashCommands, setSlashCommands] = useState([]);
|
|
34
|
+
// Usage tracking state
|
|
35
|
+
const [usages, setUsages] = useState([]);
|
|
33
36
|
const agentRef = useRef(null);
|
|
34
37
|
// Listen for Ctrl+O hotkey to toggle collapse/expand state
|
|
35
38
|
useInput((input, key) => {
|
|
@@ -62,6 +65,9 @@ export const ChatProvider = ({ children }) => {
|
|
|
62
65
|
onShellsChange: (shells) => {
|
|
63
66
|
setBackgroundShells([...shells]);
|
|
64
67
|
},
|
|
68
|
+
onUsagesChange: (newUsages) => {
|
|
69
|
+
setUsages([...newUsages]);
|
|
70
|
+
},
|
|
65
71
|
};
|
|
66
72
|
try {
|
|
67
73
|
const agent = await Agent.create({
|
|
@@ -85,6 +91,8 @@ export const ChatProvider = ({ children }) => {
|
|
|
85
91
|
// Get initial commands
|
|
86
92
|
const agentSlashCommands = agent.getSlashCommands?.() || [];
|
|
87
93
|
setSlashCommands(agentSlashCommands);
|
|
94
|
+
// Get initial usages
|
|
95
|
+
setUsages(agent.usages);
|
|
88
96
|
}
|
|
89
97
|
catch (error) {
|
|
90
98
|
console.error("Failed to initialize AI manager:", error);
|
|
@@ -96,6 +104,15 @@ export const ChatProvider = ({ children }) => {
|
|
|
96
104
|
useEffect(() => {
|
|
97
105
|
return () => {
|
|
98
106
|
if (agentRef.current) {
|
|
107
|
+
try {
|
|
108
|
+
// Display usage summary before cleanup
|
|
109
|
+
const usages = agentRef.current.usages;
|
|
110
|
+
const sessionFilePath = agentRef.current.sessionFilePath;
|
|
111
|
+
displayUsageSummary(usages, sessionFilePath);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Silently ignore usage summary errors during cleanup
|
|
115
|
+
}
|
|
99
116
|
agentRef.current.destroy();
|
|
100
117
|
}
|
|
101
118
|
};
|
|
@@ -203,6 +220,7 @@ export const ChatProvider = ({ children }) => {
|
|
|
203
220
|
killBackgroundShell,
|
|
204
221
|
slashCommands,
|
|
205
222
|
hasSlashCommand,
|
|
223
|
+
usages,
|
|
206
224
|
};
|
|
207
225
|
return (_jsx(ChatContext.Provider, { value: contextValue, children: children }));
|
|
208
226
|
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Key } from "ink";
|
|
2
|
+
import { InputManager, InputManagerCallbacks, AttachedImage } from "../managers/InputManager.js";
|
|
3
|
+
import { FileItem } from "../components/FileSelector.js";
|
|
4
|
+
export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks>) => {
|
|
5
|
+
inputText: string;
|
|
6
|
+
cursorPosition: number;
|
|
7
|
+
showFileSelector: boolean;
|
|
8
|
+
filteredFiles: FileItem[];
|
|
9
|
+
fileSearchQuery: string;
|
|
10
|
+
atPosition: number;
|
|
11
|
+
showCommandSelector: boolean;
|
|
12
|
+
commandSearchQuery: string;
|
|
13
|
+
slashPosition: number;
|
|
14
|
+
showBashHistorySelector: boolean;
|
|
15
|
+
bashHistorySearchQuery: string;
|
|
16
|
+
exclamationPosition: number;
|
|
17
|
+
showMemoryTypeSelector: boolean;
|
|
18
|
+
memoryMessage: string;
|
|
19
|
+
showBashManager: boolean;
|
|
20
|
+
showMcpManager: boolean;
|
|
21
|
+
attachedImages: AttachedImage[];
|
|
22
|
+
insertTextAtCursor: (text: string, callback?: (newText: string, newCursorPosition: number) => void) => void;
|
|
23
|
+
deleteCharAtCursor: (callback?: (newText: string, newCursorPosition: number) => void) => void;
|
|
24
|
+
clearInput: () => void;
|
|
25
|
+
moveCursorLeft: () => void;
|
|
26
|
+
moveCursorRight: () => void;
|
|
27
|
+
moveCursorToStart: () => void;
|
|
28
|
+
moveCursorToEnd: () => void;
|
|
29
|
+
activateFileSelector: (position: number) => void;
|
|
30
|
+
handleFileSelect: (filePath: string) => {
|
|
31
|
+
newInput: string;
|
|
32
|
+
newCursorPosition: number;
|
|
33
|
+
};
|
|
34
|
+
handleCancelFileSelect: () => void;
|
|
35
|
+
updateFileSearchQuery: (query: string) => void;
|
|
36
|
+
checkForAtDeletion: (cursorPos: number) => boolean;
|
|
37
|
+
activateCommandSelector: (position: number) => void;
|
|
38
|
+
handleCommandSelect: (command: string) => {
|
|
39
|
+
newInput: string;
|
|
40
|
+
newCursorPosition: number;
|
|
41
|
+
};
|
|
42
|
+
handleCommandInsert: (command: string) => {
|
|
43
|
+
newInput: string;
|
|
44
|
+
newCursorPosition: number;
|
|
45
|
+
};
|
|
46
|
+
handleCancelCommandSelect: () => void;
|
|
47
|
+
updateCommandSearchQuery: (query: string) => void;
|
|
48
|
+
checkForSlashDeletion: (cursorPos: number) => boolean;
|
|
49
|
+
activateBashHistorySelector: (position: number) => void;
|
|
50
|
+
handleBashHistorySelect: (command: string) => {
|
|
51
|
+
newInput: string;
|
|
52
|
+
newCursorPosition: number;
|
|
53
|
+
};
|
|
54
|
+
handleCancelBashHistorySelect: () => void;
|
|
55
|
+
updateBashHistorySearchQuery: (query: string) => void;
|
|
56
|
+
handleBashHistoryExecute: (command: string) => string;
|
|
57
|
+
checkForExclamationDeletion: (cursorPos: number) => boolean;
|
|
58
|
+
activateMemoryTypeSelector: (message: string) => void;
|
|
59
|
+
handleMemoryTypeSelect: (type: "project" | "user") => void;
|
|
60
|
+
handleCancelMemoryTypeSelect: () => void;
|
|
61
|
+
setUserInputHistory: (history: string[]) => void;
|
|
62
|
+
navigateHistory: (direction: "up" | "down", currentInput: string) => {
|
|
63
|
+
newInput: string;
|
|
64
|
+
newCursorPosition: number;
|
|
65
|
+
};
|
|
66
|
+
resetHistoryNavigation: () => void;
|
|
67
|
+
handleSpecialCharInput: (char: string) => void;
|
|
68
|
+
setShowBashManager: (show: boolean) => void;
|
|
69
|
+
setShowMcpManager: (show: boolean) => void;
|
|
70
|
+
addImage: (imagePath: string, mimeType: string) => AttachedImage | undefined;
|
|
71
|
+
removeImage: (imageId: number) => void;
|
|
72
|
+
clearImages: () => void;
|
|
73
|
+
handlePasteImage: () => Promise<boolean>;
|
|
74
|
+
handlePasteInput: (input: string) => void;
|
|
75
|
+
handleSubmit: (attachedImages: Array<{
|
|
76
|
+
id: number;
|
|
77
|
+
path: string;
|
|
78
|
+
mimeType: string;
|
|
79
|
+
}>, isLoading?: boolean, isCommandRunning?: boolean) => Promise<void>;
|
|
80
|
+
expandLongTextPlaceholders: (text: string) => string;
|
|
81
|
+
clearLongTextMap: () => void;
|
|
82
|
+
handleInput: (input: string, key: Key, attachedImages: Array<{
|
|
83
|
+
id: number;
|
|
84
|
+
path: string;
|
|
85
|
+
mimeType: string;
|
|
86
|
+
}>, isLoading?: boolean, isCommandRunning?: boolean, clearImages?: () => void) => Promise<boolean>;
|
|
87
|
+
setInputText: (text: string) => void;
|
|
88
|
+
setCursorPosition: (position: number) => void;
|
|
89
|
+
manager: InputManager | null;
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=useInputManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInputManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,eAAO,MAAM,eAAe,GAC1B,YAAW,OAAO,CAAC,qBAAqB,CAAM;;;;;;;;;;;;;;;;;;+BAsGpC,MAAM,aACD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;oCAQrD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;;;;;;qCA2Bd,MAAM;iCAK7C,MAAM;;;;;mCAe+B,MAAM;oCAIL,MAAM;wCAKF,MAAM;mCAKjD,MAAM;;;;mCAYN,MAAM;;;;;sCAemC,MAAM;uCAIL,MAAM;4CAKD,MAAM;uCAKrD,MAAM;;;;;0CAeuC,MAAM;wCAIR,MAAM;6CAID,MAAM;0CAKT,MAAM;mCAIb,SAAS,GAAG,MAAM;;mCASlB,MAAM,EAAE;iCAK5C,IAAI,GAAG,MAAM,gBAAgB,MAAM;;;;;mCAgBC,MAAM;+BAgFf,OAAO;8BAGR,OAAO;0BAKX,MAAM,YAAY,MAAM;2BAGvB,MAAM;;;8BAWH,MAAM;mCAKxB,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,cAC1D,OAAO,qBACA,OAAO;uCAUkB,MAAM;;yBAU1C,MAAM,OACR,GAAG,kBACQ,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,cAC1D,OAAO,qBACA,OAAO,gBACX,MAAM,IAAI;yBAjIgB,MAAM;kCAIG,MAAM;;CAoJ9D,CAAC"}
|