Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
d3f86e4
Add a manual unsigned build workflow
claude Oct 10, 2026
278daa0
Fix tab drag pane drops and fast-release reordering
hardbeat920 Oct 10, 2026
08c1fdc
Stabilize Linux title tab reorder test
hardbeat920 Oct 10, 2026
642d330
Stream chat replies as they arrive with cadence-timed fades
hardbeat920 Oct 10, 2026
49b4e52
Defer video source release to survive StrictMode replay
hardbeat920 Oct 10, 2026
6a5b8d1
Avoid Cursor login flow during model discovery
hardbeat920 Oct 10, 2026
efecfc9
Show Mono-launched sessions in the sessions sidebar
hardbeat920 Oct 10, 2026
b67db22
Add model controls beneath the Mono composer input
hardbeat920 Oct 11, 2026
50ef2ce
Add emoji picker button to the Mono composer
hardbeat920 Oct 11, 2026
256a570
Show context usage meter beside Mono model controls
hardbeat920 Oct 11, 2026
6bf1920
Restyle Mono composer tool buttons as icon-only with hover backdrop
hardbeat920 Oct 11, 2026
8782ef6
Remove unused Tauri emoji picker platform module
hardbeat920 Oct 11, 2026
ac35b78
Add emoji picker to the Mono composer
hardbeat920 Oct 11, 2026
0b102cb
Redesign artifact card as compact status chip
hardbeat920 Oct 11, 2026
42c058e
Show Mono's launched sessions as status cards in chat
hardbeat920 Oct 11, 2026
ab5dee1
Reveal Mono turn actions on hover in a fixed gap
hardbeat920 Oct 11, 2026
4e3664f
Smooth Mono reply reveals and recover reused sessions
hardbeat920 Oct 11, 2026
d2cbf76
Prevent Mono completion layout shifts
hardbeat920 Oct 11, 2026
629ac20
Hide ready Mono completion prompts during delivery
hardbeat920 Oct 11, 2026
558f238
Stack messages after a Mono reaction and restyle reaction badges
hardbeat920 Oct 11, 2026
889579b
Wait for the wheel to settle before measuring Mono glide interruption
hardbeat920 Oct 11, 2026
7c8badb
Move Mono mascot and color pickers into a popover
hardbeat920 Oct 12, 2026
ebd0745
Rename Mono sessions panel and add settings dialog tests
hardbeat920 Oct 12, 2026
35a4979
Merge Mono details and sessions into an overview panel
hardbeat920 Oct 12, 2026
9a8fe62
Keep Mono session and habit lists from loading blank
hardbeat920 Oct 12, 2026
fc03409
Move Mono name field under its mascot in settings
hardbeat920 Oct 12, 2026
fcb56cd
Keep Mono session and artifact cards from overflowing their container
hardbeat920 Oct 12, 2026
62de674
Show artifact cards as document icon with title
hardbeat920 Oct 12, 2026
70eda81
Extract usage chips into UsageChips and show them in Mono composer
hardbeat920 Oct 12, 2026
a3035df
Add session search, filters, and empty states to Mono overview
hardbeat920 Oct 12, 2026
40c4246
Group Mono habits by day state and page session cards
hardbeat920 Oct 12, 2026
8f8ceee
Make Mono overview open by default and sidebar sessions opt-in
hardbeat920 Oct 12, 2026
90ded7a
Widen default Mono sidebar width to 400px
hardbeat920 Oct 12, 2026
e43b380
Reopen the last open Mono on launch
hardbeat920 Oct 12, 2026
564316b
Show Mono session model as provider mark in card footer
hardbeat920 Oct 12, 2026
5948a14
Add per-repo commit tabs to the Mono changes view
hardbeat920 Oct 12, 2026
8b70dc8
Move Mono session changes into the overview's Changes tab
hardbeat920 Oct 12, 2026
8dec243
Show an empty context ring for new conversations
hardbeat920 Oct 12, 2026
1088e0e
Dot the folded Changes tab icon when it has changes
hardbeat920 Oct 12, 2026
c30dbe1
Hide handoff and second-opinion actions in Mono view
hardbeat920 Oct 12, 2026
d8cb37e
Open Mono artifacts in the overview documents tab
hardbeat920 Oct 12, 2026
95320d0
Synchronize session updates with React state
hardbeat920 Oct 12, 2026
ab2a6af
Add HTML visual artifacts rendered in a sandboxed frame
hardbeat920 Oct 12, 2026
70fb3ea
Show local images and videos linked in Mono replies
hardbeat920 Oct 12, 2026
649cead
Reset Mono overview state when switching to another Mono
hardbeat920 Oct 12, 2026
9a9df5e
Open changed files in inline diff viewer
hardbeat920 Oct 12, 2026
633730d
Release v0.13.0
hardbeat920 Oct 12, 2026
97be507
Merge upstream hardbeat920/monocode v0.13.0
claude Oct 12, 2026
7b0538b
Let the OpenCode model picker use a typed provider/model
claude Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Build

# Unsigned test builds for every desktop platform, downloadable from the run's
# artifacts. Release signing, notarization and the updater feed stay in
# release.yml, so this needs no secrets.
on:
workflow_dispatch:
pull_request:
paths:
- .github/workflows/build.yml

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: macOS (Apple Silicon)
os: macos-latest
artifact: monocode-macos-arm64
bundles: app,dmg
paths: |
target/release/bundle/dmg/*.dmg
- name: Linux
os: ubuntu-22.04
artifact: monocode-linux-x64
bundles: deb,appimage
paths: |
target/release/bundle/deb/*.deb
target/release/bundle/appimage/*.AppImage
- name: Windows
os: windows-latest
artifact: monocode-windows-x64
bundles: nsis
paths: |
target/release/bundle/nsis/*.exe
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- uses: dtolnay/rust-toolchain@stable

- name: Install Linux system dependencies
if: runner.os == 'Linux'
run: bash scripts/install-linux-deps-debian.sh

- run: npm ci

# Updater artifacts need the release signing key; test builds skip them.
- name: Build
shell: bash
run: |
set -euo pipefail
echo '{"bundle":{"createUpdaterArtifacts":false}}' > "$RUNNER_TEMP/tauri.build.conf.json"
npx tauri build --bundles "${{ matrix.bundles }}" --config "$RUNNER_TEMP/tauri.build.conf.json"
if [[ "$RUNNER_OS" == "Linux" ]]; then bash scripts/repack-appimage.sh; fi

- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: ${{ matrix.paths }}
if-no-files-found: error
49 changes: 48 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- The OpenCode model picker accepts a **custom model**: type a `provider/model` id the catalog doesn't list (for example `openrouter/qwen/qwen3-coder`) and pick **Use provider/model** under Custom model. The choice is kept as typed instead of falling back to another model, and can be favorited.

### Fixed

- OpenCode sessions in **Auto** no longer ask before every tool call. Auto now proxies OpenCode's own auto-accept (the same as `opencode --auto` and the TUI's auto accept): Monocode stops overriding OpenCode's permission rules and accepts every request they still ask about, so only what your OpenCode config denies is blocked. The access picker says so for OpenCode sessions. Supervised and Auto-accept edits stop asking before look-only tools such as grep, glob, list, and task-list updates.

## [0.13.0] - 2026-10-12

### Added

- Monos and habit runs can create **HTML visual artifacts** with `app artifacts.write` using `kind: "html"`, alongside Markdown documents. Visuals run in a sandboxed frame, follow the app's theme, fit their content height, and refresh when revised. Scripts and public HTTPS assets are supported; access to the app, network requests through fetch, nested frames, and form submissions are blocked. Clicked web links open in the user's browser.
- Mono replies display linked **local images and videos inline**, including workspace-relative media references. Images open in the file viewer when clicked, and videos have playback controls. Previews load as they approach the visible chat, reserve their space to avoid layout shifts, and fall back to the original link when a linked file cannot be displayed. Local videos stream without reading the whole file into memory; only the requested video file is added to the asset scope.
- The Mono composer has an **emoji picker** with search, categories, recent picks, and a saved skin-tone preference. Picks replace the selected text or insert at the caret and return focus to the composer. Its bundled catalog works offline across platforms and filters out emoji versions and country flags the system's font cannot draw.
- **Model and effort controls** sit beneath the Mono composer, alongside its context usage meter. Compact plan-usage chips show Claude Code, Codex, OpenCode, and Devin usage beside the attachment and emoji buttons when available.
- Sessions a Mono starts appear as **status cards beneath its replies**, showing their title, provider, project, and whether they are working, need input, are drafts, failed, stopped, or finished. Cards open the session inside the overview and remain visible when a later completion report continues the turn.
- The Mono overview's Sessions tab has **search and filters** for provider, status, time, archived sessions, and unavailable sessions. Search also matches project names. Sessions appear newest first and load another page as the list nears its end; changing the search or filters resets paging. Empty tabs and searches show guidance for the current state.
- MonoCode **reopens the last open Mono on launch** when it still exists and Monos are enabled. Closing the Mono clears that choice, and windows transferred from another window retain their own view.

### Changed

- A unified **Mono overview** replaces the separate details, sessions, artifacts, and changes sidebars, with Sessions, Documents, Habits, and Changes tabs. It opens beside the chat by default and can be toggled from the title bar. The default width is 400 pixels, and resizing allows up to 960 pixels or 62% of the window. Tabs show item counts; the folded Changes icon has an accent dot when changes are present.
- Mono settings open in a **dialog** from the title bar, with General, Soul, and Memory sections. General brings together model settings, permissions, projects, sidebar preferences, and conversation reset. Clicking the mascot opens the mascot and color popover, and the name field sits directly beneath it.
- Mono-started sessions launch without creating workspace tabs by default and open over the overview's session list, with **Back**, **Open in workspace**, and **Hide overview** controls. New launches stay out of the project sidebar unless **Show sessions in sidebar** is enabled in that Mono's settings; optional folder grouping remains available.
- The overview's **Changes** tab groups repositories into project tabs with their logo or mascot and changed-file count. Worktrees share their project's tab and have a checkout picker. Attached Git projects appear even before they have changes, and repositories remain available after committing so their work can still be pushed. Each checkout retains its commit draft when switching projects or overview tabs.
- Mono commits now use the repository's **real Git staging area**, shared with the project's Changes panel. The view lists staged and unstaged files, supports staging or unstaging files, folders, or all changes, and offers discard, list/tree views, commit, push, sync, and pull request actions. Generated messages and commits use all staged changes in the active checkout. Fully committed Mono files leave its session review; partially staged files retain their remaining review.
- Clicking a changed file opens its **inline diff editor** over the Changes list, with Back navigation. Changed images and videos open in the media preview instead.
- Documents and visuals open inside the overview's **Documents** tab. Reply cards use compact title chips with document or chart icons, and the reader keeps its title in the navigation header without repeating the title and update timestamp above the content. Copy and delete controls remain available.
- Mono session cards show their project and place the model's provider mark beside the branch in the footer, revealing the model name on hover or focus so titles have more room.
- Habits in the overview are grouped into **Up next today**, **Done today**, and **Later**, with group counts and paused habits last. When nothing is scheduled today, the remaining group is labeled Scheduled.
- Streamed replies show text **as it arrives**, with word fades adapting to the stream's cadence between 120 and 400 milliseconds. The earlier paced reveal remains available through `localStorage["monocode.pacedReveal"] = "1"`. Transcript following glides with incoming content, bounds the speed of Mono reply reveals, and respects entrance-animation settings.
- Mono turn actions appear on hover or keyboard focus in a reserved gap and stay visible while their panel is open. Reaction badges use translucent chips at the message corner, and the next user message stacks with a message answered only by a reaction. Handoff and second-opinion controls are hidden in the Mono view.
- New conversations show an **empty context ring** before usage is reported. A zero-usage ring no longer draws a progress dot.
- Regression coverage now includes Mono overview navigation, settings and popovers, memory editing, session search and paging, habit grouping, multi-repository staging and commits, HTML artifact persistence, local media references, session-state synchronization, Cursor catalog fallbacks, emoji data, and reply pacing. Chromium and WebKit tests cover the emoji picker, tab drags, Mono completion layout, and interrupted scroll glides; Linux drag fixtures mock native window controls, and wheel-interruption checks wait for scrolling to settle.

### Fixed

- Cursor model discovery uses existing CLI credentials without starting the **browser login flow**. Missing credentials or ACP failures fall back to CLI discovery and then the bundled model catalog.
- Background agent updates preserve pending **account changes, session titles, newly opened sessions, and streamed output** when several updates arrive before React renders, including under Strict Mode.
- Switching Monos clears the previous Mono's open session, document, focus, search, and filters so its overview does not leak into another conversation.
- Saved Mono session summaries and habits are cached so returning to their lists avoids a blank reload. Session lookup also finds saved sessions moved to another project; loading cards reserve their space, and unavailable sessions can be inspected through the filter.
- Reused sessions are recovered from successful **follow-up receipts** as well as launch receipts, using saved metadata or session listings. Merely listing or reading a session does not create a chat card.
- Completion reports and session cards attach without shifting Mono transcript spacing or interrupting reply fades. Ready completion prompts stay hidden while being delivered; waiting or failed prompts remain visible, including failures that need a retry.
- Manual scrolling interrupts Mono reply glides, ambiguous wheel gestures pause following, and scrolling a nested code block keeps its own scroll behavior. Following offsets no longer enlarge the transcript's scroll range, and focusing a session during the overview's slide animation no longer scrolls the surrounding panel out of place.
- Session and artifact cards fit narrow panes, truncating long titles and project labels instead of overflowing their container. Popovers opened from dialogs stay above them, and Escape closes the popover before the dialog.
- Video previews defer releasing their source until the element is actually gone, preventing Linux WebKit from stalling without metadata when React replays effects during an in-progress load.
- Opening a particular file in a multi-file diff expands that file even when the other files start folded.
- Sideways tab drags require a deliberate pull below the tab bar before targeting a pane. Fast releases in WebKit keep their reorder even when queued pointer moves report no held buttons, while missed releases still cancel the drag.

## [0.12.0] - 2026-10-10

### Added
Expand Down Expand Up @@ -1438,7 +1484,8 @@ First public release. macOS (Apple Silicon) only.
- Updater endpoint and minisign public key are injected at release time rather than committed, so forks do not inherit the maintainer's update channel.
- macOS release builds sign with `APPLE_SIGNING_IDENTITY` via a config overlay; the committed default remains ad-hoc `-` for community builds.

[Unreleased]: https://github.com/hardbeat920/monocode/compare/v0.12.0...HEAD
[Unreleased]: https://github.com/hardbeat920/monocode/compare/v0.13.0...HEAD
[0.13.0]: https://github.com/hardbeat920/monocode/compare/v0.12.0...v0.13.0
[0.12.0]: https://github.com/hardbeat920/monocode/compare/v0.11.0...v0.12.0
[0.11.0]: https://github.com/hardbeat920/monocode/compare/v0.10.0...v0.11.0
[0.10.0]: https://github.com/hardbeat920/monocode/compare/v0.9.0...v0.10.0
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ members = ["src-tauri"]
exclude = ["vendor/portable-pty"]

[workspace.package]
version = "0.12.0"
version = "0.13.0"
edition = "2021"
license = "MIT"

Expand Down
54 changes: 51 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "monocode-desktop",
"private": true,
"version": "0.12.0",
"version": "0.13.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down Expand Up @@ -60,6 +60,8 @@
"@xterm/xterm": "^6.0.0",
"codemirror": "^6.0.2",
"cuelume": "^0.2.2",
"emojibase-data": "^17.0.0",
"frimousse": "^0.4.0",
"prettier": "^3.9.6",
"react": "^19.1.0",
"react-dom": "^19.1.0",
Expand Down
Loading
Loading