snow-ai 0.4.15 → 0.4.17
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/bundle/cli.mjs +477445 -0
- package/bundle/sql-wasm.wasm +0 -0
- package/package.json +31 -26
- package/dist/agents/codebaseIndexAgent.d.ts +0 -102
- package/dist/agents/codebaseIndexAgent.js +0 -641
- package/dist/agents/codebaseReviewAgent.d.ts +0 -61
- package/dist/agents/codebaseReviewAgent.js +0 -301
- package/dist/agents/compactAgent.d.ts +0 -55
- package/dist/agents/compactAgent.js +0 -306
- package/dist/agents/promptOptimizeAgent.d.ts +0 -54
- package/dist/agents/promptOptimizeAgent.js +0 -268
- package/dist/agents/reviewAgent.d.ts +0 -50
- package/dist/agents/reviewAgent.js +0 -265
- package/dist/agents/summaryAgent.d.ts +0 -57
- package/dist/agents/summaryAgent.js +0 -260
- package/dist/api/anthropic.d.ts +0 -44
- package/dist/api/anthropic.js +0 -598
- package/dist/api/chat.d.ts +0 -73
- package/dist/api/chat.js +0 -386
- package/dist/api/embedding.d.ts +0 -34
- package/dist/api/embedding.js +0 -80
- package/dist/api/gemini.d.ts +0 -31
- package/dist/api/gemini.js +0 -445
- package/dist/api/models.d.ts +0 -15
- package/dist/api/models.js +0 -139
- package/dist/api/responses.d.ts +0 -38
- package/dist/api/responses.js +0 -515
- package/dist/api/systemPrompt.d.ts +0 -4
- package/dist/api/systemPrompt.js +0 -408
- package/dist/api/types.d.ts +0 -53
- package/dist/api/types.js +0 -4
- package/dist/app.d.ts +0 -8
- package/dist/app.js +0 -112
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -199
- package/dist/hooks/useAgentPicker.d.ts +0 -14
- package/dist/hooks/useAgentPicker.js +0 -119
- package/dist/hooks/useClipboard.d.ts +0 -4
- package/dist/hooks/useClipboard.js +0 -175
- package/dist/hooks/useCommandHandler.d.ts +0 -35
- package/dist/hooks/useCommandHandler.js +0 -346
- package/dist/hooks/useCommandPanel.d.ts +0 -17
- package/dist/hooks/useCommandPanel.js +0 -114
- package/dist/hooks/useConversation.d.ts +0 -49
- package/dist/hooks/useConversation.js +0 -1052
- package/dist/hooks/useFilePicker.d.ts +0 -18
- package/dist/hooks/useFilePicker.js +0 -224
- package/dist/hooks/useGlobalExit.d.ts +0 -5
- package/dist/hooks/useGlobalExit.js +0 -34
- package/dist/hooks/useGlobalNavigation.d.ts +0 -6
- package/dist/hooks/useGlobalNavigation.js +0 -17
- package/dist/hooks/useHistoryNavigation.d.ts +0 -35
- package/dist/hooks/useHistoryNavigation.js +0 -133
- package/dist/hooks/useInputBuffer.d.ts +0 -6
- package/dist/hooks/useInputBuffer.js +0 -45
- package/dist/hooks/useKeyboardInput.d.ts +0 -80
- package/dist/hooks/useKeyboardInput.js +0 -608
- package/dist/hooks/useSessionManagement.d.ts +0 -10
- package/dist/hooks/useSessionManagement.js +0 -43
- package/dist/hooks/useSessionSave.d.ts +0 -8
- package/dist/hooks/useSessionSave.js +0 -63
- package/dist/hooks/useSnapshotState.d.ts +0 -26
- package/dist/hooks/useSnapshotState.js +0 -28
- package/dist/hooks/useStreamingState.d.ts +0 -33
- package/dist/hooks/useStreamingState.js +0 -105
- package/dist/hooks/useTerminalFocus.d.ts +0 -28
- package/dist/hooks/useTerminalFocus.js +0 -87
- package/dist/hooks/useTerminalSize.d.ts +0 -4
- package/dist/hooks/useTerminalSize.js +0 -20
- package/dist/hooks/useTodoPicker.d.ts +0 -16
- package/dist/hooks/useTodoPicker.js +0 -94
- package/dist/hooks/useToolConfirmation.d.ts +0 -19
- package/dist/hooks/useToolConfirmation.js +0 -61
- package/dist/hooks/useVSCodeState.d.ts +0 -8
- package/dist/hooks/useVSCodeState.js +0 -81
- package/dist/i18n/I18nContext.d.ts +0 -14
- package/dist/i18n/I18nContext.js +0 -24
- package/dist/i18n/index.d.ts +0 -3
- package/dist/i18n/index.js +0 -2
- package/dist/i18n/lang/en.d.ts +0 -2
- package/dist/i18n/lang/en.js +0 -502
- package/dist/i18n/lang/es.d.ts +0 -2
- package/dist/i18n/lang/es.js +0 -502
- package/dist/i18n/lang/ja.d.ts +0 -2
- package/dist/i18n/lang/ja.js +0 -502
- package/dist/i18n/lang/ko.d.ts +0 -2
- package/dist/i18n/lang/ko.js +0 -502
- package/dist/i18n/lang/zh-TW.d.ts +0 -2
- package/dist/i18n/lang/zh-TW.js +0 -502
- package/dist/i18n/lang/zh.d.ts +0 -2
- package/dist/i18n/lang/zh.js +0 -502
- package/dist/i18n/translations.d.ts +0 -2
- package/dist/i18n/translations.js +0 -14
- package/dist/i18n/types.d.ts +0 -478
- package/dist/i18n/types.js +0 -1
- package/dist/mcp/aceCodeSearch.d.ts +0 -247
- package/dist/mcp/aceCodeSearch.js +0 -1058
- package/dist/mcp/bash.d.ts +0 -50
- package/dist/mcp/bash.js +0 -153
- package/dist/mcp/codebaseSearch.d.ts +0 -44
- package/dist/mcp/codebaseSearch.js +0 -275
- package/dist/mcp/filesystem.d.ts +0 -392
- package/dist/mcp/filesystem.js +0 -1445
- package/dist/mcp/ideDiagnostics.d.ts +0 -36
- package/dist/mcp/ideDiagnostics.js +0 -90
- package/dist/mcp/notebook.d.ts +0 -10
- package/dist/mcp/notebook.js +0 -367
- package/dist/mcp/subagent.d.ts +0 -37
- package/dist/mcp/subagent.js +0 -113
- package/dist/mcp/todo.d.ts +0 -46
- package/dist/mcp/todo.js +0 -511
- package/dist/mcp/types/aceCodeSearch.types.d.ts +0 -92
- package/dist/mcp/types/aceCodeSearch.types.js +0 -4
- package/dist/mcp/types/bash.types.d.ts +0 -13
- package/dist/mcp/types/bash.types.js +0 -4
- package/dist/mcp/types/filesystem.types.d.ts +0 -210
- package/dist/mcp/types/filesystem.types.js +0 -27
- package/dist/mcp/types/todo.types.d.ts +0 -27
- package/dist/mcp/types/todo.types.js +0 -4
- package/dist/mcp/types/websearch.types.d.ts +0 -30
- package/dist/mcp/types/websearch.types.js +0 -4
- package/dist/mcp/utils/aceCodeSearch/filesystem.utils.d.ts +0 -34
- package/dist/mcp/utils/aceCodeSearch/filesystem.utils.js +0 -146
- package/dist/mcp/utils/aceCodeSearch/language.utils.d.ts +0 -14
- package/dist/mcp/utils/aceCodeSearch/language.utils.js +0 -418
- package/dist/mcp/utils/aceCodeSearch/search.utils.d.ts +0 -31
- package/dist/mcp/utils/aceCodeSearch/search.utils.js +0 -136
- package/dist/mcp/utils/aceCodeSearch/symbol.utils.d.ts +0 -20
- package/dist/mcp/utils/aceCodeSearch/symbol.utils.js +0 -141
- package/dist/mcp/utils/bash/security.utils.d.ts +0 -20
- package/dist/mcp/utils/bash/security.utils.js +0 -34
- package/dist/mcp/utils/filesystem/batch-operations.utils.d.ts +0 -39
- package/dist/mcp/utils/filesystem/batch-operations.utils.js +0 -182
- package/dist/mcp/utils/filesystem/code-analysis.utils.d.ts +0 -18
- package/dist/mcp/utils/filesystem/code-analysis.utils.js +0 -165
- package/dist/mcp/utils/filesystem/match-finder.utils.d.ts +0 -16
- package/dist/mcp/utils/filesystem/match-finder.utils.js +0 -85
- package/dist/mcp/utils/filesystem/office-parser.utils.d.ts +0 -43
- package/dist/mcp/utils/filesystem/office-parser.utils.js +0 -163
- package/dist/mcp/utils/filesystem/path-fixer.utils.d.ts +0 -7
- package/dist/mcp/utils/filesystem/path-fixer.utils.js +0 -60
- package/dist/mcp/utils/filesystem/similarity.utils.d.ts +0 -22
- package/dist/mcp/utils/filesystem/similarity.utils.js +0 -75
- package/dist/mcp/utils/todo/date.utils.d.ts +0 -9
- package/dist/mcp/utils/todo/date.utils.js +0 -14
- package/dist/mcp/utils/websearch/browser.utils.d.ts +0 -8
- package/dist/mcp/utils/websearch/browser.utils.js +0 -58
- package/dist/mcp/utils/websearch/text.utils.d.ts +0 -16
- package/dist/mcp/utils/websearch/text.utils.js +0 -39
- package/dist/mcp/websearch.d.ts +0 -88
- package/dist/mcp/websearch.js +0 -375
- package/dist/test/logger-test.d.ts +0 -1
- package/dist/test/logger-test.js +0 -7
- package/dist/types/index.d.ts +0 -15
- package/dist/types/index.js +0 -1
- package/dist/ui/components/AgentPickerPanel.d.ts +0 -10
- package/dist/ui/components/AgentPickerPanel.js +0 -74
- package/dist/ui/components/ChatInput.d.ts +0 -46
- package/dist/ui/components/ChatInput.js +0 -379
- package/dist/ui/components/CommandPanel.d.ts +0 -15
- package/dist/ui/components/CommandPanel.js +0 -80
- package/dist/ui/components/DiffViewer.d.ts +0 -11
- package/dist/ui/components/DiffViewer.js +0 -178
- package/dist/ui/components/FileList.d.ts +0 -15
- package/dist/ui/components/FileList.js +0 -360
- package/dist/ui/components/FileRollbackConfirmation.d.ts +0 -8
- package/dist/ui/components/FileRollbackConfirmation.js +0 -108
- package/dist/ui/components/HelpPanel.d.ts +0 -2
- package/dist/ui/components/HelpPanel.js +0 -67
- package/dist/ui/components/MCPInfoPanel.d.ts +0 -2
- package/dist/ui/components/MCPInfoPanel.js +0 -108
- package/dist/ui/components/MCPInfoScreen.d.ts +0 -7
- package/dist/ui/components/MCPInfoScreen.js +0 -115
- package/dist/ui/components/MarkdownRenderer.d.ts +0 -6
- package/dist/ui/components/MarkdownRenderer.js +0 -70
- package/dist/ui/components/Menu.d.ts +0 -17
- package/dist/ui/components/Menu.js +0 -88
- package/dist/ui/components/MessageList.d.ts +0 -56
- package/dist/ui/components/MessageList.js +0 -97
- package/dist/ui/components/PendingMessages.d.ts +0 -13
- package/dist/ui/components/PendingMessages.js +0 -29
- package/dist/ui/components/PendingToolCalls.d.ts +0 -11
- package/dist/ui/components/PendingToolCalls.js +0 -35
- package/dist/ui/components/ScrollableSelectInput.d.ts +0 -29
- package/dist/ui/components/ScrollableSelectInput.js +0 -157
- package/dist/ui/components/SessionListPanel.d.ts +0 -7
- package/dist/ui/components/SessionListPanel.js +0 -175
- package/dist/ui/components/SessionListScreen.d.ts +0 -7
- package/dist/ui/components/SessionListScreen.js +0 -217
- package/dist/ui/components/SessionListScreenWrapper.d.ts +0 -7
- package/dist/ui/components/SessionListScreenWrapper.js +0 -14
- package/dist/ui/components/ShimmerText.d.ts +0 -9
- package/dist/ui/components/ShimmerText.js +0 -30
- package/dist/ui/components/TodoPickerPanel.d.ts +0 -14
- package/dist/ui/components/TodoPickerPanel.js +0 -119
- package/dist/ui/components/TodoTree.d.ts +0 -15
- package/dist/ui/components/TodoTree.js +0 -60
- package/dist/ui/components/ToolConfirmation.d.ts +0 -21
- package/dist/ui/components/ToolConfirmation.js +0 -204
- package/dist/ui/components/ToolResultPreview.d.ts +0 -13
- package/dist/ui/components/ToolResultPreview.js +0 -337
- package/dist/ui/components/UsagePanel.d.ts +0 -2
- package/dist/ui/components/UsagePanel.js +0 -394
- package/dist/ui/contexts/ThemeContext.d.ts +0 -13
- package/dist/ui/contexts/ThemeContext.js +0 -28
- package/dist/ui/pages/ChatScreen.d.ts +0 -6
- package/dist/ui/pages/ChatScreen.js +0 -1495
- package/dist/ui/pages/CodeBaseConfigScreen.d.ts +0 -8
- package/dist/ui/pages/CodeBaseConfigScreen.js +0 -350
- package/dist/ui/pages/ConfigScreen.d.ts +0 -8
- package/dist/ui/pages/ConfigScreen.js +0 -1101
- package/dist/ui/pages/CustomHeadersScreen.d.ts +0 -6
- package/dist/ui/pages/CustomHeadersScreen.js +0 -502
- package/dist/ui/pages/HeadlessModeScreen.d.ts +0 -7
- package/dist/ui/pages/HeadlessModeScreen.js +0 -381
- package/dist/ui/pages/LanguageSettingsScreen.d.ts +0 -7
- package/dist/ui/pages/LanguageSettingsScreen.js +0 -91
- package/dist/ui/pages/MCPConfigScreen.d.ts +0 -6
- package/dist/ui/pages/MCPConfigScreen.js +0 -55
- package/dist/ui/pages/ProxyConfigScreen.d.ts +0 -8
- package/dist/ui/pages/ProxyConfigScreen.js +0 -149
- package/dist/ui/pages/SensitiveCommandConfigScreen.d.ts +0 -7
- package/dist/ui/pages/SensitiveCommandConfigScreen.js +0 -271
- package/dist/ui/pages/SubAgentConfigScreen.d.ts +0 -9
- package/dist/ui/pages/SubAgentConfigScreen.js +0 -435
- package/dist/ui/pages/SubAgentListScreen.d.ts +0 -9
- package/dist/ui/pages/SubAgentListScreen.js +0 -131
- package/dist/ui/pages/SystemPromptConfigScreen.d.ts +0 -6
- package/dist/ui/pages/SystemPromptConfigScreen.js +0 -326
- package/dist/ui/pages/ThemeSettingsScreen.d.ts +0 -7
- package/dist/ui/pages/ThemeSettingsScreen.js +0 -106
- package/dist/ui/pages/WelcomeScreen.d.ts +0 -7
- package/dist/ui/pages/WelcomeScreen.js +0 -217
- package/dist/ui/themes/index.d.ts +0 -23
- package/dist/ui/themes/index.js +0 -140
- package/dist/utils/apiConfig.d.ts +0 -126
- package/dist/utils/apiConfig.js +0 -423
- package/dist/utils/autoCompress.d.ts +0 -15
- package/dist/utils/autoCompress.js +0 -24
- package/dist/utils/chatExporter.d.ts +0 -9
- package/dist/utils/chatExporter.js +0 -118
- package/dist/utils/checkpointManager.d.ts +0 -74
- package/dist/utils/checkpointManager.js +0 -181
- package/dist/utils/codebaseConfig.d.ts +0 -16
- package/dist/utils/codebaseConfig.js +0 -67
- package/dist/utils/codebaseDatabase.d.ts +0 -102
- package/dist/utils/codebaseDatabase.js +0 -333
- package/dist/utils/codebaseSearchEvents.d.ts +0 -16
- package/dist/utils/codebaseSearchEvents.js +0 -13
- package/dist/utils/commandExecutor.d.ts +0 -13
- package/dist/utils/commandExecutor.js +0 -26
- package/dist/utils/commands/agent.d.ts +0 -2
- package/dist/utils/commands/agent.js +0 -12
- package/dist/utils/commands/clear.d.ts +0 -2
- package/dist/utils/commands/clear.js +0 -12
- package/dist/utils/commands/compact.d.ts +0 -2
- package/dist/utils/commands/compact.js +0 -12
- package/dist/utils/commands/export.d.ts +0 -2
- package/dist/utils/commands/export.js +0 -12
- package/dist/utils/commands/help.d.ts +0 -2
- package/dist/utils/commands/help.js +0 -11
- package/dist/utils/commands/home.d.ts +0 -2
- package/dist/utils/commands/home.js +0 -34
- package/dist/utils/commands/ide.d.ts +0 -2
- package/dist/utils/commands/ide.js +0 -32
- package/dist/utils/commands/init.d.ts +0 -2
- package/dist/utils/commands/init.js +0 -93
- package/dist/utils/commands/mcp.d.ts +0 -2
- package/dist/utils/commands/mcp.js +0 -12
- package/dist/utils/commands/resume.d.ts +0 -2
- package/dist/utils/commands/resume.js +0 -12
- package/dist/utils/commands/review.d.ts +0 -2
- package/dist/utils/commands/review.js +0 -81
- package/dist/utils/commands/role.d.ts +0 -2
- package/dist/utils/commands/role.js +0 -37
- package/dist/utils/commands/todoPicker.d.ts +0 -2
- package/dist/utils/commands/todoPicker.js +0 -12
- package/dist/utils/commands/usage.d.ts +0 -2
- package/dist/utils/commands/usage.js +0 -12
- package/dist/utils/commands/yolo.d.ts +0 -2
- package/dist/utils/commands/yolo.js +0 -12
- package/dist/utils/configManager.d.ts +0 -45
- package/dist/utils/configManager.js +0 -303
- package/dist/utils/contextCompressor.d.ts +0 -16
- package/dist/utils/contextCompressor.js +0 -334
- package/dist/utils/devMode.d.ts +0 -13
- package/dist/utils/devMode.js +0 -54
- package/dist/utils/escapeHandler.d.ts +0 -79
- package/dist/utils/escapeHandler.js +0 -153
- package/dist/utils/fileDialog.d.ts +0 -9
- package/dist/utils/fileDialog.js +0 -74
- package/dist/utils/fileUtils.d.ts +0 -40
- package/dist/utils/fileUtils.js +0 -185
- package/dist/utils/historyManager.d.ts +0 -45
- package/dist/utils/historyManager.js +0 -159
- package/dist/utils/incrementalSnapshot.d.ts +0 -109
- package/dist/utils/incrementalSnapshot.js +0 -383
- package/dist/utils/index.d.ts +0 -11
- package/dist/utils/index.js +0 -18
- package/dist/utils/languageConfig.d.ts +0 -21
- package/dist/utils/languageConfig.js +0 -61
- package/dist/utils/logger.d.ts +0 -37
- package/dist/utils/logger.js +0 -122
- package/dist/utils/mcpToolsManager.d.ts +0 -52
- package/dist/utils/mcpToolsManager.js +0 -878
- package/dist/utils/messageFormatter.d.ts +0 -12
- package/dist/utils/messageFormatter.js +0 -115
- package/dist/utils/notebookManager.d.ts +0 -59
- package/dist/utils/notebookManager.js +0 -213
- package/dist/utils/patch-highlight.d.ts +0 -5
- package/dist/utils/patch-highlight.js +0 -23
- package/dist/utils/processManager.d.ts +0 -27
- package/dist/utils/processManager.js +0 -75
- package/dist/utils/proxyUtils.d.ts +0 -15
- package/dist/utils/proxyUtils.js +0 -50
- package/dist/utils/resourceMonitor.d.ts +0 -65
- package/dist/utils/resourceMonitor.js +0 -175
- package/dist/utils/retryUtils.d.ts +0 -49
- package/dist/utils/retryUtils.js +0 -303
- package/dist/utils/sensitiveCommandManager.d.ts +0 -53
- package/dist/utils/sensitiveCommandManager.js +0 -308
- package/dist/utils/sessionConverter.d.ts +0 -7
- package/dist/utils/sessionConverter.js +0 -306
- package/dist/utils/sessionManager.d.ts +0 -53
- package/dist/utils/sessionManager.js +0 -371
- package/dist/utils/subAgentConfig.d.ts +0 -50
- package/dist/utils/subAgentConfig.js +0 -221
- package/dist/utils/subAgentExecutor.d.ts +0 -40
- package/dist/utils/subAgentExecutor.js +0 -434
- package/dist/utils/terminal.d.ts +0 -5
- package/dist/utils/terminal.js +0 -13
- package/dist/utils/textBuffer.d.ts +0 -99
- package/dist/utils/textBuffer.js +0 -547
- package/dist/utils/textUtils.d.ts +0 -37
- package/dist/utils/textUtils.js +0 -102
- package/dist/utils/themeConfig.d.ts +0 -21
- package/dist/utils/themeConfig.js +0 -61
- package/dist/utils/todoPreprocessor.d.ts +0 -5
- package/dist/utils/todoPreprocessor.js +0 -18
- package/dist/utils/todoScanner.d.ts +0 -8
- package/dist/utils/todoScanner.js +0 -148
- package/dist/utils/toolDisplayConfig.d.ts +0 -16
- package/dist/utils/toolDisplayConfig.js +0 -47
- package/dist/utils/toolExecutor.d.ts +0 -37
- package/dist/utils/toolExecutor.js +0 -224
- package/dist/utils/usageLogger.d.ts +0 -11
- package/dist/utils/usageLogger.js +0 -114
- package/dist/utils/vscodeConnection.d.ts +0 -76
- package/dist/utils/vscodeConnection.js +0 -430
- package/dist/utils/workspaceSnapshot.d.ts +0 -63
- package/dist/utils/workspaceSnapshot.js +0 -300
package/dist/mcp/websearch.d.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import type { SearchResponse, WebPageContent } from './types/websearch.types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Web Search Service using DuckDuckGo Lite with Puppeteer Core
|
|
4
|
-
* Provides web search functionality with real browser support and proxy
|
|
5
|
-
* Uses system-installed Chrome/Edge to reduce package size
|
|
6
|
-
*/
|
|
7
|
-
export declare class WebSearchService {
|
|
8
|
-
private maxResults;
|
|
9
|
-
private browser;
|
|
10
|
-
private executablePath;
|
|
11
|
-
constructor(maxResults?: number);
|
|
12
|
-
/**
|
|
13
|
-
* Launch browser with proxy settings from config
|
|
14
|
-
*/
|
|
15
|
-
private launchBrowser;
|
|
16
|
-
/**
|
|
17
|
-
* Close browser instance
|
|
18
|
-
*/
|
|
19
|
-
closeBrowser(): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Perform a web search using DuckDuckGo
|
|
22
|
-
* @param query - Search query string
|
|
23
|
-
* @param maxResults - Maximum number of results to return (default: 10)
|
|
24
|
-
* @returns Search results with title, URL, and snippet
|
|
25
|
-
*/
|
|
26
|
-
search(query: string, maxResults?: number): Promise<SearchResponse>;
|
|
27
|
-
/**
|
|
28
|
-
* Fetch and extract content from a web page
|
|
29
|
-
* @param url - URL of the web page to fetch
|
|
30
|
-
* @param maxLength - Maximum content length (default: 50000 characters)
|
|
31
|
-
* @param userQuery - Optional user query for content extraction using compact model agent
|
|
32
|
-
* @param abortSignal - Optional abort signal from main flow
|
|
33
|
-
* @param onTokenUpdate - Optional callback to update token count during compression
|
|
34
|
-
* @returns Cleaned page content
|
|
35
|
-
*/
|
|
36
|
-
fetchPage(url: string, maxLength?: number, userQuery?: string, abortSignal?: AbortSignal, onTokenUpdate?: (tokenCount: number) => void): Promise<WebPageContent>;
|
|
37
|
-
}
|
|
38
|
-
export declare const webSearchService: WebSearchService;
|
|
39
|
-
export declare const mcpTools: ({
|
|
40
|
-
name: string;
|
|
41
|
-
description: string;
|
|
42
|
-
inputSchema: {
|
|
43
|
-
type: string;
|
|
44
|
-
properties: {
|
|
45
|
-
query: {
|
|
46
|
-
type: string;
|
|
47
|
-
description: string;
|
|
48
|
-
};
|
|
49
|
-
maxResults: {
|
|
50
|
-
type: string;
|
|
51
|
-
description: string;
|
|
52
|
-
default: number;
|
|
53
|
-
minimum: number;
|
|
54
|
-
maximum: number;
|
|
55
|
-
};
|
|
56
|
-
url?: undefined;
|
|
57
|
-
maxLength?: undefined;
|
|
58
|
-
userQuery?: undefined;
|
|
59
|
-
};
|
|
60
|
-
required: string[];
|
|
61
|
-
};
|
|
62
|
-
} | {
|
|
63
|
-
name: string;
|
|
64
|
-
description: string;
|
|
65
|
-
inputSchema: {
|
|
66
|
-
type: string;
|
|
67
|
-
properties: {
|
|
68
|
-
url: {
|
|
69
|
-
type: string;
|
|
70
|
-
description: string;
|
|
71
|
-
};
|
|
72
|
-
maxLength: {
|
|
73
|
-
type: string;
|
|
74
|
-
description: string;
|
|
75
|
-
default: number;
|
|
76
|
-
minimum: number;
|
|
77
|
-
maximum: number;
|
|
78
|
-
};
|
|
79
|
-
userQuery: {
|
|
80
|
-
type: string;
|
|
81
|
-
description: string;
|
|
82
|
-
};
|
|
83
|
-
query?: undefined;
|
|
84
|
-
maxResults?: undefined;
|
|
85
|
-
};
|
|
86
|
-
required: string[];
|
|
87
|
-
};
|
|
88
|
-
})[];
|
package/dist/mcp/websearch.js
DELETED
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
import puppeteer from 'puppeteer-core';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { getProxyConfig } from '../utils/apiConfig.js';
|
|
4
|
-
// Utility functions
|
|
5
|
-
import { findBrowserExecutable } from './utils/websearch/browser.utils.js';
|
|
6
|
-
import { cleanText } from './utils/websearch/text.utils.js';
|
|
7
|
-
/**
|
|
8
|
-
* Web Search Service using DuckDuckGo Lite with Puppeteer Core
|
|
9
|
-
* Provides web search functionality with real browser support and proxy
|
|
10
|
-
* Uses system-installed Chrome/Edge to reduce package size
|
|
11
|
-
*/
|
|
12
|
-
export class WebSearchService {
|
|
13
|
-
constructor(maxResults = 10) {
|
|
14
|
-
Object.defineProperty(this, "maxResults", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: void 0
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "browser", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: null
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "executablePath", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: null
|
|
31
|
-
});
|
|
32
|
-
this.maxResults = maxResults;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Launch browser with proxy settings from config
|
|
36
|
-
*/
|
|
37
|
-
async launchBrowser() {
|
|
38
|
-
if (this.browser && this.browser.connected) {
|
|
39
|
-
return this.browser;
|
|
40
|
-
}
|
|
41
|
-
const proxyConfig = getProxyConfig();
|
|
42
|
-
// Find browser executable path (cache it)
|
|
43
|
-
// Priority: 1. User-configured path, 2. Auto-detect
|
|
44
|
-
if (!this.executablePath) {
|
|
45
|
-
// First try user-configured browser path
|
|
46
|
-
if (proxyConfig.browserPath && existsSync(proxyConfig.browserPath)) {
|
|
47
|
-
this.executablePath = proxyConfig.browserPath;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
// Fallback to auto-detection
|
|
51
|
-
this.executablePath = findBrowserExecutable();
|
|
52
|
-
if (!this.executablePath) {
|
|
53
|
-
throw new Error('No system browser found. Please install Chrome or Edge browser, or configure browser path in Proxy settings.');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const launchArgs = [
|
|
58
|
-
'--no-sandbox',
|
|
59
|
-
'--disable-setuid-sandbox',
|
|
60
|
-
'--disable-dev-shm-usage',
|
|
61
|
-
'--disable-accelerated-2d-canvas',
|
|
62
|
-
'--disable-gpu',
|
|
63
|
-
];
|
|
64
|
-
// Only add proxy if enabled
|
|
65
|
-
if (proxyConfig.enabled) {
|
|
66
|
-
launchArgs.unshift(`--proxy-server=http://127.0.0.1:${proxyConfig.port}`);
|
|
67
|
-
}
|
|
68
|
-
this.browser = await puppeteer.launch({
|
|
69
|
-
executablePath: this.executablePath,
|
|
70
|
-
headless: true,
|
|
71
|
-
args: launchArgs,
|
|
72
|
-
});
|
|
73
|
-
return this.browser;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Close browser instance
|
|
77
|
-
*/
|
|
78
|
-
async closeBrowser() {
|
|
79
|
-
if (this.browser) {
|
|
80
|
-
await this.browser.close();
|
|
81
|
-
this.browser = null;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Perform a web search using DuckDuckGo
|
|
86
|
-
* @param query - Search query string
|
|
87
|
-
* @param maxResults - Maximum number of results to return (default: 10)
|
|
88
|
-
* @returns Search results with title, URL, and snippet
|
|
89
|
-
*/
|
|
90
|
-
async search(query, maxResults) {
|
|
91
|
-
const limit = maxResults || this.maxResults;
|
|
92
|
-
let page = null;
|
|
93
|
-
try {
|
|
94
|
-
// Launch browser with proxy
|
|
95
|
-
const browser = await this.launchBrowser();
|
|
96
|
-
page = await browser.newPage();
|
|
97
|
-
// Set realistic user agent
|
|
98
|
-
await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
|
|
99
|
-
// Encode query for URL
|
|
100
|
-
const encodedQuery = encodeURIComponent(query);
|
|
101
|
-
const searchUrl = `https://lite.duckduckgo.com/lite?q=${encodedQuery}`;
|
|
102
|
-
// Navigate to search page with timeout
|
|
103
|
-
await page.goto(searchUrl, {
|
|
104
|
-
waitUntil: 'networkidle2',
|
|
105
|
-
timeout: 30000,
|
|
106
|
-
});
|
|
107
|
-
// Extract search results from the page
|
|
108
|
-
const results = await page.evaluate((maxLimit) => {
|
|
109
|
-
const searchResults = [];
|
|
110
|
-
const rows = document.querySelectorAll('table tr');
|
|
111
|
-
let currentResult = {};
|
|
112
|
-
let resultCount = 0;
|
|
113
|
-
for (const row of rows) {
|
|
114
|
-
if (resultCount >= maxLimit)
|
|
115
|
-
break;
|
|
116
|
-
// Check if this row contains a link (title row)
|
|
117
|
-
const linkElement = row.querySelector('a.result-link');
|
|
118
|
-
if (linkElement) {
|
|
119
|
-
// Save previous result if exists
|
|
120
|
-
if (currentResult.title && currentResult.url) {
|
|
121
|
-
searchResults.push(currentResult);
|
|
122
|
-
resultCount++;
|
|
123
|
-
if (resultCount >= maxLimit)
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
// Start new result
|
|
127
|
-
const title = linkElement.textContent?.trim() || '';
|
|
128
|
-
const href = linkElement.getAttribute('href') || '';
|
|
129
|
-
// Extract actual URL from DuckDuckGo redirect
|
|
130
|
-
let actualUrl = href;
|
|
131
|
-
if (href.includes('uddg=')) {
|
|
132
|
-
const match = href.match(/uddg=([^&]+)/);
|
|
133
|
-
if (match && match[1]) {
|
|
134
|
-
actualUrl = decodeURIComponent(match[1]);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
currentResult = {
|
|
138
|
-
title: title,
|
|
139
|
-
url: actualUrl,
|
|
140
|
-
snippet: '',
|
|
141
|
-
displayUrl: '',
|
|
142
|
-
};
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
// Check if this row contains snippet
|
|
146
|
-
const snippetElement = row.querySelector('td.result-snippet');
|
|
147
|
-
if (snippetElement && currentResult.title) {
|
|
148
|
-
currentResult.snippet = snippetElement.textContent?.trim() || '';
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
// Check if this row contains display URL
|
|
152
|
-
const displayUrlElement = row.querySelector('span.link-text');
|
|
153
|
-
if (displayUrlElement && currentResult.title) {
|
|
154
|
-
currentResult.displayUrl =
|
|
155
|
-
displayUrlElement.textContent?.trim() || '';
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
// Add last result if exists
|
|
159
|
-
if (currentResult.title &&
|
|
160
|
-
currentResult.url &&
|
|
161
|
-
resultCount < maxLimit) {
|
|
162
|
-
searchResults.push(currentResult);
|
|
163
|
-
}
|
|
164
|
-
return searchResults;
|
|
165
|
-
}, limit);
|
|
166
|
-
// Clean text in results
|
|
167
|
-
const cleanedResults = results.map(result => ({
|
|
168
|
-
title: cleanText(result.title),
|
|
169
|
-
url: result.url,
|
|
170
|
-
snippet: cleanText(result.snippet),
|
|
171
|
-
displayUrl: cleanText(result.displayUrl),
|
|
172
|
-
}));
|
|
173
|
-
// Close the page
|
|
174
|
-
await page.close();
|
|
175
|
-
return {
|
|
176
|
-
query,
|
|
177
|
-
results: cleanedResults,
|
|
178
|
-
totalResults: cleanedResults.length,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
182
|
-
// Clean up page on error
|
|
183
|
-
if (page) {
|
|
184
|
-
try {
|
|
185
|
-
await page.close();
|
|
186
|
-
}
|
|
187
|
-
catch {
|
|
188
|
-
// Ignore close errors
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
throw new Error(`Web search failed: ${error.message}`);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Fetch and extract content from a web page
|
|
196
|
-
* @param url - URL of the web page to fetch
|
|
197
|
-
* @param maxLength - Maximum content length (default: 50000 characters)
|
|
198
|
-
* @param userQuery - Optional user query for content extraction using compact model agent
|
|
199
|
-
* @param abortSignal - Optional abort signal from main flow
|
|
200
|
-
* @param onTokenUpdate - Optional callback to update token count during compression
|
|
201
|
-
* @returns Cleaned page content
|
|
202
|
-
*/
|
|
203
|
-
async fetchPage(url, maxLength = 50000, userQuery, abortSignal, onTokenUpdate) {
|
|
204
|
-
let page = null;
|
|
205
|
-
try {
|
|
206
|
-
// Launch browser with proxy
|
|
207
|
-
const browser = await this.launchBrowser();
|
|
208
|
-
page = await browser.newPage();
|
|
209
|
-
// Set realistic user agent
|
|
210
|
-
await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
|
|
211
|
-
// Navigate to page with timeout
|
|
212
|
-
await page.goto(url, {
|
|
213
|
-
waitUntil: 'networkidle2',
|
|
214
|
-
timeout: 30000,
|
|
215
|
-
});
|
|
216
|
-
// Extract content using browser context
|
|
217
|
-
const pageData = await page.evaluate(() => {
|
|
218
|
-
// Remove unwanted elements
|
|
219
|
-
const selectorsToRemove = [
|
|
220
|
-
'script',
|
|
221
|
-
'style',
|
|
222
|
-
'nav',
|
|
223
|
-
'header',
|
|
224
|
-
'footer',
|
|
225
|
-
'iframe',
|
|
226
|
-
'noscript',
|
|
227
|
-
'svg',
|
|
228
|
-
'.advertisement',
|
|
229
|
-
'.ad',
|
|
230
|
-
'.ads',
|
|
231
|
-
'#cookie-banner',
|
|
232
|
-
'.cookie-notice',
|
|
233
|
-
'.social-share',
|
|
234
|
-
'.comments',
|
|
235
|
-
'.sidebar',
|
|
236
|
-
'[role="banner"]',
|
|
237
|
-
'[role="navigation"]',
|
|
238
|
-
'[role="complementary"]',
|
|
239
|
-
];
|
|
240
|
-
selectorsToRemove.forEach(selector => {
|
|
241
|
-
document.querySelectorAll(selector).forEach(el => el.remove());
|
|
242
|
-
});
|
|
243
|
-
// Get title
|
|
244
|
-
const title = document.title || '';
|
|
245
|
-
// Try to find main content area
|
|
246
|
-
let mainContent = null;
|
|
247
|
-
const mainSelectors = [
|
|
248
|
-
'article',
|
|
249
|
-
'main',
|
|
250
|
-
'[role="main"]',
|
|
251
|
-
'.main-content',
|
|
252
|
-
'.content',
|
|
253
|
-
'#content',
|
|
254
|
-
'.article-body',
|
|
255
|
-
'.post-content',
|
|
256
|
-
];
|
|
257
|
-
for (const selector of mainSelectors) {
|
|
258
|
-
mainContent = document.querySelector(selector);
|
|
259
|
-
if (mainContent)
|
|
260
|
-
break;
|
|
261
|
-
}
|
|
262
|
-
// Fallback to body if no main content found
|
|
263
|
-
const contentElement = mainContent || document.body;
|
|
264
|
-
// Extract text content
|
|
265
|
-
const textContent = contentElement.textContent || '';
|
|
266
|
-
return {
|
|
267
|
-
title,
|
|
268
|
-
textContent,
|
|
269
|
-
};
|
|
270
|
-
});
|
|
271
|
-
// Clean and process the text
|
|
272
|
-
let cleanedContent = pageData.textContent
|
|
273
|
-
.replace(/\s+/g, ' ') // Replace multiple spaces with single space
|
|
274
|
-
.replace(/\n\s*\n/g, '\n') // Remove empty lines
|
|
275
|
-
.trim();
|
|
276
|
-
// Limit content length
|
|
277
|
-
if (cleanedContent.length > maxLength) {
|
|
278
|
-
cleanedContent =
|
|
279
|
-
cleanedContent.slice(0, maxLength) + '\n\n[Content truncated...]';
|
|
280
|
-
}
|
|
281
|
-
// Create preview (first 500 characters)
|
|
282
|
-
const contentPreview = cleanedContent.slice(0, 500) +
|
|
283
|
-
(cleanedContent.length > 500 ? '...' : '');
|
|
284
|
-
// Close the page
|
|
285
|
-
await page.close();
|
|
286
|
-
// Use compact agent to extract key information if userQuery is provided
|
|
287
|
-
let finalContent = cleanedContent;
|
|
288
|
-
if (userQuery) {
|
|
289
|
-
try {
|
|
290
|
-
const { compactAgent } = await import('../agents/compactAgent.js');
|
|
291
|
-
const isAvailable = await compactAgent.isAvailable();
|
|
292
|
-
if (isAvailable) {
|
|
293
|
-
// Use compact model to extract relevant information
|
|
294
|
-
// No timeout - let it run as long as needed
|
|
295
|
-
finalContent = await compactAgent.extractWebPageContent(cleanedContent, userQuery, url, abortSignal, onTokenUpdate);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
catch (error) {
|
|
299
|
-
// If compact agent fails, fallback to original content
|
|
300
|
-
// Error is already logged in compactAgent
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return {
|
|
304
|
-
url,
|
|
305
|
-
title: cleanText(pageData.title),
|
|
306
|
-
content: finalContent,
|
|
307
|
-
textLength: finalContent.length,
|
|
308
|
-
contentPreview,
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
catch (error) {
|
|
312
|
-
// Clean up page on error
|
|
313
|
-
if (page) {
|
|
314
|
-
try {
|
|
315
|
-
await page.close();
|
|
316
|
-
}
|
|
317
|
-
catch {
|
|
318
|
-
// Ignore close errors
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
throw new Error(`Failed to fetch page: ${error.message}`);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
// Export a default instance
|
|
326
|
-
export const webSearchService = new WebSearchService();
|
|
327
|
-
// MCP Tool definitions
|
|
328
|
-
export const mcpTools = [
|
|
329
|
-
{
|
|
330
|
-
name: 'websearch-search',
|
|
331
|
-
description: 'Search the web using DuckDuckGo. Returns a list of search results with titles, URLs, and snippets. Best for finding current information, documentation, news, or general web content. **IMPORTANT WORKFLOW**: After getting search results, analyze them and choose ONLY ONE most credible and relevant page to fetch. Do NOT fetch multiple pages - reading one high-quality source is sufficient and more efficient.',
|
|
332
|
-
inputSchema: {
|
|
333
|
-
type: 'object',
|
|
334
|
-
properties: {
|
|
335
|
-
query: {
|
|
336
|
-
type: 'string',
|
|
337
|
-
description: 'Search query string (e.g., "Claude latest model", "TypeScript best practices")',
|
|
338
|
-
},
|
|
339
|
-
maxResults: {
|
|
340
|
-
type: 'number',
|
|
341
|
-
description: 'Maximum number of results to return (default: 10, max: 20)',
|
|
342
|
-
default: 10,
|
|
343
|
-
minimum: 1,
|
|
344
|
-
maximum: 20,
|
|
345
|
-
},
|
|
346
|
-
},
|
|
347
|
-
required: ['query'],
|
|
348
|
-
},
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
name: 'websearch-fetch',
|
|
352
|
-
description: "Fetch and read the full content of a web page. Automatically cleans HTML and extracts the main text content, removing ads, navigation, and other noise. **USAGE RULE**: Only fetch ONE page per search - choose the most credible and relevant result (prefer official documentation, reputable tech sites, or well-known sources). **OPTIMIZATION**: ALWAYS provide the userQuery parameter with the user's original question. This enables automatic extraction of only relevant information using a compact AI model, which dramatically saves context and improves response quality.",
|
|
353
|
-
inputSchema: {
|
|
354
|
-
type: 'object',
|
|
355
|
-
properties: {
|
|
356
|
-
url: {
|
|
357
|
-
type: 'string',
|
|
358
|
-
description: 'Full URL of the web page to fetch (e.g., "https://example.com/article")',
|
|
359
|
-
},
|
|
360
|
-
maxLength: {
|
|
361
|
-
type: 'number',
|
|
362
|
-
description: 'Maximum content length in characters (default: 50000, max: 100000)',
|
|
363
|
-
default: 50000,
|
|
364
|
-
minimum: 1000,
|
|
365
|
-
maximum: 100000,
|
|
366
|
-
},
|
|
367
|
-
userQuery: {
|
|
368
|
-
type: 'string',
|
|
369
|
-
description: "REQUIRED: User's original question or query. This is essential for intelligent content extraction - the compact AI model will extract only information relevant to this query, reducing content size by 80-95%. Always provide this parameter.",
|
|
370
|
-
},
|
|
371
|
-
},
|
|
372
|
-
required: ['url'],
|
|
373
|
-
},
|
|
374
|
-
},
|
|
375
|
-
];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/test/logger-test.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { logger } from '../utils/logger.js';
|
|
2
|
-
// Test the logger
|
|
3
|
-
logger.info('Logger service initialized successfully');
|
|
4
|
-
logger.error('Test error message', { errorCode: 500 });
|
|
5
|
-
logger.warn('Test warning message');
|
|
6
|
-
logger.debug('Debug information', { timestamp: Date.now() });
|
|
7
|
-
console.log('Logger test completed. Check ./snow/log directory for log files.');
|
package/dist/types/index.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface SnowConfig {
|
|
2
|
-
model?: string;
|
|
3
|
-
apiKey?: string;
|
|
4
|
-
maxTokens?: number;
|
|
5
|
-
}
|
|
6
|
-
export interface Command {
|
|
7
|
-
name: string;
|
|
8
|
-
description: string;
|
|
9
|
-
handler: (args: string[]) => Promise<void>;
|
|
10
|
-
}
|
|
11
|
-
export interface AppState {
|
|
12
|
-
isLoading: boolean;
|
|
13
|
-
currentCommand?: string;
|
|
14
|
-
history: string[];
|
|
15
|
-
}
|
package/dist/types/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { SubAgent } from '../../utils/subAgentConfig.js';
|
|
3
|
-
interface Props {
|
|
4
|
-
agents: SubAgent[];
|
|
5
|
-
selectedIndex: number;
|
|
6
|
-
visible: boolean;
|
|
7
|
-
maxHeight?: number;
|
|
8
|
-
}
|
|
9
|
-
declare const AgentPickerPanel: React.MemoExoticComponent<({ agents, selectedIndex, visible, maxHeight }: Props) => React.JSX.Element | null>;
|
|
10
|
-
export default AgentPickerPanel;
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import React, { memo, useMemo } from 'react';
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
3
|
-
import { Alert } from '@inkjs/ui';
|
|
4
|
-
import { useTheme } from '../contexts/ThemeContext.js';
|
|
5
|
-
const AgentPickerPanel = memo(({ agents, selectedIndex, visible, maxHeight }) => {
|
|
6
|
-
const { theme } = useTheme();
|
|
7
|
-
// Fixed maximum display items to prevent rendering issues
|
|
8
|
-
const MAX_DISPLAY_ITEMS = 5;
|
|
9
|
-
const effectiveMaxItems = maxHeight
|
|
10
|
-
? Math.min(maxHeight, MAX_DISPLAY_ITEMS)
|
|
11
|
-
: MAX_DISPLAY_ITEMS;
|
|
12
|
-
// Limit displayed agents
|
|
13
|
-
const displayedAgents = useMemo(() => {
|
|
14
|
-
if (agents.length <= effectiveMaxItems) {
|
|
15
|
-
return agents;
|
|
16
|
-
}
|
|
17
|
-
// Show agents around the selected index
|
|
18
|
-
const halfWindow = Math.floor(effectiveMaxItems / 2);
|
|
19
|
-
let startIndex = Math.max(0, selectedIndex - halfWindow);
|
|
20
|
-
let endIndex = Math.min(agents.length, startIndex + effectiveMaxItems);
|
|
21
|
-
// Adjust if we're near the end
|
|
22
|
-
if (endIndex - startIndex < effectiveMaxItems) {
|
|
23
|
-
startIndex = Math.max(0, endIndex - effectiveMaxItems);
|
|
24
|
-
}
|
|
25
|
-
return agents.slice(startIndex, endIndex);
|
|
26
|
-
}, [agents, selectedIndex, effectiveMaxItems]);
|
|
27
|
-
// Calculate actual selected index in the displayed subset
|
|
28
|
-
const displayedSelectedIndex = useMemo(() => {
|
|
29
|
-
return displayedAgents.findIndex(agent => {
|
|
30
|
-
const originalIndex = agents.indexOf(agent);
|
|
31
|
-
return originalIndex === selectedIndex;
|
|
32
|
-
});
|
|
33
|
-
}, [displayedAgents, agents, selectedIndex]);
|
|
34
|
-
// Don't show panel if not visible
|
|
35
|
-
if (!visible) {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
// Show message if no agents configured
|
|
39
|
-
if (agents.length === 0) {
|
|
40
|
-
return (React.createElement(Box, { flexDirection: "column" },
|
|
41
|
-
React.createElement(Box, { width: "100%" },
|
|
42
|
-
React.createElement(Box, { flexDirection: "column", width: "100%" },
|
|
43
|
-
React.createElement(Box, null,
|
|
44
|
-
React.createElement(Text, { color: theme.colors.warning, bold: true }, "Sub-Agent Selection")),
|
|
45
|
-
React.createElement(Box, { marginTop: 1 },
|
|
46
|
-
React.createElement(Alert, { variant: "warning" }, "No sub-agents configured. Please configure sub-agents first."))))));
|
|
47
|
-
}
|
|
48
|
-
return (React.createElement(Box, { flexDirection: "column" },
|
|
49
|
-
React.createElement(Box, { width: "100%" },
|
|
50
|
-
React.createElement(Box, { flexDirection: "column", width: "100%" },
|
|
51
|
-
React.createElement(Box, null,
|
|
52
|
-
React.createElement(Text, { color: theme.colors.warning, bold: true },
|
|
53
|
-
"Select Sub-Agent",
|
|
54
|
-
' ',
|
|
55
|
-
agents.length > effectiveMaxItems &&
|
|
56
|
-
`(${selectedIndex + 1}/${agents.length})`),
|
|
57
|
-
React.createElement(Text, { color: theme.colors.menuSecondary, dimColor: true }, "(Press ESC to close)")),
|
|
58
|
-
displayedAgents.map((agent, index) => (React.createElement(Box, { key: agent.id, flexDirection: "column", width: "100%" },
|
|
59
|
-
React.createElement(Text, { color: index === displayedSelectedIndex ? theme.colors.success : theme.colors.menuSecondary, bold: true },
|
|
60
|
-
index === displayedSelectedIndex ? '❯ ' : ' ',
|
|
61
|
-
"#",
|
|
62
|
-
agent.name),
|
|
63
|
-
React.createElement(Box, { marginLeft: 3 },
|
|
64
|
-
React.createElement(Text, { color: index === displayedSelectedIndex ? theme.colors.success : theme.colors.menuSecondary, dimColor: true },
|
|
65
|
-
"\u2514\u2500 ",
|
|
66
|
-
agent.description || 'No description'))))),
|
|
67
|
-
agents.length > effectiveMaxItems && (React.createElement(Box, { marginTop: 1 },
|
|
68
|
-
React.createElement(Text, { color: theme.colors.menuSecondary, dimColor: true },
|
|
69
|
-
"\u2191\u2193 to scroll \u00B7 ",
|
|
70
|
-
agents.length - effectiveMaxItems,
|
|
71
|
-
" more hidden")))))));
|
|
72
|
-
});
|
|
73
|
-
AgentPickerPanel.displayName = 'AgentPickerPanel';
|
|
74
|
-
export default AgentPickerPanel;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Calculate context usage percentage
|
|
4
|
-
* This is the same logic used in ChatInput to display usage
|
|
5
|
-
*/
|
|
6
|
-
export declare function calculateContextPercentage(contextUsage: {
|
|
7
|
-
inputTokens: number;
|
|
8
|
-
maxContextTokens: number;
|
|
9
|
-
cacheCreationTokens?: number;
|
|
10
|
-
cacheReadTokens?: number;
|
|
11
|
-
cachedTokens?: number;
|
|
12
|
-
}): number;
|
|
13
|
-
type Props = {
|
|
14
|
-
onSubmit: (message: string, images?: Array<{
|
|
15
|
-
data: string;
|
|
16
|
-
mimeType: string;
|
|
17
|
-
}>) => void;
|
|
18
|
-
onCommand?: (commandName: string, result: any) => void;
|
|
19
|
-
placeholder?: string;
|
|
20
|
-
disabled?: boolean;
|
|
21
|
-
isProcessing?: boolean;
|
|
22
|
-
chatHistory?: Array<{
|
|
23
|
-
role: string;
|
|
24
|
-
content: string;
|
|
25
|
-
}>;
|
|
26
|
-
onHistorySelect?: (selectedIndex: number, message: string) => void;
|
|
27
|
-
yoloMode?: boolean;
|
|
28
|
-
contextUsage?: {
|
|
29
|
-
inputTokens: number;
|
|
30
|
-
maxContextTokens: number;
|
|
31
|
-
cacheCreationTokens?: number;
|
|
32
|
-
cacheReadTokens?: number;
|
|
33
|
-
cachedTokens?: number;
|
|
34
|
-
};
|
|
35
|
-
initialContent?: {
|
|
36
|
-
text: string;
|
|
37
|
-
images?: Array<{
|
|
38
|
-
type: 'image';
|
|
39
|
-
data: string;
|
|
40
|
-
mimeType: string;
|
|
41
|
-
}>;
|
|
42
|
-
} | null;
|
|
43
|
-
onContextPercentageChange?: (percentage: number) => void;
|
|
44
|
-
};
|
|
45
|
-
export default function ChatInput({ onSubmit, onCommand, placeholder, disabled, isProcessing, chatHistory, onHistorySelect, yoloMode, contextUsage, initialContent, onContextPercentageChange, }: Props): React.JSX.Element;
|
|
46
|
-
export {};
|