Skip to content

Heron v0.4.0

Choose a tag to compare

@github-actions github-actions released this 29 May 08:15
· 92 commits to main since this release
79eecd8

[0.4.0] — 2026-05-29

Changed — Rebrand to Heron

  • Project renamed TokenScope → Heron. The binary is now heron
    (was tokenscope); the 10 internal library crates moved from the
    ts-* prefix to h-*; the GitHub repo is now Netis/heron (the old
    URL redirects). Console title, logo (a new heron mark), and all
    install/docs URLs updated.

Added — Quality infrastructure

  • Deterministic fault-injection harness for the DuckDB backend
    (feature-gated) plus recovery tests that drive the FATAL → reopen →
    every-surface-works path without relying on real load pressure.
  • Schema-migration tests over synthesized legacy DB shapes, locking the
    auto-migration paths against silent regression.
  • CI lint gates: referenced-secret provisioning, secret-value sanity,
    validated-constructor scoping, and an infra-leakage gate that fails on
    any non-allow-listed private IP or private-key block in tracked files.

Security / privacy

  • Removed the demo deploy tooling, which hard-coded a server address, a
    jump-host username, and a plaintext password. Demo setup is now an
    AI-agent prompt in the docs instead.
  • Scrubbed internal infrastructure identity (private IPs, hostnames)
    from source comments, docs, scripts, and test fixtures; tests now use
    RFC5737 documentation ranges.

Added — Agent-era observer (H002)

  • Agent traffic classification: every LlmCall carries is_agent_request,
    tool_surface, agent_topology, tool_call_count, tool_names. Every
    AgentTurn rolls up tool_surfaces, tool_call_total, agent_topology,
    suspicious_skills. New tool_surface dimension on llm_metrics.
  • Console: agent-aware columns and filters on Agent Turns; Agent breakdown
    section on turn detail; tool-surface facet on Performance.
  • Config: [agent_classifier] block in default.toml for tool taxonomy.
  • Internal metrics: agent_classifier.unknown_count,
    classifier_mixed_count.

Capture

  • Default live-capture configuration now covers common LLM-serving ports,
    reducing the need for explicit CLI capture filters in quickstart flows.

LLM wire-API support

  • OpenAI Chat streaming now captures delta.reasoning_content and
    delta.reasoning, with console rendering before normal content.
  • OpenCode agent profile detection added for clients that expose a stable
    x-session-affinity anchor.

Agent turn tracking

  • Generic fallback turn grouping now requires a tool/function-call anchor, so
    text-only SDK calls stay on the LLM Calls page instead of producing
    synthetic one-call Agent Turns.

Metrics

  • TTFT handling now distinguishes streaming and non-streaming calls, with
    stream-only TTFT charts and backfilled rollups from stored call data.
  • Dashboard active-resource history added for TCP connections and agent
    turns.
  • Long-range chart axes use date-aware labels for multi-day windows.

Console

  • Settings page added for capture sources, including interface discovery,
    source editing, grouped source-type controls, and restart flow.
  • LLM Calls gained stream/non-stream filtering.
  • List pages persist the selected item in the URL.
  • Agent-kind filter options are derived from observed data in the active
    window instead of a fixed list.

API

  • GET /api/capture/interfaces lists available capture interfaces.
  • PUT /api/capture/sources updates capture-source configuration and
    restarts the process when needed.

Documentation

  • README reframed around agent observability with refreshed screenshots.
  • README quickstart now uses the default live-capture command and no longer
    includes an explicit capture-filter example.
  • Removed the LLM call detail screenshot and its README reference.
  • Removed project-origin/company copy from public docs.

Development

  • Headless PR review workflow added for CI.
  • Repository instructions now require PR text to scrub private environment
    details before publication.

What's Changed

  • feat(settings): in-app capture configuration + self-restart by @vaderyang in #12
  • feat(dashboard): TTFT stream/non-stream split + rollup backfill + filters by @vaderyang in #13
  • feat(dashboard): Active TCP Connections + Active Agent Turns charts by @vaderyang in #14
  • fix(ts-llm/chat-sse): capture delta.reasoning_content + delta.reasoning by @vaderyang in #15
  • feat(filters): dynamic agent_kind dropdown from actual data in window by @vaderyang in #16
  • feat(ts-llm/agents): opencode profile keyed off x-session-affinity by @vaderyang in #17
  • feat(console/list-pages): persist selected item id in URL by @vaderyang in #18
  • feat(ci): headless PR review agent (phase 1) by @vaderyang in #28
  • docs(README): reframe as agent observability + Playwright-driven screenshots by @vaderyang in #30
  • Clean up README capture docs by @vaderyang in #32
  • fix(pr-review): :4000 LiteLLM + auth secret + NO_PROXY + auto-merge trusted PRs by @vaderyang in #31
  • fix(pr-review): drop dup no_proxy env key by @vaderyang in #33
  • fix(pr-review): override inherited http_proxy so curl reaches LiteLLM by @vaderyang in #34
  • fix(pr-review): keep http_proxy; only set no_proxy by @vaderyang in #35
  • fix(pr-review): overlay reviewer scripts from default branch by @vaderyang in #36
  • fix(pr-review): never APPROVE on agent failure / unstructured body by @vaderyang in #37
  • fix(pr-review): feed prompt via stdin to claude --print by @vaderyang in #38
  • feat(console): selected_at anchor recovers item window on stale shared link by @vaderyang in #19
  • fix(pr-review): brand as "vivi"; never post failures to PR by @vaderyang in #39
  • feat(console): TPS instead of TPOT, agent-turns column reorder, sidebar logo by @vaderyang in #20
  • ci: opt all JS actions into Node.js 24 runtime by @vaderyang in #40
  • feat(console/charts): x-axis tick adapts to time-range duration by @vaderyang in #21
  • fix(console/agent-sessions): keep prior data during refetch (no flash) by @vaderyang in #24
  • feat(api): lite mode for /calls — unblock mega-turn detail page by @vaderyang in #23
  • feat: fold llmproxy duplicate turns by passive pair detection by @vaderyang in #22
  • feat(services): Path view + Overview agent charts (deploy roll-up) by @vaderyang in #27
  • Fix dynamic agent kind filters by @vaderyang in #29
  • Fix generic agent turn grouping by @vaderyang in #41
  • Revise unreleased changelog by @vaderyang in #42
  • Update repository agent guidance by @vaderyang in #43
  • Add local agent workflow skills by @vaderyang in #44
  • Add agent-bot: issue triage + wiwi dev agent + auto-merge by @vaderyang in #45
  • post_review: use ADMIN_GH_TOKEN for the admin-merge fallback by @vaderyang in #46
  • Reject out-of-range time params; clamp SQL timestamp formatter by @vaderyang in #47
  • pair_sweeper: CHECKPOINT after each batch + reopen on FATAL by @vaderyang in #48
  • agent-bot: use AGENT_GH_TOKEN for the agent:try label fan-out by @vaderyang in #51
  • ci: P0 lint gates for secret-ref + validated-constructor classes by @vaderyang in #53
  • DuckDB FATAL recovery: rebuild every connection (closes #50) by @vaderyang in #52
  • wiwi: drop PAT from actions/checkout; embed in push URL instead by @vaderyang in #54
  • wiwi: bump timeout to 120m + stream claude output live by @vaderyang in #55
  • wiwi: clear extraheader before push so PAT (workflow scope) wins by @vaderyang in #56
  • ci: lint secret VALUES, not just references (catches the '-' bug) by @vaderyang in #57
  • wiwi: enforce commit + add auto-commit fallback by @vaderyang in #58
  • Rebrand → Heron (Phase 1: rename app binary tokenscope → heron) by @vaderyang in #59
  • agent-bot: tolerate transient LiteLLM outages — pre-flight wait + mid-run retry by @vaderyang in #63
  • ci: deterministic recovery + schema-migration tests (P1 quality infra) by @vaderyang in #64
  • ci(pr-review): bump vivi agent + job timeout to 7200s/120min by @vaderyang in #67
  • Rebrand → Heron Phase 2: rename ts-* library crates → h-* by @vaderyang in #66
  • chore(rebrand+privacy): repo→heron, scrub infra leakage, leakage gate, heron logo by @vaderyang in #69
  • fix(privacy): scrub internal IP left in test fixture (lost in #69 race) by @vaderyang in #70
  • chore(release): 0.4.0 — Heron rebrand + quality infra + privacy by @vaderyang in #71

Full Changelog: v0.2.0...v0.4.0