Commit Graph

37 Commits

Author SHA1 Message Date
Fusion
8c112ffda8 feat(FN-3742): unify agent action gating classifications across permanent a
Merges a significant refactor of agent action gating into a unified `gating-classifications.ts` module shared across permanent agents and executor gating logic, plus new glasses quick-capture support with dedicated routes and parser, and a fix restoring step progress visibility during task execution

Fusion-Task-Id: FN-3742
2026-05-08 13:59:14 -07:00
Fusion
86daa5f3e1 feat(FN-3741): repoint roadmap type imports to plugin package
Repointed roadmap type imports to the plugin package across the dashboard (RoadmapsView, useRoadmaps hook, legacy API). Also replaced an invalid spinner token in the TaskDetailModal CSS.

Fusion-Task-Id: FN-3741
2026-05-08 13:36:13 -07:00
Fusion
5639dd87ff feat(FN-3755): reorder task detail timestamps
Reorders timestamps in the task detail modal and adds a rendering test for the component, with a pnpm-lock bump.

Fusion-Task-Id: FN-3755
2026-05-08 13:22:28 -07:00
Fusion
ca5ddfeab6 feat(FN-3726): highlight fast mode bolt icon in task detail
- Add TaskDetailModal CSS rules to visually emphasize the fast mode bolt icon
- Cover fast mode icon highlighting in TaskDetailModal rendering tests
- Preserve existing modal rendering behavior while adding the new fast mode visual cue

Fusion-Task-Id: FN-3726
2026-05-08 00:03:46 -07:00
Fusion
240421419f feat(FN-3710): add planning mode priority controls and agent workspace memo
Adds an agent workspace memory reader so agents can access workspace context, and extends the planning mode modal with priority controls for task routes and subtasks (FN-3716, FN-3718). Minor CSS token and mobile focus fixes are also included (FN-3710).

Fusion-Task-Id: FN-3710
2026-05-07 16:47:57 -07:00
Fusion
cc02def488 feat(FN-3711): add inline fast mode toggle and wire shared state in peer ex
This merge introduces several dashboard and engine improvements: agent inbox wake controls (FN-3087, FN-3588) with immediate message triggers; separated plugin lifecycle from setup probe state (FN-3704); assigned-agent triage inheritance in the engine (FN-3703); inline fast mode toggle in the task d

Fusion-Task-Id: FN-3711
2026-05-07 11:54:41 -07:00
Fusion
88171eb5b3 feat(FN-3308): fix CSS token consistency in settings and task detail modals
Fixes CSS token consistency issues in TaskDetailModal and SettingsModal, and updates the corresponding mobile overflow test to match the refactored styles.

Fusion-Task-Id: FN-3308
2026-05-04 14:05:27 -07:00
Fusion
5c904d8751 feat(FN-3073): tokenize MissionManager and TaskDetailModal CSS spacing and
Merges three commits: tokenizes MissionManager CSS spacing and colors to align with the design system, fixes a mobile viewport teardown bug when closing planning mode, and resolves token and focus regressions in the task detail modal. Also adds a new test for the planning mode viewport fix.

Fusion-Task-Id: FN-3073
2026-05-04 06:00:47 -07:00
Fusion
6ecfb3c4ec feat(FN-3350): tokenize task detail danger/error styling
Fixes task detail modal danger/error styling by switching to token-based CSS variables for consistent theming across dark and light modes.

Fusion-Task-Id: FN-3350
2026-05-04 04:09:28 -07:00
Fusion
82ea9c8fd8 feat(FN-3241): restore list view detail callback type compatibility
Fixes a type compatibility issue with the list view detail callback in the dashboard App component, restoring proper typing for the callback.

Fusion-Task-Id: FN-3241
2026-05-03 02:58:55 -07:00
Fusion
2ce4351724 feat(FN-3191): keep embedded task-link navigation in split pane
Fixes task link navigation in ListView so embedded links continue working when the split pane is active, including a new test case for FN-3191.

Fusion-Task-Id: FN-3191
2026-05-03 00:57:03 -07:00
Fusion
5986924229 feat(FN-3203): improve agent detail view with runs tab and ListView UX
Merges FN-3181, FN-3190, and FN-3203: adds an initial runs tab to the agent detail view with auto-expand for the selected run, fixes ListView split-pane UX issues, aligns agent run duration calculation with the `AgentHeartbeatRun.endedAt` field, and restores task detail PR spacing. Updates include n

Fusion-Task-Id: FN-3203
2026-05-02 04:52:26 -07:00
Fusion
19142cfc98 feat(FN-3183): add inline priority picker to quick-entry box
Adds an inline priority picker to the Quick Entry Box and Task Detail Modal with shared badge styling and proper mobile tap targets (FN-3183, FN-3186), updates agent tools tests and documentation for layered memory access patterns (FN-3179), and fixes styling alignment between the modal and inline c

Fusion-Task-Id: FN-3183
2026-05-02 03:42:31 -07:00
Fusion
623772629f feat(FN-3176): polish github source issue summary styling in task detail
Polished the GitHub source issue summary in the TaskDetailModal with UI refinements to its CSS and component markup, along with updated tests covering the new behavior.

Fusion-Task-Id: FN-3176
2026-05-02 02:28:31 -07:00
Fusion
135b0f0b16 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
2fb18eac1f feat(FN-2924): merge fusion/fn-2924
- Add task provenance display to TaskDetailModal, surfacing AI-generated merge commit summaries so users understand when and why tasks landed
- New `ai-summarize` module in core with structured commit summarization logic and tests
- Extend CLI `fn task show` with provenance output
- Refactor merger to produce cleaner merge commit messages with task context
- Update SettingsModal to expose AI summarization toggle (hidden behind feature flag)
- Adjust QuickChatFAB styling for theme compatibility
- Update scheduler and node-routing policy tests to match new behavior
- Add changeset for `@runfusion/fusion` minor release

Commits merged:
- feat(FN-2924): display task provenance in dashboard and cli
- feat(FN-2971): merge fusion/fn-2971
- feat(FN-2947): merge fusion/fn-2947
- feat(FN-2970): merge fusion/fn-2970
- feat(FN-2956): merge fusion/fn-2956

Files changed:
.changeset/add-ai-merge-commit-summary.md          |   5 +
 docs/cli-reference.md                              |   3 +-
 docs/settings-reference.md                         |   3 +
 packages/cli/src/commands/__tests__/task.test.ts   |  44 ++++-
 packages/cli/src/commands/task.ts                  |  55 +++++++
 packages/core/src/__tests__/ai-summarize.test.ts   |  64 ++++++++
 packages/core/src/ai-summarize.ts                  | 114 +++++++++++++
 packages/core/src/index.ts                         |   3 +
 packages/core/src/settings-schema.ts               |   1 +
 packages/core/src/types.ts                         |   4 +
 packages/dashboard/app/components/QuickChatFAB.css |  17 +-
 packages/dashboard/app/components/QuickChatFAB.tsx |   2 +-
 .../dashboard/app/components/SettingsModal.css     |  11 +-
 .../dashboard/app/components/SettingsModal.tsx     |  22 ++-
 .../dashboard/app/components/TaskDetailModal.css   |  40 +++++
 .../dashboard/app/components/TaskDetailModal.tsx   |  82 +++++++++-
 .../__tests__/SettingsModalNodeRouting.test.tsx    |  12 +-
 .../components/__tests__/TaskDetailModal.test.tsx  |  81 ++++++++-
 packages/engine/src/__tests__/merger.test.ts       |  75 +++++++++
 .../src/__tests__/node-routing-policy.test.ts      |  25 ++-
 .../src/__tests__/scheduler-node-routing.test.ts   |  18 +-
 packages/engine/src/merger.ts                      | 181 +++++++++------------
 packages/engine/src/scheduler.ts                   |   8 +-
 23 files changed, 723 insertions(+), 147 deletions(-)

Fusion-Task-Id: FN-2924
2026-04-29 18:01:59 -07:00
gsxdsm
94edc2176c fix(FN-XXX): improve git manager diff layout 2026-04-29 16:26:53 -07:00
Fusion
ebd3201153 feat(FN-2901): merge fusion/fn-2901
- fix(FN-2901): reset source issue collapse state on task change
- fix(FN-2901): use issue number in collapsed source issue summary
- feat(FN-2901): complete Step 5 — finalize source issue toggle UX
- test(FN-2901): complete Step 4 — verify collapsible source issue behavior
- feat(FN-2901): complete Step 3 — style collapsible source issue header
- feat(FN-2901): complete Step 2 — add collapsible source issue section
- feat(FN-2901): complete Step 1 — update lucide imports
- feat(FN-2729): merge fusion/fn-2729
- fix(engine): prevent auto-merge cooldown loop on unresolvable conflicts
- feat(FN-2911): improve chat attachment compose and preview UX

Fusion-Task-Id: FN-2901
2026-04-28 23:31:23 -07:00
Fusion
4a819cf961 fix(FN-2711): keep dashboard timing stats live 2026-04-28 19:20:10 -07:00
Fusion
0e40243791 feat(FN-2888): unify task move button interactions
- Replace split move control with a single move button that supports primary action plus arrow-zone menu toggling
- Add keyboard support for move options via ArrowDown to open and Escape to close and refocus the trigger
- Update task detail styling for the unified move button and arrow affordance states
- Refresh TaskDetailModal and TaskForm tests to cover the new move control behavior and preset selection query
2026-04-28 14:25:56 -07:00
gsxdsm
1c7eaf3e85 fix(dashboard): mobile rendering for resizable modals
The Settings, Workflow Steps, Automations (and friends) modals all carried
desktop `min-width: 480-520px` constraints from the resize work. On phones
that pushed them off-screen, and the overlay's 10vh top padding plus a
fractional `height: 80vh` left awkward gaps top and bottom.

Apply the same `@media (max-width: 768px)` full-screen-sheet treatment
that File Browser already had to every resize-aware modal: drop the
overlay padding, set width/height to `100vw`/`100dvh`, zero out the
min-* / max-* constraints, and disable `resize` (touchscreens can't grab
the corner grip anyway).

Also tightened the existing File Browser and GitHub Import overrides to
match (`min-width: 0`, `min-height: 0`, `resize: none`).

For TaskDetailModal the mobile rules go inside the existing first
`@media (max-width: 768px)` block to keep the FN-1331 detail-body
padding regression test happy (it captures from the first 768px media
query greedily).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 18:10:24 -07:00
gsxdsm
61ea16e31f feat(dashboard,cli): update-check frequency, GitHub star button, more resizable modals
Update-check frequency (end-to-end)
- Add `updateCheckFrequency: "manual" | "on-startup" | "daily" | "weekly"`
  to GlobalSettings (default: "daily").
- Backend `performUpdateCheck` honors the frequency: TTL = day/week,
  `manual` returns cache or empty without hitting npm, `on-startup`
  refreshes once per process lifetime then serves cache. `/refresh`
  route forces network regardless.
- Settings → Updates surfaces a working `<select>` for the cadence,
  disabled when auto-checks are off entirely.
- Tests: 4 new cases covering ttlForFrequency mapping, weekly window,
  manual semantics, on-startup once-per-process behavior.

TUI update notice
- Read cached update result synchronously on TUI startup. When an
  update is available, render a yellow notice line on the splash and
  a colored ● next to the version in the status bar.

Settings modal header polish
- Add "Star on GitHub" pill (icon + Star + cached star count from the
  GitHub API, 1h localStorage TTL) and "Help" button (opens project
  Discussions). Both link to the Runfusion/Fusion repo.
- Star button auto-hides after the user clicks it (intent = star),
  tracked in localStorage `fusion:github-star-clicked`.
- Settings → General gets a "Show Star on GitHub button" checkbox so
  users can hide it preemptively. New global setting
  `showGitHubStarButton: boolean` (default true) gates rendering.

More resizable modals
- Task Detail modal: 85vh default, resize: both, persisted via
  useModalResizePersist (key `fusion:task-detail-modal-size`).
- Quick Chat FAB: full 8-direction resize (4 corners + 4 edges) via
  pointer-event handlers; persisted to
  `fusion:quick-chat-size-<projectId>`. Each handle has the right
  cursor + role="separator" for accessibility.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 17:55:15 -07:00
Fusion
92b94594f3 feat(FN-2694): merge fusion/fn-2694 2026-04-27 08:45:49 -07:00
Fusion
b13df8af01 feat(FN-2683): align mobile action button sizing in task views
- Reduce Task Detail move split chevron width on mobile for a more compact control
- Add mobile padding override to TaskCard send-back button to match sibling action sizing
- Normalize task action button dimensions across card and detail contexts
2026-04-27 05:07:34 -07:00
Fusion
00239149ab feat(FN-2649): add themed scrollbar styles in task detail modal
- Add token-based scrollbar styling for .detail-body across Firefox and WebKit pseudo-elements
- Scope agent log scrollbar rules to .detail-section--agent-log .agent-log-viewer-scroll to avoid selector target drift
- Add TaskDetailModal CSS regression tests that assert scrollbar declarations for modal body and agent log containers
- Introduce shared test helpers for robust selector/declaration matching in stylesheet assertions
2026-04-27 03:47:09 -07:00
Fusion
6d4bb9c3cf feat(FN-2631): revise task detail move split-button behavior
- Rework TaskDetailModal move controls to use split-button primary/secondary transitions with in-review-specific options
- Add dedicated split-button styling for divider, chevron menu, focus states, and mobile sizing using design tokens
- Keep in-review merge action visible while move options remain accessible through secondary menu actions
- Expand TaskDetailModal tests to cover split-button rendering, primary click behavior, and secondary transition menu contents
2026-04-26 23:43:11 -07:00
Fusion
0c6186521b feat(FN-2632): pin return-to-live control to bottom-right
- Update .agent-log-return-to-live to anchor on the right edge while staying sticky at the bottom
- Switch the control container to flex with fit-content width to keep compact button sizing
- Add mobile-specific right offset so spacing stays consistent at smaller breakpoints
2026-04-26 23:30:54 -07:00
gsxdsm
4e159cd028 feat(FN-2619): merge fusion/fn-2619 2026-04-26 17:56:09 -07:00
Fusion
4e3b909b5e feat(FN-2613): merge fusion/fn-2613 (auto-resolved)
- test(FN-2613): complete Step 3 — update mobile and standalone CSS assertions
- feat(FN-2613): complete Step 2 — move standalone token override to global styles
- feat(FN-2613): complete Step 1 — remove mobile root safe-area padding
2026-04-26 14:29:00 -07:00
Fusion
f9b51dd7e6 feat(FN-2600): merge fusion/fn-2600 (auto-resolved)
- feat(FN-2600): finalize return-to-live button styling
- test(FN-2600): cover return-to-live and top load-more placement
- feat(FN-2600): add live-follow state and return-to-live control
- fix(FN-2600): clean chronological log documentation and test wording
- test(FN-2600): align log viewer assertions to chronological rendering
- fix(FN-2600): correct chronological badge transition detection
- feat(FN-2600): complete Step 1 — reverse log rendering chronology
2026-04-26 13:49:26 -07:00
gsxdsm
24cf8f3cc8 feat(FN-2599): merge fusion/fn-2599 2026-04-26 11:49:50 -07:00
Fusion
2a2ddba92d feat(FN-2598): merge fusion/fn-2598 (auto-resolved)
- test(FN-2598): complete Step 3 — update collapsed model header coverage
- fix(FN-2598): normalize expand button spacing token
- feat(FN-2598): complete Step 2 — style compact model header
- feat(FN-2598): complete Step 1 — compact model header structure
2026-04-26 11:36:26 -07:00
Fusion
8fbc3211f0 feat(FN-2592): add provider icons to task cards and detail modal
- Render provider icons on TaskCard model metadata with token-based sizing and spacing
- Add provider icon display in TaskDetailModal for executor, validator, and planning model rows
- Update dashboard styling with reusable provider icon classes and layout tweaks in component CSS
- Expand TaskCard tests to cover provider icon rendering and fallback behavior
2026-04-26 10:43:17 -07:00
gsxdsm
a97ffd73a0 feat(FN-2473): merge fusion/fn-2473 2026-04-25 10:55:50 -07:00
gsxdsm
cc8aa1f780 refactor(dashboard): extract component-specific mobile rules from styles.css
Sweep 1 of the styles.css split. Rules where the desktop counterpart already
lived in a component CSS file have been moved out of the global mobile @media
block in styles.css and appended to the matching component file's mobile
block. styles.css 4551 → 4488.

Affected components: Header, AgentsView, DocumentsView, ListView, QuickChatFAB,
QuickEntryBox, ScriptsModal, TaskDetailModal, TerminalModal, WorkflowResultsTab.

Truly global mobile rules (input font-size for iOS auto-zoom, html/body
overflow, root safe-area padding, base .btn touch targets, bare element
selectors) intentionally stay in styles.css. The remaining bulk of the mobile
block (settings, auth, board/card, inline-create) cannot move yet because
their desktop rules are still in styles.css — those will fall out as part of
the cards and settings extraction sweeps.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 08:43:54 -07:00
gsxdsm
9425d7c798 feat(FN-2490): merge fusion/fn-2490 2026-04-25 07:59:48 -07:00
gsxdsm
c3d1716fdd refactor(dashboard): split monolithic styles.css into per-component files
Split app/styles.css from ~40k lines down to ~4.5k. Created 56 co-located
component CSS files in app/components/, each imported by its owning .tsx.
The remainder of styles.css holds genuinely global rules (design tokens,
.btn/.card/.modal/.form-input primitives, cross-component @media overrides).

- Lazy-load 13 heavy views (AgentsView, RoadmapsView, NodesView, etc.) via
  React.lazy + Suspense; prefetch all chunks on idle so first navigation is
  instant. Initial JS bundle: 1.58 MB → 1.16 MB (-26%). Initial CSS bundle:
  635 kB → 471 kB (-26%); the rest splits into 13 per-view chunks.

- Add app/test/cssFixture.ts exposing loadAllAppCss() + loadAllAppCssBaseOnly()
  so CSS regression tests load the full per-component bundle (mirroring Vite
  source order). Migrate 30+ tests off direct readFileSync('../styles.css').

- Enable test.css: { include: [/.+/] } in vitest.config.ts so component CSS
  imports actually inject styles in jsdom (fixes getComputedStyle assertions).

- Add ESLint rule (no-restricted-syntax) banning direct styles.css reads in
  dashboard test files; points at loadAllAppCss() instead.

- Restore lost utility classes (.text-muted, .text-secondary, .text-dim,
  .form-input) and rescue dropped chat tool-call rules into QuickChatFAB.css.

- Mobile fixes along the way: scroll containment for view containers
  (min-height:0 + -webkit-overflow-scrolling), QuickChatFAB full-screen on
  mobile (with safe-area-inset for iOS home bar), AgentsView single-row
  header layout, ActivityLogModal close button on right, model-combobox
  z-index above the mobile quick-chat panel.

- Bug fix: SkillsView toggle was display:none which hid the input from the
  accessibility tree; replaced with the visually-hidden pattern so screen
  readers + getByRole still find the checkbox.

- Bug fix: standalone Delete button in TaskDetailModal for triage-column
  tasks (Actions dropdown is hidden in triage state, so previously no way
  to delete a freshly-created task without status change first).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 19:39:20 -07:00