build(deps): bump the cargo group across 1 directory with 4 updates - #6
Closed
dependabot[bot] wants to merge 223 commits into
Closed
build(deps): bump the cargo group across 1 directory with 4 updates#6dependabot[bot] wants to merge 223 commits into
dependabot[bot] wants to merge 223 commits into
Conversation
## 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 /> [](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 /> [](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 /> [](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 /> [](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>
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.
…gineering section
- 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>
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>
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
Bot
deleted the
dependabot/cargo/desktop/src-tauri/cargo-7c37409f6b
branch
July 28, 2026 01:18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps the cargo group with 4 updates in the /desktop/src-tauri directory: tauri, rustls-webpki, tar and time.
Updates
taurifrom 2.10.2 to 2.11.1Release notes
Sourced from tauri's releases.
... (truncated)
Commits
e5ae5b9chore: fix changelog4d2db70Apply Version Updates From Current Changes (#15328)5e3126ffeat(mobile): expose monitor APIs (#15338)ba02558Merge commit from fork5f479c0fix(core): requestPermission crash regression on Android, closes #15323 (#15336)1b26769fix(tauri): enforce ACL for remote origins even without AppManifest (#15266)3057edafix(driver): enableeq-separatorfeature forpico-args. (#15324)4f548e7chore(deps): update phf to 0.13 (#15308)4ca427dfix: pin napi for msrv and Node.js on CI (#15310)a04d907fix(ci): publish-cli-rs script for Powershell (#15309)Updates
rustls-webpkifrom 0.103.9 to 0.103.13Release notes
Sourced from rustls-webpki's releases.
Commits
2879b2cPrepare 0.103.132c49773Improve tests for padding ofBitStringFlags4e3c0b3Correct validation of BIT STRING constraints39c91d2Actually fail closed for URI matching against excluded subtrees27131d4Bump version to 0.103.126ecb876Clean up stuttery enum variant names318b3e6Ignore wildcard labels when matching name constraints1219622Rewrite constraint matching to avoid permissive catch-all branch57bc62cBump version to 0.103.11d0fa01eAllow parsing trust anchors with unknown criticial extensionsUpdates
tarfrom 0.4.44 to 0.4.46Release notes
Sourced from tar's releases.
Commits
fc459c1Release 0.4.4643e05a8ci: Add crates.io trusted publishing workflowbba5666Update repo linkscd94c46docs: Document TOCTOU / concurrent-mutation threat model1b4997cbuilder: Expand docs for follow_symlinks and append_dir_allbab14ddarchive: Fix another PAX header desync (GHSA-3cv2-h65g-fgmm)2349b49Add support of absolute paths39d0311Update some links59d803eUpdate astral-tokio-tar requirement from 0.5 to 0.68296b9aci: Fix and re-enable reverse dependency testing (#444)Updates
timefrom 0.3.36 to 0.3.47Release notes
Sourced from time's releases.
Changelog
Sourced from time's changelog.
... (truncated)
Commits
d5144cdv0.3.47 releasef6206b0Guard against integer overflow in release mode1c63dc7Avoid denial of service when parsing Rfc28225940df6Add builder methods to avoid verbose construction00881a4Manually format macros everywherebb723b6Addtrailing_inputmodifier toend31c4f8ePermitW12indate!macro490a17bMark error paths in well-known formats as cold6cb1896OptimizeRfc2822parsing6d264d5Remove erroneous#[inline(never)]attributesDependabot 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 rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill 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 versionwill 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 conditionsYou can disable automated security fix PRs for this repo from the Security Alerts page.