3564 Commits
Author SHA1 Message Date
Bohdan Triapitsyn 556b151492 fix(chat): limit draft transition animation 2026-08-22 11:32:01 +03:00
gaojunran a498d1935d fix(git): don't treat bare HEAD as a branch diff base
git switch -c / git checkout -b from the current branch record
'branch: Created from HEAD' in the reflog, but parseBranchCreationSource
only rejected 'HEAD@{...}' (detached start) and raw commit hashes. The
bare HEAD passed through, so getBranchBase returned { base: 'HEAD' }
and the branch scope computed diffs against HEAD itself, which is empty
when the service is checked out on that branch and wrong otherwise.

Treat bare HEAD like HEAD@{...}: no named source is recorded, so return
null and let the UI ask the user to pick a base.
2026-08-22 11:44:23 +08:00
Bohdan Triapitsyn 80068c634d fix(sessions): centralize global polling 2026-08-22 02:49:45 +03:00
Bohdan Triapitsyn c232d358da chore: update unreleased changelog entries 2026-08-22 02:48:02 +03:00
Bohdan Triapitsyn 11d7c7b481 fix(chat): keep long user messages expandable
Truncation was measured once on mount and watched through a ResizeObserver
on the clamped element, whose own height stops changing under line-clamp.
A message measured before its content settled never regained the expand
affordance, and a just-sent one measured before its turn finished laying
out could not be expanded at all.

Measure at click time so expanding depends on whether the text is clipped
right now, re-read once on the next frame after mount, and observe the
children (which keep their natural height) plus subtree swaps.
2026-08-22 02:45:34 +03:00
Bohdan Triapitsyn 77479127a5 fix: reduce code block highlight flicker
Preserve layout with invisible placeholders while worker highlighting loads
Reuse cached highlighted lines on first render when available
Differentiate loading from failed highlighting results for better fallback behavior
2026-08-22 02:10:03 +03:00
Bohdan Triapitsyn 4021dd4e26 fix(git): separate generated PR prompt blocks
The additional context and pull request template blocks ran into the file
list without a blank line, and the template's markdown headings blended into
the surrounding instructions. Each block now starts on its own, and template
content is fenced with explicit markers labelled as structure to reuse rather
than instructions to follow.

Claude-Session: https://claude.ai/code/session_01NzK8hD1hFHHHwv2FgZJwC2
2026-08-22 02:04:06 +03:00
Bohdan Triapitsyn cd46f0e3fb fix(chat): stop the just-sent user message from flickering
The server echo of an optimistic user message carries different part
ids, so the reducer dropped the optimistic part and appended the server
one at the end, and MessageBody keyed user parts by part id. The key
change remounted the text subtree (blank frame, markdown re-parse,
truncation state reset) and the append reordered text against file
parts.

Replace the optimistic part in place and key user parts positionally.
2026-08-22 01:55:52 +03:00
Bohdan Triapitsyn 514d2e82da feat(git): follow repository style when generating commit and PR text
Commit generation now samples the last 10 commit subjects and instructs the
model to match their language, prefix convention, and length, falling back to
Conventional Commits only when the history shows no consistent style.

PR generation probes the conventional pull request template locations and
reuses the repository's own sections and checklists as the body structure when
one is found.

Claude-Session: https://claude.ai/code/session_01NzK8hD1hFHHHwv2FgZJwC2
2026-08-22 01:52:19 +03:00
Bohdan Triapitsyn 4078deb90a fix(desktop): align Windows close button chrome 2026-08-22 01:36:12 +03:00
Bohdan Triapitsyn d849742d22 fix(chats): hide repository work status
Prevent managed Chat drafts and sessions from inheriting an active project's repository context in the Work Status panel while retaining directory-independent status sections.
2026-08-22 01:31:02 +03:00
Bohdan Triapitsyn 3992e65c7a fix(chat): improve autocomplete popups 2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 64006cf2cd fix(chat): smooth draft session transition 2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 23928d342c feat(dictation): transcribe after recording instead of live
Parakeet is an offline model trained on whole utterances, so re-decoding
the growing buffer to animate a live transcript cost O(n^2) work for a
result the final decode replaced. Sessions now decode once per committed
segment, and the composer shows a scrolling waveform of the mic level
instead of running text.

Long dictations split at a pause once past 60s (hard cap 90s) instead of
on a blind 15s timer, so cuts no longer land mid-word. Committed segments
decode while the user is still speaking: a 185s dictation returns 4.1s
after stop instead of 11.0s, with identical text (816 vs 817 words).

Also fixes two ways the stream manager could silently drop transcribed
audio. It now counts the commits it issued instead of trusting the
session's echoed events, so a commit still in flight when the client
finishes can no longer be left out of the final text. And segment
byte/peak accounting is reset where the commit is issued rather than when
the event arrives, which could mistake the tail of a dictation for
silence and clear it.
2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 35998f9f4d fix(sidebar): indent sessions inside folders 2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 0d50253efa refactor(integrations): retire unavailable options
Remove retired Command Code, Discord, and Telegram integration entries, search targets, and documentation. Keep Command Code provider usage and logo support available through normalized provider ID aliases.
2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 0b01f5ae2d feat(diff): add branch scope to context panel diff view
Show every change on the current branch relative to its base in the
Changed/Staged/Last turn dropdown. The base comes from the branch's
reflog record or an explicit per-branch user choice (persisted), never
a main/master guess; when git has no record the user picks a base once
from a searchable branch list.

- server: GET /api/git/branch-base (reflog-derived base),
  GET /api/git/range-files (name-status -z with rename/copy
  destination paths and -C copy detection)
- shared UI: optional getBranchBase/getGitRangeFiles runtime APIs
  with boundary parsing; persisted per-branch overrides keyed by
  runtime+directory+branch
- DiffView: branch scope with confirmed-unavailability coercion of
  persisted tabs (detached HEAD, default-branch checkout, metadata
  settled without a default), range-invalidated diff cache guarded
  against stale completions, bounded branch-metadata retry, read-only
  diff actions in branch scope; hidden in VS Code
- helper module branchDiffScope.ts with tests for coercion,
  availability, race conditions, and retry exhaustion
2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 9f7d839fc6 docs(integrations): add provider account notice 2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn f29844b2f1 feat(settings): mark integrations as experimental 2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn eda20654a6 fix(chat): let bash output grow with content 2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 96c7be9342 feat(chat): animate draft session transition 2026-08-22 01:10:19 +03:00
Bohdan Triapitsyn 70a7a77ded refactor(ui): name workspace surfaces 2026-08-22 01:10:19 +03:00
gaojunran ae1c6de470 feat(ui): virtualize large file preview in FilesView
Files above the editable size cap (MAX_VIEW_CHARS) now render their full
content through pierre's Virtualizer (viewport-only DOM) with highlighting on
the shared Shiki worker pool instead of a 200k-char main-thread-highlighted
slice.

Also fixes a pierre virtualization deadlock: forcing the virtualized host to
viewport height decoupled the IntersectionObserver judgment box from the
scroll content height, so a large scroll jump blanked the file (0 lines).
The large-file host now keeps no fixed height; the observer always sees it
intersecting.

Addresses #2868 (part 1: large-file preview virtualization).
2026-08-22 02:33:28 +08:00
Tom Rochette be234548fa feat(ui): show externally-created sessions in sidebar and Recent view (#2930)
* feat(ui): show externally-created sessions in sidebar and Recent view (#1441)

Sessions created by external OpenCode processes (CLI, other server
instances) share the same database but don't broadcast SSE events to
OpenChamber's connected server. The existing 45s global polling via
experimental.session.list() already discovers these sessions, but the
isKnownActiveSessionDirectory filter in SessionSidebar.tsx removes
them when their directory isn't a registered project.

Add effectiveKnownDirectories that extends knownSessionDirectories
with directories derived from globalActiveSessions themselves, so
external sessions pass the filter and appear in the sidebar and Recent
view.

Validated with two live OpenCode server processes sharing the same
database: global experimental.session.list() returns external sessions
immediately, while per-directory APIs do not.

* Revert "feat(ui): show externally-created sessions in sidebar and Recent view (#1441)"

This reverts commit 94acda43ad3049e7674d8eb3f24b1f74acb0d1c3.

* fix(ui): make sidebar reactive to global session store updates (#1441)

Replace non-reactive useGlobalSessionsStore.getState() with direct
reactive subscriptions for activeSessions and archivedSessions. The
previous getState() pattern relied on proxy subscriptions
(activeSessionStructure, hasAuthoritativeGlobalSessions) to trigger
re-renders, which created a fragility gap where store updates could
go unnoticed by the sidebar.

Add a 45s periodic refreshGlobalSessions() interval in the sidebar,
independent of the tray sync hook. The tray sync's polling is gated
behind isTrayPlatform() and isTrayEnabled(), so on runtimes where
the tray is unavailable, there was no periodic refresh of global
sessions at all. External sessions (created by CLI or other server
processes) were only discovered on initial mount or page refresh.
2026-08-21 16:51:06 +03:00
Tom Rochette a79ae57ae5 fix(ui): scope file-reference stat probes to the session directory (#3022)
* test: add regression test for stat directory scoping (#3019)

* fix: scope file-reference stat probes to the session directory (#3019)

The /api/fs/stat probe sent by the markdown renderer carried no
directory hint, so the server resolved the workspace from
settings.lastDirectory. When the browsed directory differs from the
session directory the stat returns 400 and the renderer treats it as
file-does-not-exist, silently disabling file-reference links.

Send effectiveDirectory as x-opencode-directory on the probe and
qualify the stat cache key by directory so a rejection under one
directory cannot leak into another. The probe logic moves from
MarkdownRendererImpl into fileReferenceStat with unit coverage.
2026-08-21 16:48:32 +03:00
Bohdan Triapitsyn ad5bc2b01b feat: focus chat input after creating a new inline comment
Opens the chat tab when a new inline comment is submitted
Automatically focuses the chat composer for quicker follow-up
Leaves draft updates unchanged when editing an existing comment
2026-08-21 16:38:37 +03:00
Tom Rochette 2f6ac48675 chore: lower days-before-stale from 60 to 28 (#1996)
* chore: lower days-before-stale from 60 to 28

* Add CONTRIBUTING.md note regarding PRs being active
2026-08-21 16:34:41 +03:00
Bohdan Triapitsyn b1030d3cb7 fix(chats): align folders and session actions
Render managed Chats through the shared folder-aware session group and keep folder ownership at the Chats root, including new drafts and older per-directory scopes.

Hide worktree actions for Chats, make worktree shortcuts inert on Chat drafts, and let new-session shortcuts inherit an active session directory while explicit Chats controls still create managed Chat drafts.
2026-08-21 16:29:26 +03:00
Bohdan Triapitsyn b879cf323f feat(sidebar): add single-project display mode 2026-08-21 16:25:51 +03:00
Bohdan Triapitsyn bbb2fdbe19 fix(chat): keep draft selectors above composer 2026-08-21 13:13:11 +03:00
Bohdan Triapitsyn 2766e9fd8c fix(chat): tidy composer pickers 2026-08-21 13:10:48 +03:00
Pascal André cb1f961ea9 fix(chat): handle truncated diff headers 2026-08-21 12:00:01 +02:00
Pascal André ac41d4e8c9 fix(settings): persist editor font size 2026-08-21 11:57:59 +02:00
Bohdan Triapitsyn 59df2963ae fix(sidebar): keep sticky activity label in sync
Track Chats and Recent section sentinels so the desktop sticky overlay changes identity only when the corresponding section reaches the top of the sidebar.
2026-08-21 12:49:40 +03:00
Bohdan Triapitsyn 9e87d7fdb9 feat(chats): add managed projectless chat sessions
Create projectless chat sessions under a managed, date-scoped Chats directory and clean abandoned or deleted session folders.

Add Chats to sidebar state, startup cache, shared context, and Electron Mini Chat while keeping VS Code project-only. Resolve managed chat directories to one server-side memory owner and document the runtime contracts.
2026-08-21 12:12:40 +03:00
Jakub Syty 0c847e25bd Merge origin/github-usage-rework into github-usage-rework 2026-08-21 11:02:47 +02:00
Jakub Syty a3d20512a0 Refactor application architecture and shared functionality 2026-08-21 10:59:47 +02:00
gaojunran 19c5cc1f1e fix(markdown): keep CJK punctuation out of bare-URL autolinks
marked's GFM url tokenizer swallows any non-space text after a bare URL,
including fullwidth punctuation and Chinese annotations written directly
after it ("https://x.com/docs(说明)了解更多"). Switch the autolink
tokenizer to marked-linkify-it, which treats Unicode punctuation as a URL
boundary, so fullwidth parens and CJK punctuation are trimmed naturally.
2026-08-21 13:10:42 +08:00
Diego Fabricio Guzman Medrano 99af34dfd4 fix(ui): static inline code contrast fix + chip styling
Opcion A pura: fondo de inline code y color corregidos directamente
en los 42 themes JSON (darken 5 light / lighten 5 dark, contraste
WCAG en light). Sin metodos nuevos en cssGenerator ni generadores.
Se mantiene solo el padding/radius del chip en index.css y
composerHighlight.ts.
2026-08-20 22:30:24 -05:00
Serhii Dziupin 73c2f7bf23 fix(server): allow reading files through workspace-internal symlinks
Read-family fs routes (stat/read/raw/serve) rejected files whose canonical
(realpath) target escaped the project root, so a symlinked folder inside the
workspace (e.g. ~/test_folder -> /shared/test_folder) listed fine but every
file open failed with "Failed to open file".

Resolve symlinks before the containment check: paths that are lexically
inside the active workspace stay readable even when their realpath target
lives outside it, while direct paths outside the workspace (including
traversal and canonical-path requests) remain rejected and write/exec keep
the strict canonical boundary. The directory listing now returns entry
paths under the requested (user-visible) directory so the file tree hands
back addressable paths instead of canonical ones.

Refs OPE-235
2026-08-21 01:40:11 +02:00
Bohdan Triapitsyn 0d70a631f6 fix(electron): block startup splash history navigation 2026-08-20 21:25:29 +03:00
Mayuresh Kadu 3532cef049 changelog: fix 'catch catches' phrasing 2026-08-20 18:16:18 +01:00
Mayuresh Kadu 3edc765ddd fix: restore fast-path comment indentation, correct reproduce script claim
Address bot review findings:
- Indent the three 'Fast path' comment blocks to match surrounding code
- Reproduce script header no longer claims the fast path catches brew
  paths with a minimal PATH — the hardcoded fallbacks do that; the fast
  path only sees binaries already in the inherited PATH
2026-08-20 18:14:41 +01:00
Mayuresh Kadu da91e70efe Merge remote-tracking branch 'origin/reproduce/issue-1720' into reproduce/issue-1720
# Conflicts:
#	.gitignore
#	CHANGELOG.md
2026-08-20 18:08:08 +01:00
Mayuresh Kadu d671119884 Merge upstream/main into reproduce/issue-1720
Resolve conflicts after 914 upstream commits:
- CHANGELOG.md: keep brew opencode fix entry in Unreleased
- .gitignore: keep superpowers docs exclusion, take upstream additions

Drop /usr/local/ TOOLCHAIN_SEGMENTS addition — /usr/local/bin is part
of the default macOS PATH, so treating it as user-configured would skip
the login-shell fallback that this fix relies on. Upstream tests
(pass 1602) confirm minimal system PATH must not look user-configured.
2026-08-20 18:04:40 +01:00
Bohdan Triapitsyn 3613127e2d fix(quota): support z.ai credit limits 2026-08-20 19:09:13 +03:00
Bohdan Triapitsyn 108c9f529b fix(skills): simplify skill source cards 2026-08-20 19:07:59 +03:00
Bohdan Triapitsyn 647a949369 feat(providers): support custom API protocols 2026-08-20 18:39:13 +03:00
bot-hermes 404b417d10 revert: exclude workflow file change (no workflow scope on fork token) 2026-08-20 14:49:26 +00:00
bot-hermes 285f551cd5 Merge remote-tracking branch 'origin/main' into feat/gitlab-issues-mrs
# Conflicts:
#	packages/ui/src/components/chat/work-status/WorkStatusContextSection.tsx
#	packages/ui/src/components/chat/work-status/WorkStatusPrimaryGroup.tsx
2026-08-20 14:47:33 +00:00