@effect-agent/pr-review 0.1.0-beta.28 → 0.1.0-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +11 -204
  2. package/dist/index.d.mts +92 -914
  3. package/dist/index.mjs +176 -71
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +3 -18
  6. package/src/index.ts +1 -25
  7. package/src/review.ts +244 -0
  8. package/dist/action.d.mts +0 -215
  9. package/dist/action.mjs +0 -505
  10. package/dist/action.mjs.map +0 -1
  11. package/dist/cli.d.mts +0 -1
  12. package/dist/cli.mjs +0 -106
  13. package/dist/cli.mjs.map +0 -1
  14. package/dist/fan-out-C3yG1cx3.d.mts +0 -1526
  15. package/dist/github-CCuLgyqb.mjs +0 -3437
  16. package/dist/github-CCuLgyqb.mjs.map +0 -1
  17. package/dist/logging-Q4j0oub-.mjs +0 -75
  18. package/dist/logging-Q4j0oub-.mjs.map +0 -1
  19. package/dist/providers-Br9FRn7j.mjs +0 -1349
  20. package/dist/providers-Br9FRn7j.mjs.map +0 -1
  21. package/dist/testing.d.mts +0 -86
  22. package/dist/testing.mjs +0 -184
  23. package/dist/testing.mjs.map +0 -1
  24. package/src/action.ts +0 -906
  25. package/src/cli.ts +0 -235
  26. package/src/internal/action-entry.ts +0 -45
  27. package/src/internal/adjudication.ts +0 -415
  28. package/src/internal/anchors.ts +0 -20
  29. package/src/internal/coverage.ts +0 -357
  30. package/src/internal/diff.ts +0 -193
  31. package/src/internal/effort.ts +0 -86
  32. package/src/internal/factory.ts +0 -357
  33. package/src/internal/fan-out-scripted.ts +0 -77
  34. package/src/internal/fan-out.ts +0 -1148
  35. package/src/internal/fingerprint.ts +0 -89
  36. package/src/internal/fixtures.ts +0 -148
  37. package/src/internal/github-env.ts +0 -164
  38. package/src/internal/github.ts +0 -1218
  39. package/src/internal/ignore.ts +0 -88
  40. package/src/internal/logging.ts +0 -124
  41. package/src/internal/profiles.ts +0 -91
  42. package/src/internal/progress.ts +0 -433
  43. package/src/internal/providers.ts +0 -133
  44. package/src/internal/render.ts +0 -819
  45. package/src/internal/retirement.ts +0 -337
  46. package/src/internal/review-agent.ts +0 -543
  47. package/src/internal/review-state.ts +0 -782
  48. package/src/internal/review-units.ts +0 -493
  49. package/src/internal/run.ts +0 -611
  50. package/src/internal/scripted.ts +0 -108
  51. package/src/internal/source.ts +0 -110
  52. package/src/testing.ts +0 -8
package/dist/index.d.mts CHANGED
@@ -1,924 +1,102 @@
1
- import { $ as ReviewRetirementInput, $n as FileDiffView, $t as buildPriorReviewContext, A as makeFileReviewerInstructions, An as StoredReviewFinding, Ar as makeReviewInstructions, At as ReviewEvidenceShardId, B as fingerprintUnchanged, Bn as fullReviewSelection, Br as ReviewInputViolation, Bt as rankAndDedupeConcerns, C as ReviewWorkPerspective, Cn as ReviewStateAuthenticationFailure, Cr as ReviewVerdict, Ct as MAX_REPORTED_UNASSIGNED_EVIDENCE_SHARDS, D as defaultFileReviewerPolicy, Dn as ReviewTreeComparison, Dr as fileDiffView, Dt as ReviewDiscoveryPass, E as confirmedFindingForPublication, En as ReviewStateMarkerTooLarge, Er as defaultReviewPolicy, Et as MAX_UNIT_FILES, F as GitHubReviewTarget, Fn as concernIdentity, Fr as MAX_CHANGED_FILES, Ft as ReviewUnitPlan, G as gitHubReviewRetirementHostLayer, Gn as toStoredFinding, Gr as MAX_REVIEW_CONTENT_CHARS, Gt as AdjudicableThread, H as gitHubPullRequestSourceLayer, Hn as selectReviewRange, Hr as ChangedFile, Ht as reviewConcernKey, I as PriorReviewLookupFailure, In as findingIdentity, Ir as MAX_FILE_CHARS, It as UNIT_EVIDENCE_CHAR_BUDGET, J as RetirableReview, Jn as webCryptoReviewStateAuthenticatorLayer, Jr as commentableLines, Jt as MAX_THREAD_ADJUDICATION_COMMANDS, K as parseGitHubSubmittedAt, Kn as unavailableReviewStateAuthenticatorLayer, Kr as PatchLine, Kt as AdjudicationComment, L as PriorReviews, Ln as fromStoredConcern, Lr as PullRequestMetadata, Lt as classifyReviewRisks, M as runFanOutReview, Mn as UnreviewedStage, Mr as readFileHandler, Mt as ReviewRiskCategory, N as DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, Nn as adjudicationIdentity, Nr as resolveGuidance, Nt as ReviewUnit, O as fileReviewerInstructions, On as StoredAdjudication, Or as fileReviewEvidenceChunks, Ot as ReviewDiscoveryPerspective, P as GitHubApiFailure, Pn as buildProfileMission, Pr as reviewInstructions, Pt as ReviewUnitId, Q as ReviewRetirementHost, Qn as FileDiffQuery, Qr as renderReviewContent, Qt as ReviewAdjudicationHost, R as PublishedReview, Rn as fromStoredFinding, Rr as PullRequestSource, Rt as findingAnchorInUnitEvidence, S as ReviewPassMisbehaved, Sn as ReviewState, Sr as ReviewToolkitLayer, St as MAX_MERGED_FINDINGS, T as assessmentSettlesSuggestionExactly, Tn as ReviewStateMarker, Tr as clampMaxFindings, Tt as MAX_UNIT_EVIDENCE_SHARDS, U as gitHubReviewAdjudicationHostLayer, Un as selectedPullRequestSourceLayer, Ur as ChangedFileStatus, Ut as anchorViolation, V as gitHubPriorReviewsLayer, Vn as isLineageAncestor, Vr as normalizeRepoRelativePath, Vt as rankAndDedupeFindings, W as gitHubReviewPublisherLayer, Wn as toStoredConcern, Wr as ChangedPath, Wt as AUTHORIZED_ADJUDICATION_ASSOCIATIONS, X as ReviewRetirementDecision, Xn as ChangedFilesView, Xr as isReviewableFile, Xt as PriorReviewContext, Y as RetirableReviewComment, Yn as ChangedFileSummary, Yr as hasReviewableContent, Yt as ParsedAdjudicationCommand, Z as ReviewRetirementFailure, Zn as CodeReview, Zr as parsePatch, Zt as ReviewAdjudicationFailure, _ as MAX_REVIEW_CHILDREN, _n as ReviewExecutionContext, _r as ReviewFinding, _t as assessFlatReview, a as FanOutPipelineInput, an as parseIssueAdjudication, ar as ListChangedFiles, at as ReviewCommentDraft, b as ReviewCandidate, bn as ReviewScopeMode, br as ReviewMission, bt as flatAssurance, c as FileReviewEvidence, cn as renderPriorFindingContextLine, cr as MAX_FINDINGS, ct as estimateReviewEffort, d as FileReviewer, dn as GitCommitSha, dr as MAX_WALKTHROUGH_SUMMARY_CHARS, dt as renderAgentPrompt, en as collectReviewAdjudications, er as FileReviewEvidenceChunk, et as ReviewRetirementReport, f as FileReviewerBinding, fn as MAX_REVIEW_STATE_MARKER_CHARS, fr as PullRequestReviewer, ft as CarriedScope, g as MAX_FILE_REVIEW_TOOL_CALLS, gn as MAX_TREE_COMPARISON_PATHS, gr as ReviewConcern, gt as ReviewInputCoverage, h as MAX_CHILD_FINDINGS, hn as MAX_STORED_UNREVIEWED_PATHS, hr as ReadFileDiff, ht as ReviewAssurance, i as FanOutInstructionOptions, in as noReviewAdjudicationHostLayer, ir as FindingSeverity, it as AGENT_PROMPT_PREAMBLE, j as reviewCandidateSubjectKey, jn as StoredUnreviewedPass, jr as readFileDiffHandler, jt as ReviewPassId, k as makeFileReviewerDefinition, kn as StoredReviewConcern, kr as listChangedFilesHandler, kt as ReviewEvidenceShard, l as FileReviewReport, ln as threadFindingTarget, lr as MAX_PATCH_CHARS, lt as planPublication, m as MAX_CHILD_CONCERNS, mn as MAX_STORED_UNREVIEWED_PASSES, mr as ReadFile, mt as FlatReviewAssessment, n as ConcernCandidate, nn as mergeAdjudications, nr as FileSliceQuery, nt as hasReviewMetadataMarker, o as FanOutPipelineOutcome, on as parseThreadAdjudication, or as ListChangedFilesQuery, ot as ReviewEvent, p as FindingCandidate, pn as MAX_STORED_ADJUDICATIONS, pr as REVIEW_TOOL_RESULT_MAX_BYTES, pt as FailedReviewPass, q as INLINE_FINDING_TITLE_PATTERN, qn as validateReviewState, qr as annotatePatch, qt as DerivedAdjudications, r as DiscoveredConcern, rn as noReviewAdjudicationHost, rr as FindingCategory, rt as retireStaleReviews, s as FileReviewBrief, sn as renderAdjudicationContextLine, sr as MAX_CONCERNS, st as ReviewPublicationPlan, t as CandidateAssessment, tn as deriveAdjudications, tr as FileSlice, tt as decideReviewRetirement, u as FileReviewToolkit, un as AdjudicationDisposition, ur as MAX_WALKTHROUGH_ENTRIES, ut as planWalkthrough, v as MAX_UNIT_CANDIDATES, vn as ReviewHeadComparison, vr as ReviewGuidance, vt as boundedListReason, w as ReviewWorkPhase, wn as ReviewStateAuthenticator, wr as WalkthroughEntry, wt as MAX_REVIEW_UNITS, x as ReviewCandidateId, xn as ReviewSelection, xr as ReviewToolkit, xt as splitCarriedScope, y as REVIEW_UNIT_CONCURRENCY, yn as ReviewMode, yr as ReviewInstructionOptions, yt as fanOutInputCoverage, z as ReviewPublisher, zn as fullReviewExecutionContextLayer, zr as PullRequestSourceFailure, zt as planReviewUnits } from "./fan-out-C3yG1cx3.mjs";
2
- import { Config, Context, Crypto, Effect, FileSystem, Layer, LogLevel, Logger, Option, Schema } from "effect";
3
- import { Agent, AgentPolicyInput, IdGenerator, RuntimeBinding, UsageBudgetLimits, UsageTotals } from "effect-agent";
4
- import { LanguageModel, Model, Tool, Toolkit } from "effect/unstable/ai";
5
- import { HttpClient } from "effect/unstable/http";
6
- import { AnthropicClient } from "@effect/ai-anthropic";
7
- import { OpenAiClient } from "@effect/ai-openai";
8
- //#region src/internal/effort.d.ts
9
- /** A point on the effort axis: 0 = cheapest offered rung, 1 = most expensive. */
10
- type EffortPosition = number;
11
- /**
12
- * Names accepted on user-facing surfaces (the action input, the CLI flag),
13
- * mapped to fixed points on the axis. These same names anchor every offered
14
- * rung during resolution, so a named input always lands on its same-named
15
- * rung when the provider offers it — `high` never resolves to `medium` just
16
- * because a ladder is short.
17
- */
18
- declare const EFFORT_ALIASES: {
19
- readonly low: 0;
20
- readonly medium: 0.25;
21
- readonly high: 0.5;
22
- readonly xhigh: 0.75;
23
- readonly max: 1;
24
- };
25
- /** A rung name every provider ladder must draw from. */
26
- type EffortAliasName = keyof typeof EFFORT_ALIASES;
27
- declare const InvalidEffortInput_base: Schema.Class<InvalidEffortInput, Schema.TaggedStruct<"InvalidEffortInput", {
28
- readonly input: Schema.String;
29
- }>, import("effect/Cause").YieldableError>;
30
- /** An effort input that is neither a known name nor a number on [0, 1]. */
31
- declare class InvalidEffortInput extends InvalidEffortInput_base {
32
- get message(): string;
33
- }
34
- declare const isEffortPosition: (value: number) => boolean;
35
- /**
36
- * Parse a user-supplied effort into a position: a name (`high`) or a bare
37
- * number (`0.75`). Returns undefined for anything else so the caller can fail
38
- * typed — a typo must stay visible, never silently become a level.
39
- */
40
- declare const parseEffortPosition: (raw: string) => EffortPosition | undefined;
41
- /**
42
- * Land a position on one provider's offered ladder: the highest offered rung
43
- * whose canonical alias position is at or below the requested position.
44
- * Anchoring on the alias positions (instead of scaling by ladder index) keeps
45
- * two properties at once: a named input lands on its same-named rung whenever
46
- * the provider offers it, and anything between rungs rounds DOWN so
47
- * resolution never costs more than was asked for.
48
- */
49
- declare const resolveEffortRung: <const Rung extends EffortAliasName>(position: EffortPosition, rungs: readonly [Rung, ...ReadonlyArray<Rung>]) => Rung;
50
- //#endregion
51
- //#region src/internal/run.d.ts
52
- /**
53
- * Run-level usage bounds on top of the definition's AgentPolicy. Real diffs
54
- * are token-heavy, so the input budget is research-sized with cost as the
55
- * safety net.
56
- */
57
- declare const reviewBudgetLimits: UsageBudgetLimits;
58
- /**
59
- * Run-level bounds for the fan-out pipeline. One budget observes EVERY child
60
- * pass, so the ceiling covers bounded parallel discovery and verification
61
- * plus the one-retry allowance.
62
- */
63
- declare const fanOutReviewBudgetLimits: UsageBudgetLimits;
64
- declare const ReviewRunOutcome_base: Schema.Class<ReviewRunOutcome, Schema.Struct<{
65
- readonly review: typeof CodeReview;
66
- /** All currently unresolved findings, including unchanged carried scope. */
67
- readonly activeFindings: Schema.$Array<typeof ReviewFinding>;
68
- /** All currently unresolved concerns, including concerns carried to final audit. */
69
- readonly activeConcerns: Schema.$Array<typeof ReviewConcern>;
70
- /** Exact path/evidence assignment, distinct from semantic review work. */
71
- readonly inputCoverage: typeof ReviewInputCoverage;
72
- /** Settlement of scheduled discovery, specialist, and verification work. */
73
- readonly assurance: typeof ReviewAssurance;
74
- /** Retryable scope this run could not settle; carried to the next run. */
1
+ import { Effect, Schema } from "effect";
2
+ import { AgentPolicy, IdGenerator, RunCostEstimator, UsageBudgetLimits } from "effect-agent";
3
+ import { LanguageModel, Model, Toolkit } from "effect/unstable/ai";
4
+ //#region src/review.d.ts
5
+ declare const ReviewChange_base: Schema.Class<ReviewChange, Schema.Struct<{
6
+ readonly path: Schema.NonEmptyString;
7
+ readonly patch: Schema.NonEmptyString;
8
+ }>, {}>;
9
+ /** One complete textual patch supplied by the host. */
10
+ declare class ReviewChange extends ReviewChange_base {}
11
+ declare const ReviewRequest_base: Schema.Class<ReviewRequest, Schema.Struct<{
12
+ readonly title: Schema.String;
13
+ readonly description: Schema.String;
14
+ readonly baseRevision: Schema.NonEmptyString;
15
+ readonly headRevision: Schema.NonEmptyString;
16
+ readonly changes: Schema.$Array<typeof ReviewChange>;
75
17
  readonly unreviewedPaths: Schema.$Array<Schema.NonEmptyString>;
76
- readonly plan: typeof ReviewPublicationPlan;
77
- readonly published: Schema.optionalKey<typeof PublishedReview>;
78
- /** Total settled model turns (all child passes for the fan-out pipeline). */
79
- readonly turns: Schema.Int;
80
- /** The run budget's observed usage across the whole run. */
81
- readonly usage: Schema.optionalKey<typeof UsageTotals>;
82
- readonly reviewMode: Schema.optionalKey<Schema.Literals<readonly ["incremental", "full"]>>;
83
- readonly reviewReason: Schema.optionalKey<Schema.String>;
84
- readonly state: Schema.optionalKey<typeof ReviewState>;
85
- /** Maintainer adjudications standing against this run's identities. */
86
- readonly adjudications: Schema.optionalKey<Schema.$Array<typeof StoredAdjudication>>;
87
18
  }>, {}>;
88
- /** Everything one review run produced, publication receipt included. */
89
- declare class ReviewRunOutcome extends ReviewRunOutcome_base {}
90
- interface ExecuteReviewOptions {
91
- /** Post the review to GitHub; `false` stops after planning (dry run). */
92
- readonly post: boolean;
93
- /** Map the model's verdict onto APPROVE/REQUEST_CHANGES instead of COMMENT. */
94
- readonly applyVerdict: boolean;
95
- /** Run-level usage bounds; defaults to the shape's packaged limits. */
96
- readonly limits?: UsageBudgetLimits | undefined;
97
- /**
98
- * Host-side findings bound (fail-closed backstop for the instruction-level
99
- * bound): a review carrying more findings is ranked by severity, deduped by
100
- * anchor, and trimmed never published oversized. Clamped to the schema cap.
101
- */
102
- readonly maxFindings?: number | undefined;
103
- /**
104
- * Prompt signature for changeset fingerprinting. When present, the
105
- * changeset fingerprint is computed and embedded invisibly in the review
106
- * body so later runs can skip an unchanged changeset.
107
- */
108
- readonly signature?: ((mission: ReviewMission) => string) | undefined;
109
- /** Provider binding descriptor rendered into the review footer. */
110
- readonly modelLabel?: string | undefined;
111
- /** Workflow-run URL rendered into the review footer. */
112
- readonly runUrl?: string | undefined;
113
- }
114
- /**
115
- * Build the mission one review run frames from the source's snapshot. The
116
- * optional continuity context (adjudicated identities, prior-round findings
117
- * on re-reviewed scope) reaches only RUN missions — fingerprint missions stay
118
- * plain so an adjudication never invalidates skip-unchanged authority.
119
- */
120
- declare const buildReviewMission: (metadata: PullRequestMetadata, files: ReadonlyArray<ChangedFile>, context?: {
121
- readonly adjudicated?: ReadonlyArray<string> | undefined;
122
- readonly priorFindings?: ReadonlyArray<string> | undefined;
123
- }) => ReviewMission;
124
- /** Enforce the configured findings bound on an already-validated review. */
125
- declare const enforceFindingsBound: (review: CodeReview, maxFindings: number) => CodeReview;
126
- /**
127
- * Execute one flat review with any explicit Agent Binding whose contract is
128
- * `ReviewMission -> CodeReview`. The binding stays a parameter (D-027): tests
129
- * pass scripted models, hosts pass live provider bindings, and the model
130
- * Layer's requirements stay visible in this Effect's `R`.
131
- */
132
- declare const executeReview: <Instructions, Tools extends Record<string, Tool.Any>, Provider, ModelProvides, ModelRequires>(binding: RuntimeBinding<typeof ReviewMission, typeof CodeReview, Instructions, Tools, Provider, ModelProvides, ModelRequires>, options: ExecuteReviewOptions) => Effect.Effect<ReviewRunOutcome, import("effect-agent").AgentApprovalDenied | import("effect-agent").AgentApprovalPending | import("effect-agent").AgentChildPending | import("effect-agent").AgentInputError | import("effect-agent").AgentOutputError | import("effect-agent").AgentPolicyError | import("effect-agent").AgentToolAuthorizationDenied | import("effect/unstable/ai/AiError").AiError | import("effect-agent").BudgetAdapterError | import("effect-agent").BudgetExceeded | import("effect-agent").ContextBudgetError | import("effect-agent").ContextOverflowError | GitHubApiFailure | import("effect-agent").ModelProtocolError | PullRequestSourceFailure | Schema.SchemaError | ((Instructions & string extends (infer T) ? T extends Instructions & string ? T extends ((input: ReviewMission) => infer Result) ? Result : T : never : never) extends (infer T_1) ? T_1 extends (Instructions & string extends (infer T) ? T extends Instructions & string ? T extends ((input: ReviewMission) => infer Result) ? Result : T : never : never) ? T_1 extends Effect.Effect<infer _Success, infer Error, infer _Services> ? Error : never : never : never) | ((Instructions & Iterable<import("effect/unstable/ai/Prompt").MessageEncoded> extends (infer T_2) ? T_2 extends Instructions & Iterable<import("effect/unstable/ai/Prompt").MessageEncoded> ? T_2 extends ((input: ReviewMission) => infer Result) ? Result : T_2 : never : never) extends (infer T_3) ? T_3 extends (Instructions & Iterable<import("effect/unstable/ai/Prompt").MessageEncoded> extends (infer T_2) ? T_2 extends Instructions & Iterable<import("effect/unstable/ai/Prompt").MessageEncoded> ? T_2 extends ((input: ReviewMission) => infer Result) ? Result : T_2 : never : never) ? T_3 extends Effect.Effect<infer _Success, infer Error, infer _Services> ? Error : never : never : never) | ((Instructions & import("effect/unstable/ai/Prompt").Prompt extends (infer T_4) ? T_4 extends Instructions & import("effect/unstable/ai/Prompt").Prompt ? T_4 extends ((input: ReviewMission) => infer Result) ? Result : T_4 : never : never) extends (infer T_5) ? T_5 extends (Instructions & import("effect/unstable/ai/Prompt").Prompt extends (infer T_4) ? T_4 extends Instructions & import("effect/unstable/ai/Prompt").Prompt ? T_4 extends ((input: ReviewMission) => infer Result) ? Result : T_4 : never : never) ? T_5 extends Effect.Effect<infer _Success, infer Error, infer _Services> ? Error : never : never : never) | ((Instructions & ((input: ReviewMission) => import("effect-agent").InstructionResult<NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_1, infer Error_1, infer _Requirements> ? Error_1 : never>, NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never>>) extends (infer T_6) ? T_6 extends Instructions & ((input: ReviewMission) => import("effect-agent").InstructionResult<NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_1, infer Error_1, infer _Requirements> ? Error_1 : never>, NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never>>) ? T_6 extends ((input: ReviewMission) => infer Result) ? Result : T_6 : never : never) extends (infer T_7) ? T_7 extends (Instructions & ((input: ReviewMission) => import("effect-agent").InstructionResult<NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_1, infer Error_1, infer _Requirements> ? Error_1 : never>, NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never>>) extends (infer T_6) ? T_6 extends Instructions & ((input: ReviewMission) => import("effect-agent").InstructionResult<NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_1, infer Error_1, infer _Requirements> ? Error_1 : never>, NoInfer<(Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never>>) ? T_6 extends ((input: ReviewMission) => infer Result) ? Result : T_6 : never : never) ? T_7 extends Effect.Effect<infer _Success, infer Error, infer _Services> ? Error : never : never : never) | import("effect-agent").Agent.RunDispositionFailure<RuntimeBinding<typeof ReviewMission, typeof CodeReview, Instructions, Tools, Provider, ModelProvides, ModelRequires, (Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_1, infer Error_1, infer _Requirements> ? Error_1 : never, (Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never, undefined>>, import("effect/Crypto").Crypto | import("effect-agent").IdGenerator | PullRequestSource | ReviewAdjudicationHost | ReviewExecutionContext | ReviewPublisher | import("effect/Scope").Scope | Tool.ParametersSchema<import("effect-agent").Agent.ToolUnion<RuntimeBinding<typeof ReviewMission, typeof CodeReview, Instructions, Tools, Provider, ModelProvides, ModelRequires, (Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_1, infer Error_1, infer _Requirements> ? Error_1 : never, (Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never, undefined>>>["DecodingServices"] | Tool.SuccessSchema<import("effect-agent").Agent.ToolUnion<RuntimeBinding<typeof ReviewMission, typeof CodeReview, Instructions, Tools, Provider, ModelProvides, ModelRequires, (Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_1, infer Error_1, infer _Requirements> ? Error_1 : never, (Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never, undefined>>>["DecodingServices"] | Exclude<ModelRequires, import("effect-agent").EngineProvidedToolServices> | Exclude<Tool.HandlersFor<Tools>, import("effect-agent").EngineProvidedToolServices> | Exclude<Tool.HandlerServices<Tools[keyof Tools]>, import("effect-agent").EngineProvidedToolServices> | ((Instructions extends ((input: ReviewMission) => infer Result_1) ? Result_1 : Instructions) extends Effect.Effect<infer _Success_2, infer _Error, infer Requirements> ? Requirements : never)>;
133
- /**
134
- * Execute one host-scheduled fan-out review: deterministic planning,
135
- * independent discovery and verification child passes with bounded retries,
136
- * and a host-composed review from verifier-confirmed candidates only. One
137
- * budget observes every child pass, so the reported usage is whole-run.
138
- */
139
- declare const executeFanOutReview: <Provider, ModelProvides, ModelRequires>(binding: FileReviewerBinding<Provider, ModelProvides, ModelRequires>, options: ExecuteReviewOptions) => Effect.Effect<ReviewRunOutcome, GitHubApiFailure | PullRequestSourceFailure, import("effect/Crypto").Crypto | import("effect-agent").IdGenerator | PullRequestSource | ReviewAdjudicationHost | ReviewExecutionContext | ReviewPublisher | Exclude<Exclude<ModelRequires, import("effect-agent").EngineProvidedToolServices>, import("effect/Scope").Scope>>;
140
- //#endregion
141
- //#region src/internal/factory.d.ts
142
- /** Options shared by both reviewer shapes. */
143
- interface PrReviewSharedOptions {
144
- /**
145
- * Host-side and instruction-level findings bound, clamped to the CodeReview
146
- * schema cap of 20.
147
- */
148
- readonly maxFindings?: number | undefined;
149
- /**
150
- * Glob patterns (`**` crosses directories, `*`/`?` stay in one segment)
151
- * removed from the reviewer's observation surface entirely.
152
- */
153
- readonly ignore?: ReadonlyArray<string> | undefined;
154
- /** Map the model's verdict onto APPROVE/REQUEST_CHANGES instead of COMMENT. */
155
- readonly applyVerdict?: boolean | undefined;
156
- /** Run-level usage bounds; defaults to the shape's packaged limits. */
157
- readonly budget?: UsageBudgetLimits | undefined;
158
- /**
159
- * Human-readable descriptor of the bound model (provider, model id, effort,
160
- * and request profile such as service tier)
161
- * rendered into the review footer and included in the fingerprint
162
- * signature, so changing the binding re-reviews instead of skipping.
163
- */
164
- readonly modelLabel?: string | undefined;
165
- }
166
- /** Options accepted by `PrReview.make` (the flat reviewer). */
167
- interface PrReviewOptions<Provider, ModelProvides, ModelRequires, Extra extends ReadonlyArray<Tool.Any>> extends PrReviewSharedOptions {
168
- /** The Effect AI Model to bind; its Layer requirements stay visible in `R`. */
169
- readonly model: Model.Model<Provider, LanguageModel.LanguageModel | ModelProvides, ModelRequires>;
170
- /** Domain guidance injected between the mission framing and the procedure. */
171
- readonly guidance?: ReviewGuidance | undefined;
172
- /** Full override of the flat reviewer's execution bounds. */
173
- readonly policy?: AgentPolicyInput | undefined;
174
- /**
175
- * Additional tools merged into the reviewer's toolkit. Every extra tool
176
- * must be annotated `ToolExecutionClass: "readonly"` — construction fails
177
- * otherwise — and its handler Layer is the caller's to provide, so the new
178
- * dependency stays visible in the run's `R`.
179
- */
180
- readonly extraTools?: Extra | undefined;
181
- }
182
- /** How one run should publish. */
183
- interface RunReviewOptions {
184
- /** Post the review to GitHub; `false` (default) stops after planning. */
185
- readonly post?: boolean | undefined;
186
- /** Workflow-run URL rendered into the review footer. */
187
- readonly runUrl?: string | undefined;
188
- }
189
- /**
190
- * Build the flat reviewer: one bounded read-only agent over the whole
191
- * changeset. Returns the model-agnostic definition, the explicit binding, and
192
- * a `run` whose error and requirement channels stay fully inferred — the
193
- * pull-request source, the publisher, `Crypto.Crypto`, extra tool handlers,
194
- * and the Model Layer's requirements all remain visible to the caller.
195
- */
196
- declare const make: <Provider, ModelProvides, ModelRequires, const Extra extends ReadonlyArray<Tool.Any> = readonly []>(options: PrReviewOptions<Provider, ModelProvides, ModelRequires, Extra>) => {
197
- readonly definition: import("effect-agent").Definition<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.Toolkit<Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
198
- readonly parameters: typeof ListChangedFilesQuery;
199
- readonly success: typeof ChangedFilesView;
200
- readonly failure: typeof PullRequestSourceFailure;
201
- readonly failureMode: "error";
202
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
203
- readonly parameters: typeof FileDiffQuery;
204
- readonly success: typeof FileDiffView;
205
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
206
- readonly failureMode: "return";
207
- }, PullRequestSource>, Tool.Tool<"read_file", {
208
- readonly parameters: typeof FileSliceQuery;
209
- readonly success: typeof FileSlice;
210
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
211
- readonly failureMode: "return";
212
- }, PullRequestSource>, ...Extra]>>, undefined>;
213
- readonly binding: Readonly<{
214
- definition: import("effect-agent").Definition<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.Toolkit<Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
215
- readonly parameters: typeof ListChangedFilesQuery;
216
- readonly success: typeof ChangedFilesView;
217
- readonly failure: typeof PullRequestSourceFailure;
218
- readonly failureMode: "error";
219
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
220
- readonly parameters: typeof FileDiffQuery;
221
- readonly success: typeof FileDiffView;
222
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
223
- readonly failureMode: "return";
224
- }, PullRequestSource>, Tool.Tool<"read_file", {
225
- readonly parameters: typeof FileSliceQuery;
226
- readonly success: typeof FileSlice;
227
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
228
- readonly failureMode: "return";
229
- }, PullRequestSource>, ...Extra]>>, undefined>;
230
- model: Model.Model<Provider, ModelProvides | LanguageModel.LanguageModel, ModelRequires>;
231
- }>;
232
- readonly run: (runOptions?: RunReviewOptions) => Effect.Effect<ReviewRunOutcome, import("effect-agent").AgentApprovalDenied | import("effect-agent").AgentApprovalPending | import("effect-agent").AgentChildPending | import("effect-agent").AgentInputError | import("effect-agent").AgentOutputError | import("effect-agent").AgentPolicyError | import("effect-agent").AgentToolAuthorizationDenied | import("effect/unstable/ai/AiError").AiError | import("effect-agent").BudgetAdapterError | import("effect-agent").BudgetExceeded | import("effect-agent").ContextBudgetError | import("effect-agent").ContextOverflowError | GitHubApiFailure | import("effect-agent").ModelProtocolError | PullRequestSourceFailure | Schema.SchemaError | Agent.RunDispositionFailure<import("effect-agent").RuntimeBinding<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
233
- readonly parameters: typeof ListChangedFilesQuery;
234
- readonly success: typeof ChangedFilesView;
235
- readonly failure: typeof PullRequestSourceFailure;
236
- readonly failureMode: "error";
237
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
238
- readonly parameters: typeof FileDiffQuery;
239
- readonly success: typeof FileDiffView;
240
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
241
- readonly failureMode: "return";
242
- }, PullRequestSource>, Tool.Tool<"read_file", {
243
- readonly parameters: typeof FileSliceQuery;
244
- readonly success: typeof FileSlice;
245
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
246
- readonly failureMode: "return";
247
- }, PullRequestSource>, ...Extra]>, Provider, ModelProvides, ModelRequires, never, never, undefined>>, import("effect/Crypto").Crypto | PullRequestSource | ReviewAdjudicationHost | ReviewExecutionContext | ReviewPublisher | Exclude<Exclude<Tool.ParametersSchema<Agent.ToolUnion<import("effect-agent").RuntimeBinding<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
248
- readonly parameters: typeof ListChangedFilesQuery;
249
- readonly success: typeof ChangedFilesView;
250
- readonly failure: typeof PullRequestSourceFailure;
251
- readonly failureMode: "error";
252
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
253
- readonly parameters: typeof FileDiffQuery;
254
- readonly success: typeof FileDiffView;
255
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
256
- readonly failureMode: "return";
257
- }, PullRequestSource>, Tool.Tool<"read_file", {
258
- readonly parameters: typeof FileSliceQuery;
259
- readonly success: typeof FileSlice;
260
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
261
- readonly failureMode: "return";
262
- }, PullRequestSource>, ...Extra]>, Provider, ModelProvides, ModelRequires, never, never, undefined>>>["DecodingServices"], IdGenerator | Tool.HandlersFor<{
263
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
264
- readonly parameters: typeof ListChangedFilesQuery;
265
- readonly success: typeof ChangedFilesView;
266
- readonly failure: typeof PullRequestSourceFailure;
267
- readonly failureMode: "error";
268
- }, PullRequestSource>;
269
- readonly read_file: Tool.Tool<"read_file", {
270
- readonly parameters: typeof FileSliceQuery;
271
- readonly success: typeof FileSlice;
272
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
273
- readonly failureMode: "return";
274
- }, PullRequestSource>;
275
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
276
- readonly parameters: typeof FileDiffQuery;
277
- readonly success: typeof FileDiffView;
278
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
279
- readonly failureMode: "return";
280
- }, PullRequestSource>;
281
- }>>, import("effect/Scope").Scope> | Exclude<Exclude<Tool.SuccessSchema<Agent.ToolUnion<import("effect-agent").RuntimeBinding<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
282
- readonly parameters: typeof ListChangedFilesQuery;
283
- readonly success: typeof ChangedFilesView;
284
- readonly failure: typeof PullRequestSourceFailure;
285
- readonly failureMode: "error";
286
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
287
- readonly parameters: typeof FileDiffQuery;
288
- readonly success: typeof FileDiffView;
289
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
290
- readonly failureMode: "return";
291
- }, PullRequestSource>, Tool.Tool<"read_file", {
292
- readonly parameters: typeof FileSliceQuery;
293
- readonly success: typeof FileSlice;
294
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
295
- readonly failureMode: "return";
296
- }, PullRequestSource>, ...Extra]>, Provider, ModelProvides, ModelRequires, never, never, undefined>>>["DecodingServices"], IdGenerator | Tool.HandlersFor<{
297
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
298
- readonly parameters: typeof ListChangedFilesQuery;
299
- readonly success: typeof ChangedFilesView;
300
- readonly failure: typeof PullRequestSourceFailure;
301
- readonly failureMode: "error";
302
- }, PullRequestSource>;
303
- readonly read_file: Tool.Tool<"read_file", {
304
- readonly parameters: typeof FileSliceQuery;
305
- readonly success: typeof FileSlice;
306
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
307
- readonly failureMode: "return";
308
- }, PullRequestSource>;
309
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
310
- readonly parameters: typeof FileDiffQuery;
311
- readonly success: typeof FileDiffView;
312
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
313
- readonly failureMode: "return";
314
- }, PullRequestSource>;
315
- }>>, import("effect/Scope").Scope> | Exclude<Exclude<Exclude<ModelRequires, import("effect-agent").EngineProvidedToolServices>, IdGenerator | Tool.HandlersFor<{
316
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
317
- readonly parameters: typeof ListChangedFilesQuery;
318
- readonly success: typeof ChangedFilesView;
319
- readonly failure: typeof PullRequestSourceFailure;
320
- readonly failureMode: "error";
321
- }, PullRequestSource>;
322
- readonly read_file: Tool.Tool<"read_file", {
323
- readonly parameters: typeof FileSliceQuery;
324
- readonly success: typeof FileSlice;
325
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
326
- readonly failureMode: "return";
327
- }, PullRequestSource>;
328
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
329
- readonly parameters: typeof FileDiffQuery;
330
- readonly success: typeof FileDiffView;
331
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
332
- readonly failureMode: "return";
333
- }, PullRequestSource>;
334
- }>>, import("effect/Scope").Scope> | Exclude<Exclude<Exclude<Tool.HandlersFor<Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
335
- readonly parameters: typeof ListChangedFilesQuery;
336
- readonly success: typeof ChangedFilesView;
337
- readonly failure: typeof PullRequestSourceFailure;
338
- readonly failureMode: "error";
339
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
340
- readonly parameters: typeof FileDiffQuery;
341
- readonly success: typeof FileDiffView;
342
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
343
- readonly failureMode: "return";
344
- }, PullRequestSource>, Tool.Tool<"read_file", {
345
- readonly parameters: typeof FileSliceQuery;
346
- readonly success: typeof FileSlice;
347
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
348
- readonly failureMode: "return";
349
- }, PullRequestSource>, ...Extra]>>, import("effect-agent").EngineProvidedToolServices>, IdGenerator | Tool.HandlersFor<{
350
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
351
- readonly parameters: typeof ListChangedFilesQuery;
352
- readonly success: typeof ChangedFilesView;
353
- readonly failure: typeof PullRequestSourceFailure;
354
- readonly failureMode: "error";
355
- }, PullRequestSource>;
356
- readonly read_file: Tool.Tool<"read_file", {
357
- readonly parameters: typeof FileSliceQuery;
358
- readonly success: typeof FileSlice;
359
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
360
- readonly failureMode: "return";
361
- }, PullRequestSource>;
362
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
363
- readonly parameters: typeof FileDiffQuery;
364
- readonly success: typeof FileDiffView;
365
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
366
- readonly failureMode: "return";
367
- }, PullRequestSource>;
368
- }>>, import("effect/Scope").Scope> | Exclude<Exclude<Exclude<Tool.HandlerServices<Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
369
- readonly parameters: typeof ListChangedFilesQuery;
370
- readonly success: typeof ChangedFilesView;
371
- readonly failure: typeof PullRequestSourceFailure;
372
- readonly failureMode: "error";
373
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
374
- readonly parameters: typeof FileDiffQuery;
375
- readonly success: typeof FileDiffView;
376
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
377
- readonly failureMode: "return";
378
- }, PullRequestSource>, Tool.Tool<"read_file", {
379
- readonly parameters: typeof FileSliceQuery;
380
- readonly success: typeof FileSlice;
381
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
382
- readonly failureMode: "return";
383
- }, PullRequestSource>, ...Extra]>[keyof Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
384
- readonly parameters: typeof ListChangedFilesQuery;
385
- readonly success: typeof ChangedFilesView;
386
- readonly failure: typeof PullRequestSourceFailure;
387
- readonly failureMode: "error";
388
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
389
- readonly parameters: typeof FileDiffQuery;
390
- readonly success: typeof FileDiffView;
391
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
392
- readonly failureMode: "return";
393
- }, PullRequestSource>, Tool.Tool<"read_file", {
394
- readonly parameters: typeof FileSliceQuery;
395
- readonly success: typeof FileSlice;
396
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
397
- readonly failureMode: "return";
398
- }, PullRequestSource>, ...Extra]>]>, import("effect-agent").EngineProvidedToolServices>, IdGenerator | Tool.HandlersFor<{
399
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
400
- readonly parameters: typeof ListChangedFilesQuery;
401
- readonly success: typeof ChangedFilesView;
402
- readonly failure: typeof PullRequestSourceFailure;
403
- readonly failureMode: "error";
404
- }, PullRequestSource>;
405
- readonly read_file: Tool.Tool<"read_file", {
406
- readonly parameters: typeof FileSliceQuery;
407
- readonly success: typeof FileSlice;
408
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
409
- readonly failureMode: "return";
410
- }, PullRequestSource>;
411
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
412
- readonly parameters: typeof FileDiffQuery;
413
- readonly success: typeof FileDiffView;
414
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
415
- readonly failureMode: "return";
416
- }, PullRequestSource>;
417
- }>>, import("effect/Scope").Scope>> | Effect.Effect<ReviewRunOutcome, import("effect-agent").AgentApprovalDenied | import("effect-agent").AgentApprovalPending | import("effect-agent").AgentChildPending | import("effect-agent").AgentInputError | import("effect-agent").AgentOutputError | import("effect-agent").AgentPolicyError | import("effect-agent").AgentToolAuthorizationDenied | import("effect/unstable/ai/AiError").AiError | import("effect-agent").BudgetAdapterError | import("effect-agent").BudgetExceeded | import("effect-agent").ContextBudgetError | import("effect-agent").ContextOverflowError | GitHubApiFailure | import("effect-agent").ModelProtocolError | PullRequestSourceFailure | Schema.SchemaError | Agent.RunDispositionFailure<import("effect-agent").RuntimeBinding<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
418
- readonly parameters: typeof ListChangedFilesQuery;
419
- readonly success: typeof ChangedFilesView;
420
- readonly failure: typeof PullRequestSourceFailure;
421
- readonly failureMode: "error";
422
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
423
- readonly parameters: typeof FileDiffQuery;
424
- readonly success: typeof FileDiffView;
425
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
426
- readonly failureMode: "return";
427
- }, PullRequestSource>, Tool.Tool<"read_file", {
428
- readonly parameters: typeof FileSliceQuery;
429
- readonly success: typeof FileSlice;
430
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
431
- readonly failureMode: "return";
432
- }, PullRequestSource>, ...Extra]>, Provider, ModelProvides, ModelRequires, never, never, undefined>>, import("effect/Crypto").Crypto | PullRequestSource | ReviewAdjudicationHost | ReviewExecutionContext | ReviewPublisher | Exclude<Exclude<Exclude<Tool.ParametersSchema<Agent.ToolUnion<import("effect-agent").RuntimeBinding<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
433
- readonly parameters: typeof ListChangedFilesQuery;
434
- readonly success: typeof ChangedFilesView;
435
- readonly failure: typeof PullRequestSourceFailure;
436
- readonly failureMode: "error";
437
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
438
- readonly parameters: typeof FileDiffQuery;
439
- readonly success: typeof FileDiffView;
440
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
441
- readonly failureMode: "return";
442
- }, PullRequestSource>, Tool.Tool<"read_file", {
443
- readonly parameters: typeof FileSliceQuery;
444
- readonly success: typeof FileSlice;
445
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
446
- readonly failureMode: "return";
447
- }, PullRequestSource>, ...Extra]>, Provider, ModelProvides, ModelRequires, never, never, undefined>>>["DecodingServices"], IdGenerator | Tool.HandlersFor<{
448
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
449
- readonly parameters: typeof ListChangedFilesQuery;
450
- readonly success: typeof ChangedFilesView;
451
- readonly failure: typeof PullRequestSourceFailure;
452
- readonly failureMode: "error";
453
- }, PullRequestSource>;
454
- readonly read_file: Tool.Tool<"read_file", {
455
- readonly parameters: typeof FileSliceQuery;
456
- readonly success: typeof FileSlice;
457
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
458
- readonly failureMode: "return";
459
- }, PullRequestSource>;
460
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
461
- readonly parameters: typeof FileDiffQuery;
462
- readonly success: typeof FileDiffView;
463
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
464
- readonly failureMode: "return";
465
- }, PullRequestSource>;
466
- }>>, import("effect/Scope").Scope>, PullRequestSource> | Exclude<Exclude<Exclude<Tool.SuccessSchema<Agent.ToolUnion<import("effect-agent").RuntimeBinding<typeof ReviewMission, typeof CodeReview, (mission: ReviewMission) => string, Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
467
- readonly parameters: typeof ListChangedFilesQuery;
468
- readonly success: typeof ChangedFilesView;
469
- readonly failure: typeof PullRequestSourceFailure;
470
- readonly failureMode: "error";
471
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
472
- readonly parameters: typeof FileDiffQuery;
473
- readonly success: typeof FileDiffView;
474
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
475
- readonly failureMode: "return";
476
- }, PullRequestSource>, Tool.Tool<"read_file", {
477
- readonly parameters: typeof FileSliceQuery;
478
- readonly success: typeof FileSlice;
479
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
480
- readonly failureMode: "return";
481
- }, PullRequestSource>, ...Extra]>, Provider, ModelProvides, ModelRequires, never, never, undefined>>>["DecodingServices"], IdGenerator | Tool.HandlersFor<{
482
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
483
- readonly parameters: typeof ListChangedFilesQuery;
484
- readonly success: typeof ChangedFilesView;
485
- readonly failure: typeof PullRequestSourceFailure;
486
- readonly failureMode: "error";
487
- }, PullRequestSource>;
488
- readonly read_file: Tool.Tool<"read_file", {
489
- readonly parameters: typeof FileSliceQuery;
490
- readonly success: typeof FileSlice;
491
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
492
- readonly failureMode: "return";
493
- }, PullRequestSource>;
494
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
495
- readonly parameters: typeof FileDiffQuery;
496
- readonly success: typeof FileDiffView;
497
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
498
- readonly failureMode: "return";
499
- }, PullRequestSource>;
500
- }>>, import("effect/Scope").Scope>, PullRequestSource> | Exclude<Exclude<Exclude<Exclude<ModelRequires, import("effect-agent").EngineProvidedToolServices>, IdGenerator | Tool.HandlersFor<{
501
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
502
- readonly parameters: typeof ListChangedFilesQuery;
503
- readonly success: typeof ChangedFilesView;
504
- readonly failure: typeof PullRequestSourceFailure;
505
- readonly failureMode: "error";
506
- }, PullRequestSource>;
507
- readonly read_file: Tool.Tool<"read_file", {
508
- readonly parameters: typeof FileSliceQuery;
509
- readonly success: typeof FileSlice;
510
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
511
- readonly failureMode: "return";
512
- }, PullRequestSource>;
513
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
514
- readonly parameters: typeof FileDiffQuery;
515
- readonly success: typeof FileDiffView;
516
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
517
- readonly failureMode: "return";
518
- }, PullRequestSource>;
519
- }>>, import("effect/Scope").Scope>, PullRequestSource> | Exclude<Exclude<Exclude<Exclude<Tool.HandlersFor<Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
520
- readonly parameters: typeof ListChangedFilesQuery;
521
- readonly success: typeof ChangedFilesView;
522
- readonly failure: typeof PullRequestSourceFailure;
523
- readonly failureMode: "error";
524
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
525
- readonly parameters: typeof FileDiffQuery;
526
- readonly success: typeof FileDiffView;
527
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
528
- readonly failureMode: "return";
529
- }, PullRequestSource>, Tool.Tool<"read_file", {
530
- readonly parameters: typeof FileSliceQuery;
531
- readonly success: typeof FileSlice;
532
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
533
- readonly failureMode: "return";
534
- }, PullRequestSource>, ...Extra]>>, import("effect-agent").EngineProvidedToolServices>, IdGenerator | Tool.HandlersFor<{
535
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
536
- readonly parameters: typeof ListChangedFilesQuery;
537
- readonly success: typeof ChangedFilesView;
538
- readonly failure: typeof PullRequestSourceFailure;
539
- readonly failureMode: "error";
540
- }, PullRequestSource>;
541
- readonly read_file: Tool.Tool<"read_file", {
542
- readonly parameters: typeof FileSliceQuery;
543
- readonly success: typeof FileSlice;
544
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
545
- readonly failureMode: "return";
546
- }, PullRequestSource>;
547
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
548
- readonly parameters: typeof FileDiffQuery;
549
- readonly success: typeof FileDiffView;
550
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
551
- readonly failureMode: "return";
552
- }, PullRequestSource>;
553
- }>>, import("effect/Scope").Scope>, PullRequestSource> | Exclude<Exclude<Exclude<Exclude<Tool.HandlerServices<Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
554
- readonly parameters: typeof ListChangedFilesQuery;
555
- readonly success: typeof ChangedFilesView;
556
- readonly failure: typeof PullRequestSourceFailure;
557
- readonly failureMode: "error";
558
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
559
- readonly parameters: typeof FileDiffQuery;
560
- readonly success: typeof FileDiffView;
561
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
562
- readonly failureMode: "return";
563
- }, PullRequestSource>, Tool.Tool<"read_file", {
564
- readonly parameters: typeof FileSliceQuery;
565
- readonly success: typeof FileSlice;
566
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
567
- readonly failureMode: "return";
568
- }, PullRequestSource>, ...Extra]>[keyof Toolkit.ToolsByName<[Tool.Tool<"list_changed_files", {
569
- readonly parameters: typeof ListChangedFilesQuery;
570
- readonly success: typeof ChangedFilesView;
571
- readonly failure: typeof PullRequestSourceFailure;
572
- readonly failureMode: "error";
573
- }, PullRequestSource>, Tool.Tool<"read_file_diff", {
574
- readonly parameters: typeof FileDiffQuery;
575
- readonly success: typeof FileDiffView;
576
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
577
- readonly failureMode: "return";
578
- }, PullRequestSource>, Tool.Tool<"read_file", {
579
- readonly parameters: typeof FileSliceQuery;
580
- readonly success: typeof FileSlice;
581
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
582
- readonly failureMode: "return";
583
- }, PullRequestSource>, ...Extra]>]>, import("effect-agent").EngineProvidedToolServices>, IdGenerator | Tool.HandlersFor<{
584
- readonly list_changed_files: Tool.Tool<"list_changed_files", {
585
- readonly parameters: typeof ListChangedFilesQuery;
586
- readonly success: typeof ChangedFilesView;
587
- readonly failure: typeof PullRequestSourceFailure;
588
- readonly failureMode: "error";
589
- }, PullRequestSource>;
590
- readonly read_file: Tool.Tool<"read_file", {
591
- readonly parameters: typeof FileSliceQuery;
592
- readonly success: typeof FileSlice;
593
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
594
- readonly failureMode: "return";
595
- }, PullRequestSource>;
596
- readonly read_file_diff: Tool.Tool<"read_file_diff", {
597
- readonly parameters: typeof FileDiffQuery;
598
- readonly success: typeof FileDiffView;
599
- readonly failure: Schema.Union<readonly [typeof PullRequestSourceFailure, typeof ReviewInputViolation]>;
600
- readonly failureMode: "return";
601
- }, PullRequestSource>;
602
- }>>, import("effect/Scope").Scope>, PullRequestSource>>;
603
- readonly fingerprint: Effect.Effect<string, PullRequestSourceFailure, import("effect/Crypto").Crypto | PullRequestSource>;
604
- readonly profileFingerprint: Effect.Effect<string, PullRequestSourceFailure, import("effect/Crypto").Crypto | PullRequestSource>;
605
- readonly snapshot: Effect.Effect<{
606
- metadata: PullRequestMetadata;
607
- files: readonly ChangedFile[];
608
- }, PullRequestSourceFailure, PullRequestSource>;
609
- readonly filterFiles: (files: ReadonlyArray<ChangedFile>) => ChangedFile[];
610
- };
611
- /** Options accepted by `PrReview.makeFanOut` (the host-scheduled pipeline). */
612
- interface PrReviewFanOutOptions<Provider, ModelProvides, ModelRequires> extends PrReviewSharedOptions {
613
- /** The Effect AI Model bound to every child review pass. */
614
- readonly model: Model.Model<Provider, LanguageModel.LanguageModel | ModelProvides, ModelRequires>;
615
- /**
616
- * Static guidance injected into every child reviewer's instructions. The
617
- * pipeline schedules children from the deterministic plan, so
618
- * mission-dependent guidance cannot exist for children.
619
- */
620
- readonly guidance?: string | ReadonlyArray<string> | undefined;
621
- }
622
- /**
623
- * Build the fan-out reviewer: host code schedules host-planned general and
624
- * specialist discovery plus independent candidate verification directly as
625
- * bounded child runs — there is no coordinator model and no delegation tool,
626
- * so review assurance cannot fail on scheduling compliance. Host code
627
- * composes publication only from exactly confirmed candidates. Child
628
- * execution bounds are packaged and not configurable here.
629
- */
630
- declare const makeFanOut: <Provider, ModelProvides, ModelRequires>(options: PrReviewFanOutOptions<Provider, ModelProvides, ModelRequires>) => {
631
- readonly definition: import("effect-agent").Definition<typeof FileReviewBrief, typeof FileReviewReport, (brief: FileReviewBrief) => string, Toolkit.Toolkit<{}>, undefined>;
632
- readonly childBinding: Readonly<{
633
- definition: import("effect-agent").Definition<typeof FileReviewBrief, typeof FileReviewReport, (brief: FileReviewBrief) => string, Toolkit.Toolkit<{}>, undefined>;
634
- model: Model.Model<Provider, ModelProvides | LanguageModel.LanguageModel, ModelRequires>;
635
- }>;
636
- readonly run: (runOptions?: RunReviewOptions) => Effect.Effect<ReviewRunOutcome, GitHubApiFailure | PullRequestSourceFailure, import("effect/Crypto").Crypto | PullRequestSource | ReviewAdjudicationHost | ReviewExecutionContext | ReviewPublisher | Exclude<Exclude<Exclude<Exclude<ModelRequires, import("effect-agent").EngineProvidedToolServices>, import("effect/Scope").Scope>, IdGenerator>, import("effect/Scope").Scope>> | Effect.Effect<ReviewRunOutcome, GitHubApiFailure | PullRequestSourceFailure, import("effect/Crypto").Crypto | PullRequestSource | ReviewAdjudicationHost | ReviewExecutionContext | ReviewPublisher | Exclude<Exclude<Exclude<Exclude<Exclude<ModelRequires, import("effect-agent").EngineProvidedToolServices>, import("effect/Scope").Scope>, IdGenerator>, import("effect/Scope").Scope>, PullRequestSource>>;
637
- readonly fingerprint: Effect.Effect<string, PullRequestSourceFailure, import("effect/Crypto").Crypto | PullRequestSource>;
638
- readonly profileFingerprint: Effect.Effect<string, PullRequestSourceFailure, import("effect/Crypto").Crypto | PullRequestSource>;
639
- readonly snapshot: Effect.Effect<{
640
- metadata: PullRequestMetadata;
641
- files: readonly ChangedFile[];
642
- }, PullRequestSourceFailure, PullRequestSource>;
643
- readonly filterFiles: (files: ReadonlyArray<ChangedFile>) => ChangedFile[];
644
- };
645
- /**
646
- * The packaged pull-request reviewer factory.
647
- *
648
- * - `make` — one flat reviewer over the whole changeset.
649
- * - `makeFanOut` — a coordinator delegating bounded per-unit child reviews.
650
- */
651
- declare const PrReview: {
652
- readonly make: typeof make;
653
- readonly makeFanOut: typeof makeFanOut;
654
- };
655
- //#endregion
656
- //#region src/internal/fingerprint.d.ts
657
- /** Render the invisible review-body marker for one fingerprint. */
658
- declare const renderFingerprintMarker: (fingerprint: string) => string;
659
- /** The rendered marker length is fixed; publication reserves room for it. */
660
- declare const FINGERPRINT_MARKER_LENGTH: number;
661
- /** Extract the last fingerprint marker in one review body, if any. */
662
- declare const extractFingerprint: (body: string) => string | undefined;
663
- /**
664
- * Fingerprint one review's complete input surface: the (already
665
- * ignore-filtered) changeset plus the caller's prompt signature — the
666
- * rendered instructions and any review-shaping options the instructions do
667
- * not carry.
668
- */
669
- declare const computeChangesetFingerprint: (files: ReadonlyArray<ChangedFile>, signature: string) => Effect.Effect<string, never, Crypto.Crypto>;
670
- /** Profile fingerprints are SHA-256 over configuration-only signatures. */
671
- declare const computeProfileFingerprint: (signature: string) => Effect.Effect<string, never, Crypto.Crypto>;
672
- //#endregion
673
- //#region src/internal/progress.d.ts
674
- /** Every progress comment starts its invisible marker with this prefix. */
675
- declare const PROGRESS_COMMENT_MARKER_PREFIX = "<!-- effect-agent-pr-review progress";
676
- /** One run's generation fence: who wrote a progress comment, and when. */
677
- interface ProgressClaim {
678
- /** Random per-run token; matching it means the comment is this run's own. */
679
- readonly runToken: string;
680
- /** Run start in epoch millis; newer runs may overwrite older claims. */
681
- readonly startedMillis: number;
682
- }
683
- /** Render one run's claim marker (token sanitized into the safe alphabet). */
684
- declare const renderProgressClaimMarker: (claim: ProgressClaim) => string;
685
- /** Extract the last claim marker in one comment body, if any. */
686
- declare const parseProgressClaim: (body: string) => ProgressClaim | undefined;
687
- /** What a starting run can honestly say before any model turn has executed. */
688
- interface ReviewProgressBegin {
689
- readonly headSha?: string | undefined;
690
- readonly reviewMode?: ReviewScopeMode | undefined;
691
- readonly reviewReason?: string | undefined;
692
- readonly filesInScope?: number | undefined;
693
- readonly modelLabel?: string | undefined;
694
- readonly runUrl?: string | undefined;
695
- }
696
- /** How the run ended: a settled (posted) review, or a failure that posted nothing. */
697
- type ReviewProgressSettle = {
698
- readonly outcome: "reviewed";
699
- readonly conclusion: "success" | "blocking" | "incomplete";
700
- readonly verdict: string;
701
- readonly inlineComments: number;
702
- readonly reviewUrl?: string | undefined;
703
- readonly runUrl?: string | undefined;
704
- readonly modelLabel?: string | undefined;
705
- } | {
706
- readonly outcome: "failed";
707
- readonly runUrl?: string | undefined;
708
- readonly modelLabel?: string | undefined;
709
- };
710
- /** The "a run just started" body; the outcome update replaces it in place. */
711
- declare const renderProgressBeginBody: (info: ReviewProgressBegin, claim: ProgressClaim) => string;
712
- /** The settled-outcome body written over the in-progress comment. */
713
- declare const renderProgressSettleBody: (info: ReviewProgressSettle, claim: ProgressClaim) => string;
714
- declare const ReviewProgressReporter_base: Context.ServiceClass<ReviewProgressReporter, "@effect-agent/pr-review/ReviewProgressReporter", {
715
- readonly begin: (info: ReviewProgressBegin) => Effect.Effect<void>;
716
- readonly settle: (info: ReviewProgressSettle) => Effect.Effect<void>;
717
- }>;
718
- /**
719
- * Maintains the sticky progress comment. Both operations are infallible by
720
- * contract: implementations own their fault handling, because progress
721
- * reporting may never fail or delay the review run it narrates.
722
- */
723
- declare class ReviewProgressReporter extends ReviewProgressReporter_base {}
724
- /** Reports nothing; the substitute for hosts without a progress surface. */
725
- declare const noopReviewProgressReporterLayer: Layer.Layer<ReviewProgressReporter>;
726
- /**
727
- * GitHub-backed progress reporter over the issue-comments API. The sticky
728
- * comment is found by its invisible marker AND the configured posting-bot
729
- * identity — a marker pasted into someone else's comment is never edited.
730
- * Writes are generation-fenced per the module contract above, and every
731
- * fault (lookup, create, update, delete, bound exhaustion) degrades to a
732
- * logged warning: a pull request without a progress comment is a cosmetic
733
- * loss, a failed review run over a cosmetic fault would not be.
734
- */
735
- declare const gitHubReviewProgressLayer: Layer.Layer<ReviewProgressReporter, never, GitHubReviewTarget | HttpClient.HttpClient>;
736
- //#endregion
737
- //#region src/internal/github-env.d.ts
738
- declare const ReviewTargetUnresolved_base: Schema.Class<ReviewTargetUnresolved, Schema.TaggedStruct<"ReviewTargetUnresolved", {
739
- readonly reason: Schema.String;
740
- }>, import("effect/Cause").YieldableError>;
741
- /** The pull request could not be resolved from options or the environment. */
742
- declare class ReviewTargetUnresolved extends ReviewTargetUnresolved_base {
743
- get message(): string;
744
- }
745
- /** The slice of a GitHub Actions event payload this package understands. */
746
- declare const GitHubEventWire: Schema.Struct<{
747
- readonly pull_request: Schema.optionalKey<Schema.Struct<{
748
- readonly number: Schema.Int;
749
- readonly draft: Schema.optionalKey<Schema.Boolean>;
750
- }>>;
751
- readonly repository: Schema.optionalKey<Schema.Struct<{
752
- readonly full_name: Schema.String;
753
- }>>;
754
- }>;
755
- type GitHubEventWire = typeof GitHubEventWire.Type;
756
- /** Read and decode the GITHUB_EVENT_PATH payload, or none outside Actions. */
757
- declare const readGitHubEvent: () => Effect.Effect<Option.Option<{
758
- readonly pull_request?: {
759
- readonly number: number;
760
- readonly draft?: boolean | undefined;
761
- } | undefined;
762
- readonly repository?: {
763
- readonly full_name: string;
764
- } | undefined;
765
- }>, Config.ConfigError | ReviewTargetUnresolved, FileSystem.FileSystem>;
766
- interface ResolvedReviewTarget {
767
- readonly repository: string;
768
- readonly number: number;
769
- }
770
- /**
771
- * Resolve the review target: explicit values win, then GITHUB_REPOSITORY and
772
- * the pull_request event payload. Fails typed when no target can be named.
773
- */
774
- declare const resolveReviewTarget: (options: {
775
- readonly repository?: string | undefined;
776
- readonly number?: number | undefined;
777
- }) => Effect.Effect<{
778
- repository: string;
779
- number: number;
780
- }, Config.ConfigError | ReviewTargetUnresolved, FileSystem.FileSystem>;
781
- /**
782
- * Build the GitHub source and publisher Layers for one resolved target,
783
- * reading GITHUB_API_URL, GITHUB_TOKEN, and PR_REVIEW_AUTHOR_LOGIN from
784
- * configuration. The returned Layer is the complete GitHub side of a review
785
- * run.
786
- */
787
- declare const gitHubReviewLayers: (target: ResolvedReviewTarget) => Layer.Layer<PullRequestSource | ReviewPublisher | PriorReviews | ReviewRetirementHost | ReviewAdjudicationHost | ReviewProgressReporter, Config.ConfigError, HttpClient.HttpClient>;
788
- //#endregion
789
- //#region src/internal/ignore.d.ts
790
- /** Compile ignore globs into one predicate over repository-relative paths. */
791
- declare const compileIgnoreGlobs: (patterns: ReadonlyArray<string>) => ((path: string) => boolean);
792
- /**
793
- * Decorate the ambient PullRequestSource with configured ignore globs. The
794
- * resulting Layer requires the undecorated source, so callers provide their
795
- * real adapter beneath it. Metadata's changed-file total is reduced by the
796
- * ignored count: from the reviewer's perspective the ignored files do not
797
- * exist, and truncation reporting stays about the reviewer's own bound.
798
- */
799
- declare const ignoringPullRequestSourceLayer: (patterns: ReadonlyArray<string>) => Layer.Layer<PullRequestSource, never, PullRequestSource>;
800
- //#endregion
801
- //#region src/internal/logging.d.ts
802
- /** Everything one compact line is rendered from; pure and directly testable. */
803
- interface CompactLogRecord {
804
- readonly date: Date;
805
- readonly logLevel: LogLevel.LogLevel;
806
- readonly message: unknown;
807
- readonly annotations: Readonly<Record<string, unknown>>;
808
- /** Pretty-rendered Cause, present only when the record carries one. */
809
- readonly cause?: string | undefined;
810
- }
811
- /** Render one log record as a single compact console line. */
812
- declare const formatCompactLogLine: (record: CompactLogRecord) => string;
813
- /** The compact Logger; annotations come from the emitting fiber. */
814
- declare const compactReviewLogger: Logger.Logger<unknown, string>;
815
- /**
816
- * Install the compact console logger and the minimum level for one host run.
817
- * PR_REVIEW_LOG_LEVEL widens visibility (e.g. "Debug" shows the engine's
818
- * per-turn and per-handler telemetry); an unknown value fails loudly like
819
- * every other configuration fault.
820
- */
821
- declare const compactReviewLoggingLayer: Layer.Layer<never, Config.ConfigError>;
822
- //#endregion
823
- //#region src/internal/profiles.d.ts
824
- declare const PullRequestReviewerProfile_base: Schema.Class<PullRequestReviewerProfile, Schema.Struct<{
825
- /** Ephemeral runtime: one bounded AgentRuntime.run per invocation. */
826
- readonly deploymentClass: Schema.Literal<"E">;
827
- /** Every model-callable tool is a read of the pull request; none mutate. */
828
- readonly readOnlyToolSurface: Schema.Literal<true>;
829
- /** The review is posted by the host AFTER the run settles, never by a tool. */
830
- readonly publicationOutsideAgentLoop: Schema.Literal<true>;
831
- /** Finding anchors are validated against the parsed diff before posting. */
832
- readonly anchorsValidatedBeforePublication: Schema.Literal<true>;
833
- /** The live profile is env-gated out of every ordinary test gate. */
834
- readonly liveProfileOptIn: Schema.Literal<true>;
835
- /** Never claimed at any phase (DUR-003). */
836
- readonly exactlyOnceExternalEffects: Schema.Literal<false>;
19
+ /** The provider-neutral input to one review pass. */
20
+ declare class ReviewRequest extends ReviewRequest_base {}
21
+ declare const ReviewSeverity: Schema.Literals<readonly ["blocking", "important", "nit"]>;
22
+ type ReviewSeverity = typeof ReviewSeverity.Type;
23
+ /** A model-claimed problem kind used only to label findings for readers. */
24
+ declare const ReviewCategory: Schema.Literals<readonly ["correctness", "security", "concurrency", "performance", "resources", "reliability", "error-handling", "testing", "maintainability", "style", "docs"]>;
25
+ type ReviewCategory = typeof ReviewCategory.Type;
26
+ declare const ReviewFinding_base: Schema.Class<ReviewFinding, Schema.Struct<{
27
+ readonly path: Schema.NonEmptyString;
28
+ readonly line: Schema.optionalKey<Schema.Int>;
29
+ readonly severity: Schema.Literals<readonly ["blocking", "important", "nit"]>;
30
+ /** Presentation label only; it never changes review admission or failure policy. */
31
+ readonly category: Schema.Literals<readonly ["correctness", "security", "concurrency", "performance", "resources", "reliability", "error-handling", "testing", "maintainability", "style", "docs"]>;
32
+ readonly title: Schema.NonEmptyString;
33
+ readonly body: Schema.NonEmptyString;
837
34
  }>, {}>;
838
- /** The flat reviewer's committed capability claim. */
839
- declare class PullRequestReviewerProfile extends PullRequestReviewerProfile_base {}
840
- declare const pullRequestReviewerProfile: PullRequestReviewerProfile;
841
- declare const FanOutReviewerProfile_base: Schema.Class<FanOutReviewerProfile, Schema.Struct<{
842
- /** Ephemeral runtime: bounded host-scheduled child runs per invocation. */
843
- readonly deploymentClass: Schema.Literal<"E">;
844
- /** Every model-callable surface is evidence-only; children expose no tools. */
845
- readonly readOnlyToolSurface: Schema.Literal<true>;
846
- /** The review is posted by the host AFTER the run settles, never by a tool. */
847
- readonly publicationOutsideAgentLoop: Schema.Literal<true>;
848
- /** Child findings are untrusted; anchors are validated against the parsed diff. */
849
- readonly anchorsValidatedBeforePublication: Schema.Literal<true>;
850
- /** Host code schedules every pass from the deterministic plan; no coordinator model. */
851
- readonly hostScheduledPasses: Schema.Literal<true>;
852
- /** A failed pass is retried once, then reported and carried as unreviewed scope. */
853
- readonly failedPassesRetriedOnceThenCarried: Schema.Literal<true>;
854
- /** Risk categories and required specialist passes are pure host policy. */
855
- readonly hostOwnedRiskClassification: Schema.Literal<true>;
856
- /** Every host-classified high-risk unit receives a fresh specialist pass. */
857
- readonly redundantHighRiskDiscovery: Schema.Literal<true>;
858
- /** Only exact candidates confirmed by a fresh verifier child may publish. */
859
- readonly independentCandidateVerification: Schema.Literal<true>;
860
- /** No bounded model pipeline proves that a pull request is defect-free. */
861
- readonly defectAbsenceProven: Schema.Literal<false>;
862
- /** The live profile is env-gated out of every ordinary test gate. */
863
- readonly liveProfileOptIn: Schema.Literal<true>;
864
- /** Never claimed at any phase (DUR-003). */
865
- readonly exactlyOnceExternalEffects: Schema.Literal<false>;
35
+ /** One actionable defect. `line` is a RIGHT-side line in the supplied patch. */
36
+ declare class ReviewFinding extends ReviewFinding_base {}
37
+ declare const ReviewReport_base: Schema.Class<ReviewReport, Schema.Struct<{
38
+ readonly summary: Schema.NonEmptyString;
39
+ readonly findings: Schema.$Array<typeof ReviewFinding>;
866
40
  }>, {}>;
867
- /** The fan-out reviewer's committed capability claim, schema-first. */
868
- declare class FanOutReviewerProfile extends FanOutReviewerProfile_base {}
869
- declare const fanOutReviewerProfile: FanOutReviewerProfile;
870
- declare const LIVE_GATE_ENV = "EFFECT_AGENT_LIVE";
41
+ /** The only model-authored output. An empty findings array is a successful review. */
42
+ declare class ReviewReport extends ReviewReport_base {}
43
+ declare const ReviewUsage_base: Schema.Class<ReviewUsage, Schema.Struct<{
44
+ readonly inputTokens: Schema.Natural;
45
+ readonly uncachedInputTokens: Schema.Natural;
46
+ readonly cachedInputTokens: Schema.Natural;
47
+ readonly cacheWriteInputTokens: Schema.Natural;
48
+ readonly outputTokens: Schema.Natural;
49
+ readonly estimatedCostMicrousd: Schema.optionalKey<Schema.Natural>;
50
+ }>, {}>;
51
+ declare class ReviewUsage extends ReviewUsage_base {}
52
+ declare const ReviewOutcome_base: Schema.Class<ReviewOutcome, Schema.Struct<{
53
+ readonly report: typeof ReviewReport;
54
+ readonly turns: Schema.Natural;
55
+ readonly usage: typeof ReviewUsage;
56
+ }>, {}>;
57
+ declare class ReviewOutcome extends ReviewOutcome_base {}
58
+ declare const reviewPolicy: AgentPolicy;
59
+ declare const reviewBudgetLimits: UsageBudgetLimits;
60
+ /** Return every RIGHT-side line on which GitHub can place a diff comment. */
61
+ declare const commentableLines: (patch: string) => ReadonlySet<number>;
62
+ declare const isCommentableLine: (patch: string, line: number) => boolean;
871
63
  /**
872
- * `EFFECT_AGENT_LIVE=1` plus the named credential is the only enabling
873
- * combination for live (network, billed) profiles.
64
+ * Treat model output as untrusted: remove unknown paths, demote invalid line
65
+ * anchors to top-level findings, and collapse exact duplicates.
874
66
  */
875
- declare const liveProfileEnabled: (env: Record<string, string | undefined>, credentialEnv: string) => boolean;
876
- //#endregion
877
- //#region src/internal/providers.d.ts
878
- declare const ReviewProvider: Schema.Literals<readonly ["openai", "anthropic"]>;
879
- type ReviewProvider = typeof ReviewProvider.Type;
880
- /** OpenAI Responses service tiers supported by the packaged reviewer. */
881
- declare const OpenAiServiceTier: Schema.Literal<"fast">;
882
- type OpenAiServiceTier = typeof OpenAiServiceTier.Type;
883
- declare const UnsupportedServiceTierProvider_base: Schema.Class<UnsupportedServiceTierProvider, Schema.TaggedStruct<"UnsupportedServiceTierProvider", {
884
- readonly provider: Schema.Literals<readonly ["openai", "anthropic"]>;
885
- readonly serviceTier: Schema.Literal<"fast">;
886
- }>, import("effect/Cause").YieldableError>;
887
- /** A provider-specific OpenAI tier was configured for another provider. */
888
- declare class UnsupportedServiceTierProvider extends UnsupportedServiceTierProvider_base {
889
- get message(): string;
67
+ declare const sanitizeReviewReport: (request: Pick<ReviewRequest, "changes">, report: ReviewReport) => ReviewReport;
68
+ interface ReviewerOptions<Provider, ModelProvides, ModelRequires> {
69
+ readonly model: Model.Model<Provider, LanguageModel.LanguageModel | ModelProvides, ModelRequires>;
70
+ readonly guidance?: string | undefined;
71
+ readonly estimateCostMicrousd?: RunCostEstimator | undefined;
890
72
  }
891
- /** Reject an OpenAI-only service tier before constructing another provider's model. */
892
- declare const validateReviewServiceTier: (provider: "anthropic" | "openai", serviceTier: "fast" | undefined) => Effect.Effect<"fast" | undefined, UnsupportedServiceTierProvider, never>;
893
- declare const DEFAULT_PROVIDER: ReviewProvider;
894
- declare const DEFAULT_MODEL: Record<ReviewProvider, string>;
895
- declare const PROVIDER_CREDENTIAL_ENV: Record<ReviewProvider, string>;
896
- /**
897
- * Each provider's offered reasoning-effort ladder, cheapest first. The rungs
898
- * that turn reasoning off (`none`, `minimal`) are deliberately not offered —
899
- * no review run wants them. An `EffortPosition` resolves into the running
900
- * provider's own ladder, so the same stored position survives a provider or
901
- * model change.
902
- */
903
- declare const PROVIDER_EFFORT_RUNGS: {
904
- readonly openai: readonly ["low", "medium", "high", "xhigh"];
905
- readonly anthropic: readonly ["low", "medium", "high"];
73
+ /** Build a provider-neutral reviewer. The returned `review` performs exactly one Run. */
74
+ declare const makeReviewer: <Provider, ModelProvides, ModelRequires>(options: ReviewerOptions<Provider, ModelProvides, ModelRequires>) => {
75
+ readonly definition: import("effect-agent").Definition<typeof ReviewRequest, typeof ReviewReport, "Review the supplied pull-request diff once.\n\nReport only concrete correctness, security, reliability, or maintainability defects that the author should act on. Do not praise, restate the change, invent missing repository context, or ask for speculative cleanup. An empty findings array is valid.\n\nEvery finding must use an exact supplied path. Set line only to a RIGHT-side added or context line visible in that path's unified patch; otherwise omit line. Use blocking only for a defect that should prevent shipping. Classify each finding with the closest available category. Treat unreviewedPaths as unavailable scope and never imply that you inspected it. A changed file absent from changes may have been withheld by the host; never infer that it was not changed, and report only defects proven by the supplied patches." | `Review the supplied pull-request diff once.
76
+
77
+ Report only concrete correctness, security, reliability, or maintainability defects that the author should act on. Do not praise, restate the change, invent missing repository context, or ask for speculative cleanup. An empty findings array is valid.
78
+
79
+ Every finding must use an exact supplied path. Set line only to a RIGHT-side added or context line visible in that path's unified patch; otherwise omit line. Use blocking only for a defect that should prevent shipping. Classify each finding with the closest available category. Treat unreviewedPaths as unavailable scope and never imply that you inspected it. A changed file absent from changes may have been withheld by the host; never infer that it was not changed, and report only defects proven by the supplied patches.
80
+
81
+ Repository guidance:
82
+ ${string}`, Toolkit.Toolkit<{}>, undefined>;
83
+ readonly binding: import("effect-agent").Binding<import("effect-agent").Definition<typeof ReviewRequest, typeof ReviewReport, "Review the supplied pull-request diff once.\n\nReport only concrete correctness, security, reliability, or maintainability defects that the author should act on. Do not praise, restate the change, invent missing repository context, or ask for speculative cleanup. An empty findings array is valid.\n\nEvery finding must use an exact supplied path. Set line only to a RIGHT-side added or context line visible in that path's unified patch; otherwise omit line. Use blocking only for a defect that should prevent shipping. Classify each finding with the closest available category. Treat unreviewedPaths as unavailable scope and never imply that you inspected it. A changed file absent from changes may have been withheld by the host; never infer that it was not changed, and report only defects proven by the supplied patches." | `Review the supplied pull-request diff once.
84
+
85
+ Report only concrete correctness, security, reliability, or maintainability defects that the author should act on. Do not praise, restate the change, invent missing repository context, or ask for speculative cleanup. An empty findings array is valid.
86
+
87
+ Every finding must use an exact supplied path. Set line only to a RIGHT-side added or context line visible in that path's unified patch; otherwise omit line. Use blocking only for a defect that should prevent shipping. Classify each finding with the closest available category. Treat unreviewedPaths as unavailable scope and never imply that you inspected it. A changed file absent from changes may have been withheld by the host; never infer that it was not changed, and report only defects proven by the supplied patches.
88
+
89
+ Repository guidance:
90
+ ${string}`, Toolkit.Toolkit<{}>, undefined>, Model.Model<Provider, ModelProvides | LanguageModel.LanguageModel, ModelRequires>>;
91
+ readonly review: (request: ReviewRequest) => Effect.Effect<ReviewOutcome, import("effect-agent").AgentRuntimeFailure<import("effect-agent").RuntimeBinding<typeof ReviewRequest, typeof ReviewReport, "Review the supplied pull-request diff once.\n\nReport only concrete correctness, security, reliability, or maintainability defects that the author should act on. Do not praise, restate the change, invent missing repository context, or ask for speculative cleanup. An empty findings array is valid.\n\nEvery finding must use an exact supplied path. Set line only to a RIGHT-side added or context line visible in that path's unified patch; otherwise omit line. Use blocking only for a defect that should prevent shipping. Classify each finding with the closest available category. Treat unreviewedPaths as unavailable scope and never imply that you inspected it. A changed file absent from changes may have been withheld by the host; never infer that it was not changed, and report only defects proven by the supplied patches." | `Review the supplied pull-request diff once.
92
+
93
+ Report only concrete correctness, security, reliability, or maintainability defects that the author should act on. Do not praise, restate the change, invent missing repository context, or ask for speculative cleanup. An empty findings array is valid.
94
+
95
+ Every finding must use an exact supplied path. Set line only to a RIGHT-side added or context line visible in that path's unified patch; otherwise omit line. Use blocking only for a defect that should prevent shipping. Classify each finding with the closest available category. Treat unreviewedPaths as unavailable scope and never imply that you inspected it. A changed file absent from changes may have been withheld by the host; never infer that it was not changed, and report only defects proven by the supplied patches.
96
+
97
+ Repository guidance:
98
+ ${string}`, {}, Provider, ModelProvides, ModelRequires, never, never, undefined>, import("effect-agent").BudgetAdapterError | import("effect-agent").BudgetExceeded, never>, Exclude<Exclude<Exclude<ModelRequires, import("effect-agent").EngineProvidedToolServices>, IdGenerator>, import("effect/Scope").Scope>>;
906
99
  };
907
- /** One OpenAI review model binding with the package's structured-output settings. */
908
- declare const makeOpenAiReviewModel: (model?: string, effort?: EffortPosition, serviceTier?: OpenAiServiceTier) => import("effect/unstable/ai/Model").Model<"openai", import("effect/unstable/ai/LanguageModel").LanguageModel, OpenAiClient.OpenAiClient>;
909
- /** One Anthropic review model binding with the package's output settings. */
910
- declare const makeAnthropicReviewModel: (model?: string, effort?: EffortPosition) => import("effect/unstable/ai/Model").Model<"anthropic", import("effect/unstable/ai/LanguageModel").LanguageModel, AnthropicClient.AnthropicClient>;
911
- /**
912
- * The human-readable descriptor of one provider binding, e.g.
913
- * `openai/gpt-5.6-sol (effort high, service tier fast)`. Rendered into the review footer and
914
- * included in the changeset-fingerprint signature, so a provider, model, or
915
- * request-profile change re-reviews instead of skipping.
916
- */
917
- declare const describeReviewModel: (provider: ReviewProvider, model?: string, effort?: EffortPosition, serviceTier?: OpenAiServiceTier) => string;
918
- /** The OpenAI client Layer, credential from `OPENAI_API_KEY`. */
919
- declare const openAiClientLayer: Layer.Layer<OpenAiClient.OpenAiClient, Config.ConfigError, never>;
920
- /** The Anthropic client Layer, credential from `ANTHROPIC_API_KEY`. */
921
- declare const anthropicClientLayer: Layer.Layer<AnthropicClient.AnthropicClient, Config.ConfigError, never>;
922
100
  //#endregion
923
- export { AGENT_PROMPT_PREAMBLE, AUTHORIZED_ADJUDICATION_ASSOCIATIONS, AdjudicableThread, AdjudicationComment, AdjudicationDisposition, CandidateAssessment, CarriedScope, ChangedFile, ChangedFileStatus, ChangedFileSummary, ChangedFilesView, ChangedPath, CodeReview, CompactLogRecord, ConcernCandidate, DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, DEFAULT_MODEL, DEFAULT_PROVIDER, DerivedAdjudications, DiscoveredConcern, EFFORT_ALIASES, EffortAliasName, EffortPosition, ExecuteReviewOptions, FINGERPRINT_MARKER_LENGTH, FailedReviewPass, FanOutInstructionOptions, FanOutPipelineInput, FanOutPipelineOutcome, FanOutReviewerProfile, FileDiffQuery, FileDiffView, FileReviewBrief, FileReviewEvidence, FileReviewEvidenceChunk, FileReviewReport, FileReviewToolkit, FileReviewer, FileReviewerBinding, FileSlice, FileSliceQuery, FindingCandidate, FindingCategory, FindingSeverity, FlatReviewAssessment, GitCommitSha, GitHubApiFailure, GitHubEventWire, GitHubReviewTarget, INLINE_FINDING_TITLE_PATTERN, InvalidEffortInput, LIVE_GATE_ENV, ListChangedFiles, ListChangedFilesQuery, MAX_CHANGED_FILES, MAX_CHILD_CONCERNS, MAX_CHILD_FINDINGS, MAX_CONCERNS, MAX_FILE_CHARS, MAX_FILE_REVIEW_TOOL_CALLS, MAX_FINDINGS, MAX_MERGED_FINDINGS, MAX_PATCH_CHARS, MAX_REPORTED_UNASSIGNED_EVIDENCE_SHARDS, MAX_REVIEW_CHILDREN, MAX_REVIEW_CONTENT_CHARS, MAX_REVIEW_STATE_MARKER_CHARS, MAX_REVIEW_UNITS, MAX_STORED_ADJUDICATIONS, MAX_STORED_UNREVIEWED_PASSES, MAX_STORED_UNREVIEWED_PATHS, MAX_THREAD_ADJUDICATION_COMMANDS, MAX_TREE_COMPARISON_PATHS, MAX_UNIT_CANDIDATES, MAX_UNIT_EVIDENCE_SHARDS, MAX_UNIT_FILES, MAX_WALKTHROUGH_ENTRIES, MAX_WALKTHROUGH_SUMMARY_CHARS, OpenAiServiceTier, PROGRESS_COMMENT_MARKER_PREFIX, PROVIDER_CREDENTIAL_ENV, PROVIDER_EFFORT_RUNGS, ParsedAdjudicationCommand, PatchLine, PrReview, PrReviewFanOutOptions, PrReviewOptions, PrReviewSharedOptions, PriorReviewContext, PriorReviewLookupFailure, PriorReviews, ProgressClaim, PublishedReview, PullRequestMetadata, PullRequestReviewer, PullRequestReviewerProfile, PullRequestSource, PullRequestSourceFailure, REVIEW_TOOL_RESULT_MAX_BYTES, REVIEW_UNIT_CONCURRENCY, ReadFile, ReadFileDiff, ResolvedReviewTarget, RetirableReview, RetirableReviewComment, ReviewAdjudicationFailure, ReviewAdjudicationHost, ReviewAssurance, ReviewCandidate, ReviewCandidateId, ReviewCommentDraft, ReviewConcern, ReviewDiscoveryPass, ReviewDiscoveryPerspective, ReviewEvent, ReviewEvidenceShard, ReviewEvidenceShardId, ReviewExecutionContext, ReviewFinding, ReviewGuidance, ReviewHeadComparison, ReviewInputCoverage, ReviewInputViolation, ReviewInstructionOptions, ReviewMission, ReviewMode, ReviewPassId, ReviewPassMisbehaved, ReviewProgressBegin, ReviewProgressReporter, ReviewProgressSettle, ReviewProvider, ReviewPublicationPlan, ReviewPublisher, ReviewRetirementDecision, ReviewRetirementFailure, ReviewRetirementHost, ReviewRetirementInput, ReviewRetirementReport, ReviewRiskCategory, ReviewRunOutcome, ReviewScopeMode, ReviewSelection, ReviewState, ReviewStateAuthenticationFailure, ReviewStateAuthenticator, ReviewStateMarker, ReviewStateMarkerTooLarge, ReviewTargetUnresolved, ReviewToolkit, ReviewToolkitLayer, ReviewTreeComparison, ReviewUnit, ReviewUnitId, ReviewUnitPlan, ReviewVerdict, ReviewWorkPerspective, ReviewWorkPhase, RunReviewOptions, StoredAdjudication, StoredReviewConcern, StoredReviewFinding, StoredUnreviewedPass, UNIT_EVIDENCE_CHAR_BUDGET, UnreviewedStage, UnsupportedServiceTierProvider, WalkthroughEntry, adjudicationIdentity, anchorViolation, annotatePatch, anthropicClientLayer, assessFlatReview, assessmentSettlesSuggestionExactly, boundedListReason, buildPriorReviewContext, buildProfileMission, buildReviewMission, clampMaxFindings, classifyReviewRisks, collectReviewAdjudications, commentableLines, compactReviewLogger, compactReviewLoggingLayer, compileIgnoreGlobs, computeChangesetFingerprint, computeProfileFingerprint, concernIdentity, confirmedFindingForPublication, decideReviewRetirement, defaultFileReviewerPolicy, defaultReviewPolicy, deriveAdjudications, describeReviewModel, enforceFindingsBound, estimateReviewEffort, executeFanOutReview, executeReview, extractFingerprint, fanOutInputCoverage, fanOutReviewBudgetLimits, fanOutReviewerProfile, fileDiffView, fileReviewEvidenceChunks, fileReviewerInstructions, findingAnchorInUnitEvidence, findingIdentity, fingerprintUnchanged, flatAssurance, formatCompactLogLine, fromStoredConcern, fromStoredFinding, fullReviewExecutionContextLayer, fullReviewSelection, gitHubPriorReviewsLayer, gitHubPullRequestSourceLayer, gitHubReviewAdjudicationHostLayer, gitHubReviewLayers, gitHubReviewProgressLayer, gitHubReviewPublisherLayer, gitHubReviewRetirementHostLayer, hasReviewMetadataMarker, hasReviewableContent, ignoringPullRequestSourceLayer, isEffortPosition, isLineageAncestor, isReviewableFile, listChangedFilesHandler, liveProfileEnabled, makeAnthropicReviewModel, makeFileReviewerDefinition, makeFileReviewerInstructions, makeOpenAiReviewModel, makeReviewInstructions, mergeAdjudications, noReviewAdjudicationHost, noReviewAdjudicationHostLayer, noopReviewProgressReporterLayer, normalizeRepoRelativePath, openAiClientLayer, parseEffortPosition, parseGitHubSubmittedAt, parseIssueAdjudication, parsePatch, parseProgressClaim, parseThreadAdjudication, planPublication, planReviewUnits, planWalkthrough, pullRequestReviewerProfile, rankAndDedupeConcerns, rankAndDedupeFindings, readFileDiffHandler, readFileHandler, readGitHubEvent, renderAdjudicationContextLine, renderAgentPrompt, renderFingerprintMarker, renderPriorFindingContextLine, renderProgressBeginBody, renderProgressClaimMarker, renderProgressSettleBody, renderReviewContent, resolveEffortRung, resolveGuidance, resolveReviewTarget, retireStaleReviews, reviewBudgetLimits, reviewCandidateSubjectKey, reviewConcernKey, reviewInstructions, runFanOutReview, selectReviewRange, selectedPullRequestSourceLayer, splitCarriedScope, threadFindingTarget, toStoredConcern, toStoredFinding, unavailableReviewStateAuthenticatorLayer, validateReviewServiceTier, validateReviewState, webCryptoReviewStateAuthenticatorLayer };
101
+ export { ReviewCategory, ReviewChange, ReviewFinding, ReviewOutcome, ReviewReport, ReviewRequest, ReviewSeverity, ReviewUsage, ReviewerOptions, type RunCostEstimator, commentableLines, isCommentableLine, makeReviewer, reviewBudgetLimits, reviewPolicy, sanitizeReviewReport };
924
102
  //# sourceMappingURL=index.d.mts.map