@codingame/monaco-vscode-chat-service-override 37.1.0 → 37.2.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 (205) hide show
  1. package/index.js +15 -5
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/agentHost/browser/agentHostEnablementService.js +1 -1
  4. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.d.ts +104 -0
  5. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +827 -0
  6. package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.d.ts +15 -0
  7. package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.js +71 -0
  8. package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.d.ts +16 -0
  9. package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.js +95 -0
  10. package/vscode/src/vs/workbench/api/browser/mainThreadChatDebug.d.ts +22 -0
  11. package/vscode/src/vs/workbench/api/browser/mainThreadChatDebug.js +286 -0
  12. package/vscode/src/vs/workbench/api/browser/mainThreadChatInputNotification.d.ts +10 -0
  13. package/vscode/src/vs/workbench/api/browser/mainThreadChatInputNotification.js +38 -0
  14. package/vscode/src/vs/workbench/api/browser/mainThreadChatQuota.d.ts +9 -0
  15. package/vscode/src/vs/workbench/api/browser/mainThreadChatQuota.js +22 -0
  16. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +130 -0
  17. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +907 -0
  18. package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.d.ts +10 -0
  19. package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.js +28 -0
  20. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.d.ts +27 -0
  21. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +167 -0
  22. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.d.ts +46 -0
  23. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +356 -0
  24. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/agentsVoiceWidgetBinding.js +1 -1
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +1 -1
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +2 -2
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/exportAgentHostDebugLogsAction.js +1 -1
  28. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +1 -1
  29. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +2 -2
  30. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +1 -1
  31. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +2 -2
  32. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +1 -1
  33. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentCustomizationContentExpander.d.ts +1 -1
  34. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentCustomizationItemProvider.d.ts +1 -1
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentCustomizationSyncProvider.d.ts +1 -1
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostActiveClientService.d.ts +1 -1
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostExistingSessionHarnessPickerEnablement.js +1 -1
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLocalCustomizations.d.ts +1 -1
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPermissionUiContribution.js +1 -1
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPromptCacheNotification.js +1 -1
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionHandler.js +5 -3
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSettings.contribution.js +1 -1
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSignedOutModelsNotification.js +2 -2
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentSessionSettings.contribution.js +2 -2
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/openSessionLinkOpener.contribution.js +1 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +1 -1
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +1 -1
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +1 -1
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +1 -1
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.d.ts +1 -1
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +1 -1
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +1 -1
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +1 -1
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +1 -1
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +1 -1
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +1 -1
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +1 -1
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.js +2 -2
  59. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.d.ts +1 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.js +1 -1
  61. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.js +3 -3
  62. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +1 -1
  63. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationPresentation.d.ts +1 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.d.ts +1 -1
  65. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.js +1 -1
  66. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigration.d.ts +1 -1
  67. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationCategories.js +1 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.d.ts +1 -1
  69. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +1 -1
  70. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +1 -1
  71. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +1 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/promptsServiceCustomizationItemProvider.d.ts +1 -1
  73. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +1 -1
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chat.shared.contribution.js +12 -12
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostChatDebugProvider.d.ts +1 -1
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostChatDebugProvider.js +1 -1
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +1 -1
  78. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheExplorerView.d.ts +1 -1
  79. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +1 -1
  80. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +1 -1
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +1 -1
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +1 -1
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.d.ts +1 -1
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.js +1 -1
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +1 -1
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +1 -1
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +1 -1
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +1 -1
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +1 -1
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +1 -1
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +1 -1
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +1 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.js +1 -1
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatPromoNotification.js +1 -1
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuotaNotification.js +2 -2
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionDescription.d.ts +2 -0
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionDescription.js +57 -0
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +2 -2
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +1 -1
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +1 -1
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +1 -1
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +1 -1
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +1 -1
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +1 -1
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +1 -1
  107. package/vscode/src/vs/workbench/contrib/chat/browser/expNotification/chatExpNotificationConfig.d.ts +1 -1
  108. package/vscode/src/vs/workbench/contrib/chat/browser/expNotification/chatExpNotificationConfig.js +1 -1
  109. package/vscode/src/vs/workbench/contrib/chat/browser/expNotification/chatExpNotificationContribution.js +1 -1
  110. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +1 -1
  111. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +2 -2
  112. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.d.ts +1 -1
  113. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +1 -1
  114. package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.js +1 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +3 -3
  116. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +1 -1
  117. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +1 -1
  118. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +1 -1
  119. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +1 -1
  120. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +1 -1
  122. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletions.js +1 -1
  123. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCommandArgumentHint.js +1 -1
  124. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +2 -2
  125. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +1 -1
  126. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +10 -2
  127. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputReferenceDecorations.js +1 -1
  128. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +1 -1
  129. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugEvents.d.ts +1 -1
  130. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +253 -0
  131. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +20 -0
  132. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +1 -1
  133. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +1 -1
  134. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +2 -2
  135. package/vscode/src/vs/workbench/contrib/chat/common/customizationHarnessService.d.ts +300 -0
  136. package/vscode/src/vs/workbench/contrib/chat/common/customizationHarnessService.js +272 -0
  137. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginEnablement.d.ts +25 -0
  138. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginEnablement.js +178 -0
  139. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +78 -0
  140. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.js +51 -0
  141. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +2 -2
  142. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +2 -2
  143. package/vscode/src/vs/workbench/contrib/chat/common/plugins/fileBackedInstalledPluginsStore.d.ts +67 -0
  144. package/vscode/src/vs/workbench/contrib/chat/common/plugins/fileBackedInstalledPluginsStore.js +195 -0
  145. package/vscode/src/vs/workbench/contrib/chat/common/plugins/marketplaceReference.d.ts +67 -0
  146. package/vscode/src/vs/workbench/contrib/chat/common/plugins/marketplaceReference.js +294 -0
  147. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +212 -0
  148. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +955 -0
  149. package/vscode/src/vs/workbench/contrib/chat/common/plugins/strictKnownMarketplaces.d.ts +31 -0
  150. package/vscode/src/vs/workbench/contrib/chat/common/plugins/strictKnownMarketplaces.js +122 -0
  151. package/vscode/src/vs/workbench/contrib/chat/common/plugins/workspacePluginSettingsService.d.ts +1 -1
  152. package/vscode/src/vs/workbench/contrib/chat/common/plugins/workspacePluginSettingsService.js +1 -1
  153. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/computeAutomaticInstructions.d.ts +65 -0
  154. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/computeAutomaticInstructions.js +698 -0
  155. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.d.ts +50 -0
  156. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.js +78 -0
  157. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.d.ts +77 -0
  158. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +120 -0
  159. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +10 -0
  160. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +23 -0
  161. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/extensionPromptFileService.d.ts +92 -0
  162. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/extensionPromptFileService.js +335 -0
  163. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +235 -0
  164. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +1673 -0
  165. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +202 -0
  166. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +872 -0
  167. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/confirmationTool.d.ts +36 -0
  168. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/confirmationTool.js +239 -0
  169. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/editFileTool.d.ts +21 -0
  170. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/editFileTool.js +143 -0
  171. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/manageTodoListTool.d.ts +24 -0
  172. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/manageTodoListTool.js +298 -0
  173. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/reviewPlanTool.d.ts +25 -0
  174. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/reviewPlanTool.js +177 -0
  175. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/runSubagentTool.d.ts +73 -0
  176. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/runSubagentTool.js +577 -0
  177. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactRulesTool.d.ts +11 -0
  178. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactRulesTool.js +90 -0
  179. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactsTool.d.ts +16 -0
  180. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactsTool.js +130 -0
  181. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/taskCompleteTool.d.ts +12 -0
  182. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/taskCompleteTool.js +53 -0
  183. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/toolHelpers.d.ts +5 -0
  184. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/toolHelpers.js +12 -0
  185. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/tools.d.ts +10 -0
  186. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/tools.js +91 -0
  187. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +38 -0
  188. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +518 -0
  189. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +6 -0
  190. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +231 -0
  191. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +1 -1
  192. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +4 -4
  193. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +1 -1
  194. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +1 -1
  195. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +1 -1
  196. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +1 -1
  197. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +1 -1
  198. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +1 -1
  199. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sendToTerminalTool.js +1 -1
  200. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +1 -1
  201. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +1 -1
  202. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +1 -1
  203. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCache.d.ts +1 -1
  204. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCache.js +1 -1
  205. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCompressor.js +1 -1
@@ -0,0 +1,872 @@
1
+
2
+ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
+ import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
4
+ import { isAbsolute } from '@codingame/monaco-vscode-api/vscode/vs/base/common/path';
5
+ import { ResourceSet } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
6
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
7
+ import { FileOperation, FileOperationError, FileOperationResult } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files';
8
+ import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
9
+ import { PromptsConfig, getPromptFileLocationsConfigKey, isTildePath } from '@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
10
+ import { joinPath, dirname, isEqual, isEqualOrParent, basename } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
11
+ import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
12
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
13
+ import { getPromptFileDefaultLocations, getPromptFileType, CLAUDE_CONFIG_FOLDER, GITHUB_CONFIG_FOLDER, COPILOT_CONFIG_FOLDER, getPromptFileExtension, LEGACY_MODE_FILE_EXTENSION, AGENTS_SOURCE_FOLDER, getCleanPromptName, AGENT_FILE_EXTENSION, SKILL_FILENAME } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
14
+ import { PromptFileSource, PromptsType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
15
+ import { IWorkbenchEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/common/environmentService.service';
16
+ import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
17
+ import { getExcludes, QueryType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/search/common/search';
18
+ import { ISearchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/search/common/search.service';
19
+ import { CancellationTokenSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
20
+ import { isCancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
21
+ import { PromptsStorage, AgentInstructionFileType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
22
+ import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
23
+ import { Event, Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
24
+ import { DisposableStore, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
25
+ import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
26
+ import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
27
+ import { equalsIgnoreCase } from '@codingame/monaco-vscode-api/vscode/vs/base/common/strings';
28
+ import { IWorkspaceTrustManagementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspaceTrust.service';
29
+ import { AGENT_HOST_SCHEME } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostUri';
30
+
31
+ const MAX_INSTRUCTIONS_RECURSION_DEPTH = 5;
32
+ let PromptFilesLocator = class PromptFilesLocator {
33
+ constructor(
34
+ fileService,
35
+ configService,
36
+ workspaceService,
37
+ environmentService,
38
+ searchService,
39
+ userDataService,
40
+ logService,
41
+ pathService,
42
+ workspaceTrustManagementService
43
+ ) {
44
+ this.fileService = fileService;
45
+ this.configService = configService;
46
+ this.workspaceService = workspaceService;
47
+ this.environmentService = environmentService;
48
+ this.searchService = searchService;
49
+ this.userDataService = userDataService;
50
+ this.logService = logService;
51
+ this.pathService = pathService;
52
+ this.workspaceTrustManagementService = workspaceTrustManagementService;
53
+ const userDataPromptsHome = this.userDataService.currentProfile.promptsHome;
54
+ this.userDataFolder = {
55
+ uri: userDataPromptsHome,
56
+ searchRoot: userDataPromptsHome,
57
+ filePattern: undefined,
58
+ source: PromptFileSource.UserData,
59
+ storage: PromptsStorage.user,
60
+ displayPath: ( localize(10857, "User Data")),
61
+ isDefault: true
62
+ };
63
+ }
64
+ getWorkspaceFolders() {
65
+ return this.workspaceService.getWorkspace().folders.filter(f => f.uri.scheme !== AGENT_HOST_SCHEME);
66
+ }
67
+ getWorkspaceFolder(resource) {
68
+ return this.workspaceService.getWorkspaceFolder(resource) ?? undefined;
69
+ }
70
+ onDidChangeWorkspaceFolders() {
71
+ return ( Event.map(this.workspaceService.onDidChangeWorkspaceFolders, () => undefined));
72
+ }
73
+ getPromptSourceFolders(type) {
74
+ return PromptsConfig.promptSourceFolders(this.configService, type);
75
+ }
76
+ getDefaultSourceFolders(type) {
77
+ return getPromptFileDefaultLocations(type);
78
+ }
79
+ async getWorkspaceFolderRoots(includeParents, logger, root) {
80
+ const workspaceFolders = root ? root.scheme === AGENT_HOST_SCHEME ? [] : [{
81
+ uri: root
82
+ }] : this.getWorkspaceFolders();
83
+ if (includeParents) {
84
+ const roots = ( new ResourceSet());
85
+ const userHome = await this.pathService.userHome();
86
+ for (const workspaceFolder of workspaceFolders) {
87
+ roots.add(workspaceFolder.uri);
88
+ const parents = await this.findParentRepoFolders(workspaceFolder.uri, userHome, roots, logger);
89
+ for (const parent of parents) {
90
+ roots.add(parent);
91
+ }
92
+ }
93
+ return [...roots];
94
+ }
95
+ return ( workspaceFolders.map(f => f.uri));
96
+ }
97
+ async findParentRepoFolders(folderUri, userHome, seen, logger) {
98
+ const candidates = [];
99
+ let current = folderUri;
100
+ while (true) {
101
+ try {
102
+ const gitStat = await this.fileService.stat(joinPath(current, ".git")).then(stat => stat, () => undefined);
103
+ const isRepoRoot = gitStat?.isDirectory === true;
104
+ if (isRepoRoot) {
105
+ if ((await this.workspaceTrustManagementService.getUriTrustInfo(current)).trusted) {
106
+ candidates.push(current);
107
+ return candidates;
108
+ }
109
+ logger?.logInfo(`Repository root found at ${( current.toString())}, but it is not trusted. Skipping parent folder inclusion for this workspace folder.`);
110
+ return [];
111
+ }
112
+ } catch (e) {
113
+ const msg = e instanceof Error ? e.message : String(e);
114
+ logger?.logInfo(`No repository root found for folder ${( folderUri.toString())}. Error accessing ${joinPath(current, ".git")}: ${msg}.`);
115
+ return [];
116
+ }
117
+ candidates.push(current);
118
+ const parent = dirname(current);
119
+ if (isEqual(current, parent) || current.path === "/" || isEqual(userHome, parent) || ( seen.has(parent))) {
120
+ break;
121
+ }
122
+ current = parent;
123
+ }
124
+ logger?.logInfo(`No repository root found for folder ${( folderUri.toString())}.`);
125
+ return [];
126
+ }
127
+ async listFiles(type, storage, token, root) {
128
+ const files = await this.listFilesWithSource(type, storage, token, root);
129
+ return ( files.map(file => file.uri));
130
+ }
131
+ async listFilesWithSource(type, storage, token, root) {
132
+ if (storage !== PromptsStorage.user && storage !== PromptsStorage.local) {
133
+ throw ( new Error(`Unsupported prompt file storage: ${storage}`));
134
+ }
135
+ const configuredLocations = this.getPromptSourceFolders(type);
136
+ const localRoot = storage === PromptsStorage.local ? root : undefined;
137
+ const absoluteLocations = await this.toAbsoluteLocations(
138
+ type,
139
+ configuredLocations.filter(location => location.storage === storage),
140
+ undefined,
141
+ localRoot
142
+ );
143
+ if (storage === PromptsStorage.user && this.isUserDataPromptType(type)) {
144
+ const localLocations = await this.toAbsoluteLocations(
145
+ type,
146
+ configuredLocations.filter(location => location.storage === PromptsStorage.local)
147
+ );
148
+ absoluteLocations.push(
149
+ ...localLocations.filter(location => this.sourceFolderOverlapsUserData(type, location.searchRoot))
150
+ );
151
+ absoluteLocations.push(this.userDataFolder);
152
+ }
153
+ const paths = ( new ResourceSet());
154
+ const result = [];
155
+ for (const {
156
+ searchRoot,
157
+ filePattern,
158
+ source,
159
+ storage: sourceStorage
160
+ } of absoluteLocations) {
161
+ const files = (filePattern === undefined) ?
162
+ await this.resolveFilesAtLocation(searchRoot, type, token, 0, localRoot) : await this.searchFilesInLocation(searchRoot, filePattern, token);
163
+ for (const file of files) {
164
+ if (getPromptFileType(file) !== type || ( paths.has(file))) {
165
+ continue;
166
+ }
167
+ const isUserDataFile = this.isUserDataPromptFile(type, file);
168
+ if ((isUserDataFile && storage !== PromptsStorage.user) || (!isUserDataFile && sourceStorage !== storage)) {
169
+ continue;
170
+ }
171
+ paths.add(file);
172
+ result.push({
173
+ uri: file,
174
+ source: isUserDataFile ? PromptFileSource.UserData : source
175
+ });
176
+ }
177
+ if (token.isCancellationRequested) {
178
+ return [];
179
+ }
180
+ }
181
+ return result;
182
+ }
183
+ isUserDataPromptType(type) {
184
+ return type === PromptsType.agent || type === PromptsType.instructions || type === PromptsType.prompt;
185
+ }
186
+ isUserDataPromptFile(type, resource) {
187
+ return this.isUserDataPromptType(type) && isEqualOrParent(resource, this.userDataFolder.uri);
188
+ }
189
+ sourceFolderOverlapsUserData(type, searchRoot) {
190
+ return this.isUserDataPromptType(type) && (isEqualOrParent(searchRoot, this.userDataFolder.uri) || isEqualOrParent(this.userDataFolder.uri, searchRoot));
191
+ }
192
+ createFilesUpdatedEvent(type) {
193
+ const disposables = ( new DisposableStore());
194
+ const eventEmitter = disposables.add(( new Emitter()));
195
+ const token = disposables.add(( new CancellationTokenSource())).token;
196
+ const externalFolderWatchers = disposables.add(( new DisposableStore()));
197
+ const key = getPromptFileLocationsConfigKey(type);
198
+ const userDataFolder = this.userDataService.currentProfile.promptsHome;
199
+ let parentFolders = [];
200
+ const updateExternalFolderWatchers = () => {
201
+ externalFolderWatchers.clear();
202
+ for (const folder of parentFolders) {
203
+ if (!this.getWorkspaceFolder(folder.searchRoot)) {
204
+ const recursive = folder.filePattern !== undefined || type === PromptsType.instructions;
205
+ externalFolderWatchers.add(this.fileService.watch(folder.searchRoot, {
206
+ recursive,
207
+ excludes: []
208
+ }));
209
+ }
210
+ }
211
+ };
212
+ const update = async () => {
213
+ try {
214
+ const configuredLocations = this.getPromptSourceFolders(type);
215
+ parentFolders = await this.toAbsoluteLocations(type, configuredLocations, undefined);
216
+ if (token.isCancellationRequested) {
217
+ return;
218
+ }
219
+ updateExternalFolderWatchers();
220
+ } catch (err) {
221
+ this.logService.error(`Error updating prompt file watchers after config change:`, err);
222
+ }
223
+ };
224
+ disposables.add(this.configService.onDidChangeConfiguration(e => {
225
+ if (e.affectsConfiguration(key) || e.affectsConfiguration(PromptsConfig.USE_CUSTOMIZATIONS_IN_PARENT_REPOS)) {
226
+ void update();
227
+ eventEmitter.fire();
228
+ }
229
+ }));
230
+ disposables.add(this.onDidChangeWorkspaceFolders()(() => {
231
+ void update();
232
+ eventEmitter.fire();
233
+ }));
234
+ disposables.add(this.workspaceTrustManagementService.onDidChangeTrustedFolders(() => {
235
+ void update();
236
+ eventEmitter.fire();
237
+ }));
238
+ disposables.add(this.fileService.onDidFilesChange(e => {
239
+ if (e.affects(userDataFolder)) {
240
+ eventEmitter.fire();
241
+ return;
242
+ }
243
+ if (( parentFolders.some(folder => e.affects(folder.searchRoot)))) {
244
+ eventEmitter.fire();
245
+ return;
246
+ }
247
+ }));
248
+ disposables.add(this.fileService.watch(userDataFolder));
249
+ void update();
250
+ return {
251
+ event: eventEmitter.event,
252
+ dispose: () => disposables.dispose()
253
+ };
254
+ }
255
+ createAgentInstructionsUpdatedEvent() {
256
+ const disposables = ( new DisposableStore());
257
+ const eventEmitter = disposables.add(( new Emitter()));
258
+ const cts = ( new CancellationTokenSource());
259
+ disposables.add(toDisposable(() => cts.dispose(true)));
260
+ const token = cts.token;
261
+ const watchers = disposables.add(( new DisposableStore()));
262
+ const watchedRoots = ( new ResourceSet());
263
+ const addWatch = resource => {
264
+ if (token.isCancellationRequested) {
265
+ return;
266
+ }
267
+ if (( watchedRoots.has(resource))) {
268
+ return;
269
+ }
270
+ watchedRoots.add(resource);
271
+ watchers.add(this.fileService.watch(resource));
272
+ };
273
+ const updateWatchers = async () => {
274
+ watchers.clear();
275
+ watchedRoots.clear();
276
+ const watchWorkspaceRoots = this.configService.getValue(PromptsConfig.USE_AGENT_MD) || this.configService.getValue(PromptsConfig.USE_CLAUDE_MD);
277
+ const watchClaudeFolders = this.configService.getValue(PromptsConfig.USE_CLAUDE_MD);
278
+ const watchCopilotFolders = this.configService.getValue(PromptsConfig.USE_COPILOT_INSTRUCTION_FILES);
279
+ const includeParents = this.configService.getValue(PromptsConfig.USE_CUSTOMIZATIONS_IN_PARENT_REPOS) === true;
280
+ const workspaceRoots = await this.getWorkspaceFolderRoots(includeParents);
281
+ if (token.isCancellationRequested) {
282
+ return;
283
+ }
284
+ const userHome = await this.pathService.userHome();
285
+ if (token.isCancellationRequested) {
286
+ return;
287
+ }
288
+ for (const workspaceRoot of workspaceRoots) {
289
+ if (watchWorkspaceRoots) {
290
+ addWatch(workspaceRoot);
291
+ }
292
+ if (watchClaudeFolders) {
293
+ addWatch(joinPath(workspaceRoot, CLAUDE_CONFIG_FOLDER));
294
+ }
295
+ if (watchCopilotFolders) {
296
+ addWatch(joinPath(workspaceRoot, GITHUB_CONFIG_FOLDER));
297
+ }
298
+ }
299
+ if (watchClaudeFolders) {
300
+ addWatch(joinPath(userHome, CLAUDE_CONFIG_FOLDER));
301
+ }
302
+ if (watchCopilotFolders) {
303
+ addWatch(joinPath(userHome, COPILOT_CONFIG_FOLDER));
304
+ }
305
+ };
306
+ const refresh = () => {
307
+ void updateWatchers();
308
+ eventEmitter.fire();
309
+ };
310
+ disposables.add(this.configService.onDidChangeConfiguration(e => {
311
+ if (e.affectsConfiguration(PromptsConfig.USE_AGENT_MD) || e.affectsConfiguration(PromptsConfig.USE_CLAUDE_MD) || e.affectsConfiguration(PromptsConfig.USE_COPILOT_INSTRUCTION_FILES) || e.affectsConfiguration(PromptsConfig.USE_CUSTOMIZATIONS_IN_PARENT_REPOS)) {
312
+ refresh();
313
+ }
314
+ }));
315
+ disposables.add(this.onDidChangeWorkspaceFolders()(() => {
316
+ refresh();
317
+ }));
318
+ disposables.add(this.workspaceTrustManagementService.onDidChangeTrustedFolders(() => {
319
+ refresh();
320
+ }));
321
+ disposables.add(this.fileService.onDidFilesChange(e => {
322
+ for (const watchedRoot of watchedRoots) {
323
+ if (e.affects(watchedRoot)) {
324
+ eventEmitter.fire();
325
+ return;
326
+ }
327
+ }
328
+ }));
329
+ disposables.add(this.fileService.onDidRunOperation(e => {
330
+ for (const watchedRoot of watchedRoots) {
331
+ if (isEqualOrParent(e.resource, watchedRoot)) {
332
+ eventEmitter.fire();
333
+ return;
334
+ }
335
+ if (e.isOperation(FileOperation.CREATE) || e.isOperation(FileOperation.MOVE) || e.isOperation(FileOperation.COPY)) {
336
+ if (isEqualOrParent(e.target.resource, watchedRoot)) {
337
+ eventEmitter.fire();
338
+ return;
339
+ }
340
+ }
341
+ }
342
+ }));
343
+ void updateWatchers();
344
+ return {
345
+ event: eventEmitter.event,
346
+ dispose: () => disposables.dispose()
347
+ };
348
+ }
349
+ async getHookSourceFolders() {
350
+ const configuredLocations = this.getPromptSourceFolders(PromptsType.hook);
351
+ const allowedHookFolders = configuredLocations.filter(loc => !loc.path.startsWith(".claude/") && !loc.path.includes("/.claude/"));
352
+ const absoluteLocations = await this.toAbsoluteLocations(PromptsType.hook, allowedHookFolders);
353
+ const seen = ( new ResourceSet());
354
+ const result = [];
355
+ for (const location of absoluteLocations) {
356
+ if (!( seen.has(location.searchRoot))) {
357
+ seen.add(location.searchRoot);
358
+ result.push({
359
+ ...location,
360
+ uri: location.searchRoot,
361
+ filePattern: undefined
362
+ });
363
+ }
364
+ }
365
+ return result;
366
+ }
367
+ async getConfigBasedSourceFolders(type) {
368
+ const configuredLocations = this.getPromptSourceFolders(type);
369
+ const absoluteLocations = await this.toAbsoluteLocations(type, configuredLocations);
370
+ if (type !== PromptsType.prompt && type !== PromptsType.instructions) {
371
+ return ( absoluteLocations.map(l => l.uri));
372
+ }
373
+ const result = ( new ResourceSet());
374
+ for (const absoluteLocation of absoluteLocations) {
375
+ let location = absoluteLocation.uri;
376
+ const baseName = basename(location);
377
+ const filePatterns = ["*.md", `*${getPromptFileExtension(type)}`];
378
+ for (const filePattern of filePatterns) {
379
+ if (baseName === filePattern) {
380
+ location = dirname(location);
381
+ continue;
382
+ }
383
+ }
384
+ if (baseName === "*") {
385
+ location = dirname(location);
386
+ }
387
+ if (isValidGlob(location.path) === true) {
388
+ continue;
389
+ }
390
+ result.add(location);
391
+ }
392
+ return [...result];
393
+ }
394
+ async getResolvedSourceFolders(type) {
395
+ const absoluteLocations = await this.getLocalStorageFolders(type);
396
+ const localFolders = absoluteLocations.filter(loc => loc.storage === PromptsStorage.local);
397
+ const userFolders = absoluteLocations.filter(loc => loc.storage === PromptsStorage.user);
398
+ return this.dedupeSourceFolders([...localFolders, ...userFolders]);
399
+ }
400
+ async getSourceFoldersInDiscoveryOrder(type) {
401
+ const absoluteLocations = await this.getLocalStorageFolders(type);
402
+ const userFolders = absoluteLocations.filter(loc => loc.storage === PromptsStorage.user);
403
+ const localFolders = absoluteLocations.filter(loc => loc.storage === PromptsStorage.local);
404
+ return this.dedupeSourceFolders([...userFolders, ...localFolders]);
405
+ }
406
+ async getLocalStorageFolders(type) {
407
+ const configuredLocations = this.getPromptSourceFolders(type);
408
+ const defaultFolders = this.getDefaultSourceFolders(type);
409
+ const isConfigured = PromptsConfig.getLocationsValue(this.configService, type) !== undefined;
410
+ const allFolders = isConfigured ? configuredLocations : defaultFolders;
411
+ const absoluteLocations = await this.toAbsoluteLocations(type, allFolders, defaultFolders);
412
+ if (type === PromptsType.agent || type === PromptsType.instructions || type === PromptsType.prompt) {
413
+ absoluteLocations.push(this.userDataFolder);
414
+ }
415
+ return absoluteLocations;
416
+ }
417
+ dedupeSourceFolders(folders) {
418
+ const seen = ( new ResourceSet());
419
+ const result = [];
420
+ for (const folder of folders) {
421
+ if (!( seen.has(folder.uri))) {
422
+ seen.add(folder.uri);
423
+ result.push(folder);
424
+ }
425
+ }
426
+ return result;
427
+ }
428
+ async toAbsoluteLocations(type, configuredLocations, defaultLocations, root) {
429
+ const result = [];
430
+ const seen = ( new ResourceSet());
431
+ const userHome = await this.pathService.userHome();
432
+ const rootFolders = await this.getWorkspaceFolderRoots(
433
+ this.configService.getValue(PromptsConfig.USE_CUSTOMIZATIONS_IN_PARENT_REPOS) === true,
434
+ undefined,
435
+ root
436
+ );
437
+ const defaultPaths = ( new Set(defaultLocations?.map(loc => loc.path)));
438
+ const validLocations = configuredLocations.filter(sourceFolder => {
439
+ if (type === PromptsType.instructions || type === PromptsType.prompt) {
440
+ const path = sourceFolder.path;
441
+ if (hasGlobPattern(path)) {
442
+ if (type === PromptsType.prompt) {
443
+ this.logService.warn(
444
+ `[Deprecated] Glob patterns (* and **) in prompt file locations are deprecated: "${path}". Consider using explicit paths instead.`
445
+ );
446
+ } else if (type === PromptsType.instructions) {
447
+ this.logService.info(
448
+ `Glob patterns (* and **) detected in instruction file location: "${path}". Consider using explicit paths for better performance.`
449
+ );
450
+ }
451
+ }
452
+ return true;
453
+ }
454
+ const configuredLocation = sourceFolder.path;
455
+ if (!isValidPromptFolderPath(configuredLocation)) {
456
+ this.logService.warn(
457
+ `Skipping invalid path (glob patterns and absolute paths not supported): ${configuredLocation}`
458
+ );
459
+ return false;
460
+ }
461
+ return true;
462
+ });
463
+ for (const sourceFolder of validLocations) {
464
+ const configuredLocation = sourceFolder.path;
465
+ const isDefault = defaultPaths?.has(configuredLocation);
466
+ try {
467
+ if (isTildePath(configuredLocation)) {
468
+ const uri = joinPath(userHome, configuredLocation.substring(2));
469
+ if (!( seen.has(uri))) {
470
+ seen.add(uri);
471
+ const {
472
+ searchRoot,
473
+ filePattern
474
+ } = resolveSearchLocation(type, uri);
475
+ result.push({
476
+ uri,
477
+ searchRoot: searchRoot,
478
+ filePattern,
479
+ source: sourceFolder.source,
480
+ storage: sourceFolder.storage,
481
+ displayPath: configuredLocation,
482
+ isDefault
483
+ });
484
+ }
485
+ continue;
486
+ }
487
+ if (isAbsolute(configuredLocation)) {
488
+ let uri = URI.file(configuredLocation);
489
+ const remoteAuthority = this.environmentService.remoteAuthority;
490
+ if (remoteAuthority) {
491
+ uri = uri.with({
492
+ scheme: Schemas.vscodeRemote,
493
+ authority: remoteAuthority
494
+ });
495
+ }
496
+ if (!( seen.has(uri))) {
497
+ seen.add(uri);
498
+ const {
499
+ searchRoot,
500
+ filePattern
501
+ } = resolveSearchLocation(type, uri);
502
+ result.push({
503
+ uri,
504
+ searchRoot: searchRoot,
505
+ filePattern,
506
+ source: sourceFolder.source,
507
+ storage: sourceFolder.storage,
508
+ displayPath: configuredLocation,
509
+ isDefault
510
+ });
511
+ }
512
+ } else {
513
+ for (const folder of rootFolders) {
514
+ const absolutePath = joinPath(folder, configuredLocation);
515
+ if (!( seen.has(absolutePath))) {
516
+ seen.add(absolutePath);
517
+ const {
518
+ searchRoot,
519
+ filePattern
520
+ } = resolveSearchLocation(type, absolutePath);
521
+ result.push({
522
+ uri: absolutePath,
523
+ searchRoot: searchRoot,
524
+ filePattern,
525
+ source: sourceFolder.source,
526
+ storage: sourceFolder.storage,
527
+ displayPath: configuredLocation,
528
+ isDefault
529
+ });
530
+ }
531
+ }
532
+ }
533
+ } catch (error) {
534
+ this.logService.error(`Failed to resolve prompt file location: ${configuredLocation}`, error);
535
+ }
536
+ }
537
+ return result;
538
+ }
539
+ async resolveFilesAtLocation(location, type, token, depth = 0, root) {
540
+ if (type === PromptsType.skill) {
541
+ return this.findAgentSkillsInFolder(location, token);
542
+ }
543
+ const isWorkspaceRoot = depth === 0 && (root ? isEqual(root, location) : ( this.getWorkspaceFolders().some(f => isEqual(f.uri, location))));
544
+ const recursive = type === PromptsType.instructions && !isWorkspaceRoot && !hasGlobPattern(location.path) && depth < MAX_INSTRUCTIONS_RECURSION_DEPTH;
545
+ try {
546
+ const info = await this.fileService.resolve(location);
547
+ if (token.isCancellationRequested) {
548
+ return [];
549
+ }
550
+ if (info.isFile) {
551
+ return [info.resource];
552
+ } else if (info.isDirectory && info.children) {
553
+ const result = [];
554
+ for (const child of info.children) {
555
+ if (child.isFile) {
556
+ result.push(child.resource);
557
+ } else if (recursive && child.isDirectory) {
558
+ const subFiles = await this.resolveFilesAtLocation(child.resource, type, token, depth + 1, root);
559
+ result.push(...subFiles);
560
+ }
561
+ }
562
+ return result;
563
+ }
564
+ } catch (e) {
565
+ if (e instanceof FileOperationError && e.fileOperationResult === FileOperationResult.FILE_NOT_FOUND)
566
+ ; else {
567
+ this.logService.error(`Failed to resolve files at location: ${( location.toString())}`, e);
568
+ }
569
+ }
570
+ return [];
571
+ }
572
+ async searchFilesInLocation(folder, filePattern, token) {
573
+ if (!this.searchService.schemeHasFileSearchProvider(folder.scheme)) {
574
+ this.logService.warn(
575
+ `[PromptFilesLocator] No FileSearchProvider available for scheme '${folder.scheme}'. Cannot search for pattern '${filePattern}' in ${( folder.toString())}`
576
+ );
577
+ return [];
578
+ }
579
+ const disregardIgnoreFiles = this.configService.getValue("explorer.excludeGitIgnore");
580
+ const workspaceRoot = this.getWorkspaceFolder(folder);
581
+ const getExcludePattern = folder => getExcludes(this.configService.getValue({
582
+ resource: folder
583
+ })) || {};
584
+ const searchOptions = {
585
+ folderQueries: [{
586
+ folder,
587
+ disregardIgnoreFiles
588
+ }],
589
+ type: QueryType.File,
590
+ shouldGlobMatchFilePattern: true,
591
+ excludePattern: workspaceRoot ? getExcludePattern(workspaceRoot.uri) : undefined,
592
+ ignoreGlobCase: true,
593
+ sortByScore: true,
594
+ filePattern
595
+ };
596
+ try {
597
+ const searchResult = await this.searchService.fileSearch(searchOptions, token);
598
+ if (token.isCancellationRequested) {
599
+ return [];
600
+ }
601
+ return ( searchResult.results.map(r => r.resource));
602
+ } catch (e) {
603
+ if (!isCancellationError(e)) {
604
+ throw e;
605
+ }
606
+ }
607
+ return [];
608
+ }
609
+ async findAgentMDsInWorkspace(token) {
610
+ const result = await Promise.all(( this.getWorkspaceFolders().map(folder => this.findAgentMDsInFolder(folder.uri, token))));
611
+ return result.flat(1);
612
+ }
613
+ async findAgentMDsInFolder(folder, token) {
614
+ if (this.searchService.schemeHasFileSearchProvider(folder.scheme)) {
615
+ const disregardIgnoreFiles = this.configService.getValue("explorer.excludeGitIgnore");
616
+ const getExcludePattern = folder => getExcludes(this.configService.getValue({
617
+ resource: folder
618
+ })) || {};
619
+ const searchOptions = {
620
+ folderQueries: [{
621
+ folder,
622
+ disregardIgnoreFiles
623
+ }],
624
+ type: QueryType.File,
625
+ shouldGlobMatchFilePattern: true,
626
+ excludePattern: getExcludePattern(folder),
627
+ filePattern: "**/AGENTS.md",
628
+ ignoreGlobCase: true
629
+ };
630
+ try {
631
+ const searchResult = await this.searchService.fileSearch(searchOptions, token);
632
+ if (token.isCancellationRequested) {
633
+ return [];
634
+ }
635
+ const results = [];
636
+ for (const r of searchResult.results) {
637
+ const realPath = undefined;
638
+ results.push({
639
+ uri: r.resource,
640
+ realPath,
641
+ type: AgentInstructionFileType.agentsMd
642
+ });
643
+ }
644
+ return results;
645
+ } catch (e) {
646
+ if (!isCancellationError(e)) {
647
+ throw e;
648
+ }
649
+ }
650
+ return [];
651
+ } else {
652
+ return this.findAgentMDsUsingFileService(folder, token);
653
+ }
654
+ }
655
+ async findAgentMDsUsingFileService(folder, token) {
656
+ const result = [];
657
+ const agentsMdFileName = "agents.md";
658
+ const traverse = async uri => {
659
+ if (token.isCancellationRequested) {
660
+ return;
661
+ }
662
+ try {
663
+ const stat = await this.fileService.resolve(uri);
664
+ if (stat.isFile && stat.name.toLowerCase() === agentsMdFileName) {
665
+ const realPath = stat.isSymbolicLink ? await this.fileService.realpath(stat.resource) : undefined;
666
+ result.push({
667
+ uri: stat.resource,
668
+ realPath,
669
+ type: AgentInstructionFileType.agentsMd
670
+ });
671
+ } else if (stat.isDirectory && stat.children) {
672
+ for (const child of stat.children) {
673
+ await traverse(child.resource);
674
+ }
675
+ }
676
+ } catch (error) {
677
+ this.logService.trace(`[PromptFilesLocator] Error traversing ${( uri.toString())}: ${error}`);
678
+ }
679
+ };
680
+ await traverse(folder);
681
+ return result;
682
+ }
683
+ async findFilesInRoots(roots, folder, paths, token, result = []) {
684
+ const toResolve = ( roots.map(root => ({
685
+ resource: folder !== undefined ? joinPath(root, folder) : root
686
+ })));
687
+ const resolvedRoots = await this.fileService.resolveAll(toResolve);
688
+ if (token.isCancellationRequested) {
689
+ return result;
690
+ }
691
+ for (const root of resolvedRoots) {
692
+ if (root.success && root.stat?.children) {
693
+ for (const child of root.stat.children) {
694
+ if (child.isFile) {
695
+ const matchingPath = paths.find(p => equalsIgnoreCase(p.fileName, child.name));
696
+ if (matchingPath) {
697
+ const realPath = child.isSymbolicLink ? await this.fileService.realpath(child.resource) : undefined;
698
+ result.push({
699
+ uri: child.resource,
700
+ realPath,
701
+ type: matchingPath.type
702
+ });
703
+ }
704
+ }
705
+ }
706
+ }
707
+ }
708
+ return result;
709
+ }
710
+ getAgentFileURIFromModeFile(oldURI) {
711
+ if (oldURI.path.endsWith(LEGACY_MODE_FILE_EXTENSION)) {
712
+ let newLocation;
713
+ const workspaceFolder = this.getWorkspaceFolder(oldURI);
714
+ if (workspaceFolder) {
715
+ newLocation = joinPath(
716
+ workspaceFolder.uri,
717
+ AGENTS_SOURCE_FOLDER,
718
+ getCleanPromptName(oldURI) + AGENT_FILE_EXTENSION
719
+ );
720
+ } else if (isEqualOrParent(oldURI, this.userDataService.currentProfile.promptsHome)) {
721
+ newLocation = joinPath(
722
+ this.userDataService.currentProfile.promptsHome,
723
+ getCleanPromptName(oldURI) + AGENT_FILE_EXTENSION
724
+ );
725
+ }
726
+ return newLocation;
727
+ }
728
+ return undefined;
729
+ }
730
+ async findAgentSkillsInFolder(uri, token) {
731
+ try {
732
+ const result = [];
733
+ const stat = await this.fileService.resolve(uri);
734
+ if (stat.isDirectory && stat.children) {
735
+ for (const child of stat.children) {
736
+ try {
737
+ if (token.isCancellationRequested) {
738
+ return [];
739
+ }
740
+ if (child.isDirectory) {
741
+ const skillFile = joinPath(child.resource, SKILL_FILENAME);
742
+ const skillStat = await this.fileService.resolve(skillFile);
743
+ if (skillStat.isFile) {
744
+ result.push(skillStat.resource);
745
+ }
746
+ }
747
+ } catch (error) {}
748
+ }
749
+ }
750
+ return result;
751
+ } catch (e) {
752
+ if (!isCancellationError(e)) {
753
+ this.logService.trace(`[PromptFilesLocator] Error searching for skills in ${( uri.toString())}: ${e}`);
754
+ }
755
+ return [];
756
+ }
757
+ }
758
+ async findAgentSkills(token) {
759
+ const configuredLocations = this.getPromptSourceFolders(PromptsType.skill);
760
+ const absoluteLocations = await this.toAbsoluteLocations(PromptsType.skill, configuredLocations);
761
+ const allResults = [];
762
+ for (const {
763
+ uri,
764
+ source,
765
+ storage
766
+ } of absoluteLocations) {
767
+ if (token.isCancellationRequested) {
768
+ return [];
769
+ }
770
+ const results = await this.findAgentSkillsInFolder(uri, token);
771
+ for (const skillUri of results) {
772
+ allResults.push({
773
+ uri: skillUri,
774
+ source,
775
+ storage,
776
+ type: PromptsType.skill
777
+ });
778
+ }
779
+ }
780
+ return allResults;
781
+ }
782
+ };
783
+ PromptFilesLocator = ( __decorate([( __param(0, IFileService)), ( __param(1, IConfigurationService)), ( __param(2, IWorkspaceContextService)), ( __param(3, IWorkbenchEnvironmentService)), ( __param(4, ISearchService)), ( __param(5, IUserDataProfileService)), ( __param(6, ILogService)), ( __param(7, IPathService)), ( __param(8, IWorkspaceTrustManagementService))], PromptFilesLocator));
784
+ function hasGlobPattern(path) {
785
+ return path.includes("*");
786
+ }
787
+ function isValidGlob(pattern) {
788
+ let squareBrackets = false;
789
+ let squareBracketsCount = 0;
790
+ let curlyBrackets = false;
791
+ let curlyBracketsCount = 0;
792
+ let previousCharacter;
793
+ for (const char of pattern) {
794
+ if (previousCharacter === "\\") {
795
+ previousCharacter = char;
796
+ continue;
797
+ }
798
+ if (char === "*") {
799
+ return true;
800
+ }
801
+ if (char === "?") {
802
+ return true;
803
+ }
804
+ if (char === "[") {
805
+ squareBrackets = true;
806
+ squareBracketsCount++;
807
+ previousCharacter = char;
808
+ continue;
809
+ }
810
+ if (char === "]") {
811
+ squareBrackets = true;
812
+ squareBracketsCount--;
813
+ previousCharacter = char;
814
+ continue;
815
+ }
816
+ if (char === "{") {
817
+ curlyBrackets = true;
818
+ curlyBracketsCount++;
819
+ continue;
820
+ }
821
+ if (char === "}") {
822
+ curlyBrackets = true;
823
+ curlyBracketsCount--;
824
+ previousCharacter = char;
825
+ continue;
826
+ }
827
+ previousCharacter = char;
828
+ }
829
+ if (squareBrackets && (squareBracketsCount === 0)) {
830
+ return true;
831
+ }
832
+ if (curlyBrackets && (curlyBracketsCount === 0)) {
833
+ return true;
834
+ }
835
+ return false;
836
+ }
837
+ function resolveSearchLocation(type, location) {
838
+ if (type !== PromptsType.instructions && type !== PromptsType.prompt) {
839
+ return {
840
+ searchRoot: location
841
+ };
842
+ }
843
+ const segments = location.path.split("/");
844
+ let i = 0;
845
+ while (i < segments.length && isValidGlob(segments[i]) === false) {
846
+ i++;
847
+ }
848
+ if (i === segments.length) {
849
+ return {
850
+ searchRoot: location
851
+ };
852
+ }
853
+ const parent = location.with({
854
+ path: segments.slice(0, i).join("/")
855
+ });
856
+ if (i === segments.length - 1 && segments[i] === "*" || segments[i] === ``) {
857
+ return {
858
+ searchRoot: parent
859
+ };
860
+ }
861
+ return {
862
+ searchRoot: parent,
863
+ filePattern: segments.slice(i).join("/")
864
+ };
865
+ }
866
+ const VALID_PROMPT_FOLDER_PATTERN = "^(?![A-Za-z]:[\\\\/])(?!/)(?!~(?!/))(?!.*\\\\)(?!.*[*?\\[\\]{}]).*\\S.*$";
867
+ const VALID_PROMPT_FOLDER_REGEX = ( new RegExp(VALID_PROMPT_FOLDER_PATTERN));
868
+ function isValidPromptFolderPath(path) {
869
+ return VALID_PROMPT_FOLDER_REGEX.test(path);
870
+ }
871
+
872
+ export { PromptFilesLocator, VALID_PROMPT_FOLDER_PATTERN, hasGlobPattern, isValidGlob, isValidPromptFolderPath };