diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-07-31 00:07:47 -0700 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-07-31 00:07:47 -0700 |
commit | fc77dd52708d2a28cc6f138c5f0ee390b6d71a3f (patch) | |
tree | e0fe04351404c33a4299e2e7b2d36511d24d321b /continuedev/src | |
parent | 396679009fef21e13c1a6095212d1bd68e7f2a86 (diff) | |
parent | 8bd76be6c0925e0d5e5f6d239e9c6907df3cfd23 (diff) | |
download | sncontinue-fc77dd52708d2a28cc6f138c5f0ee390b6d71a3f.tar.gz sncontinue-fc77dd52708d2a28cc6f138c5f0ee390b6d71a3f.tar.bz2 sncontinue-fc77dd52708d2a28cc6f138c5f0ee390b6d71a3f.zip |
Merge branch 'main' into at-embed
Diffstat (limited to 'continuedev/src')
7 files changed, 59 insertions, 10 deletions
diff --git a/continuedev/src/continuedev/core/autopilot.py b/continuedev/src/continuedev/core/autopilot.py index 12339f9b..5ab5f8ae 100644 --- a/continuedev/src/continuedev/core/autopilot.py +++ b/continuedev/src/continuedev/core/autopilot.py @@ -77,7 +77,8 @@ class Autopilot(ContinueBaseModel): HighlightedCodeContextProvider(ide=self.ide), FileContextProvider(workspace_dir=self.ide.workspace_directory) ]) - await self.context_manager.load_index() + + await self.context_manager.load_index(self.ide.workspace_directory) class Config: arbitrary_types_allowed = True diff --git a/continuedev/src/continuedev/core/context.py b/continuedev/src/continuedev/core/context.py index 78a747b2..86522ce1 100644 --- a/continuedev/src/continuedev/core/context.py +++ b/continuedev/src/continuedev/core/context.py @@ -35,7 +35,7 @@ class ContextProvider(BaseModel): return self.selected_items @abstractmethod - async def provide_context_items(self) -> List[ContextItem]: + async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: """ Provide documents for search index. This is run on startup. @@ -159,9 +159,9 @@ class ContextManager: return cls(context_providers) - async def load_index(self): + async def load_index(self, workspace_dir: str): for _, provider in self.context_providers.items(): - context_items = await provider.provide_context_items() + context_items = await provider.provide_context_items(workspace_dir) documents = [ { "id": item.description.id.to_string(), diff --git a/continuedev/src/continuedev/plugins/context_providers/file.py b/continuedev/src/continuedev/plugins/context_providers/file.py index c85a87a2..31aa5423 100644 --- a/continuedev/src/continuedev/plugins/context_providers/file.py +++ b/continuedev/src/continuedev/plugins/context_providers/file.py @@ -50,13 +50,12 @@ class FileContextProvider(ContextProvider): """ title = "file" - workspace_dir: str ignore_patterns: List[str] = DEFAULT_IGNORE_DIRS + \ list(filter(lambda d: f"**/{d}", DEFAULT_IGNORE_DIRS)) - async def provide_context_items(self) -> List[ContextItem]: + async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: filepaths = [] - for root, dir_names, file_names in os.walk(self.workspace_dir): + for root, dir_names, file_names in os.walk(workspace_dir): dir_names[:] = [d for d in dir_names if not any( fnmatch(d, pattern) for pattern in self.ignore_patterns)] for file_name in file_names: diff --git a/continuedev/src/continuedev/plugins/context_providers/filetree.py b/continuedev/src/continuedev/plugins/context_providers/filetree.py new file mode 100644 index 00000000..c7b4806b --- /dev/null +++ b/continuedev/src/continuedev/plugins/context_providers/filetree.py @@ -0,0 +1,49 @@ +import json +from typing import List +import os +import aiohttp + +from ...core.main import ContextItem, ContextItemDescription, ContextItemId +from ...core.context import ContextProvider + + +def format_file_tree(startpath) -> str: + result = "" + for root, dirs, files in os.walk(startpath): + level = root.replace(startpath, '').count(os.sep) + indent = ' ' * 4 * (level) + result += '{}{}/'.format(indent, os.path.basename(root)) + "\n" + subindent = ' ' * 4 * (level + 1) + for f in files: + result += '{}{}'.format(subindent, f) + "\n" + + return result + + +class FileTreeContextProvider(ContextProvider): + title = "tree" + + workspace_dir: str = None + + def _filetree_context_item(self): + return ContextItem( + content=format_file_tree(self.workspace_dir), + description=ContextItemDescription( + name="File Tree", + description="Add a formatted file tree of this directory to the context", + id=ContextItemId( + provider_title=self.title, + item_id=self.title + ) + ) + ) + + async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: + self.workspace_dir = workspace_dir + return [self._filetree_context_item()] + + async def get_item(self, id: ContextItemId, query: str) -> ContextItem: + if not id.item_id == self.title: + raise Exception("Invalid item id") + + return self._filetree_context_item() diff --git a/continuedev/src/continuedev/plugins/context_providers/github.py b/continuedev/src/continuedev/plugins/context_providers/github.py index 765a534d..2e7047f2 100644 --- a/continuedev/src/continuedev/plugins/context_providers/github.py +++ b/continuedev/src/continuedev/plugins/context_providers/github.py @@ -15,7 +15,7 @@ class GitHubIssuesContextProvider(ContextProvider): repo_name: str auth_token: str - async def provide_context_items(self) -> List[ContextItem]: + async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: auth = Auth.Token(self.auth_token) gh = Github(auth=auth) diff --git a/continuedev/src/continuedev/plugins/context_providers/google.py b/continuedev/src/continuedev/plugins/context_providers/google.py index 4ad7c4a1..4b0a59ec 100644 --- a/continuedev/src/continuedev/plugins/context_providers/google.py +++ b/continuedev/src/continuedev/plugins/context_providers/google.py @@ -43,7 +43,7 @@ class GoogleContextProvider(ContextProvider): async with session.post(url, headers=headers, data=payload) as response: return await response.text() - async def provide_context_items(self) -> List[ContextItem]: + async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: return [self.BASE_CONTEXT_ITEM] async def get_item(self, id: ContextItemId, query: str, _) -> ContextItem: diff --git a/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py b/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py index 664e705e..acd40dc7 100644 --- a/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py +++ b/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py @@ -96,7 +96,7 @@ class HighlightedCodeContextProvider(ContextProvider): hr.item.description.name = self._rif_to_name( hr.rif, display_filename=basename) - async def provide_context_items(self) -> List[ContextItem]: + async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: return [] async def get_item(self, id: ContextItemId, query: str) -> ContextItem: |