mistagent 0.1.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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/src/api/auth.d.ts +7 -0
- package/dist/src/api/auth.d.ts.map +1 -0
- package/dist/src/api/auth.js +16 -0
- package/dist/src/api/auth.js.map +1 -0
- package/dist/src/api/chat.d.ts +8 -0
- package/dist/src/api/chat.d.ts.map +1 -0
- package/dist/src/api/chat.js +14 -0
- package/dist/src/api/chat.js.map +1 -0
- package/dist/src/api/client.d.ts +22 -0
- package/dist/src/api/client.d.ts.map +1 -0
- package/dist/src/api/client.js +140 -0
- package/dist/src/api/client.js.map +1 -0
- package/dist/src/api/commands.d.ts +8 -0
- package/dist/src/api/commands.d.ts.map +1 -0
- package/dist/src/api/commands.js +13 -0
- package/dist/src/api/commands.js.map +1 -0
- package/dist/src/api/models.d.ts +9 -0
- package/dist/src/api/models.d.ts.map +1 -0
- package/dist/src/api/models.js +13 -0
- package/dist/src/api/models.js.map +1 -0
- package/dist/src/api/sessions.d.ts +25 -0
- package/dist/src/api/sessions.d.ts.map +1 -0
- package/dist/src/api/sessions.js +26 -0
- package/dist/src/api/sessions.js.map +1 -0
- package/dist/src/api/tools.d.ts +7 -0
- package/dist/src/api/tools.d.ts.map +1 -0
- package/dist/src/api/tools.js +8 -0
- package/dist/src/api/tools.js.map +1 -0
- package/dist/src/components/App.d.ts +22 -0
- package/dist/src/components/App.d.ts.map +1 -0
- package/dist/src/components/App.js +61 -0
- package/dist/src/components/App.js.map +1 -0
- package/dist/src/components/AppLayout.d.ts +8 -0
- package/dist/src/components/AppLayout.d.ts.map +1 -0
- package/dist/src/components/AppLayout.js +18 -0
- package/dist/src/components/AppLayout.js.map +1 -0
- package/dist/src/components/Composer.d.ts +8 -0
- package/dist/src/components/Composer.d.ts.map +1 -0
- package/dist/src/components/Composer.js +294 -0
- package/dist/src/components/Composer.js.map +1 -0
- package/dist/src/components/Footer.d.ts +10 -0
- package/dist/src/components/Footer.d.ts.map +1 -0
- package/dist/src/components/Footer.js +34 -0
- package/dist/src/components/Footer.js.map +1 -0
- package/dist/src/components/Header.d.ts +3 -0
- package/dist/src/components/Header.d.ts.map +1 -0
- package/dist/src/components/Header.js +99 -0
- package/dist/src/components/Header.js.map +1 -0
- package/dist/src/components/HistoryItemDisplay.d.ts +8 -0
- package/dist/src/components/HistoryItemDisplay.d.ts.map +1 -0
- package/dist/src/components/HistoryItemDisplay.js +32 -0
- package/dist/src/components/HistoryItemDisplay.js.map +1 -0
- package/dist/src/components/InputPrompt.d.ts +11 -0
- package/dist/src/components/InputPrompt.d.ts.map +1 -0
- package/dist/src/components/InputPrompt.js +12 -0
- package/dist/src/components/InputPrompt.js.map +1 -0
- package/dist/src/components/LoadingIndicator.d.ts +8 -0
- package/dist/src/components/LoadingIndicator.d.ts.map +1 -0
- package/dist/src/components/LoadingIndicator.js +17 -0
- package/dist/src/components/LoadingIndicator.js.map +1 -0
- package/dist/src/components/LoginPrompt.d.ts +8 -0
- package/dist/src/components/LoginPrompt.d.ts.map +1 -0
- package/dist/src/components/LoginPrompt.js +76 -0
- package/dist/src/components/LoginPrompt.js.map +1 -0
- package/dist/src/components/MainContent.d.ts +3 -0
- package/dist/src/components/MainContent.d.ts.map +1 -0
- package/dist/src/components/MainContent.js +22 -0
- package/dist/src/components/MainContent.js.map +1 -0
- package/dist/src/components/ModelPicker.d.ts +3 -0
- package/dist/src/components/ModelPicker.d.ts.map +1 -0
- package/dist/src/components/ModelPicker.js +119 -0
- package/dist/src/components/ModelPicker.js.map +1 -0
- package/dist/src/components/MultiLineInput.d.ts +19 -0
- package/dist/src/components/MultiLineInput.d.ts.map +1 -0
- package/dist/src/components/MultiLineInput.js +108 -0
- package/dist/src/components/MultiLineInput.js.map +1 -0
- package/dist/src/components/SessionPicker.d.ts +3 -0
- package/dist/src/components/SessionPicker.d.ts.map +1 -0
- package/dist/src/components/SessionPicker.js +131 -0
- package/dist/src/components/SessionPicker.js.map +1 -0
- package/dist/src/components/SuggestionsDisplay.d.ts +16 -0
- package/dist/src/components/SuggestionsDisplay.d.ts.map +1 -0
- package/dist/src/components/SuggestionsDisplay.js +34 -0
- package/dist/src/components/SuggestionsDisplay.js.map +1 -0
- package/dist/src/components/messages/AssistantMessage.d.ts +8 -0
- package/dist/src/components/messages/AssistantMessage.d.ts.map +1 -0
- package/dist/src/components/messages/AssistantMessage.js +9 -0
- package/dist/src/components/messages/AssistantMessage.js.map +1 -0
- package/dist/src/components/messages/CommandResult.d.ts +8 -0
- package/dist/src/components/messages/CommandResult.d.ts.map +1 -0
- package/dist/src/components/messages/CommandResult.js +7 -0
- package/dist/src/components/messages/CommandResult.js.map +1 -0
- package/dist/src/components/messages/ErrorMessage.d.ts +7 -0
- package/dist/src/components/messages/ErrorMessage.d.ts.map +1 -0
- package/dist/src/components/messages/ErrorMessage.js +7 -0
- package/dist/src/components/messages/ErrorMessage.js.map +1 -0
- package/dist/src/components/messages/InfoMessage.d.ts +9 -0
- package/dist/src/components/messages/InfoMessage.d.ts.map +1 -0
- package/dist/src/components/messages/InfoMessage.js +8 -0
- package/dist/src/components/messages/InfoMessage.js.map +1 -0
- package/dist/src/components/messages/ModelMessage.d.ts +8 -0
- package/dist/src/components/messages/ModelMessage.d.ts.map +1 -0
- package/dist/src/components/messages/ModelMessage.js +7 -0
- package/dist/src/components/messages/ModelMessage.js.map +1 -0
- package/dist/src/components/messages/SessionMessage.d.ts +8 -0
- package/dist/src/components/messages/SessionMessage.d.ts.map +1 -0
- package/dist/src/components/messages/SessionMessage.js +12 -0
- package/dist/src/components/messages/SessionMessage.js.map +1 -0
- package/dist/src/components/messages/ToolCallMessage.d.ts +9 -0
- package/dist/src/components/messages/ToolCallMessage.d.ts.map +1 -0
- package/dist/src/components/messages/ToolCallMessage.js +14 -0
- package/dist/src/components/messages/ToolCallMessage.js.map +1 -0
- package/dist/src/components/messages/UserMessage.d.ts +7 -0
- package/dist/src/components/messages/UserMessage.d.ts.map +1 -0
- package/dist/src/components/messages/UserMessage.js +9 -0
- package/dist/src/components/messages/UserMessage.js.map +1 -0
- package/dist/src/components/shared/HorizontalLine.d.ts +11 -0
- package/dist/src/components/shared/HorizontalLine.d.ts.map +1 -0
- package/dist/src/components/shared/HorizontalLine.js +10 -0
- package/dist/src/components/shared/HorizontalLine.js.map +1 -0
- package/dist/src/components/shared/MarkdownRenderer.d.ts +7 -0
- package/dist/src/components/shared/MarkdownRenderer.d.ts.map +1 -0
- package/dist/src/components/shared/MarkdownRenderer.js +33 -0
- package/dist/src/components/shared/MarkdownRenderer.js.map +1 -0
- package/dist/src/components/shared/Spinner.d.ts +8 -0
- package/dist/src/components/shared/Spinner.d.ts.map +1 -0
- package/dist/src/components/shared/Spinner.js +7 -0
- package/dist/src/components/shared/Spinner.js.map +1 -0
- package/dist/src/components/shared/TextInput.d.ts +10 -0
- package/dist/src/components/shared/TextInput.d.ts.map +1 -0
- package/dist/src/components/shared/TextInput.js +110 -0
- package/dist/src/components/shared/TextInput.js.map +1 -0
- package/dist/src/contexts/AppContext.d.ts +21 -0
- package/dist/src/contexts/AppContext.d.ts.map +1 -0
- package/dist/src/contexts/AppContext.js +16 -0
- package/dist/src/contexts/AppContext.js.map +1 -0
- package/dist/src/contexts/ChatContext.d.ts +68 -0
- package/dist/src/contexts/ChatContext.d.ts.map +1 -0
- package/dist/src/contexts/ChatContext.js +158 -0
- package/dist/src/contexts/ChatContext.js.map +1 -0
- package/dist/src/contexts/KeypressContext.d.ts +47 -0
- package/dist/src/contexts/KeypressContext.d.ts.map +1 -0
- package/dist/src/contexts/KeypressContext.js +792 -0
- package/dist/src/contexts/KeypressContext.js.map +1 -0
- package/dist/src/contexts/ModelContext.d.ts +20 -0
- package/dist/src/contexts/ModelContext.d.ts.map +1 -0
- package/dist/src/contexts/ModelContext.js +42 -0
- package/dist/src/contexts/ModelContext.js.map +1 -0
- package/dist/src/contexts/PasteContext.d.ts +8 -0
- package/dist/src/contexts/PasteContext.d.ts.map +1 -0
- package/dist/src/contexts/PasteContext.js +12 -0
- package/dist/src/contexts/PasteContext.js.map +1 -0
- package/dist/src/contexts/SessionContext.d.ts +19 -0
- package/dist/src/contexts/SessionContext.d.ts.map +1 -0
- package/dist/src/contexts/SessionContext.js +56 -0
- package/dist/src/contexts/SessionContext.js.map +1 -0
- package/dist/src/contexts/UIContext.d.ts +15 -0
- package/dist/src/contexts/UIContext.d.ts.map +1 -0
- package/dist/src/contexts/UIContext.js +16 -0
- package/dist/src/contexts/UIContext.js.map +1 -0
- package/dist/src/hooks/useChat.d.ts +11 -0
- package/dist/src/hooks/useChat.d.ts.map +1 -0
- package/dist/src/hooks/useChat.js +146 -0
- package/dist/src/hooks/useChat.js.map +1 -0
- package/dist/src/hooks/useFileCompletion.d.ts +8 -0
- package/dist/src/hooks/useFileCompletion.d.ts.map +1 -0
- package/dist/src/hooks/useFileCompletion.js +75 -0
- package/dist/src/hooks/useFileCompletion.js.map +1 -0
- package/dist/src/hooks/useInputHistory.d.ts +6 -0
- package/dist/src/hooks/useInputHistory.d.ts.map +1 -0
- package/dist/src/hooks/useInputHistory.js +46 -0
- package/dist/src/hooks/useInputHistory.js.map +1 -0
- package/dist/src/hooks/useKeypress.d.ts +16 -0
- package/dist/src/hooks/useKeypress.d.ts.map +1 -0
- package/dist/src/hooks/useKeypress.js +23 -0
- package/dist/src/hooks/useKeypress.js.map +1 -0
- package/dist/src/hooks/useLoadingIndicator.d.ts +5 -0
- package/dist/src/hooks/useLoadingIndicator.d.ts.map +1 -0
- package/dist/src/hooks/useLoadingIndicator.js +31 -0
- package/dist/src/hooks/useLoadingIndicator.js.map +1 -0
- package/dist/src/hooks/useMultiLineInput.d.ts +37 -0
- package/dist/src/hooks/useMultiLineInput.d.ts.map +1 -0
- package/dist/src/hooks/useMultiLineInput.js +202 -0
- package/dist/src/hooks/useMultiLineInput.js.map +1 -0
- package/dist/src/hooks/usePasteBuffer.d.ts +10 -0
- package/dist/src/hooks/usePasteBuffer.d.ts.map +1 -0
- package/dist/src/hooks/usePasteBuffer.js +90 -0
- package/dist/src/hooks/usePasteBuffer.js.map +1 -0
- package/dist/src/hooks/useSlashCommand.d.ts +6 -0
- package/dist/src/hooks/useSlashCommand.d.ts.map +1 -0
- package/dist/src/hooks/useSlashCommand.js +198 -0
- package/dist/src/hooks/useSlashCommand.js.map +1 -0
- package/dist/src/hooks/useStdinInterceptor.d.ts +2 -0
- package/dist/src/hooks/useStdinInterceptor.d.ts.map +1 -0
- package/dist/src/hooks/useStdinInterceptor.js +85 -0
- package/dist/src/hooks/useStdinInterceptor.js.map +1 -0
- package/dist/src/hooks/useSymbolCompletion.d.ts +10 -0
- package/dist/src/hooks/useSymbolCompletion.d.ts.map +1 -0
- package/dist/src/hooks/useSymbolCompletion.js +65 -0
- package/dist/src/hooks/useSymbolCompletion.js.map +1 -0
- package/dist/src/hooks/useTextBuffer.d.ts +37 -0
- package/dist/src/hooks/useTextBuffer.d.ts.map +1 -0
- package/dist/src/hooks/useTextBuffer.js +627 -0
- package/dist/src/hooks/useTextBuffer.js.map +1 -0
- package/dist/src/main.d.ts +2 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +152 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/tools/code-analyzer/config/ignore-service.d.ts +2 -0
- package/dist/src/tools/code-analyzer/config/ignore-service.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/config/ignore-service.js +209 -0
- package/dist/src/tools/code-analyzer/config/ignore-service.js.map +1 -0
- package/dist/src/tools/code-analyzer/config/supported-languages.d.ts +13 -0
- package/dist/src/tools/code-analyzer/config/supported-languages.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/config/supported-languages.js +17 -0
- package/dist/src/tools/code-analyzer/config/supported-languages.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/graph/graph.d.ts +3 -0
- package/dist/src/tools/code-analyzer/core/graph/graph.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/graph/graph.js +67 -0
- package/dist/src/tools/code-analyzer/core/graph/graph.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/graph/types.d.ts +62 -0
- package/dist/src/tools/code-analyzer/core/graph/types.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/graph/types.js +2 -0
- package/dist/src/tools/code-analyzer/core/graph/types.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/ast-cache.d.ts +12 -0
- package/dist/src/tools/code-analyzer/core/ingestion/ast-cache.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/ast-cache.js +35 -0
- package/dist/src/tools/code-analyzer/core/ingestion/ast-cache.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/call-processor.d.ts +16 -0
- package/dist/src/tools/code-analyzer/core/ingestion/call-processor.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/call-processor.js +328 -0
- package/dist/src/tools/code-analyzer/core/ingestion/call-processor.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/community-processor.d.ts +40 -0
- package/dist/src/tools/code-analyzer/core/ingestion/community-processor.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/community-processor.js +328 -0
- package/dist/src/tools/code-analyzer/core/ingestion/community-processor.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/entry-point-scoring.d.ts +40 -0
- package/dist/src/tools/code-analyzer/core/ingestion/entry-point-scoring.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/entry-point-scoring.js +236 -0
- package/dist/src/tools/code-analyzer/core/ingestion/entry-point-scoring.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/filesystem-walker.d.ts +29 -0
- package/dist/src/tools/code-analyzer/core/ingestion/filesystem-walker.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/filesystem-walker.js +81 -0
- package/dist/src/tools/code-analyzer/core/ingestion/filesystem-walker.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/framework-detection.d.ts +39 -0
- package/dist/src/tools/code-analyzer/core/ingestion/framework-detection.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/framework-detection.js +184 -0
- package/dist/src/tools/code-analyzer/core/ingestion/framework-detection.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/heritage-processor.d.ts +21 -0
- package/dist/src/tools/code-analyzer/core/ingestion/heritage-processor.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/heritage-processor.js +198 -0
- package/dist/src/tools/code-analyzer/core/ingestion/heritage-processor.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/import-processor.d.ts +39 -0
- package/dist/src/tools/code-analyzer/core/ingestion/import-processor.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/import-processor.js +791 -0
- package/dist/src/tools/code-analyzer/core/ingestion/import-processor.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/parsing-processor.d.ts +16 -0
- package/dist/src/tools/code-analyzer/core/ingestion/parsing-processor.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/parsing-processor.js +296 -0
- package/dist/src/tools/code-analyzer/core/ingestion/parsing-processor.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/pipeline.d.ts +3 -0
- package/dist/src/tools/code-analyzer/core/ingestion/pipeline.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/pipeline.js +309 -0
- package/dist/src/tools/code-analyzer/core/ingestion/pipeline.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/process-processor.d.ts +52 -0
- package/dist/src/tools/code-analyzer/core/ingestion/process-processor.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/process-processor.js +310 -0
- package/dist/src/tools/code-analyzer/core/ingestion/process-processor.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/structure-processor.d.ts +3 -0
- package/dist/src/tools/code-analyzer/core/ingestion/structure-processor.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/structure-processor.js +37 -0
- package/dist/src/tools/code-analyzer/core/ingestion/structure-processor.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/symbol-table.d.ts +34 -0
- package/dist/src/tools/code-analyzer/core/ingestion/symbol-table.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/symbol-table.js +39 -0
- package/dist/src/tools/code-analyzer/core/ingestion/symbol-table.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/tree-sitter-queries.d.ts +13 -0
- package/dist/src/tools/code-analyzer/core/ingestion/tree-sitter-queries.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/tree-sitter-queries.js +355 -0
- package/dist/src/tools/code-analyzer/core/ingestion/tree-sitter-queries.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/utils.d.ts +11 -0
- package/dist/src/tools/code-analyzer/core/ingestion/utils.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/utils.js +48 -0
- package/dist/src/tools/code-analyzer/core/ingestion/utils.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/parse-worker.d.ts +59 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/parse-worker.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/parse-worker.js +538 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/parse-worker.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/worker-pool.d.ts +17 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/worker-pool.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/worker-pool.js +121 -0
- package/dist/src/tools/code-analyzer/core/ingestion/workers/worker-pool.js.map +1 -0
- package/dist/src/tools/code-analyzer/core/tree-sitter/parser-loader.d.ts +5 -0
- package/dist/src/tools/code-analyzer/core/tree-sitter/parser-loader.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/core/tree-sitter/parser-loader.js +45 -0
- package/dist/src/tools/code-analyzer/core/tree-sitter/parser-loader.js.map +1 -0
- package/dist/src/tools/code-analyzer/index.d.ts +17 -0
- package/dist/src/tools/code-analyzer/index.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/index.js +15 -0
- package/dist/src/tools/code-analyzer/index.js.map +1 -0
- package/dist/src/tools/code-analyzer/lib/utils.d.ts +2 -0
- package/dist/src/tools/code-analyzer/lib/utils.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/lib/utils.js +4 -0
- package/dist/src/tools/code-analyzer/lib/utils.js.map +1 -0
- package/dist/src/tools/code-analyzer/types/pipeline.d.ts +33 -0
- package/dist/src/tools/code-analyzer/types/pipeline.d.ts.map +1 -0
- package/dist/src/tools/code-analyzer/types/pipeline.js +19 -0
- package/dist/src/tools/code-analyzer/types/pipeline.js.map +1 -0
- package/dist/src/types/api.d.ts +124 -0
- package/dist/src/types/api.d.ts.map +1 -0
- package/dist/src/types/api.js +3 -0
- package/dist/src/types/api.js.map +1 -0
- package/dist/src/types/history.d.ts +49 -0
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +10 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/utils/colors.d.ts +40 -0
- package/dist/src/utils/colors.d.ts.map +1 -0
- package/dist/src/utils/colors.js +48 -0
- package/dist/src/utils/colors.js.map +1 -0
- package/dist/src/utils/config.d.ts +13 -0
- package/dist/src/utils/config.d.ts.map +1 -0
- package/dist/src/utils/config.js +74 -0
- package/dist/src/utils/config.js.map +1 -0
- package/dist/src/utils/constants.d.ts +8 -0
- package/dist/src/utils/constants.d.ts.map +1 -0
- package/dist/src/utils/constants.js +48 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/fileRef.d.ts +26 -0
- package/dist/src/utils/fileRef.d.ts.map +1 -0
- package/dist/src/utils/fileRef.js +305 -0
- package/dist/src/utils/fileRef.js.map +1 -0
- package/dist/src/utils/formatters.d.ts +4 -0
- package/dist/src/utils/formatters.d.ts.map +1 -0
- package/dist/src/utils/formatters.js +18 -0
- package/dist/src/utils/formatters.js.map +1 -0
- package/dist/src/utils/pasteTransform.d.ts +37 -0
- package/dist/src/utils/pasteTransform.d.ts.map +1 -0
- package/dist/src/utils/pasteTransform.js +161 -0
- package/dist/src/utils/pasteTransform.js.map +1 -0
- package/dist/src/utils/pasteUtils.d.ts +7 -0
- package/dist/src/utils/pasteUtils.d.ts.map +1 -0
- package/dist/src/utils/pasteUtils.js +33 -0
- package/dist/src/utils/pasteUtils.js.map +1 -0
- package/dist/src/utils/textUtils.d.ts +25 -0
- package/dist/src/utils/textUtils.d.ts.map +1 -0
- package/dist/src/utils/textUtils.js +107 -0
- package/dist/src/utils/textUtils.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface LoginPromptProps {
|
|
3
|
+
onLogin: (username: string, password: string) => Promise<void>;
|
|
4
|
+
error?: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare const LoginPrompt: React.FC<LoginPromptProps>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=LoginPrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoginPrompt.d.ts","sourceRoot":"","sources":["../../../src/components/LoginPrompt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAYhE,UAAU,gBAAgB;IACxB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA2ED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAuIlD,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { palette } from '../utils/colors.js';
|
|
5
|
+
import { BANNER_LINES, BANNER_GRADIENT, MASCOT_LINES, VERSION, } from '../utils/constants.js';
|
|
6
|
+
import { useKeypressContext, KeypressPriority } from '../contexts/KeypressContext.js';
|
|
7
|
+
// ── Spinner ──────────────────────────────────────────────
|
|
8
|
+
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
9
|
+
const Spinner = ({ label }) => {
|
|
10
|
+
const [frame, setFrame] = useState(0);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const id = setInterval(() => setFrame((f) => (f + 1) % SPINNER_FRAMES.length), 80);
|
|
13
|
+
return () => clearInterval(id);
|
|
14
|
+
}, []);
|
|
15
|
+
return (_jsxs(Text, { color: palette.primary, children: [SPINNER_FRAMES[frame], " ", _jsx(Text, { color: palette.textMuted, children: label })] }));
|
|
16
|
+
};
|
|
17
|
+
// ── SimpleInput ──────────────────────────────────────────
|
|
18
|
+
const SimpleInput = ({ value, onChange, onSubmit, mask, placeholder }) => {
|
|
19
|
+
const { subscribe, unsubscribe } = useKeypressContext();
|
|
20
|
+
const handler = useCallback((key) => {
|
|
21
|
+
if (key.name === 'return' && !key.shift) {
|
|
22
|
+
onSubmit(value);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (key.name === 'backspace') {
|
|
26
|
+
onChange(value.slice(0, -1));
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
if (key.ctrl && key.name === 'u') {
|
|
30
|
+
onChange('');
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
if (key.insertable && key.sequence.length > 0 && !key.ctrl && !key.alt && !key.cmd) {
|
|
34
|
+
onChange(value + key.sequence);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}, [value, onChange, onSubmit]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
subscribe(handler, KeypressPriority.High);
|
|
41
|
+
return () => unsubscribe(handler);
|
|
42
|
+
}, [handler, subscribe, unsubscribe]);
|
|
43
|
+
const display = mask ? mask.repeat(value.length) : value;
|
|
44
|
+
const showPlaceholder = value.length === 0 && placeholder;
|
|
45
|
+
return (_jsxs(Text, { children: [showPlaceholder ? (_jsx(Text, { color: palette.textDim, children: placeholder })) : (_jsx(Text, { children: display })), _jsx(Text, { inverse: true, color: palette.primary, children: ' ' })] }));
|
|
46
|
+
};
|
|
47
|
+
// ── LoginPrompt ──────────────────────────────────────────
|
|
48
|
+
export const LoginPrompt = ({ onLogin, error, }) => {
|
|
49
|
+
const [step, setStep] = useState('username');
|
|
50
|
+
const [username, setUsername] = useState('');
|
|
51
|
+
const [password, setPassword] = useState('');
|
|
52
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
53
|
+
const handleUsernameSubmit = useCallback((val) => {
|
|
54
|
+
if (val.trim()) {
|
|
55
|
+
setUsername(val.trim());
|
|
56
|
+
setStep('password');
|
|
57
|
+
}
|
|
58
|
+
}, []);
|
|
59
|
+
const handlePasswordSubmit = useCallback(async (val) => {
|
|
60
|
+
if (val.trim()) {
|
|
61
|
+
setPassword(val.trim());
|
|
62
|
+
setIsLoading(true);
|
|
63
|
+
try {
|
|
64
|
+
await onLogin(username, val.trim());
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
setIsLoading(false);
|
|
68
|
+
setStep('username');
|
|
69
|
+
setUsername('');
|
|
70
|
+
setPassword('');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}, [onLogin, username]);
|
|
74
|
+
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", padding: 1, children: [_jsxs(Box, { marginBottom: 1, gap: 2, children: [_jsxs(Box, { flexDirection: "column", children: [BANNER_LINES.map((line, i) => (_jsx(Text, { color: BANNER_GRADIENT[i] ?? BANNER_GRADIENT[0], children: line }, i))), _jsx(Text, { color: palette.textDim, children: ' Agent v' + VERSION })] }), _jsx(Box, { flexDirection: "column", justifyContent: "center", children: MASCOT_LINES.map((line, i) => (_jsx(Text, { color: BANNER_GRADIENT[Math.min(i, BANNER_GRADIENT.length - 1)], children: line }, i))) })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: error ? palette.error : palette.brand2, paddingX: 3, paddingY: 1, width: 44, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsxs(Text, { color: palette.brand2, bold: true, children: ['🔐 ', "Authentication Required"] }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: palette.borderAccent, children: '─'.repeat(36) }) }), error && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: palette.error, bold: true, children: [' ✗ ', error] }) })), isLoading ? (_jsx(Box, { justifyContent: "center", paddingY: 1, children: _jsx(Spinner, { label: "Authenticating..." }) })) : step === 'username' ? (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: palette.primary, bold: true, children: ' ❯ ' }), _jsx(Text, { color: palette.textMuted, children: "Username " }), _jsx(SimpleInput, { value: username, onChange: setUsername, onSubmit: handleUsernameSubmit, placeholder: "enter username" })] }), _jsxs(Box, { children: [_jsx(Text, { color: palette.textDim, children: ' ○ ' }), _jsx(Text, { color: palette.textDim, children: "Password" })] })] })) : (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: palette.success, children: ' ✓ ' }), _jsx(Text, { color: palette.textDim, children: "Username " }), _jsx(Text, { children: username })] }), _jsxs(Box, { children: [_jsx(Text, { color: palette.primary, bold: true, children: ' ❯ ' }), _jsx(Text, { color: palette.textMuted, children: "Password " }), _jsx(SimpleInput, { value: password, onChange: setPassword, onSubmit: handlePasswordSubmit, mask: "\u2022", placeholder: "enter password" })] })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: palette.borderAccent, children: '─'.repeat(36) }) }), _jsx(Box, { justifyContent: "center", marginTop: 1, children: _jsxs(Text, { color: palette.textDim, dimColor: true, children: ["Press ", _jsx(Text, { color: palette.textMuted, children: "Enter" }), " to continue"] }) })] })] }));
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=LoginPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoginPrompt.js","sourceRoot":"","sources":["../../../src/components/LoginPrompt.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MainContent.d.ts","sourceRoot":"","sources":["../../../src/components/MainContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAWvC,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAqC/B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { Static, Box } from 'ink';
|
|
4
|
+
import { useChatState, StreamingState } from '../contexts/ChatContext.js';
|
|
5
|
+
import { HistoryItemDisplay } from './HistoryItemDisplay.js';
|
|
6
|
+
import { AssistantMessage } from './messages/AssistantMessage.js';
|
|
7
|
+
import { Header } from './Header.js';
|
|
8
|
+
// Stable sentinel object — always the first item so <Static> renders
|
|
9
|
+
// the Header once, and subsequent history items are appended after it.
|
|
10
|
+
const HEADER_SENTINEL = { __header: true, id: '__header__' };
|
|
11
|
+
export const MainContent = () => {
|
|
12
|
+
const { history, pendingContent, streamingState, sessionVersion } = useChatState();
|
|
13
|
+
// Always keep the sentinel at index 0 so Static.length grows correctly.
|
|
14
|
+
const staticItems = useMemo(() => [HEADER_SENTINEL, ...history], [history]);
|
|
15
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Static, { items: staticItems, children: (item) => {
|
|
16
|
+
if ('__header' in item) {
|
|
17
|
+
return (_jsx(Box, { children: _jsx(Header, {}) }, "__header__"));
|
|
18
|
+
}
|
|
19
|
+
return (_jsx(Box, { paddingX: 1, children: _jsx(HistoryItemDisplay, { item: item }) }, item.id));
|
|
20
|
+
} }, sessionVersion), streamingState !== StreamingState.Idle && (_jsx(Box, { paddingX: 1, children: _jsx(AssistantMessage, { text: pendingContent, isPending: true }) }))] }));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=MainContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MainContent.js","sourceRoot":"","sources":["../../../src/components/MainContent.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qEAAqE;AACrE,uEAAuE;AACvE,MAAM,eAAe,GAAG,EAAE,QAAQ,EAAE,IAAa,EAAE,EAAE,EAAE,YAAY,EAAW,CAAC;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAa,GAAG,EAAE;IACxC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;IAEnF,wEAAwE;IACxE,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,EACnC,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aAGrC,KAAC,MAAM,IAAsB,KAAK,EAAE,WAAW,YAC5C,CAAC,IAAI,EAAE,EAAE;oBACR,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;wBACvB,OAAO,CACL,KAAC,GAAG,cACF,KAAC,MAAM,KAAG,IADH,YAAY,CAEf,CACP,CAAC;oBACJ,CAAC;oBACD,OAAO,CACL,KAAC,GAAG,IAAe,QAAQ,EAAE,CAAC,YAC5B,KAAC,kBAAkB,IAAC,IAAI,EAAE,IAAI,GAAI,IAD1B,IAAI,CAAC,EAAE,CAEX,CACP,CAAC;gBACJ,CAAC,IAdU,cAAc,CAelB,EAER,cAAc,KAAK,cAAc,CAAC,IAAI,IAAI,CACzC,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,gBAAgB,IAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,GAAI,GACvD,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../../src/components/ModelPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAWhE,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EA+N/B,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { useUIActions, useUIState } from '../contexts/UIContext.js';
|
|
5
|
+
import { useModelState, useModelActions } from '../contexts/ModelContext.js';
|
|
6
|
+
import { useChatDispatch } from '../contexts/ChatContext.js';
|
|
7
|
+
import { useKeypress, KeypressPriority } from '../hooks/useKeypress.js';
|
|
8
|
+
import { palette } from '../utils/colors.js';
|
|
9
|
+
const MAX_VISIBLE = 10;
|
|
10
|
+
export const ModelPicker = () => {
|
|
11
|
+
const [activeIndex, setActiveIndex] = useState(0);
|
|
12
|
+
const [isSwitching, setIsSwitching] = useState(false);
|
|
13
|
+
const { terminalWidth } = useUIState();
|
|
14
|
+
const { closeDialog } = useUIActions();
|
|
15
|
+
const { models, currentModel } = useModelState();
|
|
16
|
+
const { switchModel, refreshModels } = useModelActions();
|
|
17
|
+
const dispatch = useChatDispatch();
|
|
18
|
+
// Refresh models on mount
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
refreshModels();
|
|
21
|
+
}, [refreshModels]);
|
|
22
|
+
// Set initial active index to current model
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (currentModel && models.length > 0) {
|
|
25
|
+
const idx = models.findIndex((m) => m.name === currentModel.model);
|
|
26
|
+
if (idx >= 0)
|
|
27
|
+
setActiveIndex(idx);
|
|
28
|
+
}
|
|
29
|
+
}, [models, currentModel]);
|
|
30
|
+
const handleSelect = async (model) => {
|
|
31
|
+
// If already current, just close
|
|
32
|
+
if (currentModel && model.name === currentModel.model) {
|
|
33
|
+
closeDialog();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
setIsSwitching(true);
|
|
37
|
+
try {
|
|
38
|
+
const provider = model.provider || currentModel?.provider || 'default';
|
|
39
|
+
await switchModel(provider, model.name);
|
|
40
|
+
dispatch({
|
|
41
|
+
type: 'ADD_ITEM',
|
|
42
|
+
item: {
|
|
43
|
+
type: 'model',
|
|
44
|
+
provider,
|
|
45
|
+
model: model.name,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
dispatch({
|
|
51
|
+
type: 'ADD_ITEM',
|
|
52
|
+
item: {
|
|
53
|
+
type: 'error',
|
|
54
|
+
text: `Failed to switch model: ${err instanceof Error ? err.message : String(err)}`,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
setIsSwitching(false);
|
|
60
|
+
closeDialog();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const handleKeypress = useCallback((key) => {
|
|
64
|
+
if (isSwitching)
|
|
65
|
+
return true;
|
|
66
|
+
if (key.name === 'escape' || (key.ctrl && key.name === 'c')) {
|
|
67
|
+
closeDialog();
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (models.length === 0)
|
|
71
|
+
return true;
|
|
72
|
+
if (key.name === 'up') {
|
|
73
|
+
setActiveIndex((prev) => (prev <= 0 ? models.length - 1 : prev - 1));
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
if (key.name === 'down') {
|
|
77
|
+
setActiveIndex((prev) => (prev >= models.length - 1 ? 0 : prev + 1));
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
if (key.name === 'return') {
|
|
81
|
+
const selected = models[activeIndex];
|
|
82
|
+
if (selected) {
|
|
83
|
+
handleSelect(selected);
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return true; // Consume all keys while dialog is open
|
|
88
|
+
}, [isSwitching, closeDialog, models, activeIndex, handleSelect]);
|
|
89
|
+
useKeypress(handleKeypress, { isActive: true, priority: KeypressPriority.High });
|
|
90
|
+
const boxWidth = Math.min(terminalWidth - 4, 70);
|
|
91
|
+
// No models available — show current model info
|
|
92
|
+
if (models.length === 0) {
|
|
93
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: palette.accent, paddingX: 2, paddingY: 1, width: boxWidth, children: [_jsx(Text, { color: palette.accent, bold: true, children: "Current Model" }), currentModel ? (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: palette.text, children: currentModel.model }), _jsxs(Text, { color: palette.textDim, children: [' ', "(", currentModel.provider, ")"] })] })) : (_jsx(Text, { color: palette.textMuted, children: "No model configured" })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: palette.textDim, children: ["No other models available. Press ", _jsx(Text, { color: palette.primary, bold: true, children: "Esc" }), " to close"] }) })] }));
|
|
94
|
+
}
|
|
95
|
+
// Scroll window
|
|
96
|
+
const visibleCount = Math.min(models.length, MAX_VISIBLE);
|
|
97
|
+
let startIndex = 0;
|
|
98
|
+
if (activeIndex >= visibleCount) {
|
|
99
|
+
startIndex = activeIndex - visibleCount + 1;
|
|
100
|
+
}
|
|
101
|
+
const endIndex = startIndex + visibleCount;
|
|
102
|
+
const visibleModels = models.slice(startIndex, endIndex);
|
|
103
|
+
// Column width for model name
|
|
104
|
+
const maxNameLen = Math.max(...models.map((m) => m.display_name.length || m.name.length));
|
|
105
|
+
const nameColWidth = Math.min(maxNameLen + 2, Math.floor(boxWidth * 0.4));
|
|
106
|
+
return (_jsxs(Box, { flexDirection: "column", width: boxWidth, children: [_jsxs(Box, { borderStyle: "round", borderColor: palette.accent, flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { justifyContent: "space-between", marginBottom: 1, children: [_jsxs(Text, { color: palette.accent, bold: true, children: ["Select Model (", models.length, ")"] }), _jsx(Text, { color: palette.textDim, children: "Esc to close" })] }), startIndex > 0 && (_jsx(Text, { color: palette.textDim, children: ' ▲ more' })), visibleModels.map((model, index) => {
|
|
107
|
+
const originalIndex = startIndex + index;
|
|
108
|
+
const isActive = originalIndex === activeIndex;
|
|
109
|
+
const isCurrent = currentModel?.model === model.name;
|
|
110
|
+
const displayName = model.display_name || model.name;
|
|
111
|
+
const descMaxLen = Math.max(0, boxWidth - nameColWidth - 8);
|
|
112
|
+
let desc = model.description || '';
|
|
113
|
+
if (desc.length > descMaxLen) {
|
|
114
|
+
desc = desc.slice(0, descMaxLen - 1) + '…';
|
|
115
|
+
}
|
|
116
|
+
return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: isActive ? palette.accent : palette.textDim, children: isActive ? '▸ ' : ' ' }), _jsx(Box, { width: nameColWidth, children: _jsx(Text, { color: isActive ? palette.accent : palette.text, bold: isActive, children: displayName }) }), _jsx(Text, { color: isActive ? palette.text : palette.textDim, children: desc }), isCurrent && (_jsx(Text, { color: palette.success, children: " *" }))] }, model.name));
|
|
117
|
+
}), endIndex < models.length && (_jsx(Text, { color: palette.textDim, children: ' ▼ more' })), models.length > MAX_VISIBLE && (_jsxs(Text, { color: palette.textDim, children: [' ', "(", activeIndex + 1, "/", models.length, ")"] }))] }), _jsx(Box, { paddingX: 2, children: _jsxs(Text, { color: palette.textDim, children: [_jsx(Text, { color: palette.primary, bold: true, children: "\u2191\u2193" }), ' navigate ', _jsx(Text, { color: palette.primary, bold: true, children: "Enter" }), ' select ', _jsx(Text, { color: palette.primary, bold: true, children: "Esc" }), ' cancel'] }) }), isSwitching && (_jsx(Box, { paddingX: 2, children: _jsx(Text, { color: palette.warning, children: "Switching model..." }) }))] }));
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=ModelPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../../src/components/ModelPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface MultiLineInputProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (value: string) => void;
|
|
4
|
+
onSubmit: (value: string) => void;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
focus?: boolean;
|
|
7
|
+
showCursor?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Multi-line text input for Ink.
|
|
11
|
+
*
|
|
12
|
+
* - Enter → submit
|
|
13
|
+
* - Shift+Enter → insert newline (requires kitty keyboard protocol)
|
|
14
|
+
* - Alt+Enter → insert newline (fallback for legacy terminals)
|
|
15
|
+
* - Backspace / Delete / Left / Right work across lines
|
|
16
|
+
*/
|
|
17
|
+
declare function MultiLineInput({ value: originalValue, placeholder, focus, showCursor, onChange, onSubmit, }: MultiLineInputProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export default MultiLineInput;
|
|
19
|
+
//# sourceMappingURL=MultiLineInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiLineInput.d.ts","sourceRoot":"","sources":["../../../src/components/MultiLineInput.tsx"],"names":[],"mappings":"AAIA,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,iBAAS,cAAc,CAAC,EACtB,KAAK,EAAE,aAAa,EACpB,WAAgB,EAChB,KAAY,EACZ,UAAiB,EACjB,QAAQ,EACR,QAAQ,GACT,EAAE,mBAAmB,2CAuHrB;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useRef } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
/**
|
|
6
|
+
* Multi-line text input for Ink.
|
|
7
|
+
*
|
|
8
|
+
* - Enter → submit
|
|
9
|
+
* - Shift+Enter → insert newline (requires kitty keyboard protocol)
|
|
10
|
+
* - Alt+Enter → insert newline (fallback for legacy terminals)
|
|
11
|
+
* - Backspace / Delete / Left / Right work across lines
|
|
12
|
+
*/
|
|
13
|
+
function MultiLineInput({ value: originalValue, placeholder = '', focus = true, showCursor = true, onChange, onSubmit, }) {
|
|
14
|
+
const [cursorOffset, setCursorOffset] = useState(originalValue.length);
|
|
15
|
+
// Keep cursor within bounds when value changes externally
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
setCursorOffset((prev) => Math.min(prev, originalValue.length));
|
|
18
|
+
}, [originalValue]);
|
|
19
|
+
// Ref so useInput always reads the latest cursor
|
|
20
|
+
const cursorRef = useRef(cursorOffset);
|
|
21
|
+
cursorRef.current = cursorOffset;
|
|
22
|
+
const valueRef = useRef(originalValue);
|
|
23
|
+
valueRef.current = originalValue;
|
|
24
|
+
useInput((input, key) => {
|
|
25
|
+
// Ignore keys handled by Composer (arrows, Ctrl+C, Tab)
|
|
26
|
+
if (key.upArrow || key.downArrow || (key.ctrl && input === 'c') || key.tab || (key.shift && key.tab)) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const val = valueRef.current;
|
|
30
|
+
const cur = cursorRef.current;
|
|
31
|
+
// --- newline insertion: Shift+Enter or Alt+Enter ---
|
|
32
|
+
if (key.return && (key.shift || key.meta)) {
|
|
33
|
+
const next = val.slice(0, cur) + '\n' + val.slice(cur);
|
|
34
|
+
setCursorOffset(cur + 1);
|
|
35
|
+
onChange(next);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// --- plain Enter → submit ---
|
|
39
|
+
if (key.return) {
|
|
40
|
+
onSubmit(val);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let nextCursor = cur;
|
|
44
|
+
let nextValue = val;
|
|
45
|
+
if (key.leftArrow) {
|
|
46
|
+
if (showCursor)
|
|
47
|
+
nextCursor = Math.max(0, cur - 1);
|
|
48
|
+
}
|
|
49
|
+
else if (key.rightArrow) {
|
|
50
|
+
if (showCursor)
|
|
51
|
+
nextCursor = Math.min(val.length, cur + 1);
|
|
52
|
+
}
|
|
53
|
+
else if (key.backspace || key.delete) {
|
|
54
|
+
if (cur > 0) {
|
|
55
|
+
nextValue = val.slice(0, cur - 1) + val.slice(cur);
|
|
56
|
+
nextCursor = cur - 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if (input) {
|
|
60
|
+
nextValue = val.slice(0, cur) + input + val.slice(cur);
|
|
61
|
+
nextCursor = cur + input.length;
|
|
62
|
+
}
|
|
63
|
+
nextCursor = Math.max(0, Math.min(nextCursor, nextValue.length));
|
|
64
|
+
setCursorOffset(nextCursor);
|
|
65
|
+
if (nextValue !== val) {
|
|
66
|
+
onChange(nextValue);
|
|
67
|
+
}
|
|
68
|
+
}, { isActive: focus });
|
|
69
|
+
// ── Rendering ──
|
|
70
|
+
if (!originalValue && placeholder) {
|
|
71
|
+
if (showCursor && focus) {
|
|
72
|
+
return (_jsx(Text, { children: placeholder.length > 0
|
|
73
|
+
? chalk.inverse(placeholder[0]) + chalk.grey(placeholder.slice(1))
|
|
74
|
+
: chalk.inverse(' ') }));
|
|
75
|
+
}
|
|
76
|
+
return _jsx(Text, { children: chalk.grey(placeholder) });
|
|
77
|
+
}
|
|
78
|
+
const lines = originalValue.split('\n');
|
|
79
|
+
const renderedLines = [];
|
|
80
|
+
let charsSoFar = 0;
|
|
81
|
+
for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
|
|
82
|
+
const line = lines[lineIdx];
|
|
83
|
+
let rendered = '';
|
|
84
|
+
if (showCursor && focus) {
|
|
85
|
+
for (let i = 0; i < line.length; i++) {
|
|
86
|
+
const globalPos = charsSoFar + i;
|
|
87
|
+
rendered += globalPos === cursorOffset ? chalk.inverse(line[i]) : line[i];
|
|
88
|
+
}
|
|
89
|
+
// Cursor at end of line
|
|
90
|
+
const endPos = charsSoFar + line.length;
|
|
91
|
+
if (cursorOffset === endPos) {
|
|
92
|
+
rendered += chalk.inverse(' ');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
rendered = line;
|
|
97
|
+
}
|
|
98
|
+
renderedLines.push(rendered);
|
|
99
|
+
charsSoFar += line.length + 1; // +1 for the '\n'
|
|
100
|
+
}
|
|
101
|
+
// Multi-line: render each line in its own <Text> within a vertical <Box>
|
|
102
|
+
if (lines.length > 1) {
|
|
103
|
+
return (_jsx(Box, { flexDirection: "column", children: renderedLines.map((line, i) => (_jsx(Text, { children: line || ' ' }, i))) }));
|
|
104
|
+
}
|
|
105
|
+
return _jsx(Text, { children: renderedLines[0] });
|
|
106
|
+
}
|
|
107
|
+
export default MultiLineInput;
|
|
108
|
+
//# sourceMappingURL=MultiLineInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiLineInput.js","sourceRoot":"","sources":["../../../src/components/MultiLineInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionPicker.d.ts","sourceRoot":"","sources":["../../../src/components/SessionPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAehE,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAsOjC,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { useUIActions, useUIState } from '../contexts/UIContext.js';
|
|
5
|
+
import { useSessionState, useSessionActions } from '../contexts/SessionContext.js';
|
|
6
|
+
import { useChatDispatch, useChatState } from '../contexts/ChatContext.js';
|
|
7
|
+
import { sessionsApi } from '../api/sessions.js';
|
|
8
|
+
import { nextHistoryId } from '../types/history.js';
|
|
9
|
+
import { useKeypress, KeypressPriority } from '../hooks/useKeypress.js';
|
|
10
|
+
import { palette } from '../utils/colors.js';
|
|
11
|
+
const MAX_VISIBLE = 12;
|
|
12
|
+
export const SessionPicker = () => {
|
|
13
|
+
const [activeIndex, setActiveIndex] = useState(0);
|
|
14
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
15
|
+
const { terminalWidth, terminalHeight } = useUIState();
|
|
16
|
+
const { closeDialog } = useUIActions();
|
|
17
|
+
const { sessions, isLoading: sessionsLoading } = useSessionState();
|
|
18
|
+
const { refreshSessions } = useSessionActions();
|
|
19
|
+
const dispatch = useChatDispatch();
|
|
20
|
+
const { threadId: currentThreadId } = useChatState();
|
|
21
|
+
// Refresh sessions on mount
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
refreshSessions();
|
|
24
|
+
}, [refreshSessions]);
|
|
25
|
+
const handleSelect = async (session) => {
|
|
26
|
+
// Don't switch to the same session
|
|
27
|
+
if (session.thread_id === currentThreadId) {
|
|
28
|
+
closeDialog();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
setIsLoading(true);
|
|
32
|
+
try {
|
|
33
|
+
// Fetch session history from API
|
|
34
|
+
const res = await sessionsApi.getHistory(session.thread_id);
|
|
35
|
+
const historyItems = res.history.map((msg) => ({
|
|
36
|
+
id: nextHistoryId(),
|
|
37
|
+
type: msg.type,
|
|
38
|
+
text: msg.content,
|
|
39
|
+
}));
|
|
40
|
+
// Add a "switched" marker at the end
|
|
41
|
+
historyItems.push({
|
|
42
|
+
id: nextHistoryId(),
|
|
43
|
+
type: 'session',
|
|
44
|
+
title: session.title || 'Untitled',
|
|
45
|
+
action: 'switched',
|
|
46
|
+
});
|
|
47
|
+
// Atomically switch session (increments sessionVersion to re-mount Static)
|
|
48
|
+
dispatch({
|
|
49
|
+
type: 'SWITCH_SESSION',
|
|
50
|
+
threadId: session.thread_id,
|
|
51
|
+
title: session.title,
|
|
52
|
+
items: historyItems,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
dispatch({
|
|
57
|
+
type: 'ADD_ITEM',
|
|
58
|
+
item: {
|
|
59
|
+
type: 'error',
|
|
60
|
+
text: `Failed to load session: ${err instanceof Error ? err.message : String(err)}`,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
setIsLoading(false);
|
|
66
|
+
closeDialog();
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const handleKeypress = useCallback((key) => {
|
|
70
|
+
if (isLoading)
|
|
71
|
+
return true;
|
|
72
|
+
if (key.name === 'escape' || (key.ctrl && key.name === 'c')) {
|
|
73
|
+
closeDialog();
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
if (key.name === 'up') {
|
|
77
|
+
setActiveIndex((prev) => (prev <= 0 ? sessions.length - 1 : prev - 1));
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
if (key.name === 'down') {
|
|
81
|
+
setActiveIndex((prev) => (prev >= sessions.length - 1 ? 0 : prev + 1));
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
if (key.name === 'return') {
|
|
85
|
+
const selected = sessions[activeIndex];
|
|
86
|
+
if (selected) {
|
|
87
|
+
handleSelect(selected);
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return true; // Consume all keys while dialog is open
|
|
92
|
+
}, [isLoading, closeDialog, sessions, activeIndex, handleSelect]);
|
|
93
|
+
useKeypress(handleKeypress, { isActive: true, priority: KeypressPriority.High });
|
|
94
|
+
// Scroll window
|
|
95
|
+
const visibleCount = Math.min(sessions.length, MAX_VISIBLE);
|
|
96
|
+
let startIndex = 0;
|
|
97
|
+
if (activeIndex >= visibleCount) {
|
|
98
|
+
startIndex = activeIndex - visibleCount + 1;
|
|
99
|
+
}
|
|
100
|
+
const endIndex = startIndex + visibleCount;
|
|
101
|
+
const visibleSessions = sessions.slice(startIndex, endIndex);
|
|
102
|
+
const boxWidth = Math.min(terminalWidth - 4, 80);
|
|
103
|
+
if (sessionsLoading && sessions.length === 0) {
|
|
104
|
+
return (_jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: palette.accent, paddingX: 2, paddingY: 1, width: boxWidth, children: _jsx(Text, { color: palette.textMuted, children: "Loading sessions..." }) }));
|
|
105
|
+
}
|
|
106
|
+
if (sessions.length === 0) {
|
|
107
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: palette.accent, paddingX: 2, paddingY: 1, width: boxWidth, children: [_jsx(Text, { color: palette.textMuted, children: "No sessions found." }), _jsx(Text, { color: palette.textDim, children: "Press Esc to close" })] }));
|
|
108
|
+
}
|
|
109
|
+
return (_jsxs(Box, { flexDirection: "column", width: boxWidth, children: [_jsxs(Box, { borderStyle: "round", borderColor: palette.accent, flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { justifyContent: "space-between", marginBottom: 1, children: [_jsxs(Text, { color: palette.accent, bold: true, children: ["Session History (", sessions.length, ")"] }), _jsx(Text, { color: palette.textDim, children: "Esc to close" })] }), startIndex > 0 && (_jsx(Text, { color: palette.textDim, children: ' ▲ more' })), visibleSessions.map((session, index) => {
|
|
110
|
+
const originalIndex = startIndex + index;
|
|
111
|
+
const isActive = originalIndex === activeIndex;
|
|
112
|
+
const isCurrent = session.thread_id === currentThreadId;
|
|
113
|
+
const date = new Date(session.last_activity);
|
|
114
|
+
const timeStr = date.toLocaleString('zh-CN', {
|
|
115
|
+
month: '2-digit',
|
|
116
|
+
day: '2-digit',
|
|
117
|
+
hour: '2-digit',
|
|
118
|
+
minute: '2-digit',
|
|
119
|
+
});
|
|
120
|
+
const title = session.title || 'New Chat';
|
|
121
|
+
const msgCount = session.message_count ?? 0;
|
|
122
|
+
const idShort = session.thread_id.substring(0, 8);
|
|
123
|
+
// Truncate title to fit
|
|
124
|
+
const maxTitleLen = boxWidth - 36;
|
|
125
|
+
const displayTitle = title.length > maxTitleLen
|
|
126
|
+
? title.slice(0, maxTitleLen - 1) + '…'
|
|
127
|
+
: title;
|
|
128
|
+
return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: isActive ? palette.accent : palette.textDim, children: isActive ? '▸ ' : ' ' }), _jsxs(Text, { color: palette.textDim, children: [timeStr, " "] }), _jsx(Text, { color: isActive ? palette.accent : palette.text, bold: isActive, children: displayTitle }), _jsxs(Text, { color: palette.textDim, children: [' ', "(", msgCount, ")"] }), isCurrent && (_jsx(Text, { color: palette.success, children: " *" }))] }, session.thread_id));
|
|
129
|
+
}), endIndex < sessions.length && (_jsx(Text, { color: palette.textDim, children: ' ▼ more' })), sessions.length > MAX_VISIBLE && (_jsxs(Text, { color: palette.textDim, children: [' ', "(", activeIndex + 1, "/", sessions.length, ")"] }))] }), _jsx(Box, { paddingX: 2, children: _jsxs(Text, { color: palette.textDim, children: [_jsx(Text, { color: palette.primary, bold: true, children: "\u2191\u2193" }), " navigate", _jsx(Text, { color: palette.primary, bold: true, children: "Enter" }), " switch", _jsx(Text, { color: palette.primary, bold: true, children: "Esc" }), " cancel"] }) }), isLoading && (_jsx(Box, { paddingX: 2, children: _jsx(Text, { color: palette.warning, children: "Loading session..." }) }))] }));
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=SessionPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionPicker.js","sourceRoot":"","sources":["../../../src/components/SessionPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const MAX_SUGGESTIONS_TO_SHOW = 6;
|
|
3
|
+
/** Unified suggestion item for both "/" commands and "@" file references */
|
|
4
|
+
export interface SuggestionItem {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
prefix: string;
|
|
8
|
+
icon?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SuggestionsDisplayProps {
|
|
11
|
+
suggestions: SuggestionItem[];
|
|
12
|
+
activeIndex: number;
|
|
13
|
+
width: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const SuggestionsDisplay: React.FC<SuggestionsDisplayProps>;
|
|
16
|
+
//# sourceMappingURL=SuggestionsDisplay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuggestionsDisplay.d.ts","sourceRoot":"","sources":["../../../src/components/SuggestionsDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA+DhE,CAAC"}
|