@theia/ai-ide 1.75.0-next.8 → 1.75.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 (509) hide show
  1. package/lib/browser/ai-allow-all-mode-chat-banner.js +2 -20
  2. package/lib/browser/ai-allow-all-mode-chat-banner.js.map +1 -1
  3. package/lib/browser/ai-configuration/agent-icon.d.ts +16 -0
  4. package/lib/browser/ai-configuration/agent-icon.d.ts.map +1 -0
  5. package/lib/browser/ai-configuration/agent-icon.js +38 -0
  6. package/lib/browser/ai-configuration/agent-icon.js.map +1 -0
  7. package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.d.ts +36 -0
  8. package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.d.ts.map +1 -0
  9. package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.js +163 -0
  10. package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.js.map +1 -0
  11. package/lib/browser/ai-configuration/ai-configuration-detail-widget.d.ts +50 -0
  12. package/lib/browser/ai-configuration/ai-configuration-detail-widget.d.ts.map +1 -0
  13. package/lib/browser/ai-configuration/ai-configuration-detail-widget.js +208 -0
  14. package/lib/browser/ai-configuration/ai-configuration-detail-widget.js.map +1 -0
  15. package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.d.ts +2 -0
  16. package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.d.ts.map +1 -0
  17. package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.js +139 -0
  18. package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.js.map +1 -0
  19. package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.d.ts +13 -0
  20. package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.d.ts.map +1 -0
  21. package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.js +48 -0
  22. package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.js.map +1 -0
  23. package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.d.ts +22 -0
  24. package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.d.ts.map +1 -0
  25. package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.js +72 -0
  26. package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.js.map +1 -0
  27. package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.d.ts +2 -0
  28. package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.d.ts.map +1 -0
  29. package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.js +126 -0
  30. package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.js.map +1 -0
  31. package/lib/browser/ai-configuration/ai-configuration-resource.d.ts +10 -0
  32. package/lib/browser/ai-configuration/ai-configuration-resource.d.ts.map +1 -0
  33. package/lib/browser/ai-configuration/{components/configuration-section.js → ai-configuration-resource.js} +11 -11
  34. package/lib/browser/ai-configuration/ai-configuration-resource.js.map +1 -0
  35. package/lib/browser/ai-configuration/ai-configuration-search-widget.d.ts +29 -0
  36. package/lib/browser/ai-configuration/ai-configuration-search-widget.d.ts.map +1 -0
  37. package/lib/browser/ai-configuration/ai-configuration-search-widget.js +106 -0
  38. package/lib/browser/ai-configuration/ai-configuration-search-widget.js.map +1 -0
  39. package/lib/browser/ai-configuration/ai-configuration-search.d.ts +18 -0
  40. package/lib/browser/ai-configuration/ai-configuration-search.d.ts.map +1 -0
  41. package/lib/browser/ai-configuration/ai-configuration-search.js +45 -0
  42. package/lib/browser/ai-configuration/ai-configuration-search.js.map +1 -0
  43. package/lib/browser/ai-configuration/ai-configuration-search.spec.d.ts +2 -0
  44. package/lib/browser/ai-configuration/ai-configuration-search.spec.d.ts.map +1 -0
  45. package/lib/browser/ai-configuration/ai-configuration-search.spec.js +79 -0
  46. package/lib/browser/ai-configuration/ai-configuration-search.spec.js.map +1 -0
  47. package/lib/browser/ai-configuration/ai-configuration-tree-model.d.ts +8 -0
  48. package/lib/browser/ai-configuration/ai-configuration-tree-model.d.ts.map +1 -0
  49. package/lib/browser/ai-configuration/{base/ai-configuration-base-widget.js → ai-configuration-tree-model.js} +11 -14
  50. package/lib/browser/ai-configuration/ai-configuration-tree-model.js.map +1 -0
  51. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.d.ts +57 -0
  52. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.d.ts.map +1 -0
  53. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.js +134 -0
  54. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.js.map +1 -0
  55. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.d.ts +2 -0
  56. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.d.ts.map +1 -0
  57. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.js +134 -0
  58. package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.js.map +1 -0
  59. package/lib/browser/ai-configuration/ai-configuration-tree-widget.d.ts +96 -0
  60. package/lib/browser/ai-configuration/ai-configuration-tree-widget.d.ts.map +1 -0
  61. package/lib/browser/ai-configuration/ai-configuration-tree-widget.js +407 -0
  62. package/lib/browser/ai-configuration/ai-configuration-tree-widget.js.map +1 -0
  63. package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts +38 -4
  64. package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts.map +1 -1
  65. package/lib/browser/ai-configuration/ai-configuration-view-contribution.js +151 -19
  66. package/lib/browser/ai-configuration/ai-configuration-view-contribution.js.map +1 -1
  67. package/lib/browser/ai-configuration/ai-configuration-widget.d.ts +21 -23
  68. package/lib/browser/ai-configuration/ai-configuration-widget.d.ts.map +1 -1
  69. package/lib/browser/ai-configuration/ai-configuration-widget.js +102 -70
  70. package/lib/browser/ai-configuration/ai-configuration-widget.js.map +1 -1
  71. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.d.ts +56 -0
  72. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.d.ts.map +1 -0
  73. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.js +195 -0
  74. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.js.map +1 -0
  75. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.d.ts +2 -0
  76. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.d.ts.map +1 -0
  77. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.js +140 -0
  78. package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.js.map +1 -0
  79. package/lib/browser/ai-configuration/categories/agent-chips.d.ts +15 -0
  80. package/lib/browser/ai-configuration/categories/agent-chips.d.ts.map +1 -0
  81. package/lib/browser/ai-configuration/categories/agent-chips.js +19 -0
  82. package/lib/browser/ai-configuration/categories/agent-chips.js.map +1 -0
  83. package/lib/browser/ai-configuration/categories/agent-detail-model.d.ts +37 -0
  84. package/lib/browser/ai-configuration/categories/agent-detail-model.d.ts.map +1 -0
  85. package/lib/browser/ai-configuration/categories/agent-detail-model.js +99 -0
  86. package/lib/browser/ai-configuration/categories/agent-detail-model.js.map +1 -0
  87. package/lib/browser/ai-configuration/categories/agent-detail-view.d.ts +28 -0
  88. package/lib/browser/ai-configuration/categories/agent-detail-view.d.ts.map +1 -0
  89. package/lib/browser/ai-configuration/categories/agent-detail-view.js +135 -0
  90. package/lib/browser/ai-configuration/categories/agent-detail-view.js.map +1 -0
  91. package/lib/browser/ai-configuration/categories/agents-configuration-category.d.ts +78 -0
  92. package/lib/browser/ai-configuration/categories/agents-configuration-category.d.ts.map +1 -0
  93. package/lib/browser/ai-configuration/categories/agents-configuration-category.js +352 -0
  94. package/lib/browser/ai-configuration/categories/agents-configuration-category.js.map +1 -0
  95. package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.d.ts +2 -0
  96. package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.d.ts.map +1 -0
  97. package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.js +99 -0
  98. package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.js.map +1 -0
  99. package/lib/browser/ai-configuration/categories/general-configuration-category.d.ts +93 -0
  100. package/lib/browser/ai-configuration/categories/general-configuration-category.d.ts.map +1 -0
  101. package/lib/browser/ai-configuration/categories/general-configuration-category.js +313 -0
  102. package/lib/browser/ai-configuration/categories/general-configuration-category.js.map +1 -0
  103. package/lib/browser/ai-configuration/categories/general-configuration-category.spec.d.ts +2 -0
  104. package/lib/browser/ai-configuration/categories/general-configuration-category.spec.d.ts.map +1 -0
  105. package/lib/browser/ai-configuration/categories/general-configuration-category.spec.js +213 -0
  106. package/lib/browser/ai-configuration/categories/general-configuration-category.spec.js.map +1 -0
  107. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.d.ts +53 -0
  108. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.d.ts.map +1 -0
  109. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.js +241 -0
  110. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.js.map +1 -0
  111. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.d.ts +2 -0
  112. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.d.ts.map +1 -0
  113. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.js +75 -0
  114. package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.js.map +1 -0
  115. package/lib/browser/ai-configuration/categories/models-configuration-category.d.ts +72 -0
  116. package/lib/browser/ai-configuration/categories/models-configuration-category.d.ts.map +1 -0
  117. package/lib/browser/ai-configuration/categories/models-configuration-category.js +227 -0
  118. package/lib/browser/ai-configuration/categories/models-configuration-category.js.map +1 -0
  119. package/lib/browser/ai-configuration/categories/models-configuration-category.spec.d.ts +2 -0
  120. package/lib/browser/ai-configuration/categories/models-configuration-category.spec.d.ts.map +1 -0
  121. package/lib/browser/ai-configuration/categories/models-configuration-category.spec.js +145 -0
  122. package/lib/browser/ai-configuration/categories/models-configuration-category.spec.js.map +1 -0
  123. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.d.ts +114 -0
  124. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.d.ts.map +1 -0
  125. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.js +341 -0
  126. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.js.map +1 -0
  127. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.d.ts +2 -0
  128. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.d.ts.map +1 -0
  129. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.js +199 -0
  130. package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.js.map +1 -0
  131. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.d.ts +84 -0
  132. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.d.ts.map +1 -0
  133. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.js +341 -0
  134. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.js.map +1 -0
  135. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.d.ts +2 -0
  136. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.d.ts.map +1 -0
  137. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.js +184 -0
  138. package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.js.map +1 -0
  139. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.d.ts +38 -0
  140. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.d.ts.map +1 -0
  141. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.js +130 -0
  142. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.js.map +1 -0
  143. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.d.ts +2 -0
  144. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.d.ts.map +1 -0
  145. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.js +51 -0
  146. package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.js.map +1 -0
  147. package/lib/browser/ai-configuration/categories/tools-configuration-category.d.ts +60 -0
  148. package/lib/browser/ai-configuration/categories/tools-configuration-category.d.ts.map +1 -0
  149. package/lib/browser/ai-configuration/categories/tools-configuration-category.js +302 -0
  150. package/lib/browser/ai-configuration/categories/tools-configuration-category.js.map +1 -0
  151. package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.d.ts +2 -0
  152. package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.d.ts.map +1 -0
  153. package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.js +111 -0
  154. package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.js.map +1 -0
  155. package/lib/browser/ai-configuration/categories/variables-configuration-category.d.ts +72 -0
  156. package/lib/browser/ai-configuration/categories/variables-configuration-category.d.ts.map +1 -0
  157. package/lib/browser/ai-configuration/categories/variables-configuration-category.js +245 -0
  158. package/lib/browser/ai-configuration/categories/variables-configuration-category.js.map +1 -0
  159. package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.d.ts +2 -0
  160. package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.d.ts.map +1 -0
  161. package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.js +131 -0
  162. package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.js.map +1 -0
  163. package/lib/browser/ai-configuration/components/agent-notification-settings.d.ts +6 -2
  164. package/lib/browser/ai-configuration/components/agent-notification-settings.d.ts.map +1 -1
  165. package/lib/browser/ai-configuration/components/agent-notification-settings.js +15 -21
  166. package/lib/browser/ai-configuration/components/agent-notification-settings.js.map +1 -1
  167. package/lib/browser/ai-configuration/language-model-renderer.d.ts +25 -1
  168. package/lib/browser/ai-configuration/language-model-renderer.d.ts.map +1 -1
  169. package/lib/browser/ai-configuration/language-model-renderer.js +159 -63
  170. package/lib/browser/ai-configuration/language-model-renderer.js.map +1 -1
  171. package/lib/browser/ai-configuration/language-model-renderer.spec.d.ts +2 -0
  172. package/lib/browser/ai-configuration/language-model-renderer.spec.d.ts.map +1 -0
  173. package/lib/browser/ai-configuration/language-model-renderer.spec.js +93 -0
  174. package/lib/browser/ai-configuration/language-model-renderer.spec.js.map +1 -0
  175. package/lib/browser/ai-sessions-widget.js +12 -16
  176. package/lib/browser/ai-sessions-widget.js.map +1 -1
  177. package/lib/browser/app-tester-chat-agent.d.ts +2 -0
  178. package/lib/browser/app-tester-chat-agent.d.ts.map +1 -1
  179. package/lib/browser/app-tester-chat-agent.js +5 -0
  180. package/lib/browser/app-tester-chat-agent.js.map +1 -1
  181. package/lib/browser/architect-agent.d.ts +2 -0
  182. package/lib/browser/architect-agent.d.ts.map +1 -1
  183. package/lib/browser/architect-agent.js +5 -0
  184. package/lib/browser/architect-agent.js.map +1 -1
  185. package/lib/browser/architect-prompt-template.d.ts.map +1 -1
  186. package/lib/browser/architect-prompt-template.js +7 -0
  187. package/lib/browser/architect-prompt-template.js.map +1 -1
  188. package/lib/browser/chat-session-item.d.ts.map +1 -1
  189. package/lib/browser/chat-session-item.js +17 -30
  190. package/lib/browser/chat-session-item.js.map +1 -1
  191. package/lib/browser/chat-session-list-components.js +7 -30
  192. package/lib/browser/chat-session-list-components.js.map +1 -1
  193. package/lib/browser/chat-session-list-service.d.ts +2 -1
  194. package/lib/browser/chat-session-list-service.d.ts.map +1 -1
  195. package/lib/browser/chat-session-list-service.js +6 -1
  196. package/lib/browser/chat-session-list-service.js.map +1 -1
  197. package/lib/browser/chat-sessions-welcome-message-provider.js +3 -21
  198. package/lib/browser/chat-sessions-welcome-message-provider.js.map +1 -1
  199. package/lib/browser/code-reviewer-agent.d.ts +2 -0
  200. package/lib/browser/code-reviewer-agent.d.ts.map +1 -1
  201. package/lib/browser/code-reviewer-agent.js +5 -0
  202. package/lib/browser/code-reviewer-agent.js.map +1 -1
  203. package/lib/browser/coder-agent.d.ts +2 -0
  204. package/lib/browser/coder-agent.d.ts.map +1 -1
  205. package/lib/browser/coder-agent.js +6 -1
  206. package/lib/browser/coder-agent.js.map +1 -1
  207. package/lib/browser/context-file-validation-service-impl.spec.js +2 -0
  208. package/lib/browser/context-file-validation-service-impl.spec.js.map +1 -1
  209. package/lib/browser/create-skill-agent.d.ts +2 -0
  210. package/lib/browser/create-skill-agent.d.ts.map +1 -1
  211. package/lib/browser/create-skill-agent.js +5 -0
  212. package/lib/browser/create-skill-agent.js.map +1 -1
  213. package/lib/browser/explore-agent.d.ts +2 -0
  214. package/lib/browser/explore-agent.d.ts.map +1 -1
  215. package/lib/browser/explore-agent.js +5 -0
  216. package/lib/browser/explore-agent.js.map +1 -1
  217. package/lib/browser/file-changeset-functions.d.ts +7 -1
  218. package/lib/browser/file-changeset-functions.d.ts.map +1 -1
  219. package/lib/browser/file-changeset-functions.js +62 -20
  220. package/lib/browser/file-changeset-functions.js.map +1 -1
  221. package/lib/browser/file-changeset-functions.spec.js +130 -1
  222. package/lib/browser/file-changeset-functions.spec.js.map +1 -1
  223. package/lib/browser/frontend-module.d.ts.map +1 -1
  224. package/lib/browser/frontend-module.js +65 -59
  225. package/lib/browser/frontend-module.js.map +1 -1
  226. package/lib/browser/github-chat-agent.d.ts +2 -1
  227. package/lib/browser/github-chat-agent.d.ts.map +1 -1
  228. package/lib/browser/github-chat-agent.js +5 -0
  229. package/lib/browser/github-chat-agent.js.map +1 -1
  230. package/lib/browser/github-repo-variable-contribution.d.ts +2 -1
  231. package/lib/browser/github-repo-variable-contribution.d.ts.map +1 -1
  232. package/lib/browser/github-repo-variable-contribution.js +6 -1
  233. package/lib/browser/github-repo-variable-contribution.js.map +1 -1
  234. package/lib/browser/ide-chat-welcome-message-provider.d.ts.map +1 -1
  235. package/lib/browser/ide-chat-welcome-message-provider.js +31 -118
  236. package/lib/browser/ide-chat-welcome-message-provider.js.map +1 -1
  237. package/lib/browser/memory-capability-contribution.d.ts +8 -0
  238. package/lib/browser/memory-capability-contribution.d.ts.map +1 -0
  239. package/lib/browser/memory-capability-contribution.js +88 -0
  240. package/lib/browser/memory-capability-contribution.js.map +1 -0
  241. package/lib/browser/memory-capability-contribution.spec.d.ts +2 -0
  242. package/lib/browser/memory-capability-contribution.spec.d.ts.map +1 -0
  243. package/lib/browser/memory-capability-contribution.spec.js +74 -0
  244. package/lib/browser/memory-capability-contribution.spec.js.map +1 -0
  245. package/lib/browser/memory-directory-variable-contribution.d.ts +41 -0
  246. package/lib/browser/memory-directory-variable-contribution.d.ts.map +1 -0
  247. package/lib/browser/memory-directory-variable-contribution.js +107 -0
  248. package/lib/browser/memory-directory-variable-contribution.js.map +1 -0
  249. package/lib/browser/memory-directory-variable-contribution.spec.d.ts +2 -0
  250. package/lib/browser/memory-directory-variable-contribution.spec.d.ts.map +1 -0
  251. package/lib/browser/memory-directory-variable-contribution.spec.js +98 -0
  252. package/lib/browser/memory-directory-variable-contribution.spec.js.map +1 -0
  253. package/lib/browser/open-editors-hint-contribution.d.ts +7 -0
  254. package/lib/browser/open-editors-hint-contribution.d.ts.map +1 -0
  255. package/lib/browser/open-editors-hint-contribution.js +43 -0
  256. package/lib/browser/open-editors-hint-contribution.js.map +1 -0
  257. package/lib/browser/project-info-agent.d.ts +2 -0
  258. package/lib/browser/project-info-agent.d.ts.map +1 -1
  259. package/lib/browser/project-info-agent.js +5 -0
  260. package/lib/browser/project-info-agent.js.map +1 -1
  261. package/lib/browser/review/pr-review-agent.d.ts +2 -0
  262. package/lib/browser/review/pr-review-agent.d.ts.map +1 -1
  263. package/lib/browser/review/pr-review-agent.js +5 -0
  264. package/lib/browser/review/pr-review-agent.js.map +1 -1
  265. package/lib/browser/summarize-session-command-contribution.d.ts +2 -1
  266. package/lib/browser/summarize-session-command-contribution.d.ts.map +1 -1
  267. package/lib/browser/summarize-session-command-contribution.js +6 -1
  268. package/lib/browser/summarize-session-command-contribution.js.map +1 -1
  269. package/lib/browser/task-context-file-storage-service.d.ts.map +1 -1
  270. package/lib/browser/task-context-file-storage-service.js +1 -0
  271. package/lib/browser/task-context-file-storage-service.js.map +1 -1
  272. package/lib/browser/todo-tool-renderer.js +11 -19
  273. package/lib/browser/todo-tool-renderer.js.map +1 -1
  274. package/lib/browser/user-interaction-tool-renderer.js +39 -83
  275. package/lib/browser/user-interaction-tool-renderer.js.map +1 -1
  276. package/lib/browser/user-interaction-tool.d.ts +2 -0
  277. package/lib/browser/user-interaction-tool.d.ts.map +1 -1
  278. package/lib/browser/user-interaction-tool.js +7 -1
  279. package/lib/browser/user-interaction-tool.js.map +1 -1
  280. package/lib/browser/user-interaction-tool.spec.js +4 -2
  281. package/lib/browser/user-interaction-tool.spec.js.map +1 -1
  282. package/lib/browser/workspace-functions.d.ts +45 -7
  283. package/lib/browser/workspace-functions.d.ts.map +1 -1
  284. package/lib/browser/workspace-functions.js +108 -70
  285. package/lib/browser/workspace-functions.js.map +1 -1
  286. package/lib/browser/workspace-functions.spec.js +139 -9
  287. package/lib/browser/workspace-functions.spec.js.map +1 -1
  288. package/lib/browser/workspace-launch-provider.spec.js +3 -0
  289. package/lib/browser/workspace-launch-provider.spec.js.map +1 -1
  290. package/lib/browser/workspace-search-provider.d.ts.map +1 -1
  291. package/lib/browser/workspace-search-provider.js +4 -7
  292. package/lib/browser/workspace-search-provider.js.map +1 -1
  293. package/lib/browser/workspace-search-provider.spec.js +1 -2
  294. package/lib/browser/workspace-search-provider.spec.js.map +1 -1
  295. package/lib/browser/workspace-task-provider.spec.js +4 -0
  296. package/lib/browser/workspace-task-provider.spec.js.map +1 -1
  297. package/lib/common/coder-replace-prompt-template.d.ts +0 -2
  298. package/lib/common/coder-replace-prompt-template.d.ts.map +1 -1
  299. package/lib/common/coder-replace-prompt-template.js +10 -11
  300. package/lib/common/coder-replace-prompt-template.js.map +1 -1
  301. package/lib/common/command-chat-agents.d.ts +2 -1
  302. package/lib/common/command-chat-agents.d.ts.map +1 -1
  303. package/lib/common/command-chat-agents.js +6 -1
  304. package/lib/common/command-chat-agents.js.map +1 -1
  305. package/lib/common/open-editors-hint-fragment-id.d.ts +2 -0
  306. package/lib/common/open-editors-hint-fragment-id.d.ts.map +1 -0
  307. package/lib/{browser/ai-configuration/components/empty-state.js → common/open-editors-hint-fragment-id.js} +5 -11
  308. package/lib/common/open-editors-hint-fragment-id.js.map +1 -0
  309. package/lib/common/orchestrator-chat-agent.d.ts +2 -1
  310. package/lib/common/orchestrator-chat-agent.d.ts.map +1 -1
  311. package/lib/common/orchestrator-chat-agent.js +5 -0
  312. package/lib/common/orchestrator-chat-agent.js.map +1 -1
  313. package/lib/common/universal-chat-agent.d.ts +2 -0
  314. package/lib/common/universal-chat-agent.d.ts.map +1 -1
  315. package/lib/common/universal-chat-agent.js +5 -0
  316. package/lib/common/universal-chat-agent.js.map +1 -1
  317. package/lib/common/universal-prompt-template.d.ts.map +1 -1
  318. package/lib/common/universal-prompt-template.js +3 -0
  319. package/lib/common/universal-prompt-template.js.map +1 -1
  320. package/lib/common/workspace-preferences.js +2 -2
  321. package/lib/common/workspace-preferences.js.map +1 -1
  322. package/lib/common/workspace-search-provider-util.d.ts +2 -1
  323. package/lib/common/workspace-search-provider-util.d.ts.map +1 -1
  324. package/lib/common/workspace-search-provider-util.js +3 -2
  325. package/lib/common/workspace-search-provider-util.js.map +1 -1
  326. package/lib/common/workspace-search-provider-util.spec.d.ts +2 -0
  327. package/lib/common/workspace-search-provider-util.spec.d.ts.map +1 -0
  328. package/lib/common/workspace-search-provider-util.spec.js +55 -0
  329. package/lib/common/workspace-search-provider-util.spec.js.map +1 -0
  330. package/lib/node/github-repo-service-impl.d.ts +2 -0
  331. package/lib/node/github-repo-service-impl.d.ts.map +1 -1
  332. package/lib/node/github-repo-service-impl.js +7 -1
  333. package/lib/node/github-repo-service-impl.js.map +1 -1
  334. package/package.json +26 -25
  335. package/src/browser/ai-configuration/agent-icon.ts +37 -0
  336. package/src/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.ts +164 -0
  337. package/src/browser/ai-configuration/ai-configuration-detail-widget.spec.ts +165 -0
  338. package/src/browser/ai-configuration/ai-configuration-detail-widget.tsx +237 -0
  339. package/src/browser/ai-configuration/ai-configuration-label-provider-contribution.ts +47 -0
  340. package/src/browser/ai-configuration/ai-configuration-open-preference-renderer.ts +64 -0
  341. package/src/browser/ai-configuration/ai-configuration-preference-ownership.spec.ts +135 -0
  342. package/src/browser/ai-configuration/{components/configuration-section.tsx → ai-configuration-resource.ts} +9 -19
  343. package/src/browser/ai-configuration/ai-configuration-search-widget.tsx +135 -0
  344. package/src/browser/ai-configuration/ai-configuration-search.spec.ts +91 -0
  345. package/src/browser/ai-configuration/ai-configuration-search.ts +43 -0
  346. package/src/browser/ai-configuration/{components/empty-state.tsx → ai-configuration-tree-model.ts} +7 -11
  347. package/src/browser/ai-configuration/ai-configuration-tree-nodes.spec.ts +150 -0
  348. package/src/browser/ai-configuration/ai-configuration-tree-nodes.ts +167 -0
  349. package/src/browser/ai-configuration/ai-configuration-tree-widget.tsx +457 -0
  350. package/src/browser/ai-configuration/ai-configuration-view-contribution.ts +156 -18
  351. package/src/browser/ai-configuration/ai-configuration-widget.tsx +107 -75
  352. package/src/browser/ai-configuration/categories/agent-capabilities-settings.spec.ts +161 -0
  353. package/src/browser/ai-configuration/categories/agent-capabilities-settings.tsx +340 -0
  354. package/src/browser/ai-configuration/categories/agent-chips.tsx +51 -0
  355. package/src/browser/ai-configuration/categories/agent-detail-model.ts +152 -0
  356. package/src/browser/ai-configuration/categories/agent-detail-view.tsx +329 -0
  357. package/src/browser/ai-configuration/categories/agents-configuration-category.spec.ts +119 -0
  358. package/src/browser/ai-configuration/categories/agents-configuration-category.tsx +431 -0
  359. package/src/browser/ai-configuration/categories/general-configuration-category.spec.ts +225 -0
  360. package/src/browser/ai-configuration/categories/general-configuration-category.tsx +465 -0
  361. package/src/browser/ai-configuration/categories/model-aliases-configuration-category.spec.ts +87 -0
  362. package/src/browser/ai-configuration/categories/model-aliases-configuration-category.tsx +286 -0
  363. package/src/browser/ai-configuration/categories/models-configuration-category.spec.ts +167 -0
  364. package/src/browser/ai-configuration/categories/models-configuration-category.tsx +264 -0
  365. package/src/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.ts +250 -0
  366. package/src/browser/ai-configuration/categories/prompt-snippets-configuration-category.tsx +438 -0
  367. package/src/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.ts +226 -0
  368. package/src/browser/ai-configuration/categories/prompts-and-skills-configuration-category.tsx +419 -0
  369. package/src/browser/ai-configuration/categories/token-usage-configuration-category.spec.ts +57 -0
  370. package/src/browser/ai-configuration/categories/token-usage-configuration-category.tsx +185 -0
  371. package/src/browser/ai-configuration/categories/tools-configuration-category.spec.ts +130 -0
  372. package/src/browser/ai-configuration/categories/tools-configuration-category.tsx +421 -0
  373. package/src/browser/ai-configuration/categories/variables-configuration-category.spec.ts +154 -0
  374. package/src/browser/ai-configuration/categories/variables-configuration-category.tsx +322 -0
  375. package/src/browser/ai-configuration/components/agent-notification-settings.tsx +38 -33
  376. package/src/browser/ai-configuration/language-model-renderer.spec.ts +100 -0
  377. package/src/browser/ai-configuration/language-model-renderer.tsx +244 -100
  378. package/src/browser/app-tester-chat-agent.ts +5 -2
  379. package/src/browser/architect-agent.ts +5 -2
  380. package/src/browser/architect-prompt-template.ts +7 -0
  381. package/src/browser/chat-session-item.tsx +2 -4
  382. package/src/browser/chat-session-list-service.ts +6 -3
  383. package/src/browser/code-reviewer-agent.ts +5 -2
  384. package/src/browser/coder-agent.ts +7 -5
  385. package/src/browser/context-file-validation-service-impl.spec.ts +3 -2
  386. package/src/browser/create-skill-agent.ts +5 -2
  387. package/src/browser/explore-agent.ts +5 -2
  388. package/src/browser/file-changeset-functions.spec.ts +158 -5
  389. package/src/browser/file-changeset-functions.ts +61 -23
  390. package/src/browser/frontend-module.ts +76 -63
  391. package/src/browser/github-chat-agent.ts +5 -2
  392. package/src/browser/github-repo-variable-contribution.ts +6 -3
  393. package/src/browser/ide-chat-welcome-message-provider.tsx +11 -11
  394. package/src/browser/memory-capability-contribution.spec.ts +85 -0
  395. package/src/browser/memory-capability-contribution.ts +86 -0
  396. package/src/browser/memory-directory-variable-contribution.spec.ts +113 -0
  397. package/src/browser/memory-directory-variable-contribution.ts +113 -0
  398. package/src/browser/open-editors-hint-contribution.ts +38 -0
  399. package/src/browser/project-info-agent.ts +5 -2
  400. package/src/browser/review/pr-review-agent.ts +5 -2
  401. package/src/browser/style/ai-configuration-base.css +0 -6
  402. package/src/browser/style/ai-configuration-shell.css +416 -0
  403. package/src/browser/style/ai-configuration-table.css +2 -15
  404. package/src/browser/style/index.css +220 -276
  405. package/src/browser/summarize-session-command-contribution.ts +6 -3
  406. package/src/browser/task-context-file-storage-service.ts +5 -2
  407. package/src/browser/user-interaction-tool.spec.ts +5 -2
  408. package/src/browser/user-interaction-tool.ts +6 -2
  409. package/src/browser/workspace-functions.spec.ts +163 -10
  410. package/src/browser/workspace-functions.ts +121 -72
  411. package/src/browser/workspace-launch-provider.spec.ts +4 -1
  412. package/src/browser/workspace-search-provider.spec.ts +1 -2
  413. package/src/browser/workspace-search-provider.ts +4 -7
  414. package/src/browser/workspace-task-provider.spec.ts +5 -1
  415. package/src/common/coder-replace-prompt-template.ts +9 -9
  416. package/src/common/command-chat-agents.ts +6 -2
  417. package/src/{browser/ai-configuration/base/ai-configuration-base-widget.tsx → common/open-editors-hint-fragment-id.ts} +2 -22
  418. package/src/common/orchestrator-chat-agent.ts +5 -2
  419. package/src/common/universal-chat-agent.ts +5 -2
  420. package/src/common/universal-prompt-template.ts +3 -0
  421. package/src/common/workspace-preferences.ts +2 -2
  422. package/src/common/workspace-search-provider-util.spec.ts +61 -0
  423. package/src/common/workspace-search-provider-util.ts +3 -2
  424. package/src/node/github-repo-service-impl.ts +6 -2
  425. package/lib/browser/ai-configuration/agent-configuration-widget.d.ts +0 -72
  426. package/lib/browser/ai-configuration/agent-configuration-widget.d.ts.map +0 -1
  427. package/lib/browser/ai-configuration/agent-configuration-widget.js +0 -620
  428. package/lib/browser/ai-configuration/agent-configuration-widget.js.map +0 -1
  429. package/lib/browser/ai-configuration/agent-configuration-widget.spec.d.ts +0 -2
  430. package/lib/browser/ai-configuration/agent-configuration-widget.spec.d.ts.map +0 -1
  431. package/lib/browser/ai-configuration/agent-configuration-widget.spec.js +0 -56
  432. package/lib/browser/ai-configuration/agent-configuration-widget.spec.js.map +0 -1
  433. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.d.ts +0 -31
  434. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.d.ts.map +0 -1
  435. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.js +0 -55
  436. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.js.map +0 -1
  437. package/lib/browser/ai-configuration/base/ai-configuration-base-widget.d.ts +0 -13
  438. package/lib/browser/ai-configuration/base/ai-configuration-base-widget.d.ts.map +0 -1
  439. package/lib/browser/ai-configuration/base/ai-configuration-base-widget.js.map +0 -1
  440. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.d.ts +0 -23
  441. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.d.ts.map +0 -1
  442. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.js +0 -60
  443. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.js.map +0 -1
  444. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.d.ts +0 -55
  445. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.d.ts.map +0 -1
  446. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.js +0 -96
  447. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.js.map +0 -1
  448. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.d.ts +0 -44
  449. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.d.ts.map +0 -1
  450. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.js +0 -66
  451. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.js.map +0 -1
  452. package/lib/browser/ai-configuration/components/configuration-section.d.ts +0 -12
  453. package/lib/browser/ai-configuration/components/configuration-section.d.ts.map +0 -1
  454. package/lib/browser/ai-configuration/components/configuration-section.js.map +0 -1
  455. package/lib/browser/ai-configuration/components/empty-state.d.ts +0 -10
  456. package/lib/browser/ai-configuration/components/empty-state.d.ts.map +0 -1
  457. package/lib/browser/ai-configuration/components/empty-state.js.map +0 -1
  458. package/lib/browser/ai-configuration/components/expandable-section.d.ts +0 -13
  459. package/lib/browser/ai-configuration/components/expandable-section.d.ts.map +0 -1
  460. package/lib/browser/ai-configuration/components/expandable-section.js +0 -31
  461. package/lib/browser/ai-configuration/components/expandable-section.js.map +0 -1
  462. package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts +0 -26
  463. package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts.map +0 -1
  464. package/lib/browser/ai-configuration/model-aliases-configuration-widget.js +0 -198
  465. package/lib/browser/ai-configuration/model-aliases-configuration-widget.js.map +0 -1
  466. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts +0 -140
  467. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts.map +0 -1
  468. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js +0 -508
  469. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js.map +0 -1
  470. package/lib/browser/ai-configuration/skills-configuration-widget.d.ts +0 -29
  471. package/lib/browser/ai-configuration/skills-configuration-widget.d.ts.map +0 -1
  472. package/lib/browser/ai-configuration/skills-configuration-widget.js +0 -166
  473. package/lib/browser/ai-configuration/skills-configuration-widget.js.map +0 -1
  474. package/lib/browser/ai-configuration/skills-configuration-widget.spec.d.ts +0 -2
  475. package/lib/browser/ai-configuration/skills-configuration-widget.spec.d.ts.map +0 -1
  476. package/lib/browser/ai-configuration/skills-configuration-widget.spec.js +0 -191
  477. package/lib/browser/ai-configuration/skills-configuration-widget.spec.js.map +0 -1
  478. package/lib/browser/ai-configuration/template-settings-renderer.d.ts +0 -9
  479. package/lib/browser/ai-configuration/template-settings-renderer.d.ts.map +0 -1
  480. package/lib/browser/ai-configuration/template-settings-renderer.js +0 -78
  481. package/lib/browser/ai-configuration/template-settings-renderer.js.map +0 -1
  482. package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts +0 -20
  483. package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts.map +0 -1
  484. package/lib/browser/ai-configuration/token-usage-configuration-widget.js +0 -170
  485. package/lib/browser/ai-configuration/token-usage-configuration-widget.js.map +0 -1
  486. package/lib/browser/ai-configuration/tools-configuration-widget.d.ts +0 -52
  487. package/lib/browser/ai-configuration/tools-configuration-widget.d.ts.map +0 -1
  488. package/lib/browser/ai-configuration/tools-configuration-widget.js +0 -357
  489. package/lib/browser/ai-configuration/tools-configuration-widget.js.map +0 -1
  490. package/lib/browser/ai-configuration/variable-configuration-widget.d.ts +0 -22
  491. package/lib/browser/ai-configuration/variable-configuration-widget.d.ts.map +0 -1
  492. package/lib/browser/ai-configuration/variable-configuration-widget.js +0 -133
  493. package/lib/browser/ai-configuration/variable-configuration-widget.js.map +0 -1
  494. package/src/browser/ai-configuration/agent-configuration-widget.spec.ts +0 -71
  495. package/src/browser/ai-configuration/agent-configuration-widget.tsx +0 -928
  496. package/src/browser/ai-configuration/base/ai-card-grid-configuration-widget.tsx +0 -72
  497. package/src/browser/ai-configuration/base/ai-hierarchical-configuration-widget.tsx +0 -51
  498. package/src/browser/ai-configuration/base/ai-list-detail-configuration-widget.tsx +0 -140
  499. package/src/browser/ai-configuration/base/ai-table-configuration-widget.tsx +0 -107
  500. package/src/browser/ai-configuration/components/expandable-section.tsx +0 -51
  501. package/src/browser/ai-configuration/model-aliases-configuration-widget.tsx +0 -270
  502. package/src/browser/ai-configuration/prompt-fragments-configuration-widget.tsx +0 -736
  503. package/src/browser/ai-configuration/skills-configuration-widget.spec.ts +0 -248
  504. package/src/browser/ai-configuration/skills-configuration-widget.tsx +0 -229
  505. package/src/browser/ai-configuration/template-settings-renderer.tsx +0 -125
  506. package/src/browser/ai-configuration/token-usage-configuration-widget.tsx +0 -214
  507. package/src/browser/ai-configuration/tools-configuration-widget.tsx +0 -544
  508. package/src/browser/ai-configuration/variable-configuration-widget.tsx +0 -159
  509. package/src/browser/style/ai-configuration-cards.css +0 -60
@@ -0,0 +1,264 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { Emitter, Event, nls } from '@theia/core';
18
+ import { codicon } from '@theia/core/lib/browser';
19
+ import { DisposableCollection } from '@theia/core/lib/common';
20
+ import { inject, injectable, postConstruct } from '@theia/core/shared/inversify';
21
+ import * as React from '@theia/core/shared/react';
22
+ import {
23
+ AiConfigurationCategory,
24
+ AiConfigurationCategoryId,
25
+ AiConfigurationCategoryOrder,
26
+ AiConfigurationRenderContext,
27
+ AiConfigurationSearchItem,
28
+ AiConfigurationSearchProvider,
29
+ AiConfigurationTreeItem
30
+ } from '@theia/ai-core-ui/lib/browser/ai-configuration/ai-configuration-category';
31
+ import { AiSettingsRowService } from '@theia/ai-core-ui/lib/browser/ai-configuration/components/ai-settings-row-service';
32
+ import { AiConfigurationSection } from '@theia/ai-core-ui/lib/browser/ai-configuration/components/ai-configuration-primitives';
33
+ import { CollectionCategoryRenderer } from '@theia/ai-core-ui/lib/browser/ai-configuration/renderers/collection-category-renderer';
34
+ import { AiSettingsRow } from '@theia/ai-core-ui/lib/browser/ai-configuration/components/ai-settings-row';
35
+
36
+ /** Prefix shared by every AI preference. */
37
+ const AI_FEATURES_PREFIX = 'ai-features.';
38
+
39
+ /** Id of the cross-provider "Model Settings" section (kept in the overview, not a provider node). */
40
+ const MODEL_SETTINGS_ID = 'model-settings';
41
+
42
+ /** Segments that make up the cross-provider "Model Settings" section. */
43
+ const MODEL_SETTINGS_SEGMENTS = new Set<string>(['modelSettings', 'reasoning']);
44
+
45
+ interface ModelsSection {
46
+ readonly id: string;
47
+ readonly title: string;
48
+ readonly preferenceIds: string[];
49
+ }
50
+
51
+ /**
52
+ * The Models category: a `collection` listing each language-model provider as a tree child, so
53
+ * providers appear as nodes under the Models category. Provider blocks are discovered from the
54
+ * registered `ai-features.<provider>.*` preferences, so any installed provider package contributes
55
+ * a node here without ai-ide having to depend on it.
56
+ *
57
+ * The page layout comes from {@link CollectionCategoryRenderer}, like the other collection categories:
58
+ * the overview shows the cross-provider model settings (`ai-features.modelSettings.*`,
59
+ * `ai-features.reasoning.*`) above the provider cards, and selecting a provider node shows that
60
+ * provider's settings.
61
+ */
62
+ @injectable()
63
+ export class ModelsConfigurationCategory extends CollectionCategoryRenderer implements AiConfigurationCategory, AiConfigurationSearchProvider {
64
+
65
+ readonly id = AiConfigurationCategoryId.MODELS;
66
+ readonly label = nls.localize('theia/ai/core/aiConfiguration/models/label', 'Providers & Models');
67
+ readonly description = nls.localize('theia/ai/ide/modelsConfiguration/description',
68
+ 'Configure language-model providers and the models available to agents.');
69
+ readonly iconClass = codicon('cloud');
70
+ readonly order = AiConfigurationCategoryOrder.MODELS;
71
+ readonly kind = 'collection' as const;
72
+
73
+ @inject(AiSettingsRowService)
74
+ protected readonly settingsRowService: AiSettingsRowService;
75
+
76
+ protected readonly onDidChangeEmitter = new Emitter<void>();
77
+ readonly onDidChange: Event<void> = this.onDidChangeEmitter.event;
78
+ protected readonly toDispose = new DisposableCollection(this.onDidChangeEmitter);
79
+
80
+ get renderer(): this {
81
+ return this;
82
+ }
83
+
84
+ protected get categoryId(): string {
85
+ return this.id;
86
+ }
87
+
88
+ getOwnedPreferenceIds(): string[] {
89
+ return this.getSections().flatMap(section => section.preferenceIds);
90
+ }
91
+
92
+ get search(): AiConfigurationSearchProvider {
93
+ return this;
94
+ }
95
+
96
+ @postConstruct()
97
+ protected init(): void {
98
+ this.toDispose.push(this.settingsRowService.onPreferenceChanged(() => this.onDidChangeEmitter.fire()));
99
+ }
100
+
101
+ dispose(): void {
102
+ this.toDispose.dispose();
103
+ }
104
+
105
+ /**
106
+ * One tree child per discovered provider (the cross-provider model settings stay in the overview).
107
+ * Each carries the category icon so the overview cards show it; the tree nodes fall back to it anyway.
108
+ */
109
+ getTreeChildren(): AiConfigurationTreeItem[] {
110
+ return this.getProviderSections().map(section => ({
111
+ id: section.id,
112
+ label: section.title,
113
+ iconClass: this.iconClass
114
+ } satisfies AiConfigurationTreeItem));
115
+ }
116
+
117
+ protected override get overviewListTitle(): string {
118
+ return nls.localize('theia/ai/ide/modelsConfiguration/providers', 'Providers');
119
+ }
120
+
121
+ protected override getEmptyMessage(): string {
122
+ return nls.localize('theia/ai/ide/modelsConfiguration/noProviders', 'No language-model providers are installed.');
123
+ }
124
+
125
+ /** Shown above the provider cards: the cross-provider model settings, when any are registered. */
126
+ protected override renderCategorySettings(ctx: AiConfigurationRenderContext): React.ReactNode {
127
+ const modelSettings = this.getModelSettingsSection();
128
+ return modelSettings && <AiConfigurationSection title={modelSettings.title}>
129
+ {modelSettings.preferenceIds.map(preferenceId => this.renderPreferenceRow(ctx, preferenceId))}
130
+ </AiConfigurationSection>;
131
+ }
132
+
133
+ /** Provider detail (node selected): that provider's settings. */
134
+ protected renderItemSections(item: AiConfigurationTreeItem, ctx: AiConfigurationRenderContext): React.ReactNode {
135
+ const section = this.getProviderSections().find(candidate => candidate.id === item.id);
136
+ if (!section) {
137
+ return undefined;
138
+ }
139
+ return <AiConfigurationSection title={nls.localizeByDefault('Settings')}>
140
+ {section.preferenceIds.map(preferenceId => this.renderPreferenceRow(ctx, preferenceId))}
141
+ </AiConfigurationSection>;
142
+ }
143
+
144
+ protected renderPreferenceRow(ctx: AiConfigurationRenderContext, preferenceId: string): React.ReactNode {
145
+ return <AiSettingsRow
146
+ key={preferenceId}
147
+ service={this.settingsRowService}
148
+ preferenceId={preferenceId}
149
+ scope={ctx.scope}
150
+ control={this.settingsRowService.controlFor(preferenceId)}
151
+ onDidChange={() => ctx.update()}
152
+ />;
153
+ }
154
+
155
+ /** Discovers the model-settings and provider sections from the registered preference schema. */
156
+ protected getSections(): ModelsSection[] {
157
+ const displayable = this.settingsRowService.aiFeaturePreferenceIds();
158
+
159
+ // A `ai-features.<segment>.*` block is a provider block only when at least one of its preferences
160
+ // positively declares the `aiModelProvider` typeDetail (the same marker used to label the block).
161
+ // This replaces a hand-maintained denylist of non-provider segments: an unknown feature area that
162
+ // never claims to be a provider is no longer mistaken for one — it falls through to the General
163
+ // catch-all instead of showing up as a bogus provider block.
164
+ const providerSegments = new Set<string>();
165
+ for (const preferenceId of displayable) {
166
+ if (this.settingsRowService.isModelProviderPreference(preferenceId)) {
167
+ providerSegments.add(this.segmentOf(preferenceId));
168
+ }
169
+ }
170
+
171
+ const modelSettings: string[] = [];
172
+ const byProvider = new Map<string, string[]>();
173
+ for (const preferenceId of displayable) {
174
+ const segment = this.segmentOf(preferenceId);
175
+ if (MODEL_SETTINGS_SEGMENTS.has(segment)) {
176
+ modelSettings.push(preferenceId);
177
+ } else if (providerSegments.has(segment)) {
178
+ const block = byProvider.get(segment) ?? [];
179
+ block.push(preferenceId);
180
+ byProvider.set(segment, block);
181
+ }
182
+ }
183
+
184
+ const sections: ModelsSection[] = [];
185
+ if (modelSettings.length > 0) {
186
+ sections.push({
187
+ id: MODEL_SETTINGS_ID,
188
+ title: nls.localize('theia/ai/ide/modelsConfiguration/modelSettings', 'Model Settings'),
189
+ preferenceIds: modelSettings
190
+ });
191
+ }
192
+ const providerSections = Array.from(byProvider.entries()).map(([provider, preferenceIds]) => ({
193
+ id: provider,
194
+ title: this.getProviderLabel(provider, preferenceIds),
195
+ preferenceIds
196
+ } satisfies ModelsSection));
197
+ // Order provider nodes by the label the user actually sees, not by the raw preference segment.
198
+ providerSections.sort((left, right) => left.title.localeCompare(right.title));
199
+ sections.push(...providerSections);
200
+ return sections;
201
+ }
202
+
203
+ /**
204
+ * The human-readable display name for a provider block. A provider declares it in its preference
205
+ * schema (via the `aiModelProvider` `typeDetails`, `MODEL_PROVIDER_TYPE_DETAIL`), so this
206
+ * package does not have to know provider names. Providers that declare no name (e.g. third-party
207
+ * packages) fall back to a prettified form of the `ai-features.<provider>.*` segment.
208
+ */
209
+ protected getProviderLabel(providerId: string, preferenceIds: string[]): string {
210
+ for (const preferenceId of preferenceIds) {
211
+ const declared = this.settingsRowService.modelProviderLabel(preferenceId);
212
+ if (declared) {
213
+ return declared;
214
+ }
215
+ }
216
+ return this.prettifyProviderId(providerId);
217
+ }
218
+
219
+ /** The `ai-features.<segment>.…` area segment of a preference id, e.g. `ai-features.google.apiKey` → `google`. */
220
+ protected segmentOf(preferenceId: string): string {
221
+ return preferenceId.substring(AI_FEATURES_PREFIX.length).split('.')[0];
222
+ }
223
+
224
+ /** Turns an unknown provider segment such as `myProvider` or `my-provider` into `My Provider`. */
225
+ protected prettifyProviderId(providerId: string): string {
226
+ const spaced = providerId
227
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
228
+ .replace(/[-_]+/g, ' ')
229
+ .trim();
230
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
231
+ }
232
+
233
+ /** The cross-provider "Model Settings" section, if any settings are registered for it. */
234
+ protected getModelSettingsSection(): ModelsSection | undefined {
235
+ return this.getSections().find(section => section.id === MODEL_SETTINGS_ID);
236
+ }
237
+
238
+ /** The provider sections (everything except the cross-provider "Model Settings"). */
239
+ protected getProviderSections(): ModelsSection[] {
240
+ return this.getSections().filter(section => section.id !== MODEL_SETTINGS_ID);
241
+ }
242
+
243
+ getSearchItems(): AiConfigurationSearchItem[] {
244
+ const settingLabel = nls.localizeByDefault('Setting');
245
+ return this.getSections().flatMap(section => {
246
+ // Provider settings live in the provider's node; model settings live in the overview.
247
+ const isProvider = section.id !== MODEL_SETTINGS_ID;
248
+ return section.preferenceIds.map(preferenceId => {
249
+ const described = this.settingsRowService.describe(preferenceId);
250
+ return {
251
+ label: described.label ?? preferenceId,
252
+ typeLabel: settingLabel,
253
+ categoryId: this.id,
254
+ target: {
255
+ categoryId: this.id,
256
+ itemId: isProvider ? section.id : undefined,
257
+ highlight: { rowId: preferenceId }
258
+ },
259
+ keywords: `${preferenceId} ${section.title}`
260
+ } satisfies AiConfigurationSearchItem;
261
+ });
262
+ });
263
+ }
264
+ }
@@ -0,0 +1,250 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
18
+ let disableJSDOM = enableJSDOM();
19
+
20
+ import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
21
+ FrontendApplicationConfigProvider.set({});
22
+
23
+ import { expect } from 'chai';
24
+ import { createRoot } from '@theia/core/shared/react-dom/client';
25
+ import { flushSync } from '@theia/core/shared/react-dom';
26
+ import { Agent } from '@theia/ai-core';
27
+ import { GENERIC_CAPABILITIES_AGENT_DELEGATION_PROMPT_ID } from '@theia/ai-core/lib/common';
28
+ import { PromptFragment } from '@theia/ai-core/lib/common/prompt-service';
29
+ import { AiConfigurationCategoryId } from '@theia/ai-core-ui/lib/browser/ai-configuration/ai-configuration-category';
30
+ import { PromptSnippetEntry, PromptSnippetsConfiguration, PromptSnippetsConfigurationCategory } from './prompt-snippets-configuration-category';
31
+
32
+ disableJSDOM();
33
+
34
+ describe('PromptSnippetsConfigurationCategory', () => {
35
+
36
+ before(() => disableJSDOM = enableJSDOM());
37
+ after(() => disableJSDOM());
38
+
39
+ interface Setup {
40
+ /** `id -> fragments`, as `getAllPromptFragments` returns them (customizations first, built-in last). */
41
+ fragments?: Record<string, Partial<PromptFragment>[]>;
42
+ /** `variantSetId -> variantIds`, as `getPromptVariantSets` returns them. */
43
+ variantSets?: Record<string, string[]>;
44
+ /** `agentId -> template of its single prompt`, used to resolve `{{capability:...}}` references. */
45
+ agentTemplates?: Record<string, string>;
46
+ }
47
+
48
+ function loadEntries({ fragments = {}, variantSets = {}, agentTemplates = {} }: Setup): PromptSnippetEntry[] {
49
+ const category = new PromptSnippetsConfigurationCategory();
50
+ const withIds = new Map<string, PromptFragment[]>(
51
+ Object.entries(fragments).map(([id, list]) => [id, list.map(fragment => ({ id, template: '', ...fragment }) as PromptFragment)])
52
+ );
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ (category as any).promptService = {
55
+ getAllPromptFragments: () => withIds,
56
+ getPromptVariantSets: () => new Map(Object.entries(variantSets)),
57
+ // The effective fragment is the first entry, mirroring the service's priority order.
58
+ getRawPromptFragment: (id: string) => withIds.get(id)?.[0],
59
+ getEffectiveVariantId: (id: string) => id
60
+ };
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ (category as any).availableAgents = Object.keys(agentTemplates).map(agentId => ({
63
+ id: agentId,
64
+ prompts: [{ id: `${agentId}-prompt` }]
65
+ }) as unknown as Agent);
66
+ for (const [agentId, template] of Object.entries(agentTemplates)) {
67
+ withIds.set(`${agentId}-prompt`, [{ id: `${agentId}-prompt`, template } as PromptFragment]);
68
+ }
69
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
70
+ return (category as any).loadEntries();
71
+ }
72
+
73
+ it('declares the prompt snippets single-page metadata', () => {
74
+ const category = new PromptSnippetsConfigurationCategory();
75
+ expect(category.id).to.equal(AiConfigurationCategoryId.PROMPT_SNIPPETS);
76
+ expect(category.kind).to.equal('single-page');
77
+ });
78
+
79
+ it('groups a fragment referenced as a capability under capabilities, and records the agents using it', () => {
80
+ const entries = loadEntries({
81
+ fragments: { github: [{ name: 'GitHub', description: 'talks to GitHub' }] },
82
+ agentTemplates: { coder: 'do work {{capability:github default on}}', architect: 'plan {{capability:github}}' }
83
+ });
84
+ const github = entries.find(entry => entry.id === 'github');
85
+
86
+ expect(github?.kind).to.equal('capability');
87
+ expect(github?.agentIds).to.deep.equal(['coder', 'architect']);
88
+ });
89
+
90
+ it('groups the fixed generic capability ids as generic, even when an agent references one as a capability', () => {
91
+ const entries = loadEntries({
92
+ fragments: { [GENERIC_CAPABILITIES_AGENT_DELEGATION_PROMPT_ID]: [{}] },
93
+ agentTemplates: { coder: `x {{capability:${GENERIC_CAPABILITIES_AGENT_DELEGATION_PROMPT_ID}}}` }
94
+ });
95
+
96
+ expect(entries.find(entry => entry.id === GENERIC_CAPABILITIES_AGENT_DELEGATION_PROMPT_ID)?.kind).to.equal('generic-capability');
97
+ });
98
+
99
+ it('treats declared frontmatter as a capability even when no agent references it yet', () => {
100
+ const entries = loadEntries({ fragments: { 'shell-execution': [{ name: 'Shell Execution' }] } });
101
+
102
+ expect(entries.find(entry => entry.id === 'shell-execution')?.kind).to.equal('capability');
103
+ });
104
+
105
+ it('groups a plain fragment without frontmatter as a snippet', () => {
106
+ const entries = loadEntries({ fragments: { 'project-info': [{ customizationId: 'workspace', priority: 1 }] } });
107
+ const snippet = entries.find(entry => entry.id === 'project-info');
108
+
109
+ expect(snippet?.kind).to.equal('snippet');
110
+ // Only a workspace file backs it, so resetting has nothing to fall back to: the row offers Remove.
111
+ expect(snippet?.customized).to.equal(true);
112
+ expect(snippet?.hasBuiltIn).to.equal(false);
113
+ });
114
+
115
+ it('reports a customized built-in as customized while keeping its built-in fallback', () => {
116
+ const entries = loadEntries({ fragments: { github: [{ customizationId: 'user', priority: 1, name: 'GitHub' }, { name: 'GitHub' }] } });
117
+ const github = entries.find(entry => entry.id === 'github');
118
+
119
+ expect(github?.customized).to.equal(true);
120
+ expect(github?.hasBuiltIn).to.equal(true);
121
+ });
122
+
123
+ it('excludes what other pages own: variant sets and their variants, slash commands, and generated MCP tool lists', () => {
124
+ const entries = loadEntries({
125
+ fragments: {
126
+ 'coder-system': [{}],
127
+ 'coder-system-edit': [{}],
128
+ 'remember-conversation-context': [{ isCommand: true, commandName: 'remember' }],
129
+ // A customization that lost the `isCommand` frontmatter must still not resurface here.
130
+ 'skill-command-refactor': [{ customizationId: 'user', priority: 1 }, { isCommand: true, commandName: 'refactor' }],
131
+ 'mcp_github_tools': [{}],
132
+ 'project-info': [{}]
133
+ },
134
+ variantSets: { 'coder-system': ['coder-system-edit'] }
135
+ });
136
+
137
+ expect(entries.map(entry => entry.id)).to.deep.equal(['project-info']);
138
+ });
139
+
140
+ it('counts the agents using a fragment in its pills, after the customization state', () => {
141
+ const category = new PromptSnippetsConfigurationCategory();
142
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
143
+ (category as any).availableAgents = [{ id: 'coder', name: 'Coder' }, { id: 'architect', name: 'Architect' }] as unknown as Agent[];
144
+ const build = (agentIds: string[], customized: boolean) =>
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+ (category as any).buildRow(
147
+ { id: 'github', kind: 'capability', agentIds, customized, hasBuiltIn: true } as PromptSnippetEntry,
148
+ { scope: 'user', navigate: () => { }, update: () => { } },
149
+ () => { }
150
+ );
151
+
152
+ expect(build(['coder'], false).pills).to.deep.equal(['1 agent']);
153
+ expect(build(['coder', 'architect'], false).pills).to.deep.equal(['2 agents']);
154
+ // The customization state leads, so it reads before the agent count and the actions.
155
+ expect(build(['coder'], true).pills).to.deep.equal(['Customized', '1 agent']);
156
+ });
157
+
158
+ it('offers its actions in the row header, whether or not the row is expanded', () => {
159
+ const category = new PromptSnippetsConfigurationCategory();
160
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
161
+ (category as any).availableAgents = [];
162
+ const build = (customized: boolean, hasBuiltIn: boolean) =>
163
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
164
+ (category as any).buildRow(
165
+ { id: 'github', kind: 'capability', agentIds: [], customized, hasBuiltIn } as PromptSnippetEntry,
166
+ { scope: 'user', navigate: () => { }, update: () => { } },
167
+ () => { }
168
+ );
169
+
170
+ expect(build(false, true).actions).to.not.equal(undefined);
171
+ expect(build(true, false).actions).to.not.equal(undefined);
172
+ });
173
+
174
+ it('indexes every entry for search under one row-id scheme, so a deep link only needs the fragment id', () => {
175
+ const category = new PromptSnippetsConfigurationCategory();
176
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
177
+ (category as any).entries = [
178
+ { id: 'project-info', kind: 'snippet', agentIds: [], customized: false, hasBuiltIn: true },
179
+ { id: 'github', kind: 'capability', name: 'GitHub', agentIds: ['coder'], customized: false, hasBuiltIn: true },
180
+ { id: GENERIC_CAPABILITIES_AGENT_DELEGATION_PROMPT_ID, kind: 'generic-capability', agentIds: [], customized: false, hasBuiltIn: true }
181
+ ] as PromptSnippetEntry[];
182
+ const items = category.getSearchItems();
183
+
184
+ expect(items.map(item => item.target.highlight?.rowId)).to.deep.equal([
185
+ 'fragment:project-info',
186
+ 'fragment:github',
187
+ `fragment:${GENERIC_CAPABILITIES_AGENT_DELEGATION_PROMPT_ID}`
188
+ ]);
189
+ expect(items.map(item => item.label)).to.deep.equal(['project-info', 'GitHub', GENERIC_CAPABILITIES_AGENT_DELEGATION_PROMPT_ID]);
190
+ expect(new Set(items.map(item => item.typeLabel)).size).to.equal(3);
191
+ expect(items.every(item => item.target.categoryId === AiConfigurationCategoryId.PROMPT_SNIPPETS)).to.equal(true);
192
+ });
193
+
194
+ it('anchors each rendered row with the id the search item and the agent capability link navigate to', () => {
195
+ const category = new PromptSnippetsConfigurationCategory();
196
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
197
+ (category as any).availableAgents = [];
198
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
+ (category as any).entries = [
200
+ { id: 'project-info', kind: 'snippet', agentIds: [], customized: true, hasBuiltIn: false },
201
+ { id: 'github', kind: 'capability', name: 'GitHub', agentIds: [], customized: false, hasBuiltIn: true }
202
+ ] as PromptSnippetEntry[];
203
+ // The page asks the service whether a page-level reset would do anything while rendering.
204
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
205
+ (category as any).promptService = { getAllPromptFragments: () => new Map<string, PromptFragment[]>() };
206
+ const container = document.createElement('div');
207
+ document.body.appendChild(container);
208
+ const root = createRoot(container);
209
+ try {
210
+ flushSync(() => root.render(category.renderPage({ scope: 'user', navigate: () => { }, update: () => { } })));
211
+ const anchored = Array.from(container.querySelectorAll('[data-ai-config-row-id]'))
212
+ .map(element => element.getAttribute('data-ai-config-row-id'));
213
+
214
+ // Without the anchor the scroll-and-flash silently does nothing when navigated to from an agent.
215
+ expect(anchored).to.include(PromptSnippetsConfiguration.selectionFor('github').highlight!.rowId);
216
+ expect(anchored).to.include(PromptSnippetsConfiguration.selectionFor('project-info').highlight!.rowId);
217
+ } finally {
218
+ flushSync(() => root.unmount());
219
+ container.remove();
220
+ }
221
+ });
222
+
223
+ it('offers the page-level reset whenever a customized fragment has a built-in to fall back to', () => {
224
+ const category = new PromptSnippetsConfigurationCategory();
225
+ const withFragments = (fragments: Record<string, Partial<PromptFragment>[]>) => {
226
+ const map = new Map<string, PromptFragment[]>(
227
+ Object.entries(fragments).map(([id, list]) => [id, list.map(f => ({ id, template: '', ...f }) as PromptFragment)])
228
+ );
229
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
230
+ (category as any).promptService = { getAllPromptFragments: () => map };
231
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
232
+ return (category as any).hasResettableCustomizations() as boolean;
233
+ };
234
+
235
+ // A customized built-in: resetting reverts it.
236
+ expect(withFragments({ github: [{ customizationId: 'user', priority: 1 }, {}] })).to.equal(true);
237
+ // Also true for a prompt variant the page itself does not list, since the reset covers those too.
238
+ expect(withFragments({ 'coder-system-agent-mode': [{ customizationId: 'user', priority: 1 }, {}] })).to.equal(true);
239
+ // A user-authored snippet has no built-in, so a reset would do nothing to it.
240
+ expect(withFragments({ 'project-info': [{ customizationId: 'workspace', priority: 1 }] })).to.equal(false);
241
+ expect(withFragments({ github: [{}] })).to.equal(false);
242
+ });
243
+
244
+ it('builds the same row id the agent capability deep link navigates to', () => {
245
+ const selection = PromptSnippetsConfiguration.selectionFor('github');
246
+
247
+ expect(selection.categoryId).to.equal(AiConfigurationCategoryId.PROMPT_SNIPPETS);
248
+ expect(selection.highlight?.rowId).to.equal('fragment:github');
249
+ });
250
+ });