035caca6c8ef47fbbf6dff103d75f7d71d23ed42
554 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
035caca6c8 |
FN-7775: Add thinking level selection to new chat model picker
Adds a per-session thinking-level selector to the new chat model dropdown, persisting the choice through the chat store and engine session options. - Adds thinkingLevel column to chat_sessions with a db migration - Extends chat-store, chat-types, and chat.ts to read/write thinkingLevel - ChatView model selector now exposes a thinking-level control alongside model choice - useChat and register-chat-routes plumb thinkingLevel through session creation/API - engine/src/index.ts passes thinkingLevel as defaultThinkingLevel session option - Adds a minor changeset and updates settings-reference/dashboard-guide docs - Adds/updates unit tests across core and dashboard packages Files changed: .changeset/fn-7775-chat-thinking-level.md | 7 ++ docs/dashboard-guide.md | 1 + docs/settings-reference.md | 2 +- packages/core/src/__tests__/chat-store.test.ts | 15 +++- packages/core/src/__tests__/db-migrate.test.ts | 33 ++++++++ packages/core/src/chat-store.ts | 12 ++- packages/core/src/chat-types.ts | 6 ++ packages/core/src/db.ts | 14 +++- packages/dashboard/app/api/legacy.ts | 2 +- packages/dashboard/app/components/ChatView.tsx | 16 +++- .../__tests__/ChatView.core-interactions.test.tsx | 75 +++++++++++++++--- .../dashboard/app/hooks/__tests__/useChat.test.ts | 17 +++- packages/dashboard/app/hooks/useChat.ts | 6 +- .../dashboard/src/__tests__/chat-manager.test.ts | 90 ++++++++++++++++++++++ packages/dashboard/src/chat.ts | 23 ++++++ .../dashboard/src/routes/register-chat-routes.ts | 25 +++++- packages/engine/src/index.ts | 1 + 17 files changed, 318 insertions(+), 27 deletions(-) Fusion-Task-Id: FN-7775 Fusion-Task-Lineage: e16c7d3b-361e-4908-87ad-10be17a47c47 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
70330bcffb |
FN-7779: render No message placeholder for empty assistant chat replies
Empty final assistant chat messages (e.g. Grok CLI runs that finish with no text) now show a muted "No message" placeholder instead of a blank bubble, in both Chat and Planner Chat via the shared StandardChatSurface component. - Add isEmptyAssistantMessage check in StandardChatMessageItem: only applies to final persisted assistant messages with no content, tool calls, thinking output, attachments, or failure info - Render a new .chat-message-content--empty block with the "No message" i18n string when the check matches - Add shared CSS rule combining --waiting and --empty muted/italic styling, switching to var(--font-size-sm) - Add "chat.noMessage" translation key to en/app.json and regenerate resources.d.ts - Document the new behavior in docs/dashboard-guide.md - Add a patch changeset for @runfusion/fusion - Add StandardChatSurface.empty-message.test.tsx covering empty/whitespace content, populated content, tool calls, thinking output, attachments, failure info, non-assistant roles, and streaming waiting/thinking states Files changed: $(cat /tmp/diffstat_fn7779.txt) Fusion-Task-Id: FN-7779 Fusion-Task-Lineage: d3ae068e-acba-4b4c-85d6-a788aa24a53b Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3cda9d830a |
FN-7768: inline thinking-level control in CustomModelDropdown and migrate task/agent surfaces
Adds an inline thinking-level selector to CustomModelDropdown and migrates existing model-selection surfaces (task form, quick entry, new agent dialog, model selection modal/tab) to use it instead of their own bespoke thinking-level controls. - CustomModelDropdown: add inline thinking-level control (CSS + component logic) - ModelSelectionModal / ModelSelectorTab: drop local thinking-level UI in favor of the dropdown's inline control - NewAgentDialog: migrate to the shared inline thinking-level control - QuickEntryBox: remove now-redundant thinking-level UI, delegate to CustomModelDropdown - TaskForm: migrate to the shared inline thinking-level control - Add/update tests for CustomModelDropdown, ModelSelectionModal, ModelSelectorTab, NewAgentDialog, QuickEntryBox, TaskForm - Add changeset for @runfusion/fusion (feature) - Update dashboard guide docs Files changed: .changeset/fn-7768-inline-thinking-dropdown.md | 7 ++ docs/dashboard-guide.md | 1 + .../app/components/CustomModelDropdown.css | 33 +++++++++ .../app/components/CustomModelDropdown.tsx | 69 ++++++++++++++++- .../app/components/ModelSelectionModal.tsx | 32 +------- .../dashboard/app/components/ModelSelectorTab.tsx | 33 +-------- .../dashboard/app/components/NewAgentDialog.tsx | 18 +---- .../dashboard/app/components/QuickEntryBox.tsx | 59 +-------------- packages/dashboard/app/components/TaskForm.tsx | 23 +----- .../__tests__/CustomModelDropdown.test.tsx | 72 ++++++++++++++++++ .../__tests__/ModelSelectionModal.test.tsx | 48 +++++++++--- .../components/__tests__/ModelSelectorTab.test.tsx | 3 +- .../components/__tests__/NewAgentDialog.test.tsx | 86 ++++++++++++++++++++++ .../components/__tests__/QuickEntryBox.test.tsx | 42 +++++++---- .../app/components/__tests__/TaskForm.test.tsx | 7 +- 15 files changed, 354 insertions(+), 179 deletions(-) Fusion-Task-Id: FN-7768 Fusion-Task-Lineage: 8f32731b-9865-4902-9420-62d3c0295805 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
547740bb66 |
FN-7751: move mobile settings search toggle inline with section picker
Relocates the mobile-only settings search icon toggle so it sits inline next to the section dropdown instead of its own row above it, tightening the mobile Settings header. - Move the settings-search-toggle button out of the standalone .settings-search row into a new .settings-mobile-section-picker-control-row alongside the mobile section <select>. - Preserve FN-7713 expand/hide toggle behavior and active-query preservation; desktop/tablet layout unaffected. - Add CSS for .settings-mobile-section-picker-control-row to lay out the select and toggle button inline. - Update settings-mobile tests to assert the toggle renders next to the section picker. - Add changeset (patch) documenting the fix. Files changed: .../fn-7751-mobile-settings-search-inline.md | 7 ++ docs/dashboard-guide.md | 4 +- .../dashboard/app/components/SettingsModal.css | 23 ++++-- .../dashboard/app/components/SettingsModal.tsx | 89 +++++++++++----------- .../components/__tests__/settings-mobile.test.tsx | 38 ++++++++- 5 files changed, 105 insertions(+), 56 deletions(-) Fusion-Task-Id: FN-7751 Fusion-Task-Lineage: 8bb9a32b-80f4-4b73-a366-d23e97106b73 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
21d1201de1 |
FN-7713: collapse mobile Settings search row behind an expand/hide toggle
Mobile Settings modal now hides the search row by default and exposes a toggle icon to expand/hide it, keeping desktop layout unchanged. - Add mobile-only searchRowExpanded state and toggle affordance in SettingsModal.tsx - Add toggle icon styling in SettingsModal.css - Update dashboard-guide.md docs to describe the new mobile behavior - Add/extend tests covering the collapsed-by-default state and toggle interaction - Add changeset (feature, no release wording) for @runfusion/fusion Files changed: .../fn-7713-mobile-settings-search-toggle.md | 7 ++ docs/dashboard-guide.md | 3 + .../dashboard/app/components/SettingsModal.css | 31 ++++++ .../dashboard/app/components/SettingsModal.tsx | 112 ++++++++++++++------- .../__tests__/SettingsModal.general.test.tsx | 7 ++ .../components/__tests__/settings-mobile.test.tsx | 69 +++++++++++++ 6 files changed, 192 insertions(+), 37 deletions(-) Fusion-Task-Id: FN-7713 Fusion-Task-Lineage: 4ce90317-28ce-45b4-a1d7-8fd662a922ae Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
626e00288c |
FN-7720: add operator review-lane bypass for stranded pre-merge review failures
Add a policy-gated review-lane bypass primitive so operators can unstick cards stranded by a failed pre-merge review step (e.g. the no-feedback review-engine defect), without exposing it to agent-driven lanes.
- Add `store.bypassFailedPreMergeReviewStep(id, { reason, actor })` in @fusion/core plus `getLatestFailedPreMergeReviewStep` in task-merge.ts, and new `bypassedBy`/`bypassedAt`/`bypassReason`/`bypassedFromStatus`/`bypassedFromVerdict` fields on `WorkflowStepResult`
- Add operator-only `fn_task_bypass_review` CLI/pi-extension tool; explicitly withheld from executor/reviewer/triage agent tool lists
- Add `POST /tasks/:id/bypass-review` dashboard API route and wire it through `register-task-workflow-routes.ts` and legacy API compatibility layer
- Add dashboard UI affordance (context menu action + task detail modal + right-dock controller wiring) to trigger the bypass with a reason
- Add i18n strings for the bypass action/labels across en/es/fr/ko/zh-CN/zh-TW locales
- Update `gating-classifications.ts` to recognize the bypassed state
- Add unit tests: `store-bypass-review.test.ts`, `task-merge-bypass.test.ts`, extension test coverage, and `useTasks` hook test coverage
- Update docs (`docs/workflow-steps.md`, `docs/dashboard-guide.md`, AGENTS.md, fusion skill references) to describe the new bypass tool/route
- Add changeset `.changeset/fn-7720-review-lane-bypass-primitive.md` (minor)
Files changed:
$(git diff --cached --stat)
Fusion-Task-Id: FN-7720
Fusion-Task-Lineage: 590b020a-ae02-4b51-8189-df8f54bf3044
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
|
||
|
|
461a4a2711 |
FN-7689: add opt-in Anthropic-style prompt caching for custom providers
Custom providers previously never enabled prompt-cache control, so agent turns re-billed the full context every request even on cache-capable backends. - Add `CustomProvider.anthropicPromptCaching` opt-in flag in @fusion/core types - Set pi-ai `compat.cacheControlFormat="anthropic"` on opted-in models in both registration paths: custom-provider-registry `toProviderConfig` and pi.ts `createFnAgent` - Expose the new toggle in the dashboard CustomProvidersSection UI (with supporting CSS) and thread it through the legacy API + custom-provider routes - Update docs (dashboard-guide, settings-reference) to document the new setting - Add engine test coverage for the caching flag across provider registration and pi-create-fn-agent paths - Add changeset for the fix Files changed: .changeset/fn-7689-custom-provider-prompt-caching.md | 7 + docs/dashboard-guide.md | 1 + docs/settings-reference.md | 2 +- packages/core/src/types.ts | 15 ++ packages/dashboard/app/api/legacy.ts | 12 ++ packages/dashboard/app/components/CustomProvidersSection.css | 24 +++ packages/dashboard/app/components/CustomProvidersSection.tsx | 58 +++++- packages/dashboard/src/routes/register-custom-provider-routes.ts | 16 ++ packages/engine/src/__tests__/pi-create-fn-agent.test.ts | 71 +++++++ packages/engine/src/__tests__/provider-registration.test.ts | 204 ++++++++++++++++++++- packages/engine/src/custom-provider-registry.ts | 71 +++++-- packages/engine/src/pi.ts | 27 ++- 12 files changed, 473 insertions(+), 35 deletions(-) Fusion-Task-Id: FN-7689 Fusion-Task-Lineage: b4f88f32-50da-4651-a546-432a95a1ab1c Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
07507f5264 |
FN-7688: add slow login-shell profile latency hint and docs
Investigated whether --login in TerminalService first-prompt latency is a meaningful contributor and added a one-time diagnostic hint plus documentation of findings. - Add SLOW_LOGIN_PROFILE_HINT_MS (2000ms) threshold and one-time, non-blocking console.info hint in createSession()'s PTY onData handler when a login shell is slow to produce first output - Track spawnStartedAt and loginProfileHintLogged per session, and whether the succeeding spawn attempt used --login, without altering spawn args, timeouts, or the retry-without-login fallback - Add regression tests covering the slow-login-profile hint behavior in terminal-service.test.ts - Document the investigation and findings in docs/solutions/developer-experience/login-shell-profile-latency.md and link it from docs/dashboard-guide.md - Add a patch changeset for @runfusion/fusion describing the new server-log hint Files changed: .changeset/fn-7688-login-shell-profile-latency.md | 7 ++ docs/dashboard-guide.md | 17 +++ .../login-shell-profile-latency.md | 79 ++++++++++++++ .../src/__tests__/terminal-service.test.ts | 121 +++++++++++++++++++++ packages/dashboard/src/terminal-service.ts | 57 ++++++++++ 5 files changed, 281 insertions(+) Fusion-Task-Id: FN-7688 Fusion-Task-Lineage: 08d5dd47-ea9f-4973-9f0e-a8d5fdeae111 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
83e77431e2 |
FN-7684: move terminal shortcuts/zoom controls into footer on tablet widths
On tablet-width viewports (769-1024px) the terminal header was overcrowded, so shortcut/zoom/preference controls now move into the bottom status-bar footer instead, mirroring the existing FN-7560 mobile layout while true desktop keeps the header controls. - Add an isTabletTerminal detection flag (769-1024px, non-mobile) alongside the existing mobile flag - Render the shared terminalActionControls fragment in the .terminal-status-bar footer for tablet widths, keeping desktop pin/pop-out toggles available there too - True desktop (>1024px) continues to render font size / clear / shortcuts / preferences controls in the header - Update TerminalModal.css with footer layout styles for the tablet action controls - Update TerminalModal tests to cover the new tablet breakpoint rendering - Update docs/dashboard-guide.md to describe the tablet footer control location - Add a changeset (@runfusion/fusion: patch) documenting the fix Files changed: .changeset/fn-7684-tablet-terminal-footer.md | 7 ++ docs/dashboard-guide.md | 6 +- .../dashboard/app/components/TerminalModal.css | 34 ++++++ .../dashboard/app/components/TerminalModal.tsx | 103 ++++++++++++----- .../components/__tests__/TerminalModal.test.tsx | 126 ++++++++++++++++++--- 5 files changed, 231 insertions(+), 45 deletions(-) Fusion-Task-Id: FN-7684 Fusion-Task-Lineage: 627c40af-a152-451a-a045-65ad8babea9e Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
03161adfb9 |
FN-7659: paginate and sort the Archived column newest-first
Adds server-side pagination for the Archived task column, sorted by most-recently-archived first, with a Show more control on the dashboard.
- Add ArchiveDatabase.listPage and TaskStore.listArchivedTasks for a bounded SQL LIMIT/OFFSET read ordered by archivedAt DESC
- Add GET /tasks/archived route for paged archive fetches, leaving the legacy merged listTasks({includeArchived}) path unchanged
- Wire useTasks.loadArchivedTasks to fetch page 1 on first Archived-column expand and loadMoreArchivedTasks for subsequent pages
- Add a "Show more" affordance in Column.tsx/Board.tsx/MainContent.tsx to trigger loading additional archived pages
- Extend taskSorting.ts to keep archived task ordering stable with the new paged data
- Add core and dashboard tests covering archive pagination and store/route behavior
- Add changeset for @runfusion/fusion (minor) and update docs/storage.md and docs/dashboard-guide.md
Files changed:
.changeset/FN-7659-archived-pagination.md | 7 +
docs/dashboard-guide.md | 4 +-
docs/storage.md | 7 +
packages/core/src/__tests__/archive-db-pagination.test.ts | 94 ++++++++
packages/core/src/__tests__/store-archive-search.test.ts | 63 ++++++
packages/core/src/archive-db.ts | 18 ++
packages/core/src/store.ts | 32 +++
packages/dashboard/app/App.tsx | 5 +-
packages/dashboard/app/api/legacy.ts | 19 ++
packages/dashboard/app/components/Board.tsx | 19 +-
packages/dashboard/app/components/Column.tsx | 48 ++++-
packages/dashboard/app/components/__tests__/Column.test.tsx | 41 ++++
packages/dashboard/app/components/__tests__/taskSorting.test.ts | 27 +++
packages/dashboard/app/components/dashboard/MainContent.tsx | 9 +
packages/dashboard/app/components/dashboard/types.ts | 6 +
packages/dashboard/app/components/taskSorting.ts | 16 ++
packages/dashboard/app/hooks/__tests__/useTasks.test.ts | 236 ++++++++++++++++++++-
packages/dashboard/app/hooks/useTasks.ts | 173 ++++++++++++++-
packages/dashboard/app/test/mockApi.ts | 3 +
packages/dashboard/src/routes/__tests__/tasks-archived-pagination.test.ts | 94 ++++++++
packages/dashboard/src/routes/register-task-workflow-routes.ts | 32 +++
21 files changed, 930 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-7659
Fusion-Task-Lineage: 7a5a1f62-277c-4f29-883c-62e75b269bc5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
|
||
|
|
97e46674f4 |
FN-7660: rename remaining board-column "Triage" labels to "Planning"
Rename remaining "Triage" board-column label references to "Planning" across dashboard editors, locale strings, and docs. - Fixed BUILTIN_WORKFLOW_COLUMN_LABELS.triage in board-workflows.ts (was still "Triage", clobbering FN-7599's IR rename); column id "triage" stays unchanged - Updated dashboard components (AgentDetailView, RoutineEditor, ScheduleForm, ScheduleStepsEditor) to use the "Planning" label - Updated en/app.json locale strings (board.triage, schedule.columnTriage/taskColumnTriage/triageColumn) to "Planning" - Updated board-workflows tests to assert the new label - Updated docs/dashboard-guide.md Triage/Planning column references to "Planning", preserving the FN-7653 intake-only gating correction - Added a patch changeset documenting the label-consistency fix Files changed: .changeset/fn-7660-planning-label-consistency.md | 7 +++++++ docs/dashboard-guide.md | 9 +++++---- packages/dashboard/app/components/AgentDetailView.tsx | 2 +- packages/dashboard/app/components/RoutineEditor.tsx | 2 +- packages/dashboard/app/components/ScheduleForm.tsx | 2 +- packages/dashboard/app/components/ScheduleStepsEditor.tsx | 2 +- .../dashboard/src/routes/__tests__/board-workflows.test.ts | 7 ++++++- packages/dashboard/src/routes/board-workflows.ts | 10 +++++++++- packages/i18n/locales/en/app.json | 8 ++++---- 9 files changed, 35 insertions(+), 14 deletions(-) Fusion-Task-Id: FN-7660 Fusion-Task-Lineage: fc6c94d6-9876-4c0e-80b1-a5518903952e Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
511bcaf56d |
FN-7657: persist GitHub issue import modal state across close/reopen
Retains the GitHub Import Tasks modal's provider/tab/filter/selection state so returning to Import Tasks doesn't reset the user's in-progress import setup. - GitHubImportModal now persists provider, active tab, label filter, remote, and issue selection per project via a new modalPersistence hook, restoring them on remount instead of always defaulting. - Added packages/dashboard/app/hooks/modalPersistence.ts to encapsulate the persisted-state read/write logic backed by projectStorage. - projectStorage.ts gains the `kb-dashboard-github-import-state` storage key. - Falls back to the existing default-remote auto-detect behavior when no persisted state exists. - Added extensive test coverage in GitHubImportModal.test.tsx for the new persistence behavior. - Updated docs/dashboard-guide.md to describe the retained state. - Added a patch changeset for @runfusion/fusion. Files changed: .changeset/fn-7657-github-import-state-retained.md | 7 + docs/dashboard-guide.md | 2 + .../dashboard/app/components/GitHubImportModal.tsx | 204 +++++++++++++-- .../__tests__/GitHubImportModal.test.tsx | 282 +++++++++++++++++++++ packages/dashboard/app/hooks/modalPersistence.ts | 72 ++++++ packages/dashboard/app/utils/projectStorage.ts | 1 + 6 files changed, 547 insertions(+), 21 deletions(-) Fusion-Task-Id: FN-7657 Fusion-Task-Lineage: c8086340-368c-4efd-a12a-4cddeeb0aa26 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
ebe9b9fa67 |
FN-7653: restrict plan auto-approve toggle to the intake/planning column
Fix the Board Auto-approve plan shortcut leaking onto hold (Todo-like) columns; it must render only on the intake/planning column. - Board.tsx: gate the planAutoApproveEnabled/onTogglePlanAutoApprove prop pair on columnDef.flags.intake only (dropped the || columnDef.flags.hold clause) for both the aggregate and single-workflow column renders - Column.tsx: update the FNXC comment to document that Board.tsx is the single source of truth for this intake-only gating; Column.tsx just renders whatever prop it receives - docs/dashboard-guide.md: correct the Board guide to describe the toggle as intake/planning-column-only, not hold columns - Board.test.tsx: fix the existing intake/hold test expectation to assert the hold column does NOT get the toggle, and add a regression test reproducing the built-in Coding workflow's Todo (hold) column symptom - add a patch changeset documenting the fix Files changed: .changeset/FN-7653-plan-auto-approve-intake-only.md | 7 +++++++ docs/dashboard-guide.md | 5 +++-- packages/dashboard/app/components/Board.tsx | 6 ++++-- packages/dashboard/app/components/Column.tsx | 5 ++++- .../app/components/__tests__/Board.test.tsx | 20 +++++++++++++++++--- 5 files changed, 35 insertions(+), 8 deletions(-) Fusion-Task-Id: FN-7653 Fusion-Task-Lineage: 10c5f01a-b00c-4039-9b83-a8a8965fc56c Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
efabdd6f04 |
FN-7651: remove chat "Search in title only" toggle
Simplifies chat search UX by always matching both title and message content, removing the now-unneeded title-only toggle button and state. - Removed the "Search in title only" toggle button and its CSS from ChatView - Dropped searchInTitleOnly/setSearchInTitleOnly state and logic from useChat; content-search query params are now always-on - Updated ChatView tests to drop title-only toggle interactions and assertions - Removed the title-only-search i18n string across all locales - Updated dashboard-guide.md docs to reflect the simplified search behavior - Added a patch changeset documenting the removal Files changed: .../fn-7651-remove-chat-title-only-toggle.md | 7 +++ docs/dashboard-guide.md | 4 +- packages/dashboard/app/components/ChatView.css | 18 -------- packages/dashboard/app/components/ChatView.tsx | 26 +++-------- .../__tests__/ChatView.autosize.test.tsx | 2 - .../__tests__/ChatView.content-search.test.tsx | 51 ++++++---------------- .../components/__tests__/ChatView.draft.test.tsx | 2 - .../__tests__/ChatView.hash-mention.test.tsx | 2 - .../__tests__/ChatView.mobile-render.test.tsx | 2 - .../components/__tests__/ChatView.rooms.test.tsx | 2 - .../__tests__/ChatView.scroll-to-top.test.tsx | 2 - .../components/__tests__/ChatView.test-harness.tsx | 2 - packages/dashboard/app/hooks/useChat.ts | 39 ++++++++--------- packages/i18n/locales/en/app.json | 1 - packages/i18n/locales/es/app.json | 1 - packages/i18n/locales/zh-CN/app.json | 1 - packages/i18n/locales/zh-TW/app.json | 1 - packages/i18n/locales/ko/app.json | 1 - packages/i18n/locales/fr/app.json | 1 - 19 files changed, 47 insertions(+), 118 deletions(-) Fusion-Task-Id: FN-7651 Fusion-Task-Lineage: 5a31825c-8e6e-441f-800d-6053f5f844ba Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
6777eea5d2 |
FN-7631: add content search to Chat sidebar with title-only toggle
Chat sidebar search now matches message content by default, not just the conversation title/agent, with an opt-out toggle to restore title-only filtering. - Add ChatStore.searchSessionsByMessageContent (parameterized LIKE ... ESCAPE) for server-side content search across sessions - GET /chat/sessions route (register-chat-routes.ts, legacy.ts) gains q/titleOnly query params, debounced server-side content lookup merged with local title/agent matches - useChat hook exposes searchInTitleOnly state and wires debounced content search into session list results - ChatView renders a "Search in title only" toggle beside the search box (desktop + mobile) and shows a "Matched: ..." preview snippet on content-matched rows - Task-planner sessions remain excluded from content matches via the same common-feed visibility guard used for the normal session list - Add unit/integration tests: chat-store content-search, chat-routes API test, ChatView content-search test - Update docs/dashboard-guide.md to document the new content search behavior and toggle - Add changeset fn-7631-chat-content-search.md (@runfusion/fusion minor) Files changed: .changeset/fn-7631-chat-content-search.md | 7 + docs/dashboard-guide.md | 2 + .../__tests__/chat-store.content-search.test.ts | 157 +++++++++++++++++++++ packages/core/src/chat-store.ts | 64 +++++++++ packages/core/src/chat-types.ts | 8 ++ packages/dashboard/app/api/legacy.ts | 23 ++- packages/dashboard/app/components/ChatView.css | 30 ++++ packages/dashboard/app/components/ChatView.tsx | 26 ++++ .../__tests__/ChatView.autosize.test.tsx | 2 + .../__tests__/ChatView.content-search.test.tsx | 114 +++++++++++++++ .../components/__tests__/ChatView.draft.test.tsx | 2 + .../__tests__/ChatView.hash-mention.test.tsx | 2 + .../__tests__/ChatView.mobile-render.test.tsx | 2 + .../components/__tests__/ChatView.rooms.test.tsx | 2 + .../__tests__/ChatView.scroll-to-top.test.tsx | 2 + .../components/__tests__/ChatView.test-harness.tsx | 2 + packages/dashboard/app/hooks/useChat.ts | 105 ++++++++++++-- .../dashboard/src/__tests__/chat-routes.test.ts | 78 ++++++++++ .../dashboard/src/routes/register-chat-routes.ts | 39 ++++- packages/i18n/locales/en/app.json | 2 + packages/i18n/locales/es/app.json | 2 + packages/i18n/locales/fr/app.json | 2 + packages/i18n/locales/ko/app.json | 2 + packages/i18n/locales/zh-CN/app.json | 2 + packages/i18n/locales/zh-TW/app.json | 2 + 25 files changed, 667 insertions(+), 12 deletions(-) Fusion-Task-Id: FN-7631 Fusion-Task-Lineage: bc68b489-26a7-453e-901b-bda816af364e Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
1b7bb1fe18 |
FN-7639: wire message editing into Planner Chat
Adds the ability to edit and resend a prior user message in task-detail Planner Chat, discarding subsequent turns without reverting already-applied steering/refinement side effects. - Wire FN-7628's editChatMessage + rewindSessionForEdit into TaskPlannerChatTab for synthetic task-planner:<id> sessions - Add edit affordance/UI flow and message resend handling in TaskPlannerChatTab - Ensure already-applied steering comments and refinement tasks are not reverted when a turn is discarded - Expand TaskPlannerChatTab test coverage for edit/resend flows - Update dashboard guide docs to describe the new Planner Chat edit behavior - Add changeset for @runfusion/fusion (minor) Files changed: .changeset/fn-7639-planner-chat-edit.md | 7 + docs/dashboard-guide.md | 4 +- .../app/components/TaskPlannerChatTab.tsx | 90 +++++++- .../__tests__/TaskPlannerChatTab.test.tsx | 242 ++++++++++++++++++++- 4 files changed, 328 insertions(+), 15 deletions(-) Fusion-Task-Id: FN-7639 Fusion-Task-Lineage: ed568a81-12fa-42a8-9ecf-29e6c9a2a884 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
42009cfdb9 |
FN-7628: allow editing sent chat messages and rewinding agent responses
Adds the ability to edit a previously sent message in an agent chat, which rewinds the session/task room and regenerates the response from the edited message. - Add chat-store support for locating/replacing a message and truncating subsequent history for a rewind - Add a chat-manager rewind-session flow and a new register-chat-routes endpoint to rewind a room to an edited message - Add legacy API route wiring and useChat hook support for issuing an edit request - Add ChatView/StandardChatSurface/TaskPlannerChatTab UI affordances (edit control, styling) to trigger message edits - Add a changeset documenting the new chat message-edit capability - Add unit/integration tests covering chat-store rewind logic, chat-manager rewind-session behavior, chat routes, useChat, and ChatView edit UI Files changed: .changeset/fn-7628-chat-message-edit.md | 7 + docs/dashboard-guide.md | 4 + packages/core/src/__tests__/chat-store.test.ts | 171 ++++++++++++++ packages/core/src/chat-store.ts | 95 ++++++++ packages/dashboard/app/api/legacy.ts | 22 ++ packages/dashboard/app/components/ChatView.css | 78 ++++++ packages/dashboard/app/components/ChatView.tsx | 14 ++ .../app/components/StandardChatSurface.tsx | 87 ++++++- .../app/components/TaskPlannerChatTab.tsx | 8 + .../__tests__/ChatView.autosize.test.tsx | 1 + .../__tests__/ChatView.default-model-icon.test.tsx | 1 + .../components/__tests__/ChatView.draft.test.tsx | 1 + .../__tests__/ChatView.hash-mention.test.tsx | 1 + .../__tests__/ChatView.message-edit.test.tsx | 262 +++++++++++++++++++++ .../__tests__/ChatView.mobile-render.test.tsx | 1 + .../components/__tests__/ChatView.rooms.test.tsx | 1 + .../__tests__/ChatView.scroll-to-top.test.tsx | 1 + .../components/__tests__/ChatView.test-harness.tsx | 1 + .../dashboard/app/hooks/__tests__/useChat.test.ts | 98 ++++++++ packages/dashboard/app/hooks/useChat.ts | 60 +++++ .../__tests__/chat-manager-rewind-session.test.ts | 185 +++++++++++++++ .../dashboard/src/__tests__/chat-manager.test.ts | 12 + .../dashboard/src/__tests__/chat-routes.test.ts | 124 ++++++++++ packages/dashboard/src/chat.ts | 147 +++++++++++- .../dashboard/src/routes/register-chat-routes.ts | 52 ++++ 25 files changed, 1429 insertions(+), 5 deletions(-) Fusion-Task-Id: FN-7628 Fusion-Task-Lineage: 36d98989-1b75-428c-baf1-b2c7e8e78013 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
0f2bfa546c |
FN-7629: add enable/disable control for built-in runtime plugins
Adds a durable Plugin Manager toggle to enable/disable built-in runtime plugins (Hermes, Paperclip, OpenClaw, Droid) that persists across restarts, replacing the dead-end "Built-in metadata only" CTA. - renderBuiltinPluginSection now renders an enable/disable toggle for runtime built-ins regardless of installed status - Disabling a not-yet-installed built-in first installs it (mirroring CLI's ensureBundledPluginInstalled) then immediately disables it, so a plugin_installs row + disabled project state exists with no new persistence primitive needed - HermesRuntimeCard/OpenClawRuntimeCard/PaperclipRuntimeCard now show "Disabled in Plugin Manager" instead of a stale detected/connected status when disabled - Added i18n strings across all locales and updated docs - Added changeset for @runfusion/fusion (minor) - Expanded plugin-loader and PluginManager test coverage for the new disable/enable flows Files changed: .changeset/fn-7629-builtin-runtime-disable.md | 7 + docs/dashboard-guide.md | 1 + docs/plugin-management.md | 4 + packages/core/src/__tests__/plugin-loader.test.ts | 46 ++++++ .../dashboard/app/components/HermesRuntimeCard.tsx | 40 ++++- .../app/components/OpenClawRuntimeCard.tsx | 32 +++- .../app/components/PaperclipRuntimeCard.tsx | 32 +++- .../dashboard/app/components/PluginManager.css | 34 +++++ .../dashboard/app/components/PluginManager.tsx | 167 +++++++++++++++------ .../components/__tests__/PluginManager.test.tsx | 12 +- .../__tests__/PluginManager.toggle.test.tsx | 104 ++++++++++++- packages/i18n/locales/en/app.json | 4 + packages/i18n/locales/es/app.json | 4 + packages/i18n/locales/fr/app.json | 4 + packages/i18n/locales/ko/app.json | 4 + packages/i18n/locales/zh-CN/app.json | 4 + packages/i18n/locales/zh-TW/app.json | 4 + packages/i18n/src/resources.d.ts | 4 + 18 files changed, 440 insertions(+), 67 deletions(-) Fusion-Task-Id: FN-7629 Fusion-Task-Lineage: 2a25bb1f-3f73-4273-8769-af05c61778f9 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
e44458119c |
FN-7616: make the Planning Mode deepening prompt plan-specific
Replace the fixed generic "Would you like to go deeper?" theme buckets with AI-proposed, plan-specific topics, falling back to the existing regex-derived themes when the AI supplies none. - Add optional PlanningSummary.deepeningThemes (id/label/description) to the completion payload contract in @fusion/core. - Instruct the planning AI prompt to propose 2-5 concrete, plan-aligned deepening themes tied to the plan's actual title/description/deliverables. - Add normalizeDeepeningThemes to validate/sanitize untrusted AI-supplied theme data (dedupe, cap at 6, trim, drop malformed entries) and omit the field entirely when nothing valid remains. - Update buildDeepeningCheckpointOptions to prefer AI-supplied deepeningThemes over the generic CHECKPOINT_THEME_CANDIDATES regex fallback, keeping the reserved 'Proceed to final plan' option first and deterministic in both branches. - Update docs/dashboard-guide.md to describe the new plan-specific deepening behavior and its generic fallback. - Add unit test coverage for the new normalization and checkpoint-option-building logic. - Add a minor changeset for @runfusion/fusion. Files changed: .changeset/fn-7616-planning-deepening-themes.md | 7 + docs/dashboard-guide.md | 3 +- packages/core/src/types.ts | 11 ++ .../planning-interview-formatters.test.ts | 176 +++++++++++++++++++++ .../src/__tests__/routes-planning.test.ts | 61 +++++++ packages/dashboard/src/planning.ts | 86 +++++++++- 6 files changed, 341 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-7616 Fusion-Task-Lineage: f6c1d0d7-f0ca-45c9-85cd-d57958ad94c7 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
5631c88d54 |
FN-7614: replace planning-mode banner with yellow nav badge for needs-input state
Planning Mode's "waiting for input" indicator moves from a top banner (whose button did not redirect correctly) to a yellow status-dot badge on the Planning nav destination, matching the existing chat unread-badge pattern. - Add a `planningNeedsInput` flag in app lifecycle utils to detect awaiting_input planning sessions - Exclude planning awaiting_input sessions from SessionNotificationBanner so the banner no longer shows for this case - Add a status-dot--pending badge to the Planning entry in LeftSidebarNav and to the Planning item/tab in MobileNavBar - Add/extend tests covering appLifecycle, LeftSidebarNav, MobileNavBar, and SessionNotificationBanner behavior - Add changeset (patch) documenting the fix - Update dashboard-guide.md docs Files changed: .changeset/fn-7614-planning-badge.md | 7 +++ docs/dashboard-guide.md | 4 ++ packages/dashboard/app/App.tsx | 13 +++- .../dashboard/app/components/LeftSidebarNav.tsx | 10 +++ packages/dashboard/app/components/MobileNavBar.css | 20 ++++++ packages/dashboard/app/components/MobileNavBar.tsx | 19 +++++- .../components/__tests__/LeftSidebarNav.test.tsx | 28 +++++++++ .../app/components/__tests__/MobileNavBar.test.tsx | 41 ++++++++++++ .../__tests__/SessionNotificationBanner.test.tsx | 44 +++++++++++++ .../app/utils/__tests__/appLifecycle.test.ts | 73 +++++++++++++++++++++- packages/dashboard/app/utils/appLifecycle.ts | 12 ++++ packages/i18n/locales/en/app.json | 1 + packages/i18n/locales/es/app.json | 1 + packages/i18n/locales/fr/app.json | 1 + packages/i18n/locales/ko/app.json | 1 + packages/i18n/locales/zh-CN/app.json | 1 + packages/i18n/locales/zh-TW/app.json | 1 + packages/i18n/src/resources.d.ts | 1 + 18 files changed, 275 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-7614 Fusion-Task-Lineage: 249e6ee8-149c-4d51-85b6-561dfc30c769 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
44442622c5 |
FN-7609: show gated action payload details on approval requests
Approval cards previously showed only a generic gating message with no visibility into the underlying command/arguments being approved, and repeated pending requests for the same action could pile up as duplicates. - Add GatedActionApprovalDetails component to render the gated command/arguments payload on agent-gating approval cards in MailboxView - Persist approvalDedupeKey in targetAction.context and a payload-bearing summary via buildAgentGatedActionSummary in permanent-agent-gating - Wire agent-heartbeat, executor, and pi to pass through the richer gated-action context/summary - Add changeset (patch) documenting the fix - Update docs/dashboard-guide.md - Add/extend tests: GatedActionApprovalDetails, MailboxView, permanent-agent-gating, pi-create-fn-agent Files changed: .changeset/FN-7609-gated-action-approval-payload.md | 7 ++ docs/dashboard-guide.md | 1 + packages/core/src/types.ts | 8 +++ .../app/components/GatedActionApprovalDetails.css | 50 ++++++++++++++ .../app/components/GatedActionApprovalDetails.tsx | 72 +++++++++++++++++++ packages/dashboard/app/components/MailboxView.tsx | 12 ++++ .../__tests__/GatedActionApprovalDetails.test.tsx | 66 ++++++++++++++++++ .../app/components/__tests__/MailboxView.test.tsx | 41 +++++++++++ .../src/__tests__/permanent-agent-gating.test.ts | 31 +++++++++ .../src/__tests__/pi-create-fn-agent.test.ts | 80 ++++++++++++++++++++++ packages/engine/src/agent-heartbeat.ts | 19 ++++- packages/engine/src/executor.ts | 19 ++++- packages/engine/src/permanent-agent-gating.ts | 53 ++++++++++++++ packages/engine/src/pi.ts | 6 ++ 14 files changed, 461 insertions(+), 4 deletions(-) Fusion-Task-Id: FN-7609 Fusion-Task-Lineage: 80a6bb5b-79f7-4b78-9204-402c2dea6171 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
f7dfcb3b09 |
FN-7604: collapse overseer/oversight controls into a single dropdown across surfaces
Unifies the previously mobile-only Oversight overflow menu into a single, always-present dropdown that replaces the scattered desktop oversight buttons and the separate mobile affordance. - Replace discrete desktop oversight action buttons in TaskDetailModal's footer with one universal "Oversight actions" dropdown trigger, reusing the menu across desktop and mobile breakpoints. - Simplify TaskDetailModal.tsx footer rendering logic, removing now-redundant responsive branching for oversight controls. - Update TaskDetailModal.css to drop the old mobile-only oversight-overflow styles and support the unified dropdown across breakpoints. - Update definition-actions, oversight-controls, oversight-mobile, rendering, and responsive-and-dependencies tests to assert the single dropdown behavior and disambiguate the exact "Actions" button query from the new "Oversight actions" aria-label. - Refresh docs/dashboard-guide.md to describe the unified oversight dropdown UX. Files changed: docs/dashboard-guide.md | 14 +- packages/dashboard/app/components/TaskDetailModal.css | 89 +++++------ packages/dashboard/app/components/TaskDetailModal.tsx | 177 +++------------------ packages/dashboard/app/components/__tests__/TaskDetailModal.definition-actions.test.tsx | 70 ++++---- packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-controls.test.tsx | 130 ++++++++++----- packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-mobile.test.tsx | 42 +++-- packages/dashboard/app/components/__tests__/TaskDetailModal.rendering.test.tsx | 27 ++-- packages/dashboard/app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx | 57 ++++--- 8 files changed, 278 insertions(+), 328 deletions(-) Fusion-Task-Id: FN-7604 Fusion-Task-Lineage: afbb7573-d654-48db-a9ac-aecbd8e22e46 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
cf3fe8b485 |
FN-7591: make dashboard create surfaces resolve intake column from workflow instead of hard-coding triage
Fixes dashboard task creation so new cards land in the selected/default workflow's intake column instead of always forcing legacy triage, letting workflows like Coding (Ideas) park new cards in 'ideas' until an operator promotes them. - InlineCreateCard, QuickEntryBox, and NewTaskModal no longer hard-code column:"triage"; InlineCreateCard now forwards workflowId at create time instead of applying it post-create. - Fixed a glue-layer regression in useTaskHandlers.ts (handleBoardQuickCreate/handleModalCreate) that re-forced column:"triage" even after UI surfaces stopped sending it. - Added/updated tests covering the store's intake-column resolution and the dashboard create surfaces/hooks. - Documented the new manual-intake-column parking behavior in dashboard-guide.md and workflow-steps.md. - Added a patch changeset for @runfusion/fusion. Files changed: .changeset/fn-7591-coding-ideas-intake.md | 7 +++ docs/dashboard-guide.md | 4 ++ docs/workflow-steps.md | 1 + packages/core/src/__tests__/store-create-intake-column.test.ts | 20 ++++++++ packages/dashboard/app/App.tsx | 5 +- packages/dashboard/app/components/InlineCreateCard.tsx | 28 ++++------ packages/dashboard/app/components/NewTaskModal.tsx | 5 +- packages/dashboard/app/components/QuickEntryBox.tsx | 5 +- packages/dashboard/app/components/TodoView.tsx | 7 ++- packages/dashboard/app/components/__tests__/InlineCreateCard.test.tsx | 59 +++++++++++++++++++++- packages/dashboard/app/components/__tests__/QuickEntryBox.test.tsx | 14 +++-- packages/dashboard/app/components/__tests__/TodoView.test.tsx | 10 ++-- packages/dashboard/app/components/__tests__/board-quickcreate-workflow-lane-visibility.test.tsx | 45 ++++++++++++++++- packages/dashboard/app/hooks/__tests__/useTaskHandlers.test.ts | 27 ++++++++-- packages/dashboard/app/hooks/useTaskHandlers.ts | 8 ++- 15 files changed, 207 insertions(+), 38 deletions(-) Fusion-Task-Id: FN-7591 Fusion-Task-Lineage: 510f0e6a-89e7-468f-a6df-ad6aebd5c33a Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
e7cb2f1fed |
FN-7525: add Revert/Undo affordance to Done and Archived task cards
Adds a Revert action so operators can undo landed changes for Done/Archived tasks directly from the board. - Adds onRevertTask wiring through Board, Column, Lane, ListView, TaskDetailModal, and WorktreeGroup surfaces - Adds a Revert affordance to TaskCard (Done/Archived states) with confirm UX and CSS - Adds POST /tasks/:id/revert legacy API route supporting "auto" mode with an AI-undo fallback (mode: "ai") on conflict - Wires useTasks hook and dashboard MainContent/types to support the new revert action - Adds new i18n strings for the revert affordance - Adds a minor changeset for @runfusion/fusion documenting the feature - Adds/updates tests: TaskCard.test.tsx, board-mobile.test.tsx, api-git.test.ts - Updates docs/dashboard-guide.md and docs/task-management.md Files changed: .changeset/fn-7525-revert-card-affordance.md | 7 + docs/dashboard-guide.md | 2 +- docs/task-management.md | 10 ++ packages/dashboard/app/App.tsx | 7 +- packages/dashboard/app/__tests__/api-git.test.ts | 51 +++++++ packages/dashboard/app/api/legacy.ts | 51 +++++++ packages/dashboard/app/components/AppModals.tsx | 5 +- packages/dashboard/app/components/Board.tsx | 10 +- packages/dashboard/app/components/Column.tsx | 8 +- packages/dashboard/app/components/Lane.tsx | 5 +- packages/dashboard/app/components/ListView.tsx | 80 ++++++++++- packages/dashboard/app/components/TaskCard.css | 24 +++- packages/dashboard/app/components/TaskCard.tsx | 127 ++++++++++++++++- packages/dashboard/app/components/TaskDetailModal.tsx | 85 ++++++++++++ packages/dashboard/app/components/WorktreeGroup.tsx | 6 + packages/dashboard/app/components/__tests__/TaskCard.test.tsx | 151 +++++++++++++++++++++ packages/dashboard/app/components/__tests__/board-mobile.test.tsx | 63 +++++++++ packages/dashboard/app/components/dashboard/MainContent.tsx | 4 + packages/dashboard/app/components/dashboard/types.ts | 8 ++ packages/dashboard/app/components/useRightDockController.tsx | 4 + packages/dashboard/app/hooks/useTasks.ts | 21 ++- packages/i18n/locales/en/app.json | 11 ++ 22 files changed, 718 insertions(+), 22 deletions(-) Fusion-Task-Id: FN-7525 Fusion-Task-Lineage: b9e2ca94-4ec6-4443-8e41-cf4828018856 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
ce9df297eb |
FN-7574: fix OAuth token expiry detection and add proactive auto-refresh
Unifies OAuth expiry detection so expired Claude subscription logins correctly show as disconnected with a re-login prompt, and adds a proactive engine-side scheduler that refreshes tokens before they expire. - Share expiry-detection logic between OAuthExpiryMonitor and the /api/auth/status route so both agree on when a token is expired. - Add engine-side oauth-refresh-scheduler that proactively refreshes OAuth tokens ahead of expiry, wired into project-engine (guarded by skipNotifier). - Extend auth-storage with the helpers needed for expiry checks/refresh. - Add tests covering routes-auth status detection, auth-storage expiry helpers, and the new refresh scheduler. - Document the new behavior in dashboard-guide.md and settings-reference.md. - Add changeset for the user-facing fix. Files changed: .../fn-7574-oauth-expiry-detection-refresh.md | 7 + docs/dashboard-guide.md | 4 + docs/settings-reference.md | 4 + .../dashboard/src/__tests__/routes-auth.test.ts | 76 +++++++++++ .../dashboard/src/routes/register-auth-routes.ts | 25 +++- packages/engine/src/__tests__/auth-storage.test.ts | 60 +++++++++ packages/engine/src/auth-storage.ts | 14 +- .../__tests__/oauth-refresh-scheduler.test.ts | 141 ++++++++++++++++++++ packages/engine/src/notification/index.ts | 3 + .../src/notification/oauth-refresh-scheduler.ts | 143 +++++++++++++++++++++ packages/engine/src/project-engine.ts | 14 +- 11 files changed, 488 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-7574 Fusion-Task-Lineage: 59996eac-c070-4992-9727-d066c6934b69 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
c31f9ef4d4 |
FN-7571: move planner intervention timeline into Activity dropdown
Relocates the FN-7519 Intervention Timeline out of the inline oversight cluster and into the task Activity view as a fourth selectable segment. - Add `interventions` to the `ActivitySegment` union and gate its dropdown option on the same oversight-active expression previously used by the inline mount - Render `PlannerInterventionTimeline` in a new Activity segment panel instead of inline next to the oversight controls - Fall back to the Live segment automatically if oversight turns off (or was never resolved) while Interventions is selected, avoiding an orphaned selection - Update oversight-controls and task-activity-chat tests to cover the new dropdown segment and removed inline mount - Add changeset and update dashboard guide docs Files changed: ...7571-intervention-timeline-activity-dropdown.md | 7 + docs/dashboard-guide.md | 4 +- .../dashboard/app/components/TaskDetailModal.tsx | 49 ++++--- .../TaskDetailModal.oversight-controls.test.tsx | 148 +++++++++++++++++++++ .../TaskDetailModal.task-activity-chat.test.tsx | 7 +- 5 files changed, 195 insertions(+), 20 deletions(-) Fusion-Task-Id: FN-7571 Fusion-Task-Lineage: 331a1b32-5712-4583-9777-e36ff5cc3ffc Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
1d69dec087 |
FN-7562: fix mobile oversight menu auto-focus opening a second native select popup
Fixes the mobile oversight overflow menu rendering two overlapping menus by narrowing auto-focus to actionable button menuitems. - Change the menu-open auto-focus effect to query `button.detail-oversight-menu-item` instead of matching any `.detail-oversight-menu-item` element, since the native level `<select>` also carried that class and was matched first. - Programmatically focusing the native `<select>` triggered its OS option picker, which rendered as a second overlapping menu on top of the custom `role="menu"` popover. - Add regression tests covering: auto-focus landing on the first button menuitem when nudge/stop/explain are available, no fallback focus on the select when oversight is off (level-only state), and confirming the desktop inline select is unaffected. - Update dashboard-guide.md docs to describe the fixed auto-focus behavior. Files changed: docs/dashboard-guide.md | 2 +- packages/dashboard/app/components/TaskDetailModal.tsx | 3 +- .../app/components/__tests__/TaskDetailModal.oversight-mobile.test.tsx | 96 ++++++++++++++++++++++ 3 files changed, 99 insertions(+), 2 deletions(-) Fusion-Task-Id: FN-7562 Fusion-Task-Lineage: f39068f1-811f-4663-ade1-ff020a389ae5 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3d55102091 |
FN-7546: clarify planner-oversight Nudge/Explain controls with visible label and in-DOM disabled reason
Add a visible group label and an in-DOM disabled-reason helper to the task-detail oversight controls so the Nudge/Explain cluster is no longer confusing when greyed out, and make Explain always-openable since it is read-only. - Add a `detail-oversight-controls-label` group label above the Nudge/Stop/Explain buttons, gated by the same visibility condition as the buttons (mobile and desktop clusters) - Add a `detail-overseer-nudge-disabled-reason` in-DOM helper line explaining why Nudge is unavailable, instead of relying only on a hover title - Remove the disabled gate from Explain (it's read-only/non-mutating) and update its title copy to reflect that it always opens and shows last-known state when inactive - Add regression tests covering the new label/helper text and Explain's always-enabled behavior - Add a patch changeset and a docs/dashboard-guide.md note Files changed: .changeset/FN-7546-oversight-controls-clarity.md | 7 +++ docs/dashboard-guide.md | 2 + .../dashboard/app/components/TaskDetailModal.css | 42 +++++++++++++ .../dashboard/app/components/TaskDetailModal.tsx | 41 +++++++++++-- .../TaskDetailModal.oversight-controls.test.tsx | 69 ++++++++++++++++++++++ 5 files changed, 157 insertions(+), 4 deletions(-) Fusion-Task-Id: FN-7546 Fusion-Task-Lineage: d1f342ea-2de0-4b54-9930-9b3d540c7af6 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
f992e6aefa |
FN-7553: add dedicated keyboard shortcuts settings section
Adds a standalone Keyboard Shortcuts settings section with an easier-to-use capture input and support for more shortcut actions. - Introduce a new KeyboardShortcutsSection with a dedicated ShortcutCaptureInput component for recording key combos - Split keyboard-shortcut settings out of the general settings section into their own settings tab - Extend the shortcut schema/types and useDashboardKeyboardShortcuts hook to support additional actions - Update settings save-split, section-keys, and defaults/parity tests to cover the new section - Update dashboard docs and add a changeset for the new settings section Files changed: .changeset/fn-7553-keyboard-shortcuts-section.md | 7 + docs/dashboard-guide.md | 22 ++- packages/core/src/__tests__/global-settings.test.ts | 9 +- packages/core/src/__tests__/settings-defaults.test.ts | 4 + packages/core/src/__tests__/settings-parity.test.ts | 2 +- packages/core/src/settings-schema.ts | 6 +- packages/core/src/types.ts | 12 ++ packages/dashboard/app/App.tsx | 26 +++- packages/dashboard/app/__tests__/App.keyboard-shortcuts.test.tsx | 47 ++++++- packages/dashboard/app/components/SettingsModal.css | 56 ++++++-- packages/dashboard/app/components/SettingsModal.tsx | 30 +++- packages/dashboard/app/components/__tests__/SettingsModal.general.test.tsx | 63 --------- packages/dashboard/app/components/__tests__/SettingsModal.keyboardShortcuts.test.tsx | 156 +++++++++++++++++++++ packages/dashboard/app/components/settings/__tests__/section-keys.test.ts | 1 + packages/dashboard/app/components/settings/save-split.ts | 6 +- packages/dashboard/app/components/settings/sections/GlobalGeneralSection.tsx | 38 ----- packages/dashboard/app/components/settings/sections/KeyboardShortcutsSection.tsx | 78 +++++++++++ packages/dashboard/app/components/settings/sections/ShortcutCaptureInput.tsx | 118 ++++++++++++++++ packages/dashboard/app/components/settings/sections/__tests__/KeyboardShortcutsSection.test.tsx | 113 +++++++++++++++ packages/dashboard/app/hooks/__tests__/useDashboardKeyboardShortcuts.test.tsx | 73 +++++++++- packages/dashboard/app/hooks/useDashboardKeyboardShortcuts.ts | 38 ++++- packages/dashboard/app/utils/__tests__/keyboardShortcuts.test.ts | 37 ++++- packages/dashboard/app/utils/keyboardShortcuts.ts | 54 ++++++- 23 files changed, 854 insertions(+), 142 deletions(-) Fusion-Task-Id: FN-7553 Fusion-Task-Lineage: 51c1ad69-fbd3-45ce-8d2d-45d9962d7b76 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
19a436ab5e |
FN-7545: collapse task-detail oversight controls into mobile overflow menu
Adds a mobile-friendly overflow menu for the task-detail planner-overseer controls, keeping the desktop inline cluster unchanged. - Below 768px, replace the inline oversight-level select/nudge/stop/explain controls with a single "Oversight" overflow-menu trigger (MoreVertical icon, aria-haspopup="menu") mirroring the existing move-action dropdown pattern - Popover lists the same controls as full-width, tappable role="menuitem" entries with identical testids and enablement/visibility rules as desktop - Trigger is withheld entirely when no controls would render (no empty-shell button) - Desktop (>768px) inline cluster is unchanged - Adds TaskDetailModal.oversight-mobile.test.tsx covering trigger visibility, menu contents, and parity with desktop controls - Updates docs/dashboard-guide.md to document the mobile overflow-menu behavior Files changed: docs/dashboard-guide.md | 2 + packages/dashboard/app/components/TaskDetailModal.css | 118 ++++++ packages/dashboard/app/components/TaskDetailModal.tsx | 383 ++++++++++++++----- packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-mobile.test.tsx | 413 +++++++++++++++++++++ packages/dashboard/app/components/__tests__/TaskDetailModal.test-helpers.ts | 2 + 5 files changed, 830 insertions(+), 88 deletions(-) Fusion-Task-Id: FN-7545 Fusion-Task-Lineage: 63cb778e-f17d-43d3-a3de-864683d4e8f1 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
b4be5153f3 |
FN-7542: remove active-overseer-state badge from task cards
Removes the recently-added executor/reviewer/merger overseer-state chip from TaskCard, which fired as noise on nearly every in-progress card, keeping the separate oversight-level badge untouched. - Deletes deriveOverseerCardWatchedStage and its OVERSEER_STATE_LABEL/MODIFIER maps from TaskCard.tsx - Removes showOverseerStateBadge gating and its contribution to hasCardMetaBadges/areTaskCardPropsEqual - Strips the now-unused .task-card-overseer-state-badge CSS rules from TaskCard.css - Rewrites TaskCard.oversight.test.tsx to drop overseer-state-badge coverage while keeping oversight-level badge tests - Updates docs/dashboard-guide.md reference and adds a changeset documenting the removal Files changed: .changeset/fn-7542-remove-overseer-state-badge.md | 7 + docs/dashboard-guide.md | 2 +- packages/dashboard/app/components/TaskCard.css | 63 +------- packages/dashboard/app/components/TaskCard.tsx | 161 +++------------------ .../__tests__/TaskCard.oversight.test.tsx | 149 +++++++------------ 5 files changed, 77 insertions(+), 305 deletions(-) Fusion-Task-Id: FN-7542 Fusion-Task-Lineage: dabaf72a-a7b0-4054-8a72-7c3d99fa7bb1 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
62ddb19cb3 |
FN-7543: render original task prompt as collapsible markdown in Plan tab
Original prompt in the Task Detail Plan tab now renders as Markdown and is collapsed by default behind a chevron toggle, matching the shared PROMPT.md renderer instead of showing raw preserved plain text. - Add a collapse/expand chevron toggle (`.detail-source-header`/`.detail-source-toggle`) for the original-prompt section, collapsed by default; toggle only renders when content exists. - Render the expanded original prompt through the shared ReactMarkdown pipeline (remarkGfm, sharedRehypePlugins, markdownLinkifyComponents) instead of plain preserved text. - Update CSS: replace `.detail-original-prompt-text` box/border/pre-wrap styling with `.detail-section--original-prompt .markdown-body` sizing rules (including mobile breakpoint). - Update dashboard-guide.md docs to describe the collapsed-by-default markdown rendering behavior. - Update TaskDetailModal tests to cover collapsed-by-default state, expand/collapse toggle, markdown rendering, and no-toggle empty state. - Add changeset (@runfusion/fusion patch) describing the user-facing behavior change. Files changed: .changeset/fn-7543-original-prompt-markdown-collapsed.md | 7 +++ docs/dashboard-guide.md | 2 +- packages/dashboard/app/components/TaskDetailModal.css | 13 ++---- packages/dashboard/app/components/TaskDetailModal.tsx | 30 +++++++++++-- packages/dashboard/app/components/__tests__/TaskDetailModal.inline-editing-and-integrations.test.tsx | 52 +++++++++++++--------- 5 files changed, 69 insertions(+), 35 deletions(-) Fusion-Task-Id: FN-7543 Fusion-Task-Lineage: b00964c0-404e-41a1-b9e1-336c000d4acc Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
5c3d58a5d7 |
FN-7539: suppress oversight badge for inherited default level
Prevent the Auto-recovery/oversight badge from rendering on virtually every task card when the effective planner oversight level is just the inherited schema default. - TaskCard: track whether the effective oversight level was reached purely via inheritance (no per-task override, no explicit non-default workflow tier), and suppress the badge in that case - Preserve badge visibility when a task explicitly overrides oversight to "autonomous" or a workflow tier explicitly resolves to a non-default level - Update TaskCard oversight tests to cover inherited-default suppression vs explicit-override rendering - Add changeset documenting the fix - Update dashboard guide docs Files changed: .changeset/fn-7539-oversight-badge-default.md | 7 ++++ docs/dashboard-guide.md | 3 +- packages/dashboard/app/components/TaskCard.tsx | 21 +++++++++- .../__tests__/TaskCard.oversight.test.tsx | 48 +++++++++++++++++++--- .../app/components/__tests__/TaskCard.test.tsx | 11 +++-- 5 files changed, 76 insertions(+), 14 deletions(-) Fusion-Task-Id: FN-7539 Fusion-Task-Lineage: 8ac9a60c-69c6-4095-b6b2-18c79718b62b Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
d10ea9aef1 |
FN-7519: add planner-overseer intervention timeline model and UI
Introduces a persisted planner-overseer intervention timeline surfaced in the task-detail Planner Oversight cluster, recording stage, reason, action taken, outcome, attempt count/limit, and source links for each intervention. - Add core `PlannerInterventionEntry` type plus `recordPlannerIntervention`/`getPlannerInterventionTimeline` helpers that persist entries via the run-audit store under the `overseer:intervention` mutation - Add `PlannerInterventionTimeline` dashboard component rendering the timeline (stage/reason/action/outcome/attempts/links) with associated styles - Wire the new API route/legacy handler and TaskDetailModal integration to expose and render the timeline - Add unit tests for the core helpers and the new UI component - Add changeset for the new minor feature and update architecture/dashboard-guide docs Files changed: $(cat /tmp/diffstat_7519.txt) Fusion-Task-Id: FN-7519 Fusion-Task-Lineage: 3c4fcda3-9eb2-46d3-b142-b0c7d6334cd0 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
6498d028f2 |
FN-7517: add task detail oversight quick-controls (level change, manual nudge, stop, explain-current-action)
Adds task detail modal controls that let an operator quickly change a task's oversight level, nudge the planner with a manual instruction, stop oversight entirely, and request an explanation of the overseer's current action, backed by new dashboard API routes and engine/core plumbing. - Add oversight quick-controls UI (level change, manual nudge, stop oversight, explain-current-action) to TaskDetailModal with supporting styles in TaskDetailModal.css and TaskCard.css - Add dashboard legacy API + task-workflow routes to handle the new oversight actions (register-task-workflow-routes.ts, api/legacy.ts) - Extend planner-overseer-state and planner-overseer-runtime-snapshot to track/report manual nudge and stop-oversight state - Extend PlannerRecoveryController and project-engine to apply manual oversight actions (level change, nudge, stop, explain) end-to-end - Add tests: TaskDetailModal.oversight-controls.test.tsx, tasks-overseer-controls.test.ts, planner-recovery-controller-manual-action.test.ts, plus updates to planner-overseer-runtime-snapshot.test.ts and test-helpers - Update docs/dashboard-guide.md and docs/settings-reference.md Files changed: docs/dashboard-guide.md | 2 + docs/settings-reference.md | 2 +- packages/core/src/planner-overseer-state.ts | 18 + packages/dashboard/app/api/legacy.ts | 33 ++ packages/dashboard/app/components/TaskCard.css | 13 + packages/dashboard/app/components/TaskDetailModal.css | 122 +++++++ packages/dashboard/app/components/TaskDetailModal.tsx | 374 ++++++++++++++++++++- packages/dashboard/app/components/__tests__/TaskDetailModal.oversight-controls.test.tsx | 290 ++++++++++++++++ packages/dashboard/app/components/__tests__/TaskDetailModal.test-helpers.ts | 11 + packages/dashboard/src/routes/__tests__/tasks-overseer-controls.test.ts | 191 +++++++++++ packages/dashboard/src/routes/register-task-workflow-routes.ts | 68 ++++ packages/engine/src/__tests__/planner-overseer-runtime-snapshot.test.ts | 24 +- packages/engine/src/__tests__/planner-recovery-controller-manual-action.test.ts | 84 +++++ packages/engine/src/planner-overseer-runtime-snapshot.ts | 11 + packages/engine/src/planner-recovery-controller.ts | 40 +++ packages/engine/src/project-engine.ts | 102 ++++++ 16 files changed, 1380 insertions(+), 5 deletions(-) Fusion-Task-Id: FN-7517 Fusion-Task-Lineage: eded7ff5-d126-429d-acbb-9f4bfff5ae2a Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
ad744aa28a |
FN-7537: make manual backup automation runs match cron in-process behavior
Manual 'Run now' automation runs previously always shelled out via exec(), diverging from the scheduled cron path which runs backup commands in-process; this unifies both paths and adds live-run output coverage. - Export formatInProcessBackupError, isInProcessBackupCommand, and isInProcessMemoryBackupCommand from @fusion/engine for reuse - Have the dashboard's single-command/command-step manual run path (executeSingleCommand in routes.ts) intercept in-process backup/memory-backup commands via the scoped TaskStore, mirroring RoutineRunner.executeCommand/CronRunner - Add regression coverage confirming onStep/onText live-run callbacks stream incremental output for the new interception branch - Add changeset and doc note for the fix Files changed: .changeset/fn-7537-backup-automation-manual-run.md | 7 + docs/dashboard-guide.md | 3 + .../src/__tests__/routes-automation.test.ts | 171 +++++++++++++++++++++ packages/dashboard/src/routes.ts | 73 ++++++++- .../engine/src/__tests__/routine-runner.test.ts | 96 +++++++++++- packages/engine/src/cron-runner.ts | 7 +- packages/engine/src/index.ts | 2 +- 7 files changed, 354 insertions(+), 5 deletions(-) Fusion-Task-Id: FN-7537 Fusion-Task-Lineage: 47824270-c0d4-471b-a5c9-f5350176df29 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
8d36b99b22 |
FN-7536: fix Activity dropdown closing on mobile scroll/resize echoes
Route window resize/orientationchange/scroll through the same opening-viewport guard used by visualViewport so a same-gesture echo repositions the Activity menu instead of closing it, fixing the dropdown not showing on mobile. - Add handleGuardedViewportChange shared by resize/orientationchange/visualViewport listeners so an opening-gesture echo only repositions the menu instead of closing it - Add handleScrollChange to treat scrolls originating inside the .detail-tabs horizontal tab strip as benign (reposition-only), since window scroll listens with capture and would otherwise see nested scroller scrolls as a close signal - Add regression tests covering mobile Activity dropdown open/scroll/resize behavior - Add changeset for the fix - Update dashboard guide docs Files changed: .changeset/fn-7536-activity-dropdown-mobile.md | 7 + docs/dashboard-guide.md | 1 + .../dashboard/app/components/TaskDetailModal.tsx | 38 +++-- .../TaskDetailModal.task-activity-chat.test.tsx | 161 +++++++++++++++++++++ 4 files changed, 196 insertions(+), 11 deletions(-) Fusion-Task-Id: FN-7536 Fusion-Task-Lineage: c8a3b11e-9bd2-4a61-b49e-038c93cfe4d2 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
df0be88482 |
FN-7534: fix branch-group completion for archived unlanded members
Branch-group completion no longer silently drops archived-but-unlanded members, which previously let genuinely-incomplete groups be flagged complete and promoted. - listTasksByBranchGroup now scans with includeArchived:true so archived members stay counted in the group's total instead of dropping out silently - ArchivedTaskEntry gains a persisted mergeDetails snapshot so an archived member that had already landed is still distinguished from one that never landed - store.ts archival paths (task->archive projection) now carry mergeDetails through so isBranchGroupMemberLanded keeps working post-archival - Added regression coverage in branch-group-store.test.ts and group-merge-coordinator.test.ts for archived-landed and archived-unlanded gating - Added changeset documenting the fix as a patch-level bug fix Files changed: .changeset/fn-7534-branch-group-archived-member.md | 7 + docs/dashboard-guide.md | 2 + packages/core/src/__tests__/branch-group-store.test.ts | 77 +++++++++++ packages/core/src/store.ts | 30 ++++- packages/core/src/types.ts | 11 ++ packages/engine/src/__tests__/group-merge-coordinator.test.ts | 148 ++++++++++++++++++++- 6 files changed, 273 insertions(+), 2 deletions(-) Fusion-Task-Id: FN-7534 Fusion-Task-Lineage: 510af857-ce08-49a0-a2a1-41b3ad473804 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
31822b0336 |
FN-7516: show effective oversight level and active overseer state on task cards
Adds two display-only badges to TaskCard so operators can see planner oversight configuration and live overseer activity at a glance. - Resolve and display the workflow's effective `plannerOversightLevel` (observe/steer/autonomous) per task, with a module-level cache keyed by (projectId, workflowId) and in-flight de-duplication to avoid redundant `/api/workflows/:id/setting-values` fetches across cards sharing a workflow. - Gate oversight badge rendering until the workflow-effective value resolves (or a per-task override is known) so the very first render never shows a guessed schema-default badge. - Derive a card-local "active overseer state" indicator (Executor/Reviewer/Merger/Pull request/Workflow gate) that mirrors the engine's `resolveWatchedStage` precedence using only fields already present on the Task payload (column, paused, pausedReason, prInfo, reviewState, workflowTransitionNotification), since the real in-memory monitor state has no persisted/API surface today. - Add corresponding CSS badge modifiers and update dashboard-guide.md documentation. - Add TaskCard.oversight.test.tsx covering the new badges and update existing TaskCard tests/badge-wrap test for the new markup. Files changed: docs/dashboard-guide.md | 4 + packages/dashboard/app/components/TaskCard.css | 106 +++++- packages/dashboard/app/components/TaskCard.tsx | 369 +++++++++++++++++++- .../__tests__/TaskCard.badge-wrap.test.tsx | 1 + .../__tests__/TaskCard.oversight.test.tsx | 383 +++++++++++++++++++++ .../app/components/__tests__/TaskCard.test.tsx | 32 +- 6 files changed, 889 insertions(+), 6 deletions(-) Fusion-Task-Id: FN-7516 Fusion-Task-Lineage: ce909409-862b-4697-a19e-d6735a3b572d Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
36bd74e337 |
FN-7532: stamp branch group merge attribution
Ensure shared branch group members record merge attribution so completion checklists reflect real landed state. - Route AI merges through branch-group merge routing before selecting the integration target. - Stamp mergeDetails merge target fields for both landed and no-op finalize paths. - Record shared-group member landing state and best-effort managed PR checklist sync after AI merges. - Cover dashboard, CLI lifecycle, and merger scenarios for accurate branch-group completion counts. Files changed: .changeset/fn-7532-branch-group-completion.md | 7 ++ docs/dashboard-guide.md | 2 + .../src/commands/__tests__/task-lifecycle.test.ts | 29 +++++++ .../src/__tests__/routes-branch-groups.test.ts | 45 +++++++++++ packages/engine/src/__tests__/merger-ai.test.ts | 68 +++++++++++++++- packages/engine/src/merger-ai.ts | 90 +++++++++++++++++++++- 6 files changed, 235 insertions(+), 6 deletions(-) Fusion-Task-Id: FN-7532 Fusion-Task-Lineage: cd65c18a-f1ad-4f8b-99b2-2e61e233f042 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
c16cc9e08a |
FN-7515: expose planner oversight configuration
Expose planner oversight as workflow-native configuration across task and workflow surfaces. - Add a shared TaskForm selector for per-task planner oversight overrides with inherit semantics. - Thread plannerOversightLevel through new task creation, task detail edits, and legacy dashboard API payloads. - Add a Workflow Editor Values display group and documentation for configuring workflow defaults. - Cover create, edit, form, and workflow settings behavior with dashboard tests. Files changed: .changeset/fn-7515-planner-oversight-config-exposure.md | 7 ++ docs/dashboard-guide.md | 1 + docs/settings-reference.md | 2 +- packages/dashboard/app/api/legacy.ts | 3 + packages/dashboard/app/components/NewTaskModal.tsx | 12 +++- packages/dashboard/app/components/TaskDetailModal.tsx | 11 +++- packages/dashboard/app/components/TaskForm.tsx | 34 ++++++++++ packages/dashboard/app/components/__tests__/NewTaskModal.test.tsx | 31 +++++++++ packages/dashboard/app/components/__tests__/TaskDetailModal.inline-editing-and-integrations.test.tsx | 76 ++++++++++++++++++++++ packages/dashboard/app/components/__tests__/TaskForm.test.tsx | 28 ++++++++ packages/dashboard/app/components/__tests__/WorkflowSettingsPanel.test.tsx | 34 ++++++++++ packages/dashboard/app/components/workflow-setting-display.ts | 17 ++++- 12 files changed, 251 insertions(+), 5 deletions(-) Fusion-Task-Id: FN-7515 Fusion-Task-Lineage: aded67c0-835c-4046-b691-04dc2bb2d314 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
87a700cd4d |
FN-7506: add scoped settings reset actions
Add a Settings footer reset flow for scoped menu and project-wide defaults. - Add Reset Settings dialog actions for the active settings menu and all project settings. - Track section-owned settings keys in a shared scope-aware registry and reuse it for save/reset validation. - Cover modal/mobile reset behavior, registry invariants, docs, i18n strings, and a release changeset. Files changed: .changeset/fn-7506-settings-reset.md | 7 + docs/dashboard-guide.md | 12 + .../dashboard/app/components/SettingsModal.css | 33 +++ .../dashboard/app/components/SettingsModal.tsx | 215 +++++++++++++++++- .../__tests__/SettingsModal.general.test.tsx | 145 ++++++++++++ .../components/__tests__/settings-mobile.test.tsx | 37 +++- .../settings/__tests__/section-keys.test.ts | 171 ++++++++++++++ .../app/components/settings/save-split.ts | 9 +- .../app/components/settings/section-keys.ts | 246 +++++++++++++++++++++ packages/i18n/locales/en/app.json | 11 + packages/i18n/locales/zh-CN/app.json | 11 + 11 files changed, 886 insertions(+), 11 deletions(-) Fusion-Task-Id: FN-7506 Fusion-Task-Lineage: a627e820-fe3b-42c5-adf2-97469bbe7a3b Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
4baa4c43c5 |
FN-7505: show defaults in settings descriptions
Expose settings defaults directly in dashboard help text so operators can see baseline values while editing settings. - Add default-value wording across global and project settings descriptions and locale strings. - Document the dashboard/default-reference alignment and add a changeset for the published CLI package. - Add coverage that every visible settings field includes its default in helper text and update existing assertions. Files changed: .changeset/fn-7505-settings-default-descriptions.md | 7 + docs/dashboard-guide.md | 3 + docs/settings-reference.md | 3 + .../__tests__/SettingsModal.general.test.tsx | 2 +- .../settings/sections/AgentPermissionsSection.tsx | 4 +- .../settings/sections/AppearanceSection.tsx | 4 +- .../settings/sections/BackupsSection.tsx | 13 +- .../settings/sections/CommandsSection.tsx | 4 +- .../settings/sections/ExperimentalSection.tsx | 2 +- .../settings/sections/GeneralSection.tsx | 26 +- .../settings/sections/GlobalGeneralSection.tsx | 25 +- .../settings/sections/GlobalModelsSection.tsx | 24 +- .../settings/sections/McpServersCard.tsx | 1 + .../components/settings/sections/MemorySection.tsx | 12 +- .../components/settings/sections/MergeSection.tsx | 37 +- .../settings/sections/ModelPricingSection.tsx | 2 +- .../settings/sections/NodeRoutingSection.tsx | 3 +- .../settings/sections/NodeSyncSection.tsx | 6 +- .../settings/sections/NotificationsSection.tsx | 14 +- .../settings/sections/ProjectModelsSection.tsx | 11 +- .../settings/sections/PromptsSection.tsx | 2 +- .../components/settings/sections/RemoteSection.tsx | 7 +- .../settings/sections/ResearchGlobalSection.tsx | 15 +- .../settings/sections/ResearchProjectSection.tsx | 16 +- .../settings/sections/ScheduledEvalsSection.tsx | 7 +- .../settings/sections/SchedulingSection.tsx | 20 +- .../settings/sections/WorktreesSection.tsx | 14 +- .../sections/__tests__/AppearanceSection.test.tsx | 4 +- .../MergeSection.legacy-automerge-cleanup.test.tsx | 2 +- .../settings-default-descriptions.test.tsx | 573 +++++++++++++++++++++ packages/i18n/locales/en/app.json | 261 ++++++---- 31 files changed, 914 insertions(+), 210 deletions(-) Fusion-Task-Id: FN-7505 Fusion-Task-Lineage: 7688caf2-2a95-4401-8b27-9da4b46ecfcd Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
9f24b507fc |
FN-7507: prioritize topmost dashboard shortcut dismissal
Refine dashboard keyboard shortcut behavior and coverage for configurable popup handling. - Factor App Escape dismissal into a pure helper that closes one topmost surface at a time. - Prioritize popped-out tasks ahead of Quick Chat, Terminal, and fixed dashboard modals. - Add regression coverage for configurable shortcut bindings, editable focus guards, default-prevented events, and Escape ordering. - Update dashboard shortcut documentation and release-note wording. Files changed: .changeset/fn-7494-keyboard-shortcuts.md | 4 +- docs/dashboard-guide.md | 2 +- packages/dashboard/app/App.tsx | 110 +++++++++----- .../app/__tests__/App.keyboard-shortcuts.test.tsx | 158 +++++++++++++++++++++ .../app/utils/__tests__/keyboardShortcuts.test.ts | 1 + 5 files changed, 236 insertions(+), 39 deletions(-) Fusion-Task-Id: FN-7507 Fusion-Task-Lineage: 804986ef-ec6c-4404-a168-6d154f75b118 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
2f23d2260d |
FN-7494: add configurable dashboard shortcuts
Add configurable dashboard keyboard shortcuts for opening Quick Chat and Terminal. - Add global settings defaults, schemas, persistence, and Settings UI controls for dashboard shortcuts. - Register safe document-level shortcut handling with editable-target guards and Escape popup dismissal. - Normalize shortcut strings, detect disabled/conflicting bindings, and document operator behavior. - Cover shortcut parsing, dashboard listener behavior, and settings persistence with tests. Files changed: .changeset/fn-7494-keyboard-shortcuts.md | 7 + docs/dashboard-guide.md | 14 ++ .../core/src/__tests__/global-settings.test.ts | 20 +++ .../core/src/__tests__/settings-defaults.test.ts | 10 ++ .../core/src/__tests__/settings-parity.test.ts | 10 ++ packages/core/src/__tests__/store-settings.test.ts | 10 ++ packages/core/src/settings-schema.ts | 8 + packages/core/src/types.ts | 12 ++ packages/dashboard/app/App.tsx | 52 ++++++ .../dashboard/app/components/SettingsModal.css | 21 +++ .../dashboard/app/components/SettingsModal.tsx | 11 ++ .../__tests__/SettingsModal.general.test.tsx | 63 ++++++++ .../app/components/settings/save-split.ts | 1 + .../settings/sections/GlobalGeneralSection.tsx | 38 +++++ .../useDashboardKeyboardShortcuts.test.tsx | 101 ++++++++++++ packages/dashboard/app/hooks/useAppSettings.ts | 8 +- .../app/hooks/useDashboardKeyboardShortcuts.ts | 66 ++++++++ .../app/utils/__tests__/keyboardShortcuts.test.ts | 76 +++++++++ packages/dashboard/app/utils/keyboardShortcuts.ts | 175 +++++++++++++++++++++ 19 files changed, 702 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-7494 Fusion-Task-Lineage: 30445f4d-c0c5-4657-bd79-fc2acaf3c37d Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
b0208c140a |
FN-7500: restore terminal clipboard shortcuts
Restore terminal copy and paste shortcut handling across integrated and embedded sessions. - Handle Ctrl/Cmd+V by reading clipboard text and forwarding it once to the active PTY or attach channel. - Preserve Ctrl/Cmd+C selection copy behavior while leaving no-selection interrupts available to the shell. - Document the exact-once terminal paste behavior and add a patch changeset. - Cover successful, missing, rejected, and empty clipboard paste paths in terminal tests. Files changed: .changeset/fn-7500-terminal-shortcuts.md | 7 +++ docs/dashboard-guide.md | 4 +- .../dashboard/app/components/SessionTerminal.tsx | 24 ++++++++++- .../dashboard/app/components/TerminalModal.tsx | 23 ++++++++- .../components/__tests__/SessionTerminal.test.tsx | 43 ++++++++++++++++- .../components/__tests__/TerminalModal.test.tsx | 50 +++++++++++++++++++- 6 files changed, 132 insertions(+), 19 deletions(-) Fusion-Task-Id: FN-7500 Fusion-Task-Lineage: 8e87fa22-c0b7-402d-aeef-322cbd852529 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
7d8a1b8831 |
FN-7502: add pinned terminal layout
Adds a persisted pinned terminal mode that places the terminal below the dashboard instead of overlaying it. - Add a project-scoped below display mode with pin/unpin header controls and resize support. - Render below-mode terminal in the dashboard flow while preserving overlay behavior for docked, floating, and mobile modes. - Move terminal utility actions into the header so controls remain available across layouts. - Document the new terminal pin control and add release-note coverage plus regression tests. Files changed: .changeset/fn-7502-terminal-below-layout.md | 7 + docs/dashboard-guide.md | 16 +- packages/dashboard/app/App.tsx | 22 +- packages/dashboard/app/components/AppModals.tsx | 14 -- .../dashboard/app/components/ProjectSelector.css | 12 + .../dashboard/app/components/TerminalModal.css | 108 ++++++--- .../dashboard/app/components/TerminalModal.tsx | 246 +++++++++++---------- .../components/__tests__/TerminalModal.test.tsx | 100 ++++++++- 8 files changed, 351 insertions(+), 174 deletions(-) Fusion-Task-Id: FN-7502 Fusion-Task-Lineage: bb1b5e22-d19f-4af1-aa34-4213bc712384 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
e8dc2ae6d1 |
FN-7498: show original task prompts in Plan tab
Display the initial task prompt separately from the generated plan in task details. - Add a read-only Original prompt section above generated PROMPT.md content in task detail Plan views. - Preserve plain-text formatting and responsive wrapping for original prompts while leaving plan edit/revision controls scoped to generated prompts. - Cover modal, embedded, empty-state, CSS, docs, and release-note behavior. Files changed: .changeset/fn-7498-original-task-prompt.md | 7 ++ docs/dashboard-guide.md | 1 + .../dashboard/app/components/TaskDetailModal.css | 30 +++++ .../dashboard/app/components/TaskDetailModal.tsx | 18 +++ ...lModal.inline-editing-and-integrations.test.tsx | 127 ++++++++++++++++++++- 5 files changed, 182 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-7498 Fusion-Task-Lineage: df83c73d-d731-4ba4-942b-bd93ec1b9712 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
efa8105036 |
FN-7495: add settings search
Add a searchable Settings navigation that filters visible sections by setting names and keywords. - Add a Settings search field with clear and empty-state affordances for desktop and mobile layouts. - Filter only the already-visible Settings sections while preserving matching group headers and mobile section labels. - Add searchable section metadata, localized labels, tests, docs, and a release changeset. Files changed: .changeset/fn-7495-settings-search.md | 7 + docs/dashboard-guide.md | 5 + .../dashboard/app/components/SettingsModal.css | 97 +++++- .../dashboard/app/components/SettingsModal.tsx | 346 ++++++++++++++++----- .../__tests__/SettingsModal.general.test.tsx | 71 +++++ .../components/__tests__/settings-mobile.test.tsx | 25 ++ .../settings/sections/McpServersCard.tsx | 2 +- packages/i18n/locales/en/app.json | 11 + 8 files changed, 475 insertions(+), 89 deletions(-) Fusion-Task-Id: FN-7495 Fusion-Task-Lineage: 1d703059-6156-4d20-afbd-3cdb64e3e9f3 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
b42be87ad1 |
FN-7493: keep task popups on board layer
Keep task-detail popups below global utility windows while preserving Activity menu visibility. - Route ordinary task-detail FloatingWindow instances through a lower task-detail z-index band. - Emit and consume popup geometry-change signals so root-portaled Activity menus stay attached during drag and resize. - Extend dashboard tests and docs for popup layering and Activity dropdown behavior. Files changed: .changeset/fn-7493-task-popup-layer.md | 7 +++ docs/dashboard-guide.md | 8 ++- docs/settings-reference.md | 2 +- packages/dashboard/app/App.tsx | 4 ++ .../App.taskDetailFloatingGeometry.test.tsx | 45 +++++++++++++- .../dashboard/app/components/FloatingWindow.tsx | 31 ++++++++-- .../dashboard/app/components/TaskDetailModal.css | 3 + .../dashboard/app/components/TaskDetailModal.tsx | 27 ++++++++- .../components/__tests__/FloatingWindow.test.tsx | 32 +++++++++- .../FloatingWindowStack.cross-type.test.tsx | 48 ++++++++++++--- .../TaskDetailModal.task-activity-chat.test.tsx | 68 ++++++++++++++++++++++ .../app/components/floatingWindowStack.ts | 22 +++++-- 12 files changed, 272 insertions(+), 25 deletions(-) Fusion-Task-Id: FN-7493 Fusion-Task-Lineage: 5f1ec72c-f8dc-44ee-b303-319e0faac0f9 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |