Commit Graph
3108 Commits
Author SHA1 Message Date
Bohdan Triapitsyn e0869efeb0 Merge remote-tracking branch 'origin/main' into port-2738
# Conflicts:
#	packages/ui/src/components/session/sidebar/DOCUMENTATION.md
#	packages/ui/src/components/session/sidebar/sessions/SessionNodeItem.tsx
#	packages/ui/src/components/session/sidebar/sessions/sessionNodeItemUtils.test.ts
2026-08-28 23:45:25 +03:00
Bohdan Triapitsyn 8a82bbaf21 fix(ui): complete VS Code bootstrap detection for directory startup (#2359) (#2462)
fix(ui): complete VS Code bootstrap detection for directory startup (#2359)
2026-08-28 23:41:34 +03:00
Bohdan Triapitsyn 5a0a9af8e3 fix(chat): keep sticky header gradient inside its padding (#2676)
fix(chat): keep sticky header gradient inside its padding
2026-08-28 23:41:25 +03:00
Bohdan Triapitsyn d8737d397d fix(ui): keep the selected model when switching agent modes (#2690)
fix(ui): keep the selected model when switching agent modes
2026-08-28 23:41:16 +03:00
Bohdan Triapitsyn 1f7b7f8a16 fix(settings): flush pending debounced settings writes on page unload (#2734)
fix(settings): flush pending debounced settings writes on page unload
2026-08-28 23:41:07 +03:00
Bohdan Triapitsyn 9e5890729c fix(git): include remote-only branches from ls-remote in branch lists (#2735)
fix(git): include remote-only branches from ls-remote in branch lists
2026-08-28 23:40:58 +03:00
Bohdan Triapitsyn f10fc5ffab fix(git): make post-mutation status refresh authoritative (#2740)
fix(git): make post-mutation status refresh authoritative
2026-08-28 23:40:49 +03:00
Bohdan Triapitsyn ae6a7fa826 chore: changelog entry for bounded shell probes
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 23:25:01 +03:00
Bohdan Triapitsyn 8d44e5e561 fix(server): bound login-shell probes so a slow rc file cannot stall startup (#1742)
fix(cli): detect brew-installed opencode on macOS (#1720)
2026-08-28 23:23:27 +03:00
Bohdan Triapitsyn 1151c40f13 fix(server): bound login-shell probes so a slow rc file cannot stall startup
Merge main and reduce the change to the defect that reproduces: the server's
synchronous login-shell probes (env snapshot and command -v for opencode,
node, bun) ran with no timeout, so a slow or interactive rc file held startup
until it returned — on macOS that is what made a brew-installed opencode look
undetected from a Dock launch. Every probe now carries the same 5s bound the
Electron shell probe already uses and falls through on overrun; the known
install locations already include both Homebrew prefixes.

The non-login command -v fast path and the reproduction script are dropped:
a plain sh inherits the same PATH the resolver has already walked.

Closes #1720
2026-08-28 23:23:16 +03:00
Bohdan Triapitsyn 12ee13ee0b chore: changelog entry for the follow opt-out gestures
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 23:20:39 +03:00
Bohdan Triapitsyn 80fddba933 fix(chat): release live follow on middle-button pan, Shift+Space, and nested wheel (#2107)
fix: release chat autoscroll on explicit navigation intent
2026-08-28 23:06:49 +03:00
Bohdan Triapitsyn 1d1c215230 fix(chat): release live follow on middle-button pan, Shift+Space, and nested wheel
Merge main and reshape the follow opt-out to the gestures the timeline was
missing: a middle-button press starts the platform autoscroll pan (the only
scroll gesture on wheel-less mice and tablets with a pointer), Shift+Space
scrolls up from the keyboard, and an upward wheel over a nested scroller that
still has room above stays with that scroller instead of releasing the chat.

The grace re-pin timer and scroll-direction tracking are dropped: returning to
within the end band already re-arms follow, and the mode machine is built
without timers on purpose. Pause/Break never move the viewport and are not
gestures.

Closes #1640
2026-08-28 23:05:57 +03:00
Bohdan Triapitsyn 8029480f22 docs(triage): a fixed-close needs its evidence commit reachable from main 2026-08-28 23:04:05 +03:00
Bohdan Triapitsyn 7c1902b9e9 fix(settings): drop the class-name assertion test and redundant truncate from the passkey row 2026-08-28 23:03:16 +03:00
Gautam0507andRepro Agent 8fee25c97b fix(ui): let SettingsFieldRow labels truncate on long content (#3196)
* test: reproduce long passkey label overlay (issue #3181)

* fix(ui): let SettingsFieldRow labels truncate on long content

---------

Co-authored-by: Repro Agent <repro-agent@example.com>
2026-08-28 23:02:50 +03:00
Bohdan Triapitsyn 339c88783c docs(triage): an open PR blocks stale and fixed closes of its issue 2026-08-28 22:51:50 +03:00
Bohdan Triapitsyn 758d627d6c docs(vscode): credit @mdatsev for the OpenCode upgrade fix 2026-08-28 22:48:01 +03:00
Bohdan Triapitsyn 7b59610efc docs(changelog): credit @mdatsev for the OpenCode upgrade fix 2026-08-28 22:47:50 +03:00
Bohdan Triapitsyn cddc366afc docs(triage): check for an open PR before taking an issue into work; credit @mattv8 for the CRLF composer fix 2026-08-28 22:45:29 +03:00
Bohdan Triapitsyn 33783999e5 fix(chat): own end-follow during streaming instead of the list's animated maintain
The list's animated maintainScrollAtEnd is single-flight and re-pins only
within a tenth of the viewport, so in a narrow viewport (VS Code sidebar) each
revealed block — several screens tall there — left the reader a second behind
and multiple screens above the live edge. The timeline hook now follows growth
itself: glide when within a viewport of the end, otherwise jump to one screen
above the end and glide the rest. Measured at 420x640: time spent >40px behind
dropped from 45% to 11%, max distance from 1682px to 382px.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 22:33:01 +03:00
Bohdan Triapitsyn 844c5eb22c chore: consolidate the unreleased changelogs
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:13:21 +03:00
Bohdan Triapitsyn 505f9b9e8c feat(mobile): list managed Chats in the sessions sheet
Chat sessions without a project were dropped from the mobile session tree
because no registered project owned their directory. The sheet now partitions
sessions like the desktop sidebar and shows Chats as a collapsible section above
the project tree, with the same rows, swipe actions and paging; search results
label them "Chats" instead of the raw directory name.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 010ee59f60 fix(chat): keep the viewport in place on send when auto-follow is off
With "Follow new content while streaming" disabled, sending from mid-history
no longer anchors the new message at the top of the viewport; the reader stays
where they were and the scroll-to-bottom pill leads to the new turn. Sending
from the live edge still parks the message as before. The setting's info text
now describes this in every locale.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn b291eb0b03 docs(agents): changelog is written only on the maintainer's explicit request
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 59fa91309a fix(ui): keep the app root pinned when the caret scrolls it
Chromium scrolls overflow:hidden ancestors when a textarea caret moves out
of view (PageUp/PageDown in the prompt box, long prompts), shifting the whole
app up and hiding the title bar with no way to scroll back. Snap html/body/#root
back to zero on any root scroll event in the web, desktop, VS Code and mini-chat
apps.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn e00ebea262 fix(browser): wait for panel surface before capture 2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 4e857b7877 fix(vscode): remove unreachable branch checkout behavior
The VS Code app mounts VSCodeLayout, which exposes sessions, chat, and settings but not the shared GitView or its branch selector. The remote-tracking checkout path added for that selector therefore had no user-reachable caller in the extension.

Restore the existing VS Code checkout implementation and remove the VS Code changelog claim. The web runtime keeps the fix because its Git view exposes the branch selector.
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 82bd2a60b0 Merge pull request #3207 from openchamber/fix/composer-crlf-caret
fix(composer): keep the caret inside the normalized document
2026-08-28 20:07:30 +03:00
Iuliia Ivashko eca9353382 fix(composer): keep the caret inside the normalized document
CodeMirror collapses a CRLF pair into one line break, so the document is
shorter than the string it was given. The composer derived the caret from
the JS string length, which put it past the end of the document and made
dispatch throw `RangeError: Selection points outside of document`.

Because the exception fires before the transaction applies, the document
never updates, the un-normalized text stays in React state, and the draft
persists as-is: every later visit to the session restores it and crashes
again, with no way out from the UI.

Derive the caret from the change set instead, in the controlled writeback
and in the imperative insert/replace handles.

fixes #3013

# Conflicts:
#	CHANGELOG.md
#	packages/vscode/CHANGELOG.md
2026-08-28 19:14:02 +03:00
Bohdan Triapitsyn 7b5b431d22 Merge pull request #3209 from openchamber/fix/opencode-upgrade-target
fix(opencode): name the release when upgrading OpenCode
2026-08-28 19:04:18 +03:00
Iuliia Ivashko 20cda28cac fix(opencode): name the release when upgrading OpenCode
Since opencode 1.18.x, `POST /global/upgrade` requires a `target` semver in
the body. OpenChamber sent an empty object, so every "Update OpenCode" click
came back 400. The rejection arrives as `{name, data:{message}}`, which has
no `error` field, so the user was left with the bare status text: "Bad
Request".

Resolve the target from the latest release — the same lookup the upgrade
prompt already uses to decide there is anything to offer — and fail with an
explicit code when it cannot be resolved, rather than sending a body opencode
is guaranteed to reject. Read the upstream rejection message so a refused
upgrade explains itself.

The VS Code extension carries its own copy of this flow and had the same two
defects; both are fixed there.

fixes #3121
2026-08-28 18:48:27 +03: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 b5fed6e2e2 docs(agents): VS Code reachability gates changelog entries; yulia-ivashko carries maintainer weight
- changelog-authoring: a VS Code entry requires the surface to be
  mounted from the VS Code entrypoint (consult the surface map in
  packages/vscode/src/DOCUMENTATION.md when present); shared-but-unmounted
  code earns no entry
- triage-prs: yulia-ivashko is a core maintainer with merge rights —
  her review decisions carry maintainer weight in sweeps
2026-08-28 16:30:55 +03:00
Bohdan Triapitsyn 30f635c7ed docs(agents): reachability is proven from the runtime entrypoint
A shared component importing a runtime API proves nothing about that
runtime; the runtime's own entrypoint must mount the path. Trace
top-down before claiming a bug or fix is user-visible in a runtime —
VS Code's layout mounts only a subset of the shared surfaces and bites
reviews constantly.
2026-08-28 16:24:06 +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
Bohdan Triapitsyn 5faa1a6531 docs(agents): needs-your-hands is binary — a merge gate or nothing
Either the manual check guards an irreversible path and the verdict
reads 'MERGE — after you verify X', or the verdict is a plain MERGE
with no checklist: residual cosmetic risk is absorbed by the verdict
(users surface it, a revert costs one commit). Post-merge homework
lists were the reviewer offloading uncertainty onto the maintainer.
2026-08-28 15:32:07 +03:00
Bohdan Triapitsyn 8b27bd6791 docs(agents): split needs-your-hands into merge gates and post-merge smoke
A manual check either guards an irreversible path (data loss, upgrade
and restart flows, auth) and gates the merge, or it is low-risk visual
polish where merging first is fine and skipping the check is stated as
accepted risk — never a ritual list padded to feel thorough.
2026-08-28 15:28:14 +03:00
Bohdan Triapitsyn 779cf19ae6 docs(agents): pickup mode, clickable references, and calibrated report detail
- PRs/issues with human thread activity run in pickup mode across all
  three skills: the output opens with thread state (asked / answered /
  resolved at HEAD / remaining) and continues the conversation instead
  of restarting review — the sweep remembers the maintainer's own
  comments for them
- every PR/issue reference in maintainer-facing output is a clickable
  markdown link, never a bare number
- report entries are calibrated: 2-4 sentences each (what, why this
  verdict, main risk), needs-your-hands lives inside the entry rather
  than a number-repeating section
2026-08-28 15:24:17 +03:00
Bohdan Triapitsyn 8821b9f69e Merge pull request #3204 from openchamber/fix/desktop-update-install-errors-visible
fix(desktop): surface failed update installs
2026-08-28 15:14:42 +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 1760347dc7 docs(agents): prior maintainer verdicts are binding across triage sweeps
A sweep verifies whether an earlier push-back or recorded product
decision was addressed at the current HEAD and reports that explicitly;
it never re-decides or re-asks. The generic rebase-request is never
posted over an existing substantive review comment.
2026-08-28 14:12:35 +03:00
Bohdan Triapitsyn 3f3d942aab fix(browser): reveal panel for agent captures
Fixes #3175
2026-08-28 14:06:43 +03:00
Bohdan Triapitsyn 262397f896 docs(commands): source bug-work from the root-cause:found label only
The command ships in the public repo; the local triage backlog file is
maintainer-private and not a dependency anyone else can resolve.
2026-08-28 13:54:27 +03:00
Bohdan Triapitsyn 198d3f12d1 docs(commands): add feature-work and bug-work session starters
Conversation-style entry points so the maintainer can start real work
without opening the GitHub UI: feature-work serves a menu of accepted
features (approved scope from the acceptance comment is binding);
bug-work serves verified bugs from the local fix backlog and the
root-cause:found label, severity-first, re-verifying anchors before
fixing. Both close the loop with fixes #N in the eventual commit.
2026-08-28 13:53:03 +03:00
Bohdan Triapitsyn 5978b6cb14 docs(agents): record the fate of feature decisions
A maintainer's answer on a FEATURE-DECISION now resolves mechanically:
wanted features get an acceptance comment plus the new accepted label
(never re-asked by later sweeps; label:accepted is the implementation
roadmap), declined ones get the drafted close; conditional answers are
recorded as the accepted scope.
2026-08-28 13:48:54 +03:00
Bohdan Triapitsyn f826f41f55 docs(agents): detect silently-fixed issues and link fixes to issues at merge
triage-issues gains a silently-fixed detection ladder, strongest
evidence first: mechanism-anchor (git log -L on the root-cause:found
file:line since the issue date), repro re-run against current main, and
symptom search over commits/CHANGELOG/merged PR titles. CLOSE-FIXED
always names its evidence; an unverified hunch only asks the reporter
to retry.

pr-review's merge verdicts now search open issues for the symptom a bug
fix resolves and propose Closes #N, so fixes stop landing unlinked.
2026-08-28 13:06:22 +03:00