github AgentWorkforce/burn relayburn-v2.0.0
relayburn@2.0.0

latest releases: relayburn-v2.1.0, sdk-v2.1.0, sdk-linux-x64-gnu-v2.1.0...
6 hours ago

Packages

  • relayburn@2.0.0 (tag: relayburn-v2.0.0)
  • @relayburn/sdk@2.0.0 (tag: sdk-v2.0.0)
  • @relayburn/mcp@2.0.0 (tag: mcp-v2.0.0)
  • @relayburn/cli-darwin-arm64@2.0.0 (tag: cli-darwin-arm64-v2.0.0)
  • @relayburn/cli-darwin-x64@2.0.0 (tag: cli-darwin-x64-v2.0.0)
  • @relayburn/cli-linux-arm64-gnu@2.0.0 (tag: cli-linux-arm64-gnu-v2.0.0)
  • @relayburn/cli-linux-x64-gnu@2.0.0 (tag: cli-linux-x64-gnu-v2.0.0)
  • @relayburn/sdk-darwin-arm64@2.0.0 (tag: sdk-darwin-arm64-v2.0.0)
  • @relayburn/sdk-darwin-x64@2.0.0 (tag: sdk-darwin-x64-v2.0.0)
  • @relayburn/sdk-linux-arm64-gnu@2.0.0 (tag: sdk-linux-arm64-gnu-v2.0.0)
  • @relayburn/sdk-linux-x64-gnu@2.0.0 (tag: sdk-linux-x64-gnu-v2.0.0)

Release Notes

  • relayburn-sdk (Rust): default ledger home moves from ~/.relayburn to ~/.agentworkforce/burn so the Rust 2.0 port and the TS 1.x package can coexist on disk during the #249 cutover. RELAYBURN_HOME (and the per-DB path overrides) continue to override the path; TS 1.x users on ~/.relayburn are unaffected. Rust-port testers with data under the old path can mv ~/.relayburn ~/.agentworkforce/burn to carry it over (formats are not compatible — Rust treats any non-2.0 layout as empty and requires a burn ingest re-population).
  • relayburn-cli (Rust): wire opencode HarnessAdapter via pending_stamp::adapter_static factory; registered in RUNTIME_ADAPTERS. (#248 D7)
  • relayburn-cli (Rust): wire burn run <harness> driver + claude adapter (eager unit-struct in EAGER_ADAPTERS); afterExit ingest folds into [burn] claude ingest: ... summary line. (#248 D5)
  • relayburn-cli (Rust): wire burn ingest (no-flag scan, --watch poll loop, --hook claude --quiet) and burn mcp-server stdio subcommand exposing burn__sessionCost; closes #210. (#248 D8)
  • relayburn-cli (Rust): wire codex HarnessAdapter via pending_stamp::adapter_static factory; registered in RUNTIME_ADAPTERS. (#248 D6)
  • relayburn-cli (Rust): wire burn compare as a presenter over relayburn_sdk::analyze::compare building blocks (build_compare_table + the per-turn fidelity gate), matching the TS CLI flag set (positional comma-separated model list, --include-partial / --fidelity / --since / --project / --session / --min-sample / --csv / --no-archive) and producing byte-equivalent stdout for the cli-golden compare / compare-json invocations. (#248 D3)
  • relayburn-cli (Rust): port burn overhead and burn overhead trim as thin presenters over relayburn_sdk::overhead / ::overhead_trim. Output (human + --json) is byte-equivalent with the TS CLI. (#248 D2)
  • relayburn-cli (Rust): wire burn state as a typed clap subcommand with status (default), rebuild, prune, and reset verbs over relayburn-sdk. state status reports per-table row counts in burn.sqlite, the row count in content.sqlite, the archive_state schema/last-built/last-rebuild fields, and the resolved retention config; --json emits the structured StateStatus payload. state rebuild {index,content,archive,all} drives Ledger::rebuild_derivable; state prune drives Ledger::prune_content_older_than. state reset and standalone state rebuild classify are stubbed pending a follow-up. (#248 D4)
  • relayburn-cli (Rust): wire burn summary and burn hotspots as thin presenters over relayburn-sdk, matching the TS CLI's flag set and stdout byte-for-byte (default + --json). Un-ignores the four matching golden invocations. (#248 D1)
  • relayburn-sdk-node (Rust): napi-rs bindings skeleton — #[napi] shims for every public verb in relayburn-sdk (summary, sessionCost, overhead, overheadTrim, hotspots, search, exportLedger, exportStamps, async ingest, plus ledgerOpen), with u64 token counts surfaced as JS BigInt, ISO-8601 timestamps as String, async verbs returning Promise<T>, and a typed BurnError mapping for SDK failures. (#247)
  • relayburn-cli (Rust): introduce the harness substrate — HarnessAdapter trait, lazy compile-time phf registry (lookup / list_harness_names), and the shared pending_stamp::adapter factory codex + opencode will reuse. Adapter slots in the registry are reserved but empty pending the Wave 2 PRs (#248-d/e/f). relayburn-sdk re-exports start_watch_loop, WatchController, write_pending_stamp, PendingStampHarness, and friends so the CLI doesn't have to reach into private SDK modules. (#248)
  • relayburn-cli (Rust): scaffold the clap v4 derive root with global --json / --ledger-path / --no-color flags, eight stub subcommands (summary, hotspots, overhead, compare, run, state, ingest, mcp-server), and shared render::{table,json,error} helpers. Stubs exit 1 with a not yet implemented message (or a {"error": …} envelope under --json); Wave 2 fan-out PRs replace each stub with a thin presenter over relayburn-sdk. (#248 part a)
  • relayburn-cli (Rust): add the CLI golden-output test rig — synthetic fixture ledger under tests/fixtures/cli-golden/, a node script that captures TS-CLI stdout/stderr across 16 invocations (summary / hotspots / overhead / overhead-trim / compare / state-status in TTY + --json, plus help text for ingest / run / mcp-server / top-level), and crates/relayburn-cli/tests/golden.rs — a BURN_GOLDEN=1-gated diff runner Wave 2 PRs flip on per-command via enabled: true in invocations.json. (#248)
  • @relayburn/sdk (npm 2.x): scaffold the packages/sdk-node/ umbrella + four per-platform packages (@relayburn/sdk-{darwin-arm64,darwin-x64,linux-arm64-gnu,linux-x64-gnu}) resolved via optionalDependencies. Adds the napi-rs build matrix in .github/workflows/napi-build.yml, an esbuild bundle smoke test, and a deep-equal conformance test gate against the TS 1.x SDK across the six verbs (ingest, summary, sessionCost, overhead, overheadTrim, hotspots). Conformance test is skipped until crates/relayburn-sdk-node lands its bindings (#247 part a). (#247 part b)
  • relayburn-ingest (Rust): port the per-process gap-warning state machine (gap module — record_session_gap, emit_gap_warning, count_tool_call_gaps, reset_ingest_gap_warnings, set_ingest_gap_writer) and reingest_missing_content (reingest module). Suppression mirrors the TS surface: one warning per fresh affected session, silent on steady-state, re-fires after the affected set decays back to empty. relayburn-ledger adds Ledger::list_user_turn_session_ids to power the reingest_missing_content skip filter alongside list_content_session_ids. (#278)
  • relayburn-analyze (Rust): port the behavioral-pattern detectors (patterns module). detect_patterns runs retry-loop, failure-run, cancellation-run, compaction-loss, edit-revert, OpenCode skill-recall-dup, OpenCode skill-pruning-protection, OpenCode system-prompt-tax, and edit-heavy detectors against an ordered turn stream, with optional content-sidecar / tool-result-event / user-turn enrichment. Public surface: detect_patterns, DetectPatternsOptions; per-pattern result structs are re-exported from findings (RetryLoop, FailureRun, CancellationRun, CompactionLoss, EditRevertCycle, SkillRecallDup, SkillPruningProtection, SystemPromptTax, EditHeavySession, SessionPatternSummary, PatternsResult, PatternEventSource). (#275)
  • relayburn-analyze (Rust): port the tool-output-bloat detector — Signal A's BASH_MAX_OUTPUT_LENGTH static-config check (with ~/.claude/settings.json + <cwd>/.claude/settings.json loader) and Signal B's cross-harness observed-bloat aggregation, plus the WasteFinding adapter. Public surface mirrors @relayburn/analyze: BASH_MAX_OUTPUT_ENV_KEY, DEFAULT_BLOAT_TOKEN_THRESHOLD, detect_observed_bloat, detect_static_config_bloat, detect_tool_output_bloat, load_claude_settings, project_claude_settings_path, user_claude_settings_path, tool_output_bloat_to_finding. (#271)
  • relayburn-ingest (Rust): port the standalone primitives — pending_stamps (binary-compatible with the TS @relayburn/ingest wire format), walk (walk_jsonl / walk_opencode_sessions), watch_loop (tokio::time::interval-driven WatchController with graceful stop), and the typed cursors module layered on the SQLite ledger's cursor blob. Public verb surface (ingest_all, per-harness verbs, reingest_missing_content) is wired; per-harness orchestration follow-ups deferred to dedicated sub-issues. (#245)
  • relayburn-analyze (Rust): port the ghost-surface detector — ghost_surface and ghost_surface_inputs modules with Claude / Codex / OpenCode adapters, slash-command miners, the per-source-scoped orchestrator, and the WasteFinding envelope adapter. Findings sort deterministically by (cost desc, sizeTokens desc, path) and dedup against the OpenCode catalog-bloat detector via countedByCatalogBloat. (#273)
  • relayburn-analyze (Rust): port the compare aggregator — build_compare_table for the in-memory (model, activity) rollup with per-cell turn / edit / one-shot / priced / cost / cache-hit / median-retries metrics, plus compare_from_archive sourced from the SQLite ledger via Ledger::query_turns. Public surface: CompareCell, CompareTable, CompareTotals, CompareOptions, CompareCategory, DEFAULT_MIN_SAMPLE, compare_from_archive, CompareFromArchiveResult. (#269)
  • relayburn-analyze (Rust): port subagent_tree and claude_md modules. build_subagent_tree / aggregate_subagent_type_stats walk per-session subagent invocations (relationship-row substrate with legacy subagent fallback) and roll up self/cumulative cost. parse_claude_md / attribute_claude_md / build_trim_recommendations / render_unified_diff_for_recommendation produce CLAUDE.md section attribution and trim diffs whose unified-diff format stays byte-aligned with the TS implementation. (#272)
  • relayburn-analyze (Rust): port the hotspots aggregator — attribute_hotspots composes the per-tool sized / even-split attribution loop (paying-turn rate, sibling-cap on initial cost, proportional cacheRead allocation on persistence, source-aware reasoning via cost_for_turn) with the aggregate_by_file / aggregate_by_bash / aggregate_by_bash_verb / aggregate_by_subagent rollups. Public surface mirrors @relayburn/analyze: attribute_hotspots, aggregate_by_file, aggregate_by_bash, aggregate_by_bash_verb, aggregate_by_subagent, AttributionMethod, BashAggregation, BashVerbAggregation, FileAggregation, HotspotsOptions, HotspotsResult, SessionTotals, SubagentAggregation, ToolAttribution. Per-row USD totals match the TS implementation within 1e-9. (#274)

Package Changelogs

relayburn

Changed

  • relayburn now prefers the prebuilt Rust burn binary from per-platform @relayburn/cli-<platform> packages, with @relayburn/cli kept as a fallback for unsupported or missing native packages.

@relayburn/sdk

  • Initial scaffolding: umbrella package layout (@relayburn/sdk) +
    per-platform packages (@relayburn/sdk-{darwin-arm64,darwin-x64,linux-arm64-gnu,linux-x64-gnu})
    resolved via optionalDependencies, TS facade re-exporting the napi-rs
    binding, conformance scaffold against the TS 1.x SDK, esbuild bundle
    smoke test. (#247 part b)
  • Shape conformance with TS @relayburn/sdk@1.x: Ledger.open() returns
    a Promise<Ledger> instance, sessionCost() emits totalUSD
    (screaming USD), every read verb is async (Promise<T>),
    IngestOptions is { sessionId, harness, ledgerHome }, top and
    minSample accept plain number, and onLog callbacks are accepted
    on every read verb's options (silently dropped at the napi boundary
    until the SDK wires fallback logging). Adds search, exportLedger,
    exportStamps, BurnErrorCode, OverheadFileKind, and
    HotspotsGroupBy as 2.x extensions over the 1.x surface. (#247 part c)
  • Umbrella facade now coerces napi-rs BigInt return values to Number
    for safe-range integers ([Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]), matching the TS 1.x runtime shape; values
    outside that range stay BigInt to avoid silent precision loss.
  • Conformance suite is now wired into CI: napi build writes its outputs
    (.node, binding.cjs, binding.d.ts) into src/ so the generated
    loader's local-file branch resolves; the suite seeds a deterministic
    ledger via tests/fixtures/cli-golden/scripts/build-ledger.mjs and
    flips RELAYBURN_SDK_NAPI_BUILT=1 to enable the deepStrictEqual gate
    against TS @relayburn/sdk@1.x. (#247 part d)

@relayburn/mcp

Changed

  • Drop @relayburn/{reader, ledger, analyze} from MCP entirely; @relayburn/sdk is now the only @relayburn/* package edge.

Don't miss a new burn release

NewReleases is sending notifications on new releases.