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
gsxdsm
f01e5c9651
FN-7247: document current workflow behavior
...
Refresh workflow documentation to match the latest runtime, dashboard, and agent tool behavior.
- Add a current workflow behavior inventory covering built-ins, fail-closed runtime semantics, optional gates, settings, tools, routing, and create forwarding.
- Clarify dashboard All workflows aggregation, workflow badges, and workflow-aware task creation behavior.
- Expand editor, agent, CLI, and settings docs for governed workflow authoring, values, trait inspection, and selection boundaries.
- Add docs drift tests requiring workflow docs index coverage and current behavior markers.
Files changed:
docs/agents.md | 5 +-
docs/cli-reference.md | 11 ++-
docs/dashboard-guide.md | 10 ++-
docs/settings-reference.md | 5 ++
docs/workflow-editor.md | 15 +++-
docs/workflow-steps.md | 48 ++++++++---
.../cli/src/__tests__/docs-readme-index.test.ts | 4 +
.../src/__tests__/workflow-docs-current.test.ts | 95 ++++++++++++++++++++++
8 files changed, 172 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-7247
Fusion-Task-Lineage: 72bf0c89-80a3-440c-b6aa-1aea315279f5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 19:46:23 -07:00
gsxdsm
03d4f95e8a
FN-7224: separate Anthropic subscription and API-key auth
...
Separate Claude subscription OAuth from raw Anthropic API-key authentication surfaces.
- Add synthetic Anthropic Subscription and Anthropic API Key provider IDs while preserving upstream credential storage compatibility.\n- Map dashboard auth routes, CLI auth storage, Settings, and onboarding flows so OAuth login/logout and API-key save/clear no longer share one user-facing card.\n- Extend auth tests, docs, icons, and the release changeset for the split Anthropic authentication behavior.\n\nFiles changed:\n .changeset/fn-7224-separate-anthropic-api-key.md | 7 +\n docs/dashboard-guide.md | 2 +-\n docs/settings-reference.md | 2 +-\n .../src/commands/__tests__/provider-auth.test.ts | 233 +++++++++++++++++++--\n packages/cli/src/commands/provider-auth.ts | 202 +++++++++++++++---\n packages/dashboard/app/api/legacy.ts | 2 -\n .../app/components/ModelOnboardingModal.tsx | 146 ++++---------\n packages/dashboard/app/components/ProviderIcon.tsx | 7 +\n .../__tests__/AuthenticationSection.test.tsx | 89 ++++----\n .../__tests__/SettingsModal.models-auth.test.tsx | 77 ++++---\n .../components/__tests__/onboarding-flow.test.tsx | 29 ++-\n .../components/__tests__/settings-mobile.test.tsx | 17 +-\n .../settings/sections/AuthenticationSection.tsx | 20 +-\n .../dashboard/src/__tests__/routes-auth.test.ts | 111 ++++++----\n .../dashboard/src/routes/register-auth-routes.ts | 93 +++++---\n 15 files changed, 713 insertions(+), 324 deletions(-)
Fusion-Task-Id: FN-7224
Fusion-Task-Lineage: a2db2cf6-3452-4516-81e5-41dcdf47e1d2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 18:32:36 -07:00
gsxdsm
72e50ac8c6
fix(artifacts): support task image artifact previews ( #1821 )
...
## Summary
Task image artifacts can now complete the full loop: agents and chat
flows can register base64 image bytes, and task details can display
those artifacts with an expandable preview instead of leaving them as
undiscoverable metadata.
This keeps binary payloads on the existing managed artifact storage
path, validates that base64 payloads are real non-empty image data, and
documents the new `dataBase64` field for engine-tool callers. The task
details artifacts gallery now treats image cards as expandable while
leaving document, audio, video, and generic artifact cards on their
existing behavior.
## Validation
- `pnpm --filter @fusion/dashboard exec vitest run
app/components/__tests__/TaskDocumentsTab.test.tsx
src/routes/__tests__/artifacts-route-integration.test.ts
--silent=passed-only --reporter=dot`
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/agent-artifact-tools.test.ts --silent=passed-only
--reporter=dot`
---
[](https://github.com/EveryInc/compound-engineering-plugin )

<!-- stage-review-badge-begin -->
---
<a href="https://stagereview.app/Runfusion/Fusion/pull/1821 ">
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://stagereview.app/assets/gh-open-in-stage-dark.svg ">
<img src="https://stagereview.app/assets/gh-open-in-stage-light.svg "
alt="Open in Stage">
</picture>
</a>
<!-- stage-review-badge-end -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added inline base64 (`dataBase64`) support for registering image
artifacts from agent tools, including task-scoped chat registration.
* Task details now allow expanding image media artifacts in a preview
lightbox with accessible keyboard interaction.
* **Bug Fixes**
* Improved verification for media streaming by validating raw binary
responses; added HTTP 200/404 coverage for image endpoints.
* **Documentation**
* Updated `fn_artifact_register` tool documentation to include the
optional `dataBase64` parameter.
* **Tests**
* Added coverage for base64 validation/error handling and lightbox
expand/close behavior (including Escape and Tab focus trapping).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-29 17:33:50 -07:00
Phil Larson
4c31441f58
fix: reset PR fixture git remote mock consistently
2026-06-29 17:18:59 -07:00
Phil Larson
6763584f64
fix: align dashboard PR fixture cwd mock
2026-06-29 17:17:35 -07:00
Phil Larson
bdd0a1cc2c
test(cli): stabilize dashboard pr repository fixtures
2026-06-29 17:17:35 -07:00
copilot-swe-agent[bot]
1bf8d83bc1
Merge remote-tracking branch 'origin/main' into fusion/fn-7143
2026-06-30 00:14:37 +00:00
gsxdsm
42226edde1
FN-7245: expose workflow authoring tools to agents
...
Expose workflow authoring and selection tools through agent-visible extension surfaces.
- Register workflow list/get/create/update/delete/settings/select and trait-list tools in the published pi extension.
- Export shared workflow tool schemas/factories and include workflow settings in centralized authoring tool sets.
- Update action-gate classifications, permission examples, docs, tests, and the changeset for the new agent workflow surface.
Files changed:
.changeset/FN-7245-workflow-tools.md | 7 +
docs/agents.md | 4 +-
docs/cli-reference.md | 17 ++
docs/workflow-steps.md | 9 +-
.../src/__tests__/extension-workflow-tools.test.ts | 244 +++++++++++++++++++++
packages/cli/src/__tests__/extension.test.ts | 8 +
packages/cli/src/extension.ts | 142 ++++++++++++
packages/core/src/types.ts | 6 +-
.../dashboard/src/__tests__/chat-manager.test.ts | 9 +-
.../planning-document-tools-exposure.test.ts | 19 +-
.../engine/src/__tests__/agent-action-gate.test.ts | 8 +
.../agent-workflow-tools-exposure.test.ts | 30 ++-
.../src/__tests__/gating-classifications.test.ts | 13 +-
.../src/__tests__/permanent-agent-gating.test.ts | 4 +-
packages/engine/src/agent-tools.ts | 13 +-
packages/engine/src/gating-classifications.ts | 6 +-
packages/engine/src/index.ts | 7 +
17 files changed, 506 insertions(+), 40 deletions(-)
Fusion-Task-Id: FN-7245
Fusion-Task-Lineage: 82501602-7177-4ee8-a67b-32de35aa73de
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 16:35:51 -07:00
gsxdsm
353aaf3b4a
fix(FN-7143): support task image artifacts
...
Fusion-Task-Id: FN-7143
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 09:47:59 -07:00
gsxdsm
013d50fe8b
FN-7206: add Anthropic API-key authentication
...
Add Anthropic API-key authentication alongside the existing OAuth flow.
- Expose Anthropic as a built-in API-key provider without hiding its OAuth controls.
- Render dual-auth Anthropic cards in Settings and model onboarding with key hints, save, and clear actions.
- Cover API status, CLI provider classification, desktop/mobile settings, and onboarding flows with tests and docs.
Files changed:
.changeset/fn-7206-anthropic-api-key.md | 7 +
docs/dashboard-guide.md | 2 +
docs/settings-reference.md | 4 +
.../src/commands/__tests__/provider-auth.test.ts | 51 ++++---
packages/cli/src/commands/provider-auth.ts | 10 +-
packages/dashboard/app/api/legacy.ts | 2 +
.../app/components/ModelOnboardingModal.tsx | 121 +++++++++++++++-
.../__tests__/AuthenticationSection.test.tsx | 141 +++++++++++++++++++
.../__tests__/SettingsModal.models-auth.test.tsx | 51 +++++++
.../__tests__/SettingsModal.test-harness.tsx | 2 +
.../components/__tests__/onboarding-flow.test.tsx | 28 ++++
.../components/__tests__/settings-mobile.test.tsx | 16 ++-
.../settings/sections/AuthenticationSection.tsx | 153 ++++++++++-----------
.../dashboard/src/__tests__/routes-auth.test.ts | 70 ++++++++++
.../dashboard/src/routes/register-auth-routes.ts | 17 ++-
15 files changed, 569 insertions(+), 106 deletions(-)
Fusion-Task-Id: FN-7206
Fusion-Task-Lineage: 3559b7ea-47c6-4f8c-9aa1-5318f47ce07e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-28 17:03:11 -07:00
gsxdsm
bc38f0c842
FN-7209: require JDK 21 for Android CI builds
...
Align Android Gradle build environments with Capacitor's Java 21 source compatibility.
- Update mobile, release, and test-release workflows to provision Temurin JDK 21.
- Document Java 21 as the required Android Gradle build JDK.
- Add CI workflow coverage that checks Android build jobs satisfy @capacitor/android sourceCompatibility.
Files changed:
.github/workflows/mobile.yml | 6 +-
.github/workflows/release.yml | 6 +-
.github/workflows/test-release.yml | 6 +-
MOBILE.md | 4 +-
packages/cli/src/__tests__/ci-workflow.test.ts | 99 +++++++++++++++++++++++++-
5 files changed, 112 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-7209
Fusion-Task-Lineage: d9e50bee-d7f8-4e87-b33e-136ffffc93af
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-28 16:56:35 -07:00
gsxdsm
8facc20eee
chore(release): v0.51.0
...
Version bump via changesets.
2026-06-28 12:49:55 -07:00
gsxdsm
2be00efc04
fix(cli): stop engine teardown logs repainting shell after TUI quit
...
Root cause of "the TUI keeps rendering after I get my terminal back": on
quit, dispose() called logSink.releaseConsole() (re-pointing console.* at
the real terminal) and then tui.stop() left the alt-screen and restored the
user's shell. Every log line from the slow engine/mesh/dev-server teardown
that followed then painted over the recovered prompt.
dispose() now calls a new logSink.silence() instead, which drops all sink
and console.* output from quit through process exit. Shutdown-step
diagnostics (timeShutdownStep + the watchdog stall line) are gated behind
FUSION_DEBUG_SHUTDOWN so a normal quit is pristine; the 3s hard-exit
watchdog still guarantees the process dies.
Adds a silence() regression guard to log-sink.test.ts asserting sink
methods and captured console.* both go silent across surfaces.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-28 10:56:38 -07:00
gsxdsm
524c15c2fd
FN-7188: prevent agents from pausing failed tasks
...
Clarify agent heartbeat and tool guidance so failures surface through recovery paths instead of task pauses.
- Update heartbeat prompts to prohibit failure/blocker handling via fn_task_pause.
- Clarify fn_task_pause tool copy as explicit user-requested manual control only.
- Refresh generated Fusion skill docs and add regression coverage for the guidance.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/FN-7188-no-pause-on-failure.md | 7 +++++++
packages/cli/skill/fusion/references/best-practices.md | 6 +++---
packages/cli/skill/fusion/references/extension-tools.md | 2 +-
packages/cli/skill/fusion/references/fusion-capabilities.md | 2 +-
packages/cli/skill/fusion/workflows/task-management.md | 2 +-
packages/cli/src/__tests__/extension.test.ts | 8 ++++++++
packages/cli/src/extension.ts | 10 ++++++++--
.../engine/src/__tests__/heartbeat-session-prompt.test.ts | 10 ++++++++++
packages/engine/src/agent-heartbeat.ts | 12 ++++++++++--
9 files changed, 49 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7188
Fusion-Task-Lineage: 29df6168-7920-49d5-9c11-804727033721
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-28 01:22:43 -07:00
gsxdsm
a95cfa7f92
FN-7160: unify live agent counts and fix use markers
...
Unifies running-agent slot accounting across engine, CLI, and dashboard surfaces.
- Add shared core helpers for identifying and counting active top-level agent tasks, including in-review reviewer, merger, fix, and PR merge states.
- Reuse the shared count in engine semaphore repair, project health displays, and dashboard project-store routes.
- Correct Command Center utilization markers to use a zero-based active/cap ratio.
- Cover the shared predicate and affected CLI, dashboard, and engine behaviors with regression tests.
Files changed:
.changeset/fn-7160-running-agent-count.md | 7 ++++
docs/dashboard-guide.md | 2 +-
.../cli/src/commands/__tests__/project.test.ts | 40 ++++++++++++++----
packages/cli/src/commands/project.ts | 15 +++----
.../core/src/__tests__/live-agent-count.test.ts | 47 ++++++++++++++++++++++
packages/core/src/index.ts | 2 +
packages/core/src/live-agent-count.ts | 30 ++++++++++++++
packages/core/src/types.ts | 2 +-
.../command-center/CommandCenterControls.tsx | 14 ++++---
.../__tests__/CommandCenterControls.test.tsx | 22 +++++++++-
.../dashboard/src/__tests__/project-routes.test.ts | 31 +++++++++-----
.../src/__tests__/project-store-resolver.test.ts | 20 ++++++---
packages/dashboard/src/project-store-resolver.ts | 9 ++---
.../src/routes/register-project-routes.ts | 7 ++--
packages/engine/src/__tests__/concurrency.test.ts | 18 +++++++++
packages/engine/src/concurrency.ts | 12 +++---
16 files changed, 220 insertions(+), 58 deletions(-)
Fusion-Task-Id: FN-7160
Fusion-Task-Lineage: f48332f8-ac5d-46eb-b975-d2f6c880ddd5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 21:39:40 -07:00
gsxdsm
729bd5e5f9
chore(release): v0.50.0
...
Version bump via changesets.
2026-06-27 18:10:19 -07:00
gsxdsm
aeafee75e5
test: remove dead post-await sleeps in skills install tests
...
runSkillsInstall already awaits the spawned child exit event, so the
fixed 100ms post-await sleeps were redundant wall-clock time (FN-5048).
Removes ~400ms of dead waits; assertions unchanged, 22 tests still pass.
2026-06-27 17:03:55 -07:00
gsxdsm
6f46fa17dd
FN-7138: show task column context in agent assignments
...
Agent Current Task output now includes linked task column context to distinguish active execution from parked or stale links.
- Add shared Current Task formatting for active, terminal, and unresolved task links.
- Show linked task columns in engine and CLI agent list/show surfaces.
- Cover parked, active, terminal, and missing task-link display cases with tests.
- Document the durable agent task-link invariant and release the CLI fix.
Files changed:
.changeset/fn-7138-agent-current-task-context.md | 7 ++++
docs/agents.md | 1 +
docs/architecture.md | 2 +-
packages/cli/src/__tests__/extension.test.ts | 44 ++++++++++++++++++++++
packages/cli/src/extension.ts | 35 +++++++++++++++--
packages/core/src/agent-store.ts | 30 +++++++++++++++
packages/core/src/index.ts | 2 +-
.../src/__tests__/agent-tools-delegation.test.ts | 44 +++++++++++++++++++++-
packages/engine/src/agent-tools.ts | 15 ++++++--
9 files changed, 169 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7138
Fusion-Task-Lineage: 0ea97b4c-d4f8-4289-a5b6-e5c51b47b768
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 16:16:25 -07:00
gsxdsm
63b44b819a
FN-7133: fix PR merge status repository lookup
...
Fix PR-mode auto-merge status checks to query GitHub with the project repository.
- Resolve the current project owner/repo once from the task cwd before PR status checks.
- Pass owner/repo/number to getPrMergeStatus for shared-group, task, and retry paths.
- Cover repository resolution and PR status argument behavior in lifecycle tests.
- Add a patch changeset for the published CLI fix.
Files changed:
.changeset/FN-7133-pr-merge-status-repo-args.md | 7 ++++
.../src/commands/__tests__/task-lifecycle.test.ts | 39 +++++++++++++++++++++-
packages/cli/src/commands/task-lifecycle.ts | 17 +++++++---
3 files changed, 58 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-7133
Fusion-Task-Lineage: 3f9bfd65-6950-40dc-9505-53140bd6a6a1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 13:28:47 -07:00
gsxdsm
7657cc6d84
feat(cli): instrument dashboard shutdown to pinpoint stalling teardown step
...
Each graceful-shutdown teardown step (dev servers, hybrid executor,
engine manager, peer exchange, mesh, central-core) now runs through
timeShutdownStep, which records the in-flight step name. A hang leaves
that name set, so the hard-exit watchdog reports the exact culprit on
stderr before force-exiting — no repro needed. Per-step timings print to
stderr under FUSION_DEBUG_SHUTDOWN=1; otherwise only steps slower than
1s are surfaced. Folds the per-step try/catch into the wrapper so a
throwing step logs and continues instead of stranding the process.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-27 13:24:57 -07:00
gsxdsm
661b6b8a47
fix(cli): guarantee TUI quit exits even if graceful shutdown stalls
...
Pressing q/Ctrl+C in the TUI routes through SIGINT so the dashboard's
graceful shutdown runs (kills dev-server process groups, engines, mesh,
central-core). That shutdown awaits several teardown steps with no
timeout, so a single hung step left process.exit(0) unreachable: the
process never exited and the still-alive dashboard kept writing output
onto the restored shell. The shutdownInProgress guard also swallowed
repeat signals, so mashing q could not escape.
Both shutdown() and devShutdown() now arm an unref'd 3s hard-exit
watchdog on the first signal and force an immediate process.exit(0) on a
second signal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-27 13:22:28 -07:00
gsxdsm
3d26d4e74b
FN-7127: standardize task show tool naming
...
Unify task-show references so planning, triage, docs, and telemetry use fn_task_show consistently.
- Replace legacy fn_task_get guidance and examples with fn_task_show across agent prompts, mission planning, triage, and docs.
- Keep fn_task_get as a deprecated read-only recognition alias for historical or in-flight calls.
- Update tests and changesets to cover the unified tool name and usage telemetry.
Files changed:
.changeset/FN-7118-shared-task-read-tools.md | 2 +-
.changeset/FN-7127-unify-task-show-tool-name.md | 7 ++++++
docs/cli-reference.md | 2 +-
docs/missions.md | 2 +-
.../cli/skill/fusion/references/engine-tools.md | 2 +-
packages/core/src/__tests__/usage-events.test.ts | 1 +
packages/core/src/agent-prompts.ts | 12 +++++-----
.../__tests__/milestone-slice-interview.test.ts | 2 +-
.../src/__tests__/mission-interview.test.ts | 2 +-
.../src/__tests__/planning-board-tools.test.ts | 6 ++---
.../dashboard/src/milestone-slice-interview.ts | 4 ++--
packages/dashboard/src/mission-interview.ts | 2 +-
packages/dashboard/src/planning-board-tools.ts | 10 +++++---
packages/dashboard/src/planning.ts | 2 +-
.../src/__tests__/agent-task-read-tools.test.ts | 28 +++++++++++++++-------
packages/engine/src/__tests__/triage.test.ts | 6 ++---
packages/engine/src/agent-tools.ts | 5 +++-
packages/engine/src/gating-classifications.ts | 8 +++++--
packages/engine/src/triage.ts | 12 ++++++----
19 files changed, 74 insertions(+), 41 deletions(-)
Fusion-Task-Id: FN-7127
Fusion-Task-Lineage: adf5a127-2741-4c88-97b3-aab239ab3960
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 12:25:53 -07:00
gsxdsm
5ab4a5961c
FN-7119: rescue quarantined engine and CLI tests
...
Restore quarantined scheduler/reliability coverage while preserving override column-agent model selection.
- remove rescued engine and CLI tests from quarantine configs and the ledger
- add scheduler fake updateSettings coverage so heartbeat writes do not skew call-count assertions
- preserve override column-agent runtime models during initial execution and mid-flight task edits
- update the stale user-configured command guard registry and add a patch changeset
Files changed:
.changeset/fn-7119-column-agent-model.md | 7 +++
docs/testing.md | 2 +
packages/cli/vitest.config.ts | 6 +-
.../executor-column-agent-principal.test.ts | 34 +++++++++-
.../lease-recovery-central-claim.test.ts | 5 ++
.../owning-node-unavailable-interactions.test.ts | 5 ++
.../todo-inprogress-flapping.test.ts | 5 ++
.../src/__tests__/restart.integration.test.ts | 8 +++
.../__tests__/scheduler-ephemeral-toggle.test.ts | 5 ++
.../scheduler-node-unreachable-audit.test.ts | 5 ++
.../__tests__/scheduler-overlap-starvation.test.ts | 5 ++
.../user-configured-command-no-execsync.test.ts | 12 +---
packages/engine/src/executor.ts | 18 ++++--
packages/engine/vitest.config.ts | 26 +++-----
scripts/lib/test-quarantine.json | 73 +---------------------
15 files changed, 106 insertions(+), 110 deletions(-)
Fusion-Task-Id: FN-7119
Fusion-Task-Lineage: 7dc033c8-29d1-4c0e-bfc1-b0ff0d325f43
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 10:50:33 -07:00
gsxdsm
9e2fb5d62c
FN-7102: count active triage planners in project health
...
Align project health in-flight readouts with live agent slot holders.\n\n- Count non-paused triage planning tasks alongside in-progress executors for dashboard health and CLI project displays.\n- Keep persisted projectHealth.inFlightAgentCount as bookkeeping while deriving user-facing counts from live task state.\n- Cover CLI and dashboard health routes for paused, inactive, and per-project triage planner cases.\n- Document the live count behavior and add a patch changeset.\n\nFiles changed:\n .changeset/fn-7102-health-triage-inflight.md | 7 +++\n docs/cli-reference.md | 2 +\n docs/multi-project.md | 4 +-\n .../cli/src/commands/__tests__/project.test.ts | 59 +++++++++++++++---\n packages/cli/src/commands/project.ts | 35 +++++++----\n packages/cli/src/project-resolver.ts | 17 ++++--\n packages/core/src/types.ts | 4 +-\n .../dashboard/src/__tests__/project-routes.test.ts | 71 ++++++++++++++++++----\n .../src/routes/register-project-routes.ts | 9 ++-\n 9 files changed, 163 insertions(+), 45 deletions(-)
Fusion-Task-Id: FN-7102
Fusion-Task-Lineage: ebcba74c-238d-4ca7-aa77-df0d329c0ea9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:30 -07:00
gsxdsm
8b22dd2ffe
FN-7090: link imported GitHub issues as tracked tasks
...
Link GitHub issue imports to existing source issues when tracking defaults are enabled.
- Resolve project/global GitHub tracking defaults before CLI, extension, and dashboard issue imports.
- Mark imported issue tasks as tracking-enabled so the post-create hook adopts the source issue instead of creating duplicates.
- Cover tracked and untracked import behavior across CLI tools, task commands, and dashboard GitHub routes.
- Document the import tracking behavior and add a minor changeset for the published CLI.
Files changed:
.changeset/fn-7090-import-github-tracked.md | 7 ++
docs/cli-reference.md | 2 +
docs/settings-reference.md | 2 +-
.../__tests__/extension-github-tracking.test.ts | 63 +++++++++++
packages/cli/src/__tests__/extension.test.ts | 125 ++++++++++++++++++++-
.../task-command-github-import-tracking.test.ts | 119 ++++++++++++++++++++
packages/cli/src/commands/__tests__/task.test.ts | 64 ++++++++++-
packages/cli/src/commands/task.ts | 30 ++++-
packages/cli/src/extension.ts | 27 +++++
.../dashboard/src/__tests__/routes-github.test.ts | 74 ++++++++++++
.../dashboard/src/routes/register-git-github.ts | 21 +++-
11 files changed, 524 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7090
Fusion-Task-Lineage: 1e5510c3-7a98-4ff2-a109-e465ff58b9c2
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:29 -07:00
gsxdsm
9020f5774e
test: quarantine 11 failing CI full-suite tests
...
Quarantine test files consistently failing on the non-blocking full-suite
CI on main, per the AGENTS.md deletion-ratchet policy:
Engine-default (shard 1-2): ce-workflow-step-conventions,
executor-column-agent-principal, restart.integration,
scheduler-node-unreachable-audit, scheduler-overlap-starvation,
scheduler-ephemeral-toggle, user-configured-command-no-execsync
Engine-reliability (shard 1): lease-recovery-central-claim,
owning-node-unavailable-interactions, todo-inprogress-flapping
CLI (shard 3): extension.test.ts
Each has a matching entry in scripts/lib/test-quarantine.json with the
failing CI run link and quarantinedAt date. Tests will be deleted
after 14 days unless rescued with a root-cause fix.
2026-06-26 21:49:32 -07:00
gsxdsm
5608bf555f
FN-7083: derive project in-flight counts from live tasks
...
Derive CLI project in-flight agent displays from live in-progress task counts instead of persisted health bookkeeping.
- Add shared CLI display health handling for project list and show output.
- Cover stale, missing, unreadable, table, and JSON project health cases in CLI tests.
- Clarify central health and concurrency fields as persisted bookkeeping in docs and types.
- Add a patch changeset for the published CLI behavior fix.
Files changed:
.changeset/fn-7083-cli-inflight-live-count.md | 7 +
docs/architecture.md | 1 +
docs/multi-project.md | 4 +-
.../cli/src/commands/__tests__/project.test.ts | 172 ++++++++++++++++++++-
packages/cli/src/commands/project.ts | 60 ++++---
packages/cli/src/project-resolver.ts | 4 +
packages/core/src/types.ts | 12 +-
7 files changed, 235 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-7083
Fusion-Task-Lineage: 2b57cb35-383f-443b-8bf3-3fc3c7a1ad43
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-26 18:35:54 -07:00
gsxdsm
ad3149093a
FN-7077: inject configured MCP servers across agent surfaces
...
Configured MCP servers now follow every agent-work lane that launches model-backed tools.
- Thread MCP server forwarding through chat, task execution, tools, PR response, cron, memory, research, and planning surfaces.
- Add regression coverage for dashboard and engine lanes that previously omitted MCP server configuration.
- Document all covered MCP surfaces and add a published package changeset.
Files changed:
.changeset/fn-7077-mcp-all-surfaces.md | 7 +
docs/mcp.md | 3 +
docs/settings-reference.md | 2 +-
packages/cli/src/commands/__tests__/serve.test.ts | 3 +-
packages/core/src/memory-compaction.ts | 4 +
.../src/__tests__/mcp-lane-forwarding.test.ts | 62 +++++++++
packages/dashboard/src/agent-generation.ts | 4 +
packages/dashboard/src/ai-refine.ts | 8 ++
.../dashboard/src/milestone-slice-interview.ts | 11 +-
packages/dashboard/src/mission-interview.ts | 9 +-
packages/dashboard/src/pr-conflict-resolver.ts | 12 +-
packages/dashboard/src/routes.ts | 10 ++
packages/dashboard/src/subtask-breakdown.ts | 8 ++
packages/engine/src/__tests__/cron-runner.test.ts | 61 +++++++++
.../src/__tests__/mcp-lane-forwarding.test.ts | 3 +-
.../__tests__/mcp-pr-response-forwarding.test.ts | 110 ++++++++++++++++
.../src/__tests__/mcp-surface-coverage.test.ts | 141 +++++++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 18 +++
packages/engine/src/cli-agent-ask.ts | 4 +
packages/engine/src/cron-runner.ts | 9 +-
packages/engine/src/pr-nodes.ts | 2 +-
packages/engine/src/pr-response-run-ops.ts | 10 +-
packages/engine/src/project-engine.ts | 2 +-
.../research/providers/llm-synthesis-provider.ts | 4 +
.../src/research/providers/web-search-provider.ts | 4 +
25 files changed, 497 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-7077
Fusion-Task-Lineage: 00d36357-c3d8-4954-b647-d3aea24a967b
2026-06-26 16:14:44 -07:00
gsxdsm
fa4ee607b7
chore(release): v0.49.0
...
Version bump via changesets.
2026-06-26 12:06:05 -07:00
gsxdsm
42f46a12c1
FN-7060: sanitize bundled plugin manifests
...
Sanitize published CLI plugin manifests so off-workspace installs do not resolve private workspace packages.
- Add manifest sanitization for copied bundled plugins and vendored pi extensions during the CLI build.
- Cover built plugin and extension package.json files with a pack-shape regression test.
- Update plugin authoring docs and add a patch changeset for the published CLI fix.
Files changed:
.../fn-7060-fix-plugin-manifest-workspace-deps.md | 7 ++
docs/PLUGIN_AUTHORING.md | 8 ++-
.../cli/src/__tests__/plugin-pack-shape.test.ts | 55 +++++++++++++-
packages/cli/tsup.config.ts | 83 ++++++++++++++++++++--
4 files changed, 142 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7060
Fusion-Task-Lineage: e38a4237-7197-4bc4-87bd-117dfd35a0f8
2026-06-26 10:18:04 -07:00
gsxdsm
3ee47dec86
merge: integrate origin/main into feature/workflow-steps (FN-7039)
...
Resolve conflicts from 56 upstream commits:
- db.ts: renumber my migrations around main's new migration 130 (columnDwellMs) —
enable-id normalization 130→131, drop-table 131→132, SCHEMA_VERSION→132.
- index.ts / routes.ts: take main's new MCP exports/imports; keep WORKFLOW_STEP_TEMPLATES
array removed (kept the WorkflowStepTemplate type).
- merger.ts: keep the legacy post-merge execution path removed (U7c) over main's version.
- ci-workflow.test.ts (from main): add port-4040/process-supervisor allowlist markers to
the gate-script assertions that reference the checker filenames (pre-existing self-match).
Gate green (engine-core 299, ci-shape 62); boot smoke PASS; migration tests + typecheck clean.
2026-06-26 08:50:22 -07:00
gsxdsm
7d13f880ba
FN-7059: pin merge gate composition
...
Add CI-shape coverage that guards the trusted merge gate composition.\n\n- Load root and engine package scripts plus the engine vitest config in the CI workflow test.\n- Assert test:gate includes the audited guard scripts, engine core suite, and CLI CI-shape suite.\n- Assert engine test:core continues targeting the engine-core vitest project.\n\nFiles changed:\n packages/cli/src/__tests__/ci-workflow.test.ts | 26 ++++++++++++++++++++++++++\n 1 file changed, 26 insertions(+)
Fusion-Task-Id: FN-7059
Fusion-Task-Lineage: 47af7fdd-a812-4d03-960a-a6300d86b59e
2026-06-26 06:47:27 -07:00
gsxdsm
429143ecf0
FN-7024: add MCP server management CLI
...
Add CLI support for managing MCP server configuration without exposing secret values.
- Add fn mcp list/add/edit/remove/enable/disable/import/export/validate subcommands.
- Store MCP env and header values as Fusion secret references, including Claude Desktop import conversion.
- Document MCP CLI usage and add command coverage for scoped configuration, import, export, and validation.
- Add a minor changeset for the published CLI feature.
Files changed:
.changeset/fn-7024-mcp-cli.md | 7 +
docs/cli-reference.md | 49 +++
packages/cli/src/bin.ts | 124 +++++++
packages/cli/src/commands/__tests__/mcp.test.ts | 182 ++++++++++
packages/cli/src/commands/mcp.ts | 455 ++++++++++++++++++++++++
5 files changed, 817 insertions(+)
Fusion-Task-Id: FN-7024
Fusion-Task-Lineage: e3d98bfa-b883-4b9e-86d5-f0416808d6f2
2026-06-25 23:34:07 -07:00
gsxdsm
4a4e389254
FN-7032: add signed Android release artifacts
...
Add secret-gated signed Android release packaging while preserving the unsigned fallback.
- Build signed Android release APK and AAB artifacts when keystore secrets are configured.
- Verify signed APKs, generate checksums for APK/AAB outputs, and include AABs in release aggregation.
- Document Android signing secrets, sideload verification, fallback artifacts, and Play upload scope.
- Cover the release and rehearsal workflow wiring with CLI and desktop workflow tests.
Files changed:
.github/workflows/release.yml | 94 ++++++++++++++++++----
.github/workflows/test-release.yml | 94 ++++++++++++++++++----
MOBILE.md | 18 ++++-
RELEASING.md | 34 ++++++--
packages/cli/src/__tests__/ci-workflow.test.ts | 24 ++++++
packages/desktop/README.md | 2 +-
.../desktop/src/__tests__/release-workflow.test.ts | 24 +++++-
7 files changed, 251 insertions(+), 39 deletions(-)
Fusion-Task-Id: FN-7032
Fusion-Task-Lineage: 0334c026-384e-4531-a2b2-f8a0b5bb7ff0
2026-06-25 20:20:33 -07:00
gsxdsm
dba65933e5
FN-7014: publish Android APK release artifacts
...
Adds Android APK generation to binary release and rehearsal workflows so GitHub releases ship mobile assets.
- Add Android build jobs that sync Capacitor, assemble the debug APK, and upload APK/checksum artifacts.
- Include Android artifacts in release and test-release collection dependencies and file matching.
- Document Android release outputs and extend workflow shape tests for the new asset path.
Files changed:
.github/workflows/release.yml | 86 +++++++++++++++++++++-
.github/workflows/test-release.yml | 85 ++++++++++++++++++++-
MOBILE.md | 2 +-
RELEASING.md | 10 ++-
packages/cli/src/__tests__/ci-workflow.test.ts | 6 +-
packages/desktop/README.md | 1 +
.../desktop/src/__tests__/release-workflow.test.ts | 24 +++++-
7 files changed, 201 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-7014
Fusion-Task-Lineage: 8ed94f64-399b-433f-add4-0294fc5722d1
2026-06-25 19:35:05 -07:00
gsxdsm
7b46d78c73
fix: align tests with recent source changes on main ( #1754 )
...
## Summary
Fixes 6 failing tests on `origin/main` caused by recent feature commits
that landed without updating dependent test assertions. No production
behavior is changed — every fix aligns a test (or build output) with an
intentional source change.
## Changes
| # | Test | Root Cause | Fix |
|---|------|-----------|-----|
| 1 | `packages/core` `test-project.test.ts` | Commit `800f845e1`
changed `DEFAULT_PROJECT_SETTINGS.taskPrefix` from `"FN"` to `undefined`
(prefix now derived from project name at runtime) | Updated assertion to
expect `undefined` |
| 2 | `packages/dashboard` `text-token-canonicalization.test.ts` |
`ScriptsModal.css` used banned `--text-primary` token | Replaced with
canonical `--text` token |
| 3 | `packages/cli` `package-config.test.ts` | Pi runtime deps bumped
from `^0.79.1` to `^0.79.9` | Updated expected version |
| 4 | `packages/cli` `skill-sync.test.ts` | 4 engine tools added but not
documented | Added to `engine-tools.md` |
| 5 | `packages/cli` `version.test.ts` | `release:version` script gained
`run-ci-distill.mjs` | Updated expected script |
| 6 | `packages/cli` `bundled-plugin-freshness.test.ts` | 3 plugins had
stale dist | Rebuilt via `pnpm build` |
## Verification
- `pnpm test:gate` passes (313 core + 58 ci-shape tests)
- `pnpm lint` clean
- All 6 previously-failing tests now pass individually
- Runtime invariant preserved: tasks in fresh projects still get
`FN-NNN` IDs (covered by existing test at `test-project.test.ts:89`)
<!-- stage-review-badge-begin -->
---
<a href="https://stagereview.app/Runfusion/Fusion/pull/1754 ">
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://stagereview.app/assets/gh-open-in-stage-dark.svg ">
<img src="https://stagereview.app/assets/gh-open-in-stage-light.svg "
alt="Open in Stage">
</picture>
</a>
<!-- stage-review-badge-end -->
2026-06-25 08:27:41 -07:00
gsxdsm
bc56ab287e
fix: align tests with recent source changes on main
...
Fix 6 failing tests caused by intentional source changes that landed
without updating dependent test assertions:
- Core test-project: taskPrefix default changed from "FN" to undefined
(commit 800f845e1 , derived from project name at runtime)
- Dashboard ScriptsModal.css: replace banned --text-primary with --text
- CLI package-config: update expected pi dep version ^0.79.1 -> ^0.79.9
- CLI skill-sync: document 4 new engine tools in engine-tools.md
- CLI version: update expected release:version script to include
run-ci-distill.mjs
- CLI bundled-plugin-freshness: rebuild stale dist directories
2026-06-25 00:13:29 -07:00
gsxdsm
079c428af9
chore(release): v0.48.0
...
Version bump via changesets.
2026-06-24 23:56:23 -07:00
gsxdsm
f9816799a0
FN-7000: test unified CLI merge entrypoints
...
Strengthen CLI merge tests around the unified runAiMerge path.\n\n- Mock runAiMerge separately from deprecated aiMergeTask in CLI task and dashboard tests.\n- Assert task merge uses runAiMerge without falling back to workspace landing or aiMergeTask.\n- Verify dashboard manual merge logging streams through runAiMerge and restores spies safely.\n\nFiles changed:\n .../cli/src/commands/__tests__/dashboard.test.ts | 51 +++++++++++++---------\n packages/cli/src/commands/__tests__/task.test.ts | 30 +++++++++----\n 2 files changed, 52 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-7000
Fusion-Task-Lineage: 96080841-c813-4a9e-97bd-a41aba60089f
2026-06-24 23:32:52 -07:00
gsxdsm
3ae053e744
FN-6976: keep planning JSON failures retryable
...
Persist malformed Planning Mode AI responses as retryable errors while improving JSON response selection.
- Preserve failed initial-turn planning sessions with actionable retry errors instead of deleting them.
- Prefer valid planning-shaped JSON candidates over unrelated embedded JSON blobs.
- Cover streaming, non-streaming, retry recovery, and AI merge test mock compatibility.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-6976-planning-json-recovery.md | 7 +
.../cli/src/commands/__tests__/dashboard.test.ts | 1 +
packages/cli/src/commands/__tests__/task.test.ts | 9 +-
.../src/__tests__/session-error-recovery.test.ts | 144 +++++++++++++++++++++
packages/dashboard/src/planning.ts | 123 ++++++++++--------
5 files changed, 229 insertions(+), 55 deletions(-)
Fusion-Task-Id: FN-6976
Fusion-Task-Lineage: e1cb59cb-1d7d-4aff-b17f-9633568f823f
2026-06-24 23:32:52 -07:00
gsxdsm
2ba81c25b4
chore(release): v0.47.0
...
Version bump via changesets.
2026-06-24 19:32:59 -07:00
gsxdsm
b680948d8c
Address PR review feedback ( #1746 )
...
- Fix race condition: add request ID guard for stale workspace detection responses
- Guard workspaceMode:true: only persist when repos.length > 0
- Add server-side taskPrefix validation (/^[A-Z]{1,5}$/)
- Move store.init() inside try/finally in both CLI TaskStore lifecycles
- Accept 1-character prefixes in CLI prompt (was requiring >= 2)
- Fix workspaceMode passing: forward false explicitly (was coerced to undefined)
- Fix 3rd KB→FN fallback in distributed-task-id.ts catch block
- Add try/finally to dashboard TaskStore in register-project-routes
- Gate workspace detection on existing-directory mode only (skip clone mode)
2026-06-24 14:24:07 -07:00
gsxdsm
46d0c4a1f6
Address PR review feedback round 3 ( #1741 )
...
- Align dashboard prefix validation to 1-5 chars (was 1-10) matching CLI cap
- Fix distributed-task-id.ts fallback from KB to FN (3 occurrences)
- Move taskPrefix/defaultWorkflowId persistence outside interactive-only block
so non-interactive CLI registration also gets defaults
- Wrap both TaskStore lifecycles in try/finally to guarantee close() on error
2026-06-24 14:08:32 -07:00
gsxdsm
b317a39d80
Cap interactive prefix input to 5 chars ( #1741 )
2026-06-24 11:39:40 -07:00
gsxdsm
06adc190ce
Add max-length cap (10) to interactive prefix input ( #1741 )
...
CodeRabbit: suggestTaskPrefix caps at 4 chars, but user input was uncapped.
Align with the dashboard validation regex (1-10 uppercase letters).
2026-06-24 11:34:38 -07:00
gsxdsm
aae76cecc3
Address PR review feedback ( #1741 )
...
- Close first TaskStore before creating second in interactive registration (P1)
- Revert defaultWorkflowId default to undefined; set explicitly in onboarding only (P1)
- Add alpha-only filter + 2-char min to interactive prefix input (P2)
- Move suggestTaskPrefix to @fusion/core, share between CLI and dashboard (P2)
- Fix suggestTaskPrefix JSDoc to match implementation (P2)
2026-06-24 10:45:21 -07:00
gsxdsm
800f845e15
feat(workspace): fix auto-detection, derive prefix from name, default coding workflow
...
- Fix workspace detection: change workspaceMode default from false to
undefined so isWorkspaceModeExplicitlyDisabled no longer blocks
auto-detection on fresh projects (config.json was being written with
workspaceMode:false during store.init(), causing the guard to skip
detection before it ever ran)
- Derive task prefix from project name (first 2-4 chars) instead of
hardcoded 'FN' as the suggested default
- Default workflow is now builtin:coding instead of undefined
- CLI registerProjectInteractive: onboarding prompt for task prefix
confirmation after project name
- Dashboard POST /api/projects: auto-derive prefix and set default
workflow for new registrations
2026-06-24 10:31:06 -07:00
gsxdsm
9aaf911735
feat(workspace): add per-project workspaceMode setting with interactive confirmation
...
Add workspaceMode as a first-class ProjectSettings boolean that controls
whether the project root is treated as a workspace parent (multi-repo)
or a single git repo.
- ProjectSettings type + DEFAULT_PROJECT_SETTINGS: workspaceMode?: boolean
- CLI registerProjectInteractive: when sub-repos are detected, ask the
user to confirm workspace mode instead of auto-applying
- TaskStore.updateSettings: when workspaceMode is toggled on, detect
sub-repos and persist workspace.json; when toggled off, remove it
- Dashboard SettingsModal GeneralSection: workspace mode toggle checkbox
This lets users change workspace mode per-project at any time via the
dashboard Settings or PUT /settings API.
2026-06-24 00:45:24 -07:00
gsxdsm
0dea25061d
Merge remote-tracking branch 'origin/main' into conflict-resolution-1717
...
# Conflicts:
# packages/engine/src/__tests__/executor-recovery.test.ts
# packages/engine/src/agent-tools.ts
# packages/engine/src/executor.ts
# packages/engine/src/merger-ai.ts
# packages/engine/src/project-engine.ts
# packages/engine/src/worktree-acquisition.ts
2026-06-23 16:12:10 -07:00