Commit Graph
181 Commits
Author SHA1 Message Date
Bohdan Triapitsyn ddc8ab91d9 chore: consolidate the unreleased changelogs by theme
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 23:59:10 +03:00
Bohdan Triapitsyn 635c24e396 chore: changelog entries for the merged contribution batch
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 23:55:32 +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 758d627d6c docs(vscode): credit @mdatsev for the OpenCode upgrade fix 2026-08-28 22:48:01 +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 844c5eb22c chore: consolidate the unreleased changelogs
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:13:21 +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
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
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
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
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 de72625dc0 Merge main 2026-08-28 01:26:12 +03:00
Bohdan Triapitsyn 56e1eb5416 Merge main 2026-08-28 01:25:37 +03:00
Bohdan Triapitsyn 87eacc4c5e Merge main 2026-08-27 23:17:06 +03:00
Igor Velho da3a3bf1ec Merge upstream main into feat/subagent-cost-rollup 2026-08-27 11:08:57 +01:00
Bohdan Triapitsyn 11d3c0d51e refactor(chat): drop the Aborted banner from the status surfaces
Aborting a run now just ends it quietly: the status chip and the composer
bar no longer flash an Aborted notice, and the indicator state machine and
its timer are gone from the composer. Acknowledging the session abort
record stays — it is what lets the working chip resume on the next run.
2026-08-26 20:24:27 +03:00
Bohdan Triapitsyn 340738a33f chore: update changelog entries for chat shortcut and comment text 2026-08-26 19:49:17 +03:00
Bohdan Triapitsyn f2ec9b1003 feat(ui): add session history navigation, permission keys, and review shortcuts
mod+alt+arrows step through this window's session-open history (or between
neighbouring tabs when session tabs are on), mod+k r renames the current
session inline, and mod+k a toggles permission auto-accept. Pending
permission cards respond to alt+enter / alt+shift+enter / alt+backspace with
the keys printed on the buttons. The commit message box commits on
mod+enter, alt+arrows step the diff review between changed files, and the
command palette gains search-only commands for rare actions so the initial
list stays short.
2026-08-26 15:46:44 +03:00
Bohdan Triapitsyn 76f977e580 docs: add changelog entries for the centralized shortcut registry 2026-08-26 12:30:48 +03:00
Igor Velho 948f782244 Merge upstream main into feat/subagent-cost-rollup 2026-08-26 09:28:08 +01:00
Bohdan Triapitsyn 8d8d389294 docs(vscode): changelog for the resilient webview connection status (#2997) 2026-08-26 02:43:35 +03:00
igorvelho 749cd39ade Merge upstream main into feat/subagent-cost-rollup 2026-08-25 23:09:44 +01:00
Igor Velho 4247a7ed8e docs: changelog entries for subagent cost rollup 2026-08-24 15:56:00 +01:00
Bohdan Triapitsyn c02d7ff399 docs: changelog entry for unified dropdown search 2026-08-24 15:01:11 +03:00
Bohdan Triapitsyn 2eefd46b70 docs: changelog entries for search, terminal, and mobile keyboard fixes 2026-08-24 14:50:03 +03:00
Bohdan Triapitsyn a547f83ebe docs: draft Unreleased changelog entries 2026-08-24 01:28:53 +03:00
Bohdan Triapitsyn fe80d246ea release v1.20.0 2026-08-23 02:10:48 +03:00
ChangeHowandBohdan Triapitsyn 3a78d86248 fix(ui): open app deep links from chat after confirmation (#2932)
* fix(ui): open app deep links from chat after confirmation

DOMPurify's default URI policy stripped href from anchors with custom
application schemes (obsidian://, vscode://, ...), so every app link
rendered in chat was dead across web, desktop, VS Code, and mobile.

- Classify safe app-link schemes in lib/url.ts (browser-handled,
  scriptable, webview-internal, network, and self-deep-link schemes
  stay excluded) and let openExternalUrl accept them
- Keep app-link hrefs through the markdown sanitize hook
- Intercept app-link clicks in the markdown renderer and route them
  through a confirmation dialog (Trust and open / Open once, dismiss
  to cancel) mounted in the desktop/web app root and the mobile shell
- Persist per-device trusted schemes in a zustand store; trusted
  schemes open without asking again

* feat(settings): manage trusted app link schemes in General

Add an App links section to Settings > General listing the application
schemes trusted on this device with a delete action; removing a scheme
restores the confirmation dialog for it. Register the section in
settings search.

* fix(ui): enforce app link confirmation

* fix(ui): handle app links by runtime

* fix(vscode): keep app links unsupported

* fix(settings): clarify trusted app links

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-08-23 01:53:21 +03:00
Bohdan Triapitsyn a5b0272f01 chore: update unreleased changelog 2026-08-23 01:05:14 +03:00
Bohdan Triapitsyn 1a627e06ad docs(changelog): note /btw side questions and the status-line handoff 2026-08-23 00:42:23 +03:00
Bohdan Triapitsyn c232d358da chore: update unreleased changelog entries 2026-08-22 02:48:02 +03:00
bashrusakh 8cf51db649 docs(changelog): credit contributor in model picker entries 2026-08-20 12:00:01 +11:00
bashrusakh f1b9308394 fix(vscode): pair selection foreground with highlight in model picker 2026-08-20 12:00:01 +11:00
Serhii Dziupin 14d7a0ca9b fix: settle busy sessions after managed OpenCode restart (#3002)
* fix: reconcile busy sessions after managed OpenCode restart

Forced health-check restarts previously rebound the event stream without
settling in-flight turns, so sessions stayed busy with no terminal state.
Interrupt those sessions, classify health failures, and retain bounded
process diagnostics for post-restart diagnosis.

Fixes #2943

Co-authored-by: serkraser <serkraser@gmail.com>

* fix: surface interrupted chats after OpenCode restart

Complete unfinished assistant turns as aborted once the session is
authoritatively idle, and show a persistent toast so users can continue
instead of remaining silently stranded.

Fixes #2943

Co-authored-by: serkraser <serkraser@gmail.com>

* fix: redact Basic auth credentials in restart diagnostics

The key/value sanitizer stopped at whitespace, so Authorization: Basic
credentials survived in stderr tails and health snapshots. Redact the
scheme token before that rule runs.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-19 11:53:30 +03:00
bashrusakh 599dafcd8c fix(vscode): add project adds the chosen folder to the workspace 2026-08-19 10:38:54 +11:00
Bohdan Triapitsyn ef2afdc759 release v1.19.0 2026-08-19 01:18:56 +03:00
Bohdan Triapitsyn 4a0cf63f9e chore: update changelog entry with attribution 2026-08-19 00:52:49 +03:00
Yun Feng 36ce73f753 feat(ui): show session cost in VS Code context usage readout (#2991)
Share the desktop session-card currency formatter (lib/money.ts) and surface
the current session's cost in the extension chat-header context usage tooltip.
2026-08-19 00:34:23 +03:00
Bohdan Triapitsyn a66903c73c chore: update unreleased changelog entries 2026-08-18 23:50:43 +03:00
Serhii Dziupin a01b7eec78 Merge pull request #2914 from pocharlies/fix/context-usage-server-total
fix(ui): stop the context meter from counting every internal round-trip
2026-08-18 11:07:04 +03:00
Serhii Dziupin 07f8264e72 merge: resolve changelog conflicts with main
Keep main's reordered Unreleased lists and add the config-wipe fix bullet
at the top of both changelogs.
2026-08-17 16:29:08 +03:00
Bohdan Triapitsyn 21152ec120 chore(vscode): update changelog for integrations settings page 2026-08-16 15:55:49 +03:00
dibanez 450d30b3ee docs(changelog): credit the context meter fix contributor
Requested by review: the changelog-authoring skill requires inline
contributor credit for non-owner contributors.
2026-08-15 21:47:02 +02:00
dibanez 9e1a9b59b1 fix(ui): stop the context meter from counting every internal round-trip
The token breakdown of an assistant message accumulates across every API
round-trip inside the turn: each tool call re-reads the whole cached
prompt, so input/cache.read add up to several times the context window.
Every context-usage surface summed those fields, which is why the meter
could read 330% of a 1M window whose real fill was 232,872 tokens
(23.3%), and why reopening an older session jumps the readout (#2562).

The server reports the final round-trip's window as tokens.total
(optional in the message schema; opencode 1.18.18 returns it, verified
against its live /session/:id/message API). Prefer it everywhere the
window fill is displayed and fall back to summing only when the server
did not send it: contextTokensFromBreakdown in tokenUtils now owns that
rule, and the context store extractor, sync store getter, work status
panel, context sidebar, VS Code layout, mini chat, and mobile metadata
all use it instead of their own inline sums.

Fixes #2562
2026-08-15 21:46:49 +02:00
Bohdan Triapitsyn e3094ee676 docs(changelog): add pending unreleased entries and reorder by impact 2026-08-15 17:58:31 +03:00
Bohdan Triapitsyn 268f9ea9f2 fix(github): keep merged PRs as branch history instead of hiding them
Branch status resolves an open PR across the whole fork network first, so a
merged fork PR can never hide an open upstream PR for the same head. Only when
no target has an open PR does the branch's newest closed/merged PR come back,
as history.

The panel shows that history as a compact note and offers creating the next PR
below it, instead of either sticking on a terminal PR or going blank after a
merge. Terminal associations stay persisted for reload continuity but are never
treated as authority: they revalidate on the discovery cadence and on focus.

History is looked up only for the branch's own remote and name, and remembered
per repo+branch, so the extra lookup cannot exhaust the route's resolve budget.
The checks summary and merge-permission lookup are skipped for a closed or
merged PR, where neither is actionable.
2026-08-15 17:56:55 +03:00
Cursor Agentandserkraser 8b086343fd merge: resolve changelog conflicts with main
Keep both Unreleased bullets: the config-wipe Settings fix and the
stale merged-PR Git panel fix from main.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 05:30:54 +00:00
Cursor Agentandserkraser a500a5d4e9 merge origin/main into feat/stale-last-directory-fallback-1be0
Keep both Unreleased changelog bullets: the lastDirectory new-chat
fallback and the Git PR panel stale-status fix from main.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 05:10:00 +00:00
Cursor Agentandserkraser c1640522ec docs(changelog): note stale merged PR panel fix
Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:27:52 +00:00
Cursor Agentandserkraser 90e79b04a4 fix(sessions): fall back when lastDirectory is a deleted worktree
New chats inherited a persisted lastDirectory even after that worktree
was removed, so the first message saved but the prompt never started.
Validate the implicit draft directory, fall back to the active project
only when OpenCode confirms the path is missing, and leave explicit
worktree targets and unknown probes unchanged.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:26:39 +00:00