@opensumi/ide-ai-native 3.7.2-next-1740448398.0 → 3.7.2-next-1741226843.0

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 (448) hide show
  1. package/lib/browser/ai-core.contextkeys.d.ts +0 -1
  2. package/lib/browser/ai-core.contextkeys.d.ts.map +1 -1
  3. package/lib/browser/ai-core.contextkeys.js +0 -1
  4. package/lib/browser/ai-core.contextkeys.js.map +1 -1
  5. package/lib/browser/ai-core.contribution.d.ts +2 -8
  6. package/lib/browser/ai-core.contribution.d.ts.map +1 -1
  7. package/lib/browser/ai-core.contribution.js +20 -149
  8. package/lib/browser/ai-core.contribution.js.map +1 -1
  9. package/lib/browser/chat/chat-agent.service.d.ts.map +1 -1
  10. package/lib/browser/chat/chat-agent.service.js +0 -6
  11. package/lib/browser/chat/chat-agent.service.js.map +1 -1
  12. package/lib/browser/chat/chat-manager.service.d.ts +2 -30
  13. package/lib/browser/chat/chat-manager.service.d.ts.map +1 -1
  14. package/lib/browser/chat/chat-manager.service.js +1 -45
  15. package/lib/browser/chat/chat-manager.service.js.map +1 -1
  16. package/lib/browser/chat/chat-model.d.ts +7 -34
  17. package/lib/browser/chat/chat-model.d.ts.map +1 -1
  18. package/lib/browser/chat/chat-model.js +57 -71
  19. package/lib/browser/chat/chat-model.js.map +1 -1
  20. package/lib/browser/chat/chat-proxy.service.d.ts +1 -6
  21. package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
  22. package/lib/browser/chat/chat-proxy.service.js +3 -54
  23. package/lib/browser/chat/chat-proxy.service.js.map +1 -1
  24. package/lib/browser/chat/chat.api.service.d.ts +1 -1
  25. package/lib/browser/chat/chat.api.service.d.ts.map +1 -1
  26. package/lib/browser/chat/chat.api.service.js +2 -2
  27. package/lib/browser/chat/chat.api.service.js.map +1 -1
  28. package/lib/browser/chat/chat.internal.service.d.ts +2 -8
  29. package/lib/browser/chat/chat.internal.service.d.ts.map +1 -1
  30. package/lib/browser/chat/chat.internal.service.js +13 -41
  31. package/lib/browser/chat/chat.internal.service.js.map +1 -1
  32. package/lib/browser/chat/chat.module.less +41 -17
  33. package/lib/browser/chat/chat.view.d.ts.map +1 -1
  34. package/lib/browser/chat/chat.view.js +14 -102
  35. package/lib/browser/chat/chat.view.js.map +1 -1
  36. package/lib/browser/components/ChatEditor.d.ts +0 -1
  37. package/lib/browser/components/ChatEditor.d.ts.map +1 -1
  38. package/lib/browser/components/ChatEditor.js +3 -3
  39. package/lib/browser/components/ChatEditor.js.map +1 -1
  40. package/lib/browser/components/ChatInput.d.ts.map +1 -1
  41. package/lib/browser/components/ChatInput.js.map +1 -1
  42. package/lib/browser/components/ChatMarkdown.d.ts +0 -1
  43. package/lib/browser/components/ChatMarkdown.d.ts.map +1 -1
  44. package/lib/browser/components/ChatMarkdown.js +2 -2
  45. package/lib/browser/components/ChatMarkdown.js.map +1 -1
  46. package/lib/browser/components/ChatReply.d.ts.map +1 -1
  47. package/lib/browser/components/ChatReply.js +4 -29
  48. package/lib/browser/components/ChatReply.js.map +1 -1
  49. package/lib/browser/components/ChatThinking.js +1 -1
  50. package/lib/browser/components/ChatThinking.js.map +1 -1
  51. package/lib/browser/components/WelcomeMsg.js.map +1 -1
  52. package/lib/browser/components/components.module.less +31 -33
  53. package/lib/browser/components/utils.d.ts +2 -2
  54. package/lib/browser/contrib/intelligent-completions/index.d.ts +9 -16
  55. package/lib/browser/contrib/intelligent-completions/index.d.ts.map +1 -1
  56. package/lib/browser/contrib/intelligent-completions/index.js +1 -6
  57. package/lib/browser/contrib/intelligent-completions/index.js.map +1 -1
  58. package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.d.ts +0 -1
  59. package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.d.ts.map +1 -1
  60. package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js +4 -26
  61. package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js.map +1 -1
  62. package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts +5 -5
  63. package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts.map +1 -1
  64. package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js +48 -59
  65. package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js.map +1 -1
  66. package/lib/browser/contrib/intelligent-completions/intelligent-completions.feature.registry.d.ts +0 -4
  67. package/lib/browser/contrib/intelligent-completions/intelligent-completions.feature.registry.d.ts.map +1 -1
  68. package/lib/browser/contrib/intelligent-completions/intelligent-completions.feature.registry.js +0 -7
  69. package/lib/browser/contrib/intelligent-completions/intelligent-completions.feature.registry.js.map +1 -1
  70. package/lib/browser/contrib/intelligent-completions/source/base.d.ts +5 -14
  71. package/lib/browser/contrib/intelligent-completions/source/base.d.ts.map +1 -1
  72. package/lib/browser/contrib/intelligent-completions/source/base.js +8 -29
  73. package/lib/browser/contrib/intelligent-completions/source/base.js.map +1 -1
  74. package/lib/browser/contrib/intelligent-completions/source/line-change.source.d.ts +3 -10
  75. package/lib/browser/contrib/intelligent-completions/source/line-change.source.d.ts.map +1 -1
  76. package/lib/browser/contrib/intelligent-completions/source/line-change.source.js +22 -95
  77. package/lib/browser/contrib/intelligent-completions/source/line-change.source.js.map +1 -1
  78. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.d.ts +3 -1
  79. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.d.ts.map +1 -1
  80. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.js +20 -13
  81. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.js.map +1 -1
  82. package/lib/browser/contrib/terminal/component/terminal-command-suggest-controller.js +2 -2
  83. package/lib/browser/contrib/terminal/component/terminal-command-suggest-controller.js.map +1 -1
  84. package/lib/browser/index.d.ts +3 -11
  85. package/lib/browser/index.d.ts.map +1 -1
  86. package/lib/browser/index.js +4 -56
  87. package/lib/browser/index.js.map +1 -1
  88. package/lib/browser/languages/tree-sitter/wasm-manager.d.ts.map +1 -1
  89. package/lib/browser/languages/tree-sitter/wasm-manager.js +2 -14
  90. package/lib/browser/languages/tree-sitter/wasm-manager.js.map +1 -1
  91. package/lib/browser/layout/ai-layout.d.ts.map +1 -1
  92. package/lib/browser/layout/ai-layout.js +2 -2
  93. package/lib/browser/layout/ai-layout.js.map +1 -1
  94. package/lib/browser/layout/layout.module.less +9 -9
  95. package/lib/browser/layout/tabbar.view.d.ts.map +1 -1
  96. package/lib/browser/layout/tabbar.view.js +6 -5
  97. package/lib/browser/layout/tabbar.view.js.map +1 -1
  98. package/lib/browser/model/enhanceDecorationsCollection.d.ts +10 -14
  99. package/lib/browser/model/enhanceDecorationsCollection.d.ts.map +1 -1
  100. package/lib/browser/model/enhanceDecorationsCollection.js +53 -42
  101. package/lib/browser/model/enhanceDecorationsCollection.js.map +1 -1
  102. package/lib/browser/model/msg-history-manager.d.ts +1 -20
  103. package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
  104. package/lib/browser/model/msg-history-manager.js +10 -46
  105. package/lib/browser/model/msg-history-manager.js.map +1 -1
  106. package/lib/browser/model/styles.module.less +7 -0
  107. package/lib/browser/preferences/schema.d.ts.map +1 -1
  108. package/lib/browser/preferences/schema.js +0 -69
  109. package/lib/browser/preferences/schema.js.map +1 -1
  110. package/lib/browser/types.d.ts +4 -74
  111. package/lib/browser/types.d.ts.map +1 -1
  112. package/lib/browser/types.js +1 -4
  113. package/lib/browser/types.js.map +1 -1
  114. package/lib/browser/widget/inline-chat/inline-chat-editor.controller.d.ts +1 -2
  115. package/lib/browser/widget/inline-chat/inline-chat-editor.controller.d.ts.map +1 -1
  116. package/lib/browser/widget/inline-chat/inline-chat-editor.controller.js +49 -21
  117. package/lib/browser/widget/inline-chat/inline-chat-editor.controller.js.map +1 -1
  118. package/lib/browser/widget/inline-chat/inline-chat.feature.registry.d.ts +13 -3
  119. package/lib/browser/widget/inline-chat/inline-chat.feature.registry.d.ts.map +1 -1
  120. package/lib/browser/widget/inline-chat/inline-chat.feature.registry.js +72 -24
  121. package/lib/browser/widget/inline-chat/inline-chat.feature.registry.js.map +1 -1
  122. package/lib/browser/widget/inline-chat/inline-chat.service.d.ts +6 -1
  123. package/lib/browser/widget/inline-chat/inline-chat.service.d.ts.map +1 -1
  124. package/lib/browser/widget/inline-chat/inline-chat.service.js +17 -5
  125. package/lib/browser/widget/inline-chat/inline-chat.service.js.map +1 -1
  126. package/lib/browser/widget/inline-chat/inline-content-widget.d.ts +5 -2
  127. package/lib/browser/widget/inline-chat/inline-content-widget.d.ts.map +1 -1
  128. package/lib/browser/widget/inline-chat/inline-content-widget.js +42 -17
  129. package/lib/browser/widget/inline-chat/inline-content-widget.js.map +1 -1
  130. package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts +5 -22
  131. package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts.map +1 -1
  132. package/lib/browser/widget/inline-diff/inline-diff-previewer.js +30 -61
  133. package/lib/browser/widget/inline-diff/inline-diff-previewer.js.map +1 -1
  134. package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts +12 -8
  135. package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts.map +1 -1
  136. package/lib/browser/widget/inline-diff/inline-diff.controller.js +96 -68
  137. package/lib/browser/widget/inline-diff/inline-diff.controller.js.map +1 -1
  138. package/lib/browser/widget/inline-hint/inline-hint.controller.d.ts +1 -0
  139. package/lib/browser/widget/inline-hint/inline-hint.controller.d.ts.map +1 -1
  140. package/lib/browser/widget/inline-hint/inline-hint.controller.js +5 -0
  141. package/lib/browser/widget/inline-hint/inline-hint.controller.js.map +1 -1
  142. package/lib/browser/widget/inline-input/inline-input-widget.d.ts +2 -12
  143. package/lib/browser/widget/inline-input/inline-input-widget.d.ts.map +1 -1
  144. package/lib/browser/widget/inline-input/inline-input-widget.js +18 -26
  145. package/lib/browser/widget/inline-input/inline-input-widget.js.map +1 -1
  146. package/lib/browser/widget/inline-input/inline-input.controller.d.ts +5 -14
  147. package/lib/browser/widget/inline-input/inline-input.controller.d.ts.map +1 -1
  148. package/lib/browser/widget/inline-input/inline-input.controller.js +165 -321
  149. package/lib/browser/widget/inline-input/inline-input.controller.js.map +1 -1
  150. package/lib/browser/widget/inline-input/inline-input.module.less +0 -4
  151. package/lib/browser/widget/inline-input/inline-input.service.d.ts +7 -19
  152. package/lib/browser/widget/inline-input/inline-input.service.d.ts.map +1 -1
  153. package/lib/browser/widget/inline-input/inline-input.service.js +12 -72
  154. package/lib/browser/widget/inline-input/inline-input.service.js.map +1 -1
  155. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +19 -9
  156. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts.map +1 -1
  157. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js +39 -47
  158. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
  159. package/lib/browser/widget/inline-stream-diff/live-preview.component.d.ts +4 -21
  160. package/lib/browser/widget/inline-stream-diff/live-preview.component.d.ts.map +1 -1
  161. package/lib/browser/widget/inline-stream-diff/live-preview.component.js +5 -37
  162. package/lib/browser/widget/inline-stream-diff/live-preview.component.js.map +1 -1
  163. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts +11 -7
  164. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts.map +1 -1
  165. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js +77 -34
  166. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js.map +1 -1
  167. package/lib/common/index.d.ts +0 -10
  168. package/lib/common/index.d.ts.map +1 -1
  169. package/lib/common/index.js +1 -4
  170. package/lib/common/index.js.map +1 -1
  171. package/lib/common/types.d.ts +0 -17
  172. package/lib/common/types.d.ts.map +1 -1
  173. package/lib/common/utils.d.ts +0 -1
  174. package/lib/common/utils.d.ts.map +1 -1
  175. package/lib/common/utils.js +3 -5
  176. package/lib/common/utils.js.map +1 -1
  177. package/lib/node/index.d.ts.map +1 -1
  178. package/lib/node/index.js +0 -19
  179. package/lib/node/index.js.map +1 -1
  180. package/package.json +22 -33
  181. package/src/browser/ai-core.contextkeys.ts +0 -3
  182. package/src/browser/ai-core.contribution.ts +21 -167
  183. package/src/browser/chat/chat-agent.service.ts +0 -7
  184. package/src/browser/chat/chat-manager.service.ts +7 -83
  185. package/src/browser/chat/chat-model.ts +20 -86
  186. package/src/browser/chat/chat-proxy.service.ts +3 -55
  187. package/src/browser/chat/chat.api.service.ts +2 -2
  188. package/src/browser/chat/chat.internal.service.ts +6 -35
  189. package/src/browser/chat/chat.module.less +41 -17
  190. package/src/browser/chat/chat.view.tsx +45 -191
  191. package/src/browser/components/ChatEditor.tsx +10 -13
  192. package/src/browser/components/ChatInput.tsx +0 -1
  193. package/src/browser/components/ChatMarkdown.tsx +2 -4
  194. package/src/browser/components/ChatReply.tsx +9 -38
  195. package/src/browser/components/ChatThinking.tsx +1 -1
  196. package/src/browser/components/WelcomeMsg.tsx +1 -1
  197. package/src/browser/components/components.module.less +31 -33
  198. package/src/browser/contrib/intelligent-completions/index.ts +4 -19
  199. package/src/browser/contrib/intelligent-completions/intelligent-completions.contribution.ts +8 -32
  200. package/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts +67 -102
  201. package/src/browser/contrib/intelligent-completions/intelligent-completions.feature.registry.ts +0 -11
  202. package/src/browser/contrib/intelligent-completions/source/base.ts +14 -39
  203. package/src/browser/contrib/intelligent-completions/source/line-change.source.ts +22 -129
  204. package/src/browser/contrib/intelligent-completions/source/lint-error.source.ts +31 -19
  205. package/src/browser/contrib/terminal/component/terminal-command-suggest-controller.tsx +1 -1
  206. package/src/browser/index.ts +6 -69
  207. package/src/browser/languages/tree-sitter/wasm-manager.ts +2 -12
  208. package/src/browser/layout/ai-layout.tsx +2 -5
  209. package/src/browser/layout/layout.module.less +9 -9
  210. package/src/browser/layout/tabbar.view.tsx +8 -10
  211. package/src/browser/model/enhanceDecorationsCollection.ts +77 -62
  212. package/src/browser/model/msg-history-manager.ts +2 -56
  213. package/src/browser/model/styles.module.less +7 -0
  214. package/src/browser/preferences/schema.ts +0 -69
  215. package/src/browser/types.ts +5 -100
  216. package/src/browser/widget/inline-chat/inline-chat-editor.controller.ts +65 -30
  217. package/src/browser/widget/inline-chat/inline-chat.feature.registry.ts +90 -23
  218. package/src/browser/widget/inline-chat/inline-chat.service.ts +17 -2
  219. package/src/browser/widget/inline-chat/inline-content-widget.tsx +69 -14
  220. package/src/browser/widget/inline-diff/inline-diff-previewer.ts +32 -87
  221. package/src/browser/widget/inline-diff/inline-diff.controller.ts +114 -90
  222. package/src/browser/widget/inline-hint/inline-hint.controller.ts +7 -1
  223. package/src/browser/widget/inline-input/inline-input-widget.tsx +12 -34
  224. package/src/browser/widget/inline-input/inline-input.controller.ts +242 -454
  225. package/src/browser/widget/inline-input/inline-input.module.less +0 -4
  226. package/src/browser/widget/inline-input/inline-input.service.ts +13 -92
  227. package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +67 -58
  228. package/src/browser/widget/inline-stream-diff/live-preview.component.tsx +6 -49
  229. package/src/browser/widget/inline-stream-diff/live-preview.decoration.tsx +112 -41
  230. package/src/common/index.ts +0 -15
  231. package/src/common/types.ts +0 -22
  232. package/src/common/utils.ts +2 -4
  233. package/src/node/index.ts +0 -21
  234. package/lib/browser/components/ChatContext/ContextSelector.d.ts +0 -12
  235. package/lib/browser/components/ChatContext/ContextSelector.d.ts.map +0 -1
  236. package/lib/browser/components/ChatContext/ContextSelector.js +0 -113
  237. package/lib/browser/components/ChatContext/ContextSelector.js.map +0 -1
  238. package/lib/browser/components/ChatContext/index.d.ts +0 -4
  239. package/lib/browser/components/ChatContext/index.d.ts.map +0 -1
  240. package/lib/browser/components/ChatContext/index.js +0 -100
  241. package/lib/browser/components/ChatContext/index.js.map +0 -1
  242. package/lib/browser/components/ChatContext/style.module.less +0 -201
  243. package/lib/browser/components/ChatHistory.d.ts +0 -21
  244. package/lib/browser/components/ChatHistory.d.ts.map +0 -1
  245. package/lib/browser/components/ChatHistory.js +0 -148
  246. package/lib/browser/components/ChatHistory.js.map +0 -1
  247. package/lib/browser/components/ChatToolRender.d.ts +0 -7
  248. package/lib/browser/components/ChatToolRender.d.ts.map +0 -1
  249. package/lib/browser/components/ChatToolRender.js +0 -71
  250. package/lib/browser/components/ChatToolRender.js.map +0 -1
  251. package/lib/browser/components/ChatToolRender.module.less +0 -86
  252. package/lib/browser/components/chat-history.css +0 -139
  253. package/lib/browser/context/llm-context.contribution.d.ts +0 -7
  254. package/lib/browser/context/llm-context.contribution.d.ts.map +0 -1
  255. package/lib/browser/context/llm-context.contribution.js +0 -21
  256. package/lib/browser/context/llm-context.contribution.js.map +0 -1
  257. package/lib/browser/context/llm-context.service.d.ts +0 -36
  258. package/lib/browser/context/llm-context.service.d.ts.map +0 -1
  259. package/lib/browser/context/llm-context.service.js +0 -170
  260. package/lib/browser/context/llm-context.service.js.map +0 -1
  261. package/lib/browser/contrib/intelligent-completions/source/trigger.source.d.ts +0 -13
  262. package/lib/browser/contrib/intelligent-completions/source/trigger.source.d.ts.map +0 -1
  263. package/lib/browser/contrib/intelligent-completions/source/trigger.source.js +0 -36
  264. package/lib/browser/contrib/intelligent-completions/source/trigger.source.js.map +0 -1
  265. package/lib/browser/contrib/intelligent-completions/source/typing.source.d.ts +0 -9
  266. package/lib/browser/contrib/intelligent-completions/source/typing.source.d.ts.map +0 -1
  267. package/lib/browser/contrib/intelligent-completions/source/typing.source.js +0 -36
  268. package/lib/browser/contrib/intelligent-completions/source/typing.source.js.map +0 -1
  269. package/lib/browser/mcp/base-apply.service.d.ts +0 -67
  270. package/lib/browser/mcp/base-apply.service.d.ts.map +0 -1
  271. package/lib/browser/mcp/base-apply.service.js +0 -290
  272. package/lib/browser/mcp/base-apply.service.js.map +0 -1
  273. package/lib/browser/mcp/mcp-server-proxy.service.d.ts +0 -30
  274. package/lib/browser/mcp/mcp-server-proxy.service.d.ts.map +0 -1
  275. package/lib/browser/mcp/mcp-server-proxy.service.js +0 -57
  276. package/lib/browser/mcp/mcp-server-proxy.service.js.map +0 -1
  277. package/lib/browser/mcp/mcp-server.feature.registry.d.ts +0 -20
  278. package/lib/browser/mcp/mcp-server.feature.registry.d.ts.map +0 -1
  279. package/lib/browser/mcp/mcp-server.feature.registry.js +0 -69
  280. package/lib/browser/mcp/mcp-server.feature.registry.js.map +0 -1
  281. package/lib/browser/mcp/mcp-tools-dialog.module.less +0 -44
  282. package/lib/browser/mcp/mcp-tools-dialog.view.d.ts +0 -8
  283. package/lib/browser/mcp/mcp-tools-dialog.view.d.ts.map +0 -1
  284. package/lib/browser/mcp/mcp-tools-dialog.view.js +0 -16
  285. package/lib/browser/mcp/mcp-tools-dialog.view.js.map +0 -1
  286. package/lib/browser/mcp/tools/components/EditFile.d.ts +0 -3
  287. package/lib/browser/mcp/tools/components/EditFile.d.ts.map +0 -1
  288. package/lib/browser/mcp/tools/components/EditFile.js +0 -101
  289. package/lib/browser/mcp/tools/components/EditFile.js.map +0 -1
  290. package/lib/browser/mcp/tools/components/SearchResult.d.ts +0 -11
  291. package/lib/browser/mcp/tools/components/SearchResult.d.ts.map +0 -1
  292. package/lib/browser/mcp/tools/components/SearchResult.js +0 -60
  293. package/lib/browser/mcp/tools/components/SearchResult.js.map +0 -1
  294. package/lib/browser/mcp/tools/components/Terminal.d.ts +0 -4
  295. package/lib/browser/mcp/tools/components/Terminal.d.ts.map +0 -1
  296. package/lib/browser/mcp/tools/components/Terminal.js +0 -64
  297. package/lib/browser/mcp/tools/components/Terminal.js.map +0 -1
  298. package/lib/browser/mcp/tools/components/index.module.less +0 -168
  299. package/lib/browser/mcp/tools/createNewFileWithText.d.ts +0 -9
  300. package/lib/browser/mcp/tools/createNewFileWithText.d.ts.map +0 -1
  301. package/lib/browser/mcp/tools/createNewFileWithText.js +0 -82
  302. package/lib/browser/mcp/tools/createNewFileWithText.js.map +0 -1
  303. package/lib/browser/mcp/tools/editFile.d.ts +0 -8
  304. package/lib/browser/mcp/tools/editFile.d.ts.map +0 -1
  305. package/lib/browser/mcp/tools/editFile.js +0 -95
  306. package/lib/browser/mcp/tools/editFile.js.map +0 -1
  307. package/lib/browser/mcp/tools/fileSearch.d.ts +0 -10
  308. package/lib/browser/mcp/tools/fileSearch.d.ts.map +0 -1
  309. package/lib/browser/mcp/tools/fileSearch.js +0 -94
  310. package/lib/browser/mcp/tools/fileSearch.js.map +0 -1
  311. package/lib/browser/mcp/tools/getDiagnosticsByPath.d.ts +0 -10
  312. package/lib/browser/mcp/tools/getDiagnosticsByPath.d.ts.map +0 -1
  313. package/lib/browser/mcp/tools/getDiagnosticsByPath.js +0 -118
  314. package/lib/browser/mcp/tools/getDiagnosticsByPath.js.map +0 -1
  315. package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.d.ts +0 -11
  316. package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.d.ts.map +0 -1
  317. package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js +0 -118
  318. package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js.map +0 -1
  319. package/lib/browser/mcp/tools/grepSearch.d.ts +0 -10
  320. package/lib/browser/mcp/tools/grepSearch.d.ts.map +0 -1
  321. package/lib/browser/mcp/tools/grepSearch.js +0 -118
  322. package/lib/browser/mcp/tools/grepSearch.js.map +0 -1
  323. package/lib/browser/mcp/tools/handlers/EditFile.d.ts +0 -10
  324. package/lib/browser/mcp/tools/handlers/EditFile.d.ts.map +0 -1
  325. package/lib/browser/mcp/tools/handlers/EditFile.js +0 -28
  326. package/lib/browser/mcp/tools/handlers/EditFile.js.map +0 -1
  327. package/lib/browser/mcp/tools/handlers/ListDir.d.ts +0 -21
  328. package/lib/browser/mcp/tools/handlers/ListDir.d.ts.map +0 -1
  329. package/lib/browser/mcp/tools/handlers/ListDir.js +0 -112
  330. package/lib/browser/mcp/tools/handlers/ListDir.js.map +0 -1
  331. package/lib/browser/mcp/tools/handlers/ReadFile.d.ts +0 -53
  332. package/lib/browser/mcp/tools/handlers/ReadFile.d.ts.map +0 -1
  333. package/lib/browser/mcp/tools/handlers/ReadFile.js +0 -161
  334. package/lib/browser/mcp/tools/handlers/ReadFile.js.map +0 -1
  335. package/lib/browser/mcp/tools/handlers/RunCommand.d.ts +0 -43
  336. package/lib/browser/mcp/tools/handlers/RunCommand.d.ts.map +0 -1
  337. package/lib/browser/mcp/tools/handlers/RunCommand.js +0 -104
  338. package/lib/browser/mcp/tools/handlers/RunCommand.js.map +0 -1
  339. package/lib/browser/mcp/tools/handlers/utils.d.ts +0 -2
  340. package/lib/browser/mcp/tools/handlers/utils.d.ts.map +0 -1
  341. package/lib/browser/mcp/tools/handlers/utils.js +0 -7
  342. package/lib/browser/mcp/tools/handlers/utils.js.map +0 -1
  343. package/lib/browser/mcp/tools/listDir.d.ts +0 -8
  344. package/lib/browser/mcp/tools/listDir.d.ts.map +0 -1
  345. package/lib/browser/mcp/tools/listDir.js +0 -64
  346. package/lib/browser/mcp/tools/listDir.js.map +0 -1
  347. package/lib/browser/mcp/tools/readFile.d.ts +0 -8
  348. package/lib/browser/mcp/tools/readFile.d.ts.map +0 -1
  349. package/lib/browser/mcp/tools/readFile.js +0 -81
  350. package/lib/browser/mcp/tools/readFile.js.map +0 -1
  351. package/lib/browser/mcp/tools/runTerminalCmd.d.ts +0 -13
  352. package/lib/browser/mcp/tools/runTerminalCmd.d.ts.map +0 -1
  353. package/lib/browser/mcp/tools/runTerminalCmd.js +0 -49
  354. package/lib/browser/mcp/tools/runTerminalCmd.js.map +0 -1
  355. package/lib/browser/widget/inline-input/model.d.ts +0 -34
  356. package/lib/browser/widget/inline-input/model.d.ts.map +0 -1
  357. package/lib/browser/widget/inline-input/model.js +0 -63
  358. package/lib/browser/widget/inline-input/model.js.map +0 -1
  359. package/lib/common/llm-context.d.ts +0 -40
  360. package/lib/common/llm-context.d.ts.map +0 -1
  361. package/lib/common/llm-context.js +0 -5
  362. package/lib/common/llm-context.js.map +0 -1
  363. package/lib/common/mcp-server-manager.d.ts +0 -40
  364. package/lib/common/mcp-server-manager.d.ts.map +0 -1
  365. package/lib/common/mcp-server-manager.js +0 -6
  366. package/lib/common/mcp-server-manager.js.map +0 -1
  367. package/lib/common/prompts/context-prompt-provider.d.ts +0 -14
  368. package/lib/common/prompts/context-prompt-provider.d.ts.map +0 -1
  369. package/lib/common/prompts/context-prompt-provider.js +0 -38
  370. package/lib/common/prompts/context-prompt-provider.js.map +0 -1
  371. package/lib/common/tool-invocation-registry.d.ts +0 -92
  372. package/lib/common/tool-invocation-registry.d.ts.map +0 -1
  373. package/lib/common/tool-invocation-registry.js +0 -90
  374. package/lib/common/tool-invocation-registry.js.map +0 -1
  375. package/lib/node/anthropic/anthropic-language-model.d.ts +0 -9
  376. package/lib/node/anthropic/anthropic-language-model.d.ts.map +0 -1
  377. package/lib/node/anthropic/anthropic-language-model.js +0 -26
  378. package/lib/node/anthropic/anthropic-language-model.js.map +0 -1
  379. package/lib/node/base-language-model.d.ts +0 -14
  380. package/lib/node/base-language-model.d.ts.map +0 -1
  381. package/lib/node/base-language-model.js +0 -140
  382. package/lib/node/base-language-model.js.map +0 -1
  383. package/lib/node/deepseek/deepseek-language-model.d.ts +0 -9
  384. package/lib/node/deepseek/deepseek-language-model.d.ts.map +0 -1
  385. package/lib/node/deepseek/deepseek-language-model.js +0 -26
  386. package/lib/node/deepseek/deepseek-language-model.js.map +0 -1
  387. package/lib/node/mcp/sumi-mcp-server.d.ts +0 -91
  388. package/lib/node/mcp/sumi-mcp-server.d.ts.map +0 -1
  389. package/lib/node/mcp/sumi-mcp-server.js +0 -175
  390. package/lib/node/mcp/sumi-mcp-server.js.map +0 -1
  391. package/lib/node/mcp-server-manager-impl.d.ts +0 -27
  392. package/lib/node/mcp-server-manager-impl.d.ts.map +0 -1
  393. package/lib/node/mcp-server-manager-impl.js +0 -128
  394. package/lib/node/mcp-server-manager-impl.js.map +0 -1
  395. package/lib/node/mcp-server.d.ts +0 -207
  396. package/lib/node/mcp-server.d.ts.map +0 -1
  397. package/lib/node/mcp-server.js +0 -92
  398. package/lib/node/mcp-server.js.map +0 -1
  399. package/lib/node/openai/openai-language-model.d.ts +0 -9
  400. package/lib/node/openai/openai-language-model.d.ts.map +0 -1
  401. package/lib/node/openai/openai-language-model.js +0 -29
  402. package/lib/node/openai/openai-language-model.js.map +0 -1
  403. package/src/browser/components/ChatContext/ContextSelector.tsx +0 -177
  404. package/src/browser/components/ChatContext/index.tsx +0 -151
  405. package/src/browser/components/ChatContext/style.module.less +0 -201
  406. package/src/browser/components/ChatHistory.tsx +0 -292
  407. package/src/browser/components/ChatToolRender.module.less +0 -86
  408. package/src/browser/components/ChatToolRender.tsx +0 -96
  409. package/src/browser/components/chat-history.css +0 -139
  410. package/src/browser/context/llm-context.contribution.ts +0 -14
  411. package/src/browser/context/llm-context.service.ts +0 -200
  412. package/src/browser/contrib/intelligent-completions/source/trigger.source.ts +0 -44
  413. package/src/browser/contrib/intelligent-completions/source/typing.source.ts +0 -34
  414. package/src/browser/mcp/base-apply.service.ts +0 -349
  415. package/src/browser/mcp/mcp-server-proxy.service.ts +0 -55
  416. package/src/browser/mcp/mcp-server.feature.registry.ts +0 -77
  417. package/src/browser/mcp/mcp-tools-dialog.module.less +0 -44
  418. package/src/browser/mcp/mcp-tools-dialog.view.tsx +0 -24
  419. package/src/browser/mcp/tools/components/EditFile.tsx +0 -144
  420. package/src/browser/mcp/tools/components/SearchResult.tsx +0 -92
  421. package/src/browser/mcp/tools/components/Terminal.tsx +0 -97
  422. package/src/browser/mcp/tools/components/index.module.less +0 -168
  423. package/src/browser/mcp/tools/createNewFileWithText.ts +0 -82
  424. package/src/browser/mcp/tools/editFile.ts +0 -100
  425. package/src/browser/mcp/tools/fileSearch.ts +0 -99
  426. package/src/browser/mcp/tools/getDiagnosticsByPath.ts +0 -122
  427. package/src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts +0 -120
  428. package/src/browser/mcp/tools/grepSearch.ts +0 -121
  429. package/src/browser/mcp/tools/handlers/EditFile.ts +0 -21
  430. package/src/browser/mcp/tools/handlers/ListDir.ts +0 -117
  431. package/src/browser/mcp/tools/handlers/ReadFile.ts +0 -192
  432. package/src/browser/mcp/tools/handlers/RunCommand.ts +0 -115
  433. package/src/browser/mcp/tools/handlers/utils.ts +0 -3
  434. package/src/browser/mcp/tools/listDir.ts +0 -65
  435. package/src/browser/mcp/tools/readFile.ts +0 -81
  436. package/src/browser/mcp/tools/runTerminalCmd.ts +0 -45
  437. package/src/browser/widget/inline-input/model.ts +0 -74
  438. package/src/common/llm-context.ts +0 -47
  439. package/src/common/mcp-server-manager.ts +0 -51
  440. package/src/common/prompts/context-prompt-provider.ts +0 -46
  441. package/src/common/tool-invocation-registry.ts +0 -168
  442. package/src/node/anthropic/anthropic-language-model.ts +0 -25
  443. package/src/node/base-language-model.ts +0 -177
  444. package/src/node/deepseek/deepseek-language-model.ts +0 -25
  445. package/src/node/mcp/sumi-mcp-server.ts +0 -200
  446. package/src/node/mcp-server-manager-impl.ts +0 -156
  447. package/src/node/mcp-server.ts +0 -127
  448. package/src/node/openai/openai-language-model.ts +0 -25
@@ -1,200 +0,0 @@
1
- import { Autowired, Injectable } from '@opensumi/di';
2
- import { AppConfig } from '@opensumi/ide-core-browser/lib/react-providers/config-provider';
3
- import { WithEventBus } from '@opensumi/ide-core-common/lib/event-bus/event-decorator';
4
- import { MarkerSeverity } from '@opensumi/ide-core-common/lib/types/markers/markers';
5
- import { Emitter, URI } from '@opensumi/ide-core-common/lib/utils';
6
- import {
7
- EditorDocumentModelCreationEvent,
8
- EditorDocumentModelRemovalEvent,
9
- EditorDocumentModelSavedEvent,
10
- IEditorDocumentModelService,
11
- } from '@opensumi/ide-editor/lib/browser/doc-model/types';
12
- import { EditorSelectionChangeEvent } from '@opensumi/ide-editor/lib/browser/types';
13
- import { IMarkerService } from '@opensumi/ide-markers/lib/common/types';
14
-
15
- import { AttachFileContext, FileContext, LLMContextService, SerializedContext } from '../../common/llm-context';
16
-
17
- @Injectable()
18
- export class LLMContextServiceImpl extends WithEventBus implements LLMContextService {
19
- @Autowired(AppConfig)
20
- protected readonly appConfig: AppConfig;
21
-
22
- @Autowired(IEditorDocumentModelService)
23
- protected readonly docModelManager: IEditorDocumentModelService;
24
-
25
- @Autowired(IMarkerService)
26
- protected readonly markerService: IMarkerService;
27
-
28
- private isAutoCollecting = false;
29
-
30
- private readonly maxAttachFilesLimit = 10;
31
- private readonly maxViewFilesLimit = 20;
32
- private readonly attachedFiles: FileContext[] = [];
33
- private readonly recentlyViewFiles: FileContext[] = [];
34
- private readonly onDidContextFilesChangeEmitter = new Emitter<{ viewed: FileContext[]; attached: FileContext[] }>();
35
- onDidContextFilesChangeEvent = this.onDidContextFilesChangeEmitter.event;
36
-
37
- private addFileToList(file: FileContext, list: FileContext[], maxLimit: number) {
38
- const existingIndex = list.findIndex((f) => f.uri.toString() === file.uri.toString());
39
- if (existingIndex > -1) {
40
- list.splice(existingIndex, 1);
41
- }
42
-
43
- list.push(file);
44
- if (list.length > maxLimit) {
45
- list.shift();
46
- }
47
- }
48
-
49
- addFileToContext(uri: URI, selection?: [number, number], isManual = false): void {
50
- if (!uri) {
51
- return;
52
- }
53
-
54
- const file = { uri, selection };
55
- const targetList = isManual ? this.attachedFiles : this.recentlyViewFiles;
56
- const maxLimit = isManual ? this.maxAttachFilesLimit : this.maxViewFilesLimit;
57
-
58
- this.addFileToList(file, targetList, maxLimit);
59
- this.notifyContextChange();
60
- }
61
-
62
- private notifyContextChange(): void {
63
- this.onDidContextFilesChangeEmitter.fire(this.getAllContextFiles());
64
- }
65
-
66
- cleanFileContext() {
67
- this.attachedFiles.length = 0;
68
- this.notifyContextChange();
69
- }
70
-
71
- private getAllContextFiles() {
72
- return {
73
- viewed: this.recentlyViewFiles,
74
- attached: this.attachedFiles,
75
- };
76
- }
77
-
78
- removeFileFromContext(uri: URI, isManual = false): void {
79
- const targetList = isManual ? this.attachedFiles : this.recentlyViewFiles;
80
- const index = targetList.findIndex((file) => file.uri.toString() === uri.toString());
81
- if (index > -1) {
82
- targetList.splice(index, 1);
83
- }
84
- this.notifyContextChange();
85
- }
86
-
87
- startAutoCollection(): void {
88
- if (this.isAutoCollecting) {
89
- return;
90
- }
91
- this.isAutoCollecting = true;
92
-
93
- this.startAutoCollectionInternal();
94
- }
95
-
96
- private startAutoCollectionInternal(): void {
97
- this.disposables.push(
98
- this.eventBus.on(EditorDocumentModelCreationEvent, (event) => {
99
- if (event.payload.uri.scheme !== 'file') {
100
- return;
101
- }
102
- this.addFileToContext(event.payload.uri, undefined, false);
103
- }),
104
- );
105
-
106
- this.disposables.push(
107
- this.eventBus.on(EditorDocumentModelRemovalEvent, (event) => {
108
- if (event.payload.scheme !== 'file') {
109
- return;
110
- }
111
-
112
- this.removeFileFromContext(event.payload, false);
113
- }),
114
- );
115
-
116
- this.disposables.push(
117
- this.eventBus.on(EditorDocumentModelSavedEvent, (event) => {
118
- if (event.payload.scheme !== 'file') {
119
- return;
120
- }
121
- // TODO: 保存文件的逻辑
122
- }),
123
- );
124
-
125
- this.disposables.push(
126
- this.eventBus.on(EditorSelectionChangeEvent, (event) => {
127
- if (event.payload.selections.length > 0) {
128
- const selection = [
129
- event.payload.selections[0].selectionStartLineNumber,
130
- event.payload.selections[0].positionLineNumber,
131
- ].sort() as [number, number];
132
-
133
- if (selection[0] === selection[1]) {
134
- this.addFileToContext(event.payload.editorUri, undefined, false);
135
- } else {
136
- this.addFileToContext(
137
- event.payload.editorUri,
138
- selection.sort((a, b) => a - b),
139
- false,
140
- );
141
- }
142
- }
143
- }),
144
- );
145
- }
146
-
147
- stopAutoCollection(): void {
148
- this.dispose();
149
- }
150
-
151
- serialize(): SerializedContext {
152
- const files = this.getAllContextFiles();
153
- const workspaceRoot = URI.file(this.appConfig.workspaceDir);
154
-
155
- return {
156
- recentlyViewFiles: this.serializeRecentlyViewFiles(files.viewed, workspaceRoot),
157
- attachedFiles: this.serializeAttachedFiles(files.attached, workspaceRoot),
158
- };
159
- }
160
-
161
- private serializeRecentlyViewFiles(files: FileContext[], workspaceRoot: URI): string[] {
162
- return files
163
- .map((file) => workspaceRoot.relative(file.uri)?.toString() || file.uri.parent.toString())
164
- .filter(Boolean);
165
- }
166
-
167
- private serializeAttachedFiles(files: FileContext[], workspaceRoot: URI): AttachFileContext[] {
168
- return files
169
- .map((file) => this.serializeAttachedFile(file, workspaceRoot))
170
- .filter(Boolean) as unknown as AttachFileContext[];
171
- }
172
-
173
- private serializeAttachedFile(file: FileContext, workspaceRoot: URI) {
174
- try {
175
- const ref = this.docModelManager.getModelReference(file.uri);
176
- if (!ref) {
177
- return null;
178
- }
179
-
180
- return {
181
- content: ref.instance.getText(),
182
- lineErrors: this.getFileErrors(file.uri),
183
- path: workspaceRoot.relative(file.uri)!.toString(),
184
- language: ref.instance.languageId!,
185
- };
186
- } catch (e) {
187
- return null;
188
- }
189
- }
190
-
191
- private getFileErrors(uri: URI): string[] {
192
- return this.markerService
193
- .getManager()
194
- .getMarkers({
195
- resource: uri.toString(),
196
- severities: MarkerSeverity.Error,
197
- })
198
- .map((marker) => marker.message);
199
- }
200
- }
@@ -1,44 +0,0 @@
1
- import { Injectable } from '@opensumi/di';
2
- import { ECodeEditsSourceTyping, IDisposable } from '@opensumi/ide-core-common';
3
- import { Position } from '@opensumi/ide-monaco';
4
- import {
5
- IObservableSignal,
6
- derived,
7
- observableSignal,
8
- runOnChangeWithStore,
9
- } from '@opensumi/ide-monaco/lib/common/observable';
10
-
11
- import { BaseCodeEditsSource } from './base';
12
-
13
- export interface ITriggerData {
14
- position: Position | null;
15
- }
16
-
17
- @Injectable({ multiple: true })
18
- export class TriggerCodeEditsSource extends BaseCodeEditsSource {
19
- // 主动触发的优先级是最高的
20
- public priority = Number.MAX_SAFE_INTEGER;
21
-
22
- public triggerSignal: IObservableSignal<void> = observableSignal(this);
23
-
24
- public mount(): IDisposable {
25
- this.addDispose(
26
- runOnChangeWithStore(
27
- derived((reader) => {
28
- this.triggerSignal.read(reader);
29
- return {};
30
- }),
31
- () => {
32
- const position = this.monacoEditor.getPosition();
33
- this.setBean({
34
- typing: ECodeEditsSourceTyping.Trigger,
35
- data: {
36
- [ECodeEditsSourceTyping.Trigger]: { position },
37
- },
38
- });
39
- },
40
- ),
41
- );
42
- return this;
43
- }
44
- }
@@ -1,34 +0,0 @@
1
- import { Injectable } from '@opensumi/di';
2
- import { AINativeSettingSectionsId, ECodeEditsSourceTyping, IDisposable } from '@opensumi/ide-core-common';
3
- import { IModelContentChangedEvent } from '@opensumi/ide-monaco';
4
-
5
- import { BaseCodeEditsSource } from './base';
6
-
7
- @Injectable({ multiple: true })
8
- export class TypingCodeEditsSource extends BaseCodeEditsSource {
9
- public priority = 2;
10
-
11
- public mount(): IDisposable {
12
- this.addDispose(
13
- this.monacoEditor.onDidChangeModelContent((event: IModelContentChangedEvent) => {
14
- this.doTrigger(event);
15
- }),
16
- );
17
- return this;
18
- }
19
-
20
- protected async doTrigger(data: IModelContentChangedEvent) {
21
- const isTypingEnabled = this.preferenceService.getValid(AINativeSettingSectionsId.CodeEditsTyping, false);
22
-
23
- if (!isTypingEnabled || !this.model) {
24
- return;
25
- }
26
-
27
- this.setBean({
28
- typing: ECodeEditsSourceTyping.Typing,
29
- data: {
30
- [ECodeEditsSourceTyping.Typing]: data,
31
- },
32
- });
33
- }
34
- }
@@ -1,349 +0,0 @@
1
- import { createPatch } from 'diff';
2
-
3
- import { Autowired } from '@opensumi/di';
4
- import { AppConfig, ChatMessageRole, IMarker, MarkerSeverity, OnEvent, WithEventBus } from '@opensumi/ide-core-browser';
5
- import { WorkbenchEditorService } from '@opensumi/ide-editor';
6
- import { EditorGroupCloseEvent } from '@opensumi/ide-editor/lib/browser';
7
- import { IMarkerService } from '@opensumi/ide-markers';
8
- import { Position, Range, Selection, SelectionDirection } from '@opensumi/ide-monaco';
9
- import { observableValue, transaction } from '@opensumi/ide-monaco/lib/common/observable';
10
- import { Deferred, URI, path } from '@opensumi/ide-utils';
11
-
12
- import { IChatInternalService } from '../../common';
13
- import { ChatInternalService } from '../chat/chat.internal.service';
14
- import {
15
- BaseInlineDiffPreviewer,
16
- InlineDiffController,
17
- InlineDiffService,
18
- LiveInlineDiffPreviewer,
19
- } from '../widget/inline-diff';
20
- import { InlineStreamDiffHandler } from '../widget/inline-stream-diff/inline-stream-diff.handler';
21
-
22
- import { FileHandler } from './tools/handlers/ReadFile';
23
-
24
- // 提供代码块的唯一索引,迭代轮次,生成状态管理(包括取消),关联文件位置这些信息的记录,后续并行 apply 的支持
25
- export abstract class BaseApplyService extends WithEventBus {
26
- @Autowired(FileHandler)
27
- protected fileHandler: FileHandler;
28
-
29
- @Autowired(IChatInternalService)
30
- protected chatInternalService: ChatInternalService;
31
-
32
- @Autowired(AppConfig)
33
- protected appConfig: AppConfig;
34
-
35
- @Autowired(WorkbenchEditorService)
36
- protected readonly editorService: WorkbenchEditorService;
37
-
38
- @Autowired(InlineDiffService)
39
- private readonly inlineDiffService: InlineDiffService;
40
-
41
- @Autowired(IMarkerService)
42
- private readonly markerService: IMarkerService;
43
-
44
- constructor() {
45
- super();
46
- this.addDispose(
47
- this.chatInternalService.onCancelRequest(() => {
48
- this.cancelAllApply();
49
- }),
50
- );
51
- this.addDispose(
52
- this.chatInternalService.onRegenerateRequest(() => {
53
- const messages = this.chatInternalService.sessionModel.history.getMessages();
54
- const messageId = messages[messages.length - 1].id;
55
- messageId && this.disposeApplyForMessage(messageId);
56
- }),
57
- );
58
- }
59
-
60
- public readonly codeBlockMapObservable = observableValue<Map<string, CodeBlockData>>(this, new Map());
61
-
62
- private activePreviewer: BaseInlineDiffPreviewer<InlineStreamDiffHandler> | undefined;
63
-
64
- private pendingApplyParams:
65
- | {
66
- relativePath: string;
67
- newContent: string;
68
- range?: Range;
69
- }
70
- | undefined;
71
-
72
- @OnEvent(EditorGroupCloseEvent)
73
- onEditorGroupClose(event: EditorGroupCloseEvent) {
74
- if (this.activePreviewer?.getNode()?.uri.path.toString() === event.payload.resource.uri.path.toString()) {
75
- this.activePreviewer.dispose();
76
- this.activePreviewer = undefined;
77
- }
78
- }
79
-
80
- /**
81
- * Get the code block data by relative or absolute path of the last assistant message
82
- */
83
- getCodeBlock(relativeOrAbsolutePath: string, messageId?: string): CodeBlockData | undefined {
84
- if (!relativeOrAbsolutePath) {
85
- return undefined;
86
- }
87
- const blockId = this.generateBlockId(relativeOrAbsolutePath, messageId);
88
- return this.codeBlockMapObservable.get().get(blockId);
89
- }
90
-
91
- getCodeBlockById(id: string): CodeBlockData | undefined {
92
- return this.codeBlockMapObservable.get().get(id);
93
- }
94
-
95
- protected updateCodeBlock(codeBlock: CodeBlockData) {
96
- const codeBlockMap = new Map(this.codeBlockMapObservable.get());
97
- codeBlockMap.set(codeBlock.id, codeBlock);
98
- transaction((tx) => {
99
- this.codeBlockMapObservable.set(codeBlockMap, tx);
100
- });
101
- }
102
-
103
- /**
104
- * Register a new code block and return its unique ID
105
- */
106
- registerCodeBlock(relativePath: string, content: string): string {
107
- const blockId = this.generateBlockId(relativePath);
108
-
109
- if (!this.codeBlockMapObservable.get().has(blockId)) {
110
- this.codeBlockMapObservable.get().set(blockId, {
111
- id: blockId,
112
- content,
113
- relativePath,
114
- status: 'generating',
115
- iterationCount: 0,
116
- createdAt: Date.now(),
117
- });
118
- }
119
-
120
- return blockId;
121
- }
122
-
123
- initToolCallId(blockId: string, toolCallId: string): void {
124
- const blockData = this.getCodeBlockById(blockId);
125
- if (blockData && !blockData.initToolCallId) {
126
- blockData.initToolCallId = toolCallId;
127
- }
128
- }
129
-
130
- /**
131
- * Apply changes of a code block
132
- */
133
- async apply(relativePath: string, newContent: string, instructions?: string): Promise<CodeBlockData> {
134
- const blockData = this.getCodeBlock(relativePath);
135
- if (!blockData) {
136
- throw new Error('Code block not found');
137
- }
138
- try {
139
- if (++blockData.iterationCount > 3) {
140
- throw new Error('Max iteration count exceeded');
141
- }
142
- blockData.status = 'generating';
143
- blockData.content = newContent;
144
- this.updateCodeBlock(blockData);
145
- const applyDiffResult = await this.doApply(relativePath, newContent, instructions);
146
- blockData.applyResult = applyDiffResult;
147
- this.updateCodeBlock(blockData);
148
- return blockData;
149
- } catch (err) {
150
- blockData.status = 'failed';
151
- this.updateCodeBlock(blockData);
152
- throw err;
153
- }
154
- }
155
-
156
- async reRenderPendingApply() {
157
- if (!this.pendingApplyParams) {
158
- throw new Error('No pending apply params');
159
- }
160
- const result = await this.renderApplyResult(
161
- this.pendingApplyParams.relativePath,
162
- this.pendingApplyParams.newContent,
163
- this.pendingApplyParams.range,
164
- );
165
- if (result) {
166
- const blockData = this.getCodeBlock(this.pendingApplyParams.relativePath)!;
167
- blockData.applyResult = result;
168
- this.updateCodeBlock(blockData);
169
- }
170
- }
171
-
172
- async renderApplyResult(
173
- relativePath: string,
174
- newContent: string,
175
- range?: Range,
176
- ): Promise<{ diff: string; diagnosticInfos: IMarker[] } | undefined> {
177
- // 用户可能会关闭编辑器,所以需要缓存参数
178
- this.pendingApplyParams = {
179
- relativePath,
180
- newContent,
181
- range,
182
- };
183
- const blockData = this.getCodeBlock(relativePath);
184
- if (!blockData) {
185
- throw new Error('Code block not found');
186
- }
187
- const openResult = await this.editorService.open(URI.file(path.join(this.appConfig.workspaceDir, relativePath)));
188
- if (!openResult) {
189
- throw new Error('Failed to open editor');
190
- }
191
- const editor = openResult.group.codeEditor.monacoEditor;
192
- const inlineDiffController = InlineDiffController.get(editor)!;
193
- blockData.status = 'pending';
194
- this.updateCodeBlock(blockData);
195
-
196
- range = range || editor.getModel()?.getFullModelRange()!;
197
- // Create diff previewer
198
- const previewer = inlineDiffController.createDiffPreviewer(
199
- editor,
200
- Selection.fromRange(range, SelectionDirection.LTR),
201
- {
202
- disposeWhenEditorClosed: true,
203
- renderRemovedWidgetImmediately: true,
204
- },
205
- ) as LiveInlineDiffPreviewer;
206
- this.activePreviewer = previewer;
207
-
208
- const fullOriginalContent = editor.getModel()!.getValue();
209
- const savedContent = editor.getModel()!.getValueInRange(range);
210
- const deferred = new Deferred<{ diff: string; diagnosticInfos: IMarker[] }>();
211
- if (newContent === savedContent) {
212
- blockData.status = 'success';
213
- deferred.resolve();
214
- } else {
215
- previewer.setValue(newContent);
216
- this.addDispose(
217
- this.inlineDiffService.onPartialEdit((event) => {
218
- // TODO 支持自动保存
219
- if (event.totalPartialEditCount === event.resolvedPartialEditCount) {
220
- if (event.acceptPartialEditCount > 0) {
221
- blockData.status = 'success';
222
- const appliedResult = editor.getModel()!.getValue();
223
- const diffResult = createPatch(relativePath, fullOriginalContent, appliedResult)
224
- .split('\n')
225
- .slice(4)
226
- .join('\n');
227
- const rangesFromDiffHunk = diffResult
228
- .split('\n')
229
- .map((line) => {
230
- if (line.startsWith('@@')) {
231
- const [, , , start, end] = line.match(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/)!;
232
- return new Range(parseInt(start, 10), 0, parseInt(end, 10), 0);
233
- }
234
- return null;
235
- })
236
- .filter((range) => range !== null);
237
- const diagnosticInfos = this.getdiagnosticInfos(editor.getModel()!.uri.toString(), rangesFromDiffHunk);
238
- // 移除开头的几个固定信息,避免浪费 tokens
239
- deferred.resolve({
240
- diff: diffResult,
241
- diagnosticInfos,
242
- });
243
- } else {
244
- // 用户全部取消
245
- blockData.status = 'cancelled';
246
- deferred.resolve();
247
- }
248
- }
249
- }),
250
- );
251
- }
252
- return deferred.promise;
253
- }
254
-
255
- /**
256
- * Cancel an ongoing apply operation
257
- */
258
- cancelApply(relativePath: string): void {
259
- const blockData = this.getCodeBlock(relativePath);
260
- if (blockData && (blockData.status === 'generating' || blockData.status === 'pending')) {
261
- if (this.activePreviewer) {
262
- this.activePreviewer.getNode()?.livePreviewDiffDecorationModel.discardUnProcessed();
263
- this.activePreviewer.dispose();
264
- }
265
- blockData.status = 'cancelled';
266
- this.updateCodeBlock(blockData);
267
- }
268
- }
269
-
270
- cancelAllApply(): void {
271
- this.codeBlockMapObservable.get().forEach((blockData) => {
272
- if (blockData.status === 'generating' || blockData.status === 'pending') {
273
- this.cancelApply(blockData.relativePath);
274
- }
275
- });
276
- }
277
-
278
- disposeApplyForMessage(messageId: string): void {
279
- this.codeBlockMapObservable.get().forEach((blockData) => {
280
- if (blockData.id.endsWith(':' + messageId)) {
281
- if (blockData.status === 'generating') {
282
- this.cancelApply(blockData.relativePath);
283
- }
284
- this.codeBlockMapObservable.get().delete(blockData.id);
285
- }
286
- });
287
- }
288
-
289
- revealApplyPosition(blockId: string): void {
290
- const blockData = this.codeBlockMapObservable.get().get(blockId);
291
- if (blockData) {
292
- const hunkInfo = blockData.applyResult?.diff.split('\n').find((line) => line.startsWith('@@'));
293
- let startLine = 0;
294
- let endLine = 0;
295
- if (hunkInfo) {
296
- // 取改动后的区间
297
- const [, , , start, end] = hunkInfo.match(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/)!;
298
- startLine = parseInt(start, 10) - 1;
299
- endLine = parseInt(end, 10) - 1;
300
- }
301
- this.editorService.open(URI.file(path.join(this.appConfig.workspaceDir, blockData.relativePath)));
302
- const editor = this.editorService.currentEditor;
303
- if (editor) {
304
- editor.setSelection(new Selection(startLine, 0, endLine, 0));
305
- }
306
- }
307
- }
308
-
309
- protected abstract doApply(
310
- relativePath: string,
311
- newContent: string,
312
- instructions?: string,
313
- ): Promise<{ diff: string; diagnosticInfos: IMarker[] } | undefined>;
314
-
315
- protected generateBlockId(absoluteOrRelativePath: string, messageId?: string): string {
316
- if (!absoluteOrRelativePath.startsWith('/')) {
317
- absoluteOrRelativePath = path.join(this.appConfig.workspaceDir, absoluteOrRelativePath);
318
- }
319
- const sessionId = this.chatInternalService.sessionModel.sessionId;
320
- const messages = this.chatInternalService.sessionModel.history.getMessages();
321
- messageId = messageId || messages[messages.length - 1].id;
322
- return `${sessionId}:${absoluteOrRelativePath}:${messageId || '-'}`;
323
- }
324
-
325
- protected getdiagnosticInfos(uri: string, ranges: Range[]) {
326
- const markers = this.markerService.getManager().getMarkers({ resource: uri });
327
- return markers.filter(
328
- (marker) =>
329
- marker.severity >= MarkerSeverity.Warning &&
330
- ranges.some((range) => range.containsPosition(new Position(marker.startLineNumber, marker.startColumn))),
331
- );
332
- }
333
- }
334
-
335
- export interface CodeBlockData {
336
- id: string;
337
- initToolCallId?: string;
338
- content: string;
339
- relativePath: string;
340
- status: CodeBlockStatus;
341
- iterationCount: number;
342
- createdAt: number;
343
- applyResult?: {
344
- diff: string;
345
- diagnosticInfos: IMarker[];
346
- };
347
- }
348
-
349
- export type CodeBlockStatus = 'generating' | 'pending' | 'success' | 'rejected' | 'failed' | 'cancelled';
@@ -1,55 +0,0 @@
1
- import { zodToJsonSchema } from 'zod-to-json-schema';
2
-
3
- import { Autowired, Injectable } from '@opensumi/di';
4
- import { ILogger } from '@opensumi/ide-core-browser';
5
- import { Emitter, Event } from '@opensumi/ide-core-common';
6
-
7
- import { ISumiMCPServerBackend, SumiMCPServerProxyServicePath } from '../../common';
8
- import { IMCPServerProxyService } from '../../common/types';
9
- import { IMCPServerRegistry, TokenMCPServerRegistry } from '../types';
10
-
11
- @Injectable()
12
- export class MCPServerProxyService implements IMCPServerProxyService {
13
- @Autowired(TokenMCPServerRegistry)
14
- private readonly mcpServerRegistry: IMCPServerRegistry;
15
-
16
- @Autowired(ILogger)
17
- private readonly logger: ILogger;
18
-
19
- @Autowired(SumiMCPServerProxyServicePath)
20
- private readonly sumiMCPServerProxyService: ISumiMCPServerBackend;
21
-
22
- private readonly _onChangeMCPServers = new Emitter<any>();
23
- public readonly onChangeMCPServers: Event<any> = this._onChangeMCPServers.event;
24
-
25
- // 调用 OpenSumi 内部注册的 MCP 工具
26
- $callMCPTool(name: string, args: any) {
27
- return this.mcpServerRegistry.callMCPTool(name, args);
28
- }
29
-
30
- // 获取 OpenSumi 内部注册的 MCP tools
31
- async $getMCPTools() {
32
- const tools = await this.mcpServerRegistry.getMCPTools().map((tool) =>
33
- // 不要传递 handler
34
- ({
35
- name: tool.name,
36
- description: tool.description,
37
- inputSchema: zodToJsonSchema(tool.inputSchema),
38
- providerName: 'sumi-builtin',
39
- }),
40
- );
41
-
42
- this.logger.log('SUMI MCP tools', tools);
43
-
44
- return tools;
45
- }
46
-
47
- // 通知前端 MCP 服务注册表发生了变化
48
- async $updateMCPServers() {
49
- this._onChangeMCPServers.fire('update');
50
- }
51
-
52
- async getAllMCPTools() {
53
- return this.sumiMCPServerProxyService.getAllMCPTools();
54
- }
55
- }