Fusion
c0ff899fbb
feat(FN-3042): scale board typography and improve theme selector accessibil
...
Completes Step 2 of FN-3042 by scaling board typography styles across TaskCard and QuickEntryBox components, adding a new CustomModelDropdown stylesheet, and introducing keyboard focus-visible styles for theme selector controls. The merge includes new regression tests for board font scaling, resolve
Fusion-Task-Id: FN-3042
2026-04-30 23:24:29 -07:00
Fusion
d2848ca1d7
feat(FN-3043): formalize theme swatch sample contract
...
- Replace implicit theme swatch rendering with explicit sample definitions in the custom model dropdown styling
- Add ThemeSelectorSwatchContract regression tests to lock the swatch contract and prevent visual drift
- Restore workspace lint/typecheck gate behavior in onboarding-related settings flows
- Document the explicit swatch sample contract in dashboard README and related onboarding prompt/context updates
Fusion-Task-Id: FN-3043
2026-04-30 22:55:48 -07:00
gsxdsm
40620a9a50
fix(dashboard): keep mobile terminal header on a single row
...
Previously the mobile terminal header used flex-wrap to stack tabs and
the action cluster on separate rows. The actions now stay pinned to the
right edge of the header row while the tab bar flexes to fill remaining
width and remains horizontally scrollable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 21:26:54 -07:00
Fusion
2bbcadac6f
feat(FN-3025): add agent onboarding flow with launch gating
...
- Add backend onboarding session service and legacy API routes for start, state, and import/export generation
- Introduce experimental AgentOnboardingModal UI with stream-state handling, model selector wiring, and onboarding launch flow in AgentsView
- Add onboarding gating via prompt overrides/store updates and include search behavior fix for partial-match filtering
- Expand dashboard/core tests for onboarding API, modal behavior, agents/settings integration, and prompt override handling
Fusion-Task-Id: FN-3025
2026-04-30 21:20:56 -07:00
Fusion
d7fdff4c76
feat(FN-3009): migrate remote settings to global scope
...
This merge migrates Fusion's settings architecture to a unified global scope (FN-3009), consolidating settings types, defaults, merge semantics, updater logic, and routing into a centralized system that aligns dashboard remote settings with global configuration. Secondary changes include adding the
Fusion-Task-Id: FN-3009
2026-04-30 20:10:52 -07:00
Fusion
3443aed5cf
feat(FN-3039): bundle nerd font glyph asset and prioritize it in terminal f
...
Merges two features: FN-3039 bundles a 2.5MB Nerd Font glyph asset into the dashboard and updates the terminal to prioritize the bundled font, improving icon rendering across environments; FN-3035 tightens insight tool type definitions and adds corresponding tests. The CLI extension gains new tools
Fusion-Task-Id: FN-3039
2026-04-30 20:06:43 -07:00
Fusion
e6d39bfab3
feat(FN-3041): add QuickChatFAB enhancements, AgentLogViewer, insight tools
...
This merge adds an AgentLogViewer component, improves the NewAgentDialog and QuickChatFAB with mobile keyboard awareness and custom model dropdowns, and introduces insight tools in the CLI extension with tightened typing and comprehensive test coverage. The theme system receives enhancements in `use
Fusion-Task-Id: FN-3041
2026-04-30 19:53:18 -07:00
Fusion
e3b320d494
feat(FN-3027): add AgentLogViewer, NewAgentDialog improvements, and AgentDe
...
This merge adds research settings to the settings modal and dashboard (FN-2839, FN-3029), implements a dashboard font scale setting with persistence and documentation (FN-3027), refactors AgentDetailView with a new AgentLogViewer CSS module (FN-2839), and improves NewAgentDialog with custom model dr
Fusion-Task-Id: FN-3027
2026-04-30 19:42:05 -07:00
Fusion
18fda0f744
feat(FN-3031): merge fusion/fn-3031
...
This merge adds a new **Research Settings** section to the settings modal and dashboard (ResearchView), including a new schema, types, and resolver exported for dashboard alias builds, along with comprehensive tests and documentation updates. It also makes task review step fields editable in the Tas
Fusion-Task-Id: FN-3031
2026-04-30 19:22:42 -07:00
Fusion
dac2597beb
feat(FN-3037): add focus-visible styling to AgentLogViewer log action butto
...
Adds `focus-visible` styling to action buttons in the AgentLogViewer component, improving keyboard accessibility for interactive button elements.
Fusion-Task-Id: FN-3037
2026-04-30 19:18:56 -07:00
Fusion
28e681900d
feat(FN-2995): export research settings resolver for dashboard alias builds
...
Exports the research settings resolver from `@fusion/core` types to fix dashboard alias builds, ensuring the resolver is available when imported through the dashboard's module alias configuration.
Fusion-Task-Id: FN-2995
2026-04-30 18:48:59 -07:00
Fusion
6334cd7ec3
feat(FN-3030): add heartbeat markdown viewer modal to AgentDetailView
...
Adds a heartbeat markdown viewer modal to the AgentDetailView (FN-3030) with styling, tests, and documentation for the feature, while also rendering multi-sample theme swatches in the ThemeSelector component (FN-3028).
Fusion-Task-Id: FN-3030
2026-04-30 18:28:01 -07:00
Fusion
9c49b5d6f0
feat(FN-3028): render multi-sample theme swatches in ThemeSelector
...
ThemeSelector now renders multi-sample theme swatches with richer styling; tests were updated to match and the swatch contract is documented in the dashboard README.
Fusion-Task-Id: FN-3028
2026-04-30 18:24:30 -07:00
Fusion
491097cd66
feat(FN-3026): use Nerd Font terminal stack with font fallback migration
...
Adds Nerd Font as the terminal font stack default with a migration to update existing user settings, updates the terminal and settings modals to reflect the new font choice, and includes corresponding tests plus a patch changeset for `@runfusion/fusion`.
Fusion-Task-Id: FN-3026
2026-04-30 14:49:10 -07:00
gsxdsm
98c3c22344
fix(engine): preserve step progress + worktree across internal task bounces
...
Workflow-step REVISE retries, pause→todo handoffs, and the
context-overflow fresh-session requeue were all routing tasks back to
`todo` before returning to `in-progress`. The default reopen-to-todo
path reset every step to pending and rewrote PROMPT.md checkboxes, so
each retry restarted from step 0 even when earlier steps had already
been done — the symptom seen on FN-2978, where every workflow REVISE
or pause cycle wiped the task's progress.
- Add `preserveResumeState` to `TaskStore.moveTask`. When set, skip
`resetAllStepsToPending` + `resetPromptCheckboxes` and keep
`worktree` and `executionStartedAt` so the resumed run reattaches to
the same checkout. `status`, `error`, and `blockedBy` still clear.
- Use it on the workflow-rerun bounce, the three pause-graceful
handoffs, and the context-overflow requeue. The agent-terminated
pause path still discards (it nukes worktree+branch by design).
- Context-overflow requeue clears `sessionFile` synchronously in the
awaited `updateTask` immediately before `moveTask`, so the next
dispatch cannot reopen the saturated session via a stale pointer.
- `fn_task_update` no longer silently regresses `done`/`skipped` steps
to `in-progress`, no longer captures a stale rewind checkpoint when
it does, and tells the agent honestly when a regression is ignored.
- Mobile chat keyboard: ChatView/QuickChatFAB gate layout on the new
`keyboardOpen` flag so focused-input + viewport-shrink iOS cases
still adjust when the computed overlap is zero.
Tests:
- New `preserveResumeState` coverage in store.test.ts; updated
workflow-rerun + pause-graceful assertions in executor.test.ts.
- Restructured the previously-flaky "routes exhausted prompt-mode
workflow hard failures" test to drive the bounce inline; passes in
isolation and in the wider workflow/pause/context sweep (59/59).
- Added regression tests in ChatView.test.tsx and QuickChatFAB.test.tsx
for the iOS last-resort `keyboardOpen=true, keyboardOverlap=0` case.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-30 14:12:03 -07:00
Fusion
3fcf5f4d82
feat(FN-2976): detect and display external Tailscale funnel tunnels in remo
...
Merges external Tailscale funnel detection (FN-2976) — adds types, detection logic, status inclusion, kill flow, and a dedicated UI panel for funnel processes started outside Fusion — alongside custom AI providers API routes and a new settings UI section (FN-2965).
Fusion-Task-Id: FN-2976
2026-04-30 05:43:13 -07:00
Fusion
3218c05776
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
60c4b27bd1
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
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