/** * タスクのレビュースコープ(このタスクの変更対象ファイル集合)の算出と提示。 * * ## 作業ツリー計算(cwd 由来) * * 次の和集合である。レビューが走る時点でタスクの変更が既にブランチへ * コミット済みの構成では HEAD との差分が空になり、コミット済み範囲を * 含めないとレビュアーから変更が見えない。これは PR / ブランチレビュー、 * エージェント自身がコミットするワークフロー、ベンチのチェックポイント * コミット、worktree クローンの自動コミット後の再レビューで発生する。 * - base コミット..HEAD のコミット済み変更 * - HEAD と working tree の差分(削除を含む) * - untracked ファイル(ignored を除く) * * この作業ツリー計算はレビュー対象の一貫した範囲を決めるために共有する。 * * ## PR diff range の合成(指示注入側だけの拡張) * * prContext を持つ実行では、上の作業ツリー計算に PR の diff range * `base...head` を **加えた和集合** をレビュアーへ提示する。`--pr` は * 「PR のレビューコメントを取り込んで修正する」フローであり、同じ実行の中で * 作業ツリーが変更される。かつ headDiffRef はコミット済みしか映さず * auto-commit はワークフロー完了後なので、PR diff range だけでは * 修正→再レビューのループでレビュアーが修正前の姿を渡される。 * * この合成はレビュアー指示への注入だけの拡張である。snapshot.ts は * cwd の作業ツリーを記録するため prContext を受け取らず、ローカルに * materialize されていない PR 側のパスは含めない。したがって不変条件は * 「作業ツリー計算が両者で同一」であって「最終集合が同一」ではない。 */ import type { Language } from '../models/types.js'; import type { PullRequestContext } from './pr-context.js'; /** プロンプト肥大を防ぐ表示上限。超過分は残件数を明示して省略する。 */ export declare const REVIEW_SCOPE_MAX_LISTED_PATHS = 200; export type ReviewScopeBaseRange = /** cwd が git リポジトリではない。 */ { readonly kind: 'not_a_git_repository'; } /** base コミットが確定し、そこから HEAD までのコミット済み変更を含む。 */ | { readonly kind: 'branch_base'; readonly baseCommit: string; } /** 現在のブランチが base ブランチそのもの。タスク由来のコミット範囲は存在しない。 */ | { readonly kind: 'base_branch_head'; } /** コミットがまだ1つもないリポジトリ。 */ | { readonly kind: 'no_commits'; } /** base を特定できなかった。コミット済み変更は一覧に含まれない。 */ | { readonly kind: 'unresolved'; readonly reason: string; }; export interface ReviewScopeDiffRange { readonly baseDiffRef: string; readonly headDiffRef: string; } export type ReviewScopeSource = { readonly kind: 'working_tree'; readonly baseRange: ReviewScopeBaseRange; } | { readonly kind: 'pull_request'; readonly prNumber: number; /** ローカルに materialize された PR の diff range。未 materialize なら undefined。 */ readonly diffRange?: ReviewScopeDiffRange; /** cwd の作業ツリー計算が paths へ寄与したか(この実行のローカル変更の有無)。 */ readonly includesWorkingTree: boolean; readonly baseRange: ReviewScopeBaseRange; }; export type TaskReviewScope = { readonly kind: 'not_a_git_repository'; } | { readonly kind: 'collected'; /** 重複排除・ソート済みのリポジトリ相対パス。 */ readonly paths: readonly string[]; readonly source: ReviewScopeSource; }; export interface TaskReviewScopeInput { readonly cwd: string; /** 境界で一度だけ解決した base。 */ readonly baseRange: ReviewScopeBaseRange; /** PR 由来の実行のみ設定される。作業ツリー計算に PR の diff range を加える。 */ readonly prContext?: PullRequestContext; /** * 同一瞬間に読んだ untracked を共有するための注入口。snapshot.ts は * inventory と changedPaths の由来を同じ読み取りへ揃えるために渡す。 */ readonly untracked?: readonly string[]; } /** * base の解決。ref 候補の列挙と merge-base 計算を伴うため、ラン境界で一度だけ * 実行して保持する(createTaskReviewScopeResolver)。 */ export declare function resolveReviewScopeBaseRange(cwd: string): ReviewScopeBaseRange; /** 解決済みの base を受け取り、変更対象ファイル集合を算出する。 */ export declare function collectTaskReviewScope(input: TaskReviewScopeInput): TaskReviewScope; /** * ラン境界で作る解決器。分岐点はラン中に動かないので cwd ごとに保持し、 * 作業ツリーは動くので毎回読み直す。 */ export declare function createTaskReviewScopeResolver(deps: { readonly getCwd: () => string; readonly getPrContext: () => PullRequestContext | undefined; }): () => TaskReviewScope; /** * {review_scope} の本文を組み立てる。 * スコープが得られない場合も、その事実を述べる文言に解決する(空文字にしない)。 */ export declare function renderTaskReviewScope(scope: TaskReviewScope | undefined, language: Language): string; //# sourceMappingURL=review-scope.d.ts.map