@opensumi/ide-ai-native 3.8.1-next-1741250387.0 → 3.8.1-next-1741251026.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 (325) hide show
  1. package/lib/browser/ai-core.contextkeys.d.ts +1 -1
  2. package/lib/browser/ai-core.contextkeys.d.ts.map +1 -1
  3. package/lib/browser/ai-core.contextkeys.js +1 -1
  4. package/lib/browser/ai-core.contextkeys.js.map +1 -1
  5. package/lib/browser/ai-core.contribution.d.ts +5 -0
  6. package/lib/browser/ai-core.contribution.d.ts.map +1 -1
  7. package/lib/browser/ai-core.contribution.js +71 -9
  8. package/lib/browser/ai-core.contribution.js.map +1 -1
  9. package/lib/browser/chat/chat-agent.service.d.ts +11 -3
  10. package/lib/browser/chat/chat-agent.service.d.ts.map +1 -1
  11. package/lib/browser/chat/chat-agent.service.js +43 -5
  12. package/lib/browser/chat/chat-agent.service.js.map +1 -1
  13. package/lib/browser/chat/chat-manager.service.d.ts +1 -0
  14. package/lib/browser/chat/chat-manager.service.d.ts.map +1 -1
  15. package/lib/browser/chat/chat-manager.service.js +6 -8
  16. package/lib/browser/chat/chat-manager.service.js.map +1 -1
  17. package/lib/browser/chat/chat-model.d.ts +4 -1
  18. package/lib/browser/chat/chat-model.d.ts.map +1 -1
  19. package/lib/browser/chat/chat-model.js +57 -2
  20. package/lib/browser/chat/chat-model.js.map +1 -1
  21. package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
  22. package/lib/browser/chat/chat-proxy.service.js +13 -6
  23. package/lib/browser/chat/chat-proxy.service.js.map +1 -1
  24. package/lib/browser/chat/chat.api.service.d.ts +1 -2
  25. package/lib/browser/chat/chat.api.service.d.ts.map +1 -1
  26. package/lib/browser/chat/chat.api.service.js +0 -4
  27. package/lib/browser/chat/chat.api.service.js.map +1 -1
  28. package/lib/browser/chat/chat.internal.service.d.ts +2 -0
  29. package/lib/browser/chat/chat.internal.service.d.ts.map +1 -1
  30. package/lib/browser/chat/chat.internal.service.js +3 -0
  31. package/lib/browser/chat/chat.internal.service.js.map +1 -1
  32. package/lib/browser/chat/chat.module.less +1 -2
  33. package/lib/browser/chat/chat.view.d.ts.map +1 -1
  34. package/lib/browser/chat/chat.view.js +46 -29
  35. package/lib/browser/chat/chat.view.js.map +1 -1
  36. package/lib/browser/components/ChatContext/index.js +2 -2
  37. package/lib/browser/components/ChatContext/index.js.map +1 -1
  38. package/lib/browser/components/ChatInput.d.ts.map +1 -1
  39. package/lib/browser/components/ChatInput.js +29 -1
  40. package/lib/browser/components/ChatInput.js.map +1 -1
  41. package/lib/browser/components/ChatReply.js +6 -1
  42. package/lib/browser/components/ChatReply.js.map +1 -1
  43. package/lib/browser/components/ChatThinking.d.ts +0 -2
  44. package/lib/browser/components/ChatThinking.d.ts.map +1 -1
  45. package/lib/browser/components/ChatThinking.js +2 -10
  46. package/lib/browser/components/ChatThinking.js.map +1 -1
  47. package/lib/browser/components/ChatToolRender.d.ts.map +1 -1
  48. package/lib/browser/components/ChatToolRender.js +2 -3
  49. package/lib/browser/components/ChatToolRender.js.map +1 -1
  50. package/lib/browser/components/WelcomeMsg.js +1 -1
  51. package/lib/browser/components/WelcomeMsg.js.map +1 -1
  52. package/lib/browser/components/chat-history.module.less +2 -1
  53. package/lib/browser/components/components.module.less +22 -0
  54. package/lib/browser/context/llm-context.service.d.ts +18 -5
  55. package/lib/browser/context/llm-context.service.d.ts.map +1 -1
  56. package/lib/browser/context/llm-context.service.js +80 -47
  57. package/lib/browser/context/llm-context.service.js.map +1 -1
  58. package/lib/browser/contrib/inline-completions/inline-completions.controller.js +1 -1
  59. package/lib/browser/contrib/inline-completions/inline-completions.controller.js.map +1 -1
  60. package/lib/browser/contrib/inline-completions/prompt/matcher.js +2 -2
  61. package/lib/browser/contrib/inline-completions/prompt/similarSnippets.d.ts +1 -1
  62. package/lib/browser/contrib/inline-completions/prompt/similarSnippets.js +2 -2
  63. package/lib/browser/contrib/intelligent-completions/index.d.ts +2 -1
  64. package/lib/browser/contrib/intelligent-completions/index.d.ts.map +1 -1
  65. package/lib/browser/contrib/intelligent-completions/index.js +4 -1
  66. package/lib/browser/contrib/intelligent-completions/index.js.map +1 -1
  67. package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js +2 -2
  68. package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js.map +1 -1
  69. package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts.map +1 -1
  70. package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js +6 -5
  71. package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js.map +1 -1
  72. package/lib/browser/contrib/intelligent-completions/view/code-edits-previewer.d.ts.map +1 -1
  73. package/lib/browser/contrib/intelligent-completions/view/code-edits-previewer.js +4 -2
  74. package/lib/browser/contrib/intelligent-completions/view/code-edits-previewer.js.map +1 -1
  75. package/lib/browser/contrib/intelligent-completions/view/default.d.ts.map +1 -1
  76. package/lib/browser/contrib/intelligent-completions/view/default.js +23 -11
  77. package/lib/browser/contrib/intelligent-completions/view/default.js.map +1 -1
  78. package/lib/browser/index.d.ts.map +1 -1
  79. package/lib/browser/index.js +4 -0
  80. package/lib/browser/index.js.map +1 -1
  81. package/lib/browser/layout/layout.module.less +4 -4
  82. package/lib/browser/mcp/base-apply.service.d.ts +26 -11
  83. package/lib/browser/mcp/base-apply.service.d.ts.map +1 -1
  84. package/lib/browser/mcp/base-apply.service.js +255 -103
  85. package/lib/browser/mcp/base-apply.service.js.map +1 -1
  86. package/lib/browser/mcp/config/components/mcp-config.module.less +178 -0
  87. package/lib/browser/mcp/config/components/mcp-config.view.d.ts +3 -0
  88. package/lib/browser/mcp/config/components/mcp-config.view.d.ts.map +1 -0
  89. package/lib/browser/mcp/config/components/mcp-config.view.js +150 -0
  90. package/lib/browser/mcp/config/components/mcp-config.view.js.map +1 -0
  91. package/lib/browser/mcp/config/components/mcp-server-form.d.ts +16 -0
  92. package/lib/browser/mcp/config/components/mcp-server-form.d.ts.map +1 -0
  93. package/lib/browser/mcp/config/components/mcp-server-form.js +84 -0
  94. package/lib/browser/mcp/config/components/mcp-server-form.js.map +1 -0
  95. package/lib/browser/mcp/config/components/mcp-server-form.module.less +78 -0
  96. package/lib/browser/mcp/config/mcp-config.commands.d.ts +10 -0
  97. package/lib/browser/mcp/config/mcp-config.commands.d.ts.map +1 -0
  98. package/lib/browser/mcp/config/mcp-config.commands.js +35 -0
  99. package/lib/browser/mcp/config/mcp-config.commands.js.map +1 -0
  100. package/lib/browser/mcp/config/mcp-config.contribution.d.ts +16 -0
  101. package/lib/browser/mcp/config/mcp-config.contribution.d.ts.map +1 -0
  102. package/lib/browser/mcp/config/mcp-config.contribution.js +62 -0
  103. package/lib/browser/mcp/config/mcp-config.contribution.js.map +1 -0
  104. package/lib/browser/mcp/mcp-server-proxy.service.d.ts +6 -0
  105. package/lib/browser/mcp/mcp-server-proxy.service.d.ts.map +1 -1
  106. package/lib/browser/mcp/mcp-server-proxy.service.js +10 -1
  107. package/lib/browser/mcp/mcp-server-proxy.service.js.map +1 -1
  108. package/lib/browser/mcp/mcp-server.feature.registry.d.ts +8 -0
  109. package/lib/browser/mcp/mcp-server.feature.registry.d.ts.map +1 -1
  110. package/lib/browser/mcp/mcp-server.feature.registry.js +28 -3
  111. package/lib/browser/mcp/mcp-server.feature.registry.js.map +1 -1
  112. package/lib/browser/mcp/tools/components/EditFile.d.ts.map +1 -1
  113. package/lib/browser/mcp/tools/components/EditFile.js +15 -9
  114. package/lib/browser/mcp/tools/components/EditFile.js.map +1 -1
  115. package/lib/browser/mcp/tools/components/ExpandableFileList.d.ts +13 -0
  116. package/lib/browser/mcp/tools/components/ExpandableFileList.d.ts.map +1 -0
  117. package/lib/browser/mcp/tools/components/{SearchResult.js → ExpandableFileList.js} +29 -19
  118. package/lib/browser/mcp/tools/components/ExpandableFileList.js.map +1 -0
  119. package/lib/browser/mcp/tools/components/Terminal.d.ts.map +1 -1
  120. package/lib/browser/mcp/tools/components/Terminal.js +10 -2
  121. package/lib/browser/mcp/tools/components/Terminal.js.map +1 -1
  122. package/lib/browser/mcp/tools/components/index.module.less +4 -0
  123. package/lib/browser/mcp/tools/createNewFileWithText.d.ts +1 -0
  124. package/lib/browser/mcp/tools/createNewFileWithText.d.ts.map +1 -1
  125. package/lib/browser/mcp/tools/createNewFileWithText.js +19 -11
  126. package/lib/browser/mcp/tools/createNewFileWithText.js.map +1 -1
  127. package/lib/browser/mcp/tools/fileSearch.d.ts +1 -0
  128. package/lib/browser/mcp/tools/fileSearch.d.ts.map +1 -1
  129. package/lib/browser/mcp/tools/fileSearch.js +14 -5
  130. package/lib/browser/mcp/tools/fileSearch.js.map +1 -1
  131. package/lib/browser/mcp/tools/getDiagnosticsByPath.d.ts.map +1 -1
  132. package/lib/browser/mcp/tools/getDiagnosticsByPath.js +1 -0
  133. package/lib/browser/mcp/tools/getDiagnosticsByPath.js.map +1 -1
  134. package/lib/browser/mcp/tools/grepSearch.d.ts.map +1 -1
  135. package/lib/browser/mcp/tools/grepSearch.js +6 -3
  136. package/lib/browser/mcp/tools/grepSearch.js.map +1 -1
  137. package/lib/browser/mcp/tools/handlers/EditFile.js +1 -1
  138. package/lib/browser/mcp/tools/handlers/EditFile.js.map +1 -1
  139. package/lib/browser/mcp/tools/handlers/ListDir.d.ts +1 -0
  140. package/lib/browser/mcp/tools/handlers/ListDir.d.ts.map +1 -1
  141. package/lib/browser/mcp/tools/handlers/ListDir.js +3 -0
  142. package/lib/browser/mcp/tools/handlers/ListDir.js.map +1 -1
  143. package/lib/browser/mcp/tools/handlers/RunCommand.d.ts.map +1 -1
  144. package/lib/browser/mcp/tools/handlers/RunCommand.js +2 -0
  145. package/lib/browser/mcp/tools/handlers/RunCommand.js.map +1 -1
  146. package/lib/browser/mcp/tools/listDir.d.ts +1 -0
  147. package/lib/browser/mcp/tools/listDir.d.ts.map +1 -1
  148. package/lib/browser/mcp/tools/listDir.js +35 -4
  149. package/lib/browser/mcp/tools/listDir.js.map +1 -1
  150. package/lib/browser/mcp/tools/runTerminalCmd.d.ts.map +1 -1
  151. package/lib/browser/mcp/tools/runTerminalCmd.js +1 -0
  152. package/lib/browser/mcp/tools/runTerminalCmd.js.map +1 -1
  153. package/lib/browser/model/msg-history-manager.d.ts +2 -2
  154. package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
  155. package/lib/browser/model/msg-history-manager.js +4 -10
  156. package/lib/browser/model/msg-history-manager.js.map +1 -1
  157. package/lib/browser/preferences/schema.d.ts.map +1 -1
  158. package/lib/browser/preferences/schema.js +22 -2
  159. package/lib/browser/preferences/schema.js.map +1 -1
  160. package/lib/browser/types.d.ts +4 -0
  161. package/lib/browser/types.d.ts.map +1 -1
  162. package/lib/browser/widget/inline-chat/inline-chat-controller.d.ts.map +1 -1
  163. package/lib/browser/widget/inline-chat/inline-chat-controller.js +6 -1
  164. package/lib/browser/widget/inline-chat/inline-chat-controller.js.map +1 -1
  165. package/lib/browser/widget/inline-diff/inline-diff-manager.d.ts.map +1 -1
  166. package/lib/browser/widget/inline-diff/inline-diff-manager.js +68 -8
  167. package/lib/browser/widget/inline-diff/inline-diff-manager.js.map +1 -1
  168. package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts +10 -4
  169. package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts.map +1 -1
  170. package/lib/browser/widget/inline-diff/inline-diff-previewer.js +14 -3
  171. package/lib/browser/widget/inline-diff/inline-diff-previewer.js.map +1 -1
  172. package/lib/browser/widget/inline-diff/inline-diff-widget.module.less +25 -4
  173. package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts +3 -3
  174. package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts.map +1 -1
  175. package/lib/browser/widget/inline-diff/inline-diff.controller.js +10 -5
  176. package/lib/browser/widget/inline-diff/inline-diff.controller.js.map +1 -1
  177. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +46 -17
  178. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts.map +1 -1
  179. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js +110 -53
  180. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
  181. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts +4 -0
  182. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts.map +1 -1
  183. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js +26 -1
  184. package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js.map +1 -1
  185. package/lib/common/index.d.ts +13 -4
  186. package/lib/common/index.d.ts.map +1 -1
  187. package/lib/common/index.js +5 -1
  188. package/lib/common/index.js.map +1 -1
  189. package/lib/common/llm-context.d.ts +13 -9
  190. package/lib/common/llm-context.d.ts.map +1 -1
  191. package/lib/common/llm-context.js.map +1 -1
  192. package/lib/common/mcp-server-manager.d.ts +17 -1
  193. package/lib/common/mcp-server-manager.d.ts.map +1 -1
  194. package/lib/common/mcp-server-manager.js.map +1 -1
  195. package/lib/common/model.d.ts +12 -0
  196. package/lib/common/model.d.ts.map +1 -0
  197. package/lib/common/model.js +83 -0
  198. package/lib/common/model.js.map +1 -0
  199. package/lib/common/prompts/context-prompt-provider.d.ts +4 -3
  200. package/lib/common/prompts/context-prompt-provider.d.ts.map +1 -1
  201. package/lib/common/prompts/context-prompt-provider.js +33 -22
  202. package/lib/common/prompts/context-prompt-provider.js.map +1 -1
  203. package/lib/common/tool-invocation-registry.d.ts +2 -2
  204. package/lib/common/tool-invocation-registry.d.ts.map +1 -1
  205. package/lib/common/tool-invocation-registry.js +1 -1
  206. package/lib/common/tool-invocation-registry.js.map +1 -1
  207. package/lib/common/types.d.ts +8 -0
  208. package/lib/common/types.d.ts.map +1 -1
  209. package/lib/common/utils.d.ts.map +1 -1
  210. package/lib/common/utils.js +2 -1
  211. package/lib/common/utils.js.map +1 -1
  212. package/lib/node/anthropic/anthropic-language-model.d.ts +3 -1
  213. package/lib/node/anthropic/anthropic-language-model.d.ts.map +1 -1
  214. package/lib/node/anthropic/anthropic-language-model.js +6 -2
  215. package/lib/node/anthropic/anthropic-language-model.js.map +1 -1
  216. package/lib/node/base-language-model.d.ts +6 -3
  217. package/lib/node/base-language-model.d.ts.map +1 -1
  218. package/lib/node/base-language-model.js +14 -31
  219. package/lib/node/base-language-model.js.map +1 -1
  220. package/lib/node/deepseek/deepseek-language-model.d.ts +3 -1
  221. package/lib/node/deepseek/deepseek-language-model.d.ts.map +1 -1
  222. package/lib/node/deepseek/deepseek-language-model.js +6 -2
  223. package/lib/node/deepseek/deepseek-language-model.js.map +1 -1
  224. package/lib/node/mcp/sumi-mcp-server.d.ts +17 -3
  225. package/lib/node/mcp/sumi-mcp-server.d.ts.map +1 -1
  226. package/lib/node/mcp/sumi-mcp-server.js +59 -6
  227. package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
  228. package/lib/node/mcp-server-manager-impl.d.ts +4 -3
  229. package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
  230. package/lib/node/mcp-server-manager-impl.js +26 -6
  231. package/lib/node/mcp-server-manager-impl.js.map +1 -1
  232. package/lib/node/mcp-server.d.ts +5 -16
  233. package/lib/node/mcp-server.d.ts.map +1 -1
  234. package/lib/node/mcp-server.js +12 -6
  235. package/lib/node/mcp-server.js.map +1 -1
  236. package/lib/node/openai/openai-language-model.d.ts +4 -2
  237. package/lib/node/openai/openai-language-model.d.ts.map +1 -1
  238. package/lib/node/openai/openai-language-model.js +6 -4
  239. package/lib/node/openai/openai-language-model.js.map +1 -1
  240. package/lib/node/openai-compatible/openai-compatible-language-model.d.ts +10 -0
  241. package/lib/node/openai-compatible/openai-compatible-language-model.d.ts.map +1 -0
  242. package/lib/node/openai-compatible/openai-compatible-language-model.js +32 -0
  243. package/lib/node/openai-compatible/openai-compatible-language-model.js.map +1 -0
  244. package/package.json +27 -26
  245. package/src/browser/ai-core.contextkeys.ts +3 -3
  246. package/src/browser/ai-core.contribution.ts +89 -12
  247. package/src/browser/chat/chat-agent.service.ts +53 -9
  248. package/src/browser/chat/chat-manager.service.ts +10 -8
  249. package/src/browser/chat/chat-model.ts +63 -5
  250. package/src/browser/chat/chat-proxy.service.ts +16 -8
  251. package/src/browser/chat/chat.api.service.ts +1 -5
  252. package/src/browser/chat/chat.internal.service.ts +4 -0
  253. package/src/browser/chat/chat.module.less +1 -2
  254. package/src/browser/chat/chat.view.tsx +63 -69
  255. package/src/browser/components/ChatContext/index.tsx +2 -2
  256. package/src/browser/components/ChatInput.tsx +81 -6
  257. package/src/browser/components/ChatReply.tsx +6 -6
  258. package/src/browser/components/ChatThinking.tsx +3 -9
  259. package/src/browser/components/ChatToolRender.tsx +1 -2
  260. package/src/browser/components/WelcomeMsg.tsx +1 -1
  261. package/src/browser/components/chat-history.module.less +2 -1
  262. package/src/browser/components/components.module.less +22 -0
  263. package/src/browser/context/llm-context.service.ts +93 -54
  264. package/src/browser/contrib/inline-completions/inline-completions.controller.ts +1 -1
  265. package/src/browser/contrib/inline-completions/prompt/matcher.ts +2 -2
  266. package/src/browser/contrib/inline-completions/prompt/similarSnippets.ts +2 -2
  267. package/src/browser/contrib/intelligent-completions/index.ts +5 -1
  268. package/src/browser/contrib/intelligent-completions/intelligent-completions.contribution.ts +3 -3
  269. package/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts +7 -6
  270. package/src/browser/contrib/intelligent-completions/view/code-edits-previewer.ts +4 -2
  271. package/src/browser/contrib/intelligent-completions/view/default.ts +34 -19
  272. package/src/browser/index.ts +4 -0
  273. package/src/browser/layout/layout.module.less +4 -4
  274. package/src/browser/mcp/base-apply.service.ts +306 -109
  275. package/src/browser/mcp/config/components/mcp-config.module.less +178 -0
  276. package/src/browser/mcp/config/components/mcp-config.view.tsx +215 -0
  277. package/src/browser/mcp/config/components/mcp-server-form.module.less +78 -0
  278. package/src/browser/mcp/config/components/mcp-server-form.tsx +144 -0
  279. package/src/browser/mcp/config/mcp-config.commands.ts +29 -0
  280. package/src/browser/mcp/config/mcp-config.contribution.ts +65 -0
  281. package/src/browser/mcp/mcp-server-proxy.service.ts +14 -2
  282. package/src/browser/mcp/mcp-server.feature.registry.ts +35 -4
  283. package/src/browser/mcp/tools/components/EditFile.tsx +16 -9
  284. package/src/browser/mcp/tools/components/ExpandableFileList.tsx +133 -0
  285. package/src/browser/mcp/tools/components/Terminal.tsx +13 -2
  286. package/src/browser/mcp/tools/components/index.module.less +4 -0
  287. package/src/browser/mcp/tools/createNewFileWithText.ts +21 -12
  288. package/src/browser/mcp/tools/fileSearch.ts +14 -4
  289. package/src/browser/mcp/tools/getDiagnosticsByPath.ts +1 -0
  290. package/src/browser/mcp/tools/grepSearch.ts +6 -3
  291. package/src/browser/mcp/tools/handlers/EditFile.ts +1 -1
  292. package/src/browser/mcp/tools/handlers/ListDir.ts +4 -0
  293. package/src/browser/mcp/tools/handlers/RunCommand.ts +2 -0
  294. package/src/browser/mcp/tools/listDir.ts +36 -5
  295. package/src/browser/mcp/tools/runTerminalCmd.ts +1 -0
  296. package/src/browser/model/msg-history-manager.ts +5 -11
  297. package/src/browser/preferences/schema.ts +22 -2
  298. package/src/browser/types.ts +1 -0
  299. package/src/browser/widget/inline-chat/inline-chat-controller.ts +5 -1
  300. package/src/browser/widget/inline-diff/inline-diff-manager.tsx +143 -21
  301. package/src/browser/widget/inline-diff/inline-diff-previewer.ts +25 -7
  302. package/src/browser/widget/inline-diff/inline-diff-widget.module.less +25 -4
  303. package/src/browser/widget/inline-diff/inline-diff.controller.ts +16 -8
  304. package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +139 -68
  305. package/src/browser/widget/inline-stream-diff/live-preview.decoration.tsx +30 -1
  306. package/src/common/index.ts +15 -4
  307. package/src/common/llm-context.ts +10 -4
  308. package/src/common/mcp-server-manager.ts +17 -1
  309. package/src/common/model.ts +90 -0
  310. package/src/common/prompts/context-prompt-provider.ts +38 -29
  311. package/src/common/tool-invocation-registry.ts +2 -2
  312. package/src/common/types.ts +8 -0
  313. package/src/common/utils.ts +3 -1
  314. package/src/node/anthropic/anthropic-language-model.ts +7 -2
  315. package/src/node/base-language-model.ts +25 -38
  316. package/src/node/deepseek/deepseek-language-model.ts +7 -2
  317. package/src/node/mcp/sumi-mcp-server.ts +67 -9
  318. package/src/node/mcp-server-manager-impl.ts +30 -9
  319. package/src/node/mcp-server.ts +11 -14
  320. package/src/node/openai/openai-language-model.ts +8 -4
  321. package/src/node/openai-compatible/openai-compatible-language-model.ts +30 -0
  322. package/lib/browser/mcp/tools/components/SearchResult.d.ts +0 -11
  323. package/lib/browser/mcp/tools/components/SearchResult.d.ts.map +0 -1
  324. package/lib/browser/mcp/tools/components/SearchResult.js.map +0 -1
  325. package/src/browser/mcp/tools/components/SearchResult.tsx +0 -92
@@ -2,21 +2,23 @@ import flatMap from 'lodash/flatMap';
2
2
 
3
3
  import { Autowired, Injectable } from '@opensumi/di';
4
4
  import {
5
+ AIServiceType,
6
+ ActionSourceEnum,
7
+ ActionTypeEnum,
5
8
  CancellationToken,
6
9
  ChatFeatureRegistryToken,
7
10
  ChatServiceToken,
8
11
  Disposable,
9
12
  Emitter,
10
- IChatContent,
13
+ IAIReporter,
11
14
  IChatProgress,
12
15
  IDisposable,
13
16
  ILogger,
14
17
  toDisposable,
15
18
  } from '@opensumi/ide-core-common';
16
- import { ChatMessageRole } from '@opensumi/ide-core-common';
17
- import { IChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
18
19
 
19
20
  import {
21
+ CoreMessage,
20
22
  IChatAgent,
21
23
  IChatAgentCommand,
22
24
  IChatAgentMetadata,
@@ -26,6 +28,8 @@ import {
26
28
  IChatFollowup,
27
29
  IChatMessageStructure,
28
30
  } from '../../common';
31
+ import { LLMContextService, LLMContextServiceToken } from '../../common/llm-context';
32
+ import { ChatAgentPromptProvider } from '../../common/prompts/context-prompt-provider';
29
33
  import { IChatFeatureRegistry } from '../types';
30
34
 
31
35
  import { ChatService } from './chat.api.service';
@@ -36,6 +40,12 @@ export class ChatAgentService extends Disposable implements IChatAgentService {
36
40
 
37
41
  private defaultAgentId: string | undefined;
38
42
 
43
+ private initialUserMessageMap: Map<string, string> = new Map();
44
+
45
+ private shouldUpdateContext = false;
46
+
47
+ private contextVersion: number;
48
+
39
49
  private readonly _onDidChangeAgents = new Emitter<void>();
40
50
  readonly onDidChangeAgents = this._onDidChangeAgents.event;
41
51
 
@@ -45,6 +55,15 @@ export class ChatAgentService extends Disposable implements IChatAgentService {
45
55
  @Autowired(ILogger)
46
56
  logger: ILogger;
47
57
 
58
+ @Autowired(IAIReporter)
59
+ private readonly aiReporter: IAIReporter;
60
+
61
+ @Autowired(LLMContextServiceToken)
62
+ protected readonly contextService: LLMContextService;
63
+
64
+ @Autowired(ChatAgentPromptProvider)
65
+ protected readonly promptProvider: ChatAgentPromptProvider;
66
+
48
67
  @Autowired(ChatServiceToken)
49
68
  private aiChatService: ChatService;
50
69
 
@@ -54,6 +73,14 @@ export class ChatAgentService extends Disposable implements IChatAgentService {
54
73
  constructor() {
55
74
  super();
56
75
  this.addDispose(this._onDidChangeAgents);
76
+ this.addDispose(
77
+ this.contextService.onDidContextFilesChangeEvent((event) => {
78
+ if (event.version !== this.contextVersion) {
79
+ this.contextVersion = event.version;
80
+ this.shouldUpdateContext = true;
81
+ }
82
+ }),
83
+ );
57
84
  }
58
85
 
59
86
  registerAgent(agent: IChatAgent): IDisposable {
@@ -113,24 +140,41 @@ export class ChatAgentService extends Disposable implements IChatAgentService {
113
140
  id: string,
114
141
  request: IChatAgentRequest,
115
142
  progress: (part: IChatProgress) => void,
116
- history: IChatMessage[],
143
+ history: CoreMessage[],
117
144
  token: CancellationToken,
118
145
  ): Promise<IChatAgentResult> {
119
146
  const data = this.agents.get(id);
120
147
  if (!data) {
121
148
  throw new Error(`No agent with id ${id}`);
122
149
  }
123
- if (data.agent.metadata.systemPrompt) {
124
- history.unshift({
125
- role: ChatMessageRole.System,
126
- content: data.agent.metadata.systemPrompt,
127
- });
150
+
151
+ // 发送第一条消息时携带初始 context
152
+ if (!this.initialUserMessageMap.has(request.sessionId)) {
153
+ this.initialUserMessageMap.set(request.sessionId, request.message);
154
+ const rawMessage = request.message;
155
+ request.message = this.provideContextMessage(rawMessage, request.sessionId);
156
+ } else if (this.shouldUpdateContext || request.regenerate || history.length === 0) {
157
+ request.message = this.provideContextMessage(request.message, request.sessionId);
158
+ this.shouldUpdateContext = false;
128
159
  }
129
160
 
130
161
  const result = await data.agent.invoke(request, progress, history, token);
131
162
  return result;
132
163
  }
133
164
 
165
+ private provideContextMessage(message: string, sessionId: string) {
166
+ const context = this.contextService.serialize();
167
+ const fullMessage = this.promptProvider.provideContextPrompt(context, message);
168
+ this.aiReporter.send({
169
+ msgType: AIServiceType.Chat,
170
+ actionType: ActionTypeEnum.ContextEnhance,
171
+ actionSource: ActionSourceEnum.Chat,
172
+ sessionId,
173
+ message: fullMessage,
174
+ });
175
+ return fullMessage;
176
+ }
177
+
134
178
  populateChatInput(id: string, message: IChatMessageStructure) {
135
179
  this.aiChatService.sendMessage({
136
180
  ...message,
@@ -6,10 +6,12 @@ import {
6
6
  DisposableMap,
7
7
  Emitter,
8
8
  IChatProgress,
9
+ IChatToolContent,
9
10
  IStorage,
10
11
  STORAGE_NAMESPACE,
11
12
  StorageProvider,
12
13
  debounce,
14
+ formatLocalize,
13
15
  } from '@opensumi/ide-core-common';
14
16
  import { ChatMessageRole, IChatMessage, IHistoryChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
15
17
 
@@ -28,12 +30,15 @@ interface ISessionModel {
28
30
  isCanceled: boolean;
29
31
  responseText: string;
30
32
  responseContents: IChatProgressResponseContent[];
33
+ responseParts: IChatProgressResponseContent[];
31
34
  errorDetails: IChatResponseErrorDetails | undefined;
32
35
  followups: IChatFollowup[];
33
36
  };
34
37
  }[];
35
38
  }
36
39
 
40
+ const MAX_SESSION_COUNT = 20;
41
+
37
42
  @Injectable()
38
43
  export class ChatManagerService extends Disposable {
39
44
  #sessionModels = this.registerDispose(new DisposableMap<string, ChatModel>());
@@ -69,6 +74,7 @@ export class ChatManagerService extends Disposable {
69
74
  responseContents: request.response.responseContents,
70
75
  isComplete: true,
71
76
  responseText: request.response.responseText,
77
+ responseParts: request.response.responseParts,
72
78
  errorDetails: request.response.errorDetails,
73
79
  followups: request.response.followups,
74
80
  isCanceled: request.response.isCanceled,
@@ -100,6 +106,9 @@ export class ChatManagerService extends Disposable {
100
106
  }
101
107
 
102
108
  startSession() {
109
+ if (this.#sessionModels.size >= MAX_SESSION_COUNT) {
110
+ throw new Error(formatLocalize('aiNative.chat.session.max', MAX_SESSION_COUNT.toString()));
111
+ }
103
112
  const model = new ChatModel();
104
113
  this.#sessionModels.set(model.sessionId, model);
105
114
  this.listenSession(model);
@@ -147,14 +156,7 @@ export class ChatManagerService extends Disposable {
147
156
  request.response.cancel();
148
157
  });
149
158
 
150
- const history: IChatMessage[] = [];
151
- for (const request of model.requests) {
152
- if (!request.response.isComplete) {
153
- continue;
154
- }
155
- history.push({ role: ChatMessageRole.User, content: request.message.prompt });
156
- history.push({ role: ChatMessageRole.Assistant, content: request.response.responseText });
157
- }
159
+ const history = model.messageHistory;
158
160
 
159
161
  try {
160
162
  const progressCallback = (progress: IChatProgress) => {
@@ -1,4 +1,4 @@
1
- import { Autowired, INJECTOR_TOKEN, Injectable, Injector } from '@opensumi/di';
1
+ import { Injectable } from '@opensumi/di';
2
2
  import {
3
3
  Disposable,
4
4
  Emitter,
@@ -8,13 +8,12 @@ import {
8
8
  IChatProgress,
9
9
  IChatToolContent,
10
10
  IChatTreeData,
11
- ILogger,
12
- memoize,
13
11
  uuid,
14
12
  } from '@opensumi/ide-core-common';
15
13
  import { MarkdownString, isMarkdownString } from '@opensumi/monaco-editor-core/esm/vs/base/common/htmlContent';
16
14
 
17
15
  import {
16
+ CoreMessage,
18
17
  IChatFollowup,
19
18
  IChatModel,
20
19
  IChatRequestMessage,
@@ -27,6 +26,8 @@ import {
27
26
  import { MsgHistoryManager } from '../model/msg-history-manager';
28
27
  import { IChatSlashCommandItem } from '../types';
29
28
 
29
+ import type { TextPart, ToolCallPart } from 'ai';
30
+
30
31
  export type IChatProgressResponseContent =
31
32
  | IChatMarkdownContent
32
33
  | IChatAsyncContent
@@ -88,6 +89,7 @@ export class ChatResponseModel extends Disposable {
88
89
  isComplete: boolean;
89
90
  isCanceled: boolean;
90
91
  responseContents: IChatProgressResponseContent[];
92
+ responseParts: IChatProgressResponseContent[];
91
93
  responseText: string;
92
94
  errorDetails: IChatResponseErrorDetails | undefined;
93
95
  followups: IChatFollowup[] | undefined;
@@ -97,6 +99,7 @@ export class ChatResponseModel extends Disposable {
97
99
  this.#requestId = requestId;
98
100
  if (initParams) {
99
101
  this.#responseContents = initParams.responseContents;
102
+ this.#responseParts = initParams.responseParts || [];
100
103
  this.#responseText = initParams.responseText;
101
104
  this.#isComplete = initParams.isComplete;
102
105
  this.#isCanceled = initParams.isCanceled;
@@ -241,6 +244,7 @@ export class ChatResponseModel extends Disposable {
241
244
  isCanceled: this.isCanceled,
242
245
  responseContents: this.responseContents,
243
246
  responseText: this.responseText,
247
+ responseParts: this.responseParts,
244
248
  errorDetails: this.errorDetails,
245
249
  followups: this.followups,
246
250
  };
@@ -299,10 +303,64 @@ export class ChatModel extends Disposable implements IChatModel {
299
303
 
300
304
  readonly history: MsgHistoryManager;
301
305
 
306
+ get messageHistory() {
307
+ const history: CoreMessage[] = [];
308
+ for (const request of this.requests) {
309
+ if (!request.response.isComplete) {
310
+ continue;
311
+ }
312
+ history.push({ role: 'user', content: request.message.prompt });
313
+ for (const part of request.response.responseParts) {
314
+ if (part.kind === 'treeData' || part.kind === 'component') {
315
+ continue;
316
+ }
317
+ if (part.kind !== 'toolCall') {
318
+ history.push({
319
+ role: 'assistant',
320
+ content: [
321
+ {
322
+ type: 'text',
323
+ text: part.kind === 'markdownContent' ? part.content.value : part.content,
324
+ },
325
+ ],
326
+ });
327
+ } else {
328
+ // 直接开始toolCall场景
329
+ if (history[history.length - 1].role !== 'assistant') {
330
+ history.push({
331
+ role: 'assistant',
332
+ content: [],
333
+ });
334
+ }
335
+ (history[history.length - 1].content as Array<TextPart | ToolCallPart>).push({
336
+ type: 'tool-call',
337
+ toolCallId: part.content.id,
338
+ toolName: part.content.function.name,
339
+ args: JSON.parse(part.content.function.arguments || '{}'),
340
+ });
341
+ history.push({
342
+ role: 'tool',
343
+ content: [
344
+ {
345
+ type: 'tool-result',
346
+ toolCallId: part.content.id,
347
+ toolName: part.content.function.name,
348
+ result: JSON.parse(part.content.result || '{}'),
349
+ },
350
+ ],
351
+ });
352
+ }
353
+ }
354
+ }
355
+ return history;
356
+ }
357
+
302
358
  addRequest(message: IChatRequestMessage): ChatRequestModel {
359
+ const msg = message;
360
+
303
361
  const requestId = `${this.sessionId}_request_${ChatModel.requestIdPool++}`;
304
- const response = new ChatResponseModel(requestId, this, message.agentId);
305
- const request = new ChatRequestModel(requestId, this, message, response);
362
+ const response = new ChatResponseModel(requestId, this, msg.agentId);
363
+ const request = new ChatRequestModel(requestId, this, msg, response);
306
364
 
307
365
  this.#requests.set(requestId, request);
308
366
  return request;
@@ -12,15 +12,15 @@ import {
12
12
  IAIReporter,
13
13
  IApplicationService,
14
14
  IChatProgress,
15
- uuid,
15
+ getOperatingSystemName,
16
16
  } from '@opensumi/ide-core-common';
17
17
  import { AINativeSettingSectionsId } from '@opensumi/ide-core-common/lib/settings/ai-native';
18
- import { IChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
19
18
  import { MonacoCommandRegistry } from '@opensumi/ide-editor/lib/browser/monaco-contrib/command/command.service';
20
19
  import { IMessageService } from '@opensumi/ide-overlay';
21
20
  import { listenReadable } from '@opensumi/ide-utils/lib/stream';
22
21
 
23
22
  import {
23
+ CoreMessage,
24
24
  IChatAgentCommand,
25
25
  IChatAgentRequest,
26
26
  IChatAgentResult,
@@ -92,12 +92,14 @@ export class ChatProxyService extends Disposable {
92
92
  AINativeSettingSectionsId.SystemPrompt,
93
93
  'You are a powerful AI coding assistant working in OpenSumi, a top IDE framework. You collaborate with a USER to solve coding tasks, which may involve creating, modifying, or debugging code, or answering questions. When the USER sends a message, relevant context (e.g., open files, cursor position, edit history, linter errors) may be attached. Use this information as needed.\n\n<tool_calling>\nYou have access to tools to assist with tasks. Follow these rules:\n1. Always adhere to the tool call schema and provide all required parameters.\n2. Only use tools explicitly provided; ignore unavailable ones.\n3. Avoid mentioning tool names to the USER (e.g., say "I will edit your file" instead of "I need to use the edit_file tool").\n4. Only call tools when necessary; respond directly if the task is general or you already know the answer.\n5. Explain to the USER why you’re using a tool before calling it.\n</tool_calling>\n\n<making_code_changes>\nWhen modifying code:\n1. Use code edit tools instead of outputting code unless explicitly requested.\n2. Limit tool calls to one per turn.\n3. Ensure generated code is immediately executable by including necessary imports, dependencies, and endpoints.\n4. For new projects, create a dependency management file (e.g., requirements.txt) and a README.\n5. For web apps, design a modern, user-friendly UI.\n6. Avoid generating non-textual or excessively long code.\n7. Read file contents before editing, unless appending a small change or creating a new file.\n8. Fix introduced linter errors if possible, but stop after 3 attempts and ask the USER for guidance.\n9. Reapply reasonable code edits if they weren’t followed initially.\n</making_code_changes>\n\nUse the appropriate tools to fulfill the USER’s request, ensuring all required parameters are provided or inferred from context.',
94
94
  ) +
95
- `\n\n<user_info>\nThe user's OS version is ${this.applicationService.frontendOS}. The absolute path of the user's workspace is ${this.appConfig.workspaceDir}.\n</user_info>`,
95
+ `\n\n<user_info>\nThe user's OS is ${getOperatingSystemName()}. The absolute path of the user's workspace is ${
96
+ this.appConfig.workspaceDir
97
+ }.\n</user_info>`,
96
98
  },
97
99
  invoke: async (
98
100
  request: IChatAgentRequest,
99
101
  progress: (part: IChatProgress) => void,
100
- _history: IChatMessage[],
102
+ history: CoreMessage[],
101
103
  token: CancellationToken,
102
104
  ): Promise<IChatAgentResult> => {
103
105
  this.chatDeferred = new Deferred<void>();
@@ -115,27 +117,33 @@ export class ChatProxyService extends Disposable {
115
117
  }
116
118
 
117
119
  const model = this.preferenceService.get<string>(AINativeSettingSectionsId.LLMModelSelection);
120
+ const modelId = this.preferenceService.get<string>(AINativeSettingSectionsId.ModelID);
118
121
  let apiKey: string = '';
119
122
  let baseURL: string = '';
120
123
  if (model === 'deepseek') {
121
124
  apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.DeepseekApiKey, '');
122
125
  } else if (model === 'openai') {
123
126
  apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.OpenaiApiKey, '');
124
- baseURL = this.preferenceService.get<string>(AINativeSettingSectionsId.OpenaiBaseURL, '');
125
- } else {
127
+ } else if (model === 'anthropic') {
126
128
  apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.AnthropicApiKey, '');
129
+ } else {
130
+ // openai-compatible 为兜底
131
+ apiKey = this.preferenceService.get<string>(AINativeSettingSectionsId.OpenaiApiKey, '');
132
+ baseURL = this.preferenceService.get<string>(AINativeSettingSectionsId.OpenaiBaseURL, '');
127
133
  }
128
- const MAX_INPUT_TOKENS = 30720;
134
+ const agent = this.chatAgentService.getAgent(ChatProxyService.AGENT_ID);
129
135
  const stream = await this.aiBackService.requestStream(
130
136
  prompt,
131
137
  {
132
138
  requestId: request.requestId,
133
139
  sessionId: request.sessionId,
134
- history: this.aiChatService.getHistoryMessages(MAX_INPUT_TOKENS),
140
+ history,
135
141
  clientId: this.applicationService.clientId,
136
142
  apiKey,
137
143
  model,
144
+ modelId,
138
145
  baseURL,
146
+ system: agent?.metadata.systemPrompt,
139
147
  },
140
148
  token,
141
149
  );
@@ -1,6 +1,6 @@
1
1
  import { Autowired, Injectable } from '@opensumi/di';
2
2
  import { Disposable, Emitter, Event } from '@opensumi/ide-core-common';
3
- import { IChatComponent, IChatContent, IHistoryChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
3
+ import { IChatComponent, IChatContent } from '@opensumi/ide-core-common/lib/types/ai-native';
4
4
  import { IMainLayoutService } from '@opensumi/ide-main-layout';
5
5
 
6
6
  import { AI_CHAT_VIEW_ID, IChatInternalService, IChatMessageListItem, IChatMessageStructure } from '../../common';
@@ -65,10 +65,6 @@ export class ChatService extends Disposable {
65
65
  this._onChatMessageListLaunch.fire(list);
66
66
  }
67
67
 
68
- public getHistoryMessages(maxInputTokens?: number): IHistoryChatMessage[] {
69
- return this.chatInternalService.sessionModel?.history.getMessages(maxInputTokens) || [];
70
- }
71
-
72
68
  public scrollToBottom(): void {
73
69
  this._onScrollToBottom.fire();
74
70
  }
@@ -30,6 +30,9 @@ export class ChatInternalService extends Disposable {
30
30
  private readonly _onCancelRequest = new Emitter<void>();
31
31
  public readonly onCancelRequest: Event<void> = this._onCancelRequest.event;
32
32
 
33
+ private readonly _onWillClearSession = new Emitter<string>();
34
+ public readonly onWillClearSession: Event<string> = this._onWillClearSession.event;
35
+
33
36
  private readonly _onRegenerateRequest = new Emitter<void>();
34
37
  public readonly onRegenerateRequest: Event<void> = this._onRegenerateRequest.event;
35
38
 
@@ -83,6 +86,7 @@ export class ChatInternalService extends Disposable {
83
86
 
84
87
  clearSessionModel(sessionId?: string) {
85
88
  sessionId = sessionId || this.#sessionModel.sessionId;
89
+ this._onWillClearSession.fire(sessionId);
86
90
  this.chatManagerService.clearSession(sessionId);
87
91
  if (sessionId === this.#sessionModel.sessionId) {
88
92
  this.#sessionModel = this.chatManagerService.startSession();
@@ -279,7 +279,6 @@
279
279
  }
280
280
  }
281
281
 
282
-
283
282
  .chat_tips_container {
284
283
  display: flex;
285
284
  align-items: center;
@@ -290,6 +289,6 @@
290
289
  }
291
290
 
292
291
  .chat_history {
293
- width: calc(100% - 60px);
292
+ width: calc(100% - 40px);
294
293
  color: var(--design-text-foreground);
295
294
  }