Skip to content
This repository has been archived by the owner on Sep 30, 2024. It is now read-only.

cody: development branch #49761

Merged
merged 23 commits into from
Mar 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
60d793a
factor out ReactIcon
beyang Mar 15, 2023
8f4b555
cody: fix integration test (#49328)
Mar 15, 2023
68ef7a9
cody: refactor for unit testing (#49369)
Mar 15, 2023
322882e
cody: scroll to view on new chat messages (#49445)
abeatrix Mar 15, 2023
1b7ba64
cody: Sourcegraph backend (#49514)
Mar 21, 2023
62c40f8
Update file structure for cody (#49767)
abeatrix Mar 21, 2023
a0a8642
Register improve variable names recipe command.
Mar 22, 2023
9064a58
Remove protocol from codebase setting. Notify the user if we could no…
Mar 22, 2023
ec3ffe2
Add a recommendation to add the codebase setting. Rename Ask -> Chat …
Mar 22, 2023
e4c5395
Sanitize server endpoint.
Mar 22, 2023
3bc8608
We do not have to void promises.
Mar 22, 2023
7947f19
Consolidate Cody command and settings naming.
Mar 22, 2023
d872879
Update README.
Mar 22, 2023
35cd2e0
Add for Enterprise label.
Mar 22, 2023
7c2d1e7
Fix example.
Mar 22, 2023
3c3b276
cody: update readme and package info for cody enterprise (#49846)
abeatrix Mar 22, 2023
c796058
Update package name to cody-ai
abeatrix Mar 22, 2023
16d1bf3
Only include VSCode editors with scheme=file. Fix integration test.
Mar 23, 2023
e543355
Handle blended contextType.
Mar 23, 2023
da6e626
Check if the login credentials are valid before logging in the user.
Mar 23, 2023
7598d9e
Remove warnining messages, and add todos to show them in the UI.
Mar 23, 2023
ef0ef64
cody: fix light theme issue (#49881)
abeatrix Mar 23, 2023
8375b4b
cody release v0.0.2
abeatrix Mar 23, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .bazelignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,3 @@ cmd/sitemap

# temporary ignores
internal/cmd/progress-bot
client/cody
6 changes: 3 additions & 3 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
"runtimeExecutable": "${execPath}",
"preLaunchTask": "Build cody",
"args": [
"--extensionDevelopmentPath=${workspaceRoot}/client/cody/vscode-codegen",
"--extensionDevelopmentPath=${workspaceRoot}/client/cody",
"--disable-extension=hpargecruos.kodj",
"--disable-extension=sourcegraph.cody"
"--disable-extension=sourcegraph.cody-ai"
],
"sourceMaps": true,
"outFiles": ["${workspaceRoot}/client/cody/vscode-codegen/dist/*.js"],
"outFiles": ["${workspaceRoot}/client/cody/dist/*.js"],
"env": {
"NODE_ENV": "development"
}
Expand Down
2 changes: 1 addition & 1 deletion .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"type": "npm",
"script": "build:dev",
"problemMatcher": "$tsc-watch",
"options": { "cwd": "client/cody/vscode-codegen" },
"options": { "cwd": "client/cody" },
"isBackground": true
},
{
Expand Down
3 changes: 3 additions & 0 deletions client/cody/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// @ts-check

const baseConfig = require('../../.eslintrc')
module.exports = {
extends: '../../.eslintrc.js',
Expand All @@ -7,4 +8,6 @@ module.exports = {
project: [__dirname + '/tsconfig.json'],
},
overrides: baseConfig.overrides,
'react/react-in-jsx-scope': 'off',
'react/jsx-filename-extension': [1, { extensions: ['.ts', '.tsx'] }],
}
6 changes: 3 additions & 3 deletions client/cody/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
node_modules/
tsconfig.tsbuildinfo
.vsix
.envrc
out/
.vscode-test/
dist/
75 changes: 75 additions & 0 deletions client/cody/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Contributing to the Sourcegraph Cody VS Code Extension

1. Update your VS Code user setting to turn on debugging mode:

```json
"cody.debug": true,
```

2. Run `pnpm install` from the **root** of this repository
3. Select `Launch Cody Extension` from the dropdown menu in the `RUN AND DEBUG` sidebar
1. Remove `node_modeules` from `root` and `client/cody` before re-running `pnpm install` if the start up failed
4. Refresh the extension to see updated changes

## File structure

- `src`: source code of the components for the extension
host
- `webviews`: source code of the extension UI (webviews),
build with Vite and rollup.js using the `vite.config.ts` file at directory
root
- `dist`: build outputs from both webpack and vite
- `resources`: everything in this directory will be move to
the ./dist directory automatically during build time for easy packaging
- `index.html`: the entry file that Vite looks for to build
the webviews. The extension host reads this file at run time and replace
the variables inside the file with webview specific uri and info

## Testing

1. Unit tests:

```shell
$ cd client/cody
$ pnpm test:unit
```

2. Integration tests:

```shell
$ cd client/cody
$ pnpm test:integration
```

## Release Process

Follow the steps below to package and publish the VS Code extension.

> NOTE: Since the extension has already been bundled during build, we will need to add the `--no-dependencies` flag to the `vsce` step during the packaging step to exclude the npm dependencies ([source](https://github.com/microsoft/vscode-vsce/issues/421#issuecomment-1038911725))

### Prerequisite

- Install the [VSCE CLI tool](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#vsce)
- Obtain the marketplace token for publishing Cody from 1Password

### Release Steps

1. Increment the `version` in [`package.json`](package.json) and then run:

```shell
$ cd client/cody
$ pnpm run vsce:package
```

2. To try the packaged extension locally, disable any other installations of it and then run:

```sh
$ code --install-extension dist/cody.vsix
```

3. To publish the packaged extension to the VS Code Extension Marketplace:

```sh
$ cd client/cody
$ pnpm run vsce:publish
```
File renamed without changes.
157 changes: 63 additions & 94 deletions client/cody/README.md
Original file line number Diff line number Diff line change
@@ -1,121 +1,90 @@
# Cody
<div align="center">
<p>Cody: An AI-Powered Programming Assistant</p>
<a href="https://docs.sourcegraph.com/cody">Docs</a> •
<a href="https://discord.gg/s2qDtYGnAE">Discord</a> •
<a href="https://twitter.com/sourcegraph">Twitter</a>
<br /><br />
<a href="https://srcgr.ph/discord">
<img src="https://img.shields.io/discord/969688426372825169?color=5765F2" alt="Discord" />
</a>
<a href="https://marketplace.visualstudio.com/items?itemName=sourcegraph.cody-ai">
<img src="https://img.shields.io/vscode-marketplace/v/sourcegraph.cody-ai.svg?label=vs%20marketplace" alt="VS Marketplace" />
</a>
</div>

## Usage and features
## Cody Enterprise

- Autocomplete: `alt-\` to show autocompletion suggestions
- Chatbot: Click the robot icon in the primary side panel
Cody is in private alpha (experimental) at this stage. Please contact your techical advisor or [signup here](https://sourcegraph.typeform.com/to/pIXTgwrd?typeform-source=t.co) to get access.

## Install
We have limited capacity to onboard customers at first, but we're working hard to open Cody up to the world fast!

See the [#announce-cody Slack channel](https://app.slack.com/client/T02FSM7DL/C04MZPE4JKD) for instructions.
## What is Cody?

## Development

There are four separate components:

- `vscode-codegen`: the VS Code extension
- `server`: the server that serves the completion and chat endpoints
- `embeddings`: generates the embeddings and serves the embeddings endpoint
- `common`: a library shared by the extension and server with common types

### Setup

1. Install [asdf](https://asdf-vm.com/)
1. Run `asdf install` (if needed, run `asdf plugin add NAME` for any missing plugins)
1. Set the following environment variables:

```
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=...
export EMBEDDINGS_DIR=/path/to/embeddings/dir
export CODY_USERS_PATH=/path/to/users.json
```

See [Cody secrets](https://docs.google.com/document/d/1b5oqnE0kSUrgrb4Z2Alnhfods5e4Y5gx_oaIcQH4TZM/edit) (internal Google Doc) for these secret values.
Cody is your hyper-intelligent programming sidekick - an AI assistant developed by Sourcegraph to supercharge your productivity as a developer.

1. Install dependencies:
## Highlighted features

```shell
brew install wget # Use your system's package manager
pnpm install
(cd embeddings && pip3 install -r requirements.txt)
```
- Answer questions about your codebase instantly
- Generate documentation and unit tests on demand
- Write code snippets and prototypes for you
- Translate comments and functions in your code between languages

### Build and run
## Installation

Build and watch the TypeScript code (if you're running VS Code, this runs automatically in the background):
Here are the ways to install Cody in Visual Studio Code:

1. `pnpm exec tsc --build`
### In Visual Studio Code

Run the server:
1. Open the Extensions tab on the left side of VS Code (<kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>X</kbd> or <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>X</kbd>).
2. Search for `Sourcegraph Cody` and click Install.
3. Once installed, **reload** VS Code.
4. After reloading, click the Cody icon in the VS Code Activity Bar to open the extension.
- Alternatively, you can launch the extension by pressing <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> or <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> and searching for "Cody: Focus on chat view" and searching for "Cody: Focus on chat view".

1. `cd server && CODY_PORT=9300 pnpm run dev`
### Through the Visual Studio Marketplace

Run the embeddings API:
1. Install Cody from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=sourcegraph.cody-ai).
2. After installing the plugin, click the Cody icon in the VS Code Activity Bar to open the extension.

1. Generate embeddings, including for at least 1 codebase. See [embeddings/README.md](embeddings/README.md).
## Setting up the Cody extension

For example:
To set up the Cody extension, you will need to enter the URL of your Sourcegraph instance and an access token used for authentication.

```shell
cd embeddings
python3 embed_repos.py --repos https://github.com/sourcegraph/conc --output-dir=$EMBEDDINGS_DIR
python3 embed_context_dataset.py --output-dir=$EMBEDDINGS_DIR
```
1. Open the Cody chat view by clicking on the Cody icon in the sidebar.
2. If you are setting up Cody for the first time, you should see the terms of service.
3. To proceed, read the terms and click "I accept", if you accept the terms of service.
4. Aftewards, you should see the login screen, where you have to enter the URL of your Sourcegraph instance and an access token used for authentication.
5. Once you have filled out the login form, click the Login button to login to Cody.

If you do this, ensure your `CODY_USERS_PATH` file has `github.com/sourcegraph/conc` in the `accessibleCodebaseIDs`.
### Generating a Sourcegraph access token

1. `cd embeddings && asdf env python uvicorn api:app --reload --port 9301`
1. Go to your Sourcegraph instance.
2. In your account settings, navigate to `Access tokens`.
3. Click `Generate new token`.
4. Copy the token.

### Developing the [VS Code extension](vscode-codegen/)
### Codebase

1. Change your VS Code user settings to use your local dev servers:
To enable codebase-aware answers, you have to set the codebase setting to let Cody know which repository you are working on in the current workspace. You can do that as follows:

```json
"cody.serverEndpoint": "http://localhost:9300",
"cody.embeddingsEndpoint": "http://localhost:9301",
"cody.debug": true,
```
1. Open the VS Code workspace settings by pressing <kbd>Cmd</kbd>, (or File > Preferences (Settings) on Windows & Linux).
2. Search for the "Cody: Codebase" setting.
3. Enter the repository name as listed on your Sourcegraph instance.
1. For example: `github.com/sourcegraph/sourcegraph` without the `https` protocol

2. Run `pnpm install` from the root of this repository
3. Select `Launch Cody Extension` from the dropdown menu in the `RUN AND DEBUG` sidebar
1. Remove `node_modeules` and rerun `pnpm install` if the start up failed
4. Refresh the extension to see updated changes
Setting the codebase will edit the `.vscode/settings.json` file in your repository, which you can then commit and save for future usage.

#### File structure
## Extension Settings

- `vscode-codegen/src`: source code of the components for the extension
host
- `vscode-codegen/webviews`: source code of the extension UI (webviews),
build with Vite and rollup.js using the `vscode-codegen/vite.config.ts` file at directory
root
- `vscode-codegen/dist`: build outputs from both webpack and vite
- `vscode-codegen/resources`: everything in this directory will be move to
the ./dist directory automatically during build time for easy packaging
- `vscode-codegen/index.html`: the entry file that Vite looks for to build
the webviews. The extension host reads this file at run time and replace
the variables inside the file with webview specific uri and info
This extension contributes the following settings:

### Testing the [VS Code extension](vscode-codegen/)
| Setting | Description | Example |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| cody.enabled | Enable or disable Cody. | true/false |
| cody.serverEndpoint | URL of the Sourcegraph instance. | "https://example.sourcegraph.com" |
| cody.codebase | Name of the repository opened in the current workspace. Use the same repository name as listed on your Sourcegraph instance. | "github.com/sourcegraph/sourcegraph" |
| cody.useContext | Context source for Cody. One of: "embeddings", "keyword", "blended", or "none". | "embeddings" |

```
$ cd vscode-codegen
$ pnpm test
```

### Publishing the [VS Code extension](vscode-codegen/)

Increment the `version` in [`vscode-codegen/package.json`](vscode-codegen/package.json) and then run:

```shell
cd vscode-codegen
pnpm run vsce:package

# To try the packaged extension locally, disable any other installations of it and then run:
# code --install-extension dist/kodj.vsix

# To publish the packaged extension to the VS Code Extension Marketplace:
pnpm exec vsce publish --packagePath dist/kodj.vsix
```
## Development

> NOTE: Since the extension has already been bundled, we will need to add the `--no-dependencies` flag during the packaging step to exclude the npm dependencies ([source](https://github.com/microsoft/vscode-vsce/issues/421#issuecomment-1038911725))
Please see the [CONTRIBUTING](./CONTRIBUTING.md) document if you are interested in contributing to our code base.
11 changes: 0 additions & 11 deletions client/cody/common/.eslintrc.js

This file was deleted.

1 change: 0 additions & 1 deletion client/cody/common/.gitignore

This file was deleted.

14 changes: 0 additions & 14 deletions client/cody/common/package.json

This file was deleted.

18 changes: 0 additions & 18 deletions client/cody/common/src/history.ts

This file was deleted.

Loading