@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
package/README.md ADDED
@@ -0,0 +1,180 @@
1
+ # mpp-ui - Multiplatform UI Module
2
+
3
+ ## 概述
4
+
5
+ `mpp-ui` 是 AutoDev 的跨平台 UI 模块,基于 Compose Multiplatform 构建,支持 JVM (Desktop)、Android、JS (Web) 和 **Node.js (CLI)** 平台。
6
+
7
+ 本模块包含:
8
+ - **SketchRenderer**: 原有的 LLM 响应渲染器
9
+ - **MarkdownSketchRenderer**: 新实现的 Markdown 渲染器,使用 `multiplatform-markdown-renderer` 库
10
+ - **MarkdownDemo**: 演示应用,展示 MarkdownSketchRenderer 的各种渲染能力
11
+ - **FileChooser**: 跨平台文件选择器,支持 JVM、Android 和 JS 平台
12
+ - **AutoDev CLI**: 终端 UI,使用 React/Ink 构建,集成 mpp-core 的 AI Agent 功能
13
+
14
+ ## 技术栈
15
+
16
+ - **Kotlin 2.2.0** - Multiplatform
17
+ - **Compose Multiplatform 1.8.0** - UI 框架
18
+ - **multiplatform-markdown-renderer 0.13.0** - Markdown 渲染
19
+ - **Material 3** - 设计系统
20
+
21
+ ## 平台支持
22
+
23
+ ### ✅ JVM (Desktop)
24
+ 完全支持,已测试运行成功。
25
+
26
+ ### JVM CLI
27
+
28
+ ```bash
29
+ ./gradlew :mpp-ui:runRemoteAgentCli --args="--server http://localhost:8080 --project-id https://github.com/unit-mesh/untitled --task '你的任务' --use-server-config --branch master"
30
+ ```
31
+
32
+ ### ⚠️ Android
33
+ 配置完成,需要物理设备或模拟器测试。
34
+
35
+ ### ⚠️ Web (JS)
36
+
37
+ ### ✅ Node.js (CLI)
38
+
39
+ Local mode
40
+
41
+ ```bash
42
+ node dist/jsMain/typescript/index.js code --task "add Spring ai to project and also a service example, I use deepseek, here it's Spring AI documentation https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html 请先阅读文档!!" -p /Users/phodal/IdeaProjects/untitled --max-iterations 100
43
+ ```
44
+
45
+ Server
46
+
47
+ ```bash
48
+ node dist/jsMain/typescript/index.js server \\n --task "编写 BlogService 测试" \\n --project-id https://github.com/unit-mesh/untitled \\n -s http://localhost:8080
49
+ ```
50
+
51
+ ## 构建和运行
52
+
53
+ ### 前提条件
54
+
55
+ 确保 `gradle.properties` 中已配置:
56
+ ```properties
57
+ # 强制使用 Java 17(避免 Kotlin 编译器与 Java 25 的兼容性问题)
58
+ org.gradle.java.home=/path/to/jdk-17
59
+
60
+ # Android 配置
61
+ android.useAndroidX=true
62
+ android.enableJetifier=true
63
+
64
+ # Compose 实验性功能
65
+ org.jetbrains.compose.experimental.jscanvas.enabled=true
66
+ ```
67
+
68
+ ### Desktop (JVM)
69
+
70
+ 运行演示应用:
71
+ ```bash
72
+ ./gradlew :mpp-ui:run
73
+ ```
74
+
75
+ 构建 JAR:
76
+ ```bash
77
+ ./gradlew :mpp-ui:jvmJar
78
+ # 输出: mpp-ui/build/libs/mpp-ui-jvm.jar
79
+ ```
80
+
81
+ 构建原生安装包:
82
+ ```bash
83
+ # macOS
84
+ ./gradlew :mpp-ui:packageDmg
85
+
86
+ # Windows
87
+ ./gradlew :mpp-ui:packageMsi
88
+
89
+ # Linux
90
+ ./gradlew :mpp-ui:packageDeb
91
+ ```
92
+
93
+ ### Web (JS)
94
+
95
+ 构建 Web 版本:
96
+ ```bash
97
+ ./gradlew :mpp-ui:jsBrowserProductionWebpack
98
+ # 输出: mpp-ui/build/dist/js/productionExecutable/
99
+ ```
100
+
101
+ 运行开发服务器:
102
+ ```bash
103
+ ./gradlew :mpp-ui:jsBrowserDevelopmentRun --continuous
104
+ # 访问: http://localhost:8080
105
+ ```
106
+
107
+ ### Android
108
+
109
+ 构建 APK:
110
+ ```bash
111
+ ./gradlew :mpp-ui:assembleDebug
112
+ # 输出: mpp-ui/build/outputs/apk/debug/
113
+ ```
114
+
115
+ 在连接的设备上安装和运行:
116
+ ```bash
117
+ ./gradlew :mpp-ui:installDebug
118
+ ```
119
+
120
+ ## 架构
121
+
122
+ ```
123
+ mpp-ui/
124
+ ├── src/
125
+ │ ├── commonMain/ # 共享代码
126
+ │ │ └── kotlin/
127
+ │ │ └── cc/unitmesh/devins/ui/compose/
128
+ │ │ ├── sketch/
129
+ │ │ │ ├── SketchRenderer.kt # 原有渲染器
130
+ │ │ │ ├── MarkdownSketchRenderer.kt # 新 Markdown 渲染器
131
+ │ │ │ └── DiffSketchRenderer.kt # Diff 渲染器
132
+ │ │ └── MarkdownDemo.kt # 演示应用
133
+ │ │
134
+ │ ├── jvmMain/ # Desktop 特定代码
135
+ │ │ └── kotlin/
136
+ │ │ └── cc/unitmesh/devins/ui/
137
+ │ │ ├── Main.kt # 原主应用入口
138
+ │ │ └── MarkdownDemoMain.kt # Markdown 演示入口
139
+ │ │
140
+ │ ├── androidMain/ # Android 特定代码
141
+ │ │ ├── AndroidManifest.xml
142
+ │ │ └── kotlin/
143
+ │ │ └── cc/unitmesh/devins/ui/
144
+ │ │ └── MainActivity.kt
145
+ │ │
146
+ │ └── jsMain/ # Web 特定代码
147
+ │ ├── kotlin/
148
+ │ │ └── cc/unitmesh/devins/ui/
149
+ │ │ └── Main.kt
150
+ │ └── resources/
151
+ │ └── index.html
152
+
153
+ └── build.gradle.kts # Multiplatform 配置
154
+ ```
155
+
156
+ ## 国际化 (i18n)
157
+
158
+ mpp-ui 支持多语言,目前支持:
159
+ - **English** (en)
160
+ - **中文** (zh)
161
+
162
+ ### 语言切换
163
+
164
+ **CLI**:在 `~/.autodev/config.yaml` 中设置 `language` 字段:
165
+ ```yaml
166
+ language: zh
167
+ ```
168
+
169
+ **Desktop/Android**:使用 UI 中的语言切换组件
170
+
171
+ 详细文档请参阅:[I18N.md](docs/I18N.md)
172
+
173
+ ## 贡献
174
+
175
+ 在添加新功能时,请确保:
176
+ 1. 代码在 `commonMain` 中实现(除非是平台特定的)
177
+ 2. 使用 Compose Multiplatform 的跨平台 API
178
+ 3. 在多个平台上测试
179
+ 4. 更新本 README
180
+ 5. 为所有用户可见的文本添加翻译(参见 [I18N.md](docs/I18N.md))
@@ -0,0 +1,40 @@
1
+ /**
2
+ * LLMService - Wrapper around mpp-core's KoogLLMService
3
+ *
4
+ * This service provides a TypeScript-friendly interface to the Kotlin/JS
5
+ * compiled mpp-core module.
6
+ */
7
+ import type { LegacyConfig } from '../config/ConfigManager';
8
+ /**
9
+ * LLM Service wrapper
10
+ */
11
+ export declare class LLMService {
12
+ private config;
13
+ private koogService;
14
+ private chatHistory;
15
+ constructor(config: LegacyConfig);
16
+ /**
17
+ * Send a message and receive streaming response
18
+ */
19
+ streamMessage(message: string, onChunk: (chunk: string) => void): Promise<void>;
20
+ /**
21
+ * Send a message with system prompt and receive streaming response
22
+ */
23
+ streamMessageWithSystem(systemPrompt: string, userMessage: string, onChunk: (chunk: string) => void): Promise<void>;
24
+ /**
25
+ * Format LLM error into user-friendly message
26
+ */
27
+ private formatLLMError;
28
+ /**
29
+ * Clear chat history
30
+ */
31
+ clearHistory(): void;
32
+ /**
33
+ * Get chat history
34
+ */
35
+ getHistory(): Array<{
36
+ role: string;
37
+ content: string;
38
+ }>;
39
+ }
40
+ //# sourceMappingURL=LLMService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMService.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/agents/LLMService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAoB5D;;GAEG;AACH,qBAAa,UAAU;IAIT,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,WAAW,CAAgD;gBAE/C,MAAM,EAAE,YAAY;IAiBxC;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,IAAI,CAAC;IA+ChB;;OAEG;IACG,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,IAAI,CAAC;IAsDhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,UAAU,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAIvD"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * LLMService - Wrapper around mpp-core's KoogLLMService
3
+ *
4
+ * This service provides a TypeScript-friendly interface to the Kotlin/JS
5
+ * compiled mpp-core module.
6
+ */
7
+ // Import the compiled Kotlin/JS module
8
+ // @ts-ignore - Kotlin/JS generated module
9
+ import MppCore from '@xiuper/mpp-core';
10
+ // Access the exported Kotlin/JS classes
11
+ const { JsKoogLLMService, JsModelConfig, JsMessage } = MppCore.cc.unitmesh.llm;
12
+ // Provider type mapping
13
+ const ProviderTypes = {
14
+ 'openai': 'OPENAI',
15
+ 'anthropic': 'ANTHROPIC',
16
+ 'google': 'GOOGLE',
17
+ 'deepseek': 'DEEPSEEK',
18
+ 'ollama': 'OLLAMA',
19
+ 'openrouter': 'OPENROUTER',
20
+ 'custom-openai-base': 'CUSTOM_OPENAI_BASE'
21
+ };
22
+ /**
23
+ * LLM Service wrapper
24
+ */
25
+ export class LLMService {
26
+ config;
27
+ koogService;
28
+ chatHistory = [];
29
+ constructor(config) {
30
+ this.config = config;
31
+ // Create JsModelConfig
32
+ const modelConfig = new JsModelConfig(ProviderTypes[this.config.provider.toLowerCase()], this.config.model, this.config.apiKey, 0.7, // temperature
33
+ 8192, // maxTokens
34
+ this.config.baseUrl || '');
35
+ // Create JsKoogLLMService
36
+ this.koogService = new JsKoogLLMService(modelConfig);
37
+ console.log(`✓ LLM Service initialized: ${this.config.provider}/${this.config.model}`);
38
+ }
39
+ /**
40
+ * Send a message and receive streaming response
41
+ */
42
+ async streamMessage(message, onChunk) {
43
+ // Add user message to history
44
+ this.chatHistory.push({ role: 'user', content: message });
45
+ try {
46
+ // Convert history to JsMessage format (exclude current message)
47
+ const historyMessages = this.chatHistory.slice(0, -1).map(msg => new JsMessage(msg.role, msg.content));
48
+ let fullResponse = '';
49
+ let streamError = null;
50
+ // Call streamPrompt with callbacks - it now returns a Promise
51
+ await this.koogService.streamPrompt(message, historyMessages, (chunk) => {
52
+ fullResponse += chunk;
53
+ onChunk(chunk);
54
+ }, (error) => {
55
+ // Capture error from error callback
56
+ streamError = error;
57
+ }, () => {
58
+ // Streaming completed
59
+ });
60
+ // If error callback was called, throw the error
61
+ if (streamError) {
62
+ throw this.formatLLMError(streamError);
63
+ }
64
+ // Add assistant response to history
65
+ this.chatHistory.push({ role: 'assistant', content: fullResponse });
66
+ }
67
+ catch (error) {
68
+ // Remove the user message from history if request failed
69
+ this.chatHistory.pop();
70
+ console.error('Error in streamMessage:', error);
71
+ throw this.formatLLMError(error);
72
+ }
73
+ }
74
+ /**
75
+ * Send a message with system prompt and receive streaming response
76
+ */
77
+ async streamMessageWithSystem(systemPrompt, userMessage, onChunk) {
78
+ // Add system message if this is the first message
79
+ if (this.chatHistory.length === 0) {
80
+ this.chatHistory.push({ role: 'system', content: systemPrompt });
81
+ }
82
+ // Add user message to history
83
+ this.chatHistory.push({ role: 'user', content: userMessage });
84
+ try {
85
+ // Convert history to JsMessage format (exclude current message)
86
+ const historyMessages = this.chatHistory.slice(0, -1).map(msg => new JsMessage(msg.role, msg.content));
87
+ let fullResponse = '';
88
+ let streamError = null;
89
+ // Call streamPrompt with callbacks - it now returns a Promise
90
+ // IMPORTANT: Pass compileDevIns=false for agent calls to prevent DevIns compilation
91
+ await this.koogService.streamPrompt(userMessage, historyMessages, (chunk) => {
92
+ fullResponse += chunk;
93
+ onChunk(chunk);
94
+ }, (error) => {
95
+ // Capture error from error callback
96
+ streamError = error;
97
+ }, () => {
98
+ // Streaming completed
99
+ }, false // compileDevIns = false - agents send pre-formatted prompts
100
+ );
101
+ // If error callback was called, throw the error
102
+ if (streamError) {
103
+ throw this.formatLLMError(streamError);
104
+ }
105
+ // Add assistant response to history
106
+ this.chatHistory.push({ role: 'assistant', content: fullResponse });
107
+ }
108
+ catch (error) {
109
+ // Remove the user message from history if request failed
110
+ this.chatHistory.pop();
111
+ console.error('Error in streamMessageWithSystem:', error);
112
+ throw this.formatLLMError(error);
113
+ }
114
+ }
115
+ /**
116
+ * Format LLM error into user-friendly message
117
+ */
118
+ formatLLMError(error) {
119
+ const errorMessage = error?.message || String(error);
120
+ // Check for common error patterns
121
+ if (errorMessage.includes('401') || errorMessage.includes('Unauthorized')) {
122
+ return new Error(`❌ API Key 无效或已过期\n请检查配置文件 ~/.autodev/config.yaml 中的 apiKey`);
123
+ }
124
+ if (errorMessage.includes('403') || errorMessage.includes('Forbidden')) {
125
+ return new Error(`❌ API 访问被拒绝\n请检查 API Key 权限或账户余额`);
126
+ }
127
+ if (errorMessage.includes('429') || errorMessage.includes('rate limit')) {
128
+ return new Error(`❌ API 请求频率超限\n请稍后再试或升级您的 API 配额`);
129
+ }
130
+ if (errorMessage.includes('timeout') || errorMessage.includes('ETIMEDOUT')) {
131
+ return new Error(`❌ 请求超时\n请检查网络连接或稍后再试`);
132
+ }
133
+ if (errorMessage.includes('ECONNREFUSED') || errorMessage.includes('connection refused')) {
134
+ return new Error(`❌ 无法连接到 API 服务器\n请检查网络连接${this.config.baseUrl ? ` 和 baseUrl: ${this.config.baseUrl}` : ''}`);
135
+ }
136
+ if (errorMessage.includes('ENOTFOUND') || errorMessage.includes('getaddrinfo')) {
137
+ return new Error(`❌ 无法解析 API 服务器地址\n请检查网络连接和 DNS 设置`);
138
+ }
139
+ // Default error message
140
+ return new Error(`❌ LLM 调用失败: ${errorMessage}\n\n提示:检查 ~/.autodev/config.yaml 中的配置\n- provider: ${this.config.provider}\n- model: ${this.config.model}\n- apiKey: ${this.config.apiKey.substring(0, 8)}...`);
141
+ }
142
+ /**
143
+ * Clear chat history
144
+ */
145
+ clearHistory() {
146
+ this.chatHistory = [];
147
+ console.log('✓ Chat history cleared');
148
+ }
149
+ /**
150
+ * Get chat history
151
+ */
152
+ getHistory() {
153
+ return [...this.chatHistory];
154
+ }
155
+ }
156
+ //# sourceMappingURL=LLMService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMService.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/agents/LLMService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * ServerAgentClient - Client for connecting to mpp-server
3
+ *
4
+ * Provides both synchronous and streaming (SSE) execution modes
5
+ */
6
+ export interface LLMConfig {
7
+ provider: string;
8
+ modelName: string;
9
+ apiKey: string;
10
+ baseUrl?: string;
11
+ }
12
+ export interface AgentRequest {
13
+ projectId: string;
14
+ task: string;
15
+ llmConfig?: LLMConfig;
16
+ }
17
+ export interface AgentStepInfo {
18
+ step: number;
19
+ action: string;
20
+ tool: string;
21
+ success: boolean;
22
+ }
23
+ export interface AgentEditInfo {
24
+ file: string;
25
+ operation: string;
26
+ content: string;
27
+ }
28
+ export interface AgentResponse {
29
+ success: boolean;
30
+ message: string;
31
+ output?: string;
32
+ iterations: number;
33
+ steps: AgentStepInfo[];
34
+ edits: AgentEditInfo[];
35
+ }
36
+ export type AgentEvent = {
37
+ type: 'clone_progress';
38
+ stage: string;
39
+ progress?: number;
40
+ } | {
41
+ type: 'clone_log';
42
+ message: string;
43
+ isError?: boolean;
44
+ } | {
45
+ type: 'iteration';
46
+ current: number;
47
+ max: number;
48
+ } | {
49
+ type: 'llm_chunk';
50
+ chunk: string;
51
+ } | {
52
+ type: 'tool_call';
53
+ toolName: string;
54
+ params: string;
55
+ } | {
56
+ type: 'tool_result';
57
+ toolName: string;
58
+ success: boolean;
59
+ output?: string;
60
+ } | {
61
+ type: 'user_confirmation';
62
+ toolName: string;
63
+ params: Record<string, any>;
64
+ } | {
65
+ type: 'error';
66
+ message: string;
67
+ } | {
68
+ type: 'complete';
69
+ success: boolean;
70
+ message: string;
71
+ iterations: number;
72
+ steps: AgentStepInfo[];
73
+ edits: AgentEditInfo[];
74
+ };
75
+ export declare class ServerAgentClient {
76
+ private baseUrl;
77
+ constructor(baseUrl?: string);
78
+ /**
79
+ * Execute agent task synchronously
80
+ */
81
+ executeSync(request: AgentRequest): Promise<AgentResponse>;
82
+ /**
83
+ * Execute agent task with SSE streaming
84
+ */
85
+ executeStream(request: AgentRequest): AsyncGenerator<AgentEvent>;
86
+ private parseSSEEvent;
87
+ /**
88
+ * Get list of available projects
89
+ */
90
+ getProjects(): Promise<{
91
+ id: string;
92
+ name: string;
93
+ path: string;
94
+ description: string;
95
+ }[]>;
96
+ /**
97
+ * Health check
98
+ */
99
+ healthCheck(): Promise<{
100
+ status: string;
101
+ }>;
102
+ }
103
+ //# sourceMappingURL=ServerAgentClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerAgentClient.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/agents/ServerAgentClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * ServerAgentClient - Client for connecting to mpp-server
3
+ *
4
+ * Provides both synchronous and streaming (SSE) execution modes
5
+ */
6
+ import fetch from 'node-fetch';
7
+ export class ServerAgentClient {
8
+ baseUrl;
9
+ constructor(baseUrl = 'http://localhost:8080') {
10
+ this.baseUrl = baseUrl;
11
+ }
12
+ /**
13
+ * Execute agent task synchronously
14
+ */
15
+ async executeSync(request) {
16
+ const response = await fetch(`${this.baseUrl}/api/agent/run`, {
17
+ method: 'POST',
18
+ headers: {
19
+ 'Content-Type': 'application/json',
20
+ },
21
+ body: JSON.stringify(request),
22
+ });
23
+ if (!response.ok) {
24
+ const error = await response.text();
25
+ throw new Error(`Server error: ${response.status} - ${error}`);
26
+ }
27
+ return await response.json();
28
+ }
29
+ /**
30
+ * Execute agent task with SSE streaming
31
+ */
32
+ async *executeStream(request) {
33
+ const url = `${this.baseUrl}/api/agent/stream`;
34
+ // Use fetch for SSE (EventSource doesn't support POST)
35
+ const response = await fetch(url, {
36
+ method: 'POST',
37
+ headers: {
38
+ 'Content-Type': 'application/json',
39
+ 'Accept': 'text/event-stream',
40
+ },
41
+ body: JSON.stringify(request),
42
+ });
43
+ if (!response.ok) {
44
+ const error = await response.text();
45
+ throw new Error(`Server error: ${response.status} - ${error}`);
46
+ }
47
+ if (!response.body) {
48
+ throw new Error('Response body is null');
49
+ }
50
+ // Parse SSE stream
51
+ const decoder = new TextDecoder();
52
+ let buffer = '';
53
+ // node-fetch returns a Node.js Readable stream
54
+ for await (const chunk of response.body) {
55
+ // Decode chunk and add to buffer
56
+ buffer += decoder.decode(chunk, { stream: true });
57
+ // Process complete events in buffer
58
+ const lines = buffer.split('\n');
59
+ buffer = lines.pop() || ''; // Keep incomplete line in buffer
60
+ let currentEvent = {};
61
+ for (const line of lines) {
62
+ if (line.startsWith('event:')) {
63
+ currentEvent.type = line.substring(6).trim();
64
+ }
65
+ else if (line.startsWith('data:')) {
66
+ currentEvent.data = line.substring(5).trim();
67
+ }
68
+ else if (line.trim() === '' && currentEvent.type && currentEvent.data) {
69
+ // Complete event - parse and yield
70
+ const event = this.parseSSEEvent(currentEvent.type, currentEvent.data);
71
+ if (event) {
72
+ yield event;
73
+ // Check if complete
74
+ if (event.type === 'complete') {
75
+ return;
76
+ }
77
+ }
78
+ currentEvent = {};
79
+ }
80
+ }
81
+ }
82
+ }
83
+ parseSSEEvent(type, data) {
84
+ try {
85
+ const parsed = JSON.parse(data);
86
+ switch (type) {
87
+ case 'clone_progress':
88
+ return { type: 'clone_progress', stage: parsed.stage, progress: parsed.progress };
89
+ case 'clone_log':
90
+ return { type: 'clone_log', message: parsed.message, isError: parsed.isError };
91
+ case 'iteration':
92
+ return { type: 'iteration', current: parsed.current, max: parsed.max };
93
+ case 'llm_chunk':
94
+ return { type: 'llm_chunk', chunk: parsed.chunk };
95
+ case 'tool_call':
96
+ return { type: 'tool_call', toolName: parsed.toolName, params: parsed.params };
97
+ case 'tool_result':
98
+ return { type: 'tool_result', toolName: parsed.toolName, success: parsed.success, output: parsed.output };
99
+ case 'error':
100
+ return { type: 'error', message: parsed.message };
101
+ case 'complete':
102
+ return {
103
+ type: 'complete',
104
+ success: parsed.success,
105
+ message: parsed.message,
106
+ iterations: parsed.iterations,
107
+ steps: parsed.steps,
108
+ edits: parsed.edits
109
+ };
110
+ default:
111
+ console.warn(`Unknown SSE event type: ${type}`);
112
+ return null;
113
+ }
114
+ }
115
+ catch (e) {
116
+ console.error(`Failed to parse SSE event: ${e}`);
117
+ return null;
118
+ }
119
+ }
120
+ /**
121
+ * Get list of available projects
122
+ */
123
+ async getProjects() {
124
+ const response = await fetch(`${this.baseUrl}/api/projects`);
125
+ if (!response.ok) {
126
+ throw new Error(`Failed to get projects: ${response.status}`);
127
+ }
128
+ const data = await response.json();
129
+ return data.projects || [];
130
+ }
131
+ /**
132
+ * Health check
133
+ */
134
+ async healthCheck() {
135
+ const response = await fetch(`${this.baseUrl}/health`);
136
+ if (!response.ok) {
137
+ throw new Error(`Health check failed: ${response.status}`);
138
+ }
139
+ return await response.json();
140
+ }
141
+ }
142
+ //# sourceMappingURL=ServerAgentClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerAgentClient.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/agents/ServerAgentClient.ts"],"names":[],"mappings":"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"}