Skip to content

feat(extensions): add four-edge panes and current-line paint - #710

Open
benvinegar wants to merge 7 commits into
mainfrom
feat/split-line-lens
Open

feat(extensions): add four-edge panes and current-line paint#710
benvinegar wants to merge 7 commits into
mainfrom
feat/split-line-lens

Conversation

@benvinegar

@benvinegar benvinegar commented Aug 11, 2026

Copy link
Copy Markdown
Member

Summary

  • generalize extension sidebars into host-owned panes dockable on the left, right, top, or bottom
  • use an explicit width contract for left/right panes and height contract for top/bottom panes
  • add opt-in opaque current-line paint for extension panes without exposing renderer internals
  • preserve existing sidebar APIs as deprecated aliases while keeping pane geometry outside the review stream
  • migrate bundled file navigation to the public pane API and add installable pane-layout and current-line-lens examples
  • remove product-level line-lens config, CLI flags, menu commands, and bundled registration so the lens remains example-only

Closes #638.

Testing

  • bun run format
  • bun run typecheck
  • bun run lint
  • bun run check:docs
  • bun run build:npm
  • bun run check:pack
  • bun run website:build
  • bun test ./src ./packages ./test/cli ./test/session — 1,956 passed, 9 skipped
  • bun run test:integration — 105 passed
  • bun run test:tty-smoke — 9 passed
  • real PTY coverage loads the current-line lens from examples/extensions/current-line-lens/

This PR description was generated by Pi using gpt-5.6-sol

@vercel

vercel Bot commented Aug 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
hunk-web Ready Ready Preview Aug 11, 2026 5:08pm

Request Review

@benvinegar
benvinegar marked this pull request as ready for review August 11, 2026 15:38
@benvinegar

Copy link
Copy Markdown
Member Author

@greptile-ai review

@benvinegar

Copy link
Copy Markdown
Member Author

@greptile-apps review

This comment was generated by Pi using gpt-5.6-sol

@greptile-apps

greptile-apps Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR generalizes extension sidebars into host-planned panes on all four terminal edges and adds an optional current-line lens using the public pane API.

  • Adds API-v4 pane registration, sizing, availability, replacement, compatibility aliases, and host-side failure containment.
  • Introduces four-edge layout planning, resizing, current-line painting, and bundled files/lens panes.
  • Updates configuration, commands, examples, package checks, documentation, and extensive unit and TTY coverage.

Confidence Score: 5/5

The PR appears safe to merge; no concrete blocking or independently actionable non-blocking issues remain.

The pane planner preserves minimum review bounds, extension failures are contained with replacement fallback, and current-line paint is derived from and invalidated with the authoritative row plan.

Important Files Changed

Filename Overview
src/ui/lib/extensionPanes.ts Plans exact four-edge pane and divider rectangles, preserving minimum review dimensions and containing availability failures.
src/ui/App.tsx Integrates pane state, layout, resizing, quarantine fallback, current-line paint flow, commands, menus, and persisted lens preferences.
src/ui/components/panes/ExtensionPane.tsx Mounts pane components in host-owned rectangles with guarded actions, memoized props, and registration-scoped error containment.
src/ui/components/panes/DiffPane.tsx Resolves current-line paint from the accepted split-row plan without adding pane geometry to the review stream.
src/ui/lib/extensionCurrentLine.tsx Converts the selected split row into an immutable, clipped old/new painter for opted-in panes.
src/extension-api/types.ts Publishes the API-v4 pane contracts while retaining deprecated sidebar aliases.
src/extensions/runExtension.ts Adds pane registration and compatibility normalization to the extension factory lifecycle and rollback behavior.
src/extensions/apply.ts Resolves registered panes into the runtime registry with stable extension-qualified identities.
src/extensions/default/ui/line-lens/index.tsx Registers the bundled fixed-height bottom lens using current-line availability and opaque rendering.
src/core/config.ts Adds line-lens defaults, layered configuration resolution, and persisted preference serialization.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  R[Extension registrations] --> A[Registry and apply path]
  A --> S[Session pane model]
  S --> P[Four-edge rectangle planner]
  P --> L[Left and right panes]
  P --> H[Top and bottom panes]
  P --> D[Residual DiffPane bounds]
  D --> C[Accepted current-line row plan]
  C --> O[Opaque current-line painter]
  O --> H
Loading

Reviews (1): Last reviewed commit: "test(pty): wait for complete resize fram..." | Re-trigger Greptile

@benvinegar benvinegar changed the title feat(extensions): add four-edge panes and current-line lens feat(extensions): add four-edge panes and current-line paint Aug 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: "lens" view for selected line in split diff

1 participant