Skip to content

deps: bump github.com/redis/go-redis/v9 from 9.18.0 to 9.19.0#15

Closed
dependabot[bot] wants to merge 116 commits intomainfrom
dependabot/go_modules/github.com/redis/go-redis/v9-9.19.0
Closed

deps: bump github.com/redis/go-redis/v9 from 9.18.0 to 9.19.0#15
dependabot[bot] wants to merge 116 commits intomainfrom
dependabot/go_modules/github.com/redis/go-redis/v9-9.19.0

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

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

Bumps github.com/redis/go-redis/v9 from 9.18.0 to 9.19.0.

Release notes

Sourced from github.com/redis/go-redis/v9's releases.

9.19.0

🚀 Highlights

FIPS-Compatible Script Helper

Script now supports a FIPS-safe execution mode that avoids client-side SHA-1 computation, which is blocked in strict FIPS environments. A new NewScriptServerSHA constructor uses SCRIPT LOAD to obtain and cache the digest from the server, then runs commands via EVALSHA/EVALSHA_RO. Falls back to EVAL/EVALRO if loading fails, and transparently retries once on NOSCRIPT. The default behavior is unchanged for existing users.

(#3700) by @​chaitanyabodlapati

FT.AGGREGATE Step-Based Pipeline Builder

Added a new step-based FT.AGGREGATE pipeline API via FTAggregateOptions.Steps, allowing LOAD, APPLY, GROUPBY, and SORTBY (with per-step MAX) to be repeated and interleaved in arbitrary order — matching Redis's native multi-stage aggregation semantics. The legacy Load/Apply/GroupBy/SortBy/SortByMax fields are now deprecated.

(#3782) by @​ndyakov

Raw RESP Protocol Access

Added DoRaw and DoRawWriteTo methods for executing arbitrary commands and reading the raw RESP response. Useful for proxying, custom protocol inspection, and working with commands not yet wrapped by go-redis.

(#3713) by @​ofekshenawa

Configurable Dial Retry Backoff

Added DialerRetryBackoff option (plumbed through Options, ClusterOptions, RingOptions, FailoverOptions) to let callers customize the delay between failed dial attempts. Helpers DialRetryBackoffConstant and DialRetryBackoffExponential (with jitter and cap) are provided out of the box. Dial timeout is now also applied per attempt rather than across all retries.

(#3706, #3705) by @​mwhooker

✨ New Features

  • FT.AGGREGATE Steps: Step-based pipeline builder for FT.AGGREGATE with support for repeated/interleaved LOAD, APPLY, GROUPBY, and SORTBY stages (#3782) by @​ndyakov
  • VectorSet commands: Added VISMEMBER and WITHATTRIBS support (#3753) by @​romanpovol
  • FIPS-safe Script: NewScriptServerSHA uses SCRIPT LOAD to obtain the digest from the server, avoiding client-side SHA-1 (#3700) by @​chaitanyabodlapati
  • Raw RESP access: DoRaw and DoRawWriteTo for raw RESP protocol access (#3713) by @​ofekshenawa
  • Dial retry backoff: DialerRetryBackoff function option with constant and exponential helpers (#3706) by @​mwhooker
  • Typed NOSCRIPT error: Redis NOSCRIPT replies are now surfaced as a typed error for easier handling (#3738) by @​LINKIWI
  • PubSub ClientSetName: Added ClientSetName method to PubSub (#3727) by @​Flack74
  • ReplicaOf: New ReplicaOf method replaces the deprecated SlaveOf (#3720) by @​Copilot
  • HSCAN BinaryUnmarshaler: HScan now supports types implementing encoding.BinaryUnmarshaler (#3768) by @​Aaditya-dubey1

🐛 Bug Fixes

  • Auto hostname type detection: Improved endpoint type detection for maintenance notifications using DNS-based classification; handles empty hosts and expanded private-IP ranges (#3789) by @​ndyakov
  • HELLO fallback: Don't send CLIENT MAINT_NOTIFICATIONS handshake when HELLO fails and connection falls back to RESP2; fail fast when explicitly enabled with RESP3 (#3788) by @​ndyakov
  • Dial TCP retry: ShouldRetry now treats net.OpError with Op == "dial" timeout errors as safe to retry since no command was sent (#3787) by @​vladisa88
  • wrappedOnClose leak: Fixed resource leak caused by repeatedly wrapping baseClient close logic; replaced with a bounded, concurrency-safe named-hook registry (#3785) by @​ndyakov
  • Pool Close() on stale connections: Suppress close errors (e.g., TLS closeNotify timeouts) for connections already dropped by the server due to idle timeout (#3778) by @​ofekshenawa
  • FIFO waiter ordering: Fixed race in ConnStateMachine.notifyWaiters that could wake multiple waiters under a single mutex hold and violate FIFO ordering (#3777) by @​0x48core
  • Lua READONLY detection: Detect READONLY errors embedded in Lua script error messages on read-only replicas so commands are correctly retried (#3769) by @​zhengjilei
  • VectorScoreSliceCmd RESP2: Fixed VSimWithScores, VSimWithArgsWithScores, and VLinksWithScores which were broken on RESP2 connections returning flat arrays instead of maps (#3767) by @​Copilot

... (truncated)

Changelog

Sourced from github.com/redis/go-redis/v9's changelog.

9.19.0 (2026-04-27)

🚀 Highlights

FIPS-Compatible Script Helper

Script now supports a FIPS-safe execution mode that avoids client-side SHA-1 computation, which is blocked in strict FIPS environments. A new NewScriptServerSHA constructor uses SCRIPT LOAD to obtain and cache the digest from the server, then runs commands via EVALSHA/EVALSHA_RO. Falls back to EVAL/EVALRO if loading fails, and transparently retries once on NOSCRIPT. The default behavior is unchanged for existing users.

(#3700) by @​chaitanyabodlapati

FT.AGGREGATE Step-Based Pipeline Builder

Added a new step-based FT.AGGREGATE pipeline API via FTAggregateOptions.Steps, allowing LOAD, APPLY, GROUPBY, and SORTBY (with per-step MAX) to be repeated and interleaved in arbitrary order — matching Redis's native multi-stage aggregation semantics. The legacy Load/Apply/GroupBy/SortBy/SortByMax fields are now deprecated.

(#3782) by @​ndyakov

Raw RESP Protocol Access

Added DoRaw and DoRawWriteTo methods for executing arbitrary commands and reading the raw RESP response. Useful for proxying, custom protocol inspection, and working with commands not yet wrapped by go-redis.

(#3713) by @​ofekshenawa

Configurable Dial Retry Backoff

Added DialerRetryBackoff option (plumbed through Options, ClusterOptions, RingOptions, FailoverOptions) to let callers customize the delay between failed dial attempts. Helpers DialRetryBackoffConstant and DialRetryBackoffExponential (with jitter and cap) are provided out of the box. Dial timeout is now also applied per attempt rather than across all retries.

(#3706, #3705) by @​mwhooker

✨ New Features

  • FT.AGGREGATE Steps: Step-based pipeline builder for FT.AGGREGATE with support for repeated/interleaved LOAD, APPLY, GROUPBY, and SORTBY stages (#3782) by @​ndyakov
  • VectorSet commands: Added VISMEMBER and WITHATTRIBS support (#3753) by @​romanpovol
  • FIPS-safe Script: NewScriptServerSHA uses SCRIPT LOAD to obtain the digest from the server, avoiding client-side SHA-1 (#3700) by @​chaitanyabodlapati
  • Raw RESP access: DoRaw and DoRawWriteTo for raw RESP protocol access (#3713) by @​ofekshenawa
  • Dial retry backoff: DialerRetryBackoff function option with constant and exponential helpers (#3706) by @​mwhooker
  • Typed NOSCRIPT error: Redis NOSCRIPT replies are now surfaced as a typed error for easier handling (#3738) by @​LINKIWI
  • PubSub ClientSetName: Added ClientSetName method to PubSub (#3727) by @​Flack74
  • ReplicaOf: New ReplicaOf method replaces the deprecated SlaveOf (#3720) by @​Copilot
  • HSCAN BinaryUnmarshaler: HScan now supports types implementing encoding.BinaryUnmarshaler (#3768) by @​Aaditya-dubey1

🐛 Bug Fixes

  • Auto hostname type detection: Improved endpoint type detection for maintenance notifications using DNS-based classification; handles empty hosts and expanded private-IP ranges (#3789) by @​ndyakov
  • HELLO fallback: Don't send CLIENT MAINT_NOTIFICATIONS handshake when HELLO fails and connection falls back to RESP2; fail fast when explicitly enabled with RESP3 (#3788) by @​ndyakov
  • Dial TCP retry: ShouldRetry now treats net.OpError with Op == "dial" timeout errors as safe to retry since no command was sent (#3787) by @​vladisa88
  • wrappedOnClose leak: Fixed resource leak caused by repeatedly wrapping baseClient close logic; replaced with a bounded, concurrency-safe named-hook registry (#3785) by @​ndyakov
  • Pool Close() on stale connections: Suppress close errors (e.g., TLS closeNotify timeouts) for connections already dropped by the server due to idle timeout (#3778) by @​ofekshenawa
  • FIFO waiter ordering: Fixed race in ConnStateMachine.notifyWaiters that could wake multiple waiters under a single mutex hold and violate FIFO ordering (#3777) by @​0x48core
  • Lua READONLY detection: Detect READONLY errors embedded in Lua script error messages on read-only replicas so commands are correctly retried (#3769) by @​zhengjilei
  • VectorScoreSliceCmd RESP2: Fixed VSimWithScores, VSimWithArgsWithScores, and VLinksWithScores which were broken on RESP2 connections returning flat arrays instead of maps (#3767) by @​Copilot

... (truncated)

Commits
  • e7e9866 chore(release): v9.19.0 (#3796)
  • 22b26f4 feat(ft.aggregate): Add Steps for query building (#3782)
  • d9d7694 fix(pool): two fixes for closed connection handling (#3764)
  • 44e8b73 fix(sch): auto hostname type detection (#3789)
  • ad21622 fix(hello): do not send maintnotifications handshake when hello fails (#3788)
  • 1a7ac74 fix(pool): suppress pool Close() errors for stale connections (#3778)
  • 903d6bd fix(retry): make dial tcp error redirectable (#3786) (#3787)
  • 00a551b fix(credentials): leak in wrappedOnClose (#3785)
  • b5a6f99 refactor(pool): remove redundant Conn.closed atomic field (#3783)
  • 928f27a feat(hscan): add support for encoding.BinaryUnmarshaler (#3768)
  • Additional commits viewable in compare view

Dependabot compatibility score

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 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)

zanetworker and others added 30 commits March 2, 2026 09:27
Multiplex your AI agents. Trace, launch, export. Never leave the terminal.

Features:
- Auto-discovery of Claude, Codex, and Gemini sessions
- Split view: live trace + interactive session side by side
- Conversation trace viewer with GOOD/BAD/WASTE annotations
- Multi-provider support via 10-method Provider interface
- Agent launcher with provider-specific models and modes
- OTEL receiver for live telemetry from spawned agents
- Export to MLflow/Jaeger via OTLP or local JSONL
- Cost dashboard with per-project token tracking
- CI/CD with GitHub Actions, Homebrew tap via goreleaser
- Landing page at docs/index.html

Install: brew tap zanetworker/aimux && brew install aimux

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix stale Gemini traces: filter logs.json to latest sessionId, parse
  per-session chat files instead of shared logs.json
- Fix session dedup: use process tree grouping (PPID chain) for Gemini
  and Codex instead of WorkingDir-based dedup; use PID for Claude CLI
- Fix duplicate entries: walk ancestor chain (up to 5 levels) to filter
  subagents spawned via Agent tool (claude -> node -> claude)
- Fix session file conflicts: match Claude processes to their own JSONL
  by correlating process start time with file first-write timestamp
- Add unique suffixes (#1, #2) when multiple sessions share a project name
- Add expandable process tree in agents table (Tab/x to toggle)
  with tree glyphs for child processes
- Fix age display: set StartTime from OS process start time for all providers
- Fix cost mismatch: trace summary now uses session-level cost (includes
  cache pricing) instead of summing per-turn costs
- Split stubs_test.go into codex_test.go and gemini_test.go

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add Homebrew install instructions (brew install zanetworker/aimux/aimux)
- Document multi-session support with unique suffixes
- Add Tab keybinding for expandable process tree
- Add ~/.gemini/tmp/*/chats/ to architecture data sources

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add direct keyboard shortcuts (c for costs, T for teams) from the agent
list. Fix age sort to use AgeTime() which prefers StartTime over
LastActivity and sorts oldest-first. Fix cost column alignment in the
dashboard. Update README key bindings table, feature descriptions, and
presentation slide deck with new features.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add --version / -v flag with ldflags injection
- Release workflow gates on test suite passing before goreleaser
- goreleaser config adds changelog filtering and install header
- README documents release process and adds version badge
- Homebrew formula test validates version output

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace ASCII cost table with actual screenshot. Add images for
teams view, annotation labels, and MLflow trace export.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shows the full 4-step flow: provider selection, recent directories,
filesystem browser, and model/mode/runtime configuration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move "or: git clone" inline with brew command on hero and install
slides to reduce vertical height. Add margin to Reveal config for
better centering. Replace code block with inline text on install slide.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Preserve leading whitespace in output lines by using TrimRight instead
of TrimSpace across all three providers. Add a lightweight markdown
renderer that styles headings, fenced code blocks, bold, inline code,
and bullet/numbered lists in the trace viewer OUTPUT section.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Overhaul trace output rendering with proper markdown support:

- Apply markdown rendering to INPUT lines (was only OUTPUT before)
- Render code blocks with visual container (╭╮╰╯│ borders), dark
  background, language label, and basic syntax highlighting for
  keywords, strings, and comments across Go/Python/JS/Rust
- Render tables with box-drawing borders (┌┬┐├┼┤└┴┘), aligned
  columns, bold headers, and inline markdown in cells
- Add #### heading and --- horizontal rule support
- Fix bold/code marker truncation: render markdown BEFORE width
  truncation using lipgloss.MaxWidth to preserve ANSI sequences
- Strip orphaned ** and ` markers from unclosed bold/code spans
- Add dist/ to .gitignore

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Design for browsing, resuming, and annotating past agent sessions
across three surfaces: TUI browser (S key), launcher resume step,
and CLI subcommands (aimux sessions/resume). Includes eval workflow
integration via structured JSONL export for notebooks/Braintrust.

Claude-first approach with view-only support for Codex/Gemini.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add ability to browse, resume, and annotate past Claude sessions
from within aimux (S key from agent list).

New packages and files:
- internal/history/ — session discovery, fast-scan JSONL parsing,
  sidecar .meta.json for annotations/tags, tag vocabulary collection,
  smart path reconstruction from Claude's encoded project directories
- internal/tui/views/sessions.go — interactive session browser with
  navigation, filtering, annotation cycling, tag input with autocomplete,
  trace preview, and session resume via embedded PTY split view

Features:
- Browse past sessions sorted by recency with first-prompt preview
- Filter sessions by prompt text, project, annotation, or tags (/)
- Toggle between current project and all projects (A)
- Resume sessions in split view: trace left, live Claude right (Enter)
- Annotate sessions: achieved/partial/failed/abandoned (a key)
- Tag sessions with failure modes and autocomplete (f key)
- Add notes to sessions (N key)
- Preview session traces inline (p key)
- Near-empty sessions (≤5 turns, $0 cost) hidden by default
- Smart path reconstruction handles github.com, real hyphens in
  directory names, and dots via recursive filesystem verification

Design document: docs/plans/2026-03-06-session-history-design.md

40+ new tests across history and sessions packages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 4: Launcher resume step
- After picking provider and directory, a new step shows recent
  sessions with "New session" as default and up to 5 resumable
  sessions below. Selecting a session opens the split view.
- Only shown for Claude provider; skipped when no sessions exist.

Phase 5: CLI subcommands
- `aimux sessions` — list past sessions (plain table)
- `aimux sessions --list` — scriptable table output
- `aimux sessions --export` — structured JSONL for eval pipelines
- `aimux sessions --json` — JSON output (with --list)
- `aimux sessions --dir <path>` — scope to a directory
- `aimux sessions --limit <n>` — limit results
- `aimux resume <id>` — resume a session directly
- `aimux help` — show usage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract the first meaningful sentence from session prompts instead
of showing raw pasted content. The noise filter now skips:
- Pasted Slack messages (timestamps with AM/PM)
- Calendar data (annual leave, approved)
- System/eval prompts
- XML tags and system-reminder content
- Box-drawing characters (pasted terminal output)
- Unicode markers (⏺, ❯)
- Short/numeric lines

Also takes first sentence only (splits on ". ", "? ", "! ") and
caps at 80 chars for clean single-line display.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- shortProject now handles real paths (/Users/.../aimux → "aimux")
  separately from encoded paths (/Users-foo-aimux → "aimux")
- XML tags (<local-command-caveat>, <command-message>) stripped from
  prompts via tag removal in cleanPrompt fallback
- Fallback prompt assembly skips noise lines instead of joining all

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add opt-in LLM title generation for sessions using Anthropic API.
Titles are generated from the first few turns of conversation
(user prompts + assistant responses) for rich context.

Usage:
  aimux sessions --generate-titles              # generate with haiku
  aimux sessions --generate-titles --title-model sonnet  # use sonnet

Config (~/.aimux/config.yaml):
  sessions:
    auto_title: true
    title_model: "haiku"  # haiku, sonnet, opus

Details:
- Scans first 3 user messages + 2 assistant responses (~800 chars)
- Generates 3-8 word titles via Anthropic Messages API
- Titles cached in .meta.json sidecar files (never regenerated)
- Cost: ~$0.00007 per session with Haiku ($0.007 per 100 sessions)
- Requires ANTHROPIC_API_KEY environment variable
- TUI and CLI show title when available, fall back to first prompt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Switch default title model to gemini-3-flash-preview
- Use x-goog-api-key header instead of URL parameter for Gemini auth
- Increase output tokens to 100 (Gemini thinking uses tokens)
- Increase timeout to 30s
- Skip individual session failures (safety filter, timeout, 503)
  instead of stopping entirely — only stop on auth errors
- Strip XML tags from conversation content before sending to LLM
- Add sessions config to ~/.aimux/config.yaml with model comments

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add session delete with confirmation (d key, y to confirm)
  Permanently removes JSONL + .meta.json from Claude's projects dir
- Improve LLM title prompt: 5-10 word descriptive phrases,
  explicit bad/good examples, no truncated titles
- Add --regenerate-titles flag to overwrite existing titles
- Use Gemini 3 Flash (gemini-3-flash-preview) as default model
- Fix Gemini auth: use x-goog-api-key header instead of URL param
- Skip failed sessions gracefully (safety filter, timeout, 503)
- Increase output tokens to 256 and timeout to 30s
- Strip XML tags from conversation summaries before LLM call
- Update README with session history section, key bindings, config

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Design documents are local working files, not part of the codebase.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add subagent identity system so aimux can discover, nest, and label
subagents (Explore, Plan, custom agents) under their parent in the
agents table and trace viewer.

New packages:
- internal/subagent: Info, AttrKeys types (leaf package)
- internal/correlator: process tree tagging + OTEL enrichment

Provider interface gains OTELServiceName() and SubagentAttrKeys().
OTEL receiver extracts subagent fields per-provider and accepts
real-time HTTP hook events at /v1/hooks with tool_use_id dedup.
ScanProcesses returns all agents; correlator tags parent-child
relationships from the process tree instead of filtering.

Coverage: subagent 90%, correlator 96%, otel 72%.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ports

Sessions view:
- Add column headers (AGE, TITLE, TURNS, COST) with fixed-width alignment
- Fix cost always showing $0 — parse model/cache tokens, call cost.Calculate
- Add sort cycling (s key): Age, Cost, Turns, Title, Failure-mode
- Add failure-mode tags as red [tag] prefix in title column
- Add annotation prefix in title column ([ACHIEVED], [FAILED], etc.)
- Add bulk cleanup mode (D key) for duplicate and empty sessions
- Add selectable failure-mode dropdown (f key) with ↑/↓ navigation
- Read title model and API key from config before env vars
- Default title model changed to Gemini 3.1 Flash-Lite

Agent preview pane:
- Show LLM-generated session title in cyan italic

Terminal embed:
- Add scroll-back buffer with PgUp/PgDn and mouse wheel support
- Forward Esc to PTY (fixes Ctrl+R, vim) — use Ctrl+] to exit
- Hierarchical back navigation: full-screen → split → main

Exports:
- JSONL: session_meta first line with annotation, failure_modes, note, title
- OTEL: session root span includes annotation, failure_modes, note attributes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ase 1)

Create internal/controller/ package as the first step toward separating
business logic from the TUI layer. This enables future alternative
frontends (web UI, API server) to reuse the same logic.

Phase 1 extracts export orchestration:
- controller.ExportJSONL() — builds export turns, loads session meta, writes JSONL
- controller.ExportOTEL() — builds OTEL config, loads session meta, exports spans
- TurnsToInputs/inputsToTraceTurns — bridge between trace.Turn and UI-agnostic TraceInput
- app.go exportTrace/exportOTEL reduced from ~90 lines each to ~10 lines

Also adds:
- Architecture rules to CLAUDE.md (UI-agnostic core, provider decoupling)
- Refactoring rule: tests must travel with moved code
- Controller extraction design doc (docs/plans/)

9 controller tests covering JSONL export, OTEL errors, round-trip conversion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move discovery post-processing and session management from app.go
to the controller package:

- KillAgent: SIGTERM/SIGKILL logic (was standalone killAgent in app.go)
- FilterHidden: agent filtering by hidden set (was App.filterHidden method)
- DeleteSession: remove JSONL + meta sidecar files
- BulkDeleteSessions: batch deletion with partial failure handling

app.go reduced by ~73 lines. 8 new controller tests covering filtering
(with fallback key logic), deletion, and bulk operations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create Navigator struct in controller package that owns the view
navigation state machine: current view, breadcrumbs, zoom/split state.

- NavigateTo/NavigateBack: view transitions with breadcrumb management
- EnterZoom/ExitZoom: hierarchical back (fullscreen → split → main)
- ToggleSplit/ToggleSplitFocus: split view state

app.go methods become thin wrappers that delegate state transitions
to Navigator, then sync local fields and apply TUI-specific effects
(view sizing, SetCrumbs, sessionView.Close).

8 new tests covering all navigation transitions.
All 4 phases of the controller extraction design are now complete.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Kill(agent.Agent) error to the Provider interface. Each provider
owns its agent lifecycle — local providers use KillLocalAgent (SIGTERM/
SIGKILL), future remote providers (Kubernetes) will delete pods.

- Added KillLocalAgent shared helper in provider/helpers.go
- Implemented Kill on Claude, Codex, Gemini (all delegate to KillLocalAgent)
- Removed KillAgent from controller (was local-process-only)
- app.go now calls provider.Kill() via providerFor() lookup

This prepares for the K8s provider design where killing means pod
deletion via K8s API, not process signals.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
WithMouseCellMotion() leaves terminal in mouse reporting mode if aimux
is killed or crashes. Subsequent keystrokes produce raw escape sequences
instead of normal behavior. Remove mouse support entirely — PgUp/PgDn
keyboard scroll still works for terminal embed scroll-back.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
zanetworker and others added 22 commits March 29, 2026 17:28
Reverts dashboard mini-preview feature (7fef080, 4c6af52, 825ac6f).
The snapshot-based dashboard didn't solve the core UX problem —
need to rethink multi-session interaction model.

P0 features (status detection, notifications) are preserved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SessionView.SetSize now skips resize when dimensions haven't changed,
preventing spurious SIGWINCH signals on every View() call. Also moves
scroll indicator from content overlay to status bar, and updates
hint text to show Shift+Up/Down for single-line scrolling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add Shift+Up/Down for single-line scrolling in session view
- PgUp/PgDn now scroll half a page instead of fixed 10 lines
- Mouse wheel scrolls 1 line instead of 3 for smoother feel
- No longer snaps to bottom on new output when scrolled back —
  user must explicitly scroll down to return to live view

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…iles

Agents discovered from the process table but with no matched session
file were showing StatusUnknown (?). A running process is at minimum
active, so default to StatusActive instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Discovery now checks init/container readiness instead of hardcoding StatusIdle
- CrashLoopBackOff and ImagePullBackOff pods show as StatusError with reason
- openK8sSession refuses to attach to unhealthy pods with clear error message
- PTYExitMsg now shows which session ended instead of silently bouncing back

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When an agent is in StatusError, the preview pane shows a red ERROR
banner with the failure reason. For K8s pods, it also fetches the
last 5 lines of init container logs (e.g., "fatal: destination path
'/workspace' already exists") so users see exactly why the pod failed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fetchPodErrorLogs was calling kubectl synchronously in the render path,
blocking the TUI for up to 2 seconds on every tick and cursor move.
Now fetched once on agent selection change and cached.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bumps [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) from 0.35.2 to 0.35.3.
- [Commits](kubernetes/apimachinery@v0.35.2...v0.35.3)

---
updated-dependencies:
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
…rompt

Sessions with image-only or XML-tag-only first messages showed "(no prompt)"
because the parser stopped at the first user message even when it had no
meaningful text. Now keeps scanning subsequent user messages, and the titler
no longer skips sessions without a clean prompt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…artup discovery

Add TextInput type with readline-style navigation (Ctrl+A/E, arrows, Ctrl+W/U/K)
and proper bracketed paste handling. Replace raw string input fields across all
views (command, filter, note, tag, content search) with TextInput so users can
edit pasted text with cursor movement.

Parallelize startup by sharing a single ps/tmux snapshot across all providers
(eliminates 2 redundant ps aux calls) and batch per-agent lsof/ps lookups
concurrently. Discovery drops from ~1400ms to ~586ms with 8+ agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Backspace in the tag input handler fell through to default but only
reset tagCursor for KeyRunes, leaving a stale cursor pointing at an
invalid suggestion index. Use HandleKey's return value to reset the
cursor on any consumed editing key.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…apimachinery-0.35.3

deps: bump k8s.io/apimachinery from 0.35.2 to 0.35.3
Bumps [k8s.io/api](https://github.com/kubernetes/api) from 0.35.2 to 0.36.0.
- [Commits](kubernetes/api@v0.35.2...v0.36.0)

---
updated-dependencies:
- dependency-name: k8s.io/api
  dependency-version: 0.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
…api-0.35.3

deps: bump k8s.io/api from 0.35.2 to 0.36.0
Bumps [k8s.io/client-go](https://github.com/kubernetes/client-go) from 0.35.2 to 0.36.0.
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](kubernetes/client-go@v0.35.2...v0.36.0)

---
updated-dependencies:
- dependency-name: k8s.io/client-go
  dependency-version: 0.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
…client-go-0.35.3

deps: bump k8s.io/client-go from 0.35.2 to 0.36.0
Bumps [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) from 1.40.0 to 1.43.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-go@v1.40.0...v1.43.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel/sdk
  dependency-version: 1.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…telemetry.io/otel/sdk-1.43.0

deps: bump go.opentelemetry.io/otel/sdk from 1.40.0 to 1.43.0
…ehttp

Bumps [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp](https://github.com/open-telemetry/opentelemetry-go) from 1.40.0 to 1.43.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-go@v1.40.0...v1.43.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp
  dependency-version: 1.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…telemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp-1.43.0

deps: bump go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp from 1.40.0 to 1.43.0
Performance:
- Startup cache for instant first paint (<50ms to render cached agents)
- VT emulator: remove double-render from Write(), add dirty tracking and render caching
- Tmux: adaptive poll interval (100ms active, 500ms idle) with FNV hash change detection
- Split view loading placeholder while PTY/tmux connects

Observability:
- Live trace streaming via JSONL file tailing (fsnotify + poll fallback)
- Cross-session trace search: / greps all agents' session files, shows match count
- Cost-per-turn toggle ($) showing model, tokens, cost per assistant turn
- Git diff summary in preview pane with interactive file picker (d key)
- Tab to focus right panel, j/k to navigate trace/diff, boundary crossing between sections

Notifications:
- Attention counter in header bar (waiting + recently-done agents)
- Terminal bell on permission prompts, completion, errors
- Per-event notification config (bell, desktop, on_done)

Architecture:
- OpenShell stub provider (future NVIDIA sandbox integration)
- Discovery watcher (fsnotify on session directories for instant agent detection)
- Status detection defaults to Idle instead of Unknown for unrecognized states

Positioning:
- README rewrite: observability-first ("Tame the agent sprawl")

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.18.0 to 9.19.0.
- [Release notes](https://github.com/redis/go-redis/releases)
- [Changelog](https://github.com/redis/go-redis/blob/master/RELEASE-NOTES.md)
- [Commits](redis/go-redis@v9.18.0...v9.19.0)

---
updated-dependencies:
- dependency-name: github.com/redis/go-redis/v9
  dependency-version: 9.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file go Pull requests that update go code labels May 3, 2026
@zanetworker zanetworker closed this May 9, 2026
@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot Bot commented on behalf of github May 9, 2026

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot dependabot Bot deleted the dependabot/go_modules/github.com/redis/go-redis/v9-9.19.0 branch May 9, 2026 19:17
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 go Pull requests that update go code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant