Files
fusion/packages/cli/CHANGELOG.md
2026-04-25 14:24:35 -07:00

21 KiB
Raw Blame History

@runfusion/fusion

Unreleased

Patch Changes

  • FN-2501: Agent pause/resume controls now act immediately. Pausing stops an active heartbeat run right away, and resuming to active triggers an immediate on-demand heartbeat instead of waiting for the next timer tick.

0.2.7

Patch Changes

  • adbad8a: Add fn plugin add as a backward-compatible alias for fn plugin install, and update plugin command help text to advertise the alias while keeping install as the canonical command.

0.2.6

Patch Changes

  • dbc9446: Add a blocking dashboard token-recovery dialog that appears only for daemon bearer-token 401 responses, with set-token or clear-token recovery actions that reload the app.

0.2.5

Patch Changes

  • 69f789f: TUI: layered defenses for the resize / wrong-height-layout bug

    Materially reduces (but doesn't fully eliminate) the symptom of the header rendering off-screen or the layout taking 1-2 too many rows, especially under tmux/ssh.

    • Enter alternate-screen buffer on start; leave on stop. The TUI gets a dedicated fullscreen surface that doesn't share scrollback.
    • StatusBar Text children no longer wrap (default wrap="wrap" was letting long hotkey + URL strings wrap to 2 rows, throwing the row budget off by 1).
    • Controller subscribes to process.stdout "resize" and calls inkInstance.clear() to reset log-update's frame tracking.
    • App-level resize listener + key-based remount on dimension change so React rebuilds the tree from scratch with fresh bounds.
    • Root Box gets explicit width + overflow="hidden"; MainHeader outer Box too.
    • Settings + Utilities side-by-side now stretch to equal heights (UtilitiesPanel switched from flexShrink={0} to flexGrow={1}).

0.2.4

Patch Changes

  • 88b4ecb: TUI fixes: help overlay no longer crashes, header stays rendered

    • Help overlay (? / h) crashed with "Encountered two children with the same key" because several shortcut entries share the same display key ([t] for Git view AND for Toggle engine pause; [r] for Refresh stats AND Refresh agent detail). Switch to index-based keys — each row is unique by position, not by character.
    • Refresh the help text to reflect the unified header ([m] Main, [b/a/g/t/e] views), the Settings/Files/Agents ←/→ pane swap, the Git push/fetch shortcuts, the Files hidden-files toggle, and the Logs G jump-to-end.
    • Main view (status mode) header sometimes vanished after a tmux pane switch and stayed missing until a terminal resize. Two fixes: (a) drop the rows < 10 auto-hide in MainHeader — tmux pane switches can briefly report stale or zero dimensions, and a transient return null was orphaning the header. (b) Wrap MainHeader and StatusBar in flexShrink={0} boxes inside StatusModeGrid and StatusModeSingle (matching the prior fix in InteractiveMode), so Yoga can't squeeze them to 0 rows when content pressures the row budget.

0.2.3

Patch Changes

  • 0f070d8: TUI header redesign and Settings ←/→ pane navigation

    • Replace the dual section + interactive tab strips with a single unified strip: [m] Main [b] Board [a] Agents [g] Settings [t] Git [e] Explorer. Status mode highlights the Main pill; interactive views highlight their own. Number-key shortcuts (15) for status sections still work but are no longer rendered in the header chrome.
    • Width tiers now fit comfortably at every terminal size: full labels at cols ≥ 90, glyph-only at 5089 (every shortcut still visible), FUSION + active pill only below 50. Help/quit shows at cols ≥ 110.
    • New m shortcut switches to status mode (Main); s kept as alias.
    • Settings interactive view: focuses the list pane, focuses the detail pane. Tab still cycles either way (consistent with Agents view).

0.2.2

Patch Changes

  • 58688fa: Keep the FUSION header from wrapping when the terminal is narrow. The MiniLogo and tab pills had Yoga's default flexShrink: 1, so the row's collective content overrunning the width was being absorbed by shrinking every child — including FUSION, which then wrapped to two lines. Pin all fixed-content header children to flexShrink={0}; the trailing flexGrow filler absorbs slack instead.

0.2.1

Patch Changes

  • 07d7bac: Add a blocking dashboard token-recovery dialog that appears only for daemon bearer-token 401 responses, with set-token or clear-token recovery actions that reload the app.

0.2.0

Minor Changes

  • a8f5591: Add support for an optional custom ntfy server URL in notification settings, with default fallback to https://ntfy.sh when unset.

0.1.3

Patch Changes

  • c105cfa: Automatically install the bundled Fusion skill into supported agent home directories during fn init (~/.claude/skills/fusion, ~/.codex/skills/fusion, and ~/.gemini/skills/fusion) when missing. Existing installs are preserved, and per-target filesystem errors now warn without failing project initialization.
  • 86521e2: Fix pnpm install -g @runfusion/fusion failing with a 404 for @fusion/pi-claude-cli. The vendored pi extension is now bundled into the published package's dist/pi-claude-cli/ and is no longer listed as an external dependency.
  • 76961d4: Add a severity filter to the interactive fn dashboard TUI Logs tab. Users can now press f to cycle all → info → warn → error for view-only filtering while preserving the full in-memory ring buffer.
  • f77dd9d: Prevent stale dashboard service workers from trapping old client bundles, and compute automation cron schedules against UTC so monthly runs stay on day 1 across timezones.
  • f4d2a4b: Fix fn dashboard Logs tab row budgeting so log lines stay above the footer hint on short terminals, including wrapped-message cases.
  • f77dd9d: Fix dashboard SSE cleanup on browser refresh so stale event streams do not exhaust per-origin browser connections.
  • 31f021a: Fix dashboard TUI log severity rendering so structured logger.log(...) entries routed via stderr display with info severity/icon instead of being misclassified as errors.
  • eef56af: Normalize Fusion skill-facing tool naming to the public fn_* namespace and clarify the boundary between extension tools and internal engine runtime tools across skill docs.
  • 832c32c: Refresh the shipped Fusion skill documentation to match the current fn_* extension and CLI surfaces, and replace stale kb-era task/storage examples with Fusion-native FN-* and .fusion conventions.
  • dce70bf: Persist fn dashboard bearer tokens in the existing global settings store (~/.fusion/settings.json) on first authenticated run, then reuse them on subsequent starts. Explicit overrides (--token, FUSION_DASHBOARD_TOKEN, FUSION_DAEMON_TOKEN) and --no-auth precedence remain intact.
  • f078a4e: Add a Settings → Pi Extensions action to reinstall Fusion's bundled Pi package (npm:@runfusion/fusion) for self-serve recovery when local Pi skill installs are stale or broken.

0.1.2

Patch Changes

  • 9bf2981: Add a planning-awaiting-input ntfy notification event so users can opt in to alerts when planning sessions pause for user input.
  • Fix the CLI init command import path for the Claude skills runner so tsup can resolve it during build.
  • 94473c8: Improve dashboard shutdown observability by logging non-fatal diagnostics when CentralCore.close() fails during dispose, normal signal shutdown, or dev-mode shutdown cleanup.
  • Fix dashboard and serve command plugin store initialization to support task store implementations that expose getFusionDir() without getRootDir().
  • c01892d: Route dashboard runtime diagnostics through the shared injected runtime logger so TTY sessions can capture server/package logs in the TUI while preserving readable non-TTY startup banner output.

0.1.1

Patch Changes

  • 39f7709: Dashboard TUI now surfaces engine log output in the Logs tab. Previously, the engine's createLogger() writes (scheduler, executor, triage, merger, PR monitor, heartbeat, etc.) went straight to console.error and were rendered beneath the alt-screen TUI — effectively invisible. DashboardLogSink.captureConsole() now intercepts console.log/warn/error while the TUI is running and routes each line into the ring buffer, parsing a leading [prefix] tag so entries carry the subsystem prefix. Originals are restored on TUI shutdown.
  • 585e480: Add keyboard navigation and inspection features to the Dashboard TUI Logs tab: arrow keys and j/k to navigate entries, Enter to expand selected entry, Esc to close expanded view, and w to toggle wrap mode for long messages.
  • 86fd24e: fn dashboard TTY mode now opens on the System tab first so users immediately see host, port, URL, and auth token access details.
  • 585e480: Fix dashboard TUI log navigation: add Home/End shortcuts for jumping to first/last log entry, add Space and e keys as alternatives to Enter for expanding logs, improve word wrap to handle long unbroken tokens (URLs, stack traces) by hard-wrapping them at terminal width.
  • 7d31b21: Fix iOS terminal typing in the dashboard. On touch-primary devices, tapping the terminal opened the on-screen keyboard but keystrokes were silently dropped because the bubble-phase handleTerminalGestureFocus handler re-focused the helper textarea and reset its selection during touchstart/pointerdown, disrupting iOS's input-event attribution. The CSS fix in commit c7266b7f already positions the textarea to receive taps natively, so the JS handler is now a no-op on (hover: none) and (pointer: coarse) devices and desktop retains click-to-focus.
  • Fix dashboard TUI log viewport row calculation on very small terminals to prevent log lines from overlapping the footer.
  • ff5df16: Fix executor model resolution precedence so project defaultProviderOverride/defaultModelIdOverride is honored before falling back to global defaultProvider/defaultModelId across execute, hot-swap, and step-session paths.
  • df2836c: Fix dashboard TUI log behavior so log navigation can reach all entries still present in the ring buffer and streamed merge output is buffered into log lines instead of writing raw fragments into the interactive terminal UI.
  • bbdd11a: Guard SQLite FTS5 usage so Fusion starts cleanly on Node builds whose bundled node:sqlite was compiled without FTS5. On affected systems, fn dashboard previously crashed on first run with Error: no such module: fts5 during schema migration. The Database and ArchiveDatabase now probe for FTS5 at startup and skip the virtual table + triggers when unavailable; TaskStore.searchTasks and ArchiveDatabase.search fall back to LIKE-based scans. Set FUSION_DISABLE_FTS5=1 to force the fallback on runtimes where FTS5 is present but undesirable.
  • 0bb0100: Update dashboard TUI header branding from "fn board" to "fusion" for consistent product naming.

0.1.0

Minor Changes

  • 25d44e1: Add interactive TUI to fn dashboard with five navigable sections: logs, system, utilities, stats, and settings. Keyboard shortcuts enable quick in-terminal navigation (1-5, arrows, q, Ctrl+C, ? for help). The TUI activates automatically in interactive terminal sessions; non-TTY mode (CI, piped output) retains the existing plain-text banner/log behavior.

Patch Changes

  • a2ed6d0: Fixes for stuck merges and agent lifecycle controls.

    • findLandedTaskCommit now falls back to scanning all of HEAD when the bounded baseCommitSha..HEAD range returns no commits (e.g. baseCommitSha was advanced past the landed merge by a fast-forward rebase). Previously the recovery silently returned null and re-queued the merge even though the commit had already landed.
    • Agent heartbeat triggers and registration are gated by runtimeConfig.enabled rather than transient agent state, so paused/idle/error agents stay registered for triggers and re-arm immediately on resume without waiting for a state transition.
    • AgentDetailView exposes a Stop control alongside Pause/Retry for running and error states so operators can terminate stuck agents without going through the agents list.

0.0.6

Patch Changes

  • Re-ship three previously reverted fixes and add pre-merge remote rebase.

    • --no-auth flag now correctly suppresses bearer-token auth instead of being silently overridden by a stale FUSION_DAEMON_TOKEN in the project's .env.
    • Workflow-review revisions reopen only the last step rather than resetting every previously-completed step. The agent applies the feedback as an in-place fix and earlier approved work stays done. New reopenLastStepForRevision helper is used by handleWorkflowRevisionRequest, handleWorkflowStepFailure, and sendTaskBackForFix. determineRevisionResetStart is marked @deprecated and kept exported for tests.
    • Heartbeat scheduling is now driven by agent.state (active/running = timer armed; everything else = timer cleared), not runtimeConfig.enabled. Resuming a paused agent through the dashboard now re-arms the timer immediately.
    • New setting worktreeRebaseBeforeMerge (default true) and companion worktreeRebaseRemote (default: git's configured default). The merger fetches the remote and rebases the task branch onto the latest default-branch tip before merging; conflicts flow into the existing smart/AI resolve cascade. Dashboard Settings → Worktrees exposes a checkbox and a remote dropdown populated from /api/git/remotes/detailed.
    • Last/Next heartbeat labels on the agent list card now share font-size and inline-flex alignment so they line up cleanly.

0.0.5

Patch Changes

  • 41553a5: Harden agent lifecycle around closed tasks and heartbeat defaults.

    • HeartbeatMonitor.executeHeartbeat() now exits before session creation when the resolved task is done/archived (reason task_closed) and clears the stale agent.taskId linkage so the guard isn't re-tripped on every tick.
    • HeartbeatTriggerScheduler.watchAssignments() skips callback dispatch when the assigned task is already closed (when a taskStore is wired in).
    • POST /api/agents/:id/runs performs the same preflight check and returns 409 with a structured error naming the task id + column, keeping the existing active-run 409 precedence.
    • AgentStore.createAgent() now persists runtimeConfig.heartbeatIntervalMs (default 1h) on non-ephemeral agents so the dashboard's freshness signal matches the scheduler's effective cadence instead of depending on whether the user ever opened the heartbeat dropdown. Exports a new DEFAULT_AGENT_HEARTBEAT_INTERVAL_MS constant.

0.0.4

Patch Changes

  • 0da498a: Fix dashboard onboarding auth token controls, keep the AI planning modal footer visible on desktop, and add better terminal PTY spawn diagnostics.

0.0.3

Patch Changes

  • 1fc72d1: Improve the dashboard agents list views with shared empty-state actions, token-based state styling, and clearer board/tree/org-chart presentation.
  • 46b8032: Make fn agent import import package skills alongside agents when importing from directory or archive sources. Skills are written to {project}/skills/imported/{company-slug}/{skill-slug}/SKILL.md with proper frontmatter formatting. Existing skill files are skipped rather than overwritten. Single AGENTS.md file imports do not include package skills.
  • c1bc5b9: Fix CLI merge regressions in test/build verification: restore gh-cli test alias resolution, ensure daemon ignores invalid env tokens, and restore required changeset config.
  • 06704cf: Fix the setup wizard directory browser and make terminal session startup more resilient.

0.0.2

Patch Changes

  • Add fusion bin alias so npx @runfusion/fusion resolves to the CLI (the fn command is still available and unchanged).

0.0.1

Initial release

First public release under the @runfusion scope. Package was previously developed under the @gsxdsm/fusion name; it was never published to npm, so version history resets with 0.0.1. Pre-release notes preserved below for reference.


0.4.0 (pre-release, unpublished)

Minor Changes

  • 2d13b82: Add pi extension. Installing @runfusion/fusion via pi install now provides native tools (fn_task_create, fn_task_list, fn_task_show, fn_task_attach, fn_task_pause, fn_task_unpause) and a /fn command to start the dashboard and AI engine from within a pi session.
  • 494de14: Changed autoMerge to default to true for new boards.
  • 50821fc: Add global pause button to stop all automated agents and scheduling
  • cac10af: Split engine control into Pause (soft) and Stop (hard). The dashboard Header now shows two buttons: "Pause AI engine" stops new work from being dispatched while letting in-flight agents finish gracefully, and "Stop AI engine" (previously the only Pause button) immediately kills all active agent sessions. A new enginePaused setting field controls the soft-pause state alongside the existing globalPause hard-stop.

Patch Changes

  • d19b51f: Auto-assign random port when dashboard port is already in use instead of crashing with EADDRINUSE.
  • ceb379d: Engine pause now terminates active agent sessions (matching global pause behavior) instead of letting them finish gracefully. Tasks are moved back to todo/cleared for clean resume on unpause.
  • acb246a: Fix active agent glow disappearing when scheduling is soft-paused
  • 43aada5: Fix scheduler to not count in-review worktrees against maxWorktrees limit. In-review tasks are idle (waiting to merge) and no longer block new tasks from starting.
  • 9033a79: Fix InlineCreateCard cancelling when clicking dependency dropdown items with empty description.
  • 96f1070: Fix double horizontal scrollbar on mobile board view by switching the board from a 5-column grid to a flex layout on narrow viewports (≤768px) with snap-scrolling.
  • 3dc741c: Fix auto-pause on rate limit when pi-coding-agent exhausts retries. After session.prompt() resolves with exhausted retries, all four agent types (executor, triage, merger, reviewer) now detect the error on session.state.error and trigger UsageLimitPauser to activate global pause. Previously, rate-limit errors that pi-coding-agent handled internally were silently swallowed, causing tasks to be promoted to wrong columns with incomplete work.
  • 2854553: Fix triage allowing tasks to reach executor before spec review approval
  • 72a8953: Fix specifying agents not respecting maxConcurrent concurrency limit
  • a2a12f9: Persist worktree pool across engine restarts. When recycleWorktrees is enabled, idle worktrees are rehydrated from disk on startup instead of being forgotten. When disabled, orphaned worktrees are cleaned up automatically.
  • 65b9585: Add priority-based agent scheduling: merge agents are served before execution agents, which are served before specification agents, when competing for concurrency slots.
  • 98ed082: Restructure README to lead with pi extension usage; move standalone CLI docs to STANDALONE.md.
  • 2d13b82: Agents now declare dependencies when creating multiple related tasks during execution
  • 0e0643a: Skip merger agent when squash merge stages nothing (branch already merged via dependency)
  • d2e2e50: Make "Pause AI engine" a soft pause: only prevents new agents from starting while allowing currently running agents to finish their work naturally. "Stop AI engine" (global pause) still immediately terminates all active agents.
  • 90764b9: Auto-pause engine when API usage limits are detected (rate limits, overloaded, quota exceeded). Prevents wasteful retries across concurrent agents.

0.3.1

Patch Changes

  • ae90be0: Bundle workspace packages into CLI for npm publish. The published package previously declared dependencies on private @kb/core, @kb/dashboard, and @kb/engine workspace packages, causing npm install to fail. Switched the CLI build from tsc to tsup (esbuild) to inline all @kb/* workspace code into a single bundled dist/bin.js, while keeping third-party packages (express, multer, @mariozechner/pi-ai) as external dependencies. Dashboard client assets are now copied into dist/client/ so the published tarball is fully self-contained.
  • 28bbcb9: Exclude Bun-compiled platform binaries from npm publish tarball, reducing package size significantly.

0.3.0

Minor Changes

  • fc7582d: Expand agent.log logging to all agent types, additionally capturing thinking, and agent roles
  • cc999ef: RETHINK verdicts trigger git reset and conversation rewind, re-prompting the agent with feedback

Patch Changes

  • f3c7f7d: CLI task create now supports a --depends <id> flag (repeatable) to declare task dependencies at creation time.
  • fc7582d: Code review REVISE verdicts are now enforced such that agents can no longer advance steps without APPROVE
  • cc999ef: Plan RETHINK triggers conversation rewind with REVISE enforcement on code reviews
  • cc999ef: Dependent tasks can start from in-review dependency branches instead of waiting for merge

0.2.1

Patch Changes

  • efdb7de: Clean up README: plain ASCII file tree, mermaid workflow diagram with column descriptions, update quick start to use kb CLI, add authentication section to CLI README, document cross-model review in executor description.

0.2.0

Minor Changes

  • b12d340: Add automated versioning pipeline using changesets. Developers now add changeset files to describe changes, and a CI workflow automatically opens version PRs that bump versions and generate changelogs.