Merge remote-tracking branch 'origin/main' into conflict-resolution-1711
# Conflicts: # packages/engine/src/executor.ts
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Auto-continue the agent session after an engine-internal pause/resume abort instead of re-queueing the task to todo. When the engine tears down in-flight work (hard-cancel) and the workflow graph run ends with the task back in `todo`, the executor now retries the agent session in place — bounded by the existing graph-resume retry budget with backoff, falling back to a benign re-queue only after retries are exhausted. Before re-dispatching, it re-checks the task at fire time and aborts the auto-continue if the task was paused, moved, or deleted during the backoff window, so genuine user/global/task pauses are never resumed against the operator's intent. The transient reclassification clears any stale `failed` status and emits an `Auto-recovered:` log so no spurious failure notification fires.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix a false "engine not running" banner when another fusion process on the same machine already owns the engine. The dashboard's health check only counted engines this process started, so a second launch (e.g. `pnpm dev dashboard` alongside an already-running `fusion`) that was correctly refused the per-machine engine singleton lock reported the engine as unavailable — even though one was running. The `ProjectEngineManager` now tracks engines owned by another process (detected via `EngineAlreadyRunningError` from the singleton lock) and exposes `hasRunningEngine()`, which the dashboard health endpoint uses so the banner reflects machine-level truth. Reconciliation still retries so this process takes over if the other exits, and the "refusing to start" log is emitted once per project instead of on every reconciliation tick.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add the `factory-mono` dashboard color theme, a monochrome Factory variant with red accents and neutralized glow effects.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Keep Fusion verification progress moving by making targeted script tests honor file arguments, reaping verification subprocess groups after clean exits, and preventing the line-count audit from blocking `pnpm test`. The changed-test runner now caps reverse-dependent fan-out so a foundational-package edit no longer expands into a whole-workspace run, and the executor/verification guidance now directs agents to scope verification to changed files rather than running the full workspace test suite.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix anthropic-compatible custom providers failing with "No API provider registered for api: anthropic".
|
||||
|
||||
`resolveCustomProviderApiType` mapped the `anthropic-compatible` provider type to the api key `"anthropic"`, but pi-ai registers the Anthropic Messages API under `"anthropic-messages"`. Any custom provider configured as `anthropic-compatible` (self-hosted Claude proxy, gateway, etc.) therefore selected a model whose `api` did not match a registered provider and threw at stream time. Mapped it to `"anthropic-messages"` and added a regression assertion alongside the existing openai-compatible / openai-responses coverage.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Clear the stale `failed` status when a pause/resume abort is reclassified as a benign todo re-queue, so the task no longer surfaces as failed on the board and the deferred failure notification is suppressed. Previously a pause-abort parked `status:"failed"` on an earlier non-todo observation stayed dispatchable (the scheduler filters on column+paused, not status), re-entered the benign-todo branch, and was logged benign while the row stayed failed — firing a contradictory failure alert during global pause when self-healing recovery was suppressed. The clear path also emits an `Auto-recovered:`-prefixed log so the notification service proactively cancels the pending failure timer instead of relying only on the fire-time re-check.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Make the compound-engineering built-in workflow actually load skills and run the full CE flow. Previously the workflow named CE skills at each node but the graph-node execution path (`runGraphCustomNode`) never loaded them: the named skill was only injected as prompt text, the plugin-injected `FUSION_CE_*` runtime env never reached the step session, and `fn_spawn_agent` was never registered for workflow steps, so persona fan-out and skill loading silently no-op'd. Now skill-executor graph steps thread the injected env, load the named skill (discovery + selection via `additionalSkillPaths`), register the spawn tool in coding mode, and receive an engine-injected Fusion workflow-step conventions preamble (await-input for questions, `FUSION_HEADLESS` degrade path, persona fan-out via `systemPromptOverride`). Adds an explicit `unattended` opt-in for `FUSION_HEADLESS`, reconciles the preamble with the gate verdict-JSON contract, and carries `skillName` through the `WorkflowStep` round-trip.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix the persistent non-blocking Full Suite failure caused by the Compound Engineering plugin's `dist-freshness.test.ts`. The test reads the plugin's compiled `dist/settings.js` and `dist/session/orchestrator.js`, but the plugin had no `pretest` build and was absent from `ensure-test-artifacts.mjs`, so on a fresh checkout `dist/` did not exist and the freshness guard threw "dist/ is missing — run pnpm build first". Register the plugin's required artifacts in `ensure-test-artifacts.mjs` and add a `pretest` hook that builds them, matching the other bundled plugins.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix the Droid runtime model discovery spawning a runaway storm of leaked `droid` processes.
|
||||
|
||||
`discoverDroidModels` invoked `droid models --json` / `droid model list --json`, but the droid CLI has no such commands — an unknown subcommand is parsed as a *prompt*, so each call launched a full agent session (a persistent `droid exec --stream-jsonrpc` backend) that never exited. The promise never settled and the process leaked; because the dashboard re-loads the droid extension on every chat-send, these piled up into dozens of orphaned `droid` processes.
|
||||
|
||||
Discovery now reads the catalog from `droid exec --help` (which lists `Available Models:` + `Custom Models:` and exits cleanly), parsed via the new `parseDroidModelsFromHelp` helper. A SIGKILL-on-timeout guard (`DROID_MODEL_DISCOVERY_TIMEOUT_MS`) ensures any wedged spawn is killed and the promise always settles, so a single discovery call can never leak a process again. Verified end-to-end against the real binary (46 models incl. custom, 0 leaked processes).
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Show plugin-contributed skills (e.g. compound-engineering `ce-*`) in the workflow editor. The dashboard's discovered-skills catalog was built only from the disk-scanning package manager, so plugin skills — which the engine materializes for executor sessions separately — never appeared, and built-in workflow nodes that reference them (like `builtin:compound-engineering`) showed "— select skill —" / unresolved. The skills adapter now merges plugin skill contributions into the discovered list (deduped by bare name), and the editor's node summary + skill dropdown match namespaced skillNames (`compound-engineering:ce-work`) against the catalog's two-segment names (`ce-work/SKILL.md`) via a shared bare-name normalizer.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix loading spinners that didn't spin across the dashboard. Many loading states (Settings, task tabs, agents, documents, plugins, model pickers, command center, and more) rendered bare "Loading…" text with no spinner — and a couple rendered an unstyled `loading-spinner` div that never showed anything. Added a shared `<LoadingSpinner>` component (self-contained animated SVG, no `lucide-react` dependency so it survives partial test mocks) and adopted it across ~45 loading placeholders so every loading state now shows a consistent animated spinner.
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix worktree-creation failures (and the `Workflow graph terminated with failure at node 'execute'` they surface as) caused by leaked orphan worktree directories.
|
||||
|
||||
A directory under `.worktrees/` that survives with a *dangling* `.git` pointer — present on disk, but the `.git/worktrees/<name>` admin entry it references is gone — is invisible to `git worktree list` and untouched by `git worktree prune`, yet collides with a freshly generated worktree name. When the executor then tries to clean up the "conflict", `git worktree remove --force` fails with `is not a working tree` and the whole `execute` node fails after 3 attempts.
|
||||
|
||||
- **On-demand recovery (`executor.ts`):** the FN-4813 stale-conflict recovery now also treats `is not a working tree` and `ENOENT` (not just `validation failed, cannot remove working tree`) as "no live worktree at this path" — it prunes any admin entry, force-removes the leftover directory, and proceeds with fresh worktree creation instead of failing.
|
||||
- **Leak prevention (`worktree-pool.ts`):** `reapOrphanWorktrees` previously skipped any dir on the mere *presence* of a `.git` file ("may be partially registered"), contradicting its own documented invariant. It now resolves the `.git` pointer and only skips when the gitdir target actually exists; a dangling pointer is reaped like any other half-initialized orphan, so these directories no longer accumulate across runs.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix the global pause/resume failure mode that stalled the board: a pause-abort that left a task back in `todo` was parked `status:"failed"` ("operator action required") and leaked its in-memory worktree slot, producing an instant re-fail retry storm and concurrency-starving the whole queue.
|
||||
|
||||
- Root cause: `handleGraphFailure` now treats a pause-abort that has re-queued a task to `todo` as benign (FN-6782) — it no longer parks it failed, clears the `pausedAborted` marker so the next dispatch starts clean, and releases the leaked worktree slot.
|
||||
- Auto-recovery: a new `recoverPausedAbortFailures` self-healing sweep clears any pause-abort park (`status:"failed"` with "operator action required") still on the board and requeues it for normal scheduling, so the board self-heals without operator intervention.
|
||||
- Defense-in-depth: a new `reapLeakedConcurrencySlots` self-healing sweep reclaims any in-memory worktree slot whose holder is no longer in-progress (the "in todo yet still a `maxWorktrees` holder" leak), gated by the executor's live-session refusal so it can never pull a worktree out from under a running agent. This recovers a leaked slot from any future/unknown path without an engine restart.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Stop edits to `scripts/lib/test-quarantine.json` from forcing `pnpm test` into gate mode. The quarantine list is runtime data, not executable test infra; tripping the shared-infra catch-all dropped affected-package coverage, so a dev's real changes went untested whenever they also touched the quarantine list. Quarantine edits now stay in changed mode and run the affected packages.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
"@fusion/core": patch
|
||||
---
|
||||
|
||||
Fix `reconcileOrphanedTaskDirs` silently resurrecting long-deleted tasks onto the live board after a restart ("all task IDs reset / starting over").
|
||||
|
||||
The sweep re-imports `.fusion/tasks/<id>/` directories that have no DB row, to recover heartbeat-created dirs that race store init or rows lost to a recent DB corruption. But it didn't distinguish a genuinely-recent orphan from an ancient deleted-task dir that merely lingered on disk. Modern deletes leave a soft-delete tombstone (caught by `taskIdExistsAnywhere`), but legacy hard-deletes left no tombstone — so a months-old `task.json` with no DB row was re-imported as a live task, surfacing old low-numbered IDs (FN-001, FN-002, …) at the top of the board.
|
||||
|
||||
Reconcile now gates recovery on a recency window (`task.json` modified within the last 7 days). Older orphan dirs are skipped with reason `stale-orphan-dir-beyond-recency-window` and left for explicit recovery (unarchive/restore) or directory cleanup, while heartbeat-race and recent-corruption recovery still work.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix the task detail chat always showing "No agent is working on this task" for in-progress tasks. The active-session check required a persistent `assignedAgentId`/`checkedOutBy`, but in the default ephemeral-agents mode the scheduler never sets those fields, so an actively-executing task always read as idle. An assignment is now sufficient-but-not-necessary: a non-blocked, non-`queued` in-progress task counts as a live agent session on its own (`queued` stays assignment-gated, in-review is unchanged).
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
"@fusion/core": patch
|
||||
---
|
||||
|
||||
Harden the orphan-worktree and stale-task-dir cleanup fixes (code-review follow-up).
|
||||
|
||||
- **executor.ts (P0):** the stale-conflict recovery's `rm(worktreePath, { recursive, force })` had no bounds check. `worktreePath` can originate from a git worktree admin entry that resolves outside `.worktrees/`, so an out-of-bounds or symlinked path could be force-removed. The recovery now refuses unless the path is inside the configured worktrees dir, is not a symlink (checked via `realpathSync`), is not a registered git worktree, and is not actively owned — and it re-verifies liveness inside the catch rather than trusting the error string. It also excludes `spawn` failures (e.g. `spawn git ENOENT` when git is missing) so a missing-binary error is no longer misread as a successful stale-path cleanup.
|
||||
- **worktree-pool.ts:** `resolveGitdirPointer` is replaced by `dotGitPointerIsDangling`, which reaps **only** when a `.git` link's gitdir target is confirmed missing. A real `.git` directory, an unparseable pointer, or any read/stat failure now returns "not dangling" (conservative) so a transient read error on a live worktree's `.git` can't cause a force-remove. Removes the `string | "directory" | null` sentinel union.
|
||||
- **core store.ts:** the `reconcileOrphanedTaskDirs` recency window is now bypassed when the live task table is empty (the corruption/restore case — surviving `task.json` files keep old mtimes), and when a corrupt `fusion.db` was auto-recovered on startup, so `.recover` row loss is not stranded by the gate. Adds an `ignoreRecencyWindow` option for explicit callers.
|
||||
- Tests for all of the above: executor recovery + out-of-bounds refusal, unparseable `.git` skip, recency boundary, empty-DB/forced bypass.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Track real plugin activation events and surface project-scoped Command Center plugin activation analytics instead of placeholder ecosystem counts.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add the `fn_agent_set_instructions` extension tool so managing agents can update direct or indirect reports' inline or file-backed instructions with org-hierarchy authorization.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Move the Command Center Overview SDLC throughput funnel to the bottom of the tab and broaden hand-rolled chart primitive colors to cycle through existing semantic theme tokens.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add a Command Center GitHub resolved-issues detail list and expose the resolved issue rows in the GitHub analytics endpoint payload and CSV export.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix Command Center Activity trend charts so mixed-unit agent/activity series stay visually legible instead of being flattened by high-volume message counts.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Recover in-progress tasks wedged behind stale in-memory executor bindings by clearing the phantom binding and requeueing with progress and worktree preserved.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix terminal shortcut focus preservation so on-screen Ctrl combinations emit control bytes reliably on touch and pointer devices while keeping physical Ctrl behavior intact.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add the `xhigh` reasoning effort level to model settings and task/agent selectors. Claude CLI adapters pass the value through to runtime mapping, where non-Opus models use `high` effort and Opus models use `max` effort.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Rebaseline the dashboard i18n lint guardrail by excluding non-shipping tests and stories, suppressing technical token categories, localizing plugin missing-view copy, and tracking remaining source-copy deferrals with narrow follow-up tasks.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add a built-in lead-generation workflow with custom lead columns, fields, and stage prompts.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add a built-in Design workflow that gates UI-heavy work with a design/UX review before standard review and merge.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add a built-in Marketing workflow with content-specific columns and prompts for brief, drafting, editorial review, and publishing.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix mobile bottom tab navigation icon spacing so every tab uses an equal-width column across optional tabs, badges, and status dots.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Make the Agents view sidebar wider by default on tablet and resizable with per-project persistence on non-mobile layouts.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Localize remaining plugin, agent, mission, node, research, document, activity, and miscellaneous dashboard strings and remove their i18n lint deferrals.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Localized the dashboard workflow/task/setup/PR component cluster and removed the obsolete i18n lint deferrals for those files so the hardcoded-string guardrail scans them again.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Keep settings section dashboard copy covered by i18n lint by removing the settings/sections deferral and regenerating i18n resource types.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Eliminate the legacy board flash before workflow lanes load by caching per-project board workflow metadata and showing a neutral skeleton while metadata resolves.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add a core artifact registry data model and store APIs for persisted artifact metadata with on-disk binary storage.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Keep Command Center inline next to Agents across desktop and tablet header widths instead of moving it into the More views overflow menu.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Repair task-store startup and self-healing consistency by non-destructively re-importing orphaned live `.fusion/tasks/{ID}/task.json` records into the SQLite task index while preserving soft-deleted, archived, and tombstoned IDs.
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix dependency gating so workflow-graph and workflow-authoritative executor dispatches re-check unmet task dependencies before running, requeueing blocked work with `blockedBy` instead of allowing it to advance to review.
|
||||
|
||||
Add self-healing reconciliation for already-advanced `in-review` tasks with unmet dependencies, including the `task:reconcile-in-review-unmet-dependencies` run-audit event and guarded no-action companion.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Recover benign in-review pause/resume abort parks without requiring operator intervention while preserving hard-cancel, pause, and terminal merge safeguards.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Harden in-review dependency drift reconciliation so guard-held or failed rebounds emit no-action audit evidence instead of silently wedging dependent tasks.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix mobile bottom navigation icon alignment so unread indicators use a centered token-sized icon slot without visually skewing tab spacing.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Prevent bundled Droid and Claude CLI auth/presence probes from surfacing unhandled promise rejections when `spawn` throws synchronously, such as when test guards block real AI CLI auth commands. These probes now resolve as unavailable/unauthenticated instead of rejecting from fire-and-forget validation paths.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Fix the experimental left sidebar Settings button so it remains clear of the fixed executor status footer, and keep project-selector fallback labels readable when translations are incomplete.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Stop triage and planning prompts from auto-selecting alternate workflows based on task type; agents now preserve the project default workflow unless the user explicitly requests a specific workflow.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Await CLI extension cached TaskStore shutdown so deferred filesystem writes and SQLite handles drain before fixture or process cleanup.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Revalidate dashboard service-worker assets before falling back to cache so rebuilt tabs cannot stay on stale bundles and render a blank page.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add estimated human hours saved to Command Center Productivity analytics, UI stats, and CSV exports.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Raise the minimum agent heartbeat staleness floor from 5 to 10 minutes. Agents go silent during long-running but legitimate work (notably a verification step running a multi-minute test command, where the agent is blocked awaiting the command and cannot tick/heartbeat). The 5-minute floor could misread such a busy agent as dead and reclaim its in-progress task mid-run; 10 minutes gives long operations room before the liveness gate acts.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Start the AI engine by default in `pnpm local`, keep dashboard `--dev` engine-on unless `--no-engine` is passed, start desktop local runtimes with engines, and show dashboard instructions when Fusion is launched without an engine.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Sync workflow setting values across nodes in settings push, pull, receive, and status flows.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Carry the selected workflow lane through Planning Mode and Subtask Breakdown task creation so saved tasks appear on the active workflow instead of falling back to the main board.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Preserve task progress when a single-session run is hard-cancelled mid-execution. When the engine aborted in-flight work and bounced the task back to `todo`, the single-session teardown cleared the task `branch` and re-queued without `preserveResumeState` — resetting every step to `pending` and dropping the pointer to commits already on the task branch, so the next dispatch re-planned from Step 0 and the committed work was stranded (observed as a task that "lost all progress" and got stuck). The teardown now keeps the branch and moves with `preserveResumeState` whenever the task has resumable step progress, matching the step-session and pause-park paths, so execution resumes onto the existing branch from the first incomplete step. The worktree is still removed to free its concurrency slot — only the durable pointers (branch + step state) are kept.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Close the validator reaper→slice deadlock and harden every validation re-drive site for the new behavioral-verification posture. A reaped, task-less "done" feature (left in `loopState="validating"`/`needs_fix`+`error`) is now re-driven by recovery to a terminal pass/fail/inconclusive verdict instead of livelocking the slice, milestone, and mission. Adds an adversarial reliability suite enumerating every re-drive entry point (normal `processTaskOutcome`, each `recoverActiveMissions` branch, and the stale-run reaper) and asserting source-tree git-cleanliness, zero duplicate Fix Features, a terminal verdict, and no `error`-state deadlock. Documents the non-mutating verification run, the first-class `inconclusive` verdict, and the adversarial default-to-fail posture across `docs/missions.md`, `docs/missions-completion-contract.md`, and `CONCEPTS.md`.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add Shadcn color-variant dashboard themes for blue, green, red, purple, pink, orange, yellow, mono, and black variants.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add a Shadcn dashboard color theme with zinc neutral tokens, sans-serif typography, 1px borders, subtle flat shadows, and solid primary buttons.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add a Shadcn Gray dashboard color theme with a fully neutral zinc-gray accent.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Smooth the mobile Quick Chat fullscreen sheet during Android soft-keyboard viewport resizing while preserving synchronous iOS visualViewport alignment.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add Command Center Productivity task-duration analytics, dashboard stat cards, and CSV export rows for completed-task active execution time.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Reset a task's stuck-kill streak on genuine forward progress. `stuckKillCount` was a lifetime counter — incremented by self-healing on each stuck-kill and cleared only by a manual retry — so a long, genuinely-progressing task could be terminalized by accumulation toward the stuck-kill budget. It now resets when a step reaches a terminal forward status (done/skipped), so only consecutive no-progress stalls count toward the budget.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Add workflow optional steps: workflows can declare optional step templates that tasks toggle on/off per task, with a workflow-level default. The built-in coding and stepwise-coding workflows expose agent browser verification as an optional step (the stepwise workflow gains a pre-merge workflow-step seam so enabled steps actually run). Optional steps are authorable in the node editor, preserved across node-editor saves, and selectable from a steps dropdown in both the quick-add card and the full New Task modal.
|
||||
@@ -221,7 +221,7 @@ Scoped exception (FN-5819): shared-branch-group members (`branchContext.assignme
|
||||
|
||||
### Lazy-Loaded Heavy Views
|
||||
|
||||
These 21 views are lazy-loaded via `React.lazy()` with `<Suspense fallback={null}>`.
|
||||
These 20 views are lazy-loaded via `React.lazy()` with `<Suspense fallback={null}>`.
|
||||
Keep this AGENTS inventory in sync with App lazy imports, AppModals lazy modal imports (`SettingsModal`, `WorkflowNodeEditor`, `SetupWizardModal`), and `packages/dashboard/app/__tests__/lazy-loaded-views-docs.test.ts`.
|
||||
|
||||
- `AgentsView`
|
||||
@@ -237,7 +237,6 @@ Keep this AGENTS inventory in sync with App lazy imports, AppModals lazy modal i
|
||||
- `EvalsView`
|
||||
- `TodoView`
|
||||
- `GoalsView`
|
||||
- `StashRecoveryView`
|
||||
- `PullRequestView`
|
||||
- `SetupWizardModal`
|
||||
- `SettingsModal`
|
||||
@@ -246,6 +245,8 @@ Keep this AGENTS inventory in sync with App lazy imports, AppModals lazy modal i
|
||||
- `PiExtensionsManager`
|
||||
- `AgentDetailView`
|
||||
|
||||
Note: the embedded main-content views Workflows (`_WorkflowEditorView`), Import Tasks (`_ImportTasksView`), Automations (`_AutomationsView`), and Settings (`_SettingsView`) in App.tsx are `_`-prefixed lazy splits that reuse already-documented chunks. They are intentionally excluded from the curated list above and from the count; `lazy-loaded-views-docs.test.ts` filters out `_`-prefixed lazy consts (`extractAppLazyViews`), so do not add them as bullets.
|
||||
|
||||
## FNXC_LOG comments:
|
||||
- Please whenever you're working on a codebase. I want you to add comments describing the date of the change (must be in this format yyyy-MM-dd-hh:mm) and describing the requirements or the change in requirements that made you implement certain functionality.
|
||||
- I want you to write FNXC:Area-of-product in front of all your comments so they can be grepped.
|
||||
|
||||
448
CHANGELOG.md
@@ -2,6 +2,420 @@
|
||||
|
||||
User-facing release notes aggregated across all packages. This file is auto-synced from each `packages/*/CHANGELOG.md` by `scripts/release.mjs` — do not edit by hand.
|
||||
|
||||
## 0.46.0
|
||||
|
||||
### @fusion/dashboard
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- @fusion/core@0.46.0
|
||||
- @fusion/engine@0.46.0
|
||||
- @fusion/i18n@0.39.9
|
||||
- @fusion-plugin-examples/cli-printing-press@0.1.26
|
||||
- @fusion-plugin-examples/compound-engineering@0.1.9
|
||||
- @fusion-plugin-examples/dependency-graph@0.1.40
|
||||
- @fusion-plugin-examples/roadmap@0.1.28
|
||||
- @fusion-plugin-examples/cursor-runtime@0.1.28
|
||||
- @fusion-plugin-examples/droid-runtime@0.1.35
|
||||
- @fusion-plugin-examples/hermes-runtime@0.2.59
|
||||
- @fusion-plugin-examples/openclaw-runtime@0.2.59
|
||||
- @fusion-plugin-examples/paperclip-runtime@0.2.59
|
||||
|
||||
### @fusion/desktop
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- @fusion/core@0.46.0
|
||||
- @fusion/dashboard@0.46.0
|
||||
- @fusion/engine@0.46.0
|
||||
|
||||
### @fusion/engine
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- @fusion/core@0.46.0
|
||||
- @fusion/pi-claude-cli@0.46.0
|
||||
|
||||
### @fusion/plugin-sdk
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- @fusion/core@0.46.0
|
||||
|
||||
### @runfusion/fusion
|
||||
|
||||
#### Minor Changes
|
||||
|
||||
- 41f3b04: Add a Command Center Productivity control for previewing and applying historical LOC backfills from the dashboard.
|
||||
- efb94c8: Add editable global model pricing overrides, a one-click LiteLLM pricing refresh, and override-aware Command Center cost estimates.
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- f6e9deb: Stop Planning Mode from automatically focusing the initial text entry when it opens, preventing mobile keyboards from appearing until the user explicitly focuses the textarea.
|
||||
- 466cf9c: Dispose completed spawned child agent sessions so execution memory is released promptly after `fn_spawn_agent` children finish, keep artifact registry listing metadata-only so large inline artifacts are not loaded during agent execution, bound structured tool-result log previews before serialization, reduce dashboard SSE keepalive churn, and keep the dashboard TUI performance timeline drained during long-running execution.
|
||||
- d06e316: Fix Command Center Recharts line and pie graphs rendering blank when their cards initially report unusable responsive dimensions.
|
||||
- a670f5c: Restore core task lifecycle compatibility for workflow-column transitions, deferred title summarization fixtures, workflow IR rollback persistence, and capacity-aware task movement.
|
||||
- fe536b2: Fix stale durable agent task assignments for tasks parked behind file-scope lease queues, including Reports Health Check rendering and self-healing reconciliation.
|
||||
- 736ec6d: Fix mobile mailbox message selection so stale deep links no longer override the user's selected message.
|
||||
- 945f0f1: Pass project fallback model settings into triage spec reviewer sessions so global default overrides are honored during review.
|
||||
|
||||
### runfusion.ai
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- Updated dependencies [f6e9deb]
|
||||
- Updated dependencies [466cf9c]
|
||||
- Updated dependencies [d06e316]
|
||||
- Updated dependencies [a670f5c]
|
||||
- Updated dependencies [fe536b2]
|
||||
- Updated dependencies [736ec6d]
|
||||
- Updated dependencies [945f0f1]
|
||||
- Updated dependencies [41f3b04]
|
||||
- Updated dependencies [efb94c8]
|
||||
- @runfusion/fusion@0.46.0
|
||||
|
||||
## 0.45.0
|
||||
|
||||
### @fusion/core
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- 26ebb92: Fix `reconcileOrphanedTaskDirs` silently resurrecting long-deleted tasks onto the live board after a restart ("all task IDs reset / starting over").
|
||||
|
||||
The sweep re-imports `.fusion/tasks/<id>/` directories that have no DB row, to recover heartbeat-created dirs that race store init or rows lost to a recent DB corruption. But it didn't distinguish a genuinely-recent orphan from an ancient deleted-task dir that merely lingered on disk. Modern deletes leave a soft-delete tombstone (caught by `taskIdExistsAnywhere`), but legacy hard-deletes left no tombstone — so a months-old `task.json` with no DB row was re-imported as a live task, surfacing old low-numbered IDs (FN-001, FN-002, …) at the top of the board.
|
||||
|
||||
Reconcile now gates recovery on a recency window (`task.json` modified within the last 7 days). Older orphan dirs are skipped with reason `stale-orphan-dir-beyond-recency-window` and left for explicit recovery (unarchive/restore) or directory cleanup, while heartbeat-race and recent-corruption recovery still work.
|
||||
|
||||
- 7e7eb62: Harden the orphan-worktree and stale-task-dir cleanup fixes (code-review follow-up).
|
||||
|
||||
- **executor.ts (P0):** the stale-conflict recovery's `rm(worktreePath, { recursive, force })` had no bounds check. `worktreePath` can originate from a git worktree admin entry that resolves outside `.worktrees/`, so an out-of-bounds or symlinked path could be force-removed. The recovery now refuses unless the path is inside the configured worktrees dir, is not a symlink (checked via `realpathSync`), is not a registered git worktree, and is not actively owned — and it re-verifies liveness inside the catch rather than trusting the error string. It also excludes `spawn` failures (e.g. `spawn git ENOENT` when git is missing) so a missing-binary error is no longer misread as a successful stale-path cleanup.
|
||||
- **worktree-pool.ts:** `resolveGitdirPointer` is replaced by `dotGitPointerIsDangling`, which reaps **only** when a `.git` link's gitdir target is confirmed missing. A real `.git` directory, an unparseable pointer, or any read/stat failure now returns "not dangling" (conservative) so a transient read error on a live worktree's `.git` can't cause a force-remove. Removes the `string | "directory" | null` sentinel union.
|
||||
- **core store.ts:** the `reconcileOrphanedTaskDirs` recency window is now bypassed when the live task table is empty (the corruption/restore case — surviving `task.json` files keep old mtimes), and when a corrupt `fusion.db` was auto-recovered on startup, so `.recover` row loss is not stranded by the gate. Adds an `ignoreRecencyWindow` option for explicit callers.
|
||||
- Tests for all of the above: executor recovery + out-of-bounds refusal, unparseable `.git` skip, recency boundary, empty-DB/forced bypass.
|
||||
|
||||
### @fusion/dashboard
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- Updated dependencies [26ebb92]
|
||||
- Updated dependencies [7e7eb62]
|
||||
- @fusion/core@0.45.0
|
||||
- @fusion/engine@0.45.0
|
||||
- @fusion/i18n@0.39.8
|
||||
- @fusion-plugin-examples/cli-printing-press@0.1.25
|
||||
- @fusion-plugin-examples/compound-engineering@0.1.8
|
||||
- @fusion-plugin-examples/dependency-graph@0.1.39
|
||||
- @fusion-plugin-examples/roadmap@0.1.27
|
||||
- @fusion-plugin-examples/cursor-runtime@0.1.27
|
||||
- @fusion-plugin-examples/droid-runtime@0.1.34
|
||||
- @fusion-plugin-examples/hermes-runtime@0.2.58
|
||||
- @fusion-plugin-examples/openclaw-runtime@0.2.58
|
||||
- @fusion-plugin-examples/paperclip-runtime@0.2.58
|
||||
|
||||
### @fusion/desktop
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- Updated dependencies [26ebb92]
|
||||
- Updated dependencies [7e7eb62]
|
||||
- @fusion/core@0.45.0
|
||||
- @fusion/dashboard@0.45.0
|
||||
- @fusion/engine@0.45.0
|
||||
|
||||
### @fusion/engine
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- Updated dependencies [26ebb92]
|
||||
- Updated dependencies [7e7eb62]
|
||||
- @fusion/core@0.45.0
|
||||
- @fusion/pi-claude-cli@0.45.0
|
||||
|
||||
### @fusion/plugin-sdk
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- Updated dependencies [26ebb92]
|
||||
- Updated dependencies [7e7eb62]
|
||||
- @fusion/core@0.45.0
|
||||
|
||||
### @runfusion/fusion
|
||||
|
||||
#### Minor Changes
|
||||
|
||||
- 26e5514: Add the `factory-mono` dashboard color theme, a monochrome Factory variant with red accents and neutralized glow effects.
|
||||
- 130fea2: Ask first-run users whether to create an optional first persistent agent after project registration, with CEO as the default template, skip support, and no duplicate GitHub star prompt.
|
||||
- 70cce18: Add the `fn_agent_set_instructions` extension tool so managing agents can update direct or indirect reports' inline or file-backed instructions with org-hierarchy authorization.
|
||||
- 8dd9697: Add an operator-triggered Command Center Productivity LOC backfill API and client for historical commit-association diff stats.
|
||||
- f13aaa1: Add a Command Center GitHub resolved-issues detail list and expose the resolved issue rows in the GitHub analytics endpoint payload and CSV export.
|
||||
- c158dda: Add the `xhigh` reasoning effort level to model settings and task/agent selectors. Claude CLI adapters pass the value through to runtime mapping, where non-Opus models use `high` effort and Opus models use `max` effort.
|
||||
- 52924ba: Add a built-in lead-generation workflow with custom lead columns, fields, and stage prompts.
|
||||
- 7f3e942: Add a built-in Design workflow that gates UI-heavy work with a design/UX review before standard review and merge.
|
||||
- 281ce35: Add a built-in Marketing workflow with content-specific columns and prompts for brief, drafting, editorial review, and publishing.
|
||||
- fbce59b: Add a core artifact registry data model and store APIs for persisted artifact metadata with on-disk binary storage.
|
||||
- af06170: Add `fn_artifact_register`, `fn_artifact_list`, and `fn_artifact_view` agent tools for publishing and discovering multi-type artifacts, with best-effort dashboard user inbox notifications on registration.
|
||||
- ef48895: Add dashboard artifact registry read APIs, client helpers, and a Documents-view Artifacts media gallery for images, videos, audio, documents, and generic artifacts.
|
||||
- 58f7588: Add a Shadcn Custom dashboard theme with persisted, sanitized design-token color picker overrides across Settings and Command Center theme selectors.
|
||||
- f80a785: Add pricing entries for OpenAI Codex models used through the `openai-codex` provider, so Command Center token analytics can estimate costs for Codex runs instead of showing them as unavailable.
|
||||
|
||||
This is marked minor because it expands the set of priced models surfaced by the published CLI/dashboard without changing existing pricing behavior.
|
||||
|
||||
- 09acfbb: Allow users to manually pause and unpause agent-assigned tasks from the dashboard task detail view and API.
|
||||
- 4fec139: Move Stash Recovery into the Git Manager Recovery tab and remove the standalone top-level Stash Recovery view from dashboard navigation.
|
||||
- 5b33da9: Move desktop toolbar tools into the right sidebar tools rail. The right dock now hosts Activity, Activity Log, Import from GitHub, Git Manager, Files, and Automation, and no longer duplicates left-sidebar content views.
|
||||
- 7034b55: Move the dashboard terminal launcher to the footer executor status bar and add docked plus floating resizable terminal modes on desktop/tablet while preserving mobile fullscreen terminal behavior.
|
||||
- a913881: Make the dashboard right dock persistent by default with an in-dock collapse toggle, and remove duplicate Header right-dock toggle behavior.
|
||||
- 7fd14eb: Rename the task detail Documents tab to Artifacts and add a task-scoped media artifact gallery alongside existing task documents.
|
||||
- 496167c: Polish dashboard navigation, floating modal, file browser, chat footer, agent role, insights, and list-view action surfaces for a more consistent responsive UI.
|
||||
- eb3477a: Add a Command Center System node selector so local and registered remote node telemetry can be inspected from the dashboard.
|
||||
- 59d3eee: Add estimated human hours saved to Command Center Productivity analytics, UI stats, and CSV exports.
|
||||
- 2dc36d9: Import Tasks PR preview now shows the full comment thread and per-check status (with success/failure/pending indicators) for the selected pull request, fetched on selection and cached per PR. The body still renders immediately while checks and comments stream in.
|
||||
- 7ef3817: Start the AI engine by default in `pnpm local`, keep dashboard `--dev` engine-on unless `--no-engine` is passed, start desktop local runtimes with engines, and show dashboard instructions when Fusion is launched without an engine.
|
||||
- 7ddf58d: Sync workflow setting values across nodes in settings push, pull, receive, and status flows.
|
||||
- 8640a74: The shared markdown renderer (GitHub PR/issue bodies + comments, mailbox, chat) now renders embedded raw HTML and mermaid diagrams. Raw HTML (`<details>`/`<summary>`, `<kbd>`, `<sub>`, tables) renders as real elements via `rehype-raw`, with `rehype-sanitize` stripping XSS (script/style/iframe, event handlers, `javascript:` URLs) since these bodies come from GitHub; HTML comments (`<!-- -->`) are dropped. Fenced ```mermaid blocks render as actual diagrams via a lazy-loaded `mermaid` import (kept out of the main bundle, loaded only when a diagram is present), falling back to the raw code block on parse error and following the dashboard theme.
|
||||
- 4fd8d44: Polish dashboard navigation and app chrome, add responsive chat/file/modal behavior, refine roadmaps, missions, task details, workflow defaults, theme defaults, and sidebar/header styling.
|
||||
- 91180fb: Close the validator reaper→slice deadlock and harden every validation re-drive site for the new behavioral-verification posture. A reaped, task-less "done" feature (left in `loopState="validating"`/`needs_fix`+`error`) is now re-driven by recovery to a terminal pass/fail/inconclusive verdict instead of livelocking the slice, milestone, and mission. Adds an adversarial reliability suite enumerating every re-drive entry point (normal `processTaskOutcome`, each `recoverActiveMissions` branch, and the stale-run reaper) and asserting source-tree git-cleanliness, zero duplicate Fix Features, a terminal verdict, and no `error`-state deadlock. Documents the non-mutating verification run, the first-class `inconclusive` verdict, and the adversarial default-to-fail posture across `docs/missions.md`, `docs/missions-completion-contract.md`, and `CONCEPTS.md`.
|
||||
- da5fea6: Add Shadcn color-variant dashboard themes for blue, green, red, purple, pink, orange, yellow, mono, and black variants.
|
||||
- e19f7c2: Add a Shadcn dashboard color theme with zinc neutral tokens, sans-serif typography, 1px borders, subtle flat shadows, and solid primary buttons.
|
||||
- b20a25c: Add the `shadcn-gray-blue` dashboard color theme with slate blue-gray surfaces and a muted slate-blue accent.
|
||||
- 4672203: Add a Shadcn Gray dashboard color theme with a fully neutral zinc-gray accent.
|
||||
- 12aae94: Add Shadcn Mono Red/Blue/Green/Purple/Pink/Orange/Yellow dashboard color themes and migrate legacy `shadcn-mono` selections to `shadcn-mono-red`.
|
||||
- dc0064b: Dashboard navigation and panel redesign (desktop/tablet; mobile unchanged):
|
||||
|
||||
- **Right sidebar**: a single show/hide toggle now lives in the top header (replacing the tablet overflow menu); the dock is hidden when closed and no longer keeps a persistent icon rail or in-dock collapse button. Its tools (Files — now the default/first tab, Activity, Activity Log, Git Manager) render inline inside the dock instead of opening popup modals. Files opens inline with a pop-out to the resizable file modal. The embedded Git Manager adapts to its width (compact horizontal tab strip in the dock, full two-pane in the wide pop-out). The dependency graph no longer appears in the dock.
|
||||
- **Left sidebar**: New Task button matches the item-highlight box; footer spacing between Collapse and Settings; divider before the secondary section removed with uniform row spacing. New main-content destinations — Workflows, Import Tasks (GitHub import, with the GitHub mark), and Automations (two-pane, Command Center styling) — render in the main panel instead of as modals.
|
||||
- **Embedded views**: Planning Mode embeds without modal chrome (no header/close/shadow), fills the full content area, and renders correctly on mobile; the board WorkflowSwitcher is available in Planning. Dev Server header matches Command Center. Insights header wraps so actions don't overlap. List view's left pane can be dragged much narrower with two-line title wrapping.
|
||||
- **Other**: the docked terminal no longer blurs or blocks the page behind it; the footer Terminal button renders as plain text like the running-state trigger; the workflow selector matches the project selector's styling, height, and font size; the Automations screen uses theme color tokens.
|
||||
|
||||
- 5697d2c: Skills view detail pane: render SKILL.md as Markdown (GFM + sanitized HTML + mermaid), compact the referenced-files area while showing all files, and make each file clickable to view its content with a "Back to SKILL.md" affordance. Adds a `GET /api/skills/:id/file` endpoint for per-file content.
|
||||
- 5117944: Add Command Center Productivity task-duration analytics, dashboard stat cards, and CSV export rows for completed-task active execution time.
|
||||
- d4e91d4: Add workflow optional steps: workflows can declare optional step templates that tasks toggle on/off per task, with a workflow-level default. The built-in coding and stepwise-coding workflows expose agent browser verification as an optional step (the stepwise workflow gains a pre-merge workflow-step seam so enabled steps actually run). Optional steps are authorable in the node editor, preserved across node-editor saves, and selectable from a steps dropdown in both the quick-add card and the full New Task modal.
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- c8a82e7: Auto-continue the agent session after an engine-internal pause/resume abort instead of re-queueing the task to todo. When the engine tears down in-flight work (hard-cancel) and the workflow graph run ends with the task back in `todo`, the executor now retries the agent session in place — bounded by the existing graph-resume retry budget with backoff, falling back to a benign re-queue only after retries are exhausted. Before re-dispatching, it re-checks the task at fire time and aborts the auto-continue if the task was paused, moved, or deleted during the backoff window, so genuine user/global/task pauses are never resumed against the operator's intent. The transient reclassification clears any stale `failed` status and emits an `Auto-recovered:` log so no spurious failure notification fires.
|
||||
- ee9c8ab: Align dashboard view chrome and inner-pane spacing across Chat, Mailbox, Workflows, Artifacts-adjacent controls, Goals, and Compound Engineering.
|
||||
- ce6c0fb: Polish dashboard view chrome: align Dashboard, Import Tasks, Automations, Chat, and docked Files editor controls with the shared view header and toolbar styling.
|
||||
- 7635ba8: Fix a false "engine not running" banner when another fusion process on the same machine already owns the engine. The dashboard's health check only counted engines this process started, so a second launch (e.g. `pnpm dev dashboard` alongside an already-running `fusion`) that was correctly refused the per-machine engine singleton lock reported the engine as unavailable — even though one was running. The `ProjectEngineManager` now tracks engines owned by another process (detected via `EngineAlreadyRunningError` from the singleton lock) and exposes `hasRunningEngine()`, which the dashboard health endpoint uses so the banner reflects machine-level truth. Reconciliation still retries so this process takes over if the other exits, and the "refusing to start" log is emitted once per project instead of on every reconciliation tick.
|
||||
- ce90cc9: Keep Fusion verification progress moving by making targeted script tests honor file arguments, reaping verification subprocess groups after clean exits, and preventing the line-count audit from blocking `pnpm test`. The changed-test runner now caps reverse-dependent fan-out so a foundational-package edit no longer expands into a whole-workspace run, and the executor/verification guidance now directs agents to scope verification to changed files rather than running the full workspace test suite.
|
||||
- 5a422b0: Fix anthropic-compatible custom providers failing with "No API provider registered for api: anthropic".
|
||||
|
||||
`resolveCustomProviderApiType` mapped the `anthropic-compatible` provider type to the api key `"anthropic"`, but pi-ai registers the Anthropic Messages API under `"anthropic-messages"`. Any custom provider configured as `anthropic-compatible` (self-hosted Claude proxy, gateway, etc.) therefore selected a model whose `api` did not match a registered provider and threw at stream time. Mapped it to `"anthropic-messages"` and added a regression assertion alongside the existing openai-compatible / openai-responses coverage.
|
||||
|
||||
- 2d32760: Clear the stale `failed` status when a pause/resume abort is reclassified as a benign todo re-queue, so the task no longer surfaces as failed on the board and the deferred failure notification is suppressed. Previously a pause-abort parked `status:"failed"` on an earlier non-todo observation stayed dispatchable (the scheduler filters on column+paused, not status), re-entered the benign-todo branch, and was logged benign while the row stayed failed — firing a contradictory failure alert during global pause when self-healing recovery was suppressed. The clear path also emits an `Auto-recovered:`-prefixed log so the notification service proactively cancels the pending failure timer instead of relying only on the fire-time re-check.
|
||||
- b564ee0: Make the compound-engineering built-in workflow actually load skills and run the full CE flow. Previously the workflow named CE skills at each node but the graph-node execution path (`runGraphCustomNode`) never loaded them: the named skill was only injected as prompt text, the plugin-injected `FUSION_CE_*` runtime env never reached the step session, and `fn_spawn_agent` was never registered for workflow steps, so persona fan-out and skill loading silently no-op'd. Now skill-executor graph steps thread the injected env, load the named skill (discovery + selection via `additionalSkillPaths`), register the spawn tool in coding mode, and receive an engine-injected Fusion workflow-step conventions preamble (await-input for questions, `FUSION_HEADLESS` degrade path, persona fan-out via `systemPromptOverride`). Adds an explicit `unattended` opt-in for `FUSION_HEADLESS`, reconciles the preamble with the gate verdict-JSON contract, and carries `skillName` through the `WorkflowStep` round-trip.
|
||||
- 8b5b9a7: Fix the persistent non-blocking Full Suite failure caused by the Compound Engineering plugin's `dist-freshness.test.ts`. The test reads the plugin's compiled `dist/settings.js` and `dist/session/orchestrator.js`, but the plugin had no `pretest` build and was absent from `ensure-test-artifacts.mjs`, so on a fresh checkout `dist/` did not exist and the freshness guard threw "dist/ is missing — run pnpm build first". Register the plugin's required artifacts in `ensure-test-artifacts.mjs` and add a `pretest` hook that builds them, matching the other bundled plugins.
|
||||
- 68c4053: Fix the Droid runtime model discovery spawning a runaway storm of leaked `droid` processes.
|
||||
|
||||
`discoverDroidModels` invoked `droid models --json` / `droid model list --json`, but the droid CLI has no such commands — an unknown subcommand is parsed as a _prompt_, so each call launched a full agent session (a persistent `droid exec --stream-jsonrpc` backend) that never exited. The promise never settled and the process leaked; because the dashboard re-loads the droid extension on every chat-send, these piled up into dozens of orphaned `droid` processes.
|
||||
|
||||
Discovery now reads the catalog from `droid exec --help` (which lists `Available Models:` + `Custom Models:` and exits cleanly), parsed via the new `parseDroidModelsFromHelp` helper. A SIGKILL-on-timeout guard (`DROID_MODEL_DISCOVERY_TIMEOUT_MS`) ensures any wedged spawn is killed and the promise always settles, so a single discovery call can never leak a process again. Verified end-to-end against the real binary (46 models incl. custom, 0 leaked processes).
|
||||
|
||||
- 9101705: Show plugin-contributed skills (e.g. compound-engineering `ce-*`) in the workflow editor. The dashboard's discovered-skills catalog was built only from the disk-scanning package manager, so plugin skills — which the engine materializes for executor sessions separately — never appeared, and built-in workflow nodes that reference them (like `builtin:compound-engineering`) showed "— select skill —" / unresolved. The skills adapter now merges plugin skill contributions into the discovered list (deduped by bare name), and the editor's node summary + skill dropdown match namespaced skillNames (`compound-engineering:ce-work`) against the catalog's two-segment names (`ce-work/SKILL.md`) via a shared bare-name normalizer.
|
||||
- 3b61ac3: Fix loading spinners that didn't spin across the dashboard. Many loading states (Settings, task tabs, agents, documents, plugins, model pickers, command center, and more) rendered bare "Loading…" text with no spinner — and a couple rendered an unstyled `loading-spinner` div that never showed anything. Added a shared `<LoadingSpinner>` component (self-contained animated SVG, no `lucide-react` dependency so it survives partial test mocks) and adopted it across ~45 loading placeholders so every loading state now shows a consistent animated spinner.
|
||||
- d99246c: Fix macOS system memory usage reporting by deriving host memory used from OS-available memory instead of raw `os.freemem()` pages.
|
||||
- 438cd75: Fix worktree-creation failures (and the `Workflow graph terminated with failure at node 'execute'` they surface as) caused by leaked orphan worktree directories.
|
||||
|
||||
A directory under `.worktrees/` that survives with a _dangling_ `.git` pointer — present on disk, but the `.git/worktrees/<name>` admin entry it references is gone — is invisible to `git worktree list` and untouched by `git worktree prune`, yet collides with a freshly generated worktree name. When the executor then tries to clean up the "conflict", `git worktree remove --force` fails with `is not a working tree` and the whole `execute` node fails after 3 attempts.
|
||||
|
||||
- **On-demand recovery (`executor.ts`):** the FN-4813 stale-conflict recovery now also treats `is not a working tree` and `ENOENT` (not just `validation failed, cannot remove working tree`) as "no live worktree at this path" — it prunes any admin entry, force-removes the leftover directory, and proceeds with fresh worktree creation instead of failing.
|
||||
- **Leak prevention (`worktree-pool.ts`):** `reapOrphanWorktrees` previously skipped any dir on the mere _presence_ of a `.git` file ("may be partially registered"), contradicting its own documented invariant. It now resolves the `.git` pointer and only skips when the gitdir target actually exists; a dangling pointer is reaped like any other half-initialized orphan, so these directories no longer accumulate across runs.
|
||||
|
||||
- 9643563: Fix the global pause/resume failure mode that stalled the board: a pause-abort that left a task back in `todo` was parked `status:"failed"` ("operator action required") and leaked its in-memory worktree slot, producing an instant re-fail retry storm and concurrency-starving the whole queue.
|
||||
|
||||
- Root cause: `handleGraphFailure` now treats a pause-abort that has re-queued a task to `todo` as benign (FN-6782) — it no longer parks it failed, clears the `pausedAborted` marker so the next dispatch starts clean, and releases the leaked worktree slot.
|
||||
- Auto-recovery: a new `recoverPausedAbortFailures` self-healing sweep clears any pause-abort park (`status:"failed"` with "operator action required") still on the board and requeues it for normal scheduling, so the board self-heals without operator intervention.
|
||||
- Defense-in-depth: a new `reapLeakedConcurrencySlots` self-healing sweep reclaims any in-memory worktree slot whose holder is no longer in-progress (the "in todo yet still a `maxWorktrees` holder" leak), gated by the executor's live-session refusal so it can never pull a worktree out from under a running agent. This recovers a leaked slot from any future/unknown path without an engine restart.
|
||||
|
||||
- 24ff124: Stop edits to `scripts/lib/test-quarantine.json` from forcing `pnpm test` into gate mode. The quarantine list is runtime data, not executable test infra; tripping the shared-infra catch-all dropped affected-package coverage, so a dev's real changes went untested whenever they also touched the quarantine list. Quarantine edits now stay in changed mode and run the affected packages.
|
||||
- a2342ca: Fix the task detail chat always showing "No agent is working on this task" for in-progress tasks. The active-session check required a persistent `assignedAgentId`/`checkedOutBy`, but in the default ephemeral-agents mode the scheduler never sets those fields, so an actively-executing task always read as idle. An assignment is now sufficient-but-not-necessary: a non-blocked, non-`queued` in-progress task counts as a live agent session on its own (`queued` stays assignment-gated, in-review is unchanged).
|
||||
- 7e7eb62: Harden the orphan-worktree and stale-task-dir cleanup fixes (code-review follow-up).
|
||||
|
||||
- **executor.ts (P0):** the stale-conflict recovery's `rm(worktreePath, { recursive, force })` had no bounds check. `worktreePath` can originate from a git worktree admin entry that resolves outside `.worktrees/`, so an out-of-bounds or symlinked path could be force-removed. The recovery now refuses unless the path is inside the configured worktrees dir, is not a symlink (checked via `realpathSync`), is not a registered git worktree, and is not actively owned — and it re-verifies liveness inside the catch rather than trusting the error string. It also excludes `spawn` failures (e.g. `spawn git ENOENT` when git is missing) so a missing-binary error is no longer misread as a successful stale-path cleanup.
|
||||
- **worktree-pool.ts:** `resolveGitdirPointer` is replaced by `dotGitPointerIsDangling`, which reaps **only** when a `.git` link's gitdir target is confirmed missing. A real `.git` directory, an unparseable pointer, or any read/stat failure now returns "not dangling" (conservative) so a transient read error on a live worktree's `.git` can't cause a force-remove. Removes the `string | "directory" | null` sentinel union.
|
||||
- **core store.ts:** the `reconcileOrphanedTaskDirs` recency window is now bypassed when the live task table is empty (the corruption/restore case — surviving `task.json` files keep old mtimes), and when a corrupt `fusion.db` was auto-recovered on startup, so `.recover` row loss is not stranded by the gate. Adds an `ignoreRecencyWindow` option for explicit callers.
|
||||
- Tests for all of the above: executor recovery + out-of-bounds refusal, unparseable `.git` skip, recency boundary, empty-DB/forced bypass.
|
||||
|
||||
- 87f18f8: Track real plugin activation events and surface project-scoped Command Center plugin activation analytics instead of placeholder ecosystem counts.
|
||||
- ee72c94: Move the Command Center Overview SDLC throughput funnel to the bottom of the tab and broaden hand-rolled chart primitive colors to cycle through existing semantic theme tokens.
|
||||
- 8f052c6: Fix Command Center Activity trend charts so mixed-unit agent/activity series stay visually legible instead of being flattened by high-volume message counts.
|
||||
- df139ec: Recover in-progress tasks wedged behind stale in-memory executor bindings by clearing the phantom binding and requeueing with progress and worktree preserved.
|
||||
- e6f6111: Fix terminal shortcut focus preservation so on-screen Ctrl combinations emit control bytes reliably on touch and pointer devices while keeping physical Ctrl behavior intact.
|
||||
- d4d7623: Rebaseline the dashboard i18n lint guardrail by excluding non-shipping tests and stories, suppressing technical token categories, localizing plugin missing-view copy, and tracking remaining source-copy deferrals with narrow follow-up tasks.
|
||||
- 98720f3: Fix mobile bottom tab navigation icon spacing so every tab uses an equal-width column across optional tabs, badges, and status dots.
|
||||
- c4f34ce: Make the Agents view sidebar wider by default on tablet and resizable with per-project persistence on non-mobile layouts.
|
||||
- b760fa0: Localize remaining plugin, agent, mission, node, research, document, activity, and miscellaneous dashboard strings and remove their i18n lint deferrals.
|
||||
- bdf95f8: Localized the dashboard workflow/task/setup/PR component cluster and removed the obsolete i18n lint deferrals for those files so the hardcoded-string guardrail scans them again.
|
||||
- eca96fb: Keep settings section dashboard copy covered by i18n lint by removing the settings/sections deferral and regenerating i18n resource types.
|
||||
- c808177: Eliminate the legacy board flash before workflow lanes load by caching per-project board workflow metadata and showing a neutral skeleton while metadata resolves.
|
||||
- 0c0fda1: Keep Command Center inline next to Agents across desktop and tablet header widths instead of moving it into the More views overflow menu.
|
||||
- c32c925: Repair task-store startup and self-healing consistency by non-destructively re-importing orphaned live `.fusion/tasks/{ID}/task.json` records into the SQLite task index while preserving soft-deleted, archived, and tombstoned IDs.
|
||||
- d2fc70a: Fix dependency gating so workflow-graph and workflow-authoritative executor dispatches re-check unmet task dependencies before running, requeueing blocked work with `blockedBy` instead of allowing it to advance to review.
|
||||
|
||||
Add self-healing reconciliation for already-advanced `in-review` tasks with unmet dependencies, including the `task:reconcile-in-review-unmet-dependencies` run-audit event and guarded no-action companion.
|
||||
|
||||
- 08d1f09: Recover benign in-review pause/resume abort parks without requiring operator intervention while preserving hard-cancel, pause, and terminal merge safeguards.
|
||||
- 61ff17a: Harden in-review dependency drift reconciliation so guard-held or failed rebounds emit no-action audit evidence instead of silently wedging dependent tasks.
|
||||
- 26bd85d: Fix mobile bottom navigation icon alignment so unread indicators use a centered token-sized icon slot without visually skewing tab spacing.
|
||||
- 37c4cfa: Prevent bundled Droid and Claude CLI auth/presence probes from surfacing unhandled promise rejections when `spawn` throws synchronously, such as when test guards block real AI CLI auth commands. These probes now resolve as unavailable/unauthenticated instead of rejecting from fire-and-forget validation paths.
|
||||
- 185ff70: Fix the experimental left sidebar Settings button so it remains clear of the fixed executor status footer, and keep project-selector fallback labels readable when translations are incomplete.
|
||||
- c7b56a5: Stop triage and planning prompts from auto-selecting alternate workflows based on task type; agents now preserve the project default workflow unless the user explicitly requests a specific workflow.
|
||||
- c18e827: Await CLI extension cached TaskStore shutdown so deferred filesystem writes and SQLite handles drain before fixture or process cleanup.
|
||||
- 8c478ad: Fix stale board entries after dependency-driven task re-specification moves by syncing the watched task cache after `updateTaskDependencies` writes and defensively deduplicating `listTasks` rows so active task rows win over archived snapshots.
|
||||
- 47ba99a: Bump the internal @earendil-works pi SDK family from ^0.79.1 to ^0.79.9 for the CLI, dashboard, and engine packages.
|
||||
- 24c1c02: Fix dashboard toast text colors so Shadcn dark-mode success, info, and error notifications remain readable against their themed backgrounds.
|
||||
- 1f23a2e: Ensure bundled Droid CLI provider startup registers without waiting for local `droid` probes and harden binary probes so missing, guarded, or hanging spawns resolve to unavailable sentinels instead of delaying engine boot.
|
||||
- 15d427b: Move Planning Mode into the dashboard sidebar as a first-class embedded view while removing the desktop toolbar affordance.
|
||||
- 91971b6: Update the built-in compound-engineering workflow so its Review stage runs the `compound-engineering:ce-code-review` skill directly. The redundant generic reviewer seam node was removed, leaving the CE code-review gate as the sole review stage.
|
||||
- c4c8961: Tasks created from a selected non-default workflow lane now appear on that lane immediately instead of vanishing until the board-workflows metadata refetch catches up.
|
||||
- 4342172: Built-in compound-engineering workflow prompts now explicitly call out the `/ce-` skill slash command at each stage.
|
||||
- bb663a4: Improve bundled non-coding workflow prompts so marketing, lead-generation, and design runs produce structured deliverables, with content and design preview artifacts persisted for review.
|
||||
- f4d2fa2: Hide the dashboard AI subtask-breakdown quick-add button behind the default-off `subtaskBreakdown` experimental feature flag.
|
||||
- 5191e1f: Prevent the bundled Droid CLI extension from starting local `droid` probes during server boot; validation now runs only when a Droid stream is actually used while existing probe paths remain non-interactive and timeout-bounded.
|
||||
- 4879996: Restyle the workflow switcher trigger and dropdown to visually match the project selector.
|
||||
- ec1d29e: Prevent task worktree acquisition from returning the project repository root by enforcing a non-root postcondition across resume, pooled, and fresh checkout paths.
|
||||
- c229a15: Tighten agent workflow-routing prompt policy so triage and executor agents must not move a task's workflow unless the user explicitly requested it or the agent created that task. Executor prompts now include an explicit `fn_workflow_select` guardrail while preserving workflow selection for tasks agents create.
|
||||
- 849b40d: Keep workflow IR and effective-settings resolution usable when project identity lookup fails, falling back to declaration defaults instead of propagating the identity error.
|
||||
- 9218613: Fix auto-merge lifecycle finalization so successful squash commits reliably leave tasks done, clear transient auto-merge state, and preserve actionable failure state when lifecycle updates fail.
|
||||
- 6e563b9: Revalidate dashboard service-worker assets before falling back to cache so rebuilt tabs cannot stay on stale bundles and render a blank page.
|
||||
- a1cac3a: Replace the compact Quick Chat implementation with the full Chat modal launcher and configurable footer/FAB/off setting, move the file browser into the shared floating-window shell with a compact New menu and consistent narrow editor toolbar, fit the dependency graph after layout settles, and align chat/mailbox/task-detail expansion plus header/theme polish.
|
||||
- 67281fe: Fix Import from GitHub remote detection in multi-project dashboards by passing the active `projectId` to the `/api/git/remotes` lookup. The dialog now lists configured GitHub remotes instead of showing "No GitHub remotes detected" when the backend requires project scope.
|
||||
- a147a98: Prevent global settings updates from overwriting an existing unreadable settings file with defaults, and use provider/CPU icons in task chat agent headers.
|
||||
- e788537: Raise the minimum agent heartbeat staleness floor from 5 to 10 minutes. Agents go silent during long-running but legitimate work (notably a verification step running a multi-minute test command, where the agent is blocked awaiting the command and cannot tick/heartbeat). The 5-minute floor could misread such a busy agent as dead and reclaim its in-progress task mid-run; 10 minutes gives long operations room before the liveness gate acts.
|
||||
- 4ed84be: Polish mobile workflow header alignment, task chat provider icons, modal overlay chrome, and shadcn font consistency.
|
||||
- a6685b7: Check for duplicate tasks from the New Task dialog and show duplicate descriptions in the warning modal.
|
||||
- f0fbc59: Update first-run onboarding to include an optional first-agent step and clearer temporary-agent task guidance.
|
||||
- 36b8950: Carry the selected workflow lane through Planning Mode and Subtask Breakdown task creation so saved tasks appear on the active workflow instead of falling back to the main board.
|
||||
- 93017a3: Preserve task progress when a single-session run is hard-cancelled mid-execution. When the engine aborted in-flight work and bounced the task back to `todo`, the single-session teardown cleared the task `branch` and re-queued without `preserveResumeState` — resetting every step to `pending` and dropping the pointer to commits already on the task branch, so the next dispatch re-planned from Step 0 and the committed work was stranded (observed as a task that "lost all progress" and got stuck). The teardown now keeps the branch and moves with `preserveResumeState` whenever the task has resumable step progress, matching the step-session and pause-park paths, so execution resumes onto the existing branch from the first incomplete step. The worktree is still removed to free its concurrency slot — only the durable pointers (branch + step state) are kept.
|
||||
- 192a2f2: Preserve unrelated global settings when saving Settings sections, and graduate Chat Rooms, Goals, Memory, Insights, Skills, and Todo to default-on dashboard surfaces.
|
||||
- 2e3b965: Smooth the mobile Quick Chat fullscreen sheet during Android soft-keyboard viewport resizing while preserving synchronous iOS visualViewport alignment.
|
||||
- b9b9447: Reset a task's stuck-kill streak on genuine forward progress. `stuckKillCount` was a lifetime counter — incremented by self-healing on each stuck-kill and cleared only by a manual retry — so a long, genuinely-progressing task could be terminalized by accumulation toward the stuck-kill budget. It now resets when a step reaches a terminal forward status (done/skipped), so only consecutive no-progress stalls count toward the budget.
|
||||
- 192a2f2: Open task-card files changed actions in the inline task detail Changes tab instead of the task modal.
|
||||
- 5e55d9c: Show provider icons in task detail chat for default-backed executor, reviewer, planner, and merger models.
|
||||
- 19be91c: Floating modals (the reusable FloatingWindow, the right-dock pop-out, the floating terminal, and the floating New Task dialog) now share a single z-index stack, so tapping any of them brings it to the front above all the others regardless of type.
|
||||
- 65c4dc5: Graduate workflow columns and the workflow graph executor to the default runtime path.
|
||||
|
||||
Upgrade notes: stale persisted `experimentalFeatures.workflowColumns` and `experimentalFeatures.workflowGraphExecutor` values are ignored by the engine, so prior installs keep dispatching tasks through the workflow runtime after upgrade. `workflowInterpreterDualObserve` remains an internal diagnostic and defaults off.
|
||||
|
||||
If an upgraded project appears stalled, treat `todo` tasks with unmet dependencies, `paused`/`userPaused`, active checkout leases, unavailable assigned nodes, or file-scope overlap as intentionally parked. Eligible `todo` tasks without those blockers should be picked up by the workflow scheduler; eligible `in-progress` rows without a live executor are recovered through the normal orphan-resume/self-healing path. The old Experimental toggles are no longer a rollback switch; use a source rollback/downgrade to the previous release if the workflow runtime itself must be reverted.
|
||||
|
||||
### runfusion.ai
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- Updated dependencies [c8a82e7]
|
||||
- Updated dependencies [ee9c8ab]
|
||||
- Updated dependencies [ce6c0fb]
|
||||
- Updated dependencies [7635ba8]
|
||||
- Updated dependencies [26e5514]
|
||||
- Updated dependencies [ce90cc9]
|
||||
- Updated dependencies [130fea2]
|
||||
- Updated dependencies [5a422b0]
|
||||
- Updated dependencies [2d32760]
|
||||
- Updated dependencies [b564ee0]
|
||||
- Updated dependencies [8b5b9a7]
|
||||
- Updated dependencies [68c4053]
|
||||
- Updated dependencies [9101705]
|
||||
- Updated dependencies [3b61ac3]
|
||||
- Updated dependencies [d99246c]
|
||||
- Updated dependencies [438cd75]
|
||||
- Updated dependencies [9643563]
|
||||
- Updated dependencies [24ff124]
|
||||
- Updated dependencies [a2342ca]
|
||||
- Updated dependencies [7e7eb62]
|
||||
- Updated dependencies [87f18f8]
|
||||
- Updated dependencies [70cce18]
|
||||
- Updated dependencies [8dd9697]
|
||||
- Updated dependencies [ee72c94]
|
||||
- Updated dependencies [f13aaa1]
|
||||
- Updated dependencies [8f052c6]
|
||||
- Updated dependencies [df139ec]
|
||||
- Updated dependencies [e6f6111]
|
||||
- Updated dependencies [c158dda]
|
||||
- Updated dependencies [d4d7623]
|
||||
- Updated dependencies [52924ba]
|
||||
- Updated dependencies [7f3e942]
|
||||
- Updated dependencies [281ce35]
|
||||
- Updated dependencies [98720f3]
|
||||
- Updated dependencies [c4f34ce]
|
||||
- Updated dependencies [b760fa0]
|
||||
- Updated dependencies [bdf95f8]
|
||||
- Updated dependencies [eca96fb]
|
||||
- Updated dependencies [c808177]
|
||||
- Updated dependencies [fbce59b]
|
||||
- Updated dependencies [af06170]
|
||||
- Updated dependencies [ef48895]
|
||||
- Updated dependencies [0c0fda1]
|
||||
- Updated dependencies [c32c925]
|
||||
- Updated dependencies [d2fc70a]
|
||||
- Updated dependencies [08d1f09]
|
||||
- Updated dependencies [61ff17a]
|
||||
- Updated dependencies [26bd85d]
|
||||
- Updated dependencies [37c4cfa]
|
||||
- Updated dependencies [58f7588]
|
||||
- Updated dependencies [185ff70]
|
||||
- Updated dependencies [c7b56a5]
|
||||
- Updated dependencies [c18e827]
|
||||
- Updated dependencies [8c478ad]
|
||||
- Updated dependencies [47ba99a]
|
||||
- Updated dependencies [24c1c02]
|
||||
- Updated dependencies [f80a785]
|
||||
- Updated dependencies [09acfbb]
|
||||
- Updated dependencies [1f23a2e]
|
||||
- Updated dependencies [4fec139]
|
||||
- Updated dependencies [5b33da9]
|
||||
- Updated dependencies [15d427b]
|
||||
- Updated dependencies [7034b55]
|
||||
- Updated dependencies [91971b6]
|
||||
- Updated dependencies [a913881]
|
||||
- Updated dependencies [c4c8961]
|
||||
- Updated dependencies [4342172]
|
||||
- Updated dependencies [bb663a4]
|
||||
- Updated dependencies [7fd14eb]
|
||||
- Updated dependencies [f4d2fa2]
|
||||
- Updated dependencies [5191e1f]
|
||||
- Updated dependencies [4879996]
|
||||
- Updated dependencies [ec1d29e]
|
||||
- Updated dependencies [c229a15]
|
||||
- Updated dependencies [849b40d]
|
||||
- Updated dependencies [9218613]
|
||||
- Updated dependencies [6e563b9]
|
||||
- Updated dependencies [496167c]
|
||||
- Updated dependencies [a1cac3a]
|
||||
- Updated dependencies [eb3477a]
|
||||
- Updated dependencies [59d3eee]
|
||||
- Updated dependencies [2dc36d9]
|
||||
- Updated dependencies [67281fe]
|
||||
- Updated dependencies [a147a98]
|
||||
- Updated dependencies [e788537]
|
||||
- Updated dependencies [7ef3817]
|
||||
- Updated dependencies [7ddf58d]
|
||||
- Updated dependencies [8640a74]
|
||||
- Updated dependencies [4ed84be]
|
||||
- Updated dependencies [a6685b7]
|
||||
- Updated dependencies [f0fbc59]
|
||||
- Updated dependencies [36b8950]
|
||||
- Updated dependencies [4fd8d44]
|
||||
- Updated dependencies [93017a3]
|
||||
- Updated dependencies [91180fb]
|
||||
- Updated dependencies [192a2f2]
|
||||
- Updated dependencies [da5fea6]
|
||||
- Updated dependencies [e19f7c2]
|
||||
- Updated dependencies [b20a25c]
|
||||
- Updated dependencies [4672203]
|
||||
- Updated dependencies [12aae94]
|
||||
- Updated dependencies [dc0064b]
|
||||
- Updated dependencies [5697d2c]
|
||||
- Updated dependencies [2e3b965]
|
||||
- Updated dependencies [5117944]
|
||||
- Updated dependencies [b9b9447]
|
||||
- Updated dependencies [192a2f2]
|
||||
- Updated dependencies [5e55d9c]
|
||||
- Updated dependencies [19be91c]
|
||||
- Updated dependencies [d4e91d4]
|
||||
- Updated dependencies [65c4dc5]
|
||||
- @runfusion/fusion@0.45.0
|
||||
|
||||
## 0.44.0
|
||||
|
||||
### @fusion/dashboard
|
||||
@@ -9322,6 +9736,24 @@ for reference.
|
||||
- Updated dependencies [a2ed6d0]
|
||||
- @runfusion/fusion@0.1.0
|
||||
|
||||
## 0.39.9
|
||||
|
||||
### @fusion/i18n
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- @fusion/core@0.46.0
|
||||
|
||||
## 0.39.8
|
||||
|
||||
### @fusion/i18n
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- Updated dependencies [26ebb92]
|
||||
- Updated dependencies [7e7eb62]
|
||||
- @fusion/core@0.45.0
|
||||
|
||||
## 0.39.7
|
||||
|
||||
### @fusion/i18n
|
||||
@@ -9378,6 +9810,22 @@ for reference.
|
||||
|
||||
- @fusion/core@0.40.0
|
||||
|
||||
## 0.11.35
|
||||
|
||||
### @fusion/droid-cli
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- @fusion-plugin-examples/droid-runtime@0.1.35
|
||||
|
||||
## 0.11.34
|
||||
|
||||
### @fusion/droid-cli
|
||||
|
||||
#### Patch Changes
|
||||
|
||||
- @fusion-plugin-examples/droid-runtime@0.1.34
|
||||
|
||||
## 0.11.33
|
||||
|
||||
### @fusion/droid-cli
|
||||
|
||||
@@ -251,6 +251,9 @@ A persisted crash-safe marker (`tasks.transitionPending`) written in the same tr
|
||||
### Step instance
|
||||
One runtime expansion of a `foreach` template subgraph, bound to a single planned step (`Task.steps[i]`). Identity is deterministic — `<foreachNodeId>#<stepIndex>:<templateNodeId>` — so resume reconstructs the full instance set from the pinned step count without persisting the expansion itself. Each instance carries its own run-state (current node, rework count, baseline/checkpoint, and in worktree mode its branch and integration status) in its own persisted run-state table. The step count is pinned at expansion; a later disagreement with the live step list is a `pin-mismatch` failure, never a silent re-expansion. An instance's lifecycle writes flow through `store.updateStep` so `Task.steps[]` stays the physical projection sink for every existing consumer.
|
||||
|
||||
### Artifact
|
||||
A persisted registry entry produced by agents, dashboard chat, workflows, or tasks for reusable deliverables and intermediate products. Artifacts have a type (`document`, `image`, `video`, `audio`, or `other`), author attribution, optional task linkage, metadata such as MIME type/size, and either inline text `content` or a `uri`/path reference for stored media. The artifact registry stores metadata for cross-agent discovery, while the dashboard surfaces task-linked and task-less entries in the Artifacts view's **Artifacts** gallery.
|
||||
|
||||
### parse-steps
|
||||
A workflow graph node that reads a declared Artifact and runs a registry parser to write the canonical step list (`Task.steps[]`) — the only graph-side writer of steps. Built-in parsers are `step-headings` (the `### Step N:` convention, extracted byte-identically from the legacy regex, including the `(depends: N,M)` annotation) and `json-steps`; plugins contribute parsers under `plugin:<pluginId>:<parserId>`. Parsing failures fail closed to a routable `outcome:parse-error` rather than crashing. A parse-steps node must dominate (precede on all paths) any `foreach(source:"task-steps")`, and running one after a foreach has already expanded trips pin protection (an audited failure) so re-plan loops cannot desynchronize an expanded region.
|
||||
|
||||
|
||||
256
README.es.md
@@ -1,12 +1,12 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="./demo/assets/fusion-logo.png" alt="Fusion" width="120" />
|
||||
|
||||
# Fusion
|
||||
# <img src="./demo/assets/fusion-logo-orange.svg" alt="" width="34" align="center" /> Fusion
|
||||
|
||||
### De idea inicial a código en producción — automáticamente.
|
||||
|
||||
**Orquestador de agentes multinodo** — tareas, agentes, misiones, git, archivos y worktrees, con cualquier modelo, local o en la nube.
|
||||
### 🏭 Una fábrica de software, gestionada por un orquestador multiagente.
|
||||
|
||||
Describe lo que quieres — un equipo de agentes de IA lo **planifica, construye, revisa y entrega** por ti. Fusion es tu fábrica de software: una línea de montaje para el código que opera a través de tareas, agentes, misiones, git, archivos y worktrees, con cualquier modelo, local o en la nube.
|
||||
|
||||
[**runfusion.ai →**](https://runfusion.ai) · [Docs](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
|
||||
|
||||
@@ -45,6 +45,72 @@ Un tablero. Controlado desde cualquier lugar. Laptop, Mac mini, servidor Linux,
|
||||
|
||||
---
|
||||
|
||||
## Inicio rápido
|
||||
|
||||
**Sin instalación, directo desde npm:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
Esto lanza el panel. Los subcomandos se pasan directamente: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (O de forma explícita: `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**Instalador en una línea** (macOS y Linux — usa Homebrew automáticamente, recurre a npm como alternativa):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS y Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # o: fn dashboard
|
||||
```
|
||||
|
||||
O en una sola línea (añade el tap automáticamente): `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm global**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # o: fusion dashboard
|
||||
```
|
||||
|
||||
**Desde un clon** (para desarrollo):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
Luego haz clic en la URL `Open:` que aparece en la terminal. Incorpora un token de portador
|
||||
(`http://localhost:4040/?token=fn_...`) que el navegador guarda en
|
||||
`localStorage` en la primera visita y reutiliza automáticamente. En el lado del
|
||||
servidor, Fusion ahora persiste el token del panel/daemon en
|
||||
`~/.fusion/settings.json` en la primera ejecución autenticada y lo reutiliza en
|
||||
inicios posteriores a menos que lo sobreescribas (`--token`, `FUSION_DASHBOARD_TOKEN`,
|
||||
`FUSION_DAEMON_TOKEN`) o deshabilites la autenticación con `--no-auth`. Consulta
|
||||
[Referencia CLI → fn dashboard → Autenticación](./docs/cli-reference.md#fn-dashboard)
|
||||
para conocer la precedencia completa y las opciones de restablecimiento/revocación.
|
||||
|
||||
### Configuración inicial
|
||||
|
||||
En el primer lanzamiento, Fusion abre el **asistente de incorporación** con tres pasos guiados:
|
||||
|
||||
1. **Configuración de IA** — Usa una lista de proveedores simplificada para el inicio rápido (proveedores recomendados más los ya conectados), luego expande la **Configuración avanzada de proveedores** solo si necesitas proveedores adicionales o detalles de configuración. Solo necesitas un proveedor para comenzar. Las entradas de proveedor obsoletas de Google Gemini CLI / Antigravity están intencionalmente ocultas; las rutas de clave API de Google/Gemini, Google Generative AI, Vertex y Cloud Code permanecen disponibles.
|
||||
2. **GitHub (Opcional)** — Conecta GitHub para importar issues y gestionar PRs
|
||||
3. **Primera tarea** — Crea tu primera tarea o impórtala desde GitHub (si no hay ningún proyecto activo, la incorporación primero te pedirá que registres/selecciones un directorio de proyecto)
|
||||
|
||||
El asistente se puede **descartar y no bloquea** — haz clic en **Omitir por ahora** para usar el panel de inmediato. Vuélvelo a activar más tarde desde **Configuración → Autenticación → Reabrir guía de incorporación**.
|
||||
|
||||
### Móvil
|
||||
|
||||
Para el flujo de trabajo con Capacitor + PWA, consulta [MOBILE.md](./MOBILE.md).
|
||||
|
||||
---
|
||||
|
||||
## El flujo
|
||||
|
||||
```
|
||||
@@ -87,6 +153,122 @@ Cada tarea muestra su plan, sus revisiones, sus diffs y sus cambios de archivos
|
||||
|
||||
---
|
||||
|
||||
## Míralo en acción
|
||||
|
||||
<!--
|
||||
FNXC:Docs 2026-06-21-19:55:
|
||||
README must lead with a smaller wordmark and a visual showcase of the latest surfaces (Command Center, selectable workflows, agent chat, multi-agent chat rooms, agent mail) so the value lands fast.
|
||||
Each feature pairs a short looping GIF with value copy; Command Center additionally carries real fleet stats, the token/productivity/team graph trio, and the 70+-theme grid (incl. shadcn light/mono/orange/black) to make the data pop.
|
||||
Media lives in demo/assets/ (committed, GitHub-inline GIFs); stat numbers are sourced from a live seeded fleet — refresh them if the captures are re-shot.
|
||||
Each feature keeps its original Tokyo Night capture and adds a Shadcn Light + Shadcn Dark Gray pair; the theme showcase is split into a light-themes grid and a dark-themes grid. Workflow GIFs feature the Stepwise coding graph with node-level zoom/pan.
|
||||
-->
|
||||
|
||||
Las superficies más recientes de Fusion, de un vistazo — control de misión, workflows visuales, chat de agentes, salas multiagente y correo entre agentes.
|
||||
|
||||
### 🛰️ Command Center — control de misión para tu flota de agentes
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center.gif" alt="Fusion Command Center: live concurrency gauges, token charts, and fleet telemetry across tabs" width="900" />
|
||||
</div>
|
||||
|
||||
Una sola pantalla para todo lo que hacen tus agentes. Ajusta en vivo la capacidad del planificador, observa el gasto de tokens por modelo en tiempo real y demuestra el valor con números concretos.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/command-center-tokens.png" alt="Tokens by model, token trend, and tokens-over-time charts" /><br/><sub><b>Tokens</b> — gasto por modelo, en caché vs. entrada vs. salida, a lo largo del tiempo.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-productivity.png" alt="Productivity: commits, human-hours saved, task duration percentiles, and files by language" /><br/><sub><b>Productividad</b> — resultados, percentiles de duración, mezcla de lenguajes.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-team.png" alt="Agent org chart with token share and tokens-by-agent breakdown" /><br/><sub><b>Equipo</b> — organigrama de agentes y participación de tokens por agente.</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
> Tokens · Herramientas · Actividad · Productividad · Equipo · Ecosistema · GitHub · Señales · Sistema · Fiabilidad · Control de misión — cada pestaña es una lente distinta sobre la misma flota en vivo.
|
||||
|
||||
**La misma flota, a tu manera** — Command Center (y todo el panel) se re-estiliza en vivo en más de **70 temas de color**. Aquí está en Shadcn Light y Shadcn Dark Gray:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/command-center-light.gif" alt="Command Center in Shadcn Light theme" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/command-center-gray.gif" alt="Command Center in Shadcn Dark Gray theme" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<details>
|
||||
<summary><b>Una docena de temas claros y una docena de temas oscuros</b> (clic para expandir)</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center-themes-light.png" alt="Command Center across 12 light color themes" width="900" />
|
||||
<br/><br/>
|
||||
<img src="./demo/assets/command-center-themes-dark.png" alt="Command Center across 12 dark color themes" width="900" />
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
### 🔁 Workflows seleccionables, creados visualmente
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/workflows.gif" alt="Fusion Workflow Editor: switching between built-in workflow graphs" width="820" />
|
||||
</div>
|
||||
|
||||
El recorrido de una tarea desde la idea hasta el merge es un **workflow** — y tú lo eliges y le das forma. Elige uno integrado (Coding, Quick fix, Review-heavy, Stepwise, PR lifecycle, Compound engineering y más), inspecciona su grafo, luego duplícalo y personaliza columnas, puertas, canales de modelo y política de revisión en el [Editor de workflows](./docs/workflow-editor.md) visual. Sin necesidad de bifurcar el motor.
|
||||
|
||||
Aquí está el grafo de **Stepwise coding** — planifica, ejecuta y revisa cada paso antes del siguiente — explorado nodo a nodo en Shadcn Light y Dark Gray:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/workflows-light.gif" alt="Stepwise coding workflow graph in Shadcn Light, panning across nodes" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/workflows-gray.gif" alt="Stepwise coding workflow graph in Shadcn Dark Gray, panning across nodes" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 🗨️ Chat de agentes — habla con tus agentes, en pleno vuelo
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-chat.gif" alt="Fusion agent chat: a threaded conversation with an agent diagnosing a failed task" width="900" />
|
||||
</div>
|
||||
|
||||
Chat directo y chat por tarea con cualquier agente, en cualquier modelo. Pregunta por qué falló una tarea, orienta un enfoque, suelta adjuntos, responde tarjetas de preguntas en chat y reanuda los streams donde los dejaste — con renderizado completo de markdown y código en todo momento.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-light.png" alt="Agent chat thread in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-gray.png" alt="Agent chat thread in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 👥 Salas de chat multiagente
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/chat-rooms.gif" alt="Fusion chat room: CEO, Product Manager, and CTO agents coordinating in #leads" width="900" />
|
||||
</div>
|
||||
|
||||
Coloca varios agentes en una sala y deja que se coordinen. Menciona a un miembro y responde directamente; los miembros ambientales pueden sumarse a la conversación hasta un límite. Aquí los agentes **CEO**, **Product Manager** y **CTO** se alinean sobre la propiedad de la tarea en `#leads` — sin ningún humano en el bucle. ([Documentación de chat](./docs/dashboard-guide.md#chat-view))
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-light.gif" alt="Multi-agent chat room in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-gray.gif" alt="Multi-agent chat room in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 📬 Correo de agentes — una bandeja de entrada entre tus agentes
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-mail.gif" alt="Fusion mailbox: inter-agent messages with triage summaries and approvals" width="900" />
|
||||
</div>
|
||||
|
||||
Un buzón incorporado para delegación, aclaraciones y traspasos. Los agentes registran resúmenes de triage, solicitan aprobaciones y coordinan el trabajo en toda la flota — con vistas de Bandeja de entrada, Bandeja de salida, Agentes y Aprobaciones, para que puedas auditar cada intercambio.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-light.gif" alt="Agent mailbox in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-gray.gif" alt="Agent mailbox in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## Cómo funciona
|
||||
|
||||
```mermaid
|
||||
@@ -225,72 +407,6 @@ npx companies.sh add paperclipai/companies/gstack
|
||||
|
||||
---
|
||||
|
||||
## Inicio rápido
|
||||
|
||||
**Sin instalación, directo desde npm:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
Esto lanza el panel. Los subcomandos se pasan directamente: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (O de forma explícita: `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**Instalador en una línea** (macOS y Linux — usa Homebrew automáticamente, recurre a npm como alternativa):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS y Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # o: fn dashboard
|
||||
```
|
||||
|
||||
O en una sola línea (añade el tap automáticamente): `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm global**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # o: fusion dashboard
|
||||
```
|
||||
|
||||
**Desde un clon** (para desarrollo):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
Luego haz clic en la URL `Open:` que aparece en la terminal. Incorpora un token de portador
|
||||
(`http://localhost:4040/?token=fn_...`) que el navegador guarda en
|
||||
`localStorage` en la primera visita y reutiliza automáticamente. En el lado del
|
||||
servidor, Fusion ahora persiste el token del panel/daemon en
|
||||
`~/.fusion/settings.json` en la primera ejecución autenticada y lo reutiliza en
|
||||
inicios posteriores a menos que lo sobreescribas (`--token`, `FUSION_DASHBOARD_TOKEN`,
|
||||
`FUSION_DAEMON_TOKEN`) o deshabilites la autenticación con `--no-auth`. Consulta
|
||||
[Referencia CLI → fn dashboard → Autenticación](./docs/cli-reference.md#fn-dashboard)
|
||||
para conocer la precedencia completa y las opciones de restablecimiento/revocación.
|
||||
|
||||
### Configuración inicial
|
||||
|
||||
En el primer lanzamiento, Fusion abre el **asistente de incorporación** con tres pasos guiados:
|
||||
|
||||
1. **Configuración de IA** — Usa una lista de proveedores simplificada para el inicio rápido (proveedores recomendados más los ya conectados), luego expande la **Configuración avanzada de proveedores** solo si necesitas proveedores adicionales o detalles de configuración. Solo necesitas un proveedor para comenzar. Las entradas de proveedor obsoletas de Google Gemini CLI / Antigravity están intencionalmente ocultas; las rutas de clave API de Google/Gemini, Google Generative AI, Vertex y Cloud Code permanecen disponibles.
|
||||
2. **GitHub (Opcional)** — Conecta GitHub para importar issues y gestionar PRs
|
||||
3. **Primera tarea** — Crea tu primera tarea o impórtala desde GitHub (si no hay ningún proyecto activo, la incorporación primero te pedirá que registres/selecciones un directorio de proyecto)
|
||||
|
||||
El asistente se puede **descartar y no bloquea** — haz clic en **Omitir por ahora** para usar el panel de inmediato. Vuélvelo a activar más tarde desde **Configuración → Autenticación → Reabrir guía de incorporación**.
|
||||
|
||||
### Móvil
|
||||
|
||||
Para el flujo de trabajo con Capacitor + PWA, consulta [MOBILE.md](./MOBILE.md).
|
||||
|
||||
---
|
||||
|
||||
## Documentación
|
||||
|
||||
| Guía | Qué cubre |
|
||||
|
||||
266
README.fr.md
@@ -1,12 +1,12 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="./demo/assets/fusion-logo.png" alt="Fusion" width="120" />
|
||||
|
||||
# Fusion
|
||||
# <img src="./demo/assets/fusion-logo-orange.svg" alt="" width="34" align="center" /> Fusion
|
||||
|
||||
### De l'idée brute au code de production — automatiquement.
|
||||
|
||||
**Orchestrateur d'agents multi-nœuds** — tâches, agents, missions, git, fichiers et worktrees, avec n'importe quel modèle, local ou cloud.
|
||||
### 🏭 Une usine logicielle, pilotée par un orchestrateur multi-agents.
|
||||
|
||||
Décrivez ce que vous voulez — une équipe d'agents IA le **planifie, le construit, le révise et le livre** pour vous. Fusion est votre usine logicielle : une chaîne de montage pour le code qui s'étend sur les tâches, les agents, les missions, git, les fichiers et les worktrees, avec n'importe quel modèle, local ou cloud.
|
||||
|
||||
[**runfusion.ai →**](https://runfusion.ai) · [Docs](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
|
||||
|
||||
@@ -45,6 +45,73 @@ Un tableau. Contrôlé de n'importe où. Laptop, Mac mini, serveur Linux, VM clo
|
||||
|
||||
---
|
||||
|
||||
## Démarrage rapide
|
||||
|
||||
**Sans installation, directement depuis npm :**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
Cela lance le tableau de bord. Les sous-commandes passent directement : `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (Ou de façon verbeuse : `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**Installateur en une ligne** (macOS et Linux — choisit automatiquement Homebrew, bascule sur npm en secours) :
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS et Linux) :
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # ou : fn dashboard
|
||||
```
|
||||
|
||||
Ou en une ligne (tap automatique) : `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm global** :
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # ou : fusion dashboard
|
||||
```
|
||||
|
||||
**Depuis un clone** (pour le développement) :
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
Cliquez ensuite sur l'URL `Open:` affichée dans le terminal. Elle intègre un jeton bearer
|
||||
(`http://localhost:4040/?token=fn_...`) que le navigateur capture dans
|
||||
`localStorage` à la première visite et réutilise automatiquement par la suite. Côté
|
||||
serveur, Fusion persiste désormais le jeton du tableau de bord/démon dans
|
||||
`~/.fusion/settings.json` à la première exécution authentifiée et le réutilise
|
||||
lors des démarrages ultérieurs, sauf si vous le remplacez (`--token`,
|
||||
`FUSION_DASHBOARD_TOKEN`, `FUSION_DAEMON_TOKEN`) ou désactivez l'authentification
|
||||
avec `--no-auth`. Voir
|
||||
[Référence CLI → fn dashboard → Authentification](./docs/cli-reference.md#fn-dashboard)
|
||||
pour la précédence complète et les options de réinitialisation/révocation.
|
||||
|
||||
### Configuration au premier lancement
|
||||
|
||||
Au premier lancement, Fusion ouvre l'**assistant d'intégration** en trois étapes guidées :
|
||||
|
||||
1. **Configuration IA** — Utilisez la liste simplifiée de fournisseurs de démarrage rapide (fournisseurs recommandés et fournisseurs déjà connectés), puis développez les **Paramètres avancés du fournisseur** uniquement si vous avez besoin de fournisseurs supplémentaires ou de détails de configuration. Un seul fournisseur suffit pour commencer. Les entrées de fournisseurs dépréciés Google Gemini CLI / Antigravity sont intentionnellement masquées ; les chemins clé API Google/Gemini, Google Generative AI, Vertex et Cloud Code restent pris en charge.
|
||||
2. **GitHub (optionnel)** — Connectez GitHub pour l'import de tickets et la gestion des PR
|
||||
3. **Première tâche** — Créez votre première tâche ou importez depuis GitHub (si aucun projet n'est actif, l'assistant vous invite d'abord à enregistrer/sélectionner un répertoire de projet)
|
||||
|
||||
L'assistant est **dismissable et non bloquant** — cliquez sur **Ignorer pour l'instant** pour utiliser le tableau de bord immédiatement. Relancez-le plus tard depuis **Paramètres → Authentification → Rouvrir le guide d'intégration**.
|
||||
|
||||
### Mobile
|
||||
|
||||
Pour le workflow Capacitor + PWA, voir [MOBILE.md](./MOBILE.md).
|
||||
|
||||
---
|
||||
|
||||
## Le flux
|
||||
|
||||
```
|
||||
@@ -71,13 +138,13 @@ Chaque tâche affiche son plan, ses révisions, ses diffs et ses modifications d
|
||||
| | |
|
||||
|---|---|
|
||||
| 🧠 **Planification IA** | Décrivez une tâche en langage naturel. Les agents de planification la transforment en plan `PROMPT.md` avec étapes, périmètre des fichiers et critères d'acceptation. |
|
||||
| 🔁 **Portes de workflow** | Plan → Révision → Exécution → Révision à chaque étape. Les portes pré-fusion bloquent le mauvais code ; les portes post-fusion effectuent des vérifications informatives. |
|
||||
| 🔁 **Workflows sélectionnables** | Les workflows intégrés couvrent le codage, les correctifs rapides, le travail à forte révision, l'exécution par étapes, le Compound Engineering activé par plugin et les fragments de cycle de vie de PR. Choisissez un workflow par tâche ou créez-en des personnalisés dans l'[Éditeur de workflows](./docs/workflow-editor.md). |
|
||||
| 🌳 **Isolation par worktree** | Chaque tâche s'exécute dans sa propre branche et son propre worktree (`fusion/{task-id}`). Tâches parallèles. Zéro conflit. Délégation [worktrunk](https://github.com/max-sixty/worktrunk) optionnelle via [`worktrunk.enabled`](./docs/settings-reference.md#worktree-backend-settings) (voir [abstraction WorktreeBackend](./docs/architecture.md#worktreebackend-abstraction)). |
|
||||
| ⚡ **Fusion intelligente** | Toutes les portes franchies ? Fusion effectue un squash-merge et passe à la suite. Activez la validation manuelle où vous le souhaitez. |
|
||||
| ⚡ **Fusion intelligente** | Toutes les portes franchies ? Fusion effectue un squash-merge et passe à la suite. Activez la validation manuelle où vous le souhaitez, héritez du défaut global d'auto-fusion en direct, ou définissez des remplacements auto/manuel explicites par tâche. |
|
||||
| 🛰️ **Maillage multi-nœuds** | Laptop, Mac mini, serveur Linux, VM cloud, téléphone — tout synchronisé. Bureau, mobile, web. |
|
||||
| 🧩 **N'importe quel modèle** | Anthropic, OpenAI, Ollama et plus encore. Local et cloud coexistent. |
|
||||
| 🧩 **N'importe quel modèle** | Anthropic, OpenAI, Ollama, Google Generative AI, Z.ai, runtimes locaux et [fournisseurs personnalisés](./docs/dashboard-guide.md#custom-providers) définis par l'utilisateur. Local et cloud coexistent, avec des voies de modèle/fallback de workflow configurables par projet. |
|
||||
| 🏢 **Entreprises d'agents** | Importez des équipes prédéfinies — plus de 440 agents répartis dans 16 entreprises — et faites-les fonctionner de façon autonome pendant des semaines. |
|
||||
| 📬 **Messagerie inter-agents** | Boîte aux lettres intégrée entre agents. Déléguer, clarifier, coordonner. |
|
||||
| 📬 **Messagerie inter-agents** | Boîte aux lettres intégrée entre agents. Déléguer, clarifier, coordonner ; les agents au rôle d'ingénieur peuvent activer la réclamation automatique du backlog quand vous voulez de l'aide à l'implémentation au-delà du retrait réservé à l'exécuteur. |
|
||||
| 🗨️ **Chat d’agents** | Chat direct, chat de tâche, pièces jointes, cartes de questions, flux reprenables et salles multi-agents expérimentales où les membres mentionnés répondent directement et les membres ambiants peuvent participer jusqu’à un plafond. ([Docs Chat](./docs/dashboard-guide.md#chat-view)) |
|
||||
| 🗺️ **Missions** | Planification hiérarchique (Mission → Jalon → Tranche → Fonctionnalité → Tâche) avec pilotage automatique et contrats de validation. |
|
||||
| 🔬 **Recherche** | Exécutions de recherche délimitées avec recherche web, GitHub, docs locaux et synthèse LLM (plus prise en charge intégrée de WebSearch/WebFetch dans les flux de planification et de synthèse lorsque disponible). Transformez les résultats en tâches. ([Docs](./docs/research.md)) |
|
||||
@@ -86,6 +153,122 @@ Chaque tâche affiche son plan, ses révisions, ses diffs et ses modifications d
|
||||
|
||||
---
|
||||
|
||||
## Voir en action
|
||||
|
||||
<!--
|
||||
FNXC:Docs 2026-06-21-19:55:
|
||||
README must lead with a smaller wordmark and a visual showcase of the latest surfaces (Command Center, selectable workflows, agent chat, multi-agent chat rooms, agent mail) so the value lands fast.
|
||||
Each feature pairs a short looping GIF with value copy; Command Center additionally carries real fleet stats, the token/productivity/team graph trio, and the 70+-theme grid (incl. shadcn light/mono/orange/black) to make the data pop.
|
||||
Media lives in demo/assets/ (committed, GitHub-inline GIFs); stat numbers are sourced from a live seeded fleet — refresh them if the captures are re-shot.
|
||||
Each feature keeps its original Tokyo Night capture and adds a Shadcn Light + Shadcn Dark Gray pair; the theme showcase is split into a light-themes grid and a dark-themes grid. Workflow GIFs feature the Stepwise coding graph with node-level zoom/pan.
|
||||
-->
|
||||
|
||||
Les surfaces les plus récentes de Fusion, en un coup d'œil — contrôle de mission, workflows visuels, chat d'agents, salles multi-agents et messagerie inter-agents.
|
||||
|
||||
### 🛰️ Command Center — le contrôle de mission de votre flotte d'agents
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center.gif" alt="Fusion Command Center: live concurrency gauges, token charts, and fleet telemetry across tabs" width="900" />
|
||||
</div>
|
||||
|
||||
Un seul écran pour tout ce que font vos agents. Ajustez la capacité du planificateur en direct, suivez la dépense de tokens par modèle en temps réel et prouvez la valeur avec des chiffres concrets.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/command-center-tokens.png" alt="Tokens by model, token trend, and tokens-over-time charts" /><br/><sub><b>Tokens</b> — dépense par modèle, en cache vs. entrée vs. sortie, dans le temps.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-productivity.png" alt="Productivity: commits, human-hours saved, task duration percentiles, and files by language" /><br/><sub><b>Productivité</b> — résultats, percentiles de durée, mix de langages.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-team.png" alt="Agent org chart with token share and tokens-by-agent breakdown" /><br/><sub><b>Équipe</b> — organigramme des agents et part de tokens par agent.</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
> Tokens · Outils · Activité · Productivité · Équipe · Écosystème · GitHub · Signaux · Système · Fiabilité · Mission Control — chaque onglet est un angle différent sur la même flotte en direct.
|
||||
|
||||
**La même flotte, à votre façon** — Command Center (et tout le tableau de bord) se re-thématise en direct sur **plus de 70 thèmes de couleurs**. Le voici en Shadcn Light et Shadcn Dark Gray :
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/command-center-light.gif" alt="Command Center in Shadcn Light theme" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/command-center-gray.gif" alt="Command Center in Shadcn Dark Gray theme" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<details>
|
||||
<summary><b>Une douzaine de thèmes clairs & une douzaine de thèmes sombres</b> (cliquer pour développer)</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center-themes-light.png" alt="Command Center across 12 light color themes" width="900" />
|
||||
<br/><br/>
|
||||
<img src="./demo/assets/command-center-themes-dark.png" alt="Command Center across 12 dark color themes" width="900" />
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
### 🔁 Workflows sélectionnables, créés visuellement
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/workflows.gif" alt="Fusion Workflow Editor: switching between built-in workflow graphs" width="820" />
|
||||
</div>
|
||||
|
||||
Le parcours d'une tâche, de l'idée à la fusion, est un **workflow** — et c'est à vous de le choisir et de le façonner. Choisissez un workflow intégré (Coding, Quick fix, Review-heavy, Stepwise, PR lifecycle, Compound engineering et plus encore), inspectez son graphe, puis dupliquez et personnalisez les colonnes, les portes, les voies de modèle et la politique de révision dans l'[Éditeur de workflows](./docs/workflow-editor.md) visuel. Aucun fork du moteur requis.
|
||||
|
||||
Voici le graphe **Stepwise coding** — planifier, exécuter et réviser chaque étape avant la suivante — exploré nœud par nœud en Shadcn Light et Dark Gray :
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/workflows-light.gif" alt="Stepwise coding workflow graph in Shadcn Light, panning across nodes" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/workflows-gray.gif" alt="Stepwise coding workflow graph in Shadcn Dark Gray, panning across nodes" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 🗨️ Chat d'agents — parlez à vos agents, en plein vol
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-chat.gif" alt="Fusion agent chat: a threaded conversation with an agent diagnosing a failed task" width="900" />
|
||||
</div>
|
||||
|
||||
Chat direct et chat par tâche avec n'importe quel agent, sur n'importe quel modèle. Demandez pourquoi une tâche a échoué, orientez une approche, déposez des pièces jointes, répondez aux cartes de questions intégrées et reprenez les flux là où vous les avez laissés — rendu complet du markdown et du code de bout en bout.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-light.png" alt="Agent chat thread in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-gray.png" alt="Agent chat thread in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 👥 Salles de chat multi-agents
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/chat-rooms.gif" alt="Fusion chat room: CEO, Product Manager, and CTO agents coordinating in #leads" width="900" />
|
||||
</div>
|
||||
|
||||
Placez plusieurs agents dans une salle et laissez-les se coordonner. Mentionnez un membre et il répond directement ; les membres ambiants peuvent rejoindre la conversation jusqu'à un plafond. Ici, les agents **CEO**, **Product Manager** et **CTO** s'accordent sur l'attribution des tâches dans `#leads` — sans humain dans la boucle. ([Docs Chat](./docs/dashboard-guide.md#chat-view))
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-light.gif" alt="Multi-agent chat room in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-gray.gif" alt="Multi-agent chat room in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 📬 Messagerie d'agents — une boîte de réception entre vos agents
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-mail.gif" alt="Fusion mailbox: inter-agent messages with triage summaries and approvals" width="900" />
|
||||
</div>
|
||||
|
||||
Une boîte aux lettres intégrée pour la délégation, la clarification et les passations. Les agents déposent des résumés de triage, demandent des approbations et coordonnent le travail à travers la flotte — avec les vues Boîte de réception, Boîte d'envoi, Agents et Approbations, pour que vous puissiez auditer chaque échange.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-light.gif" alt="Agent mailbox in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-gray.gif" alt="Agent mailbox in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## Comment ça fonctionne
|
||||
|
||||
```mermaid
|
||||
@@ -224,73 +407,6 @@ npx companies.sh add paperclipai/companies/gstack
|
||||
|
||||
---
|
||||
|
||||
## Démarrage rapide
|
||||
|
||||
**Sans installation, directement depuis npm :**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
Cela lance le tableau de bord. Les sous-commandes passent directement : `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (Ou de façon verbeuse : `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**Installateur en une ligne** (macOS et Linux — choisit automatiquement Homebrew, bascule sur npm en secours) :
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS et Linux) :
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # ou : fn dashboard
|
||||
```
|
||||
|
||||
Ou en une ligne (tap automatique) : `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm global** :
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # ou : fusion dashboard
|
||||
```
|
||||
|
||||
**Depuis un clone** (pour le développement) :
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
Cliquez ensuite sur l'URL `Open:` affichée dans le terminal. Elle intègre un jeton bearer
|
||||
(`http://localhost:4040/?token=fn_...`) que le navigateur capture dans
|
||||
`localStorage` à la première visite et réutilise automatiquement par la suite. Côté
|
||||
serveur, Fusion persiste désormais le jeton du tableau de bord/démon dans
|
||||
`~/.fusion/settings.json` à la première exécution authentifiée et le réutilise
|
||||
lors des démarrages ultérieurs, sauf si vous le remplacez (`--token`,
|
||||
`FUSION_DASHBOARD_TOKEN`, `FUSION_DAEMON_TOKEN`) ou désactivez l'authentification
|
||||
avec `--no-auth`. Voir
|
||||
[Référence CLI → fn dashboard → Authentification](./docs/cli-reference.md#fn-dashboard)
|
||||
pour la précédence complète et les options de réinitialisation/révocation.
|
||||
|
||||
### Configuration au premier lancement
|
||||
|
||||
Au premier lancement, Fusion ouvre l'**assistant d'intégration** en trois étapes guidées :
|
||||
|
||||
1. **Configuration IA** — Utilisez la liste simplifiée de fournisseurs de démarrage rapide (fournisseurs recommandés et fournisseurs déjà connectés), puis développez les **Paramètres avancés du fournisseur** uniquement si vous avez besoin de fournisseurs supplémentaires ou de détails de configuration. Un seul fournisseur suffit pour commencer. Les entrées de fournisseurs dépréciés Google Gemini CLI / Antigravity sont intentionnellement masquées ; les chemins clé API Google/Gemini, Google Generative AI, Vertex et Cloud Code restent pris en charge.
|
||||
2. **GitHub (optionnel)** — Connectez GitHub pour l'import de tickets et la gestion des PR
|
||||
3. **Première tâche** — Créez votre première tâche ou importez depuis GitHub (si aucun projet n'est actif, l'assistant vous invite d'abord à enregistrer/sélectionner un répertoire de projet)
|
||||
|
||||
L'assistant est **dismissable et non bloquant** — cliquez sur **Ignorer pour l'instant** pour utiliser le tableau de bord immédiatement. Relancez-le plus tard depuis **Paramètres → Authentification → Rouvrir le guide d'intégration**.
|
||||
|
||||
### Mobile
|
||||
|
||||
Pour le workflow Capacitor + PWA, voir [MOBILE.md](./MOBILE.md).
|
||||
|
||||
---
|
||||
|
||||
## Documentation
|
||||
|
||||
| Guide | Ce qu'il couvre |
|
||||
|
||||
256
README.ko.md
@@ -1,12 +1,12 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="./demo/assets/fusion-logo.png" alt="Fusion" width="120" />
|
||||
|
||||
# Fusion
|
||||
# <img src="./demo/assets/fusion-logo-orange.svg" alt="" width="34" align="center" /> Fusion
|
||||
|
||||
### 거친 아이디어에서 프로덕션 코드까지 — 자동으로.
|
||||
|
||||
**멀티 노드 에이전트 오케스트레이터** — 태스크, 에이전트, 미션, git, 파일, 워크트리를 어떤 모델에서도, 로컬 또는 클라우드에서 실행합니다.
|
||||
### 🏭 멀티 에이전트 오케스트레이터가 운영하는 소프트웨어 공장.
|
||||
|
||||
원하는 것을 설명하세요 — AI 에이전트 팀이 **계획하고, 만들고, 검토하고, 배포**해 드립니다. Fusion은 여러분의 소프트웨어 공장입니다: 태스크, 에이전트, 미션, git, 파일, 워크트리를 가로질러 어떤 모델로든, 로컬 또는 클라우드에서 실행되는 코드 조립 라인입니다.
|
||||
|
||||
[**runfusion.ai →**](https://runfusion.ai) · [문서](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
|
||||
|
||||
@@ -45,6 +45,72 @@
|
||||
|
||||
---
|
||||
|
||||
## 빠른 시작
|
||||
|
||||
**설치 없이 npm에서 바로:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
이 명령은 대시보드를 실행합니다. 하위 명령은 다음과 같이 전달됩니다: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help` 등. (또는 명시적으로: `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**원라인 설치 프로그램** (macOS & Linux — Homebrew를 자동 선택하고, 없으면 npm으로 대체):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS & Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # 또는: fn dashboard
|
||||
```
|
||||
|
||||
또는 원라인(자동 탭 추가): `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm 전역 설치**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # 또는: fusion dashboard
|
||||
```
|
||||
|
||||
**클론으로 시작** (개발용):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
터미널에 출력되는 `Open:` URL을 클릭하세요. URL에는 베어러 토큰
|
||||
(`http://localhost:4040/?token=fn_...`)이 포함되어 있으며, 브라우저가 첫 방문 시
|
||||
`localStorage`에 캡처하여 이후 자동으로 재사용합니다. 서버 측에서 Fusion은
|
||||
첫 번째 인증된 실행 시 `~/.fusion/settings.json`에 대시보드/데몬 토큰을
|
||||
저장하고, 이후 시작 시 재사용합니다(`--token`, `FUSION_DASHBOARD_TOKEN`,
|
||||
`FUSION_DAEMON_TOKEN`으로 재정의하거나 `--no-auth`로 인증을 비활성화하지 않는 한).
|
||||
전체 우선순위 및 재설정/취소 옵션은
|
||||
[CLI 참조 → fn dashboard → Authentication](./docs/cli-reference.md#fn-dashboard)을
|
||||
참조하세요.
|
||||
|
||||
### 최초 실행 설정
|
||||
|
||||
Fusion을 처음 시작하면 세 단계로 안내하는 **온보딩 마법사**가 열립니다:
|
||||
|
||||
1. **AI 설정** — 간소화된 빠른 시작 공급자 목록(권장 공급자 및 이미 연결된 공급자)을 사용하고, 추가 공급자나 설정 세부 사항이 필요한 경우에만 **고급 공급자 설정**을 펼칩니다. 시작하려면 공급자 하나만 있으면 됩니다. 더 이상 사용되지 않는 Google Gemini CLI / Antigravity 공급자 항목은 의도적으로 숨겨져 있으며, Google/Gemini API 키, Google Generative AI, Vertex, Cloud Code 경로는 계속 지원됩니다.
|
||||
2. **GitHub (선택 사항)** — 이슈 임포트 및 PR 관리를 위해 GitHub 연결
|
||||
3. **첫 번째 태스크** — 첫 번째 태스크를 생성하거나 GitHub에서 임포트(활성 프로젝트가 없는 경우, 온보딩이 먼저 프로젝트 디렉터리 등록/선택을 안내합니다)
|
||||
|
||||
마법사는 **해제 가능하며 비차단적** — **지금 건너뛰기**를 클릭하면 즉시 대시보드를 사용할 수 있습니다. 나중에 **설정 → 인증 → 온보딩 가이드 다시 열기**에서 재실행할 수 있습니다.
|
||||
|
||||
### 모바일
|
||||
|
||||
Capacitor + PWA 워크플로우는 [MOBILE.md](./MOBILE.md)를 참조하세요.
|
||||
|
||||
---
|
||||
|
||||
## 흐름
|
||||
|
||||
```
|
||||
@@ -86,6 +152,122 @@
|
||||
|
||||
---
|
||||
|
||||
## 실제 동작 모습
|
||||
|
||||
<!--
|
||||
FNXC:Docs 2026-06-21-19:55:
|
||||
README must lead with a smaller wordmark and a visual showcase of the latest surfaces (Command Center, selectable workflows, agent chat, multi-agent chat rooms, agent mail) so the value lands fast.
|
||||
Each feature pairs a short looping GIF with value copy; Command Center additionally carries real fleet stats, the token/productivity/team graph trio, and the 70+-theme grid (incl. shadcn light/mono/orange/black) to make the data pop.
|
||||
Media lives in demo/assets/ (committed, GitHub-inline GIFs); stat numbers are sourced from a live seeded fleet — refresh them if the captures are re-shot.
|
||||
Each feature keeps its original Tokyo Night capture and adds a Shadcn Light + Shadcn Dark Gray pair; the theme showcase is split into a light-themes grid and a dark-themes grid. Workflow GIFs feature the Stepwise coding graph with node-level zoom/pan.
|
||||
-->
|
||||
|
||||
Fusion의 최신 화면들을 한눈에 — 미션 컨트롤, 시각적 워크플로, 에이전트 채팅, 멀티 에이전트 룸, 에이전트 간 메일.
|
||||
|
||||
### 🛰️ Command Center — 에이전트 플릿을 위한 미션 컨트롤
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center.gif" alt="Fusion Command Center: live concurrency gauges, token charts, and fleet telemetry across tabs" width="900" />
|
||||
</div>
|
||||
|
||||
에이전트들이 하는 모든 일을 위한 한 화면. 실시간 스케줄러 용량을 조정하고, 모델별 토큰 소비를 실시간으로 지켜보며, 확실한 수치로 가치를 입증하세요.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/command-center-tokens.png" alt="Tokens by model, token trend, and tokens-over-time charts" /><br/><sub><b>토큰</b> — 모델별 소비, 캐시 대 입력 대 출력, 시간 경과별.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-productivity.png" alt="Productivity: commits, human-hours saved, task duration percentiles, and files by language" /><br/><sub><b>생산성</b> — 성과, 소요 시간 백분위, 언어 구성.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-team.png" alt="Agent org chart with token share and tokens-by-agent breakdown" /><br/><sub><b>팀</b> — 에이전트 조직도와 에이전트별 토큰 점유율.</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
> Tokens · Tools · Activity · Productivity · Team · Ecosystem · GitHub · Signals · System · Reliability · Mission Control — 모든 탭은 동일한 라이브 플릿을 바라보는 서로 다른 렌즈입니다.
|
||||
|
||||
**동일한 플릿, 당신의 방식대로** — Command Center(그리고 대시보드 전체)는 **70개 이상의 색상 테마**로 실시간 리스킨됩니다. 여기 Shadcn Light와 Shadcn Dark Gray로 표시된 모습입니다:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/command-center-light.gif" alt="Command Center in Shadcn Light theme" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/command-center-gray.gif" alt="Command Center in Shadcn Dark Gray theme" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<details>
|
||||
<summary><b>12가지 라이트 테마 & 12가지 다크 테마</b> (클릭하여 펼치기)</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center-themes-light.png" alt="Command Center across 12 light color themes" width="900" />
|
||||
<br/><br/>
|
||||
<img src="./demo/assets/command-center-themes-dark.png" alt="Command Center across 12 dark color themes" width="900" />
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
### 🔁 시각적으로 작성하는 선택 가능한 워크플로
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/workflows.gif" alt="Fusion Workflow Editor: switching between built-in workflow graphs" width="820" />
|
||||
</div>
|
||||
|
||||
태스크가 아이디어에서 머지까지 거치는 여정이 곧 **워크플로**이며 — 직접 선택하고 다듬을 수 있습니다. 내장 워크플로(Coding, Quick fix, Review-heavy, Stepwise, PR lifecycle, Compound engineering 등)를 고르고, 그래프를 살펴본 뒤, 시각적 [워크플로 편집기](./docs/workflow-editor.md)에서 복제하여 컬럼, 게이트, 모델 레인, 검토 정책을 커스터마이즈하세요. 엔진 포크는 필요 없습니다.
|
||||
|
||||
다음은 **Stepwise coding** 그래프입니다 — 다음 단계로 넘어가기 전에 모든 단계를 계획, 실행, 검토합니다 — Shadcn Light와 Dark Gray에서 노드별로 살펴봅니다:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/workflows-light.gif" alt="Stepwise coding workflow graph in Shadcn Light, panning across nodes" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/workflows-gray.gif" alt="Stepwise coding workflow graph in Shadcn Dark Gray, panning across nodes" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 🗨️ 에이전트 채팅 — 실행 중인 에이전트와 대화
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-chat.gif" alt="Fusion agent chat: a threaded conversation with an agent diagnosing a failed task" width="900" />
|
||||
</div>
|
||||
|
||||
어떤 모델에서든 어떤 에이전트와도 직접 채팅 및 태스크별 채팅을 할 수 있습니다. 태스크가 왜 실패했는지 묻고, 접근 방식을 조정하고, 첨부파일을 넣고, 인채팅 질문 카드에 답하고, 멈췄던 지점에서 스트림을 재개하세요 — 전체에 걸쳐 완전한 마크다운 및 코드 렌더링을 지원합니다.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-light.png" alt="Agent chat thread in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-gray.png" alt="Agent chat thread in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 👥 멀티 에이전트 채팅 룸
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/chat-rooms.gif" alt="Fusion chat room: CEO, Product Manager, and CTO agents coordinating in #leads" width="900" />
|
||||
</div>
|
||||
|
||||
여러 에이전트를 한 룸에 넣고 서로 조율하게 하세요. 구성원을 언급하면 직접 응답하고, 주변 구성원은 제한 내에서 대화에 참여할 수 있습니다. 여기서는 **CEO**, **Product Manager**, **CTO** 에이전트가 `#leads`에서 태스크 소유권을 정렬합니다 — 사람의 개입 없이. ([채팅 문서](./docs/dashboard-guide.md#chat-view))
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-light.gif" alt="Multi-agent chat room in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-gray.gif" alt="Multi-agent chat room in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 📬 에이전트 메일 — 에이전트 간 받은편지함
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-mail.gif" alt="Fusion mailbox: inter-agent messages with triage summaries and approvals" width="900" />
|
||||
</div>
|
||||
|
||||
위임, 확인, 인계를 위한 내장 메일박스. 에이전트는 트리아지 요약을 제출하고, 승인을 요청하고, 플릿 전반에 걸쳐 작업을 조율합니다 — Inbox, Outbox, Agents, Approvals 보기를 제공하여 모든 교환을 감사할 수 있습니다.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-light.gif" alt="Agent mailbox in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-gray.gif" alt="Agent mailbox in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## 작동 방식
|
||||
|
||||
```mermaid
|
||||
@@ -224,72 +406,6 @@ npx companies.sh add paperclipai/companies/gstack
|
||||
|
||||
---
|
||||
|
||||
## 빠른 시작
|
||||
|
||||
**설치 없이 npm에서 바로:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
이 명령은 대시보드를 실행합니다. 하위 명령은 다음과 같이 전달됩니다: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help` 등. (또는 명시적으로: `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**원라인 설치 프로그램** (macOS & Linux — Homebrew를 자동 선택하고, 없으면 npm으로 대체):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS & Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # 또는: fn dashboard
|
||||
```
|
||||
|
||||
또는 원라인(자동 탭 추가): `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm 전역 설치**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # 또는: fusion dashboard
|
||||
```
|
||||
|
||||
**클론으로 시작** (개발용):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
터미널에 출력되는 `Open:` URL을 클릭하세요. URL에는 베어러 토큰
|
||||
(`http://localhost:4040/?token=fn_...`)이 포함되어 있으며, 브라우저가 첫 방문 시
|
||||
`localStorage`에 캡처하여 이후 자동으로 재사용합니다. 서버 측에서 Fusion은
|
||||
첫 번째 인증된 실행 시 `~/.fusion/settings.json`에 대시보드/데몬 토큰을
|
||||
저장하고, 이후 시작 시 재사용합니다(`--token`, `FUSION_DASHBOARD_TOKEN`,
|
||||
`FUSION_DAEMON_TOKEN`으로 재정의하거나 `--no-auth`로 인증을 비활성화하지 않는 한).
|
||||
전체 우선순위 및 재설정/취소 옵션은
|
||||
[CLI 참조 → fn dashboard → Authentication](./docs/cli-reference.md#fn-dashboard)을
|
||||
참조하세요.
|
||||
|
||||
### 최초 실행 설정
|
||||
|
||||
Fusion을 처음 시작하면 세 단계로 안내하는 **온보딩 마법사**가 열립니다:
|
||||
|
||||
1. **AI 설정** — 간소화된 빠른 시작 공급자 목록(권장 공급자 및 이미 연결된 공급자)을 사용하고, 추가 공급자나 설정 세부 사항이 필요한 경우에만 **고급 공급자 설정**을 펼칩니다. 시작하려면 공급자 하나만 있으면 됩니다. 더 이상 사용되지 않는 Google Gemini CLI / Antigravity 공급자 항목은 의도적으로 숨겨져 있으며, Google/Gemini API 키, Google Generative AI, Vertex, Cloud Code 경로는 계속 지원됩니다.
|
||||
2. **GitHub (선택 사항)** — 이슈 임포트 및 PR 관리를 위해 GitHub 연결
|
||||
3. **첫 번째 태스크** — 첫 번째 태스크를 생성하거나 GitHub에서 임포트(활성 프로젝트가 없는 경우, 온보딩이 먼저 프로젝트 디렉터리 등록/선택을 안내합니다)
|
||||
|
||||
마법사는 **해제 가능하며 비차단적** — **지금 건너뛰기**를 클릭하면 즉시 대시보드를 사용할 수 있습니다. 나중에 **설정 → 인증 → 온보딩 가이드 다시 열기**에서 재실행할 수 있습니다.
|
||||
|
||||
### 모바일
|
||||
|
||||
Capacitor + PWA 워크플로우는 [MOBILE.md](./MOBILE.md)를 참조하세요.
|
||||
|
||||
---
|
||||
|
||||
## 문서
|
||||
|
||||
| 가이드 | 내용 |
|
||||
|
||||
275
README.md
@@ -1,12 +1,12 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="./demo/assets/fusion-logo.png" alt="Fusion" width="120" />
|
||||
|
||||
# Fusion
|
||||
# <img src="./demo/assets/fusion-logo-orange.svg" alt="" width="34" align="center" /> Fusion
|
||||
|
||||
### From rough idea to production code — automatically.
|
||||
|
||||
**Multi-node agent orchestrator** — tasks, agents, missions, git, files, and worktrees, with any model, local or cloud.
|
||||
### 🏭 A software factory, run by a multi-agent orchestrator.
|
||||
|
||||
Describe what you want — a team of AI agents **plans, builds, reviews, and ships** it for you. Fusion is your software factory: an assembly line for code that runs across tasks, agents, missions, git, files, and worktrees, with any model, local or cloud.
|
||||
|
||||
[**runfusion.ai →**](https://runfusion.ai) · [Docs](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
|
||||
|
||||
@@ -43,6 +43,72 @@ One board. Controlled from anywhere. Laptop, Mac mini, Linux server, cloud VM, p
|
||||
|
||||
---
|
||||
|
||||
## Quick start
|
||||
|
||||
**Zero install, straight from npm:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
That launches the dashboard. Subcommands forward through: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (Or verbosely: `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**One-line installer** (macOS & Linux — auto-picks Homebrew, falls back to npm):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS & Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # or: fn dashboard
|
||||
```
|
||||
|
||||
Or as a one-liner (auto-taps): `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm global**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # or: fusion dashboard
|
||||
```
|
||||
|
||||
**From a clone** (for development):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
Then click the `Open:` URL printed in the terminal. It embeds a bearer token
|
||||
(`http://localhost:4040/?token=fn_...`) that the browser captures to
|
||||
`localStorage` on first visit and reuses automatically thereafter. On the
|
||||
server side, Fusion now persists the dashboard/daemon token in
|
||||
`~/.fusion/settings.json` on first authenticated run and reuses it on later
|
||||
starts unless you override it (`--token`, `FUSION_DASHBOARD_TOKEN`,
|
||||
`FUSION_DAEMON_TOKEN`) or disable auth with `--no-auth`. See
|
||||
[CLI reference → fn dashboard → Authentication](./docs/cli-reference.md#fn-dashboard)
|
||||
for full precedence and reset/revocation options.
|
||||
|
||||
### First-run setup
|
||||
|
||||
On first launch, Fusion opens the **onboarding wizard** with three guided steps:
|
||||
|
||||
1. **AI Setup** — Use a simplified quick-start provider list (recommended providers plus any already-connected providers), then expand **Advanced provider settings** only if you need additional providers or setup details. You only need one provider to get started. Deprecated Google Gemini CLI / Antigravity provider entries are intentionally hidden; Google/Gemini API key, Google Generative AI, Vertex, and Cloud Code paths remain supported.
|
||||
2. **GitHub (Optional)** — Connect GitHub for issue import and PR management
|
||||
3. **First Task** — Create your first task or import from GitHub (if no project is active, onboarding first prompts you to register/select a project directory)
|
||||
|
||||
The wizard is **dismissible and non-blocking** — click **Skip for now** to use the dashboard immediately. Re-trigger it later from **Settings → Authentication → Reopen onboarding guide**.
|
||||
|
||||
### Mobile
|
||||
|
||||
For Capacitor + PWA workflow, see [MOBILE.md](./MOBILE.md).
|
||||
|
||||
---
|
||||
|
||||
## The flow
|
||||
|
||||
```
|
||||
@@ -84,6 +150,141 @@ Every task shows its plan, its reviews, its diffs, and its file changes in real
|
||||
|
||||
---
|
||||
|
||||
## See it in action
|
||||
|
||||
<!--
|
||||
FNXC:Docs 2026-06-21-19:55:
|
||||
README must lead with a smaller wordmark and a visual showcase of the latest surfaces (Command Center, selectable workflows, agent chat, multi-agent chat rooms, agent mail) so the value lands fast.
|
||||
Each feature pairs a short looping GIF with value copy; Command Center additionally carries real fleet stats, the token/productivity/team graph trio, and the 70+-theme grid (incl. shadcn light/mono/orange/black) to make the data pop.
|
||||
Media lives in demo/assets/ (committed, GitHub-inline GIFs); stat numbers are sourced from a live seeded fleet — refresh them if the captures are re-shot.
|
||||
Each feature keeps its original Tokyo Night capture and adds a Shadcn Light + Shadcn Dark Gray pair; the theme showcase is split into a light-themes grid and a dark-themes grid. Workflow GIFs feature the Stepwise coding graph with node-level zoom/pan.
|
||||
-->
|
||||
|
||||
The newest surfaces in Fusion, at a glance — mission control, visual workflows, agent chat, multi-agent rooms, and inter-agent mail.
|
||||
|
||||
### 🛰️ Command Center — mission control for your agent fleet
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center.gif" alt="Fusion Command Center: live concurrency gauges, token charts, and fleet telemetry across tabs" width="900" />
|
||||
</div>
|
||||
|
||||
One screen for everything your agents are doing. Tune live scheduler capacity, watch token spend by model in real time, and prove the value with hard numbers.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/command-center-tokens.png" alt="Tokens by model, token trend, and tokens-over-time charts" /><br/><sub><b>Tokens</b> — spend by model, cached vs. input vs. output, over time.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-productivity.png" alt="Productivity: commits, human-hours saved, task duration percentiles, and files by language" /><br/><sub><b>Productivity</b> — outcomes, duration percentiles, language mix.</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-team.png" alt="Agent org chart with token share and tokens-by-agent breakdown" /><br/><sub><b>Team</b> — agent org chart and token share per agent.</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
> Tokens · Tools · Activity · Productivity · Team · Ecosystem · GitHub · Signals · System · Reliability · Mission Control — every tab is a different lens on the same live fleet.
|
||||
|
||||
**The same fleet, your way** — Command Center (and the whole dashboard) re-skins live across **70+ color themes**. Here it is in Shadcn Light and Shadcn Dark Gray:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/command-center-light.gif" alt="Command Center in Shadcn Light theme" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/command-center-gray.gif" alt="Command Center in Shadcn Dark Gray theme" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<details>
|
||||
<summary><b>A dozen light themes & a dozen dark themes</b> (click to expand)</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center-themes-light.png" alt="Command Center across 12 light color themes" width="900" />
|
||||
<br/><br/>
|
||||
<img src="./demo/assets/command-center-themes-dark.png" alt="Command Center across 12 dark color themes" width="900" />
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
### 🔁 Selectable workflows, authored visually
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/workflows.gif" alt="Fusion Workflow Editor: switching between built-in workflow graphs" width="820" />
|
||||
</div>
|
||||
|
||||
A task's journey from idea to merge is a **workflow** — and it's yours to choose and shape. Pick a built-in (Coding, Quick fix, Review-heavy, Stepwise, PR lifecycle, Compound engineering, and more), inspect its graph, then duplicate and customize columns, gates, model lanes, and review policy in the visual [Workflow Editor](./docs/workflow-editor.md). No engine fork required.
|
||||
|
||||
Here's the **Stepwise coding** graph — plan, execute, and review every step before the next — explored node-by-node in Shadcn Light and Dark Gray:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/workflows-light.gif" alt="Stepwise coding workflow graph in Shadcn Light, panning across nodes" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/workflows-gray.gif" alt="Stepwise coding workflow graph in Shadcn Dark Gray, panning across nodes" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 🗨️ Agent chat — talk to your agents, mid-flight
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-chat.gif" alt="Fusion agent chat: a threaded conversation with an agent diagnosing a failed task" width="900" />
|
||||
</div>
|
||||
|
||||
Direct chat and per-task chat with any agent, on any model. Ask why a task failed, steer an approach, drop attachments, answer in-chat question cards, and resume streams where you left off — full markdown and code rendering throughout.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-light.png" alt="Agent chat thread in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-gray.png" alt="Agent chat thread in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 👥 Multi-agent chat rooms
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/chat-rooms.gif" alt="Fusion chat room: CEO, Product Manager, and CTO agents coordinating in #leads" width="900" />
|
||||
</div>
|
||||
|
||||
Put multiple agents in a room and let them coordinate. Mention a member and it responds directly; ambient members can join the conversation up to a cap. Here the **CEO**, **Product Manager**, and **CTO** agents align on task ownership in `#leads` — no human in the loop. ([Chat docs](./docs/dashboard-guide.md#chat-view))
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-light.gif" alt="Multi-agent chat room in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-gray.gif" alt="Multi-agent chat room in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 📬 Agent mail — an inbox between your agents
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-mail.gif" alt="Fusion mailbox: inter-agent messages with triage summaries and approvals" width="900" />
|
||||
</div>
|
||||
|
||||
A built-in mailbox for delegation, clarification, and hand-offs. Agents file triage summaries, request approvals, and coordinate work across the fleet — with Inbox, Outbox, Agents, and Approvals views, so you can audit every exchange.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-light.gif" alt="Agent mailbox in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-gray.gif" alt="Agent mailbox in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 📱 Fusion is an AI factory in your pocket
|
||||
|
||||
The full board, Command Center, missions, agents, and chat travel with you — native **iOS** and **Android** apps (Capacitor) plus an installable PWA. Start a run on your laptop, steer it from your phone.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/mobile-board.png" alt="Fusion mobile: board" /></td>
|
||||
<td width="33%"><img src="./demo/assets/mobile-command-center.png" alt="Fusion mobile: Command Center" /></td>
|
||||
<td width="33%"><img src="./demo/assets/mobile-missions.png" alt="Fusion mobile: missions" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/mobile-agents.png" alt="Fusion mobile: agents" /></td>
|
||||
<td width="33%"><img src="./demo/assets/mobile-chat.png" alt="Fusion mobile: agent chat" /></td>
|
||||
<td width="33%"><img src="./demo/assets/mobile-chat-list.png" alt="Fusion mobile: chat list" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<sub>See [MOBILE.md](./MOBILE.md) for the Capacitor + PWA workflow.</sub>
|
||||
|
||||
---
|
||||
|
||||
## How it works
|
||||
|
||||
```mermaid
|
||||
@@ -227,72 +428,6 @@ npx companies.sh add paperclipai/companies/gstack
|
||||
|
||||
---
|
||||
|
||||
## Quick start
|
||||
|
||||
**Zero install, straight from npm:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
That launches the dashboard. Subcommands forward through: `npx runfusion.ai task create "fix X"`, `npx runfusion.ai --help`, etc. (Or verbosely: `npx @runfusion/fusion dashboard`.)
|
||||
|
||||
**One-line installer** (macOS & Linux — auto-picks Homebrew, falls back to npm):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew** (macOS & Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # or: fn dashboard
|
||||
```
|
||||
|
||||
Or as a one-liner (auto-taps): `brew install runfusion/fusion/fusion`.
|
||||
|
||||
**npm global**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # or: fusion dashboard
|
||||
```
|
||||
|
||||
**From a clone** (for development):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
Then click the `Open:` URL printed in the terminal. It embeds a bearer token
|
||||
(`http://localhost:4040/?token=fn_...`) that the browser captures to
|
||||
`localStorage` on first visit and reuses automatically thereafter. On the
|
||||
server side, Fusion now persists the dashboard/daemon token in
|
||||
`~/.fusion/settings.json` on first authenticated run and reuses it on later
|
||||
starts unless you override it (`--token`, `FUSION_DASHBOARD_TOKEN`,
|
||||
`FUSION_DAEMON_TOKEN`) or disable auth with `--no-auth`. See
|
||||
[CLI reference → fn dashboard → Authentication](./docs/cli-reference.md#fn-dashboard)
|
||||
for full precedence and reset/revocation options.
|
||||
|
||||
### First-run setup
|
||||
|
||||
On first launch, Fusion opens the **onboarding wizard** with three guided steps:
|
||||
|
||||
1. **AI Setup** — Use a simplified quick-start provider list (recommended providers plus any already-connected providers), then expand **Advanced provider settings** only if you need additional providers or setup details. You only need one provider to get started. Deprecated Google Gemini CLI / Antigravity provider entries are intentionally hidden; Google/Gemini API key, Google Generative AI, Vertex, and Cloud Code paths remain supported.
|
||||
2. **GitHub (Optional)** — Connect GitHub for issue import and PR management
|
||||
3. **First Task** — Create your first task or import from GitHub (if no project is active, onboarding first prompts you to register/select a project directory)
|
||||
|
||||
The wizard is **dismissible and non-blocking** — click **Skip for now** to use the dashboard immediately. Re-trigger it later from **Settings → Authentication → Reopen onboarding guide**.
|
||||
|
||||
### Mobile
|
||||
|
||||
For Capacitor + PWA workflow, see [MOBILE.md](./MOBILE.md).
|
||||
|
||||
---
|
||||
|
||||
## Documentation
|
||||
|
||||
| Guide | What it covers |
|
||||
|
||||
252
README.zh-CN.md
@@ -1,12 +1,12 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="./demo/assets/fusion-logo.png" alt="Fusion" width="120" />
|
||||
|
||||
# Fusion
|
||||
# <img src="./demo/assets/fusion-logo-orange.svg" alt="" width="34" align="center" /> Fusion
|
||||
|
||||
### 从粗糙想法到生产代码——全程自动化。
|
||||
|
||||
**多节点智能体编排器** — 任务、智能体、任务群、Git、文件与工作树,支持任意模型,本地与云端皆可。
|
||||
### 🏭 由多智能体编排器运行的软件工厂。
|
||||
|
||||
描述你想要的东西——一支 AI 智能体团队便会为你**规划、构建、审核并交付**。Fusion 就是你的软件工厂:一条贯穿任务、智能体、任务群、Git、文件与工作树的代码流水线,支持任意模型,本地与云端皆可。
|
||||
|
||||
[**runfusion.ai →**](https://runfusion.ai) · [文档](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
|
||||
|
||||
@@ -45,6 +45,70 @@
|
||||
|
||||
---
|
||||
|
||||
## 快速上手
|
||||
|
||||
**无需安装,直接通过 npm 运行:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
这将启动仪表板。子命令可透传:`npx runfusion.ai task create "fix X"`、`npx runfusion.ai --help` 等(或完整写法:`npx @runfusion/fusion dashboard`)。
|
||||
|
||||
**一键安装脚本**(macOS 和 Linux——自动选用 Homebrew,失败则回退到 npm):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew**(macOS 和 Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # 或:fn dashboard
|
||||
```
|
||||
|
||||
或使用一行命令(自动添加 tap):`brew install runfusion/fusion/fusion`。
|
||||
|
||||
**npm 全局安装**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # 或:fusion dashboard
|
||||
```
|
||||
|
||||
**从克隆仓库启动**(用于开发):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
然后点击终端输出的 `Open:` URL。该 URL 内嵌了一个持有者令牌
|
||||
(`http://localhost:4040/?token=fn_...`),浏览器首次访问时会将其捕获并存入
|
||||
`localStorage`,此后自动复用。在服务端,Fusion 会在首次经过身份验证的运行时将
|
||||
仪表板/守护进程令牌持久化至 `~/.fusion/settings.json`,并在后续启动时复用,
|
||||
除非你通过 `--token`、`FUSION_DASHBOARD_TOKEN`、`FUSION_DAEMON_TOKEN` 覆盖,
|
||||
或使用 `--no-auth` 禁用鉴权。完整的优先级规则及重置/吊销选项,请参见
|
||||
[CLI 参考 → fn dashboard → 身份验证](./docs/cli-reference.md#fn-dashboard)。
|
||||
|
||||
### 首次运行向导
|
||||
|
||||
首次启动时,Fusion 会打开**引导向导**,分三步引导:
|
||||
|
||||
1. **AI 配置** — 使用简化的快速启动提供商列表(推荐提供商加上已连接的提供商),如需添加更多提供商或查看详细设置,展开**高级提供商设置**即可。入门只需一个提供商。已弃用的 Google Gemini CLI / Antigravity 提供商条目已被有意隐藏;Google/Gemini API 密钥、Google Generative AI、Vertex 和 Cloud Code 路径仍受支持。
|
||||
2. **GitHub(可选)** — 连接 GitHub 以导入 Issue 和管理 PR
|
||||
3. **第一个任务** — 创建你的第一个任务,或从 GitHub 导入(若当前无活跃项目,引导向导会先提示你注册/选择项目目录)
|
||||
|
||||
向导**可关闭且不阻塞**——点击**暂时跳过**即可立即使用仪表板。稍后可从**设置 → 身份验证 → 重新打开引导向导**再次触发。
|
||||
|
||||
### 移动端
|
||||
|
||||
Capacitor + PWA 工作流,请参见 [MOBILE.md](./MOBILE.md)。
|
||||
|
||||
---
|
||||
|
||||
## 工作流程
|
||||
|
||||
```
|
||||
@@ -86,6 +150,122 @@
|
||||
|
||||
---
|
||||
|
||||
## 实地一览
|
||||
|
||||
<!--
|
||||
FNXC:Docs 2026-06-21-19:55:
|
||||
README must lead with a smaller wordmark and a visual showcase of the latest surfaces (Command Center, selectable workflows, agent chat, multi-agent chat rooms, agent mail) so the value lands fast.
|
||||
Each feature pairs a short looping GIF with value copy; Command Center additionally carries real fleet stats, the token/productivity/team graph trio, and the 70+-theme grid (incl. shadcn light/mono/orange/black) to make the data pop.
|
||||
Media lives in demo/assets/ (committed, GitHub-inline GIFs); stat numbers are sourced from a live seeded fleet — refresh them if the captures are re-shot.
|
||||
Each feature keeps its original Tokyo Night capture and adds a Shadcn Light + Shadcn Dark Gray pair; the theme showcase is split into a light-themes grid and a dark-themes grid. Workflow GIFs feature the Stepwise coding graph with node-level zoom/pan.
|
||||
-->
|
||||
|
||||
Fusion 中最新的功能界面一览——任务控制中心、可视化工作流、智能体聊天、多智能体聊天室与智能体间邮件。
|
||||
|
||||
### 🛰️ 指挥中心 — 你的智能体舰队的任务控制中心
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center.gif" alt="Fusion Command Center: live concurrency gauges, token charts, and fleet telemetry across tabs" width="900" />
|
||||
</div>
|
||||
|
||||
一块屏幕掌握智能体的所有动态。实时调节调度器容量,按模型实时观察 token 消耗,并用硬数据证明价值。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/command-center-tokens.png" alt="Tokens by model, token trend, and tokens-over-time charts" /><br/><sub><b>Token</b> — 按模型划分的消耗,缓存 vs. 输入 vs. 输出,随时间变化。</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-productivity.png" alt="Productivity: commits, human-hours saved, task duration percentiles, and files by language" /><br/><sub><b>生产力</b> — 产出成果、时长分位数、语言占比。</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-team.png" alt="Agent org chart with token share and tokens-by-agent breakdown" /><br/><sub><b>团队</b> — 智能体组织架构图与每个智能体的 token 占比。</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
> Tokens · Tools · Activity · Productivity · Team · Ecosystem · GitHub · Signals · System · Reliability · Mission Control — 每个标签页都是观察同一支实时舰队的不同视角。
|
||||
|
||||
**同一支舰队,随你定制** — 指挥中心(以及整个仪表板)可在 **70+ 种配色主题**间实时换肤。这里展示的是 Shadcn Light 和 Shadcn Dark Gray:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/command-center-light.gif" alt="Command Center in Shadcn Light theme" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/command-center-gray.gif" alt="Command Center in Shadcn Dark Gray theme" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<details>
|
||||
<summary><b>十余种浅色主题与十余种深色主题</b>(点击展开)</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center-themes-light.png" alt="Command Center across 12 light color themes" width="900" />
|
||||
<br/><br/>
|
||||
<img src="./demo/assets/command-center-themes-dark.png" alt="Command Center across 12 dark color themes" width="900" />
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
### 🔁 可视化编写的可选工作流
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/workflows.gif" alt="Fusion Workflow Editor: switching between built-in workflow graphs" width="820" />
|
||||
</div>
|
||||
|
||||
任务从想法到合并的旅程就是一条**工作流**——它由你选择、由你塑造。挑选一个内置工作流(Coding、Quick fix、Review-heavy、Stepwise、PR lifecycle、Compound engineering 等),查看其图形,然后在可视化[工作流编辑器](./docs/workflow-editor.md)中复制并定制列、门控、模型通道和审核策略。无需 fork 引擎。
|
||||
|
||||
这是 **Stepwise coding**(逐步编码)图形——在进入下一步前对每一步进行规划、执行和审核——在 Shadcn Light 和 Dark Gray 中逐节点探索:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/workflows-light.gif" alt="Stepwise coding workflow graph in Shadcn Light, panning across nodes" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/workflows-gray.gif" alt="Stepwise coding workflow graph in Shadcn Dark Gray, panning across nodes" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 🗨️ 智能体聊天 — 在任务进行中与智能体对话
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-chat.gif" alt="Fusion agent chat: a threaded conversation with an agent diagnosing a failed task" width="900" />
|
||||
</div>
|
||||
|
||||
与任意智能体进行直接聊天和任务聊天,可用任意模型。询问任务为何失败、引导其方法、拖入附件、回答聊天内问题卡,并从上次中断处恢复流——全程支持完整的 markdown 和代码渲染。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-light.png" alt="Agent chat thread in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-gray.png" alt="Agent chat thread in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 👥 多智能体聊天室
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/chat-rooms.gif" alt="Fusion chat room: CEO, Product Manager, and CTO agents coordinating in #leads" width="900" />
|
||||
</div>
|
||||
|
||||
把多个智能体放进同一个房间,让它们协作。提及某个成员,它便会直接回复;旁听成员可在上限内加入对话。这里 **CEO**、**产品经理**和 **CTO** 智能体在 `#leads` 中就任务归属达成一致——全程无需人工介入。([聊天文档](./docs/dashboard-guide.md#chat-view))
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-light.gif" alt="Multi-agent chat room in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-gray.gif" alt="Multi-agent chat room in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 📬 智能体邮件 — 智能体之间的收件箱
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-mail.gif" alt="Fusion mailbox: inter-agent messages with triage summaries and approvals" width="900" />
|
||||
</div>
|
||||
|
||||
内置邮箱,用于委派、澄清与交接。智能体提交分诊摘要、请求审批,并在整支舰队间协调工作——配有收件箱、发件箱、智能体和审批视图,让你可以审计每一次往来。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-light.gif" alt="Agent mailbox in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-gray.gif" alt="Agent mailbox in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## 工作原理
|
||||
|
||||
```mermaid
|
||||
@@ -224,70 +404,6 @@ npx companies.sh add paperclipai/companies/gstack
|
||||
|
||||
---
|
||||
|
||||
## 快速上手
|
||||
|
||||
**无需安装,直接通过 npm 运行:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
这将启动仪表板。子命令可透传:`npx runfusion.ai task create "fix X"`、`npx runfusion.ai --help` 等(或完整写法:`npx @runfusion/fusion dashboard`)。
|
||||
|
||||
**一键安装脚本**(macOS 和 Linux——自动选用 Homebrew,失败则回退到 npm):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew**(macOS 和 Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # 或:fn dashboard
|
||||
```
|
||||
|
||||
或使用一行命令(自动添加 tap):`brew install runfusion/fusion/fusion`。
|
||||
|
||||
**npm 全局安装**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # 或:fusion dashboard
|
||||
```
|
||||
|
||||
**从克隆仓库启动**(用于开发):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
然后点击终端输出的 `Open:` URL。该 URL 内嵌了一个持有者令牌
|
||||
(`http://localhost:4040/?token=fn_...`),浏览器首次访问时会将其捕获并存入
|
||||
`localStorage`,此后自动复用。在服务端,Fusion 会在首次经过身份验证的运行时将
|
||||
仪表板/守护进程令牌持久化至 `~/.fusion/settings.json`,并在后续启动时复用,
|
||||
除非你通过 `--token`、`FUSION_DASHBOARD_TOKEN`、`FUSION_DAEMON_TOKEN` 覆盖,
|
||||
或使用 `--no-auth` 禁用鉴权。完整的优先级规则及重置/吊销选项,请参见
|
||||
[CLI 参考 → fn dashboard → 身份验证](./docs/cli-reference.md#fn-dashboard)。
|
||||
|
||||
### 首次运行向导
|
||||
|
||||
首次启动时,Fusion 会打开**引导向导**,分三步引导:
|
||||
|
||||
1. **AI 配置** — 使用简化的快速启动提供商列表(推荐提供商加上已连接的提供商),如需添加更多提供商或查看详细设置,展开**高级提供商设置**即可。入门只需一个提供商。已弃用的 Google Gemini CLI / Antigravity 提供商条目已被有意隐藏;Google/Gemini API 密钥、Google Generative AI、Vertex 和 Cloud Code 路径仍受支持。
|
||||
2. **GitHub(可选)** — 连接 GitHub 以导入 Issue 和管理 PR
|
||||
3. **第一个任务** — 创建你的第一个任务,或从 GitHub 导入(若当前无活跃项目,引导向导会先提示你注册/选择项目目录)
|
||||
|
||||
向导**可关闭且不阻塞**——点击**暂时跳过**即可立即使用仪表板。稍后可从**设置 → 身份验证 → 重新打开引导向导**再次触发。
|
||||
|
||||
### 移动端
|
||||
|
||||
Capacitor + PWA 工作流,请参见 [MOBILE.md](./MOBILE.md)。
|
||||
|
||||
---
|
||||
|
||||
## 文档
|
||||
|
||||
| 指南 | 内容 |
|
||||
|
||||
254
README.zh-TW.md
@@ -1,12 +1,12 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="./demo/assets/fusion-logo.png" alt="Fusion" width="120" />
|
||||
|
||||
# Fusion
|
||||
# <img src="./demo/assets/fusion-logo-orange.svg" alt="" width="34" align="center" /> Fusion
|
||||
|
||||
### 從粗略想法到正式上線的程式碼——全自動完成。
|
||||
|
||||
**多節點代理人協調器** — 任務、代理人、任務群組、git、檔案與工作樹,支援任何模型,本地或雲端皆可。
|
||||
### 🏭 一座軟體工廠,由多代理人協調器運作。
|
||||
|
||||
描述你想要的——一支 AI 代理人團隊會為你**規劃、建置、審閱並交付**。Fusion 就是你的軟體工廠:一條橫跨任務、代理人、任務群組、git、檔案與工作樹的程式碼生產線,支援任何模型,本地或雲端皆可。
|
||||
|
||||
[**runfusion.ai →**](https://runfusion.ai) · [文件](./docs/README.md) · [GitHub](https://github.com/Runfusion/Fusion) · [npm](https://www.npmjs.com/package/@runfusion/fusion) · [Discord](https://discord.gg/ksrfuy7WYR)
|
||||
|
||||
@@ -45,6 +45,71 @@
|
||||
|
||||
---
|
||||
|
||||
## 快速開始
|
||||
|
||||
**免安裝,直接從 npm 執行:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
這會啟動儀表板。子指令可直接傳遞:`npx runfusion.ai task create "fix X"`、`npx runfusion.ai --help` 等。(或完整形式:`npx @runfusion/fusion dashboard`。)
|
||||
|
||||
**單行安裝程式**(macOS 與 Linux——自動選用 Homebrew,若無則退回 npm):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew**(macOS 與 Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # 或:fn dashboard
|
||||
```
|
||||
|
||||
或使用單行指令(自動新增 tap):`brew install runfusion/fusion/fusion`。
|
||||
|
||||
**npm 全域安裝**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # 或:fusion dashboard
|
||||
```
|
||||
|
||||
**從複本執行**(供開發使用):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
然後點擊終端機中顯示的 `Open:` 網址。該網址內嵌一個不記名令牌
|
||||
(`http://localhost:4040/?token=fn_...`),瀏覽器會在首次造訪時擷取並存入
|
||||
`localStorage`,之後自動重複使用。在伺服器端,Fusion 會在首次驗證執行時
|
||||
將儀表板與背景程式令牌持久化至 `~/.fusion/settings.json`,並在後續啟動時
|
||||
重複使用,除非你覆蓋它(`--token`、`FUSION_DASHBOARD_TOKEN`、
|
||||
`FUSION_DAEMON_TOKEN`)或以 `--no-auth` 停用驗證。完整的優先順序與
|
||||
重設/撤銷選項,請參閱
|
||||
[命令列參考 → fn dashboard → 驗證](./docs/cli-reference.md#fn-dashboard)。
|
||||
|
||||
### 首次執行設定
|
||||
|
||||
首次啟動時,Fusion 會開啟**引導精靈**,提供三個引導步驟:
|
||||
|
||||
1. **AI 設定** — 使用簡化的快速啟動供應商清單(建議的供應商,加上已連線的供應商),只有在需要其他供應商或詳細設定時,才展開**進階供應商設定**。只需一個供應商即可開始使用。已棄用的 Google Gemini CLI / Antigravity 供應商項目已刻意隱藏;Google/Gemini API 金鑰、Google Generative AI、Vertex 與 Cloud Code 路徑仍受支援。
|
||||
2. **GitHub(選填)** — 連結 GitHub 以匯入議題並管理 PR
|
||||
3. **第一個任務** — 建立你的第一個任務或從 GitHub 匯入(若無作用中的專案,引導精靈會先提示你註冊/選取專案目錄)
|
||||
|
||||
精靈**可關閉且不阻擋操作**——點擊**暫時略過**即可立即使用儀表板。之後可從**設定 → 驗證 → 重新開啟引導指南**再次觸發。
|
||||
|
||||
### 行動裝置
|
||||
|
||||
Capacitor + PWA 工作流程,請參閱 [MOBILE.md](./MOBILE.md)。
|
||||
|
||||
---
|
||||
|
||||
## 工作流程
|
||||
|
||||
```
|
||||
@@ -86,6 +151,122 @@
|
||||
|
||||
---
|
||||
|
||||
## 實際運作一覽
|
||||
|
||||
<!--
|
||||
FNXC:Docs 2026-06-21-19:55:
|
||||
README must lead with a smaller wordmark and a visual showcase of the latest surfaces (Command Center, selectable workflows, agent chat, multi-agent chat rooms, agent mail) so the value lands fast.
|
||||
Each feature pairs a short looping GIF with value copy; Command Center additionally carries real fleet stats, the token/productivity/team graph trio, and the 70+-theme grid (incl. shadcn light/mono/orange/black) to make the data pop.
|
||||
Media lives in demo/assets/ (committed, GitHub-inline GIFs); stat numbers are sourced from a live seeded fleet — refresh them if the captures are re-shot.
|
||||
Each feature keeps its original Tokyo Night capture and adds a Shadcn Light + Shadcn Dark Gray pair; the theme showcase is split into a light-themes grid and a dark-themes grid. Workflow GIFs feature the Stepwise coding graph with node-level zoom/pan.
|
||||
-->
|
||||
|
||||
Fusion 中最新的功能一覽——任務指揮中心、視覺化工作流程、代理人聊天、多代理人聊天室與代理人間郵件。
|
||||
|
||||
### 🛰️ Command Center——你代理人艦隊的任務指揮中心
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center.gif" alt="Fusion Command Center: live concurrency gauges, token charts, and fleet telemetry across tabs" width="900" />
|
||||
</div>
|
||||
|
||||
一個畫面掌握代理人正在進行的一切。即時調整排程器容量、依模型即時觀察 token 花費,並以實際數據證明價值。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%"><img src="./demo/assets/command-center-tokens.png" alt="Tokens by model, token trend, and tokens-over-time charts" /><br/><sub><b>Tokens</b> — 依模型的花費、快取 vs. 輸入 vs. 輸出,隨時間變化。</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-productivity.png" alt="Productivity: commits, human-hours saved, task duration percentiles, and files by language" /><br/><sub><b>Productivity</b> — 成果、時長百分位數、語言組成。</sub></td>
|
||||
<td width="33%"><img src="./demo/assets/command-center-team.png" alt="Agent org chart with token share and tokens-by-agent breakdown" /><br/><sub><b>Team</b> — 代理人組織圖與每位代理人的 token 占比。</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
> Tokens · Tools · Activity · Productivity · Team · Ecosystem · GitHub · Signals · System · Reliability · Mission Control——每一個分頁都是同一支即時艦隊的不同視角。
|
||||
|
||||
**同一支艦隊,依你所好**——Command Center(以及整個儀表板)可在 **70+ 種色彩主題**間即時換膚。這裡是 Shadcn Light 與 Shadcn Dark Gray:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/command-center-light.gif" alt="Command Center in Shadcn Light theme" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/command-center-gray.gif" alt="Command Center in Shadcn Dark Gray theme" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<details>
|
||||
<summary><b>十多種淺色主題與十多種深色主題</b>(點擊展開)</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/command-center-themes-light.png" alt="Command Center across 12 light color themes" width="900" />
|
||||
<br/><br/>
|
||||
<img src="./demo/assets/command-center-themes-dark.png" alt="Command Center across 12 dark color themes" width="900" />
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
### 🔁 可選工作流程,以視覺化方式撰寫
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/workflows.gif" alt="Fusion Workflow Editor: switching between built-in workflow graphs" width="820" />
|
||||
</div>
|
||||
|
||||
任務從想法到合併的旅程是一個**工作流程**——而它由你選擇與塑造。選取內建工作流程(Coding、Quick fix、Review-heavy、Stepwise、PR lifecycle、Compound engineering 等),檢視其圖形,接著在視覺化[工作流程編輯器](./docs/workflow-editor.md)中複製並自訂欄、關卡、模型通道與審閱政策。無需 fork 引擎。
|
||||
|
||||
這是 **Stepwise coding** 圖形——在進入下一步前,規劃、執行並審閱每個步驟——以 Shadcn Light 與 Dark Gray 逐節點探索:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/workflows-light.gif" alt="Stepwise coding workflow graph in Shadcn Light, panning across nodes" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/workflows-gray.gif" alt="Stepwise coding workflow graph in Shadcn Dark Gray, panning across nodes" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 🗨️ 代理人聊天——在執行途中與你的代理人對話
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-chat.gif" alt="Fusion agent chat: a threaded conversation with an agent diagnosing a failed task" width="900" />
|
||||
</div>
|
||||
|
||||
與任何代理人在任何模型上進行直接聊天與每任務聊天。詢問任務為何失敗、引導方法、放上附件、回答聊天內問題卡,並從上次中斷處恢復串流——全程支援完整的 markdown 與程式碼渲染。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-light.png" alt="Agent chat thread in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-chat-gray.png" alt="Agent chat thread in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 👥 多代理人聊天室
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/chat-rooms.gif" alt="Fusion chat room: CEO, Product Manager, and CTO agents coordinating in #leads" width="900" />
|
||||
</div>
|
||||
|
||||
把多個代理人放進一個房間,讓他們協調作業。提及某位成員,它就會直接回覆;環境成員可在上限內加入對話。這裡 **CEO**、**Product Manager** 與 **CTO** 代理人在 `#leads` 中就任務歸屬達成共識——全程沒有人類介入。([聊天文件](./docs/dashboard-guide.md#chat-view))
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-light.gif" alt="Multi-agent chat room in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/chat-rooms-gray.gif" alt="Multi-agent chat room in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 📬 代理人郵件——代理人之間的收件匣
|
||||
|
||||
<div align="center">
|
||||
<img src="./demo/assets/agent-mail.gif" alt="Fusion mailbox: inter-agent messages with triage summaries and approvals" width="900" />
|
||||
</div>
|
||||
|
||||
內建的郵件信箱,用於委派、釐清與交接。代理人會提交分流摘要、請求核准,並在整支艦隊間協調作業——具備 Inbox、Outbox、Agents 與 Approvals 檢視,讓你能稽核每一次往來。
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-light.gif" alt="Agent mailbox in Shadcn Light" /><br/><sub><b>Shadcn Light</b></sub></td>
|
||||
<td width="50%"><img src="./demo/assets/agent-mail-gray.gif" alt="Agent mailbox in Shadcn Dark Gray" /><br/><sub><b>Shadcn Dark Gray</b></sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
## 運作原理
|
||||
|
||||
```mermaid
|
||||
@@ -224,71 +405,6 @@ npx companies.sh add paperclipai/companies/gstack
|
||||
|
||||
---
|
||||
|
||||
## 快速開始
|
||||
|
||||
**免安裝,直接從 npm 執行:**
|
||||
|
||||
```bash
|
||||
npx runfusion.ai
|
||||
```
|
||||
|
||||
這會啟動儀表板。子指令可直接傳遞:`npx runfusion.ai task create "fix X"`、`npx runfusion.ai --help` 等。(或完整形式:`npx @runfusion/fusion dashboard`。)
|
||||
|
||||
**單行安裝程式**(macOS 與 Linux——自動選用 Homebrew,若無則退回 npm):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://runfusion.ai/install.sh | sh
|
||||
fusion dashboard
|
||||
```
|
||||
|
||||
**Homebrew**(macOS 與 Linux):
|
||||
|
||||
```bash
|
||||
brew tap runfusion/fusion
|
||||
brew install fusion
|
||||
fusion dashboard # 或:fn dashboard
|
||||
```
|
||||
|
||||
或使用單行指令(自動新增 tap):`brew install runfusion/fusion/fusion`。
|
||||
|
||||
**npm 全域安裝**:
|
||||
|
||||
```bash
|
||||
npm install -g @runfusion/fusion
|
||||
fn dashboard # 或:fusion dashboard
|
||||
```
|
||||
|
||||
**從複本執行**(供開發使用):
|
||||
|
||||
```bash
|
||||
pnpm dev dashboard
|
||||
```
|
||||
|
||||
然後點擊終端機中顯示的 `Open:` 網址。該網址內嵌一個不記名令牌
|
||||
(`http://localhost:4040/?token=fn_...`),瀏覽器會在首次造訪時擷取並存入
|
||||
`localStorage`,之後自動重複使用。在伺服器端,Fusion 會在首次驗證執行時
|
||||
將儀表板與背景程式令牌持久化至 `~/.fusion/settings.json`,並在後續啟動時
|
||||
重複使用,除非你覆蓋它(`--token`、`FUSION_DASHBOARD_TOKEN`、
|
||||
`FUSION_DAEMON_TOKEN`)或以 `--no-auth` 停用驗證。完整的優先順序與
|
||||
重設/撤銷選項,請參閱
|
||||
[命令列參考 → fn dashboard → 驗證](./docs/cli-reference.md#fn-dashboard)。
|
||||
|
||||
### 首次執行設定
|
||||
|
||||
首次啟動時,Fusion 會開啟**引導精靈**,提供三個引導步驟:
|
||||
|
||||
1. **AI 設定** — 使用簡化的快速啟動供應商清單(建議的供應商,加上已連線的供應商),只有在需要其他供應商或詳細設定時,才展開**進階供應商設定**。只需一個供應商即可開始使用。已棄用的 Google Gemini CLI / Antigravity 供應商項目已刻意隱藏;Google/Gemini API 金鑰、Google Generative AI、Vertex 與 Cloud Code 路徑仍受支援。
|
||||
2. **GitHub(選填)** — 連結 GitHub 以匯入議題並管理 PR
|
||||
3. **第一個任務** — 建立你的第一個任務或從 GitHub 匯入(若無作用中的專案,引導精靈會先提示你註冊/選取專案目錄)
|
||||
|
||||
精靈**可關閉且不阻擋操作**——點擊**暫時略過**即可立即使用儀表板。之後可從**設定 → 驗證 → 重新開啟引導指南**再次觸發。
|
||||
|
||||
### 行動裝置
|
||||
|
||||
Capacitor + PWA 工作流程,請參閱 [MOBILE.md](./MOBILE.md)。
|
||||
|
||||
---
|
||||
|
||||
## 文件
|
||||
|
||||
| 指南 | 涵蓋內容 |
|
||||
|
||||
BIN
demo/assets/agent-chat-gray.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
demo/assets/agent-chat-light.png
Normal file
|
After Width: | Height: | Size: 292 KiB |
BIN
demo/assets/agent-chat.gif
Normal file
|
After Width: | Height: | Size: 165 KiB |
BIN
demo/assets/agent-mail-gray.gif
Normal file
|
After Width: | Height: | Size: 889 KiB |
BIN
demo/assets/agent-mail-light.gif
Normal file
|
After Width: | Height: | Size: 644 KiB |
BIN
demo/assets/agent-mail.gif
Normal file
|
After Width: | Height: | Size: 972 KiB |
BIN
demo/assets/chat-rooms-gray.gif
Normal file
|
After Width: | Height: | Size: 688 KiB |
BIN
demo/assets/chat-rooms-light.gif
Normal file
|
After Width: | Height: | Size: 522 KiB |
BIN
demo/assets/chat-rooms.gif
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
demo/assets/command-center-gray.gif
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
demo/assets/command-center-light.gif
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
demo/assets/command-center-productivity.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
demo/assets/command-center-team.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
demo/assets/command-center-themes-dark.png
Normal file
|
After Width: | Height: | Size: 908 KiB |
BIN
demo/assets/command-center-themes-light.png
Normal file
|
After Width: | Height: | Size: 926 KiB |
BIN
demo/assets/command-center-tokens.png
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
demo/assets/command-center.gif
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
4
demo/assets/fusion-logo-orange.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="none">
|
||||
<circle cx="64" cy="64" r="52" stroke="#f97316" stroke-width="8" />
|
||||
<path d="M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z" fill="#f97316" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 286 B |
BIN
demo/assets/mobile-agents.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
demo/assets/mobile-board.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
demo/assets/mobile-chat-list.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
demo/assets/mobile-chat.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
demo/assets/mobile-command-center.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
demo/assets/mobile-missions.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
demo/assets/workflows-gray.gif
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
demo/assets/workflows-light.gif
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
demo/assets/workflows.gif
Normal file
|
After Width: | Height: | Size: 246 KiB |
@@ -20,7 +20,7 @@ For a full walkthrough (installation, onboarding, first task, and daily workflow
|
||||
| Guide | Description |
|
||||
|---|---|
|
||||
| [Getting Started](./getting-started.md) | Installation, first-run, first task, and daily workflow basics |
|
||||
| [Dashboard Guide](./dashboard-guide.md) | Board/list views, chat, workflow selection/editor, terminal, git manager, files, planning, and UI tools |
|
||||
| [Dashboard Guide](./dashboard-guide.md) | Board/list views, left/right sidebar navigation, Artifacts, Import Tasks, chat, workflow selection/editor, terminal, git manager, files, planning, and UI tools |
|
||||
| [CLI Reference](./cli-reference.md) | Complete `fn` command reference with subcommands, flags, and examples |
|
||||
| [Remote Access](./remote-access.md) | Operator runbook for Tailscale/Cloudflare setup, tokenized login links, security caveats, and troubleshooting |
|
||||
| [Native Shell Connection Guide](./native-shell.md) | Canonical mobile/desktop shell onboarding, profile management, QR/manual setup, and remote handoff behavior |
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
|
||||
Fusion uses multiple agent roles for planning, execution, review, and merge workflows.
|
||||
|
||||
<!--
|
||||
FNXC:WorkflowRouting 2026-06-22-12:00:
|
||||
Agent-facing docs must preserve the workflow movement boundary: agents can assign workflows when the user explicitly asked or when creating a task, while executors cannot reroute the task under execution on their own initiative.
|
||||
-->
|
||||
|
||||
## CLI session actions
|
||||
|
||||
The dashboard's CLI session banner uses authenticated `POST /api/cli-sessions/:id/*` routes for task-bound CLI sessions. `POST /api/cli-sessions/:id/relaunch` is project-scoped, rejects sessions that do not have a `taskId`, records a relaunch intent, and lets the engine listener clear resume linkage before moving the owning task back to `todo` for a fresh executor launch. This route backs the `resume-exhausted` banner's **Relaunch fresh** action; when a session summary has no `cliSessionId`, the client does not call the route.
|
||||
@@ -27,6 +32,19 @@ fn chat <agent-id> [message…] [--once] [--non-interactive] [--poll-ms <n>]
|
||||
- Agent-acting session lanes share the same skill-injection contract as executor sessions: executor, merger, triage, reviewer, heartbeat, step-session, dashboard chat/room responders, CLI agent execution, planning, mission interview, milestone/slice interview, agent-onboarding interview, workflow design, memory dreams/insight extraction, and scheduled cron automation all request agent/fallback skills plus enabled plugin-contributed skills when a plugin runner is available. Utility-only lanes that only summarize/extract/generate JSON (title/PR summaries, memory compaction, subtask breakdown, text refinement, agent generation, PR metadata generation, evaluator/research synthesis, and similar one-shot helpers) intentionally stay exempt to avoid loading skills where no agent-style tool loop can use them.
|
||||
- In dashboard model-loop chat (main chat, QuickChat, and room responders), typing `/skill:{name}` requests that skill for the current AI session and strips the slash token from the prompt sent to the model. The requested skill is still subject to the normal enabled/disabled execution-skill filters; CLI-agent-backed PTY chat keeps raw terminal input semantics and does not interpret this command.
|
||||
- Dashboard chat and planning sessions with a scoped task store expose `fn_task_document_write` and `fn_task_document_read`; because neither lane has an ambient task, both tools require an explicit `task_id`.
|
||||
- Agent workflow-routing tools follow an intent boundary: agents may select or change a task workflow only when the user explicitly requested that workflow or when the agent created the task. Executors must not call `fn_workflow_select` to reroute the task they are executing unless the task instructions or a user steering comment explicitly asks for the workflow change.
|
||||
- Executor, heartbeat, and dashboard chat sessions expose artifact registry tools so agents can publish and inspect multi-type deliverables without relying on the dashboard gallery. Planning sessions intentionally exclude artifact tools until they can thread the existing `MessageStore` dependency.
|
||||
|
||||
### Artifact registry tools
|
||||
|
||||
Artifact tools operate on the shared artifact registry, so artifacts are visible across agents and tasks when the caller has the artifact ID or can discover it through filters.
|
||||
|
||||
- `fn_artifact_register` registers a `document`, `image`, `video`, `audio`, or `other` artifact with `title`, optional `description`, optional `mimeType`, optional inline text `content`, optional `uri`/path reference, and optional `taskId`. Tool callers should provide either inline `content` or a `uri`/path reference for media stored elsewhere. Executor/heartbeat sessions infer the registering agent as `authorId`; dashboard chat uses the `dashboard-chat` author and requires `task_id` because chat has no ambient task.
|
||||
- `fn_artifact_list` lists artifacts across agents and tasks with optional `type`, `authorId`, `taskId`, `search`, `limit`, and `offset` filters. Dashboard chat's scoped variant requires `task_id` and otherwise supports `type`, `authorId`, `search`, `limit`, and `offset` for that task.
|
||||
- `fn_artifact_view` fetches one artifact by `id`, returning registry metadata plus inline `content` when present or the stored `uri`/path reference for media artifacts.
|
||||
- Successful registration emits a best-effort `system` → `user` inbox notification to `DASHBOARD_USER_ID` with `artifactId`, `artifactType`, `title`, `authorId`, and optional `taskId` metadata. Notification delivery failures are logged and must never fail or roll back the artifact registration.
|
||||
|
||||
For the user-facing gallery and notification UX, see [Artifacts View](./dashboard-guide.md#artifacts-view) and [Mailbox View](./dashboard-guide.md#mailbox-view). For storage layout and hydration semantics, see [Artifact registry](./storage.md#artifact-registry-fn-6777).
|
||||
|
||||
### Flags
|
||||
|
||||
@@ -127,13 +145,13 @@ V1 runtime action categories:
|
||||
|
||||
The engine classifies tool calls by behavior (not namespace alone):
|
||||
|
||||
- `file_write_delete`: built-in `write` / `edit`, plus persistent write helpers like `fn_task_document_write`, `fn_memory_append`, `fn_task_attach`
|
||||
- `file_write_delete`: built-in `write` / `edit`, plus direct filesystem attach helpers like `fn_task_attach`; low-risk coordination/registration writes such as `fn_task_document_write` and `fn_artifact_register` are handled by the coordination-exempt/read-only allow-lists below rather than this category
|
||||
- `command_execution`: built-in `bash` when not classified as mutating git
|
||||
- `git_write`: mutating git shell commands run via `bash`
|
||||
- `network_api`: external/network-facing tools (for example `fn_research_run`, `fn_research_cancel`, `fn_research_retry`, `fn_web_fetch`)
|
||||
- `task_agent_mutation`: task/agent mutation tools (for example `fn_update_agent_config`, `fn_task_pause`, `fn_spawn_agent`; action-gate task-import/create tools like `fn_task_create`, `fn_delegate_task`, `fn_task_import_github`, and `fn_task_import_github_issue` use this category in action-gate evaluation)
|
||||
- Dashboard permission editors now show per-category example tools sourced from `AGENT_PERMISSION_POLICY_CATEGORY_TOOL_EXAMPLES` in `@fusion/core`, plus a read-only exempt-tools panel for coordination/messaging bypass tools.
|
||||
- `none`: positively recognized read-only tools (`read`, `grep`, `find`, `ls`, list/show/get-style `fn_*` tools, plus permanent-agent coordination/task-creation helpers like `fn_task_create`, `fn_delegate_task`, `fn_task_import_github`, and `fn_task_import_github_issue`)
|
||||
- `none`: positively recognized read-only tools (`read`, `grep`, `find`, `ls`, list/show/get-style `fn_*` tools, plus permanent-agent coordination/task-creation helpers like `fn_task_create`, `fn_delegate_task`, `fn_task_import_github`, and `fn_task_import_github_issue`). Artifact tools mirror `fn_task_document_write` in the shipped allow-lists: `fn_artifact_register`, `fn_artifact_list`, and `fn_artifact_view` are present in `READONLY_FN_TOOLS` and `COORDINATION_EXEMPT_TOOLS`, so registration is treated as coordination/registry publication instead of a broad mutation approval.
|
||||
|
||||
`bash` git-write heuristic in v1:
|
||||
|
||||
@@ -152,7 +170,7 @@ Approval pause/resume lifecycle (FN-3548):
|
||||
|
||||
- Permanent-agent gating short-circuits `block` and `require-approval` actions before tool execution and returns structured non-success tool results.
|
||||
- For `require-approval`, the engine creates/reuses a durable approval request and pauses execution with canonical `pauseReason: "awaiting-approval"`.
|
||||
- If task-backed, the owning task is paused (`Task.paused=true`, `pausedByAgentId=<requester>`); the requesting agent is paused (`state="paused"`, `pauseReason="awaiting-approval"`).
|
||||
- If task-backed, the owning task is paused (`Task.paused=true`, `pausedByAgentId=<requester>`); the requesting agent is paused (`state="paused"`, `pauseReason="awaiting-approval"`). The task-detail **Paused by agent** indicator is context only: operators may still manually pause or unpause an agent-assigned task, and unpause clears the task pause latch.
|
||||
- Dedupe semantics by `approvalDedupeKey`: `pending` reuses the same request, `approved` allows exactly one execution and then marks request `completed`, `denied` stays blocked, `completed` requires a fresh request.
|
||||
- HTTP decision endpoint resumes best-effort: `POST /api/approvals/:id/decision` with `{ decision: "approve" | "deny", comment? }` unpauses matching task/agent when they are paused for `awaiting-approval`.
|
||||
- Approval API surface: `GET /api/approvals` (supports status/limit/offset and returns `{ requests, total, pendingCount }`), `GET /api/approvals/:id` (includes request context + audit/history), `POST /api/approvals/:id/decision`.
|
||||
@@ -692,6 +710,14 @@ Before clicking **Create**, the final review step remains editable for identity/
|
||||
|
||||
The final `createAgent(...)` call always uses the latest values from these step-2 controls.
|
||||
|
||||
### First-run setup first agent
|
||||
|
||||
After first-project registration, first-run setup asks whether to create a first persistent agent before entering the dashboard. The CEO preset is selected by default because this first agent is framed as an optional coordinator that can help create tasks and keep direction across sessions.
|
||||
|
||||
Users can choose a preset, create the project agent, or skip it and create agents later from the Agents view. Agents are optional for task work: Fusion still starts temporary agents to plan, code, review, and merge tasks.
|
||||
|
||||
When `experimentalFeatures.agentOnboarding` is enabled, first-run setup also offers the same draft-first **AI Interview** path used by the New Agent dialog. Applying the interview draft updates the setup preview, but persistence remains explicit through **Create Agent**.
|
||||
|
||||
### Experimental planning-style onboarding
|
||||
|
||||
The **New Agent** dialog is the canonical launch point for agent creation.
|
||||
|
||||
@@ -602,6 +602,7 @@ See [Memory Plugin Contract](./memory-plugin-contract.md) for the full plan.
|
||||
- **Executor**: `TaskExecutor` (`executor.ts`) implements tasks in worktrees
|
||||
- **Reviewer**: `reviewStep()` (`reviewer.ts`) performs plan/code/spec reviews
|
||||
- **Merger**: `aiMergeTask()` (`merger.ts`) merges approved work
|
||||
- **Task-detail chat / steering comments**: `TaskStore.addSteeringComment()` writes chat steering text to both `task.comments` and `task.steeringComments`. The executor still uses `steeringComments` for live in-session injection, while next-prompt agent lanes read canonical user-authored `task.comments`: planning/spec generation, spec review, plan/code reviewers, standard merger prompts, and clean-room AI merge + merge-review prompts all surface recent user comments through the shared `agent-user-comments.ts` formatter.
|
||||
|
||||
#### Reviewer verdict recovery contract (FN-4092)
|
||||
- Reviewer verdicts are `APPROVE`, `REVISE`, `RETHINK`, or `UNAVAILABLE`.
|
||||
@@ -681,6 +682,7 @@ Runtime action-gate flow (v1):
|
||||
- `recoverGhostReviewTasks()` is a fallback only for idle, non-terminal `in-review` states. Terminal/actionable states (notably `status: "failed"`) are preserved and **not** auto-kicked back to `todo`.
|
||||
- `recoverPausedAbortFailures()` clears executor pause/resume abort parks only when the durable row is safe to recover. `todo`/`in-progress` rows are requeued for normal scheduling, while clean `in-review` rows (completed steps, not paused/user-paused/executing, auto-merge eligible, no confirmed or terminal merge evidence) have `status`/`error` cleared in place so review progression can continue. User hard-cancel, global/user pause, `autoMerge:false`, terminal merge, and live-execution guards remain operator-actionable. Successful recovery emits `task:auto-recover-paused-abort-park` with `preservedInReview` metadata.
|
||||
- `reattach-orphaned-assigned-executions` is a forward-resume safety net for durable-agent assignments. During startup recovery and periodic maintenance, after orphaned-agent and stale-heartbeat-run repairs, self-healing finds `in-progress` tasks with an `assignedAgentId` whose agent has no active heartbeat run and no active executor session after the orphan grace window. It re-dispatches in place via `executor.resumeTaskForAgent(agentId)` (the same seam used by clean `HeartbeatMonitor.onRunCompleted` and guarded by executor double-execution checks), emits `task:reattach-orphaned-execution`, and never moves the task backward. This complements engine-start `executor.resumeOrphaned()` and leaves unassigned/role-based execution recovery to the existing startup/limbo/stuck-task paths.
|
||||
- Durable `Agent.taskId` is a running assignment for parked `todo`/`triage` task rows only when the agent has live proof: a fresh active heartbeat run or an executor-active/tracked heartbeat signal. Scheduler overlap requeues, task move sync, self-healing, and Reports Health Check share this invariant: stale durable links are cleared or rendered as stale while `status: "queued"` and `overlapBlockedBy` remain on the task row so file-scope lease blocking is not weakened.
|
||||
- Mission validation has a dedicated stale-run reaper: startup recovery and Batch 2 maintenance call `reapStaleMissionValidatorRuns()` when wired by the runtime, using `VALIDATOR_RUN_STALE_MAX_AGE_MS` (currently 6 hours). The sweep terminates ownerless `mission_validator_runs.status='running'` rows as `error`, writes the reap reason into `summary`, leaves `lastValidatorRunId` pointing at the now-terminal run, and emits run-audit telemetry with `mutationType: "mission:validator-run-reaped"` plus `runId`/`featureId`/`missionId`/`triggerType`/`elapsedMs` metadata. Active mission features move to `loopState="needs_fix"` + `lastValidatorStatus="error"` unless their parent mission is already `complete`/`archived`.
|
||||
|
||||
#### Stuck-loop exhaustion terminal contract
|
||||
@@ -859,8 +861,11 @@ Operator setup + troubleshooting guide: **[Remote Access runbook](./remote-acces
|
||||
|
||||
Key server capabilities:
|
||||
- REST APIs for tasks, git, GitHub, agents, missions, planning, automations/routines, settings
|
||||
- System stats snapshot and vitest process controls APIs (`GET /api/system-stats`, `POST /api/kill-vitest`) exposing dashboard process/system telemetry (including app CPU percentage and host memory rendered as numeric values, radial gauges, and trend sparklines in the Command Center System area), task/agent aggregates, and manual vitest process termination
|
||||
- Command Center analytics APIs (`GET /api/command-center/tokens`, `/tools`, `/activity`, `/productivity`, `/team`, `/github`, `/signals`, `/plugin-activations`, `/live`) are project-scoped dashboard routes. `/productivity` reads Lines changed from nullable `task_commit_associations.additions`/`deletions` merge-time diff stats, derives estimated `hoursSaved` from that LOC via the exported `HUMAN_LINES_PER_HOUR` rate, and keeps the unavailable sentinel for both fields when no in-range association has stats. Its `taskDuration` payload aggregates done tasks whose `executionCompletedAt` falls in the selected range, using positive `tasks.cumulativeActiveMs` values for completed count, average, median, p90, and total active execution time; missing qualifying durations remain unavailable rather than zero. `/signals` aggregates real local `incidents` rows for total/open/resolved counts, MTTR, and source/severity/status breakdowns and returns honest empty/unavailable sentinels instead of synthetic signal volume. `/plugin-activations` aggregates persisted plugin/extension load events for the selected range and returns unavailable when no rows exist instead of treating missing history as zero activations.
|
||||
- System stats snapshot and vitest process controls APIs (`GET /api/system-stats`, `POST /api/kill-vitest`) exposing dashboard process/system telemetry (including app CPU percentage and host memory rendered as numeric values, radial gauges, and trend sparklines in the Command Center System area), task/agent aggregates, and manual vitest process termination. Host-memory usage is derived from shared OS-available memory (`process.availableMemory()` with an unreliable `freemem` fallback) rather than raw free pages so macOS inactive/cache memory is not counted as used.
|
||||
- Command Center analytics APIs (`GET /api/command-center/tokens`, `/tools`, `/activity`, `/productivity`, `/team`, `/github`, `/signals`, `/plugin-activations`, `/live`) are project-scoped dashboard routes. `/productivity` reads Lines changed from nullable `task_commit_associations.additions`/`deletions` merge-time or backfilled diff stats, derives estimated `hoursSaved` from that LOC via the exported `HUMAN_LINES_PER_HOUR` rate, and keeps the unavailable sentinel for both fields when no in-range association has stats. `POST /api/command-center/productivity/backfill-loc` is the explicit operator-triggered, dry-run-defaulting local-git backfill for historical NULL stats; it is not run during dashboard rendering or analytics reads. Its `taskDuration` payload aggregates done tasks whose `executionCompletedAt` falls in the selected range, using positive `tasks.cumulativeActiveMs` values for completed count, average, median, p90, and total active execution time; missing qualifying durations remain unavailable rather than zero. `/signals` aggregates real local `incidents` rows for total/open/resolved counts, MTTR, and source/severity/status breakdowns and returns honest empty/unavailable sentinels instead of synthetic signal volume. `/plugin-activations` aggregates persisted plugin/extension load events for the selected range and returns unavailable when no rows exist instead of treating missing history as zero activations.
|
||||
<!-- FNXC:CommandCenter 2026-06-21-00:00: Maintainers need the pricing contract in architecture docs: MODEL_PRICING is hand-maintained, pricingAsOf changes with every rate edit, provider coverage includes OpenAI/Codex/Anthropic/Gemini, and Command Center never guesses or persists costs. -->
|
||||
<!-- FNXC:CommandCenter 2026-06-22-00:00: FN-6876 made pricing operator-editable: user/global overrides and LiteLLM one-click refreshes must take precedence over the built-in table while remaining estimates, not persisted billing truth. -->
|
||||
- Model pricing & cost estimation: Command Center token cost is derived at read time by `packages/core/src/model-pricing.ts` and is not persisted as billing truth. Maintainers still update the built-in `MODEL_PRICING` fallback table in that file; keys are lowercased `${provider}:${model}` with a bare `:model` fallback for callers that only know the model id. Each entry stores USD per 1M tokens for input, output, cache-read, and cache-write plus a `source` citation. Bump `pricingAsOf` in the same change as any built-in rate edit, because the dashboard surfaces it as the **prices as of** date and marks entries low-confidence after `PRICING_STALE_AFTER_MS` (approximately 180 days / two quarters) relative to that date. Global `modelPricingOverrides` from Settings take precedence over built-ins using the same exact-key then bare-model lookup order; `POST /api/command-center/pricing/fetch` is the only dashboard network path and fetches LiteLLM's model pricing JSON on explicit user action, parses it through the pure core parser, persists the resulting overrides with fetched metadata, and leaves the prior overrides intact on fetch/parse failure. Unknown models resolve to `unavailable` rather than a guessed price.
|
||||
- Remote access APIs (`/api/remote/*`) for provider config, activation, tunnel lifecycle, status, token issuance, authenticated URL generation, and QR payload generation
|
||||
- Operational runbook (prereqs/security/troubleshooting): [`docs/remote-access.md`](./remote-access.md)
|
||||
- `/api/remote/tunnel/start`, `/api/remote/tunnel/stop`, and `/api/remote/tunnel/kill-external` cover tunnel lifecycle and external funnel cleanup.
|
||||
@@ -1087,6 +1092,7 @@ The run-audit system records every mutation performed by the engine across four
|
||||
- **Database / `task:no-commits-finalize-blocked-incomplete-steps`** — emitted by no-op finalize lanes when a `noCommitsExpected` task has no net branch changes but incomplete/skipped steps outweigh done steps. Metadata includes `{ reason, doneCount, incompleteCount, lane, classification?, baseRef? }`; the accompanying task log explains that the task was demoted to `todo` with progress preserved instead of finalized as done.
|
||||
- **Database / `task:orphan-detected-no-action`** — emitted by `recoverOrphanedExecutions` (FN-5337) when row metadata looks orphaned after grace windows; annotation-only event with no lifecycle mutation (`in-progress` task stays put).
|
||||
- **Database / `task:reattach-orphaned-execution`** — emitted by `reattachOrphanedAssignedExecutions` (FN-6336) when self-healing re-dispatches an idle assigned `in-progress` task forward via `executor.resumeTaskForAgent(agentId)` after proving the assigned agent has no active heartbeat run or active execution.
|
||||
- **Database / `task:reconcile-stale-agent-assignment`** — emitted when self-healing or heartbeat reconciliation clears stale durable `Agent.taskId`/`state` for a task parked in `todo`/`triage` without live execution proof. Metadata includes `{ agentId, taskId, taskColumn, agentState, status, blockedBy, overlapBlockedBy, hadFreshRun, hadActiveExecution, reason }`; task queue/lease fields are preserved.
|
||||
- **Database / `task:soft-delete-column-reconciled`** — emitted by `reconcileSoftDeletedColumnDrift` (FN-5566, re-land FN-5446) when a soft-deleted row (`deletedAt IS NOT NULL`) is found with legacy `column != 'archived'`; rewrites only `column` (no resurrection), with metadata `{ previousColumn }`.
|
||||
- **Database / `session:runtime-resolved`** — emitted once per `createResolvedAgentSession` call with metadata `{ sessionPurpose, runtimeId, wasConfigured, provider, modelId, mockProviderActive, testModeActive, runtimeHint? }` for per-lane runtime/provider attribution.
|
||||
- **Database / `task:reconcile-dependency-blocking-lease`** — emitted by `reconcileDependencyBlockingLeases()` (FN-6292) when self-healing rebounds an `in-progress` holder to `todo` because an unmet dependency is blocked by the holder's stale file-scope lease. Metadata includes the dependency ID, blocked-by marker, and unmet dependency list.
|
||||
@@ -1465,7 +1471,7 @@ Dashboard session-diff route registration (`packages/dashboard/src/routes/regist
|
||||
- `legacy` = recovered via legacy task-id/subject matching
|
||||
- `ambiguous` = manual reconciliation where historical task-id attribution could be misleading
|
||||
|
||||
Commit associations also carry optional `additions`/`deletions` shortstat counts captured by merge paths. These nullable fields are the Command Center Productivity LOC source: analytics sum additions + deletions only when at least one in-range row has stats, derive estimated human hours saved as `round((additions + deletions) / HUMAN_LINES_PER_HOUR, 1)`, and preserve the `—` unavailable sentinel for both LOC and hours saved when all matching rows are `NULL` so unknown historical data is never rendered as `0`. The hours-saved field is a conservative estimate, not exact time tracking.
|
||||
Commit associations also carry optional `additions`/`deletions` shortstat counts captured by merge paths or filled later by the explicit `POST /api/command-center/productivity/backfill-loc` operator backfill. These nullable fields are the Command Center Productivity LOC source: analytics sum additions + deletions only when at least one in-range row has stats, derive estimated human hours saved as `round((additions + deletions) / HUMAN_LINES_PER_HOUR, 1)`, and preserve the `—` unavailable sentinel for both LOC and hours saved when all matching rows are `NULL` so unknown historical data is never rendered as `0`. The backfill only touches rows where both columns are `NULL`; malformed SHAs and commit objects unavailable in the local repo stay `NULL`, so partial historical coverage remains visible until a real local git object supplies stats. The hours-saved field is a conservative estimate, not exact time tracking.
|
||||
|
||||
Command Center Productivity task-duration stats use task rows, not commit rows: done tasks completed in range (`executionCompletedAt`) contribute when `cumulativeActiveMs > 0`. The aggregator computes completed count plus average, median, p90, and total active execution milliseconds; if no qualifying task exists, the duration metrics use the same unavailable `—` contract instead of reporting `0`.
|
||||
|
||||
@@ -1677,7 +1683,7 @@ The GitHub tracking state listener now attaches to every registered project stor
|
||||
- New global surfacing adds `merger:autostashOrphans` TaskStore events, engine helpers (`listAutostashOrphans`, `getAutostashDiff`, `applyAutostashBySha`, `dropAutostashBySha`), and dashboard API endpoints under `/api/stash-recovery/*`.
|
||||
- `merger:autostashOrphans` records now include provenance fields (`sourcePhase`, `detectedByTaskId`, `detectedAt`) so operators can attribute leftovers to the merge phase and surfacing task/session.
|
||||
- `ProjectEngine` consumes the orphan event stream and auto-creates deduplicated `sourceType: "recovery"` follow-up tasks for live leftovers, so repeated detections do not spam the board.
|
||||
- Dashboard operators can inspect orphan counts, review diffs, apply stashes, and explicitly drop entries with confirmation.
|
||||
- Dashboard operators inspect orphan counts, review diffs, apply stashes, and explicitly drop entries with confirmation from **Git Manager → Recovery**; the recovery controls are part of Git Manager rather than a standalone top-level dashboard view.
|
||||
- Decision: recovery stays user-gated. Auto-apply was rejected because clean-tree checks are racy, stash placement is ambiguous after source task merge, and apply conflicts can produce hard-to-untangle state. `sweepAutostashOrphans` continues to auto-drop only subsumed entries while preserving live developer work.
|
||||
|
||||
#### Automated follow-up dedup (FN-5232)
|
||||
@@ -1795,7 +1801,7 @@ This section preserves the detailed lifecycle/self-healing contracts that were f
|
||||
- **Completion fan-out is synchronous**: `SelfHealingManager.reconcileCompletedTask()` runs on `in-review → done`. Downstream stale `blockedBy` links and residual `fusion/<task-id>` branch/worktree artifacts are reconciled immediately, not on a periodic sweep.
|
||||
- **In-review stall deadlock**: identical stalls (same code + reason) repeated past `inReviewStallDeadlockThreshold` (default 3) auto-pause with `pausedReason: "in-review-stall-deadlock"` and `status: "failed"`. User-initiated retry paths (dashboard retry, `fn_task_retry`, and CLI `task retry`) clear that automatic deadlock pause so the retry can execute, but they never override explicit/manual pauses or unrelated automatic pause reasons.
|
||||
- **Restart recovery**: `RestartRecoveryCoordinator` classifies interrupted `in-progress` runs. Unusable-worktree session-start failures (`missing`, `incomplete`, `unregistered git worktree`) are recoverable; retries are capped at `MAX_WORKTREE_SESSION_RETRIES=3` before escalating.
|
||||
- **Executor pre-session liveness gate (FN-4935)**: the gate now skips for fresh acquisitions (`acquisition.source === "fresh"`), emits structured `not_usable_task_worktree:<classification>` diagnostics (including canonicalized registered-path snapshots) and a `worktree:incomplete-detected` audit event with `source: "executor-liveness-gate"`, while preserving the existing `taskDoneRetryCount` / `MAX_TASK_DONE_REQUEUE_RETRIES` requeue contract. FN-5772 adds a bounded nested-root self-heal: when `task.worktree` points at a strict descendant of a registered worktree root inside the configured worktrees dir, executor re-anchors `task.worktree` to the git top-level, emits `worktree:reanchored` (`fromPath`, `toPath`, `source`), and proceeds; repo-root/outside-dir/unregistered top-level mismatches still fail. FN-4651 `worktreeSessionRetryCount` remains scoped to the in-review/session-start recovery path.
|
||||
- **Executor pre-session liveness gate (FN-4935/FN-6861)**: the gate now skips for fresh acquisitions (`acquisition.source === "fresh"`), emits structured `not_usable_task_worktree:<classification>` diagnostics (including canonicalized registered-path snapshots) and a `worktree:incomplete-detected` audit event with `source: "executor-liveness-gate"`, while preserving the existing `taskDoneRetryCount` / `MAX_TASK_DONE_REQUEUE_RETRIES` requeue contract. The project repo root is never a usable task worktree even though it is a legitimately registered Git worktree; `classifyTaskWorktree` returns `repo-root` for canonical root-equal paths, and resume acquisition treats that as self-healable stale metadata by clearing `task.worktree` and creating a fresh checkout under the configured worktrees directory. FN-5772 adds a bounded nested-root self-heal: when `task.worktree` points at a strict descendant of a registered worktree root inside the configured worktrees dir, executor re-anchors `task.worktree` to the git top-level, emits `worktree:reanchored` (`fromPath`, `toPath`, `source`), and proceeds; repo-root/outside-dir/unregistered top-level mismatches still fail. FN-4651 `worktreeSessionRetryCount` remains scoped to the in-review/session-start recovery path.
|
||||
- **Stale self-owned active-session reconcile on conflict cleanup (FN-4973)**: when executor worktree-conflict cleanup finds only a same-task stale `activeSessionRegistry` entry and no live in-memory `activeWorktrees` binding for that task/path, it must unregister the stale entry before `removeWorktree` (plus one-shot backstop reconcile on same-task `ActiveSessionWorktreeRemovalError` races). Foreign-task entries remain protected by FN-4811 and must never be reconciled by the requesting task.
|
||||
- **Same-task stale removal canonical helper (FN-5346)**: executor same-task cleanup paths now route pre-removal reconciliation through `reconcileSelfOwnedActiveSessionForRemoval` (via executor helper wiring), so stale self-owned `activeSessionRegistry` residues are cleared only when no live in-memory binding exists, while FN-4811 foreign-owner refusals and live-owner protections remain intact.
|
||||
- **Task title/ID drift (FN-4898)**: active and archived title writes normalize foreign embedded `FN-NNN` tokens via `packages/core/src/task-title-id-drift.ts`. Empty placeholder groups (`()`, `[]`, `{}`) left behind by token stripping are also removed in both `normalizeTitleForTaskId` and `sanitizeTitle` (FN-4978). Lineage is preserved in `sourceParentTaskId` / description markers, not title embeds. FN-5077 extends drift normalization to reject dangling-connector fragments (`"Close as duplicate of"`) so token-stripped residuals never persist as task titles.
|
||||
|
||||