Commit Graph
1443 Commits
Author SHA1 Message Date
Bohdan Triapitsyn 3817a5947f feat: add JetBrains themes 2026-05-28 01:13:37 +03:00
Bohdan Triapitsyn 32ab46c567 feat: refine VS Code session UI 2026-05-28 01:13:03 +03:00
Bohdan Triapitsyn 4c7426304f feat: map VS Code chat theme colors 2026-05-28 01:12:45 +03:00
Bohdan Triapitsyn 461e2f482c fix: prevent premature queued message auto-send
Only auto-send queued messages after an active session becomes idle
Avoid treating missing initial status as safe to send
Add coverage for queue auto-send status transitions
2026-05-27 23:36:43 +03:00
Bohdan Triapitsyn 5331c4d962 feat: improve mobile draft session layout
Keeps the welcome prompt centered on mobile
Moves the draft composer back to the bottom on mobile
Preserves the desktop draft layout
2026-05-27 23:36:26 +03:00
Bohdan Triapitsyn 8d7b75106e chore: set show mobile status bar to be off by default 2026-05-27 17:38:31 +03:00
Bohdan Triapitsyn dadb968364 feat: refresh draft session welcome
Centered the new session composer
Added a project-aware welcome prompt
Removed the old empty-state logo from draft sessions
2026-05-27 17:35:58 +03:00
Bohdan Triapitsyn 9ed2e39b08 feat: refresh queued message controls
Queued messages now match the reverted message dock style
Added per-message edit and send actions
Sending one queued message no longer sends the full queue
2026-05-27 17:13:45 +03:00
Bohdan Triapitsyn 62a5a254b3 perf: reduce status row rerenders while streaming
Keeps assistant status stable during text deltas
Updates status only when activity changes
Narrows todo subscriptions when hidden
2026-05-27 14:19:15 +03:00
Bohdan Triapitsyn cfd13544bd perf: reduce chat rerenders during streaming
Stabilizes unchanged chat turns while messages stream
Keeps static chat history from rerendering unnecessarily
Adds coverage for turn record reuse
2026-05-27 14:01:25 +03:00
Bohdan Triapitsyn 27255c642d release v1.11.7 2026-05-27 01:16:43 +03:00
Bohdan Triapitsyn 4237be4174 fix: isolate Electron dev instance 2026-05-27 01:14:51 +03:00
Bohdan Triapitsyn b9068e4b81 fix: disable tool expansion animation 2026-05-27 01:14:07 +03:00
Bohdan Triapitsyn e8e4df5ea9 fix: smooth tool expansion animation 2026-05-27 00:41:04 +03:00
Erman HAVUÇandBohdan Triapitsyn 52ffe9daef feat(git-graph): VS Code-style git graph with commit actions in History modal (#1431)
* feat(types): add parents to GitLogEntry and new commit action types

* feat(git): add parent hashes and --all flag to getLog

* fix(git): move record separator to start of log format string

* feat(git): add checkoutCommit server function and route

* feat(git): add cherryPick server function and route

* feat(git): add revertCommit server function and route

* feat(git): add resetToCommit server function and route

* fix(tests): make git service tests branch-name portable, add error path tests

* feat(client): add checkoutCommit, cherryPick, revertCommit, resetToCommit API wrappers

* feat(git-graph): add lane assignment algorithm with tests

* feat(git-graph): add GitGraphSegment per-row SVG renderer

* feat(i18n): add locale strings for git graph action buttons

* fix(git-graph): handle lane convergence, fix SVG path coords, add connector tests

* feat(git-graph): add ref badges and action buttons to HistoryCommitRow

* fix(git-graph): add loading guards to reset actions, use theme tokens for ref badges

* fix(git-graph): conditional hooks, stale graph log, conflict handling, i18n

* fix(types): replace toBeDefined with toBeTruthy, fix toast API usage

* fix(lint): remove unused variables

* fix(git-graph): fix SVG height causing 150px row spacing

* fix(git-graph): smooth bezier curves, fill row height, round line caps

* fix(git-graph): non-scaling-stroke fixes bezier white spaces, sort curves on top

* fix(git-graph): remove viewBox scaling, match SVG height to actual row height

* fix(git-graph): ResizeObserver tracks actual row height, eliminates SVG height mismatch

* feat(git-graph): replace SVG with Canvas for graph rendering

* fix(git-graph): isolate canvas from flex layout to prevent replaced-element height leak

* feat(git-graph): align action buttons, add confirmation popups for all actions

* fix(git-graph): address code review findings CR-001 through CR-005

- CR-001: VS Code getGitLog now forwards 'all' option and parses %P parents
- CR-002: VS Code bridge/gitService implement checkoutCommit, cherryPick,
  revertCommit, resetToCommit with conflict detection and hard-reset guard
- CR-003: server-side commit hash validated with /^[0-9a-fA-F]{7,40}$/
  in both routes.js and service.js; 12 new rejection tests added
- CR-004: cherry-pick/revert conflict path now refreshes fetchStatus/
  fetchBranches/fetchLog; conflict toast uses i18n keys in all 7 locales
- CR-005: corrected O(n) comment to O(n x lanes)

* fix(i18n): add zh-TW locale and common.language.traditionalChinese key to all locales

upstream/main added zh-TW.ts after branch diverged; CI type-check fails
when PR is merged because zh-TW.ts was missing all gitView.history.actions.*
keys and loadMore/loadingMore. Also adds common.language.traditionalChinese
to en.ts and all 6 non-English files to match upstream en.ts.

* fix: harden git history actions

* feat: split git history graph view

* chore: remove git graph planning docs

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-05-27 00:13:25 +03:00
Robert HamiltonandBohdan Triapitsyn cc3d1bd63c fix: improve todo send dialog model picker (#1426)
* fix: improve todo send dialog model picker

* fix: truncate long model selector labels

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-05-26 20:46:30 +03:00
HearingSmileandBohdan Triapitsyn 6a173211b0 fix(desktop): toggle browser icon and preserve webview state on coll… (#1424)
* fix(desktop): toggle browser icon and preserve webview state on collapse

* fix(desktop): stabilize context panel collapse behavior

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-05-26 20:30:16 +03:00
Bohdan Triapitsyn 51901b980e ci: disable Windows release artifact
Skips Windows desktop build in release workflow
Removes Windows manifest from release finalization
2026-05-26 19:18:22 +03:00
Bohdan Triapitsyn 00b654085a ci: update GitHub Actions runtime actions 2026-05-26 18:30:48 +03:00
Dave OteroandBohdan Triapitsyn becd240168 Add Windows Electron desktop support (#1093)
* fix: make upstream sync actions target the selected remote

Ensure fetch and pull actually honor upstream selection so fork maintenance works from the Git sidebar, and surface upstream branch status alongside the primary origin-tracking indicators.

* feat: add Windows Electron desktop foundation

* fix(electron): stabilize Windows desktop packaging

* fix(electron): stabilize Windows desktop chrome

Use native Windows titlebar behavior with an Alt-accessible hidden menu, and harden Windows dev command launching so the desktop app follows platform conventions.

* fix(electron): stabilize Windows dev startup

* fix(electron): clarify desktop artifact names

* fix(electron): harden Windows desktop release and launch

* fix(electron): address Windows release review

* fix(electron): point updater and release links to org repo

* Fix Windows settings persistence fallback

* Fix Windows Electron dev startup

* Add Windows Electron window controls

* Fix Windows Electron install and opencode launch

* fix: resolve git status for repositories without upstream

Fixes repository detection stuck on Checking repository
Handles git status when no upstream is configured
Adds regression coverage for git status loading

* Add Windows app menu button

* fix: preserve file editor line endings

* ci: add desktop release smoke workflow

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-05-26 18:13:59 +03:00
youfch cc7969ac00 fix: session rename exits immediately due to focus race (#1429)
* fix: session rename exits immediately due to focus race

Replace fragile onBlur handler with document mousedown listener for click-outside detection. Defer dropdown-initiated rename to onOpenChangeComplete (fires after CSS transition + cleanup). Use finalFocus instead of dead onCloseAutoFocus (never forwarded to Base UI).

* chore: remove dead editCancelledRef after onBlur removal

onBlur was replaced by document mousedown listener. editCancelledRef was only read in the old onBlur handler — its write in the Escape key handler was the sole remaining use.
2026-05-26 11:50:16 +03:00
kostazolandKonstantin Zolin 4c34031f8d Keep completed todos at the end (#1430)
Co-authored-by: Konstantin Zolin <zolin_ka@vk.com>
2026-05-26 11:49:30 +03:00
Bohdan Triapitsyn db2464d94d fix: restore live streaming in VS Code
Forward SSE chunks without reserializing events
Prevent generic proxy from buffering SSE endpoints
Add regression tests for VS Code stream proxy
2026-05-26 11:42:20 +03:00
Bohdan Triapitsyn c61f16e0dd feat: add GitHub Actions workflows for opencode and triage 2026-05-26 11:03:07 +03:00
JiaandBohdan Triapitsyn 6dbe7d0445 feat(i18n): add Traditional Chinese locale (#1360)
* feat: add Traditional Chinese locale

* feat: add Traditional Chinese locale

* feat(i18n): Update Traditional Chinese translation

* fix(i18n): sync Traditional Chinese locale keys

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-05-26 02:34:58 +03:00
Adrian EckardtandBohdan Triapitsyn 5cde9ca88c fix: switch model when selecting an agent (#1362)
* fix: switch model when selecting an agent

The early return in setAgent() checked if the current model was valid
and returned immediately without ever falling through to the agent's
configured model. This meant selecting an agent never updated the
model dropdown to match the agent's preferred model.

Removing the early return allows the fallback chain to work correctly:
1. Persisted session-specific agent-model selection
2. Settings default model
3. Agent's own model (previously unreachable)
4. No change (current model stays)

* fix: prefer agent model over saved selection

* fix: preserve restored model on agent hydration

---------
Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-05-26 02:19:54 +03:00
Erman HAVUÇ 684d55f4aa feat(usage): add toggle to hide prediction rows on usage cards (#1420)
* feat(usage): add showPredValues setting to quota store

* feat(usage): register usageShowPredValues in settings sanitizers

* feat(usage): add i18n key for show predictions toggle

* feat(usage): add show predictions toggle to sidebar

* feat(usage): hide pred row by default, gate on showPredValues

* fix(usage): gate header dropdown PaceIndicator behind showPredValues

* fix(usage): gate VSCodeLayout PaceIndicator behind showPredValues

* fix(usage): correct indentation drift in Header.tsx PaceIndicator blocks
2026-05-26 01:54:24 +03:00
Bohdan Triapitsyn ceee53576b fix: keep context panel within app bounds
Prevents the context panel from overflowing past the right edge
Clamps resize width to the available layout space
Handles previously saved oversized panel widths
2026-05-26 01:51:44 +03:00
Bohdan Triapitsyn 2014303bc0 feat: add startup launch support (#1421)
Add launch-at-startup support across the Electron desktop app and the web CLI.

Electron now supports macOS launch-at-login through the native login item API. Login launches start OpenChamber in the background without opening a window, while Dock activation, deep links, and second-instance launches still open or focus the normal app window. The desktop Settings UI now exposes a localized launch-at-login toggle in Desktop Network Access.

The web CLI now includes `openchamber startup status|enable|disable`, backed by native user services:
- macOS: launchd LaunchAgent
- Linux: systemd --user service
- Windows: Task Scheduler

Startup services run `openchamber serve --foreground` so the OS service manager owns process lifetime and restarts. Foreground service updates now defer restarts to the service manager instead of spawning duplicate CLI restarts.

Startup services snapshot useful environment variables by default so provider tokens, PATH, SSH agent settings, and OpenCode configuration survive login/reboot starts. The snapshot avoids shell/session-only state, uses systemd-compatible env quoting on Linux, and avoids unused env artifacts on macOS.

Also adds localized docs for startup services and environment variables.
2026-05-26 01:36:11 +03:00
Bohdan Triapitsyn e97bf0d9dc fix: prevent malformed tool diffs from breaking chat
Safely falls back to raw patch text for invalid diffs
Protects individual tool parts from crashing the chat
Covers malformed apply_patch and edit diff cases
2026-05-25 22:10:50 +03:00
Bohdan Triapitsyn b2f7373b79 fix: simplify mobile composer keyboard handling
Use browser keyboard resizing by default on mobile
Remove mobile-only autocomplete button and tabs
Keep autocomplete behavior consistent across mobile and desktop
2026-05-25 21:27:10 +03:00
Bohdan Triapitsyn 6e16504dac release v1.11.6 2026-05-25 19:32:26 +03:00
Quat3rnionandBohdan Triapitsyn 2b47d899c6 feat: plugin settings (#1375)
* feat(settings): add opencode plugins page

Manage opencode `plugin` array entries (npm, scoped npm, versioned,
local paths) and auto-loaded plugin files in `~/.config/opencode/plugins/`
and `<project>/.opencode/plugins/`. Mirrors MCP CRUD pattern.

- Server: `plugins.js` data layer + `plugin-routes.js` REST routes
- UI: PluginsSidebar / PluginsPage / AddPluginDialog
- Store: usePluginsStore (cache TTL, in-flight dedup, narrow selectors)
- i18n: 41 keys across 7 locales

Whitelist /api/config/plugins in JSON body-parser so POST/PATCH bodies
parse; opencode plugin specs runtime-resolve OPENCODE_CONFIG dir so
parallel test files do not cross-pollute module-frozen consts.

* feat(settings/plugins): hook npm registry for update + invalid-version detection

Plugins page now consults registry.npmjs.org with a 1h server cache. Sidebar
rows show an update badge with the latest version, group headers show how
many updates are available, the kebab adds an "Update to latest" action
that reuses the existing PATCH+restart flow, and the editor surfaces a
banner for update-available / missing-version / missing-package / malformed
/ missing-path / unreadable-path / offline-registry states. A refresh
button in the sidebar header forces a cache bypass.

- Server: `npm-registry.js` (cache + in-flight dedup + 5s timeout, 404
  cached, network failures NOT cached) + `plugin-spec.js` (parser + exact
  semver detection) + `GET /api/config/plugins/registry?specs=...&refresh=`
- Routes accept up to 100 specs/request, dedup by npm package name before
  fetching, classify each result by kind, never propagate network failure
  as 500.
- Client: `registryInfo` slice + `loadRegistryInfo` (fire-and-forget after
  loadPlugins, refreshes on mutations) + `updateToLatest(id)`.
- UI: `RegistryBadge` per-row + `RegistryBanner` per-entry editor, both
  use theme tokens (text-only color, no new bg/border tokens) and the
  shared Icon sprite. Per-spec subscriptions only.
- i18n: 24 new keys (incl. split singular/plural for "N update(s)
  available" because the runtime does not parse ICU plural format).

* fix(settings/plugins): keep registry badge visible for long specs

Sidebar entry row used `inline-flex` with `truncate` only on the spec
text. With long npm specs the badge could be pushed past the row edge
and clipped by the parent overflow. Switch to `flex` with spec
`flex-1 min-w-0 truncate` and add `shrink-0` to the badge wrapper so
the update indicator stays anchored to the right of the row.

* fix(settings/plugins): use code-box icon to distinguish from MCP

Plugins nav entry used 'plug' which is visually too close to MCP's
'plug-2' icon. Swap to 'code-box' for clearer differentiation in the
Settings nav list.

* Update packages/ui/src/components/sections/plugins/PluginsPage.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Signed-off-by: Quat3rnion <81202811+Quat3rnion@users.noreply.github.com>

* Update packages/ui/src/stores/usePluginsStore.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Signed-off-by: Quat3rnion <81202811+Quat3rnion@users.noreply.github.com>

* fix(settings/plugins): validate registry directory + surface save errors

- registry endpoint: return 400 on invalid directory query (was silently falling back to homedir, breaking relative path specs)
- save failure toast: prefer result.message over generic 'Reload failed'

* fix(settings/plugins): address review follow-ups

---------

Signed-off-by: Quat3rnion <81202811+Quat3rnion@users.noreply.github.com>
Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-05-25 19:20:04 +03:00
Bohdan Triapitsyn a25e64099c fix: correct quick tunnel warning copy
Remove Cloudflare-specific copy for other providers
Show managed-mode guidance only when supported
Update localized tunnel settings text
2026-05-25 18:43:23 +03:00
Bohdan Triapitsyn 00a7807168 feat: add Ngrok tunnel provider (#1415)
Adds Ngrok quick tunnel support
Adds desktop tunnel docs across locales
Improves tunnel settings provider and TTL labels
2026-05-25 18:00:03 +03:00
Bohdan Triapitsyn 25ed8e6abb fix: show multi-run sessions immediately
Register created multi-run sessions in sidebar state
Preserve reduced startup refresh fanout
Add regression coverage
2026-05-25 17:37:27 +03:00
Bohdan Triapitsyn f585ca2f60 fix: send multi-run slash commands correctly
Multi-run now uses the normal chat routing path
Slash commands are sent as commands instead of plain text
Type-check and lint pass
2026-05-25 16:00:48 +03:00
Bohdan Triapitsyn c444415cb2 feat: brought back mobile new session sidebar action
Adds a mobile-only new session button to the sidebar header
Opens a draft session from the sidebar
Keeps desktop sidebar actions unchanged
2026-05-25 15:28:02 +03:00
Bohdan Triapitsyn 89bce715c5 feat: add desktop UI password setting
Adds optional desktop UI password protection
Starts Electron with the saved UI password
Explains login session duration in settings
2026-05-25 15:20:56 +03:00
Bohdan Triapitsyn 1b141b17da perf: dedupe VS Code git read execs
Reduce duplicate git rev-parse work in VS Code
Cache only safe git read commands
Add VS Code bridge cache coverage
2026-05-25 12:55:59 +03:00
Bohdan Triapitsyn f8beffce32 perf: reduce startup request fanout
Avoid repeated sidebar session and worktree refreshes
Limit concurrent GitHub PR status checks
Reuse cached worktree root resolution
2026-05-25 11:58:59 +03:00
Bohdan Triapitsyn 68f00e4b7b release v1.11.5 2026-05-25 02:23:56 +03:00
Bohdan Triapitsyn 8f45596c99 fix: keep pinned chat following final summaries 2026-05-25 02:13:00 +03:00
Bohdan Triapitsyn f6c76239c5 fix: prevent activity reasoning flash 2026-05-25 02:07:25 +03:00
Bohdan Triapitsyn bb3a51db39 perf(ui): improve mobile session switching
Treat the mobile web surface as a constrained runtime so sync loads smaller message pages, keeps fewer warm session caches, and evicts heavy inactive sessions instead of retaining them across switches.

Limit mobile message-record and turn-model caches to reduce memory pressure on phones while preserving bounded initial page expansion for large final turns.

Split the mobile session status bar so the collapsed state avoids subscribing to the full session/status list; the expensive grouping work now only mounts for the expanded list.

Verified with bun run type-check and bun run lint.
2026-05-25 01:39:47 +03:00
Bohdan Triapitsyn f14fa1b307 style: unify chat tool row spacing 2026-05-25 01:38:19 +03:00
Bohdan Triapitsyn 3cdd1ede2d fix: keep assistant timestamps visible on narrow layouts
Show footer labels at smaller chat widths
Reduce early icon-only collapse on mobile and VS Code
2026-05-25 01:02:15 +03:00
Bohdan Triapitsyn 6b4fe392b0 chore: update opencode sdk to 1.15.10 2026-05-25 00:56:09 +03:00
Bohdan Triapitsyn 636e2ac75f style: align chat tool row spacing
Match collapsible tool height with read-only rows
Reduce extra vertical padding on reasoning rows
2026-05-25 00:52:33 +03:00
Bohdan Triapitsyn 9bd31e1fc4 fix: open loaded skill files from tool messages
Open SKILL.md from skill tool metadata
Keep click behavior working before skills store loads
2026-05-25 00:48:24 +03:00