Files
pr-agent/docs/site/usage-guide/automations_and_usage/index.html
2024-03-06 21:52:11 +02:00

1613 lines
54 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../mail_notifications/">
<link rel="next" href="../additional_configurations/">
<link rel="icon" href="../../assets/favicon.ico">
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.13">
<title>Usage and Automation - CodiumAI PR-Agent</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.7e359304.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../css/custom.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="Usage and Automation - CodiumAI PR-Agent" >
<meta property="og:description" content="None" >
<meta property="og:image" content="./assets/images/social/usage-guide/automations_and_usage.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="None" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Usage and Automation - CodiumAI PR-Agent" >
<meta name="twitter:description" content="None" >
<meta name="twitter:image" content="./assets/images/social/usage-guide/automations_and_usage.png" >
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#local-repo-cli" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="CodiumAI PR-Agent" class="md-header__button md-logo" aria-label="CodiumAI PR-Agent" data-md-component="logo">
<img src="../../assets/logo.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
CodiumAI PR-Agent
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Usage and Automation
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9h-1.9M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69m-9.15 3.96h2.3L12 9l-1.15 3.65Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../.." class="md-tabs__link">
Overview
</a>
</li>
<li class="md-tabs__item">
<a href="../../installation/" class="md-tabs__link">
Installation
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../" class="md-tabs__link">
Usage Guide
</a>
</li>
<li class="md-tabs__item">
<a href="../../tools/" class="md-tabs__link">
Tools
</a>
</li>
<li class="md-tabs__item">
<a href="../../core-abilities/" class="md-tabs__link">
Core Abilities
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="CodiumAI PR-Agent" class="md-nav__button md-logo" aria-label="CodiumAI PR-Agent" data-md-component="logo">
<img src="../../assets/logo.svg" alt="logo">
</a>
CodiumAI PR-Agent
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
<div class="md-nav__link md-nav__container">
<a href="../../installation/" class="md-nav__link ">
<span class="md-ellipsis">
Installation
</span>
</a>
<label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../installation/locally/" class="md-nav__link">
<span class="md-ellipsis">
Locally
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../installation/github/" class="md-nav__link">
<span class="md-ellipsis">
GitHub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../installation/gitlab/" class="md-nav__link">
<span class="md-ellipsis">
GitLab
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../installation/bitbucket/" class="md-nav__link">
<span class="md-ellipsis">
BitBucket
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
Usage Guide
</span>
</a>
<label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Usage Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../introduction/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../configuration_options/" class="md-nav__link">
<span class="md-ellipsis">
Configuration Options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../mail_notifications/" class="md-nav__link">
<span class="md-ellipsis">
Managing email notifications
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Usage and Automation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Usage and Automation
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#local-repo-cli" class="md-nav__link">
<span class="md-ellipsis">
Local repo (CLI)
</span>
</a>
<nav class="md-nav" aria-label="Local repo (CLI)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#online-usage" class="md-nav__link">
<span class="md-ellipsis">
Online usage
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#github-app" class="md-nav__link">
<span class="md-ellipsis">
GitHub App
</span>
</a>
<nav class="md-nav" aria-label="GitHub App">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#github-app-automatic-tools-when-a-new-pr-is-opened" class="md-nav__link">
<span class="md-ellipsis">
GitHub app automatic tools when a new PR is opened
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#github-app-automatic-tools-for-push-actions-commits-to-an-open-pr" class="md-nav__link">
<span class="md-ellipsis">
GitHub app automatic tools for push actions (commits to an open PR)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#github-action" class="md-nav__link">
<span class="md-ellipsis">
GitHub Action
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#gitlab-webhook" class="md-nav__link">
<span class="md-ellipsis">
GitLab Webhook
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bitbucket-app" class="md-nav__link">
<span class="md-ellipsis">
BitBucket App
</span>
</a>
<nav class="md-nav" aria-label="BitBucket App">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#bitbucket-self-hosted-app-automatic-tools" class="md-nav__link">
<span class="md-ellipsis">
BitBucket Self-Hosted App automatic tools
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#azure-devops-provider" class="md-nav__link">
<span class="md-ellipsis">
Azure DevOps provider
</span>
</a>
<nav class="md-nav" aria-label="Azure DevOps provider">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#azure-devops-webhook" class="md-nav__link">
<span class="md-ellipsis">
Azure DevOps Webhook
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../additional_configurations/" class="md-nav__link">
<span class="md-ellipsis">
Additional Configurations
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<div class="md-nav__link md-nav__container">
<a href="../../tools/" class="md-nav__link ">
<span class="md-ellipsis">
Tools
</span>
</a>
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../tools/describe/" class="md-nav__link">
<span class="md-ellipsis">
Describe
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/review/" class="md-nav__link">
<span class="md-ellipsis">
Review
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/improve/" class="md-nav__link">
<span class="md-ellipsis">
Improve
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/ask/" class="md-nav__link">
<span class="md-ellipsis">
Ask
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/update_changelog/" class="md-nav__link">
<span class="md-ellipsis">
Update Changelog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/similar_issues/" class="md-nav__link">
<span class="md-ellipsis">
Similar Issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/analyze/" class="md-nav__link">
<span class="md-ellipsis">
💎 Analyze
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/test/" class="md-nav__link">
<span class="md-ellipsis">
💎 Test
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/documentation/" class="md-nav__link">
<span class="md-ellipsis">
💎 Documentation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/custom_labels/" class="md-nav__link">
<span class="md-ellipsis">
💎 Custom Labels
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/custom_suggestions/" class="md-nav__link">
<span class="md-ellipsis">
💎 Custom Suggestions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../tools/ci_feedback/" class="md-nav__link">
<span class="md-ellipsis">
💎 CI Feedback
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<div class="md-nav__link md-nav__container">
<a href="../../core-abilities/" class="md-nav__link ">
<span class="md-ellipsis">
Core Abilities
</span>
</a>
<label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Core Abilities
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../core-abilities/pr-compression/" class="md-nav__link">
<span class="md-ellipsis">
PR Compression
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>Usage and Automation</h1>
<h2 id="local-repo-cli">Local repo (CLI)<a class="headerlink" href="#local-repo-cli" title="Permanent link">&para;</a></h2>
<p>When running from your local repo (CLI), your local configuration file will be used.
Examples of invoking the different tools via the CLI:</p>
<ul>
<li><strong>Review</strong>: <code>python -m pr_agent.cli --pr_url=&lt;pr_url&gt; review</code></li>
<li><strong>Describe</strong>: <code>python -m pr_agent.cli --pr_url=&lt;pr_url&gt; describe</code></li>
<li><strong>Improve</strong>: <code>python -m pr_agent.cli --pr_url=&lt;pr_url&gt; improve</code></li>
<li><strong>Ask</strong>: <code>python -m pr_agent.cli --pr_url=&lt;pr_url&gt; ask "Write me a poem about this PR"</code></li>
<li><strong>Reflect</strong>: <code>python -m pr_agent.cli --pr_url=&lt;pr_url&gt; reflect</code></li>
<li><strong>Update Changelog</strong>: <code>python -m pr_agent.cli --pr_url=&lt;pr_url&gt; update_changelog</code></li>
</ul>
<p><code>&lt;pr_url&gt;</code> is the url of the relevant PR (for example: <a href="https://github.com/Codium-ai/pr-agent/pull/50">#50</a>).</p>
<p><strong>Notes:</strong></p>
<p>(1) in addition to editing your local configuration file, you can also change any configuration value by adding it to the command line:
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>python -m pr_agent.cli --pr_url=&lt;pr_url&gt; /review --pr_reviewer.extra_instructions=&quot;focus on the file: ...&quot;
</code></pre></div></p>
<p>(2) You can print results locally, without publishing them, by setting in <code>configuration.toml</code>:
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>[config]
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>publish_output=false
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>verbosity_level=2
</code></pre></div>
This is useful for debugging or experimenting with different tools.</p>
<h3 id="online-usage">Online usage<a class="headerlink" href="#online-usage" title="Permanent link">&para;</a></h3>
<p>Online usage means invoking PR-Agent tools by <a href="https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901">comments</a> on a PR.
Commands for invoking the different tools via comments:</p>
<ul>
<li><strong>Review</strong>: <code>/review</code></li>
<li><strong>Describe</strong>: <code>/describe</code></li>
<li><strong>Improve</strong>: <code>/improve</code></li>
<li><strong>Ask</strong>: <code>/ask "..."</code></li>
<li><strong>Reflect</strong>: <code>/reflect</code></li>
<li><strong>Update Changelog</strong>: <code>/update_changelog</code></li>
</ul>
<p>To edit a specific configuration value, just add <code>--config_path=&lt;value&gt;</code> to any command.
For example, if you want to edit the <code>review</code> tool configurations, you can run:
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>/review --pr_reviewer.extra_instructions=&quot;...&quot; --pr_reviewer.require_score_review=false
</code></pre></div>
Any configuration value in <a href="https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml">configuration file</a> file can be similarly edited. Comment <code>/config</code> to see the list of available configurations.</p>
<h2 id="github-app">GitHub App<a class="headerlink" href="#github-app" title="Permanent link">&para;</a></h2>
<h3 id="github-app-automatic-tools-when-a-new-pr-is-opened">GitHub app automatic tools when a new PR is opened<a class="headerlink" href="#github-app-automatic-tools-when-a-new-pr-is-opened" title="Permanent link">&para;</a></h3>
<p>The <a href="https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml#L108">github_app</a> section defines GitHub app specific configurations. </p>
<p>The configuration parameter <code>pr_commands</code> defines the list of tools that will be <strong>run automatically</strong> when a new PR is opened.
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>[github_app]
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>pr_commands = [
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a> &quot;/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true --pr_description.final_update_message=false&quot;,
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> &quot;/review --pr_reviewer.num_code_suggestions=0 --pr_reviewer.final_update_message=false&quot;,
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> &quot;/improve&quot;,
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a>]
</code></pre></div>
This means that when a new PR is opened/reopened or marked as ready for review, PR-Agent will run the <code>describe</code>, <code>review</code> and <code>improve</code> tools.<br />
For the <code>describe</code> tool, for example, the <code>add_original_user_description</code> and <code>keep_original_user_title</code> parameters will be set to true.</p>
<p>You can override the default tool parameters by using one the three options for a <a href="https://codium-ai.github.io/Docs-PR-Agent/usage-guide/#configuration-options">configuration file</a>: <strong>wiki</strong>, <strong>local</strong>, or <strong>global</strong>.
For example, if your local <code>.pr_agent.toml</code> file contains:
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>[pr_description]
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>add_original_user_description = false
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>keep_original_user_title = false
</code></pre></div>
When a new PR is opened, PR-Agent will run the <code>describe</code> tool with the above parameters.</p>
<p>To cancel the automatic run of all the tools, set:
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>[github_app]
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>handle_pr_actions = []
</code></pre></div></p>
<p>You can also disable automatic runs for PRs with specific titles, by setting the <code>ignore_pr_titles</code> parameter with the relevant regex. For example:
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>[github_app]
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>ignore_pr_title = [&quot;^[Auto]&quot;, &quot;.*ignore.*&quot;]
</code></pre></div>
will ignore PRs with titles that start with "Auto" or contain the word "ignore".</p>
<h3 id="github-app-automatic-tools-for-push-actions-commits-to-an-open-pr">GitHub app automatic tools for push actions (commits to an open PR)<a class="headerlink" href="#github-app-automatic-tools-for-push-actions-commits-to-an-open-pr" title="Permanent link">&para;</a></h3>
<p>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.</p>
<p>The configuration toggle <code>handle_push_trigger</code> can be used to enable this feature.<br />
The configuration parameter <code>push_commands</code> defines the list of tools that will be <strong>run automatically</strong> when new code is pushed to the PR.
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>[github_app]
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>handle_push_trigger = true
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>push_commands = [
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a> &quot;/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true&quot;,
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a> &quot;/review --pr_reviewer.num_code_suggestions=0&quot;,
<a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a>]
</code></pre></div>
This means that when new code is pushed to the PR, the PR-Agent will run the <code>describe</code> and <code>review</code> tools, with the specified parameters.</p>
<h2 id="github-action">GitHub Action<a class="headerlink" href="#github-action" title="Permanent link">&para;</a></h2>
<p><code>GitHub Action</code> is a different way to trigger PR-Agent tools, and uses a different configuration mechanism than <code>GitHub App</code>.
You can configure settings for <code>GitHub Action</code> by adding environment variables under the env section in <code>.github/workflows/pr_agent.yml</code> file.
Specifically, start by setting the following environment variables:
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="w"> </span><span class="nt">env</span><span class="p">:</span>
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="w"> </span><span class="nt">OPENAI_KEY</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.OPENAI_KEY }}</span><span class="w"> </span><span class="c1"># Make sure to add your OpenAI key to your repo secrets</span>
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="w"> </span><span class="nt">GITHUB_TOKEN</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.GITHUB_TOKEN }}</span><span class="w"> </span><span class="c1"># Make sure to add your GitHub token to your repo secrets</span>
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="w"> </span><span class="nt">github_action_config.auto_review</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;true&quot;</span><span class="w"> </span><span class="c1"># enable\disable auto review</span>
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a><span class="w"> </span><span class="nt">github_action_config.auto_describe</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;true&quot;</span><span class="w"> </span><span class="c1"># enable\disable auto describe</span>
<a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a><span class="w"> </span><span class="nt">github_action_config.auto_improve</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;true&quot;</span><span class="w"> </span><span class="c1"># enable\disable auto improve</span>
</code></pre></div>
<code>github_action_config.auto_review</code>, <code>github_action_config.auto_describe</code> and <code>github_action_config.auto_improve</code> 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.</p>
<p>Note that you can give additional config parameters by adding environment variables to <code>.github/workflows/pr_agent.yml</code>, or by using a <code>.pr_agent.toml</code> file in the root of your repo, similar to the GitHub App usage.</p>
<p>For example, you can set an environment variable: <code>pr_description.add_original_user_description=false</code>, or add a <code>.pr_agent.toml</code> file with the following content:
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>[pr_description]
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>add_original_user_description = false
</code></pre></div></p>
<h2 id="gitlab-webhook">GitLab Webhook<a class="headerlink" href="#gitlab-webhook" title="Permanent link">&para;</a></h2>
<p>After setting up a GitLab webhook, to control which commands will run automatically when a new PR is opened, you can set the <code>pr_commands</code> parameter in the configuration file, similar to the GitHub App:
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>[gitlab]
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>pr_commands = [
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a> &quot;/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true&quot;,
<a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a> &quot;/review --pr_reviewer.num_code_suggestions=0&quot;,
<a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a> &quot;/improve&quot;,
<a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a>]
</code></pre></div></p>
<h2 id="bitbucket-app">BitBucket App<a class="headerlink" href="#bitbucket-app" title="Permanent link">&para;</a></h2>
<p>Similar to GitHub app, when running PR-Agent from BitBucket App, the default <a href="https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml">configuration file</a> from a pre-built docker will be initially loaded.</p>
<p>By uploading a local <code>.pr_agent.toml</code> file to the root of the repo's main branch, you can edit and customize any configuration parameter. Note that you need to upload <code>.pr_agent.toml</code> prior to creating a PR, in order for the configuration to take effect.</p>
<p>For example, if your local <code>.pr_agent.toml</code> file contains:
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>[pr_reviewer]
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>inline_code_comments = true
</code></pre></div></p>
<p>Each time you invoke a <code>/review</code> tool, it will use inline code comments.</p>
<h3 id="bitbucket-self-hosted-app-automatic-tools">BitBucket Self-Hosted App automatic tools<a class="headerlink" href="#bitbucket-self-hosted-app-automatic-tools" title="Permanent link">&para;</a></h3>
<p>to control which commands will run automatically when a new PR is opened, you can set the <code>pr_commands</code> parameter in the configuration file:
Specifically, set the following values:</p>
<p>[bitbucket_app]
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>pr_commands = [
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a> &quot;/review --pr_reviewer.num_code_suggestions=0&quot;,
<a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a> &quot;/improve --pr_code_suggestions.summarize=false&quot;,
<a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a>]
</code></pre></div></p>
<h2 id="azure-devops-provider">Azure DevOps provider<a class="headerlink" href="#azure-devops-provider" title="Permanent link">&para;</a></h2>
<p>To use Azure DevOps provider use the following settings in configuration.toml:
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>[config]
<a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>git_provider=&quot;azure&quot;
<a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a>use_repo_settings_file=false
</code></pre></div></p>
<p>Azure DevOps provider supports <a href="https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&amp;tabs=Windows">PAT token</a> or <a href="https://learn.microsoft.com/en-us/azure/developer/python/sdk/authentication-overview#authentication-in-server-environments">DefaultAzureCredential</a> 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.</p>
<p>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:
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>[azure_devops]
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>org = &quot;https://dev.azure.com/YOUR_ORGANIZATION/&quot;
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a># pat = &quot;YOUR_PAT_TOKEN&quot; needed only if using PAT for authentication
</code></pre></div></p>
<h3 id="azure-devops-webhook">Azure DevOps Webhook<a class="headerlink" href="#azure-devops-webhook" title="Permanent link">&para;</a></h3>
<p>To control which commands will run automatically when a new PR is opened, you can set the <code>pr_commands</code> parameter in the configuration file, similar to the GitHub App:
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>[azure_devops_server]
<a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a>pr_commands = [
<a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a> &quot;/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true&quot;,
<a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> &quot;/review --pr_reviewer.num_code_suggestions=0&quot;,
<a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> &quot;/improve&quot;,
<a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a>]
</code></pre></div></p>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
&copy; 2024 <a href="https://www.codium.ai/" target="_blank" rel="noopener">CodiumAI</a>
</div>
</div>
<div class="md-social">
<a href="https://github.com/Codium-ai" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://discord.com/invite/SgSxuQ65GF" target="_blank" rel="noopener" title="discord.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M524.531 69.836a1.5 1.5 0 0 0-.764-.7A485.065 485.065 0 0 0 404.081 32.03a1.816 1.816 0 0 0-1.923.91 337.461 337.461 0 0 0-14.9 30.6 447.848 447.848 0 0 0-134.426 0 309.541 309.541 0 0 0-15.135-30.6 1.89 1.89 0 0 0-1.924-.91 483.689 483.689 0 0 0-119.688 37.107 1.712 1.712 0 0 0-.788.676C39.068 183.651 18.186 294.69 28.43 404.354a2.016 2.016 0 0 0 .765 1.375 487.666 487.666 0 0 0 146.825 74.189 1.9 1.9 0 0 0 2.063-.676A348.2 348.2 0 0 0 208.12 430.4a1.86 1.86 0 0 0-1.019-2.588 321.173 321.173 0 0 1-45.868-21.853 1.885 1.885 0 0 1-.185-3.126 251.047 251.047 0 0 0 9.109-7.137 1.819 1.819 0 0 1 1.9-.256c96.229 43.917 200.41 43.917 295.5 0a1.812 1.812 0 0 1 1.924.233 234.533 234.533 0 0 0 9.132 7.16 1.884 1.884 0 0 1-.162 3.126 301.407 301.407 0 0 1-45.89 21.83 1.875 1.875 0 0 0-1 2.611 391.055 391.055 0 0 0 30.014 48.815 1.864 1.864 0 0 0 2.063.7A486.048 486.048 0 0 0 610.7 405.729a1.882 1.882 0 0 0 .765-1.352c12.264-126.783-20.532-236.912-86.934-334.541ZM222.491 337.58c-28.972 0-52.844-26.587-52.844-59.239s23.409-59.241 52.844-59.241c29.665 0 53.306 26.82 52.843 59.239 0 32.654-23.41 59.241-52.843 59.241Zm195.38 0c-28.971 0-52.843-26.587-52.843-59.239s23.409-59.241 52.843-59.241c29.667 0 53.307 26.82 52.844 59.239 0 32.654-23.177 59.241-52.844 59.241Z"/></svg>
</a>
<a href="https://www.youtube.com/@Codium-AI" target="_blank" rel="noopener" title="www.youtube.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
</a>
<a href="https://www.linkedin.com/company/codiumai" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
<a href="https://twitter.com/CodiumAI" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.instagram.com/codiumai/" target="_blank" rel="noopener" title="www.instagram.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.path", "navigation.top", "navigation.tracking", "navigation.indexes", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy", "toc.integrate"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.c8d2eff1.min.js"></script>
</body>
</html>