Commit graph

2569 commits

Author SHA1 Message Date
dependabot[bot]
4906448367
chore(deps): bump undici from 7.30.0 to 7.30.1 (#1809)
Some checks are pending
CI / semgrep (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / vscode (push) Waiting to run
Bumps [undici](https://github.com/nodejs/undici) from 7.30.0 to 7.30.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/nodejs/undici/releases">undici's releases</a>.</em></p>
<blockquote>
<h2>v7.30.1</h2>
<h2>Security fixes</h2>
<h3>High severity</h3>
<h4>Denial of service via TLS 1.2 certificate-changing renegotiation</h4>
<p><strong>CVE-2026-87018 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-qrxm-fqhp-jwvm">GHSA-qrxm-fqhp-jwvm</a></strong></p>
<p>A malicious or compromised HTTPS server could crash the Node.js process by initiating TLS 1.2 renegotiation and presenting a different, CA-trusted certificate whose hostname did not match the requested host. The resulting socket error reached an assertion in undici's HTTP/1.1 and HTTP/2 connection handling. This release handles post-connect certificate errors without terminating the process.</p>
<h4>TLS certificate validation bypass through dropped <code>Agent</code> options</h4>
<p><strong>CVE-2026-109383 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-2m5v-pch6-74hx">GHSA-2m5v-pch6-74hx</a></strong></p>
<p><code>Agent</code> used a JSON-based clone for constructor options, which silently removed function-valued TLS options such as <code>checkServerIdentity</code>. Applications relying on custom certificate or public-key verification could therefore accept a certificate that the callback was intended to reject. This release preserves TLS options when creating per-origin dispatchers.</p>
<h4>Cache poisoning and cross-user disclosure through cross-origin redirects</h4>
<p><strong>CVE-2026-109829 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-4w7w-5xrc-9h26">GHSA-4w7w-5xrc-9h26</a></strong></p>
<p>When an originless <code>Agent</code> combined redirect and shared-cache interceptors as <code>compose(redirect(), cache())</code>, a response from a cross-origin redirect could be stored under the original URL. This could allow persistent cache poisoning or disclosure of user-specific responses to later callers. This release verifies the response origin before caching and preserves redirect-hop cache-control policy.</p>
<h4>Denial of service through excessive <code>Content-Encoding</code> values</h4>
<p><strong>CVE-2026-109869 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-xjj6-f33q-929c">GHSA-xjj6-f33q-929c</a></strong></p>
<p>A malicious HTTP server could crash the Node.js process by returning more than five content codings and closing the connection before sending the body. Although <code>fetch()</code> rejected the response, an error from an orphaned internal stream could remain unhandled. This release validates the content-encoding chain before creating the body stream and aborts oversized chains safely.</p>
<h3>Medium severity</h3>
<h4>Denial of service through the <code>decompress</code> interceptor</h4>
<p><strong>CVE-2026-87029 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-55wc-3pg8-jfw6">GHSA-55wc-3pg8-jfw6</a></strong></p>
<p>An exception thrown by a downstream response handler from an asynchronous decompression callback could escape as an uncaught exception. A server could trigger this when <code>decompress</code> was composed with a handler such as <code>dump</code> with a size limit. This release converts downstream handler exceptions into per-request errors.</p>
<h4>Subresource Integrity bypass with non-lowercase algorithm tokens</h4>
<p><strong>CVE-2026-109841 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-f72v-6w45-q472">GHSA-f72v-6w45-q472</a></strong></p>
<p><code>fetch()</code> treated valid mixed-case or uppercase SRI algorithm tokens, such as <code>SHA256</code>, as unknown and could accept a response whose body did not match the configured digest. This release normalizes algorithm tokens before validation and digest selection.</p>
<h4>Denial of service through unbounded EventSource parser state</h4>
<p><strong>CVE-2026-109924 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-4qv8-2p9j-2685">GHSA-4qv8-2p9j-2685</a></strong></p>
<p>A malicious Server-Sent Events endpoint could exhaust process memory by sending many tiny <code>data:</code> fields without completing an event, or by splitting an unfinished line across many chunks. This release bounds retained EventSource parser state, including field counts, buffered chunks, unfinished-line length, and retained field data.</p>
<h4>Denial of service through unbounded automatic WebSocket PONG buffering</h4>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="7507102a67"><code>7507102</code></a> Bumped v7.30.1 (<a href="https://redirect.github.com/nodejs/undici/issues/6022">#6022</a>)</li>
<li><a href="7d60c7b6ee"><code>7d60c7b</code></a> [v7.x] fix(cookies): backport <a href="https://redirect.github.com/nodejs/undici/issues/5663">#5663</a>, <a href="https://redirect.github.com/nodejs/undici/issues/5808">#5808</a> and <a href="https://redirect.github.com/nodejs/undici/issues/5832">#5832</a> (<a href="https://redirect.github.com/nodejs/undici/issues/6019">#6019</a>)</li>
<li><a href="0227d5de51"><code>0227d5d</code></a> fix: avoid unbounded recursion in Set-Cookie attribute parser (<a href="https://redirect.github.com/nodejs/undici/issues/5757">#5757</a>) (<a href="https://redirect.github.com/nodejs/undici/issues/5997">#5997</a>)</li>
<li><a href="5394462446"><code>5394462</code></a> fix(websocket): bound automatic PONG writes under backpressure</li>
<li><a href="299162740d"><code>2991627</code></a> fix(eventsource): bound retained SSE parser state</li>
<li><a href="18bc8a1e09"><code>18bc8a1</code></a> fix(sri): accept non-lowercase algorithm tokens</li>
<li><a href="63cba7712c"><code>63cba77</code></a> fix(decompress): converge downstream handler throws to per-request errors</li>
<li><a href="07ded4941b"><code>07ded49</code></a> fix(fetch): abort excessive content encoding responses</li>
<li><a href="b20b82ad80"><code>b20b82a</code></a> fix(cache): prevent cross-origin redirect cache confusion</li>
<li><a href="04cb74b1db"><code>04cb74b</code></a> fix: preserve Agent connection options</li>
<li>Additional commits viewable in <a href="https://github.com/nodejs/undici/compare/v7.30.0...v7.30.1">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=undici&package-manager=npm_and_yarn&previous-version=7.30.0&new-version=7.30.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/getagentseal/codeburn/network/alerts).

</details>
2026-10-31 07:52:41 +01:00
Brandin
d8006ca76b
fix: keep a saved Capacity Dock provider across quota refreshes (#1768)
Some checks are pending
CI / semgrep (push) Waiting to run
macOS Menubar CI / test (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / vscode (push) Waiting to run
Windows Menubar CI / check (ubuntu-latest) (push) Waiting to run
Windows Menubar CI / check (windows-latest) (push) Waiting to run
The Windows tray's Capacity Dock re-seeded its provider rail and resting
provider from whichever providers answered the last quota refresh, so one
missed Codex read made Cursor the resting provider for good. autoSeed is
now additive: providers already in the rail stay, a saved preferred
provider is kept while the CLI still knows it, and every resting pick
(ring click, Resting menu, Electron relay) is latched in the shared dock
prefs. A separate-rings Claude profile row id never enters the rail,
because autoSeed only pins ids the CLI reports.

The mac menu bar keeps its own seeding and is unchanged; it likely has the
same eviction and gets a parity follow-up. The new tests cover the seed
and latch rules; four of them fail on main.
2026-10-31 03:48:01 +01:00
Dan Caldr
ad7332f591
feat(antigravity): extract initial user prompt and attribute userMessage (#1793)
Antigravity calls carried no user message, so every turn classified as
conversation. The provider now reads the cascade's first USER_INPUT from
the brain transcript (first 50 lines, <USER_REQUEST> unwrapped, cut to
500 chars), with the SQLite steps row as the fallback for .db sources,
and sets it as userMessage on every call of the cascade, the way the
cline-cli, goose, codewhale and mistral-vibe providers already do.

Calls, tokens and cost do not change. The activity split does: on real
data the last 30 days go from 128 conversation turns to 2, with 126 now
exploration. ANTIGRAVITY_CACHE_VERSION moves 9 to 10 and the antigravity
parse tag gets user-msg-v1, so only Antigravity re-parses once. Session
titles and optimize are unchanged. Follow-up prompts in a cascade are not
read yet; the first prompt stands for the whole cascade.

Closes #1792
2026-10-31 03:45:34 +01:00
dependabot[bot]
0636fc82c9
chore(deps-dev): bump fast-uri from 3.1.8 to 3.1.9 in /app (#1804)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.8 to 3.1.9.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-31 03:26:00 +01:00
dependabot[bot]
f8a506edf2
chore(deps-dev): bump electron from 43.7.5 to 43.8.1 in /app (#1800)
Bumps [electron](https://github.com/electron/electron) from 43.7.5 to 43.8.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Commits](https://github.com/electron/electron/compare/v43.7.5...v43.8.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 43.8.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-31 03:25:43 +01:00
dependabot[bot]
0e0eed101a
chore(deps-dev): bump undici from 6.29.0 to 6.29.1 in /app (#1803)
Bumps [undici](https://github.com/nodejs/undici) from 6.29.0 to 6.29.1.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.29.0...v6.29.1)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.29.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-31 03:25:31 +01:00
dependabot[bot]
f3939cbd6d
chore(deps): bump fast-uri from 3.1.8 to 3.1.9 (#1805)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.8 to 3.1.9.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-31 03:25:19 +01:00
Hasan Abbas
11c65266c6
fix(claude): count the PowerShell tool as a shell tool (#1806)
Claude Code on Windows runs shell commands through a tool named PowerShell,
with the same { command } input as Bash. The shell-tool sets only knew Bash,
BashTool and PowerShellTool, and PowerShellTool never appears in a transcript:
the Claude Code binary names the tool PowerShell. compactEntry dropped the
command, so it never reached the shell breakdown, command-only turns fell
through to coding or conversation, and optimize missed read-shaped commands.

The claude parse tag gets powershell-shell-tool-v1 so cached sessions re-parse
once, as in #1791. DAILY_CACHE_VERSION is unchanged, so settled days keep
their old split until the next bump. Calls, tokens and cost do not change:
identical on a full real day, main vs branch.
2026-10-31 00:50:52 +01:00
Aditya Vikram Singh
9a624cc2e7
fix(cursor): unwrap Cursor 3.27 safe-storage sessions (#1802)
Cursor 3.27 can store its app session as cursor-safe-storage:v1 ciphertext
(Chromium v10, key in the "Cursor Safe Storage" keychain item), behind
Cursor's own cursor.storage.authTokenEncryptionAtRest flag. CodeBurn read it
as an expired login. The CLI and the menu bar now unlock it with that item
and run the usual JWT checks; the newline `security -w` appends is trimmed
before the KDF.

Keychain consent is user-initiated, as for Claude: the first read happens on
`codeburn import cursor --sync`, `codeburn quota`, or Retry/Reconnect on the
menu bar's Cursor quota. Background syncs and dock refreshes read only after
one such read succeeded, reuse the opened token per blob, and the first
refused read switches that off again. Status never reads the keychain. No
service-only keychain lookup, since after a Deny it asks again.

Windows and Linux say CodeBurn cannot unlock the session there yet; the
desktop app, VS Code and the Windows tray show the new `locked` line in all
locales. Docs describe the prompt and what Always Allow grants.

Closes #1801
2026-10-30 22:32:51 +01:00
ozymandiashh
07c0ee601f
fix(tui): keep provider totals through the background refresh (#1784)
Some checks failed
CI / semgrep (push) Has been cancelled
Tests / test (22) (push) Has been cancelled
Tests / test (22.13.0) (push) Has been cancelled
Tests / test (24) (push) Has been cancelled
Tests / test (26) (push) Has been cancelled
Tests / test-platforms (macos-latest) (push) Has been cancelled
Tests / test-platforms (windows-latest) (push) Has been cancelled
Tests / vscode (push) Has been cancelled
Tests / desktop (push) Has been cancelled
A provider-filtered dashboard painted the right total, then changed it
when the background index finished. Dates the shared daily cache did not
hold were dropped, so Copilot fell to $0 in #1769, and a cached day
with the same call count as the live parse kept its cached numbers, so
a cache derived under older accounting still moved the headline after
refresh. Report and the first paint did neither.

The provider-scoped index now overlays its normalized days the way
buildDurablePeriod does for report: they fill the dates and slices the
cache lacks and replace a cached slice unless a settled cached day
explains more calls, so expired history is kept and nothing is counted
twice. Against real Copilot history and a complete cache that predates
it, main refreshed 30 days from $0.355 to $0.00; it now stays at $0.355.

The all-provider path is unchanged, and a provider view still never
writes the shared cache. report, models and the first paint do not
change.

Fixes #1769
2026-10-27 17:52:18 +01:00
Kim
e34143824d
fix(claude): keep every parallel tool call of a streamed message (#1791)
Claude Code writes one JSONL line per content block, so a message that
calls several tools in parallel spans several lines with the same message
id. dedupeStreamingMessageIds kept only the last line, which has the right
usage but only the last tool_use, so the earlier calls were missing from
the tool, MCP and shell breakdowns, turn classification, edit line counts,
tool errors and PR link evidence. On a real 7-day sample main counted
59,765 tool calls where the transcripts hold 69,376.

The last line is still the one kept. The tool_use blocks of the earlier
lines with the same id are put back in front of its content, matched by
block id, so the older shape whose final write restates every block (#110)
is not counted twice. The claude parse tag gets streamed-tool-blocks-v1,
so cached sessions re-parse once.

Calls, tokens and cost do not change; activity turns, edit and one-shot
counts and the by-PR split do. DAILY_CACHE_VERSION is not bumped (v77 is
the last bump the zstd split can carry), so days the daily cache has
already settled keep their old activity split until the next bump
re-derives them.
2026-10-27 16:57:09 +01:00
ozymandiashh
6489d5e4e5
fix: exact Today session counts and the Overview estimate-marker crash (#1794)
Some checks are pending
CI / semgrep (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / vscode (push) Waiting to run
Today's day row comes from the live parse with session identities, but
the session-count provenance treated it like a cache row, so a Today-only
period reported its exact count as partial on the headline, the provider
rows and the project rows. Today is now left out of the cache-provenance
days at every call site (money still uses the complete day set) and the
status snapshot render version moves to 13 so stale labels are rejected.

The Overview hero count-up wrote textContent into a div whose children
React owns; when the ~ estimate marker appeared, React hit a detached text
node (insertBefore NotFoundError) and the error boundary took over. GSAP
now writes only into an empty span and React keeps the marker; a currency
change with the same raw value refreshes the text.

Fixes #1760
Fixes #1785
2026-10-26 22:53:08 +01:00
Resham Joshi
cef7c17621
fix(warp): price conversations from total_billed_cost_in_cents (#1787)
Some checks are pending
CI / semgrep (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / vscode (push) Waiting to run
Warp 0.2026.10 removed total_provider_cost_in_cents and now persists
total_billed_cost_in_cents. Read it after total_charged_usage, as Warp
does, so conversations without streamed charges keep their billed dollars
instead of the credits estimate. Bump the warp parse version and
DAILY_CACHE_VERSION to 77 (76 on a Node without zstd, so it re-derives
too and a zstd Node still adopts its file).
2026-10-26 13:30:21 +01:00
Resham Joshi
de08cee8e1
fix(daily-cache): stop token-only slices inflating day totals on merge (#1788)
Some checks are pending
CI / semgrep (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / vscode (push) Waiting to run
A slice with tokens but no calls, cost or savings (a Hermes or Copilot
session total) read as a placeholder, so every adoption or re-derive merge
replaced it while adding its tokens to the day and model rows again. Each
version bump multiplied them by the number of older cache files holding
the day. Count tokens as slice data, and cap day and model-row tokens at
the slices' sum on load for days whose calls and cost match their
slices, this bug's fingerprint, so caches already inflated heal without
a version bump.
A newer token-only slice now wins over an older one with calls, as the
newer-wins rule intends, instead of the two being added.
2026-10-26 03:59:47 +01:00
Resham Joshi
b4974351dc
fix(codex): read Zstandard-compressed rollouts (#1786)
Codex now moves cold rollouts to rollout-*.jsonl.zst. Discovery, the
first-line probe, the parser, fork parent lookup, codex-tps and the context
view read them through a zstd decode; a session present in both forms
counts once from the plain file. Compressed files are parsed whole and never
resumed by byte offset. Without node:zlib zstd (Node < 22.15) they are
skipped with one notice. DAILY_CACHE_VERSION 76 so settled days pick up the
recovered Codex usage. Without zstd it stays 75, so a later Node upgrade
still adopts that cache and re-derives it.
2026-10-26 02:40:29 +01:00
Resham Joshi
1a3ce74af8
docs: link the privacy page from the README and the plugin (#1783)
Some checks failed
CI / semgrep (push) Has been cancelled
macOS Menubar CI / test (push) Has been cancelled
Tests / test-platforms (macos-latest) (push) Has been cancelled
Tests / test-platforms (windows-latest) (push) Has been cancelled
Tests / desktop (push) Has been cancelled
Tests / test (22) (push) Has been cancelled
Tests / test (22.13.0) (push) Has been cancelled
Tests / test (24) (push) Has been cancelled
Tests / test (26) (push) Has been cancelled
Tests / vscode (push) Has been cancelled
Windows Menubar CI / check (ubuntu-latest) (push) Has been cancelled
Windows Menubar CI / check (windows-latest) (push) Has been cancelled
2026-10-20 21:32:49 +02:00
dependabot[bot]
aeb143260e
chore(deps-dev): bump vite from 6.4.3 to 6.4.4 in /app (#1781)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.3 to 6.4.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-20 21:31:56 +02:00
dependabot[bot]
8561d09340
chore(deps-dev): bump vite from 7.3.6 to 7.3.7 (#1782)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.6 to 7.3.7.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.7/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.7/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-20 21:31:52 +02:00
dependabot[bot]
5ff58dc388
chore(deps-dev): bump vite from 6.4.3 to 6.4.4 in /windows (#1778)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.3 to 6.4.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-20 21:31:49 +02:00
dependabot[bot]
85f4338f65
chore(deps-dev): bump vite from 6.4.3 to 6.4.4 in /dash (#1780)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.3 to 6.4.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-20 21:31:45 +02:00
dependabot[bot]
c5ab5e2cc4
chore(deps-dev): bump follow-redirects from 1.16.0 to 1.16.1 in /app (#1779)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.16.0 to 1.16.1.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.16.0...v1.16.1)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-version: 1.16.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-20 21:31:40 +02:00
dependabot[bot]
03caf688d5
chore(deps): bump @modelcontextprotocol/sdk from 1.31.0 to 1.32.0 (#1777)
Bumps [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) from 1.31.0 to 1.32.0.
- [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases)
- [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/1.31.0...1.32.0)

---
updated-dependencies:
- dependency-name: "@modelcontextprotocol/sdk"
  dependency-version: 1.32.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-20 21:31:33 +02:00
Resham Joshi
1992d70226
ci: gate signing jobs behind a release environment and pin actions to commits (#1776)
* ci: gate signing jobs behind a release environment and pin actions to commits

* ci: name the Rust toolchain explicitly now that the action is pinned
2026-10-20 21:03:08 +02:00
Resham Joshi
9a36ee593b
fix(deps): bump hono to 4.13.13 (GHSA-5r4p-p66f-jhc7) (#1775) 2026-10-20 19:39:50 +02:00
Resham Joshi
cd2a60c570
fix: pin the plugin's CodeBurn version and add its icon (#1774) 2026-10-20 19:27:48 +02:00
Resham Joshi
360a9e2b96
feat: Claude Code plugin and MCP Registry listing (#1772) 2026-10-20 18:59:11 +02:00
Resham Joshi
c71ee8e26e
test: cap parse-worker requests at the machine's core count (#1771) 2026-10-20 18:48:59 +02:00
Resham Joshi
b8eead8442
Add security email and OSS Scanner build files (#1770) 2026-10-20 18:02:22 +02:00
Resham Joshi
0322472db3
test: keep the dashboard exit fixture outside the 6 Months window (#1765)
Some checks failed
CI / semgrep (push) Has been cancelled
Tests / desktop (push) Has been cancelled
Tests / test (22) (push) Has been cancelled
Tests / test (22.13.0) (push) Has been cancelled
Tests / test (24) (push) Has been cancelled
Tests / test (26) (push) Has been cancelled
Tests / test-platforms (macos-latest) (push) Has been cancelled
Tests / test-platforms (windows-latest) (push) Has been cancelled
Tests / vscode (push) Has been cancelled
The cold-hydration exit tests wait for the Lifetime phase to hold the hydration lock. Their sessions were 200 days old, which this week falls inside the 6 Months index window, so they parsed in that phase and Lifetime never held the lock long enough: both tests time out on every platform, also on the commit before #1761. 400 days stays outside 6 Months and inside Lifetime.
2026-10-17 17:32:53 +02:00
Resham Joshi
87444adc8f
optimize: stop counting new-file writes in the read/edit ratio (#1761)
Some checks are pending
CI / semgrep (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / vscode (push) Waiting to run
Writing a new file has nothing to read first, so teams whose subagents
write report and evidence files got a false 'edits more than it reads'
finding. The detector now counts only Edit-type calls. EDIT_TOOL_NAMES
stays as is because act report baselines were recorded with it.
2026-10-17 15:07:41 +02:00
Resham Joshi
9a40cc603f
Windows tray: fall back past a broken managed CLI to Volta and PATH installs (#1753)
Some checks failed
CI / semgrep (push) Has been cancelled
Windows Menubar CI / check (ubuntu-latest) (push) Has been cancelled
Windows Menubar CI / check (windows-latest) (push) Has been cancelled
Tests / test-platforms (macos-latest) (push) Has been cancelled
Tests / test-platforms (windows-latest) (push) Has been cancelled
Tests / desktop (push) Has been cancelled
Tests / test (22) (push) Has been cancelled
Tests / test (22.13.0) (push) Has been cancelled
Tests / test (24) (push) Has been cancelled
Tests / test (26) (push) Has been cancelled
Tests / vscode (push) Has been cancelled
The desktop app starts the tray with CODEBURN_BIN set to its own
codeburn-cli.cmd launcher, which the tray took as final. When that launcher
failed (#1750: exit 1, "The system cannot find the path specified"), the
Volta install under a relocated VOLTA_HOME was never tried.

The setup check now probes CODEBURN_BIN, every install the PATH and prefix
search finds, then the recorded launcher, and keeps the first whose
--version answers. When none does, the error lists each path with its own
failure. Export and terminal actions use the probed CLI. The desktop app no
longer overwrites a CODEBURN_BIN the person set themselves.
2026-10-13 10:10:38 +02:00
Resham Joshi
354492e500
Copilot: count every agent round and bill exact credits in VS Code chat sessions (#1752)
Some checks are pending
CI / semgrep (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / vscode (push) Waiting to run
* Copilot: count every agent round and exact credits in VS Code chat sessions

Copilot Chat 0.69 keeps only the last model call of an agent request in result.metadata. Read the request's modelTotals (input, cache reads, output over every call) first, then root completionTokens, then metadata. Carry copilotCredits as nanoAiu so plan credits are exact. Bump the copilot parse tag so cached chat sessions re-parse.

modelKeyMatches no longer lets claude-sonnet-4 capture claude-sonnet-4-6.

* Copilot: bill chat-session credits exactly and skip agent-host twins

A chat-session request that records copilotCredits now costs credits x $0.01 through costFromBilling; requests without it stay priced from tokens. A chat session whose id matches a session-state dir is left to the agent-host path so it is counted once.

* Copilot: drop agent-host twins at serve time, rate chat requests one by one, re-derive past days

A chat-session journal request is left out when the same session has billed agent-host usage (session-state calls with tokens or nanoAiu, or session-store rows). Plan credits rate chat-session requests individually, so older requests in a mixed session keep their estimate. DAILY_CACHE_VERSION 75 with copilot pending re-derive so settled days pick up the new counts.
2026-10-13 01:02:04 +02:00
Resham Joshi
3ebcfb1cef
fix: say the desktop update restarts on its own, and that a multi-PR turn is split evenly (#1749)
Some checks failed
Tests / test-platforms (macos-latest) (push) Has been cancelled
Tests / test-platforms (windows-latest) (push) Has been cancelled
Tests / test (22) (push) Has been cancelled
Tests / test (22.13.0) (push) Has been cancelled
Tests / test (24) (push) Has been cancelled
Tests / test (26) (push) Has been cancelled
Tests / desktop (push) Has been cancelled
CI / semgrep (push) Has been cancelled
Tests / vscode (push) Has been cancelled
Corrects the 0.9.27 changelog wording and the session drawer PR caption in all six languages to match the code.
2026-10-11 15:17:38 +02:00
Resham Joshi
3af46cfe87
chore(vscode): release extension 1.0.2 with CLI 0.9.27 (#1748)
Extension 1.0.2 bundles CodeBurn CLI 0.9.27.
2026-10-11 14:31:15 +02:00
Resham Joshi
bde62e360c
chore: Flathub hash for desktop-v0.9.27 (#1747)
sha256 of the published codeburn-desktop_0.9.27_amd64.deb.
2026-10-11 10:32:35 +02:00
Resham Joshi
7ecc87f8ad
chore: release 0.9.27 (#1746)
Some checks failed
Tests / test (22) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / vscode (push) Waiting to run
CI / semgrep (push) Waiting to run
macOS Menubar CI / test (push) Has been cancelled
Windows Menubar CI / check (ubuntu-latest) (push) Has been cancelled
Windows Menubar CI / check (windows-latest) (push) Has been cancelled
Version 0.9.27 in the CLI, desktop app and Windows tray; CHANGELOG and Flathub metainfo and url.
2026-10-11 09:37:44 +02:00
Resham Joshi
666a690464
fix(menubar): read the download whole so Electron's Node cannot crash mid-update (#1745)
Electron's Node 24 undici asserts and kills the process when a server closes the socket while a piped download is paused on the file write. The menu bar zip is now read whole and written once.
2026-10-11 08:55:16 +02:00
Resham Joshi
4c1d524b85
feat(update): Windows tray updates the CLI through the engine (#1743)
The Windows tray updates the CLI through codeburn update, for Store and non-Store installs, and hands desktop updates to the desktop app.
2026-10-11 04:36:20 +02:00
Resham Joshi
517058c117
feat(update): menubar pill checks and updates through the engine (#1742)
When the CLI is 0.9.27 or newer, the menu bar update pill checks and updates every surface through codeburn update, and polls every 6 hours. Older CLIs keep the previous path.
2026-10-11 04:35:30 +02:00
Resham Joshi
290d1c7c74
feat(update): desktop updates its companions and itself in one click (#1741)
The desktop app runs codeburn update for the CLI and menu bar on launch and after it updates itself, and the update banner installs and restarts in one click with a Try again path if the install fails.
2026-10-11 04:34:34 +02:00
Resham Joshi
679d2f715b
feat(update): one codeburn update command for CLI, menu bar and desktop (#1740)
Adds codeburn update [--check] [--cli|--menubar|--desktop|--all] [--local] [--json] with a fixed JSON step/result contract that the desktop app, menu bar and Windows tray call, so every surface updates in one click without Terminal. Also documents the npm-first release order and adds always-latest /download links.
2026-10-11 04:33:57 +02:00
Resham Joshi
7431a34782
test(cursor-sync): use a week window so the test passes at any hour (#1744)
The CSV row is stamped two hours before now, so a today window failed between 00:00 and 02:00 UTC.
2026-10-11 04:04:54 +02:00
Resham Joshi
08b06ae49a
chore(vscode): release extension 1.0.1 with CLI 0.9.26 (#1739) 2026-10-11 01:15:01 +02:00
Resham Joshi
a2f44fc9ce
chore: Flathub hash for desktop-v0.9.26 (#1738) 2026-10-11 01:14:57 +02:00
Resham Joshi
c1457e415b
chore: release 0.9.26 (#1732)
Some checks are pending
CI / semgrep (push) Waiting to run
macOS Menubar CI / test (push) Waiting to run
Tests / test-platforms (windows-latest) (push) Waiting to run
Tests / test (22.13.0) (push) Waiting to run
Tests / test (24) (push) Waiting to run
Tests / desktop (push) Waiting to run
Tests / test-platforms (macos-latest) (push) Waiting to run
Tests / test (22) (push) Waiting to run
Tests / test (26) (push) Waiting to run
Tests / vscode (push) Waiting to run
Windows Menubar CI / check (ubuntu-latest) (push) Waiting to run
Windows Menubar CI / check (windows-latest) (push) Waiting to run
Version 0.9.26 in the CLI, desktop app and Windows tray; CHANGELOG, README download links, Flathub metainfo and url, VS Code changelog.
2026-10-11 00:19:08 +02:00
Resham Joshi
ec24de6e65
fix(pr): charge pushed branches to their PR and show every PR's details (#1737)
* fix(pr): push evidence beats the carried pr-link, show every PR fact

Claude Code's pr-link tags a session with its latest PR and CodeBurn carried
that tag to every later turn and subagent run. A run or turn that pushes the
head branch of a PR opened in the same data (paired gh pr create --head) now
goes to that PR, same repo only; spend left only on the tag is carriedUSD.
Rows also get runList (why each run counts), a locally evidenced state and
follow-up round times, and a call opening several PRs pairs its pr-link with
the last create. The PR card states every unknown and the expanded view shows
timeline, runs, cost by phase and work as compact tables.

* fix(app): full text on hover for cropped PR cells, plainer wording for same-session spend

Truncated PR labels, run descriptions, table labels and summary figures now show their full text in the shared tooltip surface while cut off. The carried-from-session-tag wording becomes 'from other work in the same session' in all six locales.

* fix(pr): explain carried spend without the pr-link jargon
2026-10-10 23:47:23 +02:00
Resham Joshi
6ddd8b6735
fix(quota): say when Cline's saved login expired and how to renew it (#1736)
* fix(clinepass): say when the Cline login expired and how to renew it

An expired saved Cline login only said "Run cline to refresh it". It now
reads "Cline login expired 3h ago" (age from the saved expiry, when known)
and asks to send a message in Cline or run `cline auth cline`, then press
Retry. Still a retryable state, so the last quota is kept. CLI and menubar.

* fix(menubar): title an expired Cline login instead of "Retrying"

A provider failure can now carry a short status title. The expired Cline
login sets "Cline login expired", which the settings pane and the dock
caption show in place of the generic retrying text. It stays a retryable
state and keeps the last quota; the title clears with the error.

* fix(clinepass): match the expired-login hint to the visible control

"Then press Retry" only fits where a Retry button shows: the settings pane
with no last quota. Everywhere else, including the CLI, the hint now ends
with "CodeBurn picks up the new login on its next refresh."
2026-10-10 21:40:52 +02:00
Resham Joshi
ff7c40e9ab
fix(menubar): check a provider when its settings open, keep the dock order (#1735)
* fix(menubar): check Cursor when its settings pane opens, keep the dock seed stable

Generic providers were only refreshed while selected in the dock, so a
signed-in Cursor outside a full dock read "Not connected". Opening a
provider's settings pane now runs a quiet probe that records nothing on
failure. Auto-seed also keeps the providers already in the dock and only
fills free slots, so a newly connected provider no longer pushes one out or
resets the preferred card. Remaining edge: after an explicit Disconnect,
reopening the pane re-probes, and a free dock slot would take it back.

* fix(menubar): keep a disconnected provider off until the user connects it

The explicit-disconnect flag Copilot already persists is now per provider.
Disconnect sets it for generic providers too, Connect clears it, and while
it is set the settings pane's quiet probe and the dock auto-seed skip that
provider, so reopening the pane no longer silently reconnects Cursor.

* fix(menubar): only the Disconnect action opts a provider out

Clear Override and Remove saved override share the disconnect path but
mean "go back to automatic", so they no longer set the explicit-disconnect
flag; the pane probe and dock auto-seed keep working after them.

* fix(menubar): the quiet pane probe hides only a missing sign-in

The Settings pane probe recorded nothing on any failure, so an expired login
opened before any refresh read "Not connected". Fetch failures now carry
whether the provider had no credentials or local data at all; the quiet probe
suppresses only that case and records every other failure like a refresh.

* fix(menubar): keep the not-signed-in flag clear of the ClinePass failure fields
2026-10-10 21:40:47 +02:00
Resham Joshi
4c779ef301
fix(commandcode): show the monthly window (#1734)
Command Code's credits endpoint only reports monthly credits left, so the
monthly window was dropped. For an active subscription on a known plan the
plan price now comes from a small table (the API has no monthly cap field):
pool = max(plan, left), used = pool - left, reset = currentPeriodEnd.
Unknown plans and purchased/free credits stay out. CLI and menubar mirrored.
2026-10-10 21:40:43 +02:00
Resham Joshi
48773459ab
feat(pr): attribute PR work honestly and show one shot, review runs and follow-ups (#1733)
* fix(pr): a subagent whose description names a PR folds into that PR

A subagent run folded into whatever PR its parent's last pr-link carried, so
review runs for #1703, #1712, #1728 and #1729 landed on a stale closed #24.
The Agent description ("Review PR 1729 ...") is now read from the subagent's
.meta.json at report time; a single PR it names outranks the carried PR.

* fix(pr): date each PR by its own turns and count its agent runs

Every PR row carried the whole session's first and last timestamp, so one
long orchestrator session stamped the same span and "1 session" on all of
them. Rows now span their first to last attributed turn or folded run, and
a new `runs` field counts contributing sessions plus folded subagent runs.

* feat(pr): local one-shot, follow-up rounds, review runs, merge time and cost split per PR

Each PR row now carries signals read from cached commands, no GitHub calls:
openedAt (gh pr create paired with the PR's first pr-link), follow-up rounds
(pushes naming its --head branch, or from a run whose description names it,
in 10-minute bursts), oneShot only when the open and its branch were seen,
reviewRuns and reviewCostUSD, mergedAt and timeToMergeMs, a build/review/fixes
cost split that sums to the row, and linkEvidence to flag pr-link-only rows.

* feat(session-why): PRs the session opened, their follow-up rounds and review runs

The why view now carries prWork: each gh pr create whose output printed a PR
URL, the pushes after it on its --head branch (or from a helper whose
description names that PR) in 10-minute rounds, and the helpers that read a
PR without committing or pushing, with their cost.

* perf(pr): only parse commands that can name a push or a PR

* feat(app): local PR facts on PR cards and PR work in the session view

Each PR card gets one line of facts from the CLI's local signals: the review
run and its cost, one shot or follow-up rounds, and merge time after open.
Unknowns are left out; a pr-link-only row says so. The count shows agent runs
instead of sessions. The expanded card splits spend into building, review runs
and after first review, and lists the review runs. The session view lists the
PRs it opened and the review runs it spawned.

* perf(pr): read subagent descriptions only for PR attribution

Every report, status and menubar refresh read each subagent's .meta.json
(about 2,000 files in 30 days) and the cross-provider correlation scanned
every folded run's commands for PR signals it never uses. Sessions now carry
the sidecar path; the description is read on demand, memoized by mtime, only
for folded runs and runs that push, and correlation skips the command scan.
The by-pr footer now counts runs to match the Runs column.
2026-10-10 21:40:39 +02:00