Commit Graph
343 Commits
Author SHA1 Message Date
Bohdan Triapitsyn 56e1eb5416 Merge main 2026-08-28 01:25:37 +03:00
Bohdan Triapitsyn b25b64c000 Merge pull request #3146 from alexandrereyes/feat/undo-subagent
feat(ui): cascade undo and redo to subagents
2026-08-28 01:23:46 +03:00
Bohdan Triapitsyn 0596af5761 Merge pull request #3000 from mpeter/fix/anthropic-small-model-base-url
fix(small-model): route anthropic provider through configured baseURL
2026-08-28 01:23:22 +03:00
Bohdan Triapitsyn 87eacc4c5e Merge main 2026-08-27 23:17:06 +03:00
Bohdan Triapitsyn 8663411fdd Merge main 2026-08-27 23:16:29 +03:00
Bohdan Triapitsyn af1706c6a7 Merge pull request #2995 from bashrusakh/fix/2763-opencode-binary
fix(server): keep env-provided OPENCODE_BINARY when settings clear the override
2026-08-27 23:14:10 +03:00
gaojunran d495771cee fix(ui): raise file open line limit to 20k lines 2026-08-27 12:56:56 +08:00
Ayoub Achour 61741e58c4 fix(tunnels): update cloudflared download link 2026-08-27 04:10:09 +01:00
Alexandre Reyes Martins 56cf45115f feat(ui): cascade undo and redo to subagents 2026-08-27 03:00:30 +00:00
Bohdan Triapitsyn 4b0fcfaa7b fix(desktop): boot relay-paired default hosts without the recovery wall
The startup path probed a relay host's stored direct URL — often the
pairing creator's own loopback — and any failure landed on the Remote
Server Unreachable screen before the renderer's relay restore could run.
A relay-capable default host now boots to main on the local substrate for
any failed direct probe (unreachable, wrong-service, incompatible), skips
the 10s second probe, and lets the renderer's existing restore pick
direct-or-relay.
2026-08-26 23:10:37 +03:00
Bohdan Triapitsyn 25be1985ef chore(ui): remove code orphaned by the shortcut and plan-action cleanups
The eslint pass in release:prepare caught what the package-scoped checks
did not: Header's handleOpenContextPlan and servicesTabs lost their last
callers with the removed shortcuts, the settings-synced listeners no
longer need the DesktopSettings import, and the store's openContextPlan
action itself went unused once the plan surface was reachable only through
the digit switcher and the rail.
2026-08-26 20:40:18 +03:00
Bohdan Triapitsyn 6770bc3717 fix(browser): keep the panel closed when an agent opens a page
The agent's browser.open used to force the context panel open and steal
the active surface, which read as panels opening by themselves. Tab
upserts now take a reveal option: the agent's opener passes reveal: false,
so the tab mounts invisibly (panes are kept alive regardless of
visibility, so agent control still works) while the panel and the active
tab stay exactly as the user left them. Manual opens are unchanged.
2026-08-26 20:32:12 +03:00
Bohdan Triapitsyn 11d3c0d51e refactor(chat): drop the Aborted banner from the status surfaces
Aborting a run now just ends it quietly: the status chip and the composer
bar no longer flash an Aborted notice, and the indicator state machine and
its timer are gone from the composer. Acknowledging the session abort
record stays — it is what lets the working chip resume on the next run.
2026-08-26 20:24:27 +03:00
Bohdan Triapitsyn defd0719b7 docs: clarify changelog highlight ordering guidance 2026-08-26 19:58:32 +03:00
Bohdan Triapitsyn 340738a33f chore: update changelog entries for chat shortcut and comment text 2026-08-26 19:49:17 +03:00
Bohdan Triapitsyn c4df01f707 chore(quota): drop the Command Code usage provider
Command Code's official API has no usage endpoints; the old usage source
was the unofficial studio API reached through a now-archived plugin, so
the tile could only ever fail for officially configured users. Removed
across server, shared UI, and the VS Code extension; the provider logo
fallback stays — it serves the model picker, not usage.
2026-08-26 19:29:04 +03:00
Bohdan Triapitsyn 4020226984 docs: tighten changelog bullets and normalize contributor credits 2026-08-26 19:11:33 +03:00
Bohdan Triapitsyn fc21ad5e9c docs: headline session tabs instead of the auth-expiry fix 2026-08-26 18:59:52 +03:00
Bohdan Triapitsyn 3f38624850 docs: reorder and tighten the unreleased changelog 2026-08-26 18:58:20 +03:00
Bohdan Triapitsyn b11bace75b docs: add changelog entries for the rail configurator and chat fixes 2026-08-26 18:48:10 +03:00
Bohdan Triapitsyn edec60faff fix(github): stop fork remotes from claiming the local branch's PR badge
PR-status source candidates were every configured remote, so a checkout
carrying contributor forks matched a fork's closed PR whose head merely
shared the branch name — a fork's 'main' surfaced on the local main in the
git and work-status panels. Only the ranked-first remote (the one the
branch pushes to) and its fork network are PR sources now; other remotes
remain search targets but their owner:branch heads no longer count.
2026-08-26 18:40:34 +03:00
Bohdan Triapitsyn 098034dc33 fix(desktop): stop windows from adopting each other's active project
Every window shares one server settings document, and every PUT returns the
merged whole, so one window's activeProjectId write was adopted by the
other on its next unrelated settings save — its sidebar then auto-selected
a session in that project and wrote the pointer back, converging both
windows onto one session. settings-synced now carries an adoptWorkspace
flag: only bootstrap-grade syncs (startup, runtime switch) may adopt the
shared workspace pointers; reconcile responses keep the window's own active
project while it exists. Notification clicks and session deep links also
stopped broadcasting the session switch to every window.
2026-08-26 18:36:50 +03:00
Bohdan Triapitsyn f7a006dc6a feat(auth): detect session expiry live and offer re-login in place
Every response already funnels through runtimeFetch, so a classifier there
spots 401s, confirms them against /auth/session (a proxied provider 401
must not read as a logout), and flips a small auth-session store. The web
and hosted surfaces show a frosted banner under the header whose Log in
button hands off to the session gate's existing unlock flow; sends are
paused while expired, the session-load error screen explains the auth case
and retries itself after login, and returning to a long-idle window
revalidates once via visibility/focus. Native mobile feeds the same signal
into its connection re-probe instead of showing the banner; VS Code is
exempt.
2026-08-26 18:22:04 +03:00
Bohdan Triapitsyn f2ec9b1003 feat(ui): add session history navigation, permission keys, and review shortcuts
mod+alt+arrows step through this window's session-open history (or between
neighbouring tabs when session tabs are on), mod+k r renames the current
session inline, and mod+k a toggles permission auto-accept. Pending
permission cards respond to alt+enter / alt+shift+enter / alt+backspace with
the keys printed on the buttons. The commit message box commits on
mod+enter, alt+arrows step the diff review between changed files, and the
command palette gains search-only commands for rare actions so the initial
list stays short.
2026-08-26 15:46:44 +03:00
Bohdan Triapitsyn 7977842e1e feat(ui): redesign the default shortcut layout around a mod+k leader
Single chords stay for everyday actions; open/go actions move to two-step
mod+k sequences; held mod+digit switches header session tabs and held
mod+alt+digit switches context panel surfaces. Rare actions leave the
shortcut schema for the command palette, every remaining action ships with
a default binding, and stored overrides from the old layout reset once.
Key matching now follows the physical key on non-Latin layouts and for
Option-modified digits on macOS, including in the recording dialog.
2026-08-26 14:52:31 +03:00
Bohdan Triapitsyn 76f977e580 docs: add changelog entries for the centralized shortcut registry 2026-08-26 12:30:48 +03:00
Bohdan Triapitsyn 1d16a5e2f4 docs: changelog for the resilient VS Code webview connection status (#2997) 2026-08-26 02:43:17 +03:00
Bohdan Triapitsyn efb985f3a7 docs: changelog for virtualized large file previews (#3061) 2026-08-26 02:26:50 +03:00
Bohdan Triapitsyn 9cb9b0f91b docs: changelog for the bounded OpenCode read timeout (#2969) 2026-08-26 02:23:57 +03:00
Bohdan Triapitsyn 7d16290827 docs: sort and consolidate the unreleased changelog
Highlights trimmed to the four genuinely major entries and ordered by
user impact; the markdown-preview comment surface folded into the chat
comment bullet, Cmd+P path matching folded into the unified search
matcher bullet, the instant session-open and uncached fade-in clauses
folded into their owning entries; fixes grouped after features, visual
polish last.
2026-08-26 01:33:05 +03:00
Bohdan Triapitsyn 3dbbf63fb9 docs: changelog for the session switching performance work (#3126) 2026-08-26 01:27:23 +03:00
Bohdan Triapitsyn 88c76557a5 docs: changelog for the anchored-turn chat scrolling rework
Also point a stale mobile.css comment at useChatTimelineScroll — the
engine it referenced no longer exists.
2026-08-26 00:40:13 +03:00
Matt Peter f459206e4a fix(small-model): route anthropic provider through configured baseURL
The Anthropic small-model dispatch (session-assist recap/suggestion,
walkthrough, etc.) hardcoded https://api.anthropic.com/v1/messages,
ignoring provider.anthropic.options.baseURL — the same override every
other provider branch already respects. Any setup routing the anthropic
provider through a local proxy (e.g. Meridian for Claude Max / Vertex)
had the small-model call bypass the proxy and hit the real Anthropic API
with whatever placeholder credential the proxy config uses, failing with
401 invalid x-api-key on every call.
2026-08-25 09:42:28 -04:00
Bohdan Triapitsyn 3b7d5e1c34 refactor(header): drop session tab tooltips
The hover info card (project/branch/PR/time) added noise without pull —
the tab title plus the sidebar already cover it. The tooltip body
component, its per-hover subscriptions, and the native title attribute
are gone; right-click/menu and the status dot are untouched.
2026-08-25 00:52:01 +03:00
Bohdan Triapitsyn 8458d2a446 feat(header): session tabs are opt-in
Default off; the changelog entry points at Settings → General →
Navigation → Session tabs and mentions the Alt+W close shortcut.
2026-08-25 00:50:19 +03:00
Bohdan Triapitsyn 275d381bd0 docs: changelog entry for header session tabs 2026-08-24 20:41:42 +03:00
Bohdan Triapitsyn c6e39f15fe docs: changelog entry for the app-shell viewport switch 2026-08-24 16:21:13 +03:00
Bohdan Triapitsyn 98c2a616c3 docs: extend dropdown search changelog bullet with sidebar filters 2026-08-24 15:04:23 +03:00
Bohdan Triapitsyn c02d7ff399 docs: changelog entry for unified dropdown search 2026-08-24 15:01:11 +03:00
Bohdan Triapitsyn 2eefd46b70 docs: changelog entries for search, terminal, and mobile keyboard fixes 2026-08-24 14:50:03 +03:00
Bohdan Triapitsyn 97edd033f9 fix(relay): stop bystander instances from capturing the relay host
Two mitigations for local multi-instance contention over the shared relay
identity:

- A standby instance now waits a 2-minute grace period after the host claim
  frees before taking over, so a cleanly restarting host (app update or
  relaunch) — which reclaims at boot with no wait — always wins the restart
  window instead of stranding paired devices on another process.
- Dev instances never host the relay passively: dev scripts set
  OPENCHAMBER_RELAY_HOST=off and the Electron dev shell is detected via
  OPENCHAMBER_ELECTRON_DEV. Explicit enable/pairing on such an instance still
  force-claims; OPENCHAMBER_RELAY_HOST=on overrides.
2026-08-24 14:03:18 +03:00
Bohdan Triapitsyn a547f83ebe docs: draft Unreleased changelog entries 2026-08-24 01:28:53 +03:00
Bohdan Triapitsyn fe80d246ea release v1.20.0 2026-08-23 02:10:48 +03:00
ChangeHowandBohdan Triapitsyn 3a78d86248 fix(ui): open app deep links from chat after confirmation (#2932)
* fix(ui): open app deep links from chat after confirmation

DOMPurify's default URI policy stripped href from anchors with custom
application schemes (obsidian://, vscode://, ...), so every app link
rendered in chat was dead across web, desktop, VS Code, and mobile.

- Classify safe app-link schemes in lib/url.ts (browser-handled,
  scriptable, webview-internal, network, and self-deep-link schemes
  stay excluded) and let openExternalUrl accept them
- Keep app-link hrefs through the markdown sanitize hook
- Intercept app-link clicks in the markdown renderer and route them
  through a confirmation dialog (Trust and open / Open once, dismiss
  to cancel) mounted in the desktop/web app root and the mobile shell
- Persist per-device trusted schemes in a zustand store; trusted
  schemes open without asking again

* feat(settings): manage trusted app link schemes in General

Add an App links section to Settings > General listing the application
schemes trusted on this device with a delete action; removing a scheme
restores the confirmation dialog for it. Register the section in
settings search.

* fix(ui): enforce app link confirmation

* fix(ui): handle app links by runtime

* fix(vscode): keep app links unsupported

* fix(settings): clarify trusted app links

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-08-23 01:53:21 +03:00
Bohdan Triapitsyn a5b0272f01 chore: update unreleased changelog 2026-08-23 01:05:14 +03:00
Bohdan Triapitsyn 1a627e06ad docs(changelog): note /btw side questions and the status-line handoff 2026-08-23 00:42:23 +03:00
Bohdan Triapitsyn 2740c7b3a2 feat(projects): pin a thinking level next to a project's model
A project could pin the model new chats start on, but not the level to
run it at: the default cascade dropped any variant as soon as a project
model won, and only ever considered the global one — which belongs to
the global model.

Projects now carry `defaultVariant` alongside `defaultModel`, stored and
sanitized only next to that model, and the cascade passes it through.
Both controls sit in one "Defaults for new chats" group laid out like the
Sessions defaults, and the level appears only for models that offer them.
2026-08-22 20:31:31 +03:00
Bohdan Triapitsyn e2e55756e2 fix(settings): stop defaults from repointing a chat that has its own model
Changing the default model, variant or agent wrote the chat's live
selection unconditionally. For a session carrying its own choice the
effect was mostly transient — ModelControls restores that choice on the
next hydration — but a message sent right after the change went out on
the new model.

The guard is the same pair of signals ModelControls restores from
(shouldPreserveManualModelOverride): a manual selection plus a saved
selection for the current session. Chats following the default still
switch immediately.
2026-08-22 20:31:31 +03:00
Bohdan Triapitsyn 0079347edc refactor(settings): scope the settings project selector to settings
Picking a project in Settings called setActiveProject, which relocates
the chat, the session list, the file tree and the Git surface. Reading
another project's MCP servers or agents moved the user's whole app.

It had to, because the configuration stores resolved the directory
themselves from the active project and held one flat list. Each of them
now takes an explicit directory — omitted still means the active project,
so every caller outside Settings is unchanged — and keys loaded data by
directory next to a flat mirror of the active project. Chat, autocompletes
and pickers keep reading that mirror; a load for another directory writes
only the map. A failed load restores that directory's previous list.

Settings resolves its own directory through useSettingsDirectory, backed
by a session-local settingsProjectPath that follows the active project
until the user picks something else.
2026-08-22 20:31:31 +03:00
Bohdan Triapitsyn ac0b17c9fd docs(changelog): note the providers and work status fixes 2026-08-22 20:31:31 +03:00