@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,532 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { toolDefinitions } from '../../tools/index.js';
|
|
3
|
+
import { processPromptTemplate } from '../../utils/prompt-processor.js';
|
|
4
|
+
import { parseToolCallsFromContent, cleanContentFromToolCalls, } from '../../tool-calling/index.js';
|
|
5
|
+
import { ConversationStateManager } from '../utils/conversationState.js';
|
|
6
|
+
import UserMessage from '../../components/user-message.js';
|
|
7
|
+
import AssistantMessage from '../../components/assistant-message.js';
|
|
8
|
+
import ErrorMessage from '../../components/error-message.js';
|
|
9
|
+
import ToolMessage from '../../components/tool-message.js';
|
|
10
|
+
import React from 'react';
|
|
11
|
+
// Helper function to filter out invalid tool calls and deduplicate by ID and function
|
|
12
|
+
const filterValidToolCalls = (toolCalls) => {
|
|
13
|
+
const seenIds = new Set();
|
|
14
|
+
const seenFunctionCalls = new Set();
|
|
15
|
+
return toolCalls.filter(toolCall => {
|
|
16
|
+
// Filter out completely empty tool calls
|
|
17
|
+
if (!toolCall.id || !toolCall.function?.name) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
// Filter out tool calls with empty names
|
|
21
|
+
if (toolCall.function.name.trim() === '') {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
// Filter out tool calls for tools that don't exist
|
|
25
|
+
// Filter out duplicate tool call IDs (GPT-5 issue)
|
|
26
|
+
if (seenIds.has(toolCall.id)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
// Filter out functionally identical tool calls (same tool + args)
|
|
30
|
+
const functionSignature = `${toolCall.function.name}:${JSON.stringify(toolCall.function.arguments)}`;
|
|
31
|
+
if (seenFunctionCalls.has(functionSignature)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
seenIds.add(toolCall.id);
|
|
35
|
+
seenFunctionCalls.add(functionSignature);
|
|
36
|
+
return true;
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
export function useChatHandler({ client, toolManager, messages, setMessages, getMessageTokens, currentModel, setIsThinking, setIsCancelling, setThinkingStats, addToChatQueue, componentKeyCounter, abortController, setAbortController, onStartToolConfirmationFlow, }) {
|
|
40
|
+
// Conversation state manager for enhanced context
|
|
41
|
+
const conversationStateManager = React.useRef(new ConversationStateManager());
|
|
42
|
+
// Reset conversation state when messages are cleared
|
|
43
|
+
React.useEffect(() => {
|
|
44
|
+
if (messages.length === 0) {
|
|
45
|
+
conversationStateManager.current.reset();
|
|
46
|
+
}
|
|
47
|
+
}, [messages.length]);
|
|
48
|
+
// Display tool result with proper formatting (similar to useToolHandler)
|
|
49
|
+
const displayToolResult = async (toolCall, result) => {
|
|
50
|
+
if (toolManager) {
|
|
51
|
+
const formatter = toolManager.getToolFormatter(result.name);
|
|
52
|
+
if (formatter) {
|
|
53
|
+
try {
|
|
54
|
+
// Parse arguments if they're a JSON string
|
|
55
|
+
let parsedArgs = toolCall.function.arguments;
|
|
56
|
+
if (typeof parsedArgs === 'string') {
|
|
57
|
+
try {
|
|
58
|
+
parsedArgs = JSON.parse(parsedArgs);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
// If parsing fails, use as-is
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const formattedResult = await formatter(parsedArgs, result.content);
|
|
65
|
+
if (React.isValidElement(formattedResult)) {
|
|
66
|
+
addToChatQueue(React.cloneElement(formattedResult, {
|
|
67
|
+
key: `tool-result-${result.tool_call_id}-${componentKeyCounter}-${Date.now()}`,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
addToChatQueue(_jsx(ToolMessage, { title: `⚒ ${result.name}`, message: String(formattedResult), hideBox: true }, `tool-result-${result.tool_call_id}-${componentKeyCounter}-${Date.now()}`));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (formatterError) {
|
|
75
|
+
// If formatter fails, show raw result
|
|
76
|
+
addToChatQueue(_jsx(ToolMessage, { title: `⚒ ${result.name}`, message: result.content, hideBox: true }, `tool-result-${result.tool_call_id}-${componentKeyCounter}`));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// No formatter, show raw result
|
|
81
|
+
addToChatQueue(_jsx(ToolMessage, { title: `⚒ ${result.name}`, message: result.content, hideBox: true }, `tool-result-${result.tool_call_id}-${componentKeyCounter}`));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
// Throttle thinking stats updates to reduce re-renders
|
|
86
|
+
const throttledSetThinkingStats = React.useCallback((() => {
|
|
87
|
+
let lastUpdate = 0;
|
|
88
|
+
const throttleMs = 250; // Update at most 4 times per second
|
|
89
|
+
return (stats) => {
|
|
90
|
+
const now = Date.now();
|
|
91
|
+
if (now - lastUpdate >= throttleMs) {
|
|
92
|
+
lastUpdate = now;
|
|
93
|
+
setThinkingStats(stats);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
})(), [setThinkingStats]);
|
|
97
|
+
// Helper to make async iterator cancellable with frequent abort checking
|
|
98
|
+
const makeCancellableStream = async function* (stream, abortSignal) {
|
|
99
|
+
const iterator = stream[Symbol.asyncIterator]();
|
|
100
|
+
try {
|
|
101
|
+
while (true) {
|
|
102
|
+
if (abortSignal?.aborted) {
|
|
103
|
+
throw new Error('Operation was cancelled');
|
|
104
|
+
}
|
|
105
|
+
// Use Promise.race to make iterator.next() cancellable with frequent checking
|
|
106
|
+
const nextPromise = iterator.next();
|
|
107
|
+
const timeoutPromise = new Promise(resolve => {
|
|
108
|
+
const checkInterval = setInterval(() => {
|
|
109
|
+
if (abortSignal?.aborted) {
|
|
110
|
+
clearInterval(checkInterval);
|
|
111
|
+
resolve({ done: false, cancelled: true });
|
|
112
|
+
}
|
|
113
|
+
}, 100); // Check every 100ms
|
|
114
|
+
// Clear interval when next() completes
|
|
115
|
+
nextPromise.finally(() => clearInterval(checkInterval));
|
|
116
|
+
});
|
|
117
|
+
const result = (await Promise.race([
|
|
118
|
+
nextPromise,
|
|
119
|
+
timeoutPromise,
|
|
120
|
+
]));
|
|
121
|
+
if (result.cancelled || abortSignal?.aborted) {
|
|
122
|
+
throw new Error('Operation was cancelled');
|
|
123
|
+
}
|
|
124
|
+
if (result.done)
|
|
125
|
+
break;
|
|
126
|
+
yield result.value;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
if (iterator.return) {
|
|
131
|
+
await iterator.return();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
// Process assistant response with token tracking (for initial user messages)
|
|
136
|
+
const processAssistantResponseWithTokenTracking = async (systemMessage, messages, controller) => {
|
|
137
|
+
if (!client)
|
|
138
|
+
return;
|
|
139
|
+
const stream = client.chatStream([systemMessage, ...messages], toolManager?.getAllTools() || []);
|
|
140
|
+
let toolCalls = null;
|
|
141
|
+
let fullContent = '';
|
|
142
|
+
let tokenCount = 0;
|
|
143
|
+
let hasContent = false;
|
|
144
|
+
// Process streaming response with cancellation support
|
|
145
|
+
const cancellableStream = makeCancellableStream(stream, controller.signal);
|
|
146
|
+
for await (const chunk of cancellableStream) {
|
|
147
|
+
hasContent = true;
|
|
148
|
+
if (chunk.message?.content) {
|
|
149
|
+
fullContent += chunk.message.content;
|
|
150
|
+
tokenCount = Math.ceil(fullContent.length / 4);
|
|
151
|
+
}
|
|
152
|
+
// If server provides eval_count, use it as it's more accurate
|
|
153
|
+
// But ensure we don't reset to a lower count if content tokens are higher
|
|
154
|
+
if (chunk.eval_count) {
|
|
155
|
+
tokenCount = Math.max(tokenCount, chunk.eval_count);
|
|
156
|
+
}
|
|
157
|
+
if (chunk.message?.tool_calls) {
|
|
158
|
+
toolCalls = chunk.message.tool_calls;
|
|
159
|
+
}
|
|
160
|
+
// Update thinking stats in real-time
|
|
161
|
+
if (!chunk.done) {
|
|
162
|
+
const systemTokens = Math.ceil(systemMessage.content.length / 4); // Use actual system prompt length
|
|
163
|
+
const conversationTokens = getMessageTokens
|
|
164
|
+
? messages.reduce((total, msg) => total + getMessageTokens(msg), 0)
|
|
165
|
+
: messages.reduce((total, msg) => total + Math.ceil((msg.content?.length || 0) / 4), 0);
|
|
166
|
+
const totalTokensUsed = systemTokens + conversationTokens + tokenCount;
|
|
167
|
+
throttledSetThinkingStats({
|
|
168
|
+
tokenCount,
|
|
169
|
+
contextSize: client.getContextSize(),
|
|
170
|
+
totalTokensUsed,
|
|
171
|
+
tokensPerSecond: chunk.tokens_per_second,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (!hasContent) {
|
|
176
|
+
throw new Error('No response received from model');
|
|
177
|
+
}
|
|
178
|
+
// Parse any tool calls from content for non-tool-calling models
|
|
179
|
+
const parsedToolCalls = parseToolCallsFromContent(fullContent);
|
|
180
|
+
const cleanedContent = cleanContentFromToolCalls(fullContent, parsedToolCalls);
|
|
181
|
+
// Display the assistant response (cleaned of any tool calls)
|
|
182
|
+
if (cleanedContent.trim()) {
|
|
183
|
+
addToChatQueue(_jsx(AssistantMessage, { message: cleanedContent, model: currentModel }, `assistant-${componentKeyCounter}`));
|
|
184
|
+
}
|
|
185
|
+
// Merge structured tool calls from LangGraph with content-parsed tool calls
|
|
186
|
+
const allToolCalls = [...(toolCalls || []), ...parsedToolCalls];
|
|
187
|
+
const validToolCalls = filterValidToolCalls(allToolCalls);
|
|
188
|
+
// Add assistant message to conversation history
|
|
189
|
+
const assistantMsg = {
|
|
190
|
+
role: 'assistant',
|
|
191
|
+
content: cleanedContent,
|
|
192
|
+
tool_calls: validToolCalls.length > 0 ? validToolCalls : undefined,
|
|
193
|
+
};
|
|
194
|
+
setMessages([...messages, assistantMsg]);
|
|
195
|
+
// Update conversation state with assistant message
|
|
196
|
+
conversationStateManager.current.updateAssistantMessage(assistantMsg);
|
|
197
|
+
// Handle tool calls if present - this continues the loop
|
|
198
|
+
if (validToolCalls && validToolCalls.length > 0) {
|
|
199
|
+
// First, validate tools and separate valid from unknown
|
|
200
|
+
const knownToolCalls = [];
|
|
201
|
+
const unknownToolErrors = [];
|
|
202
|
+
for (const toolCall of validToolCalls) {
|
|
203
|
+
if (!toolManager?.hasTool(toolCall.function.name)) {
|
|
204
|
+
// Create error result for unknown tool
|
|
205
|
+
const errorResult = {
|
|
206
|
+
tool_call_id: toolCall.id,
|
|
207
|
+
role: 'tool',
|
|
208
|
+
name: toolCall.function.name,
|
|
209
|
+
content: `Error: Unknown tool: ${toolCall.function.name}`,
|
|
210
|
+
};
|
|
211
|
+
unknownToolErrors.push(errorResult);
|
|
212
|
+
// Display the error result
|
|
213
|
+
await displayToolResult(toolCall, errorResult);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
// Tool exists, add to valid list
|
|
217
|
+
knownToolCalls.push(toolCall);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// If there were unknown tools, continue conversation with all errors
|
|
221
|
+
if (unknownToolErrors.length > 0) {
|
|
222
|
+
const toolMessages = unknownToolErrors.map(result => ({
|
|
223
|
+
role: 'tool',
|
|
224
|
+
content: result.content || '',
|
|
225
|
+
tool_call_id: result.tool_call_id,
|
|
226
|
+
name: result.name,
|
|
227
|
+
}));
|
|
228
|
+
const updatedMessagesWithError = [
|
|
229
|
+
...messages,
|
|
230
|
+
assistantMsg,
|
|
231
|
+
...toolMessages,
|
|
232
|
+
];
|
|
233
|
+
setMessages(updatedMessagesWithError);
|
|
234
|
+
// Continue the main conversation loop with error messages as context
|
|
235
|
+
await processAssistantResponse(systemMessage, updatedMessagesWithError);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
// If we get here, all tools are valid - proceed with normal flow
|
|
239
|
+
// Use knownToolCalls for the rest of the processing
|
|
240
|
+
// Separate tools that need confirmation vs those that don't
|
|
241
|
+
const toolsNeedingConfirmation = [];
|
|
242
|
+
const toolsToExecuteDirectly = [];
|
|
243
|
+
for (const toolCall of knownToolCalls) {
|
|
244
|
+
const toolDef = toolDefinitions.find(def => def.config.function.name === toolCall.function.name);
|
|
245
|
+
if (toolDef && toolDef.requiresConfirmation === false) {
|
|
246
|
+
toolsToExecuteDirectly.push(toolCall);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
toolsNeedingConfirmation.push(toolCall);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Execute non-confirmation tools directly
|
|
253
|
+
if (toolsToExecuteDirectly.length > 0) {
|
|
254
|
+
// Import processToolUse here to avoid circular dependencies
|
|
255
|
+
const { processToolUse } = await import('../../message-handler.js');
|
|
256
|
+
const directResults = [];
|
|
257
|
+
for (const toolCall of toolsToExecuteDirectly) {
|
|
258
|
+
try {
|
|
259
|
+
// Double-check tool exists before execution (safety net)
|
|
260
|
+
if (!toolManager?.hasTool(toolCall.function.name)) {
|
|
261
|
+
throw new Error(`Unknown tool: ${toolCall.function.name}`);
|
|
262
|
+
}
|
|
263
|
+
const result = await processToolUse(toolCall);
|
|
264
|
+
directResults.push(result);
|
|
265
|
+
// Update conversation state with tool execution
|
|
266
|
+
conversationStateManager.current.updateAfterToolExecution(toolCall, result.content);
|
|
267
|
+
// Display the tool result immediately
|
|
268
|
+
await displayToolResult(toolCall, result);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
// Handle tool execution errors
|
|
272
|
+
const errorResult = {
|
|
273
|
+
tool_call_id: toolCall.id,
|
|
274
|
+
role: 'tool',
|
|
275
|
+
name: toolCall.function.name,
|
|
276
|
+
content: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
277
|
+
};
|
|
278
|
+
directResults.push(errorResult);
|
|
279
|
+
// Update conversation state with error
|
|
280
|
+
conversationStateManager.current.updateAfterToolExecution(toolCall, errorResult.content);
|
|
281
|
+
// Display the error result
|
|
282
|
+
await displayToolResult(toolCall, errorResult);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// If we have results, continue the conversation with them
|
|
286
|
+
if (directResults.length > 0) {
|
|
287
|
+
// Format tool results as standard tool messages
|
|
288
|
+
const toolMessages = directResults.map(result => ({
|
|
289
|
+
role: 'tool',
|
|
290
|
+
content: result.content || '',
|
|
291
|
+
tool_call_id: result.tool_call_id,
|
|
292
|
+
name: result.name,
|
|
293
|
+
}));
|
|
294
|
+
const updatedMessagesWithTools = [
|
|
295
|
+
...messages,
|
|
296
|
+
assistantMsg,
|
|
297
|
+
...toolMessages,
|
|
298
|
+
];
|
|
299
|
+
setMessages(updatedMessagesWithTools);
|
|
300
|
+
// Continue the main conversation loop with tool results as context
|
|
301
|
+
await processAssistantResponse(systemMessage, updatedMessagesWithTools);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Start confirmation flow only for tools that need it
|
|
306
|
+
if (toolsNeedingConfirmation.length > 0) {
|
|
307
|
+
onStartToolConfirmationFlow(toolsNeedingConfirmation, messages, assistantMsg, systemMessage);
|
|
308
|
+
return; // IMPORTANT: Stop processing here, wait for user confirmation
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
// Process assistant response - handles the conversation loop with potential tool calls (for follow-ups)
|
|
313
|
+
const processAssistantResponse = async (systemMessage, messages) => {
|
|
314
|
+
if (!client)
|
|
315
|
+
return;
|
|
316
|
+
// Ensure we have an abort controller for this request
|
|
317
|
+
let controller = abortController;
|
|
318
|
+
if (!controller) {
|
|
319
|
+
controller = new AbortController();
|
|
320
|
+
setAbortController(controller);
|
|
321
|
+
}
|
|
322
|
+
try {
|
|
323
|
+
setIsThinking(true);
|
|
324
|
+
const stream = client.chatStream([systemMessage, ...messages], toolManager?.getAllTools() || []);
|
|
325
|
+
let toolCalls = null;
|
|
326
|
+
let fullContent = '';
|
|
327
|
+
let hasContent = false;
|
|
328
|
+
let tokenCount = 0;
|
|
329
|
+
// Process streaming response with progress updates and cancellation support
|
|
330
|
+
const cancellableStream = makeCancellableStream(stream, controller.signal);
|
|
331
|
+
for await (const chunk of cancellableStream) {
|
|
332
|
+
hasContent = true;
|
|
333
|
+
if (chunk.message?.content) {
|
|
334
|
+
fullContent += chunk.message.content;
|
|
335
|
+
tokenCount = Math.ceil(fullContent.length / 4);
|
|
336
|
+
}
|
|
337
|
+
// If server provides eval_count, use it as it's more accurate
|
|
338
|
+
// But ensure we don't reset to a lower count if content tokens are higher
|
|
339
|
+
if (chunk.eval_count) {
|
|
340
|
+
tokenCount = Math.max(tokenCount, chunk.eval_count);
|
|
341
|
+
}
|
|
342
|
+
if (chunk.message?.tool_calls) {
|
|
343
|
+
toolCalls = chunk.message.tool_calls;
|
|
344
|
+
}
|
|
345
|
+
// Update thinking stats in real-time (similar to initial response)
|
|
346
|
+
if (!chunk.done) {
|
|
347
|
+
const systemTokens = Math.ceil(systemMessage.content.length / 4); // Use actual system prompt length
|
|
348
|
+
const conversationTokens = getMessageTokens
|
|
349
|
+
? messages.reduce((total, msg) => total + getMessageTokens(msg), 0)
|
|
350
|
+
: messages.reduce((total, msg) => total + Math.ceil((msg.content?.length || 0) / 4), 0);
|
|
351
|
+
const totalTokensUsed = systemTokens + conversationTokens + tokenCount;
|
|
352
|
+
throttledSetThinkingStats({
|
|
353
|
+
tokenCount,
|
|
354
|
+
contextSize: client.getContextSize(),
|
|
355
|
+
totalTokensUsed,
|
|
356
|
+
tokensPerSecond: chunk.tokens_per_second,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
if (!hasContent) {
|
|
361
|
+
throw new Error('No response received from model');
|
|
362
|
+
}
|
|
363
|
+
// Parse any tool calls from content for non-tool-calling models
|
|
364
|
+
const parsedToolCalls = parseToolCallsFromContent(fullContent);
|
|
365
|
+
const cleanedContent = cleanContentFromToolCalls(fullContent, parsedToolCalls);
|
|
366
|
+
// Display the assistant response (cleaned of any tool calls)
|
|
367
|
+
if (cleanedContent.trim()) {
|
|
368
|
+
addToChatQueue(_jsx(AssistantMessage, { message: cleanedContent, model: currentModel }, `assistant-${componentKeyCounter}`));
|
|
369
|
+
}
|
|
370
|
+
// Merge structured tool calls from LangGraph with content-parsed tool calls
|
|
371
|
+
const allToolCalls = [...(toolCalls || []), ...parsedToolCalls];
|
|
372
|
+
const validToolCalls = filterValidToolCalls(allToolCalls);
|
|
373
|
+
// Add assistant message to conversation history
|
|
374
|
+
const assistantMsg = {
|
|
375
|
+
role: 'assistant',
|
|
376
|
+
content: cleanedContent,
|
|
377
|
+
tool_calls: validToolCalls.length > 0 ? validToolCalls : undefined,
|
|
378
|
+
};
|
|
379
|
+
setMessages([...messages, assistantMsg]);
|
|
380
|
+
// Update conversation state with assistant message
|
|
381
|
+
conversationStateManager.current.updateAssistantMessage(assistantMsg);
|
|
382
|
+
// Handle tool calls if present - this continues the loop
|
|
383
|
+
if (validToolCalls && validToolCalls.length > 0) {
|
|
384
|
+
// Separate tools that need confirmation vs those that don't
|
|
385
|
+
const toolsNeedingConfirmation = [];
|
|
386
|
+
const toolsToExecuteDirectly = [];
|
|
387
|
+
for (const toolCall of validToolCalls) {
|
|
388
|
+
const toolDef = toolDefinitions.find(def => def.config.function.name === toolCall.function.name);
|
|
389
|
+
if (toolDef && toolDef.requiresConfirmation === false) {
|
|
390
|
+
toolsToExecuteDirectly.push(toolCall);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
toolsNeedingConfirmation.push(toolCall);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// Execute non-confirmation tools directly
|
|
397
|
+
if (toolsToExecuteDirectly.length > 0) {
|
|
398
|
+
// Import processToolUse here to avoid circular dependencies
|
|
399
|
+
const { processToolUse } = await import('../../message-handler.js');
|
|
400
|
+
const directResults = [];
|
|
401
|
+
for (const toolCall of toolsToExecuteDirectly) {
|
|
402
|
+
try {
|
|
403
|
+
const result = await processToolUse(toolCall);
|
|
404
|
+
directResults.push(result);
|
|
405
|
+
// Update conversation state with tool execution
|
|
406
|
+
conversationStateManager.current.updateAfterToolExecution(toolCall, result.content);
|
|
407
|
+
// Display the tool result immediately
|
|
408
|
+
await displayToolResult(toolCall, result);
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
// Handle tool execution errors
|
|
412
|
+
const errorResult = {
|
|
413
|
+
tool_call_id: toolCall.id,
|
|
414
|
+
role: 'tool',
|
|
415
|
+
name: toolCall.function.name,
|
|
416
|
+
content: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
417
|
+
};
|
|
418
|
+
directResults.push(errorResult);
|
|
419
|
+
// Update conversation state with error
|
|
420
|
+
conversationStateManager.current.updateAfterToolExecution(toolCall, errorResult.content);
|
|
421
|
+
// Display the error result
|
|
422
|
+
await displayToolResult(toolCall, errorResult);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
// If we have results, continue the conversation with them
|
|
426
|
+
if (directResults.length > 0) {
|
|
427
|
+
// Format tool results as standard tool messages
|
|
428
|
+
const toolMessages = directResults.map(result => ({
|
|
429
|
+
role: 'tool',
|
|
430
|
+
content: result.content || '',
|
|
431
|
+
tool_call_id: result.tool_call_id,
|
|
432
|
+
name: result.name,
|
|
433
|
+
}));
|
|
434
|
+
const updatedMessagesWithTools = [
|
|
435
|
+
...messages,
|
|
436
|
+
assistantMsg,
|
|
437
|
+
...toolMessages,
|
|
438
|
+
];
|
|
439
|
+
setMessages(updatedMessagesWithTools);
|
|
440
|
+
// Continue the main conversation loop with tool results as context
|
|
441
|
+
const controller = new AbortController();
|
|
442
|
+
await processAssistantResponseWithTokenTracking(systemMessage, updatedMessagesWithTools, controller);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
// Start confirmation flow only for tools that need it
|
|
447
|
+
if (toolsNeedingConfirmation.length > 0) {
|
|
448
|
+
onStartToolConfirmationFlow(toolsNeedingConfirmation, messages, assistantMsg, systemMessage);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// If no tool calls, the conversation naturally ends here
|
|
452
|
+
}
|
|
453
|
+
catch (error) {
|
|
454
|
+
if (error instanceof Error &&
|
|
455
|
+
error.message === 'Operation was cancelled') {
|
|
456
|
+
addToChatQueue(_jsx(ErrorMessage, { message: "Operation was cancelled by user", hideBox: true }, `cancelled-${componentKeyCounter}`));
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
addToChatQueue(_jsx(ErrorMessage, { message: `Conversation error: ${error}` }, `error-${componentKeyCounter}`));
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
finally {
|
|
463
|
+
setIsThinking(false);
|
|
464
|
+
setIsCancelling(false);
|
|
465
|
+
setAbortController(null);
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
// Handle chat message processing
|
|
469
|
+
const handleChatMessage = async (message) => {
|
|
470
|
+
if (!client || !toolManager)
|
|
471
|
+
return;
|
|
472
|
+
// Add user message to chat
|
|
473
|
+
addToChatQueue(_jsx(UserMessage, { message: message }, `user-${componentKeyCounter}`));
|
|
474
|
+
// Add user message to conversation history
|
|
475
|
+
const userMessage = { role: 'user', content: message };
|
|
476
|
+
const updatedMessages = [...messages, userMessage];
|
|
477
|
+
setMessages(updatedMessages);
|
|
478
|
+
// Initialize conversation state if this is a new conversation
|
|
479
|
+
if (messages.length === 0) {
|
|
480
|
+
conversationStateManager.current.initializeState(message);
|
|
481
|
+
}
|
|
482
|
+
// Create abort controller for cancellation
|
|
483
|
+
const controller = new AbortController();
|
|
484
|
+
setAbortController(controller);
|
|
485
|
+
// Start thinking indicator and streaming
|
|
486
|
+
setIsThinking(true);
|
|
487
|
+
// Initialize per-message stats with existing conversation context
|
|
488
|
+
// const systemTokens = Math.ceil(systemPrompt.length / 4); // Comment out, will calculate later
|
|
489
|
+
const existingConversationTokens = getMessageTokens
|
|
490
|
+
? updatedMessages.reduce((total, msg) => total + getMessageTokens(msg), 0)
|
|
491
|
+
: updatedMessages.reduce((total, msg) => total + Math.ceil((msg.content?.length || 0) / 4), 0);
|
|
492
|
+
try {
|
|
493
|
+
// Load and process system prompt with dynamic tool documentation
|
|
494
|
+
const availableTools = toolManager ? toolManager.getAllTools() : [];
|
|
495
|
+
const systemPrompt = processPromptTemplate(availableTools);
|
|
496
|
+
// Create stream request
|
|
497
|
+
const systemMessage = {
|
|
498
|
+
role: 'system',
|
|
499
|
+
content: systemPrompt,
|
|
500
|
+
};
|
|
501
|
+
// Use the new conversation loop
|
|
502
|
+
// Initialize per-message stats with actual system prompt tokens
|
|
503
|
+
const systemTokens = Math.ceil(systemMessage.content.length / 4);
|
|
504
|
+
setThinkingStats({
|
|
505
|
+
tokenCount: 0,
|
|
506
|
+
contextSize: client.getContextSize(),
|
|
507
|
+
totalTokensUsed: systemTokens + existingConversationTokens,
|
|
508
|
+
});
|
|
509
|
+
// Use the new conversation loop
|
|
510
|
+
await processAssistantResponseWithTokenTracking(systemMessage, updatedMessages, controller);
|
|
511
|
+
}
|
|
512
|
+
catch (error) {
|
|
513
|
+
if (error instanceof Error &&
|
|
514
|
+
error.message === 'Operation was cancelled') {
|
|
515
|
+
addToChatQueue(_jsx(ErrorMessage, { message: "Operation was cancelled by user", hideBox: true }, `cancelled-${componentKeyCounter}`));
|
|
516
|
+
}
|
|
517
|
+
else {
|
|
518
|
+
addToChatQueue(_jsx(ErrorMessage, { message: `Chat error: ${error}` }, `error-${componentKeyCounter}`));
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
finally {
|
|
522
|
+
setIsThinking(false);
|
|
523
|
+
setIsCancelling(false);
|
|
524
|
+
setAbortController(null);
|
|
525
|
+
}
|
|
526
|
+
};
|
|
527
|
+
return {
|
|
528
|
+
handleChatMessage,
|
|
529
|
+
processAssistantResponse,
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=useChatHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChatHandler.js","sourceRoot":"","sources":["../../../source/app/hooks/useChatHandler.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface UseDirectoryTrustReturn {
|
|
2
|
+
isTrusted: boolean;
|
|
3
|
+
handleConfirmTrust: () => void;
|
|
4
|
+
isTrustLoading: boolean;
|
|
5
|
+
isTrustedError: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Custom hook for managing directory trust functionality.
|
|
9
|
+
* Handles checking if a directory is trusted and adding it to trusted directories.
|
|
10
|
+
*
|
|
11
|
+
* @param directory - The directory path to check trust for (defaults to current working directory)
|
|
12
|
+
* @returns Object containing trust state and handler functions
|
|
13
|
+
*/
|
|
14
|
+
export declare function useDirectoryTrust(directory?: string): UseDirectoryTrustReturn;
|
|
15
|
+
//# sourceMappingURL=useDirectoryTrust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDirectoryTrust.d.ts","sourceRoot":"","sources":["../../../source/app/hooks/useDirectoryTrust.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,MAAsB,GAAG,uBAAuB,CA4E5F"}
|