46b329fed91c8a05b5459d37703cdf95b6f9d275
114 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
a010dc42bf |
FN-9185: enforce effective task concurrency limits
Unify task concurrency around authoritative project settings and expose the effective admission ceiling. - Resolve maxConcurrent and maxWorktrees through a shared core capacity model with consistent defaults. - Apply the effective limit across scheduler, engine, runtime, CLI, API, and project-manager admission paths. - Surface configured and binding concurrency values in dashboard controls, status views, diagnostics, and documentation. - Add regression coverage for settings persistence, routing, scheduling, UI surfaces, and worktree-bound capacity. Files changed: .../fn-9185-max-concurrent-effective-limit.md | 7 + docs/architecture.md | 8 +- docs/cli-reference.md | 1 + docs/dashboard-guide.md | 4 + docs/settings-reference.md | 4 +- .../dashboard-concurrency-settings.test.ts | 166 +++++++++++++++++++++ packages/cli/src/commands/dashboard.ts | 28 ++-- packages/cli/src/commands/onboard.ts | 4 +- packages/cli/src/project-resolver.ts | 27 +++- .../concurrency-capacity-resolver.test.ts | 46 ++++++ .../src/__tests__/worktree-capacity-limit.test.ts | 51 +++++-- packages/core/src/index.gate.ts | 2 +- packages/core/src/index.ts | 2 +- packages/core/src/workflows/workflow-capacity.ts | 61 ++++++-- packages/dashboard/app/App.tsx | 2 + .../app/__tests__/concurrency-ui-surfaces.test.tsx | 155 +++++++++++++++++++ .../scheduling-effective-concurrency.test.tsx | 48 ++++++ packages/dashboard/app/api/projects/projects.ts | 10 +- packages/dashboard/app/api/settings/settings.ts | 14 +- packages/dashboard/app/components/Board.tsx | 7 +- packages/dashboard/app/components/Column.tsx | 13 +- .../dashboard/app/components/EngineControlMenu.tsx | 17 ++- .../command-center/CommandCenterControls.tsx | 17 ++- .../components/command-center/areas/TeamArea.tsx | 10 +- .../app/components/dashboard/MainContent.tsx | 3 + .../dashboard/app/components/dashboard/types.ts | 2 + .../settings/sections/SchedulingSection.tsx | 12 +- packages/dashboard/app/hooks/useAppSettings.ts | 9 +- packages/dashboard/app/hooks/useExecutorStats.ts | 10 +- .../app/utils/__tests__/worktreeGrouping.test.ts | 12 +- packages/dashboard/app/utils/worktreeGrouping.ts | 8 +- packages/dashboard/src/routes.ts | 6 +- ...concurrency-authoritative-source-routes.test.ts | 90 +++++++++++ .../register-config-mcp-pi-settings-routes.test.ts | 29 +++- .../register-config-mcp-pi-settings-routes.ts | 17 ++- .../src/routes/register-project-routes.ts | 14 +- .../concurrency-effective-limit-surfaces.test.ts | 34 +++++ .../src/__tests__/project-engine-manager.test.ts | 19 +++ .../__tests__/scheduler-workflow-cutover.test.ts | 6 +- packages/engine/src/concurrency/concurrency.ts | 23 ++- packages/engine/src/concurrency/hybrid-executor.ts | 35 ++++- .../engine/src/executor/create-spawn-agent-tool.ts | 8 +- packages/engine/src/project-engine-manager.ts | 50 +++++-- packages/engine/src/project-engine.ts | 12 +- packages/engine/src/project/project-manager.ts | 26 +++- packages/engine/src/runtimes/in-process-runtime.ts | 12 +- packages/engine/src/scheduler.ts | 31 ++-- packages/engine/src/triage.ts | 15 +- 48 files changed, 1028 insertions(+), 159 deletions(-) Fusion-Task-Id: FN-9185 Fusion-Task-Lineage: 6294456c-d417-40a5-a5fa-2035c6b964a6 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
74dacd0758 |
FN-9188: respect externally managed updates
Managed deployments can now suppress self-update offers while unsupported installs receive actionable guidance. - Add an install-level environment policy for externally managed updates across CLI, server, and dashboard surfaces. - Detect missing npm shell failures and replace raw stderr with deployment-aware remediation. - Document managed-update behavior and add regression coverage for checks, installs, automation, and UI actions. Files changed: .changeset/fn-9188-managed-updates.md | 7 +++ docs/architecture.md | 6 +-- docs/cli-reference.md | 2 +- docs/dashboard-guide.md | 2 +- docs/settings-reference.md | 4 +- packages/cli/src/__tests__/update-cache.test.ts | 11 ++++- .../update-command-externally-managed.test.ts | 39 +++++++++++++++ packages/cli/src/commands/update.ts | 42 +++++++++++----- packages/cli/src/update-cache.ts | 3 +- .../core/src/__tests__/update-management.test.ts | 15 ++++++ packages/core/src/config/update-management.ts | 21 ++++++++ packages/core/src/index.gate.ts | 5 ++ packages/core/src/index.ts | 5 ++ packages/dashboard/app/api/client/health.ts | 3 ++ .../dashboard/app/components/SettingsModal.tsx | 4 ++ .../__tests__/SettingsModal.general.test.tsx | 20 ++++++++ .../__tests__/UpdateAvailableBanner.test.tsx | 26 ++++++++++ .../components/__tests__/settings-mobile.test.tsx | 24 +++++++++- .../__tests__/SystemControlsArea.test.tsx | 20 ++++++++ .../command-center/areas/SystemControlsArea.tsx | 6 +++ .../app/hooks/__tests__/useUpdateCheck.test.ts | 1 + packages/dashboard/app/hooks/useUpdateCheck.ts | 3 +- .../dashboard/src/__tests__/auto-update.test.ts | 10 ++++ .../dashboard/src/__tests__/update-check.test.ts | 56 ++++++++++++++++++++++ packages/dashboard/src/auto-update.ts | 9 +++- .../__tests__/register-update-check-routes.test.ts | 24 +++++++++- .../src/routes/register-update-check-routes.ts | 47 +++++++++++++++++- packages/dashboard/src/update-check.ts | 50 ++++++++++++++++--- 28 files changed, 433 insertions(+), 32 deletions(-) Fusion-Task-Id: FN-9188 Fusion-Task-Lineage: 60b114b9-8bf7-434f-9d26-0c954aea45ba Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
29f4de39c4 |
FN-038: prepare projects for Git during onboarding
Make project initialization and registration produce Git-ready projects consistently.\n\n- Centralize repository readiness and initialization behavior.\n- Update CLI onboarding and dashboard registration flows to use the Git-ready setup.\n- Add regression coverage and document the new project preparation behavior.\n\nFiles changed:\n .changeset/fn-038-git-ready-projects.md | 7 +\n docs/cli-reference.md | 11 +-\n docs/getting-started.md | 17 +-\n docs/workspaces.md | 4 +-\n packages/cli/src/commands/__tests__/init.test.ts | 39 ++--\n packages/cli/src/commands/init.ts | 115 ++--------\n packages/core/src/__tests__/git-repository.test.ts | 125 +++++++++-\n packages/core/src/central/central-core.ts | 57 +++--\n packages/core/src/git/git-repository.ts | 254 +++++++++++++++++----\n packages/dashboard/app/api/projects/projects.ts | 2 -\n packages/dashboard/app/components/SetupWizardModal.tsx | 46 +---\n packages/dashboard/app/components/__tests__/SetupWizardModal.git-missing.test.tsx | 74 +++---\n packages/dashboard/src/routes/__tests__/register-project-git-readiness.test.ts | 165 +++++++++++++\n packages/dashboard/src/routes/register-project-routes.ts | 11 -\n 14 files changed, 647 insertions(+), 280 deletions(-) Fusion-Task-Id: FN-038 Fusion-Task-Lineage: 83634184-569b-4190-a88f-4a09eb832e9d Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
7ded57e550 |
FN-9167: clear interrupted manual merge status
Prevent interrupted manual merges from leaving tasks stranded in a transient merging state. - track locally owned merge stamps and clear them through fenced abort cleanup - handle SIGINT, SIGTERM, and SIGHUP for foreground task merges with documented exit behavior - reconcile only age-proven orphan stamps before manual CLI and UI-only dashboard merges - cover merge stamp authorization, signal cleanup, and mock completeness with regression tests - add a patch changeset and operator documentation Files changed: .../fn-9167-interrupted-manual-merge-stamp.md | 7 + docs/cli-reference.md | 1 + docs/task-management.md | 2 +- .../task-command-github-import-tracking.test.ts | 3 + packages/cli/src/commands/__tests__/task.test.ts | 179 +++++- packages/cli/src/commands/dashboard.ts | 3 + packages/cli/src/commands/task.ts | 138 +++-- .../merge-orphan-durable-write-inventory.json | 608 +++++++++++---------- .../src/__tests__/merge-active-status.test.ts | 49 ++ packages/engine/src/index.ts | 2 + .../engine/src/merge/clear-orphaned-merge-stamp.ts | 80 +++ packages/engine/src/merge/merger-ai.ts | 12 + packages/engine/src/project-engine.ts | 20 +- 13 files changed, 735 insertions(+), 369 deletions(-) Fusion-Task-Id: FN-9167 Fusion-Task-Lineage: 554380e2-ce55-4e7a-89fd-f5c24341937b Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
c7779e44ac |
FN-9055: guard archive disposal of live workspace worktrees
Prevent archive cleanup from removing worktrees that still belong to live tasks. - Add shared archive liveness evaluation and transactional refusal guards. - Require CLI and extension archive operations to refuse live tasks unless a human uses --force. - Protect baseline archive worktree disposal and cover CLI, core, and engine paths with tests. Files changed: .changeset/fn-9055-archive-live-worktree-guard.md | 7 ++ docs/cli-reference.md | 4 +- docs/task-management.md | 4 +- .../extension-task-archive-live-guard.test.ts | 82 +++++++++++++++++++ packages/cli/src/bin.ts | 6 +- packages/cli/src/commands/__tests__/task.test.ts | 66 ++++++++++++++- packages/cli/src/commands/task.ts | 49 +++++++++--- packages/cli/src/extension.ts | 25 ++++-- .../src/__tests__/archive-live-task-guard.test.ts | 70 ++++++++++++++++ .../postgres/archive-live-task-fence.pg.test.ts | 69 ++++++++++++++++ .../src/__tests__/task-archive-liveness.test.ts | 19 +++++ packages/core/src/index.ts | 10 +++ packages/core/src/store.ts | 4 +- .../core/src/task-store/archive-lifecycle-2.ts | 27 +++++-- packages/core/src/task-store/archive-lifecycle.ts | 20 ++--- .../src/task-store/async/async-archive-lineage.ts | 17 +++- packages/core/src/tasks/task-archive-liveness.ts | 56 +++++++++++++ ...chive-baseline-disposer-live-task-guard.test.ts | 93 ++++++++++++++++++++++ .../healing/archive-worktree-disposer-install.ts | 15 +++- 19 files changed, 592 insertions(+), 51 deletions(-) Fusion-Task-Id: FN-9055 Fusion-Task-Lineage: 08644626-cc61-4854-abb9-5b415ddc9491 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
52a28d39ff |
feat: add per-task GitHub tracking overrides to task create (fn_task_create + CLI)
fn_task_create gains github_tracking/github_repo params and fn task create gains --github/--no-github/--github-repo flags, resolved through resolveTaskGithubTracking (task > project > global). CLI create now also honors the project/global tracking-enabled default it previously ignored; explicit disables persist enabled:false so later default flips cannot re-enable a task. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
7673f2e839 |
FN-9031: enforce snapshot consumption after computer actions
Computer-use actions now consume the captured app snapshot and require a fresh state capture before another element-targeted action. - Add app-scoped, serialized snapshot-pointer consumption with stale-state diagnostics. - Mark successful action results as consuming their snapshot and cover action/replay behavior. - Document the enforced snapshot → act → snapshot loop and add a CLI changeset. Files changed: .../fn-9031-computer-use-snapshot-consumption.md | 7 ++ docs/cli-reference.md | 2 +- docs/computer-use.md | 11 +-- .../commands/__tests__/computer-commands.test.ts | 88 ++++++++++++++++++++-- .../commands/__tests__/computer-contract.test.ts | 7 +- .../__tests__/computer-snapshot-index.test.ts | 52 ++++++++++++- .../commands/__tests__/computer-use-guide.test.ts | 4 + packages/cli/src/commands/computer.ts | 37 ++++++--- .../cli/src/commands/computer/adapter-macos.ts | 4 +- packages/cli/src/commands/computer/contract.ts | 17 ++++- packages/cli/src/commands/computer/guide.ts | 4 +- .../cli/src/commands/computer/snapshot-store.ts | 79 +++++++++++++++++-- 12 files changed, 272 insertions(+), 40 deletions(-) Fusion-Task-Id: FN-9031 Fusion-Task-Lineage: f196b7ca-ce3f-4a50-98d2-d6ac8bf184ac Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
eacd6687bc |
FN-8961: add computer-use skill and version-matched guide
Ship the computer-use skill across bundled clients and surface its matching guide through the CLI. - add the computer-use skill, computer command descriptor, and `fn skills get computer-use` guide - reconcile all shipped Claude skills at project and startup entry points - cover both skills' reconciliation outcomes and every required call site Files changed: .changeset/fn-8961-computer-use-skill.md | 7 + docs/cli-reference.md | 6 +- docs/computer-use.md | 8 + packages/cli/skill/computer-use/SKILL.md | 31 +++ packages/cli/src/__tests__/package-config.test.ts | 20 ++ packages/cli/src/bin.ts | 14 +- .../__tests__/claude-skills-callsites.test.ts | 64 ++++++ .../src/commands/__tests__/claude-skills.test.ts | 221 ++++++++------------- .../__tests__/computer-surface-descriptor.test.ts | 108 ++++++++++ .../commands/__tests__/computer-use-guide.test.ts | 36 ++++ .../commands/__tests__/computer-use-skill.test.ts | 20 ++ packages/cli/src/commands/__tests__/daemon.test.ts | 36 +++- .../__tests__/dashboard-claude-skills.test.ts | 19 ++ packages/cli/src/commands/__tests__/init.test.ts | 48 ++++- .../cli/src/commands/__tests__/project.test.ts | 38 ++++ packages/cli/src/commands/__tests__/serve.test.ts | 36 +++- .../commands/__tests__/skill-installation.test.ts | 12 ++ .../cli/src/commands/__tests__/skills-get.test.ts | 67 ++++++ packages/cli/src/commands/claude-skills-runner.ts | 55 ++--- packages/cli/src/commands/claude-skills.ts | 47 +++-- packages/cli/src/commands/computer.ts | 6 +- packages/cli/src/commands/computer/contract.ts | 52 +++++ packages/cli/src/commands/computer/guide.ts | 62 ++++++ packages/cli/src/commands/init.ts | 4 +- packages/cli/src/commands/skill-installation.ts | 45 +++-- packages/cli/src/commands/skills.ts | 24 +++ 26 files changed, 853 insertions(+), 233 deletions(-) Fusion-Task-Id: FN-8961 Fusion-Task-Lineage: b6baaebb-bf72-4991-8239-eb9bcf9cbcf1 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
1da61f35f7 |
FN-8960: add macOS computer automation CLI
Add a snapshot-backed macOS computer-use surface to the Fusion CLI. - Register fn computer commands for app state, permission, capability, and UI actions. - Implement macOS JXA automation with locator replay and persisted snapshot safety checks. - Document the CLI surface, add contract coverage, and include a release changeset. Files changed: .changeset/fn-8960-computer-use-cli.md | 7 + docs/README.md | 1 + docs/cli-reference.md | 21 ++ docs/computer-use.md | 156 +++++++++++++ packages/cli/src/bin.ts | 11 + .../__tests__/computer-adapter-registry.test.ts | 154 ++++++++++++ .../commands/__tests__/computer-commands.test.ts | 71 ++++++ .../commands/__tests__/computer-contract.test.ts | 34 +++ .../__tests__/computer-snapshot-index.test.ts | 87 +++++++ packages/cli/src/commands/computer.ts | 182 +++++++++++++++ .../cli/src/commands/computer/adapter-macos.ts | 211 +++++++++++++++++ .../cli/src/commands/computer/adapter-registry.ts | 42 ++++ .../src/commands/computer/adapter-unsupported.ts | 44 ++++ packages/cli/src/commands/computer/adapter.ts | 97 ++++++++ packages/cli/src/commands/computer/contract.ts | 83 +++++++ packages/cli/src/commands/computer/exec-seam.ts | 61 +++++ .../cli/src/commands/computer/scripts/macos-jxa.ts | 37 +++ .../cli/src/commands/computer/snapshot-store.ts | 257 +++++++++++++++++++++ 18 files changed, 1556 insertions(+) Fusion-Task-Id: FN-8960 Fusion-Task-Lineage: 5870bf69-b751-4879-bf9d-5f5396cc0f55 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
a839c61929 |
FN-8926: expose graph and recall through MCP
Expose Fusion knowledge graph and durable recall through a built-in MCP transport. - Add the reserved fusion-memory server with graph and recall MCP tools. - Resolve built-in availability and enable/disable tombstones across configuration and UI. - Add CLI transport, documentation, release metadata, and lane coverage tests. Files changed: .changeset/fn-8926-memory-mcp-server.md | 7 + docs/cli-reference.md | 4 + docs/mcp.md | 10 ++ packages/cli/src/bin.ts | 6 + .../__tests__/mcp-memory-server-spawn.test.ts | 79 ++++++++++ .../commands/__tests__/mcp-memory-server.test.ts | 83 +++++++++++ packages/cli/src/commands/__tests__/mcp.test.ts | 27 +++- packages/cli/src/commands/mcp-memory-server.ts | 104 +++++++++++++ packages/cli/src/commands/mcp.ts | 64 ++++++-- packages/core/package.json | 10 ++ .../core/src/__tests__/mcp-builtin-servers.test.ts | 17 +++ packages/core/src/__tests__/mcp-config.test.ts | 12 ++ packages/core/src/config/mcp-builtin-descriptor.ts | 16 ++ packages/core/src/config/mcp-builtin-servers.ts | 18 +++ packages/core/src/config/mcp-config.ts | 40 +++-- packages/core/src/config/mcp-discovery.ts | 3 +- packages/core/src/index.ts | 6 + packages/core/src/memory/index.ts | 1 + .../mcp/__tests__/memory-mcp-handler.test.ts | 36 +++++ .../mcp/__tests__/memory-mcp-serialization.test.ts | 23 +++ packages/core/src/memory/mcp/index.ts | 4 + .../core/src/memory/mcp/memory-mcp-backends.ts | 39 +++++ packages/core/src/memory/mcp/memory-mcp-handler.ts | 54 +++++++ .../src/memory/mcp/memory-mcp-serialization.ts | 48 ++++++ packages/core/src/memory/mcp/memory-mcp-tools.ts | 64 ++++++++ packages/core/src/types.ts | 10 ++ .../settings/sections/GlobalMcpSection.tsx | 14 +- .../settings/sections/McpServersCard.tsx | 67 +++++++-- .../settings/sections/ProjectMcpSection.tsx | 15 +- .../__tests__/McpServersCard.builtin.test.tsx | 45 ++++++ .../dashboard/src/__tests__/chat-manager.test.ts | 24 +++ .../register-config-mcp-pi-settings-routes.ts | 20 ++- packages/dashboard/vitest.config.ts | 2 + .../__tests__/mcp-builtin-lane-coverage.test.ts | 163 +++++++++++++++++++++ packages/engine/src/mcp/mcp-resolution.ts | 10 +- packages/engine/vitest.config.ts | 2 + 36 files changed, 1097 insertions(+), 50 deletions(-) Fusion-Task-Id: FN-8926 Fusion-Task-Lineage: b2861491-33da-4b05-b9f8-a7c1448c1c8c Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
27cb2d2621 |
FN-8921: add deterministic knowledge graph tooling
Add a committable, provenance-tagged knowledge graph layer with CLI generation and query support. - Extract TypeScript, Markdown, and FNXC knowledge into deterministic graph nodes and edges. - Persist recoverable graph artifacts outside ignored Fusion state and expose build/query CLI commands. - Document configuration and add core and CLI coverage for graph structure, serialization, and recovery. Files changed: .changeset/fn-8921-knowledge-graph.md | 7 + .gitattributes | 3 + AGENTS.md | 1 + docs/README.md | 2 + docs/cli-reference.md | 4 + docs/knowledge-graph.md | 37 +++++ docs/settings-reference.md | 4 + docs/storage.md | 2 + packages/cli/package.json | 3 +- .../__tests__/knowledge-graph-bundle-shape.test.ts | 4 + .../src/__tests__/knowledge-graph-command.test.ts | 115 ++++++++++++++ packages/cli/src/bin.ts | 19 +++ packages/cli/src/commands/knowledge-graph.ts | 79 ++++++++++ packages/cli/tsup.config.ts | 2 + packages/core/package.json | 4 +- packages/core/src/config/settings-schema.ts | 2 + packages/core/src/index.ts | 1 + .../__tests__/derive-modules.test.ts | 11 ++ .../__tests__/extract-file-composition.test.ts | 20 +++ .../knowledge-graph/__tests__/extract-fnxc.test.ts | 33 ++++ .../__tests__/extract-markdown.test.ts | 21 +++ .../__tests__/extract-typescript.test.ts | 30 ++++ .../__tests__/file-discovery.test.ts | 26 ++++ .../graph-artifact-not-gitignored.test.ts | 15 ++ .../__tests__/graph-builder-equivalence.test.ts | 76 ++++++++++ .../__tests__/graph-builder-incremental.test.ts | 52 +++++++ .../__tests__/graph-identity.test.ts | 11 ++ .../knowledge-graph/__tests__/graph-query.test.ts | 13 ++ .../__tests__/graph-serialization.test.ts | 29 ++++ .../__tests__/graph-store-recovery.test.ts | 106 +++++++++++++ .../__tests__/resolve-imports.test.ts | 10 ++ .../core/src/knowledge-graph/derive-modules.ts | 4 + packages/core/src/knowledge-graph/extract-file.ts | 6 + packages/core/src/knowledge-graph/extract-fnxc.ts | 168 +++++++++++++++++++++ .../core/src/knowledge-graph/extract-markdown.ts | 9 ++ .../core/src/knowledge-graph/extract-typescript.ts | 107 +++++++++++++ .../core/src/knowledge-graph/file-discovery.ts | 85 +++++++++++ packages/core/src/knowledge-graph/graph-builder.ts | 141 +++++++++++++++++ .../core/src/knowledge-graph/graph-manifest.ts | 4 + packages/core/src/knowledge-graph/graph-query.ts | 126 ++++++++++++++++ .../src/knowledge-graph/graph-serialization.ts | 134 ++++++++++++++++ packages/core/src/knowledge-graph/graph-store.ts | 97 ++++++++++++ packages/core/src/knowledge-graph/graph-types.ts | 54 +++++++ packages/core/src/knowledge-graph/index.ts | 14 ++ .../core/src/knowledge-graph/resolve-imports.ts | 4 + packages/core/src/types/settings/settings-scope.ts | 2 + pnpm-lock.yaml | 12 +- 47 files changed, 1700 insertions(+), 9 deletions(-) Fusion-Task-Id: FN-8921 Fusion-Task-Lineage: 7014d0f1-fc47-454b-afe5-5f0d9b229f33 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
a09e0cb87f |
feat(i18n): add Português (Brasil) (pt-BR) locale (#3347)
## Summary Adds **Português (Brasil)** (`pt-BR`) as a supported locale: - Selectable as **Translation target language** (project settings) and as the dashboard / terminal UI language. - Full machine-drafted catalogs (`app`, `cli`, `common`), disclosed in `packages/i18n/locales/TRANSLATION_STATUS.md` following the pattern #1352 established — reviewed for glossary/register consistency (0.18% untranslated, matching only keys that are empty in `en`), but native-speaker corrections are welcome. - Brazilian Portuguese content-language detection (accent-stripped stopword list — the scorer strips diacritics before matching, so accented entries never match; `com`/`mais` deliberately omitted to avoid bare-domain `.com` and French collisions, with regression tests for both directions). - `pt`/`pt-PT` browser and environment locales resolve to `pt-BR` on all three detection paths (`FALLBACK_LNG` routing plus a `pt` branch in `normalizeToSupportedLocale`, mirroring the existing `zh` handling). - `README.pt-BR.md` + switcher links in all READMEs, docs updates (`settings-reference`, `cli-reference`, `i18n-contributing`, `--lang` help text), changeset (`minor`). Drive-by fixes bundled: `TRANSLATION_STATUS.md` was missing the `ko` row; the LanguageSelector endonym test was missing `한국어`; `docs/i18n-contributing.md` now names the two compile-enforced display maps (`LOCALE_LABELS`, `localeDisplayName`) a new locale must update; the `--lang` CLI help text no longer drifts from its validator. ## Test plan - `pnpm i18n:status` (key parity gate) green; catalogs are `i18n:sync`-idempotent. - Updated/extended suites: core `locale-settings`, i18n `config`/`parity`/`db-banner-catalog`/`i18n-gate-coverage`, dashboard `useLanguage`/`LanguageSelector`/`GeneralSection.importTranslate`/`detectContentLanguage` (incl. new pt-BR detection + bare-domain regression tests), CLI `settings`. - `pnpm verify:fast` (typecheck, build, boot smoke), `pnpm lint`, `pnpm check:changesets`, and the bounded `pnpm test` lane all green locally (the three `test:pg-gate` files fail locally only for lack of a Postgres instance; they fail identically on clean `main`). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added Brazilian Portuguese (Português (Brasil)) across the dashboard, terminal interface, settings, and translation tools. * Added Portuguese translations for common interface and CLI content. * Added automatic Portuguese language detection, locale normalization, and fallback support. * Added a Portuguese (Brazil) README with product, setup, and usage documentation. * **Documentation** * Updated language selectors, CLI references, settings documentation, and translation guidance. * Added Portuguese README links to translated documentation. * Added French to the documented dashboard language options. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com> |
||
|
|
eaadd153b1 |
FN-8764: route workflow stages through durable role agents
Route workflow stages through task-scoped durable role agents. - Persist normalized multi-role agents and workflow principal fences with migrations. - Route planning, execution, review, and merge workflow nodes through authorized permanent principals with capacity leasing and recovery. - Retire ephemeral workflow-stage workers and expose role-aware agent configuration, workflow editing, and documentation. - Preserve lifecycle-column ratchet coverage by centralizing workflow-role classification rather than adding test exemptions. Files changed: .changeset/fn-8764-workflow-role-agents.md | 7 + CONCEPTS.md | 3 + docs/agents.md | 6 + docs/architecture.md | 6 + docs/cli-reference.md | 2 + docs/dashboard-guide.md | 4 + docs/settings-reference.md | 6 +- docs/storage.md | 2 + docs/workflow-steps.md | 6 + .../src/__tests__/extension-agent-update.test.ts | 11 +- packages/cli/src/__tests__/extension.test.ts | 18 +- packages/cli/src/extension.ts | 41 +- .../core/src/__tests__/agent-permissions.test.ts | 12 + .../core/src/__tests__/agent-role-policy.test.ts | 7 + packages/core/src/__tests__/agent-roles.test.ts | 21 + .../legacy-column-collection-gating-ledger.test.ts | 19 +- .../src/__tests__/postgres/schema-applier.test.ts | 16 +- .../core/src/__tests__/settings-parity.test.ts | 9 +- .../workflow-agent-node-classification.test.ts | 25 + .../src/__tests__/workflow-work-item-cas.test.ts | 38 ++ packages/core/src/agents/agent-permissions.ts | 11 +- packages/core/src/agents/agent-role-policy.ts | 39 +- packages/core/src/agents/agent-store.ts | 190 ++++++- .../core/src/async-stores/async-agent-store.ts | 6 + packages/core/src/config/settings-schema.ts | 5 +- packages/core/src/index.gate.ts | 2 +- packages/core/src/index.ts | 7 +- .../0045_fn_8764_multi_role_workflow_agents.sql | 20 + .../0046_fn_8764_workflow_principal_fence.sql | 49 ++ packages/core/src/postgres/schema-applier.ts | 22 +- packages/core/src/postgres/schema/project.ts | 21 + packages/core/src/store.ts | 2 +- .../task-store/async/async-workflow-workitems.ts | 49 +- packages/core/src/task-store/row-types.ts | 4 + packages/core/src/task-store/settings-helpers.ts | 16 +- packages/core/src/task-store/settings-ops-2.ts | 13 +- packages/core/src/task-store/settings-ops.ts | 16 +- packages/core/src/task-store/task-row-mappers.ts | 4 + .../src/task-store/workflow-task-create-ops.ts | 6 +- .../src/task-store/workflow-workitems-ops-2.ts | 25 +- packages/core/src/types.ts | 2 + packages/core/src/types/agents/agents.ts | 45 +- packages/core/src/types/merge/merge-queue.ts | 17 + packages/core/src/types/settings/settings-scope.ts | 9 +- packages/core/src/workflows/workflow-ir-types.ts | 58 +++ packages/core/src/workflows/workflow-ir.ts | 19 + .../dashboard/app/components/AgentDetailView.css | 14 + .../dashboard/app/components/AgentDetailView.tsx | 34 +- .../dashboard/app/components/NewAgentDialog.tsx | 28 +- .../app/components/WorkflowNodeEditor.tsx | 19 + .../__tests__/AgentDetailView.core.test.tsx | 4 +- .../app/components/__tests__/AgentsView.test.tsx | 2 +- .../__tests__/SettingsModal.general.test.tsx | 86 --- .../__tests__/SettingsModal.test-harness.tsx | 1 - .../components/agent-presets/agentCreatePayload.ts | 9 +- .../app/components/settings/section-keys.ts | 1 - .../settings/sections/GeneralSection.tsx | 8 - .../settings-default-descriptions.test.tsx | 1 - .../app/components/workflow-flow-mapping.ts | 7 + packages/dashboard/src/mission-routes.ts | 26 +- .../src/routes/__tests__/agent-core-routes.test.ts | 23 +- .../src/routes/register-agent-core-routes.ts | 42 +- ...gister-agent-import-export-generation-routes.ts | 21 - .../engine/src/__tests__/agent-action-gate.test.ts | 33 ++ .../engine/src/__tests__/agent-assignment.test.ts | 370 ------------- .../src/__tests__/ephemeral-worker-manager.test.ts | 575 --------------------- ...ecutor-ephemeral-disabled-dispatch-gate.test.ts | 223 -------- .../__tests__/executor-fast-mode-workflows.test.ts | 58 +++ .../engine/src/__tests__/log-severity-manifest.ts | 1 - .../__tests__/log-severity-spam-contract.test.ts | 3 - .../resolved-read-with-literal-filter.test.ts | 4 - .../__tests__/scheduler-ephemeral-toggle.test.ts | 175 ------- .../__tests__/scheduler-workflow-cutover.test.ts | 19 - .../src/__tests__/workflow-agent-capacity.test.ts | 47 ++ .../src/__tests__/workflow-agent-routing.test.ts | 137 +++++ .../src/__tests__/workflow-graph-foreach.test.ts | 15 + .../__tests__/workflow-graph-task-runner.test.ts | 73 +++ .../src/__tests__/workflow-task-runtime.test.ts | 95 ++++ .../src/__tests__/workflow-work-scheduler.test.ts | 20 + packages/engine/src/agents/agent-action-gate.ts | 64 +++ packages/engine/src/agents/agent-assignment.ts | 135 ----- packages/engine/src/agents/agent-reflection.ts | 1 + .../engine/src/agents/ephemeral-worker-manager.ts | 429 --------------- .../engine/src/agents/workflow-agent-capacity.ts | 113 ++++ .../engine/src/agents/workflow-agent-router.ts | 185 +++++++ packages/engine/src/execution/reviewer.ts | 26 +- packages/engine/src/executor.ts | 501 +++++++++++++++--- packages/engine/src/index.ts | 1 - packages/engine/src/merger.ts | 20 +- packages/engine/src/pi.ts | 11 + packages/engine/src/runtimes/in-process-runtime.ts | 37 -- packages/engine/src/scheduler.ts | 114 +--- packages/engine/src/triage.ts | 196 ++++++- .../src/workflows/workflow-graph-executor.ts | 109 +++- .../engine/src/workflows/workflow-graph-loop.ts | 13 +- .../src/workflows/workflow-graph-task-runner.ts | 12 + .../engine/src/workflows/workflow-task-runtime.ts | 125 ++++- .../src/workflows/workflow-work-scheduler.ts | 8 +- 98 files changed, 2722 insertions(+), 2468 deletions(-) Fusion-Task-Id: FN-8764 Fusion-Task-Lineage: 5527fccb-342d-46f6-8108-bbf89142efec Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
b31bee03a8 |
FN-8576: add global quiet flag to CLI
Add a global quiet mode that suppresses informational CLI stdout without hiding requested results. - Parse --quiet/-q and FUSION_QUIET with command and output exemptions. - Route result output and interactive prompts around the reversible stdout gate. - Document the flag and cover quiet output, prompts, and argument parsing. Files changed: .changeset/fn-8576-cli-quiet-flag.md | 7 ++ docs/cli-reference.md | 8 ++ packages/cli/src/__tests__/bin.test.ts | 15 +++ packages/cli/src/__tests__/cli-quiet-mode.test.ts | 63 +++++++++++++ .../__tests__/cli-quiet-prompt-surfaces.test.ts | 33 +++++++ packages/cli/src/bin.ts | 39 ++++++-- packages/cli/src/commands/experiment-finalize.ts | 3 +- packages/cli/src/commands/git.ts | 17 ++-- packages/cli/src/commands/goals.ts | 4 +- packages/cli/src/commands/mission.ts | 8 +- packages/cli/src/commands/node.ts | 4 +- packages/cli/src/commands/onboard.ts | 4 +- packages/cli/src/commands/org-import.ts | 5 +- packages/cli/src/commands/plugin.ts | 14 ++- packages/cli/src/commands/port-prompt.ts | 4 +- packages/cli/src/commands/project.ts | 6 +- packages/cli/src/commands/research.ts | 3 +- packages/cli/src/commands/task.ts | 101 +++++++++++--------- packages/cli/src/commands/update.ts | 3 +- packages/cli/src/commands/workflow.ts | 13 +-- packages/cli/src/output.ts | 104 +++++++++++++++++++++ packages/cli/src/project-resolver.ts | 20 ++-- 22 files changed, 388 insertions(+), 90 deletions(-) Fusion-Task-Id: FN-8576 Fusion-Task-Lineage: 2493d6d5-bbd9-4fc2-b903-950457ef30b0 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
0d355f371c |
FN-8547: add local OpenAI-compatible provider onboarding
Add guided onboarding for OpenAI-compatible local model providers. - Add custom/local provider prompts and atomic models registry updates. - Preserve registry fields, validate endpoint configuration, and support Qwen thinking compatibility. - Document setup and cover registry persistence with onboarding tests. Files changed: .changeset/fn-8547-local-provider-onboarding.md | 7 + docs/cli-reference.md | 13 ++ docs/settings-reference.md | 35 ++++- packages/cli/src/commands/__tests__/onboard.test.ts | 55 ++++++- packages/cli/src/commands/onboard.ts | 161 ++++++++++++++++++++- 5 files changed, 261 insertions(+), 10 deletions(-) Fusion-Task-Id: FN-8547 Fusion-Task-Lineage: 740221de-fce8-43ae-a095-13b8abf1904a Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
f21d3ce132 |
feat(core): support additive archived task documents (#2375)
## Summary Re-lands the completed Fusion board task FX-005 on current upstream `main`, stacked on #2374 (FX-004). - adds a narrowly authorized additive publication path for archived task documents - preserves archived task and mission state and keeps ordinary replacement/deletion writes rejected - exposes retained archived current/revision reads - requires project-scoped revision/hash CAS for publication - maps malformed, unauthorized, missing, inconsistent, and stale states safely - rebases preserved dashboard drafts explicitly after CAS conflicts ## Why Operators need to append a correction or evidence revision to an archived task without unarchiving it or weakening ordinary archived-task immutability. ## Dependency This branch contains #2374 plus the eight FX-005 commits because cross-fork PRs cannot target a fork-only base branch. After #2374 lands, this PR should be rebased or refreshed so its diff collapses to FX-005 only. ## Validation - PostgreSQL task-store and archived-default suites: 33/33 - dashboard route and editor suites: 321/321 - agent document tools: 22/22 - core, dashboard, and engine typechecks pass <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added optimistic concurrency controls for task document creation and editing using revisions and content hashes. * Added safe, authenticated append-only corrections for documents retained on archived tasks. * Archived documents and revision history remain available for direct reading. * Agent and dashboard tools now report conflicts clearly and support explicit draft rebasing. * **Bug Fixes** * Prevented stale updates from overwriting newer document content. * Preserved archived-task immutability while allowing controlled corrections. * **Documentation** * Updated CLI, dashboard, storage, task-management, and agent guidance for these workflows. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: fusion-merge-train <merge-train@topkoli.local> Co-authored-by: Fusion <noreply@runfusion.ai> Co-authored-by: v <v@v.speedport.ip> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
5f0502e166 |
FN-8452: reject invalid update flags and announce beta releases
Make update commands fail clearly on invalid arguments while helping stable users discover newer beta releases. - Parse update and upgrade options strictly, rejecting unknown, duplicate, and malformed flags before running an update - Show a live-registry beta availability notice for stable human-readable output without affecting JSON or cached results - Add CLI coverage, beta bootstrap documentation, and a patch changeset Files changed: .changeset/fn-8452-update-unknown-flags.md | 7 + RELEASING.md | 2 +- docs/cli-reference.md | 4 + docs/getting-started.md | 2 + packages/cli/src/__tests__/bin-update-args.test.ts | 75 ++++++++++ packages/cli/src/bin.ts | 25 +--- packages/cli/src/commands/__tests__/update.test.ts | 44 ++++++ packages/cli/src/commands/update.ts | 162 +++++++++++++++++++-- 8 files changed, 285 insertions(+), 36 deletions(-) Fusion-Task-Id: FN-8452 Fusion-Task-Lineage: b29a1ce5-5a40-40ec-ac18-07107fa18344 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3962222863 |
FN-8424: route CLI chat replies through inbox mail
Route agent replies to the correct CLI or dashboard mailbox with bounded polling deadlines. - add reply-parent routing validation and CLI/dashboard inbox selection - preserve named mailbox conversations while handling per-message reply deadlines - document chat and inbox interfaces and cover deadline and routing regressions Files changed: .changeset/fn-8424-cli-chat-reply-routing.md | 7 + docs/agents.md | 20 +- docs/cli-reference.md | 29 +- packages/cli/src/bin.ts | 15 +- packages/cli/src/commands/__tests__/chat.test.ts | 262 +++++++++--------- .../cli/src/commands/__tests__/message.test.ts | 12 + packages/cli/src/commands/chat.ts | 293 ++++++++++++--------- packages/cli/src/commands/message.ts | 18 +- ...tools-send-message-recipient-validation.test.ts | 86 +++++- packages/engine/src/agent-heartbeat-prompts.ts | 8 +- packages/engine/src/agent-tools.ts | 71 +++-- 11 files changed, 523 insertions(+), 298 deletions(-) Fusion-Task-Id: FN-8424 Fusion-Task-Lineage: 28d0ef88-717e-4f39-8880-64d2fef94706 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
9db0ffc1f9 |
FN-8425: route CLI chat through agent inbox
Route CLI chat messages through durable, named agent mailbox conversations. - Add conversation IDs and parsing for CLI chat sessions. - Filter CLI chat history and replies by mailbox conversation identity. - Surface conversation IDs to agents and document the inbox-based transport. Files changed: .changeset/fn-8425-cli-chat-conversation.md | 7 + docs/agents.md | 11 +- docs/cli-reference.md | 15 +- packages/cli/src/__tests__/bin-chat-args.test.ts | 34 +++++ packages/cli/src/bin.ts | 45 ++---- packages/cli/src/commands/__tests__/chat.test.ts | 162 +++++++++++++++++++++ packages/cli/src/commands/chat.ts | 132 +++++++++++++++-- packages/core/src/types/messages.ts | 6 + .../__tests__/agent-tools-read-messages.test.ts | 48 ++++++ packages/engine/src/agent-tools.ts | 10 +- 10 files changed, 418 insertions(+), 52 deletions(-) Fusion-Task-Id: FN-8425 Fusion-Task-Lineage: 5091f49f-1f12-4ff7-8d21-48f008cf984e Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
2302fb8a3d |
feat: add beta/stable release tracks with switchable update channel (#2345)
## Summary Fusion can now ship on two release tracks. Betas are cut from `main` as `vX.Y.Z-beta.N` (npm dist-tag `beta`, GitHub prerelease), stable releases are promoted to a long-lived `release` branch and published to `latest`, and users pick their track with the new `updateChannel` global setting — via **Settings → General → Release channel** or `fn update --channel <stable|beta>`. Previously everything was single-track: every publish landed on `latest` and every update surface could only see it. | | beta | stable | |---|---|---| | Cut from | `main` | `release` branch | | Version | `X.Y.Z-beta.N` (changesets pre-mode) | `X.Y.Z` | | npm dist-tag | `beta` | `latest` | | GitHub Release | prerelease | latest | | Homebrew tap / X draft | skipped | bumped / printed | ## How releasing works now `pnpm release` prompts for the channel and **defaults to beta**, so day-to-day releases are betas; stable is always an explicit choice. Choosing stable from `main` triggers assisted promotion: the script proposes the newest beta tag reachable from HEAD, verifies `release` fast-forwards to it, then runs the whole stable release inside a temporary git worktree on `release` — the primary checkout never leaves `main`. Changesets pre-mode preserves changeset files across betas, so the promoted stable release aggregates every changeset since the last stable into one clean changelog entry. ## Design decisions - **Every publish path names an explicit `--tag`.** A beta accidentally landing on `latest` is the one unrecoverable failure of a dual-track scheme, so nothing relies on npm's implicit default (`release.mjs`, `version.yml`). - **Beta channel resolves to semver-max of `latest` and `beta`**, so beta users are offered each promoted stable once it overtakes their prerelease. Switching beta → stable never downgrades; `fn update --channel stable --force` is the explicit escape hatch. - **One comparator instead of three.** CLI, dashboard, and desktop each had their own `isRemoteNewer` that ignored prerelease identifiers — `0.73.0-beta.2`, `-beta.3`, and `0.73.0` all compared equal, which breaks the moment any beta exists. They now share full SemVer-precedence helpers (`compareVersions`, `resolveUpdateTargetVersion`) from `@fusion/core`. - **Installs pin exact versions** (`@runfusion/fusion@0.73.0-beta.2`), never a dist-tag, so an install can't silently land on the wrong track. - **Desktop channels via electron-updater manifests.** Beta tags build desktop artifacts with `publish.channel=beta` (emitting `beta*.yml`); the app sets `channel`/`allowPrerelease` from the shared setting, re-read on every manual check. - **Update caches are channel-stamped** — a cache written for one channel is never served to the other, so switching tracks takes effect on the next check instead of after TTL. ## Test plan - New unit coverage: SemVer precedence + channel resolution in `@fusion/core` (30), channel behavior of the dashboard update check (28, incl. 9 new) and `fn update` (16, incl. 8 new: persist `--channel`, no-downgrade, `--force`, cache channel mismatch). - `pnpm verify:fast` green (scoped typecheck, builds, CLI build, boot smoke); desktop + settings-section suites green. - `release.mjs` dry-run matrix exercised by hand: channel prompt (default/override/invalid), branch preflights per channel, assisted-promotion target selection, fast-forward guard against a diverged `release` branch, and bootstrap when no `release` branch exists. - Not exercised live: an end-to-end publish (needs TTY authorization + real npm publish). First real run is the first `pnpm release --channel beta`. --- [](https://github.com/EveryInc/compound-engineering-plugin)  <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added beta and stable release channels across CLI, dashboard, and desktop updates. * Users can select a channel via Settings or `fn update --channel <stable|beta>` (stored as a global default). * Desktop beta releases now generate beta update manifests and publish as prereleases. * **Documentation** * Expanded release-track, settings, and CLI references to explain channel semantics and workflows. * **Bug Fixes** * Updates now pin the resolved version per channel, improve version comparison, and prevent unintended cross-channel downgrades unless `--force` is used. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
baa1baff9f |
FN-8283: add secret-scrubbed organization bundle CLI
Add portable, secret-scrubbed organization export and import workflows. - Assemble agents, raw skills, routines, automations, and settings into versioned bundles. - Add org-export and org-import CLI commands with dry-run and collision controls. - Preserve existing skills by default or materialize suffixed destinations, with CLI coverage. Files changed: .changeset/fn-8283-org-bundle.md | 7 + docs/cli-reference.md | 9 ++ docs/secrets.md | 10 ++ packages/cli/src/__tests__/bin.test.ts | 17 ++ packages/cli/src/bin.ts | 26 ++- .../cli/src/commands/__tests__/org-export.test.ts | 30 ++++ .../cli/src/commands/__tests__/org-import.test.ts | 31 ++++ packages/cli/src/commands/org-export.ts | 19 +++ packages/cli/src/commands/org-import.ts | 18 +++ packages/core/src/__tests__/org-bundle.test.ts | 69 ++++++++ packages/core/src/index.ts | 17 ++ packages/core/src/org-bundle.ts | 176 +++++++++++++++++++++ 12 files changed, 428 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-8283 Fusion-Task-Lineage: 93877746-8e57-4c79-bdbe-8e4ec7a2efe6 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
a242f1b449 |
fix(FN-7952): migrate bundled plugins to PostgreSQL (#2111)
## Summary Bundled plugins now persist shared runtime state in project-scoped PostgreSQL tables instead of maintaining independent SQLite authority. Reports, CLI Printing Press, Compound Engineering, Roadmap, Even Realities, and WhatsApp all follow the same ownership and startup contract as Fusion core. ## Design decisions - Plugin schema hooks run through the host’s PostgreSQL owner and enforce project isolation. - The SDK exposes the host contract needed by bundled plugins without importing engine internals. - Legacy Roadmap ownership fixtures use the supported empty-owner sentinel, preserving current composite primary/foreign keys while exercising backfill behavior. - The lockfile travels with the Even Realities PostgreSQL dependency so packaged installs remain reproducible. ## Validation - All six affected plugin builds pass. - Affected plugin suites pass: 773 tests across Printing Press, Compound Engineering, Even Realities, Reports, Roadmap, and WhatsApp. - `pnpm test:gate` passes all 478 gate tests. - This PR changes 40 files. ## Stack - Depends on #2110 → #2109 → #2108. - The documentation/release PR completes the stack. Related: #2105 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Breaking Changes** * PostgreSQL is now required for runtime storage; SQLite files are used only as one-time migration inputs. * The legacy `FUSION_NO_EMBEDDED_PG` fallback has been removed. * **New Features** * Added project-isolated PostgreSQL storage for plugins, reports, tasks, notifications, and other plugin data. * Added agent tools for reports and CLI service drafts. * Added PostgreSQL schema initialization support for plugin authors. * **Bug Fixes** * Improved migration and recovery of legacy plugin state. * Prevented cross-project data access and strengthened transactional schema updates. * **Documentation** * Updated storage, migration, deployment, plugin authoring, CLI, and dashboard guidance for PostgreSQL. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
1ea185daa5 |
FN-7911: add workflow validate dry-run command, tool, and API route
Adds a non-mutating `fn workflow validate` dry-run path across CLI, agent tools, and dashboard API so custom workflow IR can be checked before create/update. - Add `packages/cli/src/commands/workflow.ts` implementing `fn workflow validate <id> | --file <path>` with JSON/text output, wired into `bin.ts`. - Add `fn_workflow_validate` agent tool (`agent-tools.ts`, `index.ts`) reusing the existing parseWorkflowIr/trait/code-node/column-agent validation used by create/update, performing no persistence. - Add `POST /api/workflows/validate` route in `register-workflow-routes.ts` plus dashboard route test coverage. - Extend heartbeat tool-gating/exposure tests and gating classifications to include `fn_workflow_validate` alongside the other workflow tools. - Update CLI/agent extension docs (`docs/cli-reference.md`, `docs/agents.md`, `docs/workflow-steps.md`, fusion skill references) to document the new command/tool. - Add changeset `.changeset/fn-7911-workflow-validate.md` (minor) describing the new capability. Files changed: .changeset/fn-7911-workflow-validate.md | 7 ++ docs/agents.md | 5 +- docs/cli-reference.md | 13 ++ docs/workflow-steps.md | 3 +- packages/cli/skill/fusion/SKILL.md | 2 +- .../cli/skill/fusion/references/extension-tools.md | 10 ++ .../skill/fusion/references/fusion-capabilities.md | 1 + .../src/__tests__/extension-workflow-tools.test.ts | 1 + packages/cli/src/__tests__/extension.test.ts | 1 + .../src/__tests__/workflow-docs-current.test.ts | 1 + packages/cli/src/bin.ts | 22 ++++ packages/cli/src/commands/workflow.ts | 80 ++++++++++++ packages/cli/src/extension.ts | 10 ++ .../dashboard/src/__tests__/chat-manager.test.ts | 1 + .../dashboard/src/__tests__/chat.rooms.test.ts | 1 + .../planning-document-tools-exposure.test.ts | 1 + .../__tests__/workflow-validate-route.test.ts | 101 +++++++++++++++ .../src/routes/register-workflow-routes.ts | 27 +++- .../engine/src/__tests__/agent-action-gate.test.ts | 2 +- .../agent-workflow-tools-exposure.test.ts | 70 ++++++++++- .../src/__tests__/gating-classifications.test.ts | 3 +- .../src/__tests__/heartbeat-executor.test.ts | 37 +++--- .../src/__tests__/heartbeat-session-prompt.test.ts | 5 +- .../src/__tests__/permanent-agent-gating.test.ts | 2 +- packages/engine/src/agent-heartbeat.ts | 5 +- packages/engine/src/agent-tools.ts | 140 ++++++++++++++++++++- packages/engine/src/executor.ts | 6 + packages/engine/src/gating-classifications.ts | 2 + packages/engine/src/index.ts | 4 + 29 files changed, 532 insertions(+), 31 deletions(-) Fusion-Task-Id: FN-7911 Fusion-Task-Lineage: 903d15fe-a7ec-458f-aa34-8f2e895a9603 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3326984a6d |
FN-7913: add fn plugin publish --dry-run preflight command
Adds a non-mutating `fn plugin publish` CLI command that preflights a plugin before manual pack/publish, giving external plugin authors an offline readiness check. - New `packages/cli/src/commands/plugin-publish.ts` with `runPluginPublish`, `collectPluginPreflight`, and `classifyVersionBump` (strict x.y.z semver bump classification), reusing `loadManifestFromPath` / `resolvePluginEntryFile` from the install path - Wire `fn plugin publish <path> [--dry-run] [--previous-version <semver>]` into `bin.ts` command routing, dynamic import list, and help text - Add test coverage in `plugin-publish.test.ts` and update `bin.test.ts` for the new subcommand - Update `docs/PLUGIN_AUTHORING.md`, `docs/cli-reference.md`, and `docs/plugins/external-authoring.md` to document the new preflight command - Add changeset `.changeset/fn-7913-plugin-publish-dry-run.md` (minor, @runfusion/fusion) Files changed: .changeset/fn-7913-plugin-publish-dry-run.md | 7 + docs/PLUGIN_AUTHORING.md | 9 +- docs/cli-reference.md | 5 +- docs/plugins/external-authoring.md | 14 +- packages/cli/src/__tests__/bin.test.ts | 2 +- packages/cli/src/__tests__/plugin-publish.test.ts | 197 ++++++++++++++++ packages/cli/src/bin.ts | 22 +- packages/cli/src/commands/plugin-publish.ts | 272 ++++++++++++++++++++++ 8 files changed, 521 insertions(+), 7 deletions(-) Fusion-Task-Id: FN-7913 Fusion-Task-Lineage: 27bdf937-3195-4619-9d01-b6af4fbba487 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
4726af673a |
FN-7740: fix store-leak and no-retry-on-lock gaps in research/settings-import/agent-export/git/project CLI commands
Close leaked TaskStore/AgentStore handles and retry lock errors across fn research, settings import, agent export, git, and project CLI commands. - fn research create/list/show/export/cancel/retry now close their resolved store on every exit path except the intentional fire-and-forget --wait-for-completion-less create, which stays open to avoid truncating the background run - fn settings import retries importSettings through a momentary database-is-locked window and closes the store before every process.exit() - fn agent export closes both the project TaskStore and the AgentStore it opens on every exit path, including the no-agents-to-export guard - fn git status/fetch/pull/push and fn agent export switch to a path-only project resolution helper so no cached, never-closed TaskStore is left behind for these read/write-nothing-to-board commands - fn project list/show compute per-project task counts against an uncached TaskStore that is now closed after every call, and the count read retries a momentary lock instead of silently reporting zero tasks - Adds dedicated lock-retry regression tests for each touched command plus a changeset documenting the fix Files changed: .changeset/fn-7740-cli-cmd-lock-retry.md | 7 + docs/cli-reference.md | 28 +++ .../__tests__/agent-export-lock-retry.test.ts | 122 ++++++++++ .../src/commands/__tests__/git-lock-retry.test.ts | 129 +++++++++++ packages/cli/src/commands/__tests__/git.test.ts | 12 + .../commands/__tests__/project-lock-retry.test.ts | 195 ++++++++++++++++ .../cli/src/commands/__tests__/project.test.ts | 8 + .../commands/__tests__/research-lock-retry.test.ts | 248 ++++++++++++++++++++ .../cli/src/commands/__tests__/research.test.ts | 16 +- .../__tests__/settings-import-lock-retry.test.ts | 170 ++++++++++++++ .../src/commands/__tests__/settings-import.test.ts | 34 +++ packages/cli/src/commands/agent-export.ts | 67 ++++-- packages/cli/src/commands/git.ts | 18 +- packages/cli/src/commands/project.ts | 40 +++- packages/cli/src/commands/research.ts | 254 ++++++++++++++------- packages/cli/src/commands/settings-import.ts | 61 ++++- 16 files changed, 1284 insertions(+), 125 deletions(-) Fusion-Task-Id: FN-7740 Fusion-Task-Lineage: 5c572332-b81c-4e16-9748-ce8639f53ff3 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
5304af8d0e |
FN-7739: retry locked store access in backup/mcp/db CLI commands
Audits and hardens `fn backup`, `memory-backup`, `mcp`, and `db vacuum` CLI commands so they retry a locked board database instead of hanging, and reliably close store handles on every exit path. - Add retryOnLock + closeProjectStore/asLocalProjectContext pattern to backup.ts, memory-backup.ts, mcp.ts, and db.ts (following the FN-7731/FN-7738 pattern) - Close cached, uncached CWD-fallback, and ad-hoc MCP secrets TaskStores on every exit path (success, error, early-return) - Retry MCP settings writes and DB VACUUM on lock contention, honoring FUSION_CLI_LOCK_RETRY_MS - Add lock-retry regression test suites for backup, db, mcp, and memory-backup commands - Update docs/cli-reference.md with the new retry/lock behavior - Add changeset (patch) documenting the fix Files changed: .changeset/fn-7739-cli-cmd-lock-retry.md | 7 + docs/cli-reference.md | 17 + .../commands/__tests__/backup-lock-retry.test.ts | 202 +++++++++++ packages/cli/src/commands/__tests__/backup.test.ts | 15 + .../src/commands/__tests__/db-lock-retry.test.ts | 182 ++++++++++ packages/cli/src/commands/__tests__/db.test.ts | 15 + .../src/commands/__tests__/mcp-lock-retry.test.ts | 234 ++++++++++++ packages/cli/src/commands/__tests__/mcp.test.ts | 14 + .../__tests__/memory-backup-lock-retry.test.ts | 201 +++++++++++ .../src/commands/__tests__/memory-backup.test.ts | 15 + packages/cli/src/commands/backup.ts | 252 +++++++++---- packages/cli/src/commands/db.ts | 62 +++- packages/cli/src/commands/mcp.ts | 391 +++++++++++++++------ packages/cli/src/commands/memory-backup.ts | 179 +++++++--- 14 files changed, 1538 insertions(+), 248 deletions(-) Fusion-Task-Id: FN-7739 Fusion-Task-Lineage: 6dbab086-2bf8-4cd4-950b-04fe39131933 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
86bd434c11 |
FN-7738: retry locked board DB in fn branch-group/pr CLI commands
Audit non-task.ts CLI command families for store-leak / no-retry-on-lock gaps and fix branch-group.ts and pr.ts to match the FN-7731 retryOnLock + closeProjectStore pattern. - Add retryOnLock handling (honoring FUSION_CLI_LOCK_RETRY_MS) around board DB access in branch-group.ts and pr.ts so a locked store retries and exits promptly instead of hanging. - Ensure both cached and uncached CWD-fallback project stores are closed on every exit path (success, error, early return) to stop store leaks. - Extend project-context.ts with shared helpers used by both commands. - Add regression tests: branch-group-lock-retry.test.ts and pr-lock-retry.test.ts, plus additional coverage in branch-group.test.ts. - Document the new lock-retry behavior in docs/cli-reference.md. - Add a patch changeset for @runfusion/fusion describing the user-facing fix. Files changed: .changeset/fn-7738-cli-cmd-lock-retry.md | 7 + docs/cli-reference.md | 11 + .../__tests__/branch-group-lock-retry.test.ts | 221 ++++++++ .../src/commands/__tests__/branch-group.test.ts | 10 + .../src/commands/__tests__/pr-lock-retry.test.ts | 226 ++++++++ packages/cli/src/commands/branch-group.ts | 389 +++++++++----- packages/cli/src/commands/pr.ts | 575 +++++++++++++-------- packages/cli/src/project-context.ts | 26 + 8 files changed, 1122 insertions(+), 343 deletions(-) Fusion-Task-Id: FN-7738 Fusion-Task-Lineage: 0bbc8fa2-c4f9-49ed-adb6-7dab57eaee13 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
1e79a236b2 |
FN-7734: generalize lock-retry and store-close pattern across all fn task subcommands
Applies the FN-7731 retryOnLock + closeProjectStore pattern to the ~26 runTask* handlers in task.ts so every 'fn task' subcommand retries a momentarily locked board database and exits promptly instead of hanging or leaking a store handle. - Generalize retryOnLock/closeProjectStore usage across all runTask* handlers in packages/cli/src/commands/task.ts - Honor FUSION_CLI_LOCK_RETRY_MS for configurable retry timing - Close both cached and uncached CWD-fallback stores on exit - Multi-step flows (create/retry/delete/merge/imports) retry each discrete write independently instead of retrying the whole flow - Add task-lock-retry.test.ts covering the new retry/close behavior across subcommands - Update docs/cli-reference.md and task.test.ts for the new behavior - Add changeset fn-7734-task-cmd-lock-retry-generalized.md (patch) Files changed: .../fn-7734-task-cmd-lock-retry-generalized.md | 7 + docs/cli-reference.md | 18 +- .../src/commands/__tests__/task-lock-retry.test.ts | 282 ++++ packages/cli/src/commands/__tests__/task.test.ts | 9 +- packages/cli/src/commands/task.ts | 1541 +++++++++++--------- 5 files changed, 1173 insertions(+), 684 deletions(-) Fusion-Task-Id: FN-7734 Fusion-Task-Lineage: cd5c864b-8a33-4962-803e-bbb353a41085 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
7420abe80e |
FN-7731: add CLI-level lock retry for task show/move commands
Add bounded exponential-backoff retry above the DB layer so `fn task show`/`fn task move` ride out transient SQLite lock contention instead of failing outright or hanging. - Add packages/cli/src/lock-retry.ts: retries a thunk on SQLite lock errors (via @fusion/core's isSqliteLockError) with exponential backoff capped by a wall-clock deadline (default 15s, override via FUSION_CLI_LOCK_RETRY_MS); non-lock errors propagate immediately; raises LockRetryExhaustedError on deadline exhaustion. - Wire lock-retry into packages/cli/src/commands/task.ts for the show/move task-store operations, and close the resolved TaskStore for deterministic exit. - Export isSqliteLockError from packages/core/src/index.ts for CLI reuse. - Add packages/cli/src/commands/__tests__/task-lock-retry.test.ts covering retry/backoff/deadline/error-passthrough behavior; extend task.test.ts. - Document the new behavior/env var in docs/cli-reference.md. - Add changeset (@runfusion/fusion: patch). Files changed: .changeset/fn-7731-task-cmd-lock-retry.md | 7 + docs/cli-reference.md | 9 + .../src/commands/__tests__/task-lock-retry.test.ts | 430 +++++++++++++++++++++ packages/cli/src/commands/__tests__/task.test.ts | 11 + packages/cli/src/commands/task.ts | 117 +++++- packages/cli/src/lock-retry.ts | 117 ++++++ packages/core/src/index.ts | 5 + 7 files changed, 688 insertions(+), 8 deletions(-) Fusion-Task-Id: FN-7731 Fusion-Task-Lineage: 85543164-10d6-4da9-8c3c-a84cd86827aa Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
55dae49b37 |
FN-7704: fix fn agent stop/start hanging up to 60s due to unclosed store handles
Fix CLI process exit so `fn agent stop`/`fn agent start` no longer hang up to 60s and eventually time out on repeated retries against the same agent. - Root cause: `resolveProject()` cached an unclosed `TaskStore`, and `createAgentStore()` never closed the `AgentStore` it opened, leaving SQLite handles alive after the command's real work was done. - Add `resolveProjectPathOnly`/`closeProjectStore` helpers in `project-context.ts` so path-only callers never leak a `TaskStore`. - Explicitly close `AgentStore` on every exit/return path in `agent.ts`, since `process.exit()` skips pending `finally` blocks. - Add a bounded fast-fail timeout around the state-store write (default 10s, overridable via `FUSION_AGENT_CMD_TIMEOUT_MS`) so a genuinely stuck operation fails fast with a clear error and non-zero exit instead of hanging. - Add regression tests covering process-exit/store-closing behavior and update CLI reference docs. - Add changeset for the patch release. Files changed: .changeset/fn-7704-agent-cmd-hang-fix.md | 7 + docs/cli-reference.md | 3 + .../commands/__tests__/agent-process-exit.test.ts | 114 +++++++++++ packages/cli/src/commands/__tests__/agent.test.ts | 111 +++++++++- packages/cli/src/commands/agent.ts | 223 ++++++++++++++++----- packages/cli/src/project-context.ts | 44 ++++ 6 files changed, 444 insertions(+), 58 deletions(-) Fusion-Task-Id: FN-7704 Fusion-Task-Lineage: 4679d1a0-3ab8-48ce-86b7-5919bba805fb 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> |
||
|
|
b8e126eeaf |
FN-7425: add GitLab tracking metadata to tasks
Persist GitLab tracking metadata and surface it across task APIs and dashboard views. - add task-store schema, migration, and update helpers for linked GitLab items and stale state - expose validated GitLab tracking updates through task workflow routes and legacy task payloads - render GitLab badges, detail-panel metadata, open/unlink actions, styling, i18n strings, and docs - cover persistence, route validation, task card badges, and task detail interactions with tests - add a patch changeset for the published Fusion package Files changed: .changeset/fn-7425-gitlab-tracking.md | 7 ++ docs/cli-reference.md | 2 +- docs/dashboard-guide.md | 3 + packages/core/src/__tests__/db-migrate.test.ts | 29 +++++ .../src/__tests__/store-gitlab-tracking.test.ts | 138 +++++++++++++++++++++ packages/core/src/db.ts | 10 +- packages/core/src/gitlab-tracking.ts | 10 ++ packages/core/src/index.ts | 3 +- packages/core/src/store.ts | 135 +++++++++++++++++++- packages/core/src/types.ts | 49 ++++++++ packages/dashboard/app/api/legacy.ts | 3 + packages/dashboard/app/components/GitLabBadge.tsx | 33 +++++ packages/dashboard/app/components/TaskCard.tsx | 7 +- .../dashboard/app/components/TaskCardBadge.tsx | 15 ++- .../dashboard/app/components/TaskDetailModal.css | 47 +++++-- .../dashboard/app/components/TaskDetailModal.tsx | 134 +++++++++++++++++++- .../app/components/__tests__/TaskCard.test.tsx | 49 ++++++++ .../TaskDetailModal.gitlab-tracking.test.tsx | 121 ++++++++++++++++++ .../__tests__/TaskDetailModal.test-helpers.ts | 1 + packages/dashboard/app/styles.css | 9 ++ .../src/__tests__/routes-tasks-ops.test.ts | 136 ++++++++++++++++++++ packages/dashboard/src/gitlab.ts | 24 +++- packages/dashboard/src/routes/register-gitlab.ts | 1 + .../src/routes/register-task-workflow-routes.ts | 106 +++++++++++++++- packages/i18n/locales/en/app.json | 31 +++++ packages/i18n/src/resources.d.ts | 31 +++++ 26 files changed, 1106 insertions(+), 28 deletions(-) Fusion-Task-Id: FN-7425 Fusion-Task-Lineage: 9b5e6005-7284-402e-995c-553be2275eff Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
865dec235b |
FN-7424: add GitLab task imports
Adds GitLab-backed task import flows across the CLI, extension, API, and dashboard. - Add GitLab client normalization, provenance, duplicate detection, and import routes for project issues, group issues, and merge requests. - Extend the dashboard import modal with a GitLab provider, resource tabs, previews, imported-state detection, and import actions. - Add CLI and extension task import commands plus usage event/gating classifications and operator documentation. - Cover GitLab fetch/import behavior with dashboard, CLI, and gating tests. Files changed: .changeset/fn-7424-gitlab-imports.md | 7 + docs/cli-reference.md | 11 +- docs/gitlab-parity-inventory.md | 10 +- docs/task-management.md | 6 +- packages/cli/skill/fusion/SKILL.md | 2 +- .../cli/skill/fusion/references/extension-tools.md | 60 ++++ .../skill/fusion/references/fusion-capabilities.md | 6 + packages/cli/src/__tests__/extension.test.ts | 6 + .../__tests__/task-command-gitlab-import.test.ts | 97 ++++++ packages/cli/src/bin.ts | 25 +- packages/cli/src/commands/task.ts | 58 ++++ packages/cli/src/extension.ts | 106 +++++++ packages/core/src/__tests__/usage-events.test.ts | 2 + packages/core/src/types.ts | 7 + packages/core/src/usage-events.ts | 3 + packages/dashboard/app/api/legacy.ts | 52 ++++ .../dashboard/app/components/GitHubImportModal.css | 41 +++ .../dashboard/app/components/GitHubImportModal.tsx | 143 ++++++++- .../__tests__/GitHubImportModal.test.tsx | 33 ++ packages/dashboard/src/__tests__/gitlab.test.ts | 56 ++++ .../dashboard/src/__tests__/routes-gitlab.test.ts | 99 ++++++ packages/dashboard/src/gitlab.ts | 334 +++++++++++++++++++++ packages/dashboard/src/index.ts | 15 + packages/dashboard/src/routes.ts | 2 + packages/dashboard/src/routes/register-gitlab.ts | 192 ++++++++++++ .../engine/src/__tests__/agent-action-gate.test.ts | 4 + .../gating-classifications-provisioning.test.ts | 13 +- .../src/__tests__/gating-classifications.test.ts | 6 + packages/engine/src/gating-classifications.ts | 9 + 29 files changed, 1388 insertions(+), 17 deletions(-) Fusion-Task-Id: FN-7424 Fusion-Task-Lineage: 8012425c-21d5-4b20-adb7-07d2e5aa1cef Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
e85d25e383 |
FN-7395: fix packaged desktop launch assets
Fix installed desktop launches so they use packaged runtime assets without parsing caller workspaces. - Resolve normal desktop launches from packaged CLI desktop assets, with explicit override and dev paths. - Stage desktop runtime assets into the published CLI package and include them in npm files. - Route desktop --no-auth into the embedded dashboard server and document installed/dev launch behavior. - Cover invalid JSON caller directories, missing packaged assets, package contents, and CLI routing in tests. Files changed: .changeset/fn-7395-desktop-launcher.md | 7 ++ docs/cli-reference.md | 12 +- packages/cli/package.json | 1 + packages/cli/src/__tests__/bin.test.ts | 19 +++ packages/cli/src/__tests__/package-config.test.ts | 11 ++ packages/cli/src/bin.ts | 10 +- .../cli/src/commands/__tests__/desktop.test.ts | 132 ++++++++++++++++++--- packages/cli/src/commands/desktop.ts | 85 ++++++++----- packages/cli/tsup.config.ts | 60 ++++++++++ 9 files changed, 285 insertions(+), 52 deletions(-) Fusion-Task-Id: FN-7395 Fusion-Task-Lineage: e7a8d065-0d41-4fa3-9cea-1cfb5b466d16 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
c93f2d4da0 |
FN-7346: fix TUI settings arrow editing
Fix Settings keyboard handling so arrow keys edit selected enum values in the terminal dashboard. - Keep Tab as the Settings pane switcher so arrow keys remain scoped to the active pane. - Route detail-pane left/right arrows and h/l keys through enum setting cycling and remote provider activation. - Add terminal dashboard coverage for list navigation and enum cycling, plus CLI docs and release note coverage. Files changed: .changeset/fn-7346-tui-settings-arrows.md | 7 ++ docs/cli-reference.md | 5 + .../commands/dashboard-tui/__tests__/app.test.tsx | 121 ++++++++++++++++++++- packages/cli/src/commands/dashboard-tui/app.tsx | 119 ++++++++++---------- 4 files changed, 186 insertions(+), 66 deletions(-) Fusion-Task-Id: FN-7346 Fusion-Task-Lineage: c67861a7-7bb3-408d-926c-e85a44fe2dec Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
3bfdb16650 |
FN-7033: document MCP operator workflows
Add a canonical MCP guide with operator workflows and contract coverage. - Add docs/mcp.md covering MCP settings resolution, transports, secret references, validation, dashboard management, CLI commands, import/export, and AI lane forwarding. - Link the MCP guide from the docs index, CLI reference, settings reference, secrets docs, and dashboard guide. - Add a documentation contract test that checks required guide sections and source-aligned MCP surfaces. Files changed: docs/README.md | 1 + docs/cli-reference.md | 2 +- docs/dashboard-guide.md | 2 +- docs/mcp.md | 221 +++++++++++++++++++++ docs/secrets.md | 2 +- docs/settings-reference.md | 2 + .../src/__tests__/mcp-documentation.test.ts | 65 ++++++ 7 files changed, 292 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-7033 Fusion-Task-Lineage: 530abc69-0247-49ee-9487-54d8e2a1b988 |
||
|
|
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 |
||
|
|
a986a45e48 |
FN-6852: document desktop engine startup
Clarify that desktop CLI launches with the local AI engine by default.\n\n- Document fn desktop as engine-on by default, matching dashboard startup behavior.\n- Clarify --paused keeps the engine process running with automation disabled.\n- Note that desktop has no --no-engine mode and update desktop README launch steps.\n\nFiles changed:\n docs/cli-reference.md | 12 ++++++++++--\n packages/desktop/README.md | 15 +++++++++++----\n 2 files changed, 21 insertions(+), 6 deletions(-) Fusion-Task-Id: FN-6852 Fusion-Task-Lineage: 3ae2ea10-ede1-4cc5-a3b5-71f692b2a9ac |
||
|
|
7ef381762a | feat: start engines by default | ||
|
|
a84a8e1793 |
FN-6570: guard task list formatting fallback
Prevent fn_task_list surfaces from crashing when the runtime core namespace lacks the clamp export. - Add a shared defensive task-list formatter with a bounded fallback clamp. - Route CLI, dashboard planning-board, and engine triage fn_task_list output through the formatter. - Cover missing, throwing, and non-string clamp behavior in core and CLI tests. - Document the resilient task-list formatting behavior and add a patch changeset. Files changed: .changeset/fn-6570-task-list-resolve-fix.md | 5 ++ docs/cli-reference.md | 2 +- packages/cli/src/__tests__/extension.test.ts | 57 +++++++++++++++++++++- packages/cli/src/extension.ts | 8 ++- .../core/src/__tests__/task-list-format.test.ts | 49 ++++++++++++++++++- packages/core/src/index.ts | 2 +- packages/core/src/task-list-format.ts | 35 +++++++++++++ packages/dashboard/src/planning-board-tools.ts | 8 ++- packages/engine/src/triage.ts | 8 ++- 9 files changed, 164 insertions(+), 10 deletions(-) Fusion-Task-Id: FN-6570 Fusion-Task-Lineage: 455f38a8-5e4f-4643-a3ce-088ef0c92b01 |
||
|
|
601a85b7c9 |
FN-6474: clarify plugin tarball install docs
Clarifies packaged external plugin proof-point docs so tarballs are extracted before installation. - Document that fn plugin install accepts built plugin directories or installed package names, not raw .tgz archives. - Update external plugin proof-point and authoring guidance to extract pnpm pack output and install ./package. - Add a static regression test guarding the runbook and authoring guide against raw tarball install instructions. Files changed: docs/cli-reference.md | 1 + docs/plugins/external-authoring.md | 2 +- docs/plugins/external-proof-point-runbook.md | 10 +++++- .../external-proof-point-runbook-install.test.ts | 40 ++++++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) Fusion-Task-Id: FN-6474 Fusion-Task-Lineage: 744d43ff-ed98-43a1-9cb9-e25f96225ab7 |
||
|
|
66591ec11c |
FN-6333: add legacy auto-merge cleanup surfaces
Expose operator controls for auditing and clearing legacy auto-merge stamps. - Add CLI dry-run, apply, and JSON modes for legacy auto-merge stamp cleanup. - Add dashboard maintenance endpoints and a Settings → Merge cleanup panel. - Document the cleanup workflow and cover CLI, route, and UI behavior with tests. Files changed: .changeset/fn-6333-legacy-automerge-cleanup.md | 5 + docs/cli-reference.md | 4 + docs/dashboard-guide.md | 6 ++ docs/settings-reference.md | 2 +- packages/cli/src/__tests__/bin.test.ts | 10 ++ .../cli/src/__tests__/pr-automerge-cleanup.test.ts | 107 ++++++++++++++++++++ packages/cli/src/bin.ts | 14 ++- packages/cli/src/commands/pr.ts | 41 ++++++++ .../components/settings/sections/MergeSection.tsx | 109 ++++++++++++++++++++ .../MergeSection.legacy-automerge-cleanup.test.tsx | 110 +++++++++++++++++++++ .../legacy-automerge-stamps-routes.test.ts | 76 ++++++++++++++ packages/dashboard/src/routes.ts | 36 +++++++ 12 files changed, 517 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-6333 Fusion-Task-Lineage: 55a3fa22-e0ba-4996-bfce-cad31c71177d |
||
|
|
508551c593 |
FN-6299: allow archiving tasks from any column
Allow task archiving from every live board column while preserving a safe restore target. - Record the pre-archive column and restore archived tasks to that column, downgrading active execution columns to todo. - Expose archive actions and CLI/tooling documentation for all non-archived tasks. - Expand store, dashboard, and route tests for archive/unarchive behavior across columns. - Quarantine the flaky core db test observed during verification and add the published package changeset. Files changed: .changeset/fn-6299-archive-any-column.md | 5 ++ docs/cli-reference.md | 4 ++ docs/task-management.md | 9 +-- .../cli/skill/fusion/references/extension-tools.md | 6 +- .../skill/fusion/references/fusion-capabilities.md | 4 +- packages/cli/src/bin.ts | 2 +- packages/cli/src/extension.ts | 18 ++--- .../src/__tests__/store-archive-search.test.ts | 76 +++++++++++++++++----- packages/core/src/store.ts | 61 ++++++++++++----- packages/core/src/types.ts | 4 ++ packages/core/vitest.config.ts | 1 + packages/dashboard/app/components/TaskCard.tsx | 2 +- .../dashboard/app/components/TaskDetailModal.tsx | 2 +- .../app/components/__tests__/TaskCard.test.tsx | 35 +++++++++- ...etailModal.responsive-and-dependencies.test.tsx | 26 ++++++++ .../src/__tests__/routes-tasks-ops.test.ts | 8 +-- .../src/routes/register-task-workflow-routes.ts | 9 +-- scripts/lib/test-quarantine.json | 5 ++ 18 files changed, 215 insertions(+), 62 deletions(-) Fusion-Task-Id: FN-6299 Fusion-Task-Lineage: fd5b5c12-35b8-4843-ab4e-14608d1ea395 |
||
|
|
db971a91ea |
fix(FN-1455): initialize git during project registration
Fusion-Task-Id: FN-1455 |
||
|
|
26bc80a0ad |
FN-5958: add mission goal linking to create and update flows
Expand mission goal-link management across the REST API, CLI, and pi extension. - accept optional goalIds during mission create and patch requests, and enforce archived-goal rejection while keeping unlink permissive - add repeatable --goal support to fn mission create and reuse goal validation for CLI linking - expose archived-goal errors in pi-extension mission goal tools and document the new behavior Files changed: .changeset/FN-5958-mission-goal-links.md | 10 + docs/cli-reference.md | 8 +- docs/missions.md | 15 +- packages/cli/src/__tests__/bin.test.ts | 34 ++++ packages/cli/src/__tests__/extension-mission-goal-tools.test.ts | 36 ++++ packages/cli/src/bin.ts | 24 ++- packages/cli/src/commands/mission.ts | 29 ++- packages/cli/src/extension.ts | 7 + packages/dashboard/src/__tests__/mission-goal-links-routes.test.ts | 201 ++++++++++++++++++++- packages/dashboard/src/mission-routes.ts | 66 +++++-- 10 files changed, 390 insertions(+), 40 deletions(-) Fusion-Task-Id: FN-5958 Fusion-Task-Lineage: cf9d6013-5484-439d-b66d-44cac843c6ef |