gsxdsm
24e142dd20
feat(merger): generate AI summary subject for merge commits
...
Replace bare `feat(FN-XXXX): merge fusion/fn-XXXX` subjects with an
AI-generated summary describing what landed (e.g. `feat(FN-XXXX): add
webhook handler`). Calls the existing `summarizeCommitSubject` lane
alongside the body summarizer; falls back to `merge <branch>` when the
summarizer is disabled, unavailable, or returns nothing.
Default for `useAiMergeCommitSummary` flips to true so existing
projects without an explicit override pick up the new behavior. The
Settings UI already exposes the toggle.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 04:39:00 -07:00
gsxdsm
299b66e50d
docs: add changeset for nested .fusion dir fix
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 04:24:39 -07:00
gsxdsm
2abc68635f
chore(release): v0.9.3
...
Version bump via changesets.
2026-04-29 23:20:40 -07:00
gsxdsm
bb9b0f1d1a
fix(FN-3005): preserve card timer across reruns
2026-04-29 23:13:38 -07:00
gsxdsm
d2b688ed14
chore(release): v0.9.2
...
Version bump via changesets.
2026-04-29 22:27:14 -07:00
gsxdsm
7eec105a02
docs: add changeset for per-agent heartbeat procedure
...
Document the Wake Delta + Heartbeat Procedure restructure and the new
heartbeatProcedurePath override / upgrade-heartbeat-procedure endpoint
landed in the recent FN-29xx merges.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 21:57:36 -07:00
Fusion
64b5f677ff
feat(FN-2962): merge fusion/fn-2962
...
- Add changeset for `@runfusion/fusion` minor release introducing custom provider registration support
Commits merged:
- feat(FN-2962): complete Step 8 — add changeset and documentation
Files changed:
.changeset/register-custom-providers.md | 5 +++++
1 file changed, 5 insertions(+)
Fusion-Task-Id: FN-2962
2026-04-29 21:42:44 -07:00
gsxdsm
6c051b1851
fix(FN-XXX): update release notes link in update notification
2026-04-29 21:33:18 -07:00
gsxdsm
cfc8aa35b6
fix(tui): keep header left edge anchored when remote tunnel is shown
...
Between 100-175 cols the remote URL pushed the logo/tabs offscreen.
Remote info now sits in a flex-shrinkable, right-justified slot that
truncates. Also paints a solid background on the QR overlay.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 20:47:04 -07:00
Fusion
19cdf7f448
feat(FN-2959): merge fusion/fn-2959-2
...
- Add custom provider CRUD routes (`POST/GET/PUT/DELETE /api/custom-providers`) with auth validation and storage in `~/.fusion/settings.json`; registers via `register-custom-provider-routes.ts`
- Add `CustomProviderForm` component for user-defined provider configuration (endpoint URL, API key, model ID); includes dedicated CSS
- Add custom provider section to `SettingsModal` under the "Models" tab with provider list and add/disable controls
- Add custom provider selection to `ModelOnboardingModal` onboarding flow so new users can use their own endpoints
- Add changeset (`custom-openai-anthropic-providers.md`) for `@runfusion/fusion` minor release
- Add unit tests for `CustomProviderForm`, `ModelOnboardingModal`, `SettingsModal`, custom-provider routes, and `useTasks` hook; update existing mocks
Commits merged:
- feat(FN-2959): complete Step 6 — add changeset and docs
- test(FN-2959): update settings modal mocks for custom provider API
- feat(FN-2959): complete Step 4 — add onboarding custom provider flow
- feat(FN-2959): complete Step 3 — add settings custom provider disclosure
- feat(FN-2959): complete Step 2 — add custom provider form component
- feat(FN-2959): complete Step 1 — add custom provider CRUD routes
- feat(FN-2975): merge fusion/fn-2975
Files changed:
.changeset/custom-openai-anthropic-providers.md | 5 +
packages/dashboard/app/api/legacy.ts | 41 ++++
.../app/components/CustomProviderForm.css | 45 ++++
.../app/components/CustomProviderForm.tsx | 203 ++++++++++++++++
.../app/components/ModelOnboardingModal.css | 14 ++
.../app/components/ModelOnboardingModal.tsx | 62 ++++-
.../dashboard/app/components/SettingsModal.css | 38 +++
.../dashboard/app/components/SettingsModal.tsx | 91 +++++++-
.../__tests__/CustomProviderForm.test.tsx | 60 +++++
.../__tests__/ModelOnboardingModal.test.tsx | 23 ++
.../components/__tests__/SettingsModal.test.tsx | 13 ++
.../__tests__/SettingsModalNodeRouting.test.tsx | 4 +
.../components/__tests__/settings-mobile.test.tsx | 4 +
.../dashboard/app/hooks/__tests__/useTasks.test.ts | 48 ++++
packages/dashboard/app/hooks/useTasks.ts | 4 +-
packages/dashboard/src/auth-paths.ts | 4 +
packages/dashboard/src/routes.ts | 2 +
.../__tests__/custom-provider-routes.test.ts | 118 ++++++++++
.../src/routes/register-custom-provider-routes.ts | 254 +++++++++++++++++++++
19 files changed, 1027 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-2959
2026-04-29 20:15:05 -07:00
Fusion
9e5ac3c676
feat(FN-2947): merge fusion/fn-2947
...
- Add AI-powered merge commit summarization with toggle in Settings (`packages/core/src/ai-summarize.ts`, `packages/dashboard/app/components/SettingsModal.tsx`, `packages/engine/src/merger.ts`)
- Introduce `generateMergeCommitSummary` utility in `@fusion/core` that calls the configured model with a diff prompt; results appear in the commit log for merge commits
- Add `aiMergeSummaryEnabled` project setting and `useAiMergeSummaryEnabled` hook in dashboard
- Update `@runfusion/fusion` CLI extension to surface the new setting
- Add `POST /api/tasks/:id/workflow/pre-merge` and `POST /api/tasks/:id/planning-subtask` routes (`packages/dashboard/src/routes/`)
- Rework InsightsView with two-pane layout for better readability (`packages/dashboard/app/components/InsightsView.tsx`, `packages/dashboard/app/components/InsightsView.css`)
- Fix `task plan` command to surface errors when planning fails (`packages/cli/src/commands/task.ts`)
- Add tests for `ai-summarize`, `agent-heartbeat`, `agent-tools`, and dashboard API routes; refresh onboarding and agents-view mobile tests
- Minor CSS polish: reduce AgentsView panel hover gap, improve CommitDiffTab layout, add ScriptsModal styles
- Changelog and version bumps for `@runfusion/fusion` v0.9.1, CLI alias, and all workspace packages
Commits merged:
- feat(FN-2947): complete Step 7 — add changeset and docs deliverables
- fix(FN-2947): clean unused aiSummary path
- test(FN-2947): complete Step 5 — cover AI merge summary flow
- feat(FN-2947): complete Step 4 — add merge summary settings toggle
- feat(FN-2947): complete Step 3 — wire AI merge summaries into merger
- feat(FN-2947): complete Step 2 — add merge summary setting
- feat(FN-2947): complete Step 1 — add merge commit summarizer
- feat(FN-2970): merge fusion/fn-2970
- feat(FN-2956): merge fusion/fn-2956
- feat(FN-2923): merge fusion/fn-2923
- feat(FN-2945): merge fusion/fn-2945
- chore(release): v0.9.1
- fix(FN-XXX): improve git manager diff layout
- fix(dashboard): rework Insights view with two-pane layout
- fix(FN-XXX): keep experimental views off by default
Files changed:
.changeset/active-agents-no-stuck-connecting.md | 13 --
.changeset/active-agents-panel-hoist-heartbeat.md | 13 --
.changeset/add-ai-merge-commit-summary.md | 5 +
.changeset/fix-agent-heartbeat-terminal-links.md | 5 -
.changeset/show-planning-tasks-immediately.md | 5 -
CHANGELOG.md | 92 ++++++++++
docs/settings-reference.md | 3 +
package.json | 2 +-
packages/cli-alias/CHANGELOG.md | 15 ++
packages/cli-alias/package.json | 2 +-
packages/cli/CHANGELOG.md | 12 ++
packages/cli/package.json | 2 +-
packages/cli/src/__tests__/task-plan.test.ts | 1 +
packages/cli/src/commands/__tests__/task.test.ts | 15 +-
packages/cli/src/commands/task.ts | 15 +-
packages/cli/src/extension.ts | 9 +
packages/core/CHANGELOG.md | 7 +
packages/core/package.json | 2 +-
packages/core/src/__tests__/ai-summarize.test.ts | 64 +++++++
packages/core/src/ai-summarize.ts | 114 ++++++++++++
packages/core/src/index.ts | 3 +
packages/core/src/settings-schema.ts | 1 +
packages/core/src/types.ts | 4 +
packages/dashboard/CHANGELOG.md | 14 ++
packages/dashboard/app/App.tsx | 28 ++-
.../app/__tests__/agent-css-classes.test.ts | 3 +-
packages/dashboard/app/__tests__/api.test.ts | 13 ++
packages/dashboard/app/api/legacy.ts | 2 +
packages/dashboard/app/components/AgentsView.css | 22 +--
.../dashboard/app/components/CommitDiffTab.tsx | 2 +-
.../dashboard/app/components/GitManagerModal.tsx | 71 ++++----
packages/dashboard/app/components/InsightsView.css | 200 ++++++++++++++++++---
packages/dashboard/app/components/InsightsView.tsx | 111 ++++++++----
.../app/components/ModelOnboardingModal.tsx | 5 +-
packages/dashboard/app/components/ScriptsModal.css | 89 +++++++++
.../dashboard/app/components/SettingsModal.css | 11 +-
.../dashboard/app/components/SettingsModal.tsx | 22 ++-
.../dashboard/app/components/TaskDetailModal.css | 5 +
packages/dashboard/app/components/TodoView.tsx | 2 +
.../app/components/__tests__/App.test.tsx | 33 ++++
.../app/components/__tests__/InsightsView.test.tsx | 25 ++-
.../__tests__/ModelOnboardingModal.test.tsx | 4 +-
.../app/components/__tests__/QuickChatFAB.test.tsx | 14 +-
.../__tests__/SettingsModalNodeRouting.test.tsx | 12 +-
.../app/components/__tests__/TodoView.test.tsx | 4 +-
.../__tests__/agents-view-mobile.test.tsx | 5 +-
.../components/__tests__/onboarding-flow.test.tsx | 2 +-
.../app/hooks/__tests__/useAppSettings.test.ts | 1 +
.../app/hooks/__tests__/useTaskHandlers.test.ts | 4 +-
packages/dashboard/app/hooks/useAppSettings.ts | 12 ++
packages/dashboard/app/hooks/useTaskHandlers.ts | 4 +-
packages/dashboard/package.json | 2 +-
packages/dashboard/src/__tests__/routes.test.ts | 14 ++
packages/dashboard/src/routes.ts | 4 +
.../dashboard/src/routes/register-git-github.ts | 12 ++
.../src/routes/register-planning-subtask-routes.ts | 3 +
.../src/routes/register-task-workflow-routes.ts | 7 +
packages/desktop/CHANGELOG.md | 7 +
packages/desktop/package.json | 2 +-
packages/engine/CHANGELOG.md | 11 ++
packages/engine/package.json | 2 +-
.../engine/src/__tests__/agent-heartbeat.test.ts | 10 ++
.../src/__tests__/agent-tools-delegation.test.ts | 2 +
packages/engine/src/__tests__/agent-tools.test.ts | 37 ++++
packages/engine/src/__tests__/cron-runner.test.ts | 4 +
packages/engine/src/__tests__/merger.test.ts | 75 ++++++++
.../src/__tests__/node-routing-policy.test.ts | 25 ++-
.../src/__tests__/pr-comment-handler.test.ts | 8 +
.../src/__tests__/scheduler-node-routing.test.ts | 18 +-
packages/engine/src/__tests__/triage.test.ts | 2 +
packages/engine/src/agent-heartbeat.ts | 13 +-
packages/engine/src/agent-tools.ts | 13 +-
packages/engine/src/cron-runner.ts | 7 +-
packages/engine/src/executor.ts | 2 +-
packages/engine/src/merger.ts | 181 ++++++++-----------
packages/engine/src/mission-execution-loop.ts | 8 +
packages/engine/src/pr-comment-handler.ts | 5 +
packages/engine/src/project-engine.ts | 8 +
packages/engine/src/routine-runner.ts | 4 +
packages/engine/src/scheduler.ts | 8 +-
packages/engine/src/triage.ts | 4 +
packages/mobile/CHANGELOG.md | 7 +
packages/mobile/package.json | 2 +-
packages/pi-claude-cli/CHANGELOG.md | 7 +
packages/pi-claude-cli/package.json | 2 +-
packages/plugin-sdk/CHANGELOG.md | 10 ++
packages/plugin-sdk/package.json | 2 +-
.../examples/fusion-plugin-auto-label/CHANGELOG.md | 8 +
.../examples/fusion-plugin-auto-label/package.json | 2 +-
.../examples/fusion-plugin-ci-status/CHANGELOG.md | 8 +
.../examples/fusion-plugin-ci-status/package.json | 2 +-
.../fusion-plugin-notification/CHANGELOG.md | 8 +
.../fusion-plugin-notification/package.json | 2 +-
.../fusion-plugin-settings-demo/CHANGELOG.md | 8 +
.../fusion-plugin-settings-demo/package.json | 2 +-
plugins/fusion-plugin-hermes-runtime/CHANGELOG.md | 8 +
plugins/fusion-plugin-hermes-runtime/package.json | 2 +-
.../fusion-plugin-openclaw-runtime/CHANGELOG.md | 8 +
.../fusion-plugin-openclaw-runtime/package.json | 2 +-
.../fusion-plugin-paperclip-runtime/CHANGELOG.md | 8 +
.../fusion-plugin-paperclip-runtime/package.json | 2 +-
101 files changed, 1388 insertions(+), 334 deletions(-)
Fusion-Task-Id: FN-2947
2026-04-29 17:38:25 -07:00
gsxdsm
ba2cb2bd72
chore(release): v0.9.1
...
Version bump via changesets.
2026-04-29 16:29:16 -07:00
gsxdsm
291e156b26
fix(FN-XXX): improve git manager diff layout
2026-04-29 16:26:53 -07:00
gsxdsm
c6d67b9e1c
fix(dashboard): rework Insights view with two-pane layout
...
- Categories list in a left sidebar; insights for the selected category
render in a scrollable right pane (mobile collapses sidebar to a
horizontal chip rail and keeps the header on a single row).
- Removed -webkit-line-clamp on insight content so full text shows.
- Fixed scroll: added min-height: 0 to flex containers.
- Larger icons (20px) inside per-insight action buttons; close button
switched off the invisible btn-icon styling.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 16:25:30 -07:00
gsxdsm
118a03a34d
fix(FN-XXX): keep experimental views off by default
2026-04-29 16:11:59 -07:00
gsxdsm
d8baa7a6fd
fix(FN-XXX): show planning-created tasks without refresh
2026-04-29 15:25:06 -07:00
Fusion
7e832bbf92
feat(FN-2943): merge fusion/fn-2943
...
- **Active Agents panel overhaul**: Hoisted above the main agent list with a new `ActiveAgentsPanel.css` stylesheet; shows next heartbeat ETA and prevents cards from getting stuck in "Connecting..." state
- **Node routing policy**: Scheduler now enforces unavailable-node scheduling rules and routes tasks to eligible nodes more reliably (`packages/engine/src/scheduler.ts`, `node-routing-policy.ts`)
- **Task card merge timer**: Keeps the card timer live while a task is actively merging rather than resetting on merge start
- **Settings modal scroll**: Scrolls to top when auth actions succeed, with regression tests added
- **Task steps reset**: Resets steps when reopening a task that returns to todo or triage (FN-2966)
- **Core store additions**: New `packages/core/src/store.ts` test coverage for task state mutations
- **Dashboard SSE bus**: New `sse-bus.ts` for event bus communication in the dashboard
- **Version bumps**: `v0.9.0` release across all packages; `cli-alias`, `dashboard`, `engine`, `plugin-sdk`, and plugin changelogs updated
- **Changeset cleanup**: Removed 20 stale changeset files consumed by the v0.9.0 release; added two new ones for Active Agents panel fixes
Commits merged:
- test(FN-2943): complete Step 3 — add auth scroll-to-top regressions
- feat(FN-2943): complete Step 2 — scroll on successful auth actions
- feat(FN-2943): complete Step 1 — add settings content scroll ref
- feat(FN-2951): enforce unavailable-node scheduling and improve active agents panel
- chore: add changeset for Active Agents panel hoist + heartbeat ETA
- feat(dashboard): hoist Active Agents panel above main list, show next heartbeat
- fix(dashboard): add top margin between agent list and Active Agents panel
- fix(dashboard): unstick Active Agents panel cards from "Connecting..."
- chore(release): v0.9.0
- chore: add changeset for live merge timer on task card
- fix(dashboard): keep card timer live while task is actively merging
- feat(FN-2966): reset task steps when reopening to todo or triage
Files changed:
.changeset/active-agents-live-status-and-logs.md | 13 -
.changeset/active-agents-no-stuck-connecting.md | 13 +
.changeset/active-agents-panel-hoist-heartbeat.md | 13 +
.changeset/dashboard-merge-base-diff.md | 13 -
.changeset/dashboard-task-changed-files-only.md | 13 -
.changeset/engine-concurrency-races.md | 13 -
.changeset/fix-agent-heartbeat-scheduling.md | 5 -
.changeset/memory-dream-session-state.md | 13 -
.changeset/merger-ai-summarized-commits.md | 13 -
.changeset/multi-node-routing.md | 21 -
.changeset/pluggable-notification-providers.md | 4 -
.changeset/pr-mode-push-branch-and-cleanup.md | 16 -
.../recover-mergeable-respects-merge-settings.md | 13 -
.changeset/remote-tailscale-qr-tui.md | 7 -
.changeset/require-pr-approval-setting.md | 17 -
.changeset/respec-from-in-review.md | 13 -
.changeset/restore-task-card-fallbacks.md | 13 -
.changeset/tui-log-copy-feedback.md | 13 -
.changeset/tui-wide-stats-stack.md | 13 -
CHANGELOG.md | 449 +++++++++++++++++++++
package.json | 2 +-
packages/cli-alias/CHANGELOG.md | 60 +++
packages/cli-alias/package.json | 2 +-
packages/cli/CHANGELOG.md | 44 ++
packages/cli/package.json | 2 +-
packages/core/CHANGELOG.md | 41 ++
packages/core/package.json | 2 +-
packages/core/src/__tests__/store.test.ts | 127 ++++++
packages/core/src/store.ts | 35 +-
packages/dashboard/CHANGELOG.md | 63 +++
.../dashboard/app/components/ActiveAgentsPanel.css | 29 ++
.../dashboard/app/components/ActiveAgentsPanel.tsx | 35 +-
packages/dashboard/app/components/AgentsView.tsx | 5 +-
.../dashboard/app/components/SettingsModal.tsx | 13 +-
packages/dashboard/app/components/TaskCard.tsx | 30 +-
.../__tests__/ActiveAgentsPanel.test.tsx | 42 ++
.../app/components/__tests__/AgentsView.test.tsx | 11 +-
.../components/__tests__/SettingsModal.test.tsx | 68 ++++
.../app/components/__tests__/TaskCard.test.tsx | 36 ++
packages/dashboard/app/sse-bus.ts | 13 +
packages/dashboard/package.json | 2 +-
packages/desktop/CHANGELOG.md | 41 ++
packages/desktop/package.json | 2 +-
packages/engine/CHANGELOG.md | 59 +++
packages/engine/package.json | 2 +-
.../src/__tests__/node-routing-policy.test.ts | 102 +++--
.../src/__tests__/scheduler-node-routing.test.ts | 43 +-
packages/engine/src/index.ts | 1 +
packages/engine/src/node-routing-policy.ts | 41 +-
packages/engine/src/scheduler.ts | 48 +--
packages/mobile/CHANGELOG.md | 41 ++
packages/mobile/package.json | 2 +-
packages/pi-claude-cli/CHANGELOG.md | 41 ++
packages/pi-claude-cli/package.json | 2 +-
packages/plugin-sdk/CHANGELOG.md | 57 +++
packages/plugin-sdk/package.json | 2 +-
.../examples/fusion-plugin-auto-label/CHANGELOG.md | 21 +
.../examples/fusion-plugin-auto-label/package.json | 2 +-
.../examples/fusion-plugin-ci-status/CHANGELOG.md | 21 +
.../examples/fusion-plugin-ci-status/package.json | 2 +-
.../fusion-plugin-notification/CHANGELOG.md | 21 +
.../fusion-plugin-notification/package.json | 2 +-
.../fusion-plugin-settings-demo/CHANGELOG.md | 21 +
.../fusion-plugin-settings-demo/package.json | 2 +-
plugins/fusion-plugin-hermes-runtime/CHANGELOG.md | 21 +
plugins/fusion-plugin-hermes-runtime/package.json | 2 +-
.../fusion-plugin-openclaw-runtime/CHANGELOG.md | 21 +
.../fusion-plugin-openclaw-runtime/package.json | 2 +-
.../fusion-plugin-paperclip-runtime/CHANGELOG.md | 21 +
.../fusion-plugin-paperclip-runtime/package.json | 2 +-
70 files changed, 1617 insertions(+), 378 deletions(-)
Fusion-Task-Id: FN-2943
2026-04-29 14:43:10 -07:00
gsxdsm
f6242c22f8
chore: add changeset for Active Agents panel hoist + heartbeat ETA
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 14:34:16 -07:00
gsxdsm
76deb488ed
fix(dashboard): unstick Active Agents panel cards from "Connecting..."
...
Agents in `active` state without a current taskId had no SSE to attach
to, but the card still rendered "Connecting..." — implying a network
state that never resolves. Branch on taskId first: idle agents show
"Idle — no task assigned"; running-without-task shows "Starting...".
Also fix a related SSE multiplexer race: subscribers joining a channel
that had already opened never got an onOpen callback (EventSource only
fires `open` once), so they sat at isConnected=false forever whenever
another component was already streaming the same URL. Fire onOpen on a
microtask for late-joiners.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 14:23:58 -07:00
gsxdsm
061a7dce35
chore(release): v0.9.0
...
Version bump via changesets.
2026-04-29 14:04:09 -07:00
gsxdsm
bb5402a6dd
chore: add changeset for live merge timer on task card
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 14:02:50 -07:00
Fusion
17a072c924
feat(FN-2920): improve remote tunnel setup and heartbeat scheduling
...
- Add cloudflared install/detection support in remote settings API, UI, and route tests
- Surface Cloudflare tunnel prerequisites in Settings modal with remote access docs updates
- Harden heartbeat runtime scheduling by avoiding stale timeout state and simplifying runtime timeout handling
- Expand CLI/core/dashboard/engine coverage for task lifecycle, agent health, and runtime heartbeat behavior
- Add changesets for heartbeat scheduling fixes and PR approval setting updates
Fusion-Task-Id: FN-2920
2026-04-29 13:49:35 -07:00
gsxdsm
b91533ce43
fix(cli): push per-task branch to origin before creating PR; drop dead autoCreatePr
...
In PR-mode, processPullRequestMergeTask called gh pr create --head
fusion/<task-id> without ever pushing the branch to origin. PR creation
failed and the task stalled in in-review — and combined with the
recover-mergeable-review sweep bug, the stalled task got force-merged
locally instead. Push the branch via git push -u origin <branch>
immediately before createPr (skipped when an existing PR already covers
the branch).
Also remove the dead autoCreatePr setting: defined as a default in the
schema and Settings type but never read anywhere.
Related to https://github.com/Runfusion/Fusion/issues/21
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 13:42:17 -07:00
Fusion
48208db9b0
feat(FN-2926): merge fusion/fn-2926
...
- Chat grouped tool calls refactored out of `ChatToolCalls.tsx` into inline rendering in `ChatView.tsx`, with updated styling and new tests; summary/expand logic for grouped calls updated
- New `QuickChatFAB` component added with styles, replacing the old `ChatToolCalls` inline callout with a persistent quick-access button
- Settings modal enhanced with agent runtime routes (register/unregister, run management) and memory settings routes (export, update limits)
- Remote access provider adapters updated to support real QR codes and live Tailscale URL sharing in TUI dashboard
- TUI dashboard app/controller/state updated to surface remote node status and shortcut hints
- `AgentsView` component updated with new layout and styling, plus comprehensive tests
- Route registration and agent runs tests updated to match new runtime API shape
- `surface-hover` fallback assertion aligned across tests
- Bundled dependency updates in `pnpm-lock.yaml`
Commits merged:
- test(FN-2926): align surface-hover fallback assertion
- feat(FN-2926): complete Steps 2-4 — inline grouped tool-call rendering and tests
- feat(FN-2926): complete Step 3 — refine grouped tool-call styles
- feat(FN-2926): complete Step 1 — update grouped tool call summary logic
- feat(remote): real QR codes, live tailscale URL, TUI status & shortcut
- feat(FN-2931): merge fusion/fn-2931
- feat(FN-2925): merge fusion/fn-2925
- feat(FN-2903): merge fusion/fn-2903
Files changed:
.../commands/dashboard-tui/__tests__/app.test.tsx | 9 +-
packages/cli/src/commands/dashboard-tui/app.tsx | 97 +++++++++++--
.../cli/src/commands/dashboard-tui/controller.ts | 31 ++++
packages/cli/src/commands/dashboard-tui/state.ts | 9 +-
packages/cli/src/commands/dashboard.ts | 3 +-
.../app/__tests__/status-colors-theme.test.ts | 4 +-
packages/dashboard/app/components/AgentsView.css | 20 ++-
packages/dashboard/app/components/AgentsView.tsx | 11 +-
.../dashboard/app/components/ChatToolCalls.tsx | 160 ---------------------
packages/dashboard/app/components/ChatView.css | 53 +++----
packages/dashboard/app/components/ChatView.tsx | 131 ++++++++++++++++-
packages/dashboard/app/components/QuickChatFAB.css | 87 ++++++-----
packages/dashboard/app/components/QuickChatFAB.tsx | 124 +++++++++++++++-
.../dashboard/app/components/SettingsModal.css | 21 +++
.../dashboard/app/components/SettingsModal.tsx | 72 +++++++++-
.../app/components/__tests__/AgentsView.test.tsx | 37 +++++
.../app/components/__tests__/ChatView.test.tsx | 83 +++++++++--
.../app/components/__tests__/QuickChatFAB.test.tsx | 68 ++++++---
.../components/__tests__/SettingsModal.test.tsx | 12 +-
packages/dashboard/package.json | 2 +
.../src/__tests__/routes-agent-runs.test.ts | 13 +-
.../src/routes/register-agent-runtime-routes.ts | 49 ++++---
.../src/routes/register-settings-memory-routes.ts | 36 ++++-
packages/engine/src/project-engine.ts | 4 +-
.../engine/src/remote-access/provider-adapters.ts | 14 +-
pnpm-lock.yaml | 113 +++++++++++++++
26 files changed, 933 insertions(+), 330 deletions(-)
Fusion-Task-Id: FN-2926
2026-04-29 13:26:25 -07:00
gsxdsm
9ce811ae4c
chore: add changeset for remote tailscale QR/TUI overhaul
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 13:26:07 -07:00
gsxdsm
7f42c7fe42
fix(engine): respect autoMerge and mergeStrategy in recover-mergeable-review sweep
...
The periodic maintenance job `recover-mergeable-review` was silently merging
in-review tasks regardless of `autoMerge` and `mergeStrategy` settings,
defeating the PR-based review flow for users with `autoMerge: false` and
`mergeStrategy: "pull-request"`.
Gate the sweep on `settings.autoMerge` (and globalPause/enginePaused for
consistency with other merge entry points) and route through the engine's
merge queue via the existing `enqueueMerge` callback so `mergeStrategy ===
"pull-request"` is honored. Falls back to the direct `store.mergeTask` path
only when no enqueue callback is wired (standalone/tests).
Closes https://github.com/Runfusion/Fusion/issues/21
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 13:26:05 -07:00
gsxdsm
a6547957a3
chore: backfill changesets for recent commits
...
Add changesets covering recent fix/feat commits since v0.8.4 that did
not yet have one: TUI wide layout, TUI log copy feedback, dashboard
merge-base diff, dashboard task-only file diffs, engine concurrency
races, memory dream session-state read, AI-summarized merge commits,
and the FN-2877 task card fallbacks.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 11:53:42 -07:00
gsxdsm
1beebc0c45
feat(core,dashboard): allow tasks to be respec'd from in-review
...
Add `triage` to VALID_TRANSITIONS["in-review"] so the dashboard's
`Request AI Revision` and `Rebuild Spec` actions work for in-review
tasks. moveTask now applies the same full reset on in-review → triage
as on in-review → todo (clears branch/baseBranch/baseCommitSha/summary/
recovery metadata and workflowStepResults) so the respec'd task starts
from scratch. The in-review task card's Move menu also gains Planning
as a destination.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 11:53:35 -07:00
Fusion
e46f2d4a28
feat(FN-2869): merge fusion/fn-2869
...
- Add pluggable notification provider system with changeset and docs (`@runfusion/fusion` patch)
- Strengthen node routing and task diff visibility (FN-2840): merge-base resolution, routing guards, and unavailable-node policy tests in dashboard
- Overhaul `QuickChatFAB` component: redesigned FAB with modal, chat thread UI, CSS expansion (140 lines added), and comprehensive test coverage
- Rewrite `useQuickChat` hook: switch to polling-based state, expose dismiss/reset, improve retry and error handling
- Fix executor/merger concurrency races and reviewer pause TOCTOU in `packages/engine`
- Add `AgentSemaphore` defensive guards for invalid limits (NaN, Infinity)
- Expand `agent-runtime`, `agent-session-helpers`, `self-healing`, and `triage` engine modules
- Improve TUI: stack utilities/settings under stats in wide layout, add log entry copy feedback
- Add routing and file-diffs test coverage (`routes.test.ts`, `routes-file-diffs.test.ts`)
Commits merged:
- docs(FN-2869): complete Step 2 — document notification provider settings
- chore(FN-2869): add changeset for pluggable notification providers
- feat(FN-2849): merge fusion/fn-2849-2
- feat(tui): stack utilities/settings under stats in wide layout
- fix(engine): close executor/merger concurrency races and reviewer pause TOCTOU
- fix(dashboard): prefer merge-base over outdated baseCommitSha
- fix(tui): surface visible feedback when copying a log entry
- feat(FN-2840): strengthen node routing and task diff visibility
- feat(FN-2910): merge fusion/fn-2910
Files changed:
.changeset/pluggable-notification-providers.md | 4 +
docs/settings-reference.md | 17 +-
packages/cli/src/commands/dashboard-tui/app.tsx | 71 +++++--
.../cli/src/commands/dashboard-tui/controller.ts | 18 ++
packages/cli/src/commands/dashboard-tui/state.ts | 5 +
.../core/src/__tests__/node-override-guard.test.ts | 24 +++
packages/core/src/__tests__/store.test.ts | 27 +++
.../core/src/__tests__/task-node-override.test.ts | 25 +++
.../src/__tests__/unavailable-node-policy.test.ts | 42 ++++
packages/dashboard/app/api/legacy.ts | 3 +-
packages/dashboard/app/components/QuickChatFAB.css | 140 ++++++++++++-
packages/dashboard/app/components/QuickChatFAB.tsx | 226 ++++++++++++++++++++-
.../app/components/__tests__/QuickChatFAB.test.tsx | 133 +++++++++++-
.../app/hooks/__tests__/useQuickChat.test.ts | 12 +-
packages/dashboard/app/hooks/useQuickChat.ts | 149 ++++++++------
.../src/__tests__/routes-file-diffs.test.ts | 52 +++++
packages/dashboard/src/__tests__/routes.test.ts | 177 ++++++++++++++++
packages/dashboard/src/routes/resolve-diff-base.ts | 76 ++++---
.../engine/src/__tests__/project-engine.test.ts | 8 +-
packages/engine/src/agent-runtime.ts | 15 ++
packages/engine/src/agent-session-helpers.ts | 14 +-
packages/engine/src/concurrency.ts | 37 +++-
packages/engine/src/executor.ts | 183 ++++++++++++-----
packages/engine/src/pi.ts | 11 +
packages/engine/src/project-engine.ts | 47 ++++-
packages/engine/src/reviewer.ts | 95 +++++++--
packages/engine/src/self-healing.ts | 8 +
packages/engine/src/triage.ts | 10 +-
28 files changed, 1412 insertions(+), 217 deletions(-)
Fusion-Task-Id: FN-2869
2026-04-29 11:42:25 -07:00
Fusion
91f9f208ad
feat(FN-2731): merge fusion/fn-2731
...
- feat(FN-2731): add changeset for multi-node routing feature
- feat(FN-2730): merge fusion/fn-2730
- feat(FN-2729): merge fusion/fn-2729
- chore(release): v0.8.4
- chore(dashboard): tidy stray workspace artifacts
- refactor(core,merger): consolidate AI commit-body summarization into ai-summarize.ts
- feat(merger,dashboard): use title-summarization model for commit body AI + reword settings
- fix(engine): guarantee non-empty merge commit body via AI fallback cascade
- fix(FN-XXX): sync workspace version on release
- feat(FN-2729): unify node status indicator with NodeHealthDot
- fix(FN-0000): harden sqlite startup validation
- fix(FN-XXX): align tui startup update check
- fix(FN-XXX): harden windows path handling
- fix(engine): tighten Layer 3 — pass safety constraint into AI prompt + harden Layer 2 restore
- feat(FN-2944): merge fusion/fn-2944
- fix(engine): auto-recover from squash-merge orphan rebase failures
- feat(FN-2948): merge fusion/fn-2948
- feat(FN-2939): merge fusion/fn-2939
- feat(FN-2946): merge fusion/fn-2946
- feat(FN-2941): merge fusion/fn-2941
- feat(FN-2938): merge fusion/fn-2938
- feat(FN-2929): merge fusion/fn-2929
- feat(FN-2934): merge fusion/fn-2934
- feat(FN-2930): merge fusion/fn-2930
- feat(FN-2928): merge fusion/fn-2928
- feat(FN-2927): merge fusion/fn-2927
- feat(FN-2916): streamline Cloudflare quick tunnel settings UX
- feat(FN-2913): merge fusion/fn-2913
- feat(FN-2911): merge fusion/fn-2911
- feat(FN-2901): merge fusion/fn-2901
- feat(FN-2729): merge fusion/fn-2729
Fusion-Task-Id: FN-2731
2026-04-29 09:16:23 -07:00
gsxdsm
262c6d8a4a
chore(release): v0.8.4
...
Version bump via changesets.
2026-04-29 08:59:49 -07:00
gsxdsm
3202e578c2
fix(FN-0000): harden sqlite startup validation
2026-04-29 07:58:58 -07:00
gsxdsm
858e24468f
fix(FN-XXX): align tui startup update check
2026-04-29 07:54:45 -07:00
gsxdsm
bd14cf84e3
fix(FN-XXX): harden windows path handling
2026-04-29 07:35:23 -07:00
Fusion
995165ea60
feat(FN-2944): merge fusion/fn-2944
...
- test(FN-2944): cover already checked out worktree conflict recovery
- fix(FN-2944): recognize git already checked out worktree conflict
- fix(engine): auto-recover from squash-merge orphan rebase failures
Fusion-Task-Id: FN-2944
2026-04-29 07:10:52 -07:00
Fusion
1c4c08b4d9
feat(FN-2939): merge fusion/fn-2939
...
- feat(FN-2939): complete Step 6 — add verification changeset
- test(FN-2939): complete Step 4 — tighten bundle-output coverage
- feat(FN-2946): merge fusion/fn-2946
Fusion-Task-Id: FN-2939
2026-04-29 02:39:06 -07:00
Fusion
10d565e344
feat(FN-2929): merge fusion/fn-2929
...
- fix(FN-2929): complete Step 6 — add changeset and docs
- test(FN-2929): update loginProvider API test for origin payload
- test(FN-2929): complete Step 4 — cover oauth redirect rewrite and callback proxy
- fix(FN-2929): complete Step 3 — send browser origin in auth login request
- fix(FN-2929): complete Step 1-2 — rewrite OAuth redirect and add callback proxy
- feat(FN-2934): merge fusion/fn-2934
Fusion-Task-Id: FN-2929
2026-04-29 01:32:37 -07:00
gsxdsm
4446a58b05
chore(release): v0.8.3
...
Version bump via changesets.
2026-04-28 22:02:56 -07:00
gsxdsm
9850bfa30a
Update changeset
2026-04-28 22:02:30 -07:00
gsxdsm
2fd840def5
chore(release): v0.8.2
...
Version bump via changesets.
2026-04-28 21:51:32 -07:00
Fusion
531b13e6ad
feat(FN-2895): merge fusion/fn-2895
...
- feat(FN-2895): complete Step 7 — documentation and delivery
Fusion-Task-Id: FN-2895
2026-04-28 21:50:27 -07:00
gsxdsm
765e41838c
chore(release): v0.8.1
...
Version bump via changesets.
2026-04-28 21:15:15 -07:00
Fusion
a8dbdbc017
feat(FN-2915): merge fusion/fn-2915
...
- feat(FN-2915): include github issue refs in commit workflows
- refactor(dashboard): simplify setup wizard manual step
- fix(engine): prevent phantom merges when verification fix runs without a commit
Fusion-Task-Id: FN-2915
2026-04-28 21:13:30 -07:00
gsxdsm
3b54a03b81
chore(release): v0.8.0
...
Version bump via changesets.
2026-04-28 19:24:57 -07:00
Fusion
5cc7597b5f
fix(FN-2897): harden npm bundle packaging and merge recovery flows
...
- Strip private @fusion/* workspace devDependencies from the published CLI manifest via prepare-publish-manifest and package metadata updates
- Replace cross-spawn usage and add staged bundle layout assertions to verify resolver output in dist packaging
- Add per-task/project model override resolution across core, dashboard settings/task modals, and route coverage with new regression tests
- Strengthen engine merge/recovery handling for paused/interrupted/squash paths and surface merger timeline activity with additional self-healing and merger tests
- Add changesets for npm bundle dependency fixes, project model override stabilization, and FTS5 corruption recovery
Fusion-Task-Id: FN-2897
2026-04-28 18:23:21 -07:00
gsxdsm
2029968d23
fix(FN-2662): honor project model overrides and stabilize tests
2026-04-28 18:21:17 -07:00
Fusion
cc9181db47
feat(FN-2895): add FTS5 corruption recovery path
...
- Add Database APIs to rebuild the tasks_fts index and detect FTS5 corruption signatures
- Retry task upserts once after rebuilding FTS5 when corruption errors are encountered
- Extend TaskStore health checks to include FTS5 integrity verification
- Add regression tests for rebuild/integrity behavior and upsert recovery, plus a patch changeset for @runfusion/fusion
2026-04-28 16:51:04 -07:00
Fusion
1f9aa7b00f
fix(FN-2869): keep runfusion update notice changes authoritative
...
- Remove the stale infusion-link changeset entry that conflicts with the FN-2837 correction already on main.
- Preserve the current runfusion.ai update-notice baseline instead of reintroducing reverted release-note metadata.
2026-04-28 15:57:22 -07:00
Fusion
455bf68e14
chore(FN-2869): add changeset for update notice link patch
...
- Add a patch changeset entry for @runfusion/fusion describing the update-notice learn-more link adjustment.
- Record release-note metadata in .changeset/fn-2837-add-infusion-link.md for the upcoming publish.
2026-04-28 15:56:50 -07:00
gsxdsm
22bac2ddc7
feat(core,engine): split smart merge strategy into prefer-main / prefer-branch
...
The single "smart" strategy is now two flavors with the new default flipped
to prefer-main. Both share a pre-cascade `git fetch origin <currentBranch>`
+ best-effort fast-forward so a freshly-pushed sibling commit doesn't get
clobbered when the fallback resolves a conflict against a stale base.
- "smart-prefer-main" (new default): -X ours fallback. Protects just-merged
sibling work from being regressed by a concurrent task branch.
- "smart-prefer-branch": -X theirs fallback. Equivalent to legacy "smart".
Legacy "smart" / "prefer-main" enum values are accepted and normalized via
`normalizeMergeConflictStrategy()` so existing settings.json files migrate
seamlessly. The fast-forward step gracefully degrades on fetch failure or
divergent local main (logs and continues).
Updates settings UI dropdown, test helpers, and adds 5 fetch+ff regression
tests + 7 normalize-helper tests. Lint cleanup of two empty catch blocks
in scripts/release.mjs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-28 15:44:38 -07:00