@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,214 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { TitledBox, titleStyles } from '@mishieck/ink-titled-box';
|
|
4
|
+
import { Box, Text } from 'ink';
|
|
5
|
+
import { colors } from '../config/index.js';
|
|
6
|
+
import { useTerminalWidth } from '../hooks/useTerminalWidth.js';
|
|
7
|
+
import ErrorMessage from '../components/error-message.js';
|
|
8
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { ProjectAnalyzer } from '../init/project-analyzer.js';
|
|
11
|
+
import { AgentsTemplateGenerator } from '../init/agents-template-generator.js';
|
|
12
|
+
import { ExistingRulesExtractor } from '../init/existing-rules-extractor.js';
|
|
13
|
+
function InitSuccess({ created, analysis, }) {
|
|
14
|
+
const boxWidth = useTerminalWidth();
|
|
15
|
+
return (_jsxs(TitledBox, { borderStyle: "round", titles: ['Project Initialized'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.primary, paddingX: 2, paddingY: 1, flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.primary, bold: true, children: "\u2713 Nanocoder project initialized successfully!" }) }), analysis && (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.white, bold: true, children: "Project Analysis:" }) }), _jsxs(Text, { color: colors.secondary, children: ["\u2022 Type: ", analysis.projectType] }), _jsxs(Text, { color: colors.secondary, children: ["\u2022 Primary Language: ", analysis.primaryLanguage] }), analysis.frameworks.length > 0 && (_jsxs(Text, { color: colors.secondary, children: ["\u2022 Frameworks: ", analysis.frameworks.slice(0, 3).join(', ')] })), _jsxs(Text, { color: colors.secondary, children: ["\u2022 Files Analyzed: ", analysis.totalFiles] }), _jsx(Box, { marginBottom: 1 })] })), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.white, bold: true, children: "Files Created:" }) }), created.map((item, index) => (_jsxs(Text, { color: colors.secondary, children: ["\u2022 ", item] }, index))), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: colors.white, children: "Your project is now ready for AI-assisted development!" }), _jsx(Text, { color: colors.secondary, children: "The AGENTS.md file will help AI understand your project context." })] })] }));
|
|
16
|
+
}
|
|
17
|
+
function InitError({ message }) {
|
|
18
|
+
return _jsx(ErrorMessage, { message: `✗ ${message}` });
|
|
19
|
+
}
|
|
20
|
+
const DEFAULT_CONFIG = {
|
|
21
|
+
nanocoder: {
|
|
22
|
+
providers: [
|
|
23
|
+
{
|
|
24
|
+
name: 'OpenRouter',
|
|
25
|
+
baseUrl: 'https://openrouter.ai/api/v1',
|
|
26
|
+
apiKey: 'your-openrouter-api-key-here',
|
|
27
|
+
models: ['openai/gpt-4o-mini', 'anthropic/claude-3-haiku'],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'Local Ollama',
|
|
31
|
+
baseUrl: 'http://localhost:11434/v1',
|
|
32
|
+
models: ['llama3.2', 'qwen2.5-coder'],
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
mcpServers: [],
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
// Enhanced example commands based on detected project type
|
|
39
|
+
const getExampleCommands = (projectType, primaryLanguage) => {
|
|
40
|
+
const baseCommands = {
|
|
41
|
+
'review.md': `---
|
|
42
|
+
description: Review code and suggest improvements
|
|
43
|
+
aliases: [code-review, cr]
|
|
44
|
+
parameters: [files]
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
Review the code in {{files}} and provide detailed feedback on:
|
|
48
|
+
|
|
49
|
+
1. Code quality and best practices
|
|
50
|
+
2. Potential bugs or issues
|
|
51
|
+
3. Performance considerations
|
|
52
|
+
4. Readability and maintainability
|
|
53
|
+
5. Security concerns
|
|
54
|
+
|
|
55
|
+
Provide specific, actionable suggestions for improvement.`,
|
|
56
|
+
'test.md': `---
|
|
57
|
+
description: Generate comprehensive unit tests
|
|
58
|
+
aliases: [unittest, test-gen]
|
|
59
|
+
parameters: [filename]
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
Generate comprehensive unit tests for {{filename}}.
|
|
63
|
+
|
|
64
|
+
Consider:
|
|
65
|
+
1. Test all public functions and methods
|
|
66
|
+
2. Include edge cases and error scenarios
|
|
67
|
+
3. Use appropriate mocking where needed
|
|
68
|
+
4. Follow existing test framework conventions
|
|
69
|
+
5. Ensure good test coverage
|
|
70
|
+
|
|
71
|
+
If no filename provided, suggest which files need tests.`,
|
|
72
|
+
};
|
|
73
|
+
// Add language/framework-specific commands
|
|
74
|
+
const additionalCommands = {};
|
|
75
|
+
if (primaryLanguage === 'JavaScript' || primaryLanguage === 'TypeScript') {
|
|
76
|
+
additionalCommands['refactor.md'] = `---
|
|
77
|
+
description: Refactor JavaScript/TypeScript code
|
|
78
|
+
aliases: [refactor-js, clean]
|
|
79
|
+
parameters: [target]
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
Refactor {{target}} to improve:
|
|
83
|
+
|
|
84
|
+
1. Code structure and organization
|
|
85
|
+
2. Modern ES6+ syntax usage
|
|
86
|
+
3. Performance optimizations
|
|
87
|
+
4. Type safety (for TypeScript)
|
|
88
|
+
5. Reusability and maintainability
|
|
89
|
+
|
|
90
|
+
Follow current project conventions and patterns.`;
|
|
91
|
+
}
|
|
92
|
+
if (primaryLanguage === 'Python') {
|
|
93
|
+
additionalCommands['optimize.md'] = `---
|
|
94
|
+
description: Optimize Python code for performance
|
|
95
|
+
aliases: [perf, optimize-py]
|
|
96
|
+
parameters: [file]
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
Analyze and optimize {{file}} for:
|
|
100
|
+
|
|
101
|
+
1. Algorithm efficiency
|
|
102
|
+
2. Memory usage
|
|
103
|
+
3. Pythonic patterns
|
|
104
|
+
4. Performance bottlenecks
|
|
105
|
+
5. Code readability
|
|
106
|
+
|
|
107
|
+
Follow PEP 8 and project conventions.`;
|
|
108
|
+
}
|
|
109
|
+
if (projectType.includes('Web')) {
|
|
110
|
+
additionalCommands['component.md'] = `---
|
|
111
|
+
description: Create a new UI component
|
|
112
|
+
aliases: [comp, ui]
|
|
113
|
+
parameters: [name, type]
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
Create a new {{type}} component named {{name}} that:
|
|
117
|
+
|
|
118
|
+
1. Follows project component patterns
|
|
119
|
+
2. Includes proper TypeScript types
|
|
120
|
+
3. Has responsive design considerations
|
|
121
|
+
4. Includes basic styling structure
|
|
122
|
+
5. Has proper prop validation
|
|
123
|
+
|
|
124
|
+
Make it reusable and well-documented.`;
|
|
125
|
+
}
|
|
126
|
+
return { ...baseCommands, ...additionalCommands };
|
|
127
|
+
};
|
|
128
|
+
export const initCommand = {
|
|
129
|
+
name: 'init',
|
|
130
|
+
description: 'Initialize nanocoder configuration and analyze project structure',
|
|
131
|
+
handler: async (_args, _messages, _metadata) => {
|
|
132
|
+
const cwd = process.cwd();
|
|
133
|
+
const created = [];
|
|
134
|
+
try {
|
|
135
|
+
// Check if already initialized
|
|
136
|
+
const configPath = join(cwd, 'agents.config.json');
|
|
137
|
+
const agentsPath = join(cwd, 'AGENTS.md');
|
|
138
|
+
const nanocoderDir = join(cwd, '.nanocoder');
|
|
139
|
+
// Check for existing initialization
|
|
140
|
+
const hasConfig = existsSync(configPath);
|
|
141
|
+
const hasAgents = existsSync(agentsPath);
|
|
142
|
+
const hasNanocoder = existsSync(nanocoderDir);
|
|
143
|
+
if (hasConfig && hasAgents && hasNanocoder) {
|
|
144
|
+
return React.createElement(InitError, {
|
|
145
|
+
key: `init-error-${Date.now()}`,
|
|
146
|
+
message: 'Project already fully initialized. Found agents.config.json, AGENTS.md, and .nanocoder/ directory.',
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
// Show progress indicator for analysis
|
|
150
|
+
// Note: In a real implementation, we'd want to show this as a loading state
|
|
151
|
+
// For now, we'll do the analysis synchronously
|
|
152
|
+
// Analyze the project
|
|
153
|
+
const analyzer = new ProjectAnalyzer(cwd);
|
|
154
|
+
const analysis = analyzer.analyze();
|
|
155
|
+
// Extract existing AI configuration files
|
|
156
|
+
const rulesExtractor = new ExistingRulesExtractor(cwd);
|
|
157
|
+
const existingRules = rulesExtractor.extractExistingRules();
|
|
158
|
+
// Create agents.config.json if it doesn't exist
|
|
159
|
+
if (!hasConfig) {
|
|
160
|
+
writeFileSync(configPath, JSON.stringify(DEFAULT_CONFIG, null, 2));
|
|
161
|
+
created.push('agents.config.json');
|
|
162
|
+
}
|
|
163
|
+
// Create AGENTS.md based on analysis and existing rules
|
|
164
|
+
if (!hasAgents) {
|
|
165
|
+
const agentsContent = AgentsTemplateGenerator.generateAgentsMd(analysis, existingRules);
|
|
166
|
+
writeFileSync(agentsPath, agentsContent);
|
|
167
|
+
created.push('AGENTS.md');
|
|
168
|
+
// Report found existing rules
|
|
169
|
+
if (existingRules.length > 0) {
|
|
170
|
+
const sourceFiles = existingRules.map(r => r.source).join(', ');
|
|
171
|
+
created.push(`↳ Merged content from: ${sourceFiles}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Create .nanocoder directory structure
|
|
175
|
+
if (!hasNanocoder) {
|
|
176
|
+
mkdirSync(nanocoderDir, { recursive: true });
|
|
177
|
+
created.push('.nanocoder/');
|
|
178
|
+
}
|
|
179
|
+
const commandsDir = join(nanocoderDir, 'commands');
|
|
180
|
+
if (!existsSync(commandsDir)) {
|
|
181
|
+
mkdirSync(commandsDir, { recursive: true });
|
|
182
|
+
created.push('.nanocoder/commands/');
|
|
183
|
+
}
|
|
184
|
+
// Create example custom commands based on project analysis
|
|
185
|
+
const exampleCommands = getExampleCommands(analysis.projectType, analysis.languages.primary?.name || 'Unknown');
|
|
186
|
+
for (const [filename, content] of Object.entries(exampleCommands)) {
|
|
187
|
+
const filePath = join(commandsDir, filename);
|
|
188
|
+
if (!existsSync(filePath)) {
|
|
189
|
+
writeFileSync(filePath, content);
|
|
190
|
+
created.push(`.nanocoder/commands/${filename}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Prepare analysis summary for display
|
|
194
|
+
const analysisSummary = {
|
|
195
|
+
projectType: analysis.projectType,
|
|
196
|
+
primaryLanguage: analysis.languages.primary?.name || 'Unknown',
|
|
197
|
+
frameworks: analysis.dependencies.frameworks.map(f => f.name),
|
|
198
|
+
totalFiles: analysis.structure.scannedFiles,
|
|
199
|
+
};
|
|
200
|
+
return React.createElement(InitSuccess, {
|
|
201
|
+
key: `init-success-${Date.now()}`,
|
|
202
|
+
created,
|
|
203
|
+
analysis: analysisSummary,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return React.createElement(InitError, {
|
|
208
|
+
key: `init-error-${Date.now()}`,
|
|
209
|
+
message: `Failed to initialize project: ${error.message}`,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../source/commands/init.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Command } from '../types/index.js';
|
|
2
|
+
import { ToolManager } from '../tools/tool-manager.js';
|
|
3
|
+
interface MCPProps {
|
|
4
|
+
toolManager: ToolManager | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function MCP({ toolManager }: MCPProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare const mcpCommand: Command;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../source/commands/mcp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAQrD,UAAU,QAAQ;IACjB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC;AAED,wBAAgB,GAAG,CAAC,EAAC,WAAW,EAAC,EAAE,QAAQ,2CAiF1C;AAED,eAAO,MAAM,UAAU,EAAE,OAWxB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { getToolManager } from '../message-handler.js';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { TitledBox, titleStyles } from '@mishieck/ink-titled-box';
|
|
5
|
+
import { Box, Text } from 'ink';
|
|
6
|
+
import { useTerminalWidth } from '../hooks/useTerminalWidth.js';
|
|
7
|
+
import { useTheme } from '../hooks/useTheme.js';
|
|
8
|
+
export function MCP({ toolManager }) {
|
|
9
|
+
const boxWidth = useTerminalWidth();
|
|
10
|
+
const { colors } = useTheme();
|
|
11
|
+
const connectedServers = toolManager?.getConnectedServers() || [];
|
|
12
|
+
return (_jsx(TitledBox, { borderStyle: "round", titles: ['/mcp'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.primary, paddingX: 2, paddingY: 1, flexDirection: "column", marginBottom: 1, children: connectedServers.length === 0 ? (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.white, bold: true, children: "No MCP servers connected" }) }), _jsxs(Text, { color: colors.white, children: ["To connect MCP servers, add them to your", ' ', _jsx(Text, { color: colors.primary, children: "agents.config.json" }), " file:"] }), _jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(Text, { color: colors.secondary, children: `{
|
|
13
|
+
"nanocoder": {
|
|
14
|
+
"mcpServers": [
|
|
15
|
+
{
|
|
16
|
+
"name": "example-server",
|
|
17
|
+
"command": "node",
|
|
18
|
+
"args": ["path/to/server.js"],
|
|
19
|
+
"env": {
|
|
20
|
+
"API_KEY": "your-key"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}` }) })] })) : (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.primary, children: ["Connected MCP Servers (", connectedServers.length, "):"] }) }), connectedServers.map((serverName, index) => {
|
|
26
|
+
const serverTools = toolManager?.getServerTools(serverName) || [];
|
|
27
|
+
return (_jsx(Box, { marginBottom: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: colors.white, children: ["\u2022 ", _jsx(Text, { color: colors.primary, children: serverName }), ":", ' ', serverTools.length, " tool", serverTools.length !== 1 ? 's' : ''] }), serverTools.length > 0 && (_jsxs(Text, { color: colors.secondary, children: ["Tools: ", serverTools.map((t) => t.name).join(', ')] }))] }) }, index));
|
|
28
|
+
})] })) }, colors.primary));
|
|
29
|
+
}
|
|
30
|
+
export const mcpCommand = {
|
|
31
|
+
name: 'mcp',
|
|
32
|
+
description: 'Show connected MCP servers and their tools',
|
|
33
|
+
handler: async (_args, _messages, _metadata) => {
|
|
34
|
+
const toolManager = getToolManager();
|
|
35
|
+
return React.createElement(MCP, {
|
|
36
|
+
key: `mcp-${Date.now()}`,
|
|
37
|
+
toolManager: toolManager,
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../source/commands/mcp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../source/commands/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAE1C,eAAO,MAAM,YAAY,EAAE,OAQ1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const modelCommand = {
|
|
3
|
+
name: 'model',
|
|
4
|
+
description: 'Select a model for the current provider',
|
|
5
|
+
handler: async (_args, _messages, _metadata) => {
|
|
6
|
+
// This command is handled specially in app.tsx
|
|
7
|
+
// This handler exists only for registration purposes
|
|
8
|
+
return React.createElement(React.Fragment);
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../source/commands/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,YAAY,GAAY;IACpC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,yCAAyC;IACtD,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACxD,+CAA+C;QAC/C,qDAAqD;QACrD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../source/commands/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAE1C,eAAO,MAAM,eAAe,EAAE,OAQ7B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const providerCommand = {
|
|
3
|
+
name: 'provider',
|
|
4
|
+
description: 'Switch between AI providers',
|
|
5
|
+
handler: async (_args, _messages, _metadata) => {
|
|
6
|
+
// This command is handled specially in app.tsx
|
|
7
|
+
// This handler exists only for registration purposes
|
|
8
|
+
return React.createElement(React.Fragment);
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../source/commands/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,eAAe,GAAY;IACvC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,6BAA6B;IAC1C,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACxD,+CAA+C;QAC/C,qDAAqD;QACrD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../source/commands/theme.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAE/C,eAAO,MAAM,YAAY,EAAE,OAQ1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const themeCommand = {
|
|
3
|
+
name: 'theme',
|
|
4
|
+
description: 'Select a theme for the Nanocoder CLI',
|
|
5
|
+
handler: async (_args, _messages, _metadata) => {
|
|
6
|
+
// This command is handled specially in app.tsx
|
|
7
|
+
// This handler exists only for registration purposes
|
|
8
|
+
return React.createElement(React.Fragment);
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../source/commands/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,YAAY,GAAY;IACpC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,sCAAsC;IACnD,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACxD,+CAA+C;QAC/C,qDAAqD;QACrD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAI1C,eAAO,MAAM,aAAa,EAAE,OAM3B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import UpdateMessage from '../components/update-message.js';
|
|
3
|
+
export const updateCommand = {
|
|
4
|
+
name: 'update',
|
|
5
|
+
description: 'Update Nanocoder to the latest version',
|
|
6
|
+
handler: async (_args) => {
|
|
7
|
+
return React.createElement(UpdateMessage);
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,aAAa,MAAM,iCAAiC,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAY;IACrC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wCAAwC;IACrD,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,EAAE;QAClC,OAAO,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;CACD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from './types/index.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export declare class CommandRegistry {
|
|
4
|
+
private commands;
|
|
5
|
+
register(command: Command | Command[]): void;
|
|
6
|
+
get(name: string): Command | undefined;
|
|
7
|
+
getAll(): Command[];
|
|
8
|
+
getCompletions(prefix: string): string[];
|
|
9
|
+
execute(input: string, messages: import('./types/index.js').Message[], metadata: {
|
|
10
|
+
provider: string;
|
|
11
|
+
model: string;
|
|
12
|
+
tokens: number;
|
|
13
|
+
}): Promise<void | string | React.ReactNode>;
|
|
14
|
+
}
|
|
15
|
+
export declare const commandRegistry: CommandRegistry;
|
|
16
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../source/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAA8B;IAE9C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI;IAQ5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC,MAAM,IAAI,OAAO,EAAE;IAInB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAMlC,OAAO,CACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,kBAAkB,EAAE,OAAO,EAAE,EAC9C,QAAQ,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,GACzD,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;CAwB3C;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
package/dist/commands.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ErrorMessage from './components/error-message.js';
|
|
3
|
+
export class CommandRegistry {
|
|
4
|
+
commands = new Map();
|
|
5
|
+
register(command) {
|
|
6
|
+
if (Array.isArray(command)) {
|
|
7
|
+
command.forEach(cmd => this.register(cmd));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
this.commands.set(command.name, command);
|
|
11
|
+
}
|
|
12
|
+
get(name) {
|
|
13
|
+
return this.commands.get(name);
|
|
14
|
+
}
|
|
15
|
+
getAll() {
|
|
16
|
+
return Array.from(this.commands.values());
|
|
17
|
+
}
|
|
18
|
+
getCompletions(prefix) {
|
|
19
|
+
return Array.from(this.commands.keys())
|
|
20
|
+
.filter(name => name.startsWith(prefix))
|
|
21
|
+
.sort();
|
|
22
|
+
}
|
|
23
|
+
async execute(input, messages, metadata) {
|
|
24
|
+
const parts = input.trim().split(/\s+/);
|
|
25
|
+
const commandName = parts[0];
|
|
26
|
+
if (!commandName) {
|
|
27
|
+
return React.createElement(ErrorMessage, {
|
|
28
|
+
key: `error-${Date.now()}`,
|
|
29
|
+
message: 'Invalid command. Type /help for available commands.',
|
|
30
|
+
hideBox: true,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const args = parts.slice(1);
|
|
34
|
+
const command = this.get(commandName);
|
|
35
|
+
if (!command) {
|
|
36
|
+
return React.createElement(ErrorMessage, {
|
|
37
|
+
key: `error-${Date.now()}`,
|
|
38
|
+
message: `Unknown command: ${commandName}. Type /help for available commands.`,
|
|
39
|
+
hideBox: true,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return await command.handler(args, messages, metadata);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export const commandRegistry = new CommandRegistry();
|
|
46
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../source/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAEzD,MAAM,OAAO,eAAe;IACnB,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE9C,QAAQ,CAAC,OAA4B;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,MAAc;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;aACrC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACvC,IAAI,EAAE,CAAC;IACV,CAAC;IAED,KAAK,CAAC,OAAO,CACZ,KAAa,EACb,QAA8C,EAC9C,QAA2D;QAE3D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;gBACxC,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC1B,OAAO,EAAE,qDAAqD;gBAC9D,OAAO,EAAE,IAAI;aACb,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;gBACxC,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC1B,OAAO,EAAE,oBAAoB,WAAW,sCAAsC;gBAC9E,OAAO,EAAE,IAAI;aACb,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;CACD;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assistant-message.d.ts","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;;AAM7D,wBAgEG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Text, Box } from 'ink';
|
|
3
|
+
import { memo, useMemo } from 'react';
|
|
4
|
+
import { useTheme } from '../hooks/useTheme.js';
|
|
5
|
+
// Performance optimization: truncate very long messages to prevent input lag
|
|
6
|
+
const MAX_MESSAGE_LENGTH = 6000; // characters - beyond this causes input lag
|
|
7
|
+
const TRUNCATE_PREVIEW_LENGTH = 3000; // characters to show before truncation
|
|
8
|
+
export default memo(function AssistantMessage({ message, model, }) {
|
|
9
|
+
const { colors } = useTheme();
|
|
10
|
+
const { displayMessage, wasTruncated, remainingChars } = useMemo(() => {
|
|
11
|
+
if (message.length <= MAX_MESSAGE_LENGTH) {
|
|
12
|
+
return {
|
|
13
|
+
displayMessage: message,
|
|
14
|
+
wasTruncated: false,
|
|
15
|
+
remainingChars: 0,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
// Find a good truncation point (prefer end of line or sentence)
|
|
19
|
+
const truncateAt = TRUNCATE_PREVIEW_LENGTH;
|
|
20
|
+
let cutPoint = truncateAt;
|
|
21
|
+
// Try to find a natural break point near the truncation point
|
|
22
|
+
const searchArea = message.slice(Math.max(0, truncateAt - 100), truncateAt + 100);
|
|
23
|
+
const lineBreak = searchArea.lastIndexOf('\n');
|
|
24
|
+
const sentenceEnd = searchArea.lastIndexOf('.');
|
|
25
|
+
const paragraphEnd = searchArea.lastIndexOf('\n\n');
|
|
26
|
+
if (paragraphEnd !== -1) {
|
|
27
|
+
cutPoint = truncateAt - 100 + paragraphEnd + 2;
|
|
28
|
+
}
|
|
29
|
+
else if (lineBreak !== -1) {
|
|
30
|
+
cutPoint = truncateAt - 100 + lineBreak + 1;
|
|
31
|
+
}
|
|
32
|
+
else if (sentenceEnd !== -1) {
|
|
33
|
+
cutPoint = truncateAt - 100 + sentenceEnd + 1;
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
displayMessage: message.slice(0, cutPoint).trimEnd(),
|
|
37
|
+
wasTruncated: true,
|
|
38
|
+
remainingChars: message.length - cutPoint,
|
|
39
|
+
};
|
|
40
|
+
}, [message]);
|
|
41
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { children: _jsxs(Text, { color: colors.primary, bold: true, children: [model, ":"] }) }), _jsx(Text, { color: colors.white, children: displayMessage }), wasTruncated && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { color: colors.secondary, dimColor: true, children: ["... [", remainingChars.toLocaleString(), " more characters truncated for performance]"] }), _jsx(Text, { color: colors.info, children: "Scroll up to see the beginning or use terminal's buffer to view full response" })] }))] }));
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=assistant-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assistant-message.js","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,6EAA6E;AAC7E,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,4CAA4C;AAC7E,MAAM,uBAAuB,GAAG,IAAI,CAAC,CAAC,uCAAuC;AAE7E,eAAe,IAAI,CAAC,SAAS,gBAAgB,CAAC,EAC7C,OAAO,EACP,KAAK,GACkB;IACvB,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC5B,MAAM,EAAC,cAAc,EAAE,YAAY,EAAE,cAAc,EAAC,GAAG,OAAO,CAAC,GAAG,EAAE;QACnE,IAAI,OAAO,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;YAC1C,OAAO;gBACN,cAAc,EAAE,OAAO;gBACvB,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,CAAC;aACjB,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,MAAM,UAAU,GAAG,uBAAuB,CAAC;QAC3C,IAAI,QAAQ,GAAG,UAAU,CAAC;QAE1B,8DAA8D;QAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC,EAC7B,UAAU,GAAG,GAAG,CAChB,CAAC;QACF,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,YAAY,GAAG,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/B,QAAQ,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACN,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE;YACpD,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,QAAQ;SACzC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aAC1C,KAAC,GAAG,cACH,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,mBAC/B,KAAK,SACA,GACF,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,cAAc,GAAQ,EACjD,YAAY,IAAI,CAChB,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACxC,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,4BAChC,cAAc,CAAC,cAAc,EAAE,mDAE/B,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,8FAGjB,IACF,CACN,IACI,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-execution-indicator.d.ts","sourceRoot":"","sources":["../../source/components/bash-execution-indicator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,mBAAmB,CAAC;;AAEnE,wBAeG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { useTheme } from '../hooks/useTheme.js';
|
|
5
|
+
export default memo(function BashExecutionIndicator({ command, }) {
|
|
6
|
+
const { colors } = useTheme();
|
|
7
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: colors.tool, children: "\u25CF Executing: " }), _jsx(Text, { color: colors.secondary, children: command })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.secondary, children: "Press Escape to cancel" }) })] }));
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=bash-execution-indicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-execution-indicator.js","sourceRoot":"","sources":["../../source/components/bash-execution-indicator.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,eAAe,IAAI,CAAC,SAAS,sBAAsB,CAAC,EACnD,OAAO,GACsB;IAC7B,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC5B,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aAC1C,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,aACvB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,mCAAsB,EAC9C,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,YAAG,OAAO,GAAQ,IAC1C,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,uCAA+B,GACvD,IACD,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelling-indicator.d.ts","sourceRoot":"","sources":["../../source/components/cancelling-indicator.tsx"],"names":[],"mappings":";AAKA,wBAUG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import Spinner from 'ink-spinner';
|
|
5
|
+
import { useTheme } from '../hooks/useTheme.js';
|
|
6
|
+
export default memo(function CancellingIndicator() {
|
|
7
|
+
const { colors } = useTheme();
|
|
8
|
+
return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsxs(Box, { children: [_jsx(Spinner, { type: "dots2" }), _jsx(Text, { color: colors.secondary, children: " Cancelling..." })] }) }));
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=cancelling-indicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelling-indicator.js","sourceRoot":"","sources":["../../source/components/cancelling-indicator.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,eAAe,IAAI,CAAC,SAAS,mBAAmB;IAC/C,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC5B,OAAO,CACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YAC1C,MAAC,GAAG,eACH,KAAC,OAAO,IAAC,IAAI,EAAC,OAAO,GAAG,EACxB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,+BAAuB,IAC/C,GACD,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-queue.d.ts","sourceRoot":"","sources":["../../source/components/chat-queue.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;;AAItD,wBA+BG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box } from 'ink';
|
|
3
|
+
import { useMemo, Fragment, memo } from 'react';
|
|
4
|
+
const defaultDisplayCount = 20;
|
|
5
|
+
export default memo(function ChatQueue({ staticComponents = [], queuedComponents = [], displayCount = defaultDisplayCount, }) {
|
|
6
|
+
const allComponents = useMemo(() => {
|
|
7
|
+
const totalLength = queuedComponents.length;
|
|
8
|
+
const slicedQueuedComponents = queuedComponents.slice(Math.max(totalLength - displayCount, 0));
|
|
9
|
+
const components = [...staticComponents, ...slicedQueuedComponents];
|
|
10
|
+
return components;
|
|
11
|
+
}, [staticComponents, queuedComponents, displayCount]);
|
|
12
|
+
return (_jsx(Box, { flexDirection: "column", children: allComponents.map((component, index) => {
|
|
13
|
+
// Use component key if it exists, otherwise generate a fallback key
|
|
14
|
+
const key = component &&
|
|
15
|
+
typeof component === 'object' &&
|
|
16
|
+
'key' in component &&
|
|
17
|
+
component.key
|
|
18
|
+
? component.key
|
|
19
|
+
: `component-${index}`;
|
|
20
|
+
return _jsx(Fragment, { children: component }, key);
|
|
21
|
+
}) }));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=chat-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-queue.js","sourceRoot":"","sources":["../../source/components/chat-queue.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,OAAO,EAAY,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAC,MAAM,OAAO,CAAC;AAGzD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,eAAe,IAAI,CAAC,SAAS,SAAS,CAAC,EACtC,gBAAgB,GAAG,EAAE,EACrB,gBAAgB,GAAG,EAAE,EACrB,YAAY,GAAG,mBAAmB,GAClB;IAChB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAC5C,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,KAAK,CACpD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,YAAY,EAAE,CAAC,CAAC,CACvC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,sBAAsB,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC;IACnB,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEvD,OAAO,CACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACzB,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;YACvC,oEAAoE;YACpE,MAAM,GAAG,GACR,SAAS;gBACT,OAAO,SAAS,KAAK,QAAQ;gBAC7B,KAAK,IAAI,SAAS;gBAClB,SAAS,CAAC,GAAG;gBACZ,CAAC,CAAC,SAAS,CAAC,GAAG;gBACf,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC;YAEvB,OAAO,KAAC,QAAQ,cAAY,SAAS,IAAf,GAAG,CAAwB,CAAC;QACrD,CAAC,CAAC,GACG,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
|