概要
Cognoは、チームがすでに作業しているrepositoryに直接つながります。GitHubを連携すると、pull request・issue・commitをそのまま読み取って 提案task に変え、承認済みのPRのmergeといった操作まで行えます。普段のworkflowから離れる必要はありません。
事前確認
- 対象ワークスペースで連携を管理する権限がある。
- 対象organizationにGitHub Appをインストールできる(またはorg ownerに承認してもらえる)。
- Cognoに監視させるrepositoryが分かっている。
CognoでGitHubを接続する
1
GitHub連携を開く
連携 を開き、GitHub を選択します。
2
GitHub Appをインストールする
アカウントを追加を押します。デスクトップアプリでは標準ブラウザで接続画面が開くので、GitHubでインストールを完了します。
3
GitHubで承認する
organizationまたは個人アカウントを選んでAppを承認します。GitHub側で全リポジトリ、または特定のリポジトリを選べます。organizationの所有者による承認が必要な場合はGitHub側でリクエストとして受理され、Cognoにその旨が表示されます。承認後に アカウントを追加 をもう一度実行すると接続が完了します。
4
organizationを確認する
Cognoに戻ると、GitHubアカウントの一覧にそのアカウントとリポジトリの設定が表示されます。接続したアカウントはすべて同じページに並びます。別のorganizationや個人アカウントはアカウントを追加から接続できます。
repositoryを選ぶ
1
organizationを開く
接続したアカウントはGitHubアカウントの一覧にすべて表示され、それぞれにリポジトリ・メンバーの対応づけ・Issueの取り込み設定があります。アカウントの**⋯メニューに接続を解除**があります。
2
repo一覧は自動で同期される
リポジトリ の一覧は、アカウントを開いたときと、GitHub側で許可されたリポジトリがCognoの取り込み済みより多いときに、Cognoが自動でGitHub Appのインストールから取得します。実行中は リポジトリを同期中… と表示されます。
3
利用するrepositoryを選ぶ
Cognoに監視させるrepositoryのトグルをオンにします。変更は自動で保存されます。保存に失敗すると元の状態に戻り、エラーを表示します。
IssueをTaskとしてImportする
Issueの取り込み設定を展開し、Issue のインポートで、新しいOpen IssueをTaskにするrepositoryを有効にします。変更は自動で保存されます。現在OpenのIssueも取り込む場合は 既存IssueをImport を押します。 Issue フィールド対応 でrepositoryを選び、Cognoが取得した値を対応付けます。- Issue state → Task status
- labels → tags
- assignees → ワークスペース members
- milestones → projects
GitHub memberをワークスペース memberに対応付ける
organizationの接続ではメンバーの対応づけを展開し、GitHubのメンバーをワークスペースのメンバーに対応づけます。個人アカウントの接続にはこの欄は表示されません。 各行のメンバーを選択で対応づけます。解除する場合はメニューの対応づけを解除、一覧を更新する場合はメンバーを同期を使います。自分のGitHubアカウントにログインする
アカウント → プロフィールの GitHub 行で接続を選びます。デスクトップアプリでは標準ブラウザが開くので、ログインを完了してCognoに戻ります。確認後は同じ行にGitHubのユーザー名と接続済みが表示されます。この個人ログインはすべてのワークスペースで共通で、ワークスペースの連携画面とは別に設定します。
メンバーの対応づけにはAccount設定へのリンクがあります。個人ログインを解除してもワークスペースのリポジトリ接続は残り、リポジトリ接続を解除しても個人のGitHubログインは残ります。
CognoがGitHubで行うこと
taskからpull requestをレビューする
taskに開いているpull requestがある場合、GitHub work の Review からコメント・Approve・変更リクエストを送信できます。reviewerが変更をリクエストすると、taskにはreview内容の要約が表示されます。現在の未解決inline threadがすべて読み込まれ、文脈を確認しながら各threadへ返信または解決できます。 変更ファイル を開くと、pull requestの変更ファイルとDiffを取得します。追加・削除・contextの任意行を選択し、coding AIへの具体的な実装指示を新しいinline commentとして投稿できます。 Cognoはreviewを書き込む直前にpull requestの最新head commitを再確認します。inline commentは現在のDiffに存在する行かどうかも検証します。taskを開いた後にPRが更新された場合は、GitHubの状態を更新し、新しいheadを確認してから送信してください。review・返信・thread解決は、接続済みCogno GitHub Appとして投稿されます。PR作成者は自身のPRをApproveできないため、Appが作成したPRは人のreviewerが承認してください。AppのApproveが必須review条件を満たすかどうかは、GitHub repositoryのルールで決まります。
エージェントがGitHubでできること
Engineが実行するrunには、GitHub接続ごとにGitHubのtoolが渡されます。Read GitHub、Publish to GitHub、Write to GitHub、Merge on GitHub の4つとも最初から許可です。書き込みやmergeの前に人の確認を挟みたいときは 確認 を選びます。対面の実行では事前に確認が表示され、無人の実行では拒否されます。このページの エージェントツール で、ワークスペースのownerまたはadminが接続ごとに ブロック・確認・許可 から選べます。Project設定の Integrations ではさらに狭められ、各行は最初ワークスペースの値に従います。
どのProjectのエージェントも、接続が届くすべてのrepositoryを使えます。あるProjectのエージェントをそのProjectのrepositoryだけに限るには、Project設定の Integrations でGitHubの行を開き、エージェントが使えるリポジトリ の このProjectのリポジトリだけ をオンにします。制限はその時点のrepositoryの一覧として保存されます。あとでProjectのrepositoryが変わったら、Projectのリポジトリに合わせる で更新してください。
Read GitHub はGitHubから直接読み取ります。対象は接続が届くrepositoryです(選択したrepository。1つも選択していなければインストールが許可するすべてのrepository)。file・commit・code検索・pull request・issueを読めます。Task自身のpull requestについては、変更ファイル、review、inline review thread、GitHubが報告した失敗内容と行annotation付きのCI checkも読めます。
Publish to GitHub は、エージェントがコード変更を届けるための手段です。現在のTaskのためにCognoが予約したbranchへcommitし、そのTaskのpull requestをrepositoryのbase branchに対して開き、タイトルと説明を書き直し、クローズや再オープンを行い、review threadに返信・解決し、最新commitで失敗したGitHub Actionsのrunを再実行します。commitはCogno GitHub Appが作成し、作業を始めたmemberがGitHubアカウントを連携していればco-authorとして記録されます。base branchを指定することもでき、Taskのないrunは指定したbranchからpull requestを開きます(どのTaskにも記録しません)。run終了後にCognoが自分でcommit・push・pull requestの作成を行うことはなくなりました。
Write to GitHub は、接続が届くrepositoryでissueの作成、issueとpull requestへのコメント、レビュー依頼を行います。
Merge on GitHub は、Task自身またはエージェントが指定したpull requestをmergeします。pull requestがopenでdraftではなく、競合がなく、最新commitのcheckがすべて完了して成功している場合だけmergeできます。mergeはそのcommitに固定されるため、途中でpushが入るとGitHubが拒否します。
管理・削除
- GitHubで権限を管理 はGitHub上のappインストール設定を開きます。
- 接続を解除 はそのorganizationの接続と同期データ(repository、member mapping)を削除します。