@codingame/monaco-vscode-chat-service-override 26.1.0 → 26.1.2
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/package.json +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +4 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +19 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +209 -57
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +255 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +51 -51
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +24 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +19 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +329 -145
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +51 -51
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +16 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +24 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +58 -58
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +591 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.d.ts +48 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +162 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +30 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +31 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +24 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +251 -72
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +191 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +13 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +19 -3
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +203 -25
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +18 -2
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +50 -6
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +11 -1
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +23 -17
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.d.ts +63 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.js +121 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.d.ts +76 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +120 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +27 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +22 -11
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +3 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +135 -54
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +64 -43
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +24 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +341 -24
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +12 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +95 -26
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +4 -4
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +6 -6
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +8 -8
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -20
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +8 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +14 -13
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +0 -63
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +0 -955
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-chat-service-override",
|
|
3
|
-
"version": "26.1.
|
|
3
|
+
"version": "26.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - chat service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "26.1.
|
|
19
|
-
"@codingame/monaco-vscode-katex-common": "26.1.
|
|
20
|
-
"@codingame/monaco-vscode-xterm-addons-common": "26.1.
|
|
21
|
-
"@codingame/monaco-vscode-xterm-common": "26.1.
|
|
18
|
+
"@codingame/monaco-vscode-api": "26.1.2",
|
|
19
|
+
"@codingame/monaco-vscode-katex-common": "26.1.2",
|
|
20
|
+
"@codingame/monaco-vscode-xterm-addons-common": "26.1.2",
|
|
21
|
+
"@codingame/monaco-vscode-xterm-common": "26.1.2"
|
|
22
22
|
},
|
|
23
23
|
"main": "index.js",
|
|
24
24
|
"module": "index.js",
|
|
@@ -27,7 +27,7 @@ function registerChatCopyActions() {
|
|
|
27
27
|
run(accessor, context) {
|
|
28
28
|
const clipboardService = accessor.get(IClipboardService);
|
|
29
29
|
const chatWidgetService = accessor.get(IChatWidgetService);
|
|
30
|
-
const widget = (context
|
|
30
|
+
const widget = ((isRequestVM(context) || isResponseVM(context)) && chatWidgetService.getWidgetBySessionResource(context.sessionResource)) || chatWidgetService.lastFocusedWidget;
|
|
31
31
|
if (widget) {
|
|
32
32
|
const viewModel = widget.viewModel;
|
|
33
33
|
const sessionAsText = viewModel?.getItems().filter(
|
|
@@ -70,6 +70,9 @@ function registerChatCopyActions() {
|
|
|
70
70
|
await clipboardService.writeText(selectedText);
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
+
if (!isRequestVM(item) && !isResponseVM(item)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
73
76
|
const text = stringifyItem(item, false);
|
|
74
77
|
await clipboardService.writeText(text);
|
|
75
78
|
}
|
package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { PromptsStorage } from "@codingame/monaco-vscode-api/vscode/vs/workbench
|
|
|
2
2
|
import { PromptsType } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes";
|
|
3
3
|
import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
|
4
4
|
import { IWorkspaceFolder } from "@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace";
|
|
5
|
+
import { IParsedHook } from "../promptSyntax/hookUtils.js";
|
|
5
6
|
/**
|
|
6
7
|
* Information about a file that was loaded or skipped.
|
|
7
8
|
*/
|
|
@@ -15,6 +16,10 @@ export interface IFileStatusInfo {
|
|
|
15
16
|
overwrittenBy?: string;
|
|
16
17
|
/** Extension ID if this file comes from an extension */
|
|
17
18
|
extensionId?: string;
|
|
19
|
+
/** If true, hidden from / menu (user-invokable: false) */
|
|
20
|
+
userInvokable?: boolean;
|
|
21
|
+
/** If true, won't be auto-loaded by agent (disable-model-invocation: true) */
|
|
22
|
+
disableModelInvocation?: boolean;
|
|
18
23
|
}
|
|
19
24
|
/**
|
|
20
25
|
* Path information with scan order.
|
|
@@ -38,17 +43,14 @@ export interface ITypeStatusInfo {
|
|
|
38
43
|
paths: IPathInfo[];
|
|
39
44
|
files: IFileStatusInfo[];
|
|
40
45
|
enabled: boolean;
|
|
46
|
+
/** For hooks only: parsed hooks grouped by lifecycle */
|
|
47
|
+
parsedHooks?: IParsedHook[];
|
|
41
48
|
}
|
|
42
49
|
/**
|
|
43
50
|
* Registers the Diagnostics action for the chat context menu.
|
|
44
51
|
*/
|
|
45
52
|
export declare function registerChatCustomizationDiagnosticsAction(): void;
|
|
46
|
-
|
|
47
|
-
* Formats the status output as a compact markdown string with tree structure.
|
|
48
|
-
* Files are grouped under their parent paths.
|
|
49
|
-
* Special files (AGENTS.md, copilot-instructions.md) are merged into their respective sections.
|
|
50
|
-
*/
|
|
51
|
-
export declare function formatStatusOutput(statusInfos: ITypeStatusInfo[], specialFiles: {
|
|
53
|
+
export interface ISpecialFilesStatus {
|
|
52
54
|
agentsMd: {
|
|
53
55
|
enabled: boolean;
|
|
54
56
|
files: URI[];
|
|
@@ -57,4 +59,14 @@ export declare function formatStatusOutput(statusInfos: ITypeStatusInfo[], speci
|
|
|
57
59
|
enabled: boolean;
|
|
58
60
|
files: URI[];
|
|
59
61
|
};
|
|
60
|
-
|
|
62
|
+
claudeMd: {
|
|
63
|
+
enabled: boolean;
|
|
64
|
+
files: URI[];
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Formats the status output as a compact markdown string with tree structure.
|
|
69
|
+
* Files are grouped under their parent paths.
|
|
70
|
+
* Special files (AGENTS.md, copilot-instructions.md) are merged into their respective sections.
|
|
71
|
+
*/
|
|
72
|
+
export declare function formatStatusOutput(statusInfos: ITypeStatusInfo[], specialFiles: ISpecialFilesStatus, workspaceFolders: readonly IWorkspaceFolder[]): string;
|
package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js
CHANGED
|
@@ -5,6 +5,7 @@ import { localize2, localize } from '@codingame/monaco-vscode-api/vscode/vs/nls'
|
|
|
5
5
|
import { registerAction2, Action2, MenuId } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
|
|
6
6
|
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
7
7
|
import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
|
|
8
|
+
import { AgentFileType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
|
|
8
9
|
import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service';
|
|
9
10
|
import { PromptsConfig } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
|
|
10
11
|
import { PromptsType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
@@ -17,6 +18,11 @@ import { CHAT_CONFIG_MENU_ID, CHAT_CATEGORY } from '@codingame/monaco-vscode-api
|
|
|
17
18
|
import { ChatViewId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat';
|
|
18
19
|
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/actions/chatContextKeys';
|
|
19
20
|
import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
|
|
21
|
+
import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
|
|
22
|
+
import { parseAllHookFiles } from '../promptSyntax/hookUtils.js';
|
|
23
|
+
import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
|
|
24
|
+
import { IRemoteAgentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/remote/common/remoteAgentService.service';
|
|
25
|
+
import { OS } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
|
|
20
26
|
|
|
21
27
|
function encodePathForMarkdown(path) {
|
|
22
28
|
return ( path.split("/").map(segment => encodeURIComponent(segment))).join("/");
|
|
@@ -37,6 +43,8 @@ const TREE_BRANCH = "├─";
|
|
|
37
43
|
const TREE_END = "└─";
|
|
38
44
|
const ICON_ERROR = "❌";
|
|
39
45
|
const ICON_WARN = "⚠️";
|
|
46
|
+
const ICON_MANUAL = "🔧";
|
|
47
|
+
const ICON_HIDDEN = "👁️🗨️";
|
|
40
48
|
function registerChatCustomizationDiagnosticsAction() {
|
|
41
49
|
registerAction2(class DiagnosticsAction extends Action2 {
|
|
42
50
|
constructor() {
|
|
@@ -69,8 +77,11 @@ function registerChatCustomizationDiagnosticsAction() {
|
|
|
69
77
|
const untitledTextEditorService = accessor.get(IUntitledTextEditorService);
|
|
70
78
|
const commandService = accessor.get(ICommandService);
|
|
71
79
|
const workspaceContextService = accessor.get(IWorkspaceContextService);
|
|
80
|
+
const labelService = accessor.get(ILabelService);
|
|
81
|
+
const remoteAgentService = accessor.get(IRemoteAgentService);
|
|
72
82
|
const token = CancellationToken.None;
|
|
73
83
|
const workspaceFolders = workspaceContextService.getWorkspace().folders;
|
|
84
|
+
const pathService = accessor.get(IPathService);
|
|
74
85
|
const statusInfos = [];
|
|
75
86
|
const agentsStatus = await collectAgentsStatus(promptsService, fileService, token);
|
|
76
87
|
statusInfos.push(agentsStatus);
|
|
@@ -80,6 +91,16 @@ function registerChatCustomizationDiagnosticsAction() {
|
|
|
80
91
|
statusInfos.push(promptsStatus);
|
|
81
92
|
const skillsStatus = await collectSkillsStatus(promptsService, configurationService, fileService, token);
|
|
82
93
|
statusInfos.push(skillsStatus);
|
|
94
|
+
const hooksStatus = await collectHooksStatus(
|
|
95
|
+
promptsService,
|
|
96
|
+
fileService,
|
|
97
|
+
labelService,
|
|
98
|
+
pathService,
|
|
99
|
+
workspaceContextService,
|
|
100
|
+
remoteAgentService,
|
|
101
|
+
token
|
|
102
|
+
);
|
|
103
|
+
statusInfos.push(hooksStatus);
|
|
83
104
|
const specialFilesStatus = await collectSpecialFilesStatus(promptsService, configurationService, token);
|
|
84
105
|
const output = formatStatusOutput(statusInfos, specialFilesStatus, workspaceFolders);
|
|
85
106
|
const untitledModel = untitledTextEditorService.create({
|
|
@@ -146,25 +167,86 @@ async function collectSkillsStatus(promptsService, configurationService, fileSer
|
|
|
146
167
|
enabled
|
|
147
168
|
};
|
|
148
169
|
}
|
|
170
|
+
async function collectHooksStatus(
|
|
171
|
+
promptsService,
|
|
172
|
+
fileService,
|
|
173
|
+
labelService,
|
|
174
|
+
pathService,
|
|
175
|
+
workspaceContextService,
|
|
176
|
+
remoteAgentService,
|
|
177
|
+
token
|
|
178
|
+
) {
|
|
179
|
+
const type = PromptsType.hook;
|
|
180
|
+
const enabled = true;
|
|
181
|
+
const resolvedFolders = await promptsService.getResolvedSourceFolders(type);
|
|
182
|
+
const paths = await convertResolvedFoldersToPathInfo(resolvedFolders, fileService);
|
|
183
|
+
const discoveryInfo = await promptsService.getPromptDiscoveryInfo(type, token);
|
|
184
|
+
const files = ( discoveryInfo.files.map(convertDiscoveryResultToFileStatus));
|
|
185
|
+
const disabledFileUris = ( discoveryInfo.files.filter(f => f.status === "skipped" && f.skipReason === "all-hooks-disabled").map(f => f.uri));
|
|
186
|
+
const parsedHooks = await parseHookFiles(
|
|
187
|
+
promptsService,
|
|
188
|
+
fileService,
|
|
189
|
+
labelService,
|
|
190
|
+
pathService,
|
|
191
|
+
workspaceContextService,
|
|
192
|
+
remoteAgentService,
|
|
193
|
+
token,
|
|
194
|
+
disabledFileUris
|
|
195
|
+
);
|
|
196
|
+
return {
|
|
197
|
+
type,
|
|
198
|
+
paths,
|
|
199
|
+
files,
|
|
200
|
+
enabled,
|
|
201
|
+
parsedHooks
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
async function parseHookFiles(
|
|
205
|
+
promptsService,
|
|
206
|
+
fileService,
|
|
207
|
+
labelService,
|
|
208
|
+
pathService,
|
|
209
|
+
workspaceContextService,
|
|
210
|
+
remoteAgentService,
|
|
211
|
+
token,
|
|
212
|
+
additionalDisabledFileUris
|
|
213
|
+
) {
|
|
214
|
+
const workspaceFolder = workspaceContextService.getWorkspace().folders[0];
|
|
215
|
+
const workspaceRootUri = workspaceFolder?.uri;
|
|
216
|
+
const userHomeUri = await pathService.userHome();
|
|
217
|
+
const userHome = userHomeUri.fsPath ?? userHomeUri.path;
|
|
218
|
+
const remoteEnv = await remoteAgentService.getEnvironment();
|
|
219
|
+
const targetOS = remoteEnv?.os ?? OS;
|
|
220
|
+
return parseAllHookFiles(
|
|
221
|
+
promptsService,
|
|
222
|
+
fileService,
|
|
223
|
+
labelService,
|
|
224
|
+
workspaceRootUri,
|
|
225
|
+
userHome,
|
|
226
|
+
targetOS,
|
|
227
|
+
token,
|
|
228
|
+
{
|
|
229
|
+
additionalDisabledFileUris
|
|
230
|
+
}
|
|
231
|
+
);
|
|
232
|
+
}
|
|
149
233
|
async function collectSpecialFilesStatus(promptsService, configurationService, token) {
|
|
150
234
|
const useAgentMd = configurationService.getValue(PromptsConfig.USE_AGENT_MD) ?? false;
|
|
151
|
-
|
|
152
|
-
if (useAgentMd) {
|
|
153
|
-
agentMdFiles = await promptsService.listAgentMDs(token, false);
|
|
154
|
-
}
|
|
235
|
+
const useClaudeMd = configurationService.getValue(PromptsConfig.USE_CLAUDE_MD) ?? false;
|
|
155
236
|
const useCopilotInstructions = configurationService.getValue(PromptsConfig.USE_COPILOT_INSTRUCTION_FILES) ?? false;
|
|
156
|
-
|
|
157
|
-
if (useCopilotInstructions) {
|
|
158
|
-
copilotInstructionsFiles = await promptsService.listCopilotInstructionsMDs(token);
|
|
159
|
-
}
|
|
237
|
+
const allFiles = await promptsService.listAgentInstructions(token);
|
|
160
238
|
return {
|
|
161
239
|
agentsMd: {
|
|
162
240
|
enabled: useAgentMd,
|
|
163
|
-
files:
|
|
241
|
+
files: ( allFiles.filter(f => f.type === AgentFileType.agentsMd).map(f => f.uri))
|
|
242
|
+
},
|
|
243
|
+
claudeMd: {
|
|
244
|
+
enabled: useClaudeMd,
|
|
245
|
+
files: ( allFiles.filter(f => f.type === AgentFileType.claudeMd).map(f => f.uri))
|
|
164
246
|
},
|
|
165
247
|
copilotInstructions: {
|
|
166
248
|
enabled: useCopilotInstructions,
|
|
167
|
-
files:
|
|
249
|
+
files: ( allFiles.filter(f => f.type === AgentFileType.copilotInstructionsMd).map(f => f.uri))
|
|
168
250
|
}
|
|
169
251
|
};
|
|
170
252
|
}
|
|
@@ -206,8 +288,12 @@ function getSkipReasonMessage(skipReason, errorMessage) {
|
|
|
206
288
|
return errorMessage ?? ( localize(4748, "Parse error"));
|
|
207
289
|
case "disabled":
|
|
208
290
|
return localize(4749, "Disabled");
|
|
291
|
+
case "all-hooks-disabled":
|
|
292
|
+
return localize(4750, "All hooks disabled via disableAllHooks");
|
|
293
|
+
case "claude-hooks-disabled":
|
|
294
|
+
return localize(4751, "Claude hooks disabled via chat.useClaudeHooks setting");
|
|
209
295
|
default:
|
|
210
|
-
return errorMessage ?? ( localize(
|
|
296
|
+
return errorMessage ?? ( localize(4752, "Unknown error"));
|
|
211
297
|
}
|
|
212
298
|
}
|
|
213
299
|
function convertDiscoveryResultToFileStatus(result) {
|
|
@@ -217,7 +303,9 @@ function convertDiscoveryResultToFileStatus(result) {
|
|
|
217
303
|
status: "loaded",
|
|
218
304
|
name: result.name,
|
|
219
305
|
storage: result.storage,
|
|
220
|
-
extensionId: result.extensionId
|
|
306
|
+
extensionId: result.extensionId,
|
|
307
|
+
userInvokable: result.userInvokable,
|
|
308
|
+
disableModelInvocation: result.disableModelInvocation
|
|
221
309
|
};
|
|
222
310
|
}
|
|
223
311
|
if (result.skipReason === "duplicate-name" && result.duplicateOf) {
|
|
@@ -241,21 +329,21 @@ function convertDiscoveryResultToFileStatus(result) {
|
|
|
241
329
|
}
|
|
242
330
|
function formatStatusOutput(statusInfos, specialFiles, workspaceFolders) {
|
|
243
331
|
const lines = [];
|
|
244
|
-
lines.push(`## ${( localize(
|
|
245
|
-
lines.push(`*${( localize(
|
|
332
|
+
lines.push(`## ${( localize(4753, "Chat Customization Diagnostics"))}`);
|
|
333
|
+
lines.push(`*${( localize(4754, "WARNING: This file may contain sensitive information."))}*`);
|
|
246
334
|
lines.push("");
|
|
247
335
|
for (const info of statusInfos) {
|
|
248
336
|
const typeName = getTypeName(info.type);
|
|
249
337
|
if (info.type === PromptsType.skill && !info.enabled) {
|
|
250
338
|
lines.push(`**${typeName}**`);
|
|
251
339
|
lines.push(`*${( localize(
|
|
252
|
-
|
|
340
|
+
4755,
|
|
253
341
|
"Skills are disabled. Enable them by setting `chat.useAgentSkills` to `true` in your settings."
|
|
254
342
|
))}*`);
|
|
255
343
|
lines.push("");
|
|
256
344
|
continue;
|
|
257
345
|
}
|
|
258
|
-
const enabledStatus = info.enabled ? "" : ` *(${( localize(
|
|
346
|
+
const enabledStatus = info.enabled ? "" : ` *(${( localize(4756, "disabled"))})*`;
|
|
259
347
|
let loadedCount = info.files.filter(f => f.status === "loaded").length;
|
|
260
348
|
const skippedCount = info.files.filter(f => f.status === "skipped" || f.status === "overwritten").length;
|
|
261
349
|
if (info.type === PromptsType.instructions) {
|
|
@@ -265,18 +353,29 @@ function formatStatusOutput(statusInfos, specialFiles, workspaceFolders) {
|
|
|
265
353
|
if (specialFiles.copilotInstructions.enabled) {
|
|
266
354
|
loadedCount += specialFiles.copilotInstructions.files.length;
|
|
267
355
|
}
|
|
356
|
+
if (specialFiles.claudeMd.enabled) {
|
|
357
|
+
loadedCount += specialFiles.claudeMd.files.length;
|
|
358
|
+
}
|
|
268
359
|
}
|
|
269
360
|
lines.push(`**${typeName}**${enabledStatus}<br>`);
|
|
270
361
|
const statsParts = [];
|
|
271
|
-
if (
|
|
362
|
+
if (info.type === PromptsType.hook) {
|
|
363
|
+
if (loadedCount > 0) {
|
|
364
|
+
statsParts.push(loadedCount === 1 ? ( localize(4757, "1 file loaded")) : ( localize(4758, "{0} files loaded", loadedCount)));
|
|
365
|
+
}
|
|
366
|
+
if (info.parsedHooks && info.parsedHooks.length > 0) {
|
|
367
|
+
const hookCount = info.parsedHooks.length;
|
|
368
|
+
statsParts.push(hookCount === 1 ? ( localize(4759, "1 hook loaded")) : ( localize(4760, "{0} hooks loaded", hookCount)));
|
|
369
|
+
}
|
|
370
|
+
} else if (loadedCount > 0) {
|
|
272
371
|
if (info.type === PromptsType.skill) {
|
|
273
|
-
statsParts.push(loadedCount === 1 ? ( localize(
|
|
372
|
+
statsParts.push(loadedCount === 1 ? ( localize(4761, "1 skill loaded")) : ( localize(4762, "{0} skills loaded", loadedCount)));
|
|
274
373
|
} else {
|
|
275
374
|
statsParts.push(loadedCount === 1 ? ( localize(4757, "1 file loaded")) : ( localize(4758, "{0} files loaded", loadedCount)));
|
|
276
375
|
}
|
|
277
376
|
}
|
|
278
377
|
if (skippedCount > 0) {
|
|
279
|
-
statsParts.push(( localize(
|
|
378
|
+
statsParts.push(( localize(4763, "{0} skipped", skippedCount)));
|
|
280
379
|
}
|
|
281
380
|
if (statsParts.length > 0) {
|
|
282
381
|
lines.push(`*${statsParts.join(", ")}*`);
|
|
@@ -304,41 +403,43 @@ function formatStatusOutput(statusInfos, specialFiles, workspaceFolders) {
|
|
|
304
403
|
}
|
|
305
404
|
}
|
|
306
405
|
let hasContent = false;
|
|
307
|
-
|
|
308
|
-
const
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
406
|
+
if (info.type !== PromptsType.hook) {
|
|
407
|
+
for (const path of allPaths) {
|
|
408
|
+
const pathFiles = filesByPath.get(( path.uri.toString())) || [];
|
|
409
|
+
if (path.exists) {
|
|
410
|
+
lines.push(`${path.displayPath}<br>`);
|
|
411
|
+
} else if (path.isDefault) {
|
|
412
|
+
lines.push(`${path.displayPath}<br>`);
|
|
413
|
+
} else {
|
|
414
|
+
lines.push(`${ICON_ERROR} ${path.displayPath} - *${( localize(4764, "Folder does not exist"))}*<br>`);
|
|
415
|
+
}
|
|
416
|
+
if (path.exists && pathFiles.length > 0) {
|
|
417
|
+
for (let i = 0; i < pathFiles.length; i++) {
|
|
418
|
+
const file = pathFiles[i];
|
|
419
|
+
let fileName;
|
|
420
|
+
if (info.type === PromptsType.skill) {
|
|
421
|
+
fileName = file.name || `${basename(dirname(file.uri))}`;
|
|
422
|
+
} else {
|
|
423
|
+
fileName = basename(file.uri);
|
|
424
|
+
}
|
|
425
|
+
const isLast = i === pathFiles.length - 1;
|
|
426
|
+
const prefix = isLast ? TREE_END : TREE_BRANCH;
|
|
427
|
+
const filePath = getRelativePath(file.uri, workspaceFolders);
|
|
428
|
+
if (file.status === "loaded") {
|
|
429
|
+
lines.push(`${prefix} [\`${fileName}\`](${filePath})<br>`);
|
|
430
|
+
} else if (file.status === "overwritten") {
|
|
431
|
+
lines.push(`${prefix} ${ICON_WARN} [\`${fileName}\`](${filePath}) - *${( localize(4747, "Overwritten by higher priority file"))}*<br>`);
|
|
432
|
+
} else {
|
|
433
|
+
lines.push(
|
|
434
|
+
`${prefix} ${ICON_ERROR} [\`${fileName}\`](${filePath}) - *${file.reason}*<br>`
|
|
435
|
+
);
|
|
436
|
+
}
|
|
336
437
|
}
|
|
337
438
|
}
|
|
439
|
+
hasContent = true;
|
|
338
440
|
}
|
|
339
|
-
hasContent = true;
|
|
340
441
|
}
|
|
341
|
-
if (unmatchedFiles.length > 0) {
|
|
442
|
+
if (info.type !== PromptsType.hook && unmatchedFiles.length > 0) {
|
|
342
443
|
const filesByExtension = ( new Map());
|
|
343
444
|
for (const file of unmatchedFiles) {
|
|
344
445
|
const extId = file.extensionId || "unknown";
|
|
@@ -348,7 +449,7 @@ function formatStatusOutput(statusInfos, specialFiles, workspaceFolders) {
|
|
|
348
449
|
filesByExtension.get(extId).push(file);
|
|
349
450
|
}
|
|
350
451
|
for (const [extId, extFiles] of filesByExtension) {
|
|
351
|
-
lines.push(`${( localize(
|
|
452
|
+
lines.push(`${( localize(4765, "Extension"))}: ${extId}<br>`);
|
|
352
453
|
for (let i = 0; i < extFiles.length; i++) {
|
|
353
454
|
const file = extFiles[i];
|
|
354
455
|
let fileName;
|
|
@@ -361,7 +462,8 @@ function formatStatusOutput(statusInfos, specialFiles, workspaceFolders) {
|
|
|
361
462
|
const prefix = isLast ? TREE_END : TREE_BRANCH;
|
|
362
463
|
const filePath = getRelativePath(file.uri, workspaceFolders);
|
|
363
464
|
if (file.status === "loaded") {
|
|
364
|
-
|
|
465
|
+
const flags = getSkillFlags(file, info.type);
|
|
466
|
+
lines.push(`${prefix} [\`${fileName}\`](${filePath})${flags}<br>`);
|
|
365
467
|
} else if (file.status === "overwritten") {
|
|
366
468
|
lines.push(`${prefix} ${ICON_WARN} [\`${fileName}\`](${filePath}) - *${( localize(4747, "Overwritten by higher priority file"))}*<br>`);
|
|
367
469
|
} else {
|
|
@@ -405,13 +507,61 @@ function formatStatusOutput(statusInfos, specialFiles, workspaceFolders) {
|
|
|
405
507
|
hasContent = true;
|
|
406
508
|
}
|
|
407
509
|
}
|
|
510
|
+
if (info.type === PromptsType.hook && info.parsedHooks && info.parsedHooks.length > 0) {
|
|
511
|
+
const hooksByFile = ( new Map());
|
|
512
|
+
for (const hook of info.parsedHooks) {
|
|
513
|
+
const fileKey = ( hook.fileUri.toString());
|
|
514
|
+
const existing = hooksByFile.get(fileKey) ?? [];
|
|
515
|
+
existing.push(hook);
|
|
516
|
+
hooksByFile.set(fileKey, existing);
|
|
517
|
+
}
|
|
518
|
+
const fileUris = Array.from(( hooksByFile.keys()));
|
|
519
|
+
for (let fileIdx = 0; fileIdx < fileUris.length; fileIdx++) {
|
|
520
|
+
const fileKey = fileUris[fileIdx];
|
|
521
|
+
const fileHooks = hooksByFile.get(fileKey);
|
|
522
|
+
const firstHook = fileHooks[0];
|
|
523
|
+
const filePath = getRelativePath(firstHook.fileUri, workspaceFolders);
|
|
524
|
+
const fileDisabled = fileHooks[0].disabled;
|
|
525
|
+
if (fileDisabled) {
|
|
526
|
+
lines.push(`[${firstHook.filePath}](${filePath}) - *${( localize(4766, "all hooks disabled via disableAllHooks"))}*<br>`);
|
|
527
|
+
} else {
|
|
528
|
+
lines.push(`[${firstHook.filePath}](${filePath})<br>`);
|
|
529
|
+
}
|
|
530
|
+
for (let i = 0; i < fileHooks.length; i++) {
|
|
531
|
+
const hook = fileHooks[i];
|
|
532
|
+
const isLast = i === fileHooks.length - 1;
|
|
533
|
+
const prefix = isLast ? TREE_END : TREE_BRANCH;
|
|
534
|
+
const disabledPrefix = hook.disabled ? `${ICON_ERROR} ` : "";
|
|
535
|
+
lines.push(
|
|
536
|
+
`${prefix} ${disabledPrefix}${hook.hookTypeLabel}: \`${hook.commandLabel}\`<br>`
|
|
537
|
+
);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
hasContent = true;
|
|
541
|
+
}
|
|
408
542
|
if (!hasContent && info.enabled) {
|
|
409
|
-
lines.push(`*${( localize(
|
|
543
|
+
lines.push(`*${( localize(4767, "No files loaded"))}*`);
|
|
410
544
|
}
|
|
411
545
|
lines.push("");
|
|
412
546
|
}
|
|
413
547
|
return lines.join("\n");
|
|
414
548
|
}
|
|
549
|
+
function getSkillFlags(file, type) {
|
|
550
|
+
if (type !== PromptsType.skill) {
|
|
551
|
+
return "";
|
|
552
|
+
}
|
|
553
|
+
const flags = [];
|
|
554
|
+
if (file.disableModelInvocation) {
|
|
555
|
+
flags.push(`${ICON_MANUAL} *${( localize(4768, "manual only"))}*`);
|
|
556
|
+
}
|
|
557
|
+
if (file.userInvokable === false) {
|
|
558
|
+
flags.push(`${ICON_HIDDEN} *${( localize(4769, "hidden from menu"))}*`);
|
|
559
|
+
}
|
|
560
|
+
if (flags.length === 0) {
|
|
561
|
+
return "";
|
|
562
|
+
}
|
|
563
|
+
return ` - ${flags.join(", ")}`;
|
|
564
|
+
}
|
|
415
565
|
function isFileUnderPath(fileUri, pathUri) {
|
|
416
566
|
const filePath = ( fileUri.toString());
|
|
417
567
|
const folderPath = ( pathUri.toString());
|
|
@@ -420,13 +570,15 @@ function isFileUnderPath(fileUri, pathUri) {
|
|
|
420
570
|
function getTypeName(type) {
|
|
421
571
|
switch (type) {
|
|
422
572
|
case PromptsType.agent:
|
|
423
|
-
return localize(
|
|
573
|
+
return localize(4770, "Custom Agents");
|
|
424
574
|
case PromptsType.instructions:
|
|
425
|
-
return localize(
|
|
575
|
+
return localize(4771, "Instructions");
|
|
426
576
|
case PromptsType.prompt:
|
|
427
|
-
return localize(
|
|
577
|
+
return localize(4772, "Prompt Files");
|
|
428
578
|
case PromptsType.skill:
|
|
429
|
-
return localize(
|
|
579
|
+
return localize(4773, "Skills");
|
|
580
|
+
case PromptsType.hook:
|
|
581
|
+
return localize(4774, "Hooks");
|
|
430
582
|
default:
|
|
431
583
|
return type;
|
|
432
584
|
}
|
|
@@ -30,7 +30,7 @@ class LogChatInputHistoryAction extends Action2 {
|
|
|
30
30
|
constructor() {
|
|
31
31
|
super({
|
|
32
32
|
id: LogChatInputHistoryAction.ID,
|
|
33
|
-
title: ( localize2(
|
|
33
|
+
title: ( localize2(4775, "Log Chat Input History")),
|
|
34
34
|
icon: Codicon.attach,
|
|
35
35
|
category: Categories.Developer,
|
|
36
36
|
f1: true,
|
|
@@ -49,7 +49,7 @@ class LogChatIndexAction extends Action2 {
|
|
|
49
49
|
constructor() {
|
|
50
50
|
super({
|
|
51
51
|
id: LogChatIndexAction.ID,
|
|
52
|
-
title: ( localize2(
|
|
52
|
+
title: ( localize2(4776, "Log Chat Index")),
|
|
53
53
|
icon: Codicon.attach,
|
|
54
54
|
category: Categories.Developer,
|
|
55
55
|
f1: true,
|
|
@@ -68,7 +68,7 @@ class InspectChatModelAction extends Action2 {
|
|
|
68
68
|
constructor() {
|
|
69
69
|
super({
|
|
70
70
|
id: InspectChatModelAction.ID,
|
|
71
|
-
title: ( localize2(
|
|
71
|
+
title: ( localize2(4777, "Inspect Chat Model")),
|
|
72
72
|
icon: Codicon.inspect,
|
|
73
73
|
category: Categories.Developer,
|
|
74
74
|
f1: true,
|
|
@@ -13,7 +13,7 @@ function registerChatFileTreeActions() {
|
|
|
13
13
|
constructor() {
|
|
14
14
|
super({
|
|
15
15
|
id: "workbench.action.chat.nextFileTree",
|
|
16
|
-
title: ( localize2(
|
|
16
|
+
title: ( localize2(4808, "Next File Tree")),
|
|
17
17
|
keybinding: {
|
|
18
18
|
primary: KeyMod.CtrlCmd | KeyCode.F9,
|
|
19
19
|
weight: KeybindingWeight.WorkbenchContrib,
|
|
@@ -32,7 +32,7 @@ function registerChatFileTreeActions() {
|
|
|
32
32
|
constructor() {
|
|
33
33
|
super({
|
|
34
34
|
id: "workbench.action.chat.previousFileTree",
|
|
35
|
-
title: ( localize2(
|
|
35
|
+
title: ( localize2(4809, "Previous File Tree")),
|
|
36
36
|
keybinding: {
|
|
37
37
|
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.F9,
|
|
38
38
|
weight: KeybindingWeight.WorkbenchContrib,
|
|
@@ -16,7 +16,7 @@ import { revive } from '@codingame/monaco-vscode-api/vscode/vs/base/common/marsh
|
|
|
16
16
|
|
|
17
17
|
const defaultFileName = "chat.json";
|
|
18
18
|
const filters = [{
|
|
19
|
-
name: ( localize(
|
|
19
|
+
name: ( localize(4810, "Chat Session")),
|
|
20
20
|
extensions: ["json"]
|
|
21
21
|
}];
|
|
22
22
|
function registerChatExportActions() {
|
|
@@ -25,7 +25,7 @@ function registerChatExportActions() {
|
|
|
25
25
|
super({
|
|
26
26
|
id: "workbench.action.chat.export",
|
|
27
27
|
category: CHAT_CATEGORY,
|
|
28
|
-
title: ( localize2(
|
|
28
|
+
title: ( localize2(4811, "Export Chat...")),
|
|
29
29
|
precondition: ChatContextKeys.enabled,
|
|
30
30
|
f1: true
|
|
31
31
|
});
|
|
@@ -62,7 +62,7 @@ function registerChatExportActions() {
|
|
|
62
62
|
constructor() {
|
|
63
63
|
super({
|
|
64
64
|
id: "workbench.action.chat.import",
|
|
65
|
-
title: ( localize2(
|
|
65
|
+
title: ( localize2(4812, "Import Chat...")),
|
|
66
66
|
category: CHAT_CATEGORY,
|
|
67
67
|
precondition: ChatContextKeys.enabled,
|
|
68
68
|
f1: true
|