@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.
Files changed (218) hide show
  1. package/README.md +180 -0
  2. package/dist/jsMain/typescript/agents/LLMService.d.ts +40 -0
  3. package/dist/jsMain/typescript/agents/LLMService.d.ts.map +1 -0
  4. package/dist/jsMain/typescript/agents/LLMService.js +156 -0
  5. package/dist/jsMain/typescript/agents/LLMService.js.map +1 -0
  6. package/dist/jsMain/typescript/agents/ServerAgentClient.d.ts +103 -0
  7. package/dist/jsMain/typescript/agents/ServerAgentClient.d.ts.map +1 -0
  8. package/dist/jsMain/typescript/agents/ServerAgentClient.js +142 -0
  9. package/dist/jsMain/typescript/agents/ServerAgentClient.js.map +1 -0
  10. package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts +87 -0
  11. package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts.map +1 -0
  12. package/dist/jsMain/typescript/agents/render/BaseRenderer.js +128 -0
  13. package/dist/jsMain/typescript/agents/render/BaseRenderer.js.map +1 -0
  14. package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts +51 -0
  15. package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts.map +1 -0
  16. package/dist/jsMain/typescript/agents/render/CliRenderer.js +564 -0
  17. package/dist/jsMain/typescript/agents/render/CliRenderer.js.map +1 -0
  18. package/dist/jsMain/typescript/agents/render/ServerRenderer.d.ts +55 -0
  19. package/dist/jsMain/typescript/agents/render/ServerRenderer.d.ts.map +1 -0
  20. package/dist/jsMain/typescript/agents/render/ServerRenderer.js +503 -0
  21. package/dist/jsMain/typescript/agents/render/ServerRenderer.js.map +1 -0
  22. package/dist/jsMain/typescript/agents/render/TuiRenderer.d.ts +104 -0
  23. package/dist/jsMain/typescript/agents/render/TuiRenderer.d.ts.map +1 -0
  24. package/dist/jsMain/typescript/agents/render/TuiRenderer.js +279 -0
  25. package/dist/jsMain/typescript/agents/render/TuiRenderer.js.map +1 -0
  26. package/dist/jsMain/typescript/config/ConfigManager.d.ts +146 -0
  27. package/dist/jsMain/typescript/config/ConfigManager.d.ts.map +1 -0
  28. package/dist/jsMain/typescript/config/ConfigManager.js +257 -0
  29. package/dist/jsMain/typescript/config/ConfigManager.js.map +1 -0
  30. package/dist/jsMain/typescript/constants/asciiArt.d.ts +9 -0
  31. package/dist/jsMain/typescript/constants/asciiArt.d.ts.map +1 -0
  32. package/dist/jsMain/typescript/constants/asciiArt.js +47 -0
  33. package/dist/jsMain/typescript/constants/asciiArt.js.map +1 -0
  34. package/dist/jsMain/typescript/design-system/colors.d.ts +492 -0
  35. package/dist/jsMain/typescript/design-system/colors.d.ts.map +1 -0
  36. package/dist/jsMain/typescript/design-system/colors.js +333 -0
  37. package/dist/jsMain/typescript/design-system/colors.js.map +1 -0
  38. package/dist/jsMain/typescript/design-system/index.d.ts +31 -0
  39. package/dist/jsMain/typescript/design-system/index.d.ts.map +1 -0
  40. package/dist/jsMain/typescript/design-system/index.js +195 -0
  41. package/dist/jsMain/typescript/design-system/index.js.map +1 -0
  42. package/dist/jsMain/typescript/design-system/theme-helpers.d.ts +161 -0
  43. package/dist/jsMain/typescript/design-system/theme-helpers.d.ts.map +1 -0
  44. package/dist/jsMain/typescript/design-system/theme-helpers.js +153 -0
  45. package/dist/jsMain/typescript/design-system/theme-helpers.js.map +1 -0
  46. package/dist/jsMain/typescript/i18n/index.d.ts +37 -0
  47. package/dist/jsMain/typescript/i18n/index.d.ts.map +1 -0
  48. package/dist/jsMain/typescript/i18n/index.js +139 -0
  49. package/dist/jsMain/typescript/i18n/index.js.map +1 -0
  50. package/dist/jsMain/typescript/i18n/locales/en.d.ts +6 -0
  51. package/dist/jsMain/typescript/i18n/locales/en.d.ts.map +1 -0
  52. package/dist/jsMain/typescript/i18n/locales/en.js +120 -0
  53. package/dist/jsMain/typescript/i18n/locales/en.js.map +1 -0
  54. package/dist/jsMain/typescript/i18n/locales/zh.d.ts +6 -0
  55. package/dist/jsMain/typescript/i18n/locales/zh.d.ts.map +1 -0
  56. package/dist/jsMain/typescript/i18n/locales/zh.js +120 -0
  57. package/dist/jsMain/typescript/i18n/locales/zh.js.map +1 -0
  58. package/dist/jsMain/typescript/i18n/types.d.ts +124 -0
  59. package/dist/jsMain/typescript/i18n/types.d.ts.map +1 -0
  60. package/dist/jsMain/typescript/i18n/types.js +7 -0
  61. package/dist/jsMain/typescript/i18n/types.js.map +1 -0
  62. package/dist/jsMain/typescript/index.d.ts +9 -0
  63. package/dist/jsMain/typescript/index.d.ts.map +1 -0
  64. package/dist/jsMain/typescript/index.js +380 -0
  65. package/dist/jsMain/typescript/index.js.map +1 -0
  66. package/dist/jsMain/typescript/modes/AgentMode.d.ts +33 -0
  67. package/dist/jsMain/typescript/modes/AgentMode.d.ts.map +1 -0
  68. package/dist/jsMain/typescript/modes/AgentMode.js +243 -0
  69. package/dist/jsMain/typescript/modes/AgentMode.js.map +1 -0
  70. package/dist/jsMain/typescript/modes/ChatMode.d.ts +30 -0
  71. package/dist/jsMain/typescript/modes/ChatMode.d.ts.map +1 -0
  72. package/dist/jsMain/typescript/modes/ChatMode.js +260 -0
  73. package/dist/jsMain/typescript/modes/ChatMode.js.map +1 -0
  74. package/dist/jsMain/typescript/modes/DocumentMode.d.ts +26 -0
  75. package/dist/jsMain/typescript/modes/DocumentMode.d.ts.map +1 -0
  76. package/dist/jsMain/typescript/modes/DocumentMode.js +217 -0
  77. package/dist/jsMain/typescript/modes/DocumentMode.js.map +1 -0
  78. package/dist/jsMain/typescript/modes/Mode.d.ts +72 -0
  79. package/dist/jsMain/typescript/modes/Mode.d.ts.map +1 -0
  80. package/dist/jsMain/typescript/modes/Mode.js +7 -0
  81. package/dist/jsMain/typescript/modes/Mode.js.map +1 -0
  82. package/dist/jsMain/typescript/modes/ModeManager.d.ts +76 -0
  83. package/dist/jsMain/typescript/modes/ModeManager.d.ts.map +1 -0
  84. package/dist/jsMain/typescript/modes/ModeManager.js +156 -0
  85. package/dist/jsMain/typescript/modes/ModeManager.js.map +1 -0
  86. package/dist/jsMain/typescript/modes/ReviewMode.d.ts +52 -0
  87. package/dist/jsMain/typescript/modes/ReviewMode.d.ts.map +1 -0
  88. package/dist/jsMain/typescript/modes/ReviewMode.js +435 -0
  89. package/dist/jsMain/typescript/modes/ReviewMode.js.map +1 -0
  90. package/dist/jsMain/typescript/modes/index.d.ts +9 -0
  91. package/dist/jsMain/typescript/modes/index.d.ts.map +1 -0
  92. package/dist/jsMain/typescript/modes/index.js +7 -0
  93. package/dist/jsMain/typescript/modes/index.js.map +1 -0
  94. package/dist/jsMain/typescript/processors/AtCommandProcessor.d.ts +34 -0
  95. package/dist/jsMain/typescript/processors/AtCommandProcessor.d.ts.map +1 -0
  96. package/dist/jsMain/typescript/processors/AtCommandProcessor.js +118 -0
  97. package/dist/jsMain/typescript/processors/AtCommandProcessor.js.map +1 -0
  98. package/dist/jsMain/typescript/processors/InputRouter.d.ts +84 -0
  99. package/dist/jsMain/typescript/processors/InputRouter.d.ts.map +1 -0
  100. package/dist/jsMain/typescript/processors/InputRouter.js +78 -0
  101. package/dist/jsMain/typescript/processors/InputRouter.js.map +1 -0
  102. package/dist/jsMain/typescript/processors/ModeCommandProcessor.d.ts +25 -0
  103. package/dist/jsMain/typescript/processors/ModeCommandProcessor.d.ts.map +1 -0
  104. package/dist/jsMain/typescript/processors/ModeCommandProcessor.js +127 -0
  105. package/dist/jsMain/typescript/processors/ModeCommandProcessor.js.map +1 -0
  106. package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts +68 -0
  107. package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts.map +1 -0
  108. package/dist/jsMain/typescript/processors/SlashCommandProcessor.js +391 -0
  109. package/dist/jsMain/typescript/processors/SlashCommandProcessor.js.map +1 -0
  110. package/dist/jsMain/typescript/processors/VariableProcessor.d.ts +44 -0
  111. package/dist/jsMain/typescript/processors/VariableProcessor.d.ts.map +1 -0
  112. package/dist/jsMain/typescript/processors/VariableProcessor.js +105 -0
  113. package/dist/jsMain/typescript/processors/VariableProcessor.js.map +1 -0
  114. package/dist/jsMain/typescript/ui/App.d.ts +16 -0
  115. package/dist/jsMain/typescript/ui/App.d.ts.map +1 -0
  116. package/dist/jsMain/typescript/ui/App.js +208 -0
  117. package/dist/jsMain/typescript/ui/App.js.map +1 -0
  118. package/dist/jsMain/typescript/ui/Banner.d.ts +6 -0
  119. package/dist/jsMain/typescript/ui/Banner.d.ts.map +1 -0
  120. package/dist/jsMain/typescript/ui/Banner.js +13 -0
  121. package/dist/jsMain/typescript/ui/Banner.js.map +1 -0
  122. package/dist/jsMain/typescript/ui/ChatInterface.d.ts +19 -0
  123. package/dist/jsMain/typescript/ui/ChatInterface.d.ts.map +1 -0
  124. package/dist/jsMain/typescript/ui/ChatInterface.js +223 -0
  125. package/dist/jsMain/typescript/ui/ChatInterface.js.map +1 -0
  126. package/dist/jsMain/typescript/ui/CommandSuggestions.d.ts +21 -0
  127. package/dist/jsMain/typescript/ui/CommandSuggestions.d.ts.map +1 -0
  128. package/dist/jsMain/typescript/ui/CommandSuggestions.js +43 -0
  129. package/dist/jsMain/typescript/ui/CommandSuggestions.js.map +1 -0
  130. package/dist/jsMain/typescript/ui/LanguageSwitcher.d.ts +11 -0
  131. package/dist/jsMain/typescript/ui/LanguageSwitcher.d.ts.map +1 -0
  132. package/dist/jsMain/typescript/ui/LanguageSwitcher.js +37 -0
  133. package/dist/jsMain/typescript/ui/LanguageSwitcher.js.map +1 -0
  134. package/dist/jsMain/typescript/ui/MessageRenderer.d.ts +70 -0
  135. package/dist/jsMain/typescript/ui/MessageRenderer.d.ts.map +1 -0
  136. package/dist/jsMain/typescript/ui/MessageRenderer.js +255 -0
  137. package/dist/jsMain/typescript/ui/MessageRenderer.js.map +1 -0
  138. package/dist/jsMain/typescript/ui/ModelConfigForm.d.ts +19 -0
  139. package/dist/jsMain/typescript/ui/ModelConfigForm.d.ts.map +1 -0
  140. package/dist/jsMain/typescript/ui/ModelConfigForm.js +257 -0
  141. package/dist/jsMain/typescript/ui/ModelConfigForm.js.map +1 -0
  142. package/dist/jsMain/typescript/ui/WelcomeScreen.d.ts +12 -0
  143. package/dist/jsMain/typescript/ui/WelcomeScreen.d.ts.map +1 -0
  144. package/dist/jsMain/typescript/ui/WelcomeScreen.js +93 -0
  145. package/dist/jsMain/typescript/ui/WelcomeScreen.js.map +1 -0
  146. package/dist/jsMain/typescript/utils/commandUtils.d.ts +64 -0
  147. package/dist/jsMain/typescript/utils/commandUtils.d.ts.map +1 -0
  148. package/dist/jsMain/typescript/utils/commandUtils.js +195 -0
  149. package/dist/jsMain/typescript/utils/commandUtils.js.map +1 -0
  150. package/dist/jsMain/typescript/utils/domainDictUtils.d.ts +53 -0
  151. package/dist/jsMain/typescript/utils/domainDictUtils.d.ts.map +1 -0
  152. package/dist/jsMain/typescript/utils/domainDictUtils.js +130 -0
  153. package/dist/jsMain/typescript/utils/domainDictUtils.js.map +1 -0
  154. package/dist/jsMain/typescript/utils/markdownSplitter.d.ts +23 -0
  155. package/dist/jsMain/typescript/utils/markdownSplitter.d.ts.map +1 -0
  156. package/dist/jsMain/typescript/utils/markdownSplitter.js +90 -0
  157. package/dist/jsMain/typescript/utils/markdownSplitter.js.map +1 -0
  158. package/dist/jsMain/typescript/utils/outputFormatter.d.ts +70 -0
  159. package/dist/jsMain/typescript/utils/outputFormatter.d.ts.map +1 -0
  160. package/dist/jsMain/typescript/utils/outputFormatter.js +140 -0
  161. package/dist/jsMain/typescript/utils/outputFormatter.js.map +1 -0
  162. package/dist/jsMain/typescript/utils/renderUtils.d.ts +17 -0
  163. package/dist/jsMain/typescript/utils/renderUtils.d.ts.map +1 -0
  164. package/dist/jsMain/typescript/utils/renderUtils.js +128 -0
  165. package/dist/jsMain/typescript/utils/renderUtils.js.map +1 -0
  166. package/dist/test/framework/analyzers/CodeChangeAnalyzer.d.ts +87 -0
  167. package/dist/test/framework/analyzers/CodeChangeAnalyzer.d.ts.map +1 -0
  168. package/dist/test/framework/analyzers/CodeChangeAnalyzer.js +412 -0
  169. package/dist/test/framework/analyzers/CodeChangeAnalyzer.js.map +1 -0
  170. package/dist/test/framework/analyzers/PromptAnalyzer.d.ts +46 -0
  171. package/dist/test/framework/analyzers/PromptAnalyzer.d.ts.map +1 -0
  172. package/dist/test/framework/analyzers/PromptAnalyzer.js +185 -0
  173. package/dist/test/framework/analyzers/PromptAnalyzer.js.map +1 -0
  174. package/dist/test/framework/analyzers/ToolCallAnalyzer.d.ts +45 -0
  175. package/dist/test/framework/analyzers/ToolCallAnalyzer.d.ts.map +1 -0
  176. package/dist/test/framework/analyzers/ToolCallAnalyzer.js +215 -0
  177. package/dist/test/framework/analyzers/ToolCallAnalyzer.js.map +1 -0
  178. package/dist/test/framework/cli.d.ts +8 -0
  179. package/dist/test/framework/cli.d.ts.map +1 -0
  180. package/dist/test/framework/cli.js +175 -0
  181. package/dist/test/framework/cli.js.map +1 -0
  182. package/dist/test/framework/core/TestCase.d.ts +100 -0
  183. package/dist/test/framework/core/TestCase.d.ts.map +1 -0
  184. package/dist/test/framework/core/TestCase.js +101 -0
  185. package/dist/test/framework/core/TestCase.js.map +1 -0
  186. package/dist/test/framework/core/TestEngine.d.ts +89 -0
  187. package/dist/test/framework/core/TestEngine.d.ts.map +1 -0
  188. package/dist/test/framework/core/TestEngine.js +552 -0
  189. package/dist/test/framework/core/TestEngine.js.map +1 -0
  190. package/dist/test/framework/core/TestResult.d.ts +143 -0
  191. package/dist/test/framework/core/TestResult.d.ts.map +1 -0
  192. package/dist/test/framework/core/TestResult.js +76 -0
  193. package/dist/test/framework/core/TestResult.js.map +1 -0
  194. package/dist/test/framework/examples/BasicRobustnessTest.d.ts +19 -0
  195. package/dist/test/framework/examples/BasicRobustnessTest.d.ts.map +1 -0
  196. package/dist/test/framework/examples/BasicRobustnessTest.js +116 -0
  197. package/dist/test/framework/examples/BasicRobustnessTest.js.map +1 -0
  198. package/dist/test/framework/index.d.ts +30 -0
  199. package/dist/test/framework/index.d.ts.map +1 -0
  200. package/dist/test/framework/index.js +38 -0
  201. package/dist/test/framework/index.js.map +1 -0
  202. package/dist/test/framework/loaders/JsonScenarioLoader.d.ts +99 -0
  203. package/dist/test/framework/loaders/JsonScenarioLoader.d.ts.map +1 -0
  204. package/dist/test/framework/loaders/JsonScenarioLoader.js +197 -0
  205. package/dist/test/framework/loaders/JsonScenarioLoader.js.map +1 -0
  206. package/dist/test/framework/reporters/ConsoleReporter.d.ts +25 -0
  207. package/dist/test/framework/reporters/ConsoleReporter.d.ts.map +1 -0
  208. package/dist/test/framework/reporters/ConsoleReporter.js +196 -0
  209. package/dist/test/framework/reporters/ConsoleReporter.js.map +1 -0
  210. package/dist/test/framework/scenarios/ScenarioBuilder.d.ts +62 -0
  211. package/dist/test/framework/scenarios/ScenarioBuilder.d.ts.map +1 -0
  212. package/dist/test/framework/scenarios/ScenarioBuilder.js +285 -0
  213. package/dist/test/framework/scenarios/ScenarioBuilder.js.map +1 -0
  214. package/dist/test/framework/validate-framework.d.ts +9 -0
  215. package/dist/test/framework/validate-framework.d.ts.map +1 -0
  216. package/dist/test/framework/validate-framework.js +187 -0
  217. package/dist/test/framework/validate-framework.js.map +1 -0
  218. 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,7 @@
1
+ /**
2
+ * i18n Type Definitions
3
+ *
4
+ * Defines types for internationalization support
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -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