Add Copilot preference for a chat's custom instructions loading (from all projects or from referenced projects only)#136
Conversation
7c28fcc to
8c9cc48
Compare
|
Hi @iloveeclipse, |
There was a problem hiding this comment.
Pull request overview
This PR adds a new chat preference to control how project-level Copilot custom instructions are scoped when starting a chat, so Eclipse can avoid loading unrelated projects’ instruction files and reduce the prompt bloat behind issue #62.
Changes:
- Added a persisted
CustomInstructionsChatLoadScopepreference with UI labels/defaults for chat instruction loading. - Derived workspace folders from selected/current resources in
ChatViewand threaded that list into conversation creation. - Added enum/helper tests and
ResourceUtilscoverage for workspace-folder derivation.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/utils/ResourceUtils.java |
Adds helper to derive distinct accessible workspace folders from selected resources. |
com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/preferences/messages.properties |
Adds user-facing labels for the new chat instruction scope preference. |
com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/preferences/Messages.java |
Exposes new NLS message keys. |
com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/preferences/CustomInstructionPreferencePage.java |
Adds the new combo box to the preferences UI and persists the selection. |
com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/preferences/CopilotPreferenceInitializer.java |
Sets the default chat instruction scope preference. |
com.microsoft.copilot.eclipse.ui/src/com/microsoft/copilot/eclipse/ui/chat/ChatView.java |
Derives scoped workspace folders before creating a new conversation. |
com.microsoft.copilot.eclipse.ui.test/src/com/microsoft/copilot/eclipse/ui/utils/ResourceUtilsTest.java |
Adds tests for workspace-folder derivation behavior. |
com.microsoft.copilot.eclipse.ui.test/META-INF/MANIFEST.MF |
Adds JUnit params dependency for new parameterized tests. |
com.microsoft.copilot.eclipse.core/src/com/microsoft/copilot/eclipse/core/lsp/CopilotLanguageServerConnection.java |
Adds a createConversation overload that accepts scoped workspace folders. |
com.microsoft.copilot.eclipse.core/src/com/microsoft/copilot/eclipse/core/Constants.java |
Defines the new preference key and enum values/default. |
com.microsoft.copilot.eclipse.core.test/src/com/microsoft/copilot/eclipse/core/CustomInstructionsChatLoadScopeTest.java |
Adds enum serialization/deserialization tests. |
| List<WorkspaceFolder> workspaceFolders = deriveWorkspaceFolders(currentFile, references); | ||
| CompletableFuture<ChatCreateResult> createConversationFuture = null; | ||
| if (StringUtils.isBlank(agentSlug)) { | ||
| createConversationFuture = ls.createConversation(workDoneToken, processedMessage, references, currentFile, | ||
| currentSelection, turns, activeModel, chatModeName, customChatModeId, todosToRestore, null, null); | ||
| currentSelection, turns, activeModel, chatModeName, customChatModeId, todosToRestore, null, null, | ||
| workspaceFolders); |
Correct. |
f90fdfc to
6728703
Compare
|
Hi @iloveeclipse,
I've adapted the code to retrieve custom instructions from selected files on each conversation turn, i.e. each time a new prompt is sent to the LS. |
| private static String getCustomInstrLoadScopeLabel(CustomInstructionsChatLoadScope scope) { | ||
| // the cases here must relate to SCOPE_ORDER array | ||
| return switch (scope) { | ||
| case ALL_PROJECTS -> Messages.preferences_page_custom_instructions_chat_load_scope_all; |
There was a problem hiding this comment.
How about making the item label simpler, for example, just All Projects & Referenced Projects, and show the detailed text as their tooltip?
There was a problem hiding this comment.
I checked that, but it seems, we can only add a single tooltip to the drop-down list, not to each entry. Besides, the combobox has enough space for longer text. What about adding an explaining tooltip to the combobox like that

and leaving relatively long, self-explaining drown-down list entries like that?

| } | ||
| return switch (scope) { | ||
| // take all projects from Eclipse workspace | ||
| case ALL_PROJECTS -> LSPEclipseUtils.getWorkspaceFolders(); |
There was a problem hiding this comment.
As this is a UI package, you can use WorkspaceUtils.listWorkspaceFolders() instead.
There was a problem hiding this comment.
I've checked the code and there is a significant difference between using LSPEclipseUtils.getWorkspaceFolders() and WorkspaceUtils.listWorkspaceFolders():
LSPEclipseUtils.getWorkspaceFolders()takes all accessible projects from the Eclipse workspaceWorkspaceUtils.listWorkspaceFolders()takes only top-level accessible projects from the Eclipse workspace, no nested projects (Maybe the method should be renamed tolistTopLevelWorkspaceFolders()to make that clear?)
Nested projects could also have custom instructions that we should take into account here, don't we?
6728703 to
cf9a3ce
Compare
cf9a3ce to
66a07f1
Compare
This PR fixes issue #62 according to the comment #62 (comment)
The PR
CopilotLanguageServerConnection), i.e.Preference page preview (new group highlighted):
