87a3700a21a7400b3a279d4e3fbc1a28dad6384f
3121 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
72f0bbb503 |
docs: record dashboard api-lane PostgreSQL contention as a suite-infrastructure flake pattern
Three consecutive full-lane runs on the same tree each failed a DIFFERENT file, every one passing in isolation, with hook timeouts arriving alongside PostgreSQL 'Failed query' warnings from two api lanes sharing one database. That is the same class FN-9131 investigated for core's loaded PostgreSQL directory. Deliberately not quarantined: quarantine is file-level and the failing file moves, so it would evict healthy coverage without touching the cause. Recorded with the evidence so the next person does not re-derive it, and so the rescue is aimed at the lane runner's connection/concurrency budget rather than at whichever test lost the race that run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
5378bca7f6 |
test: fix the dashboard quality runner's self-spawning tests
Running the dashboard's REAL test command (`run-quality-tests.mjs`, which shards into 15 lanes) surfaced two failures that a plain `vitest run` never shows — worth noting on its own, since measuring around a package's own command is how a suite gets called green on a number the project does not produce. `scripts/__tests__/run-quality-tests.test.ts` spawns the package's own `pnpm --filter @fusion/dashboard test` to prove the package-command wiring. Inside a full lane run that child inherited a Corepack environment that stopped to ask about downloading pnpm, so it never launched, the lane log came back empty, and the assertion read 0 launched projects. It passed in isolation only because that shell had already resolved pnpm. Both spawn sites now set COREPACK_ENABLE_DOWNLOAD_PROMPT=0; nothing about the assertions changed. Also records PlanningModeModal.planning-flow as a suite-only flake rather than forcing it green: it fails only in lane `app:backfill-3` under four concurrent 6GB shards, passes 83/83 in isolation, and picked a DIFFERENT case on each of two runs — a render-settle timing problem, not a product defect. Recorded as a first sighting; a repeat of the same case is an on-sight quarantine. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
64cb17c100 |
FN-9204: advertise a valid memory MCP server version
Make the built-in memory MCP server complete the SDK-validated initialize handshake. - Include a non-empty version in fusion-memory serverInfo responses. - Cover the real SDK handshake, malformed-response skip path, and JSON-RPC envelopes. - Document the protocol requirement and add a patch changeset. Files changed: .changeset/fn-9204-memory-mcp-handshake.md | 7 ++ docs/mcp.md | 2 + .../__tests__/mcp-memory-server-spawn.test.ts | 5 +- .../mcp/__tests__/memory-mcp-handler.test.ts | 7 +- packages/core/src/memory/mcp/memory-mcp-handler.ts | 8 +- .../src/__tests__/mcp-memory-handshake.test.ts | 120 +++++++++++++++++++++ 6 files changed, 146 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-9204 Fusion-Task-Lineage: 0f68bdd5-56fe-4fdb-867f-2a5e0ea4de65 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
28a0ebc382 |
docs: index three Stash memory backend docs orphaned by #3494
Add memory-backend-integration.md to Architecture & Development (plus its
missing docs-index back-link) and performance/spawn-storm-attribution.md
and research/stash-vector-search-evaluation.md to Audit Reports. All three
were added by
|
||
|
|
c9f3f11a72 |
fix: allow worktree agents to read user skills (#3506)
## Summary - allow worktree sessions to read the standard user skill root at `~/.agents/skills` - keep sibling `~/.agents` files and all write/edit/Bash access outside the exception - canonicalize existing path components so symlinks cannot escape an allowed skill root - document the boundary and add a patch changeset This extends the same host-skill consistency fixed in #2384: Fusion should not tell an agent to load a skill and then block the skill body. ## Test plan - [x] 15 worktree-boundary tests - [x] `pnpm --filter @fusion/engine typecheck` - [x] scoped ESLint - [x] changeset and FNXC date checks - [x] `pnpm verify:fast` (20 steps, including build and boot smoke) - [x] CLI CI-shape test (72 tests) ## Local gate notes `pnpm test:gate` passed all static checks, 432 engine-core tests, and 184 core unit tests. Its PostgreSQL lane could not authenticate locally (`empty password returned by client`). The full `pi-create-fn-agent.test.ts` run also reaches an unrelated dashboard-chat principal assertion failure already present at the exact `origin/main` SHA; the 15 boundary tests pass. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Worktree agents can read and search skills installed in the standard `~/.agents/skills` directory. - **Bug Fixes** - Preserved worktree protections for writing, editing, and Bash operations. - Blocked access to unrelated files and prevented symlink-based boundary escapes across supported path operations. - Improved access validation for paths that do not yet exist. - **Documentation** - Updated worktree boundary documentation to describe skill access and its restrictions. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
8fcf4bdbaa |
feat: Stash memory backend — session capture, per-chat backfill, opt-in vector search (#3494)
## Summary Adds the **Stash memory backend** (`memory.backendType=stash`) that connects Fusion's agent memory to the [Stash](https://github.com/Fergana-Labs/stash) product — *knowledge bases for the agent era* ([product site: joinstash.ai](https://joinstash.ai)). Fusion becomes a first-class Stash client: complete chat sessions and finished tasks are captured into Stash, memory is recalled during chat, and Stash sessions are kept in sync with the dashboard (including deletes and archival). **Product:** <https://github.com/Fergana-Labs/stash> · [joinstash.ai](https://joinstash.ai) ## What's included ### 1. Stash memory backend (RUFU-068 / RUFU-121) - New `StashMemoryBackend` (`memory.backendType=stash`) with `stashUrl` / `stashApiKey` settings (global secrets-store `stash-api-key` + per-project override). - **Complete-chat-session capture** keyed by ChatSession id. - Sessions are classified into **per-project folders** (get-or-create, `external_key fusion-<projectId>`, 1h per-process cache) and **soft-deleted with their chat** via `DELETE /api/chat/sessions/:id`. - Per-conversation **memory-focus** read-time scoping (new `0066_chat_session_memory_focus.sql` migration — sequence renumbered 0059→0060→0061→0065→0066 as origin/main claimed the lower numbers); event metadata enriched with `project` / `project_name` / `chat_title`. - Recall queries normalized to single-keyword / explicit-OR ASCII (≤100 chars); shared normalizer export reused by per-turn recall. ### 2. Per-task executor transcript capture (RUFU-122) Finished or failed tasks upload their executor transcript (`agent-log.jsonl`) to Stash as a task session. ### 3. Bulk archive Stash sync (RUFU-125) Archived task-planner chats soft-delete their Stash sessions on bulk archival (paged). The snapshot of doomed session ids is taken *before* the local bulk delete, and the Stash sync runs fire-and-forget so a Stash stall can never delay local archival. ### 4. Per-chat "Preserve to Stash" backfill (RUFU-136) A per-chat action that backfills a chat's full history into Stash, with client-side idempotency and a pre-check that skips already-uploaded content (fail-closed, no duplicate upload on transport failure). - **Session-folder naming fix:** the first project folder is now named "Fusion — <project name>" instead of the bare "Fusion" fallback (the backfill now resolves the central-registry project name, best-effort, never blocking the upload). ### 5. Opt-in semantic (vector) recall (RUFU-126) `stashVectorSearch` setting (default `false` — **zero behavior change until enabled**). For multi-word queries the backend tries Stash's semantic-search endpoint first, then falls back byte-identically to the keyword path. Definitive 404/405/501/503 responses are negatively cached per process. Requires a patched Stash server (new endpoint + `sentence-transformers` + embedding backfill); unpatched servers are transparently bypassed after the first 404. ## Safety - **Opt-in / inert by default:** the default backend remains `qmd`; the Stash backend is inert until `memoryBackendType=stash` + `stashUrl` are set. - All Stash I/O is **best-effort, fail-closed, and non-blocking** — a Stash outage never blocks chat, task completion, or archival. No run-audit content is emitted. ## Testing - Backfill + delete-sync suites (20/20), Stash backend suite (68/68), executor memory / session capture suites, `memory-focus-recalling`, description-guard — all green. - `tsc` clean across core / engine / dashboard. - Live verification: bulk backfill of 21/24 chats completed; the "Preserve to Stash" action is idempotent on re-run. ## Changesets - `@runfusion/fusion` **minor** — Stash memory backend + capture (RUFU-068/121), per-task transcript (RUFU-122), bulk archive sync (RUFU-125), per-chat backfill (RUFU-136), opt-in vector search (RUFU-126) - `@runfusion/fusion` **patch** — backfill session-folder naming fix ## Rebase Note (2026-08-23) Rebased onto `origin/main` `3f448f7292` (v0.77.0-beta.7). Conflicts resolved additively: - `packages/core/src/postgres/schema-applier.ts` + test — upstream's 0062-0065 migrations (task/subtask splitting removal, AI merge review reconciliation, task repository scope, FN-149 review convergence) unioned with this PR's `chat_sessions.memory_focus` migration, which is **renumbered 0065 → 0066** (upstream's FN-149 shipped 0065 canonically on origin/main); `SCHEMA_BASELINE_VERSION` advances to `0066`. - `packages/dashboard/app/components/ChatView.tsx` — upstream's docked chat sidebar resize handlers unioned with the RUFU-136 "Preserve to Stash" backfill handler. - New commit: `settings.memory.*` stash-backend i18n keys added to all 6 secondary locales (RUFU-121/122 parity fix; `pnpm i18n:status` no longer reports any violation introduced by this PR). **Deploy note (operator environments that already ran a pre-rebase build of this PR):** the memory-focus SQL may already be in the schema under ledger row `0065`. Remap that row to `0066` (`UPDATE fusion_schema_migrations SET version = '0066' WHERE version = '0065';`) *before* first boot of a 0066-ceiling binary — otherwise the fresh upstream `0065_fn_149_review_convergence_stage.sql` would be skipped as "already applied". Clean databases (no prior memory-focus row) need no action. **CI note — Lint (lifecycle-column census) is red on the merge base:** `pnpm check:lifecycle-columns --strict` fails identically on pure `origin/main` `3f448f7292` with `packages/core/src/db/legacy-adoption.ts: 0 -> 3` (3 column guards in the U9b legacy-adoption table without a baseline entry or `DELIBERATE-LITERAL` marker). Verified by running the census on a clean origin/main checkout — inherited from the base, not introduced by this PR. Fix belongs upstream; tracked separately. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added Stash memory integration with project configuration and optional semantic search. * Added per-chat memory focus controls and a `/focus` command. * Added “Preserve to Stash” for uploading complete chat history. * Added automatic chat, task transcript, and completion-event capture. * Added project-specific Stash session folders and archive/delete synchronization. * **Bug Fixes** * Improved Stash folder naming and handling of missing branches during no-commit tasks. * **Documentation** * Added setup, configuration, integration, vector-search, and performance guidance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Fusion <noreply@runfusion.ai> Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com> |
||
|
|
9d1bd393d8 |
FN-9202: Unify dashboard banner styling
Standardize dashboard notices on a shared, token-driven banner shell. - Add a reusable Banner primitive with consistent tones, layouts, actions, and dismissal behavior. - Migrate dashboard notification banners away from bespoke shells and left accent borders. - Document and test banner styling invariants, including token-only CSS lengths and colors. - Add a patch changeset for the published dashboard bundle. Files changed: .changeset/fn-9202-banner-style-unification.md | 7 ++ docs/dashboard-guide.md | 4 + .../app/__tests__/banner-style-consistency.test.ts | 25 ++++ .../app/components/ApprovalNotificationBanner.css | 10 -- .../app/components/ApprovalNotificationBanner.tsx | 5 +- packages/dashboard/app/components/Banner.css | 81 ++++++++++++ packages/dashboard/app/components/Banner.tsx | 78 ++++++++++++ .../app/components/CapacityRiskBanner.css | 50 +------- .../app/components/CapacityRiskBanner.tsx | 39 +++--- .../app/components/CliBinaryInstallBanner.css | 126 ++----------------- .../app/components/CliBinaryInstallBanner.tsx | 14 +-- .../app/components/DbCorruptionBanner.css | 18 +-- .../app/components/DbCorruptionBanner.tsx | 5 +- .../app/components/EngineStatusBanner.css | 94 ++------------ .../app/components/EngineStatusBanner.tsx | 48 +++---- .../app/components/EngineUnavailableBanner.css | 42 +------ .../app/components/EngineUnavailableBanner.tsx | 21 ++-- .../app/components/MergeAdvanceNotice.css | 129 +++---------------- .../app/components/MergeAdvanceNotice.tsx | 36 +++--- .../app/components/MigrationInProgressBanner.css | 25 ---- .../app/components/MigrationInProgressBanner.tsx | 19 +-- .../app/components/OAuthReloginBanner.css | 53 +------- .../app/components/OAuthReloginBanner.tsx | 26 +--- .../app/components/SessionNotificationBanner.css | 16 +-- .../app/components/SessionNotificationBanner.tsx | 5 +- .../app/components/SetupWarningBanner.css | 106 +--------------- .../app/components/SetupWarningBanner.tsx | 31 +---- .../app/components/SqliteMigrationBanner.css | 40 +----- .../app/components/SqliteMigrationBanner.tsx | 33 ++--- .../app/components/TaskIdIntegrityBanner.css | 18 +-- .../app/components/TaskIdIntegrityBanner.tsx | 5 +- .../dashboard/app/components/TestModeBanner.css | 18 --- .../dashboard/app/components/TestModeBanner.tsx | 12 +- .../app/components/UpdateAvailableBanner.css | 139 +++------------------ .../app/components/UpdateAvailableBanner.tsx | 22 ++-- .../app/components/__tests__/Banner.test.tsx | 48 +++++++ 36 files changed, 450 insertions(+), 998 deletions(-) Fusion-Task-Id: FN-9202 Fusion-Task-Lineage: 14762201-55e5-4124-a897-9667c3a1ab84 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
4475342145 |
docs: record a first-sighting PG setup-hook flake in the observed register
`handoff-to-review-atomicity.pg.test.ts` aborted its `beforeAll` at the 15s budget on the first `pnpm test:gate` of a session; not reproduced in 8 later runs across three shapes (gate x2, pg-gate x3, isolated x3). Same mode as entries 6 and 7, but narrower: it happened under the capped four-fork lane with two selected files, so fork oversubscription does not explain it. Recorded the cold-cluster correlation as a hypothesis rather than a finding — reproducing it means stopping the embedded cluster, and this host runs a live Fusion instance. Discloses that the failing run's full output was lost to a tail pipe, and that inline quarantine was unavailable regardless (quarantinedCoreTests must stay empty); eviction of a transactional-invariant gate file is owner-escalated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
39812f4898 |
test: quarantine one suite-only flake, record another, fix the lockstep guard
Full engine suite at
|
||
|
|
3d37cfa7db |
FN-9201: Prevent mobile nav lift when the iOS keyboard opens
Keep mobile bottom chrome pinned or hidden during keyboard focus transitions, including landscape phone layouts. - track keyboard-focus intent before visual viewport metrics settle - clamp focused iOS viewport offsets so fixed bars remain behind the keyboard - cover runtime bootstrap, landscape integration, nav, focus, and offset behavior - document the mobile keyboard layout contract and add a patch changeset Files changed: .changeset/fn-9201-mobile-nav-keyboard-lift.md | 7 ++ docs/dashboard-guide.md | 4 +- packages/dashboard/app/App.tsx | 43 ++++++++-- ...ile-nav-keyboard-landscape.integration.test.tsx | 91 ++++++++++++++++++++ .../__tests__/icb-inline-script.runtime.test.ts | 74 ++++++++++++++++ .../mobile-bottom-bars-keyboard-layout.test.ts | 15 +++- .../viewport-compensation-keyboard.test.ts | 5 +- .../__tests__/MobileNavBar.keyboard-lift.test.tsx | 65 ++++++++++++++ .../__tests__/useKeyboardFocusPending.test.tsx | 99 ++++++++++++++++++++++ .../dashboard/app/hooks/useKeyboardFocusPending.ts | 43 ++++++++++ packages/dashboard/app/index.html | 12 ++- .../utils/__tests__/mobileBarKeyboardFlags.test.ts | 22 +++++ .../app/utils/__tests__/viewportOffset.test.ts | 32 +++++++ .../dashboard/app/utils/mobileBarKeyboardFlags.ts | 10 ++- packages/dashboard/app/utils/viewportOffset.ts | 8 ++ 15 files changed, 510 insertions(+), 20 deletions(-) Fusion-Task-Id: FN-9201 Fusion-Task-Lineage: 4b3b01d3-8968-432b-9537-a63ee6bbde31 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
324145c1e1 |
test: repair engine fixtures that predate shipped product guards
The engine suite's failures are not independent bugs; they are a handful of systemic drifts where a guard shipped and its fixtures were never updated. - Required pre-merge gates (FN-158): the door refuses a card whose enabled optional groups produced no result, and the built-in workflow enables Plan and Code Review by default. Merge-mechanics fixtures now declare an explicit empty list, stating the intent they always had. group-merge-coordinator's "post-Code-Review member" instead gets real PASSING workflowStepResults, because recording the pass is what that fixture actually means. - Branch-write provenance: the shared reliability fixture creates a task with a branch, which now requires an explicit origin. It stands in for an engine-created branch, so it says so. - updateTaskAtomic: a production write seam missing from several fake stores, copied from the faithful fake in merger-ai.test.ts. - Durable-write inventory: eight unclassified TaskStore surfaces classified, including the two batched reads this branch added. - workflow-graph-merge-region-collapse asserted completion-summary AFTER code-review; the IR wires it before, and production logs agree. merger-ai.test.ts alone goes 37 -> 0. Engine failures 288 -> ~200. Also records a first-sighting suite-only flake in the observed register per the standing rule, rather than quarantining a file with substantial coverage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
52d124bde2 |
FN-9195: Keep the chat composer visible above iOS keyboards
Keep Chat input reachable across software-keyboard viewport changes. - Track visual viewport changes across phones, tablets, compact docks, and narrow floating Chat hosts. - Clamp thread height using the measured host offset while preserving iOS focus behavior. - Add regression coverage, shared viewport test helpers, operator documentation, and a patch changeset. Files changed: .changeset/fn-9195-chat-ios-keyboard-composer.md | 7 + docs/dashboard-guide.md | 2 +- packages/dashboard/app/components/ChatView.css | 44 +-- packages/dashboard/app/components/ChatView.tsx | 43 ++- .../__tests__/ChatView.ios-keyboard.test.tsx | 335 +++++++++++++++++++++ .../components/__tests__/ChatView.test-harness.tsx | 103 ++++++- 6 files changed, 506 insertions(+), 28 deletions(-) Fusion-Task-Id: FN-9195 Fusion-Task-Lineage: cdada0cc-af6c-4cf8-8ffd-0940d280b07a Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3857e0dc14 |
FN-9198: Fix narrow chat switcher dropdown rendering
Anchor the direct-conversation switcher to the visible thread header across narrow Chat surfaces. - position narrow-host switcher menus relative to the thread header - cover mobile, compact dock, floating, desktop, and empty-menu states - add the shared 2px spacing token and document the corrected behavior - add a patch changeset for the published Fusion package Files changed: .../fn-9198-chat-title-switcher-menu-anchor.md | 7 + docs/dashboard-guide.md | 2 +- .../app/components/ChatThreadTitleSwitcher.css | 11 +- .../__tests__/ChatView.title-switcher.test.tsx | 144 ++++++++++++++++++++- packages/dashboard/app/styles.css | 2 + 5 files changed, 160 insertions(+), 6 deletions(-) Fusion-Task-Id: FN-9198 Fusion-Task-Lineage: 9a1132d2-9b1a-4150-918a-085b42b22e02 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3f448f7292 |
FN-9194: fix mailbox task ID interpolation
Show concrete destination IDs in mailbox task links instead of leaking untranslated placeholders. - Pass the catalog's `id` variable to visible and accessible task-link labels. - Cover shared links and all mailbox host, viewport, and conversation-layout surfaces with the shipping catalog. - Document the task-link label and add a patch changeset. Files changed: .changeset/fn-9194-mailbox-task-link-id.md | 7 ++ docs/dashboard-guide.md | 2 +- .../app/components/MailboxRelatedWorkLink.tsx | 9 +- .../__tests__/MailboxRelatedWorkLink.test.tsx | 50 ++++++++ .../MailboxTaskLinkInterpolation.surfaces.test.tsx | 128 +++++++++++++++++++++ 5 files changed, 193 insertions(+), 3 deletions(-) Fusion-Task-Id: FN-9194 Fusion-Task-Lineage: d7afd16a-c951-40c4-aa12-d7b56f9cba7e Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
eaa1d47cf0 |
FN-9193: add docked chat conversation sidebar
Add a persistent, resizable conversation sidebar to non-floating chat on tablet and desktop layouts. - Keep conversation lists visible beside selected direct and room threads on eligible viewports. - Persist sidebar visibility and width while preserving mobile, compact, and floating one-pane behavior. - Add responsive styling, operator documentation, a release changeset, and focused regression coverage. Files changed: .changeset/fn-9193-chat-docked-sidebar.md | 7 ++ docs/dashboard-guide.md | 12 +- packages/dashboard/app/components/ChatView.css | 58 +++++++++- packages/dashboard/app/components/ChatView.tsx | 120 ++++++++++++++++--- .../__tests__/ChatView.docked-sidebar.test.tsx | 128 +++++++++++++++++++++ .../__tests__/ChatView.sessions-rooms.test.tsx | 29 ++--- .../components/__tests__/ChatView.test-harness.tsx | 41 ++++++- 7 files changed, 360 insertions(+), 35 deletions(-) Fusion-Task-Id: FN-9193 Fusion-Task-Lineage: 58266e56-9d09-4472-98f4-f9d1d80635a7 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
0fc2c23f24 |
FN-9192: add direct chat title switcher
Make Direct conversation titles open an in-place, keyboard-accessible chat switcher. - Add a responsive title dropdown with pinned, recent, unread, and active conversation states. - Reuse existing session-selection and back-navigation paths from ChatView. - Cover interaction, ordering, limits, keyboard behavior, and Room-title exclusions. - Document the switcher and add a minor release changeset. Files changed: .changeset/fn-9192-chat-title-switcher.md | 7 + docs/dashboard-guide.md | 4 + .../app/components/ChatThreadTitleSwitcher.css | 139 +++++++++++++++ .../app/components/ChatThreadTitleSwitcher.tsx | 191 +++++++++++++++++++++ packages/dashboard/app/components/ChatView.tsx | 17 +- .../__tests__/ChatView.title-switcher.test.tsx | 171 ++++++++++++++++++ 6 files changed, 528 insertions(+), 1 deletion(-) Fusion-Task-Id: FN-9192 Fusion-Task-Lineage: 1e499595-6d82-4ba3-8599-2470d2e89429 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
3af54418cf |
FN-9191: add the Iceberg dashboard theme
Add a persisted Iceberg palette across dashboard and desktop theme surfaces. - Define coordinated dark and light Iceberg color tokens and selector swatches. - Register Iceberg in shared persistence, theme selectors, and first-paint validation. - Add registry coverage, documentation, visual references, and a release changeset. Files changed: .changeset/fn-9191-iceberg-theme.md | 6 ++ docs/dashboard-guide.md | 5 +- docs/settings-reference.md | 4 +- packages/core/src/types/ui/execution-and-ui.ts | 2 + .../dashboard/app/__tests__/iceberg-theme.test.ts | 102 +++++++++++++++++++++ .../dashboard/app/components/ThemeSelector.css | 15 +++ .../components/__tests__/ThemeDropdown.test.tsx | 3 +- .../components/__tests__/ThemeSelector.test.tsx | 3 +- .../__tests__/CommandCenterControls.test.tsx | 3 +- packages/dashboard/app/components/themeOptions.ts | 2 + packages/dashboard/app/index.html | 3 +- packages/dashboard/app/public/theme-data.css | 85 +++++++++++++++++ packages/desktop/src/renderer/index.html | 2 + screenshots/fn-9191-iceberg-theme-dark.png | 3 + screenshots/fn-9191-iceberg-theme-light.png | 3 + 15 files changed, 234 insertions(+), 7 deletions(-) Fusion-Task-Id: FN-9191 Fusion-Task-Lineage: a8b441c6-763a-4c38-a682-bffab1fdd293 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
2f8d2e8ee0 |
feat: add scripts/run-container.sh for launching the Fusion container
The correct `docker run` is long and every piece of it fails confusingly when omitted: the OAuth callback ports are fixed by the providers' registered redirect URIs and unreachable without PI_OAUTH_CALLBACK_HOST=0.0.0.0, /home/node must be a volume or the Tailscale login and embedded Postgres are lost on recreate, and --tailscale is an entrypoint flag that must precede the CLI arguments. - Every knob is an environment variable, so per-container config lives in an --env-file outside the repo rather than a committed token. - FUSION_STATE_VOLUME supports setups that mount /home/node/.fusion as its own volume nested inside /home/node; omitting it is not destructive but silently points the dashboard at a different database, so the board comes up empty. - An existing container is never replaced without --recreate, and volumes are never removed, so a recreate keeps the database, settings, and tailnet login. - --dry-run prints the command without running it, including when the container already exists, which is exactly when previewing a recreate is most useful. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
e6121bc8e2 |
fix: make container tailscaled opt-in via a --tailscale entrypoint flag
Starting the daemon unconditionally gave every container a process, a listening socket, and an identity in someone's tailnet that it never asked for. Most containers never use remote access, so the daemon is now opt-in. - The entrypoint consumes a leading `--tailscale` argument (or FUSION_TAILSCALE=1, with `--no-tailscale` to override it back off) and strips it from the argument list, so everything after it stays a normal Fusion CLI invocation. - Arguments are rotated through shift/append rather than string concatenation, so values containing spaces survive as single argv entries. - Replaces the FUSION_DISABLE_TAILSCALED opt-out, which is redundant now that the default is off. - Document the flag, the userspace-networking mode (no NET_ADMIN/tun caps), the one-time `tailscale up`, and the /home/node mount that persists that login. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
9d8c14b4e8 |
FN-165: use session context usage for chat indicator
Use provider-reported pi session context usage to drive the Chat context indicator. - Track measured and pending session context usage in the dashboard. - Expose bounded context metadata from chat sessions and update token estimation. - Add regression coverage, localized labels, documentation, and a changeset. Files changed: .changeset/fn-165-chat-context-usage.md | 7 ++ docs/dashboard-guide.md | 4 +- packages/dashboard/app/components/ChatView.tsx | 49 ++++++++---- .../__tests__/ChatView.context-window.test.tsx | 84 +++++++++++++++++++- .../app/utils/__tests__/chatContextUsage.test.ts | 66 ++++++++++++++++ .../app/utils/__tests__/estimateChatTokens.test.ts | 10 +++ packages/dashboard/app/utils/chatContextUsage.ts | 73 ++++++++++++++++++ packages/dashboard/app/utils/estimateChatTokens.ts | 39 ++++++++-- .../dashboard/src/__tests__/chat-manager.test.ts | 89 +++++++++++++++++++++ packages/dashboard/src/chat.ts | 65 +++++++++++++--- packages/i18n/locales/en/app.json | 3 + packages/i18n/locales/es/app.json | 3 + packages/i18n/locales/fr/app.json | 3 + packages/i18n/locales/ko/app.json | 3 + packages/i18n/locales/pt-BR/app.json | 3 + packages/i18n/locales/zh-CN/app.json | 3 + packages/i18n/locales/zh-TW/app.json | 3 + packages/i18n/src/resources.d.ts | 19 +++-- 18 files changed, 483 insertions(+), 43 deletions(-) Fusion-Task-Id: FN-165 Fusion-Task-Lineage: a95a9c7f-80aa-41be-8807-1fbd383f0f1d Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
bfaa0f42da |
FN-158: enforce workspace multi-repo merge boundaries
Support workspace tasks across a shared root with scope-driven repositories and verifiable merge gates. - Route task work through one workspace directory with per-repository acquisition and isolation. - Add sandbox session policies and per-repository verification command handling. - Enforce required pre-merge checks and honest merge blocking for workspace changes. - Update workspace, workflow, and sandbox documentation and release metadata. Files changed: .changeset/fn-158-workspace-single-root.md | 7 + docs/sandbox.md | 6 +- docs/workflow-steps.md | 6 +- docs/workspaces.md | 12 +- .../core/src/__tests__/legacy-adoption.test.ts | 15 +- .../src/__tests__/required-pre-merge-steps.test.ts | 25 ++++ .../core/src/__tests__/store-bypass-review.test.ts | 24 ++- packages/core/src/__tests__/task-merge.test.ts | 24 +++ .../core/src/__tests__/worktree-layout.test.ts | 29 ++++ packages/core/src/db/legacy-adoption.ts | 20 ++- packages/core/src/index.gate.ts | 4 + packages/core/src/index.ts | 4 + .../core/src/merge/required-pre-merge-steps.ts | 26 ++++ packages/core/src/merge/task-merge.ts | 35 ++++- packages/core/src/store.ts | 59 ++++++-- packages/core/src/task-store/lifecycle-ops.ts | 1 + packages/core/src/task-store/merge-queue-ops.ts | 5 +- packages/core/src/task-store/moves.ts | 13 +- packages/core/src/task-store/task-artifacts-ops.ts | 11 +- packages/core/src/tasks/worktree-layout.ts | 43 +++++- packages/core/src/types/workflow/workflow-steps.ts | 3 +- .../executor-workspace-session-cwd.test.ts | 42 ++++-- .../src/__tests__/node-worktree-isolation.test.ts | 13 +- .../src/__tests__/pi-create-fn-agent.test.ts | 16 ++ .../engine/src/__tests__/project-engine.test.ts | 20 ++- .../src/__tests__/reviewer-workspace.test.ts | 30 +++- .../src/__tests__/run-verification-command.test.ts | 90 +++++++++++- .../__tests__/sandbox/sandbox-exec-policy.test.ts | 16 +- .../src/__tests__/sandbox/session-policy.test.ts | 45 ++++++ .../__tests__/workspace-add-repo-midflight.test.ts | 9 ++ .../engine/src/__tests__/workspace-e2e.test.ts | 13 +- .../workspace-root-worktree-routing.test.ts | 18 +-- packages/engine/src/agent-tools.ts | 15 +- packages/engine/src/agents/agent-runtime.ts | 19 +++ .../engine/src/agents/agent-session-helpers.ts | 15 ++ packages/engine/src/execution/hold-release.ts | 29 ++++ .../engine/src/execution/run-verification-tool.ts | 114 ++++++++++++++- .../create-authoritative-workflow-seams.ts | 20 +-- packages/engine/src/executor/deps-bags.ts | 5 +- .../executor/ensure-graph-custom-node-worktree.ts | 24 ++- .../executor/ensure-task-worktree-for-planning.ts | 36 ++--- .../engine/src/executor/execute-workflow-step.ts | 4 +- .../src/executor/finalize-already-reviewed-task.ts | 6 +- .../src/executor/prepare-graph-node-execution.ts | 14 +- .../engine/src/executor/run-graph-custom-node.ts | 161 +++++++++++++-------- packages/engine/src/executor/run-implementation.ts | 117 ++++++++++++--- packages/engine/src/merge/merger-ai.ts | 16 +- packages/engine/src/merger.ts | 20 ++- packages/engine/src/pi.ts | 150 ++++++++++++++++--- packages/engine/src/project-engine.ts | 10 +- packages/engine/src/runtimes/in-process-runtime.ts | 4 +- packages/engine/src/sandbox/bubblewrap-backend.ts | 55 ++++++- packages/engine/src/sandbox/bubblewrap-policy.ts | 10 +- packages/engine/src/sandbox/index.ts | 1 + .../engine/src/sandbox/sandbox-exec-backend.ts | 45 +++++- packages/engine/src/sandbox/sandbox-exec-policy.ts | 18 ++- packages/engine/src/sandbox/session-policy.ts | 41 ++++++ packages/engine/src/sandbox/types.ts | 11 ++ packages/engine/src/self-healing.ts | 1 + packages/engine/src/triage.ts | 10 ++ .../engine/src/worktree/worktree-acquisition.ts | 53 ++++--- 61 files changed, 1393 insertions(+), 315 deletions(-) Fusion-Task-Id: FN-158 Fusion-Task-Lineage: ba57f5a2-fa69-4210-8ea7-3d124be3deb2 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
7d54e86e80 |
FN-159: filter AI merge protocol markers from blocking findings
Prevent the AI merge reviewer from persisting its own protocol syntax as blocking review findings. - Register and filter all review protocol markers and disposition lines. - Aggregate reviewer prose into bounded findings and preserve reconciliation safety. - Release prior findings that are not re-confirmed on approved candidates. - Add reconciliation state, tests, documentation, and a patch changeset. Files changed: .../fn-159-ai-merge-protocol-marker-findings.md | 7 ++ docs/architecture.md | 2 +- packages/core/src/types/task/task-core.ts | 6 ++ .../engine/src/__tests__/merger-ai-prompts.test.ts | 39 ++++++++++ .../src/__tests__/merger-ai-squash-gates.test.ts | 6 ++ .../engine/src/__tests__/merger-ai.test.ts | 58 +++++++++++++++ .../engine/src/__tests__/workspace-merger.test.ts | 3 +- packages/engine/src/merge/merger-ai-prompts.ts | 53 +++++++++++--- packages/engine/src/merge/merger-ai.ts | 84 ++++++++++++++++++---- 9 files changed, 231 insertions(+), 27 deletions(-) Fusion-Task-Id: FN-159 Fusion-Task-Lineage: 6eea1dec-1252-4b8d-b227-c84c24ab60af Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
c1818ea819 |
FN-151: make task reset always complete
Make reset a reliable description-only fresh start by fencing active planning work and cleaning discarded execution state. - Add reset lifecycle disposal for planning sessions, locks, artifacts, and reset worktrees. - Preserve operator-provided descriptions while clearing stale execution and planning projections. - Expose reset routes and add core, dashboard, and engine regression coverage. Files changed: .changeset/fn-151-task-reset-always-completes.md | 7 + docs/architecture.md | 3 + docs/dashboard-guide.md | 6 +- .../postgres/task-reset-publication.pg.test.ts | 71 +++++++++- .../core/src/__tests__/task-move-disposer.test.ts | 38 ++++++ packages/core/src/index.gate.ts | 2 + packages/core/src/index.ts | 2 + packages/core/src/task-store/reset-lifecycle.ts | 38 +++++- packages/core/src/tasks/task-move-disposer.ts | 36 +++++- .../src/__tests__/task-reset-lifecycle.test.ts | 110 +++++++++++++++- .../src/routes/register-task-workflow-routes.ts | 29 +++-- .../src/__tests__/agent-document-tools.test.ts | 49 +++++++ .../src/__tests__/reset-worktree-removal.test.ts | 77 +++++++++++ .../__tests__/triage-reset-planning-fence.test.ts | 118 +++++++++++++++++ packages/engine/src/agent-tools.ts | 60 +++++++-- packages/engine/src/agents/planning-liveness.ts | 19 +++ packages/engine/src/index.ts | 4 + packages/engine/src/plan-artifact-writeback.ts | 27 +++- packages/engine/src/planning-reset-fence.ts | 26 +++ packages/engine/src/triage.ts | 143 +++++++++++++++++++-- packages/engine/src/worktree/remove-reset-worktree.ts | 65 ++++++++++ 21 files changed, 882 insertions(+), 48 deletions(-) Fusion-Task-Id: FN-151 Fusion-Task-Lineage: 1c25d58e-2d23-4340-a489-51f3e2d8a7f4 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
a786c45bb9 |
FN-149: converge review cycles before human escalation
Add bounded review convergence so disputed review gates can resolve independently before requiring operator intervention. - Add staged remediation, arbitration, dispute tooling, and stale-attempt fencing. - Preserve review history and findings while exposing convergence state in core, dashboard, and audit paths. - Add migration, configuration, documentation, changeset, and regression coverage. Files changed: .changeset/fn-149-review-convergence.md | 7 + AGENTS.md | 2 + docs/architecture.md | 4 + docs/dashboard-guide.md | 4 + docs/run-audit.md | 4 + docs/settings-reference.md | 4 + docs/workflow-steps.md | 8 + .../src/__tests__/default-workflow-hooks.test.ts | 13 + packages/core/src/__tests__/plan-approval.test.ts | 21 ++ .../src/__tests__/reopen-semantics-by-role.test.ts | 25 ++ packages/core/src/__tests__/review-severity-gate.test.ts | 18 +- packages/core/src/__tests__/workflow-step-results.test.ts | 52 +++- packages/core/src/config/settings-schema.ts | 6 + packages/core/src/index.gate.ts | 9 + packages/core/src/index.ts | 9 + packages/core/src/planner/plan-approval.ts | 27 +- .../0065_fn_149_review_convergence_stage.sql | 3 + packages/core/src/postgres/schema-applier.ts | 10 + packages/core/src/postgres/schema/project.ts | 2 + packages/core/src/store.ts | 2 +- packages/core/src/task-store/persistence.ts | 4 + packages/core/src/task-store/reset-lifecycle.ts | 2 + packages/core/src/task-store/serialization.ts | 2 + packages/core/src/task-store/task-mutation-ops.ts | 2 +- packages/core/src/task-store/task-row-mappers.ts | 2 +- packages/core/src/task-store/task-update.ts | 4 + packages/core/src/tasks/in-review-stall.ts | 21 ++ packages/core/src/tasks/manual-retry-reset.ts | 2 + packages/core/src/types/settings/settings-scope.ts | 7 + packages/core/src/types/task/task-core.ts | 3 + packages/core/src/types/task/task-review.ts | 2 +- packages/core/src/types/workflow/workflow-steps.ts | 24 +- .../src/workflows/builtin-workflow-settings.ts | 43 +++ .../core/src/workflows/default-workflow-hooks.ts | 10 +- .../core/src/workflows/workflow-step-results.ts | 185 ++++++++++++- .../dashboard/app/components/TaskReviewTab.tsx | 6 +- .../components/__tests__/TaskReviewTab.test.tsx | 6 +- .../dashboard/src/__tests__/routes-tasks.test.ts | 7 + .../src/routes/register-task-workflow-routes.ts | 4 +- .../__tests__/review-arbitration-release.test.ts | 46 ++++ .../src/__tests__/review-arbitration.test.ts | 57 ++++ .../__tests__/review-convergence-context.test.ts | 95 +++++++ .../review-convergence-escalation.test.ts | 135 +++++++++ .../src/__tests__/review-dispute-tool.test.ts | 113 +++++++ .../__tests__/review-finding-supersession.test.ts | 55 ++- .../review-findings-injection.test.ts | 19 +- .../__tests__/review-history-preservation.test.ts | 186 +++++++++++++ .../__tests__/review-ladder-entry-points.test.ts | 304 +++++++++++++++++++++ ...un-audit-sink-health-review-convergence.test.ts | 251 +++++++++++++++++ .../workflow-graph-optional-step-fix.test.ts | 59 ++-- packages/engine/src/execution/replan-target.ts | 6 +- .../clear-terminal-step-failures-for-retry.ts | 8 +- .../src/executor/create-review-dispute-tool.ts | 126 +++++++++ packages/engine/src/executor/deps-bags.ts | 2 +- .../engine/src/executor/execute-workflow-graph.ts | 71 ++++- packages/engine/src/executor/execute-workflow-step.ts | 16 +- packages/engine/src/executor/free-reexports.ts | 1 + packages/engine/src/executor/impl-bindings.ts | 1 + .../engine/src/executor/optional-step-revision.ts | 33 ++- .../src/executor/recover-failed-pre-merge-step.ts | 43 ++- .../request-pre-merge-optional-step-fix.ts | 85 +++--- packages/engine/src/executor/review-arbitration.ts | 233 +++++++++++++++ .../src/executor/review-convergence-ladder.ts | 237 +++++++++++++++ .../route-graph-failure-to-execution-resume.ts | 16 +- .../route-retryable-remediation.ts | 9 +- .../engine/src/executor/run-graph-custom-node.ts | 1 + packages/engine/src/executor/run-implementation.ts | 2 + .../src/executor/task-executor-session-facades.ts | 3 +- .../engine/src/executor/workflow-rerun-bounce.ts | 13 +- .../executor/workflow-step-failure-injection.ts | 23 +- .../engine/src/executor/workflow-step-failures.ts | 16 +- .../engine/src/executor/workflow-step-verdict.ts | 2 + packages/engine/src/self-healing.ts | 5 +- packages/engine/src/util/run-audit.ts | 9 +- .../src/workflows/workflow-graph-executor.ts | 8 +- .../engine/src/worktree/review-diff-fingerprint.ts | 21 +++ .../src/worktree/workspace-review-evidence.ts | 9 +- 77 files changed, 2719 insertions(+), 166 deletions(-) Fusion-Task-Id: FN-149 Fusion-Task-Lineage: 9330df9d-5086-4b40-8daa-66f0ea31cf3e Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
e67403cd6a |
FN-155: add expandable thinking traces to transcripts
Add a reusable expandable thinking trace across chat and agent transcript surfaces. - Add the ThinkingTrace component, styling, localized labels, and documentation. - Render trace sections across chat, planning, mission, milestone, workflow, and agent log views. - Preserve streaming trace data and add regression and surface coverage. Files changed: .changeset/fn-155-thinking-trace.md | 7 ++ docs/dashboard-guide.md | 4 + .../dashboard/app/components/AgentLogViewer.tsx | 11 +- packages/dashboard/app/components/ChatView.css | 10 +- .../app/components/ConversationHistory.tsx | 3 +- .../components/MilestoneSliceInterviewModal.tsx | 3 +- .../app/components/MissionInterviewModal.tsx | 3 +- .../dashboard/app/components/PlanningModeModal.tsx | 9 +- .../app/components/StandardChatSurface.tsx | 21 ++-- packages/dashboard/app/components/TaskChatTab.tsx | 17 +-- .../dashboard/app/components/ThinkingTrace.css | 7 ++ .../dashboard/app/components/ThinkingTrace.tsx | 99 ++++++++++++++++++ .../app/components/WorkflowResultsTab.tsx | 4 + .../__tests__/ChatView.core-interactions.test.tsx | 25 +++++ .../MilestoneSliceInterviewModal.test.tsx | 15 ++- .../__tests__/MissionInterviewModal.test.tsx | 15 ++- .../PlanningModeModal.planning-flow.test.tsx | 33 +++++- .../app/components/__tests__/TaskChatTab.test.tsx | 16 +++ .../__tests__/ThinkingTrace.surfaces.test.tsx | 70 +++++++++++++ .../components/__tests__/ThinkingTrace.test.tsx | 115 +++++++++++++++++++++ .../dashboard/src/__tests__/chat-manager.test.ts | 11 ++ packages/engine/src/__tests__/agent-logger.test.ts | 15 +++ packages/engine/src/__tests__/streaming-delta.test.ts | 13 +++ packages/engine/src/execution/streaming-delta.ts | 4 + packages/i18n/locales/en/app.json | 8 ++ packages/i18n/locales/es/app.json | 8 ++ packages/i18n/locales/fr/app.json | 8 ++ packages/i18n/locales/ko/app.json | 8 ++ packages/i18n/locales/pt-BR/app.json | 8 ++ packages/i18n/locales/zh-CN/app.json | 8 ++ packages/i18n/locales/zh-TW/app.json | 8 ++ packages/i18n/src/resources.d.ts | 8 ++ 32 files changed, 539 insertions(+), 55 deletions(-) Fusion-Task-Id: FN-155 Fusion-Task-Lineage: 2aafff54-2146-4480-874b-393dc991d52b Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
e5ac9c385a |
FN-152: repair local PostgreSQL test provisioning
Repair embedded PostgreSQL test-server staging and diagnostics for reliable local and worktree test runs. - Stage native PostgreSQL runtime files before startup and manage lifecycle state safely. - Add provisioning diagnostics, harness integration, regression tests, and troubleshooting documentation. - Expose PostgreSQL test-server lifecycle commands through package scripts. Files changed: ...server-libdir-plpgsql-and-missing-login-role.md | 15 + docs/testing.md | 10 + package.json | 3 + .../__test-utils__/pg-provisioning-diagnostics.ts | 25 ++ .../core/src/__test-utils__/pg-test-harness.ts | 5 + .../__tests__/pg-provisioning-diagnostics.test.ts | 30 ++ .../__tests__/reliability-interactions/_helpers.ts | 17 +- scripts/__tests__/pg-test-server.test.mjs | 73 +++++ scripts/pg-test-server.mjs | 332 +++++++++++++++++++++ 9 files changed, 505 insertions(+), 5 deletions(-) Fusion-Task-Id: FN-152 Fusion-Task-Lineage: ead05f6e-00fc-42a0-8599-bf4cb2269527 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
d42a60ea06 |
FN-142: fix plan confirmation read-back and no-op routing
Make plan persistence confirmations observe the filesystem-backed prompt and let valid no-op reviews terminate cleanly.\n\n- Verify PROMPT.md by querying the task after writes across planning and review surfaces.\n- Add coverage for workspace scope, duplicate plans, failed read-backs, and mirror failures.\n- Route CLOSE_NO_OP Plan Review outcomes through an explicit terminal workflow action.\n- Document the persistence failure mode and publish a patch changeset.\n\nFiles changed:\n .changeset/fn-142-prompt-write-read-back.md | 7 ++\n .../prompt-write-read-back-queries-the-task-row.md | 51 +++++++++++\n .../core/src/__tests__/builtin-workflows.test.ts | 22 +++++\n packages/core/src/workflows/builtin-workflows.ts | 12 +++\n .../src/__tests__/agent-document-tools.test.ts | 101 ++++++++++++++++++++-\n .../__tests__/plan-prompt-write-surfaces.test.ts | 77 +++++++++++++++\n packages/engine/src/agent-tools.ts | 15 ++-\n 7 files changed, 283 insertions(+), 2 deletions(-) Fusion-Task-Id: FN-142 Fusion-Task-Lineage: adddffb3-8786-4372-996a-eefef176f31b Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
33f4797ceb |
FN-126: fix inert sync-lane validation
Prevent inert synchronization lanes from bypassing merge-gate validation while preserving task-lane cache and archive lifecycle behavior. - Reject sync-resolved lane conversions in the static validator. - Preserve task-lane cache emissions and active-session cleanup across task mutations and archival. - Add regression coverage, baseline updates, documentation, and a release changeset. Files changed: .changeset/fn-126-inert-sync-lane.md | 7 + .../a-falling-count-is-not-evidence.md | 12 + .../task-lane-cache-emitter-preservation.test.ts | 269 +++++++++++++++++++++ .../core/src/task-store/archive-lifecycle-2.ts | 3 +- packages/core/src/task-store/moves.ts | 3 +- packages/core/src/task-store/task-artifacts-ops.ts | 3 +- packages/core/src/task-store/task-update.ts | 3 +- packages/core/src/task-store/update-task-deps.ts | 3 +- ...xecutor-archive-releases-active-session.test.ts | 80 ++++++ packages/engine/src/executor.ts | 4 +- .../src/executor/executor-side-effect-hosts.ts | 2 +- .../executor/is-backward-move-out-of-planning.ts | 7 +- .../src/executor/task-executor-graph-facades.ts | 2 +- .../engine/src/executor/task-executor-imports.ts | 1 - .../engine/src/executor/wire-executor-lifecycle.ts | 18 +- .../check-inert-sync-lane-conversions.test.mjs | 83 +++++-- scripts/check-inert-sync-lane-conversions.mjs | 19 +- scripts/lib/inert-sync-lane-baseline.json | 6 +- 18 files changed, 479 insertions(+), 46 deletions(-) Fusion-Task-Id: FN-126 Fusion-Task-Lineage: 0c7a1a3a-9446-44f8-955d-df6c402dfd31 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
8b681775ae |
FN-122: fix local workspace integration across repositories
Make multi-repository workspace merges resolve and land against the correct local integration targets. - Add local integration-target resolution and durable merge-dispatch leasing. - Harden workspace merge fencing, failure handling, audit logging, and CLI/dashboard controls. - Document the workflow and add regression coverage for workspace integration and task-log deduplication. - Complete the CLI engine mock for the new public lease export. Files changed: .changeset/fn-122-local-workspace-integration.md | 7 + docs/architecture.md | 1 + docs/dashboard-guide.md | 4 + docs/settings-reference.md | 4 +- docs/testing.md | 10 ++ .../task-command-github-import-tracking.test.ts | 2 + packages/cli/src/commands/__tests__/task.test.ts | 1 + packages/cli/src/commands/dashboard.ts | 15 +- packages/cli/src/commands/task.ts | 14 +- .../__tests__/postgres/task-log-dedupe.pg.test.ts | 30 ++++ packages/core/src/index.ts | 2 +- packages/core/src/store.ts | 5 +- packages/core/src/task-store/audit-ops.ts | 38 ++++ packages/core/src/types.ts | 2 + packages/core/src/types/task/task-core.ts | 16 +- packages/core/src/types/task/task-log.ts | 2 + .../app/components/WorkspaceWorktreesSummary.tsx | 15 +- .../settings/sections/WorktreesSection.tsx | 3 +- .../engine/src/__tests__/workspace-e2e.test.ts | 198 ++++++++++++++++----- .../__tests__/workspace-integration-target.test.ts | 75 ++++++++ .../src/__tests__/workspace-merger-lease.test.ts | 42 ++++- packages/engine/src/index.ts | 6 + packages/engine/src/merge/merger-ai.ts | 152 +++++++++++----- packages/engine/src/merge/workspace-fence-ref.ts | 17 +- .../src/merge/workspace-integration-target.ts | 87 +++++++++ .../engine/src/merge/workspace-land-failure.ts | 6 +- .../src/merge/workspace-merge-dispatch-lease.ts | 54 ++++++ packages/engine/src/project-engine.ts | 25 +++ 28 files changed, 715 insertions(+), 118 deletions(-) Fusion-Task-Id: FN-122 Fusion-Task-Lineage: 9364bba4-cebc-44e7-b2ae-60967fbc025c Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
0b4dbd219b |
FN-125: prevent workflow agents from creating tasks
Stop workflow executor agents from creating ordinary tasks while preserving explicit self-spawned dependency handling. - Gate task creation by session identity and execution context. - Add self-spawned dependency support, validation, and persistence coverage. - Update agent prompts, tools, documentation, and CLI integration. - Add a published-package changeset. Files changed: .changeset/fn-125-removal.md | 7 +++ docs/agents.md | 2 +- docs/dashboard-guide.md | 2 +- docs/settings-reference.md | 6 +- .../cli/skill/fusion/references/engine-tools.md | 10 ++-- .../extension-task-execution-task-creation.test.ts | 70 ++++++++++++++++++++++ packages/cli/src/extension.ts | 49 +++++++++++++-- .../postgres/store-self-spawned-dep.pg.test.ts | 56 +++++++++++++++++ .../src/__tests__/self-spawned-dependency.test.ts | 18 ++++++ .../__tests__/session-identity-registry.test.ts | 14 ++++- packages/core/src/agents/agent-prompts.ts | 27 ++++----- .../src/agents/task-execution-task-creation.ts | 19 ++++++ packages/core/src/index.ts | 7 +++ packages/core/src/session-identity-registry.ts | 7 +++ packages/core/src/store.ts | 2 + packages/core/src/task-store/errors.ts | 21 +++++++ packages/core/src/task-store/task-update.ts | 10 +++- packages/core/src/task-store/update-task-deps.ts | 12 +++- .../__tests__/ephemeral-task-create-gate.test.ts | 18 +++--- .../src/__tests__/executor-review-verdicts.test.ts | 3 +- packages/engine/src/agent-tools.ts | 4 ++ packages/engine/src/agents/agent-runtime.ts | 2 + .../engine/src/execution/step-session-executor.ts | 15 ++--- .../executor/attempt-executor-verification-fix.ts | 1 + .../engine/src/executor/create-spawn-agent-tool.ts | 1 + .../engine/src/executor/create-task-done-tool.ts | 18 +++++- .../engine/src/executor/create-task-update-tool.ts | 12 +++- .../engine/src/executor/execute-workflow-step.ts | 1 + packages/engine/src/executor/run-implementation.ts | 18 +++--- packages/engine/src/executor/system-prompt.ts | 21 +++---- packages/engine/src/executor/task-add-dep-tool.ts | 14 ++++- packages/engine/src/pi.ts | 15 ++++- 32 files changed, 401 insertions(+), 81 deletions(-) Fusion-Task-Id: FN-125 Fusion-Task-Lineage: da3d69f6-c9cb-45fd-8691-3dfaf7007514 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
35f0247028 |
FN-115: restore task-card detail clicks
Restore native task-card activation while preserving intentional board panning. - Start board panning only after horizontal intent is established. - Preserve stationary card clicks and add regression coverage for detail locators and touch resizing. - Document the restored interaction behavior and publish a patch changeset. Files changed: .changeset/fn-115-restore-board-card-click.md | 7 ++ docs/dashboard-guide.md | 8 +- packages/dashboard/app/components/Board.tsx | 9 +- .../app/components/__tests__/Board.test.tsx | 47 ++++++--- .../__tests__/board-card-detail-locators.test.tsx | 108 +++++++++++++++++++++ .../app/hooks/__tests__/useBoardMousePan.test.tsx | 75 ++++++++++++++ packages/dashboard/app/hooks/useBoardMousePan.ts | 39 ++++++-- .../app/task-modal-touch-resize-e2e-fixture.tsx | 20 +++- .../task-modal-touch-resize-browser.test.ts | 75 +++++++++++++- 9 files changed, 354 insertions(+), 34 deletions(-) Fusion-Task-Id: FN-115 Fusion-Task-Lineage: 158de270-2a5c-4590-8347-a3c4d6a5db03 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
10c399d01e |
FN-120: fix workspace review evidence and landing recovery
Harden workspace review evidence and automatic landing recovery across workflow execution and merge paths. - Preserve per-repository review evidence and reroute recoverable workspace review failures. - Improve workflow lifecycle validation, continuation handling, and automatic recovery for workspace landing. - Add regression coverage and document the updated workspace behavior. Files changed: .changeset/fn-120-workspace-review-landing.md | 7 ++ docs/architecture.md | 4 + ...e-empty-merge-boundary-finalization-livelock.md | 4 + docs/testing.md | 4 + docs/workflow-steps.md | 4 + docs/workspaces.md | 6 + .../__tests__/builtin-coding-workflow-ir.test.ts | 11 +- ...workspace-worktrees-concurrent-merge.pg.test.ts | 20 +++ packages/core/src/db/legacy-adoption.ts | 4 + packages/core/src/store.ts | 5 +- .../task-store/async/async-workflow-workitems.ts | 21 ++++ packages/core/src/task-store/task-mutation-ops.ts | 20 ++- .../src/task-store/workflow-workitems-ops-2.ts | 6 +- .../workflows/builtin-coding-ideas-workflow-ir.ts | 9 +- .../src/workflows/builtin-coding-workflow-ir.ts | 20 ++- .../builtin-stepwise-coding-workflow-ir.ts | 21 +++- ...tin-stepwise-final-review-coding-workflow-ir.ts | 13 +- .../src/workflows/workflow-lifecycle-validation.ts | 28 ++++- .../__tests__/builtin-workflows-lifecycle.test.ts | 4 + .../engine/src/__tests__/project-engine.test.ts | 79 ++++++++++++ .../graph-node-missing-worktree-recovery.test.ts | 32 ++++- .../src/__tests__/reviewer-workspace.test.ts | 2 + .../src/__tests__/task-pipeline-smoke.test.ts | 10 +- .../src/__tests__/workflow-task-runtime.test.ts | 10 +- .../engine/src/__tests__/workspace-e2e.test.ts | 29 +++++ .../engine/src/__tests__/workspace-merger.test.ts | 4 +- .../__tests__/workspace-review-evidence.test.ts | 58 +++++++++ packages/engine/src/execution/reviewer.ts | 2 + .../create-authoritative-workflow-seams.ts | 59 +++++---- .../engine/src/executor/execute-workflow-graph.ts | 29 ++++- packages/engine/src/executor/graph-failure-pure.ts | 6 + .../engine/src/executor/handle-graph-failure.ts | 26 ++++ ...-unusable-worktree-graph-failure-to-recovery.ts | 22 +++- .../engine/src/executor/run-graph-custom-node.ts | 4 +- .../src/executor/workspace-review-per-repo.ts | 55 +++++---- packages/engine/src/merge/merger-ai.ts | 137 ++++++++++----------- .../engine/src/merge/workspace-review-reroute.ts | 52 ++++++++ packages/engine/src/project-engine.ts | 47 +++++++ .../self-healing/auto-recover-worktree-session.ts | 2 +- .../src/workflows/workflow-graph-executor.ts | 28 ++++- .../engine/src/workflows/workflow-merge-nodes.ts | 6 +- .../src/worktree/workspace-review-evidence.ts | 110 +++++++++++++++++ .../engine/src/worktree/worktree-acquisition.ts | 24 +++- 43 files changed, 874 insertions(+), 170 deletions(-) Fusion-Task-Id: FN-120 Fusion-Task-Lineage: 61c36613-89bd-44ca-8676-de77662bf53e Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
c47d555123 |
FN-116: open multiple Quick Chats from conversations
Add in-app Quick Chat windows that open exact Direct conversation snapshots without disturbing the source chat. - Add pop-out window state, rendering, and close controls for multiple Quick Chats. - Add context-menu launching and isolated session/preferences handling. - Add localized labels, dashboard documentation, regression tests, and a release changeset. Files changed: .changeset/fn-116-multiple-quick-chats.md | 7 +++ docs/dashboard-guide.md | 2 + packages/dashboard/app/App.tsx | 34 ++++++++++++-- packages/dashboard/app/components/ChatView.tsx | 36 +++++++++++++-- .../app/components/PoppedOutChatWindows.tsx | 53 ++++++++++++++++++++++ .../__tests__/ChatView.core-contracts.test.tsx | 15 ++++++ .../__tests__/PoppedOutChatWindows.test.tsx | 25 +++++++++ .../app/components/dashboard/MainContent.tsx | 2 + .../dashboard/app/components/dashboard/types.ts | 2 + .../app/components/overflowViewRegistry.tsx | 3 ++ .../app/components/useRightDockController.tsx | 3 ++ .../app/hooks/__tests__/usePoppedOutChats.test.ts | 24 +++++++++ packages/dashboard/app/hooks/useChat.ts | 42 ++++++++++++++-- packages/dashboard/app/hooks/usePoppedOutChats.ts | 42 +++++++++++++++++ packages/i18n/locales/en/app.json | 1 + packages/i18n/locales/es/app.json | 1 + packages/i18n/locales/fr/app.json | 1 + packages/i18n/locales/ko/app.json | 1 + packages/i18n/locales/pt-BR/app.json | 1 + packages/i18n/locales/zh-CN/app.json | 1 + packages/i18n/locales/zh-TW/app.json | 1 + packages/i18n/src/resources.d.ts | 38 ++++++++++++++--- 22 files changed, 313 insertions(+), 22 deletions(-) Fusion-Task-Id: FN-116 Fusion-Task-Lineage: 486e3092-c4db-4e50-a9df-f2adfeb6fddf Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
2430ce69b0 |
FN-112: capture workspace merge evidence from task worktrees
Capture workspace merge evidence from immutable acquisition baselines to persisted task branches so real linked task worktrees land reviewed changes reliably. - Compare review fingerprints and landing ranges against the persisted task branch rather than the live worktree HEAD. - Add linked-task-worktree regression coverage for per-repository landing proof and exactly-once finalization. - Document the regression and publish the workspace merge fix in a patch changeset. Files changed: .../fn-112-workspace-task-worktree-evidence.md | 7 ++++ docs/architecture.md | 1 + ...e-empty-merge-boundary-finalization-livelock.md | 8 +++- .../engine/src/__tests__/_workspace-fixture.ts | 15 ++++++++ .../engine/src/__tests__/workspace-e2e.test.ts | 31 ++++++++++++--- .../__tests__/workspace-merger-scope-gates.test.ts | 2 +- .../engine/src/__tests__/workspace-merger.test.ts | 45 +++++++++++++++++++++- packages/engine/src/merge/merger-ai.ts | 29 ++++++++++++-- 8 files changed, 125 insertions(+), 13 deletions(-) Fusion-Task-Id: FN-112 Fusion-Task-Lineage: 66e8498e-13f2-461b-ae38-bf750383115b Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
294e826ea0 |
FN-110: integrate Ctrl+F search into chat lists and conversations
Add keyboard-driven search across chat navigation and conversation content. - Add Ctrl+F search controls for chat lists and conversation messages. - Support result navigation, highlighting, and localized labels across all dashboard locales. - Update chat surfaces, documentation, changeset metadata, and regression coverage. Files changed: .changeset/fn-110-chat-find.md | 7 + docs/dashboard-guide.md | 5 + packages/dashboard/app/App.tsx | 1 + packages/dashboard/app/components/ChatView.css | 41 +++++ packages/dashboard/app/components/ChatView.tsx | 162 +++++++++++++++-- .../dashboard/app/components/CliChatSurface.tsx | 5 +- .../dashboard/app/components/StandardChatSurface.tsx | 14 +- .../__tests__/ChatView.content-search.test.tsx | 197 ++++++++++++++++++++- packages/dashboard/vitest.config.ts | 1 + packages/i18n/locales/en/app.json | 7 + packages/i18n/locales/es/app.json | 7 + packages/i18n/locales/fr/app.json | 7 + packages/i18n/locales/ko/app.json | 7 + packages/i18n/locales/pt-BR/app.json | 7 + packages/i18n/locales/zh-CN/app.json | 7 + packages/i18n/locales/zh-TW/app.json | 7 + packages/i18n/src/resources.d.ts | 7 + 17 files changed, 467 insertions(+), 22 deletions(-) Fusion-Task-Id: FN-110 Fusion-Task-Lineage: 33ef1888-d250-489a-80b8-f3c5069da532 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
eab7635f83 |
FN-109: enable task-card board panning
Allow users to pan the desktop and tablet board from noninteractive task-card surfaces without disrupting controls or mobile scrolling. - Start horizontal panning from eligible task-card bodies and text while preserving native controls and editing behavior. - Wire board pan state and cursor styling across live board roots while keeping mobile snap and touch scrolling unchanged. - Add regression coverage, documentation updates, and a patch changeset. Files changed: .changeset/fn-109-board-card-pan.md | 7 ++ docs/dashboard-guide.md | 5 +- docs/task-management.md | 4 +- packages/dashboard/app/components/Board.css | 7 +- packages/dashboard/app/components/Board.tsx | 8 +- .../app/components/__tests__/Board.test.tsx | 98 ++++++++++++++++------ .../app/hooks/__tests__/useBoardMousePan.test.tsx | 47 ++++++++++- packages/dashboard/app/hooks/useBoardMousePan.ts | 12 +-- 8 files changed, 146 insertions(+), 42 deletions(-) Fusion-Task-Id: FN-109 Fusion-Task-Lineage: 456bd9d3-9767-4b82-9f99-f191abc44b18 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
41c23adf15 |
feat: add OrcaRouter as a named model provider (#3502)
## Summary Adds [OrcaRouter](https://www.orcarouter.ai) as a first-class named model provider, mirroring the existing OpenRouter integration. OrcaRouter is an OpenAI-compatible gateway — `https://api.orcarouter.ai/v1` — that routes to models from many providers (Anthropic, OpenAI, DeepSeek, Google, Grok, Qwen, Zhipu, and more) through a single API key. It also runs gateway-level, zero-trust security for AI agents on the same endpoint — screening every prompt/response and governing every tool call on a default-deny basis, with no application code changes. What this PR does: - **Catalog sync**: `syncStartupModels` now fetches the OrcaRouter `/v1/models` catalog at startup (gated by a new `orcarouterModelSync` global setting, default enabled) and registers an `openai-completions` provider at `https://api.orcarouter.ai/v1`. The key resolves from the `ORCAROUTER_API_KEY` environment variable. - **Auth + onboarding**: OrcaRouter appears in the API-key auth catalog, onboarding setup copy + key hints, and quick-start provider list (key format `sk-orca-...`, dashboard link to `https://www.orcarouter.ai`). - **Icons**: New OrcaRouter brand mark (`OrcaRouterIcon`) with a dedicated color token, wired into `ProviderIcon` and `inferProviderIconKey` so `orcarouter/...` model ids render the brand mark everywhere. - **Settings**: Startup-sync toggle under **Settings → Global Models**, settings search entry, and save-split allowlists. - **Docs + i18n**: `docs/settings-reference.md` / `docs/storage.md` rows and `en` + secondary-locale catalog keys. - **Changeset**: `.changeset/add-orcarouter-provider.md` (minor). Disclosure: I'm an engineer on the OrcaRouter team. ## Test plan - `pnpm --filter @runfusion/fusion exec vitest run src/commands/__tests__/startup-model-sync.test.ts` — 18 passed - `pnpm --filter @fusion/core exec vitest run src/__tests__/settings-parity.test.ts` — 80 passed - `pnpm --filter @fusion/dashboard exec vitest run app/components/__tests__/ProviderIcon.test.tsx` — 115 passed - `pnpm --filter @fusion/dashboard exec vitest run app/components/__tests__/AuthenticationSection.test.tsx app/components/__tests__/ModelOnboardingModal.test.tsx` — 222 passed - `tsc --noEmit` in `@fusion/cli`, `@fusion/core`, `@fusion/dashboard`, `@fusion/engine` — all clean - `pnpm lint` on changed files — clean - `pnpm check:changesets` — clean - **L3 live test**: exercised the production `syncStartupModels` path against the live OrcaRouter API — catalog sync registered 209 models and a real chat completion returned **HTTP 200** (`finish_reason: "stop"`). Note: `pnpm i18n:status` reports pre-existing Jira key-parity gaps in the `app.json` catalogs on a clean checkout (unrelated to this change); the `common.json` catalogs touched here are in parity. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added OrcaRouter as a built-in OpenAI-compatible provider. - Added API-key setup, validation, authentication, onboarding guidance, provider branding, and model catalog visibility. - Added automatic startup synchronization of OrcaRouter models, enabled by default. - Added a global setting to enable or disable model synchronization. - **Documentation** - Documented the new synchronization setting and its configuration. - **Localization** - Added OrcaRouter setup and usage text across supported languages. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: XiaoHuo888-hue <jinhao.song@myflashcloud.com> Co-authored-by: XiaoHuo888-hue <jinhao.song@myflashcloud.com> Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
a010dc42bf |
FN-9185: enforce effective task concurrency limits
Unify task concurrency around authoritative project settings and expose the effective admission ceiling. - Resolve maxConcurrent and maxWorktrees through a shared core capacity model with consistent defaults. - Apply the effective limit across scheduler, engine, runtime, CLI, API, and project-manager admission paths. - Surface configured and binding concurrency values in dashboard controls, status views, diagnostics, and documentation. - Add regression coverage for settings persistence, routing, scheduling, UI surfaces, and worktree-bound capacity. Files changed: .../fn-9185-max-concurrent-effective-limit.md | 7 + docs/architecture.md | 8 +- docs/cli-reference.md | 1 + docs/dashboard-guide.md | 4 + docs/settings-reference.md | 4 +- .../dashboard-concurrency-settings.test.ts | 166 +++++++++++++++++++++ packages/cli/src/commands/dashboard.ts | 28 ++-- packages/cli/src/commands/onboard.ts | 4 +- packages/cli/src/project-resolver.ts | 27 +++- .../concurrency-capacity-resolver.test.ts | 46 ++++++ .../src/__tests__/worktree-capacity-limit.test.ts | 51 +++++-- packages/core/src/index.gate.ts | 2 +- packages/core/src/index.ts | 2 +- packages/core/src/workflows/workflow-capacity.ts | 61 ++++++-- packages/dashboard/app/App.tsx | 2 + .../app/__tests__/concurrency-ui-surfaces.test.tsx | 155 +++++++++++++++++++ .../scheduling-effective-concurrency.test.tsx | 48 ++++++ packages/dashboard/app/api/projects/projects.ts | 10 +- packages/dashboard/app/api/settings/settings.ts | 14 +- packages/dashboard/app/components/Board.tsx | 7 +- packages/dashboard/app/components/Column.tsx | 13 +- .../dashboard/app/components/EngineControlMenu.tsx | 17 ++- .../command-center/CommandCenterControls.tsx | 17 ++- .../components/command-center/areas/TeamArea.tsx | 10 +- .../app/components/dashboard/MainContent.tsx | 3 + .../dashboard/app/components/dashboard/types.ts | 2 + .../settings/sections/SchedulingSection.tsx | 12 +- packages/dashboard/app/hooks/useAppSettings.ts | 9 +- packages/dashboard/app/hooks/useExecutorStats.ts | 10 +- .../app/utils/__tests__/worktreeGrouping.test.ts | 12 +- packages/dashboard/app/utils/worktreeGrouping.ts | 8 +- packages/dashboard/src/routes.ts | 6 +- ...concurrency-authoritative-source-routes.test.ts | 90 +++++++++++ .../register-config-mcp-pi-settings-routes.test.ts | 29 +++- .../register-config-mcp-pi-settings-routes.ts | 17 ++- .../src/routes/register-project-routes.ts | 14 +- .../concurrency-effective-limit-surfaces.test.ts | 34 +++++ .../src/__tests__/project-engine-manager.test.ts | 19 +++ .../__tests__/scheduler-workflow-cutover.test.ts | 6 +- packages/engine/src/concurrency/concurrency.ts | 23 ++- packages/engine/src/concurrency/hybrid-executor.ts | 35 ++++- .../engine/src/executor/create-spawn-agent-tool.ts | 8 +- packages/engine/src/project-engine-manager.ts | 50 +++++-- packages/engine/src/project-engine.ts | 12 +- packages/engine/src/project/project-manager.ts | 26 +++- packages/engine/src/runtimes/in-process-runtime.ts | 12 +- packages/engine/src/scheduler.ts | 31 ++-- packages/engine/src/triage.ts | 15 +- 48 files changed, 1028 insertions(+), 159 deletions(-) Fusion-Task-Id: FN-9185 Fusion-Task-Lineage: 6294456c-d417-40a5-a5fa-2035c6b964a6 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
74dacd0758 |
FN-9188: respect externally managed updates
Managed deployments can now suppress self-update offers while unsupported installs receive actionable guidance. - Add an install-level environment policy for externally managed updates across CLI, server, and dashboard surfaces. - Detect missing npm shell failures and replace raw stderr with deployment-aware remediation. - Document managed-update behavior and add regression coverage for checks, installs, automation, and UI actions. Files changed: .changeset/fn-9188-managed-updates.md | 7 +++ docs/architecture.md | 6 +-- docs/cli-reference.md | 2 +- docs/dashboard-guide.md | 2 +- docs/settings-reference.md | 4 +- packages/cli/src/__tests__/update-cache.test.ts | 11 ++++- .../update-command-externally-managed.test.ts | 39 +++++++++++++++ packages/cli/src/commands/update.ts | 42 +++++++++++----- packages/cli/src/update-cache.ts | 3 +- .../core/src/__tests__/update-management.test.ts | 15 ++++++ packages/core/src/config/update-management.ts | 21 ++++++++ packages/core/src/index.gate.ts | 5 ++ packages/core/src/index.ts | 5 ++ packages/dashboard/app/api/client/health.ts | 3 ++ .../dashboard/app/components/SettingsModal.tsx | 4 ++ .../__tests__/SettingsModal.general.test.tsx | 20 ++++++++ .../__tests__/UpdateAvailableBanner.test.tsx | 26 ++++++++++ .../components/__tests__/settings-mobile.test.tsx | 24 +++++++++- .../__tests__/SystemControlsArea.test.tsx | 20 ++++++++ .../command-center/areas/SystemControlsArea.tsx | 6 +++ .../app/hooks/__tests__/useUpdateCheck.test.ts | 1 + packages/dashboard/app/hooks/useUpdateCheck.ts | 3 +- .../dashboard/src/__tests__/auto-update.test.ts | 10 ++++ .../dashboard/src/__tests__/update-check.test.ts | 56 ++++++++++++++++++++++ packages/dashboard/src/auto-update.ts | 9 +++- .../__tests__/register-update-check-routes.test.ts | 24 +++++++++- .../src/routes/register-update-check-routes.ts | 47 +++++++++++++++++- packages/dashboard/src/update-check.ts | 50 ++++++++++++++++--- 28 files changed, 433 insertions(+), 32 deletions(-) Fusion-Task-Id: FN-9188 Fusion-Task-Lineage: 60b114b9-8bf7-434f-9d26-0c954aea45ba Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
1a3230ff93 |
FN-9186: Bound no-progress self-healing requeues
Bound no-progress self-healing retries so persistent failures stop consuming agent sessions. - Persist a three-attempt retry budget with exponential backoff and an idempotent terminal sentinel. - Prevent restart and wedge recovery paths from reopening exhausted failures. - Emit bounded retry and exhaustion audit events with regression coverage and operator documentation. Files changed: .changeset/fn-9186-no-progress-requeue-budget.md | 7 ++ AGENTS.md | 1 + docs/architecture.md | 2 + docs/run-audit.md | 2 + docs/self-healing-backward-move-audit.md | 2 +- .../src/__tests__/default-workflow-hooks.test.ts | 18 +++ .../non-executor-run-audit-sink-health.test.ts | 43 +++++++ .../__tests__/restart-recovery-coordinator.test.ts | 14 +++ ...self-healing-no-progress-requeue-budget.test.ts | 131 +++++++++++++++++++++ packages/engine/src/__tests__/self-healing.test.ts | 59 ++++++---- .../src/healing/no-progress-requeue-budget.ts | 7 ++ .../src/healing/restart-recovery-coordinator.ts | 10 +- .../__tests__/task-wedge-notification.test.ts | 10 +- .../src/notification/task-wedge-notification.ts | 9 ++ packages/engine/src/self-healing.ts | 95 +++++++++++++-- packages/engine/src/util/run-audit.ts | 3 + 16 files changed, 378 insertions(+), 35 deletions(-) Fusion-Task-Id: FN-9186 Fusion-Task-Lineage: 06d29a60-b6ad-4506-a3c1-f3c52411946a Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
96ad20c93d |
FN-9187: Bound auto-archive failure retries
Prevent stale done-task retention from retrying permanently blocked archives forever. - Pre-filter tasks with live lineage children while honoring renamed archive lanes. - Bound repeated archive failures by reason and reset budgets when candidates or failure classes change. - Emit one bounded audit event and operator-facing task log when retries are exhausted. - Cover retry, escalation, reset, lineage, and renamed-lane behavior and document the retention contract. Files changed: .changeset/fn-9187-bounded-auto-archive.md | 7 ++ AGENTS.md | 1 + docs/architecture.md | 2 + docs/run-audit.md | 1 + docs/settings-reference.md | 2 +- .../live-lineage-children-lanes.pg.test.ts | 3 +- .../core/src/task-store/archive-lifecycle-2.ts | 11 +- packages/engine/src/__tests__/self-healing.test.ts | 117 +++++++++++++++++++++ .../engine/src/run-audit/run-audit-catalogue.ts | 3 + packages/engine/src/self-healing.ts | 93 +++++++++++++++- packages/engine/src/util/run-audit.ts | 2 + 11 files changed, 231 insertions(+), 11 deletions(-) Fusion-Task-Id: FN-9187 Fusion-Task-Lineage: cc9a6adc-4b6d-44da-a84b-5633d4b80a10 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> |
||
|
|
c91e5ce42d |
FN-106: prevent workspace finalization livelock
Repair workspace merge-boundary finalization so empty repository sets cannot loop indefinitely. - Track workspace merge readiness and durable per-repository obligations. - Gate landing and recovery on scope, blockers, leases, and checkout ownership. - Preserve remediation state, add recovery paths, documentation, and regression coverage. Files changed: .../fn-106-workspace-finalization-livelock.md | 7 ++ docs/architecture.md | 6 ++ ...e-empty-merge-boundary-finalization-livelock.md | 40 ++++++++++ docs/workflow-steps.md | 4 + packages/cli/src/commands/__tests__/task.test.ts | 2 + ...workspace-worktrees-concurrent-merge.pg.test.ts | 23 ++++++ packages/core/src/store.ts | 9 ++- packages/core/src/task-store/task-mutation-ops.ts | 49 +++++++++++- packages/core/src/task-store/task-update.ts | 6 +- packages/core/src/types/task/task-core.ts | 7 ++ .../engine/src/__tests__/executor-test-helpers.ts | 6 ++ .../executor-workspace-main-checkout-guard.test.ts | 8 +- .../executor-workspace-session-cwd.test.ts | 37 +++++++++ .../engine/src/__tests__/project-engine.test.ts | 14 +++- .../src/__tests__/reviewer-workspace.test.ts | 72 ++++++++++++++++- .../__tests__/workspace-merge-readiness.test.ts | 46 +++++++++++ .../workspace-merger-idempotency.slow.test.ts | 15 ++-- .../src/__tests__/workspace-merger-lease.test.ts | 4 +- .../workspace-root-worktree-routing.test.ts | 47 +++++++++++ .../create-authoritative-workflow-seams.ts | 2 + .../engine/src/executor/create-task-done-tool.ts | 15 ++++ .../executor/ensure-graph-custom-node-worktree.ts | 8 ++ .../request-pre-merge-optional-step-fix.ts | 49 +++++++++++- .../engine/src/executor/run-graph-custom-node.ts | 24 ++++-- packages/engine/src/executor/run-implementation.ts | 9 +++ packages/engine/src/executor/send-task-back-for-fix.ts | 4 +- .../src/executor/workspace-main-checkout-guard.ts | 26 +++++- .../src/executor/workspace-review-remediation.ts | 54 +++++++++++++ .../src/executor/worktree-verify-invariants.ts | 2 +- packages/engine/src/merge/merger-ai.ts | 93 +++++++++++++++++----- .../engine/src/merge/workspace-merge-readiness.ts | 64 +++++++++++++++ packages/engine/src/project-engine.ts | 37 +++++++-- packages/engine/src/self-healing.ts | 54 ++++++++++--- .../engine/src/worktree/worktree-acquisition.ts | 20 ++++- 34 files changed, 787 insertions(+), 76 deletions(-) Fusion-Task-Id: FN-106 Fusion-Task-Lineage: 70b5c13d-9e17-419d-90ac-7258697657ef Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
3717fc5af1 |
FN-107: block single-repository worktree acquisition
Prevent single-repository worktree acquisition from proceeding without explicit multi-repository workspace context. - Require workspace-aware acquisition for single-repository tasks. - Propagate acquisition origin and workspace configuration through executor, merger, and recovery paths. - Add regression coverage, documentation, and a release changeset for the blocked behavior. Files changed: .changeset/fn-107-single-repo-worktree.md | 7 ++ docs/architecture.md | 4 + docs/testing.md | 4 + packages/core/src/branch/branch-assignment.ts | 12 +++ packages/core/src/index.gate.ts | 1 + packages/core/src/index.ts | 1 + packages/core/src/task-store/task-creation.ts | 4 +- packages/core/src/task-store/task-update.ts | 4 +- .../src/routes/register-planning-subtask-routes.ts | 1 + .../engine/src/__tests__/executor-test-helpers.ts | 12 +++ .../engine/src/__tests__/executor-worktree.test.ts | 44 ++++++--- .../src/__tests__/node-worktree-isolation.test.ts | 7 +- .../task-branch-write-origin-census.test.ts | 49 ++++++++++ .../worktree-acquisition-workspace.test.ts | 6 +- .../src/__tests__/worktree-acquisition.test.ts | 103 ++++++++++++++++++--- .../engine/src/executor/handle-graph-failure.ts | 16 +++ .../src/executor/workspace-config-resolver.ts | 1 + .../executor/worktree-branch-conflict-handle.ts | 1 + packages/engine/src/merger.ts | 3 +- packages/engine/src/self-healing.ts | 6 + .../self-healing/auto-recover-worktree-session.ts | 10 +- .../src/workflows/workflow-graph-executor.ts | 7 +- .../engine/src/worktree/worktree-acquisition.ts | 73 +++++++++++++- 23 files changed, 334 insertions(+), 42 deletions(-) Fusion-Task-Id: FN-107 Fusion-Task-Lineage: 80df9dae-59a0-416e-8a02-6ab2dba9bb00 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
b2125aeb2d |
FN-104: preserve update restart state
Preserve a pending update across Settings reopen while coordinating installation and restart behavior. - Add pending-update install state and coordinator flows across dashboard and system controls. - Expose health/settings update APIs and retain restart state through modal reopen. - Cover desktop/mobile UX, route behavior, coordinator logic, and document the update flow. Files changed: .changeset/fn-104-pending-update-restart.md | 7 ++ docs/architecture.md | 3 + docs/assets/fn-104-pending-update-desktop.png | Bin 0 -> 10926 bytes docs/assets/fn-104-pending-update-mobile.png | Bin 0 -> 6101 bytes docs/dashboard-guide.md | 2 +- docs/settings-reference.md | 2 +- packages/core/src/task-store/task-creation.ts | 1 - packages/dashboard/app/api/client/health.ts | 12 ++++ packages/dashboard/app/api/settings/settings.ts | 3 + .../dashboard/app/components/SettingsModal.tsx | 46 ++++++++----- .../app/components/UpdateAvailableBanner.tsx | 20 ++++-- .../__tests__/SettingsModal.general.test.tsx | 6 ++ .../__tests__/SettingsModal.models-auth.test.tsx | 72 +++++++++++++++++++ .../__tests__/UpdateAvailableBanner.test.tsx | 2 + .../components/__tests__/settings-mobile.test.tsx | 3 + .../command-center/areas/SystemControlsArea.tsx | 18 +++-- .../__tests__/usePendingUpdateInstall.test.ts | 44 ++++++++++++ .../dashboard/app/hooks/usePendingUpdateInstall.ts | 76 +++++++++++++++++++++ packages/dashboard/app/hooks/useUpdateCheck.ts | 8 +++ .../dashboard/src/__tests__/auto-update.test.ts | 18 +++++ .../__tests__/update-install-coordinator.test.ts | 36 ++++++++++ packages/dashboard/src/auto-update.ts | 14 +++- .../__tests__/register-update-check-routes.test.ts | 14 ++++ .../src/routes/register-update-check-routes.ts | 31 ++++++++- .../dashboard/src/update-install-coordinator.ts | 23 +++++++ 25 files changed, 425 insertions(+), 36 deletions(-) Fusion-Task-Id: FN-104 Fusion-Task-Lineage: c754b258-654d-4efe-9b12-1addc7ed190b Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
c21f628174 |
FN-101: separate update installation and restart automation
Separate automatic update installation from restart recovery so dashboard reloads only after the replacement host is healthy. - Add scoped update automation settings and localized descriptions. - Coordinate update installation, restart recovery, timeout handling, and manual refresh guidance. - Update settings UI, banner behavior, API routes, documentation, screenshots, and regression coverage. Files changed: .changeset/fn-101-update-restart-lifecycle.md | 7 ++ docs/assets/fn-101-update-automation-desktop.png | Bin 0 -> 17744 bytes docs/assets/fn-101-update-automation-mobile.png | Bin 0 -> 11367 bytes docs/dashboard-guide.md | 6 +- docs/settings-reference.md | 12 ++- packages/core/src/config/settings-schema.ts | 9 ++ packages/core/src/config/update-automation.ts | 17 +++ packages/core/src/index.gate.ts | 1 + packages/core/src/index.ts | 1 + packages/core/src/types/settings/settings-scope.ts | 8 ++ packages/dashboard/app/api/settings/settings.ts | 4 + .../dashboard/app/components/SettingsModal.tsx | 38 +++++-- .../app/components/UpdateAvailableBanner.tsx | 33 +++++- .../__tests__/SettingsModal.general.test.tsx | 39 +++++++ .../__tests__/UpdateAvailableBanner.test.tsx | 59 ++++++++++- .../app/components/settings/save-split.ts | 5 +- .../sections/GlobalGeneralSection.search.ts | 22 ++-- .../settings/sections/GlobalGeneralSection.tsx | 29 +++-- .../settings-default-descriptions.test.tsx | 2 + .../__tests__/useSystemRestartRecovery.test.ts | 118 +++++++++++++++++++++ .../app/hooks/useSystemRestartRecovery.ts | 118 +++++++++++++++++++++ packages/dashboard/src/auto-update.ts | 22 +++- .../src/routes/register-update-check-routes.ts | 24 +++- .../dashboard/src/update-install-coordinator.ts | 37 +++++++ packages/i18n/locales/en/app.json | 4 + packages/i18n/locales/es/app.json | 4 + packages/i18n/locales/fr/app.json | 4 + packages/i18n/locales/ko/app.json | 4 + packages/i18n/locales/pt-BR/app.json | 8 ++ packages/i18n/locales/zh-CN/app.json | 4 + packages/i18n/locales/zh-TW/app.json | 4 + packages/i18n/src/resources.d.ts | 4 + 32 files changed, 602 insertions(+), 45 deletions(-) Fusion-Task-Id: FN-101 Fusion-Task-Lineage: 2d00e84e-a01d-4d19-bb02-aa87a818165b Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
bbca7a1ffc |
FN-094: add mono- and multi-repository lifecycle parity
Extend workspace lifecycle behavior so mono-repository and multi-repository tasks share the same durable scope, workflow, review, and merge semantics. - Add repository-scope persistence, migrations, serialization, and task mutation support. - Align dashboard task creation, detail, and workspace worktree views with repository-aware lifecycle state. - Extend executor, reviewer, merger, triage, and self-healing paths with parity coverage and tests. - Document the lifecycle contract and publish the operator-facing changeset. Files changed: .changeset/fn-094-multi-repository-lifecycle.md | 7 + docs/agents.md | 8 + docs/architecture.md | 6 + docs/dashboard-guide.md | 4 + docs/multi-project.md | 6 + docs/settings-reference.md | 2 +- docs/testing.md | 12 ++ docs/workspaces.md | 6 + ...workspace-worktrees-concurrent-merge.pg.test.ts | 19 +++ packages/core/src/index.ts | 2 +- .../core/src/postgres/migrations/0000_initial.sql | 1 + .../0064_fn_094_task_repository_scope.sql | 2 + packages/core/src/postgres/schema-applier.ts | 13 +- packages/core/src/postgres/schema/project.ts | 2 + packages/core/src/store.ts | 21 ++- .../core/src/task-store/branch-and-pr-entities.ts | 2 +- packages/core/src/task-store/persistence.ts | 4 +- packages/core/src/task-store/serialization.ts | 2 + packages/core/src/task-store/task-creation.ts | 31 ++++ packages/core/src/task-store/task-mutation-ops.ts | 131 +++++++++++++++- packages/core/src/task-store/task-row-mappers.ts | 2 +- packages/core/src/task-store/task-update.ts | 55 +++++-- packages/core/src/tasks/repository-scope.ts | 29 ++++ packages/core/src/types.ts | 4 + packages/core/src/types/task/task-core.ts | 35 ++++- packages/core/src/types/workflow/workflow-steps.ts | 21 +++ packages/dashboard/app/api/tasks/tasks.ts | 14 ++ packages/dashboard/app/components/NewTaskModal.tsx | 16 +- .../dashboard/app/components/TaskDetailModal.css | 27 ++++ .../dashboard/app/components/TaskDetailModal.tsx | 15 +- .../app/components/WorkspaceWorktreesSummary.tsx | 68 ++++++++- .../app/components/__tests__/NewTaskModal.test.tsx | 1 + .../__tests__/WorkspaceWorktreesSummary.test.tsx | 27 +++- .../src/routes/register-task-workflow-routes.ts | 48 ++++++ .../__tests__/executor-workspace-taskdone.test.ts | 20 +++ .../src/__tests__/reviewer-workspace.test.ts | 170 ++++++++++++++++++++- .../src/__tests__/self-healing-workspace.test.ts | 4 + .../workflow-graph-optional-group.test.ts | 32 ++++ .../workflow-graph-optional-step-fix.test.ts | 58 +++++++ .../engine/src/__tests__/workspace-e2e.test.ts | 91 ++++++++++- .../__tests__/workspace-lifecycle-parity.test.ts | 61 ++++++++ .../src/__tests__/workspace-merger-lease.test.ts | 25 +++ .../__tests__/workspace-merger-scope-gates.test.ts | 58 +++++++ .../engine/src/__tests__/workspace-merger.test.ts | 59 ++++++- packages/engine/src/agent-tools.ts | 92 ++++++++++- packages/engine/src/execution/reviewer.ts | 10 +- .../create-authoritative-workflow-seams.ts | 95 ++++++++++-- .../engine/src/executor/execute-workflow-graph.ts | 37 ++++- .../request-pre-merge-optional-step-fix.ts | 70 +++++++++ .../engine/src/executor/run-graph-custom-node.ts | 124 ++++++++++----- .../engine/src/executor/workflow-step-verdict.ts | 6 +- .../src/executor/workspace-review-per-repo.ts | 118 +++++++++++++- .../src/executor/worktree-task-done-scope-leak.ts | 109 ++++++++++++- packages/engine/src/merge/merger-ai.ts | 88 ++++++++++- packages/engine/src/self-healing.ts | 19 ++- packages/engine/src/triage.ts | 9 ++ .../src/workflows/workflow-graph-executor.ts | 73 +++++++-- .../engine/src/workflows/workflow-node-handlers.ts | 12 +- 58 files changed, 1962 insertions(+), 121 deletions(-) Fusion-Task-Id: FN-094 Fusion-Task-Lineage: 483f958f-cc67-474e-9383-26856c329543 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
3066123516 |
FN-100: prevent false interrupted-response save errors on new chats
Make starting or clearing an idle chat a successful cancellation no-op while preserving durable cancellation barriers for active responses. - Return success for idle generation cancellation instead of showing a false save warning. - Await cancellation and reconciliation from the chat hook before queue/session transitions. - Update chat API, route handling, documentation, regression tests, and the published fix changeset. Files changed: .changeset/fn-100-chat-new-cancel.md | 7 +++ docs/dashboard-guide.md | 2 +- packages/dashboard/app/api/chat/chat.ts | 5 +- packages/dashboard/app/components/ChatView.tsx | 25 +++++---- .../__tests__/ChatView.streaming-thread.test.tsx | 59 ++++++++++++++++++++++ .../dashboard/app/hooks/__tests__/useChat.test.ts | 37 ++++++++++++++ packages/dashboard/app/hooks/useChat.ts | 14 ++--- .../dashboard/src/__tests__/chat-manager.test.ts | 11 +++- .../src/__tests__/routes-chat-cancellation.test.ts | 7 +-- packages/dashboard/src/chat.ts | 8 ++- .../dashboard/src/routes/register-chat-routes.ts | 6 +-- 11 files changed, 153 insertions(+), 28 deletions(-) Fusion-Task-Id: FN-100 Fusion-Task-Lineage: caa5fe20-4abd-4884-ba1d-f9473c12b52f Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
b5e366da62 |
FN-099: match task Chat model menu width to Direct Chat
Match the task Chat model selector to Direct Chat sizing so provider and model names remain readable across desktop and mobile. - Apply the shared readable, viewport-clamped dropdown width to Task Chat. - Add regression coverage and desktop/mobile screenshots. - Document the behavior and publish a patch changeset. Files changed: .changeset/fn-099-task-chat-model-menu-width.md | 7 ++ docs/dashboard-guide.md | 2 +- .../app/components/TaskPlannerChatTab.tsx | 5 ++ .../ChatThinkingLevelControl.portal.test.tsx | 3 +- .../__tests__/TaskPlannerChatTab.test.tsx | 92 ++++++++++++++++++++- .../fn-099-task-chat-model-menu-desktop.png | Bin 0 -> 9534 bytes screenshots/fn-099-task-chat-model-menu-mobile.png | Bin 0 -> 7240 bytes 7 files changed, 105 insertions(+), 4 deletions(-) Fusion-Task-Id: FN-099 Fusion-Task-Lineage: fec67d58-9ca9-4878-8a0a-ac83984a3766 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
3903d3c383 |
FN-096: add New Chat to active conversation headers
Expose the shared New Chat action wherever an active conversation is open. - Keep New Chat available in list and selected-detail headers across Chat hosts. - Reset room launches to a persisted Direct session and preserve existing navigation behavior. - Update responsive styling, documentation, regression coverage, screenshots, and release metadata. Files changed: .changeset/fn-096-chat-header-new-chat.md | 7 +++ docs/dashboard-guide.md | 6 +-- packages/dashboard/app/components/ChatView.css | 3 ++ packages/dashboard/app/components/ChatView.tsx | 23 +++++---- .../components/__tests__/ChatView.mobile.test.tsx | 15 +++++- .../__tests__/ChatView.new-chat-default.test.tsx | 53 +++++++++++++++++++-- .../__tests__/ChatView.sessions-rooms.test.tsx | 36 +++++++++++--- screenshots/fn-096-chat-header-new-desktop.png | Bin 0 -> 7476 bytes screenshots/fn-096-chat-header-new-mobile.png | Bin 0 -> 4881 bytes 9 files changed, 120 insertions(+), 23 deletions(-) Fusion-Task-Id: FN-096 Fusion-Task-Lineage: b63ddd12-87bb-470e-9cc9-a80817270257 Co-authored-by: Fusion <noreply@runfusion.ai> |
||
|
|
f714e45bda |
FN-090: reconcile AI merge review state
Reconcile AI merge-review outcomes with durable task state and operator-visible workflow controls. - Persist merge-review findings and reconciliation metadata through the core task store and schema migration. - Update merger prompts, execution, recovery handling, and workflow routes for approved review outcomes. - Add dashboard task-detail presentation and release documentation for the reconciliation flow. Files changed: .../fn-090-ai-merge-review-reconciliation.md | 7 + docs/architecture.md | 6 + .../src/__tests__/postgres/schema-applier.test.ts | 2 +- .../0063_fn_090_ai_merge_review_reconciliation.sql | 2 + packages/core/src/postgres/schema-applier.ts | 19 +- packages/core/src/postgres/schema/project.ts | 1 + packages/core/src/store.ts | 24 +- packages/core/src/task-store/persistence.ts | 2 + packages/core/src/task-store/reset-lifecycle.ts | 1 + packages/core/src/task-store/serialization.ts | 1 + packages/core/src/task-store/task-mutation-ops.ts | 2 +- packages/core/src/task-store/task-row-mappers.ts | 2 +- packages/core/src/task-store/task-update.ts | 5 + packages/core/src/types/task/task-core.ts | 27 ++ .../dashboard/app/api/tasks/tasks-lifecycle.ts | 9 + .../dashboard/app/components/TaskDetailModal.css | 19 ++ .../dashboard/app/components/TaskDetailModal.tsx | 29 ++ .../src/routes/register-task-workflow-routes.ts | 17 ++ .../src/__tests__/merge-error-recovery.test.ts | 5 +- packages/engine/src/__tests__/merger-ai.test.ts | 234 +++++---------- packages/engine/src/merge/merger-ai-prompts.ts | 31 +- packages/engine/src/merge/merger-ai.ts | 319 ++++++++++----------- packages/engine/src/project-engine.ts | 4 +- 23 files changed, 416 insertions(+), 352 deletions(-) Fusion-Task-Id: FN-090 Fusion-Task-Lineage: 13450a9f-f17f-46b4-ab39-4887520c2a82 Co-authored-by: Fusion <noreply@runfusion.ai> |