Fusion
1b3e68740e
feat(FN-2965): add custom providers API routes and settings UI
...
Merged v0.9.4 bringing custom AI providers to the dashboard — SettingsModal now surfaces provider configuration with an onboarding disclosure flow, backed by new API routes (`/custom-providers`) and comprehensive test coverage. The engine adds self-healing with a ghost-review fallback recovery path,
Fusion-Task-Id: FN-2965
2026-04-30 05:14:03 -07:00
Fusion
21c78cae2d
feat(FN-2974): style inline version update control and improve touch target
...
The merge adds an inline version refresh control to the Settings modal with improved touch targets for better mobile usability, replacing a separate duplicate-updates check button. Changes span the SettingsModal component, its CSS styling, and new test coverage for the control behavior.
Fusion-Task-Id: FN-2974
2026-04-30 05:10:23 -07:00
gsxdsm
620049cf15
chore(release): v0.9.4
...
Version bump via changesets.
2026-04-30 04:45:06 -07:00
gsxdsm
0ade837234
chore(changeset): bump merge-summary changeset to patch
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 04:44:09 -07:00
gsxdsm
22c2078535
docs: add changeset for ghost-review fallback recovery
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 04:43:32 -07:00
gsxdsm
0e36e1bafc
test(dashboard): close agentStore in saturated-slot heartbeat test
...
Hoist agentStore to outer scope so the finally block can close it
before removing the temp dir, preventing leaked SQLite handles when
the test errors mid-try.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 04:42:55 -07:00
gsxdsm
774569da86
feat(self-healing): add ghost-review fallback recovery
...
Add recoverGhostReviewTasks as a final-fallback scan in the maintenance
loop. Catches any in-review task that fell through every more-specific
recovery scan and has been idle past taskStuckTimeoutMs, kicks it back
to todo with transient status cleared. Worktree state is intentionally
ignored — the executor recreates as needed. Preserves human-handoff and
active-merge statuses; rate-limited naturally by updatedAt refresh.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 04:41:56 -07:00
gsxdsm
f9c08dea7a
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
fc16ab08a3
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
33d6aea1ab
fix(engine): stop creating nested .fusion/.fusion directory
...
RoutineStore's constructor appends ".fusion" to its rootDir argument,
but InProcessRuntime was passing taskStore.getFusionDir() (already the
.fusion path), producing <projectRoot>/.fusion/.fusion/fusion.db. Pass
the project root instead, matching AutomationStore's construction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 04:24:07 -07:00
Fusion
c5f35ab349
feat(FN-2994): merge fusion/fn-2994
...
Commits merged:
- fix(FN-2994): gate unavailable research workflow and humanize provider labels
- fix(FN-2994): polish research view form and history interactions
- feat(FN-2994): complete Step 5 — document research view architecture
- fix(FN-2994): align status-dot variant and hook/test conventions
- fix(FN-2994): address lint and typecheck issues
- test(FN-2994): cover research lifecycle actions and pending status
- fix(FN-2994): polish research actions and cited reader behavior
- feat(FN-2994): complete Step 3 — add lifecycle actions and task flows
- fix(FN-2994): ensure research enables header overflow gate
- feat(FN-2994): complete Step 2 — implement research view shell layout
- feat(FN-2994): complete Step 2 — gate research navigation and view
- feat(FN-2994): complete Step 1 — add research api surface and hook
Files changed:
docs/architecture.md | 7 +-
docs/dashboard-guide.md | 21 ++
packages/dashboard/app/App.tsx | 11 +-
packages/dashboard/app/api/legacy.ts | 143 ++++-----
packages/dashboard/app/components/Header.tsx | 29 +-
packages/dashboard/app/components/MobileNavBar.tsx | 22 +-
packages/dashboard/app/components/ResearchView.css | 247 +++++++++------
packages/dashboard/app/components/ResearchView.tsx | 347 ++++++++++++++-------
.../app/components/__tests__/ResearchView.test.tsx | 183 ++++++-----
.../app/hooks/__tests__/useResearch.test.ts | 66 ++++
packages/dashboard/app/hooks/useResearch.ts | 162 ++++++++++
packages/dashboard/app/research-types.ts | 43 +++
packages/dashboard/app/styles.css | 4 +
.../src/__tests__/research-routes.test.ts | 65 ++++
packages/dashboard/src/research-routes.ts | 195 ++++++++++--
15 files changed, 1111 insertions(+), 434 deletions(-)
Fusion-Task-Id: FN-2994
2026-04-30 03:43:21 -07:00
Fusion
9bea0a1367
feat(FN-2993): merge fusion/fn-2993
...
Commits merged:
- fix(FN-2993): resolve lint and build verification issues
- fix(FN-2993): address provider registry review feedback
- feat(FN-2993): complete Step 7 — add provider registry
- feat(FN-2993): complete Step 6 — add LLM synthesis provider
- feat(FN-2993): complete Step 5 — add local docs provider
- feat(FN-2993): complete Step 4 — add GitHub provider
- fix(FN-2993): align provider config types with step runner contract
- fix(FN-2993): resolve page fetch test module ordering
- test(FN-2993): expand page fetch coverage for timeout and truncation
- feat(FN-2993): complete Step 3 — add page fetch provider
- fix(FN-2993): align web search provider interface and abort assertions
- feat(FN-2993): complete Step 2 — add web search provider
- feat(FN-2993): complete Step 1 — define provider types and settings fields
Files changed:
packages/core/src/index.ts | 2 +-
packages/core/src/settings-schema.ts | 11 +
packages/core/src/types.ts | 25 ++
.../app/components/CustomProvidersSection.tsx | 1 -
packages/engine/src/index.ts | 19 ++
.../research/__tests__/provider-registry.test.ts | 49 +++
packages/engine/src/research/provider-registry.ts | 110 +++++++
.../providers/__tests__/github-provider.test.ts | 143 +++++++++
.../__tests__/llm-synthesis-provider.test.ts | 107 +++++++
.../__tests__/local-docs-provider.test.ts | 79 +++++
.../__tests__/page-fetch-provider.test.ts | 92 ++++++
.../__tests__/web-search-provider.test.ts | 101 +++++++
.../src/research/providers/github-provider.ts | 327 +++++++++++++++++++++
packages/engine/src/research/providers/index.ts | 5 +
.../research/providers/llm-synthesis-provider.ts | 216 ++++++++++++++
.../src/research/providers/local-docs-provider.ts | 238 +++++++++++++++
.../src/research/providers/page-fetch-provider.ts | 123 ++++++++
.../src/research/providers/web-search-provider.ts | 269 +++++++++++++++++
packages/engine/src/research/types.ts | 50 ++++
19 files changed, 1965 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-2993
2026-04-30 02:21:19 -07:00
Fusion
a227d5b305
feat(FN-2992): merge fusion/fn-2992
...
Commits merged:
- fix(FN-2992): align ResearchView styles with design tokens
- fix(FN-2992): align Research view with standalone layout conventions
- test(FN-2992): complete Step 6 — expand orchestration verification
- feat(FN-2992): complete Step 5 — wire research settings and engine exports
- test(FN-2992): cover provider error classification in step runner
- feat(FN-2992): complete Step 4 — implement research step runner
- test(FN-2992): add orchestrator lifecycle regression coverage
- feat(FN-2992): complete Step 3 — add research orchestrator lifecycle
- feat(FN-2992): complete Step 2 — align research store API events
- feat(FN-2992): complete Step 1 — define orchestration domain types
- feat(FN-2992): complete Step 1 — define orchestration domain types
Files changed:
packages/core/src/index.ts | 15 +
packages/core/src/research-store.ts | 8 +-
packages/core/src/research-types.ts | 109 +++++
packages/core/src/settings-schema.ts | 10 +
packages/core/src/types.ts | 31 ++
packages/dashboard/app/components/ResearchView.css | 87 +++-
packages/dashboard/app/components/ResearchView.tsx | 144 +++---
.../app/components/__tests__/ResearchView.test.tsx | 3 +-
.../src/__tests__/research-orchestrator.test.ts | 256 ++++++++++
.../src/__tests__/research-step-runner.test.ts | 102 ++++
packages/engine/src/index.ts | 11 +
packages/engine/src/project-engine.ts | 17 +
packages/engine/src/research-orchestrator.ts | 517 +++++++++++++++++++++
packages/engine/src/research-step-runner.ts | 235 ++++++++++
14 files changed, 1464 insertions(+), 81 deletions(-)
Fusion-Task-Id: FN-2992
2026-04-30 00:48:37 -07:00
Fusion
b359cb8672
feat(FN-3022): merge fusion/fn-3022
...
Commits merged:
- feat(FN-3022): complete Step 4 — document mobile quick chat autofocus behavior
- test(FN-3022): complete Step 2 — cover mobile autofocus and delayed enable path
- feat(FN-3022): complete Step 1 — reliable mobile autofocus when composer becomes ready
Files changed:
docs/dashboard-guide.md | 1 +
packages/dashboard/app/components/QuickChatFAB.tsx | 42 +++++++++++++++---
.../app/components/__tests__/QuickChatFAB.test.tsx | 51 ++++++++++++++++++++++
3 files changed, 89 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-3022
2026-04-30 00:30:02 -07:00
Fusion
dc96d572cb
feat(FN-3021): merge fusion/fn-3021
...
Commits merged:
- test(FN-3021): complete Step 2 — assert quick-chat scoped mobile tool-call rules
- feat(FN-3021): complete Step 1 — scope mobile quick-chat tool-call row override
- feat(FN-3021): complete Step 4 — document compact mobile quick-chat tool-call summaries
- fix(FN-3021): complete Step 3 — restore dashboard typecheck in custom providers
- test(FN-3021): complete Step 2 — add mobile quick-chat tool-call regression coverage
- feat(FN-3021): complete Step 1 — keep quick-chat tool-call summary single-line on mobile
Files changed:
docs/dashboard-guide.md | 1 +
packages/dashboard/app/components/CustomProvidersSection.tsx | 1 +
packages/dashboard/app/components/QuickChatFAB.css | 1 +
3 files changed, 3 insertions(+)
Fusion-Task-Id: FN-3021
2026-04-30 00:26:07 -07:00
Fusion
42e8e462fc
feat(FN-3019): merge fusion/fn-3019
...
Commits merged:
- feat(FN-3019): complete Step 4 — document gridlock cooldown semantics
- fix(FN-3019): normalize legacy custom provider payloads for typecheck
- test(FN-3019): complete Step 2 — add gridlock cooldown regression coverage
- fix(FN-3019): repair notifier class structure after cooldown refactor
- feat(FN-3019): complete Step 1 — add gridlock notification cooldown
Files changed:
docs/architecture.md | 3 +-
docs/settings-reference.md | 4 +-
.../app/components/CustomProvidersSection.tsx | 25 ++++++----
.../engine/src/__tests__/gridlock-detector.test.ts | 5 +-
packages/engine/src/__tests__/notifier.test.ts | 47 ++++++++++++++++--
packages/engine/src/gridlock-detector.ts | 16 +++++--
packages/engine/src/notifier.ts | 55 ++++++++++++----------
packages/engine/src/project-engine.ts | 1 +
8 files changed, 109 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-3019
2026-04-30 00:20:51 -07:00
Fusion
493ca91d63
feat(FN-3020): merge fusion/fn-3020
...
Commits merged:
- test(FN-3020): complete Step 2 — lock quick-chat mobile tool-call scoping
- feat(FN-3020): complete Step 1 — scope quick-chat mobile tool-call row styles
- feat(FN-3020): complete Step 4 — document compact quick-chat tool-call rows
- fix(FN-3020): restore custom provider type compatibility for typecheck
- test(FN-3020): complete Step 2 — add quick-chat mobile tool-call regressions
- feat(FN-3020): complete Step 1 — keep compact tool-call rows single-line
Files changed:
docs/dashboard-guide.md | 1 +
.../quick-chat-tool-calls-mobile-layout.test.ts | 46 ++++++++++++++++++++++
.../app/components/CustomProvidersSection.tsx | 25 +++++++++++-
packages/dashboard/app/components/QuickChatFAB.css | 37 +++++++++++++----
packages/dashboard/app/components/QuickChatFAB.tsx | 7 ++--
.../app/components/__tests__/QuickChatFAB.test.tsx | 18 +++++++--
6 files changed, 119 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-3020
2026-04-30 00:10:42 -07:00
Fusion
18d97ca028
feat(FN-3007): merge fusion/fn-3007
...
Commits merged:
- feat(FN-3007): complete Step 4 — document system memory usage bar
- fix(FN-3007): restore custom provider mapper type compatibility
- test(FN-3007): complete Step 2 — cover memory bar semantics and severity
- feat(FN-3007): complete Step 1 — add semantic memory usage progressbar
- test(FN-3007): complete Step 2 — cover memory usage progress semantics
- feat(FN-3007): complete Step 1 — add system memory usage bar
Files changed:
docs/architecture.md | 2 +-
.../app/components/ModelOnboardingModal.tsx | 27 ++++++------
.../dashboard/app/components/SettingsModal.tsx | 27 ++++++------
.../dashboard/app/components/SystemStatsModal.css | 48 ++++++++++++++++++++++
.../dashboard/app/components/SystemStatsModal.tsx | 29 +++++++++++--
.../components/__tests__/SystemStatsModal.test.tsx | 33 +++++++++++++++
6 files changed, 133 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-3007
2026-04-29 23:54:29 -07:00
Fusion
8c641a8291
feat(FN-3006): merge fusion/fn-3006
...
Commits merged:
- fix(FN-3006): complete Step 3 — repair dashboard typecheck mapper signatures
- test(FN-3006): complete Step 2 — cover Use default reselection flow
- feat(FN-3006): complete Step 1 — resolve default model selection target
Files changed:
.../app/components/ModelOnboardingModal.tsx | 24 ++++++---
packages/dashboard/app/components/QuickChatFAB.tsx | 13 +++--
.../dashboard/app/components/SettingsModal.tsx | 24 ++++++---
.../app/components/__tests__/QuickChatFAB.test.tsx | 61 ++++++++++++++++++++++
4 files changed, 103 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-3006
2026-04-29 23:43:41 -07:00
Fusion
74989993a3
feat(FN-2964): merge fusion/fn-2964
...
Commits merged:
- test(FN-2964): complete Step 2 — cover custom providers disclosure behavior
- feat(FN-2964): complete Step 1 — embed custom providers disclosure in onboarding
- fix(FN-2963): reuse shared onboarding disclosure for custom providers
- fix(FN-2963): address disclosure focus ring and mobile touch target
- fix(FN-2963): align custom providers disclosure with shared pattern
- feat(FN-2963): apply inline edit UX and tokenized custom provider styles
- fix(FN-2963): align custom providers UI with auth patterns
- fix(FN-2963): complete Step 5 — resolve lint gate in providers section
- test(FN-2963): complete Step 4 — add custom providers section tests
- feat(FN-2963): complete Step 3 — integrate custom providers section
- feat(FN-2963): complete Step 2 — add custom providers section styles
- feat(FN-2963): complete Step 1 — create custom providers section component
- feat(FN-2961): complete Step 6 — document custom provider settings
- test(FN-2961): complete Step 4 — cover custom provider routes
- feat(FN-2961): complete Step 3 — add custom provider API client
- feat(FN-2961): complete Step 2 — add custom provider CRUD routes
- feat(FN-2961): complete Step 1 — add custom provider core types
Files changed:
.../app/components/CustomProvidersSection.css | 138 +++++++
.../app/components/CustomProvidersSection.tsx | 425 +++++++++++++++++++++
.../app/components/ModelOnboardingModal.css | 60 ---
.../app/components/OnboardingDisclosure.css | 67 ++++
.../app/components/OnboardingDisclosure.tsx | 38 ++
.../__tests__/CustomProvidersSection.test.tsx | 237 ++++++++++++
.../__tests__/ModelOnboardingModal.test.tsx | 67 +++-
7 files changed, 967 insertions(+), 65 deletions(-)
Fusion-Task-Id: FN-2964
2026-04-29 23:39:18 -07:00
gsxdsm
c1c5ba6f43
chore(release): v0.9.3
...
Version bump via changesets.
2026-04-29 23:20:40 -07:00
gsxdsm
2c464c2949
fix(engine): widen mutableTask.column type in executor test
...
The `as const` annotation narrowed column to "in-progress" only, breaking
tsc build when the moveTask mock assigned "todo".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 23:19:10 -07:00
gsxdsm
2e949895e2
fix(FN-3005): restore unrelated heartbeat files
2026-04-29 23:14:51 -07:00
gsxdsm
ffa116a238
fix(FN-3005): preserve card timer across reruns
2026-04-29 23:13:38 -07:00
gsxdsm
a3617850f5
fix(heartbeat): per-agent HEARTBEAT.md and phase-aligned scheduler
...
Each agent now gets its own .fusion/agents/<id>/HEARTBEAT.md procedure
file instead of sharing a single project-wide file. A one-shot
migration in AgentStore.init() re-points existing agents off the legacy
shared path and copies the legacy file's contents into each agent's
new per-agent location so operator edits are preserved.
The HeartbeatTriggerScheduler now phase-aligns the first tick to
lastHeartbeatAt + intervalMs so a process restart resumes each agent's
existing schedule rather than waiting up to a full interval before
firing again. Overdue ticks fire promptly within a small jitter window
to avoid a thundering herd at boot.
Also fixes three pre-existing QuickChatFAB test failures introduced by
739e899b5 : auto-select default model now switches to model mode whether
or not agents are present, the model tag only renders in model mode,
and one test scopes its option lookup to role="option" to disambiguate
the in-header tag from the dropdown entry.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 23:08:21 -07:00
gsxdsm
739e899b59
fix(quick-chat): auto-select default model, fix new-chat button contrast, autofocus input
...
- Pre-select the global default (or first available) model on first open so
users can chat without manually picking from the dropdown.
- Bump specificity of the new-chat (+) button styles so the CTA bg/text
applies instead of being overridden by the header's .btn-icon rule.
- Focus the message input on panel open via rAF.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 22:45:17 -07:00
gsxdsm
c7ff1b68d4
fix: unify CLI version resolver across TUI and dashboard
...
The TUI splash/footer and the dashboard /api/health + /api/updates/check
each had their own walk-up resolver with different rules, so they could
report different versions and trigger spurious update-available banners.
Dashboard now uses a direct ancestor walk (matching the TUI's old logic)
and only falls back to the sibling-cli probe for dashboard-source dev
mode; logo.ts delegates to it so there is one source of truth.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 22:37:52 -07:00
gsxdsm
ab1afdc940
chore(release): v0.9.2
...
Version bump via changesets.
2026-04-29 22:27:14 -07:00
Fusion
e3c99ef290
feat(FN-3005): merge fusion/fn-3005
...
Commits merged:
- fix(FN-3005): restore dashboard typecheck for custom providers
- feat(FN-3005): complete Step 1 — use explicit mode labels
- test(FN-3005): complete Step 3 — assert explicit mode toggle labels
- feat(FN-3005): complete Step 2 — fit explicit mode labels in header
Files changed:
packages/dashboard/app/components/ModelOnboardingModal.tsx | 2 +-
packages/dashboard/app/components/QuickChatFAB.css | 4 ++--
packages/dashboard/app/components/QuickChatFAB.tsx | 4 ++--
packages/dashboard/app/components/SettingsModal.tsx | 6 +++---
packages/dashboard/app/components/__tests__/QuickChatFAB.test.tsx | 4 ++--
5 files changed, 10 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-3005
2026-04-29 22:25:20 -07:00
Fusion
c5de7e183b
feat(FN-2991): merge fusion/fn-2991
...
Commits merged:
- fix(FN-2991): align failed research status badge semantics
- feat(FN-2991): add research dashboard view and navigation entry
- fix(FN-2991): complete Step 8 — resolve lint and typecheck gates
- test(FN-2991): address review feedback for Step 7
- test(FN-2991): complete Step 7 — add research store and route tests
- feat(FN-2991): complete Step 6 — add research client API helpers
- feat(FN-2991): complete Step 5 — add research REST routes
- feat(FN-2991): complete Step 4 — wire research store into core exports
- feat(FN-2991): complete Step 3 — implement research store
- feat(FN-2991): complete Step 2 — add research schema and migration
- feat(FN-2991): complete Step 1 — add research domain types
Files changed:
packages/core/src/__tests__/db.test.ts | 26 +-
packages/core/src/__tests__/insight-store.test.ts | 8 +-
packages/core/src/__tests__/mission-store.test.ts | 2 +-
packages/core/src/__tests__/research-store.test.ts | 118 +++++++
packages/core/src/__tests__/roadmap-store.test.ts | 2 +-
packages/core/src/__tests__/run-audit.test.ts | 2 +-
packages/core/src/__tests__/task-documents.test.ts | 2 +-
packages/core/src/db.ts | 82 ++++-
packages/core/src/index.ts | 30 ++
packages/core/src/research-store.ts | 377 +++++++++++++++++++++
packages/core/src/research-types.ts | 162 +++++++++
packages/core/src/store.ts | 14 +
packages/dashboard/app/App.tsx | 12 +
.../app/api/__tests__/research-api.test.ts | 120 +++++++
packages/dashboard/app/api/legacy.ts | 132 +++++++-
packages/dashboard/app/components/Header.tsx | 23 +-
packages/dashboard/app/components/MobileNavBar.tsx | 16 +-
packages/dashboard/app/components/ResearchView.css | 110 ++++++
packages/dashboard/app/components/ResearchView.tsx | 145 ++++++++
.../app/components/__tests__/Header.test.tsx | 4 +-
.../app/components/__tests__/ResearchView.test.tsx | 170 ++++++++++
packages/dashboard/app/hooks/useViewState.ts | 3 +-
packages/dashboard/src/research-routes.ts | 223 ++++++++++++
.../src/routes/register-integrated-routers.ts | 2 +
24 files changed, 1751 insertions(+), 34 deletions(-)
Fusion-Task-Id: FN-2991
2026-04-29 22:21:27 -07:00
Fusion
b78dd3e055
feat(FN-3011): merge fusion/fn-3011
...
Commits merged:
- test(FN-3011): complete Step 2 — harden light-theme source assertions
- feat(FN-3011): complete Step 1 — restore global token scope
- fix(FN-3011): complete Step 3 — satisfy lint/test/typecheck/build gates
- test(FN-3011): complete Step 2 — harden light-theme source assertions
- feat(FN-3011): complete Step 1 — restore default light token ownership
Files changed:
.../app/__tests__/status-colors-theme.test.ts | 100 +++++--
.../app/components/CustomModelDropdown.css | 6 -
.../__tests__/ModelOnboardingModal.test.tsx | 4 +-
packages/dashboard/app/styles.css | 299 +++++++++++----------
packages/dashboard/app/test/cssFixture.ts | 11 +-
5 files changed, 242 insertions(+), 178 deletions(-)
Fusion-Task-Id: FN-3011
2026-04-29 22:18:18 -07:00
Fusion
a039e2cf27
feat(FN-3018): merge fusion/fn-3018
...
- **feat(engine): sanitize cwd from createFnAgent startup log** — prevents worktree paths from leaking into engine diagnostic logs
- **test(engine): add regression test for cwd redaction** — verifies working directory is not present in logged output
- **test(engine): update routes-agent-skills test** — minimal addition to coverage
- **test(dashboard): stabilize TaskCard test** — fixes flakiness in full-suite gate
Commits merged:
- test(FN-3018): stabilize dashboard tests for full-suite gate
- test(FN-3018): complete Step 2 — add cwd redaction regression
- feat(FN-3018): complete Step 1 — sanitize createFnAgent startup log
Files changed:
.../app/components/__tests__/TaskCard.test.tsx | 2 +-
.../src/__tests__/routes-agent-skills.test.ts | 1 +
.../src/__tests__/pi-create-fn-agent.test.ts | 28 ++++++++++++++++++++++
packages/engine/src/pi.ts | 2 +-
4 files changed, 31 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-3018
2026-04-29 22:09:05 -07:00
Fusion
e571e701c9
fix(FN-3010): widen quick entry model menu on desktop
...
- Increase desktop nested model menu width baseline for better model-name readability
- Raise desktop width floor from 240px to 320px while preserving viewport clamping
- Replace hardcoded QuickEntryBox menu spacing/shadow/radius values with design tokens
- Update QuickEntryBox nested menu tests to assert the new desktop width behavior
Fusion-Task-Id: FN-3010
2026-04-29 21:57:46 -07:00
gsxdsm
91ad41e172
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
c3d2e98f81
feat(FN-3004): merge fusion/fn-3004
...
- **New `fn custom-provider` CLI commands** (`register`, `unregister`, `list`) for managing custom AI providers; `dashboard.ts` and `serve.ts` now initialize the registry, and `packages/engine/src/custom-providers.ts` exposes the engine integration
- **Custom provider registration API** in `packages/dashboard/src/routes/register-agent-core-routes.ts` with `POST /api/agent-core/register-custom-provider`; providers are persisted in `store.ts` and exposed via `GET /api/agent-core/custom-providers`
- **Agent heartbeat improvements** (`packages/engine/src/agent-heartbeat.ts`): clearer conflict semantics when task is checked out by another agent, refactored `WakeContext` handling, and budget enforcement at heartbeat time
- **Inline quick chat composer** (FN-3004): `QuickChatFAB` reworked with inline attachment row, improved prompt template logic, and full TypeScript coverage in `QuickChatFAB.test.tsx`
- **Settings and onboarding**: `SettingsModal.tsx` surfaces custom provider management; `ModelOnboardingModal.tsx` updated to use the new registry
- **Agent instructions expanded** (`packages/engine/src/agent-instructions.ts`): richer system prompt injection for spawned agents including agent personality/soul, ratings context, and parent assignment details
- **`agent-store.ts`** now tracks `reportsTo` for spawned agent hierarchy and exposes `list_agents` and `delegate_task` tools via the pi extension
- **Database layer**: `db.ts` uses `prepareSelect()` helpers for query consistency; WAL mode enforced; foreign-key checks enabled in test suite
- **New tests**: `custom-provider-registry.test.ts`, `pi-create-fn-agent.test.ts`, `agent-heartbeat.test.ts`, `notifier.test.ts`, `routes.test.ts` for dashboard core routes, plus coverage for `QuickChatFAB`, `TaskCard`, and `UpdateAvailableBanner`
- **TaskCard**: status badge now uses `--card-status-badge--{status}` CSS classes instead of inline style helpers; `TaskCard.test.tsx` updated to match
Commits merged:
- fix(FN-3004): restore dashboard typecheck for custom provider state
- test(FN-3004): complete Step 2 — cover inline composer attachment row
- feat(FN-3004): complete Step 1 — inline quick chat composer row
- feat(FN-3003): merge fusion/fn-3003
- feat(FN-2962): merge fusion/fn-2962
- fix(FN-XXX): update release notes link in update notification
Files changed:
.changeset/fix-update-release-notes-link.md | 5 +
.changeset/register-custom-providers.md | 5 +
docs/architecture.md | 2 +
.../__tests__/custom-provider-registry.test.ts | 167 +++++++++++++++++++++
.../cli/src/commands/__tests__/dashboard.test.ts | 4 +
packages/cli/src/commands/__tests__/serve.test.ts | 3 +
.../cli/src/commands/custom-provider-registry.ts | 96 ++++++++++++
packages/cli/src/commands/dashboard.ts | 28 ++++
packages/cli/src/commands/serve.ts | 28 ++++
packages/core/src/__tests__/db.test.ts | 26 ++--
packages/core/src/__tests__/insight-store.test.ts | 8 +-
packages/core/src/__tests__/mission-store.test.ts | 2 +-
packages/core/src/__tests__/roadmap-store.test.ts | 2 +-
packages/core/src/__tests__/run-audit.test.ts | 2 +-
packages/core/src/__tests__/task-documents.test.ts | 2 +-
packages/core/src/agent-store.ts | 16 +-
packages/core/src/db.ts | 13 +-
packages/core/src/index.ts | 2 +-
packages/core/src/store.ts | 35 ++++-
packages/core/src/types.ts | 33 ++++
packages/dashboard/app/api/legacy.ts | 11 ++
.../dashboard/app/components/AgentDetailView.tsx | 92 +++++++++++-
.../app/components/ModelOnboardingModal.tsx | 15 +-
packages/dashboard/app/components/QuickChatFAB.css | 19 ++-
packages/dashboard/app/components/QuickChatFAB.tsx | 95 ++++++------
.../dashboard/app/components/SettingsModal.tsx | 39 ++++-
packages/dashboard/app/components/TaskCard.tsx | 46 ++++--
.../app/components/UpdateAvailableBanner.tsx | 2 +-
.../app/components/__tests__/QuickChatFAB.test.tsx | 23 +++
.../app/components/__tests__/TaskCard.test.tsx | 2 +-
.../__tests__/UpdateAvailableBanner.test.tsx | 2 +-
.../src/__tests__/routes-agent-skills.test.ts | 1 +
packages/dashboard/src/__tests__/routes.test.ts | 34 +++++
.../src/routes/register-agent-core-routes.ts | 78 ++++++++++
.../dashboard/src/routes/register-git-github.ts | 16 +-
.../engine/src/__tests__/agent-heartbeat.test.ts | 59 ++++++++
packages/engine/src/__tests__/notifier.test.ts | 33 ++++
.../src/__tests__/pi-create-fn-agent.test.ts | 36 +++++
.../engine/src/__tests__/project-engine.test.ts | 53 ++++++-
packages/engine/src/agent-heartbeat.ts | 86 ++++++++++-
packages/engine/src/agent-instructions.ts | 103 ++++++++++++-
packages/engine/src/custom-providers.ts | 15 ++
packages/engine/src/index.ts | 3 +
packages/engine/src/notifier.ts | 3 +-
packages/engine/src/pi.ts | 30 ++++
packages/engine/src/project-engine.ts | 12 +-
46 files changed, 1254 insertions(+), 133 deletions(-)
Fusion-Task-Id: FN-3004
2026-04-29 21:53:55 -07:00
Fusion
7211363845
feat(FN-3003): merge fusion/fn-3003
...
- Unify notification service ownership across the engine: `Notifier` now operates on `ProjectEngine` rather than its own `Core` reference, resolving stale-closure issues during engine lifecycle
- Add regression tests in `notifier.test.ts` covering merge dedupe wiring and ownership initialization
- Expand `project-engine.test.ts` to cover ownership state transitions and `ProjectEngine`-notifier integration
- Fix TypeScript regressions in `ModelOnboardingModal.tsx` and `SettingsModal.tsx` introduced by custom provider types
- Document the notification ownership model in `docs/architecture.md`
Commits merged:
- feat(FN-3003): complete Step 4 — document notification ownership model
- fix(FN-3003): resolve dashboard custom provider typecheck regressions
- test(FN-3003): complete Step 2 — add merge dedupe wiring regressions
- feat(FN-3003): complete Step 1 — unify notification service ownership
Files changed:
docs/architecture.md | 2 +
.../app/components/ModelOnboardingModal.tsx | 13 +++++-
.../dashboard/app/components/SettingsModal.tsx | 17 +++++--
packages/engine/src/__tests__/notifier.test.ts | 33 ++++++++++++++
.../engine/src/__tests__/project-engine.test.ts | 53 +++++++++++++++++++---
packages/engine/src/notifier.ts | 3 +-
packages/engine/src/project-engine.ts | 12 +++--
7 files changed, 116 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-3003
2026-04-29 21:48:13 -07:00
Fusion
38f5159719
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
476d17e2ca
fix(FN-XXX): update release notes link in update notification
2026-04-29 21:33:18 -07:00
Fusion
fec6cd82ec
feat(FN-2990): merge fusion/fn-2990
...
- Finalize the downstream porting plan in `docs/research/pi-autoresearch-analysis.md` with updated guidance and recommendations
Commits merged:
- docs(FN-2990): complete Step 6 — finalize downstream porting plan
Files changed:
docs/research/pi-autoresearch-analysis.md | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-2990
2026-04-29 20:58:34 -07:00
gsxdsm
e75a22c656
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
56fd8712c5
feat(FN-2961): merge fusion/fn-2961
...
- Add documentation for custom provider settings in the settings reference (`docs/settings-reference.md`)
Commits merged:
- feat(FN-2961): complete Step 6 — document custom provider settings
Files changed:
docs/settings-reference.md | 1 +
1 file changed, 1 insertion(+)
Fusion-Task-Id: FN-2961
2026-04-29 20:41:41 -07:00
Fusion
101567052c
feat(FN-2989): merge fusion/fn-2989
...
- Add `CustomProviderForm` component and routing for user-defined OpenAI/Anthropic-compatible endpoints (FN-2987)
- Expand `agent-heartbeat.ts` with richer prompt guidance and criteria updates
- Strengthen executor prompts in `executor.ts` with expanded implementation guidance
- Enrich reviewer prompts in `reviewer.ts` with enhanced review criteria
- Add triage prompt guidance in `triage.ts` for task classification
- Extend merger prompts in `merger.ts` with merge strategy guidance
- Add `agent-document-tools.test.ts` and `agent-tools.test.ts` integration tests
- Expand `store.ts` with new task/document operations; add `task-documents.test.ts` and `store.test.ts`
- Add legacy API route in `dashboard/app/api/legacy.ts` and auth path routing
- Update `ModelOnboardingModal` with custom provider onboarding flow
- Extend `SettingsModal` with custom provider configuration UI and mobile layout tests
- Add changeset for `@runfusion/fusion` minor release
Commits merged:
- feat(FN-2989): complete Step 5 — enrich remaining agent prompts
- feat(FN-2989): complete Step 4 — enrich reviewer prompt criteria
- feat(FN-2989): complete Step 3 — strengthen triage prompt guidance
- feat(FN-2989): complete Step 2 — expand executor guidance prompts
- feat(FN-2989): complete Step 1 — expand heartbeat prompts
- feat(FN-2987): merge fusion/fn-2987
- feat(FN-2959): merge fusion/fn-2959-2
Files changed:
.changeset/custom-openai-anthropic-providers.md | 5 +
docs/task-management.md | 4 +
packages/core/src/__tests__/store.test.ts | 38 +++
packages/core/src/__tests__/task-documents.test.ts | 32 +++
packages/core/src/store.ts | 34 ++-
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 +
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 +++++++++++++++++++++
.../src/__tests__/agent-document-tools.test.ts | 15 ++
packages/engine/src/__tests__/agent-tools.test.ts | 43 ++++
packages/engine/src/agent-heartbeat.ts | 107 +++++++--
packages/engine/src/agent-reflection.ts | 7 +-
packages/engine/src/agent-tools.ts | 28 ++-
packages/engine/src/cron-runner.ts | 4 +
packages/engine/src/executor.ts | 69 +++++-
packages/engine/src/merger.ts | 26 ++-
packages/engine/src/mission-execution-loop.ts | 6 +
packages/engine/src/reviewer.ts | 24 ++
packages/engine/src/step-session-executor.ts | 11 +-
packages/engine/src/triage.ts | 20 ++
33 files changed, 1407 insertions(+), 42 deletions(-)
Fusion-Task-Id: FN-2989
2026-04-29 20:27:04 -07:00
Fusion
9d3a4c7ca5
feat(FN-2987): merge fusion/fn-2987
...
- **Archived task read-only enforcement** — `packages/core/src/store.ts` adds guards that prevent log entries and documents from being written to archived tasks; `packages/engine/src/agent-tools.ts` surfaces meaningful errors instead of silent failures when tools are called on archived tasks
- **Type safety for archived guards** — resolved typecheck issues around the archived-task write guards in core
- **Tests for archived behavior** — added regression coverage in `packages/core/src/__tests__/store.test.ts` and `packages/core/src/__tests__/task-documents.test.ts`; also added `packages/engine/src/__tests__/agent-tools.test.ts` to cover archived-task error paths
- **Documentation** — updated `docs/task-management.md` to document the archived read-only behavior
- **Also merged** `fusion/fn-2959-2` (CustomProviderForm component, SettingsModal routing, custom provider API routes, and associated tests)
Commits merged:
- feat(FN-2987): complete Step 6 — document archived read-only behavior
- fix(FN-2987): complete Step 5 — resolve typecheck for archived guards
- test(FN-2987): complete Step 4 — add archived-task regression coverage
- feat(FN-2987): complete Step 3 — handle archived log tool errors
- feat(FN-2987): complete Step 2 — enforce archived document write guard
- feat(FN-2987): complete Step 1 — harden archived logEntry checks
- feat(FN-2959): merge fusion/fn-2959-2
Files changed:
.changeset/custom-openai-anthropic-providers.md | 5 +
docs/task-management.md | 4 +
packages/core/src/__tests__/store.test.ts | 38 +++
packages/core/src/__tests__/task-documents.test.ts | 32 +++
packages/core/src/store.ts | 34 ++-
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 +
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 +++++++++++++++++++++
.../src/__tests__/agent-document-tools.test.ts | 15 ++
packages/engine/src/__tests__/agent-tools.test.ts | 43 ++++
packages/engine/src/agent-tools.ts | 28 ++-
24 files changed, 1166 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-2987
2026-04-29 20:18:46 -07:00
Fusion
567873bc02
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
9b53fa46e8
feat(FN-2975): merge fusion/fn-2975
...
- Stabilize QuickChatFAB search refresh lifecycle to prevent redundant or stale queries (`useTasks.ts`, `QuickChatFAB.tsx`)
- Add unit tests for QuickChatFAB component and `useTasks` hook
- Refactor QuickChatFAB styles and component structure
Commits merged:
- feat(FN-2975): complete Step 2 — stabilize search refresh lifecycle
- feat(FN-2972): merge fusion/fn-2972
Files changed:
packages/dashboard/app/components/QuickChatFAB.css | 60 ++++++++++++++++----
packages/dashboard/app/components/QuickChatFAB.tsx | 65 +++++++++++-----------
.../app/components/__tests__/QuickChatFAB.test.tsx | 32 +++++++++++
.../dashboard/app/hooks/__tests__/useTasks.test.ts | 48 ++++++++++++++++
packages/dashboard/app/hooks/useTasks.ts | 4 +-
5 files changed, 165 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-2975
2026-04-29 19:43:50 -07:00
Fusion
e5157a96f8
feat(FN-2972): merge fusion/fn-2972
...
- `FileBrowserModal`: adds full file browser to modal view with multi-select, row/grid/list view toggle, sorting, path breadcrumb navigation, and inline path editing; wires it into `TaskDetailModal` attachment panel
- `TaskDetailModal`: adds attachment management tab with drag-and-drop file picker backed by the new FileBrowserModal; includes responsive CSS reflow for attachment list
- `QuickChatFAB`: restyles the FAB toggle and collapse animation; adds compact header control variant with consistent icon/button sizing
- `TaskDetailModal.css`, `QuickChatFAB.css`, `FileBrowser.css`: sizing and alignment refinements across header controls and FAB transitions
- `task.ts`: adds `getFilesDiff()` helper exported for use by the dashboard attachment panel
- Tests added for `FileBrowserModal`, `QuickChatFAB`, and `TaskDetailModal` attachment flow; `task.test.ts` covers the new `getFilesDiff()` function
- Minor `docs/cli-reference.md` update
Commits merged:
- feat(FN-2972): complete Step 3 — align header control sizing
- fix(FN-2972): complete Step 2 — align header toggle control sizing
- test(FN-2972): complete Step 3 — cover compact header controls
- feat(FN-2972): complete Step 2 — compact quick chat header controls
- feat(FN-2972): complete Step 1 — move mode toggle into header actions
- feat(FN-2973): merge fusion/fn-2973
- feat(FN-2924): merge fusion/fn-2924
Files changed:
docs/cli-reference.md | 3 +-
packages/cli/src/commands/__tests__/task.test.ts | 44 ++++-
packages/cli/src/commands/task.ts | 55 ++++++
packages/dashboard/app/components/FileBrowser.css | 65 +++++--
.../dashboard/app/components/FileBrowserModal.tsx | 106 ++++++++++-
packages/dashboard/app/components/QuickChatFAB.css | 60 +++++--
packages/dashboard/app/components/QuickChatFAB.tsx | 65 +++----
.../dashboard/app/components/TaskDetailModal.css | 40 +++++
.../dashboard/app/components/TaskDetailModal.tsx | 82 ++++++++-
.../components/__tests__/FileBrowserModal.test.tsx | 195 +++++++++++++++++++++
.../app/components/__tests__/QuickChatFAB.test.tsx | 32 ++++
.../components/__tests__/TaskDetailModal.test.tsx | 81 ++++++++-
12 files changed, 761 insertions(+), 67 deletions(-)
Fusion-Task-Id: FN-2972
2026-04-29 19:15:23 -07:00
Fusion
182f0a4db3
feat(FN-2973): merge fusion/fn-2973
...
- Add resizable split pane to desktop sidebar with drag handle and resize state management
- Style the desktop sidebar resize handle using CSS design tokens
- Add keyboard resize support to both desktop sidebar and file browser modal (arrow keys, Page Up/Down)
- Tokenize FileBrowser styles following the dashboard CSS architecture; replace hardcoded values with CSS variables
- Add accessibility handling for resize handles including focus states and keyboard interactions
- Add FileBrowserModal tests covering keyboard resize behavior and accessibility patterns
Commits merged:
- test(FN-2973): complete Step 3 — cover keyboard resize and handle accessibility
- feat(FN-2973): complete Step 2 — tokenized file browser styles and handle focus state
- feat(FN-2973): complete Step 1 — add keyboard resize support
- test(FN-2973): complete Step 3 — add resizable split coverage
- feat(FN-2973): complete Step 2 — style desktop sidebar resize handle
- feat(FN-2973): complete Step 1 — add desktop sidebar resize state and handle
Files changed:
packages/dashboard/app/components/FileBrowser.css | 65 +++++--
.../dashboard/app/components/FileBrowserModal.tsx | 106 ++++++++++-
.../components/__tests__/FileBrowserModal.test.tsx | 195 +++++++++++++++++++++
3 files changed, 352 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-2973
2026-04-29 19:09:55 -07:00
Fusion
2fb18eac1f
feat(FN-2924): merge fusion/fn-2924
...
- Add task provenance display to TaskDetailModal, surfacing AI-generated merge commit summaries so users understand when and why tasks landed
- New `ai-summarize` module in core with structured commit summarization logic and tests
- Extend CLI `fn task show` with provenance output
- Refactor merger to produce cleaner merge commit messages with task context
- Update SettingsModal to expose AI summarization toggle (hidden behind feature flag)
- Adjust QuickChatFAB styling for theme compatibility
- Update scheduler and node-routing policy tests to match new behavior
- Add changeset for `@runfusion/fusion` minor release
Commits merged:
- feat(FN-2924): display task provenance in dashboard and cli
- feat(FN-2971): merge fusion/fn-2971
- feat(FN-2947): merge fusion/fn-2947
- feat(FN-2970): merge fusion/fn-2970
- feat(FN-2956): merge fusion/fn-2956
Files changed:
.changeset/add-ai-merge-commit-summary.md | 5 +
docs/cli-reference.md | 3 +-
docs/settings-reference.md | 3 +
packages/cli/src/commands/__tests__/task.test.ts | 44 ++++-
packages/cli/src/commands/task.ts | 55 +++++++
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/app/components/QuickChatFAB.css | 17 +-
packages/dashboard/app/components/QuickChatFAB.tsx | 2 +-
.../dashboard/app/components/SettingsModal.css | 11 +-
.../dashboard/app/components/SettingsModal.tsx | 22 ++-
.../dashboard/app/components/TaskDetailModal.css | 40 +++++
.../dashboard/app/components/TaskDetailModal.tsx | 82 +++++++++-
.../__tests__/SettingsModalNodeRouting.test.tsx | 12 +-
.../components/__tests__/TaskDetailModal.test.tsx | 81 ++++++++-
packages/engine/src/__tests__/merger.test.ts | 75 +++++++++
.../src/__tests__/node-routing-policy.test.ts | 25 ++-
.../src/__tests__/scheduler-node-routing.test.ts | 18 +-
packages/engine/src/merger.ts | 181 +++++++++------------
packages/engine/src/scheduler.ts | 8 +-
23 files changed, 723 insertions(+), 147 deletions(-)
Fusion-Task-Id: FN-2924
2026-04-29 18:01:59 -07:00
Fusion
ab80d5f022
feat(FN-2971): merge fusion/fn-2971
...
- Add AI-generated merge commit summaries to the CLI via a new `ai-summarize.ts` module with configurable summarization settings
- Add node routing policy routes for task workflow automation and planning subtasks in the dashboard API
- Add SettingsModal improvements: tab-based navigation, node routing policy settings, and a new AI summarization section
- Update SettingsModal CSS with scoped styles and update QuickChatFAB and ModelOnboardingModal CSS
- Add `AgentHeartbeatMonitor` budget override and improve agent heartbeat handling; update scheduler with new node routing checks
- Improve merger logic with new merge policy helpers, PR comment handlers, and routine runner integration
- Add extensive test coverage across engine (agent-tools, scheduler-node-routing, node-routing-policy, merger, cron-runner), core (ai-summarize), and dashboard (routes, api)
- Minor improvements to agent delegation tools, triage, executor, project-engine, and various dashboard components (TodoView, useTaskHandlers, onboarding-flow)
Commits merged:
- fix(FN-2971): complete Step 1 — scope attach button sizing
- feat(FN-2947): merge fusion/fn-2947
- 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
Files changed:
.changeset/add-ai-merge-commit-summary.md | 5 +
docs/settings-reference.md | 3 +
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/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 +
.../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 +--
.../app/components/ModelOnboardingModal.tsx | 5 +-
packages/dashboard/app/components/QuickChatFAB.css | 17 +-
packages/dashboard/app/components/QuickChatFAB.tsx | 2 +-
.../dashboard/app/components/SettingsModal.css | 11 +-
.../dashboard/app/components/SettingsModal.tsx | 22 ++-
packages/dashboard/app/components/TodoView.tsx | 2 +
.../__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__/useTaskHandlers.test.ts | 4 +-
packages/dashboard/app/hooks/useTaskHandlers.ts | 4 +-
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 +
.../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 +
54 files changed, 673 insertions(+), 183 deletions(-)
Fusion-Task-Id: FN-2971
2026-04-29 17:49:08 -07:00
Fusion
5c82c3f34a
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