Merge shuvcode-dev: v1.1.26 sync + fork refinements#315
Merged
shuv1337 merged 193 commits intointegrationfrom Jan 20, 2026
Merged
Merge shuvcode-dev: v1.1.26 sync + fork refinements#315shuv1337 merged 193 commits intointegrationfrom
shuv1337 merged 193 commits intointegrationfrom
Conversation
…in use to prevent mouse events firing (anomalyco#9449)
Resolved conflicts: - Deleted upstream files (update-nix-hashes.yml, nix/bundle.ts, nix/scripts/bun-build.ts, session-message-rail.css) - Accepted upstream for stats/nix/docs (STATS.md, nix/hashes.json, flake.lock, README.md) - Preserved fork branding (shuvcode ASCII logo, share.shuv.ai URLs) - Preserved PWA customizations (mobile viewport, prompt-dock) - Preserved TUI customizations (tips.tsx with shuv.ai references) - Preserved desktop features (index.html with shuvcode title, __OPENCODE__ init) - Updated Editor.open to handle Result type - Added slashes() method to command dialog for autocomplete - Removed SessionMessageRail (upstream removed this feature) - Fixed ListProps usage (onActiveChange -> onMove) - Fixed duplicate property in layout.tsx
- Rename onActiveChange to onMove in font/theme pickers - Fix duplicate 'opened' property in layout context - Update Editor.open to use result object pattern (result?.ok) - Add slashes() method to dialog-command for slash filtering - Remove SessionMessageRail from session page - Update enterprise share page to shuvcode branding
Collaborator
Author
|
Closing to clean up commit history from v1.1.26 merge |
Prevents accidental releases from feature branches by adding branch check to the workflow_dispatch condition. Only integration branch can trigger snapshot releases manually.
| const value = text | ||
| const result = await Editor.open({ value, renderer }) | ||
| if (!result.ok) return | ||
| if (!result?.ok) return |
There was a problem hiding this comment.
style: Editor.open() always returns a Result object (never undefined), so optional chaining is unnecessary here
Suggested change
| if (!result?.ok) return | |
| if (!result.ok) return |
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
Line: 251:251
Comment:
**style:** `Editor.open()` always returns a `Result` object (never undefined), so optional chaining is unnecessary here
```suggestion
if (!result.ok) return
```
How can I resolve this? If you propose a fix, please make it concise.| const result = await Editor.open({ value: transcript, renderer }) | ||
| if (result.ok) { | ||
| // User edited the file, save the changes | ||
| if (result?.ok) { |
There was a problem hiding this comment.
style: Editor.open() always returns a Result object (never undefined), so optional chaining is unnecessary
Suggested change
| if (result?.ok) { | |
| if (result.ok) { |
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
Line: 839:839
Comment:
**style:** `Editor.open()` always returns a `Result` object (never undefined), so optional chaining is unnecessary
```suggestion
if (result.ok) {
```
How can I resolve this? If you propose a fix, please make it concise.Apply Greptile review suggestion - Editor.open() always returns a Result object, so optional chaining is unnecessary.
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
Merge v1.1.26 upstream sync and fork-specific refinements into integration branch.
Changes
Upstream Sync (v1.1.26)
Fork Refinements
Breaking Changes
None
Testing
bun turbo typecheck)Greptile Summary
This PR successfully merges v1.1.26 upstream sync with fork-specific refinements for the shuvcode fork. The changes integrate substantial upstream improvements including the new
apply_patchtool (replacingpatchfor OpenAI models), scheduler infrastructure, worktree management, E2E testing with Playwright, and numerous UX enhancements.Key Changes:
onActiveChangetoonMovepattern via newslashes()method in dialog-command; fixed duplicateterminalOpened/reviewPanelOpenedproperties in layout context by moving to global store; removed SessionMessageRail component; updated enterprise branding to shuvcodeapply_patchtool with comprehensive hunk parsing and permission validation; scheduler module for task orchestration; worktree management for workspace operations; Playwright E2E test suite; vim-style j/k scrolling; GitHub Copilot GPT-5+ routing; OSC 52 clipboard support; batch tool limit increased to 25result?.okpattern when checkingEditor.open()return value, butEditor.open()always returns aResultobject (never undefined), making optional chaining unnecessary though functionally safeThe upstream merge appears clean with no conflicts, and the fork-specific changes are minimal and focused. All changes align with the codebase architecture patterns (SolidJS reactive patterns, Bun runtime, Result types).
Confidence Score: 5/5
Important Files Changed
Sequence Diagram
sequenceDiagram participant User participant TUI as TUI/Session participant Autocomplete participant DialogCommand participant Editor participant ApplyPatch as apply_patch Tool participant Scheduler participant Worktree Note over User,Worktree: Fork Refinements: Autocomplete API Changes User->>TUI: Type "/" to trigger autocomplete TUI->>Autocomplete: Show slash commands Autocomplete->>DialogCommand: slashes() - get slash commands DialogCommand-->>Autocomplete: Return filtered slash options Autocomplete->>Autocomplete: Track input mode (keyboard/mouse) Autocomplete-->>User: Display options with ctrl+p/n navigation Note over User,Worktree: Fork Refinements: Editor Integration User->>TUI: Trigger /editor command TUI->>Editor: open({ value, renderer }) Editor->>Editor: Create temp file, spawn $EDITOR Editor-->>TUI: Return Result (never undefined) TUI->>TUI: Check result?.ok (unnecessary optional chaining) TUI-->>User: Update prompt with edited content Note over User,Worktree: Upstream Sync: apply_patch Tool User->>TUI: Request code changes TUI->>ApplyPatch: execute({ patchText }) ApplyPatch->>ApplyPatch: Parse patch hunks ApplyPatch->>ApplyPatch: Validate file paths & permissions ApplyPatch->>ApplyPatch: Apply changes (add/update/delete/move) ApplyPatch-->>TUI: Return changed files TUI-->>User: Display results Note over User,Worktree: Upstream Sync: Scheduler & Worktree TUI->>Scheduler: register({ id, interval, run }) Scheduler->>Scheduler: Create timer (instance/global scope) loop Every interval Scheduler->>Scheduler: run() task end User->>Worktree: Reset/delete workspace Worktree->>Worktree: Manage git worktree operations Worktree-->>User: Workspace updated