@theia/ai-ide 1.67.0-next.56 → 1.67.0-next.86

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 (373) hide show
  1. package/lib/browser/address-pr-review-command-contribution.d.ts +9 -0
  2. package/lib/browser/address-pr-review-command-contribution.d.ts.map +1 -0
  3. package/lib/browser/address-pr-review-command-contribution.js +176 -0
  4. package/lib/browser/address-pr-review-command-contribution.js.map +1 -0
  5. package/lib/browser/ai-configuration/agent-configuration-widget.d.ts +47 -0
  6. package/lib/browser/ai-configuration/agent-configuration-widget.d.ts.map +1 -0
  7. package/lib/browser/ai-configuration/agent-configuration-widget.js +385 -0
  8. package/lib/browser/ai-configuration/agent-configuration-widget.js.map +1 -0
  9. package/lib/browser/ai-configuration/ai-configuration-service.d.ts +18 -0
  10. package/lib/browser/ai-configuration/ai-configuration-service.d.ts.map +1 -0
  11. package/lib/browser/ai-configuration/ai-configuration-service.js +53 -0
  12. package/lib/browser/ai-configuration/ai-configuration-service.js.map +1 -0
  13. package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts +14 -0
  14. package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts.map +1 -0
  15. package/lib/browser/ai-configuration/ai-configuration-view-contribution.js +67 -0
  16. package/lib/browser/ai-configuration/ai-configuration-view-contribution.js.map +1 -0
  17. package/lib/browser/ai-configuration/ai-configuration-widget.d.ts +29 -0
  18. package/lib/browser/ai-configuration/ai-configuration-widget.d.ts.map +1 -0
  19. package/lib/browser/ai-configuration/ai-configuration-widget.js +118 -0
  20. package/lib/browser/ai-configuration/ai-configuration-widget.js.map +1 -0
  21. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.d.ts +32 -0
  22. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.d.ts.map +1 -0
  23. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.js +55 -0
  24. package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.js.map +1 -0
  25. package/lib/browser/ai-configuration/base/ai-configuration-base-widget.d.ts +14 -0
  26. package/lib/browser/ai-configuration/base/ai-configuration-base-widget.d.ts.map +1 -0
  27. package/lib/browser/ai-configuration/base/ai-configuration-base-widget.js +35 -0
  28. package/lib/browser/ai-configuration/base/ai-configuration-base-widget.js.map +1 -0
  29. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.d.ts +23 -0
  30. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.d.ts.map +1 -0
  31. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.js +60 -0
  32. package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.js.map +1 -0
  33. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.d.ts +56 -0
  34. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.d.ts.map +1 -0
  35. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.js +96 -0
  36. package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.js.map +1 -0
  37. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.d.ts +45 -0
  38. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.d.ts.map +1 -0
  39. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.js +66 -0
  40. package/lib/browser/ai-configuration/base/ai-table-configuration-widget.js.map +1 -0
  41. package/lib/browser/ai-configuration/components/configuration-section.d.ts +13 -0
  42. package/lib/browser/ai-configuration/components/configuration-section.d.ts.map +1 -0
  43. package/lib/browser/ai-configuration/components/configuration-section.js +28 -0
  44. package/lib/browser/ai-configuration/components/configuration-section.js.map +1 -0
  45. package/lib/browser/ai-configuration/components/empty-state.d.ts +11 -0
  46. package/lib/browser/ai-configuration/components/empty-state.d.ts.map +1 -0
  47. package/lib/browser/ai-configuration/components/empty-state.js +26 -0
  48. package/lib/browser/ai-configuration/components/empty-state.js.map +1 -0
  49. package/lib/browser/ai-configuration/components/expandable-section.d.ts +14 -0
  50. package/lib/browser/ai-configuration/components/expandable-section.d.ts.map +1 -0
  51. package/lib/browser/ai-configuration/components/expandable-section.js +31 -0
  52. package/lib/browser/ai-configuration/components/expandable-section.js.map +1 -0
  53. package/lib/browser/ai-configuration/language-model-renderer.d.ts +13 -0
  54. package/lib/browser/ai-configuration/language-model-renderer.d.ts.map +1 -0
  55. package/lib/browser/ai-configuration/language-model-renderer.js +105 -0
  56. package/lib/browser/ai-configuration/language-model-renderer.js.map +1 -0
  57. package/lib/browser/ai-configuration/mcp-configuration-widget.d.ts +42 -0
  58. package/lib/browser/ai-configuration/mcp-configuration-widget.d.ts.map +1 -0
  59. package/lib/browser/ai-configuration/mcp-configuration-widget.js +308 -0
  60. package/lib/browser/ai-configuration/mcp-configuration-widget.js.map +1 -0
  61. package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts +27 -0
  62. package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts.map +1 -0
  63. package/lib/browser/ai-configuration/model-aliases-configuration-widget.js +197 -0
  64. package/lib/browser/ai-configuration/model-aliases-configuration-widget.js.map +1 -0
  65. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts +141 -0
  66. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts.map +1 -0
  67. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js +508 -0
  68. package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js.map +1 -0
  69. package/lib/browser/ai-configuration/template-settings-renderer.d.ts +10 -0
  70. package/lib/browser/ai-configuration/template-settings-renderer.d.ts.map +1 -0
  71. package/lib/browser/ai-configuration/template-settings-renderer.js +48 -0
  72. package/lib/browser/ai-configuration/template-settings-renderer.js.map +1 -0
  73. package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts +21 -0
  74. package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts.map +1 -0
  75. package/lib/browser/ai-configuration/token-usage-configuration-widget.js +170 -0
  76. package/lib/browser/ai-configuration/token-usage-configuration-widget.js.map +1 -0
  77. package/lib/browser/ai-configuration/tools-configuration-widget.d.ts +35 -0
  78. package/lib/browser/ai-configuration/tools-configuration-widget.d.ts.map +1 -0
  79. package/lib/browser/ai-configuration/tools-configuration-widget.js +158 -0
  80. package/lib/browser/ai-configuration/tools-configuration-widget.js.map +1 -0
  81. package/lib/browser/ai-configuration/variable-configuration-widget.d.ts +23 -0
  82. package/lib/browser/ai-configuration/variable-configuration-widget.d.ts.map +1 -0
  83. package/lib/browser/ai-configuration/variable-configuration-widget.js +132 -0
  84. package/lib/browser/ai-configuration/variable-configuration-widget.js.map +1 -0
  85. package/lib/browser/ai-ide-activation-service.d.ts +18 -0
  86. package/lib/browser/ai-ide-activation-service.d.ts.map +1 -0
  87. package/lib/browser/ai-ide-activation-service.js +71 -0
  88. package/lib/browser/ai-ide-activation-service.js.map +1 -0
  89. package/lib/browser/ai-terminal-functions.d.ts +13 -0
  90. package/lib/browser/ai-terminal-functions.d.ts.map +1 -0
  91. package/lib/browser/ai-terminal-functions.js +114 -0
  92. package/lib/browser/ai-terminal-functions.js.map +1 -0
  93. package/lib/browser/analyze-gh-ticket-command-contribution.d.ts +9 -0
  94. package/lib/browser/analyze-gh-ticket-command-contribution.d.ts.map +1 -0
  95. package/lib/browser/analyze-gh-ticket-command-contribution.js +172 -0
  96. package/lib/browser/analyze-gh-ticket-command-contribution.js.map +1 -0
  97. package/lib/browser/app-tester-chat-agent.d.ts +35 -0
  98. package/lib/browser/app-tester-chat-agent.d.ts.map +1 -0
  99. package/lib/browser/app-tester-chat-agent.js +142 -0
  100. package/lib/browser/app-tester-chat-agent.js.map +1 -0
  101. package/lib/browser/app-tester-chat-functions.d.ts +25 -0
  102. package/lib/browser/app-tester-chat-functions.d.ts.map +1 -0
  103. package/lib/browser/app-tester-chat-functions.js +170 -0
  104. package/lib/browser/app-tester-chat-functions.js.map +1 -0
  105. package/lib/browser/app-tester-prompt-template.d.ts +6 -0
  106. package/lib/browser/app-tester-prompt-template.d.ts.map +1 -0
  107. package/lib/browser/app-tester-prompt-template.js +83 -0
  108. package/lib/browser/app-tester-prompt-template.js.map +1 -0
  109. package/lib/browser/architect-agent.d.ts +15 -0
  110. package/lib/browser/architect-agent.d.ts.map +1 -0
  111. package/lib/browser/architect-agent.js +68 -0
  112. package/lib/browser/architect-agent.js.map +1 -0
  113. package/lib/browser/coder-agent.d.ts +15 -0
  114. package/lib/browser/coder-agent.d.ts.map +1 -0
  115. package/lib/browser/coder-agent.js +81 -0
  116. package/lib/browser/coder-agent.js.map +1 -0
  117. package/lib/browser/context-file-validation-service-impl.d.ts +13 -0
  118. package/lib/browser/context-file-validation-service-impl.d.ts.map +1 -0
  119. package/lib/browser/context-file-validation-service-impl.js +123 -0
  120. package/lib/browser/context-file-validation-service-impl.js.map +1 -0
  121. package/lib/browser/context-file-validation-service-impl.spec.d.ts +2 -0
  122. package/lib/browser/context-file-validation-service-impl.spec.d.ts.map +1 -0
  123. package/lib/browser/context-file-validation-service-impl.spec.js +340 -0
  124. package/lib/browser/context-file-validation-service-impl.spec.js.map +1 -0
  125. package/lib/browser/context-functions.d.ts +16 -0
  126. package/lib/browser/context-functions.d.ts.map +1 -0
  127. package/lib/browser/context-functions.js +166 -0
  128. package/lib/browser/context-functions.js.map +1 -0
  129. package/lib/browser/context-functions.spec.d.ts +2 -0
  130. package/lib/browser/context-functions.spec.d.ts.map +1 -0
  131. package/lib/browser/context-functions.spec.js +213 -0
  132. package/lib/browser/context-functions.spec.js.map +1 -0
  133. package/lib/browser/file-changeset-function.spec.d.ts +2 -0
  134. package/lib/browser/file-changeset-function.spec.d.ts.map +1 -0
  135. package/lib/browser/file-changeset-function.spec.js +45 -0
  136. package/lib/browser/file-changeset-function.spec.js.map +1 -0
  137. package/lib/browser/file-changeset-functions.d.ts +87 -0
  138. package/lib/browser/file-changeset-functions.d.ts.map +1 -0
  139. package/lib/browser/file-changeset-functions.js +645 -0
  140. package/lib/browser/file-changeset-functions.js.map +1 -0
  141. package/lib/browser/file-changeset-functions.spec.d.ts +2 -0
  142. package/lib/browser/file-changeset-functions.spec.d.ts.map +1 -0
  143. package/lib/browser/file-changeset-functions.spec.js +179 -0
  144. package/lib/browser/file-changeset-functions.spec.js.map +1 -0
  145. package/lib/browser/frontend-module.d.ts +5 -0
  146. package/lib/browser/frontend-module.d.ts.map +1 -0
  147. package/lib/browser/frontend-module.js +226 -0
  148. package/lib/browser/frontend-module.js.map +1 -0
  149. package/lib/browser/github-chat-agent.d.ts +48 -0
  150. package/lib/browser/github-chat-agent.d.ts.map +1 -0
  151. package/lib/browser/github-chat-agent.js +222 -0
  152. package/lib/browser/github-chat-agent.js.map +1 -0
  153. package/lib/browser/github-prompt-template.d.ts +6 -0
  154. package/lib/browser/github-prompt-template.d.ts.map +1 -0
  155. package/lib/browser/github-prompt-template.js +53 -0
  156. package/lib/browser/github-prompt-template.js.map +1 -0
  157. package/lib/browser/github-repo-variable-contribution.d.ts +15 -0
  158. package/lib/browser/github-repo-variable-contribution.d.ts.map +1 -0
  159. package/lib/browser/github-repo-variable-contribution.js +82 -0
  160. package/lib/browser/github-repo-variable-contribution.js.map +1 -0
  161. package/lib/browser/ide-chat-welcome-message-provider.d.ts +10 -0
  162. package/lib/browser/ide-chat-welcome-message-provider.d.ts.map +1 -0
  163. package/lib/browser/ide-chat-welcome-message-provider.js +102 -0
  164. package/lib/browser/ide-chat-welcome-message-provider.js.map +1 -0
  165. package/lib/browser/implement-gh-ticket-command-contribution.d.ts +9 -0
  166. package/lib/browser/implement-gh-ticket-command-contribution.d.ts.map +1 -0
  167. package/lib/browser/implement-gh-ticket-command-contribution.js +156 -0
  168. package/lib/browser/implement-gh-ticket-command-contribution.js.map +1 -0
  169. package/lib/browser/project-info-agent.d.ts +13 -0
  170. package/lib/browser/project-info-agent.d.ts.map +1 -0
  171. package/lib/browser/project-info-agent.js +45 -0
  172. package/lib/browser/project-info-agent.js.map +1 -0
  173. package/lib/browser/remember-command-contribution.d.ts +16 -0
  174. package/lib/browser/remember-command-contribution.d.ts.map +1 -0
  175. package/lib/browser/remember-command-contribution.js +101 -0
  176. package/lib/browser/remember-command-contribution.js.map +1 -0
  177. package/lib/browser/summarize-session-command-contribution.d.ts +19 -0
  178. package/lib/browser/summarize-session-command-contribution.d.ts.map +1 -0
  179. package/lib/browser/summarize-session-command-contribution.js +118 -0
  180. package/lib/browser/summarize-session-command-contribution.js.map +1 -0
  181. package/lib/browser/task-background-summary-variable.d.ts +9 -0
  182. package/lib/browser/task-background-summary-variable.d.ts.map +1 -0
  183. package/lib/browser/task-background-summary-variable.js +60 -0
  184. package/lib/browser/task-background-summary-variable.js.map +1 -0
  185. package/lib/browser/task-context-agent.d.ts +13 -0
  186. package/lib/browser/task-context-agent.d.ts.map +1 -0
  187. package/lib/browser/task-context-agent.js +45 -0
  188. package/lib/browser/task-context-agent.js.map +1 -0
  189. package/lib/browser/task-context-file-storage-service.d.ts +40 -0
  190. package/lib/browser/task-context-file-storage-service.d.ts.map +1 -0
  191. package/lib/browser/task-context-file-storage-service.js +232 -0
  192. package/lib/browser/task-context-file-storage-service.js.map +1 -0
  193. package/lib/browser/template-preference-contribution.d.ts +17 -0
  194. package/lib/browser/template-preference-contribution.d.ts.map +1 -0
  195. package/lib/browser/template-preference-contribution.js +94 -0
  196. package/lib/browser/template-preference-contribution.js.map +1 -0
  197. package/lib/browser/test/tool-provider-cancellation-test-util.spec.d.ts +2 -0
  198. package/lib/browser/test/tool-provider-cancellation-test-util.spec.d.ts.map +1 -0
  199. package/lib/browser/test/tool-provider-cancellation-test-util.spec.js +52 -0
  200. package/lib/browser/test/tool-provider-cancellation-test-util.spec.js.map +1 -0
  201. package/lib/browser/workspace-functions.d.ts +78 -0
  202. package/lib/browser/workspace-functions.d.ts.map +1 -0
  203. package/lib/browser/workspace-functions.js +697 -0
  204. package/lib/browser/workspace-functions.js.map +1 -0
  205. package/lib/browser/workspace-functions.spec.d.ts +2 -0
  206. package/lib/browser/workspace-functions.spec.d.ts.map +1 -0
  207. package/lib/browser/workspace-functions.spec.js +161 -0
  208. package/lib/browser/workspace-functions.spec.js.map +1 -0
  209. package/lib/browser/workspace-launch-provider.d.ts +24 -0
  210. package/lib/browser/workspace-launch-provider.d.ts.map +1 -0
  211. package/lib/browser/workspace-launch-provider.js +216 -0
  212. package/lib/browser/workspace-launch-provider.js.map +1 -0
  213. package/lib/browser/workspace-launch-provider.spec.d.ts +2 -0
  214. package/lib/browser/workspace-launch-provider.spec.d.ts.map +1 -0
  215. package/lib/browser/workspace-launch-provider.spec.js +245 -0
  216. package/lib/browser/workspace-launch-provider.spec.js.map +1 -0
  217. package/lib/browser/workspace-search-provider.d.ts +15 -0
  218. package/lib/browser/workspace-search-provider.d.ts.map +1 -0
  219. package/lib/browser/workspace-search-provider.js +204 -0
  220. package/lib/browser/workspace-search-provider.js.map +1 -0
  221. package/lib/browser/workspace-search-provider.spec.d.ts +2 -0
  222. package/lib/browser/workspace-search-provider.spec.d.ts.map +1 -0
  223. package/lib/browser/workspace-search-provider.spec.js +82 -0
  224. package/lib/browser/workspace-search-provider.spec.js.map +1 -0
  225. package/lib/browser/workspace-task-provider.d.ts +15 -0
  226. package/lib/browser/workspace-task-provider.d.ts.map +1 -0
  227. package/lib/browser/workspace-task-provider.js +138 -0
  228. package/lib/browser/workspace-task-provider.js.map +1 -0
  229. package/lib/browser/workspace-task-provider.spec.d.ts +2 -0
  230. package/lib/browser/workspace-task-provider.spec.d.ts.map +1 -0
  231. package/lib/browser/workspace-task-provider.spec.js +109 -0
  232. package/lib/browser/workspace-task-provider.spec.js.map +1 -0
  233. package/lib/common/ai-configuration-preferences.d.ts +8 -0
  234. package/lib/common/ai-configuration-preferences.d.ts.map +1 -0
  235. package/lib/common/ai-configuration-preferences.js +41 -0
  236. package/lib/common/ai-configuration-preferences.js.map +1 -0
  237. package/lib/common/ai-ide-preferences.d.ts +5 -0
  238. package/lib/common/ai-ide-preferences.d.ts.map +1 -0
  239. package/lib/common/ai-ide-preferences.js +53 -0
  240. package/lib/common/ai-ide-preferences.js.map +1 -0
  241. package/lib/common/ai-terminal-functions.d.ts +2 -0
  242. package/lib/common/ai-terminal-functions.d.ts.map +1 -0
  243. package/lib/common/ai-terminal-functions.js +20 -0
  244. package/lib/common/ai-terminal-functions.js.map +1 -0
  245. package/lib/common/app-tester-chat-functions.d.ts +5 -0
  246. package/lib/common/app-tester-chat-functions.d.ts.map +1 -0
  247. package/lib/common/app-tester-chat-functions.js +23 -0
  248. package/lib/common/app-tester-chat-functions.js.map +1 -0
  249. package/lib/common/architect-prompt-template.d.ts +3 -0
  250. package/lib/common/architect-prompt-template.d.ts.map +1 -0
  251. package/lib/common/architect-prompt-template.js +81 -0
  252. package/lib/common/architect-prompt-template.js.map +1 -0
  253. package/lib/common/browser-automation-protocol.d.ts +15 -0
  254. package/lib/common/browser-automation-protocol.d.ts.map +1 -0
  255. package/lib/common/browser-automation-protocol.js +22 -0
  256. package/lib/common/browser-automation-protocol.js.map +1 -0
  257. package/lib/common/coder-replace-prompt-template.d.ts +11 -0
  258. package/lib/common/coder-replace-prompt-template.d.ts.map +1 -0
  259. package/lib/common/coder-replace-prompt-template.js +296 -0
  260. package/lib/common/coder-replace-prompt-template.js.map +1 -0
  261. package/lib/common/command-chat-agents.d.ts +36 -0
  262. package/lib/common/command-chat-agents.d.ts.map +1 -0
  263. package/lib/common/command-chat-agents.js +122 -0
  264. package/lib/common/command-chat-agents.js.map +1 -0
  265. package/lib/common/command-prompt-template.d.ts +3 -0
  266. package/lib/common/command-prompt-template.d.ts.map +1 -0
  267. package/lib/common/command-prompt-template.js +226 -0
  268. package/lib/common/command-prompt-template.js.map +1 -0
  269. package/lib/common/context-files-variable.d.ts +9 -0
  270. package/lib/common/context-files-variable.d.ts.map +1 -0
  271. package/lib/common/context-files-variable.js +52 -0
  272. package/lib/common/context-files-variable.js.map +1 -0
  273. package/lib/common/context-functions.d.ts +4 -0
  274. package/lib/common/context-functions.d.ts.map +1 -0
  275. package/lib/common/context-functions.js +22 -0
  276. package/lib/common/context-functions.js.map +1 -0
  277. package/lib/common/context-variables.d.ts +3 -0
  278. package/lib/common/context-variables.d.ts.map +1 -0
  279. package/lib/common/context-variables.js +21 -0
  280. package/lib/common/context-variables.js.map +1 -0
  281. package/lib/common/file-changeset-function-ids.d.ts +19 -0
  282. package/lib/common/file-changeset-function-ids.d.ts.map +1 -0
  283. package/lib/common/file-changeset-function-ids.js +37 -0
  284. package/lib/common/file-changeset-function-ids.js.map +1 -0
  285. package/lib/common/github-repo-protocol.d.ts +15 -0
  286. package/lib/common/github-repo-protocol.d.ts.map +1 -0
  287. package/lib/common/github-repo-protocol.js +21 -0
  288. package/lib/common/github-repo-protocol.js.map +1 -0
  289. package/lib/common/orchestrator-chat-agent.d.ts +36 -0
  290. package/lib/common/orchestrator-chat-agent.d.ts.map +1 -0
  291. package/lib/common/orchestrator-chat-agent.js +167 -0
  292. package/lib/common/orchestrator-chat-agent.js.map +1 -0
  293. package/lib/common/orchestrator-prompt-template.d.ts +3 -0
  294. package/lib/common/orchestrator-prompt-template.d.ts.map +1 -0
  295. package/lib/common/orchestrator-prompt-template.js +55 -0
  296. package/lib/common/orchestrator-prompt-template.js.map +1 -0
  297. package/lib/common/project-info-prompt-template.d.ts +6 -0
  298. package/lib/common/project-info-prompt-template.d.ts.map +1 -0
  299. package/lib/common/project-info-prompt-template.js +145 -0
  300. package/lib/common/project-info-prompt-template.js.map +1 -0
  301. package/lib/common/summarize-session-commands.d.ts +4 -0
  302. package/lib/common/summarize-session-commands.d.ts.map +1 -0
  303. package/lib/common/summarize-session-commands.js +28 -0
  304. package/lib/common/summarize-session-commands.js.map +1 -0
  305. package/lib/common/task-context-prompt-template.d.ts +8 -0
  306. package/lib/common/task-context-prompt-template.d.ts.map +1 -0
  307. package/lib/common/task-context-prompt-template.js +217 -0
  308. package/lib/common/task-context-prompt-template.js.map +1 -0
  309. package/lib/common/universal-chat-agent.d.ts +17 -0
  310. package/lib/common/universal-chat-agent.d.ts.map +1 -0
  311. package/lib/common/universal-chat-agent.js +47 -0
  312. package/lib/common/universal-chat-agent.js.map +1 -0
  313. package/lib/common/universal-prompt-template.d.ts +4 -0
  314. package/lib/common/universal-prompt-template.d.ts.map +1 -0
  315. package/lib/common/universal-prompt-template.js +32 -0
  316. package/lib/common/universal-prompt-template.js.map +1 -0
  317. package/lib/common/workspace-functions.d.ts +12 -0
  318. package/lib/common/workspace-functions.d.ts.map +1 -0
  319. package/lib/common/workspace-functions.js +30 -0
  320. package/lib/common/workspace-functions.js.map +1 -0
  321. package/lib/common/workspace-preferences.d.ts +10 -0
  322. package/lib/common/workspace-preferences.d.ts.map +1 -0
  323. package/lib/common/workspace-preferences.js +89 -0
  324. package/lib/common/workspace-preferences.js.map +1 -0
  325. package/lib/common/workspace-search-provider-util.d.ts +17 -0
  326. package/lib/common/workspace-search-provider-util.d.ts.map +1 -0
  327. package/lib/common/workspace-search-provider-util.js +51 -0
  328. package/lib/common/workspace-search-provider-util.js.map +1 -0
  329. package/lib/node/app-tester-agent/browser-automation-impl.d.ts +18 -0
  330. package/lib/node/app-tester-agent/browser-automation-impl.d.ts.map +1 -0
  331. package/lib/node/app-tester-agent/browser-automation-impl.js +96 -0
  332. package/lib/node/app-tester-agent/browser-automation-impl.js.map +1 -0
  333. package/lib/node/backend-module.d.ts +4 -0
  334. package/lib/node/backend-module.d.ts.map +1 -0
  335. package/lib/node/backend-module.js +45 -0
  336. package/lib/node/backend-module.js.map +1 -0
  337. package/lib/node/github-repo-service-impl.d.ts +7 -0
  338. package/lib/node/github-repo-service-impl.d.ts.map +1 -0
  339. package/lib/node/github-repo-service-impl.js +86 -0
  340. package/lib/node/github-repo-service-impl.js.map +1 -0
  341. package/lib/package.spec.d.ts +1 -0
  342. package/lib/package.spec.d.ts.map +1 -0
  343. package/lib/package.spec.js +26 -0
  344. package/lib/package.spec.js.map +1 -0
  345. package/package.json +21 -21
  346. package/src/browser/address-pr-review-command-contribution.ts +180 -0
  347. package/src/browser/ai-configuration/agent-configuration-widget.tsx +256 -135
  348. package/src/browser/ai-configuration/base/ai-card-grid-configuration-widget.tsx +72 -0
  349. package/src/browser/ai-configuration/base/ai-configuration-base-widget.tsx +37 -0
  350. package/src/browser/ai-configuration/base/ai-hierarchical-configuration-widget.tsx +51 -0
  351. package/src/browser/ai-configuration/base/ai-list-detail-configuration-widget.tsx +140 -0
  352. package/src/browser/ai-configuration/base/ai-table-configuration-widget.tsx +107 -0
  353. package/src/browser/ai-configuration/components/configuration-section.tsx +37 -0
  354. package/src/browser/ai-configuration/components/empty-state.tsx +30 -0
  355. package/src/browser/ai-configuration/components/expandable-section.tsx +51 -0
  356. package/src/browser/ai-configuration/language-model-renderer.tsx +68 -63
  357. package/src/browser/ai-configuration/mcp-configuration-widget.tsx +80 -85
  358. package/src/browser/ai-configuration/model-aliases-configuration-widget.tsx +93 -107
  359. package/src/browser/ai-configuration/template-settings-renderer.tsx +25 -29
  360. package/src/browser/ai-configuration/token-usage-configuration-widget.tsx +130 -130
  361. package/src/browser/ai-configuration/tools-configuration-widget.tsx +68 -59
  362. package/src/browser/ai-configuration/variable-configuration-widget.tsx +95 -45
  363. package/src/browser/analyze-gh-ticket-command-contribution.ts +176 -0
  364. package/src/browser/frontend-module.ts +6 -0
  365. package/src/browser/implement-gh-ticket-command-contribution.ts +160 -0
  366. package/src/browser/style/ai-configuration-base.css +90 -0
  367. package/src/browser/style/ai-configuration-cards.css +60 -0
  368. package/src/browser/style/ai-configuration-hierarchical.css +61 -0
  369. package/src/browser/style/ai-configuration-list-detail.css +88 -0
  370. package/src/browser/style/ai-configuration-table.css +73 -0
  371. package/src/browser/style/index.css +458 -288
  372. package/src/browser/style/widgets/mcp-configuration.css +253 -0
  373. package/src/browser/style/widgets/model-aliases-configuration.css +74 -0
@@ -147,10 +147,44 @@ export class AIMCPConfigurationWidget extends ReactWidget {
147
147
  }
148
148
 
149
149
  protected renderServerHeader(server: MCPServerDescription): React.ReactNode {
150
+ const isStoppable = server.status === MCPServerStatus.Running
151
+ || server.status === MCPServerStatus.Connected
152
+ || server.status === MCPServerStatus.Starting
153
+ || server.status === MCPServerStatus.Connecting;
154
+ const isStartable = server.status === MCPServerStatus.NotRunning
155
+ || server.status === MCPServerStatus.NotConnected
156
+ || server.status === MCPServerStatus.Errored;
157
+
158
+ const isRemote = isRemoteMCPServerDescription(server);
159
+ const startIcon = isRemote ? 'plug' : 'play';
160
+ const stopIcon = isRemote ? 'debug-disconnect' : 'close';
161
+ const startLabel = isRemote
162
+ ? nls.localize('theia/ai/mcpConfiguration/connectServer', 'Connect')
163
+ : nls.localize('theia/ai/mcpConfiguration/startServer', 'Start Server');
164
+ const stopLabel = isRemote
165
+ ? nls.localize('theia/ai/mcpConfiguration/disconnectServer', 'Disconnect')
166
+ : nls.localize('theia/ai/mcpConfiguration/stopServer', 'Stop Server');
167
+
150
168
  return (
151
169
  <div className="mcp-server-header">
152
170
  <div className="mcp-server-name">{server.name}</div>
153
- {this.renderStatusBadge(server)}
171
+ <div className="mcp-server-header-controls">
172
+ {this.renderStatusBadge(server)}
173
+ {isStartable && (
174
+ <button
175
+ className={`mcp-action-button codicon codicon-${startIcon}`}
176
+ onClick={() => this.handleStartServer(server.name)}
177
+ title={startLabel}
178
+ />
179
+ )}
180
+ {isStoppable && (
181
+ <button
182
+ className={`mcp-action-button codicon codicon-${stopIcon}`}
183
+ onClick={() => this.handleStopServer(server.name)}
184
+ title={stopLabel}
185
+ />
186
+ )}
187
+ </div>
154
188
  </div>
155
189
  );
156
190
  }
@@ -160,9 +194,9 @@ export class AIMCPConfigurationWidget extends ReactWidget {
160
194
  return;
161
195
  }
162
196
  return (
163
- <div className="mcp-server-section">
164
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/command', 'Command: ')}</span>
165
- <code className="mcp-code-block">{server.command}</code>
197
+ <div className="mcp-property-row">
198
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/command', 'Command')}:</span>
199
+ <code className="mcp-property-value">{server.command}</code>
166
200
  </div>
167
201
  );
168
202
  }
@@ -172,9 +206,9 @@ export class AIMCPConfigurationWidget extends ReactWidget {
172
206
  return;
173
207
  }
174
208
  return (
175
- <div className="mcp-server-section">
176
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/arguments', 'Arguments: ')}</span>
177
- <code className="mcp-code-block">{server.args.join(' ')}</code>
209
+ <div className="mcp-property-row">
210
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/arguments', 'Arguments')}:</span>
211
+ <code className="mcp-property-value">{server.args.join(' ')}</code>
178
212
  </div>
179
213
  );
180
214
  }
@@ -184,12 +218,12 @@ export class AIMCPConfigurationWidget extends ReactWidget {
184
218
  return;
185
219
  }
186
220
  return (
187
- <div className="mcp-server-section">
188
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/environmentVariables', 'Environment Variables: ')}</span>
189
- <div className="mcp-env-block">
221
+ <div className="mcp-property-row">
222
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/environmentVariables', 'Environment Variables')}:</span>
223
+ <div className="mcp-property-value">
190
224
  {Object.entries(server.env).map(([key, value]) => (
191
- <div key={key}>
192
- {key}={key.toLowerCase().includes('token') ? '******' : String(value)}
225
+ <div key={key} className="mcp-env-entry">
226
+ <code>{key}={key.toLowerCase().includes('token') ? '******' : String(value)}</code>
193
227
  </div>
194
228
  ))}
195
229
  </div>
@@ -202,9 +236,9 @@ export class AIMCPConfigurationWidget extends ReactWidget {
202
236
  return;
203
237
  }
204
238
  return (
205
- <div className="mcp-server-section">
206
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/serverUrl', 'Server URL: ')}</span>
207
- <code className="mcp-code-block">{server.serverUrl}</code>
239
+ <div className="mcp-property-row">
240
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/serverUrl', 'Server URL')}:</span>
241
+ <code className="mcp-property-value">{server.serverUrl}</code>
208
242
  </div>
209
243
  );
210
244
  }
@@ -214,9 +248,9 @@ export class AIMCPConfigurationWidget extends ReactWidget {
214
248
  return;
215
249
  }
216
250
  return (
217
- <div className="mcp-server-section">
218
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/serverAuthTokenHeader', 'Authentication Header Name: ')}</span>
219
- <code className="mcp-code-block">{server.serverAuthTokenHeader}</code>
251
+ <div className="mcp-property-row">
252
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/serverAuthTokenHeader', 'Auth Header Name')}:</span>
253
+ <code className="mcp-property-value">{server.serverAuthTokenHeader}</code>
220
254
  </div>
221
255
  );
222
256
  }
@@ -226,9 +260,9 @@ export class AIMCPConfigurationWidget extends ReactWidget {
226
260
  return;
227
261
  }
228
262
  return (
229
- <div className="mcp-server-section">
230
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/serverAuthToken', 'Authentication Token: ')}</span>
231
- <code className="mcp-code-block">******</code>
263
+ <div className="mcp-property-row">
264
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/serverAuthToken', 'Auth Token')}:</span>
265
+ <code className="mcp-property-value">******</code>
232
266
  </div>
233
267
  );
234
268
  }
@@ -238,26 +272,24 @@ export class AIMCPConfigurationWidget extends ReactWidget {
238
272
  return;
239
273
  }
240
274
  return (
241
- <div className="mcp-server-section">
242
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/headers', 'Headers: ')}</span>
243
- <div className="mcp-env-block">
275
+ <div className="mcp-property-row">
276
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/headers', 'Headers')}:</span>
277
+ <div className="mcp-property-value">
244
278
  {Object.entries(server.headers).map(([key, value]) => (
245
- <div key={key}>
246
- {key}={(key.toLowerCase().includes('token') || key.toLowerCase().includes('authorization')) ? '******' : String(value)}
279
+ <div key={key} className="mcp-env-entry">
280
+ <code>{key}={(key.toLowerCase().includes('token') || key.toLowerCase().includes('authorization')) ? '******' : String(value)}</code>
247
281
  </div>
248
282
  ))}
249
283
  </div>
250
-
251
284
  </div>
252
285
  );
253
286
  }
254
287
 
255
288
  protected renderAutostartSection(server: MCPServerDescription): React.ReactNode {
256
289
  return (
257
- <div className="mcp-server-section">
258
- <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/autostart', 'Autostart: ')}</span>
290
+ <div className="mcp-property-row">
291
+ <span className="mcp-property-label">{nls.localize('theia/ai/mcpConfiguration/autostart', 'Autostart')}:</span>
259
292
  <span className="mcp-autostart-badge" style={{
260
- backgroundColor: server.autostart ? 'var(--theia-successBackground)' : 'var(--theia-errorBackground)',
261
293
  color: server.autostart ? 'var(--theia-successForeground)' : 'var(--theia-errorForeground)',
262
294
  }}>
263
295
  {server.autostart ? nls.localize('theia/ai/mcpConfiguration/enabled', 'Enabled') : nls.localize('theia/ai/mcpConfiguration/disabled', 'Disabled')}
@@ -273,20 +305,16 @@ export class AIMCPConfigurationWidget extends ReactWidget {
273
305
  const isToolsExpanded = this.expandedTools[server.name] || false;
274
306
  return (
275
307
  <div className="mcp-tools-section">
276
- <div style={{ display: 'flex', alignItems: 'center' }} onClick={() => this.toggleTools(server.name)}>
277
- <div className="mcp-toggle-indicator" style={{ display: 'flex' }}>
278
- <span style={{
279
- display: 'inline-block',
280
- transition: 'transform 0.2s ease',
281
- fontSize: '12px'
282
- }}>
308
+ <div className="mcp-tools-header" onClick={() => this.toggleTools(server.name)}>
309
+ <div className="mcp-toggle-indicator">
310
+ <span className="mcp-toggle-icon">
283
311
  {isToolsExpanded ? '▼' : '►'}
284
312
  </span>
285
313
  </div>
286
- <div style={{ flexGrow: 1 }}>
314
+ <div className="mcp-tools-label-container">
287
315
  <span className="mcp-section-label">{nls.localize('theia/ai/mcpConfiguration/tools', 'Tools: ')}</span>
288
316
  </div>
289
- <div style={{ display: 'flex', gap: '4px' }}>
317
+ <div className="mcp-tools-actions">
290
318
  {this.renderButton(
291
319
  <i className="codicon codicon-versions"></i>,
292
320
  nls.localize('theia/ai/mcpConfiguration/copyAllList', 'Copy all (list of all tools)'),
@@ -327,11 +355,11 @@ export class AIMCPConfigurationWidget extends ReactWidget {
327
355
  {isToolsExpanded && (
328
356
  <div className="mcp-tools-list">
329
357
  {server.tools.map(tool => (
330
- <div key={tool.name} style={{ display: 'flex', alignItems: 'center' }}>
331
- <div style={{ flexGrow: 1 }}>
358
+ <div key={tool.name} className="mcp-tool-item">
359
+ <div className="mcp-tool-content">
332
360
  <strong>{tool.name}:</strong> {tool.description}
333
361
  </div>
334
- <div style={{ display: 'flex', gap: '4px' }}>
362
+ <div className="mcp-tool-actions">
335
363
  {this.renderButton(
336
364
  <i className="codicon codicon-copy"></i>,
337
365
  nls.localize('theia/ai/mcpConfiguration/copyForPrompt', 'Copy tool (for chat or prompt template)'),
@@ -357,53 +385,21 @@ export class AIMCPConfigurationWidget extends ReactWidget {
357
385
  this.update();
358
386
  }
359
387
 
360
- protected renderServerControls(server: MCPServerDescription): React.ReactNode {
361
- const isStoppable = server.status === MCPServerStatus.Running
362
- || server.status === MCPServerStatus.Connected
363
- || server.status === MCPServerStatus.Starting
364
- || server.status === MCPServerStatus.Connecting;
365
- const isStartable = server.status === MCPServerStatus.NotRunning
366
- || server.status === MCPServerStatus.NotConnected
367
- || server.status === MCPServerStatus.Errored;
368
-
369
- const startLabel = isRemoteMCPServerDescription(server)
370
- ? nls.localize('theia/ai/mcpConfiguration/connectServer', 'Connnect')
371
- : nls.localize('theia/ai/mcpConfiguration/startServer', 'Start Server');
372
- const stopLabel = isRemoteMCPServerDescription(server)
373
- ? nls.localize('theia/ai/mcpConfiguration/disconnectServer', 'Disconnnect')
374
- : nls.localize('theia/ai/mcpConfiguration/stopServer', 'Stop Server');
375
- return (
376
- <div className="mcp-server-controls">
377
- {isStartable && this.renderButton(
378
- <><i className="codicon codicon-play"></i> {startLabel}</>,
379
- startLabel,
380
- () => this.handleStartServer(server.name),
381
- 'mcp-server-button play-button'
382
- )}
383
- {isStoppable && this.renderButton(
384
- <><i className="codicon codicon-close"></i> {stopLabel}</>,
385
- stopLabel,
386
- () => this.handleStopServer(server.name),
387
- 'mcp-server-button stop-button'
388
- )}
389
- </div>
390
- );
391
- }
392
-
393
388
  protected renderServerCard(server: MCPServerDescription): React.ReactNode {
394
389
  return (
395
390
  <div key={server.name} className="mcp-server-card">
396
391
  {this.renderServerHeader(server)}
397
- {this.renderCommandSection(server)}
398
- {this.renderArgumentsSection(server)}
399
- {this.renderEnvironmentSection(server)}
400
- {this.renderServerUrlSection(server)}
401
- {this.renderServerAuthTokenHeaderSection(server)}
402
- {this.renderServerAuthTokenSection(server)}
403
- {this.renderServerHeadersSection(server)}
404
- {this.renderAutostartSection(server)}
392
+ <div className="mcp-server-content">
393
+ {this.renderCommandSection(server)}
394
+ {this.renderArgumentsSection(server)}
395
+ {this.renderEnvironmentSection(server)}
396
+ {this.renderServerUrlSection(server)}
397
+ {this.renderServerAuthTokenHeaderSection(server)}
398
+ {this.renderServerAuthTokenSection(server)}
399
+ {this.renderServerHeadersSection(server)}
400
+ {this.renderAutostartSection(server)}
401
+ </div>
405
402
  {this.renderToolsSection(server)}
406
- {this.renderServerControls(server)}
407
403
  </div>
408
404
  );
409
405
  }
@@ -419,7 +415,6 @@ export class AIMCPConfigurationWidget extends ReactWidget {
419
415
 
420
416
  return (
421
417
  <div className="mcp-configuration-container">
422
- <h2 className="mcp-configuration-title">{nls.localize('theia/ai/mcpConfiguration/serverConfigurations', 'MCP Server Configurations')}</h2>
423
418
  {this.servers.map(server => this.renderServerCard(server))}
424
419
  </div>
425
420
  );
@@ -15,20 +15,15 @@
15
15
  // *****************************************************************************
16
16
  import * as React from '@theia/core/shared/react';
17
17
  import { inject, injectable, postConstruct } from '@theia/core/shared/inversify';
18
- import { ReactWidget } from '@theia/core/lib/browser/widgets/react-widget';
19
18
  import { LanguageModelAliasRegistry, LanguageModelAlias } from '@theia/ai-core/lib/common/language-model-alias';
20
19
  import { FrontendLanguageModelRegistry, LanguageModel, LanguageModelRegistry, LanguageModelRequirement } from '@theia/ai-core/lib/common/language-model';
21
20
  import { nls } from '@theia/core/lib/common/nls';
22
- import { AIConfigurationSelectionService } from './ai-configuration-service';
23
21
  import { AgentService, AISettingsService } from '@theia/ai-core';
24
-
25
- export interface ModelAliasesConfigurationProps {
26
- languageModelAliasRegistry: LanguageModelAliasRegistry;
27
- languageModelRegistry: LanguageModelRegistry;
28
- }
22
+ import { AIListDetailConfigurationWidget } from './base/ai-list-detail-configuration-widget';
23
+ import { ConfigurationSection } from './components/configuration-section';
29
24
 
30
25
  @injectable()
31
- export class ModelAliasesConfigurationWidget extends ReactWidget {
26
+ export class ModelAliasesConfigurationWidget extends AIListDetailConfigurationWidget<LanguageModelAlias> {
32
27
  static readonly ID = 'ai-model-aliases-configuration-widget';
33
28
  static readonly LABEL = nls.localize('theia/ai/core/modelAliasesConfiguration/label', 'Model Aliases');
34
29
 
@@ -36,22 +31,13 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
36
31
  protected readonly languageModelAliasRegistry: LanguageModelAliasRegistry;
37
32
  @inject(LanguageModelRegistry)
38
33
  protected readonly languageModelRegistry: FrontendLanguageModelRegistry;
39
- @inject(AIConfigurationSelectionService)
40
- protected readonly aiConfigurationSelectionService: AIConfigurationSelectionService;
41
34
  @inject(AISettingsService)
42
35
  protected readonly aiSettingsService: AISettingsService;
43
36
  @inject(AgentService)
44
37
  protected readonly agentService: AgentService;
45
38
 
46
- protected aliases: LanguageModelAlias[] = [];
47
39
  protected languageModels: LanguageModel[] = [];
48
- /**
49
- * Map from alias ID to a list of agent IDs that have a language model requirement for that alias.
50
- */
51
40
  protected matchingAgentIdsForAliasMap: Map<string, string[]> = new Map();
52
- /**
53
- * Map from alias ID to the resolved LanguageModel (what the alias currently evaluates to).
54
- */
55
41
  protected resolvedModelForAlias: Map<string, LanguageModel | undefined> = new Map();
56
42
 
57
43
  @postConstruct()
@@ -60,43 +46,45 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
60
46
  this.title.label = ModelAliasesConfigurationWidget.LABEL;
61
47
  this.title.closable = false;
62
48
 
63
- const aliasesPromise = this.loadAliases();
64
- const languageModelsPromise = this.loadLanguageModels();
65
- const matchingAgentsPromise = this.loadMatchingAgentIdsForAllAliases();
66
- Promise.all([aliasesPromise, languageModelsPromise, matchingAgentsPromise]).then(() => this.update());
49
+ Promise.all([
50
+ this.loadItems(),
51
+ this.loadLanguageModels()
52
+ ]).then(() => this.update());
67
53
 
68
54
  this.languageModelAliasRegistry.ready.then(() =>
69
55
  this.toDispose.push(this.languageModelAliasRegistry.onDidChange(async () => {
70
- await this.loadAliases();
56
+ await this.loadItems();
71
57
  this.update();
72
58
  }))
73
59
  );
74
60
 
75
61
  this.toDispose.pushAll([
76
62
  this.languageModelRegistry.onChange(async () => {
77
- await this.loadAliases();
63
+ await this.loadItems();
78
64
  await this.loadLanguageModels();
79
65
  this.update();
80
66
  }),
81
67
  this.aiSettingsService.onDidChange(async () => {
82
68
  await this.loadMatchingAgentIdsForAllAliases();
83
69
  this.update();
84
- }),
85
- this.aiConfigurationSelectionService.onDidAliasChange(() => this.update())
70
+ })
86
71
  ]);
87
72
  }
88
73
 
89
- protected async loadAliases(): Promise<void> {
74
+ protected override async loadItems(): Promise<void> {
90
75
  await this.languageModelAliasRegistry.ready;
91
- this.aliases = this.languageModelAliasRegistry.getAliases();
92
- // Set the initial selection if not set
93
- if (this.aliases.length > 0 && !this.aiConfigurationSelectionService.getSelectedAliasId()) {
94
- this.aiConfigurationSelectionService.setSelectedAliasId(this.aliases[0].id);
76
+ this.items = this.languageModelAliasRegistry.getAliases();
77
+
78
+ // Set initial selection
79
+ if (this.items.length > 0 && !this.selectedItem) {
80
+ this.selectedItem = this.items[0];
95
81
  }
82
+
96
83
  await this.loadMatchingAgentIdsForAllAliases();
84
+
97
85
  // Resolve evaluated models for each alias
98
86
  this.resolvedModelForAlias = new Map();
99
- for (const alias of this.aliases) {
87
+ for (const alias of this.items) {
100
88
  const model = await this.languageModelRegistry.getReadyLanguageModel(alias.id);
101
89
  this.resolvedModelForAlias.set(alias.id, model);
102
90
  }
@@ -106,23 +94,18 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
106
94
  this.languageModels = await this.languageModelRegistry.getLanguageModels();
107
95
  }
108
96
 
109
- /**
110
- * Loads a map from alias ID to a list of agent IDs that have a language model requirement for that alias.
111
- */
112
97
  protected async loadMatchingAgentIdsForAllAliases(): Promise<void> {
113
98
  const agents = this.agentService.getAllAgents();
114
99
  const aliasMap: Map<string, string[]> = new Map();
115
- for (const alias of this.aliases) {
100
+ for (const alias of this.items) {
116
101
  const matchingAgentIds: string[] = [];
117
102
  for (const agent of agents) {
118
103
  const requirementSetting = await this.aiSettingsService.getAgentSettings(agent.id);
119
104
  if (requirementSetting?.languageModelRequirements) {
120
- // requirement is set via settings, check if it is this alias
121
105
  if (requirementSetting?.languageModelRequirements?.find(e => e.identifier === alias.id)) {
122
106
  matchingAgentIds.push(agent.id);
123
107
  }
124
108
  } else {
125
- // requirement is NOT set via settings, check if this alias is the default for this agent
126
109
  if (agent.languageModelRequirements.some((req: LanguageModelRequirement) => req.identifier === alias.id)) {
127
110
  matchingAgentIds.push(agent.id);
128
111
  }
@@ -133,6 +116,18 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
133
116
  this.matchingAgentIdsForAliasMap = aliasMap;
134
117
  }
135
118
 
119
+ protected override getItemId(item: LanguageModelAlias): string {
120
+ return item.id;
121
+ }
122
+
123
+ protected override getItemLabel(item: LanguageModelAlias): string {
124
+ return item.id;
125
+ }
126
+
127
+ protected override getEmptySelectionMessage(): string {
128
+ return nls.localize('theia/ai/core/modelAliasesConfiguration/selectAlias', 'Please select a Model Alias.');
129
+ }
130
+
136
131
  protected handleAliasSelectedModelIdChange = (alias: LanguageModelAlias, event: React.ChangeEvent<HTMLSelectElement>): void => {
137
132
  const newModelId = event.target.value || undefined;
138
133
  const updatedAlias: LanguageModelAlias = {
@@ -144,50 +139,28 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
144
139
  });
145
140
  };
146
141
 
147
- render(): React.ReactNode {
148
- const selectedAliasId = this.aiConfigurationSelectionService.getSelectedAliasId();
149
- const selectedAlias = this.aliases.find(alias => alias.id === selectedAliasId);
150
- return (
151
- <div className="model-alias-configuration-main">
152
- <div className="model-alias-configuration-list preferences-tree-widget theia-TreeContainer ai-model-alias-list">
153
- <ul>
154
- {this.aliases.map(alias => (
155
- <li
156
- key={alias.id}
157
- className={`theia-TreeNode theia-CompositeTreeNode${alias.id === selectedAliasId ? ' theia-mod-selected' : ''}`}
158
- onClick={() => this.aiConfigurationSelectionService.setSelectedAliasId(alias.id)}
159
- >
160
- <span>{alias.id}</span>
161
- </li>
162
- ))}
163
- </ul>
164
- </div>
165
- <div className="model-alias-configuration-panel preferences-editor-widget">
166
- {selectedAlias ? this.renderAliasDetail(selectedAlias, this.languageModels) : (
167
- <div>
168
- {nls.localize('theia/ai/core/modelAliasesConfiguration/selectAlias', 'Please select a Model Alias.')}
169
- </div>
170
- )}
171
- </div>
172
- </div>
173
- );
174
- }
175
-
176
- protected renderAliasDetail(alias: LanguageModelAlias, languageModels: LanguageModel[]): React.ReactNode {
177
- const availableModelIds = languageModels.map(m => m.id);
142
+ protected override renderItemDetail(alias: LanguageModelAlias): React.ReactNode {
143
+ const availableModelIds = this.languageModels.map(m => m.id);
178
144
  const selectedModelId = alias.selectedModelId ?? '';
179
145
  const isInvalidModel = !!selectedModelId && !availableModelIds.includes(alias.selectedModelId ?? '');
180
146
  const agentIds = this.matchingAgentIdsForAliasMap.get(alias.id) || [];
181
147
  const agents = this.agentService.getAllAgents().filter(agent => agentIds.includes(agent.id));
182
148
  const resolvedModel = this.resolvedModelForAlias.get(alias.id);
149
+
183
150
  return (
184
151
  <div>
185
- <div className="settings-section-title settings-section-category-title ai-alias-detail-title">
186
- <span>{alias.id}</span>
152
+ <div className="settings-section-title settings-section-category-title">
153
+ {alias.id}
187
154
  </div>
188
- {alias.description && <div className="ai-alias-detail-description">{alias.description}</div>}
189
- <div className="ai-alias-detail-selected-model">
190
- <label>{nls.localize('theia/ai/core/modelAliasesConfiguration/selectedModelId', 'Selected Model')}: </label>
155
+
156
+ {alias.description && (
157
+ <div className="ai-alias-detail-description">{alias.description}</div>
158
+ )}
159
+
160
+ <ConfigurationSection
161
+ title={nls.localize('theia/ai/core/modelAliasesConfiguration/selectedModelId', 'Selected Model')}
162
+ className="ai-alias-selected-model-section"
163
+ >
191
164
  <select
192
165
  className={`theia-select template-variant-selector ${isInvalidModel ? 'error' : ''}`}
193
166
  value={isInvalidModel ? 'invalid' : selectedModelId}
@@ -201,7 +174,7 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
201
174
  <option value="" className='ai-language-model-item-ready'>
202
175
  {nls.localize('theia/ai/core/modelAliasesConfiguration/defaultList', '[Default list]')}
203
176
  </option>
204
- {[...languageModels]
177
+ {[...this.languageModels]
205
178
  .sort((a, b) => (a.name ?? a.id).localeCompare(b.name ?? b.id))
206
179
  .map(model => {
207
180
  const isNotReady = model.status.status !== 'ready';
@@ -218,32 +191,41 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
218
191
  }
219
192
  )}
220
193
  </select>
221
- </div>
222
- {alias.selectedModelId === undefined &&
223
- <><div className="ai-alias-detail-defaults">
224
- <ol>
225
- {alias.defaultModelIds.map(modelId => {
226
- const model = this.languageModels.find(m => m.id === modelId);
227
- const isReady = model?.status.status === 'ready';
228
- return (
229
- <li key={modelId}>
230
- {isReady ? (
231
- <span className={modelId === resolvedModel?.id ? 'ai-alias-priority-item-resolved' : 'ai-alias-priority-item-ready'}>
232
- {modelId} <span className="ai-model-status-ready"
233
- title={nls.localize('theia/ai/core/modelAliasesConfiguration/modelReadyTooltip', 'Ready')}>✓</span>
234
- </span>
235
- ) : (
236
- <span className="ai-model-default-not-ready">
237
- {modelId} <span className="ai-model-status-not-ready"
238
- title={nls.localize('theia/ai/core/modelAliasesConfiguration/modelNotReadyTooltip', 'Not ready')}>✗</span>
239
- </span>
240
- )}
241
- </li>
242
- );
243
- })}
244
- </ol>
245
- </div><div className="ai-alias-evaluates-to-container">
246
- <label className="ai-alias-evaluates-to-label">{nls.localize('theia/ai/core/modelAliasesConfiguration/evaluatesTo', 'Evaluates to')}:</label>
194
+ </ConfigurationSection>
195
+
196
+ {alias.selectedModelId === undefined && (
197
+ <>
198
+ <ConfigurationSection
199
+ title={nls.localize('theia/ai/core/modelAliasesConfiguration/priorityList', 'Priority List')}
200
+ className="ai-alias-defaults-section"
201
+ >
202
+ <ol>
203
+ {alias.defaultModelIds.map(modelId => {
204
+ const model = this.languageModels.find(m => m.id === modelId);
205
+ const isReady = model?.status.status === 'ready';
206
+ return (
207
+ <li key={modelId}>
208
+ {isReady ? (
209
+ <span className={modelId === resolvedModel?.id ? 'ai-alias-priority-item-resolved' : 'ai-alias-priority-item-ready'}>
210
+ {modelId} <span className="ai-model-status-ready"
211
+ title={nls.localize('theia/ai/core/modelAliasesConfiguration/modelReadyTooltip', 'Ready')}>✓</span>
212
+ </span>
213
+ ) : (
214
+ <span className="ai-model-default-not-ready">
215
+ {modelId} <span className="ai-model-status-not-ready"
216
+ title={nls.localize('theia/ai/core/modelAliasesConfiguration/modelNotReadyTooltip', 'Not ready')}>✗</span>
217
+ </span>
218
+ )}
219
+ </li>
220
+ );
221
+ })}
222
+ </ol>
223
+ </ConfigurationSection>
224
+
225
+ <ConfigurationSection
226
+ title={nls.localize('theia/ai/core/modelAliasesConfiguration/evaluatesTo', 'Evaluates to')}
227
+ className="ai-alias-evaluates-to-section"
228
+ >
247
229
  {resolvedModel ? (
248
230
  <span className="ai-alias-evaluates-to-value">
249
231
  {resolvedModel.name ?? resolvedModel.id}
@@ -260,24 +242,28 @@ export class ModelAliasesConfigurationWidget extends ReactWidget {
260
242
  {nls.localize('theia/ai/core/modelAliasesConfiguration/noResolvedModel', 'No model ready for this alias.')}
261
243
  </span>
262
244
  )}
263
- </div></>
264
- }
265
- <div className="ai-alias-detail-agents">
266
- <label>{nls.localize('theia/ai/core/modelAliasesConfiguration/agents', 'Agents using this Alias')}:</label>
245
+ </ConfigurationSection>
246
+ </>
247
+ )}
248
+
249
+ <ConfigurationSection
250
+ title={nls.localize('theia/ai/core/modelAliasesConfiguration/agents', 'Agents using this Alias')}
251
+ className="ai-alias-agents-section"
252
+ >
267
253
  <ul>
268
254
  {agents.length > 0 ? (
269
255
  agents.map(agent => (
270
256
  <li key={agent.id}>
271
257
  <span>{agent.name}</span>
272
- {agent.id !== agent.name && <span className="ai-alias-agent-id">({agent.id})</span>}
258
+ {agent.id !== agent.name && <span className="ai-alias-agent-id"> ({agent.id})</span>}
273
259
  </li>
274
260
  ))
275
261
  ) : (
276
262
  <span>{nls.localize('theia/ai/core/modelAliasesConfiguration/noAgents', 'No agents use this alias.')}</span>
277
263
  )}
278
264
  </ul>
279
- </div>
280
- </div >
265
+ </ConfigurationSection>
266
+ </div>
281
267
  );
282
268
  }
283
269
  }