@xiuper/cli 0.0.1
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/README.md +180 -0
- package/dist/jsMain/typescript/agents/LLMService.d.ts +40 -0
- package/dist/jsMain/typescript/agents/LLMService.d.ts.map +1 -0
- package/dist/jsMain/typescript/agents/LLMService.js +156 -0
- package/dist/jsMain/typescript/agents/LLMService.js.map +1 -0
- package/dist/jsMain/typescript/agents/ServerAgentClient.d.ts +103 -0
- package/dist/jsMain/typescript/agents/ServerAgentClient.d.ts.map +1 -0
- package/dist/jsMain/typescript/agents/ServerAgentClient.js +142 -0
- package/dist/jsMain/typescript/agents/ServerAgentClient.js.map +1 -0
- package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts +87 -0
- package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts.map +1 -0
- package/dist/jsMain/typescript/agents/render/BaseRenderer.js +128 -0
- package/dist/jsMain/typescript/agents/render/BaseRenderer.js.map +1 -0
- package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts +51 -0
- package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts.map +1 -0
- package/dist/jsMain/typescript/agents/render/CliRenderer.js +564 -0
- package/dist/jsMain/typescript/agents/render/CliRenderer.js.map +1 -0
- package/dist/jsMain/typescript/agents/render/ServerRenderer.d.ts +55 -0
- package/dist/jsMain/typescript/agents/render/ServerRenderer.d.ts.map +1 -0
- package/dist/jsMain/typescript/agents/render/ServerRenderer.js +503 -0
- package/dist/jsMain/typescript/agents/render/ServerRenderer.js.map +1 -0
- package/dist/jsMain/typescript/agents/render/TuiRenderer.d.ts +104 -0
- package/dist/jsMain/typescript/agents/render/TuiRenderer.d.ts.map +1 -0
- package/dist/jsMain/typescript/agents/render/TuiRenderer.js +279 -0
- package/dist/jsMain/typescript/agents/render/TuiRenderer.js.map +1 -0
- package/dist/jsMain/typescript/config/ConfigManager.d.ts +146 -0
- package/dist/jsMain/typescript/config/ConfigManager.d.ts.map +1 -0
- package/dist/jsMain/typescript/config/ConfigManager.js +257 -0
- package/dist/jsMain/typescript/config/ConfigManager.js.map +1 -0
- package/dist/jsMain/typescript/constants/asciiArt.d.ts +9 -0
- package/dist/jsMain/typescript/constants/asciiArt.d.ts.map +1 -0
- package/dist/jsMain/typescript/constants/asciiArt.js +47 -0
- package/dist/jsMain/typescript/constants/asciiArt.js.map +1 -0
- package/dist/jsMain/typescript/design-system/colors.d.ts +492 -0
- package/dist/jsMain/typescript/design-system/colors.d.ts.map +1 -0
- package/dist/jsMain/typescript/design-system/colors.js +333 -0
- package/dist/jsMain/typescript/design-system/colors.js.map +1 -0
- package/dist/jsMain/typescript/design-system/index.d.ts +31 -0
- package/dist/jsMain/typescript/design-system/index.d.ts.map +1 -0
- package/dist/jsMain/typescript/design-system/index.js +195 -0
- package/dist/jsMain/typescript/design-system/index.js.map +1 -0
- package/dist/jsMain/typescript/design-system/theme-helpers.d.ts +161 -0
- package/dist/jsMain/typescript/design-system/theme-helpers.d.ts.map +1 -0
- package/dist/jsMain/typescript/design-system/theme-helpers.js +153 -0
- package/dist/jsMain/typescript/design-system/theme-helpers.js.map +1 -0
- package/dist/jsMain/typescript/i18n/index.d.ts +37 -0
- package/dist/jsMain/typescript/i18n/index.d.ts.map +1 -0
- package/dist/jsMain/typescript/i18n/index.js +139 -0
- package/dist/jsMain/typescript/i18n/index.js.map +1 -0
- package/dist/jsMain/typescript/i18n/locales/en.d.ts +6 -0
- package/dist/jsMain/typescript/i18n/locales/en.d.ts.map +1 -0
- package/dist/jsMain/typescript/i18n/locales/en.js +120 -0
- package/dist/jsMain/typescript/i18n/locales/en.js.map +1 -0
- package/dist/jsMain/typescript/i18n/locales/zh.d.ts +6 -0
- package/dist/jsMain/typescript/i18n/locales/zh.d.ts.map +1 -0
- package/dist/jsMain/typescript/i18n/locales/zh.js +120 -0
- package/dist/jsMain/typescript/i18n/locales/zh.js.map +1 -0
- package/dist/jsMain/typescript/i18n/types.d.ts +124 -0
- package/dist/jsMain/typescript/i18n/types.d.ts.map +1 -0
- package/dist/jsMain/typescript/i18n/types.js +7 -0
- package/dist/jsMain/typescript/i18n/types.js.map +1 -0
- package/dist/jsMain/typescript/index.d.ts +9 -0
- package/dist/jsMain/typescript/index.d.ts.map +1 -0
- package/dist/jsMain/typescript/index.js +380 -0
- package/dist/jsMain/typescript/index.js.map +1 -0
- package/dist/jsMain/typescript/modes/AgentMode.d.ts +33 -0
- package/dist/jsMain/typescript/modes/AgentMode.d.ts.map +1 -0
- package/dist/jsMain/typescript/modes/AgentMode.js +243 -0
- package/dist/jsMain/typescript/modes/AgentMode.js.map +1 -0
- package/dist/jsMain/typescript/modes/ChatMode.d.ts +30 -0
- package/dist/jsMain/typescript/modes/ChatMode.d.ts.map +1 -0
- package/dist/jsMain/typescript/modes/ChatMode.js +260 -0
- package/dist/jsMain/typescript/modes/ChatMode.js.map +1 -0
- package/dist/jsMain/typescript/modes/DocumentMode.d.ts +26 -0
- package/dist/jsMain/typescript/modes/DocumentMode.d.ts.map +1 -0
- package/dist/jsMain/typescript/modes/DocumentMode.js +217 -0
- package/dist/jsMain/typescript/modes/DocumentMode.js.map +1 -0
- package/dist/jsMain/typescript/modes/Mode.d.ts +72 -0
- package/dist/jsMain/typescript/modes/Mode.d.ts.map +1 -0
- package/dist/jsMain/typescript/modes/Mode.js +7 -0
- package/dist/jsMain/typescript/modes/Mode.js.map +1 -0
- package/dist/jsMain/typescript/modes/ModeManager.d.ts +76 -0
- package/dist/jsMain/typescript/modes/ModeManager.d.ts.map +1 -0
- package/dist/jsMain/typescript/modes/ModeManager.js +156 -0
- package/dist/jsMain/typescript/modes/ModeManager.js.map +1 -0
- package/dist/jsMain/typescript/modes/ReviewMode.d.ts +52 -0
- package/dist/jsMain/typescript/modes/ReviewMode.d.ts.map +1 -0
- package/dist/jsMain/typescript/modes/ReviewMode.js +435 -0
- package/dist/jsMain/typescript/modes/ReviewMode.js.map +1 -0
- package/dist/jsMain/typescript/modes/index.d.ts +9 -0
- package/dist/jsMain/typescript/modes/index.d.ts.map +1 -0
- package/dist/jsMain/typescript/modes/index.js +7 -0
- package/dist/jsMain/typescript/modes/index.js.map +1 -0
- package/dist/jsMain/typescript/processors/AtCommandProcessor.d.ts +34 -0
- package/dist/jsMain/typescript/processors/AtCommandProcessor.d.ts.map +1 -0
- package/dist/jsMain/typescript/processors/AtCommandProcessor.js +118 -0
- package/dist/jsMain/typescript/processors/AtCommandProcessor.js.map +1 -0
- package/dist/jsMain/typescript/processors/InputRouter.d.ts +84 -0
- package/dist/jsMain/typescript/processors/InputRouter.d.ts.map +1 -0
- package/dist/jsMain/typescript/processors/InputRouter.js +78 -0
- package/dist/jsMain/typescript/processors/InputRouter.js.map +1 -0
- package/dist/jsMain/typescript/processors/ModeCommandProcessor.d.ts +25 -0
- package/dist/jsMain/typescript/processors/ModeCommandProcessor.d.ts.map +1 -0
- package/dist/jsMain/typescript/processors/ModeCommandProcessor.js +127 -0
- package/dist/jsMain/typescript/processors/ModeCommandProcessor.js.map +1 -0
- package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts +68 -0
- package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts.map +1 -0
- package/dist/jsMain/typescript/processors/SlashCommandProcessor.js +391 -0
- package/dist/jsMain/typescript/processors/SlashCommandProcessor.js.map +1 -0
- package/dist/jsMain/typescript/processors/VariableProcessor.d.ts +44 -0
- package/dist/jsMain/typescript/processors/VariableProcessor.d.ts.map +1 -0
- package/dist/jsMain/typescript/processors/VariableProcessor.js +105 -0
- package/dist/jsMain/typescript/processors/VariableProcessor.js.map +1 -0
- package/dist/jsMain/typescript/ui/App.d.ts +16 -0
- package/dist/jsMain/typescript/ui/App.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/App.js +208 -0
- package/dist/jsMain/typescript/ui/App.js.map +1 -0
- package/dist/jsMain/typescript/ui/Banner.d.ts +6 -0
- package/dist/jsMain/typescript/ui/Banner.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/Banner.js +13 -0
- package/dist/jsMain/typescript/ui/Banner.js.map +1 -0
- package/dist/jsMain/typescript/ui/ChatInterface.d.ts +19 -0
- package/dist/jsMain/typescript/ui/ChatInterface.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/ChatInterface.js +223 -0
- package/dist/jsMain/typescript/ui/ChatInterface.js.map +1 -0
- package/dist/jsMain/typescript/ui/CommandSuggestions.d.ts +21 -0
- package/dist/jsMain/typescript/ui/CommandSuggestions.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/CommandSuggestions.js +43 -0
- package/dist/jsMain/typescript/ui/CommandSuggestions.js.map +1 -0
- package/dist/jsMain/typescript/ui/LanguageSwitcher.d.ts +11 -0
- package/dist/jsMain/typescript/ui/LanguageSwitcher.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/LanguageSwitcher.js +37 -0
- package/dist/jsMain/typescript/ui/LanguageSwitcher.js.map +1 -0
- package/dist/jsMain/typescript/ui/MessageRenderer.d.ts +70 -0
- package/dist/jsMain/typescript/ui/MessageRenderer.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/MessageRenderer.js +255 -0
- package/dist/jsMain/typescript/ui/MessageRenderer.js.map +1 -0
- package/dist/jsMain/typescript/ui/ModelConfigForm.d.ts +19 -0
- package/dist/jsMain/typescript/ui/ModelConfigForm.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/ModelConfigForm.js +257 -0
- package/dist/jsMain/typescript/ui/ModelConfigForm.js.map +1 -0
- package/dist/jsMain/typescript/ui/WelcomeScreen.d.ts +12 -0
- package/dist/jsMain/typescript/ui/WelcomeScreen.d.ts.map +1 -0
- package/dist/jsMain/typescript/ui/WelcomeScreen.js +93 -0
- package/dist/jsMain/typescript/ui/WelcomeScreen.js.map +1 -0
- package/dist/jsMain/typescript/utils/commandUtils.d.ts +64 -0
- package/dist/jsMain/typescript/utils/commandUtils.d.ts.map +1 -0
- package/dist/jsMain/typescript/utils/commandUtils.js +195 -0
- package/dist/jsMain/typescript/utils/commandUtils.js.map +1 -0
- package/dist/jsMain/typescript/utils/domainDictUtils.d.ts +53 -0
- package/dist/jsMain/typescript/utils/domainDictUtils.d.ts.map +1 -0
- package/dist/jsMain/typescript/utils/domainDictUtils.js +130 -0
- package/dist/jsMain/typescript/utils/domainDictUtils.js.map +1 -0
- package/dist/jsMain/typescript/utils/markdownSplitter.d.ts +23 -0
- package/dist/jsMain/typescript/utils/markdownSplitter.d.ts.map +1 -0
- package/dist/jsMain/typescript/utils/markdownSplitter.js +90 -0
- package/dist/jsMain/typescript/utils/markdownSplitter.js.map +1 -0
- package/dist/jsMain/typescript/utils/outputFormatter.d.ts +70 -0
- package/dist/jsMain/typescript/utils/outputFormatter.d.ts.map +1 -0
- package/dist/jsMain/typescript/utils/outputFormatter.js +140 -0
- package/dist/jsMain/typescript/utils/outputFormatter.js.map +1 -0
- package/dist/jsMain/typescript/utils/renderUtils.d.ts +17 -0
- package/dist/jsMain/typescript/utils/renderUtils.d.ts.map +1 -0
- package/dist/jsMain/typescript/utils/renderUtils.js +128 -0
- package/dist/jsMain/typescript/utils/renderUtils.js.map +1 -0
- package/dist/test/framework/analyzers/CodeChangeAnalyzer.d.ts +87 -0
- package/dist/test/framework/analyzers/CodeChangeAnalyzer.d.ts.map +1 -0
- package/dist/test/framework/analyzers/CodeChangeAnalyzer.js +412 -0
- package/dist/test/framework/analyzers/CodeChangeAnalyzer.js.map +1 -0
- package/dist/test/framework/analyzers/PromptAnalyzer.d.ts +46 -0
- package/dist/test/framework/analyzers/PromptAnalyzer.d.ts.map +1 -0
- package/dist/test/framework/analyzers/PromptAnalyzer.js +185 -0
- package/dist/test/framework/analyzers/PromptAnalyzer.js.map +1 -0
- package/dist/test/framework/analyzers/ToolCallAnalyzer.d.ts +45 -0
- package/dist/test/framework/analyzers/ToolCallAnalyzer.d.ts.map +1 -0
- package/dist/test/framework/analyzers/ToolCallAnalyzer.js +215 -0
- package/dist/test/framework/analyzers/ToolCallAnalyzer.js.map +1 -0
- package/dist/test/framework/cli.d.ts +8 -0
- package/dist/test/framework/cli.d.ts.map +1 -0
- package/dist/test/framework/cli.js +175 -0
- package/dist/test/framework/cli.js.map +1 -0
- package/dist/test/framework/core/TestCase.d.ts +100 -0
- package/dist/test/framework/core/TestCase.d.ts.map +1 -0
- package/dist/test/framework/core/TestCase.js +101 -0
- package/dist/test/framework/core/TestCase.js.map +1 -0
- package/dist/test/framework/core/TestEngine.d.ts +89 -0
- package/dist/test/framework/core/TestEngine.d.ts.map +1 -0
- package/dist/test/framework/core/TestEngine.js +552 -0
- package/dist/test/framework/core/TestEngine.js.map +1 -0
- package/dist/test/framework/core/TestResult.d.ts +143 -0
- package/dist/test/framework/core/TestResult.d.ts.map +1 -0
- package/dist/test/framework/core/TestResult.js +76 -0
- package/dist/test/framework/core/TestResult.js.map +1 -0
- package/dist/test/framework/examples/BasicRobustnessTest.d.ts +19 -0
- package/dist/test/framework/examples/BasicRobustnessTest.d.ts.map +1 -0
- package/dist/test/framework/examples/BasicRobustnessTest.js +116 -0
- package/dist/test/framework/examples/BasicRobustnessTest.js.map +1 -0
- package/dist/test/framework/index.d.ts +30 -0
- package/dist/test/framework/index.d.ts.map +1 -0
- package/dist/test/framework/index.js +38 -0
- package/dist/test/framework/index.js.map +1 -0
- package/dist/test/framework/loaders/JsonScenarioLoader.d.ts +99 -0
- package/dist/test/framework/loaders/JsonScenarioLoader.d.ts.map +1 -0
- package/dist/test/framework/loaders/JsonScenarioLoader.js +197 -0
- package/dist/test/framework/loaders/JsonScenarioLoader.js.map +1 -0
- package/dist/test/framework/reporters/ConsoleReporter.d.ts +25 -0
- package/dist/test/framework/reporters/ConsoleReporter.d.ts.map +1 -0
- package/dist/test/framework/reporters/ConsoleReporter.js +196 -0
- package/dist/test/framework/reporters/ConsoleReporter.js.map +1 -0
- package/dist/test/framework/scenarios/ScenarioBuilder.d.ts +62 -0
- package/dist/test/framework/scenarios/ScenarioBuilder.d.ts.map +1 -0
- package/dist/test/framework/scenarios/ScenarioBuilder.js +285 -0
- package/dist/test/framework/scenarios/ScenarioBuilder.js.map +1 -0
- package/dist/test/framework/validate-framework.d.ts +9 -0
- package/dist/test/framework/validate-framework.d.ts.map +1 -0
- package/dist/test/framework/validate-framework.js +187 -0
- package/dist/test/framework/validate-framework.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentMode.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/modes/DocumentMode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACL;AAyED;;GAEG;AACH,wBAAsB,WAAW,CAC7B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,GAAG,EACf,QAAQ,CAAC,EAAE,GAAG,GACf,OAAO,CAAC,cAAc,CAAC,CA2KzB"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document Mode - Automated document query with DocQL
|
|
3
|
+
*
|
|
4
|
+
* Similar to ReviewMode, this mode:
|
|
5
|
+
* 1. Scans for documents in the project
|
|
6
|
+
* 2. Registers documents with the DocumentRegistry
|
|
7
|
+
* 3. Uses DocumentAgent with DocQLTool for intelligent querying
|
|
8
|
+
*/
|
|
9
|
+
import mppCore from '@xiuper/mpp-core';
|
|
10
|
+
import { semanticChalk } from '../design-system/theme-helpers.js';
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
const { cc: KotlinCC } = mppCore;
|
|
14
|
+
/**
|
|
15
|
+
* Scan for documents in a directory
|
|
16
|
+
*/
|
|
17
|
+
function scanDocuments(dirPath, extensions = [
|
|
18
|
+
'.md', '.pdf', '.docx', '.pptx', '.txt', // Documents
|
|
19
|
+
'.java', '.kt', '.kts', // JVM source code
|
|
20
|
+
'.js', '.ts', '.tsx', // JavaScript/TypeScript
|
|
21
|
+
'.py', '.go', '.rs', '.cs' // Other languages
|
|
22
|
+
]) {
|
|
23
|
+
const documents = [];
|
|
24
|
+
function scanDir(currentPath) {
|
|
25
|
+
try {
|
|
26
|
+
const entries = fs.readdirSync(currentPath, { withFileTypes: true });
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
29
|
+
// Skip common non-document directories
|
|
30
|
+
if (entry.isDirectory()) {
|
|
31
|
+
const skipDirs = ['node_modules', '.git', 'build', 'dist', 'target', '.gradle', 'bin'];
|
|
32
|
+
if (!skipDirs.includes(entry.name) && !entry.name.startsWith('.')) {
|
|
33
|
+
scanDir(fullPath);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (entry.isFile()) {
|
|
37
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
38
|
+
if (extensions.includes(ext)) {
|
|
39
|
+
documents.push(fullPath);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
// Silently skip inaccessible directories
|
|
46
|
+
console.log(semanticChalk.muted(`⚠️ Skipping ${currentPath}: ${error.message}`));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
scanDir(dirPath);
|
|
50
|
+
return documents;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register a document with the DocumentRegistry
|
|
54
|
+
*/
|
|
55
|
+
async function registerDocument(filePath, projectPath, agent) {
|
|
56
|
+
try {
|
|
57
|
+
const relativePath = path.relative(projectPath, filePath);
|
|
58
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
59
|
+
const registered = await agent.registerDocument(relativePath, content);
|
|
60
|
+
return { success: registered, filePath };
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// Extract error type for summary (e.g., "Cannot find module 'web-tree-sitter'")
|
|
64
|
+
const errorType = error.message?.split(':')[0] || 'Unknown error';
|
|
65
|
+
return { success: false, filePath, errorType };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Run document query
|
|
70
|
+
*/
|
|
71
|
+
export async function runDocument(options, llmService, renderer) {
|
|
72
|
+
const { projectPath, query, documentPath } = options;
|
|
73
|
+
const startTime = Date.now();
|
|
74
|
+
// ===== INPUT VALIDATION =====
|
|
75
|
+
// Validate query parameter
|
|
76
|
+
if (!query || query.trim().length === 0) {
|
|
77
|
+
console.error(semanticChalk.error('❌ Error: Query parameter is required and cannot be empty'));
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
message: 'Error: Query parameter is required and cannot be empty.\n\nUsage: document -p <path> -q "<your question>"'
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Validate project path exists
|
|
84
|
+
if (!fs.existsSync(projectPath)) {
|
|
85
|
+
console.error(semanticChalk.error(`❌ Error: Project path does not exist: ${projectPath}`));
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
message: `Error: Project path does not exist: ${projectPath}\n\nPlease provide a valid directory path.`
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
console.log(semanticChalk.info(`\n📄 AutoDev Document Query`));
|
|
92
|
+
console.log(semanticChalk.muted(`Project: ${projectPath}`));
|
|
93
|
+
console.log(semanticChalk.muted(`Query: ${query}`));
|
|
94
|
+
if (documentPath) {
|
|
95
|
+
console.log(semanticChalk.muted(`Document: ${documentPath}`));
|
|
96
|
+
}
|
|
97
|
+
console.log();
|
|
98
|
+
try {
|
|
99
|
+
// ===== STEP 1: Initialize Platform Parsers =====
|
|
100
|
+
console.log(semanticChalk.info('🔧 Initializing document parsers...'));
|
|
101
|
+
KotlinCC.unitmesh.llm.JsDocumentRegistry.initializePlatformParsers();
|
|
102
|
+
console.log(semanticChalk.success('✅ Parsers initialized'));
|
|
103
|
+
console.log();
|
|
104
|
+
// ===== STEP 2: Create Document Agent =====
|
|
105
|
+
const dummyParser = KotlinCC.unitmesh.llm.JsDocumentParserFactory.createParserForFile("dummy.md");
|
|
106
|
+
const agent = new KotlinCC.unitmesh.agent.JsDocumentAgent(llmService, dummyParser, renderer || null, null);
|
|
107
|
+
// ===== STEP 3: Scan and Register Documents =====
|
|
108
|
+
let documentsScanned = 0;
|
|
109
|
+
let documentsRegistered = 0;
|
|
110
|
+
// Track failed registrations by error type for summary
|
|
111
|
+
const failedByErrorType = new Map();
|
|
112
|
+
if (documentPath) {
|
|
113
|
+
// Register specific document
|
|
114
|
+
const fullPath = path.resolve(projectPath, documentPath);
|
|
115
|
+
if (fs.existsSync(fullPath)) {
|
|
116
|
+
console.log(semanticChalk.info(`📖 Reading document: ${documentPath}...`));
|
|
117
|
+
// Calculate relative path for registration
|
|
118
|
+
const relativePath = path.relative(projectPath, fullPath);
|
|
119
|
+
console.log(semanticChalk.muted(` Registering as: ${relativePath}`));
|
|
120
|
+
const result = await registerDocument(fullPath, projectPath, agent);
|
|
121
|
+
if (result.success) {
|
|
122
|
+
console.log(semanticChalk.success(`✅ Document registered successfully`));
|
|
123
|
+
documentsRegistered = 1;
|
|
124
|
+
documentsScanned = 1;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
console.log(semanticChalk.warning(`⚠️ Failed to register document: ${result.errorType || 'Unknown error'}`));
|
|
128
|
+
}
|
|
129
|
+
console.log();
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.log(semanticChalk.warning(`⚠️ Document file not found: ${fullPath}`));
|
|
133
|
+
console.log();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Scan entire project for documents (default behavior)
|
|
138
|
+
console.log(semanticChalk.info('📖 Scanning project for documents...'));
|
|
139
|
+
const foundDocs = scanDocuments(projectPath);
|
|
140
|
+
documentsScanned = foundDocs.length;
|
|
141
|
+
console.log(semanticChalk.muted(` Found ${foundDocs.length} documents`));
|
|
142
|
+
if (foundDocs.length > 0) {
|
|
143
|
+
// Register documents silently - only show progress for large sets
|
|
144
|
+
const showProgress = foundDocs.length > 50;
|
|
145
|
+
let lastProgress = 0;
|
|
146
|
+
for (let i = 0; i < foundDocs.length; i++) {
|
|
147
|
+
const docPath = foundDocs[i];
|
|
148
|
+
const result = await registerDocument(docPath, projectPath, agent);
|
|
149
|
+
if (result.success) {
|
|
150
|
+
documentsRegistered++;
|
|
151
|
+
}
|
|
152
|
+
else if (result.errorType) {
|
|
153
|
+
// Track errors by type for summary
|
|
154
|
+
const count = failedByErrorType.get(result.errorType) || 0;
|
|
155
|
+
failedByErrorType.set(result.errorType, count + 1);
|
|
156
|
+
}
|
|
157
|
+
// Show progress every 25% for large document sets
|
|
158
|
+
if (showProgress) {
|
|
159
|
+
const progress = Math.floor((i + 1) / foundDocs.length * 100);
|
|
160
|
+
if (progress >= lastProgress + 25) {
|
|
161
|
+
process.stdout.write(`\r Registering... ${progress}%`);
|
|
162
|
+
lastProgress = progress;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (showProgress) {
|
|
167
|
+
process.stdout.write('\r \r'); // Clear progress line
|
|
168
|
+
}
|
|
169
|
+
console.log(semanticChalk.success(`✅ Registered ${documentsRegistered}/${documentsScanned} documents`));
|
|
170
|
+
// Show summary of failures if any
|
|
171
|
+
if (failedByErrorType.size > 0) {
|
|
172
|
+
const totalFailed = documentsScanned - documentsRegistered;
|
|
173
|
+
console.log(semanticChalk.muted(` ${totalFailed} documents skipped (code parsing requires tree-sitter)`));
|
|
174
|
+
}
|
|
175
|
+
console.log();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// ===== STEP 4: Execute Document Query =====
|
|
179
|
+
console.log(semanticChalk.info('🧠 Starting document query with AI agent...'));
|
|
180
|
+
console.log();
|
|
181
|
+
const queryStartTime = Date.now();
|
|
182
|
+
const result = await agent.executeTask(query, documentPath || null);
|
|
183
|
+
const queryDuration = Date.now() - queryStartTime;
|
|
184
|
+
console.log();
|
|
185
|
+
// Note: The LLM response is already streamed during execution,
|
|
186
|
+
// so we don't need to print result.message again to avoid duplication.
|
|
187
|
+
// Only show the final status.
|
|
188
|
+
if (result.success) {
|
|
189
|
+
console.log(semanticChalk.success('✅ Query complete!'));
|
|
190
|
+
console.log(semanticChalk.muted(`⏱️ Total time: ${queryDuration}ms`));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.log(semanticChalk.error(`❌ Query failed: ${result.message}`));
|
|
194
|
+
console.log(semanticChalk.muted(`⏱️ Time: ${queryDuration}ms`));
|
|
195
|
+
}
|
|
196
|
+
console.log();
|
|
197
|
+
return {
|
|
198
|
+
success: result.success,
|
|
199
|
+
message: result.message,
|
|
200
|
+
metadata: {
|
|
201
|
+
documentsScanned,
|
|
202
|
+
documentsRegistered
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
console.error(semanticChalk.error(`❌ Document query failed: ${error.message}`));
|
|
208
|
+
if (error.stack) {
|
|
209
|
+
console.error(semanticChalk.muted(error.stack));
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
success: false,
|
|
213
|
+
message: `Document query failed: ${error.message}`
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=DocumentMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentMode.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/modes/DocumentMode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode Interface - 交互模式接口
|
|
3
|
+
*
|
|
4
|
+
* 定义了不同交互模式(Agent、Chat等)的统一接口
|
|
5
|
+
*/
|
|
6
|
+
import type { Message } from '../ui/App.js';
|
|
7
|
+
/**
|
|
8
|
+
* 模式处理结果
|
|
9
|
+
*/
|
|
10
|
+
export interface ModeResult {
|
|
11
|
+
/** 是否成功处理 */
|
|
12
|
+
success: boolean;
|
|
13
|
+
/** 错误信息(如果有) */
|
|
14
|
+
error?: string;
|
|
15
|
+
/** 输出消息(如果有) */
|
|
16
|
+
message?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 模式上下文
|
|
20
|
+
* 包含模式执行所需的依赖和回调
|
|
21
|
+
*/
|
|
22
|
+
export interface ModeContext {
|
|
23
|
+
/** 添加消息到历史 */
|
|
24
|
+
addMessage: (message: Message) => void;
|
|
25
|
+
/** 设置待处理消息(用于流式输出) */
|
|
26
|
+
setPendingMessage: (message: Message | null) => void;
|
|
27
|
+
/** 设置编译状态 */
|
|
28
|
+
setIsCompiling: (compiling: boolean) => void;
|
|
29
|
+
/** 清空消息历史 */
|
|
30
|
+
clearMessages: () => void;
|
|
31
|
+
/** 日志记录器 */
|
|
32
|
+
logger: {
|
|
33
|
+
info: (message: string) => void;
|
|
34
|
+
warn: (message: string) => void;
|
|
35
|
+
error: (message: string, error?: any) => void;
|
|
36
|
+
};
|
|
37
|
+
/** 项目路径 */
|
|
38
|
+
projectPath?: string;
|
|
39
|
+
/** LLM 服务配置 */
|
|
40
|
+
llmConfig?: any;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 交互模式接口
|
|
44
|
+
*/
|
|
45
|
+
export interface Mode {
|
|
46
|
+
/** 模式名称 */
|
|
47
|
+
readonly name: string;
|
|
48
|
+
/** 模式显示名称 */
|
|
49
|
+
readonly displayName: string;
|
|
50
|
+
/** 模式描述 */
|
|
51
|
+
readonly description: string;
|
|
52
|
+
/** 模式图标/emoji */
|
|
53
|
+
readonly icon: string;
|
|
54
|
+
/** 初始化模式 */
|
|
55
|
+
initialize(context: ModeContext): Promise<void>;
|
|
56
|
+
/** 处理用户输入 */
|
|
57
|
+
handleInput(input: string, context: ModeContext): Promise<ModeResult>;
|
|
58
|
+
/** 清理模式资源 */
|
|
59
|
+
cleanup(): Promise<void>;
|
|
60
|
+
/** 获取模式状态信息 */
|
|
61
|
+
getStatus(): string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 模式工厂接口
|
|
65
|
+
*/
|
|
66
|
+
export interface ModeFactory {
|
|
67
|
+
/** 创建模式实例 */
|
|
68
|
+
createMode(): Mode;
|
|
69
|
+
/** 模式类型标识 */
|
|
70
|
+
readonly type: string;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=Mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mode.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/modes/Mode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,cAAc;IACd,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,sBAAsB;IACtB,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IAErD,aAAa;IACb,cAAc,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAE7C,aAAa;IACb,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,YAAY;IACZ,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KAC/C,CAAC;IAEF,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,aAAa;IACb,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,WAAW;IACX,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,iBAAiB;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY;IACZ,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD,aAAa;IACb,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEtE,aAAa;IACb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,eAAe;IACf,SAAS,IAAI,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa;IACb,UAAU,IAAI,IAAI,CAAC;IAEnB,aAAa;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mode.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/modes/Mode.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode Manager - 模式管理器
|
|
3
|
+
*
|
|
4
|
+
* 负责管理不同的交互模式,包括注册、切换、状态管理等
|
|
5
|
+
*/
|
|
6
|
+
import type { Mode, ModeFactory, ModeContext } from './Mode.js';
|
|
7
|
+
/**
|
|
8
|
+
* 模式切换事件
|
|
9
|
+
*/
|
|
10
|
+
export interface ModeChangeEvent {
|
|
11
|
+
/** 之前的模式 */
|
|
12
|
+
previousMode: string | null;
|
|
13
|
+
/** 当前模式 */
|
|
14
|
+
currentMode: string;
|
|
15
|
+
/** 切换时间戳 */
|
|
16
|
+
timestamp: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 模式管理器
|
|
20
|
+
*/
|
|
21
|
+
export declare class ModeManager {
|
|
22
|
+
private factories;
|
|
23
|
+
private currentMode;
|
|
24
|
+
private currentModeType;
|
|
25
|
+
private context;
|
|
26
|
+
private changeListeners;
|
|
27
|
+
/**
|
|
28
|
+
* 注册模式工厂
|
|
29
|
+
*/
|
|
30
|
+
registerMode(factory: ModeFactory): void;
|
|
31
|
+
/**
|
|
32
|
+
* 获取所有已注册的模式类型
|
|
33
|
+
*/
|
|
34
|
+
getAvailableModes(): string[];
|
|
35
|
+
/**
|
|
36
|
+
* 获取模式信息
|
|
37
|
+
*/
|
|
38
|
+
getModeInfo(type: string): {
|
|
39
|
+
name: string;
|
|
40
|
+
displayName: string;
|
|
41
|
+
description: string;
|
|
42
|
+
icon: string;
|
|
43
|
+
} | null;
|
|
44
|
+
/**
|
|
45
|
+
* 切换到指定模式
|
|
46
|
+
*/
|
|
47
|
+
switchToMode(type: string, context: ModeContext): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* 处理用户输入
|
|
50
|
+
*/
|
|
51
|
+
handleInput(input: string): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* 获取当前模式
|
|
54
|
+
*/
|
|
55
|
+
getCurrentMode(): {
|
|
56
|
+
type: string;
|
|
57
|
+
mode: Mode;
|
|
58
|
+
} | null;
|
|
59
|
+
/**
|
|
60
|
+
* 获取当前模式状态
|
|
61
|
+
*/
|
|
62
|
+
getCurrentModeStatus(): string;
|
|
63
|
+
/**
|
|
64
|
+
* 添加模式切换监听器
|
|
65
|
+
*/
|
|
66
|
+
onModeChange(listener: (event: ModeChangeEvent) => void): void;
|
|
67
|
+
/**
|
|
68
|
+
* 移除模式切换监听器
|
|
69
|
+
*/
|
|
70
|
+
removeModeChangeListener(listener: (event: ModeChangeEvent) => void): void;
|
|
71
|
+
/**
|
|
72
|
+
* 清理所有资源
|
|
73
|
+
*/
|
|
74
|
+
cleanup(): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=ModeManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModeManager.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/modes/ModeManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,eAAe,CAA+C;IAEtE;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIxC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAc1G;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAoDxE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAelD;;OAEG;IACH,cAAc,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI;IAUrD;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAO9B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAI9D;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAO1E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAS/B"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode Manager - 模式管理器
|
|
3
|
+
*
|
|
4
|
+
* 负责管理不同的交互模式,包括注册、切换、状态管理等
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 模式管理器
|
|
8
|
+
*/
|
|
9
|
+
export class ModeManager {
|
|
10
|
+
factories = new Map();
|
|
11
|
+
currentMode = null;
|
|
12
|
+
currentModeType = null;
|
|
13
|
+
context = null;
|
|
14
|
+
changeListeners = [];
|
|
15
|
+
/**
|
|
16
|
+
* 注册模式工厂
|
|
17
|
+
*/
|
|
18
|
+
registerMode(factory) {
|
|
19
|
+
this.factories.set(factory.type, factory);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 获取所有已注册的模式类型
|
|
23
|
+
*/
|
|
24
|
+
getAvailableModes() {
|
|
25
|
+
return Array.from(this.factories.keys());
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 获取模式信息
|
|
29
|
+
*/
|
|
30
|
+
getModeInfo(type) {
|
|
31
|
+
const factory = this.factories.get(type);
|
|
32
|
+
if (!factory)
|
|
33
|
+
return null;
|
|
34
|
+
// 创建临时实例获取信息
|
|
35
|
+
const tempMode = factory.createMode();
|
|
36
|
+
return {
|
|
37
|
+
name: tempMode.name,
|
|
38
|
+
displayName: tempMode.displayName,
|
|
39
|
+
description: tempMode.description,
|
|
40
|
+
icon: tempMode.icon
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 切换到指定模式
|
|
45
|
+
*/
|
|
46
|
+
async switchToMode(type, context) {
|
|
47
|
+
const factory = this.factories.get(type);
|
|
48
|
+
if (!factory) {
|
|
49
|
+
context.logger.error(`[ModeManager] Unknown mode type: ${type}`);
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const previousModeType = this.currentModeType;
|
|
53
|
+
try {
|
|
54
|
+
// 清理当前模式
|
|
55
|
+
if (this.currentMode) {
|
|
56
|
+
context.logger.info(`[ModeManager] Cleaning up mode: ${this.currentModeType}`);
|
|
57
|
+
await this.currentMode.cleanup();
|
|
58
|
+
}
|
|
59
|
+
// 创建新模式
|
|
60
|
+
context.logger.info(`[ModeManager] Switching to mode: ${type}`);
|
|
61
|
+
const newMode = factory.createMode();
|
|
62
|
+
// 初始化新模式
|
|
63
|
+
await newMode.initialize(context);
|
|
64
|
+
// 更新状态
|
|
65
|
+
this.currentMode = newMode;
|
|
66
|
+
this.currentModeType = type;
|
|
67
|
+
this.context = context;
|
|
68
|
+
// 触发切换事件
|
|
69
|
+
const event = {
|
|
70
|
+
previousMode: previousModeType,
|
|
71
|
+
currentMode: type,
|
|
72
|
+
timestamp: Date.now()
|
|
73
|
+
};
|
|
74
|
+
this.changeListeners.forEach(listener => {
|
|
75
|
+
try {
|
|
76
|
+
listener(event);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
context.logger.error('[ModeManager] Error in mode change listener:', error);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
context.logger.info(`[ModeManager] Successfully switched to mode: ${type}`);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
context.logger.error(`[ModeManager] Failed to switch to mode ${type}:`, error);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 处理用户输入
|
|
92
|
+
*/
|
|
93
|
+
async handleInput(input) {
|
|
94
|
+
if (!this.currentMode || !this.context) {
|
|
95
|
+
this.context?.logger.error('[ModeManager] No active mode to handle input');
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const result = await this.currentMode.handleInput(input, this.context);
|
|
100
|
+
return result.success;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
this.context.logger.error('[ModeManager] Error handling input:', error);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 获取当前模式
|
|
109
|
+
*/
|
|
110
|
+
getCurrentMode() {
|
|
111
|
+
if (!this.currentMode || !this.currentModeType) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
type: this.currentModeType,
|
|
116
|
+
mode: this.currentMode
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 获取当前模式状态
|
|
121
|
+
*/
|
|
122
|
+
getCurrentModeStatus() {
|
|
123
|
+
if (!this.currentMode) {
|
|
124
|
+
return 'No active mode';
|
|
125
|
+
}
|
|
126
|
+
return this.currentMode.getStatus();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 添加模式切换监听器
|
|
130
|
+
*/
|
|
131
|
+
onModeChange(listener) {
|
|
132
|
+
this.changeListeners.push(listener);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 移除模式切换监听器
|
|
136
|
+
*/
|
|
137
|
+
removeModeChangeListener(listener) {
|
|
138
|
+
const index = this.changeListeners.indexOf(listener);
|
|
139
|
+
if (index >= 0) {
|
|
140
|
+
this.changeListeners.splice(index, 1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 清理所有资源
|
|
145
|
+
*/
|
|
146
|
+
async cleanup() {
|
|
147
|
+
if (this.currentMode) {
|
|
148
|
+
await this.currentMode.cleanup();
|
|
149
|
+
this.currentMode = null;
|
|
150
|
+
this.currentModeType = null;
|
|
151
|
+
}
|
|
152
|
+
this.context = null;
|
|
153
|
+
this.changeListeners = [];
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=ModeManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModeManager.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/modes/ModeManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review Mode - Automated code review with linting and AI analysis
|
|
3
|
+
*
|
|
4
|
+
* Optimized Version: Uses Data-Driven approach instead of Tool-Driven
|
|
5
|
+
* - Pre-collects all data (code content, lint results, diff context)
|
|
6
|
+
* - Single LLM call with structured prompt
|
|
7
|
+
* - ~87% token savings compared to tool-driven approach
|
|
8
|
+
*/
|
|
9
|
+
export interface ReviewOptions {
|
|
10
|
+
projectPath: string;
|
|
11
|
+
diff?: string;
|
|
12
|
+
commitHash?: string;
|
|
13
|
+
baseBranch?: string;
|
|
14
|
+
compareWith?: string;
|
|
15
|
+
reviewType?: 'COMPREHENSIVE' | 'SECURITY' | 'PERFORMANCE' | 'STYLE';
|
|
16
|
+
skipLint?: boolean;
|
|
17
|
+
autoFix?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ReviewFinding {
|
|
20
|
+
severity: string;
|
|
21
|
+
category: string;
|
|
22
|
+
description: string;
|
|
23
|
+
filePath?: string;
|
|
24
|
+
lineNumber?: number;
|
|
25
|
+
suggestion?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ReviewResult {
|
|
28
|
+
success: boolean;
|
|
29
|
+
message: string;
|
|
30
|
+
findings: ReviewFinding[];
|
|
31
|
+
lintResults?: Array<{
|
|
32
|
+
filePath: string;
|
|
33
|
+
issues: Array<{
|
|
34
|
+
line: number;
|
|
35
|
+
column: number;
|
|
36
|
+
severity: string;
|
|
37
|
+
message: string;
|
|
38
|
+
rule?: string;
|
|
39
|
+
}>;
|
|
40
|
+
}>;
|
|
41
|
+
analysisOutput?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run code review on a project or specific changes
|
|
45
|
+
*
|
|
46
|
+
* Uses Kotlin's CodeReviewAgent with optimizations:
|
|
47
|
+
* 1. Fetch git diff and extract file paths
|
|
48
|
+
* 2. Detect linters (for display)
|
|
49
|
+
* 3. Use CodeReviewAgent with proper prompt rendering
|
|
50
|
+
*/
|
|
51
|
+
export declare function runReview(options: ReviewOptions, llmService: any, renderer?: any): Promise<ReviewResult>;
|
|
52
|
+
//# sourceMappingURL=ReviewMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewMode.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/modes/ReviewMode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,GAAG,UAAU,GAAG,aAAa,GAAG,OAAO,CAAC;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,GAAG,EACf,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC,YAAY,CAAC,CAsJvB"}
|