feat(mac): restore transcript + assistant context menus; fix plan rows - #448
Merged
Conversation
Gate F deleted ChatContextMenu's timeline attachment with the SwiftUI renderer and left the AppKit transcript with no table menu at all, a one-item assistant menu, and AppKit's stock text menu over prose. This restores the contract surface natively: - Timeline-wide menu on the transcript table: Copy Entire Thread, Branch Session, New Session, Select Text… — thread flattening and the select-text sheet route to the SwiftUI shell through host closures; branch/create go through RendererActions. Items validate through menuNeedsUpdate. - Assistant message menu on every fragment: Copy Text (flattened plain text), Copy as Markdown (source), Open <file> with per-editor submenu + Copy Path (capability-gated for remote Macs), Open Link / Copy Link for external links. The presentation store now carries the message's resolved file targets, external links, and source on each markdown render row (MarkdownMessageChrome) — resolved when the message settles, shared copy-on-write. - The prose NSTextView augments rather than replaces AppKit's stock text menu: message items on top, Copy/Look Up/Services below. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…he active-card shortcut The plan case ran a complete uncached cmark parse synchronously inside tableView(_:viewFor:) on every realization — the exact independent parsing policy the renderer contract forbids — and lost the retired PlanCard's disclosure and ⌘⇧⏎ Implement shortcut in the port. Plans now parse through MarkdownPresentationEngine's bounded cache (keyed plan:<id>), pending plans default expanded / implemented plans default collapsed with the toggle flipping either (the disclosure header takes an expandedOverride so the chevron stays truthful), and Implement binds ⌘⇧⏎ while the plan is the active decision card. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
14 tasks
15 tasks
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.
Summary
Wave 2 of the post-Gate-F restoration: the context-menu surface the SwiftUI renderer deletion took with it, plus the plan-row contract violations.
Context menus (were entirely gone — right-click gave AppKit's stock text menu or nothing):
RendererActions(branch also selects the new thread, matching the old behavior). Items enable/disable viamenuNeedsUpdate.MarkdownMessageChrome, resolved at settle, shared COW references).Plan rows (three contract violations from the port):
tableView(_:viewFor:)per realization — now routed throughMarkdownPresentationEngine's bounded cache.expandedOverride.Carries the #447 hotfix commit (branched while main didn't compile); merges cleanly on top of it.
Area
apps/mac— native macOS appapps/windowsapps/mobileapps/serverRelease size
size:XSsize:Ssize:Msize:Lsize:XLVerification
pnpm run verify --all: 5/5 steps, exit 0 (one unrelated documented flake in the quick-chat preferences suite failed once and passes in isolation and in the gate)🤖 Generated with Claude Code