Skip to content

build(deps): bump the cargo group across 1 directory with 4 updates - #6

Closed
dependabot[bot] wants to merge 223 commits into
mergedfrom
dependabot/cargo/desktop/src-tauri/cargo-7c37409f6b
Closed

build(deps): bump the cargo group across 1 directory with 4 updates#6
dependabot[bot] wants to merge 223 commits into
mergedfrom
dependabot/cargo/desktop/src-tauri/cargo-7c37409f6b

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github May 27, 2026

Copy link
Copy Markdown

Bumps the cargo group with 4 updates in the /desktop/src-tauri directory: tauri, rustls-webpki, tar and time.

Updates tauri from 2.10.2 to 2.11.1

Release notes

Sourced from tauri's releases.

tauri-cli v2.11.1

Fetching advisory database from `https://github.com/RustSec/advisory-db.git`
      Loaded 1067 security advisories (from /home/runner/.cargo/advisory-db)
    Updating crates.io index
    Scanning Cargo.lock for vulnerabilities (1088 crate dependencies)
Crate:     atk
Version:   0.18.2
Warning:   unmaintained
Title:     gtk-rs GTK3 bindings - no longer maintained
Date:      2024-03-04
ID:        RUSTSEC-2024-0413
URL:       https://rustsec.org/advisories/RUSTSEC-2024-0413
Dependency tree:
atk 0.18.2
└── gtk 0.18.2
    ├── wry 0.55.0
    │   └── tauri-runtime-wry 2.11.1
    │       └── tauri 2.11.1
    │           ├── tauri-utils 2.9.1
    │           │   ├── tauri-schema-generator 0.0.0
    │           │   ├── tauri-runtime-wry 2.11.1
    │           │   ├── tauri-runtime 2.11.1
    │           │   │   ├── tauri-runtime-wry 2.11.1
    │           │   │   └── tauri 2.11.1
    │           │   ├── tauri-plugin 2.6.1
    │           │   │   ├── tauri-plugin-sample 0.1.0
    │           │   │   │   └── api 0.1.0
    │           │   │   └── tauri-plugin-log 2.6.0
    │           │   │       └── api 0.1.0
    │           │   ├── tauri-macros 2.6.1
    │           │   │   └── tauri 2.11.1
    │           │   ├── tauri-codegen 2.6.1
    │           │   │   ├── tauri-macros 2.6.1
    │           │   │   └── tauri-build 2.6.1
    │           │   │       ├── tauri-file-associations-demo 0.1.0
    │           │   │       ├── tauri 2.11.1
    │           │   │       ├── resources 0.1.0
    │           │   │       ├── bench_helloworld 0.1.0
    │           │   │       ├── bench_files_transfer 0.1.0
    │           │   │       ├── bench_cpu_intensive 0.1.0
    │           │   │       └── api 0.1.0
    │           │   ├── tauri-cli 2.11.1
    │           │   │   └── tauri-cli-node 0.0.0
    │           │   ├── tauri-bundler 2.9.1
    │           │   │   └── tauri-cli 2.11.1
    │           │   ├── tauri-build 2.6.1
</tr></table> 

... (truncated)

Commits

Updates rustls-webpki from 0.103.9 to 0.103.13

Release notes

Sourced from rustls-webpki's releases.

0.103.13

  • Fix reachable panic in parsing a CRL. This was reported to us as GHSA-82j2-j2ch-gfr8. Users who don't use CRLs are not affected.
  • For name constraints on URI names, we incorrectly processed excluded subtrees in a way which inverted the desired meaning. See rustls/webpki#471. This was a case missing in the fix for GHSA-965h-392x-2mh5.

What's Changed

Full Changelog: rustls/webpki@v/0.103.12...v/0.103.13

0.103.12

This release fixes two bugs in name constraint enforcement:

  • GHSA-965h-392x-2mh5: name constraints for URI names were ignored and therefore accepted. URI name constraints are now rejected unconditionally. Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.
  • GHSA-xgp8-3hg3-c2mh: permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name. This was incorrect because, given a name constraint of accept.example.com, *.example.com could feasibly allow a name of reject.example.com which is outside the constraint. This is very similar to CVE-2025-61727.

Since name constraints are restrictions on otherwise properly-issued certificates, these bugs are reachable only after signature verification and require misissuance to exploit.

What's Changed

Full Changelog: rustls/webpki@v/0.103.11...v/0.103.12

0.103.11

In response to #464, we've slightly relaxed requirements for anchor_from_trust_cert() to ignore unknown extensions even if they're marked as critical. This only affects parsing a TrustAnchor from DER, for which most extensions are ignored anyway.

What's Changed

0.103.10

Correct selection of candidate CRLs by Distribution Point and Issuing Distribution Point. If a certificate had more than one distributionPoint, then only the first distributionPoint would be considered against each CRL's IssuingDistributionPoint distributionPoint, and then the certificate's subsequent distributionPoints would be ignored.

The impact was that correctly provided CRLs would not be consulted to check revocation. With UnknownStatusPolicy::Deny (the default) this would lead to incorrect but safe Error::UnknownRevocationStatus. With UnknownStatusPolicy::Allow this would lead to inappropriate acceptance of revoked certificates.

This vulnerability is thought to be of limited impact. This is because both the certificate and CRL are signed -- an attacker would need to compromise a trusted issuing authority to trigger this bug. An attacker with such capabilities could likely bypass revocation checking through other more impactful means (such as publishing a valid, empty CRL.)

More likely, this bug would be latent in normal use, and an attacker could leverage faulty revocation checking to continue using a revoked credential.

This vulnerability is identified by GHSA-pwjx-qhcg-rvj4. Thank you to @​1seal for the report.

What's Changed

Full Changelog: rustls/webpki@v/0.103.9...v/0.103.10

Commits
  • 2879b2c Prepare 0.103.13
  • 2c49773 Improve tests for padding of BitStringFlags
  • 4e3c0b3 Correct validation of BIT STRING constraints
  • 39c91d2 Actually fail closed for URI matching against excluded subtrees
  • 27131d4 Bump version to 0.103.12
  • 6ecb876 Clean up stuttery enum variant names
  • 318b3e6 Ignore wildcard labels when matching name constraints
  • 1219622 Rewrite constraint matching to avoid permissive catch-all branch
  • 57bc62c Bump version to 0.103.11
  • d0fa01e Allow parsing trust anchors with unknown criticial extensions
  • Additional commits viewable in compare view

Updates tar from 0.4.44 to 0.4.46

Release notes

Sourced from tar's releases.

0.4.46

Security

See also GHSA-3cv2-h65g-fgmm

Other changes

New Contributors

Full Changelog: composefs/tar-rs@0.4.45...0.4.46

Commits
  • fc459c1 Release 0.4.46
  • 43e05a8 ci: Add crates.io trusted publishing workflow
  • bba5666 Update repo links
  • cd94c46 docs: Document TOCTOU / concurrent-mutation threat model
  • 1b4997c builder: Expand docs for follow_symlinks and append_dir_all
  • bab14dd archive: Fix another PAX header desync (GHSA-3cv2-h65g-fgmm)
  • 2349b49 Add support of absolute paths
  • 39d0311 Update some links
  • 59d803e Update astral-tokio-tar requirement from 0.5 to 0.6
  • 8296b9a ci: Fix and re-enable reverse dependency testing (#444)
  • Additional commits viewable in compare view

Updates time from 0.3.36 to 0.3.47

Release notes

Sourced from time's releases.

v0.3.47

See the changelog for details.

v0.3.46

See the changelog for details.

v0.3.45

See the changelog for details.

v0.3.44

See the changelog for details.

v0.3.43

See the changelog for details.

v0.3.42

See the changelog for details.

v0.3.41

See the changelog for details.

v0.3.40

See the changelog for details.

v0.3.39

See the changelog for details.

v0.3.38

See the changelog for details.

v0.3.37

See the changelog for details.

Changelog

Sourced from time's changelog.

0.3.47 [2026-02-05]

Security

  • The possibility of a stack exhaustion denial of service attack when parsing RFC 2822 has been eliminated. Previously, it was possible to craft input that would cause unbounded recursion. Now, the depth of the recursion is tracked, causing an error to be returned if it exceeds a reasonable limit.

    This attack vector requires parsing user-provided input, with any type, using the RFC 2822 format.

Compatibility

  • Attempting to format a value with a well-known format (i.e. RFC 3339, RFC 2822, or ISO 8601) will error at compile time if the type being formatted does not provide sufficient information. This would previously fail at runtime. Similarly, attempting to format a value with ISO 8601 that is only configured for parsing (i.e. Iso8601::PARSING) will error at compile time.

Added

  • Builder methods for format description modifiers, eliminating the need for verbose initialization when done manually.
  • date!(2026-W01-2) is now supported. Previously, a space was required between W and 01.
  • [end] now has a trailing_input modifier which can either be prohibit (the default) or discard. When it is discard, all remaining input is ignored. Note that if there are components after [end], they will still attempt to be parsed, likely resulting in an error.

Changed

  • More performance gains when parsing.

Fixed

  • If manually formatting a value, the number of bytes written was one short for some components. This has been fixed such that the number of bytes written is always correct.
  • The possibility of integer overflow when parsing an owned format description has been effectively eliminated. This would previously wrap when overflow checks were disabled. Instead of storing the depth as u8, it is stored as u32. This would require multiple gigabytes of nested input to overflow, at which point we've got other problems and trivial mitigations are available by downstream users.

0.3.46 [2026-01-23]

Added

  • All possible panics are now documented for the relevant methods.
  • The need to use #[serde(default)] when using custom serde formats is documented. This applies only when deserializing an Option<T>.
  • Duration::nanoseconds_i128 has been made public, mirroring std::time::Duration::from_nanos_u128.

... (truncated)

Commits
  • d5144cd v0.3.47 release
  • f6206b0 Guard against integer overflow in release mode
  • 1c63dc7 Avoid denial of service when parsing Rfc2822
  • 5940df6 Add builder methods to avoid verbose construction
  • 00881a4 Manually format macros everywhere
  • bb723b6 Add trailing_input modifier to end
  • 31c4f8e Permit W12 in date! macro
  • 490a17b Mark error paths in well-known formats as cold
  • 6cb1896 Optimize Rfc2822 parsing
  • 6d264d5 Remove erroneous #[inline(never)] attributes
  • Additional commits viewable in compare view

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 commands and options

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 <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions
    You can disable automated security fix PRs for this repo from the Security Alerts page.

wesm and others added 30 commits February 22, 2026 12:57
## Summary

- Update GitHub Actions: checkout v6.0.2, upload-artifact v6.0.0,
download-artifact v7.0.0
- Update npm deps: svelte 5.53.2 (SSR vulnerability fix),
vite-plugin-svelte 6.2.4, vite 6.4.1, typescript 5.9.3, svelte-check
4.4.1, @tsconfig/svelte 5.0.8, @tanstack/virtual-core 3.13.18
- Add engines.node constraint for vite-plugin-svelte 6.x minimum
- Fix search.test.ts timing for Svelte 5.53.2 reactive system changes

Closes #1, closes #2, closes #3, closes #4, closes #5, closes #6, closes
#7, closes #8

## Test plan

- [ ] CI passes: Go tests, frontend unit tests, E2E tests, lint, type
check
- [ ] `npm audit` shows 0 vulnerabilities
- [ ] Frontend builds cleanly with vite 6.4.1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Playwright outputs test-results/ at the repo root when run from
there. frontend/test-results/ was already ignored but the root
directory was not.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Overhaul session message viewer for readability: system font stack,
role icon circles, proportional body text at 14px, darker code blocks,
refined tool/thinking blocks
- Sync header project filter to analytics dashboard so selecting a
project in the top bar filters the dashboard
- Highlight selected activity timeline bar instead of re-rendering the
chart with a single bar
- Fix excessive CPU usage by making the file watcher sync only changed
files instead of running full SyncAll with SHA-256 hashing of every file
- Fix duplicate fetchAll on analytics page mount and activity timeline
staleness

## Test plan

- [x] All 304 frontend vitest tests pass (including new analytics tests)
- [x] All Go tests pass across all packages (including 5 new SyncPaths
tests)
- [ ] Manual: verify message viewer readability in light/dark themes
- [ ] Manual: verify selecting a project in header updates the analytics
dashboard
- [ ] Manual: verify clicking a timeline bar highlights it and dims
others
- [ ] Manual: verify CPU usage is reduced during active file watching

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Align the standalone export HTML template with the current app CSS:

- Color palette: warm beige/brown → cool gray/blue-gray (both themes)
- Accent purple: gold #b08d24 → actual purple #7c3aed
- Font stacks: add JetBrains Mono, match Noto Sans system stack
- Code blocks: use dark --code-bg/--code-text instead of --bg-inset
- Message styling: 4px border, 14px/1.7 prose, 14px 20px padding
- Thinking blocks: 2px border, purple label, larger text
- Tool blocks: 2px border, monospace font
- Role labels: 13px (was 11px uppercase), timestamps 12px (was 10px)
- Body: 14px base font (was 13px), add moz-osx-font-smoothing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Group continuation sessions with their originals via
`parent_session_id` chaining, extracted from Claude JSONL `sessionId`
fields
- Frontend walks `parent_session_id` chains to find root sessions and
groups all sessions sharing the same root
- Prune command excludes sessions that have children to avoid breaking
continuity chains
- Old databases (missing `parent_session_id` column) are dropped and
rebuilt from scratch on startup

## How it works

Claude JSONL files have a `sessionId` field on user/assistant records.
For original sessions, `sessionId` matches the file's UUID. For
continuations, it carries the parent file's UUID, forming a linked list
(A -> B -> C). The parser extracts this and stores it as
`parent_session_id`. The frontend walks the chain to find the root and
groups all sessions sharing the same root.

## Test plan

- [x] `go vet ./... && go test -tags fts5 ./...` -- all pass
- [x] `cd frontend && npx vitest run` -- all 318 tests pass
- [ ] Manual: delete DB, restart agentsview, verify continuation
sessions group under original with correct first message

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- **Insights feature** for AI-generated analysis of agent sessions,
supporting Claude, Codex, and Gemini as generation backends
- Full-stack: `insights` SQLite table with FTS5, Go HTTP handlers
(`GET/DELETE /api/v1/insights/{id}`, `POST /api/v1/insights/generate`
with SSE streaming), prompt builder with session context, and
multi-agent CLI dispatch
- **Date range analysis**: insights can cover a single day or a date
range (e.g., a week). DB schema uses `date_from`/`date_to` columns. The
generate endpoint validates both fields and supports `date_to >=
date_from`
- **Mode-driven UI**: type selector with three modes -- Daily Activity
(single date), Date Range Activity (from/to inputs with 7-day and 30-day
presets), and Agent Analysis (single date). Mode is derived reactively
from store state
- Svelte 5 Insights page with sidebar controls (type, date, project,
agent), concurrent generation tasks with live status spinners, date
display on in-progress tasks, and markdown content viewer with delete
support
- **Structured API errors**: `ApiError` class with `status` field for
programmatic error handling; empty response bodies fall back to `"API
<status>"` message
- **ListInsights capped at 500 rows** with `created_at DESC` index to
prevent unbounded queries
- `internal/insight` package: prompt construction from session data with
date-aware text ("Date" vs "Date Range"), streaming response parsing for
Claude/Codex/Gemini CLI output
- **Session breadcrumb bar** showing project name, agent badge
(color-coded), and session start time
- **Header navigation** with always-visible Sessions/Insights buttons
and active state highlighting
- Design polish: Inter font, refined color tokens for light/dark themes,
tighter typography and spacing

## Test plan

- [x] `go test -tags fts5 ./...` -- all Go tests pass (insights CRUD,
filters, 500-row cap, date range round-trip, prompt builder with
single/range dates, server handler validation)
- [x] `npx vitest run` -- all 360 frontend tests pass (insights store,
date sync, mode switching, generate payloads, ApiError handling with
empty-body fallback)
- [x] `npx tsc --noEmit` -- no type errors
- [x] `go vet ./...` -- clean
- [ ] Manual: generate a Daily Activity insight, verify single date in
list and content header
- [ ] Manual: switch to Date Range Activity, verify from/to inputs and
presets appear, generate and verify range displays
- [ ] Manual: verify all insights appear in the list regardless of
selected generation dates
- [ ] Manual: verify in-progress task items show the date being analyzed
- [ ] Manual: delete an insight, verify removal from list and content
area

Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
#18)

## Summary

- Extract and persist structured tool call metadata (`tool_use_id`,
`input_json`, `skill_name`, `result_content_length`) from session files
into the `tool_calls` table
- Pair `tool_result` content lengths back to their originating
`tool_call` via `tool_use_id` in the sync engine, then filter empty user
carrier messages
- Expose structured `tool_calls` in the message API response and enrich
frontend tool block rendering with parsed arguments (Bash commands, Task
prompts, TaskCreate/Update metadata, Skill names, etc.)
- Canonicalize worktree project names during import so archived worktree
sessions group with the main repository even when worktree paths no
longer exist on disk
- Batch tool-call hydration queries to avoid SQLite bind-variable limits
on large sessions

## Test plan
- [x] All Go tests pass (`CGO_ENABLED=1 go test -tags fts5 ./...`)
- [x] All frontend tests pass (380 tests)
- [x] Worktree project normalization: online worktree, offline worktree
with branch hint, offline worktree without branch
- [x] Tool-call batch hydration across batch boundaries (500+25
messages)
- [ ] Manual: open a session with tool calls, confirm tool blocks show
arguments and no empty user messages appear

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: CL Kao <clkao@datarecce.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Import `time/tzdata` in `cmd/agentsview/main.go` to embed the IANA
timezone database in the binary (~450KB)
- `time.LoadLocation` fails on Windows release builds (built with
`-trimpath`) for any non-UTC timezone, breaking all analytics endpoints
- Add non-UTC timezone test case (`America/New_York`) to catch
regressions

Closes #13

## Test plan
- [x] All Go tests pass (`CGO_ENABLED=1 go test -tags fts5 ./...`)
- [x] `NonUTCTimezone` test exercises `America/New_York` through the
analytics handler
- [x] Windows CI already in test matrix (`windows-latest`)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Replace `bufio.Scanner` with a custom `lineReader` that uses
`bufio.Reader.ReadLine()` to skip lines exceeding 64MB instead of
aborting the entire session parse
- Propagate I/O errors through `lineReader.Err()` (matching
`bufio.Scanner` pattern) rather than silently swallowing them
- Replace all three scan sites (Claude parser, Claude hints extractor,
Codex parser)

Closes #12

## Test plan

- [x] `TestLineReader` — normal lines, oversized skip, all oversized,
empty input, blank lines, no trailing newline, exact limit, one over
limit
- [x] `TestLineReaderIOError` — custom `io.Reader` that yields data then
returns a non-EOF error; verifies lines are returned and `Err()` exposes
the I/O error
- [x] `TestParseCodexSessionOversizedLineSkipped` — integration test
placing an oversized line between normal JSONL entries
- [x] All Go tests pass (`CGO_ENABLED=1 go test -tags fts5 ./...`)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Strip `ANTHROPIC_API_KEY` and `CLAUDECODE` from the environment when
invoking agent CLIs (`claude`, `codex`, `gemini`) for insight
generation, forcing subscription-based auth. Also sets
`CLAUDE_NO_SOUND=1`.
- Fix test isolation: `TestGenerateInsight_DefaultAgent` was spawning a
real `claude` process, which created session files that the file watcher
synced into the production database. Introduce `insight.GenerateFunc`
and `Server.generateFunc` (injectable via `WithGenerateFunc` option) so
tests use a stub.
- Show the agent name on in-progress insight tasks in the sidebar,
matching completed entries.

## Test plan

- [x] `CGO_ENABLED=1 go test -tags fts5 ./internal/insight/` passes
- [x] `CGO_ENABLED=1 go test -tags fts5 ./internal/server/` passes
- [x] `go vet ./...` clean
- [x] Manual: run insight generation with `ANTHROPIC_API_KEY` set in
shell, verify Claude uses subscription auth
- [x] Manual: verify in-progress insight tasks show agent name in
sidebar

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…uidelines

Set CLAUDE_NO_SOUND=1 on the claude command directly (appended to
inherited env) to suppress audible notifications during automated
insight generation.

Add review guideline #8: subprocess env inheritance is intentional
and env sanitization is the user's responsibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- **Sync performance**: Replace SHA-256 hash skip check with file_size +
file_mtime comparison, add path-based DB lookup for codex/gemini files,
and cache non-interactive session results. Reduces sync from ~14s to
sub-second for unchanged sessions with 7000+ files.
- **Startup logging**: Add timing to each startup phase (discovery,
sync, file watcher, total) so it's clear where time is spent.
- **Insights filtering**: Stop filtering insights list by project so
global insights remain visible when a project is selected.
- **CLI failure recovery**: Try parsing claude CLI stdout before
checking exit status, so insights are captured when the CLI exits
non-zero but produced valid output.

## Test plan

- [ ] `CGO_ENABLED=1 go test -tags fts5 ./...` passes
- [ ] `npx tsc --noEmit` passes in frontend
- [ ] Start agentsview with large session count, verify timing logs
appear and startup is faster on second run
- [ ] Generate insight with project filter active, verify global
insights stay visible
- [ ] Verify insights still generate and save correctly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary
- Gate the cancellation check in `generateClaude` on `runErr != nil` so
a successful `cmd.Run` followed by a post-completion context cancel
doesn't discard a valid result

## Test plan
- [x] Existing `TestGenerateClaude_CancelledContext` passes
(pre-cancelled context still errors)
- [x] `TestGenerateClaude_SalvageOnNonZeroExit` passes (salvage behavior
preserved)
- [x] Full `go test ./...` green

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Add OpenCode (opencode.ai) as a fourth supported agent alongside
Claude Code, Codex, and Gemini CLI
- OpenCode stores sessions in a SQLite database
(`~/.local/share/opencode/opencode.db`) with schema: `project` →
`session` → `message` → `part`, where role and part type live inside
JSON `data` columns
- Parse sessions, messages, tool calls, and reasoning parts from the
OpenCode DB into the same `ParsedSession`/`ParsedMessage` structures
used by other agents
- Add persistent skip cache (`skipped_files` table) so non-interactive
sessions survive process restarts without re-parsing ~7000 codex files
- Add per-session change detection for OpenCode using `time_updated`
comparison instead of fragile WAL fingerprinting
- Add incremental message sync (append-only) to avoid expensive FTS5
delete+reinsert when re-syncing large active sessions
- Add sync telemetry (timing logs per phase) for diagnosing performance
- Add `OPENCODE_DIR` env var and config, purple agent color in UI
- Use `gemini-3-pro-preview` model for insight generation

## Test plan

- [ ] `CGO_ENABLED=1 go test -tags fts5 ./...` — all tests pass
- [ ] `golangci-lint run ./...` — no issues
- [ ] Manual: `make build && ./agentsview` with OpenCode installed —
sessions appear with correct project names, messages, tool calls
- [ ] Verify second restart skips opencode sessions (0 updated) and file
sync uses incremental append

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Add GitHub Copilot CLI as a supported agent, parsing JSONL session
data from `~/.copilot/session-state/`
- Support both bare (`<uuid>.jsonl`) and directory
(`<uuid>/events.jsonl`) storage layouts
- Extract user/assistant messages, tool calls with content-length
pairing, and reasoning text
- Add `COPILOT_DIR` env var and file watcher for live updates
- Fix interleaved log output during initial sync progress bar

closes #23 

## Changes

**Parser** (`internal/parser/copilot.go`): JSONL parser handling
`session.start`, `user.message`, `assistant.message`,
`tool.execution_complete`, and `assistant.reasoning` events. Uses
`gjson` Raw fallback for non-string tool results (objects, arrays).

**Taxonomy** (`internal/parser/taxonomy.go`): Map `view` -> Read,
`report_intent` -> Tool. Existing mappings cover `edit_file`, `shell`,
`grep`, `glob`.

**Config** (`internal/config/config.go`): `CopilotDir` field, default
`~/.copilot`, `COPILOT_DIR` env var.

**Discovery** (`internal/sync/discovery.go`): `DiscoverCopilotSessions`
walks session-state/ for both layouts. `FindCopilotSourceFile` checks
both paths.

**Sync engine** (`internal/sync/engine.go`): Wire copilot into discover,
process, classify, find-source, and single-session sync. Suppress
verbose log lines when progress callback is active to fix garbled
initial sync output.

**Frontend**: Amber agent color for copilot dot in SessionItem,
CommandPalette, App badge. Added to InsightsPage agent filter dropdown.

## Test plan

- [x] `CGO_ENABLED=1 go test -tags fts5 ./internal/parser/` -- 8 copilot
parser tests + taxonomy tests pass
- [x] `CGO_ENABLED=1 go test -tags fts5 ./internal/sync/` -- sync
integration tests pass (including new OpenCode bulk-sync tests)
- [x] `CGO_ENABLED=1 go test -tags fts5 ./...` -- all tests pass
- [x] Smoke test: parsed 19/19 real copilot sessions with 0 errors,
correct project extraction, both file layouts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary 

- Adds a clickable session ID to the session detail breadcrumb bar
- Shows first 8 characters of the session ID in a monospace styled
element
- Hovering shows the full session ID as a tooltip
- Clicking copies the full session ID to clipboard with "Copied!"
feedback (1.5s)
- Extracted a reusable `copyToClipboard` utility with tests

This lets users easily grab session IDs for `claude --resume <id>`.

## Demo


https://github.com/user-attachments/assets/b7ef65c8-d80a-40c7-8a90-13d5e049c494

## Tests Ran

- [x] `copyToClipboard` utility tested (success + failure paths)
- [x] All 383 frontend tests passing
- [x] Go tests passing (no backend changes)
- [x] Manual: navigate to session, verify truncated ID visible
- [x] Manual: hover shows full ID tooltip
- [x] Manual: click copies full ID, shows "Copied!" for 1.5s

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Wes McKinney <wesmckinn+git@gmail.com>
Symlinked project directories under `CLAUDE_PROJECTS_DIR` were silently
skipped, making it impossible to scan a subset of projects by symlinking
selected project directories into a custom directory.

## Summary

- `os.ReadDir` returns `DirEntry` where `IsDir()` is `false` for
symlinks to directories, causing `DiscoverClaudeProjects` and Gemini
discovery to silently skip symlinked project directories
- Adds `isDirOrSymlink()` helper that also checks `ModeSymlink`, applied
to all three affected call sites (Claude projects, Gemini session
discovery, Gemini source file lookup)

## Test plan

- [x] Verified with `/tmp/filtered-projects/` containing a symlink to
one project: before fix discovers 0 claude files, after fix discovers 4
- [x] All existing discovery tests pass
- [x] Full test suite passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Wes McKinney <wesmckinn+git@gmail.com>
## Summary

- Add activity indicator and filter dropdown to the session sidebar
(recently active, min prompts, agent)
- Filter recently active sessions by last activity timestamp, not start
date
- Add `user_message_count` column to track actual user prompts
(excluding tool-result messages)
- Validate `active_since` query param server-side in both sessions and
analytics endpoints (400 on malformed RFC3339)
- Fix stale "Active 24h" cutoff on analytics page by computing the
timestamp at fetch time
- Sync filter state between sidebar and analytics dashboard, including
clears
- Fix Gemini sessions showing as "unknown" project (#36) — support named
project directories with worktree resolution
- Deterministic Gemini project map iteration on duplicate names
- Add in-app full resync: gear icon in header opens a modal that
re-parses all session files via SSE-streamed progress, without deleting
the database
- Serialize sync runs with engine-level mutex to prevent concurrent
sync/resync races
- Extract shared modal CSS into global styles scoped under
`.modal-panel`
- Fix E2E test fixture to include `user_message_count`

Closes #36 

## Test plan

- [x] `go test ./...` — all packages pass
- [x] `npx vitest run` — 392 tests pass
- [x] `npx svelte-check` — 0 errors
- [x] E2E tests updated for `user_message_count` display change
- [x] Enable "Recently Active" in sidebar, switch to analytics tab,
verify chip appears, clear chip, verify sidebar dropdown updates
- [ ] Send `?active_since=garbage` to `/api/sessions` — expect 400
- [x] Click gear icon → confirm resync → verify progress streams → done
summary → sessions reload
- [x] Click gear icon while sync is running → verify error state with
Retry/Close
- [x] Verify Gemini sessions show correct project names after re-sync

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary

- Adds a `postMessage` listener to `UIStore` that accepts `{type:
"theme:set", theme: "light"|"dark"}` messages
- Enables parent windows to control agentsview's theme without reloading
the iframe
- Closes #31

## Details

When agentsview is embedded as a cross-origin iframe, the host
application can now send a `theme:set` message to switch themes
instantly. This avoids the jarring reload previously needed when using
the `?theme=` URL parameter approach.

The implementation is minimal — a single
`window.addEventListener("message", ...)` in the UIStore constructor.
Since `this.theme` is a `$state` field, assigning it triggers the
existing `$effect` that updates the DOM class and persists to
localStorage.

## Protocol

```js
iframe.contentWindow.postMessage({ type: "theme:set", theme: "dark" }, "*");
```

Only `"light"` and `"dark"` are accepted; other values are silently
ignored.

## Test plan

- [x] Valid `theme:set` message changes theme
- [x] Invalid theme value (e.g. "purple") is ignored
- [x] Unrelated message types are ignored
- [x] Full test suite passes (384/384, +3 new)
## Summary

- Fix command palette freeze when a search query returns zero results
(e.g. "spamalot")
- Root cause: Go nil slice serializes as JSON `null`, not `[]`. The
frontend crashed on `null.length`, breaking the component and its Escape
handler.
- Server now coerces nil results to an empty slice before serialization
- Frontend adds `?? []` null-coalesce as defense in depth

## Test plan

- [x] New `TestSearch_ZeroResults` server test asserts results is `[]`
not `null`
- [x] Existing search store tests pass
- [ ] Manual: open command palette, search for a term with no matches,
verify "No results" shown and Escape works

Fixes #34

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…er warnings, add polling fallback for unwatchable dirs (#38)

## Summary
- `config.json` can have multiple paths, to support Windows & WSL on the
same box eg
```json
 "claude_project_dirs": [
    "C:\\Users\\Nat\\.claude\\projects",
    "\\\\wsl.localhost\\Ubuntu-24.04\\home\\gnat\\.claude\\projects"
  ],
```
- `WatchRecursive` now returns watched/unwatched counts silently instead
of logging one warning per failed subdirectory
- `startFileWatcher` prints a single condensed line per root dir (e.g.
"Couldn't watch 15 directories under \wsl.localhost\..., will poll every
2m")
- Adds a 2-minute polling goroutine for unwatchable directories,
supplementing the existing 15-minute periodic sync (wsl can't be watched
from Windows)

## Test plan

- [x] `go vet -tags fts5 ./internal/sync/ ./cmd/agentsview/` passes
- [x] `CGO_ENABLED=1 go test -tags fts5 ./internal/sync/
./internal/config/ ./internal/server/` passes
- [ ] Manual: run with WSL dirs configured, confirm one summary line
instead of many warnings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Nat Torkington <Nat@Ontempo.co.nz>
Co-authored-by: Wes McKinney <wesmckinn+git@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
… colors (kenn-io#44)

## Summary

- **Read `trustedFolders.json`** alongside `projects.json` when building
the Gemini hash-to-project map. `trustedFolders.json` persists longer
than `projects.json`, recovering project names for orphaned SHA-256 hash
directories that Gemini CLI has cleaned up.
- **Add `exclude_project` API filter** (`project != ?` SQL predicate)
and a "Hide unknown" toggle in the sidebar filter dropdown, letting
users hide sessions with unresolvable project names. Conflicting
`project=unknown` + `exclude_project=unknown` is prevented centrally in
`apiParams` -- explicit project selection always wins.
- **Fix Gemini/Claude color collision** (fixes kenn-io#42). Both agents used
`--accent-blue`. Gemini now uses `--accent-rose` (light: `#e11d48`,
dark: `#fb7185`) for maximum distinction from all other agent colors.
- **Show agent name in session list.** Replace the plain dot indicator
with a colored dot + agent name label (e.g. "Claude", "Gemini") in the
agent's accent color. Width is capped with ellipsis truncation to
prevent sidebar squeeze. Also adds missing `agent-gemini` and
`agent-opencode` badge classes in the breadcrumb.

## Test plan

- [x] Go tests: `TestBuildGeminiProjectMapTrustedFolders`,
`TestBuildGeminiProjectMapBothFiles`,
`TestBuildGeminiProjectMapProjectsWin` verify trustedFolders.json
reading and precedence
- [x] Go tests: `TestSessionFilterExcludeProject` covers exclude_project
SQL filter (4 cases)
- [x] Frontend tests: 10 store tests cover API serialization,
conflicting filter clearing (toggle, URL params, centralized apiParams
guard), `hasActiveFilters`, and `clearSessionFilters`
- [x] Agent color test updated to assert Gemini uses `--accent-rose`
- [x] Vite build produces no warnings
- [x] All existing Go and frontend tests pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
… model (kenn-io#45)

## Summary

- **Fix message count discrepancy**: `sessions.message_count` and
`user_message_count` now reflect post-filter counts (after
`pairAndFilter` removes empty user+tool_result messages), matching the
status bar totals. Previously analytics showed inflated counts from
pre-filter parser output.
- **Add "All" time range preset**: New preset in the analytics date
picker sets the start date to `1970-01-01`, showing all sessions
regardless of age.
- **Update Gemini insight model**: Changed `geminiInsightModel` from
`gemini-3-pro-preview` to `gemini-3.1-pro-preview`.

> **Note:** Existing sessions will retain stale (inflated) counts until
re-synced. Users who see a discrepancy between the analytics dashboard
and the status bar should use the in-app resync button to reprocess all
sessions. New and incrementally synced sessions will have correct counts
automatically.

## Test plan

- [x] `postFilterCounts` unit test covers mixed roles, empty slice,
all-user, no-user cases
- [x] `TestSyncEnginePostFilterCounts` integration test verifies
`writeBatch` stores post-filter counts with tool_result filtering
- [x] `TestSyncSingleSessionPostFilterCounts` integration test verifies
`writeSessionFull` path by corrupting DB counts and forcing reparse
- [x] Existing `TestGenerateGemini_ModelFlag` passes with updated model
constant
- [x] All Go tests pass (`go test -tags fts5 ./internal/...`)
- [x] Frontend type check (`tsc --noEmit`) and tests (`vitest run`) pass
- [x] Frontend build (`vite build`) produces no warnings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Closes #17

## Summary

- Detect conversation forks in Claude Code sessions by building a
uuid/parentUuid DAG, splitting large-gap branches into separate session
records
- Link Task tool calls to their spawned subagent sessions via
queue-operation parsing (JSON and XML formats)
- Add inline subagent conversation expansion in the frontend

## End-User Impact

- **Fork detection**: Conversation branches (e.g., from Claude Code's
"retry from here") are detected and split into separate session entries
instead of being jumbled together. Small retries (≤3 user turns) fold
into the main session; larger forks appear as standalone sessions.
- **Subagent session linking**: Task subagent conversations are linked
to the specific tool call that launched them. Task tool blocks show an
expandable inline view of the subagent's conversation.
- **Cleaner session list**: Subagent and fork sessions are hidden from
the top-level list — accessible only through their parent session
context.

## Design

**DAG from uuid/parentUuid:** Every Claude Code JSONL entry carries
`uuid` and `parentUuid` fields forming a tree. The parser builds a
parent→children adjacency map in a single pass, then walks from root
following first-child links. At fork points (nodes with multiple
children), a heuristic counts user turns remaining on the first branch:
>3 turns = real fork (split into separate `ParseResult`), ≤3 turns =
retry (follow latest child, discard older branch).

**Subagent linking from queue-operation:** Claude Code writes
`queue-operation` entries with `operation: "enqueue"` when spawning
subagents. The `content` field maps `tool_use_id` → `task_id`. Two
formats exist in the wild: JSON
(`{"task_id":"...","tool_use_id":"..."}`) and XML
(`<task-id>...</task-id><tool-use-id>...</tool-use-id>`). Parser tries
JSON first via `gjson.Get`, falls back to regex for XML tags.

**Data model — relationship_type:** Sessions gain a `relationship_type`
column (`""`, `"continuation"`, `"subagent"`, `"fork"`). Fork sessions
get ID `{parent}-{first-uuid}` with `parent_session_id` pointing to main
session. Tool calls gain `subagent_session_id` linking to the agent
session.

**API — child sessions endpoint:** `GET /api/v1/sessions/{id}/children`
returns fork/continuation/subagent sessions for a parent.

## Test plan

- [ ] Verify fork detection unit tests pass (`go test ./internal/parser/
-run TestForkDetection`)
- [ ] Verify subagent linking tests pass (`go test ./internal/parser/
-run TestSubagent`)
- [ ] Verify integration tests pass (`go test ./internal/sync/ -run
TestSync`)
- [ ] Manual: load a session with Task subagents and verify inline
expansion works
- [ ] Manual: verify subagent/fork sessions don't appear in top-level
session list

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Wes McKinney <wesmckinn+git@gmail.com>
## Summary

- Split monolithic parser tests (`parser_test.go`) into per-agent files
(`claude_parser_test.go`, `codex_parser_test.go`,
`gemini_parser_test.go`)
- Convert many tests to table-driven format
- Add test fixture files under `internal/parser/testdata/`
- Refactor watcher tests to use real fsnotify events instead of mocking
internal state
- Make analytics test assertions dynamic (derived from seed data instead
of hardcoded)
- Small production code improvements: deterministic prune output,
http.Method constants in export.go, error handling on io.ReadAll

## Test plan

- [ ] `make test` passes
- [ ] `make vet` passes
- [ ] No coverage regressions (test count increased from 23 to 33 parser
functions)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.2.0
to 6.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-go/releases">actions/setup-go's
releases</a>.</em></p>
<blockquote>
<h2>v6.3.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update default Go module caching to use go.mod by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-go/pull/705">actions/setup-go#705</a></li>
<li>Fix golang download url to go.dev by <a
href="https://github.com/178inaba"><code>@​178inaba</code></a> in <a
href="https://redirect.github.com/actions/setup-go/pull/469">actions/setup-go#469</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-go/compare/v6...v6.3.0">https://github.com/actions/setup-go/compare/v6...v6.3.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-go/commit/4b73464bb391d4059bd26b0524d20df3927bd417"><code>4b73464</code></a>
Fix golang download url to go.dev (<a
href="https://redirect.github.com/actions/setup-go/issues/469">#469</a>)</li>
<li><a
href="https://github.com/actions/setup-go/commit/a5f9b05d2d216f63e13859e0d847461041025775"><code>a5f9b05</code></a>
Update default Go module caching to use go.mod (<a
href="https://redirect.github.com/actions/setup-go/issues/705">#705</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-go/compare/7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5...4b73464bb391d4059bd26b0524d20df3927bd417">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-go&package-manager=github_actions&previous-version=6.2.0&new-version=6.3.0)](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)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…-io#47)

Bumps
[svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte)
from 5.53.2 to 5.53.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sveltejs/svelte/releases">svelte's
releases</a>.</em></p>
<blockquote>
<h2>svelte@5.53.5</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: escape <code>innerText</code> and <code>textContent</code>
bindings of <code>contenteditable</code> (<a
href="https://github.com/sveltejs/svelte/commit/0df5abcae223058ceb95491470372065fb87951d"><code>0df5abcae223058ceb95491470372065fb87951d</code></a>)</p>
</li>
<li>
<p>fix: sanitize <code>transformError</code> values prior to embedding
in HTML comments (<a
href="https://github.com/sveltejs/svelte/commit/0298e979371bb583855c9810db79a70a551d22b9"><code>0298e979371bb583855c9810db79a70a551d22b9</code></a>)</p>
</li>
</ul>
<h2>svelte@5.53.4</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: set server context after async transformError (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17799">#17799</a>)</p>
</li>
<li>
<p>fix: hydrate if blocks correctly (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17784">#17784</a>)</p>
</li>
<li>
<p>fix: handle default parameters scope leaks (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17788">#17788</a>)</p>
</li>
<li>
<p>fix: prevent flushed effects from running again (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17787">#17787</a>)</p>
</li>
</ul>
<h2>svelte@5.53.3</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: render <code>:catch</code> of <code>#await</code> block with
correct key (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17769">#17769</a>)</p>
</li>
<li>
<p>chore: pin aria-query@5.3.1 (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17772">#17772</a>)</p>
</li>
<li>
<p>fix: make string coercion consistent to <code>toString</code> (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17774">#17774</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md">svelte's
changelog</a>.</em></p>
<blockquote>
<h2>5.53.5</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: escape <code>innerText</code> and <code>textContent</code>
bindings of <code>contenteditable</code> (<a
href="https://github.com/sveltejs/svelte/commit/0df5abcae223058ceb95491470372065fb87951d"><code>0df5abcae223058ceb95491470372065fb87951d</code></a>)</p>
</li>
<li>
<p>fix: sanitize <code>transformError</code> values prior to embedding
in HTML comments (<a
href="https://github.com/sveltejs/svelte/commit/0298e979371bb583855c9810db79a70a551d22b9"><code>0298e979371bb583855c9810db79a70a551d22b9</code></a>)</p>
</li>
</ul>
<h2>5.53.4</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: set server context after async transformError (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17799">#17799</a>)</p>
</li>
<li>
<p>fix: hydrate if blocks correctly (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17784">#17784</a>)</p>
</li>
<li>
<p>fix: handle default parameters scope leaks (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17788">#17788</a>)</p>
</li>
<li>
<p>fix: prevent flushed effects from running again (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17787">#17787</a>)</p>
</li>
</ul>
<h2>5.53.3</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: render <code>:catch</code> of <code>#await</code> block with
correct key (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17769">#17769</a>)</p>
</li>
<li>
<p>chore: pin aria-query@5.3.1 (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17772">#17772</a>)</p>
</li>
<li>
<p>fix: make string coercion consistent to <code>toString</code> (<a
href="https://redirect.github.com/sveltejs/svelte/pull/17774">#17774</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sveltejs/svelte/commit/ed14b499d6ea6821b5e8f81a723164eb8198dfa9"><code>ed14b49</code></a>
Version Packages (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17802">#17802</a>)</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/0df5abcae223058ceb95491470372065fb87951d"><code>0df5abc</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/0298e979371bb583855c9810db79a70a551d22b9"><code>0298e97</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/96fd3ce763525ce6276520ca605dba5ece74ae93"><code>96fd3ce</code></a>
Version Packages (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17786">#17786</a>)</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/1b3e6605190ab8ca21292ddd3ccf2a71387d79fe"><code>1b3e660</code></a>
fix: prevent flushed effects from running again (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17787">#17787</a>)</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/673a1ab9643644fe31beda33eacfdec9ee1f2668"><code>673a1ab</code></a>
fix: set server context after async transformError (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17799">#17799</a>)</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/3a289797bd205182e7677f58daf472caf537afc2"><code>3a28979</code></a>
fix: handle default parameters scope leaks (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17788">#17788</a>)</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/fcdc0289db5e6b0f7cf68cd3988450dad567392f"><code>fcdc028</code></a>
fix: hydrate if blocks correctly (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17784">#17784</a>)</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/97f3ac557158dd7754264dfe735ed83c2ce95e1f"><code>97f3ac5</code></a>
Version Packages (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17775">#17775</a>)</li>
<li><a
href="https://github.com/sveltejs/svelte/commit/7deedc5bb4fd6d0f033d00fa9741c7141fffd730"><code>7deedc5</code></a>
fix: render <code>:catch</code> of <code>#await</code> block with
correct key (<a
href="https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte/issues/17769">#17769</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/sveltejs/svelte/commits/svelte@5.53.5/packages/svelte">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=svelte&package-manager=npm_and_yarn&previous-version=5.53.2&new-version=5.53.5)](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)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…nd (kenn-io#48)

Bumps
[@types/dompurify](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/dompurify)
from 3.0.5 to 3.2.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/dompurify">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/dompurify&package-manager=npm_and_yarn&previous-version=3.0.5&new-version=3.2.0)](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)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…frontend (kenn-io#49)

Bumps
[@tanstack/virtual-core](https://github.com/TanStack/virtual/tree/HEAD/packages/virtual-core)
from 3.13.18 to 3.13.19.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/TanStack/virtual/releases"><code>@​tanstack/virtual-core</code>'s
releases</a>.</em></p>
<blockquote>
<h2><code>@​tanstack/virtual-core</code><a
href="https://github.com/3"><code>@​3</code></a>.13.19</h2>
<h3>Patch Changes</h3>
<ul>
<li>Fix crash when component unmounts during <code>scrollToIndex</code>
by adding a null guard for <code>targetWindow</code> inside the
<code>requestAnimationFrame</code> callback (<a
href="https://redirect.github.com/TanStack/virtual/pull/1129">#1129</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/TanStack/virtual/blob/main/packages/virtual-core/CHANGELOG.md"><code>@​tanstack/virtual-core</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>3.13.19</h2>
<h3>Patch Changes</h3>
<ul>
<li>Fix crash when component unmounts during <code>scrollToIndex</code>
by adding a null guard for <code>targetWindow</code> inside the
<code>requestAnimationFrame</code> callback (<a
href="https://redirect.github.com/TanStack/virtual/pull/1129">#1129</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/TanStack/virtual/commit/e0e4dcde5c99906eab2ab5aefd75e568b2ece967"><code>e0e4dcd</code></a>
ci: Version Packages (<a
href="https://github.com/TanStack/virtual/tree/HEAD/packages/virtual-core/issues/1131">#1131</a>)</li>
<li><a
href="https://github.com/TanStack/virtual/commit/843109c5bf780591a762f9767f3808fd15e3f94e"><code>843109c</code></a>
fix(virtual-core): guard against null targetWindow in scrollToIndex rAF
callb...</li>
<li>See full diff in <a
href="https://github.com/TanStack/virtual/commits/@tanstack/virtual-core@3.13.19/packages/virtual-core">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@tanstack/virtual-core&package-manager=npm_and_yarn&previous-version=3.13.18&new-version=3.13.19)](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)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
georgeck and others added 17 commits April 19, 2026 08:20
Restores the max-token denominator that was dropped when the header
was changed to show turn count.
Missing entry caused unknown capacity for opus-4-7 sessions, hiding
max token display and the context window block map.
Updates app header, about modal, settings, update modal, browser/desktop
titles, and Tauri config. localStorage keys left unchanged to preserve
existing user preferences.
Import the JetBrains IDE plugin that renders the agentsview web UI
in a JCEF tool window. Rename from sample-plugin to periscope-plugin
and update README with build instructions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Skip <synthetic> model name in pickPrimaryModel so sessions whose last
  message is a synthetic tool-result row resolve the real model and its
  context window size.
- Use ContextTokens > 0 (not TokenPresence) to detect a measured context
  snapshot; TokenPresence returns true for any message with input_tokens,
  which reset cumulative to 0 when ContextTokens was absent.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ging

- Add POST /api/v1/sessions/{id}/summarize endpoint to manually enqueue
  a session for turn summarization (fallback when auto-reconcile misses it)
- Add "Generate summaries" button in the context page alongside the
  coverage pill, shown when status is idle or pending
- Improve startup logging to distinguish unset key, init failure, and
  successful LLM client initialization
Rename project from 'agentsview' to 'Periscope' in README.
- Rename to Periscope, attribute upstream agentsview repo
- Add Context Engineering section with spec link
- Update hero image to periscope context view screenshot
Bumps the cargo group with 4 updates in the /desktop/src-tauri directory: [tauri](https://github.com/tauri-apps/tauri), [rustls-webpki](https://github.com/rustls/webpki), [tar](https://github.com/composefs/tar-rs) and [time](https://github.com/time-rs/time).


Updates `tauri` from 2.10.2 to 2.11.1
- [Release notes](https://github.com/tauri-apps/tauri/releases)
- [Commits](tauri-apps/tauri@tauri-v2.10.2...tauri-v2.11.1)

Updates `rustls-webpki` from 0.103.9 to 0.103.13
- [Release notes](https://github.com/rustls/webpki/releases)
- [Commits](rustls/webpki@v/0.103.9...v/0.103.13)

Updates `tar` from 0.4.44 to 0.4.46
- [Release notes](https://github.com/composefs/tar-rs/releases)
- [Commits](composefs/tar-rs@0.4.44...0.4.46)

Updates `time` from 0.3.36 to 0.3.47
- [Release notes](https://github.com/time-rs/time/releases)
- [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md)
- [Commits](time-rs/time@v0.3.36...v0.3.47)

---
updated-dependencies:
- dependency-name: tauri
  dependency-version: 2.11.1
  dependency-type: direct:production
  dependency-group: cargo
- dependency-name: rustls-webpki
  dependency-version: 0.103.13
  dependency-type: indirect
  dependency-group: cargo
- dependency-name: tar
  dependency-version: 0.4.46
  dependency-type: indirect
  dependency-group: cargo
- dependency-name: time
  dependency-version: 0.3.47
  dependency-type: indirect
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file rust Pull requests that update rust code labels May 27, 2026
cursor Bot pushed a commit that referenced this pull request Jun 1, 2026
## Summary

- Update GitHub Actions: checkout v6.0.2, upload-artifact v6.0.0,
download-artifact v7.0.0
- Update npm deps: svelte 5.53.2 (SSR vulnerability fix),
vite-plugin-svelte 6.2.4, vite 6.4.1, typescript 5.9.3, svelte-check
4.4.1, @tsconfig/svelte 5.0.8, @tanstack/virtual-core 3.13.18
- Add engines.node constraint for vite-plugin-svelte 6.x minimum
- Fix search.test.ts timing for Svelte 5.53.2 reactive system changes

Closes #1, closes #2, closes #3, closes #4, closes #5, closes #6, closes
#7, closes #8

## Test plan

- [ ] CI passes: Go tests, frontend unit tests, E2E tests, lint, type
check
- [ ] `npm audit` shows 0 vulnerabilities
- [ ] Frontend builds cleanly with vite 6.4.1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@diazMelgarejo
diazMelgarejo changed the base branch from main to merged July 28, 2026 01:05
@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

Superseded by #9cursor/deps-cargo-onto-merged-f559 replayed onto current merged tip (aa0b48b). Close when #9 merges.

@dependabot @github

dependabot Bot commented on behalf of github Jul 28, 2026

Copy link
Copy Markdown
Author

This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests.

To ignore these dependencies, configure ignore rules in dependabot.yml

@dependabot
dependabot Bot deleted the dependabot/cargo/desktop/src-tauri/cargo-7c37409f6b branch July 28, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.