centaurus-cli 3.1.2 → 3.1.4
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.js +689 -155
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/defaultConfig.js +1 -4
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/models.js +6 -0
- package/dist/config/models.js.map +1 -1
- package/dist/config/slash-commands.js +66 -2
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/config/types.js +4 -4
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -1
- package/dist/services/ai-context-injector.js +109 -0
- package/dist/services/ai-context-injector.js.map +1 -1
- package/dist/services/ai-service-client.js +3 -2
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/background-task-manager.js +59 -0
- package/dist/services/background-task-manager.js.map +1 -1
- package/dist/services/local-chat-storage.js +2 -0
- package/dist/services/local-chat-storage.js.map +1 -1
- package/dist/services/skill-storage.js +141 -0
- package/dist/services/skill-storage.js.map +1 -0
- package/dist/services/sub-agent-manager.js +49 -8
- package/dist/services/sub-agent-manager.js.map +1 -1
- package/dist/services/warpify-detector.js +17 -5
- package/dist/services/warpify-detector.js.map +1 -1
- package/dist/tools/background-command.js +5 -2
- package/dist/tools/background-command.js.map +1 -1
- package/dist/tools/command.js +367 -109
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.js +23 -6
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/plan-mode.js +184 -336
- package/dist/tools/plan-mode.js.map +1 -1
- package/dist/tools/sub-agent.js +24 -5
- package/dist/tools/sub-agent.js.map +1 -1
- package/dist/tools/todo-list.js +157 -0
- package/dist/tools/todo-list.js.map +1 -0
- package/dist/types/skill.js +30 -0
- package/dist/types/skill.js.map +1 -0
- package/dist/ui/components/App.js +956 -162
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/AuthScreen.js +3 -1
- package/dist/ui/components/AuthScreen.js.map +1 -1
- package/dist/ui/components/AuthWelcomeScreen.js +3 -1
- package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
- package/dist/ui/components/CodeBlock.js +3 -1
- package/dist/ui/components/CodeBlock.js.map +1 -1
- package/dist/ui/components/CompactShellPreview.js +44 -0
- package/dist/ui/components/CompactShellPreview.js.map +1 -0
- package/dist/ui/components/ConfigViewer.js +3 -1
- package/dist/ui/components/ConfigViewer.js.map +1 -1
- package/dist/ui/components/ConfirmPrompt.js +3 -1
- package/dist/ui/components/ConfirmPrompt.js.map +1 -1
- package/dist/ui/components/ConnectionStatusMessage.js +3 -1
- package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
- package/dist/ui/components/DetailedPlanReviewScreen.js +84 -74
- package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
- package/dist/ui/components/DiffViewer.js +6 -3
- package/dist/ui/components/DiffViewer.js.map +1 -1
- package/dist/ui/components/FileCreationPreview.js.map +1 -1
- package/dist/ui/components/FileTagAutocomplete.js +4 -2
- package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
- package/dist/ui/components/InputBox.js +243 -40
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.js +5 -3
- package/dist/ui/components/InteractiveShell.js.map +1 -1
- package/dist/ui/components/KeyboardHelp.js +4 -1
- package/dist/ui/components/KeyboardHelp.js.map +1 -1
- package/dist/ui/components/LoadingIndicator.js +3 -1
- package/dist/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/ui/components/MCPAddScreen.js +63 -13
- package/dist/ui/components/MCPAddScreen.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +3 -1
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageDisplay.js +9 -7
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/ModelPicker.js +170 -0
- package/dist/ui/components/ModelPicker.js.map +1 -0
- package/dist/ui/components/MonitorModeAIPanel.js +3 -1
- package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
- package/dist/ui/components/PlanAcceptedMessage.js +12 -6
- package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
- package/dist/ui/components/PlanQuestionMessage.js +37 -0
- package/dist/ui/components/PlanQuestionMessage.js.map +1 -0
- package/dist/ui/components/PlanQuestionScreen.js +138 -0
- package/dist/ui/components/PlanQuestionScreen.js.map +1 -0
- package/dist/ui/components/PlanReviewScreen.js +7 -9
- package/dist/ui/components/PlanReviewScreen.js.map +1 -1
- package/dist/ui/components/RulesEditorScreen.js +65 -28
- package/dist/ui/components/RulesEditorScreen.js.map +1 -1
- package/dist/ui/components/SelectPrompt.js +3 -1
- package/dist/ui/components/SelectPrompt.js.map +1 -1
- package/dist/ui/components/SkillCreatorScreen.js +217 -0
- package/dist/ui/components/SkillCreatorScreen.js.map +1 -0
- package/dist/ui/components/SlashCommandAutocomplete.js +4 -2
- package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
- package/dist/ui/components/StatusBar.js +4 -2
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +5 -3
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/SubAgentListScreen.js +65 -0
- package/dist/ui/components/SubAgentListScreen.js.map +1 -0
- package/dist/ui/components/SubAgentViewScreen.js +123 -0
- package/dist/ui/components/SubAgentViewScreen.js.map +1 -0
- package/dist/ui/components/TaskCompletedMessage.js +40 -8
- package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
- package/dist/ui/components/TaskProgressIndicator.js +6 -4
- package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
- package/dist/ui/components/TextEditor.js +297 -0
- package/dist/ui/components/TextEditor.js.map +1 -0
- package/dist/ui/components/TodoListMessage.js +59 -0
- package/dist/ui/components/TodoListMessage.js.map +1 -0
- package/dist/ui/components/ToolExecutionMessage.js +134 -84
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/ToolExecutionStatus.js +3 -1
- package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
- package/dist/ui/components/WelcomeBanner.js +33 -33
- package/dist/ui/components/WelcomeBanner.js.map +1 -1
- package/dist/ui/components/WorkflowCreatorScreen.js +5 -3
- package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
- package/dist/ui/theme.js +97 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/utils/chat-history-limit.js +247 -0
- package/dist/ui/utils/chat-history-limit.js.map +1 -0
- package/dist/utils/chat-formatter.js +22 -9
- package/dist/utils/chat-formatter.js.map +1 -1
- package/dist/utils/git-stats.js +7 -5
- package/dist/utils/git-stats.js.map +1 -1
- package/dist/utils/input-classifier.js +11 -1
- package/dist/utils/input-classifier.js.map +1 -1
- package/dist/utils/output-truncation.js +175 -0
- package/dist/utils/output-truncation.js.map +1 -0
- package/dist/utils/rule-reference-resolver.js +3 -3
- package/dist/utils/rule-reference-resolver.js.map +1 -1
- package/dist/utils/tunnel-commands-manager.js +134 -0
- package/dist/utils/tunnel-commands-manager.js.map +1 -0
- package/package.json +91 -90
- package/postinstall.js +4 -11
- package/dist/ui/components/MultiLineInput.js +0 -255
- package/dist/ui/components/MultiLineInput.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ui/components/MultiLineInput.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\nimport { Box, Text, useInput } from 'ink';\r\n\r\n// Helper to determine if a character is a word boundary\r\nconst isWordBoundary = (char: string) => /[\\s\\n]/.test(char);\r\n\r\ninterface MultiLineInputProps {\r\n value?: string;\r\n onChange: (value: string) => void;\r\n onSubmit: (value: string) => void;\r\n placeholder?: string;\r\n isActive?: boolean;\r\n minHeight?: number;\r\n maxHeight?: number;\r\n submitOnEnter?: boolean;\r\n}\r\n\r\nconst getVisualLines = (text: string, width: number) => {\r\n const logicalLines = text.split('\\n');\r\n const visualLines: Array<{ start: number; end: number; isHardEnd: boolean }> = [];\r\n let currentOffset = 0;\r\n\r\n logicalLines.forEach((line, i) => {\r\n if (line.length === 0) {\r\n visualLines.push({ start: currentOffset, end: currentOffset, isHardEnd: true });\r\n currentOffset += 1;\r\n return;\r\n }\r\n\r\n let remaining = line;\r\n let lineStartOffset = currentOffset;\r\n\r\n while (remaining.length > 0) {\r\n let splitIndex = remaining.length;\r\n let isHardEnd = false;\r\n\r\n if (remaining.length > width) {\r\n splitIndex = width;\r\n const lastSpace = remaining.lastIndexOf(' ', width);\r\n if (lastSpace > 0) {\r\n splitIndex = lastSpace + 1;\r\n }\r\n } else {\r\n isHardEnd = true;\r\n }\r\n\r\n visualLines.push({\r\n start: lineStartOffset,\r\n end: lineStartOffset + splitIndex,\r\n isHardEnd: isHardEnd\r\n });\r\n\r\n lineStartOffset += splitIndex;\r\n remaining = remaining.slice(splitIndex);\r\n }\r\n\r\n currentOffset += line.length + (i < logicalLines.length - 1 ? 1 : 0);\r\n });\r\n\r\n return visualLines;\r\n};\r\n\r\nexport const MultiLineInput: React.FC<MultiLineInputProps> = ({\r\n value = '',\r\n onChange,\r\n onSubmit,\r\n placeholder = '',\r\n isActive = true,\r\n minHeight = 3,\r\n maxHeight = 10,\r\n submitOnEnter = true\r\n}) => {\r\n // Internal cursor state\r\n const [cursorOffset, setCursorOffset] = useState(0);\r\n\r\n // Refs to prevent stale closures in useInput\r\n const valueRef = useRef(value);\r\n const cursorOffsetRef = useRef(cursorOffset);\r\n\r\n // Sync refs with props/state\r\n useEffect(() => {\r\n valueRef.current = value;\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n cursorOffsetRef.current = cursorOffset;\r\n }, [cursorOffset]);\r\n\r\n // Ensure cursor stays within bounds if value changes externally\r\n useEffect(() => {\r\n if (cursorOffset > value.length) {\r\n setCursorOffset(value.length);\r\n }\r\n }, [value, cursorOffset]);\r\n\r\n useInput((input, key) => {\r\n if (!isActive) return;\r\n\r\n const currentValue = valueRef.current;\r\n const currentCursorOffset = cursorOffsetRef.current;\r\n const normalizedInput = input ? input.toLowerCase() : '';\r\n const isTerminalShiftEnterSequence =\r\n input === '\\u001b\\r' ||\r\n input === '\\u001b\\n' ||\r\n normalizedInput === '\\u001b[13;2u' ||\r\n normalizedInput === '\\u001b[13;2~' ||\r\n normalizedInput === '\\u001b[27;2;13~';\r\n const isEnterEvent = key.return || isTerminalShiftEnterSequence;\r\n\r\n // Handle Backspace\r\n if (key.backspace || key.delete) {\r\n if (currentCursorOffset > 0) {\r\n const newValue = currentValue.slice(0, currentCursorOffset - 1) + currentValue.slice(currentCursorOffset);\r\n onChange(newValue);\r\n setCursorOffset(currentCursorOffset - 1);\r\n }\r\n return;\r\n }\r\n\r\n // Handle Return (Submit or Newline)\r\n if (isEnterEvent && (input.length <= 1 || isTerminalShiftEnterSequence)) {\r\n const isBackslashEnterFallback =\r\n !key.shift &&\r\n !key.ctrl &&\r\n !key.meta &&\r\n !isTerminalShiftEnterSequence &&\r\n currentCursorOffset > 0 &&\r\n currentValue[currentCursorOffset - 1] === '\\\\';\r\n\r\n const shouldInsertNewline =\r\n !submitOnEnter ||\r\n key.shift ||\r\n key.ctrl ||\r\n key.meta ||\r\n input === '\\n' ||\r\n isTerminalShiftEnterSequence ||\r\n isBackslashEnterFallback;\r\n\r\n if (shouldInsertNewline) {\r\n const newValue = isBackslashEnterFallback\r\n ? currentValue.slice(0, currentCursorOffset - 1) + '\\n' + currentValue.slice(currentCursorOffset)\r\n : currentValue.slice(0, currentCursorOffset) + '\\n' + currentValue.slice(currentCursorOffset);\r\n const newOffset = isBackslashEnterFallback ? currentCursorOffset : currentCursorOffset + 1;\r\n onChange(newValue);\r\n setCursorOffset(newOffset);\r\n } else {\r\n onSubmit(currentValue);\r\n }\r\n return;\r\n }\r\n\r\n // Handle Arrows\r\n if (key.upArrow) {\r\n // Simple up: move back one line roughly?\r\n // Or use visual lines logic from InputBox for robust navigation\r\n const width = (process.stdout.columns || 80) - 4; // approximate width correction\r\n const visualLines = getVisualLines(currentValue, width);\r\n\r\n let currentLineIdx = visualLines.findIndex(line =>\r\n (currentCursorOffset >= line.start && currentCursorOffset < line.end) ||\r\n (currentCursorOffset === line.end && line.isHardEnd)\r\n );\r\n\r\n if (currentLineIdx === -1 && currentCursorOffset === currentValue.length) {\r\n currentLineIdx = visualLines.length - 1;\r\n }\r\n\r\n if (currentLineIdx > 0) {\r\n const currentLine = visualLines[currentLineIdx];\r\n const targetLine = visualLines[currentLineIdx - 1];\r\n const offsetInLine = currentCursorOffset - currentLine.start;\r\n const newOffset = targetLine.start + Math.min(offsetInLine, targetLine.end - targetLine.start);\r\n setCursorOffset(newOffset);\r\n } else {\r\n setCursorOffset(0);\r\n }\r\n return;\r\n }\r\n\r\n if (key.downArrow) {\r\n const width = (process.stdout.columns || 80) - 4;\r\n const visualLines = getVisualLines(currentValue, width);\r\n\r\n let currentLineIdx = visualLines.findIndex(line =>\r\n (currentCursorOffset >= line.start && currentCursorOffset < line.end) ||\r\n (currentCursorOffset === line.end && line.isHardEnd)\r\n );\r\n\r\n if (currentLineIdx === -1 && currentCursorOffset === currentValue.length) {\r\n currentLineIdx = visualLines.length - 1;\r\n }\r\n\r\n if (currentLineIdx < visualLines.length - 1) {\r\n const currentLine = visualLines[currentLineIdx];\r\n const targetLine = visualLines[currentLineIdx + 1];\r\n const offsetInLine = currentCursorOffset - currentLine.start;\r\n const newOffset = targetLine.start + Math.min(offsetInLine, targetLine.end - targetLine.start);\r\n setCursorOffset(newOffset);\r\n } else {\r\n setCursorOffset(currentValue.length);\r\n }\r\n return;\r\n }\r\n\r\n\r\n\r\n if (key.leftArrow) {\r\n if (currentCursorOffset > 0) {\r\n let newOffset = currentCursorOffset;\r\n if (key.ctrl || key.meta) {\r\n // Word navigation backwards\r\n // 1. Skip whitespace backwards\r\n while (newOffset > 0 && isWordBoundary(currentValue[newOffset - 1])) {\r\n newOffset--;\r\n }\r\n // 2. Skip non-whitespace backwards\r\n while (newOffset > 0 && !isWordBoundary(currentValue[newOffset - 1])) {\r\n newOffset--;\r\n }\r\n } else {\r\n newOffset--;\r\n }\r\n setCursorOffset(newOffset);\r\n }\r\n return;\r\n }\r\n\r\n if (key.rightArrow) {\r\n if (currentCursorOffset < currentValue.length) {\r\n let newOffset = currentCursorOffset;\r\n if (key.ctrl || key.meta) {\r\n // Word navigation forwards\r\n // 1. Skip non-whitespace forwards\r\n while (newOffset < currentValue.length && !isWordBoundary(currentValue[newOffset])) {\r\n newOffset++;\r\n }\r\n // 2. Skip whitespace forwards\r\n while (newOffset < currentValue.length && isWordBoundary(currentValue[newOffset])) {\r\n newOffset++;\r\n }\r\n } else {\r\n newOffset++;\r\n }\r\n setCursorOffset(newOffset);\r\n }\r\n return;\r\n }\r\n\r\n // Home (Start of Line) / End (End of Line)\r\n // Note: Ink might not strictly type home/end in all versions, but we can check if they exist\r\n // or check for common ANSI sequences if raw input was available (but useInput gives processed keys)\r\n // We'll trust key.home/end if available, otherwise rely on OS default behavior which usually sends these keys.\r\n // @ts-ignore - Ink types might be missing these but they often exist at runtime\r\n if (key.home) {\r\n // Find start of current line\r\n const width = (process.stdout.columns || 80) - 4;\r\n const visualLines = getVisualLines(currentValue, width);\r\n const currentLine = visualLines.find(line =>\r\n (currentCursorOffset >= line.start && currentCursorOffset < line.end) ||\r\n (currentCursorOffset === line.end && line.isHardEnd)\r\n );\r\n if (currentLine) {\r\n setCursorOffset(currentLine.start);\r\n } else {\r\n setCursorOffset(0);\r\n }\r\n return;\r\n }\r\n\r\n // @ts-ignore\r\n if (key.end) {\r\n // Find end of current line\r\n const width = (process.stdout.columns || 80) - 4;\r\n const visualLines = getVisualLines(currentValue, width);\r\n const currentLine = visualLines.find(line =>\r\n (currentCursorOffset >= line.start && currentCursorOffset < line.end) ||\r\n (currentCursorOffset === line.end && line.isHardEnd)\r\n );\r\n if (currentLine) {\r\n setCursorOffset(currentLine.end);\r\n } else {\r\n setCursorOffset(currentValue.length);\r\n }\r\n return;\r\n }\r\n\r\n // Regular Input (including paste)\r\n if (input) {\r\n // Handle paste (newlines are \\r\\n or \\r -> \\n)\r\n const cleanedInput = input.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\r\n\r\n const newValue = currentValue.slice(0, currentCursorOffset) + cleanedInput + currentValue.slice(currentCursorOffset);\r\n onChange(newValue);\r\n setCursorOffset(currentCursorOffset + cleanedInput.length);\r\n }\r\n });\r\n\r\n // Rendering\r\n const termWidth = (process.stdout.columns || 80) - 4; // Padding/Border adjustment\r\n const visualLines = getVisualLines(value, termWidth);\r\n\r\n // Scrolling logic\r\n // We want to keep cursor visible.\r\n // Calculate cursor Visual Line\r\n let cursorVisualLine = 0;\r\n for (let i = 0; i < visualLines.length; i++) {\r\n if (cursorOffset >= visualLines[i].start && cursorOffset <= visualLines[i].end) {\r\n cursorVisualLine = i;\r\n break;\r\n }\r\n }\r\n if (cursorOffset === value.length && visualLines.length > 0) {\r\n cursorVisualLine = visualLines.length - 1;\r\n }\r\n\r\n const totalLines = visualLines.length;\r\n\r\n // Simple scrolling: allow defining min/max height in props\r\n const height = Math.min(Math.max(totalLines, minHeight), maxHeight);\r\n\r\n let startLine = 0;\r\n if (totalLines > height) {\r\n if (cursorVisualLine < height) {\r\n startLine = 0;\r\n } else {\r\n startLine = cursorVisualLine - height + 1;\r\n }\r\n }\r\n const endLine = Math.min(startLine + height, totalLines);\r\n\r\n const visibleLines = visualLines.slice(startLine, endLine);\r\n const topIndicatorCount = startLine > 0 ? 1 : 0;\r\n const bottomIndicatorCount = endLine < totalLines ? 1 : 0;\r\n const fillerLineCount = Math.max(0, height - visibleLines.length - topIndicatorCount - bottomIndicatorCount);\r\n\r\n if (value.length === 0 && placeholder) {\r\n return (\r\n <Box flexDirection=\"column\" width=\"100%\" minHeight={height}>\r\n <Text color=\"gray\">{placeholder}</Text>\r\n {Array.from({ length: Math.max(0, height - 1) }, (_, idx) => (\r\n <Text key={`placeholder-pad-${idx}`}> </Text>\r\n ))}\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box flexDirection=\"column\" width=\"100%\" minHeight={height}>\r\n {startLine > 0 && <Text color=\"gray\">↑</Text>}\r\n {visibleLines.map((vLine, idx) => {\r\n const lineContent = value.slice(vLine.start, vLine.end);\r\n const isCursorLine = cursorOffset >= vLine.start && cursorOffset <= vLine.end;\r\n const cursorCol = isCursorLine ? cursorOffset - vLine.start : -1;\r\n\r\n if (!isActive) {\r\n return <Text key={idx}>{lineContent}</Text>;\r\n }\r\n\r\n const chars = lineContent.split('');\r\n const renderedChars = chars.map((char, charIdx) => {\r\n if (isCursorLine && charIdx === cursorCol) {\r\n return <Text key={charIdx} inverse>{char}</Text>;\r\n }\r\n return <Text key={charIdx}>{char}</Text>;\r\n });\r\n\r\n if (isCursorLine && cursorCol === lineContent.length) {\r\n renderedChars.push(<Text key=\"cursor\" inverse> </Text>);\r\n }\r\n\r\n if (renderedChars.length === 0) {\r\n return <Text key={idx}> </Text>;\r\n }\r\n\r\n return <Text key={idx}>{renderedChars}</Text>;\r\n })}\r\n {endLine < totalLines && <Text color=\"gray\">↓</Text>}\r\n {Array.from({ length: fillerLineCount }, (_, idx) => (\r\n <Text key={`pad-${idx}`}> </Text>\r\n ))}\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"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","names":["visualLines"]}
|