Skip to content

v0.2.1

Choose a tag to compare

@lifrary lifrary released this 09 Oct 15:06
· 44 commits to main since this release

Toolchain and release verification

  • TypeScript 7.0.2 is the default native type checker and watch compiler.
    TypeScript 6.0.3 remains the JavaScript compiler API for typescript-eslint;
    both compilers are invoked by explicit paths to avoid npm bin collisions.
  • verbatimModuleSyntax enforces explicit type-only imports in ESM code.
  • Release checks keep the package, lockfile, plugin, marketplace, skill,
    and bundled versions aligned. CI rejects stale committed bundles and
    exercises CLI and MCP from an independently installed local tarball.
  • Updated the MCP SDK's transitive Hono dependency to 4.13.13.
  • Package, plugin, marketplace, and skill versions advance to 0.2.1.

Added

  • Portable Claude Code JSONL imports via CLI --file and MCP file, project
    selection/configuration via --cwd, and parse-free session catalogs via
    --sessions [--limit N] and the sixth MCP tool, agent_tree_sessions.
  • Complete redacted JSON mindmaps/catalogs (--json, MCP list
    format: "json") without stdout banners, and CLI --strict malformed-line
    rejection. Incompatible selectors, modes, and flags fail with exit code 2.
  • CLAUDE_CONFIG_DIR discovery support; project paths encode every
    non-ASCII-alphanumeric character as -. Exports without a valid session
    UUID use a stable path-derived 32-hex identity for local pick history.

Changed

  • Config precedence is defaults < user < project < environment < explicit
    CLI. Per-field validation warns without discarding valid sibling settings.
    MCP analysis caches invalidate on caller config and file identity metadata.
  • LLM model, input/output limits, parallelism, prompt caching, and language
    settings are honored. Exact messages.countTokens preflight reservations
    precede paid calls; failed counts make no paid labeling call, and failed
    requests do not refund reservations. The input budget is not a spending cap.
  • CLI and MCP share the package version source. ESLint 10 flat config and
    Vitest 5 modernize the toolchain. TypeScript 7 performs type checks, while
    TypeScript 6 supplies the compiler API for typescript-eslint.
  • Docs and skill schemas now describe six tools and Claude Code-only input;
    Codex/Gemini native session adapters remain unimplemented.
  • README rewritten around a terminal demo (docs/demo.svg, rendered from
    real CLI output), a quick start, what's new in 0.2, the Claude Code plugin
    and a roadmap, with reference material in collapsible sections and verified
    install paths for the development version and the plugin. The marketplace
    command is claude plugin marketplace add lifrary/agent-tree; current
    Claude Code rejects the previously documented github: prefix.

Fixed

  • Phase-only text rendering preserves canonical node numbers for subsequent
    snapshot selection. Hidden children no longer renumber later phases.
  • Dropping sidechains preserves original source-event ranges and keeps
    dropped events out of the selected tree's metadata and snapshots.
  • --dry-run skips dump/cache writes and pick changes while retaining
    analysis; use --no-llm as well to avoid paid labeling.
  • TUI selection shares the --snapshot path for git context, redaction,
    pick history, and clipboard behavior, and honors text display options.
  • --redact-dryrun reports per-pattern hit counts from parsed source
    strings on stderr without exposing matched values.
  • UUIDless Claude Code metadata lines of any non-event type (custom-title,
    agent-name, mode, atis-latch, ai-title, file-history-delta, …)
    are skipped as metadata, and structured attachment content (hook context
    lists, file and memory objects) is dropped without a malformed warning.
    Previously a real 14.7 MB session printed 1,592 multi-line warnings and
    --strict rejected all 150 recent real transcripts tested.
  • /pre-publish-audit reads npm pack --json from npm 12, which prints an
    object keyed by package name instead of an array; its tarball check
    previously failed with "Cannot index object with number".

Security

  • Discovery accepts only UUID-named regular session files, excluding
    agent/subagent and symlink entries. JSON exports/catalogs and errors retain
    redaction at output boundaries.
  • Security redaction cannot be disabled. Config accepts only the implemented
    anthropic provider and telemetry.enabled: false.

Breaking

  • Node.js ≥22.13.0 is required. CI covers Node 22/24/26 on Linux and macOS.
  • Per-session MCP tools accept sessionId or file, never both;
    agent_tree_picks takes {} only. JSON exports reject display filters.
    Invalid config fields and unsupported settings now warn instead of being
    silently accepted.

Docs: README jargon + redact-strict accuracy pass (2026-04-29)

Follow-up audit on the README rewrite that landed three days ago. Three
load-bearing claims were either reader-hostile or factually wrong:

  • /wrap reference removed. The opening tagline framed agent-tree
    against "linear /wrap summaries", but /wrap is a third-party plugin
    command (session-wrap:wrap) — readers without that plugin installed
    see a comparison they can't parse. Rephrased to "linear end-of-session
    summaries". skills/agent-tree/SKILL.md had the same trap in two
    places (like /wrap or /ooo, Generating a /wrap summary); both
    rewritten in tool-agnostic language.
  • One-shot npx install command was broken. README's "Install"
    section opened with npx -y @seungwoolee/agent-tree --list, which the
    same README's "Why not bare npx?" section explicitly says doesn't
    work — the package ships two bins (agent-tree, atree) so npx 10+
    can't auto-resolve, and --list gets eaten as a positional. Replaced
    with the isolated /tmp/atree install pattern that /mcp-smoke
    already uses (regression-tested every release).
  • --redact-strict "adds card" was a documentation-vs-code split.
    The README, the CLI --help, the redact.ts header comment, and the
    SKILL.md privacy section all claimed --redact-strict adds 5 PII
    patterns including card. In reality redactCreditCards() is called
    unconditionally inside apply() (default-on for everyone), and
    STRICT_EXTRA defines 5 regex entries covering 4 PII categories —
    email, ssn_us, rrn_ko, plus phone split into two regexes
    (phone_e164 + phone) for ReDoS safety. Fixed to "16 named secret
    patterns + always-on Luhn-validated card check; --redact-strict adds
    4 more PII patterns (email/phone/SSN/RRN)" everywhere. Behavior
    unchanged — this was purely a doc/help-text drift.

Also tightened a few smaller items: --diff <a> <b> table notation →
<from> <to> (more readable than commander's variadic <ids...>),
version 0.1.2 (as of 2026-04) in the For-agents identity block →
(npm badge above shows latest) so the README doesn't go stale on
release day, and dist/*.js ships in git too — optional for Option A
comment placement clarified to apply to both install options
(dist/ is committed, so npm run build is only needed after editing
src/).

dist/ rebuilt to ship the new --help text in the next release. Tests
still 134 / 12 (no behavioral changes).

Docs: README rewrite + agent-friendly surface (2026-04-26)

Rewrote README.md for v0.1.2 accuracy and added a top-level
"For agents (LLMs handed this URL)" section. Modern agentic workflows
often hand a repo URL to an LLM with no other context; the new section
provides:

  • Identity block (package / repo / version / runtime / data source)
  • One-shot self-test sequence (isolated /tmp install + --version /
    --help / --list); see "self-test npx form" note below for why
    bare npx is unreliable here
  • MCP tool schemas — zod-derived JSON, copy-paste-ready
  • Common task recipes ("user says X → call Y")
  • Constraints + failure modes (no ~/.claude/projects/ data, in-progress
    sessions, ambiguous prefix, LLM cost, redaction, MCP path resolution
    per marketplace type)
  • Pointer table to CHANGELOG / SKILL.md / src/mcp/server.ts /
    src/cli/options.ts / RELEASING.md / CONTRIBUTING.md

Also refreshed stale references across the doc set:

  • README test count 113 / 12 → 134 / 12 and pattern count
    10 default → 16 default (5 strict). Original "10 default" was a much
    earlier number; the v0.1.2 audit added several token classes (slack,
    github_pat_finegrained, openai_project_key, stripe, huggingface, npm,
    gcp_oauth, aws_temp). The v0.1.2 CHANGELOG line "all 14 DEFAULT_PATTERNS"
    was itself stale — direct count of name: entries between
    DEFAULT_PATTERNS and STRICT_EXTRA in src/utils/redact.ts is 16
  • README self-test npx form. Earlier draft used
    npx -y @seungwoolee/agent-tree --version which silently fell back
    to npx's own --version (returning the npm version 10.9.4, not the
    package). Multi-bin packages (agent-tree + atree) need the
    explicit bin name: npx -y @seungwoolee/agent-tree agent-tree --version
    works for --version/--help (commander short-circuits), but breaks
    --list because npx passes the bin name through as an arg →
    commander reads it as [session-id]. Final form is an isolated
    /tmp/atree-probe install (same pattern /mcp-smoke uses, so it's
    regression-tested every release).
  • skills/agent-tree/SKILL.md install fallback. The same multi-bin
    npx trap bit this file's command not found recovery line —
    npx -y @seungwoolee/agent-tree … was offered as a one-shot
    alternative to npm i -g. Removed the npx option; npm i -g is
    the only suggestion now, with an inline note pointing Claude Code
    at the README "Why not bare npx?" explanation so the reflex
    doesn't reintroduce it.
  • README plugin-cache verification path 0.1.0 → version-agnostic glob
    * so future bumps don't immediately re-stale the troubleshooting steps
  • README MCP smoke example now points to the bundled /mcp-smoke slash
    command instead of an inline tools/list echo (which lacked the
    spec-required initialize handshake under SDK 1.29)
  • CONTRIBUTING.md test count 113 / 12 → 134 / 12
  • skills/agent-tree/SKILL.md npx oh-my-agent-tree … →
    npx -y @seungwoolee/agent-tree … (the legacy package name predates
    the rebrand chain oh-my-claude-map → claude-map → claude-tree → agent-tree)