@nanocollective/nanocoder 1.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +23 -0
- package/README.md +366 -0
- package/dist/app/hooks/useAppInitialization.d.ts +26 -0
- package/dist/app/hooks/useAppInitialization.d.ts.map +1 -0
- package/dist/app/hooks/useAppInitialization.js +151 -0
- package/dist/app/hooks/useAppInitialization.js.map +1 -0
- package/dist/app/hooks/useAppState.d.ts +84 -0
- package/dist/app/hooks/useAppState.d.ts.map +1 -0
- package/dist/app/hooks/useAppState.js +162 -0
- package/dist/app/hooks/useAppState.js.map +1 -0
- package/dist/app/hooks/useChatHandler.d.ts +26 -0
- package/dist/app/hooks/useChatHandler.d.ts.map +1 -0
- package/dist/app/hooks/useChatHandler.js +532 -0
- package/dist/app/hooks/useChatHandler.js.map +1 -0
- package/dist/app/hooks/useDirectoryTrust.d.ts +15 -0
- package/dist/app/hooks/useDirectoryTrust.d.ts.map +1 -0
- package/dist/app/hooks/useDirectoryTrust.js +77 -0
- package/dist/app/hooks/useDirectoryTrust.js.map +1 -0
- package/dist/app/hooks/useModeHandlers.d.ts +31 -0
- package/dist/app/hooks/useModeHandlers.d.ts.map +1 -0
- package/dist/app/hooks/useModeHandlers.js +98 -0
- package/dist/app/hooks/useModeHandlers.js.map +1 -0
- package/dist/app/hooks/useToolHandler.d.ts +32 -0
- package/dist/app/hooks/useToolHandler.d.ts.map +1 -0
- package/dist/app/hooks/useToolHandler.js +154 -0
- package/dist/app/hooks/useToolHandler.js.map +1 -0
- package/dist/app/utils/appUtils.d.ts +4 -0
- package/dist/app/utils/appUtils.d.ts.map +1 -0
- package/dist/app/utils/appUtils.js +147 -0
- package/dist/app/utils/appUtils.js.map +1 -0
- package/dist/app/utils/conversationState.d.ts +68 -0
- package/dist/app/utils/conversationState.d.ts.map +1 -0
- package/dist/app/utils/conversationState.js +199 -0
- package/dist/app/utils/conversationState.js.map +1 -0
- package/dist/app.d.ts +2 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +193 -0
- package/dist/app.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -0
- package/dist/client-factory.d.ts +6 -0
- package/dist/client-factory.d.ts.map +1 -0
- package/dist/client-factory.js +111 -0
- package/dist/client-factory.js.map +1 -0
- package/dist/command-parser.d.ts +5 -0
- package/dist/command-parser.d.ts.map +1 -0
- package/dist/command-parser.js +36 -0
- package/dist/command-parser.js.map +1 -0
- package/dist/commands/clear.d.ts +3 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +17 -0
- package/dist/commands/clear.js.map +1 -0
- package/dist/commands/custom-commands.d.ts +3 -0
- package/dist/commands/custom-commands.d.ts.map +1 -0
- package/dist/commands/custom-commands.js +41 -0
- package/dist/commands/custom-commands.js.map +1 -0
- package/dist/commands/debug.d.ts +3 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +86 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/exit.d.ts +3 -0
- package/dist/commands/exit.d.ts.map +1 -0
- package/dist/commands/exit.js +17 -0
- package/dist/commands/exit.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +63 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/help.d.ts +3 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +31 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/index.d.ts +13 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +214 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +41 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/model.d.ts +3 -0
- package/dist/commands/model.d.ts.map +1 -0
- package/dist/commands/model.js +11 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/provider.d.ts +3 -0
- package/dist/commands/provider.d.ts.map +1 -0
- package/dist/commands/provider.js +11 -0
- package/dist/commands/provider.js.map +1 -0
- package/dist/commands/theme.d.ts +3 -0
- package/dist/commands/theme.d.ts.map +1 -0
- package/dist/commands/theme.js +11 -0
- package/dist/commands/theme.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +10 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands.d.ts +16 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +46 -0
- package/dist/commands.js.map +1 -0
- package/dist/components/assistant-message.d.ts +4 -0
- package/dist/components/assistant-message.d.ts.map +1 -0
- package/dist/components/assistant-message.js +43 -0
- package/dist/components/assistant-message.js.map +1 -0
- package/dist/components/bash-execution-indicator.d.ts +4 -0
- package/dist/components/bash-execution-indicator.d.ts.map +1 -0
- package/dist/components/bash-execution-indicator.js +9 -0
- package/dist/components/bash-execution-indicator.js.map +1 -0
- package/dist/components/cancelling-indicator.d.ts +3 -0
- package/dist/components/cancelling-indicator.d.ts.map +1 -0
- package/dist/components/cancelling-indicator.js +10 -0
- package/dist/components/cancelling-indicator.js.map +1 -0
- package/dist/components/chat-queue.d.ts +4 -0
- package/dist/components/chat-queue.d.ts.map +1 -0
- package/dist/components/chat-queue.js +23 -0
- package/dist/components/chat-queue.js.map +1 -0
- package/dist/components/custom-commands.d.ts +7 -0
- package/dist/components/custom-commands.d.ts.map +1 -0
- package/dist/components/custom-commands.js +27 -0
- package/dist/components/custom-commands.js.map +1 -0
- package/dist/components/error-message.d.ts +7 -0
- package/dist/components/error-message.d.ts.map +1 -0
- package/dist/components/error-message.js +12 -0
- package/dist/components/error-message.js.map +1 -0
- package/dist/components/info-message.d.ts +6 -0
- package/dist/components/info-message.d.ts.map +1 -0
- package/dist/components/info-message.js +11 -0
- package/dist/components/info-message.js.map +1 -0
- package/dist/components/model-selector.d.ts +10 -0
- package/dist/components/model-selector.d.ts.map +1 -0
- package/dist/components/model-selector.js +59 -0
- package/dist/components/model-selector.js.map +1 -0
- package/dist/components/provider-selector.d.ts +9 -0
- package/dist/components/provider-selector.d.ts.map +1 -0
- package/dist/components/provider-selector.js +36 -0
- package/dist/components/provider-selector.js.map +1 -0
- package/dist/components/security-disclaimer.d.ts +7 -0
- package/dist/components/security-disclaimer.d.ts.map +1 -0
- package/dist/components/security-disclaimer.js +36 -0
- package/dist/components/security-disclaimer.js.map +1 -0
- package/dist/components/status.d.ts +6 -0
- package/dist/components/status.d.ts.map +1 -0
- package/dist/components/status.js +35 -0
- package/dist/components/status.js.map +1 -0
- package/dist/components/success-message.d.ts +6 -0
- package/dist/components/success-message.d.ts.map +1 -0
- package/dist/components/success-message.js +11 -0
- package/dist/components/success-message.js.map +1 -0
- package/dist/components/theme-selector.d.ts +8 -0
- package/dist/components/theme-selector.d.ts.map +1 -0
- package/dist/components/theme-selector.js +40 -0
- package/dist/components/theme-selector.js.map +1 -0
- package/dist/components/thinking-indicator.d.ts +4 -0
- package/dist/components/thinking-indicator.d.ts.map +1 -0
- package/dist/components/thinking-indicator.js +32 -0
- package/dist/components/thinking-indicator.js.map +1 -0
- package/dist/components/tool-confirmation.d.ts +9 -0
- package/dist/components/tool-confirmation.d.ts.map +1 -0
- package/dist/components/tool-confirmation.js +72 -0
- package/dist/components/tool-confirmation.js.map +1 -0
- package/dist/components/tool-execution-indicator.d.ts +3 -0
- package/dist/components/tool-execution-indicator.d.ts.map +1 -0
- package/dist/components/tool-execution-indicator.js +9 -0
- package/dist/components/tool-execution-indicator.js.map +1 -0
- package/dist/components/tool-message.d.ts +10 -0
- package/dist/components/tool-message.d.ts.map +1 -0
- package/dist/components/tool-message.js +16 -0
- package/dist/components/tool-message.js.map +1 -0
- package/dist/components/update-message.d.ts +7 -0
- package/dist/components/update-message.d.ts.map +1 -0
- package/dist/components/update-message.js +93 -0
- package/dist/components/update-message.js.map +1 -0
- package/dist/components/user-input.d.ts +10 -0
- package/dist/components/user-input.d.ts.map +1 -0
- package/dist/components/user-input.js +188 -0
- package/dist/components/user-input.js.map +1 -0
- package/dist/components/user-message.d.ts +4 -0
- package/dist/components/user-message.d.ts.map +1 -0
- package/dist/components/user-message.js +15 -0
- package/dist/components/user-message.js.map +1 -0
- package/dist/components/welcome-message.d.ts +3 -0
- package/dist/components/welcome-message.d.ts.map +1 -0
- package/dist/components/welcome-message.js +21 -0
- package/dist/components/welcome-message.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +44 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/logging.d.ts +14 -0
- package/dist/config/logging.d.ts.map +1 -0
- package/dist/config/logging.js +58 -0
- package/dist/config/logging.js.map +1 -0
- package/dist/config/preferences.d.ts +7 -0
- package/dist/config/preferences.d.ts.map +1 -0
- package/dist/config/preferences.js +46 -0
- package/dist/config/preferences.js.map +1 -0
- package/dist/config/themes.d.ts +6 -0
- package/dist/config/themes.d.ts.map +1 -0
- package/dist/config/themes.js +295 -0
- package/dist/config/themes.js.map +1 -0
- package/dist/custom-commands/executor.d.ts +12 -0
- package/dist/custom-commands/executor.d.ts.map +1 -0
- package/dist/custom-commands/executor.js +45 -0
- package/dist/custom-commands/executor.js.map +1 -0
- package/dist/custom-commands/index.d.ts +4 -0
- package/dist/custom-commands/index.d.ts.map +1 -0
- package/dist/custom-commands/index.js +4 -0
- package/dist/custom-commands/index.js.map +1 -0
- package/dist/custom-commands/loader.d.ts +41 -0
- package/dist/custom-commands/loader.d.ts.map +1 -0
- package/dist/custom-commands/loader.js +129 -0
- package/dist/custom-commands/loader.js.map +1 -0
- package/dist/custom-commands/parser.d.ts +10 -0
- package/dist/custom-commands/parser.d.ts.map +1 -0
- package/dist/custom-commands/parser.js +181 -0
- package/dist/custom-commands/parser.js.map +1 -0
- package/dist/hooks/useInputState.d.ts +14 -0
- package/dist/hooks/useInputState.d.ts.map +1 -0
- package/dist/hooks/useInputState.js +66 -0
- package/dist/hooks/useInputState.js.map +1 -0
- package/dist/hooks/useTerminalWidth.d.ts +2 -0
- package/dist/hooks/useTerminalWidth.d.ts.map +1 -0
- package/dist/hooks/useTerminalWidth.js +20 -0
- package/dist/hooks/useTerminalWidth.js.map +1 -0
- package/dist/hooks/useTheme.d.ts +9 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.js +10 -0
- package/dist/hooks/useTheme.js.map +1 -0
- package/dist/hooks/useUIState.d.ts +19 -0
- package/dist/hooks/useUIState.d.ts.map +1 -0
- package/dist/hooks/useUIState.js +46 -0
- package/dist/hooks/useUIState.js.map +1 -0
- package/dist/init/agents-template-generator.d.ts +29 -0
- package/dist/init/agents-template-generator.d.ts.map +1 -0
- package/dist/init/agents-template-generator.js +340 -0
- package/dist/init/agents-template-generator.js.map +1 -0
- package/dist/init/existing-rules-extractor.d.ts +43 -0
- package/dist/init/existing-rules-extractor.d.ts.map +1 -0
- package/dist/init/existing-rules-extractor.js +226 -0
- package/dist/init/existing-rules-extractor.js.map +1 -0
- package/dist/init/file-scanner.d.ts +40 -0
- package/dist/init/file-scanner.d.ts.map +1 -0
- package/dist/init/file-scanner.js +153 -0
- package/dist/init/file-scanner.js.map +1 -0
- package/dist/init/framework-detector.d.ts +57 -0
- package/dist/init/framework-detector.d.ts.map +1 -0
- package/dist/init/framework-detector.js +277 -0
- package/dist/init/framework-detector.js.map +1 -0
- package/dist/init/language-detector.d.ts +31 -0
- package/dist/init/language-detector.d.ts.map +1 -0
- package/dist/init/language-detector.js +205 -0
- package/dist/init/language-detector.js.map +1 -0
- package/dist/init/project-analyzer.d.ts +62 -0
- package/dist/init/project-analyzer.d.ts.map +1 -0
- package/dist/init/project-analyzer.js +294 -0
- package/dist/init/project-analyzer.js.map +1 -0
- package/dist/langgraph-client.d.ts +20 -0
- package/dist/langgraph-client.d.ts.map +1 -0
- package/dist/langgraph-client.js +245 -0
- package/dist/langgraph-client.js.map +1 -0
- package/dist/mcp/mcp-client.d.ts +23 -0
- package/dist/mcp/mcp-client.d.ts.map +1 -0
- package/dist/mcp/mcp-client.js +194 -0
- package/dist/mcp/mcp-client.js.map +1 -0
- package/dist/mcp/mcp-tool-adapter.d.ts +22 -0
- package/dist/mcp/mcp-tool-adapter.d.ts.map +1 -0
- package/dist/mcp/mcp-tool-adapter.js +49 -0
- package/dist/mcp/mcp-tool-adapter.js.map +1 -0
- package/dist/message-handler.d.ts +7 -0
- package/dist/message-handler.d.ts.map +1 -0
- package/dist/message-handler.js +53 -0
- package/dist/message-handler.js.map +1 -0
- package/dist/prompt-history.d.ts +14 -0
- package/dist/prompt-history.d.ts.map +1 -0
- package/dist/prompt-history.js +88 -0
- package/dist/prompt-history.js.map +1 -0
- package/dist/tool-calling/index.d.ts +6 -0
- package/dist/tool-calling/index.d.ts.map +1 -0
- package/dist/tool-calling/index.js +5 -0
- package/dist/tool-calling/index.js.map +1 -0
- package/dist/tool-calling/json-parser.d.ts +7 -0
- package/dist/tool-calling/json-parser.d.ts.map +1 -0
- package/dist/tool-calling/json-parser.js +168 -0
- package/dist/tool-calling/json-parser.js.map +1 -0
- package/dist/tool-calling/xml-parser.d.ts +34 -0
- package/dist/tool-calling/xml-parser.d.ts.map +1 -0
- package/dist/tool-calling/xml-parser.js +113 -0
- package/dist/tool-calling/xml-parser.js.map +1 -0
- package/dist/tools/create-file.d.ts +3 -0
- package/dist/tools/create-file.d.ts.map +1 -0
- package/dist/tools/create-file.js +66 -0
- package/dist/tools/create-file.js.map +1 -0
- package/dist/tools/delete-lines.d.ts +3 -0
- package/dist/tools/delete-lines.d.ts.map +1 -0
- package/dist/tools/delete-lines.js +218 -0
- package/dist/tools/delete-lines.js.map +1 -0
- package/dist/tools/execute-bash.d.ts +3 -0
- package/dist/tools/execute-bash.d.ts.map +1 -0
- package/dist/tools/execute-bash.js +107 -0
- package/dist/tools/execute-bash.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +23 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/insert-lines.d.ts +3 -0
- package/dist/tools/insert-lines.d.ts.map +1 -0
- package/dist/tools/insert-lines.js +185 -0
- package/dist/tools/insert-lines.js.map +1 -0
- package/dist/tools/read-file.d.ts +3 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +81 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/read-many-files.d.ts +3 -0
- package/dist/tools/read-many-files.d.ts.map +1 -0
- package/dist/tools/read-many-files.js +109 -0
- package/dist/tools/read-many-files.js.map +1 -0
- package/dist/tools/replace-lines.d.ts +3 -0
- package/dist/tools/replace-lines.d.ts.map +1 -0
- package/dist/tools/replace-lines.js +220 -0
- package/dist/tools/replace-lines.js.map +1 -0
- package/dist/tools/tool-manager.d.ts +54 -0
- package/dist/tools/tool-manager.d.ts.map +1 -0
- package/dist/tools/tool-manager.js +108 -0
- package/dist/tools/tool-manager.js.map +1 -0
- package/dist/types/app.d.ts +46 -0
- package/dist/types/app.d.ts.map +1 -0
- package/dist/types/app.js +2 -0
- package/dist/types/app.js.map +1 -0
- package/dist/types/commands.d.ts +36 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/commands.js +2 -0
- package/dist/types/commands.js.map +1 -0
- package/dist/types/components.d.ts +87 -0
- package/dist/types/components.d.ts.map +1 -0
- package/dist/types/components.js +2 -0
- package/dist/types/components.js.map +1 -0
- package/dist/types/config.d.ts +35 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/core.d.ts +57 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/hooks.d.ts +26 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +2 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +19 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +2 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/tools.d.ts +31 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +2 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/ui.d.ts +22 -0
- package/dist/types/ui.d.ts.map +1 -0
- package/dist/types/ui.js +2 -0
- package/dist/types/ui.js.map +1 -0
- package/dist/types/utils.d.ts +19 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +2 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/utils/message-queue.d.ts +8 -0
- package/dist/utils/message-queue.d.ts.map +1 -0
- package/dist/utils/message-queue.js +50 -0
- package/dist/utils/message-queue.js.map +1 -0
- package/dist/utils/programming-language-helper.d.ts +2 -0
- package/dist/utils/programming-language-helper.d.ts.map +1 -0
- package/dist/utils/programming-language-helper.js +32 -0
- package/dist/utils/programming-language-helper.js.map +1 -0
- package/dist/utils/prompt-processor.d.ts +6 -0
- package/dist/utils/prompt-processor.d.ts.map +1 -0
- package/dist/utils/prompt-processor.js +103 -0
- package/dist/utils/prompt-processor.js.map +1 -0
- package/dist/utils/update-checker.d.ts +6 -0
- package/dist/utils/update-checker.d.ts.map +1 -0
- package/dist/utils/update-checker.js +120 -0
- package/dist/utils/update-checker.js.map +1 -0
- package/package.json +97 -0
- package/source/app/prompts/main-prompt.md +107 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Message, ToolCall } from '../../types/core.js';
|
|
2
|
+
export interface ConversationProgress {
|
|
3
|
+
originalTask: string;
|
|
4
|
+
currentStep: number;
|
|
5
|
+
totalEstimatedSteps: number;
|
|
6
|
+
completedActions: string[];
|
|
7
|
+
nextAction?: string;
|
|
8
|
+
toolCallsExecuted: number;
|
|
9
|
+
lastToolCall?: ToolCall;
|
|
10
|
+
isRepeatingAction: boolean;
|
|
11
|
+
contextSummary?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ConversationState {
|
|
14
|
+
progress: ConversationProgress;
|
|
15
|
+
lastAssistantMessage?: Message;
|
|
16
|
+
conversationStartTime: number;
|
|
17
|
+
toolExecutionCount: number;
|
|
18
|
+
recentToolCalls: ToolCall[];
|
|
19
|
+
}
|
|
20
|
+
export declare class ConversationStateManager {
|
|
21
|
+
private state;
|
|
22
|
+
private maxRecentToolCalls;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize conversation state from the first user message
|
|
25
|
+
*/
|
|
26
|
+
initializeState(userMessage: string): ConversationState;
|
|
27
|
+
/**
|
|
28
|
+
* Update state after tool execution
|
|
29
|
+
*/
|
|
30
|
+
updateAfterToolExecution(toolCall: ToolCall, result: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Update assistant message in state
|
|
33
|
+
*/
|
|
34
|
+
updateAssistantMessage(message: Message): void;
|
|
35
|
+
/**
|
|
36
|
+
* Generate context-aware continuation prompt
|
|
37
|
+
*/
|
|
38
|
+
generateContinuationContext(): string;
|
|
39
|
+
/**
|
|
40
|
+
* Get current state
|
|
41
|
+
*/
|
|
42
|
+
getState(): ConversationState | null;
|
|
43
|
+
/**
|
|
44
|
+
* Reset state
|
|
45
|
+
*/
|
|
46
|
+
reset(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Estimate number of steps for a task
|
|
49
|
+
*/
|
|
50
|
+
private estimateSteps;
|
|
51
|
+
/**
|
|
52
|
+
* Detect if the current tool call is repetitive
|
|
53
|
+
*/
|
|
54
|
+
private detectRepetition;
|
|
55
|
+
/**
|
|
56
|
+
* Describe what a tool action accomplished
|
|
57
|
+
*/
|
|
58
|
+
private describeToolAction;
|
|
59
|
+
/**
|
|
60
|
+
* Generate intelligent next step suggestions
|
|
61
|
+
*/
|
|
62
|
+
private generateNextStepSuggestion;
|
|
63
|
+
/**
|
|
64
|
+
* Detect if a message is a simple greeting to avoid over-interpreting
|
|
65
|
+
*/
|
|
66
|
+
private isSimpleGreeting;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=conversationState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversationState.d.ts","sourceRoot":"","sources":["../../../source/app/utils/conversationState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,QAAQ,EAAE,CAAC;CAC5B;AAED,qBAAa,wBAAwB;IACpC,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,kBAAkB,CAAK;IAE/B;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB;IAmBvD;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA8BlE;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK9C;;OAEG;IACH,2BAA2B,IAAI,MAAM;IA2BrC;;OAEG;IACH,QAAQ,IAAI,iBAAiB,GAAG,IAAI;IAIpC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuClC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAaxB"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
export class ConversationStateManager {
|
|
2
|
+
state = null;
|
|
3
|
+
maxRecentToolCalls = 5;
|
|
4
|
+
/**
|
|
5
|
+
* Initialize conversation state from the first user message
|
|
6
|
+
*/
|
|
7
|
+
initializeState(userMessage) {
|
|
8
|
+
// Detect if this is a simple greeting to avoid over-interpreting
|
|
9
|
+
const isSimpleGreeting = this.isSimpleGreeting(userMessage);
|
|
10
|
+
this.state = {
|
|
11
|
+
progress: {
|
|
12
|
+
originalTask: userMessage,
|
|
13
|
+
currentStep: 1,
|
|
14
|
+
totalEstimatedSteps: isSimpleGreeting ? 1 : this.estimateSteps(userMessage),
|
|
15
|
+
completedActions: [],
|
|
16
|
+
toolCallsExecuted: 0,
|
|
17
|
+
isRepeatingAction: false,
|
|
18
|
+
},
|
|
19
|
+
conversationStartTime: Date.now(),
|
|
20
|
+
toolExecutionCount: 0,
|
|
21
|
+
recentToolCalls: [],
|
|
22
|
+
};
|
|
23
|
+
return this.state;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Update state after tool execution
|
|
27
|
+
*/
|
|
28
|
+
updateAfterToolExecution(toolCall, result) {
|
|
29
|
+
if (!this.state)
|
|
30
|
+
return;
|
|
31
|
+
// Add to recent tool calls
|
|
32
|
+
this.state.recentToolCalls.push(toolCall);
|
|
33
|
+
if (this.state.recentToolCalls.length > this.maxRecentToolCalls) {
|
|
34
|
+
this.state.recentToolCalls.shift();
|
|
35
|
+
}
|
|
36
|
+
// Check for repetition
|
|
37
|
+
const isRepeating = this.detectRepetition(toolCall);
|
|
38
|
+
// Update progress
|
|
39
|
+
this.state.progress.toolCallsExecuted++;
|
|
40
|
+
this.state.progress.lastToolCall = toolCall;
|
|
41
|
+
this.state.progress.isRepeatingAction = isRepeating;
|
|
42
|
+
this.state.progress.currentStep++;
|
|
43
|
+
// Add completed action
|
|
44
|
+
const actionDescription = this.describeToolAction(toolCall, result);
|
|
45
|
+
this.state.progress.completedActions.push(actionDescription);
|
|
46
|
+
// Update total estimated steps if needed
|
|
47
|
+
if (this.state.progress.currentStep > this.state.progress.totalEstimatedSteps) {
|
|
48
|
+
this.state.progress.totalEstimatedSteps = this.state.progress.currentStep + 2;
|
|
49
|
+
}
|
|
50
|
+
this.state.toolExecutionCount++;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Update assistant message in state
|
|
54
|
+
*/
|
|
55
|
+
updateAssistantMessage(message) {
|
|
56
|
+
if (!this.state)
|
|
57
|
+
return;
|
|
58
|
+
this.state.lastAssistantMessage = message;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Generate context-aware continuation prompt
|
|
62
|
+
*/
|
|
63
|
+
generateContinuationContext() {
|
|
64
|
+
if (!this.state)
|
|
65
|
+
return '';
|
|
66
|
+
const progress = this.state.progress;
|
|
67
|
+
let context = `[Task Progress: Step ${progress.currentStep} of ~${progress.totalEstimatedSteps}]\n`;
|
|
68
|
+
context += `[Original Task: "${progress.originalTask}"]\n\n`;
|
|
69
|
+
if (progress.completedActions.length > 0) {
|
|
70
|
+
context += `Recent actions completed:\n`;
|
|
71
|
+
progress.completedActions.slice(-3).forEach((action, i) => {
|
|
72
|
+
context += `${i + 1}. ${action}\n`;
|
|
73
|
+
});
|
|
74
|
+
context += '\n';
|
|
75
|
+
}
|
|
76
|
+
if (progress.isRepeatingAction) {
|
|
77
|
+
context += `⚠️ Warning: You may be repeating a similar action. Consider a different approach or move to the next step.\n\n`;
|
|
78
|
+
}
|
|
79
|
+
// Suggest next logical step
|
|
80
|
+
context += this.generateNextStepSuggestion();
|
|
81
|
+
context += `Continue working toward completing: "${progress.originalTask}"`;
|
|
82
|
+
return context;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get current state
|
|
86
|
+
*/
|
|
87
|
+
getState() {
|
|
88
|
+
return this.state;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Reset state
|
|
92
|
+
*/
|
|
93
|
+
reset() {
|
|
94
|
+
this.state = null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Estimate number of steps for a task
|
|
98
|
+
*/
|
|
99
|
+
estimateSteps(task) {
|
|
100
|
+
const taskLower = task.toLowerCase();
|
|
101
|
+
// Simple heuristics based on task complexity
|
|
102
|
+
if (taskLower.includes('create') || taskLower.includes('build') || taskLower.includes('implement')) {
|
|
103
|
+
return 5;
|
|
104
|
+
}
|
|
105
|
+
if (taskLower.includes('fix') || taskLower.includes('debug') || taskLower.includes('troubleshoot')) {
|
|
106
|
+
return 4;
|
|
107
|
+
}
|
|
108
|
+
if (taskLower.includes('analyze') || taskLower.includes('understand') || taskLower.includes('explain')) {
|
|
109
|
+
return 3;
|
|
110
|
+
}
|
|
111
|
+
if (taskLower.includes('read') || taskLower.includes('show') || taskLower.includes('list')) {
|
|
112
|
+
return 2;
|
|
113
|
+
}
|
|
114
|
+
// Default based on length
|
|
115
|
+
return Math.max(3, Math.min(8, Math.ceil(task.length / 50)));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Detect if the current tool call is repetitive
|
|
119
|
+
*/
|
|
120
|
+
detectRepetition(toolCall) {
|
|
121
|
+
if (this.state.recentToolCalls.length < 2)
|
|
122
|
+
return false;
|
|
123
|
+
const recent = this.state.recentToolCalls.slice(-2);
|
|
124
|
+
return recent.some(prevCall => prevCall.function.name === toolCall.function.name &&
|
|
125
|
+
JSON.stringify(prevCall.function.arguments) === JSON.stringify(toolCall.function.arguments));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Describe what a tool action accomplished
|
|
129
|
+
*/
|
|
130
|
+
describeToolAction(toolCall, _result) {
|
|
131
|
+
const toolName = toolCall.function.name;
|
|
132
|
+
const args = toolCall.function.arguments;
|
|
133
|
+
switch (toolName) {
|
|
134
|
+
case 'read_file':
|
|
135
|
+
return `Read file: ${args.filename || args.path || 'unknown'}`;
|
|
136
|
+
case 'write_file':
|
|
137
|
+
case 'create_file':
|
|
138
|
+
return `Created/wrote file: ${args.filename || args.path || 'unknown'}`;
|
|
139
|
+
case 'edit_file':
|
|
140
|
+
return `Edited file: ${args.filename || args.path || 'unknown'}`;
|
|
141
|
+
case 'execute_bash':
|
|
142
|
+
return `Executed command: ${(args.command || '').substring(0, 50)}${args.command?.length > 50 ? '...' : ''}`;
|
|
143
|
+
default:
|
|
144
|
+
return `Used ${toolName}`;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Generate intelligent next step suggestions
|
|
149
|
+
*/
|
|
150
|
+
generateNextStepSuggestion() {
|
|
151
|
+
if (!this.state)
|
|
152
|
+
return '';
|
|
153
|
+
const progress = this.state.progress;
|
|
154
|
+
const lastTool = progress.lastToolCall;
|
|
155
|
+
if (!lastTool) {
|
|
156
|
+
return 'Consider what information you need to gather first.\n\n';
|
|
157
|
+
}
|
|
158
|
+
const suggestions = [];
|
|
159
|
+
// Suggest logical next steps based on last tool
|
|
160
|
+
switch (lastTool.function.name) {
|
|
161
|
+
case 'read_file':
|
|
162
|
+
suggestions.push('Based on the file contents, determine what changes or analysis are needed.');
|
|
163
|
+
break;
|
|
164
|
+
case 'execute_bash':
|
|
165
|
+
suggestions.push('Review the command output and decide on the next action.');
|
|
166
|
+
break;
|
|
167
|
+
case 'create_file':
|
|
168
|
+
case 'write_file':
|
|
169
|
+
suggestions.push('Consider testing or verifying the file you just created.');
|
|
170
|
+
break;
|
|
171
|
+
case 'edit_file':
|
|
172
|
+
suggestions.push('Consider testing the changes or making additional modifications.');
|
|
173
|
+
break;
|
|
174
|
+
default:
|
|
175
|
+
suggestions.push('Use the tool result to inform your next action.');
|
|
176
|
+
}
|
|
177
|
+
// Add progress-based suggestions
|
|
178
|
+
if (progress.currentStep / progress.totalEstimatedSteps > 0.7) {
|
|
179
|
+
suggestions.push('You\'re near completion - focus on finalizing and testing.');
|
|
180
|
+
}
|
|
181
|
+
return suggestions.join(' ') + '\n\n';
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Detect if a message is a simple greeting to avoid over-interpreting
|
|
185
|
+
*/
|
|
186
|
+
isSimpleGreeting(message) {
|
|
187
|
+
const lowerMessage = message.toLowerCase().trim();
|
|
188
|
+
const greetings = [
|
|
189
|
+
'hi', 'hello', 'hey', 'hiya', 'howdy',
|
|
190
|
+
'good morning', 'good afternoon', 'good evening',
|
|
191
|
+
'what\'s up', 'whats up', 'sup', 'yo'
|
|
192
|
+
];
|
|
193
|
+
// Check if the entire message is just a greeting (with optional punctuation)
|
|
194
|
+
const cleanMessage = lowerMessage.replace(/[!?.,\s]+$/g, '');
|
|
195
|
+
return greetings.includes(cleanMessage) ||
|
|
196
|
+
(cleanMessage.length <= 10 && greetings.some(greeting => cleanMessage.includes(greeting)));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=conversationState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversationState.js","sourceRoot":"","sources":["../../../source/app/utils/conversationState.ts"],"names":[],"mappings":"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"}
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"AAmCA,MAAM,CAAC,OAAO,UAAU,GAAG,4CA0S1B"}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useApp } from 'ink';
|
|
3
|
+
import WelcomeMessage from './components/welcome-message.js';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { getThemeColors } from './config/themes.js';
|
|
6
|
+
import { ThemeContext } from './hooks/useTheme.js';
|
|
7
|
+
import UserInput from './components/user-input.js';
|
|
8
|
+
import Status from './components/status.js';
|
|
9
|
+
import ChatQueue from './components/chat-queue.js';
|
|
10
|
+
import ModelSelector from './components/model-selector.js';
|
|
11
|
+
import ProviderSelector from './components/provider-selector.js';
|
|
12
|
+
import ThemeSelector from './components/theme-selector.js';
|
|
13
|
+
import ThinkingIndicator from './components/thinking-indicator.js';
|
|
14
|
+
import CancellingIndicator from './components/cancelling-indicator.js';
|
|
15
|
+
import ToolConfirmation from './components/tool-confirmation.js';
|
|
16
|
+
import ToolExecutionIndicator from './components/tool-execution-indicator.js';
|
|
17
|
+
import BashExecutionIndicator from './components/bash-execution-indicator.js';
|
|
18
|
+
import { setGlobalMessageQueue } from './utils/message-queue.js';
|
|
19
|
+
import Spinner from 'ink-spinner';
|
|
20
|
+
import SecurityDisclaimer from './components/security-disclaimer.js';
|
|
21
|
+
// Import extracted hooks and utilities
|
|
22
|
+
import { useAppState } from './app/hooks/useAppState.js';
|
|
23
|
+
import { useChatHandler } from './app/hooks/useChatHandler.js';
|
|
24
|
+
import { useToolHandler } from './app/hooks/useToolHandler.js';
|
|
25
|
+
import { useModeHandlers } from './app/hooks/useModeHandlers.js';
|
|
26
|
+
import { useAppInitialization } from './app/hooks/useAppInitialization.js';
|
|
27
|
+
import { useDirectoryTrust } from './app/hooks/useDirectoryTrust.js';
|
|
28
|
+
import { createClearMessagesHandler, handleMessageSubmission, } from './app/utils/appUtils.js';
|
|
29
|
+
// Provide shared UI state to components
|
|
30
|
+
import { UIStateProvider } from './hooks/useUIState.js';
|
|
31
|
+
export default function App() {
|
|
32
|
+
// Use extracted hooks
|
|
33
|
+
const appState = useAppState();
|
|
34
|
+
const { exit } = useApp();
|
|
35
|
+
const { isTrusted, handleConfirmTrust, isTrustLoading, isTrustedError } = useDirectoryTrust();
|
|
36
|
+
const handleExit = () => {
|
|
37
|
+
exit();
|
|
38
|
+
};
|
|
39
|
+
// Create theme context value
|
|
40
|
+
const themeContextValue = {
|
|
41
|
+
currentTheme: appState.currentTheme,
|
|
42
|
+
colors: getThemeColors(appState.currentTheme),
|
|
43
|
+
setCurrentTheme: appState.setCurrentTheme,
|
|
44
|
+
};
|
|
45
|
+
// Initialize global message queue on component mount
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
setGlobalMessageQueue(appState.addToChatQueue);
|
|
48
|
+
}, []);
|
|
49
|
+
// Setup chat handler
|
|
50
|
+
const chatHandler = useChatHandler({
|
|
51
|
+
client: appState.client,
|
|
52
|
+
toolManager: appState.toolManager,
|
|
53
|
+
messages: appState.messages,
|
|
54
|
+
setMessages: appState.updateMessages,
|
|
55
|
+
getMessageTokens: appState.getMessageTokens,
|
|
56
|
+
currentModel: appState.currentModel,
|
|
57
|
+
setIsThinking: appState.setIsThinking,
|
|
58
|
+
setIsCancelling: appState.setIsCancelling,
|
|
59
|
+
setThinkingStats: appState.setThinkingStats,
|
|
60
|
+
addToChatQueue: appState.addToChatQueue,
|
|
61
|
+
componentKeyCounter: appState.componentKeyCounter,
|
|
62
|
+
abortController: appState.abortController,
|
|
63
|
+
setAbortController: appState.setAbortController,
|
|
64
|
+
onStartToolConfirmationFlow: (toolCalls, updatedMessages, assistantMsg, systemMessage) => {
|
|
65
|
+
appState.setPendingToolCalls(toolCalls);
|
|
66
|
+
appState.setCurrentToolIndex(0);
|
|
67
|
+
appState.setCompletedToolResults([]);
|
|
68
|
+
appState.setCurrentConversationContext({
|
|
69
|
+
updatedMessages,
|
|
70
|
+
assistantMsg,
|
|
71
|
+
systemMessage,
|
|
72
|
+
});
|
|
73
|
+
appState.setIsToolConfirmationMode(true);
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
// Setup tool handler
|
|
77
|
+
const toolHandler = useToolHandler({
|
|
78
|
+
pendingToolCalls: appState.pendingToolCalls,
|
|
79
|
+
currentToolIndex: appState.currentToolIndex,
|
|
80
|
+
completedToolResults: appState.completedToolResults,
|
|
81
|
+
currentConversationContext: appState.currentConversationContext,
|
|
82
|
+
setPendingToolCalls: appState.setPendingToolCalls,
|
|
83
|
+
setCurrentToolIndex: appState.setCurrentToolIndex,
|
|
84
|
+
setCompletedToolResults: appState.setCompletedToolResults,
|
|
85
|
+
setCurrentConversationContext: appState.setCurrentConversationContext,
|
|
86
|
+
setIsToolConfirmationMode: appState.setIsToolConfirmationMode,
|
|
87
|
+
setIsToolExecuting: appState.setIsToolExecuting,
|
|
88
|
+
setMessages: appState.updateMessages,
|
|
89
|
+
addToChatQueue: appState.addToChatQueue,
|
|
90
|
+
componentKeyCounter: appState.componentKeyCounter,
|
|
91
|
+
resetToolConfirmationState: appState.resetToolConfirmationState,
|
|
92
|
+
onProcessAssistantResponse: chatHandler.processAssistantResponse,
|
|
93
|
+
client: appState.client,
|
|
94
|
+
currentProvider: appState.currentProvider,
|
|
95
|
+
});
|
|
96
|
+
// Setup mode handlers
|
|
97
|
+
const modeHandlers = useModeHandlers({
|
|
98
|
+
client: appState.client,
|
|
99
|
+
currentModel: appState.currentModel,
|
|
100
|
+
currentProvider: appState.currentProvider,
|
|
101
|
+
setClient: appState.setClient,
|
|
102
|
+
setCurrentModel: appState.setCurrentModel,
|
|
103
|
+
setCurrentProvider: appState.setCurrentProvider,
|
|
104
|
+
setCurrentTheme: appState.setCurrentTheme,
|
|
105
|
+
setMessages: appState.updateMessages,
|
|
106
|
+
setIsModelSelectionMode: appState.setIsModelSelectionMode,
|
|
107
|
+
setIsProviderSelectionMode: appState.setIsProviderSelectionMode,
|
|
108
|
+
setIsThemeSelectionMode: appState.setIsThemeSelectionMode,
|
|
109
|
+
addToChatQueue: appState.addToChatQueue,
|
|
110
|
+
componentKeyCounter: appState.componentKeyCounter,
|
|
111
|
+
});
|
|
112
|
+
// Setup initialization
|
|
113
|
+
useAppInitialization({
|
|
114
|
+
setClient: appState.setClient,
|
|
115
|
+
setCurrentModel: appState.setCurrentModel,
|
|
116
|
+
setCurrentProvider: appState.setCurrentProvider,
|
|
117
|
+
setToolManager: appState.setToolManager,
|
|
118
|
+
setCustomCommandLoader: appState.setCustomCommandLoader,
|
|
119
|
+
setCustomCommandExecutor: appState.setCustomCommandExecutor,
|
|
120
|
+
setCustomCommandCache: appState.setCustomCommandCache,
|
|
121
|
+
setStartChat: appState.setStartChat,
|
|
122
|
+
setMcpInitialized: appState.setMcpInitialized,
|
|
123
|
+
addToChatQueue: appState.addToChatQueue,
|
|
124
|
+
componentKeyCounter: appState.componentKeyCounter,
|
|
125
|
+
customCommandCache: appState.customCommandCache,
|
|
126
|
+
});
|
|
127
|
+
// Memoize handlers to prevent unnecessary re-renders
|
|
128
|
+
const clearMessages = React.useMemo(() => createClearMessagesHandler(appState.updateMessages, appState.client), [appState.updateMessages, appState.client]);
|
|
129
|
+
const handleCancel = React.useCallback(() => {
|
|
130
|
+
if (appState.abortController) {
|
|
131
|
+
appState.setIsCancelling(true);
|
|
132
|
+
appState.abortController.abort();
|
|
133
|
+
}
|
|
134
|
+
}, [appState.abortController, appState.setIsCancelling]);
|
|
135
|
+
const handleMessageSubmit = React.useCallback(async (message) => {
|
|
136
|
+
await handleMessageSubmission(message, {
|
|
137
|
+
customCommandCache: appState.customCommandCache,
|
|
138
|
+
customCommandLoader: appState.customCommandLoader,
|
|
139
|
+
customCommandExecutor: appState.customCommandExecutor,
|
|
140
|
+
onClearMessages: clearMessages,
|
|
141
|
+
onEnterModelSelectionMode: modeHandlers.enterModelSelectionMode,
|
|
142
|
+
onEnterProviderSelectionMode: modeHandlers.enterProviderSelectionMode,
|
|
143
|
+
onEnterThemeSelectionMode: modeHandlers.enterThemeSelectionMode,
|
|
144
|
+
onHandleChatMessage: chatHandler.handleChatMessage,
|
|
145
|
+
onAddToChatQueue: appState.addToChatQueue,
|
|
146
|
+
componentKeyCounter: appState.componentKeyCounter,
|
|
147
|
+
setMessages: appState.updateMessages,
|
|
148
|
+
messages: appState.messages,
|
|
149
|
+
setIsBashExecuting: appState.setIsBashExecuting,
|
|
150
|
+
setCurrentBashCommand: appState.setCurrentBashCommand,
|
|
151
|
+
provider: appState.currentProvider,
|
|
152
|
+
model: appState.currentModel,
|
|
153
|
+
getMessageTokens: appState.getMessageTokens,
|
|
154
|
+
});
|
|
155
|
+
}, [
|
|
156
|
+
appState.customCommandCache,
|
|
157
|
+
appState.customCommandLoader,
|
|
158
|
+
appState.customCommandExecutor,
|
|
159
|
+
clearMessages,
|
|
160
|
+
modeHandlers.enterModelSelectionMode,
|
|
161
|
+
modeHandlers.enterProviderSelectionMode,
|
|
162
|
+
chatHandler.handleChatMessage,
|
|
163
|
+
appState.addToChatQueue,
|
|
164
|
+
appState.componentKeyCounter,
|
|
165
|
+
appState.updateMessages,
|
|
166
|
+
appState.messages,
|
|
167
|
+
appState.setIsBashExecuting,
|
|
168
|
+
appState.setCurrentBashCommand,
|
|
169
|
+
]);
|
|
170
|
+
// Memoize static components to prevent unnecessary re-renders
|
|
171
|
+
const staticComponents = React.useMemo(() => [
|
|
172
|
+
_jsx(Status, { provider: appState.currentProvider, model: appState.currentModel }, "status"),
|
|
173
|
+
], [appState.currentProvider, appState.currentModel]);
|
|
174
|
+
// Handle loading state for directory trust check
|
|
175
|
+
if (isTrustLoading) {
|
|
176
|
+
return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsxs(Text, { color: themeContextValue.colors.secondary, children: [_jsx(Spinner, { type: "dots2" }), " Checking directory trust..."] }) }));
|
|
177
|
+
}
|
|
178
|
+
// Handle error state for directory trust
|
|
179
|
+
if (isTrustedError) {
|
|
180
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Text, { color: themeContextValue.colors.error, children: ["\u26A0\uFE0F Error checking directory trust: ", isTrustedError] }), _jsx(Text, { color: themeContextValue.colors.secondary, children: "Please restart the application or check your permissions." })] }));
|
|
181
|
+
}
|
|
182
|
+
// Show security disclaimer if directory is not trusted
|
|
183
|
+
if (!isTrusted) {
|
|
184
|
+
return (_jsx(SecurityDisclaimer, { onConfirm: handleConfirmTrust, onExit: handleExit }));
|
|
185
|
+
}
|
|
186
|
+
return (_jsx(ThemeContext.Provider, { value: themeContextValue, children: _jsx(UIStateProvider, { children: _jsxs(Box, { flexDirection: "column", padding: 1, width: "100%", children: [_jsxs(Box, { flexGrow: 1, flexDirection: "column", minHeight: 0, children: [_jsx(WelcomeMessage, {}), appState.startChat && (_jsx(ChatQueue, { staticComponents: staticComponents, queuedComponents: appState.chatComponents }))] }), appState.startChat && (_jsxs(Box, { flexDirection: "column", children: [appState.isCancelling ? (_jsx(CancellingIndicator, {})) : appState.isThinking ? (_jsx(ThinkingIndicator, { contextSize: appState.thinkingStats.contextSize, totalTokensUsed: appState.thinkingStats.totalTokensUsed, tokensPerSecond: appState.thinkingStats.tokensPerSecond })) : null, appState.isModelSelectionMode ? (_jsx(ModelSelector, { client: appState.client, currentModel: appState.currentModel, onModelSelect: modeHandlers.handleModelSelect, onCancel: modeHandlers.handleModelSelectionCancel })) : appState.isProviderSelectionMode ? (_jsx(ProviderSelector, { currentProvider: appState.currentProvider, onProviderSelect: modeHandlers.handleProviderSelect, onCancel: modeHandlers.handleProviderSelectionCancel })) : appState.isThemeSelectionMode ? (_jsx(ThemeSelector, { onThemeSelect: modeHandlers.handleThemeSelect, onCancel: modeHandlers.handleThemeSelectionCancel })) : appState.isToolConfirmationMode &&
|
|
187
|
+
appState.pendingToolCalls[appState.currentToolIndex] ? (_jsx(ToolConfirmation, { toolCall: appState.pendingToolCalls[appState.currentToolIndex], onConfirm: toolHandler.handleToolConfirmation, onCancel: toolHandler.handleToolConfirmationCancel })) : appState.isToolExecuting &&
|
|
188
|
+
appState.pendingToolCalls[appState.currentToolIndex] ? (_jsx(ToolExecutionIndicator, { toolName: appState.pendingToolCalls[appState.currentToolIndex]
|
|
189
|
+
.function.name, currentIndex: appState.currentToolIndex, totalTools: appState.pendingToolCalls.length })) : appState.isBashExecuting ? (_jsx(BashExecutionIndicator, { command: appState.currentBashCommand })) : appState.mcpInitialized && appState.client ? (_jsx(UserInput, { customCommands: Array.from(appState.customCommandCache.keys()), onSubmit: handleMessageSubmit, disabled: appState.isThinking ||
|
|
190
|
+
appState.isToolExecuting ||
|
|
191
|
+
appState.isBashExecuting, onCancel: handleCancel })) : appState.mcpInitialized && !appState.client ? (_jsx(Text, { color: themeContextValue.colors.secondary, children: "\u26A0\uFE0F No LLM provider available. Chat is disabled. Please fix your provider configuration and restart." })) : (_jsxs(Text, { color: themeContextValue.colors.secondary, children: [_jsx(Spinner, { type: "dots2" }), " Loading..."] }))] }))] }) }) }));
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../source/cli.tsx"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../source/cli.tsx"],"names":[],"mappings":";;AACA,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,MAAM,CAAC,KAAC,GAAG,KAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-factory.d.ts","sourceRoot":"","sources":["../source/client-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,SAAS,EAAE,YAAY,EAA0B,MAAM,kBAAkB,CAAC;AAIvF,wBAAsB,eAAe,CACpC,QAAQ,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,cAAc,EAAE,YAAY,CAAA;CAAC,CAAC,CAO5D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { LangGraphClient } from './langgraph-client.js';
|
|
2
|
+
import { appConfig } from './config/index.js';
|
|
3
|
+
import { loadPreferences } from './config/preferences.js';
|
|
4
|
+
import { existsSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
export async function createLLMClient(provider) {
|
|
7
|
+
// Check if agents.config.json exists
|
|
8
|
+
const agentsJsonPath = join(process.cwd(), 'agents.config.json');
|
|
9
|
+
const hasConfigFile = existsSync(agentsJsonPath);
|
|
10
|
+
// Always use LangGraph - it handles both tool-calling and non-tool-calling models
|
|
11
|
+
return createLangGraphClient(provider, hasConfigFile);
|
|
12
|
+
}
|
|
13
|
+
async function createLangGraphClient(requestedProvider, hasConfigFile = true) {
|
|
14
|
+
// Load provider configs
|
|
15
|
+
const providers = loadProviderConfigs();
|
|
16
|
+
if (providers.length === 0) {
|
|
17
|
+
if (!hasConfigFile) {
|
|
18
|
+
throw new Error('No agents.config.json found. Please create a configuration file with provider settings.');
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
throw new Error('No providers configured in agents.config.json');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Determine which provider to try first
|
|
25
|
+
let targetProvider;
|
|
26
|
+
if (requestedProvider) {
|
|
27
|
+
targetProvider = requestedProvider;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Use preferences or default to first available provider
|
|
31
|
+
const preferences = loadPreferences();
|
|
32
|
+
targetProvider = preferences.lastProvider || providers[0].name;
|
|
33
|
+
}
|
|
34
|
+
// Order providers: requested first, then others
|
|
35
|
+
const availableProviders = providers.map(p => p.name);
|
|
36
|
+
const providerOrder = [
|
|
37
|
+
targetProvider,
|
|
38
|
+
...availableProviders.filter(p => p !== targetProvider)
|
|
39
|
+
];
|
|
40
|
+
const errors = [];
|
|
41
|
+
for (const providerType of providerOrder) {
|
|
42
|
+
try {
|
|
43
|
+
const providerConfig = providers.find(p => p.name === providerType);
|
|
44
|
+
if (!providerConfig) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
// Test provider connection
|
|
48
|
+
await testProviderConnection(providerConfig);
|
|
49
|
+
const client = await LangGraphClient.create(providerConfig);
|
|
50
|
+
return { client, actualProvider: providerType };
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
errors.push(`${providerType}: ${error.message}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// If we get here, all providers failed
|
|
57
|
+
if (!hasConfigFile) {
|
|
58
|
+
const combinedError = `No providers available: ${errors[0]?.split(': ')[1] || 'Unknown error'}\n\nPlease create an agents.config.json file with provider configuration.`;
|
|
59
|
+
throw new Error(combinedError);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const combinedError = `All configured providers failed:\n${errors.map(e => `• ${e}`).join('\n')}\n\nPlease check your provider configuration in agents.config.json`;
|
|
63
|
+
throw new Error(combinedError);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function loadProviderConfigs() {
|
|
67
|
+
const providers = [];
|
|
68
|
+
// Load providers from the new providers array structure
|
|
69
|
+
if (appConfig.providers) {
|
|
70
|
+
for (const provider of appConfig.providers) {
|
|
71
|
+
providers.push({
|
|
72
|
+
name: provider.name,
|
|
73
|
+
type: 'openai',
|
|
74
|
+
models: provider.models || [],
|
|
75
|
+
config: {
|
|
76
|
+
baseURL: provider.baseUrl,
|
|
77
|
+
apiKey: provider.apiKey || 'dummy-key',
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return providers;
|
|
83
|
+
}
|
|
84
|
+
async function testProviderConnection(providerConfig) {
|
|
85
|
+
// Test local servers for connectivity
|
|
86
|
+
if (providerConfig.config.baseURL && providerConfig.config.baseURL.includes('localhost')) {
|
|
87
|
+
try {
|
|
88
|
+
await fetch(providerConfig.config.baseURL, {
|
|
89
|
+
signal: AbortSignal.timeout(5000)
|
|
90
|
+
});
|
|
91
|
+
// Don't check response.ok as some servers return 404 for root path
|
|
92
|
+
// We just need to confirm the server responded (not a network error)
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
// Only throw if it's a network error, not a 404 or other HTTP response
|
|
96
|
+
if (error instanceof TypeError) {
|
|
97
|
+
throw new Error(`Server not accessible at ${providerConfig.config.baseURL}`);
|
|
98
|
+
}
|
|
99
|
+
// For AbortError (timeout), also throw
|
|
100
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
101
|
+
throw new Error(`Server not accessible at ${providerConfig.config.baseURL}`);
|
|
102
|
+
}
|
|
103
|
+
// Other errors (like HTTP errors) mean the server is responding, so pass
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Require API key for hosted providers
|
|
107
|
+
if (!providerConfig.config.apiKey && !providerConfig.config.baseURL?.includes('localhost')) {
|
|
108
|
+
throw new Error('API key required for hosted providers');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=client-factory.js.map
|