Skip to content

build(deps): bump the npm_and_yarn group across 1 directory with 3 updates - #5

Closed
dependabot[bot] wants to merge 223 commits into
mergedfrom
dependabot/npm_and_yarn/frontend/npm_and_yarn-0a65c35dea
Closed

build(deps): bump the npm_and_yarn group across 1 directory with 3 updates#5
dependabot[bot] wants to merge 223 commits into
mergedfrom
dependabot/npm_and_yarn/frontend/npm_and_yarn-0a65c35dea

Conversation

@dependabot

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

Copy link
Copy Markdown

Bumps the npm_and_yarn group with 3 updates in the /frontend directory: marked, svelte and postcss.

Updates marked from 18.0.0 to 18.0.2

Release notes

Sourced from marked's releases.

v18.0.2

18.0.2 (2026-04-18)

Bug Fixes

  • fix infinite loop for indented code blank line (#3947) (58a52e8)

v18.0.1

18.0.1 (2026-04-17)

Bug Fixes

  • rules: ensure lookbehind regex is evaluated correctly by minifiers (#3945) (abd907a)
Commits
  • c4f4529 chore(release): 18.0.2 [skip ci]
  • 58a52e8 fix: fix infinite loop for indented code blank line (#3947)
  • 98b3824 chore(release): 18.0.1 [skip ci]
  • abd907a fix(rules): ensure lookbehind regex is evaluated correctly by minifiers (#3945)
  • 96351c4 chore(deps-dev): bump marked-highlight from 2.2.3 to 2.2.4 (#3946)
  • c132699 chore: update testutils (#3942)
  • See full diff in compare view

Updates svelte from 5.55.4 to 5.55.9

Release notes

Sourced from svelte's releases.

svelte@5.55.9

Patch Changes

  • fix: don't unset batch when calling {#await ...} promise (#18243)

  • fix: promise-ify {#await await ...} expressions on the server and correctly hydrate them on the client (#18243)

  • fix: deduplicate dependencies that are added outside the init/update cycle (#18243)

  • fix: avoid false-positive batch invariant error (#18246)

  • fix: inline primitive constants in attribute values during SSR (#18232)

svelte@5.55.8

Patch Changes

  • fix(print): handle svelte:body and fix keyframe percentage double-printing (#18234)

  • fix: execute uninitialized derived even if it's destroyed (#18228)

  • fix: use named symbols everywhere (#18238)

  • fix: don't run teardown effects when deriveds are unfreezed (#18227)

  • fix: unset context synchronously in run (#18236)

svelte@5.55.7

Patch Changes

svelte@5.55.6

Patch Changes

  • fix: leave stale promises to wait for a later resolution, instead of rejecting (#18180)

  • fix: keep dependencies of $state.eager/pending (#18218)

  • fix: reapply context after transforming error during SSR (#18099)

  • fix: don't rebase just-created batches (#18117)

... (truncated)

Changelog

Sourced from svelte's changelog.

5.55.9

Patch Changes

  • fix: don't unset batch when calling {#await ...} promise (#18243)

  • fix: promise-ify {#await await ...} expressions on the server and correctly hydrate them on the client (#18243)

  • fix: deduplicate dependencies that are added outside the init/update cycle (#18243)

  • fix: avoid false-positive batch invariant error (#18246)

  • fix: inline primitive constants in attribute values during SSR (#18232)

5.55.8

Patch Changes

  • fix(print): handle svelte:body and fix keyframe percentage double-printing (#18234)

  • fix: execute uninitialized derived even if it's destroyed (#18228)

  • fix: use named symbols everywhere (#18238)

  • fix: don't run teardown effects when deriveds are unfreezed (#18227)

  • fix: unset context synchronously in run (#18236)

5.55.7

Patch Changes

5.55.6

Patch Changes

  • fix: leave stale promises to wait for a later resolution, instead of rejecting (#18180)

  • fix: keep dependencies of $state.eager/pending (#18218)

... (truncated)

Commits

Updates postcss from 8.5.8 to 8.5.15

Release notes

Sourced from postcss's releases.

8.5.15

  • Fixed declaration parsing performance (by @​homanp).

8.5.14

8.5.13

  • Fixed postcss-scss commend regression.

8.5.12

  • Fixed reading any file via user-generated CSS.
  • Added opts.unsafeMap to disable checks.

8.5.11

  • Fixed nested brackets parsing performance (by @​offset).

8.5.10

  • Fixed XSS via unescaped </style> in non-bundler cases (by @​TharVid).

8.5.9

  • Speed up source map encoding paring in case of the error.
Changelog

Sourced from postcss's changelog.

8.5.15

  • Fixed declaration parsing performance (by @​homanp).

8.5.14

8.5.13

  • Fixed postcss-scss commend regression.

8.5.12

  • Fixed reading any file via user-generated CSS.
  • Added opts.unsafeMap to disable checks.

8.5.11

  • Fixed nested brackets parsing performance (by @​offset).

8.5.10

  • Fixed XSS via unescaped </style> in non-bundler cases (by @​TharVid).

8.5.9

  • Speed up source map encoding paring in case of the error.
Commits
  • eae46db Release 8.5.15 version
  • 79508ff Update CI actions
  • b128e21 Speed up declaration parsing by avoiding creating new array on each token
  • 9825dca Fix code format
  • 55789c8 Update dependencies
  • 84fbbe9 Install older pnpm action for old Node.js
  • 9f860bd Revert pnpm action for old Node.js
  • 0877198 Update CI actions
  • b2d1a33 Fix linter warnings
  • 0700dac Merge pull request #2088 from rootvector2/add-oss-fuzz-harness
  • 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 19 commits April 19, 2026 04:16
Adds background per-turn summarisation using Anthropic Haiku (claude-haiku-4-5-20251001).
Summaries are generated only for starred sessions, triggered on star and on boot
via ReconcileStarred. Failed turns are retried after a 2-minute cooldown so
partially-summarised sessions make progress after transient rate limits.

Schema: new context_turn_summaries table (content-addressed by session/turn/hash).
API: GET /sessions/{id}/context now includes summary_coverage {status, total_turns,
summarised_turns, starred, last_updated_at}. Status: disabled|idle|pending|complete.
UI: coverage pill in the Context Guidance header reflects live summarisation state.
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
…dates

Bumps the npm_and_yarn group with 3 updates in the /frontend directory: [marked](https://github.com/markedjs/marked), [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) and [postcss](https://github.com/postcss/postcss).


Updates `marked` from 18.0.0 to 18.0.2
- [Release notes](https://github.com/markedjs/marked/releases)
- [Commits](markedjs/marked@v18.0.0...v18.0.2)

Updates `svelte` from 5.55.4 to 5.55.9
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.55.9/packages/svelte)

Updates `postcss` from 8.5.8 to 8.5.15
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](postcss/postcss@8.5.8...8.5.15)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 18.0.2
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: svelte
  dependency-version: 5.55.9
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: postcss
  dependency-version: 8.5.15
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript 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 #11cursor/deps-npm-onto-merged-f559 replayed onto current merged tip (62e4d9a). Close when #11 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/npm_and_yarn/frontend/npm_and_yarn-0a65c35dea 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 javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.