@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
@@ -23,6 +23,7 @@ import { ArchitectAgent } from './architect-agent';
23
23
  import { CoderAgent } from './coder-agent';
24
24
  import { SummarizeSessionCommandContribution } from './summarize-session-command-contribution';
25
25
  import {
26
+ AccessibleRootContribution,
26
27
  FileContentFunction,
27
28
  FileDiagnosticProvider,
28
29
  FindFilesByPattern,
@@ -31,6 +32,7 @@ import {
31
32
  WorkspaceFunctionScope
32
33
  } from './workspace-functions';
33
34
  import { WorkspaceSearchProvider } from './workspace-search-provider';
35
+ import { MemoryDirectoryVariableContribution } from './memory-directory-variable-contribution';
34
36
  import {
35
37
  FrontendApplicationContribution,
36
38
  WidgetFactory,
@@ -67,13 +69,29 @@ import { AppTesterChatAgent } from './app-tester-chat-agent';
67
69
  import { GitHubChatAgent } from './github-chat-agent';
68
70
  import { CommandChatAgent } from '../common/command-chat-agents';
69
71
  import { ListChatContext, ResolveChatContext, AddFileToChatContext } from './context-functions';
70
- import { AIAgentConfigurationWidget } from './ai-configuration/agent-configuration-widget';
72
+ import { AgentsConfigurationCategory } from './ai-configuration/categories/agents-configuration-category';
73
+ import { GeneralConfigurationCategory } from './ai-configuration/categories/general-configuration-category';
74
+ import { ModelsConfigurationCategory } from './ai-configuration/categories/models-configuration-category';
75
+ import { ModelAliasesConfigurationCategory } from './ai-configuration/categories/model-aliases-configuration-category';
76
+ import { VariablesConfigurationCategory } from './ai-configuration/categories/variables-configuration-category';
77
+ import { TokenUsageConfigurationCategory } from './ai-configuration/categories/token-usage-configuration-category';
78
+ import { ToolsConfigurationCategory } from './ai-configuration/categories/tools-configuration-category';
79
+ import { PromptsAndSkillsConfigurationCategory } from './ai-configuration/categories/prompts-and-skills-configuration-category';
80
+ import { PromptSnippetsConfigurationCategory } from './ai-configuration/categories/prompt-snippets-configuration-category';
81
+ import { AiConfigurationOpenPreferenceRenderer, AiConfigurationOpenPreferenceRendererContribution } from './ai-configuration/ai-configuration-open-preference-renderer';
82
+ import { PreferenceNodeRendererContribution } from '@theia/preferences/lib/browser/views/components/preference-node-renderer-creator';
83
+ import { AiConfigurationBreadcrumbsContribution } from './ai-configuration/ai-configuration-breadcrumbs-contribution';
84
+ import { BreadcrumbsContribution } from '@theia/core/lib/browser/breadcrumbs/breadcrumbs-constants';
85
+ import { AiConfigurationLabelProviderContribution } from './ai-configuration/ai-configuration-label-provider-contribution';
86
+ import { LabelProviderContribution } from '@theia/core/lib/browser/label-provider';
87
+ import { AiConfigurationCategory } from '@theia/ai-core-ui/lib/browser/ai-configuration/ai-configuration-category';
71
88
  import { AIConfigurationSelectionService } from './ai-configuration/ai-configuration-service';
72
- import { AIAgentConfigurationViewContribution } from './ai-configuration/ai-configuration-view-contribution';
89
+ import { AIConfigurationViewContribution } from './ai-configuration/ai-configuration-view-contribution';
73
90
  import { AIConfigurationContainerWidget } from './ai-configuration/ai-configuration-widget';
74
- import { AIVariableConfigurationWidget } from './ai-configuration/variable-configuration-widget';
91
+ import { AiConfigurationDetailWidget } from './ai-configuration/ai-configuration-detail-widget';
92
+ import { AiConfigurationTreeWidget, createAiConfigurationTreeContainer } from './ai-configuration/ai-configuration-tree-widget';
93
+ import { AiConfigurationSearchWidget } from './ai-configuration/ai-configuration-search-widget';
75
94
  import { ContextFilesVariableContribution } from '../common/context-files-variable';
76
- import { AIToolsConfigurationWidget } from './ai-configuration/tools-configuration-widget';
77
95
  import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
78
96
  import { TemplatePreferenceContribution } from './template-preference-contribution';
79
97
  import { ChatWelcomeMessageProvider } from '@theia/ai-chat-ui/lib/browser/chat-tree-view';
@@ -83,19 +101,15 @@ import { ChatSessionItemActionContribution, DefaultChatSessionItemActionContribu
83
101
  import { AiAllowAllModeChatBanner } from './ai-allow-all-mode-chat-banner';
84
102
  import { ChatBannerProvider } from '@theia/ai-chat-ui/lib/browser/chat-banner-provider';
85
103
  import { DefaultChatAgentRecommendationService } from './default-chat-agent-recommendation-service';
86
- import { AITokenUsageConfigurationWidget } from './ai-configuration/token-usage-configuration-widget';
87
- import { AISkillsConfigurationWidget } from './ai-configuration/skills-configuration-widget';
88
104
  import { TaskContextSummaryVariableContribution } from './task-background-summary-variable';
89
105
  import { GitHubRepoVariableContribution } from './github-repo-variable-contribution';
90
106
  import { TaskContextFileStorageService } from './task-context-file-storage-service';
91
107
  import { TaskContextStorageService } from '@theia/ai-chat/lib/browser/task-context-service';
92
108
  import { bindRootContributionProvider, CommandContribution, PreferenceContribution } from '@theia/core';
93
- import { AIPromptFragmentsConfigurationWidget } from './ai-configuration/prompt-fragments-configuration-widget';
94
109
  import { BrowserAutomation, browserAutomationPath } from '../common/browser-automation-protocol';
95
110
  import { GitHubRepoService, githubRepoServicePath } from '../common/github-repo-protocol';
96
111
  import { CloseBrowserProvider, IsBrowserRunningProvider, LaunchBrowserProvider, QueryDomProvider } from './app-tester-chat-functions';
97
112
  import { GetSkillFileContent } from './skill-file-functions';
98
- import { ModelAliasesConfigurationWidget } from './ai-configuration/model-aliases-configuration-widget';
99
113
  import { aiIdePreferenceSchema } from '../common/ai-ide-preferences';
100
114
  import { AIActivationService } from '@theia/ai-core/lib/browser';
101
115
  import { AIIdeActivationServiceImpl } from './ai-ide-activation-service';
@@ -121,6 +135,8 @@ import { AddressGhReviewCommandContribution } from './address-pr-review-command-
121
135
  import { AppTesterCapabilityContribution } from './apptester-capability-contribution';
122
136
  import { GitHubCapabilityContribution } from './github-capability-contribution';
123
137
  import { ShellExecutionCapabilityContribution } from './shell-execution-capability-contribution';
138
+ import { MemoryCapabilityContribution } from './memory-capability-contribution';
139
+ import { OpenEditorsHintContribution } from './open-editors-hint-contribution';
124
140
  import { AgentModeConfirmationService, AgentModeConfirmationServiceImpl } from './agent-mode-confirmation-service';
125
141
  import { ExploreAgent } from './explore-agent';
126
142
  import { CodeReviewerAgent } from './code-reviewer-agent';
@@ -218,6 +234,11 @@ export default new ContainerModule((bind, _unbind, _isBound, rebind) => {
218
234
  bind(WorkspaceFunctionScope).toSelf().inSingletonScope();
219
235
  bindToolProvider(WorkspaceSearchProvider, bind);
220
236
 
237
+ bindRootContributionProvider(bind, AccessibleRootContribution);
238
+ bind(MemoryDirectoryVariableContribution).toSelf().inSingletonScope();
239
+ bind(AIVariableContribution).toService(MemoryDirectoryVariableContribution);
240
+ bind(AccessibleRootContribution).toService(MemoryDirectoryVariableContribution);
241
+
221
242
  bindToolProvider(SuggestFileContent, bind);
222
243
  bindToolProvider(WriteFileContent, bind);
223
244
  bindToolProvider(TaskListProvider, bind);
@@ -235,6 +256,14 @@ export default new ContainerModule((bind, _unbind, _isBound, rebind) => {
235
256
  bindToolProvider(ListChatContext, bind);
236
257
  bindToolProvider(ResolveChatContext, bind);
237
258
  bind(AIConfigurationSelectionService).toSelf().inSingletonScope();
259
+ // The container widget owns these children and disposes them when the view is closed. They must
260
+ // therefore be transient: a reopened container gets fresh children instead of injecting the
261
+ // already-disposed singletons from the previous instance (which rendered an empty view and logged
262
+ // "node does not belong to this tree" errors on layout restore).
263
+ bind(AiConfigurationSearchWidget).toSelf();
264
+ bind(AiConfigurationDetailWidget).toSelf();
265
+ bind(AiConfigurationTreeWidget)
266
+ .toDynamicValue(({ container }) => createAiConfigurationTreeContainer(container).get(AiConfigurationTreeWidget));
238
267
  bind(AIConfigurationContainerWidget).toSelf();
239
268
  bind(WidgetFactory)
240
269
  .toDynamicValue(ctx => ({
@@ -248,32 +277,46 @@ export default new ContainerModule((bind, _unbind, _isBound, rebind) => {
248
277
  bindToolProvider(IsBrowserRunningProvider, bind);
249
278
  bindToolProvider(QueryDomProvider, bind);
250
279
 
251
- bindViewContribution(bind, AIAgentConfigurationViewContribution);
252
- bind(TabBarToolbarContribution).toService(AIAgentConfigurationViewContribution);
280
+ bindViewContribution(bind, AIConfigurationViewContribution);
281
+ bind(TabBarToolbarContribution).toService(AIConfigurationViewContribution);
253
282
 
254
- bind(AIVariableConfigurationWidget).toSelf();
255
- bind(WidgetFactory)
256
- .toDynamicValue(ctx => ({
257
- id: AIVariableConfigurationWidget.ID,
258
- createWidget: () => ctx.container.get(AIVariableConfigurationWidget)
259
- }))
260
- .inSingletonScope();
283
+ bind(AgentsConfigurationCategory).toSelf().inSingletonScope();
284
+ bind(AiConfigurationCategory).toService(AgentsConfigurationCategory);
261
285
 
262
- bind(AIAgentConfigurationWidget).toSelf();
263
- bind(WidgetFactory)
264
- .toDynamicValue(ctx => ({
265
- id: AIAgentConfigurationWidget.ID,
266
- createWidget: () => ctx.container.get(AIAgentConfigurationWidget)
267
- }))
268
- .inSingletonScope();
286
+ bind(GeneralConfigurationCategory).toSelf().inSingletonScope();
287
+ bind(AiConfigurationCategory).toService(GeneralConfigurationCategory);
269
288
 
270
- bind(ModelAliasesConfigurationWidget).toSelf();
271
- bind(WidgetFactory)
272
- .toDynamicValue(ctx => ({
273
- id: ModelAliasesConfigurationWidget.ID,
274
- createWidget: () => ctx.container.get(ModelAliasesConfigurationWidget)
275
- }))
276
- .inSingletonScope();
289
+ bind(ModelsConfigurationCategory).toSelf().inSingletonScope();
290
+ bind(AiConfigurationCategory).toService(ModelsConfigurationCategory);
291
+
292
+ bind(ModelAliasesConfigurationCategory).toSelf().inSingletonScope();
293
+ bind(AiConfigurationCategory).toService(ModelAliasesConfigurationCategory);
294
+
295
+ bind(VariablesConfigurationCategory).toSelf().inSingletonScope();
296
+ bind(AiConfigurationCategory).toService(VariablesConfigurationCategory);
297
+
298
+ bind(TokenUsageConfigurationCategory).toSelf().inSingletonScope();
299
+ bind(AiConfigurationCategory).toService(TokenUsageConfigurationCategory);
300
+
301
+ bind(ToolsConfigurationCategory).toSelf().inSingletonScope();
302
+ bind(AiConfigurationCategory).toService(ToolsConfigurationCategory);
303
+
304
+ bind(PromptsAndSkillsConfigurationCategory).toSelf().inSingletonScope();
305
+ bind(AiConfigurationCategory).toService(PromptsAndSkillsConfigurationCategory);
306
+
307
+ bind(PromptSnippetsConfigurationCategory).toSelf().inSingletonScope();
308
+ bind(AiConfigurationCategory).toService(PromptSnippetsConfigurationCategory);
309
+
310
+ // Renders the Settings-UI "AI Features" placeholder as a button that opens the AI Configuration view (#316).
311
+ bind(AiConfigurationOpenPreferenceRenderer).toSelf();
312
+ bind(PreferenceNodeRendererContribution).to(AiConfigurationOpenPreferenceRendererContribution).inSingletonScope();
313
+
314
+ // Real Theia breadcrumbs for the AI Configuration view.
315
+ bind(AiConfigurationBreadcrumbsContribution).toSelf().inSingletonScope();
316
+ bind(BreadcrumbsContribution).toService(AiConfigurationBreadcrumbsContribution);
317
+ // Give the view's resource URI a readable name (window title, breadcrumbs) instead of "/".
318
+ bind(AiConfigurationLabelProviderContribution).toSelf().inSingletonScope();
319
+ bind(LabelProviderContribution).toService(AiConfigurationLabelProviderContribution);
277
320
 
278
321
  bindToolProvider(SimpleSuggestFileReplacements, bind);
279
322
  bindToolProvider(SimpleWriteFileReplacements, bind);
@@ -281,37 +324,12 @@ export default new ContainerModule((bind, _unbind, _isBound, rebind) => {
281
324
  bindToolProvider(GetProposedFileState, bind);
282
325
  bindToolProvider(AddFileToChatContext, bind);
283
326
 
284
- bind(AIToolsConfigurationWidget).toSelf();
285
- bind(WidgetFactory)
286
- .toDynamicValue(ctx => ({
287
- id: AIToolsConfigurationWidget.ID,
288
- createWidget: () => ctx.container.get(AIToolsConfigurationWidget)
289
- }))
290
- .inSingletonScope();
291
-
292
- bind(AISkillsConfigurationWidget).toSelf();
293
- bind(WidgetFactory)
294
- .toDynamicValue(ctx => ({
295
- id: AISkillsConfigurationWidget.ID,
296
- createWidget: () => ctx.container.get(AISkillsConfigurationWidget)
297
- }))
298
- .inSingletonScope();
299
-
300
327
  bind(AIVariableContribution).to(ContextFilesVariableContribution).inSingletonScope();
301
328
 
302
329
  bind(PreferenceContribution).toConstantValue({ schema: AiConfigurationPreferences });
303
330
 
304
331
  bind(FrontendApplicationContribution).to(TemplatePreferenceContribution);
305
332
 
306
- // Register the token usage configuration widget
307
- bind(AITokenUsageConfigurationWidget).toSelf();
308
- bind(WidgetFactory)
309
- .toDynamicValue(ctx => ({
310
- id: AITokenUsageConfigurationWidget.ID,
311
- createWidget: () => ctx.container.get(AITokenUsageConfigurationWidget)
312
- }))
313
- .inSingletonScope();
314
-
315
333
  bind(TaskContextSummaryVariableContribution).toSelf().inSingletonScope();
316
334
  bind(AIVariableContribution).toService(TaskContextSummaryVariableContribution);
317
335
 
@@ -326,13 +344,6 @@ export default new ContainerModule((bind, _unbind, _isBound, rebind) => {
326
344
  rebind(TaskContextStorageService).toService(TaskContextFileStorageService);
327
345
 
328
346
  bind(CommandContribution).to(SummarizeSessionCommandContribution);
329
- bind(AIPromptFragmentsConfigurationWidget).toSelf();
330
- bind(WidgetFactory)
331
- .toDynamicValue(ctx => ({
332
- id: AIPromptFragmentsConfigurationWidget.ID,
333
- createWidget: () => ctx.container.get(AIPromptFragmentsConfigurationWidget)
334
- }))
335
- .inSingletonScope();
336
347
 
337
348
  bindToolProvider(SuggestTerminalCommand, bind);
338
349
 
@@ -357,6 +368,8 @@ export default new ContainerModule((bind, _unbind, _isBound, rebind) => {
357
368
  bind(FrontendApplicationContribution).to(AppTesterCapabilityContribution);
358
369
  bind(FrontendApplicationContribution).to(GitHubCapabilityContribution);
359
370
  bind(FrontendApplicationContribution).to(ShellExecutionCapabilityContribution);
371
+ bind(FrontendApplicationContribution).to(MemoryCapabilityContribution);
372
+ bind(FrontendApplicationContribution).to(OpenEditorsHintContribution);
360
373
 
361
374
  bind(FrontendApplicationContribution).to(CodeReviewCapabilityContribution);
362
375
  bind(FrontendApplicationContribution).to(PRReviewCapabilityContribution);
@@ -18,8 +18,8 @@ import { AbstractStreamParsingChatAgent } from '@theia/ai-chat/lib/common/chat-a
18
18
  import { ErrorChatResponseContentImpl, MarkdownChatResponseContentImpl, MutableChatRequestModel, QuestionResponseContentImpl } from '@theia/ai-chat/lib/common/chat-model';
19
19
  import { LanguageModelRequirement } from '@theia/ai-core/lib/common';
20
20
  import { MCPFrontendService, MCPServerDescription } from '@theia/ai-mcp/lib/common/mcp-server-manager';
21
- import { nls, CommandService } from '@theia/core';
22
- import { inject, injectable } from '@theia/core/shared/inversify';
21
+ import { CommandService, ILogger, nls } from '@theia/core';
22
+ import { inject, injectable, named } from '@theia/core/shared/inversify';
23
23
  import { MCP_SERVERS_PREF } from '@theia/ai-mcp/lib/common/mcp-preferences';
24
24
  import { PreferenceScope, PreferenceService } from '@theia/core/lib/common';
25
25
  import { PreferencesCommands } from '@theia/preferences/lib/browser/util/preference-types';
@@ -32,6 +32,9 @@ export const GitHubChatAgentId = 'GitHub';
32
32
  @injectable()
33
33
  export class GitHubChatAgent extends AbstractStreamParsingChatAgent {
34
34
 
35
+ @inject(ILogger) @named('ai-ide:GitHubChatAgent')
36
+ protected override readonly logger: ILogger;
37
+
35
38
  @inject(MCPFrontendService)
36
39
  protected readonly mcpService: MCPFrontendService;
37
40
 
@@ -14,8 +14,8 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { injectable, inject } from '@theia/core/shared/inversify';
18
- import { MaybePromise, nls } from '@theia/core';
17
+ import { injectable, inject, named } from '@theia/core/shared/inversify';
18
+ import { MaybePromise, nls, ILogger } from '@theia/core';
19
19
  import {
20
20
  AIVariableContribution,
21
21
  AIVariableResolver,
@@ -49,6 +49,9 @@ export class GitHubRepoVariableContribution implements AIVariableContribution, A
49
49
  @inject(GitHubRepoService)
50
50
  protected readonly gitHubRepoService: GitHubRepoService;
51
51
 
52
+ @inject(ILogger) @named('ai-ide:GitHubRepoVariableContribution')
53
+ protected readonly logger: ILogger;
54
+
52
55
  registerVariables(service: AIVariableService): void {
53
56
  service.registerResolver(GITHUB_REPO_NAME_VARIABLE, this);
54
57
  }
@@ -115,7 +118,7 @@ export class GitHubRepoVariableContribution implements AIVariableContribution, A
115
118
  };
116
119
 
117
120
  } catch (error) {
118
- console.warn('Failed to resolve GitHub repository name:', error);
121
+ this.logger.warn('Failed to resolve GitHub repository name:', error);
119
122
  return { variable: request.variable, value: 'No GitHub repository is currently selected or detected.' };
120
123
  }
121
124
  }
@@ -18,7 +18,7 @@ import { ChatWelcomeMessageProvider } from '@theia/ai-chat-ui/lib/browser/chat-t
18
18
  import * as React from '@theia/core/shared/react';
19
19
  import { nls } from '@theia/core/lib/common/nls';
20
20
  import { inject, injectable, postConstruct } from '@theia/core/shared/inversify';
21
- import { codicon, CommonCommands, LocalizedMarkdown, MarkdownRenderer } from '@theia/core/lib/browser';
21
+ import { codicon, LocalizedMarkdown, MarkdownRenderer } from '@theia/core/lib/browser';
22
22
  import { CommandRegistry, DisposableCollection, Emitter, Event, PreferenceScope } from '@theia/core';
23
23
  import { AgentService, FrontendLanguageModelRegistry } from '@theia/ai-core/lib/common';
24
24
  import { PreferenceService } from '@theia/core/lib/common';
@@ -388,15 +388,15 @@ Set up an API key for [OpenAI]({0}), [Anthropic]({1}), or [GoogleAI]({2}) or con
388
388
  Some agents (e.g. Claude Code) work without a provider. [Learn more](https://theia-ide.org/docs/user_ai/).
389
389
  `}
390
390
  args={[
391
- `command:${CommonCommands.OPEN_PREFERENCES.id}?ai-features.openAiOfficial.openAiApiKey`,
392
- `command:${CommonCommands.OPEN_PREFERENCES.id}?ai-features.anthropic.AnthropicApiKey`,
393
- `command:${CommonCommands.OPEN_PREFERENCES.id}?ai-features.google.apiKey`
391
+ `command:${OPEN_AI_CONFIG_VIEW.id}?ai-features.openAiOfficial.openAiApiKey`,
392
+ `command:${OPEN_AI_CONFIG_VIEW.id}?ai-features.anthropic.AnthropicApiKey`,
393
+ `command:${OPEN_AI_CONFIG_VIEW.id}?ai-features.google.apiKey`
394
394
  ]}
395
395
  markdownRenderer={this.markdownRenderer}
396
396
  className="theia-WelcomeMessage-Content"
397
397
  markdownOptions={{
398
398
  supportHtml: true,
399
- isTrusted: { enabledCommands: [CommonCommands.OPEN_PREFERENCES.id] }
399
+ isTrusted: { enabledCommands: [OPEN_AI_CONFIG_VIEW.id] }
400
400
  }}
401
401
  />
402
402
  {errorMessages.length > 0 && (
@@ -415,8 +415,8 @@ Some agents (e.g. Claude Code) work without a provider. [Learn more](https://the
415
415
  <div className="theia-WelcomeMessage-Actions">
416
416
  <button
417
417
  className="theia-button main"
418
- onClick={() => this.commandRegistry.executeCommand(CommonCommands.OPEN_PREFERENCES.id, 'ai-features')}>
419
- {nls.localize('theia/ai/ide/openSettings', 'Open AI Settings')}
418
+ onClick={() => this.commandRegistry.executeCommand(OPEN_AI_CONFIG_VIEW.id)}>
419
+ {nls.localize('theia/ai/ide/openAiConfiguration', 'Open AI Configuration')}
420
420
  </button>
421
421
  <button
422
422
  className="theia-button secondary"
@@ -474,9 +474,9 @@ Choose the agent to use by default. You can always override this by mentioning *
474
474
  <LocalizedMarkdown
475
475
  localizationKey="theia/ai/ide/moreAgentsAvailable"
476
476
  defaultMarkdown='Use @AgentName to try others or configure a different default in [preferences]({0}).'
477
- args={[`command:${CommonCommands.OPEN_PREFERENCES.id}?ai-features.chat.defaultChatAgent`]}
477
+ args={[`command:${OPEN_AI_CONFIG_VIEW.id}?ai-features.chat.defaultChatAgent`]}
478
478
  markdownRenderer={this.markdownRenderer}
479
- markdownOptions={{ isTrusted: { enabledCommands: [CommonCommands.OPEN_PREFERENCES.id] } }}
479
+ markdownOptions={{ isTrusted: { enabledCommands: [OPEN_AI_CONFIG_VIEW.id] } }}
480
480
  />
481
481
  </div>
482
482
  </div>
@@ -546,8 +546,8 @@ Choose the agent to use by default. You can always override this by mentioning *
546
546
  <div className="theia-WelcomeMessage-Actions">
547
547
  <button
548
548
  className="theia-button main"
549
- onClick={() => this.commandRegistry.executeCommand(CommonCommands.OPEN_PREFERENCES.id, 'ai-features')}>
550
- {nls.localize('theia/ai/ide/openSettings', 'Open AI Settings')}
549
+ onClick={() => this.commandRegistry.executeCommand(OPEN_AI_CONFIG_VIEW.id)}>
550
+ {nls.localize('theia/ai/ide/openAiConfiguration', 'Open AI Configuration')}
551
551
  </button>
552
552
  </div>
553
553
  <LocalizedMarkdown
@@ -0,0 +1,85 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource GmbH.
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 { expect } from 'chai';
18
+ import { PromptService } from '@theia/ai-core';
19
+ import { Container } from '@theia/core/shared/inversify';
20
+ import {
21
+ FILE_CONTENT_FUNCTION_ID,
22
+ FIND_FILES_BY_PATTERN_FUNCTION_ID,
23
+ GET_WORKSPACE_FILE_LIST_FUNCTION_ID,
24
+ SEARCH_IN_WORKSPACE_FUNCTION_ID
25
+ } from '../common/workspace-functions';
26
+ import { WRITE_FILE_CONTENT_ID, WRITE_FILE_REPLACEMENTS_ID } from '../common/file-changeset-function-ids';
27
+ import { MEMORY_DIRECTORY_VARIABLE } from './memory-directory-variable-contribution';
28
+ import { MemoryCapabilityContribution } from './memory-capability-contribution';
29
+
30
+ const registerFragment = (): { id: string, template: string } => {
31
+ const fragments: Array<{ id: string, template: string }> = [];
32
+ const container = new Container();
33
+ container.bind(PromptService).toConstantValue({
34
+ addBuiltInPromptFragment: (fragment: { id: string, template: string }) => fragments.push(fragment)
35
+ } as unknown as PromptService);
36
+ container.bind(MemoryCapabilityContribution).toSelf();
37
+ container.get(MemoryCapabilityContribution).onStart();
38
+
39
+ expect(fragments).to.have.lengthOf(1);
40
+ return fragments[0];
41
+ };
42
+
43
+ describe('MemoryCapabilityContribution', () => {
44
+
45
+ it('registers the memory fragment', () => {
46
+ const fragment = registerFragment();
47
+ expect(fragment.id).to.equal('memory');
48
+ expect(fragment.template).to.contain('## Memory');
49
+ });
50
+
51
+ it('starts the template with unindented front matter, so it parses as such', () => {
52
+ const { template } = registerFragment();
53
+ const lines = template.split('\n');
54
+ expect(lines[0]).to.equal('---');
55
+ expect(lines[1]).to.match(/^name: /);
56
+ expect(lines[2]).to.match(/^description: /);
57
+ expect(lines[3]).to.equal('---');
58
+ });
59
+
60
+ it('points the agent at the memory directory variable instead of a workspace path', () => {
61
+ const { template } = registerFragment();
62
+ expect(template).to.contain(`{{${MEMORY_DIRECTORY_VARIABLE.name}}}/wiki/index.md`);
63
+ expect(template).to.contain(`{{${MEMORY_DIRECTORY_VARIABLE.name}}}/raw/`);
64
+ expect(template).to.not.contain('.agents/memory');
65
+ });
66
+
67
+ it('resolves the date for raw filenames through the today variable', () => {
68
+ const { template } = registerFragment();
69
+ expect(template).to.contain('{{today:inIso8601}}');
70
+ });
71
+
72
+ it('instructs the agent to use the generic workspace tools', () => {
73
+ const { template } = registerFragment();
74
+ [
75
+ FILE_CONTENT_FUNCTION_ID,
76
+ FIND_FILES_BY_PATTERN_FUNCTION_ID,
77
+ GET_WORKSPACE_FILE_LIST_FUNCTION_ID,
78
+ SEARCH_IN_WORKSPACE_FUNCTION_ID,
79
+ WRITE_FILE_CONTENT_ID,
80
+ WRITE_FILE_REPLACEMENTS_ID
81
+ ].forEach(id => {
82
+ expect(template).to.contain(`~{${id}}`);
83
+ });
84
+ });
85
+ });
@@ -0,0 +1,86 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource GmbH.
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 { FrontendApplicationContribution } from '@theia/core/lib/browser';
18
+ import { inject, injectable } from '@theia/core/shared/inversify';
19
+ import { PromptService } from '@theia/ai-core';
20
+ import { nls } from '@theia/core';
21
+ import { GET_WORKSPACE_FILE_LIST_FUNCTION_ID, FILE_CONTENT_FUNCTION_ID, SEARCH_IN_WORKSPACE_FUNCTION_ID, FIND_FILES_BY_PATTERN_FUNCTION_ID } from '../common/workspace-functions';
22
+ import { WRITE_FILE_REPLACEMENTS_ID, WRITE_FILE_CONTENT_ID } from '../common/file-changeset-function-ids';
23
+ import { MEMORY_DIRECTORY_VARIABLE } from './memory-directory-variable-contribution';
24
+
25
+ @injectable()
26
+ export class MemoryCapabilityContribution implements FrontendApplicationContribution {
27
+
28
+ @inject(PromptService)
29
+ protected readonly promptService: PromptService;
30
+
31
+ onStart(): void {
32
+ this.promptService.addBuiltInPromptFragment({
33
+ id: 'memory',
34
+ template: this.buildTemplate()
35
+ });
36
+ }
37
+
38
+ protected buildTemplate(): string {
39
+ const name = nls.localize('theia/ai/ide/memoryCapability/name', 'Memory');
40
+ const description = nls.localize('theia/ai/ide/memoryCapability/description',
41
+ 'Lets the agent maintain a persistent, wiki-style knowledge base for the workspace, so this and future sessions '
42
+ + 'build on what came before instead of starting from scratch.');
43
+ const dir = `{{${MEMORY_DIRECTORY_VARIABLE.name}}}`;
44
+
45
+ return `---
46
+ name: ${name}
47
+ description: ${description}
48
+ ---
49
+
50
+ ## Memory
51
+
52
+ Maintain a persistent knowledge base under \`${dir}\`, the same way a personal
53
+ LLM-maintained wiki is built: raw material is ingested once, then incrementally *compiled* into a linked set of concept
54
+ articles that you read from on every future task. The raw material itself is not the knowledge base — the compiled wiki is.
55
+
56
+ That directory belongs to the current workspace but lies outside it, so what you learn about one project neither bleeds into
57
+ the next nor shows up in the user's repository. Reach it with the ordinary file tools, prefixing every memory path with it.
58
+
59
+ - \`${dir}/raw/\` — append-only ingest: session transcripts, pasted findings, anything worth preserving verbatim. Keep one
60
+ file per task, \`raw/<date>-<topic>.md\` with the \`yyyy-mm-dd\` prefix of {{today:inIso8601}} as the date: create it with
61
+ ~{${WRITE_FILE_CONTENT_ID}} as soon as there is something worth keeping and append later findings to it as new sections
62
+ (~{${WRITE_FILE_REPLACEMENTS_ID}}, so you don't re-emit the whole file). Only ever append to the current task's file — earlier
63
+ files and a single shared log are both off limits. Pruning \`raw/\` is the user's call, not yours.
64
+ - \`${dir}/wiki/\` — the actual knowledge base: one short, single-concept \`.md\` article per topic (a project fact, a
65
+ convention, an environment quirk, a standing decision), cross-linked from \`wiki/index.md\` and from related articles. This is
66
+ what you read from, not \`raw/\`.
67
+ - Start of task: read \`${dir}/wiki/index.md\` (~{${GET_WORKSPACE_FILE_LIST_FUNCTION_ID}} / ~{${FILE_CONTENT_FUNCTION_ID}})
68
+ and follow only the links relevant to the current task — browse the wiki, don't grep a diary. An empty memory directory simply
69
+ means this workspace has no memory yet: create \`wiki/index.md\` the first time you have something durable to record.
70
+ - Compile, don't just log: when something durable comes up, fold it into the right existing article
71
+ (~{${WRITE_FILE_REPLACEMENTS_ID}}) or create a new one linked from \`index.md\` and its related articles — don't leave it
72
+ stranded only in \`raw/\`.
73
+ - File outputs back in: substantial findings, decisions, or analysis produced during a task should be written into the wiki
74
+ article they inform, so future queries benefit from this session's work too, not just the next session's memory of it.
75
+ - Lint occasionally: when asked to clean up memory, or an article looks stale, use ~{${SEARCH_IN_WORKSPACE_FUNCTION_ID}} /
76
+ ~{${FIND_FILES_BY_PATTERN_FUNCTION_ID}} across \`${dir}/wiki/\` to find contradictions, duplicate articles, and missing
77
+ links, then merge or fix them. Both take that directory as their search root.
78
+ - Memory is yours to maintain unprompted — that is what separates it from the project info file described below, which is the
79
+ user's own description of the project and is only updated when they ask for it. Record what you learn in the wiki instead of
80
+ editing that file.
81
+ - Keep the knowledge base to what belongs in it: what you learned about this project and how to work in it. It is not a place for
82
+ secrets, credentials, or copies of the user's files.
83
+
84
+ Use judgement on what's worth compiling — a small number of accurate, well-linked articles beats an exhaustive log.`;
85
+ }
86
+ }
@@ -0,0 +1,113 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource GmbH.
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 { expect } from 'chai';
18
+ import { URI } from '@theia/core';
19
+ import { Container } from '@theia/core/shared/inversify';
20
+ import { WorkspaceMetadataStorageService, WorkspaceMetadataStore } from '@theia/workspace/lib/browser/metadata-storage';
21
+ import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
22
+ import { MEMORY_DIRECTORY_VARIABLE, MEMORY_METADATA_STORE_KEY, MemoryDirectoryVariableContribution } from './memory-directory-variable-contribution';
23
+
24
+ describe('MemoryDirectoryVariableContribution', () => {
25
+
26
+ let contribution: MemoryDirectoryVariableContribution;
27
+ let location: URI;
28
+ let requestedKeys: string[];
29
+ let ensureExistsCalls: number;
30
+ let workspaceOpen: boolean;
31
+
32
+ beforeEach(() => {
33
+ location = new URI('file:///config/workspace-metadata/uuid/memory');
34
+ requestedKeys = [];
35
+ ensureExistsCalls = 0;
36
+ workspaceOpen = true;
37
+
38
+ const store = {
39
+ get location(): URI {
40
+ return location;
41
+ },
42
+ ensureExists: async () => {
43
+ ensureExistsCalls++;
44
+ }
45
+ } as unknown as WorkspaceMetadataStore;
46
+
47
+ const container = new Container();
48
+ container.bind(WorkspaceMetadataStorageService).toConstantValue({
49
+ getOrCreateStore: async (key: string) => {
50
+ requestedKeys.push(key);
51
+ if (!workspaceOpen) {
52
+ throw new Error('Cannot create metadata store: no workspace is currently open');
53
+ }
54
+ return store;
55
+ }
56
+ } as WorkspaceMetadataStorageService);
57
+ container.bind(WorkspaceService).toConstantValue({
58
+ tryGetRoots: () => workspaceOpen ? [{ resource: new URI('file:///workspace') }] : []
59
+ } as unknown as WorkspaceService);
60
+ container.bind(MemoryDirectoryVariableContribution).toSelf();
61
+
62
+ contribution = container.get(MemoryDirectoryVariableContribution);
63
+ });
64
+
65
+ const resolve = (name: string = MEMORY_DIRECTORY_VARIABLE.name) =>
66
+ contribution.resolve({ variable: { ...MEMORY_DIRECTORY_VARIABLE, name } }, {});
67
+
68
+ it('resolves the variable to the memory store of the current workspace', async () => {
69
+ const resolved = await resolve();
70
+ expect(resolved?.value).to.equal(location.path.fsPath());
71
+ expect(requestedKeys).to.deep.equal([MEMORY_METADATA_STORE_KEY]);
72
+ });
73
+
74
+ it('creates the directory when the variable is resolved, but only once per location', async () => {
75
+ await resolve();
76
+ await resolve();
77
+ expect(ensureExistsCalls).to.equal(1);
78
+
79
+ location = new URI('file:///config/workspace-metadata/other/memory');
80
+ await resolve();
81
+ expect(ensureExistsCalls).to.equal(2);
82
+ });
83
+
84
+ it('contributes the memory directory as an accessible root', async () => {
85
+ expect((await contribution.getRoots()).map(root => root.toString())).to.deep.equal([location.toString()]);
86
+ });
87
+
88
+ it('follows the store location without needing invalidation', async () => {
89
+ await contribution.getRoots();
90
+ location = new URI('file:///config/workspace-metadata/other/memory');
91
+ expect((await contribution.getRoots())[0].toString()).to.equal(location.toString());
92
+ });
93
+
94
+ it('does not resolve other variables', async () => {
95
+ expect(await resolve('somethingElse')).to.be.undefined;
96
+ });
97
+
98
+ it('has neither a value nor a root without a workspace', async () => {
99
+ workspaceOpen = false;
100
+ expect(await resolve()).to.be.undefined;
101
+ expect(await contribution.getRoots()).to.be.empty;
102
+ });
103
+
104
+ it('drops the memory of a closed workspace instead of keeping the cached location', async () => {
105
+ // The store cannot compute a location without a workspace, so on close it keeps the one of the
106
+ // closed workspace. Nothing may be reachable through it any more.
107
+ expect((await resolve())?.value).to.equal(location.path.fsPath());
108
+
109
+ workspaceOpen = false;
110
+ expect(await resolve()).to.be.undefined;
111
+ expect(await contribution.getRoots()).to.be.empty;
112
+ });
113
+ });