@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,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chinese Translations (ē®ä½äøę)
|
|
3
|
+
*/
|
|
4
|
+
export const zh = {
|
|
5
|
+
common: {
|
|
6
|
+
save: 'äæå',
|
|
7
|
+
cancel: 'åę¶',
|
|
8
|
+
back: 'čæå',
|
|
9
|
+
confirm: '甮认',
|
|
10
|
+
error: 'é误',
|
|
11
|
+
success: 'ęå',
|
|
12
|
+
loading: 'å č½½äø',
|
|
13
|
+
yes: 'ęÆ',
|
|
14
|
+
no: 'å¦',
|
|
15
|
+
continue: 'ē»§ē»',
|
|
16
|
+
exit: 'éåŗ',
|
|
17
|
+
},
|
|
18
|
+
welcome: {
|
|
19
|
+
title: 'š 欢čæä½æēØ AutoDev CLIļ¼',
|
|
20
|
+
subtitle: '让ę们é
ē½®ęØē AI 设置ćęØåÆä»„ēØååØ ~/.autodev/config.yaml äøę·»å ę“å¤é
ē½®',
|
|
21
|
+
configPrompt: 'é
ē½®ęØē LLM 樔å仄å¼å§ä½æēØ',
|
|
22
|
+
exitHint: 'ę Ctrl+C éåŗ',
|
|
23
|
+
},
|
|
24
|
+
modelConfig: {
|
|
25
|
+
title: 'š¤ é
ē½® LLM 樔å',
|
|
26
|
+
stepInfo: 'ę„éŖ¤ 1/2',
|
|
27
|
+
nextStepInfo: 'ęØå°åØäøäøę„äøäøŗę¤é
ē½®å½å',
|
|
28
|
+
selectProvider: 'éę©ęØē LLM ęä¾åļ¼',
|
|
29
|
+
enterModel: 'č¾å
„樔ååē§°',
|
|
30
|
+
defaultHint: 'é»č®¤ļ¼{{default}}',
|
|
31
|
+
enterApiKey: 'č¾å
„ęØē API Keyļ¼',
|
|
32
|
+
enterBaseUrl: 'č¾å
„čŖå®ä¹ Base URLļ¼åÆéļ¼ļ¼',
|
|
33
|
+
customBaseUrl: 'č¾å
„čŖå®ä¹ Base URL',
|
|
34
|
+
ollamaUrl: 'č¾å
„ Ollama ęå”åØ URLļ¼',
|
|
35
|
+
leaveEmpty: 'ē空使ēØé»č®¤å¼',
|
|
36
|
+
backHint: 'ę Ctrl+B čæå',
|
|
37
|
+
summary: 'é
ē½®ęč¦ļ¼',
|
|
38
|
+
nameConfig: 'š¾ äøŗé
ē½®å½å',
|
|
39
|
+
namePrompt: 'äøŗę¤é
置起äøäøŖååļ¼ä¾å¦ļ¼"å·„ä½"ć"äøŖäŗŗ"ć"gpt4"ļ¼ļ¼',
|
|
40
|
+
nameHint: 'ę Enter äæå',
|
|
41
|
+
providers: {
|
|
42
|
+
openai: 'š¹ OpenAI (GPT-4, GPT-3.5)',
|
|
43
|
+
anthropic: 'š¹ Anthropic (Claude)',
|
|
44
|
+
google: 'š¹ Google (Gemini)',
|
|
45
|
+
deepseek: 'š¹ DeepSeek',
|
|
46
|
+
ollama: 'š¹ Ollama (ę¬å°)',
|
|
47
|
+
openrouter: 'š¹ OpenRouter',
|
|
48
|
+
glm: 'š¹ ęŗč°±AI (GLM-4)',
|
|
49
|
+
qwen: 'š¹ éæééä¹åé® (Qwen)',
|
|
50
|
+
kimi: 'š¹ ęä¹ęé¢ (Kimi)',
|
|
51
|
+
customOpenAIBase: 'š¹ čŖå®ä¹ OpenAI å
¼å®¹',
|
|
52
|
+
},
|
|
53
|
+
fields: {
|
|
54
|
+
provider: 'ęä¾å',
|
|
55
|
+
model: '樔å',
|
|
56
|
+
apiKey: 'API Key',
|
|
57
|
+
baseUrl: 'Base URL',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
chat: {
|
|
61
|
+
title: 'š¤ AutoDev CLI - AI ē¼ēØå©ę',
|
|
62
|
+
emptyHint: 'š¬ č¾å
„ęØēę¶ęÆå¼å§ē¼ēØ',
|
|
63
|
+
startHint: 'š” å°čÆ /help ę @code å¼å§ä½æēØ',
|
|
64
|
+
inputPlaceholder: 'č¾å
„ęØēę¶ęÆ...ļ¼ęč¾å
„ /help ę„ēå½ä»¤ļ¼',
|
|
65
|
+
exitHint: 'ę Ctrl+C éåŗ',
|
|
66
|
+
helpHint: 'č¾å
„ /help ę„ēå½ä»¤',
|
|
67
|
+
prefixes: {
|
|
68
|
+
you: 'š¤ ęØ',
|
|
69
|
+
ai: 'š¤ AI',
|
|
70
|
+
system: 'ā¹ļø ē³»ē»',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
commands: {
|
|
74
|
+
help: {
|
|
75
|
+
description: 'ę¾ē¤ŗåø®å©äæ”ęÆ',
|
|
76
|
+
},
|
|
77
|
+
clear: {
|
|
78
|
+
description: 'ęø
空č天åå²',
|
|
79
|
+
success: 'ā č天åå²å·²ęø
空',
|
|
80
|
+
},
|
|
81
|
+
exit: {
|
|
82
|
+
description: 'éåŗåŗēØēØåŗ',
|
|
83
|
+
},
|
|
84
|
+
config: {
|
|
85
|
+
description: 'ę¾ē¤ŗé
置俔ęÆ',
|
|
86
|
+
output: 'š é
置俔ęÆļ¼\n ⢠樔åļ¼{{model}}\n ⢠č¾å
„ /help ę„ēę“å¤å½ä»¤',
|
|
87
|
+
},
|
|
88
|
+
model: {
|
|
89
|
+
description: 'åę¢ AI 樔å',
|
|
90
|
+
available: 'åÆēØęØ”åļ¼{{models}}',
|
|
91
|
+
current: 'å½åļ¼{{model}}',
|
|
92
|
+
usage: 'ēØę³ļ¼/model <樔åå>',
|
|
93
|
+
},
|
|
94
|
+
init: {
|
|
95
|
+
description: 'åå§å锹ē®ååå
ø',
|
|
96
|
+
starting: 'š å¼å§ēęååå
ø...',
|
|
97
|
+
analyzing: 'š ę£åØåę锹ē®ä»£ē ...',
|
|
98
|
+
generating: 'š¤ ę£åØä½æēØ AI ēęååå
ø...',
|
|
99
|
+
saving: 'š¾ ę£åØäæåååå
øå° prompts/domain.csv...',
|
|
100
|
+
success: 'ā
ååå
øēęęåļ¼ęä»¶å·²äæåå° prompts/domain.csv',
|
|
101
|
+
error: 'ā ååå
øēę失蓄ļ¼{{error}}',
|
|
102
|
+
noCode: 'ā ļø ęŖę¾å°åÆåęē代ē ęä»¶',
|
|
103
|
+
usage: 'ēØę³ļ¼/init [--force] - ēę锹ē®ååå
ø',
|
|
104
|
+
},
|
|
105
|
+
unknown: 'ęŖē„å½ä»¤ļ¼{{command}}ćč¾å
„ /help ę„ēåÆēØå½ä»¤ć',
|
|
106
|
+
usage: 'éč¦å½ä»¤åē§°ćēØę³ļ¼/command [åę°]',
|
|
107
|
+
executionError: 'å½ä»¤ę§č”失蓄ļ¼{{error}}',
|
|
108
|
+
},
|
|
109
|
+
messages: {
|
|
110
|
+
configSaving: 'ā³ ę£åØäæåé
ē½®...',
|
|
111
|
+
configSaved: 'ā é
置已äæåļ¼',
|
|
112
|
+
configLoadError: 'å č½½é
置失蓄ļ¼{{error}}',
|
|
113
|
+
configSaveError: 'äæåé
置失蓄ļ¼{{error}}',
|
|
114
|
+
starting: 'ę£åØåÆåØ AutoDev CLI...',
|
|
115
|
+
goodbye: 'š åč§ļ¼ē„ē¼ēØęåæ«ļ¼',
|
|
116
|
+
inputError: 'å¤ēč¾å
„ę¶åŗéļ¼{{error}}',
|
|
117
|
+
compilationError: 'DevIns ē¼čÆé误ļ¼{{error}}',
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=zh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh.js","sourceRoot":"","sources":["../../../../../src/jsMain/typescript/i18n/locales/zh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* i18n Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Defines types for internationalization support
|
|
5
|
+
*/
|
|
6
|
+
export type SupportedLanguage = 'en' | 'zh';
|
|
7
|
+
export interface TranslationKeys {
|
|
8
|
+
common: {
|
|
9
|
+
save: string;
|
|
10
|
+
cancel: string;
|
|
11
|
+
back: string;
|
|
12
|
+
confirm: string;
|
|
13
|
+
error: string;
|
|
14
|
+
success: string;
|
|
15
|
+
loading: string;
|
|
16
|
+
yes: string;
|
|
17
|
+
no: string;
|
|
18
|
+
continue: string;
|
|
19
|
+
exit: string;
|
|
20
|
+
};
|
|
21
|
+
welcome: {
|
|
22
|
+
title: string;
|
|
23
|
+
subtitle: string;
|
|
24
|
+
configPrompt: string;
|
|
25
|
+
exitHint: string;
|
|
26
|
+
};
|
|
27
|
+
modelConfig: {
|
|
28
|
+
title: string;
|
|
29
|
+
stepInfo: string;
|
|
30
|
+
nextStepInfo: string;
|
|
31
|
+
selectProvider: string;
|
|
32
|
+
enterModel: string;
|
|
33
|
+
defaultHint: string;
|
|
34
|
+
enterApiKey: string;
|
|
35
|
+
enterBaseUrl: string;
|
|
36
|
+
customBaseUrl: string;
|
|
37
|
+
ollamaUrl: string;
|
|
38
|
+
leaveEmpty: string;
|
|
39
|
+
backHint: string;
|
|
40
|
+
summary: string;
|
|
41
|
+
nameConfig: string;
|
|
42
|
+
namePrompt: string;
|
|
43
|
+
nameHint: string;
|
|
44
|
+
providers: {
|
|
45
|
+
openai: string;
|
|
46
|
+
anthropic: string;
|
|
47
|
+
google: string;
|
|
48
|
+
deepseek: string;
|
|
49
|
+
ollama: string;
|
|
50
|
+
openrouter: string;
|
|
51
|
+
glm: string;
|
|
52
|
+
qwen: string;
|
|
53
|
+
kimi: string;
|
|
54
|
+
customOpenAIBase: string;
|
|
55
|
+
};
|
|
56
|
+
fields: {
|
|
57
|
+
provider: string;
|
|
58
|
+
model: string;
|
|
59
|
+
apiKey: string;
|
|
60
|
+
baseUrl: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
chat: {
|
|
64
|
+
title: string;
|
|
65
|
+
emptyHint: string;
|
|
66
|
+
startHint: string;
|
|
67
|
+
inputPlaceholder: string;
|
|
68
|
+
exitHint: string;
|
|
69
|
+
helpHint: string;
|
|
70
|
+
prefixes: {
|
|
71
|
+
you: string;
|
|
72
|
+
ai: string;
|
|
73
|
+
system: string;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
commands: {
|
|
77
|
+
help: {
|
|
78
|
+
description: string;
|
|
79
|
+
};
|
|
80
|
+
clear: {
|
|
81
|
+
description: string;
|
|
82
|
+
success: string;
|
|
83
|
+
};
|
|
84
|
+
exit: {
|
|
85
|
+
description: string;
|
|
86
|
+
};
|
|
87
|
+
config: {
|
|
88
|
+
description: string;
|
|
89
|
+
output: string;
|
|
90
|
+
};
|
|
91
|
+
model: {
|
|
92
|
+
description: string;
|
|
93
|
+
available: string;
|
|
94
|
+
current: string;
|
|
95
|
+
usage: string;
|
|
96
|
+
};
|
|
97
|
+
init: {
|
|
98
|
+
description: string;
|
|
99
|
+
starting: string;
|
|
100
|
+
analyzing: string;
|
|
101
|
+
generating: string;
|
|
102
|
+
saving: string;
|
|
103
|
+
success: string;
|
|
104
|
+
error: string;
|
|
105
|
+
noCode: string;
|
|
106
|
+
usage: string;
|
|
107
|
+
};
|
|
108
|
+
unknown: string;
|
|
109
|
+
usage: string;
|
|
110
|
+
executionError: string;
|
|
111
|
+
};
|
|
112
|
+
messages: {
|
|
113
|
+
configSaving: string;
|
|
114
|
+
configSaved: string;
|
|
115
|
+
configLoadError: string;
|
|
116
|
+
configSaveError: string;
|
|
117
|
+
starting: string;
|
|
118
|
+
goodbye: string;
|
|
119
|
+
inputError: string;
|
|
120
|
+
compilationError: string;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export type TranslationFunction = (key: string, params?: Record<string, any>) => string;
|
|
124
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/i18n/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/i18n/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Xiuper CLI - Main entry point
|
|
4
|
+
*
|
|
5
|
+
* This file serves as the entry point for the @xiuper/cli application.
|
|
6
|
+
* It supports both interactive TUI mode and non-interactive coding agent mode.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jsMain/typescript/index.tsx"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Xiuper CLI - Main entry point
|
|
4
|
+
*
|
|
5
|
+
* This file serves as the entry point for the @xiuper/cli application.
|
|
6
|
+
* It supports both interactive TUI mode and non-interactive coding agent mode.
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { render } from 'ink';
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
import { App } from './ui/App.js';
|
|
12
|
+
import { ConfigManager } from './config/ConfigManager.js';
|
|
13
|
+
import { CliRenderer } from './agents/render/CliRenderer.js';
|
|
14
|
+
import { ServerAgentClient } from './agents/ServerAgentClient.js';
|
|
15
|
+
import { ServerRenderer } from './agents/render/ServerRenderer.js';
|
|
16
|
+
import { runReview } from './modes/ReviewMode.js';
|
|
17
|
+
import mppCore from '@xiuper/mpp-core';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
import * as fs from 'fs';
|
|
20
|
+
import * as os from 'os';
|
|
21
|
+
const { cc: KotlinCC } = mppCore;
|
|
22
|
+
/**
|
|
23
|
+
* Save chat history to log file
|
|
24
|
+
*/
|
|
25
|
+
async function saveChatHistoryToLog(conversationHistory) {
|
|
26
|
+
try {
|
|
27
|
+
// Create log directory if it doesn't exist
|
|
28
|
+
const logDir = path.join(os.homedir(), '.xiuper', 'logs');
|
|
29
|
+
if (!fs.existsSync(logDir)) {
|
|
30
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
// Generate timestamp for filename
|
|
33
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
34
|
+
const logFilePath = path.join(logDir, `chat-history-${timestamp}.json`);
|
|
35
|
+
// Format conversation history
|
|
36
|
+
const formattedHistory = {
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
messages: conversationHistory.map((msg) => ({
|
|
39
|
+
role: msg.role,
|
|
40
|
+
content: msg.content
|
|
41
|
+
}))
|
|
42
|
+
};
|
|
43
|
+
// Write to file
|
|
44
|
+
fs.writeFileSync(logFilePath, JSON.stringify(formattedHistory, null, 2), 'utf-8');
|
|
45
|
+
console.log(`š¾ Chat history saved to: ${logFilePath}`);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error('Failed to save chat history:', error);
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Run in coding agent mode
|
|
54
|
+
*/
|
|
55
|
+
async function runCodingAgent(projectPath, task, quiet = false) {
|
|
56
|
+
try {
|
|
57
|
+
// Resolve project path
|
|
58
|
+
const resolvedPath = path.resolve(projectPath);
|
|
59
|
+
// Check if project path exists
|
|
60
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
61
|
+
console.error(`ā Project path does not exist: ${resolvedPath}`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
// Load configuration
|
|
65
|
+
const config = await ConfigManager.load();
|
|
66
|
+
const activeConfig = config.getActiveConfig();
|
|
67
|
+
if (!activeConfig) {
|
|
68
|
+
console.error('ā No active LLM configuration found.');
|
|
69
|
+
console.error('Please run the interactive mode first to configure your LLM provider.');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
// Load tool configuration (includes MCP tool settings)
|
|
73
|
+
const toolConfig = await KotlinCC.unitmesh.agent.config.JsToolConfigManager.loadToolConfig();
|
|
74
|
+
// Debug: Log tool config details
|
|
75
|
+
if (!quiet) {
|
|
76
|
+
console.log('š Debug: Tool config loaded');
|
|
77
|
+
console.log(' Built-in tools: Always enabled (all)');
|
|
78
|
+
console.log(' Enabled MCP tools:', toolConfig.enabledMcpTools.length);
|
|
79
|
+
console.log(' MCP servers in tool config:', Object.keys(toolConfig.mcpServers || {}).length);
|
|
80
|
+
}
|
|
81
|
+
// Load MCP servers configuration from main config
|
|
82
|
+
const mcpServers = config.getMcpServers();
|
|
83
|
+
if (!quiet) {
|
|
84
|
+
console.log(' MCP servers in main config:', Object.keys(mcpServers).length);
|
|
85
|
+
}
|
|
86
|
+
// Merge MCP servers from both sources (tool config takes precedence)
|
|
87
|
+
const allMcpServers = { ...mcpServers, ...toolConfig.mcpServers };
|
|
88
|
+
const enabledMcpServers = Object.fromEntries(Object.entries(allMcpServers).filter(([_, server]) => !server.disabled));
|
|
89
|
+
if (!quiet) {
|
|
90
|
+
console.log(' Total MCP servers after merge:', Object.keys(allMcpServers).length);
|
|
91
|
+
console.log(' Enabled MCP servers:', Object.keys(enabledMcpServers).length);
|
|
92
|
+
}
|
|
93
|
+
if (!quiet) {
|
|
94
|
+
console.log(`\nš Xiuper Coding Agent`);
|
|
95
|
+
console.log(`š¦ Provider: ${activeConfig.provider}`);
|
|
96
|
+
console.log(`š¤ Model: ${activeConfig.model}`);
|
|
97
|
+
console.log(`š§ Built-in tools: Always enabled (all)`);
|
|
98
|
+
console.log(`š Enabled MCP tools: ${toolConfig.enabledMcpTools.length}`);
|
|
99
|
+
if (Object.keys(enabledMcpServers).length > 0) {
|
|
100
|
+
console.log(`š MCP Servers: ${Object.keys(enabledMcpServers).join(', ')}`);
|
|
101
|
+
}
|
|
102
|
+
console.log();
|
|
103
|
+
}
|
|
104
|
+
// Create Kotlin LLM service first
|
|
105
|
+
const llmService = KotlinCC.unitmesh.llm.JsKoogLLMService.Companion.create(new KotlinCC.unitmesh.llm.JsModelConfig(activeConfig.provider, activeConfig.model, activeConfig.apiKey || '', activeConfig.temperature || 0.7, activeConfig.maxTokens || 8192, activeConfig.baseUrl || ''));
|
|
106
|
+
// Enhance the task prompt automatically in CLI mode
|
|
107
|
+
let enhancedTask = task;
|
|
108
|
+
// Temporarily disable prompt enhancement due to cross-platform issues
|
|
109
|
+
// TODO: Re-enable after fixing Kotlin/JS interface type handling
|
|
110
|
+
if (!quiet) {
|
|
111
|
+
console.log('š Using original task prompt (enhancement temporarily disabled)');
|
|
112
|
+
}
|
|
113
|
+
// Create CLI renderer
|
|
114
|
+
const renderer = new CliRenderer();
|
|
115
|
+
// Create and run Kotlin CodingAgent with custom renderer, MCP servers, and tool config
|
|
116
|
+
const agent = new KotlinCC.unitmesh.agent.JsCodingAgent(resolvedPath, llmService, 100, renderer, // custom renderer
|
|
117
|
+
Object.keys(enabledMcpServers).length > 0 ? enabledMcpServers : null, // MCP servers
|
|
118
|
+
toolConfig // tool configuration
|
|
119
|
+
);
|
|
120
|
+
// Create task object with enhanced task
|
|
121
|
+
const taskObj = new KotlinCC.unitmesh.agent.JsAgentTask(enhancedTask, resolvedPath);
|
|
122
|
+
const result = await agent.executeTask(taskObj);
|
|
123
|
+
if (!quiet) {
|
|
124
|
+
console.log(result.success ? 'ā
Task completed successfully' : 'ā Task failed');
|
|
125
|
+
if (result.message) {
|
|
126
|
+
console.log(result.message);
|
|
127
|
+
}
|
|
128
|
+
// Save conversation history to log file
|
|
129
|
+
try {
|
|
130
|
+
const conversationHistory = agent.getConversationHistory();
|
|
131
|
+
await saveChatHistoryToLog(conversationHistory);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error('ā ļø Failed to save chat history:', error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
process.exit(result.success ? 0 : 1);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.error('ā Fatal error:', error);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Run in server mode - connect to remote mpp-server
|
|
146
|
+
*/
|
|
147
|
+
async function runServerAgent(serverUrl, projectId, task, quiet = false, useServerConfig = false) {
|
|
148
|
+
try {
|
|
149
|
+
const client = new ServerAgentClient(serverUrl);
|
|
150
|
+
// Health check
|
|
151
|
+
if (!quiet) {
|
|
152
|
+
console.log(`š Connecting to server: ${serverUrl}`);
|
|
153
|
+
try {
|
|
154
|
+
const health = await client.healthCheck();
|
|
155
|
+
console.log(`ā
Server is ${health.status}`);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error(`ā Server health check failed: ${error}`);
|
|
159
|
+
console.error('Please make sure mpp-server is running.');
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Determine LLM config source
|
|
164
|
+
let llmConfig = undefined;
|
|
165
|
+
if (!useServerConfig) {
|
|
166
|
+
// Load configuration from local ~/.autodev/config.yaml
|
|
167
|
+
const config = await ConfigManager.load();
|
|
168
|
+
const activeConfig = config.getActiveConfig();
|
|
169
|
+
if (!activeConfig) {
|
|
170
|
+
console.error('ā No active LLM configuration found.');
|
|
171
|
+
console.error('Please run the interactive mode first to configure your LLM provider, or use --use-server-config flag.');
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
llmConfig = {
|
|
175
|
+
provider: activeConfig.provider,
|
|
176
|
+
modelName: activeConfig.model,
|
|
177
|
+
apiKey: activeConfig.apiKey || '',
|
|
178
|
+
baseUrl: activeConfig.baseUrl || ''
|
|
179
|
+
};
|
|
180
|
+
if (!quiet) {
|
|
181
|
+
console.log(`\nš AutoDev Remote Coding Agent`);
|
|
182
|
+
console.log(`š Server: ${serverUrl}`);
|
|
183
|
+
console.log(`š¦ Project: ${projectId}`);
|
|
184
|
+
console.log(`š¦ Provider: ${activeConfig.provider} (from client)`);
|
|
185
|
+
console.log(`š¤ Model: ${activeConfig.model}`);
|
|
186
|
+
console.log();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
if (!quiet) {
|
|
191
|
+
console.log(`\nš AutoDev Remote Coding Agent`);
|
|
192
|
+
console.log(`š Server: ${serverUrl}`);
|
|
193
|
+
console.log(`š¦ Project: ${projectId}`);
|
|
194
|
+
console.log(`š¦ Using server's LLM configuration`);
|
|
195
|
+
console.log();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Create renderer
|
|
199
|
+
const renderer = new ServerRenderer();
|
|
200
|
+
// Smart detection: if projectId looks like a URL, use it as gitUrl
|
|
201
|
+
const isGitUrl = projectId.startsWith('http://') ||
|
|
202
|
+
projectId.startsWith('https://') ||
|
|
203
|
+
projectId.startsWith('git@');
|
|
204
|
+
const requestParams = isGitUrl ? {
|
|
205
|
+
projectId: projectId.split('/').pop() || 'temp-project', // Use repo name as project ID
|
|
206
|
+
task,
|
|
207
|
+
llmConfig,
|
|
208
|
+
gitUrl: projectId // Pass the URL as gitUrl for cloning
|
|
209
|
+
} : {
|
|
210
|
+
projectId,
|
|
211
|
+
task,
|
|
212
|
+
llmConfig
|
|
213
|
+
};
|
|
214
|
+
// Execute with streaming
|
|
215
|
+
try {
|
|
216
|
+
for await (const event of client.executeStream(requestParams)) {
|
|
217
|
+
renderer.renderEvent(event);
|
|
218
|
+
// Check if complete
|
|
219
|
+
if (event.type === 'complete') {
|
|
220
|
+
process.exit(event.success ? 0 : 1);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.error(`ā Streaming error: ${error}`);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.error('ā Fatal error:', error);
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Run code review mode
|
|
236
|
+
*/
|
|
237
|
+
async function runCodeReview(projectPath, options) {
|
|
238
|
+
try {
|
|
239
|
+
// Resolve project path
|
|
240
|
+
const resolvedPath = path.resolve(projectPath);
|
|
241
|
+
// Check if project path exists
|
|
242
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
243
|
+
console.error(`ā Project path does not exist: ${resolvedPath}`);
|
|
244
|
+
process.exit(1);
|
|
245
|
+
}
|
|
246
|
+
// Load configuration
|
|
247
|
+
const config = await ConfigManager.load();
|
|
248
|
+
const activeConfig = config.getActiveConfig();
|
|
249
|
+
if (!activeConfig) {
|
|
250
|
+
console.error('ā No active LLM configuration found.');
|
|
251
|
+
console.error('Please run the interactive mode first to configure your LLM provider.');
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
if (!options.quiet) {
|
|
255
|
+
console.log(`\nš AutoDev Code Review`);
|
|
256
|
+
console.log(`š¦ Provider: ${activeConfig.provider}`);
|
|
257
|
+
console.log(`š¤ Model: ${activeConfig.model}`);
|
|
258
|
+
console.log();
|
|
259
|
+
}
|
|
260
|
+
// Create Kotlin LLM service
|
|
261
|
+
const llmService = KotlinCC.unitmesh.llm.JsKoogLLMService.Companion.create(new KotlinCC.unitmesh.llm.JsModelConfig(activeConfig.provider, activeConfig.model, activeConfig.apiKey || '', activeConfig.temperature || 0.7, activeConfig.maxTokens || 8192, activeConfig.baseUrl || ''));
|
|
262
|
+
// Create CLI renderer
|
|
263
|
+
const renderer = new CliRenderer();
|
|
264
|
+
// Run review
|
|
265
|
+
const result = await runReview({
|
|
266
|
+
projectPath: resolvedPath,
|
|
267
|
+
commitHash: options.commit,
|
|
268
|
+
baseBranch: options.base,
|
|
269
|
+
compareWith: options.compare,
|
|
270
|
+
reviewType: options.type,
|
|
271
|
+
skipLint: options.skipLint
|
|
272
|
+
}, llmService, renderer);
|
|
273
|
+
process.exit(result.success ? 0 : 1);
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
console.error('ā Fatal error:', error);
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Run in interactive TUI mode
|
|
282
|
+
*/
|
|
283
|
+
async function runInteractive() {
|
|
284
|
+
try {
|
|
285
|
+
// Render the Ink application
|
|
286
|
+
const { waitUntilExit } = render(React.createElement(App, null));
|
|
287
|
+
// Wait for the app to exit
|
|
288
|
+
await waitUntilExit();
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
console.error('Fatal error:', error);
|
|
292
|
+
process.exit(1);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Main entry point
|
|
296
|
+
async function main() {
|
|
297
|
+
const program = new Command();
|
|
298
|
+
program
|
|
299
|
+
.name('autodev')
|
|
300
|
+
.description('AutoDev CLI - AI-powered development assistant')
|
|
301
|
+
.version('0.1.3');
|
|
302
|
+
// Interactive mode (default)
|
|
303
|
+
program
|
|
304
|
+
.command('chat', { isDefault: true })
|
|
305
|
+
.description('Start interactive chat mode (default)')
|
|
306
|
+
.action(runInteractive);
|
|
307
|
+
// Coding agent mode (local)
|
|
308
|
+
program
|
|
309
|
+
.command('code')
|
|
310
|
+
.description('Run autonomous coding agent to complete a task (local)')
|
|
311
|
+
.requiredOption('-p, --path <path>', 'Project path (e.g., /path/to/project or . for current directory)')
|
|
312
|
+
.requiredOption('-t, --task <task>', 'Development task or requirement to complete')
|
|
313
|
+
.option('-m, --max-iterations <number>', 'Maximum iterations', '20')
|
|
314
|
+
.option('-q, --quiet', 'Quiet mode - only show important messages', false)
|
|
315
|
+
.option('-v, --verbose', 'Verbose mode - show all debug information', false)
|
|
316
|
+
.action(async (options) => {
|
|
317
|
+
const projectPath = options.path === '.' ? process.cwd() : options.path;
|
|
318
|
+
await runCodingAgent(projectPath, options.task, options.quiet && !options.verbose);
|
|
319
|
+
});
|
|
320
|
+
// Server mode (remote)
|
|
321
|
+
program
|
|
322
|
+
.command('server')
|
|
323
|
+
.description('Connect to remote mpp-server and execute coding agent task')
|
|
324
|
+
.requiredOption('-p, --project-id <projectId>', 'Project ID on the server (e.g., autocrud)')
|
|
325
|
+
.requiredOption('-t, --task <task>', 'Development task or requirement to complete')
|
|
326
|
+
.option('-s, --server-url <url>', 'Server URL', 'http://localhost:8080')
|
|
327
|
+
.option('-q, --quiet', 'Quiet mode - only show important messages', false)
|
|
328
|
+
.option('--use-server-config', 'Use server\'s LLM configuration instead of client\'s', false)
|
|
329
|
+
.action(async (options) => {
|
|
330
|
+
await runServerAgent(options.serverUrl, options.projectId, options.task, options.quiet, options.useServerConfig);
|
|
331
|
+
});
|
|
332
|
+
// Code review mode
|
|
333
|
+
program
|
|
334
|
+
.command('review')
|
|
335
|
+
.description('Run automated code review with linting and AI analysis')
|
|
336
|
+
.requiredOption('-p, --path <path>', 'Project path (e.g., /path/to/project or . for current directory)')
|
|
337
|
+
.option('-c, --commit <hash>', 'Review specific commit')
|
|
338
|
+
.option('-b, --base <branch>', 'Base branch for comparison (e.g., main)')
|
|
339
|
+
.option('--compare <branch>', 'Branch to compare with base')
|
|
340
|
+
.option('-t, --type <type>', 'Review type: COMPREHENSIVE, SECURITY, PERFORMANCE, STYLE', 'COMPREHENSIVE')
|
|
341
|
+
.option('--skip-lint', 'Skip linting phase', false)
|
|
342
|
+
.option('-q, --quiet', 'Quiet mode - only show important messages', false)
|
|
343
|
+
.action(async (options) => {
|
|
344
|
+
const projectPath = options.path === '.' ? process.cwd() : options.path;
|
|
345
|
+
await runCodeReview(projectPath, options);
|
|
346
|
+
});
|
|
347
|
+
// Document query mode
|
|
348
|
+
program
|
|
349
|
+
.command('document')
|
|
350
|
+
.description('Query documents using AI and DocQL')
|
|
351
|
+
.requiredOption('-p, --path <path>', 'Project path (e.g., /path/to/project or . for current directory)')
|
|
352
|
+
.requiredOption('-q, --query <query>', 'Question or query about the document')
|
|
353
|
+
.option('-d, --doc <docPath>', 'Specific document path to query (otherwise scans all docs in project)')
|
|
354
|
+
.action(async (options) => {
|
|
355
|
+
const { runDocument } = await import('./modes/DocumentMode.js');
|
|
356
|
+
const projectPath = options.path === '.' ? process.cwd() : options.path;
|
|
357
|
+
// Initialize LLM service (similar to other modes)
|
|
358
|
+
const config = await ConfigManager.load();
|
|
359
|
+
const activeConfig = config.getActiveConfig();
|
|
360
|
+
if (!activeConfig) {
|
|
361
|
+
console.error('ā No active LLM configuration found.');
|
|
362
|
+
process.exit(1);
|
|
363
|
+
}
|
|
364
|
+
const llmService = KotlinCC.unitmesh.llm.JsKoogLLMService.Companion.create(new KotlinCC.unitmesh.llm.JsModelConfig(activeConfig.provider, activeConfig.model, activeConfig.apiKey || '', activeConfig.temperature || 0.7, activeConfig.maxTokens || 8192, activeConfig.baseUrl || ''));
|
|
365
|
+
const renderer = new CliRenderer();
|
|
366
|
+
await runDocument({
|
|
367
|
+
projectPath,
|
|
368
|
+
query: options.query,
|
|
369
|
+
documentPath: options.doc
|
|
370
|
+
}, llmService, renderer);
|
|
371
|
+
});
|
|
372
|
+
// Parse arguments
|
|
373
|
+
await program.parseAsync(process.argv);
|
|
374
|
+
}
|
|
375
|
+
// Run the application
|
|
376
|
+
main().catch((error) => {
|
|
377
|
+
console.error('Unhandled error:', error);
|
|
378
|
+
process.exit(1);
|
|
379
|
+
});
|
|
380
|
+
//# sourceMappingURL=index.js.map
|