Commit Graph
17 Commits
Author SHA1 Message Date
Bohdan Triapitsyn 83ffb1af34 refactor(desktop): make Tauri thin shell running web sidecar (#273)
## What / Why
This PR finishes the desktop refactor: the Tauri app is now a thin shell that launches the web server as a sidecar and loads the UI from `http://127.0.0.1:<port>`. All real backend logic lives in `packages/web/server/index.js`; desktop Rust keeps only native integrations (menu/dialog/notifications/updater/deep-link + window chrome).
This unblocks:
- consistent behavior across web/desktop/vscode (single backend)
- simpler desktop maintenance (no duplicated Rust backend)
- host switching between Local + remote instances in desktop
- reliable cold-start behavior on slow machines (VSCode + desktop)
## Key changes
- Desktop sidecar runtime
  - build pipeline to bundle web dist + `openchamber-server` sidecar (`packages/desktop/scripts/build-sidecar.mjs`)
  - robust local port selection (prefer saved/default, fallback to random; persisted in `~/.config/openchamber/settings.json`)
  - improved PATH handling so the sidecar can locate `opencode` CLI (incl `~/.opencode/bin`, overrides, common bins)
  - disable native right-click context menu in production builds (dev keeps it)
- Desktop instance switcher (Tauri-only)
  - header button + modal to add/edit/delete remote hosts, set default, probe status/ping, switch back to Local escape hatch
  - auth gate includes host switcher so you can recover when a remote host is broken/auth-required
  - host list stored desktop-locally (not tied to the currently selected remote server)
- Notifications
  - decision logic moved server-side; desktop notifications emitted via sidecar stdout and shown natively by Tauri
  - prevent double-notifications on desktop Local origin (UI ignores SSE notification when native path is active)
  - restore macOS notification sound
- Updates
  - Tauri updater used only when viewing Local instance in desktop shell (avoid “remote web update” triggering desktop restart)
- Settings persistence & UX polish
  - persist model favorites/recents via `/api/config/settings` (works for web + desktop; not origin-dependent)
  - persist per-project sidebar collapse state in `projects[].sidebarCollapsed` via `/api/config/settings` (with debounce on toggles)
  - macOS header sizing/traffic-lights offsets fixed (marketing macOS major injected from desktop; MultiRun header aligned)
  - VSCode cold-start: keep retrying provider/agent loads after connection to avoid empty UI on slow machines
  - misc lint/type fixes + bun.lock sync
- Desktop bootstrap / resiliency
  - show onboarding screen when OpenCode CLI is missing (desktop Local origin), with retry hook to restart OpenCode after install
## Testing notes
- Desktop (macOS): switch Local <-> remote, set default host, verify auth gate recovery, native notifications (with sound), updater gated to Local
- Web: favorites/recents + per-project collapsed state persist across reload/restart
- VSCode: slow startup no longer results in missing providers/agents/models
2026-02-05 01:59:49 +02:00
Bohdan Triapitsyn 74511abfda Multi-account GitHub auth + UI polish (model logos, markdown, scroll behavior) (#219)
* feat: display provider logos for favorite/recent models

Show provider logo next to model name in favorites and recents
Render provider logos in ModelControls, ModelMultiSelect, and ModelSelector lists
Maintain zero-logo state for other sections to avoid clutter

* feat: render user message as markdown instead of plain text

Render agent mentions as markdown links in user text
Apply inside list style for chat content to fix list rendering
Rely on SimpleMarkdownRenderer for consistent rendering

* fix(openchamber): adjust layout and overscroll behavior

Enable overscroll-auto on overlay containers for smoother scrolling
Move page content to full-width wrapper and preserve section borders
Show AboutSettings inside its own bordered block when visible

* feat: integrate GitHub auth status store and UI

Introduce GitHubAuthStore to track connection status and polling
Show GitHub avatar in header when connected
Guard issue/pr dialogs behind GitHub auth status and show notices

* feat: add GitHub multi-account support

Add API and UI flow to activate a GitHub account
Show and switch between multiple GitHub accounts in header
Persist and normalize accounts list with current selection
2026-01-26 11:28:55 +02:00
Bohdan Triapitsyn 0e11ea3f83 feat: extend PR context to include check details
Add check details to PR context via includeCheckDetails flag
Open a checks dialog showing check run summaries and steps
Improve PR lookup for forked repos by matching head branch
2026-01-24 17:59:08 +02:00
Bohdan Triapitsyn f370ea5d8c feat: add GitHub PR list and context APIs
Add PRs list API with pagination
Provide PR context API with optional diff
Integrate PR picker in session UI
2026-01-24 01:57:35 +02:00
Bohdan Triapitsyn 57f00be773 feat: add GitHub issue picker and API endpoints
Add GitHubIssuePickerDialog UI for selecting issues
Enable new session from GitHub issue from session sidebar
Implement GitHub issues/list/get/comments APIs across desktop, web, and VS Code
2026-01-24 00:30:34 +02:00
Bohdan Triapitsyn 463e9ec4e3 Add GitHub integration for PRs, issues and AI PR description (#205)
* feat: integrate GitHub OAuth device flow across runtimes

Add GitHub OAuth device flow endpoints across runtimes
Introduce GitHubSettings UI panel and sidebar entry
Persist GitHub auth state in per-runtime storage

* feat: add GitHub PR status and PR description generation

Show PR status for the current branch in the Git view
Generate a pull request description from the diff between base and head
Expose prStatus, prCreate, and prMerge APIs in web and desktop clients

* feat: add GitHub PR ready for review

Add API to mark pull requests as ready for review
Show a Ready button for draft PRs and reflect status in UI
Handle token expiration and GraphQL errors when marking ready
2026-01-23 16:08:58 +02:00
Bohdan Triapitsyn 71b9ec6e3d fix(ui): improve visibility condition and push notification handling (#199)
Resolve visibility state for beacon reporting to handle focus correctly
Normalize push subscriptions per UI session and send to each endpoint
Suppress push notifications when a visible window exists to avoid redundant alerts
2026-01-23 01:51:22 +02:00
Ashik Ahmed 1937dbfcd2 feat: added github action for starting opencode/openchamber in actions infrastructure with persistence encryption (#194)
* fix(ui): make chat message action icons always visible

- Removes opacity-0 and pointer-events-none classes from UserMessageBody action buttons container.
- Ensures icons are visible by default instead of only on hover/focus.
- Addresses user feedback about empty space at the bottom of chat bubbles.

* fix(ui): make chat message action icons always visible

- Removes opacity-0 and pointer-events-none classes from UserMessageBody action buttons container.
- Ensures icons are visible by default instead of only on hover/focus.
- Addresses user feedback about empty space at the bottom of chat bubbles.

* fix(ui): prevent diff comment input from closing on click (#3)

Replaced global `document.querySelector('[data-comment-ui]')` with a local `useRef` to detect clicks inside the comment input area. This fixes an issue where clicking the input in one diff viewer would close it if another diff viewer (found first by querySelector) existed in the DOM.

- Added `commentContainerRef` in `PierreDiffViewer.tsx`.
- Updated `handleClickOutside` to check against the ref.
- Attached ref to comment UI containers in both 'fill' and 'inline' layouts.
- Preserved `data-comment-ui` attribute for backward compatibility.

* feat(ui): add visual connector lines to file explorer (#2)

- Replaced manual padding-based indentation with nested list structure
- Added vertical connector lines using border-l on nested ul
- Added horizontal connector lines using pseudo-elements on list items
- Added tail masking for the last item in a branch to create the 'L' shape
- Removed manual padding calculation from file/folder buttons

* Create openchamber.yml

* Create OPENCODE_FOR_ACTIONS.md

* feat: update OpenChamber for Actions workflow and docs (#6)

- Rename `docs/OPENCODE_FOR_ACTIONS.md` to `docs/OPENCHAMBER_FOR_ACTIONS.md`.
- Update `README.md` to include a section on OpenChamber for Actions.
- Update `.github/workflows/openchamber.yml` to allow users to select which service to expose (OpenChamber, OpenCode, or Both).
- Update documentation to reflect the new workflow options.

* feat: Add shimmer effect for generating messages (#7)

* Create test_unreleased.yml

* Update test_unreleased.yml

* Delete test_unreleased.yml

* 🧪 Labs: Enhanced File Explorer with Context Menus & UI Improvements (#13)

* feat: add file management capabilities (create, rename, delete) (#11)

Added backend endpoints for delete and rename operations.
Extended FilesAPI interface and implementation.
Updated FilesView with toolbar buttons for Create File/Folder.
Added context menu to file tree items for Rename, Delete, and Copy Path.
Implemented dialogs for all file operations.

* Refactor UI/UX: Modernize styles, components, and layout architecture (#10)

Refactored `packages/ui` CSS into modular files (design-system, typography, mobile).
Modernized `Header` with pill-style tabs and semantic Flexbox layout.
Enhanced `Chat` UI with threading visuals, improved typography, and better spacing.
Updated `Sidebar` to match the new design system aesthetic.
Verified with full workspace build.

* Add workflow

* Change to manual dispatch only

* Delete test.yml

* Update openchamber.yml

* Fix styling and workflow improvements (#17)

* Refactor OpenChamber workflow and update docs (#18)

- Refactor `.github/workflows/openchamber.yml` to use modular helper scripts.
- Add helper scripts in `scripts/`: `monitor.sh`, `persistence-restore.sh`, `persistence-save.sh`, `opencode-config.sh`.
- Update `docs/OPENCHAMBER_FOR_ACTIONS.md` to reflect new inputs and features.
- Implement robust monitoring with self-healing and proper URL logging.
- Improve persistence robustness for file copying.

* Expose Opencode Core, Web, and Chamber via Cloudflare tunnels (#19)

This commit updates the GitHub Actions workflow and monitoring script to:
1. Install `wetty` to expose the core Opencode TTY over the web (interpreted from user request for "WiTTY").
2. Start `opencode web` (8080), `openchamber` (9090), and `wetty` (3000) concurrently.
3. Configure Cloudflare to create three separate tunnels for these ports.
4. Update `monitor.sh` to accept and display URLs for all three services.

* Update opencode-config.sh

* Tighten actions persistence and UI polish

* Delete openchamber.yml

* Delete persistence-save.sh

* Delete persistence-restore.sh

* Delete opencode-config.sh

* Delete monitor.sh

* Delete install.sh

* Fix OpenChamber workflow and scripts for multi-service tunnels (#21)

* Create auto-opencode.yml

* Update opencode.yml

* feat: add password protection for OpenChamber in Actions (#22)

- Introduce `OPENCODE_SERVER_PASSWORD` secret support in `.github/workflows/opencode.yml`.
- Automatically set `OPENCHAMBER_UI_PASSWORD` and `OPENCODE_UI_PASSWORD` if the secret is provided.
- Configure `ttyd` to use basic auth (`-c user:password`) when password is set.
- Update `scripts/monitor.sh` to respect password settings during service restarts.
- Significantly update `docs/OPENCHAMBER_FOR_ACTIONS.md` with an overview, password configuration instructions, and improved layout (collapsible sections).

* use one password env variable

* Update OPENCHAMBER_FOR_ACTIONS.md

* feat: improve GITHUB_STEP_SUMMARY, fix TTY home logic and add encryption support in scripts

* feat: lazy load large diffs to prevent page freeze (#186)

When diff content exceeds 1500 lines or 150KB, show a placeholder with
"Load Diff" button instead of parsing immediately. This prevents the page
from freezing when viewing large diffs.

Co-authored-by: Jovines <jovines@qq.com>

* feat: add Web Push API support and PWA integration (#189)

* feat: add Web Push API support and PWA integration

Add web Push API with subscribe/unsubscribe and visibility endpoints
Introduce usePushVisibilityBeacon and useSessionDeepLink hooks
Integrate PWA with service worker, registerSW, and VAPID key persistence

* feat: add heartbeat visibility beacon for web runtime

Add a 10s heartbeat to ping visibility while visible
Subscribe to visibilitychange, focus, blur, pageshow, and pagehide events to report state
Clear heartbeat interval on unmount to avoid leaks

* feat(UI): Introduce new UI components for file attachments and related views (#191)

Add file management API and UI components
Implement directory listing, search and CRUD operations in desktop backend
Expose new Files API on frontend to list, search, and modify files

* feat: add workbox-window and improve event stream cleanup

Add workbox-window dependency to bun.lock and web package.json
Cancel and release the stream reader on disconnect to avoid leaks

* feat: provider config management (#193)

* feat: support scoped removal of provider config (auth, user, project, custom)

* feat: implement UI session token management with cookies for window visibility control

* feature: header layout changes (#195)

* fix(ui): remove fixed sessions button and mac titlebar coupling

Remove fixed sessions button from header on desktop Mac
Eliminate Mac titlebar spacer and drag-to-dock logic in sidebar
Update layout to rely on standard header/sidebar without mac-specific tweaks

* feat: improve mobile header with session toggle and back button

Add back button in mobile header to exit session switcher
Show Sessions label when session switcher is open in mobile header
Toggle between opening sessions and back navigation based on session state

* restore: add back scripts/install.sh from main branch

* docs: improve Tech Stack section with organized label badges

* Fix actions auth and remove shimmer
2026-01-22 18:24:11 +02:00
Bohdan Triapitsyn 1f23b63c0b feat: add Web Push API support and PWA integration (#189)
* feat: add Web Push API support and PWA integration

Add web Push API with subscribe/unsubscribe and visibility endpoints
Introduce usePushVisibilityBeacon and useSessionDeepLink hooks
Integrate PWA with service worker, registerSW, and VAPID key persistence

* feat: add heartbeat visibility beacon for web runtime

Add a 10s heartbeat to ping visibility while visible
Subscribe to visibilitychange, focus, blur, pageshow, and pagehide events to report state
Clear heartbeat interval on unmount to avoid leaks
2026-01-22 01:19:24 +02:00
syntextandBohdan Triapitsyn 2de0d9d3dd feat: allow control over displaying hidden/dotfiles and .gitignore matches (#179)
* feat: add chat setting to toggle hidden files (dotfiles)

* feat: add toggle to show/hide gitignored files in file browser

* refactor: don't reuse visibility setting for dotfiles toggle

* fix: honor hidden/gitignored toggles across runtimes

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-01-20 15:20:17 +02:00
Bohdan Triapitsyn 24969ba856 feat: implement file editing capabilities with CodeMirror integration
- Added CodeMirror editor for file content editing in FilesView.
- Introduced draft saving functionality with unsaved changes confirmation dialog.
- Implemented file writing API to persist changes to the filesystem.
- Enhanced language support for syntax highlighting based on file extensions.
- Updated UI components to support new editing features, including save and discard options.
- Refactored line selection logic for improved user experience on both desktop and mobile.
- Added new utility functions for language detection by file extension.
- Introduced a new theme for CodeMirror to align with the application's design.
2026-01-18 17:29:31 +02:00
Bohdan Triapitsyn 1be5dfda05 feat: add Files tab for browsing workspace files (#154)
* feat: add Files tab for browsing workspace files

- Add Files tab between Diff and Terminal in header
- Implement hierarchical file tree with expand/collapse
- Add fuzzy search with debouncing and relevance ranking
- Support gitignore filtering via `git check-ignore` (web + desktop)
- Add syntax highlighting for 150+ file types
- Add image preview (SVG, PNG, JPG, etc.)
- Add line numbers, wrap toggle, and copy button
- Desktop: split-pane layout matching DiffView
- Mobile: drill-in navigation with full-width sidebar
- Update help dialog with Cmd+3 shortcut
- Increase header breakpoint to 940px for new tab

* feat: enhance context and session stores to track agent/model/variant choices for historical sessions

* feat: implement line selection and commenting functionality in FilesView
2026-01-15 20:19:06 +02:00
Bohdan Triapitsyn e0279e59b0 feat: implement default Git identity management and local identity check 2026-01-14 22:34:17 +02:00
Bohdan Triapitsyn 8902662f74 feat: add rename branch functionality with UI integration 2026-01-08 01:13:51 +02:00
Bohdan Triapitsyn bb72c0fb0c feat: vscode extension (#59)
* feat: add initial VS Code extension plan and implementation tasks

* feat(vscode): added initial version of an Openchamber VSCode extension

* feat(vscode): enhance VS Code extension with theme integration and session management

* feat(vscode): implement connection status handling and overlay in VSCode layout

* feat: move extension to secondary sidebar

* chore: upgrade @opencode-ai/sdk to 1.0.150

* vscode: editor bridge, file picker, click-to-open in tool parts

* vscode: layout session lifecycle, theme sync, typography overrides

* ui: compact mode for vscode, model search, autocomplete width fixes

* perf: scroll force flag, raf placeholder, git polling backoff

* ui: tool output styling, markdown code block fix, gitignore

* refactor: update typography handling for VSCode runtime, remove unused styles

* docs: update README with VS Code extension details and add extension image

* docs: update changelog with new features and performance improvements
2025-12-13 16:34:17 +02:00
Bohdan Triapitsyn 610ccf4c62 feat(terminal): add restart and force kill session functionality 2025-12-10 00:25:02 +02:00
Bohdan Triapitsyn 4b2edf7318 Initial public release 2025-12-07 19:32:53 +02:00