@effect-agent/pr-review 0.1.0-beta.12 → 0.1.0-beta.14

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 (39) hide show
  1. package/README.md +53 -14
  2. package/dist/action.d.mts +13 -3
  3. package/dist/action.mjs +35 -5
  4. package/dist/action.mjs.map +1 -1
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{fan-out-TrA9EUCr.d.mts → fan-out-DBHPcJwC.d.mts} +133 -35
  7. package/dist/{github-5TCFrxfX.mjs → github-mmanX6hk.mjs} +204 -40
  8. package/dist/github-mmanX6hk.mjs.map +1 -0
  9. package/dist/index.d.mts +90 -4
  10. package/dist/index.mjs +4 -3
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/logging-Q4j0oub-.mjs +75 -0
  13. package/dist/logging-Q4j0oub-.mjs.map +1 -0
  14. package/dist/{providers-DobNWMUn.mjs → providers-DD2GdrXQ.mjs} +387 -26
  15. package/dist/providers-DD2GdrXQ.mjs.map +1 -0
  16. package/dist/testing.d.mts +2 -1
  17. package/dist/testing.mjs +23 -15
  18. package/dist/testing.mjs.map +1 -1
  19. package/package.json +2 -2
  20. package/src/action.ts +60 -2
  21. package/src/index.ts +2 -0
  22. package/src/internal/action-entry.ts +2 -0
  23. package/src/internal/coverage.ts +42 -4
  24. package/src/internal/diff.ts +59 -0
  25. package/src/internal/fan-out.ts +23 -3
  26. package/src/internal/fingerprint.ts +1 -1
  27. package/src/internal/fixtures.ts +15 -4
  28. package/src/internal/github-env.ts +8 -1
  29. package/src/internal/github.ts +73 -12
  30. package/src/internal/logging.ts +124 -0
  31. package/src/internal/progress.ts +433 -0
  32. package/src/internal/render.ts +251 -19
  33. package/src/internal/retirement.ts +5 -1
  34. package/src/internal/review-agent.ts +84 -10
  35. package/src/internal/review-state.ts +21 -1
  36. package/src/internal/review-units.ts +17 -11
  37. package/src/internal/run.ts +33 -2
  38. package/dist/github-5TCFrxfX.mjs.map +0 -1
  39. package/dist/providers-DobNWMUn.mjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as gitHubPullRequestSourceLayer, $t as MAX_CONCERNS, A as fileReviewerInstructions, An as normalizeRepoRelativePath, At as StoredReviewConcern, B as ReviewUnitPlan, Bt as unavailableReviewStateAuthenticatorLayer, C as defaultFanOutPolicy, Cn as assessReviewCoverage, Ct as ReviewScopeMode, D as fanOutReviewInstructions, Dn as PullRequestSource, Dt as ReviewStateAuthenticator, E as fanOutHandlersLayerFor, En as PullRequestMetadata, Et as ReviewStateAuthenticationFailure, F as MAX_MERGED_FINDINGS, Fn as annotatePatch, Ft as fromStoredFinding, G as GitHubApiFailure, Gt as CodeReview, H as planReviewUnits, Ht as webCryptoReviewStateAuthenticatorLayer, I as MAX_REVIEW_UNITS, In as commentableLines, It as selectReviewRange, J as PriorReviews, Jt as FileSlice, K as GitHubReviewTarget, Kt as FileDiffQuery, L as MAX_UNIT_FILES, Ln as parsePatch, Lt as selectedPullRequestSourceLayer, M as makeFanOutReviewSuite, Mn as ChangedFileStatus, Mt as buildProfileMission, N as makeFileReviewerInstructions, Nn as ChangedPath, Nt as computeProfileFingerprint, O as fileReviewDelegation, On as PullRequestSourceFailure, Ot as ReviewStateMarker, P as mapFileReviewChildFailure, Pn as PatchLine, Pt as fromStoredConcern, Q as gitHubPriorReviewsLayer, Qt as ListChangedFilesQuery, R as ReviewUnit, Rt as toStoredConcern, S as MAX_FILE_REVIEW_TOOL_CALLS, Sn as ReviewShape, St as ReviewMode, T as fanOutHandlersLayer, Tn as MAX_FILE_CHARS, Tt as ReviewState, U as rankAndDedupeFindings, Ut as ChangedFileSummary, V as UNIT_CHANGED_LINE_BUDGET, Vt as validateReviewState, W as DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, Wt as ChangedFilesView, X as ReviewPublisher, Xt as FindingSeverity, Y as PublishedReview, Yt as FileSliceQuery, Z as fingerprintUnchanged, Zt as ListChangedFiles, _ as FileReviewer, _n as readFileHandler, _t as planPublication, a as FanOutReviewSuite, an as ReviewFinding, at as ReviewRetirementDecision, b as MAX_CHILD_CONCERNS, bn as FailedReviewUnit, bt as ReviewExecutionContext, c as FanOutSuiteOptions, cn as ReviewMission, ct as ReviewRetirementInput, d as FileReviewReport, dn as ReviewVerdict, dt as hasReviewMetadataMarker, en as MAX_FINDINGS, et as gitHubReviewPublisherLayer, f as FileReviewRequest, fn as clampMaxFindings, ft as retireStaleReviews, g as FileReviewUnitResult, gn as readFileDiffHandler, gt as anchorViolation, h as FileReviewUnitFailed, hn as makeReviewInstructions, ht as ReviewPublicationPlan, i as FanOutInstructionOptions, in as ReviewConcern, it as RetirableReviewComment, j as makeFanOutReviewInstructions, jn as ChangedFile, jt as StoredReviewFinding, k as fileReviewPolicy, kn as ReviewInputViolation, kt as ReviewStateMarkerTooLarge, l as FileReviewBrief, ln as ReviewToolkit, lt as ReviewRetirementReport, m as FileReviewToolkitLayer, mn as listChangedFilesHandler, mt as ReviewEvent, n as FanOutCoordinatorToolkit, nn as ReadFile, nt as parseGitHubSubmittedAt, o as FanOutReviewToolkit, on as ReviewGuidance, ot as ReviewRetirementFailure, p as FileReviewToolkit, pn as defaultReviewPolicy, pt as ReviewCommentDraft, q as PriorReviewLookupFailure, qt as FileDiffView, r as FanOutCoordinatorToolkitLayer, rn as ReadFileDiff, rt as RetirableReview, s as FanOutReviewer, sn as ReviewInstructionOptions, st as ReviewRetirementHost, t as DelegateFileReview, tn as PullRequestReviewer, tt as gitHubReviewRetirementHostLayer, u as FileReviewDelegationFailure, un as ReviewToolkitLayer, ut as decideReviewRetirement, v as ListReviewUnits, vn as resolveGuidance, vt as GitCommitSha, w as defaultFileReviewerPolicy, wn as MAX_CHANGED_FILES, wt as ReviewSelection, x as MAX_CHILD_FINDINGS, xn as ReviewCoverage, xt as ReviewHeadComparison, y as ListReviewUnitsQuery, yn as reviewInstructions, yt as MAX_REVIEW_STATE_MARKER_CHARS, z as ReviewUnitId, zt as toStoredFinding } from "./fan-out-TrA9EUCr.mjs";
2
- import { Config, Effect, FileSystem, Layer, Option, Schema } from "effect";
1
+ import { $ as gitHubPullRequestSourceLayer, $t as ChangedFilesView, A as fileReviewerInstructions, An as readFileDiffHandler, At as ReviewStateAuthenticationFailure, B as ReviewUnitPlan, Bn as normalizeRepoRelativePath, Bt as selectReviewRange, C as defaultFanOutPolicy, Cn as ReviewToolkitLayer, Ct as MAX_REVIEW_STATE_MARKER_CHARS, D as fanOutReviewInstructions, Dn as defaultReviewPolicy, Dt as ReviewScopeMode, E as fanOutHandlersLayerFor, En as clampMaxFindings, Et as ReviewMode, F as MAX_MERGED_FINDINGS, Fn as MAX_FILE_CHARS, Ft as StoredReviewFinding, G as GitHubApiFailure, Gn as PatchLine, Gt as validateReviewState, H as planReviewUnits, Hn as ChangedFileStatus, Ht as toStoredConcern, I as MAX_REVIEW_UNITS, In as PullRequestMetadata, It as buildProfileMission, J as PriorReviews, Jn as hasReviewableContent, Jt as ReviewCoverage, K as GitHubReviewTarget, Kn as annotatePatch, Kt as webCryptoReviewStateAuthenticatorLayer, L as MAX_UNIT_FILES, Ln as PullRequestSource, Lt as computeProfileFingerprint, M as makeFanOutReviewSuite, Mn as resolveGuidance, Mt as ReviewStateMarker, N as makeFileReviewerInstructions, Nn as reviewInstructions, Nt as ReviewStateMarkerTooLarge, O as fileReviewDelegation, On as listChangedFilesHandler, Ot as ReviewSelection, P as mapFileReviewChildFailure, Pn as MAX_CHANGED_FILES, Pt as StoredReviewConcern, Q as gitHubPriorReviewsLayer, Qt as ChangedFileSummary, R as ReviewUnit, Rn as PullRequestSourceFailure, Rt as fromStoredConcern, S as MAX_FILE_REVIEW_TOOL_CALLS, Sn as ReviewToolkit, St as GitCommitSha, T as fanOutHandlersLayer, Tn as WalkthroughEntry, Tt as ReviewHeadComparison, U as rankAndDedupeFindings, Un as ChangedPath, Ut as toStoredFinding, V as UNIT_CHANGED_LINE_BUDGET, Vn as ChangedFile, Vt as selectedPullRequestSourceLayer, W as DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, Wn as MAX_REVIEW_CONTENT_CHARS, Wt as unavailableReviewStateAuthenticatorLayer, X as ReviewPublisher, Xn as parsePatch, Xt as assessReviewCoverage, Y as PublishedReview, Yn as isReviewableFile, Yt as ReviewShape, Z as fingerprintUnchanged, Zn as renderReviewContent, Zt as collectUnitFileSummaries, _ as FileReviewer, _n as ReviewConcern, _t as anchorViolation, a as FanOutReviewSuite, an as FindingCategory, at as ReviewRetirementDecision, b as MAX_CHILD_CONCERNS, bn as ReviewInstructionOptions, bt as planWalkthrough, c as FanOutSuiteOptions, cn as ListChangedFilesQuery, ct as ReviewRetirementInput, d as FileReviewReport, dn as MAX_WALKTHROUGH_ENTRIES, dt as hasReviewMetadataMarker, en as CodeReview, et as gitHubReviewPublisherLayer, f as FileReviewRequest, fn as MAX_WALKTHROUGH_SUMMARY_CHARS, ft as retireStaleReviews, g as FileReviewUnitResult, gn as ReadFileDiff, gt as ReviewPublicationPlan, h as FileReviewUnitFailed, hn as ReadFile, ht as ReviewEvent, i as FanOutInstructionOptions, in as FileSliceQuery, it as RetirableReviewComment, j as makeFanOutReviewInstructions, jn as readFileHandler, jt as ReviewStateAuthenticator, k as fileReviewPolicy, kn as makeReviewInstructions, kt as ReviewState, l as FileReviewBrief, ln as MAX_CONCERNS, lt as ReviewRetirementReport, m as FileReviewToolkitLayer, mn as REVIEW_TOOL_RESULT_MAX_BYTES, mt as ReviewCommentDraft, n as FanOutCoordinatorToolkit, nn as FileDiffView, nt as parseGitHubSubmittedAt, o as FanOutReviewToolkit, on as FindingSeverity, ot as ReviewRetirementFailure, p as FileReviewToolkit, pn as PullRequestReviewer, pt as AGENT_PROMPT_PREAMBLE, q as PriorReviewLookupFailure, qn as commentableLines, qt as FailedReviewUnit, r as FanOutCoordinatorToolkitLayer, rn as FileSlice, rt as RetirableReview, s as FanOutReviewer, sn as ListChangedFiles, st as ReviewRetirementHost, t as DelegateFileReview, tn as FileDiffQuery, tt as gitHubReviewRetirementHostLayer, u as FileReviewDelegationFailure, un as MAX_FINDINGS, ut as decideReviewRetirement, v as ListReviewUnits, vn as ReviewFinding, vt as estimateReviewEffort, w as defaultFileReviewerPolicy, wn as ReviewVerdict, wt as ReviewExecutionContext, x as MAX_CHILD_FINDINGS, xn as ReviewMission, xt as renderAgentPrompt, y as ListReviewUnitsQuery, yn as ReviewGuidance, yt as planPublication, z as ReviewUnitId, zn as ReviewInputViolation, zt as fromStoredFinding } from "./fan-out-DBHPcJwC.mjs";
2
+ import { Config, Context, Effect, FileSystem, Layer, LogLevel, Logger, Option, Schema } from "effect";
3
3
  import { AgentPolicyInput, IdGenerator, RuntimeBinding, UsageBudgetLimits, UsageTotals } from "effect-agent";
4
4
  import { LanguageModel, Model, Tool, Toolkit } from "effect/unstable/ai";
5
5
  import { HttpClient } from "effect/unstable/http";
@@ -572,6 +572,70 @@ declare const extractFingerprint: (body: string) => string | undefined;
572
572
  */
573
573
  declare const computeChangesetFingerprint: (files: ReadonlyArray<ChangedFile>, signature: string) => Effect.Effect<string>;
574
574
  //#endregion
575
+ //#region src/internal/progress.d.ts
576
+ /** Every progress comment starts its invisible marker with this prefix. */
577
+ declare const PROGRESS_COMMENT_MARKER_PREFIX = "<!-- effect-agent-pr-review progress";
578
+ /** One run's generation fence: who wrote a progress comment, and when. */
579
+ interface ProgressClaim {
580
+ /** Random per-run token; matching it means the comment is this run's own. */
581
+ readonly runToken: string;
582
+ /** Run start in epoch millis; newer runs may overwrite older claims. */
583
+ readonly startedMillis: number;
584
+ }
585
+ /** Render one run's claim marker (token sanitized into the safe alphabet). */
586
+ declare const renderProgressClaimMarker: (claim: ProgressClaim) => string;
587
+ /** Extract the last claim marker in one comment body, if any. */
588
+ declare const parseProgressClaim: (body: string) => ProgressClaim | undefined;
589
+ /** What a starting run can honestly say before any model turn has executed. */
590
+ interface ReviewProgressBegin {
591
+ readonly headSha?: string | undefined;
592
+ readonly reviewMode?: ReviewScopeMode | undefined;
593
+ readonly reviewReason?: string | undefined;
594
+ readonly filesInScope?: number | undefined;
595
+ readonly modelLabel?: string | undefined;
596
+ readonly runUrl?: string | undefined;
597
+ }
598
+ /** How the run ended: a settled (posted) review, or a failure that posted nothing. */
599
+ type ReviewProgressSettle = {
600
+ readonly outcome: "reviewed";
601
+ readonly conclusion: "success" | "blocking" | "incomplete";
602
+ readonly verdict: string;
603
+ readonly inlineComments: number;
604
+ readonly reviewUrl?: string | undefined;
605
+ readonly runUrl?: string | undefined;
606
+ readonly modelLabel?: string | undefined;
607
+ } | {
608
+ readonly outcome: "failed";
609
+ readonly runUrl?: string | undefined;
610
+ readonly modelLabel?: string | undefined;
611
+ };
612
+ /** The "a run just started" body; the outcome update replaces it in place. */
613
+ declare const renderProgressBeginBody: (info: ReviewProgressBegin, claim: ProgressClaim) => string;
614
+ /** The settled-outcome body written over the in-progress comment. */
615
+ declare const renderProgressSettleBody: (info: ReviewProgressSettle, claim: ProgressClaim) => string;
616
+ declare const ReviewProgressReporter_base: Context.ServiceClass<ReviewProgressReporter, "@effect-agent/pr-review/ReviewProgressReporter", {
617
+ readonly begin: (info: ReviewProgressBegin) => Effect.Effect<void>;
618
+ readonly settle: (info: ReviewProgressSettle) => Effect.Effect<void>;
619
+ }>;
620
+ /**
621
+ * Maintains the sticky progress comment. Both operations are infallible by
622
+ * contract: implementations own their fault handling, because progress
623
+ * reporting may never fail or delay the review run it narrates.
624
+ */
625
+ declare class ReviewProgressReporter extends ReviewProgressReporter_base {}
626
+ /** Reports nothing; the substitute for hosts without a progress surface. */
627
+ declare const noopReviewProgressReporterLayer: Layer.Layer<ReviewProgressReporter>;
628
+ /**
629
+ * GitHub-backed progress reporter over the issue-comments API. The sticky
630
+ * comment is found by its invisible marker AND the configured posting-bot
631
+ * identity — a marker pasted into someone else's comment is never edited.
632
+ * Writes are generation-fenced per the module contract above, and every
633
+ * fault (lookup, create, update, delete, bound exhaustion) degrades to a
634
+ * logged warning: a pull request without a progress comment is a cosmetic
635
+ * loss, a failed review run over a cosmetic fault would not be.
636
+ */
637
+ declare const gitHubReviewProgressLayer: Layer.Layer<ReviewProgressReporter, never, GitHubReviewTarget | HttpClient.HttpClient>;
638
+ //#endregion
575
639
  //#region src/internal/github-env.d.ts
576
640
  declare const ReviewTargetUnresolved_base: Schema.Class<ReviewTargetUnresolved, Schema.TaggedStruct<"ReviewTargetUnresolved", {
577
641
  readonly reason: Schema.String;
@@ -622,7 +686,7 @@ declare const resolveReviewTarget: (options: {
622
686
  * configuration. The returned Layer is the complete GitHub side of a review
623
687
  * run.
624
688
  */
625
- declare const gitHubReviewLayers: (target: ResolvedReviewTarget) => Layer.Layer<PullRequestSource | ReviewPublisher | PriorReviews | ReviewRetirementHost, Config.ConfigError, HttpClient.HttpClient>;
689
+ declare const gitHubReviewLayers: (target: ResolvedReviewTarget) => Layer.Layer<PullRequestSource | ReviewPublisher | PriorReviews | ReviewRetirementHost | ReviewProgressReporter, Config.ConfigError, HttpClient.HttpClient>;
626
690
  //#endregion
627
691
  //#region src/internal/ignore.d.ts
628
692
  /** Compile ignore globs into one predicate over repository-relative paths. */
@@ -636,6 +700,28 @@ declare const compileIgnoreGlobs: (patterns: ReadonlyArray<string>) => ((path: s
636
700
  */
637
701
  declare const ignoringPullRequestSourceLayer: (patterns: ReadonlyArray<string>) => Layer.Layer<PullRequestSource, never, PullRequestSource>;
638
702
  //#endregion
703
+ //#region src/internal/logging.d.ts
704
+ /** Everything one compact line is rendered from; pure and directly testable. */
705
+ interface CompactLogRecord {
706
+ readonly date: Date;
707
+ readonly logLevel: LogLevel.LogLevel;
708
+ readonly message: unknown;
709
+ readonly annotations: Readonly<Record<string, unknown>>;
710
+ /** Pretty-rendered Cause, present only when the record carries one. */
711
+ readonly cause?: string | undefined;
712
+ }
713
+ /** Render one log record as a single compact console line. */
714
+ declare const formatCompactLogLine: (record: CompactLogRecord) => string;
715
+ /** The compact Logger; annotations come from the emitting fiber. */
716
+ declare const compactReviewLogger: Logger.Logger<unknown, string>;
717
+ /**
718
+ * Install the compact console logger and the minimum level for one host run.
719
+ * PR_REVIEW_LOG_LEVEL widens visibility (e.g. "Debug" shows the engine's
720
+ * per-turn and per-handler telemetry); an unknown value fails loudly like
721
+ * every other configuration fault.
722
+ */
723
+ declare const compactReviewLoggingLayer: Layer.Layer<never, Config.ConfigError>;
724
+ //#endregion
639
725
  //#region src/internal/profiles.d.ts
640
726
  declare const PullRequestReviewerProfile_base: Schema.Class<PullRequestReviewerProfile, Schema.Struct<{
641
727
  /** Ephemeral runtime: one bounded AgentRuntime.run per invocation. */
@@ -714,5 +800,5 @@ declare const openAiClientLayer: Layer.Layer<OpenAiClient.OpenAiClient, Config.C
714
800
  /** The Anthropic client Layer, credential from `ANTHROPIC_API_KEY`. */
715
801
  declare const anthropicClientLayer: Layer.Layer<AnthropicClient.AnthropicClient, Config.ConfigError, never>;
716
802
  //#endregion
717
- export { ChangedFile, ChangedFileStatus, ChangedFileSummary, ChangedFilesView, ChangedPath, CodeReview, DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, DEFAULT_MODEL, DEFAULT_PROVIDER, DelegateFileReview, EFFORT_ALIASES, EffortAliasName, EffortPosition, ExecuteReviewOptions, FINGERPRINT_MARKER_LENGTH, FailedReviewUnit, FanOutCoordinatorToolkit, FanOutCoordinatorToolkitLayer, FanOutInstructionOptions, FanOutReviewSuite, FanOutReviewToolkit, FanOutReviewer, FanOutReviewerProfile, FanOutSuiteOptions, FileDiffQuery, FileDiffView, FileReviewBrief, FileReviewDelegationFailure, FileReviewReport, FileReviewRequest, FileReviewToolkit, FileReviewToolkitLayer, FileReviewUnitFailed, FileReviewUnitResult, FileReviewer, FileSlice, FileSliceQuery, FindingSeverity, GitCommitSha, GitHubApiFailure, GitHubEventWire, GitHubReviewTarget, InvalidEffortInput, LIVE_GATE_ENV, ListChangedFiles, ListChangedFilesQuery, ListReviewUnits, ListReviewUnitsQuery, 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_REVIEW_STATE_MARKER_CHARS, MAX_REVIEW_UNITS, MAX_UNIT_FILES, PROVIDER_CREDENTIAL_ENV, PROVIDER_EFFORT_RUNGS, PatchLine, PrReview, PrReviewFanOutOptions, PrReviewOptions, PrReviewSharedOptions, PriorReviewLookupFailure, PriorReviews, PublishedReview, PullRequestMetadata, PullRequestReviewer, PullRequestReviewerProfile, PullRequestSource, PullRequestSourceFailure, ReadFile, ReadFileDiff, ResolvedReviewTarget, RetirableReview, RetirableReviewComment, ReviewCommentDraft, ReviewConcern, ReviewCoverage, ReviewEvent, ReviewExecutionContext, ReviewFinding, ReviewGuidance, ReviewHeadComparison, ReviewInputViolation, ReviewInstructionOptions, ReviewMission, ReviewMode, ReviewProvider, ReviewPublicationPlan, ReviewPublisher, ReviewRetirementDecision, ReviewRetirementFailure, ReviewRetirementHost, ReviewRetirementInput, ReviewRetirementReport, ReviewRunOutcome, ReviewScopeMode, ReviewSelection, ReviewShape, ReviewState, ReviewStateAuthenticationFailure, ReviewStateAuthenticator, ReviewStateMarker, ReviewStateMarkerTooLarge, ReviewTargetUnresolved, ReviewToolkit, ReviewToolkitLayer, ReviewUnit, ReviewUnitId, ReviewUnitPlan, ReviewVerdict, RunReviewOptions, StoredReviewConcern, StoredReviewFinding, UNIT_CHANGED_LINE_BUDGET, anchorViolation, annotatePatch, anthropicClientLayer, assessReviewCoverage, buildProfileMission, buildReviewMission, clampMaxFindings, commentableLines, compileIgnoreGlobs, computeChangesetFingerprint, computeProfileFingerprint, decideReviewRetirement, defaultFanOutPolicy, defaultFileReviewerPolicy, defaultReviewPolicy, describeReviewModel, enforceFindingsBound, executeReview, extractFingerprint, fanOutHandlersLayer, fanOutHandlersLayerFor, fanOutReviewBudgetLimits, fanOutReviewInstructions, fanOutReviewerProfile, fileReviewDelegation, fileReviewPolicy, fileReviewerInstructions, fingerprintUnchanged, fromStoredConcern, fromStoredFinding, gitHubPriorReviewsLayer, gitHubPullRequestSourceLayer, gitHubReviewLayers, gitHubReviewPublisherLayer, gitHubReviewRetirementHostLayer, hasReviewMetadataMarker, ignoringPullRequestSourceLayer, isEffortPosition, listChangedFilesHandler, liveProfileEnabled, makeAnthropicReviewModel, makeFanOutReviewInstructions, makeFanOutReviewSuite, makeFileReviewerInstructions, makeOpenAiReviewModel, makeReviewInstructions, mapFileReviewChildFailure, normalizeRepoRelativePath, openAiClientLayer, parseEffortPosition, parseGitHubSubmittedAt, parsePatch, planPublication, planReviewUnits, pullRequestReviewerProfile, rankAndDedupeFindings, readFileDiffHandler, readFileHandler, readGitHubEvent, renderFingerprintMarker, resolveEffortRung, resolveGuidance, resolveReviewTarget, retireStaleReviews, reviewBudgetLimits, reviewInstructions, selectReviewRange, selectedPullRequestSourceLayer, toStoredConcern, toStoredFinding, unavailableReviewStateAuthenticatorLayer, validateReviewState, webCryptoReviewStateAuthenticatorLayer };
803
+ export { AGENT_PROMPT_PREAMBLE, ChangedFile, ChangedFileStatus, ChangedFileSummary, ChangedFilesView, ChangedPath, CodeReview, CompactLogRecord, DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, DEFAULT_MODEL, DEFAULT_PROVIDER, DelegateFileReview, EFFORT_ALIASES, EffortAliasName, EffortPosition, ExecuteReviewOptions, FINGERPRINT_MARKER_LENGTH, FailedReviewUnit, FanOutCoordinatorToolkit, FanOutCoordinatorToolkitLayer, FanOutInstructionOptions, FanOutReviewSuite, FanOutReviewToolkit, FanOutReviewer, FanOutReviewerProfile, FanOutSuiteOptions, FileDiffQuery, FileDiffView, FileReviewBrief, FileReviewDelegationFailure, FileReviewReport, FileReviewRequest, FileReviewToolkit, FileReviewToolkitLayer, FileReviewUnitFailed, FileReviewUnitResult, FileReviewer, FileSlice, FileSliceQuery, FindingCategory, FindingSeverity, GitCommitSha, GitHubApiFailure, GitHubEventWire, GitHubReviewTarget, InvalidEffortInput, LIVE_GATE_ENV, ListChangedFiles, ListChangedFilesQuery, ListReviewUnits, ListReviewUnitsQuery, 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_REVIEW_CONTENT_CHARS, MAX_REVIEW_STATE_MARKER_CHARS, MAX_REVIEW_UNITS, MAX_UNIT_FILES, MAX_WALKTHROUGH_ENTRIES, MAX_WALKTHROUGH_SUMMARY_CHARS, PROGRESS_COMMENT_MARKER_PREFIX, PROVIDER_CREDENTIAL_ENV, PROVIDER_EFFORT_RUNGS, PatchLine, PrReview, PrReviewFanOutOptions, PrReviewOptions, PrReviewSharedOptions, PriorReviewLookupFailure, PriorReviews, ProgressClaim, PublishedReview, PullRequestMetadata, PullRequestReviewer, PullRequestReviewerProfile, PullRequestSource, PullRequestSourceFailure, REVIEW_TOOL_RESULT_MAX_BYTES, ReadFile, ReadFileDiff, ResolvedReviewTarget, RetirableReview, RetirableReviewComment, ReviewCommentDraft, ReviewConcern, ReviewCoverage, ReviewEvent, ReviewExecutionContext, ReviewFinding, ReviewGuidance, ReviewHeadComparison, ReviewInputViolation, ReviewInstructionOptions, ReviewMission, ReviewMode, ReviewProgressBegin, ReviewProgressReporter, ReviewProgressSettle, ReviewProvider, ReviewPublicationPlan, ReviewPublisher, ReviewRetirementDecision, ReviewRetirementFailure, ReviewRetirementHost, ReviewRetirementInput, ReviewRetirementReport, ReviewRunOutcome, ReviewScopeMode, ReviewSelection, ReviewShape, ReviewState, ReviewStateAuthenticationFailure, ReviewStateAuthenticator, ReviewStateMarker, ReviewStateMarkerTooLarge, ReviewTargetUnresolved, ReviewToolkit, ReviewToolkitLayer, ReviewUnit, ReviewUnitId, ReviewUnitPlan, ReviewVerdict, RunReviewOptions, StoredReviewConcern, StoredReviewFinding, UNIT_CHANGED_LINE_BUDGET, WalkthroughEntry, anchorViolation, annotatePatch, anthropicClientLayer, assessReviewCoverage, buildProfileMission, buildReviewMission, clampMaxFindings, collectUnitFileSummaries, commentableLines, compactReviewLogger, compactReviewLoggingLayer, compileIgnoreGlobs, computeChangesetFingerprint, computeProfileFingerprint, decideReviewRetirement, defaultFanOutPolicy, defaultFileReviewerPolicy, defaultReviewPolicy, describeReviewModel, enforceFindingsBound, estimateReviewEffort, executeReview, extractFingerprint, fanOutHandlersLayer, fanOutHandlersLayerFor, fanOutReviewBudgetLimits, fanOutReviewInstructions, fanOutReviewerProfile, fileReviewDelegation, fileReviewPolicy, fileReviewerInstructions, fingerprintUnchanged, formatCompactLogLine, fromStoredConcern, fromStoredFinding, gitHubPriorReviewsLayer, gitHubPullRequestSourceLayer, gitHubReviewLayers, gitHubReviewProgressLayer, gitHubReviewPublisherLayer, gitHubReviewRetirementHostLayer, hasReviewMetadataMarker, hasReviewableContent, ignoringPullRequestSourceLayer, isEffortPosition, isReviewableFile, listChangedFilesHandler, liveProfileEnabled, makeAnthropicReviewModel, makeFanOutReviewInstructions, makeFanOutReviewSuite, makeFileReviewerInstructions, makeOpenAiReviewModel, makeReviewInstructions, mapFileReviewChildFailure, noopReviewProgressReporterLayer, normalizeRepoRelativePath, openAiClientLayer, parseEffortPosition, parseGitHubSubmittedAt, parsePatch, parseProgressClaim, planPublication, planReviewUnits, planWalkthrough, pullRequestReviewerProfile, rankAndDedupeFindings, readFileDiffHandler, readFileHandler, readGitHubEvent, renderAgentPrompt, renderFingerprintMarker, renderProgressBeginBody, renderProgressClaimMarker, renderProgressSettleBody, renderReviewContent, resolveEffortRung, resolveGuidance, resolveReviewTarget, retireStaleReviews, reviewBudgetLimits, reviewInstructions, selectReviewRange, selectedPullRequestSourceLayer, toStoredConcern, toStoredFinding, unavailableReviewStateAuthenticatorLayer, validateReviewState, webCryptoReviewStateAuthenticatorLayer };
718
804
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
- import { $ as FanOutReviewToolkit, $t as ReviewMission, A as ReviewStateAuthenticator, At as ReviewUnit, B as selectedPullRequestSourceLayer, Bt as FileDiffView, C as MAX_REVIEW_STATE_MARKER_CHARS, Cn as parsePatch, Ct as makeFanOutReviewInstructions, D as ReviewScopeMode, Dt as MAX_MERGED_FINDINGS, E as ReviewMode, Et as mapFileReviewChildFailure, F as buildProfileMission, Ft as rankAndDedupeFindings, G as webCryptoReviewStateAuthenticatorLayer, Gt as ListChangedFilesQuery, H as toStoredFinding, Ht as FileSliceQuery, I as computeProfileFingerprint, It as ChangedFileSummary, J as extractFingerprint, Jt as PullRequestReviewer, K as FINGERPRINT_MARKER_LENGTH, Kt as MAX_CONCERNS, L as fromStoredConcern, Lt as ChangedFilesView, M as ReviewStateMarkerTooLarge, Mt as ReviewUnitPlan, N as StoredReviewConcern, Nt as UNIT_CHANGED_LINE_BUDGET, O as ReviewState, Ot as MAX_REVIEW_UNITS, P as StoredReviewFinding, Pt as planReviewUnits, Q as FanOutCoordinatorToolkitLayer, Qt as ReviewFinding, R as fromStoredFinding, Rt as CodeReview, S as GitCommitSha, Sn as commentableLines, St as fileReviewerInstructions, T as ReviewHeadComparison, Tt as makeFileReviewerInstructions, U as unavailableReviewStateAuthenticatorLayer, Ut as FindingSeverity, V as toStoredConcern, Vt as FileSlice, W as validateReviewState, Wt as ListChangedFiles, X as DelegateFileReview, Xt as ReadFileDiff, Y as renderFingerprintMarker, Yt as ReadFile, Z as FanOutCoordinatorToolkit, Zt as ReviewConcern, _ as ReviewRetirementHost, _n as normalizeRepoRelativePath, _t as fanOutHandlersLayer, a as PriorReviews, an as listChangedFilesHandler, at as FileReviewToolkit, b as hasReviewMetadataMarker, bn as ChangedPath, bt as fileReviewDelegation, c as fingerprintUnchanged, cn as readFileHandler, ct as FileReviewUnitResult, d as gitHubReviewPublisherLayer, dn as MAX_CHANGED_FILES, dt as ListReviewUnitsQuery, en as ReviewToolkit, et as FanOutReviewer, f as gitHubReviewRetirementHostLayer, fn as MAX_FILE_CHARS, ft as MAX_CHILD_CONCERNS, g as ReviewRetirementFailure, gn as ReviewInputViolation, gt as defaultFileReviewerPolicy, h as RetirableReviewComment, hn as PullRequestSourceFailure, ht as defaultFanOutPolicy, i as PriorReviewLookupFailure, in as defaultReviewPolicy, it as FileReviewRequest, j as ReviewStateMarker, jt as ReviewUnitId, k as ReviewStateAuthenticationFailure, kt as MAX_UNIT_FILES, l as gitHubPriorReviewsLayer, ln as resolveGuidance, lt as FileReviewer, m as RetirableReview, mn as PullRequestSource, mt as MAX_FILE_REVIEW_TOOL_CALLS, n as GitHubApiFailure, nn as ReviewVerdict, nt as FileReviewDelegationFailure, o as PublishedReview, on as makeReviewInstructions, ot as FileReviewToolkitLayer, p as parseGitHubSubmittedAt, pn as PullRequestMetadata, pt as MAX_CHILD_FINDINGS, q as computeChangesetFingerprint, qt as MAX_FINDINGS, r as GitHubReviewTarget, rn as clampMaxFindings, rt as FileReviewReport, s as ReviewPublisher, sn as readFileDiffHandler, st as FileReviewUnitFailed, t as DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, tn as ReviewToolkitLayer, tt as FileReviewBrief, u as gitHubPullRequestSourceLayer, un as reviewInstructions, ut as ListReviewUnits, v as ReviewRetirementReport, vn as ChangedFile, vt as fanOutHandlersLayerFor, w as ReviewExecutionContext, wt as makeFanOutReviewSuite, x as retireStaleReviews, xn as annotatePatch, xt as fileReviewPolicy, y as decideReviewRetirement, yn as ChangedFileStatus, yt as fanOutReviewInstructions, z as selectReviewRange, zt as FileDiffQuery } from "./github-5TCFrxfX.mjs";
2
- import { A as InvalidEffortInput, C as ReviewEvent, D as compileIgnoreGlobs, E as planPublication, F as ReviewCoverage, I as ReviewShape, L as assessReviewCoverage, M as parseEffortPosition, N as resolveEffortRung, O as ignoringPullRequestSourceLayer, P as FailedReviewUnit, S as ReviewCommentDraft, T as anchorViolation, _ as buildReviewMission, a as anthropicClientLayer, b as fanOutReviewBudgetLimits, c as makeOpenAiReviewModel, d as ReviewTargetUnresolved, f as gitHubReviewLayers, g as ReviewRunOutcome, h as PrReview, i as PROVIDER_EFFORT_RUNGS, j as isEffortPosition, k as EFFORT_ALIASES, l as openAiClientLayer, m as resolveReviewTarget, n as DEFAULT_PROVIDER, o as describeReviewModel, p as readGitHubEvent, r as PROVIDER_CREDENTIAL_ENV, s as makeAnthropicReviewModel, t as DEFAULT_MODEL, u as GitHubEventWire, v as enforceFindingsBound, w as ReviewPublicationPlan, x as reviewBudgetLimits, y as executeReview } from "./providers-DobNWMUn.mjs";
1
+ import { $ as FanOutReviewToolkit, $t as ReadFile, A as ReviewStateAuthenticator, An as isReviewableFile, At as ReviewUnit, B as selectedPullRequestSourceLayer, Bt as FileDiffView, C as MAX_REVIEW_STATE_MARKER_CHARS, Cn as ChangedFile, Ct as makeFanOutReviewInstructions, D as ReviewScopeMode, Dn as annotatePatch, Dt as MAX_MERGED_FINDINGS, E as ReviewMode, En as MAX_REVIEW_CONTENT_CHARS, Et as mapFileReviewChildFailure, F as buildProfileMission, Ft as rankAndDedupeFindings, G as webCryptoReviewStateAuthenticatorLayer, Gt as ListChangedFiles, H as toStoredFinding, Ht as FileSliceQuery, I as computeProfileFingerprint, It as ChangedFileSummary, J as extractFingerprint, Jt as MAX_FINDINGS, K as FINGERPRINT_MARKER_LENGTH, Kt as ListChangedFilesQuery, L as fromStoredConcern, Lt as ChangedFilesView, M as ReviewStateMarkerTooLarge, Mn as renderReviewContent, Mt as ReviewUnitPlan, N as StoredReviewConcern, Nt as UNIT_CHANGED_LINE_BUDGET, O as ReviewState, On as commentableLines, Ot as MAX_REVIEW_UNITS, P as StoredReviewFinding, Pt as planReviewUnits, Q as FanOutCoordinatorToolkitLayer, Qt as REVIEW_TOOL_RESULT_MAX_BYTES, R as fromStoredFinding, Rt as CodeReview, S as GitCommitSha, Sn as normalizeRepoRelativePath, St as fileReviewerInstructions, T as ReviewHeadComparison, Tn as ChangedPath, Tt as makeFileReviewerInstructions, U as unavailableReviewStateAuthenticatorLayer, Ut as FindingCategory, V as toStoredConcern, Vt as FileSlice, W as validateReviewState, Wt as FindingSeverity, X as DelegateFileReview, Xt as MAX_WALKTHROUGH_SUMMARY_CHARS, Y as renderFingerprintMarker, Yt as MAX_WALKTHROUGH_ENTRIES, Z as FanOutCoordinatorToolkit, Zt as PullRequestReviewer, _ as ReviewRetirementHost, _n as MAX_FILE_CHARS, _t as fanOutHandlersLayer, a as PriorReviews, an as ReviewToolkitLayer, at as FileReviewToolkit, b as hasReviewMetadataMarker, bn as PullRequestSourceFailure, bt as fileReviewDelegation, c as fingerprintUnchanged, cn as clampMaxFindings, ct as FileReviewUnitResult, d as gitHubReviewPublisherLayer, dn as makeReviewInstructions, dt as ListReviewUnitsQuery, en as ReadFileDiff, et as FanOutReviewer, f as gitHubReviewRetirementHostLayer, fn as readFileDiffHandler, ft as MAX_CHILD_CONCERNS, g as ReviewRetirementFailure, gn as MAX_CHANGED_FILES, gt as defaultFileReviewerPolicy, h as RetirableReviewComment, hn as reviewInstructions, ht as defaultFanOutPolicy, i as PriorReviewLookupFailure, in as ReviewToolkit, it as FileReviewRequest, j as ReviewStateMarker, jn as parsePatch, jt as ReviewUnitId, k as ReviewStateAuthenticationFailure, kn as hasReviewableContent, kt as MAX_UNIT_FILES, l as gitHubPriorReviewsLayer, ln as defaultReviewPolicy, lt as FileReviewer, m as RetirableReview, mn as resolveGuidance, mt as MAX_FILE_REVIEW_TOOL_CALLS, n as GitHubApiFailure, nn as ReviewFinding, nt as FileReviewDelegationFailure, o as PublishedReview, on as ReviewVerdict, ot as FileReviewToolkitLayer, p as parseGitHubSubmittedAt, pn as readFileHandler, pt as MAX_CHILD_FINDINGS, q as computeChangesetFingerprint, qt as MAX_CONCERNS, r as GitHubReviewTarget, rn as ReviewMission, rt as FileReviewReport, s as ReviewPublisher, sn as WalkthroughEntry, st as FileReviewUnitFailed, t as DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, tn as ReviewConcern, tt as FileReviewBrief, u as gitHubPullRequestSourceLayer, un as listChangedFilesHandler, ut as ListReviewUnits, v as ReviewRetirementReport, vn as PullRequestMetadata, vt as fanOutHandlersLayerFor, w as ReviewExecutionContext, wn as ChangedFileStatus, wt as makeFanOutReviewSuite, x as retireStaleReviews, xn as ReviewInputViolation, xt as fileReviewPolicy, y as decideReviewRetirement, yn as PullRequestSource, yt as fanOutReviewInstructions, z as selectReviewRange, zt as FileDiffQuery } from "./github-mmanX6hk.mjs";
2
+ import { A as AGENT_PROMPT_PREAMBLE, B as ignoringPullRequestSourceLayer, C as PrReview, D as executeReview, E as enforceFindingsBound, F as estimateReviewEffort, G as resolveEffortRung, H as InvalidEffortInput, I as planPublication, J as ReviewShape, K as FailedReviewUnit, L as planWalkthrough, M as ReviewEvent, N as ReviewPublicationPlan, O as fanOutReviewBudgetLimits, P as anchorViolation, R as renderAgentPrompt, S as renderProgressSettleBody, T as buildReviewMission, U as isEffortPosition, V as EFFORT_ALIASES, W as parseEffortPosition, X as collectUnitFileSummaries, Y as assessReviewCoverage, _ as gitHubReviewProgressLayer, a as anthropicClientLayer, b as renderProgressBeginBody, c as makeOpenAiReviewModel, d as ReviewTargetUnresolved, f as gitHubReviewLayers, g as ReviewProgressReporter, h as PROGRESS_COMMENT_MARKER_PREFIX, i as PROVIDER_EFFORT_RUNGS, j as ReviewCommentDraft, k as reviewBudgetLimits, l as openAiClientLayer, m as resolveReviewTarget, n as DEFAULT_PROVIDER, o as describeReviewModel, p as readGitHubEvent, q as ReviewCoverage, r as PROVIDER_CREDENTIAL_ENV, s as makeAnthropicReviewModel, t as DEFAULT_MODEL, u as GitHubEventWire, v as noopReviewProgressReporterLayer, w as ReviewRunOutcome, x as renderProgressClaimMarker, y as parseProgressClaim, z as compileIgnoreGlobs } from "./providers-DD2GdrXQ.mjs";
3
+ import { n as compactReviewLoggingLayer, r as formatCompactLogLine, t as compactReviewLogger } from "./logging-Q4j0oub-.mjs";
3
4
  import { Schema } from "effect";
4
5
  //#region src/internal/profiles.ts
5
6
  /** The flat reviewer's committed capability claim. */
@@ -61,6 +62,6 @@ const LIVE_GATE_ENV = "EFFECT_AGENT_LIVE";
61
62
  */
62
63
  const liveProfileEnabled = (env, credentialEnv) => env["EFFECT_AGENT_LIVE"] === "1" && (env[credentialEnv] ?? "") !== "";
63
64
  //#endregion
64
- export { ChangedFile, ChangedFileStatus, ChangedFileSummary, ChangedFilesView, ChangedPath, CodeReview, DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, DEFAULT_MODEL, DEFAULT_PROVIDER, DelegateFileReview, EFFORT_ALIASES, FINGERPRINT_MARKER_LENGTH, FailedReviewUnit, FanOutCoordinatorToolkit, FanOutCoordinatorToolkitLayer, FanOutReviewToolkit, FanOutReviewer, FanOutReviewerProfile, FileDiffQuery, FileDiffView, FileReviewBrief, FileReviewDelegationFailure, FileReviewReport, FileReviewRequest, FileReviewToolkit, FileReviewToolkitLayer, FileReviewUnitFailed, FileReviewUnitResult, FileReviewer, FileSlice, FileSliceQuery, FindingSeverity, GitCommitSha, GitHubApiFailure, GitHubEventWire, GitHubReviewTarget, InvalidEffortInput, LIVE_GATE_ENV, ListChangedFiles, ListChangedFilesQuery, ListReviewUnits, ListReviewUnitsQuery, 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_REVIEW_STATE_MARKER_CHARS, MAX_REVIEW_UNITS, MAX_UNIT_FILES, PROVIDER_CREDENTIAL_ENV, PROVIDER_EFFORT_RUNGS, PrReview, PriorReviewLookupFailure, PriorReviews, PublishedReview, PullRequestMetadata, PullRequestReviewer, PullRequestReviewerProfile, PullRequestSource, PullRequestSourceFailure, ReadFile, ReadFileDiff, RetirableReview, RetirableReviewComment, ReviewCommentDraft, ReviewConcern, ReviewCoverage, ReviewEvent, ReviewExecutionContext, ReviewFinding, ReviewHeadComparison, ReviewInputViolation, ReviewMission, ReviewMode, ReviewPublicationPlan, ReviewPublisher, ReviewRetirementFailure, ReviewRetirementHost, ReviewRetirementReport, ReviewRunOutcome, ReviewScopeMode, ReviewShape, ReviewState, ReviewStateAuthenticationFailure, ReviewStateAuthenticator, ReviewStateMarker, ReviewStateMarkerTooLarge, ReviewTargetUnresolved, ReviewToolkit, ReviewToolkitLayer, ReviewUnit, ReviewUnitId, ReviewUnitPlan, ReviewVerdict, StoredReviewConcern, StoredReviewFinding, UNIT_CHANGED_LINE_BUDGET, anchorViolation, annotatePatch, anthropicClientLayer, assessReviewCoverage, buildProfileMission, buildReviewMission, clampMaxFindings, commentableLines, compileIgnoreGlobs, computeChangesetFingerprint, computeProfileFingerprint, decideReviewRetirement, defaultFanOutPolicy, defaultFileReviewerPolicy, defaultReviewPolicy, describeReviewModel, enforceFindingsBound, executeReview, extractFingerprint, fanOutHandlersLayer, fanOutHandlersLayerFor, fanOutReviewBudgetLimits, fanOutReviewInstructions, fanOutReviewerProfile, fileReviewDelegation, fileReviewPolicy, fileReviewerInstructions, fingerprintUnchanged, fromStoredConcern, fromStoredFinding, gitHubPriorReviewsLayer, gitHubPullRequestSourceLayer, gitHubReviewLayers, gitHubReviewPublisherLayer, gitHubReviewRetirementHostLayer, hasReviewMetadataMarker, ignoringPullRequestSourceLayer, isEffortPosition, listChangedFilesHandler, liveProfileEnabled, makeAnthropicReviewModel, makeFanOutReviewInstructions, makeFanOutReviewSuite, makeFileReviewerInstructions, makeOpenAiReviewModel, makeReviewInstructions, mapFileReviewChildFailure, normalizeRepoRelativePath, openAiClientLayer, parseEffortPosition, parseGitHubSubmittedAt, parsePatch, planPublication, planReviewUnits, pullRequestReviewerProfile, rankAndDedupeFindings, readFileDiffHandler, readFileHandler, readGitHubEvent, renderFingerprintMarker, resolveEffortRung, resolveGuidance, resolveReviewTarget, retireStaleReviews, reviewBudgetLimits, reviewInstructions, selectReviewRange, selectedPullRequestSourceLayer, toStoredConcern, toStoredFinding, unavailableReviewStateAuthenticatorLayer, validateReviewState, webCryptoReviewStateAuthenticatorLayer };
65
+ export { AGENT_PROMPT_PREAMBLE, ChangedFile, ChangedFileStatus, ChangedFileSummary, ChangedFilesView, ChangedPath, CodeReview, DEFAULT_GITHUB_REVIEW_AUTHOR_LOGIN, DEFAULT_MODEL, DEFAULT_PROVIDER, DelegateFileReview, EFFORT_ALIASES, FINGERPRINT_MARKER_LENGTH, FailedReviewUnit, FanOutCoordinatorToolkit, FanOutCoordinatorToolkitLayer, FanOutReviewToolkit, FanOutReviewer, FanOutReviewerProfile, FileDiffQuery, FileDiffView, FileReviewBrief, FileReviewDelegationFailure, FileReviewReport, FileReviewRequest, FileReviewToolkit, FileReviewToolkitLayer, FileReviewUnitFailed, FileReviewUnitResult, FileReviewer, FileSlice, FileSliceQuery, FindingCategory, FindingSeverity, GitCommitSha, GitHubApiFailure, GitHubEventWire, GitHubReviewTarget, InvalidEffortInput, LIVE_GATE_ENV, ListChangedFiles, ListChangedFilesQuery, ListReviewUnits, ListReviewUnitsQuery, 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_REVIEW_CONTENT_CHARS, MAX_REVIEW_STATE_MARKER_CHARS, MAX_REVIEW_UNITS, MAX_UNIT_FILES, MAX_WALKTHROUGH_ENTRIES, MAX_WALKTHROUGH_SUMMARY_CHARS, PROGRESS_COMMENT_MARKER_PREFIX, PROVIDER_CREDENTIAL_ENV, PROVIDER_EFFORT_RUNGS, PrReview, PriorReviewLookupFailure, PriorReviews, PublishedReview, PullRequestMetadata, PullRequestReviewer, PullRequestReviewerProfile, PullRequestSource, PullRequestSourceFailure, REVIEW_TOOL_RESULT_MAX_BYTES, ReadFile, ReadFileDiff, RetirableReview, RetirableReviewComment, ReviewCommentDraft, ReviewConcern, ReviewCoverage, ReviewEvent, ReviewExecutionContext, ReviewFinding, ReviewHeadComparison, ReviewInputViolation, ReviewMission, ReviewMode, ReviewProgressReporter, ReviewPublicationPlan, ReviewPublisher, ReviewRetirementFailure, ReviewRetirementHost, ReviewRetirementReport, ReviewRunOutcome, ReviewScopeMode, ReviewShape, ReviewState, ReviewStateAuthenticationFailure, ReviewStateAuthenticator, ReviewStateMarker, ReviewStateMarkerTooLarge, ReviewTargetUnresolved, ReviewToolkit, ReviewToolkitLayer, ReviewUnit, ReviewUnitId, ReviewUnitPlan, ReviewVerdict, StoredReviewConcern, StoredReviewFinding, UNIT_CHANGED_LINE_BUDGET, WalkthroughEntry, anchorViolation, annotatePatch, anthropicClientLayer, assessReviewCoverage, buildProfileMission, buildReviewMission, clampMaxFindings, collectUnitFileSummaries, commentableLines, compactReviewLogger, compactReviewLoggingLayer, compileIgnoreGlobs, computeChangesetFingerprint, computeProfileFingerprint, decideReviewRetirement, defaultFanOutPolicy, defaultFileReviewerPolicy, defaultReviewPolicy, describeReviewModel, enforceFindingsBound, estimateReviewEffort, executeReview, extractFingerprint, fanOutHandlersLayer, fanOutHandlersLayerFor, fanOutReviewBudgetLimits, fanOutReviewInstructions, fanOutReviewerProfile, fileReviewDelegation, fileReviewPolicy, fileReviewerInstructions, fingerprintUnchanged, formatCompactLogLine, fromStoredConcern, fromStoredFinding, gitHubPriorReviewsLayer, gitHubPullRequestSourceLayer, gitHubReviewLayers, gitHubReviewProgressLayer, gitHubReviewPublisherLayer, gitHubReviewRetirementHostLayer, hasReviewMetadataMarker, hasReviewableContent, ignoringPullRequestSourceLayer, isEffortPosition, isReviewableFile, listChangedFilesHandler, liveProfileEnabled, makeAnthropicReviewModel, makeFanOutReviewInstructions, makeFanOutReviewSuite, makeFileReviewerInstructions, makeOpenAiReviewModel, makeReviewInstructions, mapFileReviewChildFailure, noopReviewProgressReporterLayer, normalizeRepoRelativePath, openAiClientLayer, parseEffortPosition, parseGitHubSubmittedAt, parsePatch, parseProgressClaim, planPublication, planReviewUnits, planWalkthrough, pullRequestReviewerProfile, rankAndDedupeFindings, readFileDiffHandler, readFileHandler, readGitHubEvent, renderAgentPrompt, renderFingerprintMarker, renderProgressBeginBody, renderProgressClaimMarker, renderProgressSettleBody, renderReviewContent, resolveEffortRung, resolveGuidance, resolveReviewTarget, retireStaleReviews, reviewBudgetLimits, reviewInstructions, selectReviewRange, selectedPullRequestSourceLayer, toStoredConcern, toStoredFinding, unavailableReviewStateAuthenticatorLayer, validateReviewState, webCryptoReviewStateAuthenticatorLayer };
65
66
 
66
67
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/internal/profiles.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\n// ---------------------------------------------------------------------------\n// Committed capability claims, schema-first: what this package's reviewers\n// promise and — just as deliberately — what they never claim. Deployment\n// class E (ephemeral): one bounded AgentRuntime.run per invocation, no\n// durability, no exactly-once external effects (DUR-003).\n// ---------------------------------------------------------------------------\n\n/** The flat reviewer's committed capability claim. */\nexport class PullRequestReviewerProfile extends Schema.Class<PullRequestReviewerProfile>(\n \"@effect-agent/pr-review/PullRequestReviewerProfile\",\n)({\n /** Ephemeral runtime: one bounded AgentRuntime.run per invocation. */\n deploymentClass: Schema.Literal(\"E\"),\n /** Every model-callable tool is a read of the pull request; none mutate. */\n readOnlyToolSurface: Schema.Literal(true),\n /** The review is posted by the host AFTER the run settles, never by a tool. */\n publicationOutsideAgentLoop: Schema.Literal(true),\n /** Finding anchors are validated against the parsed diff before posting. */\n anchorsValidatedBeforePublication: Schema.Literal(true),\n /** The live profile is env-gated out of every ordinary test gate. */\n liveProfileOptIn: Schema.Literal(true),\n /** Never claimed at any phase (DUR-003). */\n exactlyOnceExternalEffects: Schema.Literal(false),\n}) {}\n\nexport const pullRequestReviewerProfile = PullRequestReviewerProfile.make({\n deploymentClass: \"E\",\n readOnlyToolSurface: true,\n publicationOutsideAgentLoop: true,\n anchorsValidatedBeforePublication: true,\n liveProfileOptIn: true,\n exactlyOnceExternalEffects: false,\n});\n\n/** The fan-out reviewer's committed capability claim, schema-first. */\nexport class FanOutReviewerProfile extends Schema.Class<FanOutReviewerProfile>(\n \"@effect-agent/pr-review/FanOutReviewerProfile\",\n)({\n /** Ephemeral runtime: one bounded AgentRuntime.run per invocation. */\n deploymentClass: Schema.Literal(\"E\"),\n /** Every model-callable tool — parent and child — is a read; none mutate. */\n readOnlyToolSurface: Schema.Literal(true),\n /** The review is posted by the host AFTER the run settles, never by a tool. */\n publicationOutsideAgentLoop: Schema.Literal(true),\n /** Child findings are untrusted; anchors are validated against the parsed diff. */\n anchorsValidatedBeforePublication: Schema.Literal(true),\n /** S1 attached ephemeral delegation at depth 1; nested delegation is rejected. */\n attachedEphemeralDelegation: Schema.Literal(true),\n /** A failed unit surfaces to the coordinator as a typed failed result, never retried. */\n failedUnitsReportedNotRetried: Schema.Literal(true),\n /** The live profile is env-gated out of every ordinary test gate. */\n liveProfileOptIn: Schema.Literal(true),\n /** Never claimed at any phase (DUR-003). */\n exactlyOnceExternalEffects: Schema.Literal(false),\n}) {}\n\nexport const fanOutReviewerProfile = FanOutReviewerProfile.make({\n deploymentClass: \"E\",\n readOnlyToolSurface: true,\n publicationOutsideAgentLoop: true,\n anchorsValidatedBeforePublication: true,\n attachedEphemeralDelegation: true,\n failedUnitsReportedNotRetried: true,\n liveProfileOptIn: true,\n exactlyOnceExternalEffects: false,\n});\n\nexport const LIVE_GATE_ENV = \"EFFECT_AGENT_LIVE\";\n\n/**\n * `EFFECT_AGENT_LIVE=1` plus the named credential is the only enabling\n * combination for live (network, billed) profiles.\n */\nexport const liveProfileEnabled = (\n env: Record<string, string | undefined>,\n credentialEnv: string,\n): boolean => env[LIVE_GATE_ENV] === \"1\" && (env[credentialEnv] ?? \"\") !== \"\";\n"],"mappings":";;;;;AAUA,IAAa,6BAAb,cAAgD,OAAO,MACrD,oDACF,CAAC,CAAC;;CAEA,iBAAiB,OAAO,QAAQ,GAAG;;CAEnC,qBAAqB,OAAO,QAAQ,IAAI;;CAExC,6BAA6B,OAAO,QAAQ,IAAI;;CAEhD,mCAAmC,OAAO,QAAQ,IAAI;;CAEtD,kBAAkB,OAAO,QAAQ,IAAI;;CAErC,4BAA4B,OAAO,QAAQ,KAAK;AAClD,CAAC,CAAC,CAAC,CAAC;AAEJ,MAAa,6BAA6B,2BAA2B,KAAK;CACxE,iBAAiB;CACjB,qBAAqB;CACrB,6BAA6B;CAC7B,mCAAmC;CACnC,kBAAkB;CAClB,4BAA4B;AAC9B,CAAC;;AAGD,IAAa,wBAAb,cAA2C,OAAO,MAChD,+CACF,CAAC,CAAC;;CAEA,iBAAiB,OAAO,QAAQ,GAAG;;CAEnC,qBAAqB,OAAO,QAAQ,IAAI;;CAExC,6BAA6B,OAAO,QAAQ,IAAI;;CAEhD,mCAAmC,OAAO,QAAQ,IAAI;;CAEtD,6BAA6B,OAAO,QAAQ,IAAI;;CAEhD,+BAA+B,OAAO,QAAQ,IAAI;;CAElD,kBAAkB,OAAO,QAAQ,IAAI;;CAErC,4BAA4B,OAAO,QAAQ,KAAK;AAClD,CAAC,CAAC,CAAC,CAAC;AAEJ,MAAa,wBAAwB,sBAAsB,KAAK;CAC9D,iBAAiB;CACjB,qBAAqB;CACrB,6BAA6B;CAC7B,mCAAmC;CACnC,6BAA6B;CAC7B,+BAA+B;CAC/B,kBAAkB;CAClB,4BAA4B;AAC9B,CAAC;AAED,MAAa,gBAAgB;;;;;AAM7B,MAAa,sBACX,KACA,kBACY,IAAA,yBAAuB,QAAQ,IAAI,kBAAkB,QAAQ"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/internal/profiles.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\n// ---------------------------------------------------------------------------\n// Committed capability claims, schema-first: what this package's reviewers\n// promise and — just as deliberately — what they never claim. Deployment\n// class E (ephemeral): one bounded AgentRuntime.run per invocation, no\n// durability, no exactly-once external effects (DUR-003).\n// ---------------------------------------------------------------------------\n\n/** The flat reviewer's committed capability claim. */\nexport class PullRequestReviewerProfile extends Schema.Class<PullRequestReviewerProfile>(\n \"@effect-agent/pr-review/PullRequestReviewerProfile\",\n)({\n /** Ephemeral runtime: one bounded AgentRuntime.run per invocation. */\n deploymentClass: Schema.Literal(\"E\"),\n /** Every model-callable tool is a read of the pull request; none mutate. */\n readOnlyToolSurface: Schema.Literal(true),\n /** The review is posted by the host AFTER the run settles, never by a tool. */\n publicationOutsideAgentLoop: Schema.Literal(true),\n /** Finding anchors are validated against the parsed diff before posting. */\n anchorsValidatedBeforePublication: Schema.Literal(true),\n /** The live profile is env-gated out of every ordinary test gate. */\n liveProfileOptIn: Schema.Literal(true),\n /** Never claimed at any phase (DUR-003). */\n exactlyOnceExternalEffects: Schema.Literal(false),\n}) {}\n\nexport const pullRequestReviewerProfile = PullRequestReviewerProfile.make({\n deploymentClass: \"E\",\n readOnlyToolSurface: true,\n publicationOutsideAgentLoop: true,\n anchorsValidatedBeforePublication: true,\n liveProfileOptIn: true,\n exactlyOnceExternalEffects: false,\n});\n\n/** The fan-out reviewer's committed capability claim, schema-first. */\nexport class FanOutReviewerProfile extends Schema.Class<FanOutReviewerProfile>(\n \"@effect-agent/pr-review/FanOutReviewerProfile\",\n)({\n /** Ephemeral runtime: one bounded AgentRuntime.run per invocation. */\n deploymentClass: Schema.Literal(\"E\"),\n /** Every model-callable tool — parent and child — is a read; none mutate. */\n readOnlyToolSurface: Schema.Literal(true),\n /** The review is posted by the host AFTER the run settles, never by a tool. */\n publicationOutsideAgentLoop: Schema.Literal(true),\n /** Child findings are untrusted; anchors are validated against the parsed diff. */\n anchorsValidatedBeforePublication: Schema.Literal(true),\n /** S1 attached ephemeral delegation at depth 1; nested delegation is rejected. */\n attachedEphemeralDelegation: Schema.Literal(true),\n /** A failed unit surfaces to the coordinator as a typed failed result, never retried. */\n failedUnitsReportedNotRetried: Schema.Literal(true),\n /** The live profile is env-gated out of every ordinary test gate. */\n liveProfileOptIn: Schema.Literal(true),\n /** Never claimed at any phase (DUR-003). */\n exactlyOnceExternalEffects: Schema.Literal(false),\n}) {}\n\nexport const fanOutReviewerProfile = FanOutReviewerProfile.make({\n deploymentClass: \"E\",\n readOnlyToolSurface: true,\n publicationOutsideAgentLoop: true,\n anchorsValidatedBeforePublication: true,\n attachedEphemeralDelegation: true,\n failedUnitsReportedNotRetried: true,\n liveProfileOptIn: true,\n exactlyOnceExternalEffects: false,\n});\n\nexport const LIVE_GATE_ENV = \"EFFECT_AGENT_LIVE\";\n\n/**\n * `EFFECT_AGENT_LIVE=1` plus the named credential is the only enabling\n * combination for live (network, billed) profiles.\n */\nexport const liveProfileEnabled = (\n env: Record<string, string | undefined>,\n credentialEnv: string,\n): boolean => env[LIVE_GATE_ENV] === \"1\" && (env[credentialEnv] ?? \"\") !== \"\";\n"],"mappings":";;;;;;AAUA,IAAa,6BAAb,cAAgD,OAAO,MACrD,oDACF,CAAC,CAAC;;CAEA,iBAAiB,OAAO,QAAQ,GAAG;;CAEnC,qBAAqB,OAAO,QAAQ,IAAI;;CAExC,6BAA6B,OAAO,QAAQ,IAAI;;CAEhD,mCAAmC,OAAO,QAAQ,IAAI;;CAEtD,kBAAkB,OAAO,QAAQ,IAAI;;CAErC,4BAA4B,OAAO,QAAQ,KAAK;AAClD,CAAC,CAAC,CAAC,CAAC;AAEJ,MAAa,6BAA6B,2BAA2B,KAAK;CACxE,iBAAiB;CACjB,qBAAqB;CACrB,6BAA6B;CAC7B,mCAAmC;CACnC,kBAAkB;CAClB,4BAA4B;AAC9B,CAAC;;AAGD,IAAa,wBAAb,cAA2C,OAAO,MAChD,+CACF,CAAC,CAAC;;CAEA,iBAAiB,OAAO,QAAQ,GAAG;;CAEnC,qBAAqB,OAAO,QAAQ,IAAI;;CAExC,6BAA6B,OAAO,QAAQ,IAAI;;CAEhD,mCAAmC,OAAO,QAAQ,IAAI;;CAEtD,6BAA6B,OAAO,QAAQ,IAAI;;CAEhD,+BAA+B,OAAO,QAAQ,IAAI;;CAElD,kBAAkB,OAAO,QAAQ,IAAI;;CAErC,4BAA4B,OAAO,QAAQ,KAAK;AAClD,CAAC,CAAC,CAAC,CAAC;AAEJ,MAAa,wBAAwB,sBAAsB,KAAK;CAC9D,iBAAiB;CACjB,qBAAqB;CACrB,6BAA6B;CAC7B,mCAAmC;CACnC,6BAA6B;CAC7B,+BAA+B;CAC/B,kBAAkB;CAClB,4BAA4B;AAC9B,CAAC;AAED,MAAa,gBAAgB;;;;;AAM7B,MAAa,sBACX,KACA,kBACY,IAAA,yBAAuB,QAAQ,IAAI,kBAAkB,QAAQ"}
@@ -0,0 +1,75 @@
1
+ import { Cause, Config, Effect, Layer, Logger, Predicate, References } from "effect";
2
+ //#region src/internal/logging.ts
3
+ const levelTag = {
4
+ Trace: "trace",
5
+ Debug: "debug",
6
+ Warn: "WARN",
7
+ Error: "ERROR",
8
+ Fatal: "FATAL"
9
+ };
10
+ const asText = (value) => {
11
+ if (Predicate.isString(value)) return value;
12
+ try {
13
+ return JSON.stringify(value) ?? String(value);
14
+ } catch {
15
+ return String(value);
16
+ }
17
+ };
18
+ const annotationText = (annotations) => Object.entries(annotations).filter(([key]) => !key.includes(".")).map(([key, value]) => `${key}=${asText(value).slice(0, 120)}`).join(" ");
19
+ /** Known engine telemetry messages, rendered as short progress lines. */
20
+ const telemetryLine = (message, annotations) => {
21
+ const toolName = asText(annotations["toolName"] ?? "tool");
22
+ switch (message) {
23
+ case "agent tool execution completed": return `✓ tool ${toolName}`;
24
+ case "agent tool execution failed": return `✗ tool ${toolName} failed`;
25
+ case "agent tool handler started":
26
+ case "agent programmatic tool handler started": return `→ tool ${toolName}`;
27
+ case "agent model call started": return `→ model call`;
28
+ case "agent run started": return `→ agent ${asText(annotations["agentId"] ?? "run")} started`;
29
+ default: return;
30
+ }
31
+ };
32
+ /** Render one log record as a single compact console line. */
33
+ const formatCompactLogLine = (record) => {
34
+ const time = record.date.toISOString().slice(11, 19);
35
+ const messages = Array.isArray(record.message) ? record.message : [record.message];
36
+ const messageText = messages.map(asText).join(" ");
37
+ const mapped = messages.length === 1 && Predicate.isString(messages[0]) ? telemetryLine(messages[0], record.annotations) : void 0;
38
+ const tag = levelTag[record.logLevel];
39
+ let line;
40
+ if (mapped !== void 0) line = `[${time}] ${tag === void 0 ? "" : `${tag} `}${mapped}`;
41
+ else {
42
+ const annotations = record.logLevel === "Warn" || record.logLevel === "Error" || record.logLevel === "Fatal" ? annotationText(record.annotations) : "";
43
+ line = `[${time}] ${tag === void 0 ? "" : `${tag} `}${messageText}${annotations === "" ? "" : ` · ${annotations}`}`;
44
+ }
45
+ return record.cause === void 0 ? line : `${line}\n${record.cause}`;
46
+ };
47
+ /** The compact Logger; annotations come from the emitting fiber. */
48
+ const compactReviewLogger = Logger.make((options) => formatCompactLogLine({
49
+ date: options.date,
50
+ logLevel: options.logLevel,
51
+ message: options.message,
52
+ annotations: options.fiber.getRef(References.CurrentLogAnnotations),
53
+ cause: options.cause.reasons.length > 0 ? Cause.pretty(options.cause) : void 0
54
+ }));
55
+ /**
56
+ * Install the compact console logger and the minimum level for one host run.
57
+ * PR_REVIEW_LOG_LEVEL widens visibility (e.g. "Debug" shows the engine's
58
+ * per-turn and per-handler telemetry); an unknown value fails loudly like
59
+ * every other configuration fault.
60
+ */
61
+ const compactReviewLoggingLayer = Layer.unwrap(Effect.gen(function* () {
62
+ const level = yield* Config.literals([
63
+ "All",
64
+ "Trace",
65
+ "Debug",
66
+ "Info",
67
+ "Warn",
68
+ "Error"
69
+ ], "PR_REVIEW_LOG_LEVEL").pipe(Config.withDefault("Info"));
70
+ return Layer.merge(Logger.layer([Logger.withLeveledConsole(compactReviewLogger)]), Layer.succeed(References.MinimumLogLevel, level));
71
+ }));
72
+ //#endregion
73
+ export { compactReviewLoggingLayer as n, formatCompactLogLine as r, compactReviewLogger as t };
74
+
75
+ //# sourceMappingURL=logging-Q4j0oub-.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-Q4j0oub-.mjs","names":[],"sources":["../src/internal/logging.ts"],"sourcesContent":["import type { LogLevel } from \"effect\";\nimport { Cause, Config, Effect, Layer, Logger, Predicate, References } from \"effect\";\n\n// ---------------------------------------------------------------------------\n// Compact host logging for CI runs. The engine's telemetry logs carry full\n// OTel-style annotation sets — correct for an exporter, unreadable as an\n// Actions console. This logger renders each record as ONE line: known engine\n// telemetry messages become short progress lines, and everything else keeps\n// its message with annotations compacted (warnings and errors only). It is\n// presentation only — record filtering stays with MinimumLogLevel, and\n// nothing here feeds back into the run.\n// ---------------------------------------------------------------------------\n\n/** Everything one compact line is rendered from; pure and directly testable. */\nexport interface CompactLogRecord {\n readonly date: Date;\n readonly logLevel: LogLevel.LogLevel;\n readonly message: unknown;\n readonly annotations: Readonly<Record<string, unknown>>;\n /** Pretty-rendered Cause, present only when the record carries one. */\n readonly cause?: string | undefined;\n}\n\nconst levelTag: Partial<Record<LogLevel.LogLevel, string>> = {\n Trace: \"trace\",\n Debug: \"debug\",\n Warn: \"WARN\",\n Error: \"ERROR\",\n Fatal: \"FATAL\",\n};\n\nconst asText = (value: unknown): string => {\n if (Predicate.isString(value)) return value;\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n};\n\nconst annotationText = (annotations: Readonly<Record<string, unknown>>): string =>\n Object.entries(annotations)\n // Dotted keys are the OTel-convention duplicates of the camelCase\n // annotations; one copy per line is enough for a human console.\n .filter(([key]) => !key.includes(\".\"))\n .map(([key, value]) => `${key}=${asText(value).slice(0, 120)}`)\n .join(\" \");\n\n/** Known engine telemetry messages, rendered as short progress lines. */\nconst telemetryLine = (\n message: string,\n annotations: Readonly<Record<string, unknown>>,\n): string | undefined => {\n const toolName = asText(annotations[\"toolName\"] ?? \"tool\");\n switch (message) {\n case \"agent tool execution completed\":\n return `✓ tool ${toolName}`;\n case \"agent tool execution failed\":\n return `✗ tool ${toolName} failed`;\n case \"agent tool handler started\":\n case \"agent programmatic tool handler started\":\n return `→ tool ${toolName}`;\n case \"agent model call started\":\n return `→ model call`;\n case \"agent run started\":\n return `→ agent ${asText(annotations[\"agentId\"] ?? \"run\")} started`;\n default:\n return undefined;\n }\n};\n\n/** Render one log record as a single compact console line. */\nexport const formatCompactLogLine = (record: CompactLogRecord): string => {\n const time = record.date.toISOString().slice(11, 19);\n const messages = Array.isArray(record.message) ? record.message : [record.message];\n const messageText = messages.map(asText).join(\" \");\n const mapped =\n messages.length === 1 && Predicate.isString(messages[0])\n ? telemetryLine(messages[0], record.annotations)\n : undefined;\n const tag = levelTag[record.logLevel];\n let line: string;\n if (mapped !== undefined) {\n line = `[${time}] ${tag === undefined ? \"\" : `${tag} `}${mapped}`;\n } else {\n const isSevere =\n record.logLevel === \"Warn\" || record.logLevel === \"Error\" || record.logLevel === \"Fatal\";\n const annotations = isSevere ? annotationText(record.annotations) : \"\";\n line = `[${time}] ${tag === undefined ? \"\" : `${tag} `}${messageText}${\n annotations === \"\" ? \"\" : ` · ${annotations}`\n }`;\n }\n return record.cause === undefined ? line : `${line}\\n${record.cause}`;\n};\n\n/** The compact Logger; annotations come from the emitting fiber. */\nexport const compactReviewLogger: Logger.Logger<unknown, string> = Logger.make((options) =>\n formatCompactLogLine({\n date: options.date,\n logLevel: options.logLevel,\n message: options.message,\n annotations: options.fiber.getRef(References.CurrentLogAnnotations),\n cause: options.cause.reasons.length > 0 ? Cause.pretty(options.cause) : undefined,\n }),\n);\n\n/**\n * Install the compact console logger and the minimum level for one host run.\n * PR_REVIEW_LOG_LEVEL widens visibility (e.g. \"Debug\" shows the engine's\n * per-turn and per-handler telemetry); an unknown value fails loudly like\n * every other configuration fault.\n */\nexport const compactReviewLoggingLayer: Layer.Layer<never, Config.ConfigError> = Layer.unwrap(\n Effect.gen(function* () {\n const level = yield* Config.literals(\n [\"All\", \"Trace\", \"Debug\", \"Info\", \"Warn\", \"Error\"],\n \"PR_REVIEW_LOG_LEVEL\",\n ).pipe(Config.withDefault<LogLevel.LogLevel>(\"Info\"));\n return Layer.merge(\n Logger.layer([Logger.withLeveledConsole(compactReviewLogger)]),\n Layer.succeed(References.MinimumLogLevel, level),\n );\n }),\n);\n"],"mappings":";;AAuBA,MAAM,WAAuD;CAC3D,OAAO;CACP,OAAO;CACP,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAEA,MAAM,UAAU,UAA2B;CACzC,IAAI,UAAU,SAAS,KAAK,GAAG,OAAO;CACtC,IAAI;EACF,OAAO,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK;CAC9C,QAAQ;EACN,OAAO,OAAO,KAAK;CACrB;AACF;AAEA,MAAM,kBAAkB,gBACtB,OAAO,QAAQ,WAAW,CAAC,CAGxB,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CACrC,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAC9D,KAAK,GAAG;;AAGb,MAAM,iBACJ,SACA,gBACuB;CACvB,MAAM,WAAW,OAAO,YAAY,eAAe,MAAM;CACzD,QAAQ,SAAR;EACE,KAAK,kCACH,OAAO,UAAU;EACnB,KAAK,+BACH,OAAO,UAAU,SAAS;EAC5B,KAAK;EACL,KAAK,2CACH,OAAO,UAAU;EACnB,KAAK,4BACH,OAAO;EACT,KAAK,qBACH,OAAO,WAAW,OAAO,YAAY,cAAc,KAAK,EAAE;EAC5D,SACE;CACJ;AACF;;AAGA,MAAa,wBAAwB,WAAqC;CACxE,MAAM,OAAO,OAAO,KAAK,YAAY,CAAC,CAAC,MAAM,IAAI,EAAE;CACnD,MAAM,WAAW,MAAM,QAAQ,OAAO,OAAO,IAAI,OAAO,UAAU,CAAC,OAAO,OAAO;CACjF,MAAM,cAAc,SAAS,IAAI,MAAM,CAAC,CAAC,KAAK,GAAG;CACjD,MAAM,SACJ,SAAS,WAAW,KAAK,UAAU,SAAS,SAAS,EAAE,IACnD,cAAc,SAAS,IAAI,OAAO,WAAW,IAC7C,KAAA;CACN,MAAM,MAAM,SAAS,OAAO;CAC5B,IAAI;CACJ,IAAI,WAAW,KAAA,GACb,OAAO,IAAI,KAAK,IAAI,QAAQ,KAAA,IAAY,KAAK,GAAG,IAAI,KAAK;MACpD;EAGL,MAAM,cADJ,OAAO,aAAa,UAAU,OAAO,aAAa,WAAW,OAAO,aAAa,UACpD,eAAe,OAAO,WAAW,IAAI;EACpE,OAAO,IAAI,KAAK,IAAI,QAAQ,KAAA,IAAY,KAAK,GAAG,IAAI,KAAK,cACvD,gBAAgB,KAAK,KAAK,MAAM;CAEpC;CACA,OAAO,OAAO,UAAU,KAAA,IAAY,OAAO,GAAG,KAAK,IAAI,OAAO;AAChE;;AAGA,MAAa,sBAAsD,OAAO,MAAM,YAC9E,qBAAqB;CACnB,MAAM,QAAQ;CACd,UAAU,QAAQ;CAClB,SAAS,QAAQ;CACjB,aAAa,QAAQ,MAAM,OAAO,WAAW,qBAAqB;CAClE,OAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI,MAAM,OAAO,QAAQ,KAAK,IAAI,KAAA;AAC1E,CAAC,CACH;;;;;;;AAQA,MAAa,4BAAoE,MAAM,OACrF,OAAO,IAAI,aAAa;CACtB,MAAM,QAAQ,OAAO,OAAO,SAC1B;EAAC;EAAO;EAAS;EAAS;EAAQ;EAAQ;CAAO,GACjD,qBACF,CAAC,CAAC,KAAK,OAAO,YAA+B,MAAM,CAAC;CACpD,OAAO,MAAM,MACX,OAAO,MAAM,CAAC,OAAO,mBAAmB,mBAAmB,CAAC,CAAC,GAC7D,MAAM,QAAQ,WAAW,iBAAiB,KAAK,CACjD;AACF,CAAC,CACH"}