summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/launch.json3
-rw-r--r--CONTRIBUTING.md49
-rw-r--r--continuedev/poetry.lock38
-rw-r--r--continuedev/pyproject.toml1
-rw-r--r--continuedev/requirements.txt5
-rw-r--r--continuedev/src/continuedev/core/sdk.py2
-rw-r--r--continuedev/src/continuedev/libs/constants/default_config.py10
-rw-r--r--continuedev/src/continuedev/libs/llm/__init__.py3
-rw-r--r--continuedev/src/continuedev/libs/llm/replicate.py63
-rw-r--r--continuedev/src/continuedev/plugins/context_providers/url.py34
-rw-r--r--continuedev/src/continuedev/plugins/policies/default.py3
-rw-r--r--continuedev/src/continuedev/plugins/steps/core/core.py4
-rw-r--r--continuedev/src/continuedev/plugins/steps/share_session.py51
-rw-r--r--docs/docs/customization.md25
-rw-r--r--extension/CONTRIBUTING.md (renamed from extension/DEV_README.md)20
-rw-r--r--extension/README.md15
-rw-r--r--extension/package-lock.json4
-rw-r--r--extension/package.json7
-rw-r--r--extension/react-app/src/components/Layout.tsx2
-rw-r--r--extension/react-app/src/redux/slices/serverStateReducer.ts3
-rw-r--r--extension/react-app/src/redux/store.ts2
-rw-r--r--extension/scripts/typegen.js15
-rw-r--r--extension/src/activation/environmentSetup.ts16
-rw-r--r--extension/src/debugPanel.ts4
-rw-r--r--extension/src/util/util.ts9
-rw-r--r--run.spec2
-rw-r--r--schema/json/ContextItem.json150
-rw-r--r--schema/json/FileEdit.json124
-rw-r--r--schema/json/FileEditWithFullContents.json158
-rw-r--r--schema/json/FullState.json642
-rw-r--r--schema/json/History.json320
-rw-r--r--schema/json/HistoryNode.json276
-rw-r--r--schema/json/Position.json46
-rw-r--r--schema/json/Range.json80
-rw-r--r--schema/json/RangeInFile.json114
-rw-r--r--schema/json/SessionInfo.json56
-rw-r--r--schema/json/Traceback.json124
-rw-r--r--schema/json/TracebackFrame.json64
38 files changed, 1388 insertions, 1156 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 75ee1f7a..702544fe 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -44,6 +44,7 @@
"args": [
// Pass a directory to manually test in
"${workspaceFolder}/extension/manual-testing-sandbox",
+ "${workspaceFolder}/extension/manual-testing-sandbox/example.ts",
"--extensionDevelopmentPath=${workspaceFolder}/extension",
],
"outFiles": [
@@ -51,7 +52,7 @@
],
"preLaunchTask": "vscode-extension:build",
"env": {
- "CONTINUE_SERVER_URL": "http://localhost:8001"
+ "CONTINUE_SERVER_URL": "http://localhost:65432"
}
},
// Has to be run after starting the server (separately or using the compound configuration)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 50d694f4..d0ea7556 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,23 +2,25 @@
## Table of Contents
-- [❤️ Ways to Contribute](#%EF%B8%8F-ways-to-contribute)
+- [Contributing to Continue](#contributing-to-continue)
+ - [Table of Contents](#table-of-contents)
+- [❤️ Ways to Contribute](#️-ways-to-contribute)
- [🐛 Report Bugs](#-report-bugs)
- [✨ Suggest Enhancements](#-suggest-enhancements)
- [📖 Updating / Improving Documentation](#-updating--improving-documentation)
- [🧑‍💻 Contributing Code](#-contributing-code)
- - [Setup Development Environment](#setting-up-the-development-environment)
+ - [Environment Setup](#environment-setup)
- [Writing Steps](#writing-steps)
- [Writing Context Providers](#writing-context-providers)
-- [📐 Continue Architecture](#-continue-architecture)
- - [Continue VS Code Client](#continue-vs-code-client)
- - [Continue IDE Websockets Protocol](#continue-ide-websockets-protocol)
- - [Continue GUI Websockets Protocol](#continue-gui-websockets-protocol)
-- [❇️ Core Concepts](#%EF%B8%8F-core-concepts)
- - [Step](#step)
- - [Autopilot](#autopilot)
- - [Observation](#observation)
- - [Policy](#policy)
+ - [📐 Continue Architecture](#-continue-architecture)
+ - [Continue VS Code Client](#continue-vs-code-client)
+ - [Continue IDE Websockets Protocol](#continue-ide-websockets-protocol)
+ - [Continue GUI Websockets Protocol](#continue-gui-websockets-protocol)
+ - [❇️ Core Concepts](#️-core-concepts)
+ - [`Step`](#step)
+ - [`Autopilot`](#autopilot)
+ - [`Observation`](#observation)
+ - [`Policy`](#policy)
# ❤️ Ways to Contribute
@@ -50,17 +52,28 @@ Continue is continuously improving, but a feature isn't complete until it is ref
## 🧑‍💻 Contributing Code
-### Setting up the Development Environment
+### Environment Setup
-There are different levels of setup necessary depending on which part of Continue you are developing. For all of them, first clone the repo:
+VSCode is assumed for development as Continue is primarily a VSCode tool at the moment. Most of the setup and running is automated through VSCode tasks and launch configurations.
-```bash
-git clone https://github.com/continuedev/continue
-```
+1. Clone and open in VSCode the Continue repo `https://github.com/continuedev/continue`
-If editing only the server (`/continuedev` directory), see the directions in [continuedev/README.md](./continuedev/README.md) to set up the Python server. Once it is running on localhost:8001, you can connect your existing VS Code extension by going to VS Code settings, searching for "Continue: Server URL", and setting it to "http://localhost:8001".
+2. Open VSCode command pallet (`cmd+shift+p`) and select `Tasks: Run Task` and then select `install-all-dependencies`
-If editing the VS Code extension (`/extension` directory) or GUI (`/extension/react-app`), you can follow the instructions in [`extension/DEV_README.md`](./extension/DEV_README.md) to set up the VS Code extension and GUI in development mode.
+3. Start debugging:
+ 1. Switch to Run and Debug view
+ 2. Select `Server + Extension (VSCode)` from drop down
+ 3. Hit play button
+ 4. This will start both the server and the extension in debug mode and open a new VSCode window with continue extension
+ 1. I call the VSCode window with the extension the *Host VSCode*
+ 2. The window you started debugging from is reffered to as the *Main VSCode*
+ 5. Notice 2 debug sessions are running, one for the server and one for the extension, you can also set breakpoints in both
+
+4. Lets try using breakpoints:
+ 1. *In Main VSCode*:
+ 1. Search for `class IdeProtocolServer` and set a breakpoint in `handle_json`, this is the method invoked on every message received from the extension related to selection changes, file opens etc
+ 2. Search for a method `sendHighlightedCode` and set a breakpoint in it, it is invoked on every selection change on the extension side
+ 2. *In Host VSCode*: Select part of the `example.ts` file, your breakpoint should be hit. If you hit play at this point (or F5) you should see the original breakpoint hit again - congratulations, you debugged an end to end interaction from the extension to the server!
### Writing Steps
diff --git a/continuedev/poetry.lock b/continuedev/poetry.lock
index 3754d121..d3140756 100644
--- a/continuedev/poetry.lock
+++ b/continuedev/poetry.lock
@@ -907,13 +907,13 @@ files = [
[[package]]
name = "openai"
-version = "0.27.6"
+version = "0.27.8"
description = "Python client library for the OpenAI API"
optional = false
python-versions = ">=3.7.1"
files = [
- {file = "openai-0.27.6-py3-none-any.whl", hash = "sha256:1f07ed06f1cfc6c25126107193726fe4cf476edcc4e1485cd9eb708f068f2606"},
- {file = "openai-0.27.6.tar.gz", hash = "sha256:63ca9f6ac619daef8c1ddec6d987fe6aa1c87a9bfdce31ff253204d077222375"},
+ {file = "openai-0.27.8-py3-none-any.whl", hash = "sha256:e0a7c2f7da26bdbe5354b03c6d4b82a2f34bd4458c7a17ae1a7092c3e397e03c"},
+ {file = "openai-0.27.8.tar.gz", hash = "sha256:2483095c7db1eee274cebac79e315a986c4e55207bb4fa7b82d185b3a2ed9536"},
]
[package.dependencies]
@@ -928,6 +928,17 @@ embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "
wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"]
[[package]]
+name = "packaging"
+version = "23.1"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
+ {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
+]
+
+[[package]]
name = "pkgutil-resolve-name"
version = "1.3.10"
description = "Resolve a name to an object."
@@ -1275,6 +1286,25 @@ files = [
]
[[package]]
+name = "replicate"
+version = "0.11.0"
+description = "Python client for Replicate"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "replicate-0.11.0-py3-none-any.whl", hash = "sha256:fbb8815068864dc822cd4fa7b6103d6f4089d6ef122abd6c3441ca0f0f110c46"},
+ {file = "replicate-0.11.0.tar.gz", hash = "sha256:4d54b5838c1552a6f76cc37c3af8d9a7998105382082d672acad31636ad443b5"},
+]
+
+[package.dependencies]
+packaging = "*"
+pydantic = ">1"
+requests = ">2"
+
+[package.extras]
+dev = ["black", "mypy", "pytest", "responses", "ruff"]
+
+[[package]]
name = "requests"
version = "2.29.0"
description = "Python HTTP for Humans."
@@ -1819,4 +1849,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
[metadata]
lock-version = "2.0"
python-versions = "^3.8.1"
-content-hash = "19ea56d05ab21d19f2fee6f837f7c8915ca1c597c392a539f43010dd0a4f6a78"
+content-hash = "5500ea86b06a96f5fe45939500936911e622043a67a3a5c3d02473463ff2fd6c"
diff --git a/continuedev/pyproject.toml b/continuedev/pyproject.toml
index a3c058bd..90ff0572 100644
--- a/continuedev/pyproject.toml
+++ b/continuedev/pyproject.toml
@@ -30,6 +30,7 @@ meilisearch-python-async = "^1.4.8"
socksio = "^1.0.0"
ripgrepy = "^2.0.0"
bs4 = "^0.0.1"
+replicate = "^0.11.0"
[tool.poetry.scripts]
typegen = "src.continuedev.models.generate_json_schema:main"
diff --git a/continuedev/requirements.txt b/continuedev/requirements.txt
index a7e40fed..9d541de9 100644
--- a/continuedev/requirements.txt
+++ b/continuedev/requirements.txt
@@ -7,7 +7,7 @@ uvicorn==0.21.1
python-dotenv==1.0.0
nest-asyncio==1.5.6
websockets==11.0.2
-urllib3==1.25.11 # Locked to this version per: https://github.com/Significant-Gravitas/Auto-GPT/issues/1909
+urllib3==1.26.15
posthog==3.0.1
tiktoken==0.4.0
jsonref==1.1.0
@@ -19,4 +19,5 @@ psutil==5.9.5
pygithub==1.59.0
meilisearch-python-async==1.4.8
socksio==1.0.0
-ripgrepy==2.0.0 \ No newline at end of file
+ripgrepy==2.0.0
+replicate==0.11.0 \ No newline at end of file
diff --git a/continuedev/src/continuedev/core/sdk.py b/continuedev/src/continuedev/core/sdk.py
index 0fa9d3a6..024d5cea 100644
--- a/continuedev/src/continuedev/core/sdk.py
+++ b/continuedev/src/continuedev/core/sdk.py
@@ -55,7 +55,7 @@ class ContinueSDK(AbstractContinueSDK):
formatted_err = '\n'.join(traceback.format_exception(e))
msg_step = MessageStep(
name="Invalid Continue Config File", message=formatted_err)
- msg_step.description = f"Falling back to default config settings.\n```\n{formatted_err}\n```\n\nIt's possible this error was caused by an update to the Continue config format. If you'd like to see the new recommended default `config.py`, check [here](https://github.com/continuedev/continue/blob/main/continuedev/src/continuedev/libs/constants/default_config.py)."
+ msg_step.description = f"Falling back to default config settings due to the following error in `~/.continue/config.py`.\n```\n{formatted_err}\n```\n\nIt's possible this was caused by an update to the Continue config format. If you'd like to see the new recommended default `config.py`, check [here](https://github.com/continuedev/continue/blob/main/continuedev/src/continuedev/libs/constants/default_config.py)."
sdk.history.add_node(HistoryNode(
step=msg_step,
observation=None,
diff --git a/continuedev/src/continuedev/libs/constants/default_config.py b/continuedev/src/continuedev/libs/constants/default_config.py
index dbd2c8eb..e2b033b7 100644
--- a/continuedev/src/continuedev/libs/constants/default_config.py
+++ b/continuedev/src/continuedev/libs/constants/default_config.py
@@ -20,9 +20,11 @@ from continuedev.src.continuedev.plugins.steps.open_config import OpenConfigStep
from continuedev.src.continuedev.plugins.steps.clear_history import ClearHistoryStep
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.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
class CommitMessageStep(Step):
\"\"\"
@@ -108,6 +110,11 @@ config = ContinueConfig(
name="clear",
description="Clear step history",
step=ClearHistoryStep,
+ ),
+ SlashCommand(
+ name="share",
+ description="Download and share the session transcript",
+ step=ShareSessionStep,
)
],
@@ -124,7 +131,8 @@ config = ContinueConfig(
# serper_api_key="<your serper.dev api key>"
# )
SearchContextProvider(),
- DiffContextProvider()
+ DiffContextProvider(),
+ URLContextProvider()
],
# Policies hold the main logic that decides which Step to take next
diff --git a/continuedev/src/continuedev/libs/llm/__init__.py b/continuedev/src/continuedev/libs/llm/__init__.py
index 40edb99b..70c67856 100644
--- a/continuedev/src/continuedev/libs/llm/__init__.py
+++ b/continuedev/src/continuedev/libs/llm/__init__.py
@@ -12,6 +12,9 @@ class LLM(ContinueBaseModel, ABC):
system_message: Optional[str] = None
+ class Config:
+ arbitrary_types_allowed = True
+
@abstractproperty
def name(self):
"""Return the name of the LLM."""
diff --git a/continuedev/src/continuedev/libs/llm/replicate.py b/continuedev/src/continuedev/libs/llm/replicate.py
new file mode 100644
index 00000000..235fd906
--- /dev/null
+++ b/continuedev/src/continuedev/libs/llm/replicate.py
@@ -0,0 +1,63 @@
+from abc import abstractproperty
+from typing import List, Optional
+import replicate
+import concurrent.futures
+
+from ..util.count_tokens import DEFAULT_ARGS, count_tokens
+from ...core.main import ChatMessage
+from . import LLM
+
+
+class ReplicateLLM(LLM):
+ api_key: str
+ model: str = "nateraw/stablecode-completion-alpha-3b-4k:e82ebe958f0a5be6846d1a82041925767edb1d1f162596c643e48fbea332b1bb"
+ max_context_length: int = 2048
+
+ _client: replicate.Client = None
+
+ @property
+ def name(self):
+ return self.model
+
+ @property
+ def context_length(self):
+ return self.max_context_length
+
+ @property
+ def default_args(self):
+ return {**DEFAULT_ARGS, "model": self.name, "max_tokens": 1024}
+
+ def count_tokens(self, text: str):
+ return count_tokens(self.name, text)
+
+ async def start(self):
+ self._client = replicate.Client(api_token=self.api_key)
+
+ async def stop(self):
+ pass
+
+ async def complete(self, prompt: str, with_history: List[ChatMessage] = None, **kwargs):
+ def helper():
+ output = self._client.run(self.model, input={"message": prompt})
+ completion = ''
+ for item in output:
+ completion += item
+
+ return completion
+
+ with concurrent.futures.ThreadPoolExecutor() as executor:
+ future = executor.submit(helper)
+ completion = future.result()
+
+ return completion
+
+ async def stream_complete(self, prompt, with_history: List[ChatMessage] = None, **kwargs):
+ for item in self._client.run(self.model, input={"message": prompt}):
+ yield item
+
+ async def stream_chat(self, messages: List[ChatMessage] = None, **kwargs):
+ for item in self._client.run(self.model, input={"message": messages[-1].content}):
+ yield {
+ "content": item,
+ "role": "assistant"
+ }
diff --git a/continuedev/src/continuedev/plugins/context_providers/url.py b/continuedev/src/continuedev/plugins/context_providers/url.py
index 9274d84a..32c1d69c 100644
--- a/continuedev/src/continuedev/plugins/context_providers/url.py
+++ b/continuedev/src/continuedev/plugins/context_providers/url.py
@@ -1,4 +1,4 @@
-from typing import List
+from typing import List, Optional
from .util import remove_meilisearch_disallowed_chars
from ...core.main import ContextItem, ContextItemDescription, ContextItemId
@@ -8,9 +8,25 @@ from ...core.context import ContextProvider
class URLContextProvider(ContextProvider):
title = "url"
+ url: Optional[str] = None
+ display_name: Optional[str] = None
URL_CONTEXT_ITEM_ID = "url"
@property
+ def optional_url_item_id(self) -> str:
+ return remove_meilisearch_disallowed_chars(self.url)
+
+ @property
+ def optional_url_item(self) -> ContextItem:
+ cp = self.BASE_CONTEXT_ITEM.copy()
+ if self.display_name:
+ cp.description.name = self.display_name
+ cp.description.description = f"Contents of {self.url}"
+ cp.description.id.item_id = self.optional_url_item_id
+
+ return cp
+
+ @property
def BASE_CONTEXT_ITEM(self):
return ContextItem(
content="",
@@ -33,14 +49,22 @@ class URLContextProvider(ContextProvider):
return soup.get_text()
async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]:
- return [self.BASE_CONTEXT_ITEM]
+ items = [self.BASE_CONTEXT_ITEM]
+ if self.url:
+ items.append(self.optional_url_item)
+
+ return items
async def get_item(self, id: ContextItemId, query: str) -> ContextItem:
+ if id.item_id == self.optional_url_item_id:
+ item = self.optional_url_item
+ item.content = self._get_url_text_contents(self.url)
+ return item
+
if not id.item_id == self.URL_CONTEXT_ITEM_ID:
raise Exception("Invalid item id")
- query = query.lstrip("url ")
- url = query.strip()
+ url = query.lstrip("url ").strip()
content = self._get_url_text_contents(url)
ctx_item = self.BASE_CONTEXT_ITEM.copy()
@@ -48,5 +72,5 @@ class URLContextProvider(ContextProvider):
ctx_item.description.name = url.replace(
"https://", "").replace("http://", "")
ctx_item.description.id.item_id = remove_meilisearch_disallowed_chars(
- query)
+ url)
return ctx_item
diff --git a/continuedev/src/continuedev/plugins/policies/default.py b/continuedev/src/continuedev/plugins/policies/default.py
index 0d74fa3f..2382f33a 100644
--- a/continuedev/src/continuedev/plugins/policies/default.py
+++ b/continuedev/src/continuedev/plugins/policies/default.py
@@ -56,7 +56,8 @@ class DefaultPolicy(Policy):
MessageStep(name="Welcome to Continue", message=dedent("""\
- Highlight code section and ask a question or give instructions
- Use `cmd+m` (Mac) / `ctrl+m` (Windows) to open Continue
- - Use `/help` to ask questions about how to use Continue""")) >>
+ - Use `/help` to ask questions about how to use Continue
+ - [Customize Continue](https://continue.dev/docs/customization) (e.g. use your own API key) by typing '/config'.""")) >>
WelcomeStep() >>
StepsOnStartupStep())
diff --git a/continuedev/src/continuedev/plugins/steps/core/core.py b/continuedev/src/continuedev/plugins/steps/core/core.py
index 4476c7ae..78174bf6 100644
--- a/continuedev/src/continuedev/plugins/steps/core/core.py
+++ b/continuedev/src/continuedev/plugins/steps/core/core.py
@@ -10,6 +10,7 @@ import difflib
from pydantic import validator
from ....libs.llm.ggml import GGML
+# from ....libs.llm.replicate import ReplicateLLM
from ....models.main import Range
from ....libs.llm.maybe_proxy_openai import MaybeProxyOpenAI
from ....models.filesystem_edit import EditDiff, FileEdit, FileEditWithFullContents, FileSystemEdit
@@ -512,6 +513,9 @@ Please output the code to be inserted at the cursor in order to fulfill the user
if isinstance(model_to_use, GGML):
messages = [ChatMessage(
role="user", content=f"```\n{rif.contents}\n```\n\nUser request: \"{self.user_input}\"\n\nThis is the code after changing to perfectly comply with the user request. It does not include any placeholder code, only real implementations:\n\n```\n", summary=self.user_input)]
+ # elif isinstance(model_to_use, ReplicateLLM):
+ # messages = [ChatMessage(
+ # role="user", content=f"// Previous implementation\n\n{rif.contents}\n\n// Updated implementation (after following directions: {self.user_input})\n\n", summary=self.user_input)]
generator = model_to_use.stream_chat(
messages, temperature=sdk.config.temperature, max_tokens=max_tokens)
diff --git a/continuedev/src/continuedev/plugins/steps/share_session.py b/continuedev/src/continuedev/plugins/steps/share_session.py
new file mode 100644
index 00000000..de8659bd
--- /dev/null
+++ b/continuedev/src/continuedev/plugins/steps/share_session.py
@@ -0,0 +1,51 @@
+import json
+import os
+import time
+from typing import Optional
+
+
+from ...core.sdk import ContinueSDK
+from ...core.main import Step, FullState
+from ...libs.util.paths import getSessionFilePath, getGlobalFolderPath
+from ...server.session_manager import session_manager
+
+
+class ShareSessionStep(Step):
+
+ session_id: Optional[str] = None
+
+ async def run(self, sdk: ContinueSDK):
+ if self.session_id is None:
+ self.session_id = sdk.ide.session_id
+
+ await session_manager.persist_session(self.session_id)
+ time.sleep(0.5)
+
+ # Load the session data and format as a markdown file
+ session_filepath = getSessionFilePath(self.session_id)
+ with open(session_filepath, 'r') as f:
+ session_state = FullState(**json.load(f))
+
+ import datetime
+ date_created = datetime.datetime.fromtimestamp(
+ float(session_state.session_info.date_created)).strftime('%Y-%m-%d %H:%M:%S')
+ content = f"This is a session transcript from [Continue](https://continue.dev) on {date_created}.\n\n"
+
+ for node in session_state.history.timeline[:-2]:
+ if node.step.hide:
+ continue # ay
+
+ content += f"## {node.step.name}\n"
+ content += f"{node.step.description}\n\n"
+
+ # Save to a markdown file
+ save_filepath = os.path.join(
+ getGlobalFolderPath(), f"{session_state.session_info.title}.md")
+
+ with open(save_filepath, 'w') as f:
+ f.write(content)
+
+ # Open the file
+ await sdk.ide.setFileOpen(save_filepath)
+
+ self.description = f"The session transcript has been saved to a markdown file at {save_filepath}."
diff --git a/docs/docs/customization.md b/docs/docs/customization.md
index cfee1e65..ac3f04f5 100644
--- a/docs/docs/customization.md
+++ b/docs/docs/customization.md
@@ -89,14 +89,35 @@ from continuedev.src.continuedev.libs.llm.ggml import GGML
config = ContinueConfig(
...
models=Models(
- default=GGML(max_context_length=2048, server_url="http://localhost:8000")
+ default=GGML(
+ max_context_length=2048,
+ server_url="http://localhost:8000")
)
)
```
+### Replicate (beta)
+
+Replicate is a great option for newly released language models or models that you've deployed through their platform. Sign up for an account [here](https://replicate.ai/), copy your API key, and then select any model from the [Replicate Streaming List](https://replicate.com/collections/streaming-language-models). Change the config file to look like this:
+
+```python
+from continuedev.src.continuedev.libs.llm.replicate import ReplicateLLM
+
+config = ContinueConfig(
+ ...
+ models=Models(
+ default=ReplicateLLM(
+ model="stablecode-completion-alpha-3b-4k",
+ api_key="my-replicate-api-key")
+ )
+)
+```
+
+If you don't specify the `model` parameter, it will default to `stablecode-completion-alpha-3b-4k`.
+
### Self-hosting an open-source model
-If you want to self-host on Colab, RunPod, Replicate, HuggingFace, Haven, or another hosting provider you will need to wire up a new LLM class. It only needs to implement 3 primary methods: `stream_complete`, `complete`, and `stream_chat`, and you can see examples in `continuedev/src/continuedev/libs/llm`.
+If you want to self-host on Colab, RunPod, HuggingFace, Haven, or another hosting provider you will need to wire up a new LLM class. It only needs to implement 3 primary methods: `stream_complete`, `complete`, and `stream_chat`, and you can see examples in `continuedev/src/continuedev/libs/llm`.
If by chance the provider has the exact same API interface as OpenAI, the `GGML` class will work for you out of the box, after changing the endpoint at the top of the file.
diff --git a/extension/DEV_README.md b/extension/CONTRIBUTING.md
index 3ad9cf68..953b5e48 100644
--- a/extension/DEV_README.md
+++ b/extension/CONTRIBUTING.md
@@ -6,25 +6,13 @@ This is the Continue VS Code Extension. Its primary jobs are
2. Open the Continue React app in a side panel. The React app's source code lives in the `react-app` directory. The panel is opened by the `continue.openContinueGUI` command, as defined in `src/commands.ts`.
3. Run a Continue server in the background, which connects to both the IDE protocol and the React app. The server is launched in `src/activation/environmentSetup.ts` by calling Python code that lives in `server/` (unless extension settings define a server URL other than localhost:65432, in which case the extension will just connect to that).
-## How to debug the VS Code Extension
+# How to run the extension
-1. Clone the Continue repo
+See [Environment Setup](../CONTRIBUTING.md#environment-setup)
-2. Open a VS Code window with the `continue` directory as your workspace
+# How to run and debug tests
-3. Package and then start the FastAPI server by following instructions outlined in the `Continue Server` section of the `continuedev/README.md`
-
-4. Open a VS Code window with the `extension` directory as your workspace
-
-5. Run `npm run package`
-
-6. Open `src/activation/activate.ts` file (or any TypeScript file)
-
-7. Press `F5` on your keyboard to start `Run and Debug` mode
-
-8. `cmd+shift+p` to look at developer console and select Continue commands
-
-9. Every time you make changes to the code, you need to run `npm run esbuild` unless you make changes inside of `react-app` and then you need to run `npm run build` from there
+After following the setup in [Environment Setup](../CONTRIBUTING.md#environment-setup) you can run `npm run test` in the command line or the `Server + Tests (VSCode)` launch configuration in VS Code to debug tests + server.
## Notes
diff --git a/extension/README.md b/extension/README.md
index 69bcb1f9..4a2d7892 100644
--- a/extension/README.md
+++ b/extension/README.md
@@ -1,9 +1,22 @@
-# Continue
+<h1 align="center">Continue</h1>
+
+<div align="center">
**[Continue](https://continue.dev/docs) is the open-source autopilot for software development—a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Continue.continue) that brings the power of ChatGPT to your IDE**
+</div>
+
+<div align="center">
+
+[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
+<a target="_blank" href="https://discord.gg/vapESyrFmJ" style="background:none">
+<img src="https://img.shields.io/badge/discord-join-continue.svg?labelColor=191937&color=6F6FF7&logo=discord" />
+</a>
+
![Editing with Continue](https://github.com/continuedev/continue/blob/main/readme.gif?raw=true)
+</div>
+
## Task, not tab, auto-complete
### Get possible explainations
diff --git a/extension/package-lock.json b/extension/package-lock.json
index 9a1baa8e..6f7d32b2 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "continue",
- "version": "0.0.282",
+ "version": "0.0.296",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "continue",
- "version": "0.0.282",
+ "version": "0.0.296",
"license": "Apache-2.0",
"dependencies": {
"@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index c059fb60..93b6e944 100644
--- a/extension/package.json
+++ b/extension/package.json
@@ -14,7 +14,7 @@
"displayName": "Continue",
"pricing": "Free",
"description": "The open-source coding autopilot",
- "version": "0.0.282",
+ "version": "0.0.296",
"publisher": "Continue",
"engines": {
"vscode": "^1.67.0"
@@ -183,19 +183,18 @@
]
},
"scripts": {
- "esbuild-base": "rm -rf ./out && node esbuild.mjs",
+ "esbuild-base": "node esbuild.mjs",
"vscode:prepublish": "npm run esbuild-base -- --minify",
"esbuild": "npm run esbuild-base -- --sourcemap",
"esbuild-watch": "npm run esbuild-base -- --sourcemap --watch",
"tsc": "tsc -p ./",
"tsc-watch": "tsc -watch -p ./",
"typegen": "node scripts/typegen.js",
- "clientgen": "rm -rf src/client/ && npx @openapitools/openapi-generator-cli generate -i ../schema/openapi.json -g typescript-fetch -o src/client/ --additional-properties=supportsES6=true,npmVersion=8.19.2,typescriptThreePlus=true",
"rebuild": "electron-rebuild -v 19.1.8 node-pty",
"lint": "eslint src --ext ts",
"build-test": "tsc && node esbuild.test.mjs",
"test": "npm run build-test && node ./out/test-runner/runTestOnVSCodeHost.js",
- "package": "npm install && npm run typegen && npm run clientgen && cd react-app && npm install && npm run build && cd .. && mkdir -p ./build && vsce package --out ./build"
+ "package": "npm install && npm run typegen && cd react-app && npm install && npm run build && cd .. && mkdir -p ./build && vsce package --out ./build"
},
"devDependencies": {
"@nestjs/common": "^8.4.7",
diff --git a/extension/react-app/src/components/Layout.tsx b/extension/react-app/src/components/Layout.tsx
index a2e54173..a3b1946a 100644
--- a/extension/react-app/src/components/Layout.tsx
+++ b/extension/react-app/src/components/Layout.tsx
@@ -46,7 +46,7 @@ const BottomMessageDiv = styled.div<{ displayOnBottom: boolean }>`
padding: 12px;
z-index: 100;
box-shadow: 0px 0px 2px 0px ${vscForeground};
- max-height: 50vh;
+ max-height: 35vh;
overflow: scroll;
`;
diff --git a/extension/react-app/src/redux/slices/serverStateReducer.ts b/extension/react-app/src/redux/slices/serverStateReducer.ts
index 22f6935e..bd60f1c7 100644
--- a/extension/react-app/src/redux/slices/serverStateReducer.ts
+++ b/extension/react-app/src/redux/slices/serverStateReducer.ts
@@ -10,7 +10,8 @@ const initialState: FullState = {
hide: false,
description: `- Highlight code section and ask a question or give instructions
- Use \`cmd+m\` (Mac) / \`ctrl+m\` (Windows) to open Continue
- - Use \`/help\` to ask questions about how to use Continue`,
+ - Use \`/help\` to ask questions about how to use Continue
+ - [Customize Continue](https://continue.dev/docs/customization) (e.g. use your own API key) by typing '/config'.`,
system_message: null,
chat_context: [],
manage_own_chat_context: false,
diff --git a/extension/react-app/src/redux/store.ts b/extension/react-app/src/redux/store.ts
index bd6759e4..7959a067 100644
--- a/extension/react-app/src/redux/store.ts
+++ b/extension/react-app/src/redux/store.ts
@@ -3,8 +3,8 @@ import chatReducer from "./slices/chatSlice";
import configReducer from "./slices/configSlice";
import miscReducer from "./slices/miscSlice";
import uiStateReducer from "./slices/uiStateSlice";
-import { RangeInFile } from "../../../src/client";
import { FullState } from "../../../schema/FullState";
+import { RangeInFile } from "../../../schema/RangeInFile";
import serverStateReducer from "./slices/serverStateReducer";
export interface ChatMessage {
diff --git a/extension/scripts/typegen.js b/extension/scripts/typegen.js
index 0bbff19e..793eb08d 100644
--- a/extension/scripts/typegen.js
+++ b/extension/scripts/typegen.js
@@ -4,7 +4,7 @@ const { compile } = require("json-schema-to-typescript");
function generateTypesForFile(inputPath, outputPath) {
let schema = JSON.parse(fs.readFileSync(inputPath, "utf8"));
- let name = (inputPath.split("/").pop() || inputPath).split(".")[0];
+ let name = path.parse(path.basename(inputPath)).name;
// This is to solve the issue of json-schema-to-typescript not supporting $ref at the top-level, which is what Pydantic generates for recursive types
if ("$ref" in schema) {
let temp = schema["$ref"];
@@ -46,8 +46,15 @@ function deleteAllInDir(dir) {
});
}
-OUTPUT_DIR = "schema";
-INPUT_DIR = "../schema/json";
+const OUTPUT_DIR = path.join("schema");
+const INPUT_DIR = path.join("..", "schema", "json");
+if (!fs.existsSync(INPUT_DIR)) {
+ throw new Error(`Input directory does not exist: ${INPUT_DIR}`);
+}
+
+if (!fs.existsSync(OUTPUT_DIR)) {
+ throw new Error(`Output directory does not exist: ${OUTPUT_DIR}`);
+}
deleteAllInDir(OUTPUT_DIR);
-generateAllSchemas(INPUT_DIR, OUTPUT_DIR);
+generateAllSchemas(INPUT_DIR, OUTPUT_DIR); \ No newline at end of file
diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts
index 81d58afe..f0e41ca9 100644
--- a/extension/src/activation/environmentSetup.ts
+++ b/extension/src/activation/environmentSetup.ts
@@ -237,8 +237,13 @@ export async function startContinuePythonServer() {
};
try {
const child = spawn(destination, {
- detached: true,
- stdio: "ignore",
+ windowsHide: true,
+ });
+ child.stdout.on("data", (data: any) => {
+ console.log(`stdout: ${data}`);
+ });
+ child.stderr.on("data", (data: any) => {
+ console.log(`stderr: ${data}`);
});
child.on("error", (err: any) => {
if (attempts < maxAttempts) {
@@ -247,7 +252,12 @@ export async function startContinuePythonServer() {
console.error("Failed to start subprocess.", err);
}
});
- child.unref();
+ child.on("exit", (code: any, signal: any) => {
+ console.log("Subprocess exited with code", code, signal);
+ });
+ child.on("close", (code: any, signal: any) => {
+ console.log("Subprocess closed with code", code, signal);
+ });
} catch (e: any) {
console.log("Error starting server:", e);
retry();
diff --git a/extension/src/debugPanel.ts b/extension/src/debugPanel.ts
index 6fb633ea..dbec45ea 100644
--- a/extension/src/debugPanel.ts
+++ b/extension/src/debugPanel.ts
@@ -5,7 +5,7 @@ import {
getNonce,
openEditorAndRevealRange,
} from "./util/vscode";
-import { RangeInFile } from "./client";
+import { RangeInFile } from "../schema/RangeInFile";
import { setFocusedOnContinueInput } from "./commands";
const WebSocket = require("ws");
@@ -112,7 +112,7 @@ export function setupDebugPanel(
}
const rangeInFile: RangeInFile = {
- range: e.selections[0],
+ range: e.selections[0] as any,
filepath: e.textEditor.document.fileName,
};
const filesystem = {
diff --git a/extension/src/util/util.ts b/extension/src/util/util.ts
index dfc10c90..15b34267 100644
--- a/extension/src/util/util.ts
+++ b/extension/src/util/util.ts
@@ -1,4 +1,4 @@
-import { RangeInFile, SerializedDebugContext } from "../client";
+import { RangeInFile } from "../../schema/RangeInFile";
import * as fs from "fs";
const os = require("os");
@@ -95,13 +95,6 @@ export function codeSelectionsToVirtualFileSystem(
return virtualFileSystem;
}
-export function addFileSystemToDebugContext(
- ctx: SerializedDebugContext
-): SerializedDebugContext {
- ctx.filesystem = codeSelectionsToVirtualFileSystem(ctx.rangesInFiles);
- return ctx;
-}
-
export function debounced(delay: number, fn: Function) {
let timerId: NodeJS.Timeout | null;
return function (...args: any[]) {
diff --git a/run.spec b/run.spec
index 3bb46c73..f7b2d3a3 100644
--- a/run.spec
+++ b/run.spec
@@ -12,7 +12,7 @@ a = Analysis(
('continuedev', 'continuedev'),
(certifi.where(), 'ca_bundle')
],
- hiddenimports=['anthropic', 'github', 'ripgrepy'],
+ hiddenimports=['anthropic', 'github', 'ripgrepy', 'bs4'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
diff --git a/schema/json/ContextItem.json b/schema/json/ContextItem.json
index 32a214d3..67dfcadc 100644
--- a/schema/json/ContextItem.json
+++ b/schema/json/ContextItem.json
@@ -1,76 +1,76 @@
-{
- "title": "ContextItem",
- "$ref": "#/definitions/src__continuedev__core__main__ContextItem",
- "definitions": {
- "ContextItemId": {
- "title": "ContextItemId",
- "description": "A ContextItemId is a unique identifier for a ContextItem.",
- "type": "object",
- "properties": {
- "provider_title": {
- "title": "Provider Title",
- "type": "string"
- },
- "item_id": {
- "title": "Item Id",
- "type": "string"
- }
- },
- "required": [
- "provider_title",
- "item_id"
- ]
- },
- "ContextItemDescription": {
- "title": "ContextItemDescription",
- "description": "A ContextItemDescription is a description of a ContextItem that is displayed to the user when they type '@'.\n\nThe id can be used to retrieve the ContextItem from the ContextManager.",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "description": {
- "title": "Description",
- "type": "string"
- },
- "id": {
- "$ref": "#/definitions/ContextItemId"
- }
- },
- "required": [
- "name",
- "description",
- "id"
- ]
- },
- "src__continuedev__core__main__ContextItem": {
- "title": "ContextItem",
- "description": "A ContextItem is a single item that is stored in the ContextManager.",
- "type": "object",
- "properties": {
- "description": {
- "$ref": "#/definitions/ContextItemDescription"
- },
- "content": {
- "title": "Content",
- "type": "string"
- },
- "editing": {
- "title": "Editing",
- "default": false,
- "type": "boolean"
- },
- "editable": {
- "title": "Editable",
- "default": false,
- "type": "boolean"
- }
- },
- "required": [
- "description",
- "content"
- ]
- }
- }
+{
+ "title": "ContextItem",
+ "$ref": "#/definitions/src__continuedev__core__main__ContextItem",
+ "definitions": {
+ "ContextItemId": {
+ "title": "ContextItemId",
+ "description": "A ContextItemId is a unique identifier for a ContextItem.",
+ "type": "object",
+ "properties": {
+ "provider_title": {
+ "title": "Provider Title",
+ "type": "string"
+ },
+ "item_id": {
+ "title": "Item Id",
+ "type": "string"
+ }
+ },
+ "required": [
+ "provider_title",
+ "item_id"
+ ]
+ },
+ "ContextItemDescription": {
+ "title": "ContextItemDescription",
+ "description": "A ContextItemDescription is a description of a ContextItem that is displayed to the user when they type '@'.\n\nThe id can be used to retrieve the ContextItem from the ContextManager.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/definitions/ContextItemId"
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "id"
+ ]
+ },
+ "src__continuedev__core__main__ContextItem": {
+ "title": "ContextItem",
+ "description": "A ContextItem is a single item that is stored in the ContextManager.",
+ "type": "object",
+ "properties": {
+ "description": {
+ "$ref": "#/definitions/ContextItemDescription"
+ },
+ "content": {
+ "title": "Content",
+ "type": "string"
+ },
+ "editing": {
+ "title": "Editing",
+ "default": false,
+ "type": "boolean"
+ },
+ "editable": {
+ "title": "Editable",
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "description",
+ "content"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/FileEdit.json b/schema/json/FileEdit.json
index 011e0462..4247c096 100644
--- a/schema/json/FileEdit.json
+++ b/schema/json/FileEdit.json
@@ -1,63 +1,63 @@
-{
- "title": "FileEdit",
- "$ref": "#/definitions/src__continuedev__models__filesystem_edit__FileEdit",
- "definitions": {
- "Position": {
- "title": "Position",
- "type": "object",
- "properties": {
- "line": {
- "title": "Line",
- "type": "integer"
- },
- "character": {
- "title": "Character",
- "type": "integer"
- }
- },
- "required": [
- "line",
- "character"
- ]
- },
- "Range": {
- "title": "Range",
- "description": "A range in a file. 0-indexed.",
- "type": "object",
- "properties": {
- "start": {
- "$ref": "#/definitions/Position"
- },
- "end": {
- "$ref": "#/definitions/Position"
- }
- },
- "required": [
- "start",
- "end"
- ]
- },
- "src__continuedev__models__filesystem_edit__FileEdit": {
- "title": "FileEdit",
- "type": "object",
- "properties": {
- "filepath": {
- "title": "Filepath",
- "type": "string"
- },
- "range": {
- "$ref": "#/definitions/Range"
- },
- "replacement": {
- "title": "Replacement",
- "type": "string"
- }
- },
- "required": [
- "filepath",
- "range",
- "replacement"
- ]
- }
- }
+{
+ "title": "FileEdit",
+ "$ref": "#/definitions/src__continuedev__models__filesystem_edit__FileEdit",
+ "definitions": {
+ "Position": {
+ "title": "Position",
+ "type": "object",
+ "properties": {
+ "line": {
+ "title": "Line",
+ "type": "integer"
+ },
+ "character": {
+ "title": "Character",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "line",
+ "character"
+ ]
+ },
+ "Range": {
+ "title": "Range",
+ "description": "A range in a file. 0-indexed.",
+ "type": "object",
+ "properties": {
+ "start": {
+ "$ref": "#/definitions/Position"
+ },
+ "end": {
+ "$ref": "#/definitions/Position"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ]
+ },
+ "src__continuedev__models__filesystem_edit__FileEdit": {
+ "title": "FileEdit",
+ "type": "object",
+ "properties": {
+ "filepath": {
+ "title": "Filepath",
+ "type": "string"
+ },
+ "range": {
+ "$ref": "#/definitions/Range"
+ },
+ "replacement": {
+ "title": "Replacement",
+ "type": "string"
+ }
+ },
+ "required": [
+ "filepath",
+ "range",
+ "replacement"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/FileEditWithFullContents.json b/schema/json/FileEditWithFullContents.json
index 2ea75bab..8394af17 100644
--- a/schema/json/FileEditWithFullContents.json
+++ b/schema/json/FileEditWithFullContents.json
@@ -1,80 +1,80 @@
-{
- "title": "FileEditWithFullContents",
- "$ref": "#/definitions/src__continuedev__models__filesystem_edit__FileEditWithFullContents",
- "definitions": {
- "Position": {
- "title": "Position",
- "type": "object",
- "properties": {
- "line": {
- "title": "Line",
- "type": "integer"
- },
- "character": {
- "title": "Character",
- "type": "integer"
- }
- },
- "required": [
- "line",
- "character"
- ]
- },
- "Range": {
- "title": "Range",
- "description": "A range in a file. 0-indexed.",
- "type": "object",
- "properties": {
- "start": {
- "$ref": "#/definitions/Position"
- },
- "end": {
- "$ref": "#/definitions/Position"
- }
- },
- "required": [
- "start",
- "end"
- ]
- },
- "FileEdit": {
- "title": "FileEdit",
- "type": "object",
- "properties": {
- "filepath": {
- "title": "Filepath",
- "type": "string"
- },
- "range": {
- "$ref": "#/definitions/Range"
- },
- "replacement": {
- "title": "Replacement",
- "type": "string"
- }
- },
- "required": [
- "filepath",
- "range",
- "replacement"
- ]
- },
- "src__continuedev__models__filesystem_edit__FileEditWithFullContents": {
- "title": "FileEditWithFullContents",
- "type": "object",
- "properties": {
- "fileEdit": {
- "$ref": "#/definitions/FileEdit"
- },
- "fileContents": {
- "title": "Filecontents",
- "type": "string"
- }
- },
- "required": [
- "fileEdit",
- "fileContents"
- ]
- }
- }
+{
+ "title": "FileEditWithFullContents",
+ "$ref": "#/definitions/src__continuedev__models__filesystem_edit__FileEditWithFullContents",
+ "definitions": {
+ "Position": {
+ "title": "Position",
+ "type": "object",
+ "properties": {
+ "line": {
+ "title": "Line",
+ "type": "integer"
+ },
+ "character": {
+ "title": "Character",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "line",
+ "character"
+ ]
+ },
+ "Range": {
+ "title": "Range",
+ "description": "A range in a file. 0-indexed.",
+ "type": "object",
+ "properties": {
+ "start": {
+ "$ref": "#/definitions/Position"
+ },
+ "end": {
+ "$ref": "#/definitions/Position"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ]
+ },
+ "FileEdit": {
+ "title": "FileEdit",
+ "type": "object",
+ "properties": {
+ "filepath": {
+ "title": "Filepath",
+ "type": "string"
+ },
+ "range": {
+ "$ref": "#/definitions/Range"
+ },
+ "replacement": {
+ "title": "Replacement",
+ "type": "string"
+ }
+ },
+ "required": [
+ "filepath",
+ "range",
+ "replacement"
+ ]
+ },
+ "src__continuedev__models__filesystem_edit__FileEditWithFullContents": {
+ "title": "FileEditWithFullContents",
+ "type": "object",
+ "properties": {
+ "fileEdit": {
+ "$ref": "#/definitions/FileEdit"
+ },
+ "fileContents": {
+ "title": "Filecontents",
+ "type": "string"
+ }
+ },
+ "required": [
+ "fileEdit",
+ "fileContents"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/FullState.json b/schema/json/FullState.json
index b11ebfe1..707b03db 100644
--- a/schema/json/FullState.json
+++ b/schema/json/FullState.json
@@ -1,322 +1,322 @@
-{
- "title": "FullState",
- "$ref": "#/definitions/src__continuedev__core__main__FullState",
- "definitions": {
- "FunctionCall": {
- "title": "FunctionCall",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "arguments": {
- "title": "Arguments",
- "type": "string"
- }
- },
- "required": [
- "name",
- "arguments"
- ]
- },
- "ChatMessage": {
- "title": "ChatMessage",
- "type": "object",
- "properties": {
- "role": {
- "title": "Role",
- "enum": [
- "assistant",
- "user",
- "system",
- "function"
- ],
- "type": "string"
- },
- "content": {
- "title": "Content",
- "type": "string"
- },
- "name": {
- "title": "Name",
- "type": "string"
- },
- "summary": {
- "title": "Summary",
- "type": "string"
- },
- "function_call": {
- "$ref": "#/definitions/FunctionCall"
- }
- },
- "required": [
- "role",
- "summary"
- ]
- },
- "Step": {
- "title": "Step",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "hide": {
- "title": "Hide",
- "default": false,
- "type": "boolean"
- },
- "description": {
- "title": "Description",
- "type": "string"
- },
- "system_message": {
- "title": "System Message",
- "type": "string"
- },
- "chat_context": {
- "title": "Chat Context",
- "default": [],
- "type": "array",
- "items": {
- "$ref": "#/definitions/ChatMessage"
- }
- },
- "manage_own_chat_context": {
- "title": "Manage Own Chat Context",
- "default": false,
- "type": "boolean"
- }
- }
- },
- "Observation": {
- "title": "Observation",
- "type": "object",
- "properties": {}
- },
- "HistoryNode": {
- "title": "HistoryNode",
- "description": "A point in history, a list of which make up History",
- "type": "object",
- "properties": {
- "step": {
- "$ref": "#/definitions/Step"
- },
- "observation": {
- "$ref": "#/definitions/Observation"
- },
- "depth": {
- "title": "Depth",
- "type": "integer"
- },
- "deleted": {
- "title": "Deleted",
- "default": false,
- "type": "boolean"
- },
- "active": {
- "title": "Active",
- "default": true,
- "type": "boolean"
- },
- "logs": {
- "title": "Logs",
- "default": [],
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "required": [
- "step",
- "depth"
- ]
- },
- "History": {
- "title": "History",
- "description": "A history of steps taken and their results",
- "type": "object",
- "properties": {
- "timeline": {
- "title": "Timeline",
- "type": "array",
- "items": {
- "$ref": "#/definitions/HistoryNode"
- }
- },
- "current_index": {
- "title": "Current Index",
- "type": "integer"
- }
- },
- "required": [
- "timeline",
- "current_index"
- ]
- },
- "SlashCommandDescription": {
- "title": "SlashCommandDescription",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "description": {
- "title": "Description",
- "type": "string"
- }
- },
- "required": [
- "name",
- "description"
- ]
- },
- "ContextItemId": {
- "title": "ContextItemId",
- "description": "A ContextItemId is a unique identifier for a ContextItem.",
- "type": "object",
- "properties": {
- "provider_title": {
- "title": "Provider Title",
- "type": "string"
- },
- "item_id": {
- "title": "Item Id",
- "type": "string"
- }
- },
- "required": [
- "provider_title",
- "item_id"
- ]
- },
- "ContextItemDescription": {
- "title": "ContextItemDescription",
- "description": "A ContextItemDescription is a description of a ContextItem that is displayed to the user when they type '@'.\n\nThe id can be used to retrieve the ContextItem from the ContextManager.",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "description": {
- "title": "Description",
- "type": "string"
- },
- "id": {
- "$ref": "#/definitions/ContextItemId"
- }
- },
- "required": [
- "name",
- "description",
- "id"
- ]
- },
- "ContextItem": {
- "title": "ContextItem",
- "description": "A ContextItem is a single item that is stored in the ContextManager.",
- "type": "object",
- "properties": {
- "description": {
- "$ref": "#/definitions/ContextItemDescription"
- },
- "content": {
- "title": "Content",
- "type": "string"
- },
- "editing": {
- "title": "Editing",
- "default": false,
- "type": "boolean"
- },
- "editable": {
- "title": "Editable",
- "default": false,
- "type": "boolean"
- }
- },
- "required": [
- "description",
- "content"
- ]
- },
- "SessionInfo": {
- "title": "SessionInfo",
- "type": "object",
- "properties": {
- "session_id": {
- "title": "Session Id",
- "type": "string"
- },
- "title": {
- "title": "Title",
- "type": "string"
- },
- "date_created": {
- "title": "Date Created",
- "type": "string"
- }
- },
- "required": [
- "session_id",
- "title",
- "date_created"
- ]
- },
- "src__continuedev__core__main__FullState": {
- "title": "FullState",
- "description": "A full state of the program, including the history",
- "type": "object",
- "properties": {
- "history": {
- "$ref": "#/definitions/History"
- },
- "active": {
- "title": "Active",
- "type": "boolean"
- },
- "user_input_queue": {
- "title": "User Input Queue",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "slash_commands": {
- "title": "Slash Commands",
- "type": "array",
- "items": {
- "$ref": "#/definitions/SlashCommandDescription"
- }
- },
- "adding_highlighted_code": {
- "title": "Adding Highlighted Code",
- "type": "boolean"
- },
- "selected_context_items": {
- "title": "Selected Context Items",
- "type": "array",
- "items": {
- "$ref": "#/definitions/ContextItem"
- }
- },
- "session_info": {
- "$ref": "#/definitions/SessionInfo"
- }
- },
- "required": [
- "history",
- "active",
- "user_input_queue",
- "slash_commands",
- "adding_highlighted_code",
- "selected_context_items"
- ]
- }
- }
+{
+ "title": "FullState",
+ "$ref": "#/definitions/src__continuedev__core__main__FullState",
+ "definitions": {
+ "FunctionCall": {
+ "title": "FunctionCall",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "arguments": {
+ "title": "Arguments",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "arguments"
+ ]
+ },
+ "ChatMessage": {
+ "title": "ChatMessage",
+ "type": "object",
+ "properties": {
+ "role": {
+ "title": "Role",
+ "enum": [
+ "assistant",
+ "user",
+ "system",
+ "function"
+ ],
+ "type": "string"
+ },
+ "content": {
+ "title": "Content",
+ "type": "string"
+ },
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "summary": {
+ "title": "Summary",
+ "type": "string"
+ },
+ "function_call": {
+ "$ref": "#/definitions/FunctionCall"
+ }
+ },
+ "required": [
+ "role",
+ "summary"
+ ]
+ },
+ "Step": {
+ "title": "Step",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "hide": {
+ "title": "Hide",
+ "default": false,
+ "type": "boolean"
+ },
+ "description": {
+ "title": "Description",
+ "type": "string"
+ },
+ "system_message": {
+ "title": "System Message",
+ "type": "string"
+ },
+ "chat_context": {
+ "title": "Chat Context",
+ "default": [],
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ChatMessage"
+ }
+ },
+ "manage_own_chat_context": {
+ "title": "Manage Own Chat Context",
+ "default": false,
+ "type": "boolean"
+ }
+ }
+ },
+ "Observation": {
+ "title": "Observation",
+ "type": "object",
+ "properties": {}
+ },
+ "HistoryNode": {
+ "title": "HistoryNode",
+ "description": "A point in history, a list of which make up History",
+ "type": "object",
+ "properties": {
+ "step": {
+ "$ref": "#/definitions/Step"
+ },
+ "observation": {
+ "$ref": "#/definitions/Observation"
+ },
+ "depth": {
+ "title": "Depth",
+ "type": "integer"
+ },
+ "deleted": {
+ "title": "Deleted",
+ "default": false,
+ "type": "boolean"
+ },
+ "active": {
+ "title": "Active",
+ "default": true,
+ "type": "boolean"
+ },
+ "logs": {
+ "title": "Logs",
+ "default": [],
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "step",
+ "depth"
+ ]
+ },
+ "History": {
+ "title": "History",
+ "description": "A history of steps taken and their results",
+ "type": "object",
+ "properties": {
+ "timeline": {
+ "title": "Timeline",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/HistoryNode"
+ }
+ },
+ "current_index": {
+ "title": "Current Index",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "timeline",
+ "current_index"
+ ]
+ },
+ "SlashCommandDescription": {
+ "title": "SlashCommandDescription",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "description"
+ ]
+ },
+ "ContextItemId": {
+ "title": "ContextItemId",
+ "description": "A ContextItemId is a unique identifier for a ContextItem.",
+ "type": "object",
+ "properties": {
+ "provider_title": {
+ "title": "Provider Title",
+ "type": "string"
+ },
+ "item_id": {
+ "title": "Item Id",
+ "type": "string"
+ }
+ },
+ "required": [
+ "provider_title",
+ "item_id"
+ ]
+ },
+ "ContextItemDescription": {
+ "title": "ContextItemDescription",
+ "description": "A ContextItemDescription is a description of a ContextItem that is displayed to the user when they type '@'.\n\nThe id can be used to retrieve the ContextItem from the ContextManager.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "description": {
+ "title": "Description",
+ "type": "string"
+ },
+ "id": {
+ "$ref": "#/definitions/ContextItemId"
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "id"
+ ]
+ },
+ "ContextItem": {
+ "title": "ContextItem",
+ "description": "A ContextItem is a single item that is stored in the ContextManager.",
+ "type": "object",
+ "properties": {
+ "description": {
+ "$ref": "#/definitions/ContextItemDescription"
+ },
+ "content": {
+ "title": "Content",
+ "type": "string"
+ },
+ "editing": {
+ "title": "Editing",
+ "default": false,
+ "type": "boolean"
+ },
+ "editable": {
+ "title": "Editable",
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "description",
+ "content"
+ ]
+ },
+ "SessionInfo": {
+ "title": "SessionInfo",
+ "type": "object",
+ "properties": {
+ "session_id": {
+ "title": "Session Id",
+ "type": "string"
+ },
+ "title": {
+ "title": "Title",
+ "type": "string"
+ },
+ "date_created": {
+ "title": "Date Created",
+ "type": "string"
+ }
+ },
+ "required": [
+ "session_id",
+ "title",
+ "date_created"
+ ]
+ },
+ "src__continuedev__core__main__FullState": {
+ "title": "FullState",
+ "description": "A full state of the program, including the history",
+ "type": "object",
+ "properties": {
+ "history": {
+ "$ref": "#/definitions/History"
+ },
+ "active": {
+ "title": "Active",
+ "type": "boolean"
+ },
+ "user_input_queue": {
+ "title": "User Input Queue",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "slash_commands": {
+ "title": "Slash Commands",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SlashCommandDescription"
+ }
+ },
+ "adding_highlighted_code": {
+ "title": "Adding Highlighted Code",
+ "type": "boolean"
+ },
+ "selected_context_items": {
+ "title": "Selected Context Items",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ContextItem"
+ }
+ },
+ "session_info": {
+ "$ref": "#/definitions/SessionInfo"
+ }
+ },
+ "required": [
+ "history",
+ "active",
+ "user_input_queue",
+ "slash_commands",
+ "adding_highlighted_code",
+ "selected_context_items"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/History.json b/schema/json/History.json
index 56415520..ea97a2e8 100644
--- a/schema/json/History.json
+++ b/schema/json/History.json
@@ -1,161 +1,161 @@
-{
- "title": "History",
- "$ref": "#/definitions/src__continuedev__core__main__History",
- "definitions": {
- "FunctionCall": {
- "title": "FunctionCall",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "arguments": {
- "title": "Arguments",
- "type": "string"
- }
- },
- "required": [
- "name",
- "arguments"
- ]
- },
- "ChatMessage": {
- "title": "ChatMessage",
- "type": "object",
- "properties": {
- "role": {
- "title": "Role",
- "enum": [
- "assistant",
- "user",
- "system",
- "function"
- ],
- "type": "string"
- },
- "content": {
- "title": "Content",
- "type": "string"
- },
- "name": {
- "title": "Name",
- "type": "string"
- },
- "summary": {
- "title": "Summary",
- "type": "string"
- },
- "function_call": {
- "$ref": "#/definitions/FunctionCall"
- }
- },
- "required": [
- "role",
- "summary"
- ]
- },
- "Step": {
- "title": "Step",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "hide": {
- "title": "Hide",
- "default": false,
- "type": "boolean"
- },
- "description": {
- "title": "Description",
- "type": "string"
- },
- "system_message": {
- "title": "System Message",
- "type": "string"
- },
- "chat_context": {
- "title": "Chat Context",
- "default": [],
- "type": "array",
- "items": {
- "$ref": "#/definitions/ChatMessage"
- }
- },
- "manage_own_chat_context": {
- "title": "Manage Own Chat Context",
- "default": false,
- "type": "boolean"
- }
- }
- },
- "Observation": {
- "title": "Observation",
- "type": "object",
- "properties": {}
- },
- "HistoryNode": {
- "title": "HistoryNode",
- "description": "A point in history, a list of which make up History",
- "type": "object",
- "properties": {
- "step": {
- "$ref": "#/definitions/Step"
- },
- "observation": {
- "$ref": "#/definitions/Observation"
- },
- "depth": {
- "title": "Depth",
- "type": "integer"
- },
- "deleted": {
- "title": "Deleted",
- "default": false,
- "type": "boolean"
- },
- "active": {
- "title": "Active",
- "default": true,
- "type": "boolean"
- },
- "logs": {
- "title": "Logs",
- "default": [],
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "required": [
- "step",
- "depth"
- ]
- },
- "src__continuedev__core__main__History": {
- "title": "History",
- "description": "A history of steps taken and their results",
- "type": "object",
- "properties": {
- "timeline": {
- "title": "Timeline",
- "type": "array",
- "items": {
- "$ref": "#/definitions/HistoryNode"
- }
- },
- "current_index": {
- "title": "Current Index",
- "type": "integer"
- }
- },
- "required": [
- "timeline",
- "current_index"
- ]
- }
- }
+{
+ "title": "History",
+ "$ref": "#/definitions/src__continuedev__core__main__History",
+ "definitions": {
+ "FunctionCall": {
+ "title": "FunctionCall",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "arguments": {
+ "title": "Arguments",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "arguments"
+ ]
+ },
+ "ChatMessage": {
+ "title": "ChatMessage",
+ "type": "object",
+ "properties": {
+ "role": {
+ "title": "Role",
+ "enum": [
+ "assistant",
+ "user",
+ "system",
+ "function"
+ ],
+ "type": "string"
+ },
+ "content": {
+ "title": "Content",
+ "type": "string"
+ },
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "summary": {
+ "title": "Summary",
+ "type": "string"
+ },
+ "function_call": {
+ "$ref": "#/definitions/FunctionCall"
+ }
+ },
+ "required": [
+ "role",
+ "summary"
+ ]
+ },
+ "Step": {
+ "title": "Step",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "hide": {
+ "title": "Hide",
+ "default": false,
+ "type": "boolean"
+ },
+ "description": {
+ "title": "Description",
+ "type": "string"
+ },
+ "system_message": {
+ "title": "System Message",
+ "type": "string"
+ },
+ "chat_context": {
+ "title": "Chat Context",
+ "default": [],
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ChatMessage"
+ }
+ },
+ "manage_own_chat_context": {
+ "title": "Manage Own Chat Context",
+ "default": false,
+ "type": "boolean"
+ }
+ }
+ },
+ "Observation": {
+ "title": "Observation",
+ "type": "object",
+ "properties": {}
+ },
+ "HistoryNode": {
+ "title": "HistoryNode",
+ "description": "A point in history, a list of which make up History",
+ "type": "object",
+ "properties": {
+ "step": {
+ "$ref": "#/definitions/Step"
+ },
+ "observation": {
+ "$ref": "#/definitions/Observation"
+ },
+ "depth": {
+ "title": "Depth",
+ "type": "integer"
+ },
+ "deleted": {
+ "title": "Deleted",
+ "default": false,
+ "type": "boolean"
+ },
+ "active": {
+ "title": "Active",
+ "default": true,
+ "type": "boolean"
+ },
+ "logs": {
+ "title": "Logs",
+ "default": [],
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "step",
+ "depth"
+ ]
+ },
+ "src__continuedev__core__main__History": {
+ "title": "History",
+ "description": "A history of steps taken and their results",
+ "type": "object",
+ "properties": {
+ "timeline": {
+ "title": "Timeline",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/HistoryNode"
+ }
+ },
+ "current_index": {
+ "title": "Current Index",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "timeline",
+ "current_index"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/HistoryNode.json b/schema/json/HistoryNode.json
index 81e239b3..56ab631a 100644
--- a/schema/json/HistoryNode.json
+++ b/schema/json/HistoryNode.json
@@ -1,139 +1,139 @@
-{
- "title": "HistoryNode",
- "$ref": "#/definitions/src__continuedev__core__main__HistoryNode",
- "definitions": {
- "FunctionCall": {
- "title": "FunctionCall",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "arguments": {
- "title": "Arguments",
- "type": "string"
- }
- },
- "required": [
- "name",
- "arguments"
- ]
- },
- "ChatMessage": {
- "title": "ChatMessage",
- "type": "object",
- "properties": {
- "role": {
- "title": "Role",
- "enum": [
- "assistant",
- "user",
- "system",
- "function"
- ],
- "type": "string"
- },
- "content": {
- "title": "Content",
- "type": "string"
- },
- "name": {
- "title": "Name",
- "type": "string"
- },
- "summary": {
- "title": "Summary",
- "type": "string"
- },
- "function_call": {
- "$ref": "#/definitions/FunctionCall"
- }
- },
- "required": [
- "role",
- "summary"
- ]
- },
- "Step": {
- "title": "Step",
- "type": "object",
- "properties": {
- "name": {
- "title": "Name",
- "type": "string"
- },
- "hide": {
- "title": "Hide",
- "default": false,
- "type": "boolean"
- },
- "description": {
- "title": "Description",
- "type": "string"
- },
- "system_message": {
- "title": "System Message",
- "type": "string"
- },
- "chat_context": {
- "title": "Chat Context",
- "default": [],
- "type": "array",
- "items": {
- "$ref": "#/definitions/ChatMessage"
- }
- },
- "manage_own_chat_context": {
- "title": "Manage Own Chat Context",
- "default": false,
- "type": "boolean"
- }
- }
- },
- "Observation": {
- "title": "Observation",
- "type": "object",
- "properties": {}
- },
- "src__continuedev__core__main__HistoryNode": {
- "title": "HistoryNode",
- "description": "A point in history, a list of which make up History",
- "type": "object",
- "properties": {
- "step": {
- "$ref": "#/definitions/Step"
- },
- "observation": {
- "$ref": "#/definitions/Observation"
- },
- "depth": {
- "title": "Depth",
- "type": "integer"
- },
- "deleted": {
- "title": "Deleted",
- "default": false,
- "type": "boolean"
- },
- "active": {
- "title": "Active",
- "default": true,
- "type": "boolean"
- },
- "logs": {
- "title": "Logs",
- "default": [],
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "required": [
- "step",
- "depth"
- ]
- }
- }
+{
+ "title": "HistoryNode",
+ "$ref": "#/definitions/src__continuedev__core__main__HistoryNode",
+ "definitions": {
+ "FunctionCall": {
+ "title": "FunctionCall",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "arguments": {
+ "title": "Arguments",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "arguments"
+ ]
+ },
+ "ChatMessage": {
+ "title": "ChatMessage",
+ "type": "object",
+ "properties": {
+ "role": {
+ "title": "Role",
+ "enum": [
+ "assistant",
+ "user",
+ "system",
+ "function"
+ ],
+ "type": "string"
+ },
+ "content": {
+ "title": "Content",
+ "type": "string"
+ },
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "summary": {
+ "title": "Summary",
+ "type": "string"
+ },
+ "function_call": {
+ "$ref": "#/definitions/FunctionCall"
+ }
+ },
+ "required": [
+ "role",
+ "summary"
+ ]
+ },
+ "Step": {
+ "title": "Step",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "type": "string"
+ },
+ "hide": {
+ "title": "Hide",
+ "default": false,
+ "type": "boolean"
+ },
+ "description": {
+ "title": "Description",
+ "type": "string"
+ },
+ "system_message": {
+ "title": "System Message",
+ "type": "string"
+ },
+ "chat_context": {
+ "title": "Chat Context",
+ "default": [],
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ChatMessage"
+ }
+ },
+ "manage_own_chat_context": {
+ "title": "Manage Own Chat Context",
+ "default": false,
+ "type": "boolean"
+ }
+ }
+ },
+ "Observation": {
+ "title": "Observation",
+ "type": "object",
+ "properties": {}
+ },
+ "src__continuedev__core__main__HistoryNode": {
+ "title": "HistoryNode",
+ "description": "A point in history, a list of which make up History",
+ "type": "object",
+ "properties": {
+ "step": {
+ "$ref": "#/definitions/Step"
+ },
+ "observation": {
+ "$ref": "#/definitions/Observation"
+ },
+ "depth": {
+ "title": "Depth",
+ "type": "integer"
+ },
+ "deleted": {
+ "title": "Deleted",
+ "default": false,
+ "type": "boolean"
+ },
+ "active": {
+ "title": "Active",
+ "default": true,
+ "type": "boolean"
+ },
+ "logs": {
+ "title": "Logs",
+ "default": [],
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "step",
+ "depth"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/Position.json b/schema/json/Position.json
index 6b272ce7..20a8d4e8 100644
--- a/schema/json/Position.json
+++ b/schema/json/Position.json
@@ -1,24 +1,24 @@
-{
- "title": "Position",
- "$ref": "#/definitions/src__continuedev__models__main__Position",
- "definitions": {
- "src__continuedev__models__main__Position": {
- "title": "Position",
- "type": "object",
- "properties": {
- "line": {
- "title": "Line",
- "type": "integer"
- },
- "character": {
- "title": "Character",
- "type": "integer"
- }
- },
- "required": [
- "line",
- "character"
- ]
- }
- }
+{
+ "title": "Position",
+ "$ref": "#/definitions/src__continuedev__models__main__Position",
+ "definitions": {
+ "src__continuedev__models__main__Position": {
+ "title": "Position",
+ "type": "object",
+ "properties": {
+ "line": {
+ "title": "Line",
+ "type": "integer"
+ },
+ "character": {
+ "title": "Character",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "line",
+ "character"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/Range.json b/schema/json/Range.json
index 75675183..b6867932 100644
--- a/schema/json/Range.json
+++ b/schema/json/Range.json
@@ -1,41 +1,41 @@
-{
- "title": "Range",
- "$ref": "#/definitions/src__continuedev__models__main__Range",
- "definitions": {
- "Position": {
- "title": "Position",
- "type": "object",
- "properties": {
- "line": {
- "title": "Line",
- "type": "integer"
- },
- "character": {
- "title": "Character",
- "type": "integer"
- }
- },
- "required": [
- "line",
- "character"
- ]
- },
- "src__continuedev__models__main__Range": {
- "title": "Range",
- "description": "A range in a file. 0-indexed.",
- "type": "object",
- "properties": {
- "start": {
- "$ref": "#/definitions/Position"
- },
- "end": {
- "$ref": "#/definitions/Position"
- }
- },
- "required": [
- "start",
- "end"
- ]
- }
- }
+{
+ "title": "Range",
+ "$ref": "#/definitions/src__continuedev__models__main__Range",
+ "definitions": {
+ "Position": {
+ "title": "Position",
+ "type": "object",
+ "properties": {
+ "line": {
+ "title": "Line",
+ "type": "integer"
+ },
+ "character": {
+ "title": "Character",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "line",
+ "character"
+ ]
+ },
+ "src__continuedev__models__main__Range": {
+ "title": "Range",
+ "description": "A range in a file. 0-indexed.",
+ "type": "object",
+ "properties": {
+ "start": {
+ "$ref": "#/definitions/Position"
+ },
+ "end": {
+ "$ref": "#/definitions/Position"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/RangeInFile.json b/schema/json/RangeInFile.json
index 1f5afaa3..4f6e030d 100644
--- a/schema/json/RangeInFile.json
+++ b/schema/json/RangeInFile.json
@@ -1,58 +1,58 @@
-{
- "title": "RangeInFile",
- "$ref": "#/definitions/src__continuedev__models__filesystem__RangeInFile",
- "definitions": {
- "Position": {
- "title": "Position",
- "type": "object",
- "properties": {
- "line": {
- "title": "Line",
- "type": "integer"
- },
- "character": {
- "title": "Character",
- "type": "integer"
- }
- },
- "required": [
- "line",
- "character"
- ]
- },
- "Range": {
- "title": "Range",
- "description": "A range in a file. 0-indexed.",
- "type": "object",
- "properties": {
- "start": {
- "$ref": "#/definitions/Position"
- },
- "end": {
- "$ref": "#/definitions/Position"
- }
- },
- "required": [
- "start",
- "end"
- ]
- },
- "src__continuedev__models__filesystem__RangeInFile": {
- "title": "RangeInFile",
- "type": "object",
- "properties": {
- "filepath": {
- "title": "Filepath",
- "type": "string"
- },
- "range": {
- "$ref": "#/definitions/Range"
- }
- },
- "required": [
- "filepath",
- "range"
- ]
- }
- }
+{
+ "title": "RangeInFile",
+ "$ref": "#/definitions/src__continuedev__models__filesystem__RangeInFile",
+ "definitions": {
+ "Position": {
+ "title": "Position",
+ "type": "object",
+ "properties": {
+ "line": {
+ "title": "Line",
+ "type": "integer"
+ },
+ "character": {
+ "title": "Character",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "line",
+ "character"
+ ]
+ },
+ "Range": {
+ "title": "Range",
+ "description": "A range in a file. 0-indexed.",
+ "type": "object",
+ "properties": {
+ "start": {
+ "$ref": "#/definitions/Position"
+ },
+ "end": {
+ "$ref": "#/definitions/Position"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ]
+ },
+ "src__continuedev__models__filesystem__RangeInFile": {
+ "title": "RangeInFile",
+ "type": "object",
+ "properties": {
+ "filepath": {
+ "title": "Filepath",
+ "type": "string"
+ },
+ "range": {
+ "$ref": "#/definitions/Range"
+ }
+ },
+ "required": [
+ "filepath",
+ "range"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/SessionInfo.json b/schema/json/SessionInfo.json
index 5857a724..e8d53fa1 100644
--- a/schema/json/SessionInfo.json
+++ b/schema/json/SessionInfo.json
@@ -1,29 +1,29 @@
-{
- "title": "SessionInfo",
- "$ref": "#/definitions/src__continuedev__core__main__SessionInfo",
- "definitions": {
- "src__continuedev__core__main__SessionInfo": {
- "title": "SessionInfo",
- "type": "object",
- "properties": {
- "session_id": {
- "title": "Session Id",
- "type": "string"
- },
- "title": {
- "title": "Title",
- "type": "string"
- },
- "date_created": {
- "title": "Date Created",
- "type": "string"
- }
- },
- "required": [
- "session_id",
- "title",
- "date_created"
- ]
- }
- }
+{
+ "title": "SessionInfo",
+ "$ref": "#/definitions/src__continuedev__core__main__SessionInfo",
+ "definitions": {
+ "src__continuedev__core__main__SessionInfo": {
+ "title": "SessionInfo",
+ "type": "object",
+ "properties": {
+ "session_id": {
+ "title": "Session Id",
+ "type": "string"
+ },
+ "title": {
+ "title": "Title",
+ "type": "string"
+ },
+ "date_created": {
+ "title": "Date Created",
+ "type": "string"
+ }
+ },
+ "required": [
+ "session_id",
+ "title",
+ "date_created"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/Traceback.json b/schema/json/Traceback.json
index 45606a2b..b140e104 100644
--- a/schema/json/Traceback.json
+++ b/schema/json/Traceback.json
@@ -1,63 +1,63 @@
-{
- "title": "Traceback",
- "$ref": "#/definitions/src__continuedev__models__main__Traceback",
- "definitions": {
- "TracebackFrame": {
- "title": "TracebackFrame",
- "type": "object",
- "properties": {
- "filepath": {
- "title": "Filepath",
- "type": "string"
- },
- "lineno": {
- "title": "Lineno",
- "type": "integer"
- },
- "function": {
- "title": "Function",
- "type": "string"
- },
- "code": {
- "title": "Code",
- "type": "string"
- }
- },
- "required": [
- "filepath",
- "lineno",
- "function"
- ]
- },
- "src__continuedev__models__main__Traceback": {
- "title": "Traceback",
- "type": "object",
- "properties": {
- "frames": {
- "title": "Frames",
- "type": "array",
- "items": {
- "$ref": "#/definitions/TracebackFrame"
- }
- },
- "message": {
- "title": "Message",
- "type": "string"
- },
- "error_type": {
- "title": "Error Type",
- "type": "string"
- },
- "full_traceback": {
- "title": "Full Traceback",
- "type": "string"
- }
- },
- "required": [
- "frames",
- "message",
- "error_type"
- ]
- }
- }
+{
+ "title": "Traceback",
+ "$ref": "#/definitions/src__continuedev__models__main__Traceback",
+ "definitions": {
+ "TracebackFrame": {
+ "title": "TracebackFrame",
+ "type": "object",
+ "properties": {
+ "filepath": {
+ "title": "Filepath",
+ "type": "string"
+ },
+ "lineno": {
+ "title": "Lineno",
+ "type": "integer"
+ },
+ "function": {
+ "title": "Function",
+ "type": "string"
+ },
+ "code": {
+ "title": "Code",
+ "type": "string"
+ }
+ },
+ "required": [
+ "filepath",
+ "lineno",
+ "function"
+ ]
+ },
+ "src__continuedev__models__main__Traceback": {
+ "title": "Traceback",
+ "type": "object",
+ "properties": {
+ "frames": {
+ "title": "Frames",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TracebackFrame"
+ }
+ },
+ "message": {
+ "title": "Message",
+ "type": "string"
+ },
+ "error_type": {
+ "title": "Error Type",
+ "type": "string"
+ },
+ "full_traceback": {
+ "title": "Full Traceback",
+ "type": "string"
+ }
+ },
+ "required": [
+ "frames",
+ "message",
+ "error_type"
+ ]
+ }
+ }
} \ No newline at end of file
diff --git a/schema/json/TracebackFrame.json b/schema/json/TracebackFrame.json
index 1907430a..2fbd0109 100644
--- a/schema/json/TracebackFrame.json
+++ b/schema/json/TracebackFrame.json
@@ -1,33 +1,33 @@
-{
- "title": "TracebackFrame",
- "$ref": "#/definitions/src__continuedev__models__main__TracebackFrame",
- "definitions": {
- "src__continuedev__models__main__TracebackFrame": {
- "title": "TracebackFrame",
- "type": "object",
- "properties": {
- "filepath": {
- "title": "Filepath",
- "type": "string"
- },
- "lineno": {
- "title": "Lineno",
- "type": "integer"
- },
- "function": {
- "title": "Function",
- "type": "string"
- },
- "code": {
- "title": "Code",
- "type": "string"
- }
- },
- "required": [
- "filepath",
- "lineno",
- "function"
- ]
- }
- }
+{
+ "title": "TracebackFrame",
+ "$ref": "#/definitions/src__continuedev__models__main__TracebackFrame",
+ "definitions": {
+ "src__continuedev__models__main__TracebackFrame": {
+ "title": "TracebackFrame",
+ "type": "object",
+ "properties": {
+ "filepath": {
+ "title": "Filepath",
+ "type": "string"
+ },
+ "lineno": {
+ "title": "Lineno",
+ "type": "integer"
+ },
+ "function": {
+ "title": "Function",
+ "type": "string"
+ },
+ "code": {
+ "title": "Code",
+ "type": "string"
+ }
+ },
+ "required": [
+ "filepath",
+ "lineno",
+ "function"
+ ]
+ }
+ }
} \ No newline at end of file