prreviewbuddy 0.80.2 → 0.80.3

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.80.3
4
+
5
+ **Runs name the agent that did the work.** Updating a review, and the checkout Buddy AI answers
6
+ from, already ran under the review's own agent. They were recorded as the default agent, Claude,
7
+ so updates of a Codex review were listed on the Runs page as Claude Code. They now record the
8
+ agent that ran them. Update timings kept from earlier versions no longer name an agent at all,
9
+ because the one they named was never the real one; their durations are unchanged.
10
+
3
11
  ## 0.80.2
4
12
 
5
13
  **A review opens the way you left the last one.** Hiding or showing Buddy AI, expanding a pane or
@@ -15535,7 +15535,17 @@ function aboutMinutes(ms) {
15535
15535
  }
15536
15536
  //#endregion
15537
15537
  //#region ../../packages/review-harness/src/runtime/store.ts
15538
- var VERSION = 1;
15538
+ var VERSION = 2;
15539
+ /**
15540
+ * Version 1 is the same shape with one field that cannot be trusted. Every update row it holds
15541
+ * names the default agent, Claude, whichever agent ran it: the update's job was stamped with the
15542
+ * daemon's default rather than the review's own, and the row was copied from the job. So that
15543
+ * field is a constant on every such row, and reading it as a fact would credit Codex's updates to
15544
+ * Claude for as long as the rows are kept, which is indefinitely. It is dropped rather than
15545
+ * rewritten, because which agent did run is not recorded anywhere this file can see. The duration
15546
+ * was always right and stays, and so does every other operation's agent.
15547
+ */
15548
+ var VERSION_WITH_UNKNOWN_UPDATE_AGENTS = 1;
15539
15549
  /** Kept in all, so a machine with years of reviews holds a bounded file. */
15540
15550
  var ROWS_KEPT = 1e3;
15541
15551
  var LOCK = "runtimes";
@@ -15587,12 +15597,19 @@ function keyOf$1(row) {
15587
15597
  function readRows() {
15588
15598
  try {
15589
15599
  const parsed = JSON.parse(readFileSync(runtimesPath(), "utf8"));
15590
- if (parsed?.version !== VERSION || !Array.isArray(parsed.runs)) return [];
15591
- return parsed.runs.filter(isRow);
15600
+ if (!Array.isArray(parsed?.runs)) return [];
15601
+ if (parsed.version === VERSION) return parsed.runs.filter(isRow);
15602
+ if (parsed.version === VERSION_WITH_UNKNOWN_UPDATE_AGENTS) return parsed.runs.filter(isRow).map(withoutUpdateAgent);
15603
+ return [];
15592
15604
  } catch {
15593
15605
  return [];
15594
15606
  }
15595
15607
  }
15608
+ function withoutUpdateAgent(row) {
15609
+ if (row.operation !== "update") return row;
15610
+ const { agent: _unknown, ...rest } = row;
15611
+ return rest;
15612
+ }
15596
15613
  function isRow(value) {
15597
15614
  const row = value;
15598
15615
  return typeof row?.operation === "string" && typeof row.repository === "string" && typeof row.subject === "string" && typeof row.durationMs === "number" && Number.isFinite(row.durationMs) && row.durationMs >= 0 && typeof row.completedAt === "number";
@@ -18681,7 +18698,7 @@ async function claimCheckoutJob(workspace, sha, fields) {
18681
18698
  const job = createJob({
18682
18699
  workspaceId: workspace.id,
18683
18700
  target,
18684
- env: captureEnv(),
18701
+ env: agentEnvOf(workspace),
18685
18702
  ...fields
18686
18703
  });
18687
18704
  saveJob(job);
@@ -18915,7 +18932,7 @@ function cancelled(held, reviewedSha) {
18915
18932
  };
18916
18933
  }
18917
18934
  async function bringForward(workspace, runners, reviewedSha, held, step, signal, clock) {
18918
- const remote = await remoteHead(workspace, signal, runners);
18935
+ const remote = await remoteHead(workspace, held.job.env, signal, runners);
18919
18936
  signal.throwIfAborted();
18920
18937
  if (!remote.sha) return refuse(reviewedSha, remote.fetchFailed, remote.refusal ?? noRemoteHeadMessage(workspace));
18921
18938
  adoptLegacyBaseline(workspace);
@@ -18938,9 +18955,10 @@ async function bringForward(workspace, runners, reviewedSha, held, step, signal,
18938
18955
  return settled(reviewedSha, remote.sha, remote.fetchFailed, conversationOk, "analysis-failed", "A checkout of the latest commit could not be prepared, so nothing was reassessed.");
18939
18956
  }
18940
18957
  signal.throwIfAborted();
18941
- return reconcile(workspace, runners, reviewedSha, remote, conversationOk, worktreePath, step, held.job.id, signal, clock, prepared, discussionMoved);
18958
+ return reconcile(workspace, runners, reviewedSha, remote, conversationOk, worktreePath, step, held.job, signal, clock, prepared, discussionMoved);
18942
18959
  }
18943
- async function reconcile(workspace, runners, reviewedSha, remote, conversationOk, worktreePath, step, jobId, signal, clock, prepared, discussionMoved) {
18960
+ async function reconcile(workspace, runners, reviewedSha, remote, conversationOk, worktreePath, step, job, signal, clock, prepared, discussionMoved) {
18961
+ const { id: jobId, env } = job;
18944
18962
  const newHead = remote.sha;
18945
18963
  let delta = null;
18946
18964
  if (reviewedSha !== newHead) try {
@@ -18975,9 +18993,9 @@ async function reconcile(workspace, runners, reviewedSha, remote, conversationOk
18975
18993
  let raw;
18976
18994
  try {
18977
18995
  const prompt = buildUpdatePrompt(workspace, delta, prepared, reviewedSha, newHead, worktreePath);
18978
- raw = runners.run ? await runners.run(prompt, worktreePath, agentEnvOf(workspace), onProgress, onObservedModel, signal) : await runUpdate(workspace.id, prompt, worktreePath, workspace.repoPath, agentEnvOf(workspace), onProgress, requestedModel, onObservedModel, signal);
18996
+ raw = runners.run ? await runners.run(prompt, worktreePath, env, onProgress, onObservedModel, signal) : await runUpdate(workspace.id, prompt, worktreePath, workspace.repoPath, env, onProgress, requestedModel, onObservedModel, signal);
18979
18997
  } catch (error) {
18980
- return settled(reviewedSha, newHead, remote.fetchFailed, conversationOk, "analysis-failed", explainUpdateFailure(error, agentEnvOf(workspace), requestedModel));
18998
+ return settled(reviewedSha, newHead, remote.fetchFailed, conversationOk, "analysis-failed", explainUpdateFailure(error, env, requestedModel));
18981
18999
  }
18982
19000
  const parsed = parseReconciliationResult(raw, previous.issues.length, { priorQuestionCount: previous.questions.length });
18983
19001
  if (!parsed) return settled(reviewedSha, newHead, remote.fetchFailed, conversationOk, "analysis-failed", "The reassessment came back in a form this could not read, so nothing was changed.");
@@ -18995,7 +19013,7 @@ async function reconcile(workspace, runners, reviewedSha, remote, conversationOk
18995
19013
  const gradeChanges = await applyUpdate(workspace, result, previous, newHead, worktreePath, {
18996
19014
  ...requestedModel ? { requestedModel } : {},
18997
19015
  ...observedModel ? { observedModel } : {},
18998
- ...await (runners.agentVersion ?? installedAgentVersion)(agentEnvOf(workspace))
19016
+ ...await (runners.agentVersion ?? installedAgentVersion)(env)
18999
19017
  }, clock, remote.base, suggestions, conversationTakenIntoAccount(prepared, analysedBaselineOf(workspace)));
19000
19018
  const counts = {
19001
19019
  ...countUpdateChanges(previous, result),
@@ -19029,9 +19047,9 @@ var BASELINE_GONE_MESSAGE = "The commit this review was made from is no longer i
19029
19047
  * is allowed to reach the network and that panel is not, so it looks at a newer copy of the same
19030
19048
  * refs.
19031
19049
  */
19032
- async function remoteHead(workspace, signal, runners) {
19050
+ async function remoteHead(workspace, env, signal, runners) {
19033
19051
  const source = await storedRequestSource(workspace);
19034
- if (source) return requestHead(workspace, source, signal, runners);
19052
+ if (source) return requestHead(workspace, env, source, signal, runners);
19035
19053
  const fetchFailed = !await fetchOrigin(workspace.repoPath, signal);
19036
19054
  return {
19037
19055
  sha: (await followedBranch(workspace))?.sha ?? null,
@@ -19056,8 +19074,8 @@ async function remoteHead(workspace, signal, runners) {
19056
19074
  * rather than a guess. If even that fetch fails, the last head this repository saw is used and
19057
19075
  * the update says the fetch failed, as it always has.
19058
19076
  */
19059
- async function requestHead(workspace, source, signal, runners) {
19060
- const outcome = await (runners.headOf ?? ((cwd, asked) => fetchHeadFor(cwd, asked, agentEnvOf(workspace))))(workspace.repoPath, source);
19077
+ async function requestHead(workspace, env, source, signal, runners) {
19078
+ const outcome = await (runners.headOf ?? ((cwd, asked) => fetchHeadFor(cwd, asked, env)))(workspace.repoPath, source);
19061
19079
  signal.throwIfAborted();
19062
19080
  const baseBranch = workspace.changeSet.baseRef || void 0;
19063
19081
  if (outcome.kind === "head") {
package/dist/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { Ai as resolveTarget, An as modelHelpLines, Ar as recentWorkspaces, B as ensureServer, Bi as resolveAgent, D as relativeTime, Dr as positionInLineage, Er as mutateWorkspace, F as queueForReview, Gi as CONFIG_PATH, H as reviewsUrl, Hn as describeSubject, Ji as agentById, K as stopServer, Ki as STORE_ROOT, L as readIndexToken, M as runBatch, Mr as reviewedRepositories, Nr as summarise, O as batchIdentity, Oi as WITHHELD_REASON, Pn as MANAGED_ROOT, Q as parseWorkspacePort, Qn as allJobs, R as bootstrapUrl, Ri as git, Rn as readMarker, Tr as matchingWorkspaceIds, Ui as readAgentPreference, Un as findExistingReview, Vi as resolveModel, Vn as describeMovement, Wi as writeAgentPreference, X as MAX_WORKSPACE_PORT, Xi as detectAgents, Y as DEFAULT_WORKSPACE_PORT, Yn as forgeResolver, Z as MIN_WORKSPACE_PORT, _ as recordKissRun, _t as BUILD_VERSION, a as wasBlocked, at as settleReview, ct as startJob, d as mergeUpdateInto, dr as purposeOf, dt as record$1, et as statedWorkspacePort, f as updateReview, fr as clearClaim, ft as stamp, g as runningJobs, gr as followedRefName, gt as telemetryUploadEnabled, h as liveUpdateFor, ht as telemetryUploadConsent, i as liveJobsFor, it as prepareReview, ki as kissOutcome, lt as append, m as UpdateAlreadyRunningError, mt as recordTelemetryUploadConsent, n as deleteReview$1, or as PHASES, ot as reanalyseReview, pt as deliver, q as workspaceUrl, qi as AGENT_IDS, rr as loadJob, tt as writePortPreference, ur as progressSteps, vt as PACKAGE_NAME, wr as loadWorkspace, zn as removeWorktree } from "./delete_review-BXfGCvQ1.js";
2
+ import { Ai as resolveTarget, An as modelHelpLines, Ar as recentWorkspaces, B as ensureServer, Bi as resolveAgent, D as relativeTime, Dr as positionInLineage, Er as mutateWorkspace, F as queueForReview, Gi as CONFIG_PATH, H as reviewsUrl, Hn as describeSubject, Ji as agentById, K as stopServer, Ki as STORE_ROOT, L as readIndexToken, M as runBatch, Mr as reviewedRepositories, Nr as summarise, O as batchIdentity, Oi as WITHHELD_REASON, Pn as MANAGED_ROOT, Q as parseWorkspacePort, Qn as allJobs, R as bootstrapUrl, Ri as git, Rn as readMarker, Tr as matchingWorkspaceIds, Ui as readAgentPreference, Un as findExistingReview, Vi as resolveModel, Vn as describeMovement, Wi as writeAgentPreference, X as MAX_WORKSPACE_PORT, Xi as detectAgents, Y as DEFAULT_WORKSPACE_PORT, Yn as forgeResolver, Z as MIN_WORKSPACE_PORT, _ as recordKissRun, _t as BUILD_VERSION, a as wasBlocked, at as settleReview, ct as startJob, d as mergeUpdateInto, dr as purposeOf, dt as record$1, et as statedWorkspacePort, f as updateReview, fr as clearClaim, ft as stamp, g as runningJobs, gr as followedRefName, gt as telemetryUploadEnabled, h as liveUpdateFor, ht as telemetryUploadConsent, i as liveJobsFor, it as prepareReview, ki as kissOutcome, lt as append, m as UpdateAlreadyRunningError, mt as recordTelemetryUploadConsent, n as deleteReview$1, or as PHASES, ot as reanalyseReview, pt as deliver, q as workspaceUrl, qi as AGENT_IDS, rr as loadJob, tt as writePortPreference, ur as progressSteps, vt as PACKAGE_NAME, wr as loadWorkspace, zn as removeWorktree } from "./delete_review-CYiIfV5A.js";
3
3
  import { basename, dirname, join, resolve } from "node:path";
4
4
  import { spawn } from "node:child_process";
5
5
  import { existsSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as resolveWorkspacePort, $i as AgentUnavailableError, $n as attemptIdOf, $r as isIssueOutstanding, $t as moveIds, A as parsePullRequestLink, Ai as resolveTarget, Ar as recentWorkspaces, At as readArchitecture, Bi as resolveAgent, Bn as requestJobStop, Br as isLifecycle, Bt as writeJsonAtomically, C as completeRun, Ci as followUpFindingId, Cn as hasAuthorContent, Cr as lineagePosition, Ct as RUNTIME_WORDS, D as relativeTime$1, Di as describeAuthorship, Dn as CODE_COPY_CLASS, Dt as checkArchitecture, E as stopRun, Ei as objectWithAnyOf, En as CODE_BLOCK_CLASS, Er as mutateWorkspace, Et as ARCHITECTURE_DIR, Fi as AmbiguousRefError, Fn as createWorktree, Fr as workspaceRevision, Ft as ownersOf, G as stopChild, Gn as checkReview, Gr as parseLifecycle, Gt as createArchitectureNotification, Hi as clearAgentPreference, Hr as lifecycleItemLabel, Ht as branchOf, I as settleQueue, Ii as shortNameOf, In as holdWorktree, Ir as workspaceStamps, It as QUOTE_LIMITS, J as writeServerRecord, Ji as agentById, Jn as fetchHead, Jr as queueAddMany, Jt as eventName, Ki as STORE_ROOT, Kn as followedBranch, Kr as sectionOf, Kt as createPrState, L as readIndexToken, Li as shorthandOf, Ln as isWorktreeHeld, Lr as LIFECYCLES, Lt as REPOSITORY_SCOPE, M as runBatch, Mi as DetachedHeadError, Mn as isBusy, Mt as storeArchitecture, N as activateQueued, Ni as isCommitReview, Nn as withReviewLock, Nt as storedScopes, O as batchIdentity, Oi as WITHHELD_REASON, On as escapeHtml$1, Or as presentedKissRunOf, Ot as loadArchitecture, P as compactQueue, Pi as resolveBase, Pn as MANAGED_ROOT, Pr as touchWorkspace, Pt as trackedFiles, Q as parseWorkspacePort, Qi as AgentCancelledError, Qn as allJobs, Qr as doneVerb, Qt as markReadForReview, Ri as git, Rn as readMarker, Rr as activityAttributes, Rt as ancestorsOf, S as beginRun, Si as wasReassessed, Sn as authorPreview, Sr as latestKissRun, St as recordRuntimeBestEffort, T as reportRun, Ti as extractJsonText, Tn as renderMarkdown, Tt as formatDuration, U as serverEntryExists, Ui as readAgentPreference, Un as findExistingReview, Ur as lifecyclePill, Ut as subjectOf, V as readServerRecord, Vi as resolveModel, Vr as lifecycleChip, Vt as announceJob, W as spawnServer, Wi as writeAgentPreference, Wn as checkCodeFreshness, Wr as offersLifecycle, Wt as categoryOf, X as MAX_WORKSPACE_PORT, Xi as detectAgents, Xn as fillFileUrlTemplate, Xr as queueStamp, Xt as markAllRead, Y as DEFAULT_WORKSPACE_PORT, Yi as agentFor$1, Yn as forgeResolver, Yr as queueRemove, Yt as listNotifications, Z as MIN_WORKSPACE_PORT, Zi as isAgentId, Zn as RUN_RECORD_RETENTION_MS, Zr as readQueue, Zt as markRead, _i as gradeScale, _n as isUnchanged, _r as groupByLineage, _t as BUILD_VERSION, a as wasBlocked, ai as processDiscussion, an as toneOf, ar as saveJob, at as settleReview, b as track, bi as reassessIn, bn as chatConversationSection, br as kissDecisionRefusal, bt as waitingHistory, c as RefreshUnavailableError, ci as explanationOf, cn as withUsageRecorded, cr as isTerminalJobPhase, d as mergeUpdateInto, di as ANALYSIS_ONLY, dn as adoptLegacyBaseline, dr as purposeOf, dt as record, ei as isQuestionOutstanding, en as pruneNotifications, er as endedAt, et as statedWorkspacePort, f as updateReview, fi as analysisRefOf, fn as prepareConversationWithin, gi as findingIn, gn as refreshPrContext, gr as followedRefName, h as liveUpdateFor, hi as findingAssessment, hn as unforeseenFailure, hr as decideKissRecommendation, ht as telemetryUploadConsent, i as liveJobsFor, ii as reviewerDispositions, in as retireNotification, ir as pruneJobResidue, it as prepareReview, j as unsupportedReason, ji as originRemote, jn as ReviewBeingDeletedError, jr as reviewedCommit, jt as repositoryKey, k as extractPullRequestLinks, ki as kissOutcome, kn as renderInlineText, kr as previousKissResult, kt as partFiles, l as cancelUpdate, li as isExplanationAction, ln as existingPaths, lr as phasesFor, m as UpdateAlreadyRunningError, mi as currentGradeIn, mn as storedConversation, mt as recordTelemetryUploadConsent, n as deleteReview, ni as questionsOutstanding, nn as readStateOf, nr as isTerminal, nt as failureOf$1, o as discardJob, oi as recommendationsOf, on as unreadAround, ot as reanalyseReview, p as askCheckout, pi as assessmentLookup, pn as saveRefresh, pr as isClaimed, qi as AGENT_IDS, qn as reviewedShaOf, qr as queueAdd, qt as createPrUpdate, r as lineageIds, ri as resolvedByConversation, rn as removeNotification, rr as loadJob, rt as observeReview, s as FETCH_TIMEOUT_MS, si as explanationActionOf, sn as unreadCount$1, sr as isLiveJob, st as runJob, t as deleteLineage, ti as issuesOutstanding, tn as readNotification, tr as fail$1, tt as writePortPreference, u as cancellableHere, ui as withExplanation, un as ASK_REREAD_CEILING_MS, ur as progressSteps, ut as readEvents, v as startKissJob, vi as isGradeFor, vn as agentEnvOf, vr as indexKeptIds, w as endRun, wi as asString, wn as GITHUB_MARKDOWN, wr as loadWorkspace, wt as describeRuntimes, x as RUN_KINDS, xi as sourcePhrase, xn as UNESTABLISHED_MOTIVATION, xr as kissDecisionsOf, xt as mapRuntimes, y as isDriving, yi as promptGrade, yn as EXPLAIN_SIMPLY_PROMPT, yr as indexReviewGroups, yt as feedbackUrl, z as clearServerRecordOwnedBy, zi as refExists, zn as removeWorktree, zr as activityLabel, zt as isArchitectureId } from "./delete_review-BXfGCvQ1.js";
1
+ import { $ as resolveWorkspacePort, $i as AgentUnavailableError, $n as attemptIdOf, $r as isIssueOutstanding, $t as moveIds, A as parsePullRequestLink, Ai as resolveTarget, Ar as recentWorkspaces, At as readArchitecture, Bi as resolveAgent, Bn as requestJobStop, Br as isLifecycle, Bt as writeJsonAtomically, C as completeRun, Ci as followUpFindingId, Cn as hasAuthorContent, Cr as lineagePosition, Ct as RUNTIME_WORDS, D as relativeTime$1, Di as describeAuthorship, Dn as CODE_COPY_CLASS, Dt as checkArchitecture, E as stopRun, Ei as objectWithAnyOf, En as CODE_BLOCK_CLASS, Er as mutateWorkspace, Et as ARCHITECTURE_DIR, Fi as AmbiguousRefError, Fn as createWorktree, Fr as workspaceRevision, Ft as ownersOf, G as stopChild, Gn as checkReview, Gr as parseLifecycle, Gt as createArchitectureNotification, Hi as clearAgentPreference, Hr as lifecycleItemLabel, Ht as branchOf, I as settleQueue, Ii as shortNameOf, In as holdWorktree, Ir as workspaceStamps, It as QUOTE_LIMITS, J as writeServerRecord, Ji as agentById, Jn as fetchHead, Jr as queueAddMany, Jt as eventName, Ki as STORE_ROOT, Kn as followedBranch, Kr as sectionOf, Kt as createPrState, L as readIndexToken, Li as shorthandOf, Ln as isWorktreeHeld, Lr as LIFECYCLES, Lt as REPOSITORY_SCOPE, M as runBatch, Mi as DetachedHeadError, Mn as isBusy, Mt as storeArchitecture, N as activateQueued, Ni as isCommitReview, Nn as withReviewLock, Nt as storedScopes, O as batchIdentity, Oi as WITHHELD_REASON, On as escapeHtml$1, Or as presentedKissRunOf, Ot as loadArchitecture, P as compactQueue, Pi as resolveBase, Pn as MANAGED_ROOT, Pr as touchWorkspace, Pt as trackedFiles, Q as parseWorkspacePort, Qi as AgentCancelledError, Qn as allJobs, Qr as doneVerb, Qt as markReadForReview, Ri as git, Rn as readMarker, Rr as activityAttributes, Rt as ancestorsOf, S as beginRun, Si as wasReassessed, Sn as authorPreview, Sr as latestKissRun, St as recordRuntimeBestEffort, T as reportRun, Ti as extractJsonText, Tn as renderMarkdown, Tt as formatDuration, U as serverEntryExists, Ui as readAgentPreference, Un as findExistingReview, Ur as lifecyclePill, Ut as subjectOf, V as readServerRecord, Vi as resolveModel, Vr as lifecycleChip, Vt as announceJob, W as spawnServer, Wi as writeAgentPreference, Wn as checkCodeFreshness, Wr as offersLifecycle, Wt as categoryOf, X as MAX_WORKSPACE_PORT, Xi as detectAgents, Xn as fillFileUrlTemplate, Xr as queueStamp, Xt as markAllRead, Y as DEFAULT_WORKSPACE_PORT, Yi as agentFor$1, Yn as forgeResolver, Yr as queueRemove, Yt as listNotifications, Z as MIN_WORKSPACE_PORT, Zi as isAgentId, Zn as RUN_RECORD_RETENTION_MS, Zr as readQueue, Zt as markRead, _i as gradeScale, _n as isUnchanged, _r as groupByLineage, _t as BUILD_VERSION, a as wasBlocked, ai as processDiscussion, an as toneOf, ar as saveJob, at as settleReview, b as track, bi as reassessIn, bn as chatConversationSection, br as kissDecisionRefusal, bt as waitingHistory, c as RefreshUnavailableError, ci as explanationOf, cn as withUsageRecorded, cr as isTerminalJobPhase, d as mergeUpdateInto, di as ANALYSIS_ONLY, dn as adoptLegacyBaseline, dr as purposeOf, dt as record, ei as isQuestionOutstanding, en as pruneNotifications, er as endedAt, et as statedWorkspacePort, f as updateReview, fi as analysisRefOf, fn as prepareConversationWithin, gi as findingIn, gn as refreshPrContext, gr as followedRefName, h as liveUpdateFor, hi as findingAssessment, hn as unforeseenFailure, hr as decideKissRecommendation, ht as telemetryUploadConsent, i as liveJobsFor, ii as reviewerDispositions, in as retireNotification, ir as pruneJobResidue, it as prepareReview, j as unsupportedReason, ji as originRemote, jn as ReviewBeingDeletedError, jr as reviewedCommit, jt as repositoryKey, k as extractPullRequestLinks, ki as kissOutcome, kn as renderInlineText, kr as previousKissResult, kt as partFiles, l as cancelUpdate, li as isExplanationAction, ln as existingPaths, lr as phasesFor, m as UpdateAlreadyRunningError, mi as currentGradeIn, mn as storedConversation, mt as recordTelemetryUploadConsent, n as deleteReview, ni as questionsOutstanding, nn as readStateOf, nr as isTerminal, nt as failureOf$1, o as discardJob, oi as recommendationsOf, on as unreadAround, ot as reanalyseReview, p as askCheckout, pi as assessmentLookup, pn as saveRefresh, pr as isClaimed, qi as AGENT_IDS, qn as reviewedShaOf, qr as queueAdd, qt as createPrUpdate, r as lineageIds, ri as resolvedByConversation, rn as removeNotification, rr as loadJob, rt as observeReview, s as FETCH_TIMEOUT_MS, si as explanationActionOf, sn as unreadCount$1, sr as isLiveJob, st as runJob, t as deleteLineage, ti as issuesOutstanding, tn as readNotification, tr as fail$1, tt as writePortPreference, u as cancellableHere, ui as withExplanation, un as ASK_REREAD_CEILING_MS, ur as progressSteps, ut as readEvents, v as startKissJob, vi as isGradeFor, vn as agentEnvOf, vr as indexKeptIds, w as endRun, wi as asString, wn as GITHUB_MARKDOWN, wr as loadWorkspace, wt as describeRuntimes, x as RUN_KINDS, xi as sourcePhrase, xn as UNESTABLISHED_MOTIVATION, xr as kissDecisionsOf, xt as mapRuntimes, y as isDriving, yi as promptGrade, yn as EXPLAIN_SIMPLY_PROMPT, yr as indexReviewGroups, yt as feedbackUrl, z as clearServerRecordOwnedBy, zi as refExists, zn as removeWorktree, zr as activityLabel, zt as isArchitectureId } from "./delete_review-CYiIfV5A.js";
2
2
  import { basename, isAbsolute, join, relative, resolve } from "node:path";
3
3
  import { execFile } from "node:child_process";
4
4
  import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prreviewbuddy",
3
- "version": "0.80.2",
3
+ "version": "0.80.3",
4
4
  "description": "Understand code changes before you approve them. Local branch and pull request reviews with Claude Code, Codex or Gemini CLI.",
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://prreviewbuddy.com",