centaurus-cli 2.5.2 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-adapter.d.ts +6 -0
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +215 -29
- package/dist/cli-adapter.js.map +1 -1
- package/dist/commands/CommandParser.js +2 -2
- package/dist/commands/CommandParser.js.map +1 -1
- package/dist/config/defaultConfig.js +1 -1
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/models.d.ts +50 -5
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +144 -20
- package/dist/config/models.js.map +1 -1
- package/dist/config/types.d.ts +3 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +3 -1
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/services/ai-service-client.d.ts +8 -2
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +2 -1
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/environment-context-injector.d.ts +69 -0
- package/dist/services/environment-context-injector.d.ts.map +1 -0
- package/dist/services/environment-context-injector.js +198 -0
- package/dist/services/environment-context-injector.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -1
- package/dist/tools/ToolRegistry.js +120 -26
- package/dist/tools/ToolRegistry.js.map +1 -1
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +30 -6
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +70 -23
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/find-files.d.ts +47 -0
- package/dist/tools/find-files.d.ts.map +1 -0
- package/dist/tools/find-files.js +190 -0
- package/dist/tools/find-files.js.map +1 -0
- package/dist/tools/get-diff.d.ts +45 -0
- package/dist/tools/get-diff.d.ts.map +1 -0
- package/dist/tools/get-diff.js +138 -0
- package/dist/tools/get-diff.js.map +1 -0
- package/dist/tools/grep-search.d.ts +85 -0
- package/dist/tools/grep-search.d.ts.map +1 -0
- package/dist/tools/grep-search.js +497 -0
- package/dist/tools/grep-search.js.map +1 -0
- package/dist/tools/inspect-symbol.d.ts +27 -0
- package/dist/tools/inspect-symbol.d.ts.map +1 -0
- package/dist/tools/inspect-symbol.js +259 -0
- package/dist/tools/inspect-symbol.js.map +1 -0
- package/dist/tools/validation.d.ts +49 -0
- package/dist/tools/validation.d.ts.map +1 -0
- package/dist/tools/validation.js +125 -0
- package/dist/tools/validation.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/components/App.d.ts +3 -0
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +272 -72
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/ContextWindowIndicator.d.ts +8 -0
- package/dist/ui/components/ContextWindowIndicator.d.ts.map +1 -0
- package/dist/ui/components/ContextWindowIndicator.js +34 -0
- package/dist/ui/components/ContextWindowIndicator.js.map +1 -0
- package/dist/ui/components/FontRecommendation.d.ts +1 -0
- package/dist/ui/components/FontRecommendation.d.ts.map +1 -0
- package/dist/ui/components/FontRecommendation.js +1 -0
- package/dist/ui/components/FontRecommendation.js.map +1 -0
- package/dist/ui/components/InputBox.d.ts +2 -0
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +9 -4
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +34 -9
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/MessageDisplay.js +9 -2
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +11 -3
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/ThinkingDisplay.d.ts +12 -0
- package/dist/ui/components/ThinkingDisplay.d.ts.map +1 -0
- package/dist/ui/components/ThinkingDisplay.js +41 -0
- package/dist/ui/components/ThinkingDisplay.js.map +1 -0
- package/dist/utils/markdown-parser.d.ts +4 -0
- package/dist/utils/markdown-parser.d.ts.map +1 -1
- package/dist/utils/markdown-parser.js +15 -1
- package/dist/utils/markdown-parser.js.map +1 -1
- package/dist/utils/version-checker.d.ts.map +1 -1
- package/dist/utils/version-checker.js +3 -31
- package/dist/utils/version-checker.js.map +1 -1
- package/package.json +6 -5
- package/README.md +0 -501
- package/dist/ai/provider-factory.d.ts +0 -6
- package/dist/ai/provider-factory.d.ts.map +0 -1
- package/dist/ai/provider-factory.js +0 -27
- package/dist/ai/provider-factory.js.map +0 -1
- package/dist/ai/providers/base.d.ts +0 -25
- package/dist/ai/providers/base.d.ts.map +0 -1
- package/dist/ai/providers/base.js +0 -9
- package/dist/ai/providers/base.js.map +0 -1
- package/dist/ai/providers/gemini.d.ts +0 -34
- package/dist/ai/providers/gemini.d.ts.map +0 -1
- package/dist/ai/providers/gemini.js +0 -146
- package/dist/ai/providers/gemini.js.map +0 -1
- package/dist/commands/view-duplication-logs.d.ts +0 -5
- package/dist/commands/view-duplication-logs.d.ts.map +0 -1
- package/dist/commands/view-duplication-logs.js +0 -14
- package/dist/commands/view-duplication-logs.js.map +0 -1
- package/dist/context/__tests__/command-detector.test.d.ts +0 -14
- package/dist/context/__tests__/command-detector.test.d.ts.map +0 -1
- package/dist/context/__tests__/command-detector.test.js +0 -318
- package/dist/context/__tests__/command-detector.test.js.map +0 -1
- package/dist/context/__tests__/context-manager.test.d.ts +0 -16
- package/dist/context/__tests__/context-manager.test.d.ts.map +0 -1
- package/dist/context/__tests__/context-manager.test.js +0 -375
- package/dist/context/__tests__/context-manager.test.js.map +0 -1
- package/dist/context/__tests__/error-handling.test.d.ts +0 -15
- package/dist/context/__tests__/error-handling.test.d.ts.map +0 -1
- package/dist/context/__tests__/error-handling.test.js +0 -447
- package/dist/context/__tests__/error-handling.test.js.map +0 -1
- package/dist/context/handlers/__tests__/docker-handler.test.d.ts +0 -13
- package/dist/context/handlers/__tests__/docker-handler.test.d.ts.map +0 -1
- package/dist/context/handlers/__tests__/docker-handler.test.js +0 -285
- package/dist/context/handlers/__tests__/docker-handler.test.js.map +0 -1
- package/dist/context/handlers/__tests__/ssh-handler.test.d.ts +0 -13
- package/dist/context/handlers/__tests__/ssh-handler.test.d.ts.map +0 -1
- package/dist/context/handlers/__tests__/ssh-handler.test.js +0 -251
- package/dist/context/handlers/__tests__/ssh-handler.test.js.map +0 -1
- package/dist/context/handlers/__tests__/wsl-handler.test.d.ts +0 -7
- package/dist/context/handlers/__tests__/wsl-handler.test.d.ts.map +0 -1
- package/dist/context/handlers/__tests__/wsl-handler.test.js +0 -331
- package/dist/context/handlers/__tests__/wsl-handler.test.js.map +0 -1
- package/dist/index-custom.d.ts +0 -3
- package/dist/index-custom.d.ts.map +0 -1
- package/dist/index-custom.js +0 -65
- package/dist/index-custom.js.map +0 -1
- package/dist/prompts/system-prompt.d.ts +0 -47
- package/dist/prompts/system-prompt.d.ts.map +0 -1
- package/dist/prompts/system-prompt.js +0 -377
- package/dist/prompts/system-prompt.js.map +0 -1
- package/dist/providers/GoogleProvider.d.ts +0 -26
- package/dist/providers/GoogleProvider.d.ts.map +0 -1
- package/dist/providers/GoogleProvider.js +0 -313
- package/dist/providers/GoogleProvider.js.map +0 -1
- package/dist/providers/Provider.d.ts +0 -114
- package/dist/providers/Provider.d.ts.map +0 -1
- package/dist/providers/Provider.js +0 -44
- package/dist/providers/Provider.js.map +0 -1
- package/dist/services/__tests__/ai-context-injector.test.d.ts +0 -15
- package/dist/services/__tests__/ai-context-injector.test.d.ts.map +0 -1
- package/dist/services/__tests__/ai-context-injector.test.js +0 -326
- package/dist/services/__tests__/ai-context-injector.test.js.map +0 -1
- package/dist/src/context/types.js +0 -27
- package/dist/src/services/ai-context-injector.js +0 -96
- package/dist/src/services/ai-service-client.js +0 -270
- package/dist/src/services/api-client.js +0 -349
- package/dist/src/tools/types.js +0 -1
- package/dist/src/types/index.js +0 -1
- package/dist/test/context/types.js +0 -27
- package/dist/test/services/__tests__/ai-context-injector.test.js +0 -325
- package/dist/test/services/ai-context-injector.js +0 -96
- package/dist/test/services/ai-service-client.js +0 -270
- package/dist/test/services/api-client.js +0 -349
- package/dist/test/tools/types.js +0 -1
- package/dist/test/types/index.js +0 -1
- package/dist/test-ai-context-injector.js +0 -97
- package/dist/tests/automated-verification.d.ts +0 -27
- package/dist/tests/automated-verification.d.ts.map +0 -1
- package/dist/tests/automated-verification.js +0 -359
- package/dist/tests/automated-verification.js.map +0 -1
- package/dist/tests/integration-tests.d.ts +0 -50
- package/dist/tests/integration-tests.d.ts.map +0 -1
- package/dist/tests/integration-tests.js +0 -648
- package/dist/tests/integration-tests.js.map +0 -1
- package/dist/tools/file-ops-test.d.ts +0 -6
- package/dist/tools/file-ops-test.d.ts.map +0 -1
- package/dist/tools/file-ops-test.js +0 -197
- package/dist/tools/file-ops-test.js.map +0 -1
- package/dist/ui/DisplayHistory.d.ts +0 -53
- package/dist/ui/DisplayHistory.d.ts.map +0 -1
- package/dist/ui/DisplayHistory.js +0 -82
- package/dist/ui/DisplayHistory.js.map +0 -1
- package/dist/ui/clack-ui.d.ts +0 -83
- package/dist/ui/clack-ui.d.ts.map +0 -1
- package/dist/ui/clack-ui.js +0 -304
- package/dist/ui/clack-ui.js.map +0 -1
- package/dist/ui/components/DisplayItemRenderer.d.ts +0 -18
- package/dist/ui/components/DisplayItemRenderer.d.ts.map +0 -1
- package/dist/ui/components/DisplayItemRenderer.js +0 -53
- package/dist/ui/components/DisplayItemRenderer.js.map +0 -1
- package/dist/ui/components/DynamicMessage.d.ts +0 -13
- package/dist/ui/components/DynamicMessage.d.ts.map +0 -1
- package/dist/ui/components/DynamicMessage.js +0 -27
- package/dist/ui/components/DynamicMessage.js.map +0 -1
- package/dist/ui/components/FileViewerScreen.d.ts +0 -14
- package/dist/ui/components/FileViewerScreen.d.ts.map +0 -1
- package/dist/ui/components/FileViewerScreen.js +0 -74
- package/dist/ui/components/FileViewerScreen.js.map +0 -1
- package/dist/ui/components/ScrollableContent.d.ts +0 -7
- package/dist/ui/components/ScrollableContent.d.ts.map +0 -1
- package/dist/ui/components/ScrollableContent.js +0 -6
- package/dist/ui/components/ScrollableContent.js.map +0 -1
- package/dist/ui/components/ScrollableMessageList.d.ts +0 -10
- package/dist/ui/components/ScrollableMessageList.d.ts.map +0 -1
- package/dist/ui/components/ScrollableMessageList.js +0 -133
- package/dist/ui/components/ScrollableMessageList.js.map +0 -1
- package/dist/ui/components/ScrollableScreen.d.ts +0 -9
- package/dist/ui/components/ScrollableScreen.d.ts.map +0 -1
- package/dist/ui/components/ScrollableScreen.js +0 -22
- package/dist/ui/components/ScrollableScreen.js.map +0 -1
- package/dist/ui/components/StaticMessageHistory.d.ts +0 -14
- package/dist/ui/components/StaticMessageHistory.d.ts.map +0 -1
- package/dist/ui/components/StaticMessageHistory.js +0 -19
- package/dist/ui/components/StaticMessageHistory.js.map +0 -1
- package/dist/ui/components/code-block.d.ts +0 -10
- package/dist/ui/components/code-block.d.ts.map +0 -1
- package/dist/ui/components/code-block.js +0 -74
- package/dist/ui/components/code-block.js.map +0 -1
- package/dist/ui/components/confirm-prompt.d.ts +0 -12
- package/dist/ui/components/confirm-prompt.d.ts.map +0 -1
- package/dist/ui/components/confirm-prompt.js +0 -104
- package/dist/ui/components/confirm-prompt.js.map +0 -1
- package/dist/ui/components/diff-viewer.d.ts +0 -9
- package/dist/ui/components/diff-viewer.d.ts.map +0 -1
- package/dist/ui/components/diff-viewer.js +0 -57
- package/dist/ui/components/diff-viewer.js.map +0 -1
- package/dist/ui/components/input-box.d.ts +0 -18
- package/dist/ui/components/input-box.d.ts.map +0 -1
- package/dist/ui/components/input-box.js +0 -157
- package/dist/ui/components/input-box.js.map +0 -1
- package/dist/ui/components/keyboard-help.d.ts +0 -7
- package/dist/ui/components/keyboard-help.d.ts.map +0 -1
- package/dist/ui/components/keyboard-help.js +0 -43
- package/dist/ui/components/keyboard-help.js.map +0 -1
- package/dist/ui/components/loading-indicator.d.ts +0 -3
- package/dist/ui/components/loading-indicator.d.ts.map +0 -1
- package/dist/ui/components/loading-indicator.js +0 -42
- package/dist/ui/components/loading-indicator.js.map +0 -1
- package/dist/ui/components/message-display.d.ts +0 -7
- package/dist/ui/components/message-display.d.ts.map +0 -1
- package/dist/ui/components/message-display.js +0 -104
- package/dist/ui/components/message-display.js.map +0 -1
- package/dist/ui/components/misc.d.ts +0 -28
- package/dist/ui/components/misc.d.ts.map +0 -1
- package/dist/ui/components/misc.js +0 -128
- package/dist/ui/components/misc.js.map +0 -1
- package/dist/ui/components/select-prompt.d.ts +0 -13
- package/dist/ui/components/select-prompt.d.ts.map +0 -1
- package/dist/ui/components/select-prompt.js +0 -42
- package/dist/ui/components/select-prompt.js.map +0 -1
- package/dist/ui/components/status-bar.d.ts +0 -11
- package/dist/ui/components/status-bar.d.ts.map +0 -1
- package/dist/ui/components/status-bar.js +0 -47
- package/dist/ui/components/status-bar.js.map +0 -1
- package/dist/ui/components/tool-execution.d.ts +0 -3
- package/dist/ui/components/tool-execution.d.ts.map +0 -1
- package/dist/ui/components/tool-execution.js +0 -374
- package/dist/ui/components/tool-execution.js.map +0 -1
- package/dist/ui/components/tool-result.d.ts +0 -11
- package/dist/ui/components/tool-result.d.ts.map +0 -1
- package/dist/ui/components/tool-result.js +0 -58
- package/dist/ui/components/tool-result.js.map +0 -1
- package/dist/ui/components/welcome-banner.d.ts +0 -3
- package/dist/ui/components/welcome-banner.d.ts.map +0 -1
- package/dist/ui/components/welcome-banner.js +0 -46
- package/dist/ui/components/welcome-banner.js.map +0 -1
- package/dist/ui/hooks/useDisplayHistory.d.ts +0 -13
- package/dist/ui/hooks/useDisplayHistory.d.ts.map +0 -1
- package/dist/ui/hooks/useDisplayHistory.js +0 -45
- package/dist/ui/hooks/useDisplayHistory.js.map +0 -1
- package/dist/ui/render-engine.d.ts +0 -69
- package/dist/ui/render-engine.d.ts.map +0 -1
- package/dist/ui/render-engine.js +0 -197
- package/dist/ui/render-engine.js.map +0 -1
- package/dist/ui/terminal/TerminalRenderer.d.ts +0 -84
- package/dist/ui/terminal/TerminalRenderer.d.ts.map +0 -1
- package/dist/ui/terminal/TerminalRenderer.js +0 -154
- package/dist/ui/terminal/TerminalRenderer.js.map +0 -1
- package/dist/ui/terminal/TerminalUI.d.ts +0 -139
- package/dist/ui/terminal/TerminalUI.d.ts.map +0 -1
- package/dist/ui/terminal/TerminalUI.js +0 -430
- package/dist/ui/terminal/TerminalUI.js.map +0 -1
- package/dist/ui/terminal/VirtualChatBuffer.d.ts +0 -32
- package/dist/ui/terminal/VirtualChatBuffer.d.ts.map +0 -1
- package/dist/ui/terminal/VirtualChatBuffer.js +0 -37
- package/dist/ui/terminal/VirtualChatBuffer.js.map +0 -1
- package/dist/ui/terminal-kit-base.d.ts +0 -117
- package/dist/ui/terminal-kit-base.d.ts.map +0 -1
- package/dist/ui/terminal-kit-base.js +0 -188
- package/dist/ui/terminal-kit-base.js.map +0 -1
- package/dist/ui/utils/duplication-detector.d.ts +0 -32
- package/dist/ui/utils/duplication-detector.d.ts.map +0 -1
- package/dist/ui/utils/duplication-detector.js +0 -227
- package/dist/ui/utils/duplication-detector.js.map +0 -1
- package/dist/ui/utils/duplication-logger.d.ts +0 -21
- package/dist/ui/utils/duplication-logger.d.ts.map +0 -1
- package/dist/ui/utils/duplication-logger.js +0 -85
- package/dist/ui/utils/duplication-logger.js.map +0 -1
- package/dist/ui/utils/terminal-scanner.d.ts +0 -19
- package/dist/ui/utils/terminal-scanner.d.ts.map +0 -1
- package/dist/ui/utils/terminal-scanner.js +0 -217
- package/dist/ui/utils/terminal-scanner.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -3
- package/dist/version.js.map +0 -1
- package/scripts/generate-version.js +0 -25
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect, useRef, useMemo } from 'react';
|
|
2
|
-
import { Box, useInput, useStdin, Text } from 'ink';
|
|
3
|
-
import { MessageDisplay } from './MessageDisplay.js';
|
|
4
|
-
export const ScrollableMessageList = ({ messages, maxScrollback = 500, viewportHeight = 20 }) => {
|
|
5
|
-
const [scrollOffset, setScrollOffset] = useState(0);
|
|
6
|
-
const [isScrolledToBottom, setIsScrolledToBottom] = useState(true);
|
|
7
|
-
const { stdin, setRawMode } = useStdin();
|
|
8
|
-
const prevMessagesLengthRef = useRef(messages.length);
|
|
9
|
-
// Limit messages to max scrollback
|
|
10
|
-
const limitedMessages = useMemo(() => {
|
|
11
|
-
return messages.slice(-maxScrollback);
|
|
12
|
-
}, [messages, maxScrollback]);
|
|
13
|
-
const totalMessages = limitedMessages.length;
|
|
14
|
-
const maxScrollOffset = Math.max(0, totalMessages - viewportHeight);
|
|
15
|
-
// Auto-scroll to bottom when new messages arrive (only if already at bottom)
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
if (messages.length > prevMessagesLengthRef.current) {
|
|
18
|
-
if (isScrolledToBottom) {
|
|
19
|
-
setScrollOffset(Math.max(0, messages.slice(-maxScrollback).length - viewportHeight));
|
|
20
|
-
}
|
|
21
|
-
prevMessagesLengthRef.current = messages.length;
|
|
22
|
-
}
|
|
23
|
-
}, [messages, isScrolledToBottom, viewportHeight, maxScrollback]);
|
|
24
|
-
// Check if we're at the bottom
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
const atBottom = scrollOffset >= maxScrollOffset;
|
|
27
|
-
setIsScrolledToBottom(atBottom);
|
|
28
|
-
}, [scrollOffset, maxScrollOffset]);
|
|
29
|
-
// Keyboard input handling
|
|
30
|
-
useInput((input, key) => {
|
|
31
|
-
// Don't handle input if there are too few messages to scroll
|
|
32
|
-
if (totalMessages <= viewportHeight)
|
|
33
|
-
return;
|
|
34
|
-
if (key.upArrow) {
|
|
35
|
-
setScrollOffset(prev => Math.max(0, prev - 1));
|
|
36
|
-
}
|
|
37
|
-
else if (key.downArrow) {
|
|
38
|
-
setScrollOffset(prev => Math.min(maxScrollOffset, prev + 1));
|
|
39
|
-
}
|
|
40
|
-
else if (key.pageUp) {
|
|
41
|
-
setScrollOffset(prev => Math.max(0, prev - viewportHeight));
|
|
42
|
-
}
|
|
43
|
-
else if (key.pageDown) {
|
|
44
|
-
setScrollOffset(prev => Math.min(maxScrollOffset, prev + viewportHeight));
|
|
45
|
-
}
|
|
46
|
-
else if (input === 'g' || input === 'G') {
|
|
47
|
-
// Home - go to top
|
|
48
|
-
if (input === 'g') {
|
|
49
|
-
setScrollOffset(0);
|
|
50
|
-
}
|
|
51
|
-
// End - go to bottom
|
|
52
|
-
if (input === 'G') {
|
|
53
|
-
setScrollOffset(maxScrollOffset);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
// Mouse wheel support
|
|
58
|
-
useEffect(() => {
|
|
59
|
-
if (!stdin || typeof setRawMode !== 'function')
|
|
60
|
-
return;
|
|
61
|
-
// Enable mouse tracking (X11 mouse protocol)
|
|
62
|
-
process.stdout.write('\x1b[?1000h'); // Enable mouse button events
|
|
63
|
-
process.stdout.write('\x1b[?1003h'); // Enable all mouse events
|
|
64
|
-
process.stdout.write('\x1b[?1015h'); // Enable urxvt mouse mode
|
|
65
|
-
process.stdout.write('\x1b[?1006h'); // Enable SGR mouse mode
|
|
66
|
-
const handleData = (data) => {
|
|
67
|
-
const str = data.toString('utf8');
|
|
68
|
-
// Parse SGR mouse format: \x1b[<b;x;y;M or m
|
|
69
|
-
// Wheel up: button 64, Wheel down: button 65
|
|
70
|
-
const sgrMatch = str.match(/\x1b\[<(\d+);(\d+);(\d+)([Mm])/);
|
|
71
|
-
if (sgrMatch) {
|
|
72
|
-
const button = parseInt(sgrMatch[1], 10);
|
|
73
|
-
const action = sgrMatch[4];
|
|
74
|
-
if (action === 'M') { // Mouse button press
|
|
75
|
-
if (button === 64) {
|
|
76
|
-
// Scroll up (wheel up)
|
|
77
|
-
setScrollOffset(prev => Math.max(0, prev - 3));
|
|
78
|
-
}
|
|
79
|
-
else if (button === 65) {
|
|
80
|
-
// Scroll down (wheel down)
|
|
81
|
-
setScrollOffset(prev => Math.min(maxScrollOffset, prev + 3));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Fallback: Parse X10 mouse format: \x1b[Mbxy
|
|
86
|
-
if (str.startsWith('\x1b[M') && str.length >= 6) {
|
|
87
|
-
const cb = str.charCodeAt(3) - 32;
|
|
88
|
-
// Wheel up: 64, Wheel down: 65
|
|
89
|
-
if (cb === 64) {
|
|
90
|
-
setScrollOffset(prev => Math.max(0, prev - 3));
|
|
91
|
-
}
|
|
92
|
-
else if (cb === 65) {
|
|
93
|
-
setScrollOffset(prev => Math.min(maxScrollOffset, prev + 3));
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
stdin.on('data', handleData);
|
|
98
|
-
return () => {
|
|
99
|
-
// Disable mouse tracking on cleanup
|
|
100
|
-
process.stdout.write('\x1b[?1000l');
|
|
101
|
-
process.stdout.write('\x1b[?1003l');
|
|
102
|
-
process.stdout.write('\x1b[?1015l');
|
|
103
|
-
process.stdout.write('\x1b[?1006l');
|
|
104
|
-
stdin.off('data', handleData);
|
|
105
|
-
};
|
|
106
|
-
}, [stdin, setRawMode, maxScrollOffset]);
|
|
107
|
-
// Calculate visible messages
|
|
108
|
-
const visibleMessages = useMemo(() => {
|
|
109
|
-
const start = scrollOffset;
|
|
110
|
-
const end = Math.min(totalMessages, scrollOffset + viewportHeight);
|
|
111
|
-
return limitedMessages.slice(start, end);
|
|
112
|
-
}, [limitedMessages, scrollOffset, viewportHeight, totalMessages]);
|
|
113
|
-
// Scrollbar indicator
|
|
114
|
-
const showScrollbar = totalMessages > viewportHeight;
|
|
115
|
-
const scrollbarPosition = maxScrollOffset > 0
|
|
116
|
-
? Math.round((scrollOffset / maxScrollOffset) * (viewportHeight - 1))
|
|
117
|
-
: 0;
|
|
118
|
-
return (React.createElement(Box, { flexDirection: "row", width: "100%" },
|
|
119
|
-
React.createElement(Box, { flexDirection: "column", flexGrow: 1, marginY: 1 },
|
|
120
|
-
visibleMessages.map((msg) => (React.createElement(MessageDisplay, { key: msg.id, message: msg }))),
|
|
121
|
-
totalMessages > viewportHeight && !isScrolledToBottom && (React.createElement(Box, { marginTop: 1 },
|
|
122
|
-
React.createElement(Text, { dimColor: true },
|
|
123
|
-
"\u2193 ",
|
|
124
|
-
totalMessages - (scrollOffset + viewportHeight),
|
|
125
|
-
" more messages below (\u2193/PgDn/G)"))),
|
|
126
|
-
totalMessages > viewportHeight && scrollOffset > 0 && (React.createElement(Box, null,
|
|
127
|
-
React.createElement(Text, { dimColor: true },
|
|
128
|
-
"\u2191 ",
|
|
129
|
-
scrollOffset,
|
|
130
|
-
" messages above (\u2191/PgUp/g)")))),
|
|
131
|
-
showScrollbar && (React.createElement(Box, { flexDirection: "column", marginLeft: 1, width: 1 }, Array.from({ length: viewportHeight }).map((_, i) => (React.createElement(Text, { key: i, dimColor: true }, i === scrollbarPosition ? '█' : '│')))))));
|
|
132
|
-
};
|
|
133
|
-
//# sourceMappingURL=ScrollableMessageList.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollableMessageList.js","sourceRoot":"","sources":["../../../src/ui/components/ScrollableMessageList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* ScrollableScreen component that uses alternate screen buffer with scrolling enabled
|
|
4
|
-
* This prevents seeing duplicate renders while allowing scrollback within the current session
|
|
5
|
-
*/
|
|
6
|
-
export declare const ScrollableScreen: React.FC<{
|
|
7
|
-
children: React.ReactNode;
|
|
8
|
-
}>;
|
|
9
|
-
//# sourceMappingURL=ScrollableScreen.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollableScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ScrollableScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAkBpE,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Box } from 'ink';
|
|
3
|
-
/**
|
|
4
|
-
* ScrollableScreen component that uses alternate screen buffer with scrolling enabled
|
|
5
|
-
* This prevents seeing duplicate renders while allowing scrollback within the current session
|
|
6
|
-
*/
|
|
7
|
-
export const ScrollableScreen = ({ children }) => {
|
|
8
|
-
React.useEffect(() => {
|
|
9
|
-
// Enter alternate screen buffer
|
|
10
|
-
process.stdout.write('\x1B[?1049h');
|
|
11
|
-
// Enable scrolling in the alternate buffer
|
|
12
|
-
process.stdout.write('\x1B[?7h'); // Enable line wrap
|
|
13
|
-
// Clear screen and home cursor
|
|
14
|
-
process.stdout.write('\x1B[2J\x1B[H');
|
|
15
|
-
return () => {
|
|
16
|
-
// Exit alternate screen buffer on unmount
|
|
17
|
-
process.stdout.write('\x1B[?1049l');
|
|
18
|
-
};
|
|
19
|
-
}, []);
|
|
20
|
-
return React.createElement(Box, { flexDirection: "column" }, children);
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=ScrollableScreen.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollableScreen.js","sourceRoot":"","sources":["../../../src/ui/components/ScrollableScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA4C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,gCAAgC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEpC,2CAA2C;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB;QAErD,+BAA+B;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAEtC,OAAO,GAAG,EAAE;YACV,0CAA0C;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,IAAE,QAAQ,CAAO,CAAC;AACtD,CAAC,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Message } from '../../types/index.js';
|
|
3
|
-
interface StaticMessageHistoryProps {
|
|
4
|
-
messages: Message[];
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Renders completed messages using Ink's Static component.
|
|
8
|
-
* These messages are "frozen" and never re-render.
|
|
9
|
-
* This is the key to preventing UI duplication - once a message is rendered
|
|
10
|
-
* in Static, it's written to stdout and frozen forever.
|
|
11
|
-
*/
|
|
12
|
-
export declare const StaticMessageHistory: React.FC<StaticMessageHistoryProps>;
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=StaticMessageHistory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMessageHistory.d.ts","sourceRoot":"","sources":["../../../src/ui/components/StaticMessageHistory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,UAAU,yBAAyB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAcnE,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Static } from 'ink';
|
|
3
|
-
import { MessageDisplay } from './MessageDisplay.js';
|
|
4
|
-
/**
|
|
5
|
-
* Renders completed messages using Ink's Static component.
|
|
6
|
-
* These messages are "frozen" and never re-render.
|
|
7
|
-
* This is the key to preventing UI duplication - once a message is rendered
|
|
8
|
-
* in Static, it's written to stdout and frozen forever.
|
|
9
|
-
*/
|
|
10
|
-
export const StaticMessageHistory = React.memo(({ messages }) => {
|
|
11
|
-
// Static component ensures these items never re-render
|
|
12
|
-
// They are written to stdout once and frozen
|
|
13
|
-
return (React.createElement(Static, { items: messages }, (message) => (React.createElement(MessageDisplay, { key: message.id, message: message }))));
|
|
14
|
-
}, (prevProps, nextProps) => {
|
|
15
|
-
// Return true to SKIP re-render, false to re-render
|
|
16
|
-
// Only re-render when messages array actually changes (new messages added)
|
|
17
|
-
return prevProps.messages === nextProps.messages;
|
|
18
|
-
});
|
|
19
|
-
//# sourceMappingURL=StaticMessageHistory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMessageHistory.js","sourceRoot":"","sources":["../../../src/ui/components/StaticMessageHistory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMrD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnG,uDAAuD;IACvD,6CAA6C;IAC7C,OAAO,CACL,oBAAC,MAAM,IAAC,KAAK,EAAE,QAAQ,IACpB,CAAC,OAAO,EAAE,EAAE,CAAC,CACZ,oBAAC,cAAc,IAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,GAAI,CACtD,CACM,CACV,CAAC;AACJ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;IAC1B,oDAAoD;IACpD,2EAA2E;IAC3E,OAAO,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC;AACnD,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../../src/ui/components/code-block.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAoFjE"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { screenBuffer, createColorAttr, colors, drawBox, truncate } from '../terminal-kit-base.js';
|
|
2
|
-
// Render a code block with line numbers
|
|
3
|
-
// Format: LineNum │ Code
|
|
4
|
-
// Max 20 lines, truncated with message
|
|
5
|
-
export function renderCodeBlock(options) {
|
|
6
|
-
const { x, y, width, code, language = 'text', title } = options;
|
|
7
|
-
const lines = code.split('\n');
|
|
8
|
-
const MAX_LINES = 20;
|
|
9
|
-
const truncated = lines.length > MAX_LINES;
|
|
10
|
-
const displayLines = truncated ? lines.slice(0, MAX_LINES) : lines;
|
|
11
|
-
// Calculate height
|
|
12
|
-
let height = 3; // Border + title + border
|
|
13
|
-
height += displayLines.length; // Code lines
|
|
14
|
-
if (truncated)
|
|
15
|
-
height += 1; // Truncation message
|
|
16
|
-
// Draw rounded border with dark blue color
|
|
17
|
-
drawBox({
|
|
18
|
-
x,
|
|
19
|
-
y,
|
|
20
|
-
width,
|
|
21
|
-
height,
|
|
22
|
-
borderStyle: 'rounded',
|
|
23
|
-
borderColor: colors.border, // #003b59
|
|
24
|
-
});
|
|
25
|
-
let currentY = y + 1;
|
|
26
|
-
// Title with icon if provided
|
|
27
|
-
if (title) {
|
|
28
|
-
const titleAttr = createColorAttr(colors.primary, true); // Cyan, bold
|
|
29
|
-
const langAttr = createColorAttr(colors.dimmed); // Gray
|
|
30
|
-
let titleText = `📄 ${title}`;
|
|
31
|
-
if (language) {
|
|
32
|
-
titleText += ` `;
|
|
33
|
-
}
|
|
34
|
-
screenBuffer.put({ x: x + 2, y: currentY, attr: titleAttr }, titleText);
|
|
35
|
-
if (language) {
|
|
36
|
-
screenBuffer.put({
|
|
37
|
-
x: x + 2 + titleText.length,
|
|
38
|
-
y: currentY,
|
|
39
|
-
attr: langAttr
|
|
40
|
-
}, `(${language})`);
|
|
41
|
-
}
|
|
42
|
-
currentY += 2; // Title + empty line
|
|
43
|
-
}
|
|
44
|
-
// Render code lines with line numbers
|
|
45
|
-
const lineNumAttr = createColorAttr(colors.dimmed); // Gray
|
|
46
|
-
const codeAttr = createColorAttr(colors.text); // White
|
|
47
|
-
const maxLineNumWidth = 3; // Pad to 3 chars
|
|
48
|
-
for (let i = 0; i < displayLines.length; i++) {
|
|
49
|
-
const lineNum = (i + 1).toString().padStart(maxLineNumWidth, ' ');
|
|
50
|
-
const line = displayLines[i];
|
|
51
|
-
// Line number
|
|
52
|
-
screenBuffer.put({ x: x + 2, y: currentY, attr: lineNumAttr }, lineNum + ' │ ');
|
|
53
|
-
// Code (truncate if too long for width)
|
|
54
|
-
const codeWidth = width - 2 - maxLineNumWidth - 5; // Border + line num + separator + padding
|
|
55
|
-
const truncatedLine = truncate(line, codeWidth);
|
|
56
|
-
screenBuffer.put({
|
|
57
|
-
x: x + 2 + maxLineNumWidth + 3,
|
|
58
|
-
y: currentY,
|
|
59
|
-
attr: codeAttr
|
|
60
|
-
}, truncatedLine);
|
|
61
|
-
currentY++;
|
|
62
|
-
}
|
|
63
|
-
// Truncation message if needed
|
|
64
|
-
if (truncated) {
|
|
65
|
-
currentY++; // Empty line before message
|
|
66
|
-
const truncMsg = `... (${lines.length - MAX_LINES} more lines)`;
|
|
67
|
-
const truncAttr = createColorAttr(colors.dimmed, false, true); // Dimmed
|
|
68
|
-
screenBuffer.put({ x: x + 2, y: currentY, attr: truncAttr }, truncMsg);
|
|
69
|
-
currentY++;
|
|
70
|
-
}
|
|
71
|
-
// Return total height + bottom margin
|
|
72
|
-
return height + 1;
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=code-block.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-block.js","sourceRoot":"","sources":["../../../src/ui/components/code-block.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface ConfirmPromptOptions {
|
|
2
|
-
x: number;
|
|
3
|
-
y: number;
|
|
4
|
-
width: number;
|
|
5
|
-
message: string;
|
|
6
|
-
showFeedbackOption?: boolean;
|
|
7
|
-
}
|
|
8
|
-
type PromptOption = 'yes' | 'no' | 'feedback';
|
|
9
|
-
export declare function renderConfirmPrompt(options: ConfirmPromptOptions, selected?: PromptOption): number;
|
|
10
|
-
export declare function waitForConfirmation(options: ConfirmPromptOptions): Promise<'yes' | 'no' | 'feedback' | null>;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=confirm-prompt.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-prompt.d.ts","sourceRoot":"","sources":["../../../src/ui/components/confirm-prompt.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,KAAK,YAAY,GAAG,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC;AAG9C,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,GAAE,YAAoB,GAC7B,MAAM,CAgER;AAGD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,CA8D3C"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { term, ensureScreenBuffer, createColorAttr, colors, drawBox, render } from '../terminal-kit-base.js';
|
|
2
|
-
// Render the prompt (static parts)
|
|
3
|
-
export function renderConfirmPrompt(options, selected = 'yes') {
|
|
4
|
-
const { x, y, width, message, showFeedbackOption = false } = options;
|
|
5
|
-
const height = 6; // Border + empty + message + empty + options + border
|
|
6
|
-
// Draw rounded border with orange color
|
|
7
|
-
drawBox({
|
|
8
|
-
x,
|
|
9
|
-
y,
|
|
10
|
-
width,
|
|
11
|
-
height,
|
|
12
|
-
borderStyle: 'rounded',
|
|
13
|
-
borderColor: colors.warning, // #ffaa00 (Orange)
|
|
14
|
-
});
|
|
15
|
-
let currentY = y + 1;
|
|
16
|
-
// Empty line
|
|
17
|
-
currentY++;
|
|
18
|
-
// Message with warning icon
|
|
19
|
-
const buffer = ensureScreenBuffer();
|
|
20
|
-
const messageAttr = createColorAttr(colors.warning, true); // Orange, bold
|
|
21
|
-
const messageText = `⚠️ ${message}`;
|
|
22
|
-
buffer.put({ x: x + 2, y: currentY, attr: messageAttr }, messageText);
|
|
23
|
-
currentY += 2; // Message + empty line
|
|
24
|
-
// Options row
|
|
25
|
-
let optionsX = x + 2;
|
|
26
|
-
// Yes option
|
|
27
|
-
const yesSelected = selected === 'yes';
|
|
28
|
-
const yesAttr = createColorAttr(yesSelected ? colors.success : colors.dimmed, yesSelected);
|
|
29
|
-
const yesPrefix = yesSelected ? '▶ ' : ' ';
|
|
30
|
-
buffer.put({ x: optionsX, y: currentY, attr: yesAttr }, yesPrefix + '[Y]es');
|
|
31
|
-
optionsX += (yesPrefix + '[Y]es').length + 4; // Add spacing
|
|
32
|
-
// No option
|
|
33
|
-
const noSelected = selected === 'no';
|
|
34
|
-
const noAttr = createColorAttr(noSelected ? colors.error : colors.dimmed, noSelected);
|
|
35
|
-
const noPrefix = noSelected ? '▶ ' : ' ';
|
|
36
|
-
buffer.put({ x: optionsX, y: currentY, attr: noAttr }, noPrefix + '[N]o');
|
|
37
|
-
optionsX += (noPrefix + '[N]o').length + 4;
|
|
38
|
-
// Feedback option (if enabled)
|
|
39
|
-
if (showFeedbackOption) {
|
|
40
|
-
const feedbackSelected = selected === 'feedback';
|
|
41
|
-
const feedbackAttr = createColorAttr(feedbackSelected ? colors.primary : colors.dimmed, feedbackSelected);
|
|
42
|
-
const feedbackPrefix = feedbackSelected ? '▶ ' : ' ';
|
|
43
|
-
buffer.put({ x: optionsX, y: currentY, attr: feedbackAttr }, feedbackPrefix + '[F]eedback');
|
|
44
|
-
}
|
|
45
|
-
// Return height + bottom margin
|
|
46
|
-
return height + 1;
|
|
47
|
-
}
|
|
48
|
-
// Wait for user input and return selected option
|
|
49
|
-
export async function waitForConfirmation(options) {
|
|
50
|
-
let selected = 'yes';
|
|
51
|
-
const showFeedback = options.showFeedbackOption || false;
|
|
52
|
-
const validOptions = showFeedback
|
|
53
|
-
? ['yes', 'no', 'feedback']
|
|
54
|
-
: ['yes', 'no'];
|
|
55
|
-
return new Promise((resolve) => {
|
|
56
|
-
// Render initial state
|
|
57
|
-
renderConfirmPrompt(options, selected);
|
|
58
|
-
render(); // Actually draw to screen!
|
|
59
|
-
// Listen for key events
|
|
60
|
-
const cleanup = term.on('key', (name) => {
|
|
61
|
-
// Handle arrow keys for navigation
|
|
62
|
-
if (name === 'LEFT' || name === 'RIGHT') {
|
|
63
|
-
const currentIdx = validOptions.indexOf(selected);
|
|
64
|
-
const nextIdx = name === 'LEFT'
|
|
65
|
-
? (currentIdx - 1 + validOptions.length) % validOptions.length
|
|
66
|
-
: (currentIdx + 1) % validOptions.length;
|
|
67
|
-
selected = validOptions[nextIdx];
|
|
68
|
-
// Re-render with new selection
|
|
69
|
-
renderConfirmPrompt(options, selected);
|
|
70
|
-
render(); // Actually draw to screen!
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
// Handle direct key presses
|
|
74
|
-
if (name === 'y' || name === 'Y') {
|
|
75
|
-
cleanup();
|
|
76
|
-
resolve('yes');
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
if (name === 'n' || name === 'N') {
|
|
80
|
-
cleanup();
|
|
81
|
-
resolve('no');
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (showFeedback && (name === 'f' || name === 'F')) {
|
|
85
|
-
cleanup();
|
|
86
|
-
resolve('feedback');
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
// Handle Enter to confirm current selection
|
|
90
|
-
if (name === 'ENTER') {
|
|
91
|
-
cleanup();
|
|
92
|
-
resolve(selected);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
// Handle Ctrl+C to exit
|
|
96
|
-
if (name === 'CTRL_C') {
|
|
97
|
-
cleanup();
|
|
98
|
-
process.exit(0);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=confirm-prompt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-prompt.js","sourceRoot":"","sources":["../../../src/ui/components/confirm-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff-viewer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/diff-viewer.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAiDnE"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { screenBuffer, createColorAttr, colors, drawBox, truncate } from '../terminal-kit-base.js';
|
|
2
|
-
// Get line color based on diff prefix
|
|
3
|
-
function getLineColor(line) {
|
|
4
|
-
if (line.startsWith('+')) {
|
|
5
|
-
return colors.success; // #00cc66 (Green)
|
|
6
|
-
}
|
|
7
|
-
else if (line.startsWith('-')) {
|
|
8
|
-
return colors.error; // #ff3366 (Red)
|
|
9
|
-
}
|
|
10
|
-
else if (line.startsWith('@@')) {
|
|
11
|
-
return colors.primary; // #00ccff (Cyan)
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
return colors.text; // #ffffff (White)
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
// Render diff viewer with colored lines
|
|
18
|
-
export function renderDiffViewer(options) {
|
|
19
|
-
const { x, y, width, diff, filePath } = options;
|
|
20
|
-
const lines = diff.split('\n');
|
|
21
|
-
// Calculate height
|
|
22
|
-
const height = 3 + lines.length; // Border + header + lines + border
|
|
23
|
-
// Draw rounded border with orange color
|
|
24
|
-
drawBox({
|
|
25
|
-
x,
|
|
26
|
-
y,
|
|
27
|
-
width,
|
|
28
|
-
height,
|
|
29
|
-
borderStyle: 'rounded',
|
|
30
|
-
borderColor: colors.warning, // #ffaa00 (Orange)
|
|
31
|
-
});
|
|
32
|
-
let currentY = y + 1;
|
|
33
|
-
// Header: "Changes to: {filePath}"
|
|
34
|
-
const headerLabelAttr = createColorAttr(colors.warning, true); // Orange, bold
|
|
35
|
-
const filePathAttr = createColorAttr(colors.text); // White
|
|
36
|
-
const headerLabel = 'Changes to: ';
|
|
37
|
-
screenBuffer.put({ x: x + 2, y: currentY, attr: headerLabelAttr }, headerLabel);
|
|
38
|
-
screenBuffer.put({
|
|
39
|
-
x: x + 2 + headerLabel.length,
|
|
40
|
-
y: currentY,
|
|
41
|
-
attr: filePathAttr
|
|
42
|
-
}, truncate(filePath, width - headerLabel.length - 6));
|
|
43
|
-
currentY += 2; // Header + empty line
|
|
44
|
-
// Render diff lines with appropriate colors
|
|
45
|
-
for (const line of lines) {
|
|
46
|
-
const lineColor = getLineColor(line);
|
|
47
|
-
const lineAttr = createColorAttr(lineColor);
|
|
48
|
-
// Truncate line if too long
|
|
49
|
-
const maxLineWidth = width - 4; // Account for borders and padding
|
|
50
|
-
const truncatedLine = truncate(line, maxLineWidth);
|
|
51
|
-
screenBuffer.put({ x: x + 2, y: currentY, attr: lineAttr }, truncatedLine);
|
|
52
|
-
currentY++;
|
|
53
|
-
}
|
|
54
|
-
// Return total height + bottom margin
|
|
55
|
-
return height + 1;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=diff-viewer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff-viewer.js","sourceRoot":"","sources":["../../../src/ui/components/diff-viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAUnG,sCAAsC;AACtC,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,kBAAkB;IAC3C,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB;IACvC,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,kBAAkB;IACxC,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,mBAAmB;IACnB,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,mCAAmC;IAEpE,wCAAwC;IACxC,OAAO,CAAC;QACN,CAAC;QACD,CAAC;QACD,KAAK;QACL,MAAM;QACN,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,mBAAmB;KACjD,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;IAErB,mCAAmC;IACnC,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe;IAC9E,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;IAE3D,MAAM,WAAW,GAAG,cAAc,CAAC;IACnC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,WAAW,CAAC,CAAC;IAChF,YAAY,CAAC,GAAG,CAAC;QACf,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM;QAC7B,CAAC,EAAE,QAAQ;QACX,IAAI,EAAE,YAAY;KACnB,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvD,QAAQ,IAAI,CAAC,CAAC,CAAC,sBAAsB;IAErC,4CAA4C;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAE5C,4BAA4B;QAC5B,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,kCAAkC;QAClE,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEnD,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;QAC3E,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,sCAAsC;IACtC,OAAO,MAAM,GAAG,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export interface InputBoxOptions {
|
|
2
|
-
x: number;
|
|
3
|
-
y: number;
|
|
4
|
-
width: number;
|
|
5
|
-
model: string;
|
|
6
|
-
autoAcceptMode: boolean;
|
|
7
|
-
placeholder?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface InputBoxCallbacks {
|
|
10
|
-
onSubmit: (value: string) => void;
|
|
11
|
-
onToggleAutoAccept: () => void;
|
|
12
|
-
onExit: () => void;
|
|
13
|
-
}
|
|
14
|
-
export declare function renderInputBox(options: InputBoxOptions): void;
|
|
15
|
-
export declare function getInput(x: number, y: number, width: number, placeholder: string, callbacks: InputBoxCallbacks): Promise<string>;
|
|
16
|
-
export declare function clearInputField(x: number, y: number, width: number): void;
|
|
17
|
-
export declare function showPlaceholder(x: number, y: number, width: number, placeholder: string): void;
|
|
18
|
-
//# sourceMappingURL=input-box.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-box.d.ts","sourceRoot":"","sources":["../../../src/ui/components/input-box.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,QA8EtD;AAGD,wBAAsB,QAAQ,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAyEjB;AAGD,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QASlE;AAGD,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAYvF"}
|