Skip to content
10 changes: 10 additions & 0 deletions core/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1865,6 +1865,16 @@ export interface CompiledMessagesResult {
contextPercentage: number;
}

export interface AddToChatPayload {
data: AddToChatPayloadItem[];
}

interface AddToChatPayloadItem {
type: "file" | "folder";
fullPath: string;
name: string;
}

export interface MessageOption {
precompiled: boolean;
}
Expand Down
2 changes: 2 additions & 0 deletions core/protocol/ideWebview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { ToWebviewFromIdeOrCoreProtocol } from "./webview";

import {
AcceptOrRejectDiffPayload,
AddToChatPayload,
ApplyState,
ApplyToFilePayload,
HighlightedCodePayload,
Expand Down Expand Up @@ -78,4 +79,5 @@ export type ToWebviewFromIdeProtocol = ToWebviewFromIdeOrCoreProtocol & {
exitEditMode: [undefined, void];
focusEdit: [undefined, void];
generateRule: [undefined, void];
addToChat: [AddToChatPayload, void];
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.github.continuedev.continueintellijextension.actions

import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.vfs.VirtualFile

fun AnActionEvent.getSelectedFiles(): Array<out VirtualFile> {
val multipleFiles = this.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY)
if (multipleFiles != null) {
return multipleFiles
}

return this.getData(CommonDataKeys.VIRTUAL_FILE)?.let { arrayOf(it) } ?: emptyArray()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.github.continuedev.continueintellijextension.actions

import com.github.continuedev.continueintellijextension.browser.ContinueBrowserService.Companion.getBrowser
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent

class AddToChatAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
val browser = e.project?.getBrowser() ?: return
val selectedFiles = e.getSelectedFiles()

val requestData = selectedFiles.map { vFile ->
val type = if (vFile.isDirectory) "folder" else "file"

mapOf(
"type" to type,
"fullPath" to vFile.url,
"name" to vFile.name,
)
}
val requestParams = mapOf(
"data" to requestData
)

browser.sendToWebview("addToChat", requestParams)
}

override fun update(e: AnActionEvent) {
val files = e.getSelectedFiles()

val isAvailable = files.isNotEmpty()

e.presentation.isVisible = isAvailable
}

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
}
7 changes: 7 additions & 0 deletions extensions/intellij/src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -181,5 +181,12 @@
<add-to-group group-id="EditorPopupMenu"/>
<override-text place="GoToAction" text="Continue: Add Highlighted Code to Context and Clear Chat"/>
</action>
<group id="ContinueProjectViewPopUpMenuGroup" popup="true" text="Continue" icon="/icons/continue.svg">
<action id="com.github.continuedev.continueintellijextension.actions.AddToChatAction"
class="com.github.continuedev.continueintellijextension.actions.AddToChatAction"
text="Add to Chat">
</action>
<add-to-group group-id="ProjectViewPopupMenu" anchor="last"/>
</group>
</actions>
</idea-plugin>
Original file line number Diff line number Diff line change
Expand Up @@ -198,4 +198,29 @@ export function useMainEditorWebviewListeners({
},
[editor, activeContextProviders, isInEdit, useCurrentFileAsContext],
);

useWebviewListener(
"addToChat",
async (data) => {
if (!editor) return;
let chain = editor.chain();

for (let mention of data.data) {
chain
.insertContent({
type: "mention",
attrs: {
id: mention.fullPath,
query: mention.fullPath,
itemType: mention.type,
label: mention.name,
},
})
.insertContent(" ");
}

chain.run();
},
[editor],
);
}
Loading