diff --git a/.github/workflows/docs-ci.yaml b/.github/workflows/docs-ci.yaml
new file mode 100644
index 00000000..1648fd44
--- /dev/null
+++ b/.github/workflows/docs-ci.yaml
@@ -0,0 +1,32 @@
+name: docs-ci
+on:
+ push:
+ branches:
+ - main
+ - add-docs-portal
+ paths:
+ - docs/**
+permissions:
+ contents: write
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Configure Git Credentials
+ run: |
+ git config user.name github-actions[bot]
+ git config user.email 41898282+github-actions[bot]@users.noreply.github.com
+ - uses: actions/setup-python@v5
+ with:
+ python-version: 3.x
+ - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
+ - uses: actions/cache@v4
+ with:
+ key: mkdocs-material-${{ env.cache_id }}
+ path: .cache
+ restore-keys: |
+ mkdocs-material-
+ - run: pip install mkdocs-material
+ - run: pip install "mkdocs-material[imaging]"
+ - run: mkdocs gh-deploy -f docs/mkdocs.yml --force
diff --git a/.gitignore b/.gitignore
index c5c939de..11a428d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ dist/
build/
review.md
.DS_Store
+docs/.cache/
diff --git a/Usage.md b/Usage.md
deleted file mode 100644
index f0dbb3a9..00000000
--- a/Usage.md
+++ /dev/null
@@ -1,538 +0,0 @@
-## Usage Guide
-
-### Table of Contents
-- [Introduction](#introduction)
-- [Configuration Options](#configuration-options)
-- [Managing Mail Notifications](#managing-mail-notifications)
-- [Usage and Automation](#usage-and-automation)
- - [Local Repo (CLI)](#working-from-a-local-repo-cli)
- - [Online Usage](#online-usage)
- - [GitHub App](#working-with-github-app)
- - [GitHub Action](#working-with-github-action)
- - [GitLab Webhook](#working-with-gitlab-webhook)
- - [BitBucket App](#working-with-bitbucket-self-hosted-app)
- - [Azure DevOps Provider](#azure-devops-provider)
-- [Additional Configurations Walkthrough](#appendix---additional-configurations-walkthrough)
- - [Ignoring files from analysis](#ignoring-files-from-analysis)
- - [Extra instructions](#extra-instructions)
- - [Working with large PRs](#working-with-large-prs)
- - [Changing a model](#changing-a-model)
- - [Patch Extra Lines](#patch-extra-lines)
- - [Editing the prompts](#editing-the-prompts)
-
-## Introduction
-
-After [installation](/INSTALL.md), there are three basic ways to invoke CodiumAI PR-Agent:
-1. Locally running a CLI command
-2. Online usage - by [commenting](https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901) on a PR
-3. Enabling PR-Agent tools to run automatically when a new PR is opened
-
-
-Specifically, CLI commands can be issued by invoking a pre-built [docker image](/INSTALL.md#running-from-source), or by invoking a [locally cloned repo](INSTALL.md#method-2-run-from-source).
-For online usage, you will need to setup either a [GitHub App](INSTALL.md#method-5-run-as-a-github-app), or a [GitHub Action](INSTALL.md#method-3-run-as-a-github-action).
-GitHub App and GitHub Action also enable to run PR-Agent specific tool automatically when a new PR is opened.
-
-
-### git provider
-The [git_provider](pr_agent/settings/configuration.toml#L4) field in the configuration file determines the GIT provider that will be used by PR-Agent. Currently, the following providers are supported:
-`
-"github", "gitlab", "bitbucket", "azure", "codecommit", "local", "gerrit"
-`
-
-## Configuration Options
-
-The different tools and sub-tools used by CodiumAI PR-Agent are adjustable via the **[configuration file](pr_agent/settings/configuration.toml)**.
-
-In addition to general configuration options, each tool has its own configurations. For example, the `review` tool will use parameters from the [pr_reviewer](/pr_agent/settings/configuration.toml#L16) section in the configuration file.
-See the [Tools Guide](./docs/TOOLS_GUIDE.md) for a detailed description of the different tools and their configurations.
-
-There are three ways to set persistent configurations:
-1. Wiki configuration page 💎
-2. Local configuration file
-3. Global configuration file 💎
-
-In terms of precedence, wiki configurations will override local configurations, and local configurations will override global configurations.
-
-### Wiki configuration file 💎
-
-Specifically for GitHub, with PR-Agent-Pro you can set configurations by creating a page called `.pr_agent.toml` in the [wiki](https://github.com/Codium-ai/pr-agent/wiki/pr_agent.toml) of the repo.
-The advantage of this method is that it allows to set configurations without needing to commit new content to the repo - just edit the wiki page and **save**.
-
-
-
-Click [here](https://codium.ai/images/pr_agent/wiki_configuration_pr_agent.mp4) to see a short instructional video. We recommend surrounding the configuration content with triple-quotes, to allow better presentation when displayed in the wiki as markdown.
-An example content:
-
-\`\`\`
-[pr_description] # /describe #
-keep_original_user_title=false
-\`\`\`
-
-PR-Agent will know to remove the triple-quotes when reading the configuration content.
-
-### Local configuration file
-
-By uploading a local `.pr_agent.toml` file to the root of the repo's main branch, you can edit and customize any configuration parameter. Note that you need to upload `.pr_agent.toml` prior to creating a PR, in order for the configuration to take effect.
-
-For example, if you set in `.pr_agent.toml`:
-
-```
-[pr_reviewer]
-extra_instructions="""\
-- instruction a
-- instruction b
-...
-"""
-```
-
-Then you can give a list of extra instructions to the `review` tool.
-
-
-### Global configuration file 💎
-
-If you create a repo called `pr-agent-settings` in your **organization**, it's configuration file `.pr_agent.toml` will be used as a global configuration file for any other repo that belongs to the same organization.
-Parameters from a local `.pr_agent.toml` file, in a specific repo, will override the global configuration parameters.
-
-For example, in the GitHub organization `Codium-ai`:
-- The repo [`https://github.com/Codium-ai/pr-agent-settings`](https://github.com/Codium-ai/pr-agent-settings/blob/main/.pr_agent.toml) contains a `.pr_agent.toml` file that serves as a global configuration file for all the repos in the GitHub organization `Codium-ai`.
-- The repo [`https://github.com/Codium-ai/pr-agent`](https://github.com/Codium-ai/pr-agent/blob/main/.pr_agent.toml) inherits the global configuration file from `pr-agent-settings`.
-
-
-## Managing mail notifications
-Unfortunately, it is not possible in GitHub to disable mail notifications from a specific user.
-If you are subscribed to notifications for a repo with PR-Agent, we recommend turning off notifications for PR comments, to avoid lengthy emails:
-
-
-
-As an alternative, you can filter in your mail provider the notifications specifically from the PR-Agent bot:
-https://www.quora.com/How-can-you-filter-emails-for-specific-people-in-Gmail#:~:text=On%20the%20Filters%20and%20Blocked,the%20body%20of%20the%20email
-
-
-
-## Usage and Automation
-
-### Working from a local repo (CLI)
-When running from your local repo (CLI), your local configuration file will be used.
-Examples of invoking the different tools via the CLI:
-
-- **Review**: `python -m pr_agent.cli --pr_url= review`
-- **Describe**: `python -m pr_agent.cli --pr_url= describe`
-- **Improve**: `python -m pr_agent.cli --pr_url= improve`
-- **Ask**: `python -m pr_agent.cli --pr_url= ask "Write me a poem about this PR"`
-- **Reflect**: `python -m pr_agent.cli --pr_url= reflect`
-- **Update Changelog**: `python -m pr_agent.cli --pr_url= update_changelog`
-
-`` is the url of the relevant PR (for example: https://github.com/Codium-ai/pr-agent/pull/50).
-
-**Notes:**
-
-(1) in addition to editing your local configuration file, you can also change any configuration value by adding it to the command line:
-```
-python -m pr_agent.cli --pr_url= /review --pr_reviewer.extra_instructions="focus on the file: ..."
-```
-
-(2) You can print results locally, without publishing them, by setting in `configuration.toml`:
-```
-[config]
-publish_output=false
-verbosity_level=2
-```
-This is useful for debugging or experimenting with different tools.
-
-
-### Online usage
-
-Online usage means invoking PR-Agent tools by [comments](https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901) on a PR.
-Commands for invoking the different tools via comments:
-
-- **Review**: `/review`
-- **Describe**: `/describe`
-- **Improve**: `/improve`
-- **Ask**: `/ask "..."`
-- **Reflect**: `/reflect`
-- **Update Changelog**: `/update_changelog`
-
-
-To edit a specific configuration value, just add `--config_path=` to any command.
-For example, if you want to edit the `review` tool configurations, you can run:
-```
-/review --pr_reviewer.extra_instructions="..." --pr_reviewer.require_score_review=false
-```
-Any configuration value in [configuration file](pr_agent/settings/configuration.toml) file can be similarly edited. Comment `/config` to see the list of available configurations.
-
-
-### Working with GitHub App
-
-#### GitHub app automatic tools when a new PR is opened
-
-The [github_app](pr_agent/settings/configuration.toml#L108) section defines GitHub app specific configurations.
-
-The configuration parameter `pr_commands` defines the list of tools that will be **run automatically** when a new PR is opened.
-```
-[github_app]
-pr_commands = [
- "/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true",
- "/review --pr_reviewer.num_code_suggestions=0",
- "/improve",
-]
-```
-This means that when a new PR is opened/reopened or marked as ready for review, PR-Agent will run the `describe`, `review` and `improve` tools.
-For the `describe` tool, for example, the `add_original_user_description` and `keep_original_user_title` parameters will be set to true.
-
-You can override the default tool parameters by using one the three options for a [configuration file](#configuration-options): **wiki**, **local**, or **global**.
-For example, if your local `.pr_agent.toml` file contains:
-```
-[pr_description]
-add_original_user_description = false
-keep_original_user_title = false
-```
-When a new PR is opened, PR-Agent will run the `describe` tool with the above parameters.
-
-To cancel the automatic run of all the tools, set:
-```
-[github_app]
-handle_pr_actions = []
-```
-
-You can also disable automatic runs for PRs with specific titles, by setting the `ignore_pr_titles` parameter with the relevant regex. For example:
-```
-[github_app]
-ignore_pr_title = ["^[Auto]", ".*ignore.*"]
-```
-will ignore PRs with titles that start with "Auto" or contain the word "ignore".
-
-#### GitHub app automatic tools for push actions (commits to an open PR)
-
-In addition to running automatic tools when a PR is opened, the GitHub app can also respond to new code that is pushed to an open PR.
-
-The configuration toggle `handle_push_trigger` can be used to enable this feature.
-The configuration parameter `push_commands` defines the list of tools that will be **run automatically** when new code is pushed to the PR.
-```
-[github_app]
-handle_push_trigger = true
-push_commands = [
- "/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true --pr_description.final_update_message=false",
- "/review --pr_reviewer.num_code_suggestions=0 --pr_reviewer.final_update_message=false",
-]
-```
-This means that when new code is pushed to the PR, the PR-Agent will run the `describe` and `review` tools, with the specified parameters.
-
-### Working with GitHub Action
-`GitHub Action` is a different way to trigger PR-Agent tools, and uses a different configuration mechanism than `GitHub App`.
-You can configure settings for `GitHub Action` by adding environment variables under the env section in `.github/workflows/pr_agent.yml` file.
-Specifically, start by setting the following environment variables:
-```yaml
- env:
- OPENAI_KEY: ${{ secrets.OPENAI_KEY }} # Make sure to add your OpenAI key to your repo secrets
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Make sure to add your GitHub token to your repo secrets
- github_action_config.auto_review: "true" # enable\disable auto review
- github_action_config.auto_describe: "true" # enable\disable auto describe
- github_action_config.auto_improve: "true" # enable\disable auto improve
-```
-`github_action_config.auto_review`, `github_action_config.auto_describe` and `github_action_config.auto_improve` are used to enable/disable automatic tools that run when a new PR is opened.
-If not set, the default configuration is for all three tools to run automatically when a new PR is opened.
-
-Note that you can give additional config parameters by adding environment variables to `.github/workflows/pr_agent.yml`, or by using a `.pr_agent.toml` file in the root of your repo, similar to the GitHub App usage.
-
-For example, you can set an environment variable: `pr_description.add_original_user_description=false`, or add a `.pr_agent.toml` file with the following content:
-```
-[pr_description]
-add_original_user_description = false
-```
-
-### Working with GitLab Webhook
-After setting up a GitLab webhook, to control which commands will run automatically when a new PR is opened, you can set the `pr_commands` parameter in the configuration file, similar to the GitHub App:
-```
-[gitlab]
-pr_commands = [
- "/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true",
- "/review --pr_reviewer.num_code_suggestions=0",
- "/improve",
-]
-```
-
-### Working with BitBucket Self-Hosted App
-Similar to GitHub app, when running PR-Agent from BitBucket App, the default [configuration file](pr_agent/settings/configuration.toml) from a pre-built docker will be initially loaded.
-
-By uploading a local `.pr_agent.toml` file to the root of the repo's main branch, you can edit and customize any configuration parameter. Note that you need to upload `.pr_agent.toml` prior to creating a PR, in order for the configuration to take effect.
-
-For example, if your local `.pr_agent.toml` file contains:
-```
-[pr_reviewer]
-inline_code_comments = true
-```
-
-Each time you invoke a `/review` tool, it will use inline code comments.
-
-#### BitBucket Self-Hosted App automatic tools
-to control which commands will run automatically when a new PR is opened, you can set the `pr_commands` parameter in the configuration file:
-```
-[bitbucket_app]
-pr_commands = [
- "/review --pr_reviewer.num_code_suggestions=0",
- "/improve --pr_code_suggestions.summarize=false",
-]
-```
-
-Note that due to limitations of the bitbucket platform, not all tools or sub-options, are supported. See [here](./README.md#Overview) for an overview of the supported tools for bitbucket.
-
-### Azure DevOps provider
-
-To use Azure DevOps provider use the following settings in configuration.toml:
-```
-[config]
-git_provider="azure"
-use_repo_settings_file=false
-```
-
-Azure DevOps provider supports [PAT token](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows) or [DefaultAzureCredential](https://learn.microsoft.com/en-us/azure/developer/python/sdk/authentication-overview#authentication-in-server-environments) authentication.
-PAT is faster to create, but has build in experation date, and will use the user identity for API calls.
-Using DefaultAzureCredential you can use managed identity or Service principle, which are more secure and will create seperate ADO user identity (via AAD) to the agent.
-
-If PAT was choosen, you can assign the value in .secrets.toml.
-If DefaultAzureCredential was choosen, you can assigned the additional env vars like AZURE_CLIENT_SECRET directly,
-or use managed identity/az cli (for local develpment) without any additional configuration.
-in any case, 'org' value must be assigned in .secrets.toml:
-```
-[azure_devops]
-org = "https://dev.azure.com/YOUR_ORGANIZATION/"
-# pat = "YOUR_PAT_TOKEN" needed only if using PAT for authentication
-```
-
-##### Azure DevOps Webhook
-To trigger from an Azure webhook, you need to manually [add a webhook](https://learn.microsoft.com/en-us/azure/devops/service-hooks/services/webhooks?view=azure-devops).
-Use the "Pull request created" type to trigger a review, or "Pull request commented on" to trigger any supported comment with / comment on the relevant PR. Note that for the "Pull request commented on" trigger, only API v2.0 is supported.
-
-To control which commands will run automatically when a new PR is opened, you can set the `pr_commands` parameter in the configuration file, similar to the GitHub App:
-```
-[azure_devops_server]
-pr_commands = [
- "/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true",
- "/review --pr_reviewer.num_code_suggestions=0",
- "/improve",
-]
-```
-
-For webhook security, create a sporadic username/password pair and configure the webhook username and password on both the server and Azure DevOps webhook. These will be sent as basic Auth data by the webhook with each request:
-```
-[azure_devops_server]
-webhook_username = ""
-webhook_password = ""
-```
-> :warning: **Ensure that the webhook endpoint is only accessible over HTTPS** to mitigate the risk of credential interception when using basic authentication.
-
-
-## Appendix - additional configurations walkthrough
-
-
-#### Ignoring files from analysis
-In some cases, you may want to exclude specific files or directories from the analysis performed by CodiumAI PR-Agent. This can be useful, for example, when you have files that are generated automatically or files that shouldn't be reviewed, like vendored code.
-
-To ignore files or directories, edit the **[ignore.toml](/pr_agent/settings/ignore.toml)** configuration file. This setting also exposes the following environment variables:
-
- - `IGNORE.GLOB`
- - `IGNORE.REGEX`
-
-For example, to ignore python files in a PR with online usage, comment on a PR:
-`/review --ignore.glob=['*.py']`
-
-To ignore python files in all PRs, set in a configuration file:
-```
-[ignore]
-glob = ['*.py']
-```
-
-#### Extra instructions
-All PR-Agent tools have a parameter called `extra_instructions`, that enables to add free-text extra instructions. Example usage:
-```
-/update_changelog --pr_update_changelog.extra_instructions="Make sure to update also the version ..."
-```
-
-#### Working with large PRs
-
-The default mode of CodiumAI is to have a single call per tool, using GPT-4, which has a token limit of 8000 tokens.
-This mode provide a very good speed-quality-cost tradeoff, and can handle most PRs successfully.
-When the PR is above the token limit, it employs a [PR Compression strategy](./PR_COMPRESSION.md).
-
-However, for very large PRs, or in case you want to emphasize quality over speed and cost, there are 2 possible solutions:
-1) [Use a model](#changing-a-model) with larger context, like GPT-32K, or claude-100K. This solution will be applicable for all the tools.
-2) For the `/improve` tool, there is an ['extended' mode](./docs/IMPROVE.md) (`/improve --extended`),
-which divides the PR to chunks, and process each chunk separately. With this mode, regardless of the model, no compression will be done (but for large PRs, multiple model calls may occur)
-
-
-#### Changing a model
-
-See [here](pr_agent/algo/__init__.py) for the list of available models.
-To use a different model than the default (GPT-4), you need to edit [configuration file](pr_agent/settings/configuration.toml#L2).
-For models and environments not from OPENAI, you might need to provide additional keys and other parameters. See below for instructions.
-
-##### Azure
-To use Azure, set in your `.secrets.toml` (working from CLI), or in the GitHub `Settings > Secrets and variables` (working from GitHub App or GitHub Action):
-```
-[openai]
-key = "" # your azure api key
-api_type = "azure"
-api_version = '2023-05-15' # Check Azure documentation for the current API version
-api_base = "" # The base URL for your Azure OpenAI resource. e.g. "https://.openai.azure.com"
-deployment_id = "" # The deployment name you chose when you deployed the engine
-```
-
-and set in your configuration file:
-```
-[config]
-model="" # the OpenAI model you've deployed on Azure (e.g. gpt-3.5-turbo)
-```
-
-##### Huggingface
-
-**Local**
-You can run Huggingface models locally through either [VLLM](https://docs.litellm.ai/docs/providers/vllm) or [Ollama](https://docs.litellm.ai/docs/providers/ollama)
-
-E.g. to use a new Huggingface model locally via Ollama, set:
-```
-[__init__.py]
-MAX_TOKENS = {
- "model-name-on-ollama":
-}
-e.g.
-MAX_TOKENS={
- ...,
- "ollama/llama2": 4096
-}
-
-
-[config] # in configuration.toml
-model = "ollama/llama2"
-
-[ollama] # in .secrets.toml
-api_base = ... # the base url for your huggingface inference endpoint
-# e.g. if running Ollama locally, you may use:
-api_base = "http://localhost:11434/"
-```
-
-**Inference Endpoints**
-
-To use a new model with Huggingface Inference Endpoints, for example, set:
-```
-[__init__.py]
-MAX_TOKENS = {
- "model-name-on-huggingface":
-}
-e.g.
-MAX_TOKENS={
- ...,
- "meta-llama/Llama-2-7b-chat-hf": 4096
-}
-[config] # in configuration.toml
-model = "huggingface/meta-llama/Llama-2-7b-chat-hf"
-
-[huggingface] # in .secrets.toml
-key = ... # your huggingface api key
-api_base = ... # the base url for your huggingface inference endpoint
-```
-(you can obtain a Llama2 key from [here](https://replicate.com/replicate/llama-2-70b-chat/api))
-
-##### Replicate
-
-To use Llama2 model with Replicate, for example, set:
-```
-[config] # in configuration.toml
-model = "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1"
-[replicate] # in .secrets.toml
-key = ...
-```
-(you can obtain a Llama2 key from [here](https://replicate.com/replicate/llama-2-70b-chat/api))
-
-
-Also review the [AiHandler](pr_agent/algo/ai_handler.py) file for instruction how to set keys for other models.
-
-##### Vertex AI
-
-To use Google's Vertex AI platform and its associated models (chat-bison/codechat-bison) set:
-
-```
-[config] # in configuration.toml
-model = "vertex_ai/codechat-bison"
-fallback_models="vertex_ai/codechat-bison"
-
-[vertexai] # in .secrets.toml
-vertex_project = "my-google-cloud-project"
-vertex_location = ""
-```
-
-Your [application default credentials](https://cloud.google.com/docs/authentication/application-default-credentials) will be used for authentication so there is no need to set explicit credentials in most environments.
-
-If you do want to set explicit credentials then you can use the `GOOGLE_APPLICATION_CREDENTIALS` environment variable set to a path to a json credentials file.
-
-##### Anthropic
-To use Anthropic models, set the relevant models in the configuration section of the configuration file:
-```
-[config]
-model="anthropic/claude-3-opus-20240229"
-model_turbo="anthropic/claude-3-opus-20240229"
-fallback_models=["anthropic/claude-3-opus-20240229"]
-```
-
-And also set the api key in the .secrets.toml file:
-```
-[anthropic]
-KEY = "..."
-```
-##### Amazon Bedrock
-
-To use Amazon Bedrock and its foundational models, add the below configuration:
-
-```
-[config] # in configuration.toml
-model = "anthropic.claude-v2"
-fallback_models="anthropic.claude-instant-v1"
-
-[aws] # in .secrets.toml
-bedrock_region = "us-east-1"
-```
-
-Note that you have to add access to foundational models before using them. Please refer to [this document](https://docs.aws.amazon.com/bedrock/latest/userguide/setting-up.html) for more details.
-
-AWS session is automatically authenticated from your environment, but you can also explicitly set `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables.
-
-
-#### Patch Extra Lines
-By default, around any change in your PR, git patch provides 3 lines of context above and below the change.
-```
-@@ -12,5 +12,5 @@ def func1():
- code line that already existed in the file...
- code line that already existed in the file...
- code line that already existed in the file....
--code line that was removed in the PR
-+new code line added in the PR
- code line that already existed in the file...
- code line that already existed in the file...
- code line that already existed in the file...
-```
-
-For the `review`, `describe`, `ask` and `add_docs` tools, if the token budget allows, PR-Agent tries to increase the number of lines of context, via the parameter:
-```
-[config]
-patch_extra_lines=3
-```
-
-Increasing this number provides more context to the model, but will also increase the token budget.
-If the PR is too large (see [PR Compression strategy](./PR_COMPRESSION.md)), PR-Agent automatically sets this number to 0, using the original git patch.
-
-
-#### Editing the prompts
-The prompts for the various PR-Agent tools are defined in the `pr_agent/settings` folder.
-In practice, the prompts are loaded and stored as a standard setting object.
-Hence, editing them is similar to editing any other configuration value - just place the relevant key in `.pr_agent.toml`file, and override the default value.
-
-For example, if you want to edit the prompts of the [describe](./pr_agent/settings/pr_description_prompts.toml) tool, you can add the following to your `.pr_agent.toml` file:
-```
-[pr_description_prompt]
-system="""
-...
-"""
-user="""
-...
-"""
-```
-Note that the new prompt will need to generate an output compatible with the relevant [post-process function](./pr_agent/tools/pr_description.py#L137).
diff --git a/docs/Full_environments.md b/docs/Full_environments.md
deleted file mode 100644
index 3584b006..00000000
--- a/docs/Full_environments.md
+++ /dev/null
@@ -1,27 +0,0 @@
-## Overview
-`PR-Agent` offers extensive pull request functionalities across various git providers:
-| | | GitHub | Gitlab | Bitbucket | CodeCommit | Azure DevOps | Gerrit |
-|-------|---------------------------------------------|:------:|:------:|:---------:|:----------:|:----------:|:----------:|
-| TOOLS | Review | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | ⮑ Incremental | :white_check_mark: | | | | | |
-| | Ask | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | Auto-Description | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | Improve Code | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: |
-| | ⮑ Extended | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: |
-| | Reflect and Review | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | :white_check_mark: |
-| | Update CHANGELOG.md | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | |
-| | Find similar issue | :white_check_mark: | | | | | |
-| | Add Documentation | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: |
-| | Generate Custom Labels 💎 | :white_check_mark: | :white_check_mark: | | | | |
-| | | | | | | |
-| USAGE | CLI | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | App / webhook | :white_check_mark: | :white_check_mark: | | | :white_check_mark: |
-| | Tagging bot | :white_check_mark: | | | | |
-| | Actions | :white_check_mark: | | | | |
-| | Web server | | | | | | :white_check_mark: |
-| | | | | | | |
-| CORE | PR compression | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | Repo language prioritization | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | Adaptive and token-aware file patch fitting | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | Multiple models support | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| | Incremental PR Review | :white_check_mark: | | | | | |
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 00000000..68867ce4
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,15 @@
+# To install:
+pip install mkdocs
+pip install mkdocs-material
+pip install mkdocs-material-extensions
+pip install "mkdocs-material[imaging]"
+
+# docs
+To run localy: `mkdocs serve`
+
+To expand and customize the theme: [Material MKDocs](https://squidfunk.github.io/mkdocs-material/)
+
+The deployment is managed on the gh-pages branches.
+After each merge to main the deplloyment will be taken care of by GH action automatically and the new version will be available at: [Docs](https://codium-ai.github.io/docs/)
+
+Github action is located in `.github/workflows/ci.yml` file.
diff --git a/docs/REVIEW.md b/docs/REVIEW.md
deleted file mode 100644
index 00b3c8ac..00000000
--- a/docs/REVIEW.md
+++ /dev/null
@@ -1,178 +0,0 @@
-# Review Tool
-
-## Table of Contents
-- [Overview](#overview)
- - [Configuration options](#configuration-options)
- - [Incremental Mode](#incremental-mode)
- - [PR Reflection](#pr-reflection)
-- [Usage Tips](#usage-tips)
- - [General guidelines](#general-guidelines)
- - [Code suggestions](#code-suggestions)
- - [Automation](#automation)
- - [Auto-labels](#auto-labels)
- - [Extra instructions](#extra-instructions)
- - [Auto-approval](#auto-approval-1)
-
-## Overview
-The `review` tool scans the PR code changes, and automatically generates a PR review.
-The tool can be triggered automatically every time a new PR is [opened](https://github.com/Codium-ai/pr-agent/blob/main/Usage.md#github-app-automatic-tools), or can be invoked manually by commenting on any PR:
-```
-/review
-```
-For example:
-___
-
-___
-
-___
-
-### Configuration options
-
-To edit [configurations](./../pr_agent/settings/configuration.toml#L19) related to the review tool (`pr_reviewer` section), use the following template:
-```
-/review --pr_reviewer.some_config1=... --pr_reviewer.some_config2=...
-```
-
-#### General options
-- `num_code_suggestions`: number of code suggestions provided by the 'review' tool. For manual comments, default is 4. For [PR-Agent app](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L142) auto tools, default is 0, meaning no code suggestions will be provided by the review tool, unless you manually edit `pr_commands`.
-- `inline_code_comments`: if set to true, the tool will publish the code suggestions as comments on the code diff. Default is false.
-- `extra_instructions`: Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ...".
-- `final_update_message`: if set to true, it will add a comment message after finishing calling `/review`. Default is true.
-- `persistent_comment`: if set to true, the review comment will be persistent, meaning that every new review request will edit the previous one. Default is true.
-
-#### Enable\\disable features
-- `require_focused_review`: if set to true, the tool will add a section - 'is the PR a focused one'. Default is false.
-- `require_score_review`: if set to true, the tool will add a section that scores the PR. Default is false.
-- `require_tests_review`: if set to true, the tool will add a section that checks if the PR contains tests. Default is true.
-- `require_estimate_effort_to_review`: if set to true, the tool will add a section that estimates the effort needed to review the PR. Default is true.
-#### SOC2 ticket compliance 💎
-This sub-tool checks if the PR description properly contains a ticket to a project management system (e.g., Jira, Asana, Trello, etc.), as required by SOC2 compliance. If not, it will add a label to the PR: "Missing SOC2 ticket".
-- `require_soc2_ticket`: If set to true, the SOC2 ticket checker sub-tool will be enabled. Default is false.
-- `soc2_ticket_prompt`: The prompt for the SOC2 ticket review. Default is: `Does the PR description include a link to ticket in a project management system (e.g., Jira, Asana, Trello, etc.) ?`. Edit this field if your compliance requirements are different.
-#### Adding PR labels
-- `enable_review_labels_security`: if set to true, the tool will publish a 'possible security issue' label if it detects a security issue. Default is true.
-- `enable_review_labels_effort`: if set to true, the tool will publish a 'Review effort [1-5]: x' label. Default is true.
-#### Auto-approval
-- `enable_auto_approval`: if set to true, the tool will approve the PR when invoked with the 'auto_approve' command. Default is false. This flag can be changed only from configuration file.
-- `maximal_review_effort`: maximal effort level for auto-approval. If the PR's estimated review effort is above this threshold, the auto-approval will not run. Default is 5.
-
-### Incremental Mode
-Incremental review only considers changes since the last PR-Agent review. This can be useful when working on the PR in an iterative manner, and you want to focus on the changes since the last review instead of reviewing the entire PR again.
-For invoking the incremental mode, the following command can be used:
-```
-/review -i
-```
-Note that the incremental mode is only available for GitHub.
-
-
-
-Under the section 'pr_reviewer', the [configuration file](./../pr_agent/settings/configuration.toml#L19) contains options to customize the 'review -i' tool.
-These configurations can be used to control the rate at which the incremental review tool will create new review comments when invoked automatically, to prevent making too much noise in the PR.
-- `minimal_commits_for_incremental_review`: Minimal number of commits since the last review that are required to create incremental review.
-If there are less than the specified number of commits since the last review, the tool will not perform any action.
-Default is 0 - the tool will always run, no matter how many commits since the last review.
-- `minimal_minutes_for_incremental_review`: Minimal number of minutes that need to pass since the last reviewed commit to create incremental review.
-If less than the specified number of minutes have passed between the last reviewed commit and running this command, the tool will not perform any action.
-Default is 0 - the tool will always run, no matter how much time have passed since the last reviewed commit.
-- `require_all_thresholds_for_incremental_review`: If set to true, all the previous thresholds must be met for incremental review to run. If false, only one is enough to run the tool.
-For example, if `minimal_commits_for_incremental_review=2` and `minimal_minutes_for_incremental_review=2`, and we have 3 commits since the last review, but the last reviewed commit is from 1 minute ago:
-When `require_all_thresholds_for_incremental_review=true` the incremental review __will not__ run, because only 1 out of 2 conditions were met (we have enough commits but the last review is too recent),
-but when `require_all_thresholds_for_incremental_review=false` the incremental review __will__ run, because one condition is enough (we have 3 commits which is more than the configured 2).
-Default is false - the tool will run as long as at least once conditions is met.
-
-### PR Reflection
-By invoking:
-```
-/reflect_and_review
-```
-The tool will first ask the author questions about the PR, and will guide the review based on their answers.
-
-
-___
-
-___
-
-___
-
-
-## Usage Tips
-1) [General guidelines](#general-guidelines)
-2) [Code suggestions](#code-suggestions)
-3) [Automation](#automation)
-4) [Auto-labels](#auto-labels)
-5) [Extra instructions](#extra-instructions)
-6) [Auto-approval](#auto-approval)
-
-### General guidelines
-The `review` tool provides a collection of possible feedbacks about a PR.
-It is recommended to review the [Configuration options](#configuration-options) section, and choose the relevant options for your use case.
-
-Some of the features that are disabled by default are quite useful, and should be considered for enabling. For example:
-`require_score_review`, `require_soc2_ticket`, and more.
-
-On the other hand, if you find one of the enabled features to be irrelevant for your use case, disable it. No default configuration can fit all use cases.
-
-### Code suggestions
-If you set `num_code_suggestions`>0 , the `review` tool will also provide code suggestions.
-
-Notice If you are interested **only** in the code suggestions, it is recommended to use the [`improve`](./IMPROVE.md) feature instead, since it is a dedicated only to code suggestions, and usually gives better results.
-Use the `review` tool if you want to get more comprehensive feedback, which includes code suggestions as well.
-
-### Automation
-- When you first install the app, the [default mode](https://github.com/Codium-ai/pr-agent/blob/main/Usage.md#github-app-automatic-tools) for the `review` tool is:
-```
-pr_commands = ["/review", ...]
-```
-Meaning the `review` tool will run automatically on every PR, with the default configuration.
-Edit this field to enable/disable the tool, or to change the used configurations.
-
-### Auto-labels
-The `review` tool can auto-generate two specific types of labels for a PR:
-- a `possible security issue` label that detects a possible [security issue](https://github.com/Codium-ai/pr-agent/blob/tr/user_description/pr_agent/settings/pr_reviewer_prompts.toml#L136) (`enable_review_labels_security` flag)
-- a `Review effort [1-5]: x` label, where x is the estimated effort to review the PR (`enable_review_labels_effort` flag)
-
-Both modes are useful, and we recommended to enable them.
-
-### Extra instructions
-Extra instructions are important.
-The `review` tool can be configured with extra instructions, which can be used to guide the model to a feedback tailored to the needs of your project.
-
-Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter. Specify the relevant sub-tool, and the relevant aspects of the PR that you want to emphasize.
-
-Examples for extra instructions:
-```
-[pr_reviewer] # /review #
-extra_instructions="""
-In the code feedback section, emphasize the following:
-- Does the code logic cover relevant edge cases?
-- Is the code logic clear and easy to understand?
-- Is the code logic efficient?
-...
-"""
-```
-Use triple quotes to write multi-line instructions. Use bullet points to make the instructions more readable.
-
-
-### Auto-approval
-PR-Agent can approve a PR when a specific comment is invoked.
-
-To ensure safety, the auto-approval feature is disabled by default. To enable auto-approval, you need to actively set in a pre-defined configuration file the following:
-```
-[pr_reviewer]
-enable_auto_approval = true
-```
-(this specific flag cannot be set with a command line argument, only in the configuration file, committed to the repository)
-
-
-After enabling, by commenting on a PR:
-```
-/review auto_approve
-```
-PR-Agent will automatically approve the PR, and add a comment with the approval.
-
-
-You can also enable auto-approval only if the PR meets certain requirements, such as that the `estimated_review_effort` label is equal or below a certain threshold, by adjusting the flag:
-```
-[pr_reviewer]
-maximal_review_effort = 5
-```
diff --git a/docs/TOOLS_GUIDE.md b/docs/TOOLS_GUIDE.md
deleted file mode 100644
index a993e0ef..00000000
--- a/docs/TOOLS_GUIDE.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## Tools Guide
-- [DESCRIBE](./DESCRIBE.md)
-- [REVIEW](./REVIEW.md)
-- [IMPROVE](./IMPROVE.md)
-- [ASK](./ASK.md)
-- [SIMILAR_ISSUE](./SIMILAR_ISSUE.md)
-- [UPDATE CHANGELOG](./UPDATE_CHANGELOG.md)
-- [CUSTOM SUGGESTIONS](./CUSTOM_SUGGESTIONS.md) 💎
-- [ADD DOCUMENTATION](./ADD_DOCUMENTATION.md) 💎
-- [GENERATE CUSTOM LABELS](./GENERATE_CUSTOM_LABELS.md) 💎
-- [Analyze](./Analyze.md) 💎
-- [Test](./TEST.md) 💎
-- [CI Feedback](./CI_FEEDBACK.md) 💎
-
-See the **[installation guide](/INSTALL.md)** for instructions on setting up PR-Agent.
diff --git a/docs/docs/CNAME b/docs/docs/CNAME
new file mode 100644
index 00000000..1cbf9740
--- /dev/null
+++ b/docs/docs/CNAME
@@ -0,0 +1 @@
+pr-agent-docs.codium.ai
diff --git a/docs/docs/assets/favicon.ico b/docs/docs/assets/favicon.ico
new file mode 100644
index 00000000..fece6b1e
Binary files /dev/null and b/docs/docs/assets/favicon.ico differ
diff --git a/docs/docs/assets/logo.png b/docs/docs/assets/logo.png
new file mode 100644
index 00000000..4c9fec1d
Binary files /dev/null and b/docs/docs/assets/logo.png differ
diff --git a/PR_COMPRESSION.md b/docs/docs/core-abilities/index.md
similarity index 81%
rename from PR_COMPRESSION.md
rename to docs/docs/core-abilities/index.md
index 101874c0..074d4c09 100644
--- a/PR_COMPRESSION.md
+++ b/docs/docs/core-abilities/index.md
@@ -1,42 +1,52 @@
-# PR Compression Strategy
+## PR Compression Strategy
There are two scenarios:
+
1. The PR is small enough to fit in a single prompt (including system and user prompt)
2. The PR is too large to fit in a single prompt (including system and user prompt)
For both scenarios, we first use the following strategy
-#### Repo language prioritization strategy
+#### Repo language prioritization strategy
We prioritize the languages of the repo based on the following criteria:
+
1. Exclude binary files and non code files (e.g. images, pdfs, etc)
2. Given the main languages used in the repo
-2. We sort the PR files by the most common languages in the repo (in descending order):
+3. We sort the PR files by the most common languages in the repo (in descending order):
* ```[[file.py, file2.py],[file3.js, file4.jsx],[readme.md]]```
-## Small PR
+### Small PR
In this case, we can fit the entire PR in a single prompt:
1. Exclude binary files and non code files (e.g. images, pdfs, etc)
2. We Expand the surrounding context of each patch to 3 lines above and below the patch
-## Large PR
-### Motivation
+### Large PR
+
+#### Motivation
Pull Requests can be very long and contain a lot of information with varying degree of relevance to the pr-agent.
We want to be able to pack as much information as possible in a single LMM prompt, while keeping the information relevant to the pr-agent.
-
-
#### Compression strategy
We prioritize additions over deletions:
- Combine all deleted files into a single list (`deleted files`)
- File patches are a list of hunks, remove all hunks of type deletion-only from the hunks in the file patch
+
#### Adaptive and token-aware file patch fitting
We use [tiktoken](https://github.com/openai/tiktoken) to tokenize the patches after the modifications described above, and we use the following strategy to fit the patches into the prompt:
-1. Within each language we sort the files by the number of tokens in the file (in descending order):
- * ```[[file2.py, file.py],[file4.jsx, file3.js],[readme.md]]```
-2. Iterate through the patches in the order described above
-2. Add the patches to the prompt until the prompt reaches a certain buffer from the max token length
-3. If there are still patches left, add the remaining patches as a list called `other modified files` to the prompt until the prompt reaches the max token length (hard stop), skip the rest of the patches.
-4. If we haven't reached the max token length, add the `deleted files` to the prompt until the prompt reaches the max token length (hard stop), skip the rest of the patches.
-### Example
+1. Within each language we sort the files by the number of tokens in the file (in descending order):
+ - ```[[file2.py, file.py],[file4.jsx, file3.js],[readme.md]]```
+2. Iterate through the patches in the order described above
+3. Add the patches to the prompt until the prompt reaches a certain buffer from the max token length
+4. If there are still patches left, add the remaining patches as a list called `other modified files` to the prompt until the prompt reaches the max token length (hard stop), skip the rest of the patches.
+5. If we haven't reached the max token length, add the `deleted files` to the prompt until the prompt reaches the max token length (hard stop), skip the rest of the patches.
+
+#### Example
+
+
+## YAML Prompting
+TBD
+
+## Static Code Analysis 💎
+TBD
diff --git a/docs/docs/css/custom.css b/docs/docs/css/custom.css
new file mode 100644
index 00000000..0e9b26fe
--- /dev/null
+++ b/docs/docs/css/custom.css
@@ -0,0 +1,98 @@
+
+
+:root {
+ --md-primary-fg-color: #765bfa;
+ --md-accent-fg-color: #AEA1F1;
+ }
+.md-nav__title, .md-nav__link {
+ font-size: 16px; /* Adjust the font size as needed */
+}
+
+.md-tabs__link {
+ font-size: 16px; /* Adjust the font size as needed */
+}
+
+.md-header__title {
+ font-size: 20px; /* Adjust the font size as needed */
+}
+
+/*
+@media (prefers-color-scheme: light) {
+ body {
+ --md-primary-fg-color: #00ffee !important;
+ --md-primary-bg-color: #ff0000 !important;
+ }
+
+ body, .md-main, .md-content {
+ background-color: #4312f5 !important;
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ body {
+ --md-primary-fg-color: #171518 !important;
+ --md-primary-bg-color: #171518 !important;
+ }
+
+ body, .md-main, .md-content {
+ background-color: #171518 !important;
+ }
+
+ .md-header__title {
+ color: #ffffff !important;
+ }
+
+ .md-tabs .md-tabs__link {
+ color: #ffffff !important;
+ }
+
+ .md-tabs .md-tabs__link:hover,
+ .md-tabs .md-tabs__link:focus {
+ color: #ffffff !important;
+ }
+
+ .md-header__button {
+ color: #ffffff !important;
+ }
+
+ .md-header__button svg {
+ fill: currentColor !important;
+ }
+
+ .md-header__button:hover,
+ .md-header__button:focus {
+ color: #ffffff !important;
+ }
+
+ .md-header__button:hover svg,
+ .md-header__button:focus svg {
+ fill: currentColor !important;
+ }
+
+ .md-search__icon svg {
+ fill: #ffffff !important;
+ }
+
+ .md-search__input {
+ color: #ffffff !important;
+ }
+
+ .md-nav__item--active > .md-nav__link--active,
+ .md-nav__link--active {
+ color: #AEA1F1 !important;
+ }
+
+ .md-nav--secondary .md-nav__title {
+ background: #171518;
+ box-shadow: 0 0 0.4rem 0.4rem #171518;
+ }
+
+ .md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link {
+ background: #171518;
+ box-shadow: 0 0 0.4rem 0.4rem #171518;
+ }
+
+ .md-content a {
+ color: #AEA1F1 !important;
+ }
+} */
\ No newline at end of file
diff --git a/docs/docs/index.md b/docs/docs/index.md
new file mode 100644
index 00000000..48de1a88
--- /dev/null
+++ b/docs/docs/index.md
@@ -0,0 +1,176 @@
+# Overview
+
+CodiumAI PR-Agent is an open-source tool to help efficiently review and handle pull requests.
+
+- See the [Installation Guide](./installation/index.md) for instructions on installing and running the tool on different git platforms.
+
+- See the [Usage Guide](./usage-guide/index.md) for instructions on running the PR-Agent commands via different interfaces, including _CLI_, _online usage_, or by _automatically triggering_ them when a new PR is opened.
+
+- See the [Tools Guide](./tools/index.md) for a detailed description of the different tools (tools are run via the commands).
+
+
+## Features table
+PR-Agent offers extensive pull request functionalities across various git providers.
+
+| | | GitHub | Gitlab | Bitbucket | Azure DevOps |
+|-------|---------------------------------------------------------------------------------------------------------------------|:------:|:------:|:---------:|:------------:|
+| TOOLS | Review | ✔️ | ✔️ | ✔️ | ✔️ |
+| | ⮑ Incremental | ✔️ | | | |
+| | ⮑ [SOC2 Compliance](./tools/review.md#soc2-ticket-compliance-💎){:target="_blank"} 💎 | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Ask | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Describe | ✔️ | ✔️ | ✔️ | ✔️ |
+| | ⮑ [Inline file summary](./tools/describe.md#inline-file-summary-💎){:target="_blank"} 💎 | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Improve | ✔️ | ✔️ | ✔️ | ✔️ |
+| | ⮑ Extended | ✔️ | ✔️ | ✔️ | ✔️ |
+| | [Custom Suggestions](./tools/custom_suggestions.md){:target="_blank"} 💎 | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Reflect and Review | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Update CHANGELOG.md | ✔️ | ✔️ | ✔️ | ️ |
+| | Find Similar Issue | ✔️ | | | ️ |
+| | [Add PR Documentation](./tools/documentation.md){:target="_blank"} 💎 | ✔️ | ✔️ | ✔️ | ✔️ |
+| | [Generate Custom Labels](./tools/describe.md#handle-custom-labels-from-the-repos-labels-page-💎){:target="_blank"} 💎 | ✔️ | ✔️ | | ✔️ |
+| | [Analyze PR Components](./tools/analyze.md){:target="_blank"} 💎 | ✔️ | ✔️ | ✔️ | ✔️ |
+| | | | | | ️ |
+| USAGE | CLI | ✔️ | ✔️ | ✔️ | ✔️ |
+| | App / webhook | ✔️ | ✔️ | | ✔️ |
+| | Tagging bot | ✔️ | | | ✔️ |
+| | Actions | ✔️ | | | ️ |
+| | | | | |
+| CORE | PR compression | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Repo language prioritization | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Adaptive and token-aware file patch fitting | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Multiple models support | ✔️ | ✔️ | ✔️ | ✔️ |
+| | Incremental PR review | ✔️ | | | |
+| | [Static code analysis](./tools/analyze.md/){:target="_blank"} 💎 | ✔️ | ✔️ | ✔️ | ✔️ |
+| | [Multiple configuration options](./usage-guide/configuration_options.md){:target="_blank"} 💎 | ✔️ | ✔️ | ✔️ | ✔️ |
+
+💎 marks a feature available only in [PR-Agent Pro](https://www.codium.ai/pricing/){:target="_blank"}
+
+
+## Example results
+
+