summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-09-05 12:11:47 -0700
committerNate Sesti <sestinj@gmail.com>2023-09-05 12:11:47 -0700
commit011877c09e88ffcc715defc33e5c74c71ccc8aea (patch)
tree882190b64109a6ed38e64c14782de763d5c90bf2
parent7b6eac3ae8b60b88c9c504daa6f24bef1f18be8e (diff)
downloadsncontinue-011877c09e88ffcc715defc33e5c74c71ccc8aea.tar.gz
sncontinue-011877c09e88ffcc715defc33e5c74c71ccc8aea.tar.bz2
sncontinue-011877c09e88ffcc715defc33e5c74c71ccc8aea.zip
feat: :sparkles: /cmd slash command
-rw-r--r--continuedev/src/continuedev/libs/constants/default_config.py8
-rw-r--r--continuedev/src/continuedev/libs/llm/__init__.py2
-rw-r--r--continuedev/src/continuedev/plugins/context_providers/file.py2
-rw-r--r--continuedev/src/continuedev/plugins/steps/cmd.py30
-rw-r--r--extension/src/continueIdeClient.ts4
5 files changed, 41 insertions, 5 deletions
diff --git a/continuedev/src/continuedev/libs/constants/default_config.py b/continuedev/src/continuedev/libs/constants/default_config.py
index 76d66c02..c197680d 100644
--- a/continuedev/src/continuedev/libs/constants/default_config.py
+++ b/continuedev/src/continuedev/libs/constants/default_config.py
@@ -16,6 +16,7 @@ from continuedev.src.continuedev.plugins.steps.feedback import FeedbackStep
from continuedev.src.continuedev.plugins.steps.comment_code import CommentCodeStep
from continuedev.src.continuedev.plugins.steps.share_session import ShareSessionStep
from continuedev.src.continuedev.plugins.steps.main import EditHighlightedCodeStep
+from continuedev.src.continuedev.plugins.steps.cmd import GenerateShellCommandStep
from continuedev.src.continuedev.plugins.context_providers.search import SearchContextProvider
from continuedev.src.continuedev.plugins.context_providers.diff import DiffContextProvider
from continuedev.src.continuedev.plugins.context_providers.url import URLContextProvider
@@ -66,7 +67,12 @@ config = ContinueConfig(
name="share",
description="Download and share the session transcript",
step=ShareSessionStep,
- )
+ ),
+ SlashCommand(
+ name="cmd",
+ description="Generate a shell command",
+ step=GenerateShellCommandStep,
+ ),
],
context_providers=[
# GitHubIssuesContextProvider(
diff --git a/continuedev/src/continuedev/libs/llm/__init__.py b/continuedev/src/continuedev/libs/llm/__init__.py
index 90176be4..dcb0d2ef 100644
--- a/continuedev/src/continuedev/libs/llm/__init__.py
+++ b/continuedev/src/continuedev/libs/llm/__init__.py
@@ -185,7 +185,7 @@ class LLM(ContinueBaseModel):
stop: Optional[List[str]] = None,
max_tokens: Optional[int] = None,
functions: Optional[List[Any]] = None,
- ) -> Coroutine[Any, Any, str]:
+ ) -> str:
"""Yield completion response, either streamed or not."""
options = CompletionOptions(
model=model or self.model,
diff --git a/continuedev/src/continuedev/plugins/context_providers/file.py b/continuedev/src/continuedev/plugins/context_providers/file.py
index 06d22348..a824a44d 100644
--- a/continuedev/src/continuedev/plugins/context_providers/file.py
+++ b/continuedev/src/continuedev/plugins/context_providers/file.py
@@ -8,7 +8,7 @@ from ...core.sdk import ContinueSDK
from ...libs.util.filter_files import DEFAULT_IGNORE_PATTERNS
from .util import remove_meilisearch_disallowed_chars
-MAX_SIZE_IN_CHARS = 25_000
+MAX_SIZE_IN_CHARS = 50_000
async def get_file_contents(filepath: str, sdk: ContinueSDK) -> str:
diff --git a/continuedev/src/continuedev/plugins/steps/cmd.py b/continuedev/src/continuedev/plugins/steps/cmd.py
new file mode 100644
index 00000000..a38f6323
--- /dev/null
+++ b/continuedev/src/continuedev/plugins/steps/cmd.py
@@ -0,0 +1,30 @@
+from textwrap import dedent
+from typing import Coroutine
+
+from ...core.main import Step
+from ...core.observation import Observation
+from ...core.sdk import ContinueSDK
+from ...libs.util.strings import remove_quotes_and_escapes
+
+
+class GenerateShellCommandStep(Step):
+ user_input: str
+
+ async def run(self, sdk: ContinueSDK) -> Coroutine[Observation, None, None]:
+ cmd = await sdk.models.default.complete(
+ dedent(
+ f"""\
+ The user has made a request to run a shell command. Their description of what it should do is:
+
+ "{self.user_input}"
+
+ Please write a shell command that will do what the user requested. Your output should consist of only the command itself, without any explanation or example output. Do not use any newlines. Only output the command that when inserted into the terminal will do precisely what was requested.
+ """
+ )
+ )
+
+ cmd = remove_quotes_and_escapes(cmd.strip()).replace("\n", "").replace("\r", "")
+
+ await sdk.ide.runCommand(cmd)
+
+ self.description = f"Generated shell command: {cmd}"
diff --git a/extension/src/continueIdeClient.ts b/extension/src/continueIdeClient.ts
index 582caa53..48000b76 100644
--- a/extension/src/continueIdeClient.ts
+++ b/extension/src/continueIdeClient.ts
@@ -700,11 +700,11 @@ class IdeProtocolClient {
async runCommand(command: string) {
if (vscode.window.terminals.length) {
- vscode.window.terminals[0].sendText(command);
+ vscode.window.terminals[0].sendText(command, false);
} else {
const terminal = vscode.window.createTerminal();
terminal.show();
- terminal.sendText(command);
+ terminal.sendText(command, false);
}
}