Fusion
5701596315
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
9ee92de604
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
f0c9109388
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
e100f2ab7f
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
7c4242451e
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
c556200dc1
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
8b8cdcd8d2
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
7f9adb71e1
fix(FN-3005): restore unrelated heartbeat files
2026-04-29 23:14:51 -07:00
gsxdsm
bb9b0f1d1a
fix(FN-3005): preserve card timer across reruns
2026-04-29 23:13:38 -07:00
gsxdsm
d81fc9b2c7
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
ad4db8243 : 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
Fusion
79481b35f2
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
9d1489dcd0
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
e81d090d8e
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
04ee174b94
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
Fusion
065dad8cdb
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
5e58ab91cf
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
gsxdsm
6c051b1851
fix(FN-XXX): update release notes link in update notification
2026-04-29 21:33:18 -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
991a631738
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
fd8005e99b
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
7885f16066
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
42276db737
feat(FN-2970): merge fusion/fn-2970
...
- CSS: fix margin on the node routing description in SettingsModal (`SettingsModal.css`)
- Dashboard: add CSS regression test for node routing description alignment (`SettingsModalNodeRouting.test.tsx`)
- Engine: update node routing policy and scheduler logic for improved routing behavior (`scheduler.ts`)
- Engine: update node routing policy tests and scheduler routing tests to cover new behavior
Commits merged:
- test(FN-2970): add CSS regression test for node routing description
- fix(FN-2970): fix settings node routing description margin
- feat(FN-2956): merge fusion/fn-2956
Files changed:
.../dashboard/app/components/SettingsModal.css | 11 +++++++++-
.../__tests__/SettingsModalNodeRouting.test.tsx | 12 +++++++++--
.../src/__tests__/node-routing-policy.test.ts | 25 +++++++++++++++++++---
.../src/__tests__/scheduler-node-routing.test.ts | 18 ++++++++--------
packages/engine/src/scheduler.ts | 8 ++++---
5 files changed, 56 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-2970
2026-04-29 17:34:26 -07:00
Fusion
a285c2988b
feat(FN-2923): merge fusion/fn-2923
...
- Add task `source` provenance field tracking how tasks enter the system (e.g. `"manual"`, `"heartbeat"`, `"executor"`, `"triage"`, `"cron"`, `"routine"`)
- Wire `source` into shared create-task tools, executor agent, triage agent, cron runner, and routine runner
- Add `source` to heartbeat task creation in `agent-heartbeat.ts` and mission execution loop in `mission-execution-loop.ts`
- Wire `source` field into dashboard routes (`register-planning-subtask-routes.ts`, `register-task-workflow-routes.ts`) and GitHub integration (`register-git-github.ts`)
- Add `source` to the API layer and task store handlers in the dashboard
- Expose `source` in the `fn` CLI task command and `task-plan` extension tool
- Add integration tests for provenance across engine (agent-tools, agent-heartbeat, cron-runner, triage, pr-comment-handler) and dashboard routes
- Update existing tests to assert the correct source values
- Bulk-revert stale changeset files that were superseded by the v0.9.1 release commit
Commits merged:
- test(FN-2923): complete Step 14 — align tests with task source provenance
- test(FN-2923): complete Steps 12-13 — update and add provenance tests
- feat(FN-2923): complete Step 10 — wire CLI task provenance
- feat(FN-2923): complete Step 9 — wire dashboard UI and API source fields
- feat(FN-2923): complete Step 8 — wire dashboard route provenance
- feat(FN-2923): complete Step 7 — wire remaining engine provenance
- feat(FN-2923): complete Step 6 — add routine create-task provenance
- feat(FN-2923): complete Step 5 — add cron create-task provenance
- feat(FN-2923): complete Step 4 — add triage subtask source
- feat(FN-2923): complete Step 3 — add executor create-task source
- feat(FN-2923): complete Step 2 — add heartbeat task provenance
- feat(FN-2923): complete Step 1 — add provenance to shared create-task tools
- feat(FN-2945): merge fusion/fn-2945
- chore(release): v0.9.1
Files changed:
.changeset/active-agents-no-stuck-connecting.md | 13 ---
.changeset/active-agents-panel-hoist-heartbeat.md | 13 ---
.changeset/fix-agent-heartbeat-terminal-links.md | 5 --
.changeset/fix-experimental-defaults.md | 5 --
.changeset/improve-git-manager-diff-pane.md | 5 --
.changeset/insights-two-pane-layout.md | 5 --
.changeset/show-planning-tasks-immediately.md | 5 --
CHANGELOG.md | 92 ++++++++++++++++++++++
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/dashboard/CHANGELOG.md | 14 ++++
.../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/TodoView.tsx | 2 +
.../__tests__/ModelOnboardingModal.test.tsx | 4 +-
.../app/components/__tests__/QuickChatFAB.test.tsx | 14 +---
.../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/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 +
.../src/__tests__/pr-comment-handler.test.ts | 8 ++
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/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/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 +-
78 files changed, 499 insertions(+), 115 deletions(-)
Fusion-Task-Id: FN-2923
2026-04-29 17:23:22 -07:00
Fusion
8d559fb079
feat(FN-2945): merge fusion/fn-2945
...
- Fix org chart connector alignment in `AgentsView.css` — connectors now properly align with their target nodes
- Update `agent-css-classes.test.ts` and `agents-view-mobile.test.tsx` to reflect CSS class changes
Commits merged:
- fix(FN-2945): complete Step 2 — pass lint test typecheck build gates
- fix(FN-2945): complete Step 1 — align org chart connector geometry
- fix(FN-2945): complete Step 1 — align org chart connectors
Files changed:
.../app/__tests__/agent-css-classes.test.ts | 3 ++-
packages/dashboard/app/components/AgentsView.css | 22 +++++++++++-----------
.../__tests__/agents-view-mobile.test.tsx | 5 ++---
3 files changed, 15 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-2945
2026-04-29 16:55:20 -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
Fusion
fb31f37b99
feat(FN-2943): improve auth UX, agent panel status, and task lifecycle handling
...
- Add settings content scroll refs and trigger scroll-to-top after successful sign-in and sign-up flows with regression coverage
- Keep task card merge timers live during active merges and add SSE support for task timing refresh
- Hoist Active Agents panel above the main list, add next-heartbeat visibility, and fix stale "Connecting..." card states
- Enforce unavailable-node scheduling guards and reset task steps when reopening tasks to triage or todo
Fusion-Task-Id: FN-2943
2026-04-29 14:41:28 -07:00
gsxdsm
e946ce9a89
feat(dashboard): hoist Active Agents panel above main list, show next heartbeat
...
Move ActiveAgentsPanel between AgentMetricsBar and the main agent
collection so live work is visible without scrolling past the whole
agent directory. Add a "Next heartbeat in Xs" line to each card
footer (or "Heartbeat overdue" when negative), driven by
runtimeConfig.heartbeatIntervalMs with the dashboard default fallback.
Give cards a pointer cursor + hover/focus styling so the existing
click-to-select behavior is discoverable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 14:26:58 -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
5542684370
fix(dashboard): keep card timer live while task is actively merging
...
The in-review timer chip was driven by per-step instrumented duration,
which is frozen during a merge (the merge phase isn't tracked as a
workflow step). A stuck merge could read "3m" indefinitely. While
status is "merging"/"merging-pr", show live elapsed since updatedAt
(set by the merger at status flip) with a "Merging Nm" tooltip.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 14:02:24 -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
79e4ce4617
feat(dashboard): auto-detect tailscale target port; clearer scan block
...
* Drop the Target port field from Settings — the dashboard already knows
what port it's serving on, so use window.location.port (falling back
to 80/443 by protocol). A user-overridable port adds no value and a
stale stored value silently misroutes the funnel.
* Restructure the running-tunnel scan block to show three rows: the
raw tailnet URL, the remote access code (rt= token, separate), and
the QR image. Previously the auth URL was rendered as one long string
that read as "the bare hostname" when truncated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 13:33:13 -07:00
Fusion
23e2c2514e
feat(FN-2932): improve active agent visibility and grouped tool-call UX
...
- Preserve and emphasize active agent card highlights across hover and modal states, with dedicated CSS updates and regression tests
- Expand dashboard and TUI activity surfaces for grouped tool-call and live agent status/log visibility, including Quick Chat and chat view refinements
- Add route and runtime updates for agent/settings flows plus self-healing coverage for merge recovery behavior
- Include accompanying changesets and test stabilizations for mission activity assertions and active highlight hooks
Fusion-Task-Id: FN-2932
2026-04-29 13:29:00 -07:00
Fusion
ddd6b90777
feat(FN-2926): enhance grouped tool-call UX across dashboard and TUI
...
- Inline grouped tool-call rendering in chat surfaces and update summary logic for clearer aggregation
- Refine chat, quick FAB, settings, and agents UI styles/behavior with matching test coverage updates
- Extend dashboard TUI state/controller flow with status and shortcut improvements
- Update engine and dashboard route handling related to agent runs, settings memory sync, and remote access adapters
Fusion-Task-Id: FN-2926
2026-04-29 13:23:31 -07:00
gsxdsm
256e54dfef
feat(remote): real QR codes, live tailscale URL, TUI status & shortcut
...
* Replace placeholder /remote/qr SVG (URL drawn as text) with real QR
rendered via the qrcode package; add format=terminal returning ASCII
QR for the TUI.
* Resolve the public tailscale funnel URL from captured CLI output
instead of constructing http://<hostname>:<port> from a configured
hostname label — that label was never used by `tailscale funnel` and
produced a non-public URL in the auth/QR link.
* Drop hostname requirement from engine + UI; only target port matters.
* Tighten tailscale parseReadiness to require a URL on the matched line
so the tunnel manager doesn't lock in `running` before the URL line.
* TUI: poll remote status, show ● tunnel indicator + URL in MainHeader,
bind Ctrl+Q to a global QR overlay (terminal ASCII), and switch the
in-Settings K shortcut to render the same ASCII QR.
* Auto-poll remote status in the dashboard while in `starting`/`stopping`
so the UI flips to running without reopening the modal.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 13:20:03 -07:00
Fusion
a45a2268a6
feat(FN-2925): merge fusion/fn-2925
...
- Mobile header row polish: finalize QuickChatFAB CSS for mobile viewport handling, apply visual viewport height to quick chat panel, remove duplicate keyboard overlap subtraction
- Add `node-routing-policy.ts` with routing logic for mesh network nodes; expand scheduler node-routing tests with new policy coverage
- Improve reviewer decision logic and add reviewer test cases for changed behavior
- Refactor triage module (48 lines changed) with updated agent selection logic
- Update `AgentsView` component and styles; add `AgentsView.test.tsx` integration test
- Simplify `QuickChatFAB.test.tsx` test by removing CSS class permutation coverage
- Update architecture docs and settings reference to reflect new routing capabilities
Commits merged:
- fix(FN-2925): remove duplicate keyboard overlap subtraction
- feat(FN-2925): complete Step 5 — finalize mobile header row polish
- fix(FN-2925): apply visual viewport height to mobile quick chat panel
- feat(FN-2903): merge fusion/fn-2903
- feat(FN-2950): merge fusion/fn-2950
Files changed:
docs/architecture.md | 19 +--
docs/settings-reference.md | 2 +-
packages/dashboard/app/components/AgentsView.css | 20 +++-
packages/dashboard/app/components/AgentsView.tsx | 11 +-
packages/dashboard/app/components/QuickChatFAB.css | 32 ++++-
.../dashboard/app/components/SettingsModal.tsx | 4 +-
.../app/components/__tests__/AgentsView.test.tsx | 37 ++++++
.../app/components/__tests__/QuickChatFAB.test.tsx | 18 +--
.../src/__tests__/node-routing-policy.test.ts | 78 ++++++++++++
packages/engine/src/__tests__/reviewer.test.ts | 19 ++-
.../src/__tests__/scheduler-node-routing.test.ts | 131 ++++++++++++++++++++-
packages/engine/src/__tests__/triage.test.ts | 16 +--
packages/engine/src/node-routing-policy.ts | 45 +++++++
packages/engine/src/reviewer.ts | 33 ++++--
packages/engine/src/scheduler.ts | 44 ++++++-
packages/engine/src/triage.ts | 48 ++++----
16 files changed, 473 insertions(+), 84 deletions(-)
Fusion-Task-Id: FN-2925
2026-04-29 12:53:10 -07:00
gsxdsm
40e36f00ec
feat(FN-2903): merge fusion/fn-2903
2026-04-29 12:31:09 -07:00
Fusion
5c82bd65f9
feat(FN-2953): merge fusion/fn-2953
...
Commits merged:
- merge fusion/fn-2953
Fusion-Task-Id: FN-2953
2026-04-29 12:12:05 -07:00
gsxdsm
03b406676a
fix(FN-2877): restore task card timing and changes fallbacks
2026-04-29 11:42:37 -07:00
Fusion
171466e860
feat(FN-2910): merge fusion/fn-2910
...
Commits merged:
- merge fusion/fn-2910
Fusion-Task-Id: FN-2910
2026-04-29 10:20:34 -07:00
Fusion
9ed8402d63
feat(FN-2957): merge fusion/fn-2957
...
- test(FN-2957): complete Step 3 — cover bdo path rendering and CSS truncation
Fusion-Task-Id: FN-2957
2026-04-29 09:46:16 -07:00
Fusion
2865002e85
feat(FN-2853): merge fusion/fn-2853
...
- test(FN-2853): complete Step 1 — expand RoutingTab coverage
Fusion-Task-Id: FN-2853
2026-04-29 09:29:26 -07:00
Fusion
2c160a7f78
feat(FN-2958): merge fusion/fn-2958
...
- test(FN-2958): complete Step 2 — cover merging pinning sort behavior
Fusion-Task-Id: FN-2958
2026-04-29 09:21:30 -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
Fusion
4e8fb92bab
feat(FN-2730): merge fusion/fn-2730
...
- fix(FN-2729): silence ansi strip lint warning
- test(FN-2729): complete Step 10 — cover node health indicators
- feat(FN-2729): complete Step 9 — colorize CLI node status output
- feat(FN-2729): complete Step 8 — use NodeHealthDot in settings routing status
- test(FN-2729): align ListView node override option expectations
- feat(FN-2729): complete Step 7 — add bulk node status indicators
Fusion-Task-Id: FN-2730
2026-04-29 09:11:44 -07:00
Fusion
910d5e9a9d
feat(FN-2729): merge fusion/fn-2729
...
- feat(FN-2729): align routing lock and bulk node status indicator
- feat(FN-2729): complete Step 4 — remove duplicated node status CSS
- feat(FN-2729): complete Step 3 — add routing summary health dot
- feat(FN-2729): complete Step 2 — adopt NodeHealthDot in InlineCreateCard
- feat(FN-2729): complete Step 1 — adopt NodeHealthDot in TaskForm
Fusion-Task-Id: FN-2729
2026-04-29 09:05:04 -07:00
gsxdsm
0576b10658
chore(dashboard): tidy stray workspace artifacts
...
Two pre-existing local modifications that had been sitting in the
working tree across this session, neither produced by the recovery /
fallback work in adjacent commits. Committing them so the tree is clean.
- packages/dashboard/app/components/SettingsModal.css
Removes one trailing blank line at end-of-file. No semantic change.
- packages/dashboard/app/components/__tests__/ListView.test.tsx
Drops one test case ("shows NodeHealthDot for selected bulk node
override", 15 lines) from the "ListView - Bulk Selection" describe
block. The test asserted that selecting a bulk node override
rendered a `.status-dot--online` indicator in the DOM. Sibling tests
(option labels, batchUpdateTaskModels invocation) are preserved.
Likely debris from the FN-2729 NodeHealthDot work that didn't survive
one of the in-flight squash merges; the underlying behavior is still
exercised by the kept tests.
Verified: pnpm --filter @fusion/dashboard test ListView passes
(125/125), so the removed assertion isn't load-bearing.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-29 08:57:44 -07:00
Fusion
d149f45c93
feat(FN-2729): unify node status indicator with NodeHealthDot
...
- Resolve merge conflicts in InlineCreateCard and QuickEntryBox using the existing node picker UX
- Replace ad-hoc node status rendering with NodeHealthDot in task creation surfaces
- Keep advanced quick-create controls and portal-based dropdown behavior intact
- Preserve related dashboard styling and tests included in the staged squash
Fusion-Task-Id: FN-2729
2026-04-29 08:15:01 -07:00
Fusion
f577b4a4f7
feat(FN-2948): merge fusion/fn-2948
...
- feat(FN-2948): complete Step 5 — apply review feedback and finalize delivery
- test(FN-2948): complete Step 3 — update insights section visibility coverage
- feat(FN-2948): complete Step 2 — enhance insight item readability
- feat(FN-2948): complete Step 1 — hide empty insight sections
- feat(FN-2939): merge fusion/fn-2939
- feat(FN-2946): merge fusion/fn-2946
Fusion-Task-Id: FN-2948
2026-04-29 02:42:57 -07:00
Fusion
6ec0b23cb5
feat(FN-2941): merge fusion/fn-2941
...
- feat(FN-2941): complete Step 6 — apply review feedback
Fusion-Task-Id: FN-2941
2026-04-29 02:10:51 -07:00