Skip to content

Sync upstream v0.13.0, add custom OpenCode models and an unsigned build workflow - #2

Open
blessedagent52 wants to merge 49 commits into
mainfrom
claude/fix-opencode-auto-permission-uoy68z
Open

blessedagent52 wants to merge 49 commits into
mainfrom
claude/fix-opencode-auto-permission-uoy68z

Conversation

@blessedagent52

@blessedagent52 blessedagent52 commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Requested by John · project thread

What changed

  1. Upstream sync: merges the 46 commits hardbeat920/monocode landed since v0.12.0, up to its v0.13.0 release (Mono overview, HTML visual artifacts, inline media in Mono replies, emoji picker, real Git staging in Mono changes, and more; see CHANGELOG.md). Upstream has not touched the OpenCode permission code, so our Auto fix stays as is.
  2. Custom OpenCode models: in the model picker's OpenCode tab, typing a provider/model id the catalog doesn't list (e.g. openrouter/qwen/qwen3-coder) shows a Use provider/model row under "Custom model". The choice is kept as typed instead of being prefix-matched onto another model or replaced by the default, and favorited custom models stay in Favorites. With no match and no slash, the empty state says to type provider/model.
  3. Build workflow: .github/workflows/build.yml produces unsigned test builds (macOS Apple Silicon .dmg, Linux .deb and .AppImage, Windows NSIS installer) as run artifacts. It runs from the Actions tab (Run workflow) and on PRs that change the workflow file.

Why

The fork was one release behind upstream. Some OpenCode models (custom providers, new releases) don't appear in the CLI catalog, so they couldn't be picked at all. And release.yml only runs on version tags with Apple, updater and R2 secrets this repo doesn't have, so there was no way to get a build from GitHub Actions.

How: the sync is a merge commit (no history rewrite). Two conflicts: CHANGELOG.md keeps our Unreleased notes above 0.13.0, and MonoDetails.tsx was deleted upstream, so its Permissions picker's OpenCode-aware hint moved to the new MonoSettingsDialog.tsx. Custom models go through a new customOpenCodeModel() in models.ts, used by resolveModel and the picker; OpenCode already sends the native provider/model id from the model key, so no harness change was needed. The build workflow disables createUpdaterArtifacts via a --config override and uses the default ad-hoc macOS signature.

UI

New "Custom model" row in the OpenCode tab of the model picker while searching for a provider/model id; upstream's v0.13.0 UI changes.

Checklist

  • I ran npm run check (web part: vitest run 5215 passed, tsc --noEmit clean; Rust is covered by CI)
  • This PR is small and focused (it carries an upstream sync)
  • I did not mix unrelated changes

🤖 Generated with Claude Code

https://claude.ai/code/session_014cSY6H6y99xe99WMeG5eNE

Builds macOS (Apple Silicon) dmg, Linux deb and AppImage, and a Windows
NSIS installer without release secrets, and uploads them as run artifacts.
Runs on workflow_dispatch and on pull requests that change the workflow.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014cSY6H6y99xe99WMeG5eNE
@blessedagent52 blessedagent52 self-assigned this Oct 10, 2026
- Require a deliberate pull below the tab bar before a dragged tab targets a pane, so sideways drags that sag no longer drop onto panes
- Keep a fast drag's drop when WebKit reports no buttons on the last moves before pointerup, using a short grace timer instead of cancelling immediately
- Add browser specs and a fixture covering slow and fast drags, back-to-back drags, re-renders during drag, and pane placement

Copy link
Copy Markdown
Owner Author

The browser check failed on one WebKit test: tests/browser/video-preview.spec.ts › "file preview decodes, plays and seeks a video, then pauses on tab change" timed out waiting for video metadata ("Video should load metadata without a media error"). The other 13 browser tests passed.

This PR only adds .github/workflows/build.yml, which never runs during CI's browser job, so the failure isn't caused by this change. This is also the first CI run this fork has ever had, so there's no green baseline on main to compare against, and no fix exists yet. The test exercises WebKit's media decoding on the runner, which this PR doesn't touch. I'll re-run the failed job once when the rest of the CI run finishes.


Generated by Claude Code

hardbeat920 and others added 26 commits October 10, 2026 18:01
- Mock native window IPC and exercise Linux title bar controls
- Use a wider viewport and responsive fixture sizing
- Show streamed text on arrival by default; the paced word-at-a-time reveal is now opt-in via localStorage["monocode.pacedReveal"] = "1".
- Fade length follows the average gap between bursts (120-400ms).
- Follow bottom growth with a velocity spring that feeds forward the stream's speed, so updates glide instead of jolting.
- Respect entrance animation settings and hold follow motion during an ambiguous wheel gesture.
- Don't scroll a nested code block's wheel input out of the transcript follow state.
- Clip the transcript content so in-flight follow offsets don't affect scrollHeight.
- Defer clearing the video src in the effect cleanup so a StrictMode replay no longer aborts an in-flight load
- Cancel the pending release timer when the effect runs again
- Update the video tests: use fake timers for the unmount case and assert the source is not reloaded on replay
- Add coverage for ACP, CLI, and bundled catalog fallbacks
- Preserve existing credentials without triggering browser authentication
- Opening a launched session slides it over the Mono's session list, with Back, Open in workspace, and Hide controls
- Sessions a Mono launches no longer open as workspace tabs unless placed beside an open pane
- Quick launch takes an openTab flag so a session can start without a tab
- PanelStack resets scroll on its clip box so an offscreen focus can't fight the slide

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Mono composer can show an optional `controls` row under the input, with attach on the left and the model picker and effort pills on the right
- ModelPicker and ModelControlPills gain a quiet `text` variant for that row
- SessionPane passes model controls into the Mono composer
- Composer guards against a missing measure element and only refits on real width changes
- Show an emoji button beside Attach in the Mono composer on macOS Tauri builds
- Add show_emoji_picker command that opens the system character palette
- Keep focus in the field so picks are typed into it

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Render ContextMeter for the session's context usage under the model pills in the Mono composer
- Mono threads rotate on their own, so no compact action is needed here

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Replace the attach button's "Add" label with a plus icon and share one tool-button style with the emoji button
- Give the model picker text controls and the context meter the same hover backdrop
- Update the emoji picker test to check the attach button by its aria-label

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Delete src/platform/tauri/emojiPicker.ts
- Its canShowEmojiPicker and showEmojiPicker helpers are no longer referenced by this change
- Replace the system character palette button with an in-app emoji picker
- Picker is lazy-loaded with bundled Emojibase data, so it works offline
- Adds search, recents, categories, and skin-tone selection
- Picks insert at the field's cursor position
- Removes the now-unused Tauri show_emoji_picker command and macOS palette code
- Show a green check, truncated title, and kind label in a pill
- Drop the multi-line layout and the "Open ..." footer
- Add a title tooltip with the open action
- Replace the footer "Show sessions" button with a card per launched session
- Cards show live state (working, needs input, draft, failed, stopped, done) and project
- Clicking a card opens that session in the sidebar; the open card is highlighted
- Cards stay under the reply that started them, even when the Mono reports back later
- Turn actions under a Mono's turn now sit in a fixed gap and show on hover, matching sent messages, so revealing them doesn't shift layout
- Actions stay visible while the panel is open or focus is inside
- Hover-capable fine-pointer devices only; reduced-motion disables the fade
- Recover reused sessions from successful follow-up receipts
- Bound Mono reply scroll speed while preserving full movement
- Add unit and browser coverage for session recovery and scrolling
- Preserve transcript spacing while completion reports attach
- Add browser coverage for short and scrolling chats
- Keep failed completion prompts visible for retry
- Add coverage for queue visibility and transcript scroll stability
- Stack the next user message onto a turn that ended in only a Mono reaction
- Restyle reaction badges as frosted chips over the bubble corner

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The browser test read scrollTop while WebKit could still be landing the
wheel's last pixels, so it flaked by 2-3px in CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Make the Mono's face a button that opens the mascot and color pickers in a popover
- Lay out the popover's mascots and swatches in five larger columns
- Add a size option to ColorSwatchRow for the larger swatches
- Test that the popover opens from the face and closes on Escape

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Rename MonoSessionsPanel to MonoSessionList (no content changes)
- Cover settings sections, mascot and color popover, reset confirmation, and permission mode picker

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Replace the details and sessions sidebars with one overview panel that has Sessions and Documents tabs
- Move Mono settings into a dialog opened from the title bar
- Add an Overview toggle and settings button to the title bar
- Show the project name on session cards when sessions span several projects
- Add a temporary debugMonoScroll tracer (remove before merging)
- Cache saved session summaries and habits per Mono so switching back shows them immediately
- Hold a loading session card's place invisibly instead of showing a "Loading…" line
- Render nothing while habits load instead of a "Loading…" line
- Centre the settings dialog close button in the section header
- Place the name field beneath the mascot and color button in General, replacing the Name row and its hint caption
- Restyle the name input as a centered, borderless field with hover and focus backgrounds
- Let the overview sidebar grow to 960px or 62% of the window, and update its comment

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Cap card max width with max-w-[min(24rem,100%)] so narrow containers shrink the card
- In LaunchedSessionCard, let the project pill shrink and truncate, with the title giving way first
- Make the harness icon non-shrinking inside the pill
- Replace the done check icon and kind chip with a document icon
- Make the card a bit taller (min-height 38px) to match session cards
- Update the doc comment to explain the icon choice
hardbeat920 and others added 20 commits October 12, 2026 07:49
- Split UsageFooter so the provider usage chips are exported as UsageChips, reusable outside the footer
- UsageChips takes an accountPicker flag to hide account switching
- Session pane's Mono composer now shows the plan usage chips beside attach and emoji (new tools slot in MonoComposer)
- Add monoUsageProviders helper to map a harness to its usage providers
- Add a search bar and filter menu to the Mono sessions tab, matching the sidebar's filters
- Search also matches the project name shown on each session card
- Show a "no sessions match" state when search or filters hide everything
- Replace plain empty-tab text with icon and guidance for sessions, habits, and documents
- Extract HabitsList empty content into a prop so the Mono overview can pass its own
- Split the habits overview into Up next today, Done today, and Later, with paused habits last
- Mount Mono session cards a page at a time and load the next as the list nears its end
- Reset session paging when the search or filters change

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Mono overview now opens beside the chat by default
- Started sessions stay out of the project sidebar unless a Mono turns the setting on
- Composer usage chips get a compact variant for Mono tool buttons
- Update settings and agent-app tests for the new sidebar default
- Add DEFAULT_WIDTH (400) and use it as the default and initial width for non-reader sidebars
- Previously the default fell back to MIN_WIDTH (340)
- Persist the open Mono id in localStorage when opened and clear it on close
- On startup, reopen the saved Mono if it still exists; skip for moved windows
- Clear the saved id if the Mono no longer exists
- Add modelInFooter option to SessionCard: model shows as provider icon beside branch, name slides out on hover/focus
- Use it for Mono overview and sidebar session cards so titles keep the full row
- Keep the model text in the title row for other cards
- Add gap and padding tweaks in MonoComposer and ModelPicker text controls
- Group a Mono's session changes by the repository that holds them
- Show one tab per project with its logo or mascot, file count, and branch
- Keep each repo's commit draft and file selection when switching tabs
- Commit, push, or generate a message for only the selected repo
- Mark files outside Git as having nothing to commit
- Replace the separate MonoChangesPanel with a Changes tab in the Mono overview
- Stage, unstage, and commit per repository, with worktrees grouped under their project
- Generate commit messages from the active repository's staged changes

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Render a bare ring when a conversation has no messages yet
- Skip the progress arc at zero so the round cap no longer draws a dot
- Show an accent dot on the Mono overview's Changes icon while the tab is folded and has changes
- Cut a matching mask into the icon so the dot sits cleanly against it
- Cover dot visibility in the overview tab tests

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- Pass undefined for onSecondOpinion and onHandoff in the Workspace Mono panel
- Mono runs the session, so these actions are kept out of that view
- Remove the standalone artifact sidebar
- Simplify Mono sidebar sizing and update reader tests
- Prevent stale session snapshots during concurrent harness flushes
- Preserve pending account changes, titles, and streamed output
- Add regression coverage including Strict Mode
- Add an html artifact kind served via a monoartifact URI scheme with a strict CSP
- Render html artifacts in a sandboxed iframe that follows the app theme and fits its height
- Open http(s) links from visuals in the user's browser
- Show a chart icon for visuals and let Mono artifacts accept the html kind
- Drop the duplicate title and timestamp header from the artifact reader
- Mono chats render local image and video links inline with playback controls
- Local video streams via the asset protocol scope, limited to video containers
- Add allow_video_stream command and tests for the extension check
- Clear shown session, focus, and overview document when the open Mono changes
- Keeps one Mono's open overview from leaking into another Mono's view
- Add back navigation and media previews for changed files
- Simplify file-open handling in project commit view
Brings in the 46 upstream commits since v0.12.0. Conflicts: CHANGELOG keeps
our Unreleased OpenCode fix above the 0.13.0 notes; MonoDetails.tsx was
removed upstream, so its Permissions picker's OpenCode hint moves to the
new MonoSettingsDialog.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014cSY6H6y99xe99WMeG5eNE
@blessedagent52 blessedagent52 changed the title Add a manual unsigned build workflow Sync upstream v0.13.0 and add a manual unsigned build workflow Oct 12, 2026
Some OpenCode models (custom providers, fresh releases) are missing from
the CLI catalog. Typing a provider/model id in the OpenCode tab now offers
a "Use provider/model" row under Custom model, and resolveModel keeps such
an id as typed instead of prefix-matching it onto another model or the
default. Favorited custom models stay in Favorites.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014cSY6H6y99xe99WMeG5eNE
@blessedagent52 blessedagent52 changed the title Sync upstream v0.13.0 and add a manual unsigned build workflow Sync upstream v0.13.0, add custom OpenCode models and an unsigned build workflow Oct 12, 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.

3 participants