@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
@@ -17,7 +17,7 @@ import {
17
17
  ChatMode, ChatRequestModel, ChatService, ChatSession,
18
18
  MutableChatModel, MutableChatRequestModel
19
19
  } from '@theia/ai-chat/lib/common';
20
- import { inject, injectable } from '@theia/core/shared/inversify';
20
+ import { inject, injectable, named } from '@theia/core/shared/inversify';
21
21
  import {
22
22
  CODER_SYSTEM_PROMPT_ID,
23
23
  CODER_EDIT_TEMPLATE_ID,
@@ -25,11 +25,10 @@ import {
25
25
  CODER_AGENT_MODE_NEXT_TEMPLATE_ID,
26
26
  getCoderAgentModePromptTemplate,
27
27
  getCoderAgentModeNextPromptTemplate,
28
- getCoderPromptTemplateEdit,
29
- getCoderPromptTemplateEditNext
28
+ getCoderPromptTemplateEdit
30
29
  } from '../common/coder-replace-prompt-template';
31
30
  import { LanguageModelRequirement, PromptVariantSet } from '@theia/ai-core';
32
- import { nls } from '@theia/core';
31
+ import { ILogger, nls } from '@theia/core';
33
32
  import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
34
33
  import { MarkdownStringImpl } from '@theia/core/lib/common/markdown-rendering';
35
34
  import { AI_CHAT_HOME, ChatCommands } from '@theia/ai-chat-ui/lib/browser/chat-view-commands';
@@ -40,6 +39,9 @@ export const CoderAgentId = 'Coder';
40
39
 
41
40
  @injectable()
42
41
  export class CoderAgent extends AbstractModeAwareChatAgent {
42
+ @inject(ILogger) @named('ai-ide:CoderAgent')
43
+ protected override readonly logger: ILogger;
44
+
43
45
  @inject(ChatService) protected readonly chatService: ChatService;
44
46
  @inject(AgentModeConfirmationService) protected readonly agentModeConfirmation: AgentModeConfirmationService;
45
47
  id: string = CoderAgentId;
@@ -75,7 +77,7 @@ export class CoderAgent extends AbstractModeAwareChatAgent {
75
77
  override prompts: PromptVariantSet[] = [{
76
78
  id: CODER_SYSTEM_PROMPT_ID,
77
79
  defaultVariant: getCoderAgentModePromptTemplate(),
78
- variants: [getCoderPromptTemplateEdit(), getCoderAgentModeNextPromptTemplate(), getCoderPromptTemplateEditNext()]
80
+ variants: [getCoderPromptTemplateEdit(), getCoderAgentModeNextPromptTemplate()]
79
81
  }];
80
82
  protected override systemPromptId: string | undefined = CODER_SYSTEM_PROMPT_ID;
81
83
 
@@ -21,7 +21,7 @@ FrontendApplicationConfigProvider.set({});
21
21
 
22
22
  import { expect } from 'chai';
23
23
  import { Container } from '@theia/core/shared/inversify';
24
- import { URI, PreferenceService } from '@theia/core';
24
+ import { URI, PreferenceService, ILogger } from '@theia/core';
25
25
  import { FileService } from '@theia/filesystem/lib/browser/file-service';
26
26
  import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
27
27
  import { FileStat } from '@theia/filesystem/lib/common/files';
@@ -30,6 +30,7 @@ import { ContextFileValidationServiceImpl } from './context-file-validation-serv
30
30
  import { WorkspaceFunctionScope } from './workspace-functions';
31
31
  import { AiConfigurationService } from '@theia/ai-core';
32
32
  import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
33
+ import { MockLogger } from '@theia/core/lib/common/test/mock-logger';
33
34
 
34
35
  disableJSDOM();
35
36
 
@@ -68,7 +69,7 @@ describe('ContextFileValidationService', () => {
68
69
 
69
70
  beforeEach(async () => {
70
71
  container = new Container();
71
-
72
+ container.bind(ILogger).to(MockLogger).inSingletonScope();
72
73
  // Mock WorkspaceService
73
74
  mockWorkspaceService = {
74
75
  tryGetRoots: () => [{
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
  import { ChatMode } from '@theia/ai-chat';
17
17
  import { LanguageModelRequirement } from '@theia/ai-core';
18
- import { injectable } from '@theia/core/shared/inversify';
18
+ import { inject, injectable, named } from '@theia/core/shared/inversify';
19
19
  import {
20
20
  createSkillSystemVariants,
21
21
  CREATE_SKILL_SYSTEM_PROMPT_TEMPLATE_ID,
@@ -23,11 +23,14 @@ import {
23
23
  CREATE_SKILL_SYSTEM_AGENT_MODE_TEMPLATE_ID,
24
24
  } from '../common/create-skill-prompt-template';
25
25
  import { AbstractModeAwareChatAgent } from './mode-aware-chat-agent';
26
- import { nls } from '@theia/core';
26
+ import { ILogger, nls } from '@theia/core';
27
27
 
28
28
  @injectable()
29
29
  export class CreateSkillAgent extends AbstractModeAwareChatAgent {
30
30
 
31
+ @inject(ILogger) @named('ai-ide:CreateSkillAgent')
32
+ protected override readonly logger: ILogger;
33
+
31
34
  name = 'CreateSkill';
32
35
  id = 'CreateSkill';
33
36
  languageModelRequirements: LanguageModelRequirement[] = [{
@@ -16,8 +16,8 @@
16
16
 
17
17
  import { AbstractStreamParsingChatAgent } from '@theia/ai-chat/lib/common/chat-agents';
18
18
  import { LanguageModelRequirement } from '@theia/ai-core/lib/common';
19
- import { nls } from '@theia/core';
20
- import { injectable } from '@theia/core/shared/inversify';
19
+ import { ILogger, nls } from '@theia/core';
20
+ import { inject, injectable, named } from '@theia/core/shared/inversify';
21
21
  import { exploreSystemPrompt, EXPLORE_SYSTEM_PROMPT_ID } from './explore-prompt-template';
22
22
  import { ExploreAgentId } from '../common/agent-ids';
23
23
 
@@ -25,6 +25,9 @@ export { ExploreAgentId };
25
25
 
26
26
  @injectable()
27
27
  export class ExploreAgent extends AbstractStreamParsingChatAgent {
28
+ @inject(ILogger) @named('ai-ide:ExploreAgent')
29
+ protected override readonly logger: ILogger;
30
+
28
31
  name = 'Explore';
29
32
  id = ExploreAgentId;
30
33
  languageModelRequirements: LanguageModelRequirement[] = [{
@@ -20,7 +20,7 @@ import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/front
20
20
  FrontendApplicationConfigProvider.set({});
21
21
 
22
22
  import { expect } from 'chai';
23
- import { CancellationTokenSource } from '@theia/core';
23
+ import { CancellationTokenSource, PreferenceService, ILogger } from '@theia/core';
24
24
  import {
25
25
  SuggestFileContent,
26
26
  WriteFileContent,
@@ -35,13 +35,18 @@ import {
35
35
  DefaultFileChangeSetTitleProvider,
36
36
  ReplaceContentInFileFunctionHelperV2
37
37
  } from './file-changeset-functions';
38
- import { ChatToolContext, MutableChatRequestModel, MutableChatResponseModel, MutableChatModel } from '@theia/ai-chat';
38
+ import { ChatToolContext, FileReadTracker, MutableChatRequestModel, MutableChatResponseModel, MutableChatModel } from '@theia/ai-chat';
39
39
  import { ChangeSet, ChangeSetElement } from '@theia/ai-chat/lib/common/change-set';
40
40
  import { Container } from '@theia/core/shared/inversify';
41
- import { WorkspaceFunctionScope } from './workspace-functions';
41
+ import { AccessibleRootContribution, WorkspaceFunctionScope } from './workspace-functions';
42
+ import { bindRootContributionProvider } from '@theia/core/lib/common/contribution-provider';
43
+ import { AiConfigurationService } from '@theia/ai-core';
44
+ import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
45
+ import { WorkspaceService } from '@theia/workspace/lib/browser';
42
46
  import { FileService } from '@theia/filesystem/lib/browser/file-service';
43
- import { ChangeSetFileElementFactory, ChangeSetFileElement } from '@theia/ai-chat/lib/browser/change-set-file-element';
47
+ import { ChangeSetElementArgs, ChangeSetFileElementFactory, ChangeSetFileElement } from '@theia/ai-chat/lib/browser/change-set-file-element';
44
48
  import { URI } from '@theia/core/lib/common/uri';
49
+ import { MockLogger } from '@theia/core/lib/common/test/mock-logger';
45
50
 
46
51
  disableJSDOM();
47
52
 
@@ -86,7 +91,7 @@ describe('File Changeset Functions Cancellation Tests', () => {
86
91
 
87
92
  // Mock dependencies
88
93
  const mockWorkspaceScope = {
89
- resolveRelativePath: () => new URI('file:///workspace/test.txt')
94
+ resolveAccessiblePath: async () => new URI('file:///workspace/test.txt')
90
95
  } as unknown as WorkspaceFunctionScope;
91
96
 
92
97
  const mockFileService = {
@@ -104,6 +109,7 @@ describe('File Changeset Functions Cancellation Tests', () => {
104
109
 
105
110
  // Register mocks in the container
106
111
  container.bind(WorkspaceFunctionScope).toConstantValue(mockWorkspaceScope);
112
+ container.bind(ILogger).to(MockLogger).inSingletonScope();
107
113
  container.bind(FileService).toConstantValue(mockFileService);
108
114
  container.bind(ChangeSetFileElementFactory).toConstantValue(mockFileChangeFactory);
109
115
  container.bind(FileChangeSetTitleProvider).to(DefaultFileChangeSetTitleProvider).inSingletonScope();
@@ -264,4 +270,151 @@ describe('File Changeset Functions Cancellation Tests', () => {
264
270
  expect(SuggestFileReplacements.ID).to.equal('suggestFileReplacements');
265
271
  expect(suggestFileReplacements.getTool().id).to.equal('suggestFileReplacements');
266
272
  });
273
+
274
+ describe('stale file guard', () => {
275
+ /** Stands in for the tracker: the file counts as changed until the agent reads it again. */
276
+ function bindTracker(): FileReadTracker & { stale: boolean } {
277
+ const tracker: FileReadTracker & { stale: boolean } = {
278
+ stale: true,
279
+ recordRead: async () => { tracker.stale = false; },
280
+ isStale: async () => tracker.stale,
281
+ getChangedFiles: async () => []
282
+ };
283
+ container.bind(FileReadTracker).toConstantValue(tracker);
284
+ return tracker;
285
+ }
286
+
287
+ it('WriteFileContent refuses to overwrite a file that changed since it was read', async () => {
288
+ bindTracker();
289
+ const handler = container.get(WriteFileContent).getTool().handler;
290
+
291
+ const result = await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
292
+
293
+ const jsonResponse = typeof result === 'string' ? JSON.parse(result) : result;
294
+ expect(jsonResponse.error).to.match(/changed since you last read it/);
295
+ });
296
+
297
+ it('SuggestFileContent refuses to propose overwriting a file that changed since it was read', async () => {
298
+ bindTracker();
299
+ const handler = container.get(SuggestFileContent).getTool().handler;
300
+
301
+ const result = await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
302
+
303
+ const jsonResponse = typeof result === 'string' ? JSON.parse(result) : result;
304
+ expect(jsonResponse.error).to.match(/changed since you last read it/);
305
+ });
306
+
307
+ it('WriteFileContent writes once the agent has read the file again', async () => {
308
+ const tracker = bindTracker();
309
+ const handler = container.get(WriteFileContent).getTool().handler;
310
+ await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
311
+
312
+ await tracker.recordRead(mockCtx.request.session.id, new URI('file:///workspace/test.txt'));
313
+
314
+ const result = await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
315
+ expect(result).to.equal('Successfully wrote content to file test.txt.');
316
+ });
317
+ });
318
+ });
319
+
320
+ describe('File Changeset Functions access control', () => {
321
+ let container: Container;
322
+ let ctx: ChatToolContext;
323
+ let written: Array<{ uri: URI; content: string }>;
324
+ let contributedRoots: URI[];
325
+
326
+ before(() => { disableJSDOM = enableJSDOM(); });
327
+ after(() => { disableJSDOM(); });
328
+
329
+ beforeEach(() => {
330
+ written = [];
331
+ contributedRoots = [];
332
+
333
+ const changeSet: Partial<ChangeSet> = {
334
+ addElements: () => true,
335
+ setTitle: () => { },
336
+ removeElements: () => true,
337
+ getElementByURI: () => undefined
338
+ };
339
+ ctx = {
340
+ request: {
341
+ id: 'request-id',
342
+ session: { id: 'session-id', changeSet: changeSet as ChangeSet } as MutableChatModel
343
+ } as MutableChatRequestModel,
344
+ response: {} as MutableChatResponseModel
345
+ };
346
+
347
+ container = new Container();
348
+ container.bind(ILogger).to(MockLogger).inSingletonScope();
349
+ container.bind(WorkspaceService).toConstantValue({
350
+ roots: [{ resource: new URI('file:///workspace') }],
351
+ tryGetRoots: () => [{ resource: new URI('file:///workspace') }],
352
+ onWorkspaceChanged: () => ({ dispose: () => { } })
353
+ } as unknown as WorkspaceService);
354
+ container.bind(FileService).toConstantValue({
355
+ exists: async () => true,
356
+ read: async () => ({ value: { toString: () => 'old content' } }),
357
+ watch: () => ({ dispose: () => { } }),
358
+ onDidFilesChange: () => ({ dispose: () => { } })
359
+ } as unknown as FileService);
360
+ container.bind(PreferenceService).toConstantValue({ get: <T>(_path: string, defaultValue: T) => defaultValue });
361
+ container.bind(AiConfigurationService).toConstantValue({
362
+ get: <T>(_name: string, fallback?: T) => fallback,
363
+ ready: Promise.resolve(),
364
+ onDidChangeTrust: () => ({ dispose: () => { } })
365
+ } as unknown as AiConfigurationService);
366
+ container.bind(EnvVariablesServer).toConstantValue({
367
+ getHomeDirUri: async () => 'file:///home/test',
368
+ getConfigDirUri: async () => 'file:///home/test/.theia'
369
+ } as unknown as EnvVariablesServer);
370
+ bindRootContributionProvider(container, AccessibleRootContribution);
371
+ container.bind(AccessibleRootContribution).toConstantValue({ getRoots: async () => contributedRoots });
372
+ container.bind(WorkspaceFunctionScope).toSelf();
373
+ container.bind(ChangeSetFileElementFactory).toConstantValue((args: ChangeSetElementArgs) => ({
374
+ uri: args.uri,
375
+ apply: async () => {
376
+ written.push({ uri: args.uri, content: args.targetState ?? '' });
377
+ }
378
+ } as ChangeSetFileElement));
379
+ container.bind(FileChangeSetTitleProvider).to(DefaultFileChangeSetTitleProvider).inSingletonScope();
380
+ container.bind(ReplaceContentInFileFunctionHelperV2).toSelf();
381
+ container.bind(WriteFileContent).toSelf();
382
+ container.bind(WriteFileReplacements).toSelf();
383
+ });
384
+
385
+ const writeContent = (path: string) =>
386
+ container.get(WriteFileContent).getTool().handler(JSON.stringify({ path, content: 'new content' }), ctx) as Promise<string>;
387
+ const writeReplacements = (path: string) =>
388
+ container.get(WriteFileReplacements).getTool().handler(
389
+ JSON.stringify({ path, replacements: [{ oldContent: 'old content', newContent: 'new content' }] }), ctx
390
+ ) as Promise<string>;
391
+
392
+ it('refuses to write through a .. traversal instead of escaping the workspace', async () => {
393
+ expect(JSON.parse(await writeContent('../../etc/passwd')).error).to.include('Invalid path');
394
+ expect(JSON.parse(await writeReplacements('../../etc/passwd')).error).to.include('Invalid path');
395
+ expect(written).to.be.empty;
396
+ });
397
+
398
+ it('refuses to write to an absolute path outside the workspace', async () => {
399
+ expect(JSON.parse(await writeContent('/etc/passwd')).error).to.include('not allowed');
400
+ expect(JSON.parse(await writeReplacements('/etc/passwd')).error).to.include('not allowed');
401
+ expect(written).to.be.empty;
402
+ });
403
+
404
+ it('refuses to write to the user home directory', async () => {
405
+ expect(JSON.parse(await writeContent('~/.ssh/authorized_keys')).error).to.include('not allowed');
406
+ expect(written).to.be.empty;
407
+ });
408
+
409
+ it('writes inside the workspace', async () => {
410
+ expect(await writeContent('src/index.ts')).to.include('Successfully');
411
+ expect(written.map(w => w.uri.toString())).to.deep.equal(['file:///workspace/src/index.ts']);
412
+ });
413
+
414
+ it('writes to a contributed root such as the memory directory', async () => {
415
+ contributedRoots = [new URI('file:///home/test/.theia/workspace-metadata/uuid/memory')];
416
+ const result = await writeContent('/home/test/.theia/workspace-metadata/uuid/memory/wiki/index.md');
417
+ expect(result).to.include('Successfully');
418
+ expect(written.map(w => w.uri.toString())).to.deep.equal(['file:///home/test/.theia/workspace-metadata/uuid/memory/wiki/index.md']);
419
+ });
267
420
  });
@@ -13,18 +13,18 @@
13
13
  //
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
- import { assertChatContext, ChatToolContext } from '@theia/ai-chat';
16
+ import { assertChatContext, ChatToolContext, FileReadTracker } from '@theia/ai-chat';
17
17
  import { ChangeSet } from '@theia/ai-chat/lib/common/change-set';
18
18
  import { ChangeSetElementArgs, ChangeSetFileElement, ChangeSetFileElementFactory } from '@theia/ai-chat/lib/browser/change-set-file-element';
19
19
  import { ToolInvocationContext, ToolProvider, ToolRequest, ToolRequestParameters, ToolRequestParametersProperties } from '@theia/ai-core';
20
20
  import { ContentReplacerV1Impl, Replacement, ContentReplacer } from '@theia/core/lib/common/content-replacer';
21
21
  import { ContentReplacerV2Impl } from '@theia/core/lib/common/content-replacer-v2-impl';
22
22
  import { URI } from '@theia/core/lib/common/uri';
23
- import { inject, injectable } from '@theia/core/shared/inversify';
23
+ import { inject, injectable, named, optional } from '@theia/core/shared/inversify';
24
24
  import { FileService } from '@theia/filesystem/lib/browser/file-service';
25
25
  import { WorkspaceFunctionScope } from './workspace-functions';
26
26
 
27
- import { nls } from '@theia/core';
27
+ import { nls, ILogger } from '@theia/core';
28
28
  import { extractJsonStringField } from '@theia/ai-chat-ui/lib/browser/chat-response-renderer/toolcall-utils';
29
29
  import {
30
30
  CLEAR_FILE_CHANGES_ID,
@@ -37,6 +37,15 @@ import {
37
37
  WRITE_FILE_REPLACEMENTS_SIMPLE_ID
38
38
  } from '../common/file-changeset-function-ids';
39
39
 
40
+ /**
41
+ * Description of the `path` parameter shared by all file changeset tools, so that they advertise the
42
+ * same accepted forms as the read-only workspace tools.
43
+ */
44
+ const FILE_PATH_PARAMETER_DESCRIPTION = 'Path to the target file. May be workspace-relative ' +
45
+ '(e.g., "my-project/src/index.ts"), an absolute path, or a `file://` URI. ' +
46
+ 'Absolute / URI forms must point to a location the tools may access, such as a directory listed in the ' +
47
+ '`ai-features.workspaceFunctions.allowedExternalPaths` preference.';
48
+
40
49
  function createPathShortLabel(args: string, hasMore: boolean): { label: string; hasMore: boolean } | undefined {
41
50
  const path = extractJsonStringField(args, 'path');
42
51
  if (path) {
@@ -45,6 +54,14 @@ function createPathShortLabel(args: string, hasMore: boolean): { label: string;
45
54
  return undefined;
46
55
  }
47
56
 
57
+ /**
58
+ * Whole-file writes from an outdated read would silently discard whatever changed in between. The replacement
59
+ * tools need no such guard: they re-read and fail when their matched content is gone.
60
+ */
61
+ function staleFileError(path: string): string {
62
+ return `File ${path} changed since you last read it. Read it again before overwriting it, so that the changes made in the meantime are not lost.`;
63
+ }
64
+
48
65
  export const FileChangeSetTitleProvider = Symbol('FileChangeSetTitleProvider');
49
66
 
50
67
  export interface FileChangeSetTitleProvider {
@@ -67,6 +84,10 @@ export class SuggestFileContent implements ToolProvider {
67
84
  @inject(FileChangeSetTitleProvider)
68
85
  protected readonly fileChangeSetTitleProvider: FileChangeSetTitleProvider;
69
86
 
87
+ /** Optional: the guard is advisory, so containers without a tracker still get a working tool. */
88
+ @inject(FileReadTracker) @optional()
89
+ protected readonly fileReadTracker: FileReadTracker | undefined;
90
+
70
91
  getTool(): ToolRequest {
71
92
  return {
72
93
  id: SuggestFileContent.ID,
@@ -82,8 +103,7 @@ export class SuggestFileContent implements ToolProvider {
82
103
  properties: {
83
104
  path: {
84
105
  type: 'string',
85
- description: 'The path to the file within the workspace ' +
86
- '(e.g., "my-project/src/index.ts", "backend/config/settings.json").'
106
+ description: FILE_PATH_PARAMETER_DESCRIPTION
87
107
  },
88
108
  content: {
89
109
  type: 'string',
@@ -100,7 +120,15 @@ export class SuggestFileContent implements ToolProvider {
100
120
  }
101
121
  const { path, content } = JSON.parse(args);
102
122
  const chatSessionId = ctx.request.session.id;
103
- const uri = await this.workspaceFunctionScope.resolveRelativePath(path);
123
+ let uri: URI;
124
+ try {
125
+ uri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
126
+ } catch (error) {
127
+ return JSON.stringify({ error: error.message });
128
+ }
129
+ if (await this.fileReadTracker?.isStale(chatSessionId, uri)) {
130
+ return JSON.stringify({ error: staleFileError(path) });
131
+ }
104
132
  let type: ChangeSetElementArgs['type'] = 'modify';
105
133
  if (content === '') {
106
134
  type = 'delete';
@@ -143,6 +171,10 @@ export class WriteFileContent implements ToolProvider {
143
171
  @inject(FileChangeSetTitleProvider)
144
172
  protected readonly fileChangeSetTitleProvider: FileChangeSetTitleProvider;
145
173
 
174
+ /** Optional: the guard is advisory, so containers without a tracker still get a working tool. */
175
+ @inject(FileReadTracker) @optional()
176
+ protected readonly fileReadTracker: FileReadTracker | undefined;
177
+
146
178
  getTool(): ToolRequest {
147
179
  return {
148
180
  id: WriteFileContent.ID,
@@ -158,8 +190,7 @@ export class WriteFileContent implements ToolProvider {
158
190
  properties: {
159
191
  path: {
160
192
  type: 'string',
161
- description: 'The path to the file within the workspace ' +
162
- '(e.g., "my-project/src/index.ts", "backend/config/settings.json").'
193
+ description: FILE_PATH_PARAMETER_DESCRIPTION
163
194
  },
164
195
  content: {
165
196
  type: 'string',
@@ -176,7 +207,15 @@ export class WriteFileContent implements ToolProvider {
176
207
  }
177
208
  const { path, content } = JSON.parse(args);
178
209
  const chatSessionId = ctx.request.session.id;
179
- const uri = await this.workspaceFunctionScope.resolveRelativePath(path);
210
+ let uri: URI;
211
+ try {
212
+ uri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
213
+ } catch (error) {
214
+ return JSON.stringify({ error: error.message });
215
+ }
216
+ if (await this.fileReadTracker?.isStale(chatSessionId, uri)) {
217
+ return JSON.stringify({ error: staleFileError(path) });
218
+ }
180
219
  let type = 'modify';
181
220
  if (content === '') {
182
221
  type = 'delete';
@@ -223,6 +262,9 @@ export class ReplaceContentInFileFunctionHelper {
223
262
  @inject(FileChangeSetTitleProvider)
224
263
  protected readonly fileChangeSetTitleProvider: FileChangeSetTitleProvider;
225
264
 
265
+ @inject(ILogger) @named('ai-ide:ReplaceContentInFileFunctionHelper')
266
+ protected readonly logger: ILogger;
267
+
226
268
  private replacer: ContentReplacer;
227
269
 
228
270
  constructor() {
@@ -256,9 +298,7 @@ export class ReplaceContentInFileFunctionHelper {
256
298
  properties: {
257
299
  path: {
258
300
  type: 'string',
259
- description: 'The path to the file within the workspace ' +
260
- '(e.g., "my-project/src/index.ts", "backend/src/main.ts"). ' +
261
- 'Must read the file with getFileContent first.'
301
+ description: FILE_PATH_PARAMETER_DESCRIPTION + ' Must read the file with getFileContent first.'
262
302
  },
263
303
  replacements: {
264
304
  type: 'array',
@@ -324,7 +364,7 @@ export class ReplaceContentInFileFunctionHelper {
324
364
  return `No changes needed for file ${result.path}. Content already matches the requested state.`;
325
365
  }
326
366
  } catch (error) {
327
- console.debug('Error processing replacements:', error.message);
367
+ this.logger.debug('Error processing replacements:', error.message);
328
368
  return JSON.stringify({ error: error.message });
329
369
  }
330
370
  }
@@ -350,7 +390,7 @@ export class ReplaceContentInFileFunctionHelper {
350
390
  return `No changes needed for file ${result.path}. Content already matches the requested state.`;
351
391
  }
352
392
  } catch (error) {
353
- console.debug('Error processing replacements:', error.message);
393
+ this.logger.debug('Error processing replacements:', error.message);
354
394
  return JSON.stringify({ error: error.message });
355
395
  }
356
396
  }
@@ -365,7 +405,7 @@ export class ReplaceContentInFileFunctionHelper {
365
405
  }
366
406
 
367
407
  const { path, replacements, reset } = JSON.parse(toolCallString) as { path: string, replacements: Replacement[], reset?: boolean };
368
- const fileUri = await this.workspaceFunctionScope.resolveRelativePath(path);
408
+ const fileUri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
369
409
 
370
410
  let startingContent: string;
371
411
  if (reset || !ctx.request.session.changeSet) {
@@ -423,14 +463,14 @@ export class ReplaceContentInFileFunctionHelper {
423
463
  return JSON.stringify({ error: 'Operation cancelled by user' });
424
464
  }
425
465
 
426
- const fileUri = await this.workspaceFunctionScope.resolveRelativePath(path);
466
+ const fileUri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
427
467
  if (ctx.request.session.changeSet.removeElements(fileUri)) {
428
468
  return `Cleared pending change(s) for file ${path}.`;
429
469
  } else {
430
470
  return `No pending changes found for file ${path}.`;
431
471
  }
432
472
  } catch (error) {
433
- console.debug('Error clearing file changes:', error.message);
473
+ this.logger.debug('Error clearing file changes:', error.message);
434
474
  return JSON.stringify({ error: error.message });
435
475
  }
436
476
  }
@@ -441,7 +481,7 @@ export class ReplaceContentInFileFunctionHelper {
441
481
  return JSON.stringify({ error: 'Operation cancelled by user' });
442
482
  }
443
483
 
444
- const fileUri = await this.workspaceFunctionScope.resolveRelativePath(path);
484
+ const fileUri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
445
485
 
446
486
  if (!ctx.request.session.changeSet) {
447
487
  const originalContent = (await this.fileService.read(fileUri)).value.toString();
@@ -456,7 +496,7 @@ export class ReplaceContentInFileFunctionHelper {
456
496
  return `File ${path} has no pending changes. Original content:\n\n${originalContent}`;
457
497
  }
458
498
  } catch (error) {
459
- console.debug('Error getting proposed file state:', error.message);
499
+ this.logger.debug('Error getting proposed file state:', error.message);
460
500
  return JSON.stringify({ error: error.message });
461
501
  }
462
502
  }
@@ -584,8 +624,7 @@ export class ClearFileChanges implements ToolProvider {
584
624
  properties: {
585
625
  path: {
586
626
  type: 'string',
587
- description: 'The path to the file within the workspace ' +
588
- '(e.g., "my-project/src/index.ts", "backend/src/main.ts").'
627
+ description: FILE_PATH_PARAMETER_DESCRIPTION
589
628
  }
590
629
  },
591
630
  required: ['path']
@@ -622,8 +661,7 @@ export class GetProposedFileState implements ToolProvider {
622
661
  properties: {
623
662
  path: {
624
663
  type: 'string',
625
- description: 'The path to the file within the workspace ' +
626
- '(e.g., "my-project/src/index.ts", "backend/src/main.ts").'
664
+ description: FILE_PATH_PARAMETER_DESCRIPTION
627
665
  }
628
666
  },
629
667
  required: ['path']