Skip to content

Releases: agent-team-foundation/first-tree

0.3.2

24 Apr 04:20
a03a852

Choose a tag to compare

What's Changed

Full Changelog: 0.3.1...0.3.2

0.3.1

24 Apr 01:04

Choose a tag to compare

What's Changed

  • fix(breeze): only monitor explicit mentions and review requests by @bingran-you in #320

Full Changelog: v0.2.16...0.3.1

v0.2.16

23 Apr 21:55
e5451da

Choose a tag to compare

Docs-only patch. Fixes #332: gate Step 6.2 watch check on the notifications token scope (PR #333).

v0.2.15

23 Apr 21:24
fde5a1d

Choose a tag to compare

Docs-only patch release so npm users get the updated onboarding narrative bundled into first-tree tree help onboarding.

  • #325 — make end-to-end onboarding prompt source/tree-agnostic
  • #326 — default to breeze-first setup
  • #327 — fix onboarding path bootstrap chicken-and-egg
  • #329 — add 6.4.b real source-PR trigger

v0.2.14

23 Apr 20:23
f2bb8b9

Choose a tag to compare

Highlights

  • Auto-merge queueing for tree PRs (#322): openTreePr now calls gh pr merge --auto --squash --delete-branch after creating a PR. Repos that haven't opted in via Settings → "Allow auto-merge" are unaffected (the specific disabled-on-repo stderr is recognized and swallowed). Fixes stuck approved PRs on tree repos like paperclip-tree.
  • Onboarding prompt fix (#318): replaced the fake gardener install command with the real Scenario-B flow (first-tree tree inspect → bind → gardener install-workflow --tree-repobreeze install).
  • Drop installed_version (#316): simplifies install metadata.

Follow-ups

  • #324 — reconcile scripts/sync-version.js (enforces lockstep) with docs/architecture/versioning.md (allows independent tree VERSIONs).

v0.2.10

22 Apr 02:14
d8f325f

Choose a tag to compare

Release 0.2.10

Highlights

  • Breeze daemon startup now fails closed. first-tree breeze install, start, run, daemon, and run-once now require an explicit --allow-repo scope instead of silently defaulting to the full account notification/search surface.
  • Gardener pull-mode release. This version includes the new gardener daemon lifecycle (start / stop / status / run-once), sync migration work, multi-target scan support, and the installable sync workflow.
  • Tree bindings are URL-first. Published tree URLs are now treated as canonical binding identity.
  • Docs, skills, and tests are aligned with the shipped CLI. The published package includes the follow-up README / skill / test parity sweep for the Breeze repo-scope contract.

Included PRs

  • #248 fix(breeze): require explicit repo scope for daemon startup
  • #250 docs(breeze): align README and tests with explicit repo scope
  • #241 feat(gardener): multi target_repos in scan mode + merged-PR sweep
  • #242 refactor(gardener): migrate sync from tree namespace
  • #243 feat(gardener): pull-mode daemon (start/stop/status/run-once)
  • #244 ci: install first-tree gardener sync workflow
  • #246 feat: make tree bindings URL-first
  • #245 docs(cli): split Primary vs Advanced in tree/breeze/gardener help
  • #247 Align first-tree docs and tests with current CLI

Validation

  • pnpm release:check
  • additional Breeze doc/skill/test parity verification before tagging and publish

v0.2.9

21 Apr 01:55
ba242ed

Choose a tag to compare

Tree-only release that adds a source-only companion to first-tree tree bind for agent runtimes that manage their own tree checkout.

Tree

  • #234 — feat: add first-tree tree integrate command.

    The source-only subset of bind. Installs the first-tree skill into .claude/skills/first-tree/ and .agents/skills/first-tree/, upserts the managed FIRST-TREE-SOURCE-INTEGRATION block in CLAUDE.md / AGENTS.md, and writes .first-tree/source.json. It does not write anything to the tree repo — no tree.json, no bindings/, no source-repos.md, no submodule syncs, no skill install on the tree side.

    Use when the tree repo is managed externally. The motivating case is first-tree-hub: Hub maintains a single long-lived Context Tree clone and spawns ephemeral per-chat workspaces. Running `bind` from each workspace would pollute the shared tree with transient binding metadata for every session; `integrate` keeps the tree clean. first-tree-hub#124 consumes this command from its workspace-bootstrap path.

    first-tree tree integrate --tree-path PATH [--tree-url URL] [--tree-mode dedicated|shared] \
                              [--mode standalone-source|shared-source|workspace-root|workspace-member] \
                              [--workspace-id ID] [--workspace-root PATH] [--entrypoint PATH] \
                              [--source-path PATH]
    

    The block-builder and source-state writer helpers in bind.ts (CommandRunner, defaultCommandRunner, readGitRemoteUrl, inferTreeMode, inferBindingMode, determineScope, resolveWorkspaceId, resolveWorkspaceRootPath) are now exported so `integrate` reuses them without duplication.

No changes to Breeze or Gardener in this release.

v0.2.8

20 Apr 22:39
ace6db9

Choose a tag to compare

Breeze + Gardener release. Fixes the first-tree breeze start launchd crash observed on fresh macOS installs and adds a push-mode Gardener workflow alternative to poller mode.

Breeze

  • #224 — harden lifecycle and one-shot runtime. first-tree breeze start on macOS was writing a launchd plist with ProgramArguments = [node, breeze, daemon, --backend=ts, ...], so launchd (cwd /) resolved breeze as /breeze and crashed every invocation with Cannot find module '/breeze'; KeepAlive: true then restarted the same broken invocation on a tight loop. The plist now re-execs the current CLI artifact via [node, <cli-entrypoint>, breeze, daemon, --backend=ts, ...] and carries BREEZE_DIR / BREEZE_HOME through to the daemon env. Same PR also makes run / start --help paths side-effect free, tightens one-shot candidate dispatch, hardens local lock liveness, and fixes a same-repo workspace preparation race under concurrency.

Gardener

  • #228 — add push-mode install-workflow + --assign-owners.
    • first-tree gardener install-workflow --tree-repo <slug> scaffolds .github/workflows/first-tree-sync.yml in a codebase repo — an event-driven replacement for running the gardener service as a poller. Runs gardener comment on every PR open/sync/merge.
    • gardener comment grows an opt-in --assign-owners flag: on a MERGED source PR, tree-repo issues are auto-assigned to NODE owners resolved from the tree's generated CODEOWNERS. GitHub rejection of non-collaborator assignees falls through cleanly so the issue still opens.
    • New reference skills/first-tree/references/workflow-mode.md walks the codebase-maintainer agent through preflight, gh auth token quick path (with scope-bleed / audit-log / rotation caveats), scoped-PAT fallback, and a GitHub App appendix.
    • skills/gardener/SKILL.md gains a push/pull mode comparison table up top.

Version bumps

  • first-tree 0.2.7 → 0.2.8
  • breeze 0.2.0 → 0.2.1
  • gardener 0.1.0 → 0.3.0
  • tree + skill-tools 0.2.7 → 0.2.8

Install

npm i -g first-tree@0.2.8

v0.2.7

20 Apr 19:56
3ddabff

Choose a tag to compare

Breeze-only release. Three daemon-robustness fixes found during a live 25-issue concurrency smoke, plus one configurable-concurrency feature.

Fixes

  • #212 — broker: survive request-dir cleanup race. An external reaper (or abandoned shim) could remove the shim's request directory between listPendingRequests and writeFailureResponse, crashing the daemon with unhandled ENOENT and orphaning every in-flight agent. writeSuccessResponse / writeFailureResponse now ensureDir their target, and the outer catch wraps the failure write.
  • #213 — gh: raise spawnSync maxBuffer to 64 MiB. gh api notifications on accounts with a few hundred threads easily exceeds the default ~1 MiB cap, so every poll silently failed with ENOBUFS and the entire notification-driven candidate path degraded to search-only (capped at 10 per poll). New DEFAULT_GH_MAX_BUFFER_BYTES + overridable maxBufferBytes.
  • #214 — enforce per-identity daemon singleton. The previous HTTP-port bind was the only mutex; a racing second daemon initialised broker + dispatcher before losing the port, briefly double-processing the same claim dir. The existing acquireServiceLock helper is now wired into runDaemon; the lock acquisition is skipped when the injected AbortSignal is already aborted (see #216).

Feature

  • #215 — expose maxParallel and searchLimit via env / yaml / CLI-override plumbing. Default maxParallel bumped 2 → 20. New env vars: BREEZE_MAX_PARALLEL, BREEZE_SEARCH_LIMIT. Yaml keys: max_parallel, search_limit. Startup log now echoes both values.

Release details

  • #216 — version bumps (first-tree 0.2.6 → 0.2.7, breeze 0.1.0 → 0.2.0, tree + skill-tools 0.2.6 → 0.2.7) plus a small runDaemon pre-abort guard so the daemon's shutdown fast-path does not conflict with a legitimately-running daemon.

Verified under load

Post-merge live smoke (25 GitHub issues, default config on bingran-you/breeze-smoke):

  • peak 17 concurrent agents (vs 10–11 capped pre-patch)
  • daemon alive the full ~6 min run (vs crash at ~7 min pre-#212)
  • 517 notifications ingested in first poll (vs 0 pre-#213)
  • second daemon attempt cleanly rejected before broker init (vs proceeded to dispatcher then EADDRINUSE pre-#214)

Install

```
npm i -g first-tree@0.2.7
```

v0.2.6

15 Apr 02:56

Choose a tag to compare

What's Changed

  • fix(generate-codeowners): prevent double @@ in CODEOWNERS output by @serenakeyitan in #89
  • fix(sync): strip @ prefix from owners in extractOwnersFromCodeowners by @serenakeyitan in #91
  • refactor: consolidate .first-tree/ into single source.json by @liuchao-001 in #92
  • docs: replace about.md with WHITEPAPER.md in skill payload by @liuchao-001 in #99
  • perf(sync): parallelize apply phase (git push + gh pr create) by @bingran-you in #94
  • docs: move maintainer knowledge into Context Tree by @bingran-you in #102
  • fix(sync): harden proposal branch generation by @bingran-you in #101

Full Changelog: v0.2.5...v0.2.6