f9641ec76e61a5e4585caaed197f1f5b4be8a737
393 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
df8ad460af |
FN-7772: add per-lane thinking level for workflow model lanes
Adds a per-workflow-lane thinking-level setting so execution, planning, and review model lanes can each specify their own reasoning-effort/thinking level, threaded through engine phase precedence so lane-specific settings override the workflow default. - Add workflow lane thinking-level settings to builtin workflow settings and settings schema, with new types in core. - Thread lane thinking-level precedence through model-resolution and engine phase execution (executor, step-session-executor, triage, agent-session-helpers). - Surface per-lane thinking-level controls in the dashboard WorkflowSettingsPanel and ProjectModelsSection. - Add/adjust tests for workflow settings, agent-session-helpers, and the dashboard settings panels. - Update settings-reference.md and workflow-steps.md docs. - Add changeset for the new feature (minor). Files changed: .changeset/fn-7772-workflow-lane-thinking.md | 7 ++++ docs/settings-reference.md | 10 ++--- docs/workflow-steps.md | 4 +- .../core/src/__tests__/workflow-settings.test.ts | 41 ++++++++++++++++++++ packages/core/src/builtin-workflow-settings.ts | 27 ++++++++++++- packages/core/src/index.ts | 4 +- packages/core/src/model-resolution.ts | 45 +++++++++++++++++++++- packages/core/src/settings-schema.ts | 3 ++ packages/core/src/types.ts | 6 +++ .../app/components/WorkflowSettingsPanel.tsx | 35 ++++++++++++++--- .../__tests__/SettingsModal.models-auth.test.tsx | 7 +++- .../__tests__/WorkflowSettingsPanel.test.tsx | 31 +++++++++++++++ .../settings/sections/ProjectModelsSection.tsx | 39 ++++++++++++++++--- .../src/__tests__/agent-session-helpers.test.ts | 13 ++++--- .../engine/src/__tests__/executor-test-helpers.ts | 1 + packages/engine/src/agent-session-helpers.ts | 19 +++++---- packages/engine/src/executor.ts | 4 +- packages/engine/src/step-session-executor.ts | 2 +- packages/engine/src/triage.ts | 8 +++- 19 files changed, 264 insertions(+), 42 deletions(-) Fusion-Task-Id: FN-7772 Fusion-Task-Lineage: 70aba3a9-66c2-4bb0-aff9-acabc7b98818 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
5f14a58d3b |
FN-7770: add per-lane thinking-level overrides for project & global model settings
Adds an optional thinking-effort/reasoning override per model lane in Settings (project and global), resolved with precedence task > lane > global default, and reconciles this work with the already-landed FN-7768 inline thinking-level control on CustomModelDropdown (kept the shared shouldShowThinking/thinkingBadgeLabel implementation to avoid duplicating the selector/badge UI). - Add lane thinking-level settings schema fields and runtime precedence (task > lane > global default) in @fusion/core - Wire per-lane thinking selectors into GlobalModelsSection and ProjectModelsSection via CustomModelDropdown's existing showThinkingLevel/thinkingLevel/onThinkingLevelChange/defaultThinkingLevel props - Resolve merger thinking level from the default lane rather than the title-summarizer lane in engine session helpers/executor/merger/triage - Update settings-reference docs and add a minor changeset for the new lane thinking overrides - Add/expand test coverage: settings-parity, store-settings, settings-sections, agent-session-helpers - Add new i18n key models.options.defaultWithLevel across locales Files changed: .changeset/fn-7770-lane-thinking.md | 7 ++ docs/settings-reference.md | 8 ++ .../core/src/__tests__/settings-parity.test.ts | 17 ++++ packages/core/src/__tests__/store-settings.test.ts | 42 +++++++++ packages/core/src/settings-schema.ts | 14 +++ packages/core/src/types.ts | 16 ++++ .../app/__tests__/settings-sections.test.tsx | 100 ++++++++++++++++++--- .../app/components/CustomModelDropdown.css | 1 + .../dashboard/app/components/SettingsModal.tsx | 37 ++++++++ .../settings/sections/GlobalModelsSection.tsx | 9 +- .../settings/sections/ProjectModelsSection.tsx | 12 ++- .../app/components/settings/sections/context.ts | 2 + .../src/__tests__/agent-session-helpers.test.ts | 36 ++++++++ packages/engine/src/agent-session-helpers.ts | 60 +++++++++++++ packages/engine/src/executor.ts | 14 +-- packages/engine/src/merger-ai.ts | 12 ++- packages/engine/src/merger.ts | 12 +-- packages/engine/src/pr-response-run-ops.ts | 4 +- packages/engine/src/step-session-executor.ts | 3 +- packages/engine/src/triage.ts | 5 +- packages/i18n/locales/en/app.json | 3 +- packages/i18n/locales/es/app.json | 3 +- packages/i18n/locales/fr/app.json | 3 +- packages/i18n/locales/ko/app.json | 3 +- packages/i18n/locales/zh-CN/app.json | 3 +- packages/i18n/locales/zh-TW/app.json | 3 +- packages/i18n/src/resources.d.ts | 3 + 27 files changed, 390 insertions(+), 42 deletions(-) Fusion-Task-Id: FN-7770 Fusion-Task-Lineage: 3418c621-ac99-4cd4-a435-9348da03972f Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
fed5d3d951 |
FN-7759: fix GPT-5.6 codex models missing from model dropdown
Ensure GPT-5.6 codex models (luna, sol, terra) actually surface in the codex model picker by validating the openai-codex supplemental merge against the real pi-coding-agent ModelRegistry instead of only a mocked one. - Harden openai-models.ts supplemental merge logic against real ModelRegistry auth filtering, registerProvider full-replacement, and OAuth provider validation - Add @earendil-works/pi-coding-agent devDependency to @fusion/core for real-registry testing - Add regression test (openai-models.test.ts) exercising the real registry path - Extend register-model-routes-openai-codex-supplemental.test.ts dashboard test coverage - Update docs/settings-reference.md - Add changeset fn-7759-codex-gpt-5-6-dropdown.md (patch, fix) Files changed: .changeset/fn-7759-codex-gpt-5-6-dropdown.md | 7 ++ docs/settings-reference.md | 2 +- packages/core/package.json | 1 + packages/core/src/__tests__/openai-models.test.ts | 68 +++++++++++++ packages/core/src/openai-models.ts | 107 ++++++++++++++++----- ...-model-routes-openai-codex-supplemental.test.ts | 77 +++++++++++++-- pnpm-lock.yaml | 68 +++++++++++++ 7 files changed, 300 insertions(+), 30 deletions(-) Fusion-Task-Id: FN-7759 Fusion-Task-Lineage: 4c03838f-b8d8-4f6f-ae55-c3356c1c3176 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
f7c6f560c0 |
FN-7753: route grok-cli execution through the grok CLI when no Fusion-visible GROK_API_KEY resolves
Route grok-cli model selections through the grok CLI runtime when no Fusion-visible GROK_API_KEY is available. - Add read-only isGrokApiKeyFusionVisible() in packages/core/src/grok-provider.ts, refactored to share user-settings-file reading with hydrateGrokApiKeyFromUserSettings without mutating process.env or logging key material. - In packages/engine/src/agent-session-helpers.ts, auto-derive the existing "grok" runtimeHint when defaultProvider is grok-cli, no key is Fusion-visible, and the grok plugin runtime is registered; explicit runtime hints and mock/test-mode routing remain unchanged, and the provider-qualified model prefix is stripped before handoff. - Normalize provider-qualified model ids (grok-cli/<id>, grok/<id>) in the grok-runtime plugin's runtime-adapter and CLI stream spawn so the concrete model reaches `grok --model`, with the historical grok/default fallback preserved for the no-model path. - Update docs (grok-cli-contract.md, settings-reference.md, plugin README) and add/extend tests covering the new fallback behavior, model normalization, and CLI streaming. - Add changeset fn-7753-grok-cli-no-key-fallback.md (patch, fix). Files changed: .changeset/fn-7753-grok-cli-no-key-fallback.md | 7 ++ docs/grok-cli-contract.md | 83 ++++++++++------ docs/settings-reference.md | 6 +- .../__tests__/grok-provider-user-settings.test.ts | 46 +++++++++ packages/core/src/grok-provider.ts | 39 +++++++- packages/core/src/index.gate.ts | 1 + packages/core/src/index.ts | 1 + .../src/__tests__/grok-runtime-routing.test.ts | 107 +++++++++++++++++++-- packages/engine/src/agent-session-helpers.ts | 52 +++++++++- plugins/fusion-plugin-grok-runtime/README.md | 46 +++++---- .../src/__tests__/cli-stream.test.ts | 70 ++++++++++++++ .../src/__tests__/runtime-adapter.test.ts | 28 ++++++ .../fusion-plugin-grok-runtime/src/cli-stream.ts | 6 ++ .../src/runtime-adapter.ts | 24 ++++- 14 files changed, 443 insertions(+), 73 deletions(-) Fusion-Task-Id: FN-7753 Fusion-Task-Lineage: 30ef7265-1ba9-47fd-8c4e-87b02f6a1d78 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
d2c2a4cab1 |
FN-7754: seed OpenAI GPT-5.6 Codex models into pi createFnAgent registry
Wires the GPT-5.6 codenamed OpenAI Codex models (gpt-5.6-luna/sol/terra) into the engine pi model-registry seeding surface, mirroring the dashboard's /api/models supplemental merge so the models are no longer missing from pi. - Call mergeSupplementalOpenAiCodexModels() in createFnAgent (packages/engine/src/pi.ts) alongside the existing Anthropic supplemental merge - Add regression tests covering synthesis of missing GPT-5.6 rows and dedupe against pinned catalog entries - Update docs/settings-reference.md to describe the additive surfacing on both /api/models and the engine/pi registry-seeding path - Add a patch changeset for @runfusion/fusion Files changed: .changeset/fn-7754-openai-gpt-5-6-pi-surface.md | 7 +++ docs/settings-reference.md | 2 +- .../src/__tests__/pi-create-fn-agent.test.ts | 63 ++++++++++++++++++++++ packages/engine/src/pi.ts | 6 +++ 4 files changed, 77 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-7754 Fusion-Task-Lineage: b61b6812-c94b-46d8-b187-445ccdd6e4e9 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
6a13ad175e |
FN-7732: remove dangling release-authorization UI/i18n/docs scaffolding
Narrative: The triage release-authorization gate itself was already removed in b5b0458; this cleans up the leftover scaffolding it left behind — an unemitted activity type, a dead TaskCard badge/label/CSS, orphaned i18n keys across all 6 locales, and a stale solutions doc — so the codebase no longer references a gate that no longer exists. - Drop the unused `task:release-authorization-required` ActivityEventType and its label/rendering in ActivityFeed.tsx and ActivityLogModal.tsx - Remove the dead `isReleaseAuthorizationHold` badge logic and `.awaiting-release-authorization` CSS class from TaskCard.tsx/TaskCard.css - Simplify TaskDetailModal.tsx comments/logic now that legacy release-authorization holds render as ordinary manual plan-approval holds - Delete orphaned i18n keys `tasks.awaitingReleaseAuthorization` and `taskDetail.plan.releaseAuthorizationHold` across en/es/fr/ko/zh-CN/zh-TW locales and resources.d.ts - Delete the stale docs/solutions/architecture-patterns/release-triage-requires-user-authorization.md doc - Update docs/workflow-steps.md and docs/settings-reference.md to describe the gate as removed (superseded by FN-7732) instead of documenting still-active behavior - Add changeset for @runfusion/fusion (patch/internal) Files changed: .changeset/fn-7732-remove-release-authorization-block.md | 7 +++++ docs/settings-reference.md | 2 +- docs/solutions/architecture-patterns/release-triage-requires-user-authorization.md | 33 ---------------------- docs/workflow-steps.md | 6 ++-- packages/core/src/types.ts | 8 ++++-- packages/dashboard/app/components/ActivityFeed.tsx | 5 ---- packages/dashboard/app/components/ActivityLogModal.tsx | 6 ---- packages/dashboard/app/components/TaskCard.css | 11 -------- packages/dashboard/app/components/TaskCard.tsx | 13 +++------ packages/dashboard/app/components/TaskDetailModal.tsx | 14 +++------ packages/i18n/locales/en/app.json | 3 -- 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 +--- packages/i18n/src/resources.d.ts | 3 -- 17 files changed, 30 insertions(+), 106 deletions(-) Fusion-Task-Id: FN-7732 Fusion-Task-Lineage: d4137bd8-9056-4062-9f2a-c6f5d47295f4 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
f9307904c2 |
FN-7745: add GPT-5.6 codenamed model variants to model selector
Registers the three GPT-5.6 codenamed OpenAI Codex model variants (luna, sol, terra) so they appear in the model picker, since pricing alone did not make them selectable. - Add packages/core/src/openai-models.ts with SUPPLEMENTAL_OPENAI_CODEX_PROVIDER_REGISTRATION and mergeSupplementalOpenAiCodexModels(), mirroring the existing Anthropic supplemental-merge seam; additive and dedupe-safe against the pinned pi-ai catalog - Wire mergeSupplementalOpenAiCodexModels into GET /api/models via packages/dashboard/src/routes/register-model-routes.ts, alongside the existing Anthropic supplemental merge - Export new symbols from packages/core/src/index.ts and packages/core/src/index.gate.ts - Add unit tests for the merge helper (packages/core/src/__tests__/openai-models.test.ts) and the route wiring (packages/dashboard/src/__tests__/register-model-routes-openai-codex-supplemental.test.ts) - Document the new supplemental catalog entries in docs/settings-reference.md - Add changeset .changeset/fn-7745-gpt-5-6-codenamed-model-selector.md (minor, @runfusion/fusion) Files changed: .../fn-7745-gpt-5-6-codenamed-model-selector.md | 7 + docs/settings-reference.md | 2 + packages/core/src/__tests__/openai-models.test.ts | 134 +++++++++++++++++ packages/core/src/index.gate.ts | 9 ++ packages/core/src/index.ts | 9 ++ packages/core/src/openai-models.ts | 166 +++++++++++++++++++++ ...-model-routes-openai-codex-supplemental.test.ts | 143 ++++++++++++++++++ .../dashboard/src/routes/register-model-routes.ts | 10 +- 8 files changed, 479 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-7745 Fusion-Task-Lineage: 74c83182-df81-4606-a4dc-0da3ee4cae83 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
0e90578122 |
FN-7737: Add file_scope agent permission category with default allow disposition
Introduces a new file_scope sensitive-action category to the agent permission policy model so file-scope-related FN tools are classified and gated distinctly from other categories, defaulting to allowed under the grant-all preset. - Add file_scope to AGENT_PERMISSION_POLICY_ACTION_CATEGORIES in @fusion/core types - Classify FILE_SCOPE_FN_TOOLS in both agent-action-gate and permanent-agent-gating with a uniform preset disposition (no review_gate_bypass-style override) - Update AgentDetailView and AgentPermissionPolicyEditor to surface the new category in the dashboard UI - Add/extend unit tests across core, engine, and dashboard packages covering the new category's resolution, gating, and UI rendering - Update docs/agents.md and docs/settings-reference.md to document the new permission category - Regenerate i18n locale strings (en/es/fr/ko/zh-CN/zh-TW) and resources.d.ts for the new category labels - Add changeset for @runfusion/fusion (minor) describing the new File Scope permission category Files changed: .../fn-7737-file-scope-permission-category.md | 7 + docs/agents.md | 10 +- docs/settings-reference.md | 8 +- .../agent-permission-policy-resolution.test.ts | 13 + .../src/__tests__/agent-permission-policy.test.ts | 45 +++ packages/core/src/types.ts | 7 + .../dashboard/app/components/AgentDetailView.tsx | 2 + .../app/components/AgentPermissionPolicyEditor.tsx | 8 + .../__tests__/AgentPermissionPolicyEditor.test.tsx | 37 +++ .../engine/src/__tests__/agent-action-gate.test.ts | 46 +++ .../src/__tests__/gating-classifications.test.ts | 67 +++++ .../src/__tests__/permanent-agent-gating.test.ts | 41 +++ packages/engine/src/agent-action-gate.ts | 7 + packages/engine/src/gating-classifications.ts | 6 + packages/engine/src/permanent-agent-gating.ts | 6 + 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 | 310 +++++++++++++++------ 22 files changed, 550 insertions(+), 94 deletions(-) Fusion-Task-Id: FN-7737 Fusion-Task-Lineage: 7b161fb3-7dd9-4860-aa4d-0cb35f38ea5b Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
2ff8e2e13e |
FN-7743: detect and recover stalled in-progress executor tasks in overseer
Fix the planner overseer's executor-stage stall detection so hung in-progress tasks get unstuck instead of being reported as progressing forever. - Add configurable stuck-detection: the executor-stage overseer observation now emits signal: "stuck" once an in-progress task has been inactive past a new plannerOverseerExecutorStuckAfterMs threshold, feeding the existing decidePlannerRecovery -> bounded inject_guidance recovery path. - Register the new plannerOverseerExecutorStuckAfterMs setting in builtin-workflow-settings.ts and export it via core index.ts/index.gate.ts. - Preserve human-control withholds (user-paused / approval-blocked / autoMerge-off) taking precedence over stuck detection. - Add/extend tests covering planner-overseer, planner-recovery-controller, planner-recovery, and builtin-workflow-settings-triage. - Document the new setting in docs/architecture.md and docs/settings-reference.md. - Add changeset fn-7743-overseer-executor-stall.md (patch). Files changed: .changeset/fn-7743-overseer-executor-stall.md | 7 + docs/architecture.md | 31 +++++ docs/settings-reference.md | 3 +- .../builtin-workflow-settings-triage.test.ts | 22 ++++ .../core/src/__tests__/planner-recovery.test.ts | 12 ++ packages/core/src/builtin-workflow-settings.ts | 26 ++++ packages/core/src/index.gate.ts | 1 + packages/core/src/index.ts | 1 + .../engine/src/__tests__/planner-overseer.test.ts | 146 +++++++++++++++++++++ .../__tests__/planner-recovery-controller.test.ts | 52 +++++++- packages/engine/src/planner-overseer.ts | 88 ++++++++++++- packages/engine/src/project-engine.ts | 11 +- 12 files changed, 391 insertions(+), 9 deletions(-) Fusion-Task-Id: FN-7743 Fusion-Task-Lineage: 791852a2-5b77-48de-955a-1b3916616dfa Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
d44dbaab15 |
FN-7728: add review_gate_bypass RBAC category for fn_task_bypass_review
Introduces a dedicated review_gate_bypass permission-policy category so operators can govern who may bypass a failed pre-merge review gate independently of ordinary task-mutation permissions. - Add review_gate_bypass as a new sensitive-action category in packages/core/src/types.ts, distinct from task_agent_mutation, with fn_task_bypass_review as its sole example tool - Default review_gate_bypass to require-approval even under the unrestricted preset (stricter than the preset's uniform disposition) in packages/core/src/agent-permission-policy.ts, while approval-required/locked-down already cover it uniformly - Classify fn_task_bypass_review into the new category via a shared REVIEW_GATE_BYPASS_FN_TOOLS set in packages/engine/src/gating-classifications.ts, consumed identically by both evaluateAgentActionGate and the permanent-agent gate to prevent path drift - Render the new category as its own row in the dashboard's project-default and per-agent AgentPermissionPolicyEditor, surfaced in AgentDetailView - Update docs/settings-reference.md and add unit tests across core/engine/dashboard covering the new category, its stricter default, and gate-classification alignment - Add changeset (@runfusion/fusion: minor) documenting the new operator-facing permission category Files changed: .changeset/fn-7728-review-gate-bypass-rbac.md | 7 +++ docs/settings-reference.md | 8 +-- .../src/__tests__/agent-permission-policy.test.ts | 54 ++++++++++++++++++- packages/core/src/agent-permission-policy.ts | 12 ++++- packages/core/src/types.ts | 8 +++ .../dashboard/app/components/AgentDetailView.tsx | 2 + .../app/components/AgentPermissionPolicyEditor.tsx | 8 +++ .../__tests__/AgentPermissionPolicyEditor.test.tsx | 5 ++ .../engine/src/__tests__/agent-action-gate.test.ts | 45 ++++++++++++++++ .../src/__tests__/gating-classifications.test.ts | 63 ++++++++++++++++++++++ .../src/__tests__/permanent-agent-gating.test.ts | 41 ++++++++++++++ packages/engine/src/agent-action-gate.ts | 7 +++ packages/engine/src/gating-classifications.ts | 8 ++- packages/engine/src/permanent-agent-gating.ts | 6 +++ 14 files changed, 266 insertions(+), 8 deletions(-) Fusion-Task-Id: FN-7728 Fusion-Task-Lineage: 100c8563-2897-4d53-9546-5c2faa6ab7d8 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
a4931a4731 |
FN-7719: derive implicit planning fallback model when no fallback configured
Triage planning-model retries no longer dead-end on "no fallback configured" when a provider primary-model call fails (e.g. a 404 wrapped in a 429 for nvidia/moonshotai/kimi-k2.6). - Add resolveImplicitPlanningFallbackModel() to agent-session-helpers.ts: derives a fallback from the resolved project/global default (execution) model when neither planningFallback*/global fallback* is set, guarding against self-swap and skipping in test mode. - Wire the implicit fallback into TriageProcessor.specifyTask() in triage.ts so a retryable primary planner-model failure swaps once via the derived fallback instead of failing triage outright. - Add unit test coverage in agent-session-helpers.test.ts and triage.test.ts for the new implicit-fallback resolution and its triage integration. - Document the new implicit-fallback behavior in docs/settings-reference.md. - Add a patch changeset for @runfusion/fusion describing the fix. Files changed: .changeset/fn-7719-triage-planning-implicit-fallback.md | 7 + docs/settings-reference.md | 2 + packages/engine/src/__tests__/agent-session-helpers.test.ts | 75 +++++++ packages/engine/src/__tests__/triage.test.ts | 237 +++++++++++++++++++++ packages/engine/src/agent-session-helpers.ts | 41 ++++ packages/engine/src/triage.ts | 31 ++- 6 files changed, 389 insertions(+), 4 deletions(-) Fusion-Task-Id: FN-7719 Fusion-Task-Lineage: 69e797e1-5bac-47f3-8dce-505b9d64d83c Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
b2613b7132 |
FN-7714: honor ~/.grok/user-settings.json apiKey when GROK_API_KEY is unset
Fall back to the Grok CLI's user-settings file for the API key so pi's $GROK_API_KEY provider reference resolves even when the env var isn't exported.
- Add hydrateGrokApiKeyFromUserSettings() in grok-provider.ts, called from registerBuiltInGrokProvider(), which hydrates process.env.GROK_API_KEY from ~/.grok/user-settings.json { apiKey } only when the env var is unset/empty
- Env var always wins; a missing (ENOENT), malformed, or empty-apiKey settings file is fail-soft (no throw, no env mutation), mirroring the grok-runtime probe's fallback behavior
- Add regression tests covering env-precedence, fallback hydration, and fail-soft error paths (grok-provider-user-settings.test.ts)
- Document the fallback in docs/settings-reference.md
- Add a patch changeset for @runfusion/fusion
Files changed:
.changeset/fn-7714-grok-user-settings-apikey.md | 7 +
docs/settings-reference.md | 2 +-
.../__tests__/grok-provider-user-settings.test.ts | 156 +++++++++++++++++++++
packages/core/src/grok-provider.ts | 47 +++++++
4 files changed, 211 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7714
Fusion-Task-Lineage: 5450b480-3a32-4331-9494-867b84605464
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
|
||
|
|
7dc271027f |
FN-7711: add built-in Grok CLI provider to fix pi model registry lookup
Registers a built-in grok-cli provider so Grok CLI model executions no longer hard-fail with "not found in the pi model registry". - Add packages/core/src/grok-provider.ts: built-in grok-cli provider config (xAI OpenAI-compatible endpoint https://api.x.ai/v1, api openai-completions, apiKey $GROK_API_KEY), mirroring the existing Z.ai provider - Register the provider in packages/engine/src/pi.ts (registerExtensionProviders) and packages/engine/src/provider-registration.ts (seedDashboardProviders) - Wire the provider into CLI entrypoints: packages/cli/src/commands/daemon.ts, dashboard.ts, serve.ts - Export grok-provider from packages/core/src/index.ts and packages/core/src/index.gate.ts - Add unit tests: packages/core/src/__tests__/grok-provider.test.ts, and extend packages/engine/src/__tests__/pi-create-fn-agent.test.ts and provider-registration.test.ts - Document the new provider in docs/settings-reference.md - Add changeset .changeset/fn-7711-grok-cli-model-registry.md (patch, category: fix) Note: Grok CLI binary remains discovery/probe only; GrokRuntimeAdapter streaming is a stub (tracked follow-up). Files changed: .changeset/fn-7711-grok-cli-model-registry.md | 7 + docs/settings-reference.md | 2 + packages/cli/src/commands/daemon.ts | 4 + packages/cli/src/commands/dashboard.ts | 4 + packages/cli/src/commands/serve.ts | 4 + packages/core/src/__tests__/grok-provider.test.ts | 130 ++++++++++++ packages/core/src/grok-provider.ts | 224 +++++++++++++++++++++ packages/core/src/index.gate.ts | 7 + packages/core/src/index.ts | 7 + .../src/__tests__/pi-create-fn-agent.test.ts | 78 ++++++- .../src/__tests__/provider-registration.test.ts | 4 +- packages/engine/src/pi.ts | 4 + packages/engine/src/provider-registration.ts | 4 + 13 files changed, 476 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-7711 Fusion-Task-Lineage: ae90b54f-206e-46fd-8365-b0a4488ceb84 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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>
|
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |