Bumps the pi SDK dependencies to 0.80.6 across the CLI, dashboard, engine, and pi-claude-cli packages, and adapts the Claude CLI thinking-effort mapper for the new `max` ThinkingLevel.
- Bump @earendil-works/pi-ai and @earendil-works/pi-coding-agent from ^0.80.5 to ^0.80.6 in packages/cli, packages/dashboard, packages/engine, and packages/pi-claude-cli (dependency/peerDependency/devDependency entries)
- Regenerate pnpm-lock.yaml for the new SDK versions
- Map the new `max` ThinkingLevel in packages/pi-claude-cli/src/thinking-config.ts: non-Opus models downgrade to `high` (effort max unsupported), Opus models map to `max`
- Extend packages/pi-claude-cli/src/__tests__/thinking-config.test.ts with coverage for the `max` level
- Add .changeset/fn-7755-pi-sdk-bump.md (patch) documenting the SDK bump
Files changed:
.changeset/fn-7755-pi-sdk-bump.md | 7 ++
packages/cli/package.json | 4 +-
packages/dashboard/package.json | 2 +-
packages/engine/package.json | 4 +-
packages/pi-claude-cli/package.json | 8 +-
.../src/__tests__/thinking-config.test.ts | 12 +++
packages/pi-claude-cli/src/thinking-config.ts | 10 ++-
pnpm-lock.yaml | 92 +++++++++++-----------
8 files changed, 82 insertions(+), 57 deletions(-)
Fusion-Task-Id: FN-7755
Fusion-Task-Lineage: f6a9084b-dfb9-4ad5-bd99-4627dae4c666
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
MailboxMessageContent pipeline gains rehype-raw -> rehype-sanitize (GitHub-like allow list: details/summary/kbd/tables/etc; strips script/style/iframe/on*/javascript:) so raw HTML in markdown renders and HTML comments are dropped. Fenced ```mermaid blocks render via a lazy-loaded MermaidDiagram component (dynamic import keeps mermaid out of the main bundle; theme-aware; falls back to the raw block on parse error).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compound Engineering plugin view now renders the dashboard's shared ViewHeader (Sparkles icon + title) so it matches the other main-content views. Expose ViewHeader via the dashboard exports map; resolve it in the plugin via an ambient interop declaration (no host runtime dependency). Tests updated (plugin suite green).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update the pi SDK dependency family across Fusion packages and record a patch changeset.
- Bump @earendil-works/pi-ai and @earendil-works/pi-coding-agent to ^0.79.9 where used by CLI, dashboard, and engine packages.
- Refresh pnpm-lock.yaml to resolve the updated pi SDK dependency graph.
- Add a patch changeset for the published @runfusion/fusion package.
Files changed:
.changeset/fn-6853-pi-sdk-bump.md | 5 +
packages/cli/package.json | 4 +-
packages/dashboard/package.json | 2 +-
packages/engine/package.json | 4 +-
pnpm-lock.yaml | 285 +++++++++++++++++++++++++++-----------
5 files changed, 214 insertions(+), 86 deletions(-)
Fusion-Task-Id: FN-6853
Fusion-Task-Lineage: bc2dba95-b8c2-48d1-855d-847e6eec9606
The default `vitest run` (no --project) path — used by `pnpm test` via
test-changed's `vitest --changed` scoping — ran every dashboard test file in
up to 3 overlapping projects: the `dashboard-app-quality` umbrella, a curated
shard, and the broad `dashboard-app`/`dashboard-api` lanes. A scoped run
selected 1899 executions for 829 unique files (2.3x redundant work).
- Remove the dead `dashboard-app-quality` umbrella project: it re-ran the exact
union of its eight curated shards. It is absent from test-inventory-spec.json,
dashboardQualityProjectGlobs, and every script; package-config's contract test
already asserts test:deep must not use it.
- Gate the broad `dashboard-app`/`dashboard-api` includes behind
FUSION_DASHBOARD_DEEP so they are empty in the default run (no longer
duplicating the curated shards + backfill) but remain selectable via
--project. The explicit deep escape hatches (test:deep/test:app/test:api/
test:build) set the flag to opt back in.
Default scoped run now selects 829 executions for 829 files (1x). Verified:
curated-gate inventory guard intact (828 files, 829 executed, 1 skip-listed),
package-config contract test green (31/31), build-output.test.ts still
reachable via test:build, deep hatch repopulates with the flag.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update @earendil-works/pi-coding-agent and @earendil-works/pi-ai from
^0.78.0 to ^0.79.1 across cli, engine, and dashboard. This brings in
Claude Fable 5 (claude-fable-5) on the Anthropic and Amazon Bedrock
providers.
Fusion's model picker is registry-driven (/api/models -> pi ModelRegistry,
filtered by provider, not model id), so Fable surfaces automatically for
users with Anthropic or Claude CLI auth configured — no Fusion-side model
list change needed.
Verified: all core packages typecheck clean against 0.79.1; boot smoke
(fn --help, /api/health 200, clean shutdown) passes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 427 orphaned dashboard test files ran in NO gate; 395 now gated via self-maintaining backfill lanes (glob minus curated minus skip-list), 31 pre-existing failures + build-output skip-listed with reasons
- settings -t name-filter lanes replaced by one unfiltered lane (describe blocks can no longer fall through filters)
- scripts/check-test-inventory.mjs: --capture/--diff superset harness + --dashboard-curated completeness guard
- pr-checks.yml: engine-slow CI gate (non-empty assertion) + inventory guard job
- docs/testing.md: guard, skip-list policy, harness usage
Main independently landed the same pausedReason persistence fix (column in
the task INSERT/upsert, TaskRow type, rowToTask mapping) with the column
ordered between paused and userPaused; adopt main's ordering and drop this
branch's duplicate entries so the values array stays aligned. Union the
dashboard package.json deps (main's compound-engineering plugin alongside
this branch's sorted pi-coding-agent/cli-printing-press/cursor-runtime).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a React Flow (@xyflow/react) based WorkflowNodeEditor: a lazy-loaded modal
with a workflow list, a node palette (prompt/script/gate/merge-boundary),
drag-to-connect edges, a per-node inspector, and save with compile-validation
that surfaces non-linear graphs as a banner. Pure irToFlow/flowToIr mapping
round-trips the v1 IR plus editor layout. Reachable via a Graph editor button in
the Workflow Steps manager; mounted in AppModals behind a new modal-manager
flag. Adds a vendor-reactflow Vite chunk and a feature changeset.
- Validate GlobalSettings.language at the write boundary (store.ts) via
validateLocale, so invalid locales are dropped not persisted (api-contract P1).
- Fix detectEnvLocale: Traditional-script env tags (zh_Hant/zh_Hant_TW/zh_HK/
zh_MO) now resolve to zh-TW instead of Simplified; use replaceAll for
multi-underscore POSIX tags (adversarial P2). Add coverage.
- Agent-native parity: add 'language' to the CLI settings allowlist
(VALID_SETTINGS + GLOBAL_ONLY + enum) so 'fn settings set language' works
like the dashboard switcher.
- Document --lang in the bin.ts help table (api-contract P3).
- Derive the expected locale-chunk count from the locales dir instead of a
hardcoded 5 (maintainability), and add prebuild:client so a raw vite build
on a fresh clone still syncs catalogs (adversarial P2).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Initialize the browser i18next instance with lazy per-locale catalog loading,
localStorage->navigator->htmlTag detection, script-aware zh fallback, and the
shared @fusion/i18n config. Catalogs are synced from @fusion/i18n into a
gitignored app/locales/ (predev/prebuild) and imported app-relative so Vite
emits one chunk per locale/namespace (verified: 15 chunks, none inlined into
the main bundle). First paint is gated on i18nReady to avoid raw-key flashes;
<I18nextProvider> wraps the App provider stack; vendor-i18n manualChunk added.
A build-assertion script (verify:locale-chunks) guards the KTD3a splitting
invariant. Fallback/namespace behavior is covered by @fusion/i18n config tests;
the live instance is verified via the build assertion rather than a unit test
(the dynamic catalog backend is impractical to exercise in vitest).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>