gsxdsm
081dae0e0f
FN-7705: Add Grok CLI runtime support as a bundled plugin
...
Adds a new bundled Grok CLI runtime plugin, wiring it end-to-end into settings, auth routes, model discovery, and the dashboard authentication UI.
- New `fusion-plugin-grok-runtime` package with CLI spawn, probe, provider, process-manager, and runtime-adapter modules plus tests
- Bundled-plugin install list (CLI + core) updated to auto-install the grok-cli plugin
- New `useGrokCli`/`grokCliBinaryPath` settings in `settings-schema.ts` and `types.ts`
- Dashboard: `GrokCliProviderCard` component/styles, `ProviderIcon` grok entry, `AuthenticationSection` wiring
- New `grok-model-cache.ts` for caching `grok models` discovery results, registered model/auth routes for `/auth/grok-cli` and `/providers/grok-cli/status`, merged into `/api/models`
- `runtime-provider-probes.ts` extended with Grok CLI probe/model-discovery delegation
- Docs updated (`PLUGIN_AUTHORING.md`, `settings-reference.md`) and changeset added (minor, feature)
- Workspace config (`pnpm-workspace.yaml`, `pnpm-lock.yaml`) updated to register the new plugin package
Files changed:
.changeset/fn-7705-grok-cli-runtime.md | 7 +
docs/PLUGIN_AUTHORING.md | 2 +-
docs/settings-reference.md | 4 +
packages/cli/src/plugins/bundled-plugin-install.ts | 8 +
.../cli/src/plugins/staged-bundled-plugin-ids.ts | 1 +
packages/cli/vitest.config.ts | 12 +
.../core/src/__tests__/grok-cli-settings.test.ts | 34 +++
packages/core/src/index.ts | 1 +
.../core/src/plugins/bundled-plugin-install.ts | 10 +
packages/core/src/settings-schema.ts | 6 +
packages/core/src/types.ts | 9 +
packages/dashboard/app/api/legacy.ts | 40 ++++
.../app/components/GrokCliProviderCard.css | 65 ++++++
.../app/components/GrokCliProviderCard.tsx | 204 ++++++++++++++++
packages/dashboard/app/components/ProviderIcon.tsx | 5 +
.../__tests__/GrokCliProviderCard.test.tsx | 105 +++++++++
.../app/components/__tests__/ProviderIcon.test.tsx | 8 +
.../settings/sections/AuthenticationSection.tsx | 8 +-
packages/dashboard/package.json | 1 +
.../src/__tests__/grok-model-cache.test.ts | 152 ++++++++++++
.../register-model-routes-grok-cli.test.ts | 214 +++++++++++++++++
.../dashboard/src/__tests__/routes-auth.test.ts | 258 ++++++++++++++++++++-
packages/dashboard/src/grok-model-cache.ts | 166 +++++++++++++
packages/dashboard/src/routes.ts | 1 +
.../dashboard/src/routes/register-auth-routes.ts | 134 ++++++++++-
.../dashboard/src/routes/register-model-routes.ts | 51 ++++
packages/dashboard/src/runtime-provider-probes.ts | 43 ++++
packages/dashboard/vitest.config.ts | 12 +
packages/desktop/scripts/workspace-tools.ts | 3 +-
plugins/fusion-plugin-grok-runtime/CHANGELOG.md | 7 +
plugins/fusion-plugin-grok-runtime/README.md | 54 +++++
plugins/fusion-plugin-grok-runtime/manifest.json | 6 +
plugins/fusion-plugin-grok-runtime/package.json | 40 ++++
.../src/__tests__/cli-spawn.test.ts | 103 ++++++++
.../src/__tests__/index.test.ts | 12 +
.../src/__tests__/probe.test.ts | 135 +++++++++++
.../src/__tests__/process-manager.test.ts | 96 ++++++++
.../src/__tests__/provider.test.ts | 57 +++++
.../src/__tests__/runtime-adapter.test.ts | 21 ++
.../fusion-plugin-grok-runtime/src/cli-spawn.ts | 50 ++++
plugins/fusion-plugin-grok-runtime/src/index.ts | 74 ++++++
plugins/fusion-plugin-grok-runtime/src/probe.ts | 107 +++++++++
.../src/process-manager.ts | 86 +++++++
plugins/fusion-plugin-grok-runtime/src/provider.ts | 25 ++
.../src/runtime-adapter.ts | 25 ++
plugins/fusion-plugin-grok-runtime/src/types.ts | 12 +
plugins/fusion-plugin-grok-runtime/tsconfig.json | 10 +
.../fusion-plugin-grok-runtime/vitest.config.ts | 22 ++
pnpm-lock.yaml | 25 ++
pnpm-workspace.yaml | 1 +
50 files changed, 2525 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-7705
Fusion-Task-Lineage: b8194ea8-c773-4199-a52a-b0e4e7347192
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-08 23:39:34 -07:00
gsxdsm
7fe18dfc9b
FN-7696: surface Cursor CLI models in the model picker
...
Adds Cursor CLI model discovery to the dashboard's /api/models endpoint so cursor-agent-backed models appear in the picker when the Cursor CLI provider is enabled.
- Add cursor-model-cache.ts: short-TTL, single-flight cache for cursor-agent model discovery (no per-request CLI spawn)
- register-model-routes.ts additively merges cursor-cli models, deduped by provider/id, without displacing existing entries
- runtime-provider-probes.ts adds cursor-cli to configuredProviders when useCursorCli is on so rows survive the final provider filter
- Add unit tests for the cache and for register-model-routes cursor-cli integration
- Update docs/settings-reference.md
- Add changeset (patch/minor: @runfusion/fusion) documenting the fix
Files changed:
.changeset/fn-7696-cursor-cli-models-in-picker.md | 7 +
docs/settings-reference.md | 2 +
.../src/__tests__/cursor-model-cache.test.ts | 158 +++++++++++++++++++
.../register-model-routes-cursor-cli.test.ts | 131 +++++++++++++--
packages/dashboard/src/cursor-model-cache.ts | 175 +++++++++++++++++++++
.../dashboard/src/routes/register-model-routes.ts | 45 ++++++
packages/dashboard/src/runtime-provider-probes.ts | 26 +++
7 files changed, 527 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-7696
Fusion-Task-Lineage: 2f2baf1e-5e4d-4c47-a112-b282a8ee45b6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-08 23:39:33 -07:00
gsxdsm
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 >
2026-07-08 13:09:10 -07:00
gsxdsm
f7d9509294
FN-7658: gate same-agent duplicate auto-archiving behind opt-in setting
...
Duplicate tasks created by the same agent are no longer auto-archived by default; they are flagged for review instead, controlled by a new opt-in project setting.
- Add project setting `autoArchiveDuplicateTasksEnabled` (default false) gating the FN-4892 same-agent duplicate intake path
- Add `flagSameAgentDuplicate` path and `nearDuplicateOf` metadata used when auto-archive is disabled; tombstone-resurrection blocking is unchanged
- Wire the setting through core settings schema/types/store, dashboard SchedulingSection UI, and i18n strings
- Update docs (settings-reference.md, task-management.md) to describe the new default-off behavior
- Add a changeset for the @runfusion/fusion minor release
- Extend duplicate-intake, tombstone-window, store-parent-task-dedup, and reliability-interaction tests to cover both flag states
Files changed:
$(cat /tmp/fn7658_stat.txt)
Fusion-Task-Id: FN-7658
Fusion-Task-Lineage: 7d0d1074-1020-48a8-b96f-186154c2c408
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-08 00:23:32 -07:00
gsxdsm
5b243f1223
FN-7636: surface Hermes runtime models in /api/models picker
...
Adds a short-TTL, single-flight Hermes model cache and merges Hermes profile-list models additively into the dashboard's /api/models endpoint under the hermes provider, without displacing existing entries.
- Add packages/dashboard/src/hermes-model-cache.ts: single-flight, short-TTL cache wrapping `hermes profile list` CLI output (no per-request spawn)
- Merge Hermes-provided models into register-model-routes.ts's /api/models response, deduped by provider/id, additive-only
- Add unit tests for the Hermes model cache and the /api/models route's Hermes merge behavior
- Document the new behavior in docs/settings-reference.md
- Add changeset (@runfusion/fusion: minor) describing the feature for release notes
Files changed:
.changeset/fn-7636-hermes-picker-models.md | 7 +
docs/settings-reference.md | 2 +
packages/dashboard/src/__tests__/hermes-model-cache.test.ts | 158 +++++++++++++++++
packages/dashboard/src/__tests__/register-model-routes-hermes.test.ts | 186 +++++++++++++++++++++
packages/dashboard/src/hermes-model-cache.ts | 168 +++++++++++++++++++
packages/dashboard/src/routes/register-model-routes.ts | 33 ++++
6 files changed, 554 insertions(+)
Fusion-Task-Id: FN-7636
Fusion-Task-Lineage: c5ab3bba-37e4-416b-9325-667a8ef321dc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-07 22:04:55 -07:00
gsxdsm
78d4db94d8
FN-7575: add release version lines to Fusion self-repo done comments
...
Extends GitHubIssueCommentService so task-close comments on issues in the runfusion/fusion repo itself append both a current-version and target-next-minor-release line, while comments on all other linked repos stay byte-for-byte unchanged.
- Add isFusionSelfRepo() and computeNextMinorVersion() helpers to github-issue-comment.ts
- Append "Current version: v{current}" and "Target release: v{next-minor}" lines only when the linked source issue's repo is runfusion/fusion (case-insensitive)
- Fall back silently (no version lines) when the resolved version is unparseable or the unresolved 0.0.0 sentinel
- Add changeset (minor) documenting the new behavior
- Update docs/settings-reference.md and docs/gitlab-parity-inventory.md
- Expand github-issue-comment.test.ts coverage for self-repo vs other-repo behavior and version edge cases
Files changed:
.changeset/fn-7575-release-version-comment.md | 7 +
docs/gitlab-parity-inventory.md | 2 +-
docs/settings-reference.md | 2 +-
packages/dashboard/src/__tests__/github-issue-comment.test.ts | 142 ++++++++++++++++++++-
packages/dashboard/src/github-issue-comment.ts | 69 +++++++++-
5 files changed, 212 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7575
Fusion-Task-Lineage: b7cf7e6f-8d96-4442-8595-5d54ea911481
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-05 11:31:48 -07:00
gsxdsm
73b38babf0
FN-7578: surface aiUndoTaskWorkflowId picker in Settings General
...
Adds a Settings → General picker so operators can choose which workflow governs AI-undo (revert) board tasks, instead of it being fixed.
- Add aiUndoTaskWorkflowId select to GeneralSection, defaulting to builtin:review-heavy, with an "Inherit project default workflow" empty-string option matching the revert route's blank-is-inherit behavior (FN-7556)
- Load full workflow list (including custom workflows, excluding fragments) separately from the builtin-only workflow list used for enable/disable checkboxes
- Add FNXC:TaskRevert comment documenting the default/inherit semantics
- Add tests for the new picker and update settings-default-descriptions test
- Add changeset (minor) and update settings-reference/task-management docs
- Add i18n strings across en/es/fr/ko/zh-CN/zh-TW locales
Files changed:
.changeset/fn-7578-ai-undo-workflow-setting-ui.md | 7 ++
docs/settings-reference.md | 2 +-
docs/task-management.md | 2 +-
.../settings/sections/GeneralSection.tsx | 42 +++++++
.../GeneralSection.aiUndoWorkflow.test.tsx | 129 +++++++++++++++++++++
.../settings-default-descriptions.test.tsx | 3 +-
packages/i18n/locales/en/app.json | 5 +-
packages/i18n/locales/es/app.json | 5 +-
packages/i18n/locales/fr/app.json | 5 +-
packages/i18n/locales/ko/app.json | 5 +-
packages/i18n/locales/zh-CN/app.json | 5 +-
packages/i18n/locales/zh-TW/app.json | 5 +-
12 files changed, 205 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7578
Fusion-Task-Lineage: 1d1701ab-ecc7-4bbe-a003-2ce45ac15a25
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-05 11:31:47 -07:00
gsxdsm
94e9d15e38
FN-7556: auto-select review-heavy workflow for AI-undo tasks
...
AI-undo tasks now default to a configurable, stricter review workflow instead of always inheriting the project default.
- Add project setting `aiUndoTaskWorkflowId` (default `builtin:review-heavy`) to ProjectSettings type and DEFAULT_PROJECT_SETTINGS
- `POST /api/tasks/:id/revert` resolves and validates the configured workflow id (via `isBuiltinWorkflowId`/`getWorkflowDefinition`), falling back to inherit-with-warning on a blank/unknown value
- `createAiUndoTask` engine helper gains an optional `workflowId` param, forwarded verbatim to `createTask` only when non-blank, staying pure (no settings/store access itself)
- Add regression tests for the route resolution logic and the engine helper's workflow forwarding
- Update docs (`settings-reference.md`, `task-management.md`) and add changeset
Files changed:
.changeset/fn-7556-ai-undo-workflow.md | 7 +++
docs/settings-reference.md | 1 +
docs/task-management.md | 1 +
packages/core/src/settings-schema.ts | 4 ++
packages/core/src/types.ts | 14 +++++
.../settings-default-descriptions.test.tsx | 2 +
.../src/__tests__/task-revert-route.test.ts | 52 ++++++++++++++++-
.../src/routes/register-task-workflow-routes.ts | 31 +++++++++-
.../src/__tests__/task-revert-ai-undo.test.ts | 67 ++++++++++++++++++++++
packages/engine/src/task-revert.ts | 16 ++++++
10 files changed, 192 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-7556
Fusion-Task-Lineage: dec5603c-10a8-4780-a1b8-8a836a0de4c1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-05 11:31:47 -07:00
gsxdsm
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 >
2026-07-05 11:31:46 -07:00
gsxdsm
9592e3ac5c
FN-7569: skip re-asking manual plan approval for unchanged re-specified plans
...
Manual plan approval now skips re-asking for approval when a re-specification produces an identical plan to one already approved.
- Add nullable Task.approvedPlanFingerprint field with DB migration 139 to track the approved PROMPT.md fingerprint
- Skip re-parking at awaiting-approval when replan/plan-review-retry/self-healing rebound yields the same plan fingerprint as before
- Require fresh approval when the plan content changes or when a plan is rejected
- Leave Release Authorization, Workflow Plan Review, and auto-approve-all behavior unchanged
- Add/extend tests across core (db, plan-approval, store-persistence), engine (triage), and dashboard (routes-github) to cover fingerprint comparison and idempotent re-approval
- Update docs (settings-reference.md, workflow-steps.md) to describe the idempotent approval behavior
- Add changeset for @runfusion/fusion (patch)
Files changed:
.changeset/fn-7569-plan-approval-idempotent.md | 7 +
docs/settings-reference.md | 2 +-
docs/workflow-steps.md | 2 +
packages/core/src/__tests__/db.test.ts | 54 +++++++
packages/core/src/__tests__/plan-approval.test.ts | 31 +++-
.../core/src/__tests__/store-persistence.test.ts | 39 +++++
packages/core/src/db.ts | 22 ++-
packages/core/src/index.ts | 2 +-
packages/core/src/plan-approval.ts | 23 +++
packages/core/src/store.ts | 20 ++-
packages/core/src/types.ts | 13 ++
.../dashboard/src/__tests__/routes-github.test.ts | 69 +++++++-
.../src/routes/register-task-workflow-routes.ts | 37 ++++-
packages/engine/src/__tests__/triage.test.ts | 178 ++++++++++++++++++++-
packages/engine/src/triage.ts | 58 +++++--
15 files changed, 527 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-7569
Fusion-Task-Lineage: 7d3855ae-6f45-4571-90db-cf1ae3b541dd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-05 11:31:46 -07:00
gsxdsm
6e4c207a7f
FN-7559: disambiguate release-authorization holds from manual plan-approval holds
...
Disambiguate release-authorization approval holds from manual plan-approval holds so auto-approve no longer appears broken.
- Add `Task.awaitingApprovalReason` (`"release-authorization" | null`) to distinguish the release-authorization gate from the independent manual plan-approval gate, both of which set `status: "awaiting-approval"`.
- Stamp `awaitingApprovalReason: "release-authorization"` when the release gate blocks a task, and explicitly clear it (`null`) when the manual plan-approval gate parks the task, so a stale reason never survives a replan.
- Add DB migration/persistence support for the new column in `db.ts`/`store.ts`/`types.ts`.
- TaskCard/TaskDetailModal now render a distinct status for release-authorization holds and suppress the generic manual Approve/Reject affordance for them.
- Add i18n string and docs updates (`settings-reference.md`, `workflow-steps.md`) plus a changeset.
- Extend regression tests in db, triage, TaskCard, and TaskDetailModal to cover the new reason field and disambiguated UI.
Files changed:
$(git diff --cached --stat)
Fusion-Task-Id: FN-7559
Fusion-Task-Lineage: 0b37cbf0-40a4-4165-8088-482ed365ba19
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-05 11:31:44 -07:00
gsxdsm
3dd227b945
FN-7557: default plan approval mode to auto-approve-all
...
Changes the project-wide plan approval default from deferring to per-workflow settings to auto-approving all task plans, so new/unset projects skip the manual awaiting-approval gate by default.
- Change DEFAULT_PROJECT_SETTINGS.planApprovalMode default from "workflow" to "auto-approve-all" in settings-schema.ts, with FNXC comments documenting the requirement change
- Update ProjectSettings.planApprovalMode JSDoc in types.ts to reflect the new default
- Update useAppSettings hook's initial state and hydration fallback to default to "auto-approve-all" while still honoring an explicit stored "workflow" value
- Update MergeSection UI: move the "(default)" label from the "Use workflow setting" option to "Auto-approve all tasks", keeping the select's fallback value in sync
- Update settings-reference.md docs and i18n locale/resource strings to match the new default label
- Update existing tests (MergeSection legacy auto-merge cleanup, settings default descriptions, useAppSettings) to assert the new default, and add coverage for the updated hydration/fallback behavior
- Add changeset fn-7557-plan-auto-approve-default.md documenting the behavior change
Files changed:
.changeset/fn-7557-plan-auto-approve-default.md | 7 +++++
docs/settings-reference.md | 2 +-
packages/core/src/settings-schema.ts | 6 +++-
packages/core/src/types.ts | 3 ++
.../dashboard/app/components/SettingsModal.tsx | 3 +-
.../components/settings/sections/MergeSection.tsx | 9 ++++--
.../MergeSection.legacy-automerge-cleanup.test.tsx | 4 +--
.../settings-default-descriptions.test.tsx | 3 +-
.../app/hooks/__tests__/useAppSettings.test.ts | 35 +++++++++++++++++++---
packages/dashboard/app/hooks/useAppSettings.ts | 12 ++++++--
packages/i18n/locales/en/app.json | 4 +--
packages/i18n/src/resources.d.ts | 2 +-
12 files changed, 71 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-7557
Fusion-Task-Lineage: 7dcfe339-6088-4ebc-8387-eb81258a693d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 21:28:19 -07:00
gsxdsm
aae603b871
FN-7518: add configurable planner-overseer notification verbosity setting
...
Adds a workflow-native plannerOversightNotificationLevel enum setting so operators can control how noisy planner-overseer notifications are.
- Declare BUILTIN_OVERSIGHT_SETTINGS entry `plannerOversightNotificationLevel` (silent/errors/important/all, default important)
- Document the new setting alongside plannerOversightLevel in docs/settings-reference.md
- Add regression coverage in builtin-workflow-settings-triage.test.ts and workflow-settings-resolver.test.ts
- Add changeset (minor) describing the new operator-facing verbosity control
Files changed:
.changeset/fn-7518-oversight-notification-verbosity.md | 7 +++++
docs/settings-reference.md | 3 +-
packages/core/src/__tests__/builtin-workflow-settings-triage.test.ts | 36 +++++++++++++++++++++-
packages/core/src/__tests__/workflow-settings-resolver.test.ts | 1 +
packages/core/src/builtin-workflow-settings.ts | 17 ++++++++++
5 files changed, 62 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-7518
Fusion-Task-Lineage: fe6e2bde-0e58-4f29-b5cc-efdf81efcfa5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 21:28:16 -07:00
gsxdsm
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 >
2026-07-04 21:28:16 -07:00
gsxdsm
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 >
2026-07-04 14:26:46 -07:00
gsxdsm
2cc84b5177
FN-7513: require planner confirmation for risky side effects
...
Require explicit approval before planner recovery runs merge, PR, destructive, or external-service actions.
- Add pure planner side-effect classification and confirmation request modeling in core.
- Route merge/PR recovery decisions to await confirmation instead of autonomous dispatch.
- Persist pending confirmation requests and only execute approved controller actions.
- Cover confirmation gating with core and engine regression tests and document the policy.
Files changed:
.changeset/fn-7513-planner-confirmation-gate.md | 7 +
docs/architecture.md | 85 ++++++++-
docs/settings-reference.md | 2 +-
.../src/__tests__/planner-confirmation.test.ts | 125 +++++++++++++
.../core/src/__tests__/planner-recovery.test.ts | 14 +-
packages/core/src/index.ts | 7 +
packages/core/src/planner-confirmation.ts | 141 ++++++++++++++
packages/core/src/planner-recovery.ts | 103 ++++++++---
...lanner-recovery-controller-confirmation.test.ts | 205 +++++++++++++++++++++
packages/engine/src/index.ts | 5 +
packages/engine/src/planner-recovery-controller.ts | 204 +++++++++++++++++++-
packages/engine/src/project-engine.ts | 44 +++++
12 files changed, 913 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-7513
Fusion-Task-Lineage: 1e3c6640-8a4f-41f6-89dd-41eb9b675b2b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 13:51:09 -07:00
gsxdsm
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 >
2026-07-04 13:09:29 -07:00
gsxdsm
aa757bc1a3
FN-7509: add per-task planner oversight overrides
...
Add core support for tasks to carry a planner oversight override that can supersede workflow settings.
- Add nullable plannerOversightLevel task storage, schema migration, store update/create/archive plumbing, and mesh replication support.
- Export planner oversight level types/defaults and an effective-level resolver with task-over-workflow precedence.
- Document override precedence and add regression coverage for migration, persistence, updates, and resolution.
- Add a minor changeset for the published Fusion package.
Files changed:
.../fn-7509-per-task-planner-oversight-override.md | 7 ++
docs/settings-reference.md | 2 +-
packages/core/src/__tests__/db.test.ts | 45 +++++++++++++
packages/core/src/__tests__/store-update.test.ts | 75 ++++++++++++++++++++++
.../__tests__/workflow-settings-resolver.test.ts | 28 ++++++++
packages/core/src/db.ts | 17 ++++-
packages/core/src/index.ts | 5 +-
packages/core/src/mesh-task-replication.ts | 2 +
packages/core/src/store.ts | 15 ++++-
packages/core/src/types.ts | 23 +++++++
packages/core/src/workflow-settings-resolver.ts | 28 ++++++++
11 files changed, 240 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-7509
Fusion-Task-Lineage: 41695cc5-34d2-4079-9e34-a8fb40f961fb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 12:32:09 -07:00
gsxdsm
68f5153e17
FN-7508: add planner oversight workflow setting
...
Declare a workflow-native planner oversight level with release notes and docs.
- Add the plannerOversightLevel enum setting with Off, Observe, Steer, and Autonomous recovery values.
- Export the oversight settings catalog and include it in built-in workflow defaults.
- Cover consistency, resolver defaults, and catalog membership with core tests.
- Document the workflow setting and add the published package changeset.
Files changed:
.../fn-7508-planner-oversight-level-setting.md | 7 +++++
docs/settings-reference.md | 8 ++++--
docs/workflow-steps.md | 17 +++++++-----
.../builtin-workflow-settings-triage.test.ts | 32 ++++++++++++++++++++++
.../src/__tests__/settings-consistency.test.ts | 4 ++-
.../__tests__/workflow-settings-resolver.test.ts | 1 +
packages/core/src/builtin-workflow-settings.ts | 26 ++++++++++++++++++
packages/core/src/index.ts | 1 +
8 files changed, 86 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7508
Fusion-Task-Lineage: 1adc7ce6-9e0e-475e-956a-ee36edae0cdc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 11:26:31 -07:00
gsxdsm
5689346afc
FN-7490: fix post-merge push target resolution
...
Fix post-merge push settings so direct merges use the configured push target reliably.
- Resolve remote-only push targets from the merge integration branch, including detached-head merge worktrees.
- Clear hidden stale Push Remote values when Push to remote after merge is disabled while preserving persisted enabled values.
- Add dashboard, API, and merger regression coverage plus operator documentation and a patch changeset.
Files changed:
.changeset/fn-7490-push-to-remote-setting.md | 7 ++
docs/settings-reference.md | 6 +-
.../dashboard/app/components/SettingsModal.tsx | 5 ++
.../SettingsModal.scheduling-merge.test.tsx | 59 +++++++++++-
.../components/__tests__/settings-mobile.test.tsx | 30 ++++++-
.../src/__tests__/routes-settings.test.ts | 28 ++++++
.../src/__tests__/merger-prompt-and-utils.test.ts | 100 ++++++++++++++++++++-
packages/engine/src/merger.ts | 13 ++-
8 files changed, 238 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7490
Fusion-Task-Lineage: 774515bc-ea8b-427d-89ac-8d047f0273d4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 10:42:20 -07:00
gsxdsm
8668a053dc
FN-7491: add workflow toggle for proactive triage splitting
...
Add a workflow-scoped policy switch so operators can keep large triage tasks intact unless subtask splitting is explicitly requested.
- Define triageProactiveSubtaskSplittingEnabled with default-on workflow settings, display formatting, and prompt rendering.
- Preserve mandatory breakIntoSubtasks behavior while disabling automatic oversized-task decomposition when the setting is false.
- Cover the new policy in core, engine, and dashboard tests plus settings/workflow docs and a changeset.
Files changed:
.changeset/FN-7491-triage-splitting-setting.md | 7 +++
docs/settings-reference.md | 6 +++
docs/workflow-steps.md | 10 ++--
packages/core/src/__tests__/agent-prompts.test.ts | 17 ++++--
.../builtin-workflow-settings-triage.test.ts | 23 ++++++++
packages/core/src/agent-prompts.ts | 27 ++--------
packages/core/src/builtin-workflow-settings.ts | 44 ++++++++++++++++
.../__tests__/WorkflowSettingsPanel.test.tsx | 53 +++++++++++++++++++
.../app/components/workflow-setting-display.ts | 10 ++++
.../__tests__/triage-threshold-settings.test.ts | 28 ++++++++++
packages/engine/src/__tests__/triage.test.ts | 61 +++++++++++++++++++---
11 files changed, 250 insertions(+), 36 deletions(-)
Fusion-Task-Id: FN-7491
Fusion-Task-Lineage: c982455a-685c-4ce2-8e33-6d1a7bb9d154
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 10:42:20 -07:00
gsxdsm
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 >
2026-07-04 10:42:19 -07:00
gsxdsm
a2b09f277d
FN-7479: route dock task clicks to popups
...
Make right-dock task list clicks follow the task popup preference.
- Thread popup routing into the right-dock Tasks list while preserving embedded dock detail when popups are disabled.
- Cover popup-enabled and popup-disabled dock list behavior with controller tests.
- Update settings copy, operator docs, and release notes for the expanded popup setting scope.
Files changed:
.changeset/fn-7479-right-dock-task-popup.md | 7 ++
docs/dashboard-guide.md | 7 +-
docs/settings-reference.md | 4 +-
packages/dashboard/app/App.tsx | 2 +-
.../app/components/__tests__/RightDock.test.tsx | 129 +++++++++++++++++++++
.../settings/sections/AppearanceSection.tsx | 4 +-
.../app/components/useRightDockController.tsx | 21 +++-
7 files changed, 163 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7479
Fusion-Task-Lineage: 953f6a77-8cb9-409e-be4b-f1dbdc6e1b42
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-03 21:47:00 -07:00
gsxdsm
ced783ea79
FN-7473: open desktop Anthropic OAuth in browser
...
Route desktop OAuth popups to the system browser while preserving Anthropic subscription login polling.\n\n- Add Electron window-open handling that keeps internal Fusion navigation in-app and external http(s) OAuth URLs in the system browser.\n- Cover Anthropic Subscription polling so login-in-progress states do not show a false incomplete-login toast.\n- Document desktop OAuth browser handoff behavior and add a patch changeset.\n\nFiles changed:\n .../fn-7473-desktop-anthropic-oauth-browser.md | 7 ++\n docs/dashboard-guide.md | 2 +-\n docs/settings-reference.md | 2 +-\n .../__tests__/SettingsModal.models-auth.test.tsx | 76 ++++++++++++++++++++++\n .../desktop/src/__tests__/main-integration.test.ts | 2 +\n .../desktop/src/__tests__/main-local-mode.test.ts | 3 +-\n .../desktop/src/__tests__/main.integration.test.ts | 2 +\n packages/desktop/src/__tests__/main.test.ts | 54 ++++++++++++++-\n packages/desktop/src/main.ts | 60 +++++++++++++++++-\n 9 files changed, 203 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-7473
Fusion-Task-Lineage: 3d6b0acd-536c-4f7d-8c6b-35eb519b46bb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-03 21:45:21 -07:00
gsxdsm
00afb22bcb
FN-7458: default startup theme mode to system
...
Default fresh dashboard startup and appearance reset to System mode while keeping Shadcn Ember as the color theme.
- Set global themeMode defaults and Settings fallback props to system.
- Resolve pre-hydration web and desktop startup from prefers-color-scheme, including invalid cache and fallback paths.
- Update Appearance reset behavior, focused theme tests, docs, and the release changeset.
Files changed:
.changeset/fn-7458-system-theme-default.md | 7 ++
docs/dashboard-guide.md | 3 +-
docs/settings-reference.md | 4 +-
.../core/src/__tests__/global-settings.test.ts | 17 +++-
packages/core/src/__tests__/store-settings.test.ts | 6 +-
packages/core/src/settings-schema.ts | 6 +-
.../app/__tests__/index-html-theme-link.test.ts | 18 ++++
.../dashboard/app/components/SettingsModal.tsx | 8 +-
.../dashboard/app/components/ThemeSelector.tsx | 6 +-
.../components/__tests__/ThemeDropdown.test.tsx | 9 +-
.../components/__tests__/ThemeSelector.test.tsx | 2 +-
.../dashboard/app/hooks/__tests__/useTheme.test.ts | 111 ++++++++++++++++++++-
packages/dashboard/app/hooks/useTheme.ts | 21 +++-
packages/dashboard/app/index.html | 13 ++-
packages/desktop/src/renderer/index.html | 13 ++-
15 files changed, 211 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-7458
Fusion-Task-Lineage: fb6184b4-9a6a-4131-9f97-f8cd12ef904c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-03 07:47:03 -07:00
gsxdsm
95325201a6
FN-7459: remember task popup geometry
...
Remember task-detail popup geometry so operators can reuse one positioned window across tasks.
- Share a stable persisted geometry key for task-detail FloatingWindow instances while keeping per-task window identity.
- Add regression coverage for shared task popup geometry, malformed persisted data fallback, and isolated non-task windows.
- Document desktop/tablet popup geometry persistence and add a release changeset.
Files changed:
.changeset/fn-7459-task-popup-geometry.md | 7 ++
docs/dashboard-guide.md | 5 +-
docs/settings-reference.md | 2 +-
packages/dashboard/app/App.tsx | 5 +
.../App.taskDetailFloatingGeometry.test.tsx | 111 +++++++++++++++++++++
.../dashboard/app/components/FloatingWindow.tsx | 2 +-
.../components/__tests__/FloatingWindow.test.tsx | 83 ++++++++++++++-
7 files changed, 210 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-7459
Fusion-Task-Lineage: 84674283-024f-4ed5-b7a0-6dade1b77f8b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-03 07:47:03 -07:00
gsxdsm
f9733341b5
FN-7453: add GitLab enablement controls
...
Add a settings-controlled GitLab enablement path while preserving saved GitLab configuration.
- Add project and global GitLab enable settings with collapsible Settings UI for URL and token controls.
- Gate GitLab auth, import loading, and import actions when GitLab integration is disabled.
- Preserve global GitLab values separately during global settings saves and document the new behavior.
- Cover enablement resolution, settings save behavior, disabled import UI, and GitLab route/auth gating with tests.
Files changed:
.changeset/fn-7453-gitlab-enable-disclosure.md | 7 ++
docs/dashboard-guide.md | 7 ++
docs/gitlab-parity-inventory.md | 1 +
docs/settings-reference.md | 4 ++
docs/task-management.md | 6 +-
packages/core/src/__tests__/gitlab-config.test.ts | 17 ++++-
.../core/src/__tests__/settings-parity.test.ts | 18 +++--
packages/core/src/gitlab-config.ts | 15 ++++-
packages/core/src/index.ts | 2 +-
packages/core/src/settings-schema.ts | 2 +
packages/core/src/types.ts | 5 ++
.../app/__tests__/settings-save-split.test.ts | 20 +++---
.../dashboard/app/components/GitHubImportModal.tsx | 43 +++++++++---
.../dashboard/app/components/SettingsModal.css | 77 +++++++++++++++++++++
.../dashboard/app/components/SettingsModal.tsx | 34 ++++++++-
.../__tests__/GitHubImportModal.test.tsx | 19 ++++++
.../__tests__/SettingsModal.general.test.tsx | 78 ++++++++++++++++++++++
.../SettingsModal.scheduling-merge.test.tsx | 7 +-
.../app/components/settings/save-split.ts | 5 +-
.../settings/sections/GeneralSection.tsx | 36 ++++++----
.../settings/sections/GlobalGeneralSection.tsx | 71 ++++++++++++--------
.../components/settings/sections/MergeSection.tsx | 44 +++++++-----
.../dashboard/src/__tests__/gitlab-auth.test.ts | 20 ++++++
.../dashboard/src/__tests__/routes-gitlab.test.ts | 11 +++
packages/dashboard/src/gitlab-auth.ts | 11 ++-
25 files changed, 458 insertions(+), 102 deletions(-)
Fusion-Task-Id: FN-7453
Fusion-Task-Lineage: 81fbd39d-675f-49d6-8d13-b7fcb4d25658
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 19:01:09 -07:00
gsxdsm
aa8f1f32ee
FN-7438: recover stale branch-group references
...
Recover branch-group detail views after restarts and let operators clear stale per-task group context safely.
- Add Task Detail stale branch-group recovery UI that clears only the current task via the assign API.
- Verify durable branch groups and members survive TaskStore/API restarts, while stale references can be reset without losing unrelated metadata.
- Improve integration-branch fallback diagnostics for repositories that use non-origin remotes.
- Document the recovery path, durable branch-group storage expectations, and release the fix as a patch.
Files changed:
.../fn-7438-branch-group-restart-recovery.md | 7 ++
docs/dashboard-guide.md | 5 +-
docs/settings-reference.md | 2 +-
docs/storage.md | 2 +-
.../core/src/__tests__/branch-group-store.test.ts | 43 +++++++++++-
.../dashboard/app/components/BranchGroupCard.css | 9 +++
.../dashboard/app/components/BranchGroupCard.tsx | 49 +++++++++++++-
.../dashboard/app/components/TaskDetailModal.tsx | 14 +++-
.../components/__tests__/BranchGroupCard.test.tsx | 40 +++++++++++
.../components/__tests__/TaskDetailModal.test.tsx | 11 ++-
.../src/__tests__/routes-branch-groups.test.ts | 79 +++++++++++++++++++++-
.../src/__tests__/integration-branch.test.ts | 41 +++++++++++
packages/engine/src/integration-branch.ts | 54 ++++++++++++++-
13 files changed, 343 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-7438
Fusion-Task-Lineage: 09ef3dc3-8319-49a7-9f4d-c95a3e069d39
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 13:07:16 -07:00
gsxdsm
e5be9242d7
FN-7435: suppress misleading Anthropic re-login banner
...
Suppress the global Anthropic Subscription re-login warning when another Anthropic auth path can run agents.
- Hide expired Anthropic Subscription OAuth from the urgent dashboard banner when Anthropic API Key or Claude CLI auth is active.
- Preserve unrelated expired OAuth provider warnings and keep Settings documentation clear that Subscription remains expired until re-login.
- Add regression coverage for CLI, API-key, fallback-missing, and unrelated-provider banner visibility cases.
- Add a patch changeset for the user-facing banner fix.
Files changed:
.changeset/fn-7435-anthropic-subscription-banner.md | 7 +++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 4 +-
packages/dashboard/app/components/OAuthReloginBanner.tsx | 31 ++++++++++--
packages/dashboard/app/components/__tests__/OAuthReloginBanner.test.tsx | 59 ++++++++++++++++++++--
5 files changed, 91 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-7435
Fusion-Task-Lineage: 04462f77-a1e4-402d-97b2-dd47778398df
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 12:10:13 -07:00
gsxdsm
1f6befcfa7
FN-7427: add GitLab signal connector
...
Add GitLab webhook ingestion to Command Center Signals.
- Register GitLab as a supported signal provider with shared-token verification.\n- Normalize GitLab issue and merge request webhooks into capped Command Center signals.\n- Update tests, UI labels, docs, and changeset coverage for the new connector.\n\nFiles changed:\n .changeset/fn-7427-gitlab-signals.md | 7 +\n docs/dashboard-guide.md | 2 +-\n docs/settings-reference.md | 1 +\n docs/signals-connectors.md | 52 ++++-\n .../core/src/__tests__/signals-analytics.test.ts | 28 ++-\n .../__tests__/CommandCenter.mobile-scroll.test.tsx | 5 +-\n .../__tests__/CommandCenter.tablet-layout.test.tsx | 5 +-\n .../command-center/areas/SignalsArea.tsx | 5 +-\n .../areas/__tests__/areas.github-signals.test.tsx | 12 +-\n .../register-command-center-routes.test.ts | 7 +-\n .../src/__tests__/register-signal-routes.test.ts | 227 ++++++++++++++++++++-\n .../dashboard/src/routes/register-signal-routes.ts | 8 +-\n packages/dashboard/src/signal-source.ts | 23 ++-\n packages/dashboard/src/signal-sources/gitlab.ts | 219 ++++++++++++++++++++\n 14 files changed, 574 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-7427
Fusion-Task-Lineage: cfe94cb7-e9d5-4bec-9fc5-4a7e45b8c95d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 11:38:35 -07:00
gsxdsm
34be333a2a
FN-7426: add GitLab lifecycle automation
...
Add GitLab lifecycle automation for comments and source item state changes.
- Add GitLab REST helpers for posting notes and closing or reopening issues and merge requests.
- Register GitLab source-comment, tracking-comment, tracking-state, and source-close services with multi-project lifecycle wiring.
- Add project settings, documentation, tests, and a changeset for GitLab completion comments and auto-close behavior.
Files changed:
.changeset/fn-7426-gitlab-lifecycle.md | 7 ++
docs/cli-reference.md | 2 +-
docs/dashboard-guide.md | 3 +-
docs/settings-reference.md | 5 +-
packages/core/src/settings-schema.ts | 3 +
packages/core/src/types.ts | 10 +++
.../src/__tests__/gitlab-issue-comment.test.ts | 37 +++++++++
.../__tests__/gitlab-source-issue-close.test.ts | 29 +++++++
.../src/__tests__/gitlab-tracking-comments.test.ts | 31 +++++++
.../src/__tests__/gitlab-tracking-state.test.ts | 42 ++++++++++
packages/dashboard/src/__tests__/gitlab.test.ts | 18 ++++
.../register-git-github.gitlab-lifecycle.test.ts | 54 ++++++++++++
packages/dashboard/src/gitlab-issue-comment.ts | 62 ++++++++++++++
packages/dashboard/src/gitlab-lifecycle.ts | 58 +++++++++++++
.../dashboard/src/gitlab-source-issue-close.ts | 45 ++++++++++
packages/dashboard/src/gitlab-tracking-comments.ts | 77 +++++++++++++++++
packages/dashboard/src/gitlab-tracking-state.ts | 97 ++++++++++++++++++++++
packages/dashboard/src/gitlab.ts | 30 +++++++
.../dashboard/src/routes/register-git-github.ts | 23 +++++
19 files changed, 630 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-7426
Fusion-Task-Lineage: a46bd11f-96ef-4291-ab41-829007fa057a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 11:38:34 -07:00
gsxdsm
fafe4c9d9f
FN-7423: add GitLab access token settings
...
Add GitLab access-token configuration and auth resolution for future HTTP API integrations.
- Add personal, project, and group GitLab token settings at project and global scope.
- Resolve configured tokens with GITLAB_TOKEN fallback and PRIVATE-TOKEN metadata without requiring glab.
- Document required GitLab scopes and update parity handoff notes.
- Cover settings save splitting, parity, modal rendering, and auth resolution with tests.
Files changed:
.changeset/fn-7423-gitlab-access-tokens.md | 7 ++
docs/gitlab-parity-inventory.md | 10 +-
docs/settings-reference.md | 6 +-
docs/task-management.md | 2 +-
.../core/src/__tests__/settings-parity.test.ts | 28 +++--
packages/core/src/index.ts | 2 +-
packages/core/src/settings-schema.ts | 4 +
packages/core/src/types.ts | 17 ++-
.../app/__tests__/settings-save-split.test.ts | 69 ++++++++++++
.../dashboard/app/components/SettingsModal.tsx | 2 +
.../SettingsModal.scheduling-merge.test.tsx | 57 ++++++++++
.../app/components/settings/save-split.ts | 6 +-
.../settings/sections/GlobalGeneralSection.tsx | 18 ++-
.../components/settings/sections/MergeSection.tsx | 22 ++++
.../dashboard/src/__tests__/gitlab-auth.test.ts | 99 +++++++++++++++++
packages/dashboard/src/gitlab-auth.ts | 123 +++++++++++++++++++++
16 files changed, 449 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-7423
Fusion-Task-Lineage: f14ae52b-b730-44b0-8bad-54945c61d009
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 11:38:33 -07:00
gsxdsm
573876603f
FN-7422: add GitLab URL configuration
...
Add typed GitLab instance and API URL settings for GitLab.com and self-managed instances.
- Add core GitLab URL defaults, validation, normalization, and project/global inheritance.
- Expose project and global GitLab instance/API URL fields in settings with save-split handling.
- Cover configuration resolution, settings parity, and settings UI save behavior with tests.
- Document the new settings and add a changeset for the published CLI package.
Files changed:
.changeset/fn-7422-gitlab-configuration.md | 7 ++
docs/settings-reference.md | 6 +-
docs/task-management.md | 2 +-
packages/core/src/__tests__/gitlab-config.test.ts | 74 +++++++++++++++++++
.../core/src/__tests__/settings-parity.test.ts | 22 +++++-
packages/core/src/gitlab-config.ts | 79 +++++++++++++++++++++
packages/core/src/index.ts | 4 +-
packages/core/src/settings-schema.ts | 4 ++
packages/core/src/types.ts | 20 ++++++
.../app/__tests__/settings-save-split.test.ts | 53 ++++++++++++++
.../dashboard/app/components/SettingsModal.tsx | 20 ++++++
.../__tests__/SettingsModal.general.test.tsx | 82 ++++++++++++++++++++++
.../app/components/settings/save-split.ts | 6 ++
.../settings/sections/GeneralSection.tsx | 15 ++++
.../settings/sections/GlobalGeneralSection.tsx | 14 ++++
15 files changed, 402 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-7422
Fusion-Task-Lineage: 0110b4b6-71b0-4a62-afaf-61af65ebef03
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 11:38:33 -07:00
gsxdsm
abb1917999
FN-7419: add Cursor CLI binary path override
...
Add a global Cursor CLI binary path override that is validated before enabling or probing Cursor routing.
- Add global settings schema/types and API support for storing a trimmed Cursor CLI binary path override.
- Surface a Settings Authentication control to save, clear, and test the Cursor CLI binary path.
- Probe configured Cursor binaries before PATH fallbacks and expose diagnostics for status/routes.
- Cover settings, route, dashboard, and cursor runtime behavior with focused tests and documentation.
Files changed:
.changeset/fn-7419-cursor-cli-binary-path.md | 7 ++
docs/cursor-cli-contract.md | 33 ++++--
docs/settings-reference.md | 2 +
.../core/src/__tests__/cursor-cli-settings.test.ts | 34 ++++++
packages/core/src/settings-schema.ts | 6 +
packages/core/src/types.ts | 8 ++
packages/dashboard/app/api/legacy.ts | 17 ++-
.../app/components/CursorCliProviderCard.css | 37 +++++-
.../app/components/CursorCliProviderCard.tsx | 78 ++++++++++++-
.../__tests__/ModelOnboardingModal.test.tsx | 4 +
.../__tests__/SettingsModal.general.test.tsx | 2 +
.../__tests__/SettingsModal.models-auth.test.tsx | 75 ++++++++++++
.../SettingsModal.remote-notifications.test.tsx | 2 +
.../SettingsModal.scheduling-merge.test.tsx | 2 +
.../__tests__/SettingsModal.test-harness.tsx | 3 +
.../dashboard/src/__tests__/routes-auth.test.ts | 130 ++++++++++++++++++++-
.../dashboard/src/routes/register-auth-routes.ts | 69 +++++++++--
.../src/__tests__/probe.test.ts | 61 +++++++++-
.../src/__tests__/process-manager.test.ts | 10 ++
.../src/__tests__/provider.test.ts | 57 +++++++++
plugins/fusion-plugin-cursor-runtime/src/probe.ts | 39 +++++--
.../fusion-plugin-cursor-runtime/src/provider.ts | 15 ++-
plugins/fusion-plugin-cursor-runtime/src/types.ts | 3 +
23 files changed, 655 insertions(+), 39 deletions(-)
Fusion-Task-Id: FN-7419
Fusion-Task-Lineage: 2c192a37-a1db-41a9-99f5-a480ed311d9c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 11:38:33 -07:00
gsxdsm
7302d22b9d
FN-7421: document GitLab parity inventory
...
Document the GitLab parity implementation inventory and guardrails for downstream work.
- Add a GitLab parity inventory covering import, tracking, comments, auto-close, auth, CLI/tools, Command Center, and signals surfaces.
- Link the inventory from existing settings, signals, and task-management documentation.
- Add a documentation contract test for required GitLab assumptions and explicit exclusions.
Files changed:
docs/gitlab-parity-inventory.md | 106 +++++++++++++++++++++
docs/settings-reference.md | 3 +
docs/signals-connectors.md | 2 +
docs/task-management.md | 2 +
.../gitlab-parity-inventory-documentation.test.ts | 70 ++++++++++++++
5 files changed, 183 insertions(+)
Fusion-Task-Id: FN-7421
Fusion-Task-Lineage: 3b16cb60-11d6-4dc5-a374-23e515dc8b31
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 11:38:32 -07:00
gsxdsm
85809103cd
FN-7413: configure agent permissions across lifetimes
...
Enable explicit capability grants and runtime permission policies for both durable and ephemeral agents.
- Persist normalized agent capability grants and leave missing permission policies to inherit project defaults at runtime.
- Apply action and tool approval gates to permanent agents, ephemeral agents, and fallback task workers.
- Add Agent Detail controls, translations, docs, tests, and a changeset for cross-lifetime agent permissions.
Files changed:
.changeset/fn-7413-agent-permissions.md | 7 ++
docs/agents.md | 12 ++--
docs/settings-reference.md | 11 ++-
packages/core/src/__tests__/agent-store.test.ts | 65 +++++++++++++----
packages/core/src/agent-store.ts | 31 ++++++---
packages/core/src/types.ts | 10 +--
.../dashboard/app/components/AgentDetailView.css | 48 +++++++++++++
.../dashboard/app/components/AgentDetailView.tsx | 81 +++++++++++++++++++++-
.../settings/sections/AgentPermissionsSection.tsx | 2 +-
.../dashboard/src/__tests__/routes-agents.test.ts | 8 +--
.../src/routes/register-agent-core-routes.ts | 32 ++++++---
.../src/__tests__/heartbeat-executor.test.ts | 14 +++-
packages/engine/src/agent-heartbeat.ts | 17 ++---
packages/engine/src/executor.ts | 57 +++++++--------
packages/i18n/locales/en/app.json | 12 +++-
packages/i18n/locales/es/app.json | 12 +++-
packages/i18n/locales/fr/app.json | 12 +++-
packages/i18n/locales/ko/app.json | 12 +++-
packages/i18n/locales/zh-CN/app.json | 12 +++-
packages/i18n/locales/zh-TW/app.json | 12 +++-
20 files changed, 363 insertions(+), 104 deletions(-)
Fusion-Task-Id: FN-7413
Fusion-Task-Lineage: bc004572-bde8-4d33-bb27-e941a5bc8884
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-02 11:38:31 -07:00
gsxdsm
a1af5de609
fix(anthropic): restore direct OAuth execution for Claude subscriptions
...
Claude subscription (Max/Pro) chats regressed to 404/502/429 because
FN-7396 rerouted subscription OAuth to a /v1-based `anthropic-subscription`
runtime provider — reintroducing issue #1857 that FN-7391 had fixed. Both
routed the OAuth token to api.anthropic.com/v1, the surface that broke.
Proven in code that v0.51.0 (working) sent subscription OAuth directly to
/v1 via pi-ai's built-in `anthropic` provider (Claude Code impersonation:
Bearer + anthropic-beta oauth headers), NOT through the CLI. Restore that:
- auth-storage: getApiKey("anthropic") resolves subscription/legacy OAuth
again (raw API key still wins), so the built-in provider gets the token.
- pi.ts: remove the runtime reroute and the /v1 `anthropic-subscription`
execution provider so anthropic/* selections stay on the built-in provider.
- register-model-routes: advertise `anthropic` for OAuth users so direct
OAuth is selectable in the picker.
Three independent surfaces, no rerouting: direct OAuth, raw ANTHROPIC_API_KEY
(precedence), and explicit pi-claude-cli.
Fixes #1857
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-01 15:40:16 -07:00
gsxdsm
9c2a264322
FN-7398: restore Anthropic model selection
...
Restore Anthropic model selector discovery across API-key, OAuth subscription, and Claude CLI flows.
- Read injected auth storage when building /api/models so Settings connection state feeds model availability.
- Keep Anthropic subscription OAuth separate from direct Anthropic API-key rows while allowing enabled Claude CLI models to appear.
- Add regression coverage for selector rendering, stale empty catalog refresh, and authenticated model-route filtering.
- Document the restored Anthropic provider surfaces and add a patch changeset.
Files changed:
.changeset/fn-7398-anthropic-model-selector.md | 7 ++
docs/settings-reference.md | 4 +-
.../components/__tests__/ModelSelectorTab.test.tsx | 105 +++++++++++++++++
.../app/hooks/__tests__/useModelsCache.test.ts | 40 +++++++
.../dashboard/src/__tests__/routes-auth.test.ts | 125 ++++++++++++++++++++-
.../dashboard/src/routes/register-model-routes.ts | 60 +++++++++-
6 files changed, 333 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-7398
Fusion-Task-Lineage: 5d1b1b8e-9b8b-40fe-b76f-7d6142e0e21f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 15:39:34 -07:00
gsxdsm
19e59ec6c8
FN-7396: separate Anthropic OAuth routing paths
...
Separate Anthropic subscription OAuth execution from raw API-key and Claude CLI routing.
- Route subscription-backed Anthropic selections through a dedicated anthropic-subscription provider instead of raw anthropic API-key storage or implicit CLI execution.
- Preserve Anthropic OAuth refresh, status, usage, and re-login banner behavior across separated and legacy credential rows.
- Add dashboard and engine coverage for OAuth subscription auth, raw API-key isolation, and explicit Claude CLI routing.
- Document the separated Anthropic subscription, API-key, and CLI surfaces and add a release changeset.
Files changed:
.../fn-7396-anthropic-oauth-cli-api-paths.md | 7 ++
docs/dashboard-guide.md | 4 +-
docs/settings-reference.md | 12 ++-
.../__tests__/OAuthReloginBanner.test.tsx | 118 +++++++++++++++++++++
.../dashboard/src/__tests__/routes-auth.test.ts | 29 +++++
packages/dashboard/src/__tests__/usage.test.ts | 109 ++++++++++++++++++-
.../dashboard/src/routes/register-auth-routes.ts | 20 +++-
packages/dashboard/src/usage.ts | 21 +++-
packages/engine/src/__tests__/auth-storage.test.ts | 65 ++++++++++++
.../src/__tests__/pi-create-fn-agent.test.ts | 55 ++++++++--
packages/engine/src/auth-storage.ts | 61 +++++++++--
packages/engine/src/pi.ts | 70 ++++++++----
12 files changed, 521 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-7396
Fusion-Task-Lineage: f5f42a40-b855-46ad-b2ae-3509e903f286
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 15:39:34 -07:00
gsxdsm
775ff5fb9c
FN-7391: route Anthropic subscription chats through Claude CLI
...
Keep Anthropic OAuth subscription credentials away from the direct /v1 provider while preserving raw API-key routing.
- Treat direct anthropic auth as raw API-key-only in auth storage and model discovery.
- Re-route persisted anthropic model selections to the Claude CLI provider when no raw Anthropic API key is configured.
- Add regression coverage for OAuth-only routing, raw API-key preservation, and provider list separation.
- Document the distinct raw API key, OAuth subscription, and Claude CLI routes.
Files changed:
.../fn-7391-anthropic-subscription-cli-routing.md | 7 ++
docs/settings-reference.md | 2 +-
.../dashboard/src/__tests__/routes-auth.test.ts | 74 ++++++++++++++
.../dashboard/src/routes/register-model-routes.ts | 27 +++++-
packages/engine/src/__tests__/auth-storage.test.ts | 108 +++++++--------------
.../src/__tests__/pi-create-fn-agent.test.ts | 100 +++++++++++++++++++
packages/engine/src/auth-storage.ts | 45 ++++-----
packages/engine/src/pi.ts | 61 ++++++++++++
8 files changed, 319 insertions(+), 105 deletions(-)
Fusion-Task-Id: FN-7391
Fusion-Task-Lineage: d1fecc2d-7f31-408c-bf65-0e65b7fd88b1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 15:39:33 -07:00
gsxdsm
ec0fa960d7
FN-7382: add triage plan auto-approve toggle
...
Add a board-column shortcut for toggling project plan auto-approval.
- Surface an Auto-approve plan switch in Triage and workflow intake/hold column menus.
- Wire the dashboard setting hook to persist planApprovalMode between workflow and auto-approve-all with optimistic rollback.
- Cover legacy and workflow board propagation plus column menu behavior with tests.
- Document the shortcut and add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-7382-triage-auto-approve-toggle.md | 7 ++
docs/dashboard-guide.md | 2 +
docs/settings-reference.md | 2 +-
packages/dashboard/app/App.tsx | 4 +
packages/dashboard/app/components/Board.tsx | 7 +-
packages/dashboard/app/components/Column.tsx | 35 ++++++-
.../app/components/__tests__/Board.test.tsx | 55 +++++++++-
.../app/components/__tests__/Column.test.tsx | 75 ++++++++++++++
.../app/components/dashboard/MainContent.tsx | 6 ++
.../dashboard/app/components/dashboard/types.ts | 2 +
.../app/hooks/__tests__/useAppSettings.test.ts | 114 +++++++++++++++++++++
packages/dashboard/app/hooks/useAppSettings.ts | 39 +++++++
12 files changed, 343 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-7382
Fusion-Task-Lineage: 1db96b50-3a8f-4074-b957-c30d1745aa23
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 11:01:50 -07:00
gsxdsm
d94c3591d3
FN-7381: honor project auto plan approval
...
Honor project-level auto plan approval across fresh and recovered triage finalization.
- Merge effective workflow settings during approved-task recovery before resolving the manual plan approval gate.
- Keep release authorization and Workflow Plan Review independent from manual plan approval bypasses.
- Add regression coverage for stored workflow approval settings overridden by project auto approval.
- Document the planApprovalMode precedence and release the fix as a patch.
Files changed:
.changeset/fn-7381-auto-plan-approval.md | 7 ++++
docs/settings-reference.md | 2 +-
docs/workflow-steps.md | 2 ++
.../src/__tests__/effective-settings-merge.test.ts | 12 +++++++
.../triage-plan-review-unavailable-retry.test.ts | 27 +++++++++++++-
packages/engine/src/__tests__/triage.test.ts | 42 ++++++++++++++++++++++
packages/engine/src/triage.ts | 13 ++++---
7 files changed, 99 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-7381
Fusion-Task-Lineage: c00fd0d9-ec0a-4dc5-8d6f-b49640157365
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:49:58 -07:00
gsxdsm
a9e2baa9f8
FN-7367: link imported GitHub issues to tracking
...
Imported GitHub issues can now adopt their source issue as the tracking issue without changing ordinary task defaults.
- Add the project-scoped githubLinkImportedIssuesToTracking setting with docs, Settings UI, and defaults.
- Honor the import-only setting across dashboard, CLI, and extension GitHub issue import paths.
- Cover saved settings and import tracking behavior with CLI, dashboard, and parity tests.
- Add a minor changeset for the published CLI package.
Files changed:
.changeset/fn-7367-github-import-tracking.md | 7 +++
docs/settings-reference.md | 3 +-
packages/cli/src/__tests__/extension.test.ts | 73 ++++++++++++++++++++++
.../task-command-github-import-tracking.test.ts | 16 +++++
packages/cli/src/commands/__tests__/task.test.ts | 28 +++++++++
packages/cli/src/commands/task.ts | 45 +++++++------
packages/cli/src/extension.ts | 45 +++++++------
.../core/src/__tests__/settings-parity.test.ts | 4 ++
packages/core/src/settings-schema.ts | 1 +
packages/core/src/types.ts | 6 ++
.../app/__tests__/settings-save-split.test.ts | 19 ++++++
.../dashboard/app/components/SettingsModal.tsx | 6 ++
.../__tests__/SettingsModal.general.test.tsx | 59 +++++++++++++++++
.../__tests__/SettingsModal.test-harness.tsx | 1 +
.../settings/sections/GeneralSection.tsx | 9 +++
.../dashboard/src/__tests__/routes-github.test.ts | 45 +++++++++++++
.../dashboard/src/routes/register-git-github.ts | 7 +++
17 files changed, 325 insertions(+), 49 deletions(-)
Fusion-Task-Id: FN-7367
Fusion-Task-Lineage: 43671cdf-7e0d-4b7a-9ba2-54c9a367dfec
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 09:50:57 -07:00
gsxdsm
12ee9a92d2
FN-7361: add exact tool permission overrides
...
Add exact tool-name permission overrides for permanent agent tool usage.
- Add persisted toolRules policy support with normalization, project-default inheritance, and escalation comparison.
- Enforce exact tool dispositions before category rules in engine gating and permanent-agent decisions.
- Extend the permission editor, agent/settings routes, translations, docs, and tests for fine-grained tool controls.
Files changed:
.changeset/fn-7361-tool-permissions.md | 7 +
docs/agents.md | 18 ++-
docs/settings-reference.md | 12 +-
.../agent-permission-policy-resolution.test.ts | 58 +++++++-
.../src/__tests__/agent-permission-policy.test.ts | 17 +++
...settings-schema-agent-permission-policy.test.ts | 6 +-
packages/core/src/agent-permission-policy.ts | 87 ++++++++++--
packages/core/src/index.ts | 2 +-
packages/core/src/types.ts | 19 ++-
.../dashboard/app/components/AgentDetailView.tsx | 17 +--
.../app/components/AgentPermissionPolicyEditor.css | 59 +++++++-
.../app/components/AgentPermissionPolicyEditor.tsx | 156 ++++++++++++++++++++-
.../__tests__/AgentPermissionPolicyEditor.test.tsx | 92 +++++++++++-
.../settings/sections/AgentPermissionsSection.tsx | 6 +-
.../dashboard/src/__tests__/routes-agents.test.ts | 79 +++++++++++
.../src/__tests__/routes-settings.test.ts | 21 +++
.../src/routes/register-agent-core-routes.ts | 37 +++--
.../agent-action-gate-project-default.test.ts | 34 +++++
.../engine/src/__tests__/agent-action-gate.test.ts | 43 ++++++
.../src/__tests__/gating-classifications.test.ts | 55 ++++++++
packages/engine/src/agent-action-gate.ts | 17 ++-
packages/engine/src/permanent-agent-gating.ts | 11 +-
packages/i18n/locales/en/app.json | 15 +-
packages/i18n/locales/es/app.json | 15 +-
packages/i18n/locales/fr/app.json | 15 +-
packages/i18n/locales/ko/app.json | 15 +-
packages/i18n/locales/zh-CN/app.json | 15 +-
packages/i18n/locales/zh-TW/app.json | 15 +-
28 files changed, 878 insertions(+), 65 deletions(-)
Fusion-Task-Id: FN-7361
Fusion-Task-Lineage: 006e4311-91a5-4792-9a54-feaba892129a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 09:45:30 -07:00
gsxdsm
d93fac0cc0
FN-7365: allow task popups on every viewport
...
Broaden board task popup routing so the existing popup setting works outside mobile.
- Route ordinary board-card opens to the task popup on desktop, tablet, and mobile when the popup setting is enabled.
- Rename the Appearance setting copy while preserving the stored openMobileTasksInPopup key for compatibility.
- Update tests, documentation, settings schema comments, and the published package changeset for the all-viewport behavior.
Files changed:
.changeset/fn-7365-task-popups-all-viewports.md | 7 ++++
docs/dashboard-guide.md | 6 ++--
docs/settings-reference.md | 2 +-
packages/core/src/settings-schema.ts | 4 +--
packages/core/src/types.ts | 6 ++--
packages/dashboard/app/App.tsx | 6 ++--
.../__tests__/App.openTasksInRightSidebar.test.ts | 42 +++++++++++++++++-----
.../settings/sections/AppearanceSection.tsx | 5 +--
.../sections/__tests__/AppearanceSection.test.tsx | 10 +++---
9 files changed, 62 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-7365
Fusion-Task-Lineage: 58713922-3ff8-4cc9-8f81-26c1e982819e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 08:32:29 -07:00
gsxdsm
62c58402ff
fix(workflow): raise step review timeout default
2026-07-01 08:22:04 -07:00
gsxdsm
62c4aae038
FN-7358: recover Sonnet 5 chat fallbacks
...
Recover Sonnet 5 chat sends by applying configured fallback models and clearer failure context.
- Allow explicit dashboard chat model selections to use the configured fallback on retryable provider/model failures.
- Preserve selected provider/model context in no-fallback chat errors so operators can identify unavailable models.
- Expand provider not-found detection and regression coverage for Anthropic Sonnet 5 404 payloads.
- Document fallback behavior and add the published package changeset.
Files changed:
.changeset/fn-7358-sonnet-5-response-failed.md | 7 +++
docs/settings-reference.md | 2 +-
.../dashboard/src/__tests__/chat-manager.test.ts | 71 +++++++++++++++++++---
packages/dashboard/src/chat.ts | 67 +++++++++++++++++---
packages/engine/src/__tests__/pi.test.ts | 71 +++++++++++++++++++++-
.../src/__tests__/transient-error-detector.test.ts | 4 ++
packages/engine/src/pi.ts | 4 +-
packages/engine/src/transient-error-detector.ts | 4 +-
8 files changed, 208 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-7358
Fusion-Task-Lineage: 095a3218-1d4a-4ccb-a8c9-c9f81822b084
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 07:33:56 -07:00
gsxdsm
7e74fe3a9b
FN-7293: honor workflow review revision overrides
...
Allow workflow review steps to opt into unbounded or capped revision retries while keeping recovery caps accurate.
- Add workflow settings for Plan Review and Code Review max revisions with display, docs, and changeset coverage.
- Resolve optional-step revision budgets through workflow settings, node overrides, and existing fallback limits.
- Track revision attempts per workflow step and hydrate slim self-healing rows before enforcing retry caps.
- Cover unbounded, capped, per-step, and slim-row recovery behavior with focused tests.
Files changed:
.changeset/fn-7293-unbounded-review-revisions.md | 7 +
docs/settings-reference.md | 12 +-
docs/workflow-editor.md | 4 +-
docs/workflow-steps.md | 3 +-
.../builtin-workflow-settings-triage.test.ts | 28 +++-
.../core/src/__tests__/builtin-workflows.test.ts | 29 ++++-
.../__tests__/workflow-settings-resolver.test.ts | 73 +++++++++++
packages/core/src/builtin-plan-review-group.ts | 6 +-
packages/core/src/builtin-workflow-settings.ts | 30 +++++
packages/core/src/index.ts | 5 +
packages/core/src/workflow-ir-types.ts | 15 ++-
packages/core/src/workflow-ir.ts | 5 +-
packages/core/src/workflow-settings-resolver.ts | 49 ++++++-
.../__tests__/WorkflowSettingsPanel.test.tsx | 52 ++++++++
.../app/components/workflow-setting-display.ts | 18 +++
packages/engine/src/__tests__/self-healing.test.ts | 143 ++++++++++++++++++++-
.../workflow-graph-optional-step-fix.test.ts | 130 ++++++++++++++++++-
packages/engine/src/executor.ts | 77 +++++++++--
packages/engine/src/self-healing.ts | 82 ++++++++++--
packages/engine/src/workflow-graph-executor.ts | 5 +-
20 files changed, 725 insertions(+), 48 deletions(-)
Fusion-Task-Id: FN-7293
Fusion-Task-Lineage: 19ee533f-ab8d-4e20-9a27-9cf0cf6dfec9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 13:12:27 -07:00
gsxdsm
ebb805d253
FN-7261: add global modal dismissal setting
...
Add a global dashboard preference that keeps modal backdrop dismissal off by default while allowing operators to opt in.
- Add dismissModalsOnOutsideClick to global settings defaults, schema, docs, and save handling.
- Provide the modal dismissal preference through App and gate shared overlay mouse/touch dismissal on it.
- Expose the preference in Global General settings and update modal dismissal tests.
- Add a changeset for the published CLI package.
Files changed:
.changeset/fn-7261-global-modal-outside-dismiss.md | 7 ++++
docs/settings-reference.md | 1 +
.../core/src/__tests__/settings-defaults.test.ts | 9 +++++
packages/core/src/settings-schema.ts | 5 +++
packages/core/src/types.ts | 5 +++
packages/dashboard/app/App.tsx | 16 +++++----
.../app/components/AgentErrorDetailsModal.tsx | 4 ++-
.../__tests__/AgentErrorDetailsModal.test.tsx | 28 +++++++++++++++-
.../__tests__/SettingsModal.general.test.tsx | 23 ++++++++++++-
.../app/components/settings/save-split.ts | 1 +
.../settings/sections/GlobalGeneralSection.tsx | 5 +++
.../app/hooks/__tests__/useOverlayDismiss.test.tsx | 38 ++++++++++++++++++----
packages/dashboard/app/hooks/useAppSettings.ts | 5 +++
packages/dashboard/app/hooks/useOverlayDismiss.ts | 36 +++++++++++++++++---
14 files changed, 163 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-7261
Fusion-Task-Lineage: 4fd5195f-c759-46b4-b567-0d5a9d5b92e3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 01:50:52 -07:00
gsxdsm
b5da5d310a
FN-7263: refresh custom provider model lists
...
Refresh persisted custom-provider model lists from saved endpoints and expose manual refresh controls.
- Add dashboard API helpers and routes to refresh one or all custom-provider model lists while preserving concurrent settings edits.
- Start background model refresh from serve, dashboard, and daemon startup paths after the server begins listening.
- Add Settings UI refresh actions, row-level status messaging, styles, docs, and regression coverage for refresh behavior.
Files changed:
.changeset/fn-7263-custom-provider-model-refresh.md | 7 +
docs/dashboard-guide.md | 6 +-
docs/settings-reference.md | 2 +-
packages/cli/src/commands/__tests__/daemon.test.ts | 59 +++++
.../cli/src/commands/__tests__/dashboard.test.ts | 51 ++++
packages/cli/src/commands/__tests__/serve.test.ts | 59 ++++-
packages/cli/src/commands/daemon.ts | 39 +++-
packages/cli/src/commands/dashboard.ts | 10 +
packages/cli/src/commands/serve.ts | 11 +-
.../app/__tests__/api-custom-providers.test.ts | 43 ++++
packages/dashboard/app/api/legacy.ts | 11 +
.../app/components/CustomProvidersSection.css | 41 +++-
.../app/components/CustomProvidersSection.tsx | 68 +++++-
.../__tests__/CustomProvidersSection.test.tsx | 227 ++++++++++++++++++
packages/dashboard/src/index.ts | 6 +
.../__tests__/custom-provider-routes.test.ts | 255 ++++++++++++++++++++
.../src/routes/__tests__/custom-providers.test.ts | 12 +
.../src/routes/register-custom-provider-routes.ts | 259 ++++++++++++++++-----
18 files changed, 1101 insertions(+), 65 deletions(-)
Fusion-Task-Id: FN-7263
Fusion-Task-Lineage: 60ee0637-ac85-409f-a376-c01f4bc8e8c5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 01:23:09 -07:00