summaryrefslogtreecommitdiff
path: root/server/continuedev/plugins/context_providers/terminal.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/continuedev/plugins/context_providers/terminal.py')
-rw-r--r--server/continuedev/plugins/context_providers/terminal.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/server/continuedev/plugins/context_providers/terminal.py b/server/continuedev/plugins/context_providers/terminal.py
new file mode 100644
index 00000000..c63239e4
--- /dev/null
+++ b/server/continuedev/plugins/context_providers/terminal.py
@@ -0,0 +1,49 @@
+from typing import Any, Coroutine, List
+
+from pydantic import Field
+
+from ...core.context import ContextProvider
+from ...core.main import ChatMessage, ContextItem, ContextItemDescription, ContextItemId
+
+
+class TerminalContextProvider(ContextProvider):
+ """Type '@terminal' to reference the contents of your IDE's terminal."""
+
+ title = "terminal"
+ display_title = "Terminal"
+ description = "Reference the contents of the terminal"
+ dynamic = True
+
+ get_last_n_commands: int = Field(
+ 3, description="The number of previous commands to reference"
+ )
+
+ def _terminal_context_item(self, content: str = ""):
+ return ContextItem(
+ content=content,
+ description=ContextItemDescription(
+ name="Terminal",
+ description="Reference the contents of the VS Code terminal",
+ id=ContextItemId(provider_title=self.title, item_id=self.title),
+ ),
+ )
+
+ async def get_chat_messages(self) -> Coroutine[Any, Any, List[ChatMessage]]:
+ msgs = await super().get_chat_messages()
+ for msg in msgs:
+ msg.summary = msg.content[-1000:]
+ return msgs
+
+ async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]:
+ return [self._terminal_context_item()]
+
+ async def get_item(self, id: ContextItemId, query: str) -> ContextItem:
+ if not id.provider_title == self.title:
+ raise Exception("Invalid provider title for item")
+
+ terminal_contents = await self.sdk.ide.getTerminalContents(
+ self.get_last_n_commands
+ )
+ terminal_contents = terminal_contents[-5000:]
+
+ return self._terminal_context_item(terminal_contents)