Commit Graph
2787 Commits
Author SHA1 Message Date
herjarsa 23219d4049 fix(directory-explorer): clear selections on Finder pick; dedup VS Code batch
Two findings from the openchamber-bot review at 478f1e9c:

1. Pending selections silently swallowed the Open-in-Finder pick
   (prev #4). handleOpenInFinder flows into the batch-first branch of
   finalizeSelection, so with checkboxes ticked the OS pick was
   ignored and the selections were added instead. Clear selectedPaths
   before finalizeSelection so the Finder-sourced target is honored.

2. Within-batch dedup was missing in the VS Code branch (nit from
   the previous review). A path repeated within one batch hit
   addWorkspaceFolder twice. Mirror the non-VS Code contract with
   a seen Set; add a regression test asserting the host is called
   once per unique path.
2026-08-28 19:15:39 +02:00
herjarsa 478f1e9c03 fix(directory-explorer): make batch add work in VS Code; add Turkish locale keys
Two non-blockers from the openchamber-bot review at b2ab4af15:

1. VS Code batch add reported a misleading failure. addProjects
   returned [] unconditionally for the VS Code runtime because
   addWorkspaceFolder is reached only by addProject. Iterate addProject
   per path so valid selections succeed and the host is called once
   per selection. addProjects is now async (returns Promise<ProjectEntry[]>);
   the call site in DirectoryExplorerDialog awaits it; existing
   tests in useProjectsStore.test.ts updated to await.

2. Turkish locale (tr.ts) was missing the two new keys that other
   11 dictionaries received: actions.addSelected and browse.selectForAdd.
   Add both with real Turkish translations: "Seçilenleri ekle" and
   "Eklemek için seç".
2026-08-28 18:59:47 +02:00
herjarsa b2ab4af157 fix(directory-explorer): gate Space toggle on browse position; reorder batch path
Two blockers from the openchamber-bot review:

1. Space swallowed in the path input. The handler at
handleKeyDown was calling preventDefault on every Space,
turning paths with spaces into no-op strokes and toggling the
highlighted row instead. Gate the toggle on hasTrailingPathSeparator
(query) so Space is a literal character when the user is typing
a path or filter and only acts as a selection toggle when they
have navigated into a directory.

2. Batch path was unreachable when the filter had no exact match.
With checkboxes ticked and a typed filter that has no exact match,
shouldCreateTarget evaluated true and the primary action (Add
selected) called createDirectory for the typed text instead of
adding the selections. Move the batch branch above
shouldCreateSelection so explicit selections always win over the
single-target create path. Drop the trailing else-if (now
unreachable) which also lost { asProject: true }.
2026-08-28 17:50:34 +02:00
herjarsa cd02678ee7 fix(directory-explorer): declare shouldCreateSelection in finalizeSelection
The variable was referenced at line 484 (the single-target create branch)
but never declared, so every non-clone add path (Add button, Cmd+Enter,
Open in Finder, mobile add) threw a ReferenceError that surfaced as a
'Failed to select directory' toast. Add the missing local declaration
matching the condition the original review intended: !isCloneMode &&
shouldCreateTarget && the target path equals the user-typed path.
2026-08-28 16:41:36 +02:00
herjarsa 0dec50cebc fix(ui): restore async addProject return type after rebase (OPE-142) 2026-08-28 16:41:36 +02:00
herjarsa 223849261a fix(ui): stop click propagation on the multi-select checkbox
The checkbox button calls togglePathSelection() on click but does not stop
event propagation, so the click bubbles to the parent row's onClick which
calls executeRow() -> browseToEntry(). With a mouse, every checkbox click
would (a) toggle the selection, (b) navigate into the directory, and (c)
the navigation effect would clear selectedPaths. The primary interaction
of the multi-select feature was unusable.

The existing handleQuickAdd helper avoids this exact bug by calling
event.stopPropagation() inside its onClick handler. Apply the same
pattern to the new togglePathSelection onClick.

Refs openchamber-bot review on #2877.
2026-08-28 16:41:36 +02:00
herjarsa b56e60462e fix(ui): resolve merge conflict in DirectoryExplorerDialog batch add 2026-08-28 16:41:36 +02:00
Serhii Dziupin 04c37d32a5 feat(projects): support adding multiple projects at once in the directory picker
Add a multi-select mode to the "Add project directory" dialog: each
directory row gets a select toggle (checkbox icon, Space toggles the
highlighted row), and the primary action becomes "Add selected" and
registers every selected directory in one store update. Selections apply
to the currently browsed directory and reset on navigation, dialog open,
and clone-mode entry. Clone mode keeps its single-target flow.

Add addProjects() to useProjectsStore: validates, normalizes, and dedups
paths (already-added or duplicated), creates entries in a single state
update and single persist, activates the first newly added project, and
discovers icons for each entry. Mirrors addProject semantics for the
single entry.

Refs OPE-142
2026-08-28 16:41:36 +02:00
Bohdan Triapitsyn 6950e113f4 docs(vscode): add the surface reachability map
Canonical answer to 'is this reachable in VS Code': three webview hosts,
VSCodeLayout's three views, a 33-row surface table (mounted / partial /
not mounted with the mount chain or cut-off point), the dead-bridge
handler list, and which fs routes stay live. Reviews, changelog entries,
and parity claims consult this map; whoever mounts or unmounts a surface
updates it in the same change.
2026-08-28 16:35:34 +03:00
Bohdan Triapitsyn f551f4e784 Merge pull request #3205 from openchamber/fix/branch-selector-remote-checkout
fix(git): check out a local tracking branch when a remote branch is picked
2026-08-28 16:21:40 +03:00
Bohdan Triapitsyn 5871c36875 chore: bump @opencode-ai/sdk to 1.18.25 2026-08-28 16:01:07 +03:00
Iuliia Ivashko 01b3e3346f fix(git): check out a local tracking branch when a remote branch is picked 2026-08-28 15:45:43 +03:00
Alan Shum 73e21d0050 test(ui): repair current main test baseline (#3191) 2026-08-28 15:44:40 +03:00
Iuliia Ivashko 52d79cb368 fix(desktop): surface failed update installs
"Restart to Update" answered the renderer with null before the install was
attempted, so a rejected install only reached main.log and the button looked
dead. The apply-update path now keeps the IPC call open until the app quits or
autoUpdater reports the failure, rolls the quit/install flags back when the app
stays up, and the update dialog shows the real reason with a translated hint for
a rejected code signature.

Also settle the download promise on downloadUpdate() itself: an already cached
payload emits no 'update-downloaded', which left that promise pending with its
listeners attached on every retry.
2026-08-28 14:47:09 +03:00
Bohdan Triapitsyn 3f3d942aab fix(browser): reveal panel for agent captures
Fixes #3175
2026-08-28 14:06:43 +03:00
Bohdan Triapitsyn 4f53db17e6 fix(worktrees): protect user changes across ambiguous move failures
Post-merge hardening of the session-to-worktree move (#2998), driven by
review findings on the follow-up pass:

- an ambiguous transport failure (relay abort, timeout) on the
  change-carrying move no longer force-deletes the fresh worktree that
  may hold the user's only copy of their changes; both intent kinds
  surface honest guidance and refresh both directories
- assertSdkSuccess re-tags ambiguous transport errors when wrapping SDK
  failures, so ambiguity classification survives the wrapper on every
  path, matching the prompt-send precedent
- session liveness checks scan all child stores plus the global status
  index, and report unknown (not idle) when no store covers the session
  — an evicted background directory can no longer make a busy session
  look movable
- incomplete-rollback errors carry the changes-may-be-in-destination
  guidance instead of swallowing it
- move-message assembly shared across the three call sites; tests now
  exercise the real ambiguity classifier (extracted to
  send-failure-classification.ts) instead of a hand-mirrored mock
- i18n fallout from the merge train: Turkish gains the 21 worktree-move
  keys, all 12 locales get the hedged ambiguous-failure toast; owning
  DOCUMENTATION.md files record the new contracts
2026-08-28 12:03:55 +03:00
Bohdan Triapitsyn 820e3194b5 Merge pull request #2998 from mattv8/feat/move-session-existing-worktree
feat(sessions): move sessions to existing worktrees
2026-08-28 11:37:21 +03:00
Bohdan Triapitsyn 06263a5c2b Merge pull request #3064 from fitzgpt/feat/i18n-turkish
feat(i18n): add Turkish (tr) locale
2026-08-28 11:33:52 +03:00
mattv8 bcaa70216f fix(sessions): restore worktree menu type wiring 2026-08-27 18:43:37 -06:00
mattv8 13ef639479 fix(sessions): keep chat worktree actions hidden 2026-08-27 18:43:37 -06:00
mattv8 a35ff1032c fix(sessions): avoid staged-change rollback conflicts 2026-08-27 18:43:37 -06:00
mattv8 1a9ff65380 docs(sessions): document dirty-source move choice 2026-08-27 18:43:37 -06:00
mattv8 26d6d72551 fix(sessions): preflight every worktree move 2026-08-27 18:43:37 -06:00
mattv8 8fc08853b3 feat(sessions): confirm dirty-source worktree moves 2026-08-27 18:43:37 -06:00
mattv8 0d4b3f036a fix(sessions): require explicit worktree change transfer 2026-08-27 18:43:37 -06:00
mattv8 c75c7809df test(sessions): complete global sessions store mock 2026-08-27 18:43:37 -06:00
mattv8 285bb35224 fix(sessions): recheck idle tree during worktree move 2026-08-27 18:43:37 -06:00
mattv8 52bea6d1f3 fix(sessions): harden worktree move recovery 2026-08-27 18:43:37 -06:00
mattv8 415f443a79 fix(sessions): keep worktree menu hook order stable 2026-08-27 18:43:37 -06:00
mattv8 9babd19d9b feat(sessions): move sessions to existing worktrees 2026-08-27 18:42:57 -06:00
fitzgpt 83c2c7dc76 feat(i18n): add Turkish (tr) locale 2026-08-28 02:27:31 +03:00
Bohdan Triapitsyn b8465ae133 fix: harden and de-slop the merged contribution batch
Follow-ups promised on merge, plus review findings on the batch itself:

- chat: task-tool output now respects the 512KiB render cap; quick-open
  icon is visible at rest on coarse pointers and reachable by keyboard
  (row keydown no longer swallows inner-button Enter/Space); composer
  inline-code decoration drops the metric-shifting padding; a btw fork
  send carries only the boundary instruction, never the promotion notice
- sync: cascade revert/unrevert aborts busy descendants, busy state is
  read from every child store at the moment of use; rule 9 documents
  redo clearing all descendant revert markers
- electron: renderer recovery keeps memory-eviction (a valid
  render-process-gone reason) and both windows share one
  attachRendererRecovery helper
- vscode: process registry is a thin re-export of the web module
  (provider-env-aliases precedent) with ordered register/unregister
  writes and an awaited close
- server/cli: managed-process registry takes injectable deps (fixes the
  unreaped-orphans ReferenceError), corrupt settings errors name the
  file, getWorktrees test restores console.warn
- tests: module-mock harnesses removed (AgentsSidebar, SettingsView
  mobile focus — behaviors stay live but uncovered, accepted trade),
  QuestionMarkdown asserts rendered DOM
- i18n: German gains the debug-panel request keys, Japanese/German drop
  removed worktree keys, Ukrainian unit spacing fixed
- changelog: Copilot AI Credits entries (main + VS Code)
2026-08-28 02:08:09 +03:00
Bohdan Triapitsyn 98567cd6e0 Merge main 2026-08-28 01:27:32 +03:00
Bohdan Triapitsyn de72625dc0 Merge main 2026-08-28 01:26:12 +03:00
Bohdan Triapitsyn cdfd28b3ca Merge main 2026-08-28 01:25:55 +03:00
Bohdan Triapitsyn 56e1eb5416 Merge main 2026-08-28 01:25:37 +03:00
Bohdan Triapitsyn 888f59fc80 Merge pull request #3033 from difagume/fix/inline-code-contrast
fix(ui): improve inline code contrast and chip styling
2026-08-28 01:25:02 +03:00
Bohdan Triapitsyn 34c96f8422 Merge pull request #2375 from JSap0914/fix/2265-tool-output-size-cap
fix(ui): cap oversized tool output before rendering to prevent renderer OOM (#2265)
2026-08-28 01:24:48 +03:00
Bohdan Triapitsyn 5a439ea73d Merge pull request #3127 from robertoberto/feat/quick-open-icon-in-tool-header
feat(chat): add quick-open file icon in tool card header
2026-08-28 01:24:42 +03:00
Bohdan Triapitsyn 3d397b4ad4 Merge pull request #1752 from bashrusakh/fix/1736-branch-filter
fix(worktree): hide non-matching branches during search
2026-08-28 01:24:36 +03:00
Bohdan Triapitsyn e205452223 Merge pull request #2771 from shijie152/fix/relay-key-atomic-settings
fix(cli): atomic settings writes and gate relay key regeneration in connect-url
2026-08-28 01:24:30 +03:00
Bohdan Triapitsyn 024a61aa88 Merge pull request #3169 from wqpan/fix/renderer-crash-recovery
fix(electron): recover crashed renderer windows
2026-08-28 01:24:24 +03:00
Bohdan Triapitsyn 1b5531e266 Merge pull request #1807 from TomzxForks/requests-in-flight
feat(debug): add fetch requests-in-flight tracker with age percentiles
2026-08-28 01:24:17 +03:00
Bohdan Triapitsyn 08a98ce459 Merge pull request #3171 from pocharlies-org/feat/btw-boundary
feat(btw): make a btw session a side question, not a continuation of the parent
2026-08-28 01:24:03 +03:00
Bohdan Triapitsyn 70b04412de Merge pull request #2488 from pascalandr/fix/856-question-markdown
fix(chat): render question prompts as markdown
2026-08-28 01:23:57 +03:00
Bohdan Triapitsyn feba432407 Merge pull request #2784 from herjarsa/fix/silence-worktree-warning-for-non-git-dirs
fix(git): silence getWorktrees warning when directory is not a repo
2026-08-28 01:23:51 +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 5854f43ca1 Merge pull request #2907 from jakoss/github-usage-rework
Align GitHub Copilot quota usage with AI credits
2026-08-28 01:23:40 +03:00
Bohdan Triapitsyn f64d8b59c8 Merge pull request #3109 from bashrusakh/fix/2982-mobile-agent-duplicate
fix(agents): open duplicate editor on mobile
2026-08-28 01:23:34 +03:00
Bohdan Triapitsyn 073c55a129 Merge pull request #2858 from TomzxForks/issue-2847
Remove the 5-model limit on multi-run groups
2026-08-28 01:23:28 +03:00