@codingame/monaco-vscode-chat-service-override 19.1.4 → 20.0.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.
- package/index.js +20 -8
- package/package.json +36 -31
- package/vscode/src/vs/base/common/policy.d.ts +14 -0
- package/vscode/src/vs/base/common/policy.js +11 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +53 -43
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +54 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +15 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +37 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +23 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +83 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +421 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +20 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +215 -104
- package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.js +9 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.js +18 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownAnchorService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +20 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +6 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +9 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +11 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +5 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +16 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +7 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +58 -326
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +33 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +12 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +39 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.d.ts +55 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.js +380 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +3 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +22 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +9 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +44 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +38 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +145 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +34 -34
- package/vscode/src/vs/workbench/contrib/chat/browser/chatPasteProviders.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +36 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.d.ts +49 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.js +407 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.js +738 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +142 -151
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.js +54 -54
- package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +4 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +5 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockContextProviderService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +23 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +13 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-dark.svg +3 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-light.svg +3 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSessions.css +28 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSetup.css +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.js +19 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.d.ts +1 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.js +52 -90
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +15 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +6 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.js +9 -6
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +11 -6
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +137 -30
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.js +8 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.d.ts +27 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.js +44 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/config/configMigration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/filePromptContentsProvider.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/promptContentsProviderBase.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/promptContentsProviderBase.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.js +3 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkDiagnosticsProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptPathAutocompletion.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/providerInstanceManagerBase.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/headerBase.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/instructionsHeader.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/applyTo.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/enum.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/string.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/modeHeader.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/topError.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +27 -27
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +2 -2
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +9 -9
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +4 -4
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +104 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +667 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +14 -14
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +2 -2
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +56 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.js +14 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +111 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +52 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +262 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.d.ts +35 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +129 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatControllerHolder.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatControllerHolder.js +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.d.ts +9 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +30 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.d.ts +72 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +411 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +59 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.d.ts +51 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.js +163 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.js +164 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +101 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +52 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +71 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +94 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.js +44 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +18 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +13 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.d.ts +55 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.js +603 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.js +113 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.d.ts +21 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.js +227 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.js +88 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.d.ts +21 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.js +140 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.js +80 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.js +40 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +36 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +20 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +114 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/media/google-mono-dark.svg +0 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/media/google-mono-light.svg +0 -3
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js
CHANGED
|
@@ -13,8 +13,8 @@ import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/l
|
|
|
13
13
|
import { IOpenerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service';
|
|
14
14
|
import { IDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
15
15
|
import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
|
|
16
|
-
import { getCleanPromptName } from '@codingame/monaco-vscode-
|
|
17
|
-
import { PROMPT_DOCUMENTATION_URL, INSTRUCTIONS_DOCUMENTATION_URL, MODE_DOCUMENTATION_URL, PromptsType } from '@codingame/monaco-vscode-
|
|
16
|
+
import { getCleanPromptName } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
17
|
+
import { PROMPT_DOCUMENTATION_URL, INSTRUCTIONS_DOCUMENTATION_URL, MODE_DOCUMENTATION_URL, PromptsType } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
18
18
|
import { NEW_PROMPT_COMMAND_ID, NEW_INSTRUCTIONS_COMMAND_ID, NEW_MODE_COMMAND_ID } from '../newPromptFileActions.js';
|
|
19
19
|
import { IQuickInputService } from '@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service';
|
|
20
20
|
import { askForPromptFileName } from './askForPromptName.js';
|
|
@@ -25,12 +25,12 @@ import { OS } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform'
|
|
|
25
25
|
import { askForPromptSourceFolder } from './askForPromptSourceFolder.js';
|
|
26
26
|
|
|
27
27
|
const HELP_BUTTON = ( Object.freeze({
|
|
28
|
-
tooltip: ( localize(
|
|
28
|
+
tooltip: ( localize(5286, "Help")),
|
|
29
29
|
iconClass: ThemeIcon.asClassName(Codicon.question),
|
|
30
30
|
}));
|
|
31
31
|
const NEW_PROMPT_FILE_OPTION = ( Object.freeze({
|
|
32
32
|
type: 'item',
|
|
33
|
-
label: `$(plus) ${( localize(
|
|
33
|
+
label: `$(plus) ${( localize(5287, 'New prompt file...'))}`,
|
|
34
34
|
value: ( URI.parse(PROMPT_DOCUMENTATION_URL)),
|
|
35
35
|
pickable: false,
|
|
36
36
|
alwaysShow: true,
|
|
@@ -39,7 +39,7 @@ const NEW_PROMPT_FILE_OPTION = ( Object.freeze({
|
|
|
39
39
|
}));
|
|
40
40
|
const NEW_INSTRUCTIONS_FILE_OPTION = ( Object.freeze({
|
|
41
41
|
type: 'item',
|
|
42
|
-
label: `$(plus) ${( localize(
|
|
42
|
+
label: `$(plus) ${( localize(5288, 'New instruction file...'))}`,
|
|
43
43
|
value: ( URI.parse(INSTRUCTIONS_DOCUMENTATION_URL)),
|
|
44
44
|
pickable: false,
|
|
45
45
|
alwaysShow: true,
|
|
@@ -48,7 +48,7 @@ const NEW_INSTRUCTIONS_FILE_OPTION = ( Object.freeze({
|
|
|
48
48
|
}));
|
|
49
49
|
const UPDATE_INSTRUCTIONS_OPTION = ( Object.freeze({
|
|
50
50
|
type: 'item',
|
|
51
|
-
label: `$(refresh) ${( localize(
|
|
51
|
+
label: `$(refresh) ${( localize(5289, 'Generate instructions...'))}`,
|
|
52
52
|
value: ( URI.parse(INSTRUCTIONS_DOCUMENTATION_URL)),
|
|
53
53
|
pickable: false,
|
|
54
54
|
alwaysShow: true,
|
|
@@ -57,7 +57,7 @@ const UPDATE_INSTRUCTIONS_OPTION = ( Object.freeze({
|
|
|
57
57
|
}));
|
|
58
58
|
const NEW_MODE_FILE_OPTION = ( Object.freeze({
|
|
59
59
|
type: 'item',
|
|
60
|
-
label: `$(plus) ${( localize(
|
|
60
|
+
label: `$(plus) ${( localize(5290, 'Create new custom chat mode file...'))}`,
|
|
61
61
|
value: ( URI.parse(MODE_DOCUMENTATION_URL)),
|
|
62
62
|
pickable: false,
|
|
63
63
|
alwaysShow: true,
|
|
@@ -65,20 +65,20 @@ const NEW_MODE_FILE_OPTION = ( Object.freeze({
|
|
|
65
65
|
commandId: NEW_MODE_COMMAND_ID,
|
|
66
66
|
}));
|
|
67
67
|
const EDIT_BUTTON = ( Object.freeze({
|
|
68
|
-
tooltip: ( localize(
|
|
68
|
+
tooltip: ( localize(5291, "Open in Editor")),
|
|
69
69
|
iconClass: ThemeIcon.asClassName(Codicon.edit),
|
|
70
70
|
}));
|
|
71
71
|
const DELETE_BUTTON = ( Object.freeze({
|
|
72
|
-
tooltip: ( localize(
|
|
72
|
+
tooltip: ( localize(5292, "Delete")),
|
|
73
73
|
iconClass: ThemeIcon.asClassName(Codicon.trash),
|
|
74
74
|
}));
|
|
75
75
|
const RENAME_BUTTON = ( Object.freeze({
|
|
76
|
-
tooltip: ( localize(
|
|
76
|
+
tooltip: ( localize(5293, "Rename")),
|
|
77
77
|
iconClass: ThemeIcon.asClassName(Codicon.replace),
|
|
78
78
|
}));
|
|
79
79
|
const COPY_BUTTON = ( Object.freeze({
|
|
80
80
|
tooltip: ( localize(
|
|
81
|
-
|
|
81
|
+
5294,
|
|
82
82
|
"Copy or Move (press {0})",
|
|
83
83
|
UILabelProvider.modifierLabels[OS].ctrlKey
|
|
84
84
|
)),
|
|
@@ -98,7 +98,7 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
98
98
|
async selectPromptFile(options) {
|
|
99
99
|
const quickPick = this._quickInputService.createQuickPick();
|
|
100
100
|
quickPick.busy = true;
|
|
101
|
-
quickPick.placeholder = ( localize(
|
|
101
|
+
quickPick.placeholder = ( localize(5295, 'Searching file system...'));
|
|
102
102
|
try {
|
|
103
103
|
const fileOptions = await this._createPromptPickItems(options);
|
|
104
104
|
const activeItem = options.resource && fileOptions.find(f => extUri.isEqual(f.value, options.resource));
|
|
@@ -208,7 +208,7 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
208
208
|
const { uri, storage } = promptFile;
|
|
209
209
|
const fileWithoutExtension = getCleanPromptName(uri);
|
|
210
210
|
const description = (storage === 'user')
|
|
211
|
-
? ( localize(
|
|
211
|
+
? ( localize(5296, 'User data folder'))
|
|
212
212
|
: this._labelService.getUriLabel(dirname(uri), { relative: true });
|
|
213
213
|
const tooltip = (storage === 'user')
|
|
214
214
|
? description
|
|
@@ -279,7 +279,7 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
279
279
|
await this.keepQuickPickOpen(quickPick, async () => {
|
|
280
280
|
const filename = getCleanPromptName(value);
|
|
281
281
|
const { confirmed } = await this._dialogService.confirm({
|
|
282
|
-
message: ( localize(
|
|
282
|
+
message: ( localize(5297, "Are you sure you want to delete '{0}'?", filename)),
|
|
283
283
|
});
|
|
284
284
|
if (!confirmed) {
|
|
285
285
|
return;
|
|
@@ -3,7 +3,7 @@ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib
|
|
|
3
3
|
import { Disposable, DisposableMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
4
4
|
import { registerEditorContribution, EditorContributionInstantiation } from '@codingame/monaco-vscode-api/vscode/vs/editor/browser/editorExtensions';
|
|
5
5
|
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
6
|
-
import { PROMPT_LANGUAGE_ID } from '@codingame/monaco-vscode-
|
|
6
|
+
import { PROMPT_LANGUAGE_ID } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
7
7
|
import { PromptCodingAgentActionOverlayWidget } from './promptCodingAgentActionOverlay.js';
|
|
8
8
|
|
|
9
9
|
let PromptCodingAgentActionContribution = class PromptCodingAgentActionContribution extends Disposable {
|
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js
CHANGED
|
@@ -9,7 +9,7 @@ import { IRemoteCodingAgentsService } from '@codingame/monaco-vscode-api/vscode/
|
|
|
9
9
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
10
10
|
import { Button } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/button/button';
|
|
11
11
|
import { getPromptCommandName } from '../../common/promptSyntax/service/promptsServiceImpl.js';
|
|
12
|
-
import { PROMPT_LANGUAGE_ID } from '@codingame/monaco-vscode-
|
|
12
|
+
import { PROMPT_LANGUAGE_ID } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
13
13
|
import { $ } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
|
|
14
14
|
|
|
15
15
|
var PromptCodingAgentActionOverlayWidget_1;
|
|
@@ -26,11 +26,11 @@ let PromptCodingAgentActionOverlayWidget = class PromptCodingAgentActionOverlayW
|
|
|
26
26
|
this._domNode = $('.prompt-coding-agent-action-overlay');
|
|
27
27
|
this._button = this._register(( new Button(this._domNode, {
|
|
28
28
|
supportIcons: true,
|
|
29
|
-
title: ( localize(
|
|
29
|
+
title: ( localize(5298, "Run prompt file in a remote coding agent"))
|
|
30
30
|
})));
|
|
31
31
|
this._button.element.style.background = 'var(--vscode-button-background)';
|
|
32
32
|
this._button.element.style.color = 'var(--vscode-button-foreground)';
|
|
33
|
-
this._button.label = ( localize(
|
|
33
|
+
this._button.label = ( localize(5299, "{0} Delegate to Copilot coding agent", '$(cloud-upload)'));
|
|
34
34
|
this._register(this._button.onDidClick(async () => {
|
|
35
35
|
await this._execute();
|
|
36
36
|
}));
|
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js
CHANGED
|
@@ -9,11 +9,11 @@ import { CommandsRegistry } from '@codingame/monaco-vscode-api/vscode/vs/platfor
|
|
|
9
9
|
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
10
10
|
import { showToolsPicker } from '../actions/chatToolPicker.js';
|
|
11
11
|
import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
|
|
12
|
-
import { ALL_PROMPTS_LANGUAGE_SELECTOR } from '@codingame/monaco-vscode-
|
|
12
|
+
import { ALL_PROMPTS_LANGUAGE_SELECTOR } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
13
13
|
import { PromptToolsMetadata } from '../../common/promptSyntax/parsers/promptHeader/metadata/tools.js';
|
|
14
14
|
import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service';
|
|
15
15
|
import { registerEditorFeature } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/editorFeatures';
|
|
16
|
-
import { PromptFileRewriter } from '@codingame/monaco-vscode-
|
|
16
|
+
import { PromptFileRewriter } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/browser/promptSyntax/promptFileRewriter';
|
|
17
17
|
|
|
18
18
|
let PromptToolsCodeLensProvider = class PromptToolsCodeLensProvider extends Disposable {
|
|
19
19
|
constructor(promptsService, languageService, languageModelToolsService, instantiationService) {
|
|
@@ -52,7 +52,7 @@ let PromptToolsCodeLensProvider = class PromptToolsCodeLensProvider extends Disp
|
|
|
52
52
|
const codeLens = {
|
|
53
53
|
range: tools.range.collapseToStart(),
|
|
54
54
|
command: {
|
|
55
|
-
title: ( localize(
|
|
55
|
+
title: ( localize(5300, "Configure Tools...")),
|
|
56
56
|
id: this.cmdId,
|
|
57
57
|
arguments: [model, tools]
|
|
58
58
|
}
|
|
@@ -61,7 +61,7 @@ let PromptToolsCodeLensProvider = class PromptToolsCodeLensProvider extends Disp
|
|
|
61
61
|
}
|
|
62
62
|
async updateTools(model, tools) {
|
|
63
63
|
const selectedToolsNow = tools.value ? this.languageModelToolsService.toToolAndToolSetEnablementMap(tools.value) : ( new Map());
|
|
64
|
-
const newSelectedAfter = await this.instantiationService.invokeFunction(showToolsPicker, ( localize(
|
|
64
|
+
const newSelectedAfter = await this.instantiationService.invokeFunction(showToolsPicker, ( localize(5301, "Select tools")), undefined, selectedToolsNow);
|
|
65
65
|
if (!newSelectedAfter) {
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
@@ -12,8 +12,8 @@ import { IRequestService } from '@codingame/monaco-vscode-api/vscode/vs/platform
|
|
|
12
12
|
import { IURLService } from '@codingame/monaco-vscode-api/vscode/vs/platform/url/common/url.service';
|
|
13
13
|
import { askForPromptFileName } from './pickers/askForPromptName.js';
|
|
14
14
|
import { askForPromptSourceFolder } from './pickers/askForPromptSourceFolder.js';
|
|
15
|
-
import { getCleanPromptName } from '@codingame/monaco-vscode-
|
|
16
|
-
import { PromptsType } from '@codingame/monaco-vscode-
|
|
15
|
+
import { getCleanPromptName } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
16
|
+
import { PromptsType } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
17
17
|
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
18
18
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
19
19
|
import { IDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
@@ -69,7 +69,7 @@ let PromptUrlHandler = class PromptUrlHandler extends Disposable {
|
|
|
69
69
|
const result = await this.requestService.request({ type: 'GET', url: urlString }, CancellationToken.None);
|
|
70
70
|
if (result.res.statusCode !== 200) {
|
|
71
71
|
this.logService.error(`[PromptUrlHandler] Failed to fetch URL: ${urlString}`);
|
|
72
|
-
this.notificationService.error(( localize(
|
|
72
|
+
this.notificationService.error(( localize(5302, 'Failed to fetch URL: {0}', urlString)));
|
|
73
73
|
return true;
|
|
74
74
|
}
|
|
75
75
|
const responseData = ( (await streamToBuffer(result.stream)).toString());
|
|
@@ -98,36 +98,36 @@ let PromptUrlHandler = class PromptUrlHandler extends Disposable {
|
|
|
98
98
|
uriLabel = `${uriLabel.substring(0, 35)}...${uriLabel.substring(uriLabel.length - 15)}`;
|
|
99
99
|
}
|
|
100
100
|
const detail = ( new MarkdownString('', { supportHtml: true }));
|
|
101
|
-
detail.appendMarkdown(( localize(
|
|
101
|
+
detail.appendMarkdown(( localize(5303, "This will access {0}.\n\n", `[${uriLabel}](${( url.toString())})`)));
|
|
102
102
|
detail.appendMarkdown(( localize(
|
|
103
|
-
|
|
103
|
+
5304,
|
|
104
104
|
"If you did not initiate this request, it may represent an attempted attack on your system. Unless you took an explicit action to initiate this request, you should press 'No'"
|
|
105
105
|
)));
|
|
106
106
|
let message;
|
|
107
107
|
switch (promptType) {
|
|
108
108
|
case PromptsType.prompt:
|
|
109
109
|
message = ( localize(
|
|
110
|
-
|
|
110
|
+
5305,
|
|
111
111
|
"An external application wants to create a prompt file with content from a URL. Do you want to continue by selecting a destination folder and name?"
|
|
112
112
|
));
|
|
113
113
|
break;
|
|
114
114
|
case PromptsType.instructions:
|
|
115
115
|
message = ( localize(
|
|
116
|
-
|
|
116
|
+
5306,
|
|
117
117
|
"An external application wants to create an instructions file with content from a URL. Do you want to continue by selecting a destination folder and name?"
|
|
118
118
|
));
|
|
119
119
|
break;
|
|
120
120
|
default:
|
|
121
121
|
message = ( localize(
|
|
122
|
-
|
|
122
|
+
5307,
|
|
123
123
|
"An external application wants to create a chat mode with content from a URL. Do you want to continue by selecting a destination folder and name?"
|
|
124
124
|
));
|
|
125
125
|
break;
|
|
126
126
|
}
|
|
127
127
|
const { confirmed } = await this.dialogService.confirm({
|
|
128
128
|
type: 'warning',
|
|
129
|
-
primaryButton: ( localize(
|
|
130
|
-
cancelButton: ( localize(
|
|
129
|
+
primaryButton: ( localize(5308, "&&Yes")),
|
|
130
|
+
cancelButton: ( localize(5309, "No")),
|
|
131
131
|
message,
|
|
132
132
|
custom: {
|
|
133
133
|
markdownDetails: [{
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
|
|
2
|
-
import { showChatView, ChatViewId } from '@codingame/monaco-vscode-
|
|
3
|
-
import { CHAT_CATEGORY, ACTION_ID_NEW_CHAT, CHAT_CONFIG_MENU_ID } from '@codingame/monaco-vscode-
|
|
2
|
+
import { showChatView, ChatViewId } from '@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common/vscode/vs/workbench/contrib/chat/browser/chat';
|
|
3
|
+
import { CHAT_CATEGORY, ACTION_ID_NEW_CHAT, CHAT_CONFIG_MENU_ID } from '@codingame/monaco-vscode-c2deffc4-ad68-5e63-8f95-9b89e0fc6898-common/vscode/vs/workbench/contrib/chat/browser/actions/chatActions';
|
|
4
4
|
import { OS } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
|
|
5
5
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
6
6
|
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatContextKeys';
|
|
7
7
|
import { assertDefined } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
|
|
8
8
|
import { ResourceContextKey } from '@codingame/monaco-vscode-api/vscode/vs/workbench/common/contextkeys';
|
|
9
9
|
import { KeyMod, KeyCode } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keyCodes';
|
|
10
|
-
import { PROMPT_LANGUAGE_ID, PromptsType } from '@codingame/monaco-vscode-
|
|
10
|
+
import { PROMPT_LANGUAGE_ID, PromptsType } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
11
11
|
import { localize2, localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
12
12
|
import { UILabelProvider } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keybindingLabels';
|
|
13
|
-
import { PromptsConfig } from '@codingame/monaco-vscode-
|
|
13
|
+
import { PromptsConfig } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
|
|
14
14
|
import { IViewsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/views/common/viewsService.service';
|
|
15
15
|
import { PromptFilePickers } from './pickers/promptFilePickers.js';
|
|
16
16
|
import { EditorContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/editorContextKeys';
|
|
@@ -69,7 +69,7 @@ class RunPromptBaseAction extends Action2 {
|
|
|
69
69
|
return widget;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
const RUN_CURRENT_PROMPT_ACTION_TITLE = ( localize2(
|
|
72
|
+
const RUN_CURRENT_PROMPT_ACTION_TITLE = ( localize2(5310, "Run Prompt in Current Chat"));
|
|
73
73
|
const RUN_CURRENT_PROMPT_ACTION_ICON = Codicon.playCircle;
|
|
74
74
|
class RunCurrentPromptAction extends RunPromptBaseAction {
|
|
75
75
|
constructor() {
|
|
@@ -88,7 +88,7 @@ class RunSelectedPromptAction extends Action2 {
|
|
|
88
88
|
constructor() {
|
|
89
89
|
super({
|
|
90
90
|
id: RUN_SELECTED_PROMPT_ACTION_ID,
|
|
91
|
-
title: ( localize2(
|
|
91
|
+
title: ( localize2(5311, "Run Prompt...")),
|
|
92
92
|
icon: Codicon.bookmark,
|
|
93
93
|
f1: true,
|
|
94
94
|
precondition: ( ContextKeyExpr.and(PromptsConfig.enabledCtx, ChatContextKeys.enabled)),
|
|
@@ -106,7 +106,7 @@ class RunSelectedPromptAction extends Action2 {
|
|
|
106
106
|
const instaService = accessor.get(IInstantiationService);
|
|
107
107
|
const pickers = instaService.createInstance(PromptFilePickers);
|
|
108
108
|
const placeholder = ( localize(
|
|
109
|
-
|
|
109
|
+
5312,
|
|
110
110
|
'Select the prompt file to run (hold {0}-key to use in new chat)',
|
|
111
111
|
UILabelProvider.modifierLabels[OS].ctrlKey
|
|
112
112
|
));
|
|
@@ -130,8 +130,8 @@ class ManagePromptFilesAction extends Action2 {
|
|
|
130
130
|
constructor() {
|
|
131
131
|
super({
|
|
132
132
|
id: CONFIGURE_PROMPTS_ACTION_ID,
|
|
133
|
-
title: ( localize2(
|
|
134
|
-
shortTitle: ( localize2(
|
|
133
|
+
title: ( localize2(5313, "Configure Prompt Files...")),
|
|
134
|
+
shortTitle: ( localize2(5314, "Prompt Files")),
|
|
135
135
|
icon: Codicon.bookmark,
|
|
136
136
|
f1: true,
|
|
137
137
|
precondition: ( ContextKeyExpr.and(PromptsConfig.enabledCtx, ChatContextKeys.enabled)),
|
|
@@ -148,7 +148,7 @@ class ManagePromptFilesAction extends Action2 {
|
|
|
148
148
|
const openerService = accessor.get(IOpenerService);
|
|
149
149
|
const instaService = accessor.get(IInstantiationService);
|
|
150
150
|
const pickers = instaService.createInstance(PromptFilePickers);
|
|
151
|
-
const placeholder = ( localize(
|
|
151
|
+
const placeholder = ( localize(5315, 'Select the prompt file to open'));
|
|
152
152
|
const result = await pickers.selectPromptFile({ placeholder, type: PromptsType.prompt, optionEdit: false });
|
|
153
153
|
if (result !== undefined) {
|
|
154
154
|
await openerService.open(result.promptFile);
|
|
@@ -164,7 +164,7 @@ function getActivePromptFileUri(accessor) {
|
|
|
164
164
|
return undefined;
|
|
165
165
|
}
|
|
166
166
|
const RUN_CURRENT_PROMPT_IN_NEW_CHAT_ACTION_ID = 'workbench.action.chat.run-in-new-chat.prompt.current';
|
|
167
|
-
const RUN_IN_NEW_CHAT_ACTION_TITLE = ( localize2(
|
|
167
|
+
const RUN_IN_NEW_CHAT_ACTION_TITLE = ( localize2(5316, "Run Prompt In New Chat"));
|
|
168
168
|
const RUN_IN_NEW_CHAT_ACTION_ICON = Codicon.play;
|
|
169
169
|
class RunCurrentPromptInNewChatAction extends RunPromptBaseAction {
|
|
170
170
|
constructor() {
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
import { IChatWidget } from "@codingame/monaco-vscode-9911aec2-e4dd-5483-8369-9d695cc70d8a-common/vscode/vs/workbench/contrib/chat/browser/chat";
|
|
1
|
+
export declare const SAVE_TO_PROMPT_ACTION_ID = "workbench.action.chat.save-to-prompt";
|
|
3
2
|
export declare const SAVE_TO_PROMPT_SLASH_COMMAND_NAME = "save";
|
|
4
|
-
interface ISaveToPromptActionOptions {
|
|
5
|
-
chat: IChatWidget;
|
|
6
|
-
}
|
|
7
|
-
export declare function runSaveToPromptAction(options: ISaveToPromptActionOptions, commandService: ICommandService): Promise<any>;
|
|
8
3
|
export declare function registerSaveToPromptActions(): void;
|
|
9
|
-
export {};
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
|
|
2
|
-
import { assertDefined } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
|
|
3
2
|
import { localize2 } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
4
3
|
import { Action2, registerAction2 } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
|
|
5
4
|
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
5
|
+
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
6
6
|
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
7
|
-
import { PromptsConfig } from '@codingame/monaco-vscode-
|
|
7
|
+
import { PromptsConfig } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
|
|
8
8
|
import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
9
9
|
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatContextKeys';
|
|
10
|
-
import { chatSubcommandLeader } from '@codingame/monaco-vscode-
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { chatSubcommandLeader } from '@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common/vscode/vs/workbench/contrib/chat/common/chatParserTypes';
|
|
11
|
+
import { PROMPT_LANGUAGE_ID } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
12
|
+
import { CHAT_CATEGORY } from '@codingame/monaco-vscode-c2deffc4-ad68-5e63-8f95-9b89e0fc6898-common/vscode/vs/workbench/contrib/chat/browser/actions/chatActions';
|
|
13
|
+
import { ChatModeKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
14
|
+
import { PromptFileRewriter } from '@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/browser/promptSyntax/promptFileRewriter';
|
|
15
|
+
import { ILanguageModelChatMetadata } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
|
|
16
|
+
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
17
|
+
import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
|
|
14
18
|
|
|
15
19
|
const SAVE_TO_PROMPT_ACTION_ID = 'workbench.action.chat.save-to-prompt';
|
|
16
20
|
const SAVE_TO_PROMPT_SLASH_COMMAND_NAME = 'save';
|
|
@@ -18,7 +22,7 @@ class SaveToPromptAction extends Action2 {
|
|
|
18
22
|
constructor() {
|
|
19
23
|
super({
|
|
20
24
|
id: SAVE_TO_PROMPT_ACTION_ID,
|
|
21
|
-
title: ( localize2(
|
|
25
|
+
title: ( localize2(5317, "Save chat session to a prompt file")),
|
|
22
26
|
f1: false,
|
|
23
27
|
precondition: ( ContextKeyExpr.and(PromptsConfig.enabledCtx, ChatContextKeys.enabled)),
|
|
24
28
|
category: CHAT_CATEGORY,
|
|
@@ -27,49 +31,54 @@ class SaveToPromptAction extends Action2 {
|
|
|
27
31
|
async run(accessor, options) {
|
|
28
32
|
const logService = accessor.get(ILogService);
|
|
29
33
|
const editorService = accessor.get(IEditorService);
|
|
30
|
-
const
|
|
34
|
+
const rewriter = accessor.get(IInstantiationService).createInstance(PromptFileRewriter);
|
|
31
35
|
const logPrefix = 'save to prompt';
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
36
|
+
const chatWidget = options.chat;
|
|
37
|
+
const mode = chatWidget.input.currentModeObs.get();
|
|
38
|
+
const model = chatWidget.input.selectedLanguageModel;
|
|
39
|
+
const toolAndToolsetMap = chatWidget.input.selectedToolsModel.entriesMap.get();
|
|
40
|
+
const output = [];
|
|
41
|
+
output.push('---');
|
|
42
|
+
output.push(`description: New prompt created from chat session`);
|
|
43
|
+
output.push(`mode: ${mode.kind}`);
|
|
44
|
+
if (mode.kind === ChatModeKind.Agent) {
|
|
45
|
+
output.push(`tools: ${rewriter.getNewValueString(toolAndToolsetMap)}`);
|
|
46
|
+
}
|
|
47
|
+
if (model) {
|
|
48
|
+
output.push(`model: ${ILanguageModelChatMetadata.asQualifiedName(model.metadata)}`);
|
|
49
|
+
}
|
|
50
|
+
output.push('---');
|
|
51
|
+
const viewModel = chatWidget.viewModel;
|
|
52
|
+
if (viewModel) {
|
|
53
|
+
for (const request of viewModel.model.getRequests()) {
|
|
54
|
+
const { message, response: responseModel } = request;
|
|
55
|
+
if (isSaveToPromptSlashCommand(message)) {
|
|
50
56
|
continue;
|
|
51
57
|
}
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
if (responseModel === undefined) {
|
|
59
|
+
logService.warn(`[${logPrefix}]: skipping request '${request.id}' with no response`);
|
|
54
60
|
continue;
|
|
55
61
|
}
|
|
56
|
-
|
|
62
|
+
const { response } = responseModel;
|
|
63
|
+
output.push(`<user>`);
|
|
64
|
+
output.push(request.message.text);
|
|
65
|
+
output.push(`</user>`);
|
|
66
|
+
output.push();
|
|
67
|
+
output.push(`<assistant>`);
|
|
68
|
+
output.push(response.getMarkdown());
|
|
69
|
+
output.push(`</assistant>`);
|
|
70
|
+
output.push();
|
|
57
71
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
const promptText = output.join('\n');
|
|
73
|
+
const untitledPath = 'new.prompt.md';
|
|
74
|
+
const untitledResource = ( URI.from({ scheme: Schemas.untitled, path: untitledPath }));
|
|
75
|
+
const editor = await editorService.openEditor({
|
|
76
|
+
resource: untitledResource,
|
|
77
|
+
contents: promptText,
|
|
78
|
+
languageId: PROMPT_LANGUAGE_ID,
|
|
62
79
|
});
|
|
80
|
+
editor?.focus();
|
|
63
81
|
}
|
|
64
|
-
const promptText = renderPrompt(turns);
|
|
65
|
-
const editor = await editorService.openEditor({
|
|
66
|
-
resource: undefined,
|
|
67
|
-
contents: promptText,
|
|
68
|
-
languageId: PROMPT_LANGUAGE_ID,
|
|
69
|
-
});
|
|
70
|
-
assertDefined(editor, 'Failed to open untitled editor for the prompt.');
|
|
71
|
-
editor.focus();
|
|
72
|
-
return editor;
|
|
73
82
|
}
|
|
74
83
|
}
|
|
75
84
|
function isSaveToPromptSlashCommand(message) {
|
|
@@ -86,55 +95,8 @@ function isSaveToPromptSlashCommand(message) {
|
|
|
86
95
|
}
|
|
87
96
|
return true;
|
|
88
97
|
}
|
|
89
|
-
function renderResponse(response) {
|
|
90
|
-
const delimiter = (response.startsWith('```'))
|
|
91
|
-
? '\n>'
|
|
92
|
-
: ' ';
|
|
93
|
-
const quotedResponse = response.replaceAll('\n', '\n> ');
|
|
94
|
-
return `> Copilot:${delimiter}${quotedResponse}`;
|
|
95
|
-
}
|
|
96
|
-
function renderTurn(turn) {
|
|
97
|
-
const { request, response } = turn;
|
|
98
|
-
return `\n${request}\n\n${renderResponse(response)}`;
|
|
99
|
-
}
|
|
100
|
-
function renderPrompt(turns) {
|
|
101
|
-
const content = [];
|
|
102
|
-
const allTools = ( new Set());
|
|
103
|
-
for (const turn of turns) {
|
|
104
|
-
content.push(renderTurn(turn));
|
|
105
|
-
for (const tool of turn.tools) {
|
|
106
|
-
allTools.add(tool);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
const result = [];
|
|
110
|
-
if (allTools.size !== 0) {
|
|
111
|
-
result.push(renderHeader(allTools));
|
|
112
|
-
}
|
|
113
|
-
result.push(content.join('\n'));
|
|
114
|
-
result.push('');
|
|
115
|
-
return result.join('\n');
|
|
116
|
-
}
|
|
117
|
-
function renderTools(tools) {
|
|
118
|
-
const toolStrings = ( [...tools].map((tool) => {
|
|
119
|
-
return `'${tool}'`;
|
|
120
|
-
}));
|
|
121
|
-
return `tools: [${toolStrings.join(', ')}]`;
|
|
122
|
-
}
|
|
123
|
-
function renderHeader(tools) {
|
|
124
|
-
if (tools.size === 0) {
|
|
125
|
-
return '';
|
|
126
|
-
}
|
|
127
|
-
return [
|
|
128
|
-
'---',
|
|
129
|
-
renderTools(tools),
|
|
130
|
-
'---',
|
|
131
|
-
].join('\n');
|
|
132
|
-
}
|
|
133
|
-
function runSaveToPromptAction(options, commandService) {
|
|
134
|
-
return commandService.executeCommand(SAVE_TO_PROMPT_ACTION_ID, options);
|
|
135
|
-
}
|
|
136
98
|
function registerSaveToPromptActions() {
|
|
137
99
|
registerAction2(SaveToPromptAction);
|
|
138
100
|
}
|
|
139
101
|
|
|
140
|
-
export { SAVE_TO_PROMPT_SLASH_COMMAND_NAME, registerSaveToPromptActions
|
|
102
|
+
export { SAVE_TO_PROMPT_ACTION_ID, SAVE_TO_PROMPT_SLASH_COMMAND_NAME, registerSaveToPromptActions };
|
|
@@ -18,7 +18,7 @@ import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbe
|
|
|
18
18
|
import { LifecyclePhase } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle';
|
|
19
19
|
import { ILifecycleService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle.service';
|
|
20
20
|
import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
|
|
21
|
-
import { CHAT_CONFIG_MENU_ID, CHAT_CATEGORY } from '@codingame/monaco-vscode-
|
|
21
|
+
import { CHAT_CONFIG_MENU_ID, CHAT_CATEGORY } from '@codingame/monaco-vscode-c2deffc4-ad68-5e63-8f95-9b89e0fc6898-common/vscode/vs/workbench/contrib/chat/browser/actions/chatActions';
|
|
22
22
|
import { ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
|
|
23
23
|
import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
|
|
24
24
|
import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
@@ -29,7 +29,7 @@ import { parse } from '@codingame/monaco-vscode-dc3fa21d-a483-5b99-a7ab-17323564
|
|
|
29
29
|
import { Extensions } from '@codingame/monaco-vscode-api/vscode/vs/platform/jsonschemas/common/jsonContributionRegistry';
|
|
30
30
|
import { Registry } from '@codingame/monaco-vscode-api/vscode/vs/platform/registry/common/platform';
|
|
31
31
|
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
32
|
-
import { ChatViewId } from '@codingame/monaco-vscode-
|
|
32
|
+
import { ChatViewId } from '@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common/vscode/vs/workbench/contrib/chat/browser/chat';
|
|
33
33
|
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatContextKeys';
|
|
34
34
|
import { observableFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
|
|
35
35
|
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
@@ -44,11 +44,11 @@ const toolSetsSchema = {
|
|
|
44
44
|
allowComments: true,
|
|
45
45
|
allowTrailingCommas: true,
|
|
46
46
|
defaultSnippets: [{
|
|
47
|
-
label: ( localize(
|
|
47
|
+
label: ( localize(5318, "Empty tool set")),
|
|
48
48
|
body: { '${1:toolSetName}': { 'tools': ['${2:someTool}', '${3:anotherTool}'], 'description': '${4:description}', 'icon': '${5:tools}' } }
|
|
49
49
|
}],
|
|
50
50
|
type: 'object',
|
|
51
|
-
description: ( localize(
|
|
51
|
+
description: ( localize(5319, 'User tool sets configuration')),
|
|
52
52
|
additionalProperties: {
|
|
53
53
|
type: 'object',
|
|
54
54
|
required: ['tools'],
|
|
@@ -56,7 +56,7 @@ const toolSetsSchema = {
|
|
|
56
56
|
properties: {
|
|
57
57
|
tools: {
|
|
58
58
|
description: ( localize(
|
|
59
|
-
|
|
59
|
+
5320,
|
|
60
60
|
"A list of tools or tool sets to include in this tool set. Cannot be empty and must reference tools the way they are referenced in prompts."
|
|
61
61
|
)),
|
|
62
62
|
type: 'array',
|
|
@@ -69,7 +69,7 @@ const toolSetsSchema = {
|
|
|
69
69
|
},
|
|
70
70
|
icon: {
|
|
71
71
|
description: ( localize(
|
|
72
|
-
|
|
72
|
+
5321,
|
|
73
73
|
"Icon to use for this tool set in the UI. Uses the `\\$(name)`-syntax, like `\\$(zap)`"
|
|
74
74
|
)),
|
|
75
75
|
type: 'string',
|
|
@@ -77,7 +77,7 @@ const toolSetsSchema = {
|
|
|
77
77
|
markdownEnumDescriptions: Array.from(getAllCodicons(), icon => `$(${icon.id})`),
|
|
78
78
|
},
|
|
79
79
|
description: {
|
|
80
|
-
description: ( localize(
|
|
80
|
+
description: ( localize(5322, "A short description of this tool set.")),
|
|
81
81
|
type: 'string'
|
|
82
82
|
},
|
|
83
83
|
},
|
|
@@ -164,7 +164,7 @@ let UserToolSetsContributions = class UserToolSetsContributions extends Disposab
|
|
|
164
164
|
});
|
|
165
165
|
for (const item of data) {
|
|
166
166
|
toolEnumValues.push(item.name);
|
|
167
|
-
toolEnumDescriptions.push(( localize(
|
|
167
|
+
toolEnumDescriptions.push(( localize(5323, "{1} ({0})\n\n{2}", item.sourceLabel, item.name, item.description)));
|
|
168
168
|
}
|
|
169
169
|
store.clear();
|
|
170
170
|
reg.registerSchema(toolSetSchemaId, toolSetsSchema, store);
|
|
@@ -257,8 +257,8 @@ class ConfigureToolSets extends Action2 {
|
|
|
257
257
|
constructor() {
|
|
258
258
|
super({
|
|
259
259
|
id: ConfigureToolSets.ID,
|
|
260
|
-
title: ( localize2(
|
|
261
|
-
shortTitle: ( localize(
|
|
260
|
+
title: ( localize2(5324, 'Configure Tool Sets...')),
|
|
261
|
+
shortTitle: ( localize(5325, "Tool Sets")),
|
|
262
262
|
category: CHAT_CATEGORY,
|
|
263
263
|
f1: true,
|
|
264
264
|
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, ChatContextKeys.Tools.toolsCount.greater(0))),
|
|
@@ -279,7 +279,7 @@ class ConfigureToolSets extends Action2 {
|
|
|
279
279
|
const textFileService = accessor.get(ITextFileService);
|
|
280
280
|
const picks = [];
|
|
281
281
|
picks.push({
|
|
282
|
-
label: ( localize(
|
|
282
|
+
label: ( localize(5326, 'Create new tool sets file...')),
|
|
283
283
|
alwaysShow: true,
|
|
284
284
|
iconClass: ThemeIcon.asClassName(Codicon.plus)
|
|
285
285
|
});
|
|
@@ -296,7 +296,7 @@ class ConfigureToolSets extends Action2 {
|
|
|
296
296
|
}
|
|
297
297
|
const pick = await quickInputService.pick(picks, {
|
|
298
298
|
canPickMany: false,
|
|
299
|
-
placeHolder: ( localize(
|
|
299
|
+
placeHolder: ( localize(5327, 'Select a tool set to configure')),
|
|
300
300
|
});
|
|
301
301
|
if (!pick) {
|
|
302
302
|
return;
|
|
@@ -304,13 +304,13 @@ class ConfigureToolSets extends Action2 {
|
|
|
304
304
|
let resource;
|
|
305
305
|
if (!pick.toolset) {
|
|
306
306
|
const name = await quickInputService.input({
|
|
307
|
-
placeHolder: ( localize(
|
|
307
|
+
placeHolder: ( localize(5328, "Type tool sets file name")),
|
|
308
308
|
validateInput: async (input) => {
|
|
309
309
|
if (!input) {
|
|
310
|
-
return localize(
|
|
310
|
+
return localize(5329, "Invalid file name");
|
|
311
311
|
}
|
|
312
312
|
if (!isValidBasename(input)) {
|
|
313
|
-
return localize(
|
|
313
|
+
return localize(5330, "'{0}' is not a valid file name", input);
|
|
314
314
|
}
|
|
315
315
|
return undefined;
|
|
316
316
|
}
|