Commit Graph

4689 Commits

Author SHA1 Message Date
gsxdsm
60eb2ec995 FN-6018: allow stopping and deleting failed agents
Let failed agents be stopped and deleted consistently across the dashboard and agent lifecycle.

- allow agents in the error state to transition to paused and cover the new lifecycle path in core tests
- expose delete controls for failed agents in the agents list and mobile detail view with dashboard regression coverage
- update CLI stop-tool guidance and add a patch changeset for the published package

Files changed:
 .changeset/fn-6018-agent-error-stop-delete.md      |  7 ++++
 packages/cli/src/__tests__/extension.test.ts       | 16 ++++++++
 packages/cli/src/extension.ts                      |  4 +-
 packages/core/src/__tests__/agent-store.test.ts    | 16 ++++++++
 packages/core/src/types.ts                         |  2 +-
 .../dashboard/app/components/AgentDetailView.tsx   |  4 ++
 packages/dashboard/app/components/AgentsView.tsx   |  2 +-
 .../__tests__/AgentDetailView.core.test.tsx        | 24 +++++++++++-
 .../app/components/__tests__/AgentsView.test.tsx   | 44 +++++++++++++++++++++-
 9 files changed, 112 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-6018

Fusion-Task-Lineage: 40159b9b-4d14-4f1e-9bd9-d018e54db7ee
2026-06-08 10:33:17 -07:00
gsxdsm
84330f7dc9 FN-6016: quarantine flaky chat-manager generation-slot test
Quarantine the flaky dashboard chat-manager generation-slot test until the underlying race is fixed.

- exclude packages/dashboard/src/__tests__/chat-manager.test.ts from dashboard API Vitest projects
- record the quarantine entry with failure context, rescue requirements, and the 2026-06-08 quarantine date

Files changed:
 packages/dashboard/vitest.config.ts | 2 ++
 scripts/lib/test-quarantine.json    | 8 +++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6016

Fusion-Task-Lineage: 2cd97f8e-db06-4e49-b437-66fee64fb3a9
2026-06-08 10:33:16 -07:00
gsxdsm
3b3c5ed0bf FN-5997: fix mobile chat empty state spacing
Remove the extra mobile right margin from chat empty states while preserving other chat pane states.

- add mobile message-pane padding and remove card chrome from empty-state containers inside mobile chat messages
- expand the mobile chat rendering regression test to cover direct threads, room threads, loading, populated, streaming, and new-chat empty states
- rename the regression suite to FN-5997 and assert the empty state spans the full mobile message pane

Files changed:
 packages/dashboard/app/components/ChatView.css     |  9 +++++
 .../__tests__/ChatView.mobile-render.test.tsx      | 46 +++++++++++++++-------
 2 files changed, 40 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-5997

Fusion-Task-Lineage: ea424660-e8c6-4691-9234-463866aacb2e
2026-06-08 10:33:16 -07:00
gsxdsm
6d3d12897b fix(FN-0000): show auto-merge in selected workflow board 2026-06-08 08:22:16 -07:00
gsxdsm
035946272d Merge pull request #1509 from Runfusion/feature/workflow-loop-nodes
Show auto-merge toggle on workflow review columns
2026-06-08 08:15:41 -07:00
gsxdsm
bd5315fd4d feat: allow disabling built-in workflows 2026-06-08 07:53:42 -07:00
gsxdsm
d8a015e22c fix(FN-0000): show auto-merge on workflow review columns 2026-06-08 00:49:44 -07:00
gsxdsm
c9b780217b Merge pull request #1508 from Runfusion/feature/workflow-loop-nodes
Add bounded workflow loop nodes
2026-06-08 00:33:25 -07:00
gsxdsm
75867c4002 fix(FN-0000): address workflow loop review feedback 2026-06-08 00:19:50 -07:00
gsxdsm
a504238d26 feat(FN-0000): add workflow loop nodes 2026-06-07 23:56:25 -07:00
gsxdsm
bd16ae836d Update packages/dashboard/app/components/ListView.tsx
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-06-07 23:39:51 -07:00
gsxdsm
d23296c8ee test: clean ListView act warnings 2026-06-07 23:32:57 -07:00
gsxdsm
56b194383d fix: address workflow PR feedback 2026-06-07 23:30:16 -07:00
gsxdsm
e138971030 fix: stabilize workflow board and loop recovery 2026-06-07 23:30:16 -07:00
gsxdsm
e1a244adf6 fix: remove unused Column import in dashboard legacy.ts 2026-06-07 23:30:16 -07:00
gsxdsm
340b2efa39 Merge pull request #1467 from buihongduc132/upstream-pr/project-selector-enhancements
feat(dashboard): scrollable, autocomplete, bookmarkable project selector
2026-06-07 23:18:30 -07:00
gsxdsm
a27921a276 fix: address PR review feedback (#1467)
- guard optional project selection callbacks and keep bookmarked search matches visible
- use structured timeout/rate-limit handling in retry backoff
- add focused regressions for selector and retry behavior

Note: pnpm test passed the merge gate but hit pre-existing non-blocking engine mock failures in changed-package tests.
2026-06-07 23:03:38 -07:00
gsxdsm
7850b08a18 Address PR review feedback (#1502)
- Bump workflow model lane changeset to minor

- Clear pending workflow model edits after value reload failures

- Exclude Vite source module requests with query strings from API proxy
2026-06-07 22:56:35 -07:00
gsxdsm
4ac47642f9 fix(dashboard): let vite serve api source modules 2026-06-07 22:23:54 -07:00
gsxdsm
61ae1bf706 feat(workflow-settings): simplify workflow model lanes 2026-06-07 22:07:47 -07:00
gsxdsm
cf80622875 FN-5993: prevent PR metadata generation hangs
Bound PR AI metadata generation so the PR dialog falls back cleanly instead of hanging indefinitely.

- add a 60s timeout and abort-aware fallback path to dashboard PR metadata generation
- forward request abort signals from the PR metadata route and avoid writing responses after disconnects
- cover timeout/abort behavior in PR metadata generator and route tests
- document the bounded fallback behavior in the dashboard guide

Files changed:
 docs/dashboard-guide.md                            |   1 +
 .../src/__tests__/pr-metadata-generator.test.ts    |  93 +++++++++-
 ...it-github.pr-options-preflight-metadata.test.ts |   8 +-
 packages/dashboard/src/pr-metadata-generator.ts    | 199 ++++++++++++++-------
 .../dashboard/src/routes/register-git-github.ts    |  10 ++
 5 files changed, 235 insertions(+), 76 deletions(-)

Fusion-Task-Id: FN-5993

Fusion-Task-Lineage: fc49c15a-2359-4d14-b0ae-fed4aecde2fb
2026-06-07 20:38:53 -07:00
gsxdsm
1f2c7e22dc FN-5992: improve workflow editor mobile responsiveness
Make the workflow editor and related settings panels usable on narrow screens.

- add mobile-specific full-screen layout overrides for the workflow editor, create dialog, sidebar, inspector, settings panel, and AI panel
- stack workflow selector, workflow settings, and workflow fields controls for phone-sized viewports
- document the workflow editor mobile behavior in the dashboard guide
- add CSS contract tests covering the new mobile workflow editor and panel rules

Files changed:
 docs/dashboard-guide.md                            |  13 +++
 .../app/components/WorkflowFieldsPanel.css         |  15 +++
 .../app/components/WorkflowNodeEditor.css          |  94 ++++++++++++++++++
 .../dashboard/app/components/WorkflowSelector.css  |  16 ++++
 .../app/components/WorkflowSettingsPanel.css       |  20 ++++
 .../__tests__/WorkflowNodeEditor.css.test.ts       | 105 +++++++++++++++++++++
 6 files changed, 263 insertions(+)

Fusion-Task-Id: FN-5992

Fusion-Task-Lineage: c92396dc-88e5-4da0-be3f-687e7bd10972
2026-06-07 20:36:35 -07:00
gsxdsm
312bec674d FN-5990: start workflow editor viewport at top-left
Ensure the workflow node editor opens at the origin instead of auto-fitting away from the top-left.

- replace React Flow's fitView startup behavior with an explicit default viewport at x=0, y=0, zoom=1
- add a regression test that asserts the initial viewport transform starts at the top-left with scale 1

Files changed:
 packages/dashboard/app/components/WorkflowNodeEditor.tsx |  2 +-
 .../app/components/__tests__/WorkflowNodeEditor.test.tsx | 16 ++++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-5990

Fusion-Task-Lineage: 682ca8f8-a698-4234-a2d6-31c8efa657db
2026-06-07 20:27:56 -07:00
gsxdsm
2d81a95ad9 FN-5985: align mission goal link errors
Align mission goal link write paths on the documented GOAL_NOT_FOUND contract.

- return 400 GOAL_NOT_FOUND from linkable goal validation instead of 404 when a goal is missing
- update mission goal route tests to assert the new error payload across create, patch, set, and add flows
- document the link-vs-unlink missing-goal behavior and add a patch changeset for the published CLI package

Files changed:
 .../FN-5985-mission-goal-not-found-contract.md     |  5 ++++
 docs/missions.md                                   |  2 +-
 .../__tests__/mission-goal-links-routes.test.ts    | 32 +++++++++++++++++-----
 packages/dashboard/src/mission-routes.ts           |  9 +++++-
 4 files changed, 39 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-5985

Fusion-Task-Lineage: 5649266e-5813-41b4-8a54-c7c46df61a35
2026-06-07 20:23:07 -07:00
gsxdsm
e84410e520 FN-6007: prevent duplicate GitHub issue imports and tracking issues
Prevent duplicate GitHub issue/task linkage from creating redundant imports and tracking issues.

- add shared duplicate-detection helpers that match imported GitHub issues by source metadata as well as source URLs
- switch CLI and dashboard GitHub import flows to inspect full task records and reuse the helper during single and batch imports
- remove redundant duplicate/refine tracking-issue creation calls from task workflow routes and add a patch changeset with regression coverage

Files changed:
 .changeset/fn-6007-fix-duplicate-github-issues.md  |  5 ++
 packages/cli/src/__tests__/extension.test.ts       | 68 ++++++++++++++++
 packages/cli/src/extension.ts                      | 24 ++++--
 .../src/__tests__/github-tracking-hook.test.ts     | 68 ++++++++++++++++
 .../dashboard/src/__tests__/routes-github.test.ts  | 73 ++++++++++++++++++
 .../src/__tests__/routes-tasks-ops.test.ts         | 90 +---------------------
 .../dashboard/src/routes/register-git-github.ts    | 24 ++++--
 .../src/routes/register-task-workflow-routes.ts    | 16 ----
 8 files changed, 254 insertions(+), 114 deletions(-)

Fusion-Task-Id: FN-6007

Fusion-Task-Lineage: a32ebb1d-efe4-4a52-be9a-fa3d3b5954bf
2026-06-07 18:54:24 -07:00
gsxdsm
904e68143e FN-6006: name built-in workflow seam nodes
Ensure built-in workflow seams render readable labels instead of "Not configured".

- add explicit names to built-in execute, review, merge, planning, and step-execute seam nodes
- surface seam-specific summaries in dashboard node summaries, with a fallback for unknown seam values
- extend core and dashboard tests to cover seam naming invariants and rendered summaries

Files changed:
 .../__tests__/builtin-coding-workflow-ir.test.ts   |  7 +++++
 .../core/src/__tests__/builtin-workflows.test.ts   | 24 +++++++++++++++
 packages/core/src/builtin-coding-workflow-ir.ts    |  6 ++--
 .../src/builtin-stepwise-coding-workflow-ir.ts     |  8 ++---
 packages/core/src/builtin-workflows.ts             | 22 +++++++-------
 .../nodes/__tests__/node-summary.test.ts           | 35 ++++++++++++++++++++++
 .../dashboard/app/components/nodes/node-summary.ts | 17 +++++++++++
 7 files changed, 101 insertions(+), 18 deletions(-)

Fusion-Task-Id: FN-6006

Fusion-Task-Lineage: 198fc500-ac8f-45c9-b6b5-7aa15285d1df
2026-06-07 18:51:47 -07:00
gsxdsm
26fa479003 FN-6005: add mobile auto-merge blank-screen regression coverage
Add broader regression coverage for the mobile auto-merge blank-screen dashboard issue.

- expand the mobile integration test harness to cover viewport, keyboard, and mobile nav shell behavior
- add regression cases for empty in-review states, detail panels, update rollbacks, and app-shell round trips
- verify sibling render failures surface the page error boundary fallback instead of leaving a blank screen

Files changed:
 packages/dashboard/app/components/__tests__/auto-merge-toggle-blank.mobile-integration.test.tsx | 220 ++++++++++++++++++++-
 1 file changed, 217 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6005

Fusion-Task-Lineage: 7cbba538-343b-4540-910f-08ba6ce7d183
2026-06-07 18:51:47 -07:00
gsxdsm
fa23782dbb FN-5972: fix mobile auto-merge blank dashboard
Restore mobile auto-merge dashboard stability and broaden regression coverage.

- share the mobile media query between viewport detection and board stabilization so landscape phones stay on the mobile path
- add an integration regression suite for toggling auto-merge across mobile, tablet, desktop, rollback, and task review surfaces
- expand dashboard and CLI tests, keep the new published changeset, and preserve related vitest coverage lists and safety comments

Files changed:
$(git diff --cached --stat)

Fusion-Task-Id: FN-5972

Fusion-Task-Lineage: f3a3bbae-21c2-451b-b24f-848cc12d0542
2026-06-07 18:51:46 -07:00
gsxdsm
645f3c22fe FN-5953: hide manual PR actions when effective auto-merge is on
Honor per-task auto-merge overrides when deciding whether to offer manual PR creation.

- resolve effective auto-merge state before showing Create PR actions on task cards and review views
- pass effective auto-merge through the task detail modal into the PR panel
- expand dashboard tests to cover project-default and per-task auto-merge combinations for PR affordances

Files changed:
 packages/dashboard/app/components/TaskCard.tsx     |  6 ++-
 .../dashboard/app/components/TaskDetailModal.tsx   |  4 +-
 .../dashboard/app/components/TaskReviewTab.tsx     |  2 +-
 .../app/components/__tests__/PrPanel.test.tsx      | 41 +++++++++++++--
 .../app/components/__tests__/TaskCard.test.tsx     | 56 ++++++++++++++------
 .../__tests__/TaskDetailModal.create-pr.test.tsx   | 60 ++++++++++++++++++++++
 .../components/__tests__/TaskReviewTab.test.tsx    | 57 ++++++++++++++++----
 7 files changed, 189 insertions(+), 37 deletions(-)

Fusion-Task-Id: FN-5953

Fusion-Task-Lineage: ffa67b87-922a-47ca-8523-1c62e8e6c48b
2026-06-07 18:51:46 -07:00
gsxdsm
08d25f041a FN-5968: streamline Changes-tab mobile controls
Tighten the Task Changes toolbar so mobile diff navigation and actions stay compact.

- reuse a shared Changes header renderer so empty and populated states keep the same controls
- add mobile-specific Task Changes toolbar layout rules for wrapped navigation and secondary actions
- cover the mobile header structure, empty-diff actions, and publish a patch changeset

Files changed:
 .changeset/fn-5968-changes-tab-mobile.md           |   5 +
 packages/dashboard/app/components/TaskChangesTab.tsx    | 137 +++++++++++----------
 packages/dashboard/app/components/TaskDetailModal.css   |  39 ++++++
 packages/dashboard/app/components/__tests__/TaskChangesTab.test.tsx   | 103 +++++++++++++++-
 4 files changed, 216 insertions(+), 68 deletions(-)

Fusion-Task-Id: FN-5968

Fusion-Task-Lineage: 70865b8f-7f77-4cdb-aa0f-0d497d05e4ac
2026-06-07 18:51:46 -07:00
gsxdsm
fb6b441fbe FN-5960: add unlinked mission advisory reporting
Add explicit visibility for active missions that remain intentionally unlinked to goals.

- document the no-backfill decision with an engine-emitted unlinked mission advisory
- add a scheduler reporter that emits one deduped workflow insight for active missions without goal links and falls back to task logs when insight storage is unavailable
- cover the advisory reporter and scheduler integration with focused tests
- clear PR remediation errors when changing the Create Pull Request base branch

Files changed:
 docs/missions.md                                   |   2 +
 .../dashboard/app/components/PrCreateModal.tsx     |   2 +
 packages/engine/src/__tests__/scheduler.test.ts    |   8 +
 .../unlinked-missions-advisory-reporter.test.ts    | 170 +++++++++++++++++++++
 packages/engine/src/scheduler.ts                   |  18 +++
 .../src/unlinked-missions-advisory-reporter.ts     | 117 ++++++++++++++
 6 files changed, 317 insertions(+)

Fusion-Task-Id: FN-5960

Fusion-Task-Lineage: efdbb4f5-fbd5-4ed7-9b9e-58706041d993
2026-06-07 18:51:46 -07:00
buihongduc132
266b18eb0c fix(dashboard): chat-view fills full width of parent container
Same pattern as agents-view fix — .chat-view had display:flex + height:100%
but no flex or width, so it shrank to content width (~270px) instead of
filling the .project-content parent.
2026-06-07 03:30:05 +07:00
buihongduc132
8f4bb03e78 fix(dashboard): agents view fills full width of parent container
Added flex: 1 to .agents-view so it expands to fill the
project-content parent instead of shrinking to content width.
2026-06-07 02:51:43 +07:00
buihongduc132
5dad70e30f fix(dashboard): optional onSelect + exclude currentProject from exact match
- Make onSelect optional in ProjectSelectorProps to match Header usage
  where onSelectProject may be undefined (fixes runtime crash)
- Exclude currentProject from exact match detection so typing the
  current project name doesn't show misleading exact-match banner
- Addresses Gemini Code Assist review findings
2026-06-07 02:33:34 +07:00
buihongduc132
cb455bf757 feat(dashboard): scrollable, autocomplete, bookmarkable project selector
- Fix: ProjectSelector dropdown now scrolls (max-height + overflow-y)
  when project list exceeds visible area, with scrollIntoView on
  keyboard navigation
- Feat: Always-visible search input with type-ahead filtering,
  HighlightMatch text highlighting, exact match detection + auto-select
  on Enter
- Feat: Project bookmarking via localStorage (useProjectBookmarks hook),
  star toggle on each item, bookmarked section shown at top of dropdown
- Refactor: Header.tsx now imports standalone ProjectSelector instead
  of using an inline copy that lacked these features
- Tests: 131 tests passing across ProjectSelector + useProjectBookmarks
2026-06-07 02:26:00 +07:00
gsxdsm
ba16805ce6 Merge pull request #1466 from Runfusion/gsxdsm/issue-1454-manage-projet-bug
fix: empty folder selection reverts in DirectoryPicker + add create-folder button
2026-06-06 09:24:31 -07:00
gsxdsm
d92ad82e0c fix: disable Create button when currentPath is empty 2026-06-06 07:01:48 -07:00
gsxdsm
163332c6cc fix: localize create-folder validation error and add missing i18n keys
- Add dirPicker.createFolderError to all locale files (en, es, fr, ko, zh-CN, zh-TW)
- Use t() for the folder name validation error in DirectoryPicker
- Add missing dirPicker keys: cancel, createFolder, createFolderAria,
  createFolderConfirm, createFolderTitle, newFolderPlaceholder
2026-06-06 06:59:25 -07:00
gsxdsm
a87c7d72cd fix: remove invalid eslint-disable comment for non-existent react-hooks rule 2026-06-06 06:52:43 -07:00
gsxdsm
ee5f5e84ac Address PR review feedback (#1466)
- routes.ts: use isAbsolute() before resolve() for proper path validation
- routes.ts: wrap mkdir() in try/catch to map EEXIST/ENOENT/ENOTDIR to 4xx
- DirectoryPicker.tsx: use !browser.currentPath guard to prevent re-fetch loop
- DirectoryPicker.tsx: disable Create button during in-flight requests
- DirectoryPicker.tsx: add fetchEntries to useEffect dependency array
- DirectoryPicker.tsx: client-side validation for folder names
- Add changeset for the new create-folder feature
2026-06-06 06:31:44 -07:00
gsxdsm
d8e325b17e fix: empty folder selection reverts in DirectoryPicker + add create-folder button
Fix bug where navigating into an empty folder in the DirectoryPicker
would automatically revert to the previous folder. The useEffect that
auto-fetches on open was using the stale 'value' prop instead of
'browser.currentPath' after navigation.

Also adds a 'New folder' button to the DirectoryPicker toolbar so users
can create folders directly when setting up a project.

- DirectoryPicker.tsx: fix useEffect to use browser.currentPath || value
- DirectoryPicker.tsx: add create folder UI state and handlers
- DirectoryPicker.css: styles for create folder input and actions
- routes.ts: add POST /api/create-directory endpoint
- legacy.ts: add createDirectory API client
- DirectoryPicker.test.tsx: add tests for empty folder nav and create folder
2026-06-06 01:32:06 -07:00
gsxdsm
f49ab4946a Merge pull request #1463 from Runfusion/gsxdsm/issue-1455-initialize-git-repository
fix(FN-1455): initialize git during project registration
2026-06-06 01:08:31 -07:00
gsxdsm
62f60364f2 Merge pull request #1465 from Runfusion/gsxdsm/node-editor-fix
fix(node-editor): auto-layout on load + viewport to top-left
2026-06-06 01:07:50 -07:00
gsxdsm
8543e139a3 Merge pull request #1464 from Runfusion/gsxdsm/compound-debug
fix(dashboard): add missing vite alias for compound-engineering plugin
2026-06-06 01:06:17 -07:00
gsxdsm
d521661862 fix(node-editor): auto-layout on load + viewport to top-left
Run auto-layout automatically when a workflow is loaded so nodes are
tidily positioned instead of scattered at persisted positions. Position
the viewport at (0,0) with zoom 1 so the laid-out nodes are visible in
the top-left corner.

- workflow-auto-layout.ts: change ORIGIN_X/Y from 40 to 0
- WorkflowNodeEditor.tsx: apply autoLayout on load, setViewport to top-left
- WorkflowNodeEditor.test.tsx: update test to verify layout runs on load
2026-06-06 00:56:12 -07:00
gsxdsm
e941cb61cb fix(dashboard): add missing vite alias for compound-engineering plugin 2026-06-06 00:46:20 -07:00
gsxdsm
db971a91ea fix(FN-1455): initialize git during project registration
Fusion-Task-Id: FN-1455
2026-06-06 00:38:28 -07:00
gsxdsm
854b6a30c9 fix(lint): empty-interface PrSourceDescriptor → type alias, drop unused eslint-disable directives
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:15:28 -07:00
gsxdsm
841ff9d838 Address PR review feedback (#1461)
- pr-nodes: forward post-increment entity to deps.respond (responseRounds off-by-one); branch-group entity fallback now keys on task.branchContext.groupId, not task.id
- core: hoist shared autoMergeGateReason into @fusion/core pr-entity.ts; CLI + dashboard import the single definition (R13)
- cli: fn pr create also writes the unified PR entity (ensure → open), keeping legacy prInfo; resolveBranchHeadOid uses argv-safe execFileAsync (injection fix)
- changeset: fn-pr-commands bumped minor → major (breaking CLI removal per AGENTS.md)
- tests: bin.test.ts daemon fixture off reserved port 4040; lazy-loaded-views title 19 → 20 views

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:09:53 -07:00
gsxdsm
1922b5efc2 merge: main (workflow editor 109 / cli_sessions 110-111 / workflow_settings 112) — renumber PR-entity migration to 113, union core exports, TaskCard prNode + cliSessionState badges, executor PrNodeDeps + CliAgentRuntime options 2026-06-05 23:06:46 -07:00