Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The prior fix (6be1c60) gave the inline comment zones a reconcile-in-place controller, but two gaps remained that still interrupted an open inline editor on every poll: 1. useDiffComments called setComments() unconditionally, so an unchanged poll still produced a fresh comments array. That churned the mentionCandidates memo, whose identity change re-ran useDraftZones. Bail on structural equality (reuse sameCommentList, now extracted to a shared commentEquality module) so an unchanged poll keeps the old reference and downstream memos stay stable — mirroring what the activity view already does. 2. useDraftZones used the one-shot mountInlineZones, so a real drafts/ comments change tore down and rebuilt every DraftZone root, dropping an open draft editor's edit mode / focus / caret. Give it the same split structural/content effect + persistent createInlineZones controller as useCommentZones, reconciling draft zones by (side, line) key. A surviving draft re-renders in place (DraftZoneList keys by draft id); only a removed draft (deleted / published / file switch) unmounts and runs its cancel cleanup. The now-unused one-shot mountInlineZones wrapper is removed. The activity timeline already bailed via sameCommentList and needs no change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…o-degrade `renderSideBySide` threaded through the diff view is the toolbar *intent*, not the mode Monaco actually renders. When the pane is too narrow Monaco auto-degrades side-by-side → inline (useInlineViewWhenSpaceIsLimited) while the intent stays true, so old-side (base) items get routed to the original editor Monaco has hidden. A published old-side inline comment then had no visible position, and its glyph dot / overview tick vanished too. Introduce a single source of truth for the *actual* mode (useActualRenderSideBySide, reading Monaco's `.monaco-diff-editor.side-by-side` class reactively, the pattern useDiffOverviewMarks already used) and feed it to every consumer that positions by editor side: - DiffView passes the actual mode to useCommentZones / useDraftZones / useLineCommentAdder / useSelectionCapture (was the raw intent). - useCommentZones remaps old-side glyph/overview decorations onto the modified editor when actually inline (mirroring the zone-body routing in computeDesired) — this also fixes old-side markers in explicitly-chosen unified, a latent bug. - useDiffOverviewMarks reuses the shared isActualSideBySide helper. Also fix old-side anchor reveal, which was broken independently: the nav anchor dropped `side` (App/PrPanel/PublishReviewModal/notification) and useDiffNav hardcoded side:'new' with no old→new remap. Thread `side` through the anchor (incl. the notification:activate IPC event) and, at reveal time, read the live actual mode: an old-side target reveals on the original editor only when it is genuinely visible, otherwise remaps the old line onto the modified editor. The cross-file search jump reuses the same path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…prompt On macOS the app popped a "would like to access Apple Music, your music and video activity, and your media library" prompt on launch. It's not from packaging — no music entitlement and no NSAppleMusicUsageDescription are declared. It's runtime: Chromium's macOS "Now Playing" / media-session integration queries the MediaPlayer framework, which triggers the media library permission. The app plays no media and exposes no now-playing controls, so the permission is unexpected. Disable the MediaSessionService and HardwareMediaKeyHandling features (mac startup, before app.whenReady()) so Chromium never touches the media library. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix: inline comment continuity, unified-mode comment positioning, and macOS media prompt
… advances When the PR's head commit moves past the commit the most recent agent run reviewed, the run timeline now shows a sawtooth "commit divider" at the bottom labelled with the new head's short SHA — signalling that the reviews above are based on stale code. It appears as soon as the code changes, whether or not a new run has been started against it, and is suppressed while a run is active (that run is already processing the current head). - Stamp the PR head SHA (pr.sourceRef.sha) onto each run at start (ReviewRun. headSha, threaded through StartReviewRunInput / startReviewRun / the executor) as the baseline to compare the live head against. Runs predating this field have no headSha and are not used as a baseline. - ChatPane derives staleHeadSha (live head vs the latest completed run's headSha) and renders a single CommitDivider below the run list. - CommitDivider is a masked-SVG zigzag rule flanking a commit-id chip (reusing the scope-badge chip vocabulary + CommitIcon); theme-aware via a token color. - i18n: chatPane.commitDividerTitle in all four locales. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The planning/orchestration agent replays the whole prior conversation into each turn, which can reference code from before a new commit landed. Give it soft awareness of that boundary without dropping any history: stamp the PR head SHA (pr.sourceRef.sha) onto each recorded conversation message, and in buildConversationContext interleave a "PR code updated to commit X" marker wherever the head differs between consecutive kept messages, plus a trailing marker when the current turn's head has advanced past the newest message. Mirrors the head SHA already stamped on runs (same pr.sourceRef.sha basis as the UI commit divider), so seeing the divider in the UI corresponds to the marker in the agent's context. Marker is an internal prompt artifact (English, no i18n) and, like the rest of the conversation history, is never passed through to pr-agent tools. Messages predating the field have no headSha and produce no marker. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(agent): commit divider for stale reviews + commit-aware planning context
Bare F5 used to kick off an auto review, which was easy to trigger by accident. Rework the PR refresh + shortcuts around a single-PR refresh: - F5 now refreshes the currently selected PR; Ctrl+F5 runs auto review (literal Ctrl on every platform — ⌘F5 collides with macOS VoiceOver; formatChord gains a `ctrl` flag so the palette hint shows ⌃ on mac). - Add a neutral (non-accent) icon refresh button to the right of the PR header's "open in browser" button; align-self:stretch matches its height. - Add a "Refresh PR" command palette entry (shown only when a PR is selected), bound to bare F5. Refresh targets a SINGLE PR, not a whole-poller tick: new prs:refreshOne IPC + refreshOnePr controller re-fetch just this PR via getSinglePullRequest, recompute localStatus from the current user's reviewer status (same rule as the poll), persist its meta, and invalidateCommentsCache (comments:changed → comments/inline-diff refetch); if the head sha advanced, best-effort sync the mirror for the diff. The one network call is this PR's fetch — usePullRequests .refreshPr then reloads the list locally (no poll of other PRs). The header button, F5, and the command all wire to it. i18n in all four locales. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(pr): F5 refreshes the current PR; move auto review to Ctrl+F5
…n hover Two polish fixes for the run-timeline commit divider: - The chip's commit icon and short sha were flush and vertically misaligned (the chip mixin sets no gap). Add a small gap and make the svg a block so it aligns to the sha's line box. - The hover tooltip showed a generic "code changed" string. Show the new head commit's actual message instead (resolved via diff:listCommits — the head is the PR's newest introduced commit; main-cached), falling back to the short sha. This is more meaningful and removes the chatPane.commitDividerTitle i18n key from all four locales. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The bottom "stale head" divider vanished once a run was executed against the new commit (head then equalled the last run's headSha, so nothing was "stale"). Mark every point where the reviewed commit changes instead: - a divider before a run whose headSha differs from the previous run's — a durable boundary between the old-commit runs above and the new-commit runs below (so it no longer disappears after reviewing the new code); - a trailing bottom divider only while the head has advanced past the last run and no run against it exists yet (new commit not reviewed, incl. while a run is in flight). Drops the "suppress while a run is active" rule so it never flickers away. Tooltip messages come from a single sha→message map built from diff:listCommits, so all dividers resolve their own commit message. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(chat): commit divider polish + persistent boundary
Align assets/README.md with the other developer-facing READMEs (cli / website / docs), which are English single-language per the docs conventions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Set the app version to 0.11.2 and record the 0.11.2 changelog (English + Chinese): the stale-review commit divider, commit-aware planning context, single-PR refresh (F5 / header button / command) with auto review moved to Ctrl+F5, plus fixes for inline-comment editing continuity, unified-degrade comment positioning, and the macOS media-library prompt. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 0.11.2.
Rolls up everything merged into
devsince v0.11.1:Version set to 0.11.2; CHANGELOG (EN + ZH) updated. Tagging
v0.11.2on master after merge triggers the release build.