Commit Graph

3945 Commits

Author SHA1 Message Date
gsxdsm
b969635e90 chore(release): add minor changeset for v0.5.0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 17:25:05 -07:00
gsxdsm
f5990b9ac9 test(cli): bump timeouts and skip slow FS-heavy suites
Raise per-test timeout to 30s in extension and provider-settings suites
where parallel FS load (or worker-pool starvation) can push pure-sync
tests past vitest's 5s default. Skip the fn pi extension and agent-export
suites whose coverage is duplicated by command-level tests but cost ~62s
and ~3.3s respectively on every run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 17:24:00 -07:00
gsxdsm
b20dc2ed20 fix(dashboard-tui): harden resize handling against tmux/ssh races
Debounce SIGWINCH bursts (50ms trailing edge), wipe the alt-screen before
Ink redraws so shrunk frames don't leave stale rows, and add a 2s dim-poll
fallback for environments that drop SIGWINCH. LogsPanel now reads stdout
rows itself so timer-driven renders always see live dimensions, and the
layoutKey includes a resizeTick so Yoga's cached layout is invalidated
even when cols×rows lands back on the same string.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 17:23:54 -07:00
gsxdsm
9224bc91d4 fix(dashboard): bind xterm onData once to prevent input doubling
Move the xterm.onData -> sendInput wiring (and the window resize listener)
from a separate post-init effect into initTerminal itself, so they share
the xterm instance's lifetime. Under StrictMode + Vite Fast Refresh the
separate effect could re-run and attach a second listener to the same
live xterm instance, producing per-character input doubling (every
keystroke -> two pty.write calls -> shell echoes "aabbcc"). The handler
now reads sendInput via a ref, so function-identity changes no longer
require re-binding. Resize listener is removed at every xterm disposal
site (tab switch, modal close, session-invalid replace, reinitialize).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 17:22:44 -07:00
Fusion
c4abf39774 feat(FN-2617): merge fusion/fn-2617 (auto-resolved)
- test(FN-2617): stabilize workflow remediation timeout under full suite
- test(FN-2617): complete Step 5 — add openclaw runtime resolution coverage
- feat(FN-2617): complete Step 4 — route step sessions through runtime resolution
- fix(FN-2617): thread runtimeHint through merger rebase push flow
- feat(FN-2617): complete Step 3 — wire runtimeHint across engine subsystems
- feat(FN-2617): complete Step 2 — thread runtimeHint in executor paths
- feat(FN-2617): complete Step 1 — add runtimeHint extraction helper
2026-04-26 16:14:35 -07:00
gsxdsm
9c7c8ee586 fix(merger): bump verification timeout to 10m and reap process group
The 5-minute exec timeout only killed the immediate shell, leaving
vitest/pnpm worker trees alive. Across retries these accumulated and
thrashed the host, starving the engine and TUI. Switch verification to
spawn-based runner with detached process group so timeouts SIGTERM the
whole tree (SIGKILL after 5s grace), and bump the wallclock to 10m for
larger workspaces. Stream-truncate output instead of relying on ENOBUFS.

Also fix two flaky/race-prone dashboard tests that were red on main and
blocking every in-review task at merge verification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 16:05:40 -07:00
Fusion
ba52e5d40e feat(FN-2620): add runtime plugin engine import guards 2026-04-26 16:05:05 -07:00
Fusion
56b4386b9c feat(FN-2613): merge fusion/fn-2613 (auto-resolved)
- fix(FN-2613): restore green CI after static engine import changes
- test(FN-2613): complete Step 3 — update mobile and standalone CSS assertions
- feat(FN-2613): complete Step 2 — move standalone token override to global styles
2026-04-26 15:53:50 -07:00
Fusion
2af05119d1 feat(FN-2615): merge fusion/fn-2615 (auto-resolved)
- fix(FN-2615): restore workspace lint and test stability
2026-04-26 15:51:44 -07:00
Fusion
24221cc227 feat(FN-2614): merge fusion/fn-2614 (auto-resolved)
- fix(FN-2614): restore workspace green verification gates
2026-04-26 15:43:07 -07:00
Fusion
9dabeda5da feat(FN-2618): merge fusion/fn-2618
- test(FN-2618): harden process-manager fs/tmpdir mocks
- fix(cli): mark react-devtools-core external in bun compile
- fix(pty): switch to @homebridge/node-pty-prebuilt-multiarch fork
2026-04-26 15:33:39 -07:00
gsxdsm
e759a2d91a fix(core,cli): make standalone binary actually run
Bun's --compile binary previously crashed at startup because:
  1. node:sqlite isn't implemented in Bun 1.3.8 (require returns
     undefined; import throws "No such built-in module")
  2. ink imports react-devtools-core inside its reconciler; even though
     gated by isDev(), the bundled module path failed to resolve at
     runtime

Fixes:
  - Add packages/core/src/sqlite-adapter.ts: a thin DatabaseSync wrapper
    that picks bun:sqlite under Bun and node:sqlite under Node via
    createRequire (so the bundler doesn't statically pull in either).
    Drop-in for the three core files that import DatabaseSync.
  - Install react-devtools-core as a workspace devDependency so it
    resolves at bundle time. The dev-only code path is still gated by
    DEV=true, so it stays inert in production.
  - Revert the prior --external react-devtools-core flag (no longer
    needed and was causing a different runtime error).
  - Mark node-pty external in tsup so esbuild stops choking on the
    homebridge fork's conditional native require()s
    (build/Release/conpty.node etc.) when bundling for the npm package.
  - Update bundle-output test: the bundle now contains both
    bun:sqlite and node:sqlite specifiers (loaded via createRequire).

Verified end-to-end: dist/fn dashboard -p 0 starts cleanly (no PTY,
sqlite, or devtools errors). Core tests 3038/3038, CLI tests 826/826
(up from 822/826 baseline).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 15:25:06 -07:00
Fusion
112813f122 feat(FN-2615): merge fusion/fn-2615 (auto-resolved)
- fix(FN-2615): restore workspace lint and test stability
2026-04-26 15:16:22 -07:00
Fusion
01ff37632c feat(FN-2577): merge fusion/fn-2577 (auto-resolved)
- feat(FN-2577): complete Step 5 — update TodoView architecture docs
- test(FN-2577): address TodoView review feedback
- test(FN-2577): complete Step 3 — add TodoView component coverage
- feat(FN-2577): complete Step 2 — build TodoView component
- fix(FN-2577): correct TodoView heading token font size
- feat(FN-2577): complete Step 1 — create TodoView CSS
- fix(FN-2578): align TodoView placeholder addToast typing
- feat(FN-2578): complete Step 4 — route and preload TodoView
- feat(FN-2578): complete Step 3 — wire todos nav entries
- feat(FN-2578): complete Step 2 — add todos to view state types
- feat(FN-2578): complete Step 1 — add useTodoLists hook and tests
- test(FN-2576): complete Step 4 — add todo route coverage
- feat(FN-2576): complete Step 3 — add todo client API functions
- feat(FN-2576): complete Step 2 — register todo router
- feat(FN-2576): complete Step 1 — add todo routes module
2026-04-26 15:12:32 -07:00
gsxdsm
56bfe082f2 fix(cli): mark react-devtools-core external in bun compile
ink@6 has a devtools.js module that imports react-devtools-core. It is
only loaded at runtime when DEV=true, but Bun's static bundler still
tries to resolve it at compile time and fails with "Could not resolve".
Marking it external lets the compile succeed; the dynamic import path
is never taken in production.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 15:03:12 -07:00
gsxdsm
0592831ba8 merge: node-pty -> @homebridge fork migration 2026-04-26 15:00:15 -07:00
gsxdsm
328b236462 fix(pty): switch to @homebridge/node-pty-prebuilt-multiarch fork
Resolves "Failed to load PTY module" install errors on Linux/macOS by
aliasing node-pty to the homebridge fork, which ships prebuilds for
linux x64/arm64/arm/ia32 across many Node ABIs and uses prebuild-install
for darwin/windows binaries on install.

- Aliased dep so all "node-pty" import specifiers (and vi.mock calls)
  keep working unchanged.
- Removed darwin chmod postinstall hack (fork handles permissions).
- Updated cli/build.ts to dynamically resolve node-pty install root and
  pick prebuilds by ABI for Linux cross-compile; warn-and-skip for
  darwin/windows cross-compile (host-only there, as before).
- Added type shim because the fork's bundled typings declare module
  '@homebridge/node-pty-prebuilt-multiarch', not 'node-pty'.

Verified: pnpm install clean, dashboard typecheck clean, native module
loads and spawns shell via fork, host + linux-x64 cross-compile staging
both produce dist/runtime/<plat>/pty.node.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 15:00:10 -07:00
Fusion
ab09a42b23 feat(FN-2616): merge fusion/fn-2616 (auto-resolved)
- feat(FN-2616): complete Step 5 — pass full quality gates
- test(FN-2616): complete Step 4 — add Hermes plugin integration tests
- test(FN-2616): complete Step 3 — add Hermes engine integration coverage
- feat(FN-2616): complete Step 2 — align Hermes adapter option contract
2026-04-26 14:54:46 -07:00
gsxdsm
544d8d77e3 fix(dashboard,core,engine): statically import @fusion/engine to fix createFnAgent undefined in published CLI
The dashboard modules used a variable-specifier dynamic import
(`const m = "@fusion/engine"; await import(m)`) to defeat bundler static
analysis. tsup honored that and left the dynamic import in dist/bin.js,
so the published `@runfusion/fusion` package failed at runtime with
"createFnAgent2 is not a function" — `@fusion/engine` isn't on npm and
the silent catch set the binding to undefined. Replaces the trick with
static imports across planning, chat, subtask-breakdown, mission-interview,
agent-generation, ai-refine, roadmap-suggestions, milestone-slice-interview,
and routes. Core can't statically import engine (cycle), so it now exposes
setCreateFnAgent and engine wires itself in at module load. Documents the
pattern in AGENTS.md.

Fixes Runfusion/Fusion#9.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 14:43:03 -07:00
Fusion
861fb50df1 feat(FN-2614): merge fusion/fn-2614 (auto-resolved)
- feat(FN-2614): complete Step 4 — configure vitest test isolation setup
- test(FN-2614): complete Step 3 — add isolation companion test
- feat(FN-2614): complete Step 2 — add test home isolation setup
2026-04-26 14:31:41 -07:00
Fusion
b342e6b5d9 feat(FN-2613): merge fusion/fn-2613 (auto-resolved)
- test(FN-2613): complete Step 3 — update mobile and standalone CSS assertions
- feat(FN-2613): complete Step 2 — move standalone token override to global styles
- feat(FN-2613): complete Step 1 — remove mobile root safe-area padding
2026-04-26 14:29:00 -07:00
Fusion
112ad671f8 feat(FN-2611): merge fusion/fn-2611 (auto-resolved)
- feat(FN-2611): complete Step 4 — add changeset and docs
- test(FN-2611): complete Step 2 — cover legacy alias cleanup payload
- feat(FN-2611): complete Step 1 — normalize legacy experimental aliases
2026-04-26 14:19:18 -07:00
Fusion
6a54450288 feat(FN-2578): merge fusion/fn-2578 (auto-resolved)
- fix(FN-2578): align TodoView placeholder addToast typing
- feat(FN-2578): complete Step 4 — route and preload TodoView
- feat(FN-2578): complete Step 3 — wire todos nav entries
- feat(FN-2578): complete Step 2 — add todos to view state types
- feat(FN-2578): complete Step 1 — add useTodoLists hook and tests
2026-04-26 14:16:35 -07:00
Fusion
e4d4a0165b feat(FN-2612): merge fusion/fn-2612 (auto-resolved)
- test(FN-2612): complete Step 4 — cover shortcut helpers and panel interactions
- feat(FN-2612): complete Step 3 — style shortcut panel controls
- feat(FN-2612): complete Step 2 — add terminal shortcut panel UI
- feat(FN-2612): complete Step 1 — add control sequence helpers
2026-04-26 14:09:34 -07:00
Fusion
03a48ae9bb feat(FN-2604): merge fusion/fn-2604 (auto-resolved)
- feat(FN-2604): complete Step 8 — add changeset and delivery docs
- test(FN-2604): complete Step 7 — align tests and regenerate extension skill docs
- test(FN-2604): complete Step 6 — update dashboard tests for planning statuses
- feat(FN-2604): complete Step 5 — update CLI planning terminology
- feat(FN-2604): complete Step 4 — update workflow route status strings
- feat(FN-2604): complete Step 3 — update settings planning terminology
- feat(FN-2604): complete Step 2 — rename replanning actions in column and spec editor
- feat(FN-2604): complete Step 1 — update dashboard component status strings
2026-04-26 14:06:48 -07:00
Fusion
651ae34307 feat(FN-2576): merge fusion/fn-2576 (auto-resolved)
- test(FN-2576): complete Step 4 — add todo route coverage
- feat(FN-2576): complete Step 3 — add todo client API functions
- feat(FN-2576): complete Step 2 — register todo router
- feat(FN-2576): complete Step 1 — add todo routes module
2026-04-26 13:55:25 -07:00
Fusion
2f5d84c1ba feat(FN-2600): merge fusion/fn-2600 (auto-resolved)
- feat(FN-2600): finalize return-to-live button styling
- test(FN-2600): cover return-to-live and top load-more placement
- feat(FN-2600): add live-follow state and return-to-live control
- fix(FN-2600): clean chronological log documentation and test wording
- test(FN-2600): align log viewer assertions to chronological rendering
- fix(FN-2600): correct chronological badge transition detection
- feat(FN-2600): complete Step 1 — reverse log rendering chronology
2026-04-26 13:49:26 -07:00
Fusion
79ce48c51e feat(FN-2608): merge fusion/fn-2608 (auto-resolved)
- feat(FN-2608): complete Step 6 — verify lint test build gates
- feat(FN-2608): complete Step 5 — resume auto-merge on in-review unpause
- feat(FN-2608): complete Step 4 — pause-aware self-healing recovery
- feat(FN-2608): complete Step 3 — interrupt active merges on pause
- feat(FN-2608): complete Step 2 — guard auto-merge for paused review tasks
- feat(FN-2608): complete Step 1 — pause status for in-review tasks
2026-04-26 13:39:27 -07:00
Fusion
16ec2047cb feat(FN-2610): merge fusion/fn-2610 (auto-resolved)
- fix(FN-2610): add changeset for health version fix
- test(FN-2610): verify health endpoint returns real package version
- fix(FN-2610): read version from package.json in health endpoint
2026-04-26 13:34:28 -07:00
Fusion
9e35c064f5 feat(FN-2564): merge fusion/fn-2564 (auto-resolved)
- feat(FN-2564): complete Step 5 — update routing docs
- feat(FN-2564): complete Step 1 — stabilize registrar wiring
2026-04-26 13:22:36 -07:00
Fusion
1111411e8b feat(FN-2609): merge fusion/fn-2609 (auto-resolved)
- test(FN-2609): complete Step 4 — cover terminal font-size controls
- feat(FN-2609): complete Step 3 — style terminal font-size controls
- feat(FN-2609): complete Step 2 — add terminal status bar font controls
- feat(FN-2609): complete Step 1 — persist terminal font size state
2026-04-26 13:19:04 -07:00
Fusion
429b9671b2 feat(FN-2606): merge fusion/fn-2606 (auto-resolved)
- fix(FN-2606): complete Step 4 — clean up mkdtemp test directories
- test(FN-2606): complete Step 3 — add isolation guard coverage
- feat(FN-2606): complete Step 2 — add engine/dashboard HOME test isolation setup
2026-04-26 13:00:56 -07:00
Fusion
545c8a69f4 feat(FN-2607): merge fusion/fn-2607 (auto-resolved)
- test(FN-2607): complete Step 3 — update usage indicator assertions
- feat(FN-2607): complete Step 2 — hide labels for hidden usage rows
- feat(FN-2607): complete Step 1 — remove connected provider badge
2026-04-26 12:53:43 -07:00
Fusion
bbc872cee9 feat(FN-2603): merge fusion/fn-2603 (auto-resolved)
- test(FN-2603): update downstream tests for planning label expectations
- test(FN-2603): complete Step 6 — update engine tests for planning terminology
- feat(FN-2603): complete Step 5 — rename self-healing planning APIs
- feat(FN-2603): complete Step 4 — rename needs-respecify status to needs-replan
- feat(FN-2603): complete Step 3 — rename specifying and re-specification text
- feat(FN-2603): complete Step 2 — rename triageLog usages to planLog
- feat(FN-2603): complete Step 1 — rename triage logger to plan logger
- feat(FN-2602): complete Step 7 — add release changeset
- test(FN-2602): complete Step 6 — align migration and schema tests
- test(FN-2602): complete Step 5 — update store status assertions
- feat(FN-2602): complete Step 4 — rename triage prompt labels
- feat(FN-2602): complete Step 3 — add status rename migration
- feat(FN-2602): complete Step 2 — rename respecify status literals
- feat(FN-2602): complete Step 1 — rename triage display labels
2026-04-26 12:45:05 -07:00
Fusion
df7c197ab6 feat(FN-2563): merge fusion/fn-2563 (auto-resolved)
- docs(FN-2563): document proxy registrar ordering and dependencies
- fix(FN-2563): remove stale proxy context type import
- fix(FN-2563): preserve proxy registrar ordering semantics
- feat(FN-2563): complete Step 3 — wire proxy registrar
- feat(FN-2563): complete Step 2 — add modular proxy registrar
2026-04-26 12:37:38 -07:00
Fusion
c85ffa9198 feat(FN-2605): merge fusion/fn-2605 (auto-resolved)
- test(FN-2605): complete Step 4 — align tests with planning labels
- docs(FN-2605): complete Step 3 — update demo and script terminology
- docs(FN-2605): complete Step 2 — update docs terminology
- docs(FN-2605): complete Step 1 — update README terminology
2026-04-26 12:34:02 -07:00
gsxdsm
fa60ada0fc docs(FN-2586): require release script for npm releases 2026-04-26 12:29:05 -07:00
Fusion
c1b012129f feat(FN-2597): merge fusion/fn-2597 (auto-resolved)
- feat(FN-2597): complete Step 4 — add docs update and changeset
- test(FN-2597): complete Step 2 — align dashboard tests with reviewer labels
- feat(FN-2597): complete Step 1 — rename validator UI labels to reviewer
2026-04-26 12:25:10 -07:00
gsxdsm
80514718ed chore(release): v0.4.1
Version bump via changesets.
2026-04-26 12:24:08 -07:00
gsxdsm
ec3e2cb280 fix(FN-2586): restore 0.4.x release line and agent log stability 2026-04-26 12:22:06 -07:00
Fusion
8097db235a feat(FN-2602): merge fusion/fn-2602 (auto-resolved)
- feat(FN-2602): complete Step 7 — add release changeset
- test(FN-2602): complete Step 6 — align migration and schema tests
- test(FN-2602): complete Step 5 — update store status assertions
- feat(FN-2602): complete Step 4 — rename triage prompt labels
- feat(FN-2602): complete Step 3 — add status rename migration
- feat(FN-2602): complete Step 2 — rename respecify status literals
- feat(FN-2602): complete Step 1 — rename triage display labels
2026-04-26 12:10:21 -07:00
Fusion
9d7f58542b feat(FN-2562): merge fusion/fn-2562 (auto-resolved)
- docs(FN-2562): document extracted terminal and session-diff registrars
- fix(FN-2562): complete Step 5 — restore lint green
- feat(FN-2562): complete Step 3 — extract session diff registrar
- feat(FN-2562): complete Step 2 — create terminal route registrar
- feat(FN-2562): complete Step 1 — extract diff-base helper module
2026-04-26 11:54:54 -07:00
gsxdsm
4d095d1949 chore: bump runfusion.ai to 0.4.0 2026-04-26 11:50:02 -07:00
gsxdsm
4c739c82d0 feat(FN-2599): merge fusion/fn-2599 2026-04-26 11:49:50 -07:00
gsxdsm
b5200ba81b feat(FN-2586): merge fusion/fn-2586 2026-04-26 11:49:43 -07:00
gsxdsm
bf335dc1f5 chore: bump @runfusion/fusion to 0.4.0 2026-04-26 11:47:09 -07:00
gsxdsm
303e0e1032 fix(terminal): tighten CSS selector in keyboard layout test
Update test regexps to match .modal.terminal-modal (two-class selector) and assert min-height: 100dvh on mobile. Also clean up a stale comment in TaskDetailModal.
2026-04-26 11:44:39 -07:00
gsxdsm
dd63ecec91 feat(auth): add copy-to-clipboard for device codes in login instructions
Extract device codes from OAuth login instructions and render them with a copy button so users don't need to manually select and copy.
2026-04-26 11:44:33 -07:00
gsxdsm
845fed1d50 fix(terminal): anchor header to top when mobile keyboard is open
When the soft keyboard opens on mobile, the overlay's align-items:center was vertically centering the shrunken modal, pushing the header/tabs out of view. Add a rule to switch to align-items:flex-start when --keyboard-overlap is detected.
2026-04-26 11:43:43 -07:00
Fusion
db58f29abc feat(FN-2601): merge fusion/fn-2601 (auto-resolved)
- test(FN-2601): complete Step 3 — cover updated default copy
- feat(FN-2601): complete Step 2 — polish intro styling
- feat(FN-2601): complete Step 1 — update models tab copy
2026-04-26 11:39:08 -07:00