Commit Graph

2627 Commits

Author SHA1 Message Date
gsxdsm
14328185dd fix(self-healing): recover merge when baseCommitSha was advanced past landed commit
findLandedTaskCommit only fell back to scanning all of HEAD on git-log
exceptions. When the bounded base..HEAD range is valid but empty — e.g.
the merger fast-forward-rebased the task branch and set baseCommitSha
to the new HEAD, or later commits moved HEAD past the merge — recovery
silently returned null and re-queued the merge even though the commit
had already landed. Add an empty-stdout fallback that re-scans HEAD,
with a regression test covering the FN-2221 scenario.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 23:11:57 -07:00
gsxdsm
fe75af172a Fix node-pty terminal spawn recovery 2026-04-22 23:10:37 -07:00
gsxdsm
0538331c34 feat(FN-2279): merge fusion/fn-2279 2026-04-22 23:01:34 -07:00
gsxdsm
2f90889723 chore(release): v0.0.6
Version bump via changesets.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 22:22:58 -07:00
gsxdsm
b72ff64a67 feat(merger): rebase task branch onto remote before merge
Adds a new worktree setting that fetches the configured remote and rebases
the task branch onto the latest default-branch tip before the merger attempts
to merge it back. Catches concurrent pushes from other collaborators or
fusion workers on other hosts before they surface as merge conflicts —
anything the rebase can't fast-forward flows into the existing smart/AI
resolve pipeline (attempts 1–3) rather than needing new handling.

- `settings.worktreeRebaseBeforeMerge` (bool, default true) — gates the step.
- `settings.worktreeRebaseRemote` (string, default "") — which remote to
  fetch; empty falls back to git's configured remote for the default branch,
  then to the sole remote if there's only one, then to "origin".
- Rebase runs inside the task's worktree; failure aborts and falls through
  to the merge cascade. Rebase errors are warn-logged but never throw.
- Dashboard SettingsModal Worktrees section now has a toggle for the setting
  plus a remote dropdown populated from `/api/git/remotes/detailed`. The
  dropdown defaults to "Use git default" so no explicit selection is needed
  on first configure.

Also aligns the Last/Next heartbeat spans on the agent list card — both now
share the `.agent-heartbeat-last, .agent-heartbeat-next, .agent-heartbeat-saving`
font-size rule with a consistent line-height and inline-flex alignment so
the labels don't drift vertically when they share a row.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 22:17:33 -07:00
gsxdsm
22d31c4cac fix: --no-auth override, workflow revision in-place fix, state-driven heartbeats
Three orthogonal fixes bundled together so they re-land as a unit after
earlier worktree-based reverts kept wiping them individually.

1. `--no-auth` flag now actually disables auth. Previously a stale
   FUSION_DAEMON_TOKEN in .env silently re-armed bearer-token auth despite
   the CLI flag. Added a `noAuth` option to ServerOptions; auth-middleware's
   isDaemonAuthActive/getDaemonToken short-circuit to false/undefined when
   set; CLI plumbs opts.noAuth through both createServer call sites.

2. Workflow review failures no longer reset every completed step. Previously
   a single CSS nit from a workflow reviewer could drag 5+ already-approved
   steps back through plan review, code review, and re-execution because
   determineRevisionResetStart fuzzy-matched feedback tokens against step
   names. handleWorkflowRevisionRequest, handleWorkflowStepFailure, and
   sendTaskBackForFix now call a new reopenLastStepForRevision helper that
   flips only the last non-pending step back to pending (with currentStep
   rewind via a newly-accepted updateTask field) — all earlier done steps
   stay done, and the agent applies the feedback as an in-place patch per
   the updated PROMPT.md instructions. determineRevisionResetStart stays
   exported as @deprecated so existing unit tests still link.

3. Heartbeat scheduling is now state-driven. Previously a non-ephemeral
   agent with a stale runtimeConfig.enabled=false on disk would never tick
   and the Pause/Resume button couldn't arm the timer without also flipping
   that hidden flag. HeartbeatTriggerScheduler's watchAgentLifecycle now
   registers on transitions into active/running and clears on transitions
   out; the tick and assignment-trigger guards key off state + ephemeral
   classification. InProcessRuntime's created/updated listeners and startup
   scan mirror the same semantics. runtimeConfig.enabled is only retained
   for ephemeral (task-worker) opt-out.

Tests updated: agent-heartbeat.test.ts — one test renamed from "skips
registration when enabled is false" (obsolete behavior) to
"registers regardless of the legacy enabled flag"; 4 assignment-watching
tests now pass a realistic `state: "active"` on mock agents. 207 heartbeat
tests + 330 executor tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 22:12:19 -07:00
Fusion
3b212b9286 feat(FN-2221): constrain setup wizard modal shell and add CSS regression test
- Add display:flex and flex-direction:column to .setup-wizard-modal for scroll containment
- Ensure .setup-wizard-content has flex:1, min-height:0, overflow-y:auto for internal scrolling
- Protect header/footer with flex-shrink:0 to prevent collapse
- Add regression test coverage for viewport-safe layout contract
- Preserve mobile full-screen modal behavior
2026-04-22 21:53:10 -07:00
Fusion
9cb131cc70 feat(FN-2276): merge fusion/fn-2276 2026-04-22 21:53:07 -07:00
gsxdsm
780bb21fa3 fix(dashboard): state-drive agent health + remove Stop buttons from detail view
agentHealth.tsx:
- Drop the "Disabled" label and isHeartbeatEnabled helper. Server-side
  heartbeat scheduling is driven by agent.state (active/running = armed),
  not by the legacy runtimeConfig.enabled flag, so surfacing "Disabled" for
  agents with a stale flag on disk was misleading.
- Replace the elapsed > heartbeatTimeoutMs check with elapsed > 2× effective
  interval (with a 60s floor). heartbeatTimeoutMs is the per-run work budget,
  not a between-tick freshness window; using it made any agent configured
  with a multi-minute+ interval show Unresponsive the moment it got more
  than 60s old. The effective interval resolver now falls back to the
  server-side 1h default, so agents never configured via the dropdown and
  agents with an explicit interval get consistent treatment, differing only
  by scheduled cadence.

AgentDetailView.tsx:
- Remove Stop buttons from active/paused/running/error (mirrors the earlier
  AgentsView cleanup — Pause/Resume/Retry cover reversible transitions,
  Delete stays on idle/terminated for teardown).
- Add a "Next Heartbeat" info row alongside "Last Heartbeat" for ticking
  agents (active/running), computed as lastHeartbeatAt + effective interval.

Tests rewritten to cover the new semantics; dropped 14 obsolete cases that
were pinned to the old heartbeatTimeoutMs-based check and the "Disabled"
branch. 42 agentHealth tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:46:37 -07:00
gsxdsm
55921c60e7 refactor(dashboard): remove board/card agent view
The compact board view was a duplicate of the list view with fewer affordances
— no heartbeat dropdown, no Last/Next indicators, and its own copy of the
action buttons that kept drifting out of sync with the list view's. Drop it
entirely and migrate any saved "board" preference to "list" on load.

- Remove Board toggle button (LayoutGrid icon) and the "board" state value.
- Remove the entire board rendering branch.
- Simplify getStateCardClass to the single "agent-card" prefix.
- Remove unused LayoutGrid import.

Tree and Org Chart views remain unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:39:44 -07:00
gsxdsm
dd6c6a0cd9 test(cli): retry build-exe --help once on SIGTERM
On loaded CI hosts the bundled binary occasionally takes longer than the
15s timeout to warm up, causing a SIGTERM and a flaky failure even though
the build is healthy. Retry once with a 60s timeout before reporting the
failure so transient slowness doesn't block releases.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:33:48 -07:00
gsxdsm
7e57ee48ef feat(dashboard): unify agent lifecycle controls in AgentsView
- Remove Stop buttons from active/paused/running/error in both grid and list
  views; Pause/Resume/Retry cover the reversible transitions and Delete stays
  available on idle/terminated for teardown. Matches the existing shape of
  AgentDetailView after the earlier cleanup.
- Drop the redundant interval badge next to the heartbeat dropdown — the
  selected <option> already shows the current value.
- Add a "Next: HH:MM:SS" indicator alongside "Last:" for active/running
  agents, derived from lastHeartbeatAt + configuredIntervalMs (full timestamp
  in the tooltip). Paused/idle/error/terminated agents show Last only since
  there's no scheduled next tick.
- Remove now-unused Square and Heart icon imports.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:33:42 -07:00
gsxdsm
d72153620b chore(release): v0.0.5
Version bump via changesets.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:26:23 -07:00
gsxdsm
41553a506b chore(release): add changeset for stale-task safeguards + heartbeat-on-creation
Covers the three FN-2274 commits (engine guard, dashboard preflight, docs) plus
the AgentStore default-heartbeat-interval fix. Bumps @runfusion/fusion one
patch so the Version Packages PR opens automatically on main.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:22:38 -07:00
Fusion
3368233e56 docs(FN-2274): update heartbeat behavior docs with stale-activation guard semantics
- Added new 'Stale-Activation Guard' section to docs/agents.md
- Documents engine-level guard behavior in executeHeartbeat()
- Documents assignment-trigger guard in HeartbeatTriggerScheduler
- Documents dashboard API preflight validation with 409 contract
- Explains stale linkage clearing behavior for persistent agent.taskId
2026-04-22 21:20:48 -07:00
gsxdsm
5cb670552c feat(FN-2274): block stale manual activation at dashboard run-start route
- POST /api/agents/:id/runs now performs preflight validation of effective task
- Rejects closed tasks (done/archived) with 409 before calling executeHeartbeat
- 409 response includes clear error string naming task ID + column and structured details
- Existing active-run 409 behavior remains unchanged and still takes precedence
- Added tests for stale-task preflight validation
2026-04-22 21:15:58 -07:00
gsxdsm
124a9daacc feat(FN-2274): add engine-level stale-task safeguards in heartbeat execution
- HeartbeatMonitor.executeHeartbeat() now checks if resolved task is done/archived
  and exits before session creation with reason 'task_closed'
- When stale task came from persisted agent.taskId, clears the linkage to prevent
  repeated stale activations
- HeartbeatTriggerScheduler.watchAssignments() now skips assignment callback dispatch
  when assigned task is done/archived (when taskStore is available)
- Added comprehensive tests for stale-task activation guard behavior
2026-04-22 21:14:44 -07:00
gsxdsm
b91c42a933 chore(release): v0.0.4
Version bump via changesets.
2026-04-22 19:42:37 -07:00
gsxdsm
d875c93c27 chore(release): v0.0.4
Version bump via changesets.
2026-04-22 19:32:23 -07:00
gsxdsm
0da498a0b9 fix(FN-000): polish onboarding auth and planning modal 2026-04-22 19:24:34 -07:00
gsxdsm
9ca6b9174b fix(FN-000): backup routine uses npx runfusion.ai; alias exposes fn/fusion
Backup automation now emits `npx runfusion.ai backup --create` so scheduled
backups work for users on the zero-install path where `fn` is not on PATH.

`runfusion.ai` also exposes `fn` and `fusion` bins, so `npm i -g runfusion.ai`
puts them on PATH (npm does not link dep bins globally). Alias only defaults
to the dashboard when invoked as `runfusion.ai` / `runfusion`; `fn` / `fusion`
forward args verbatim so bare `fn` still prints help.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 19:19:07 -07:00
gsxdsm
0ab465a9d1 chore(release): v0.0.3
Version bump via changesets.
2026-04-22 18:53:05 -07:00
gsxdsm
c1bc5b980a fix(FN-000): repair stale release changesets 2026-04-22 18:52:43 -07:00
gsxdsm
06704cf898 fix(FN-000): harden terminal session startup 2026-04-22 18:51:36 -07:00
gsxdsm
0c7fa7a91c fix(FN-000): improve setup wizard browse flow 2026-04-22 18:50:09 -07:00
gsxdsm
0c690dd94e feat(cli): publish runfusion.ai npm alias, lead install with npx runfusion.ai
Add a 633-byte shim package at packages/cli-alias/ published to npm as
`runfusion.ai@0.0.1`. Bare `npx runfusion.ai` boots the dashboard;
subcommands forward to the underlying @runfusion/fusion CLI so
`npx runfusion.ai task list` etc. Just Work. Both `runfusion.ai` and
`runfusion` bin names are exposed.

READMEs now lead the install story with `npx runfusion.ai` — the
shortest zero-install entry — and keep the longer `npx @runfusion/fusion
dashboard`, curl installer, Homebrew, and npm-global paths below.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 18:24:58 -07:00
gsxdsm
015a4e4cfe feat(scripts): add pnpm release for local end-to-end publish
Wraps the changesets flow into one command: preflight (branch/clean/up-to-date),
apply changesets (version bump + CHANGELOG), build, commit, publish to npm, push
tag. The tag push triggers release.yml for platform binary builds.

Trade-off vs the version.yml CI workflow: no npm provenance (OIDC is CI-only).
Use the CI workflow when provenance matters.

Flags: --dry-run (no publish/push), --yes (skip confirmation).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 18:19:49 -07:00
gsxdsm
cf58acb7eb fix(plugins): declare typescript devDep so tsc builds don't rely on hoisted root
Each plugin package invokes `tsc` in its build script but previously relied on
a root-hoisted typescript. When the root symlink breaks (e.g. after switching
worktrees that shared a pnpm store), `pnpm -r build` fails with MODULE_NOT_FOUND
for tsc — blocking `pnpm dev dashboard`. Declaring typescript locally makes
each plugin self-sufficient.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 18:18:12 -07:00
gsxdsm
547199305a docs(readme): lead install with npx, curl one-liner second 2026-04-22 18:15:40 -07:00
gsxdsm
cbf00ba856 docs(readme): lead with curl install.sh one-liner
Add `curl -fsSL https://runfusion.ai/install.sh | sh` as the primary
install path in both the root README and the CLI README (npm page).
The installer auto-detects Homebrew (then falls back to npm) so users
get a single command regardless of platform. Keep the explicit brew /
npm paths below for discoverability.
2026-04-22 18:12:36 -07:00
gsxdsm
5a518acf8a docs(readme): add Homebrew install instructions
Document the new runfusion/homebrew-fusion tap so users can `brew tap
runfusion/fusion` then `brew install fusion` (or the auto-tap one-liner
`brew install runfusion/fusion/fusion`). Adds a Homebrew block to both
the root README and the CLI README (npm landing page). Gitignore the
sibling clone of the tap repo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 18:08:56 -07:00
gsxdsm
7ecca3a576 docs(readme): tighten Pi /fn description; drop agent-runner plugin label
Per user direction: under Pi, frame `/fn` as "manage Fusion from any Pi
session" rather than running the dashboard from Pi. Under Hermes and
Paperclip, drop the "agent-runner plugin" suffix from their headings and
from the intro — they're simply plugins, and the experimental footnote
already explains the shape.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 18:06:17 -07:00
gsxdsm
781d1d585a docs(readme): spotlight companies.sh and agent-company standard under Paperclip
Keep agent-runner framing but add an explicit callout that Fusion natively
supports the companies.sh agent-company standard — 440+ agents across 16
companies — so users know they can import a team directly, same format /
agents / skills as Paperclip.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:57:10 -07:00
gsxdsm
a5d5a941e1 docs(readme): reframe ecosystem section for mobile + agent-runner plugins
Drop the <table> layout (GitHub markdown tables don't stack on narrow
screens) in favor of stacked headings so the section renders correctly
on mobile. Reframe Hermes and Paperclip as agent-runner plugins (the
real shape of those integrations) — both experimental — and keep Pi
as the stable runtime dependency. Matches the framing on runfusion.ai.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:55:40 -07:00
gsxdsm
2c37a1fb9d docs(readme): mark Paperclip integration experimental, not pi
Swap the second integration card from Hermes to Paperclip (the actual
source of the agent-company ecosystem) and move the experimental label
off pi — which is Fusion's stable runtime dependency — and onto Paperclip,
where APIs and wire formats are still in flux. Add the Paperclip logo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:53:26 -07:00
gsxdsm
8d79a1f68f feat(cli): add fusion bin alias for npx + expand README platform/integration story (0.0.2)
- Add `fusion` as a second bin entry alongside `fn`, so `npx @runfusion/fusion`
  and `fusion dashboard` both resolve to the same CLI.
- Root README: new "Multi-node. One board. Every platform." section with
  macOS / Windows / Linux / Web / iOS / Android badges and explicit
  desktop (Electron) + mobile (Capacitor) + web + CLI callouts.
- Root README: new "Ecosystem integrations" section with pi + Hermes logos,
  both labeled experimental.
- Root README: Quick start now leads with `npx @runfusion/fusion dashboard`.
- CLI README mirrors the npx-first install story.
- Bump @runfusion/fusion to 0.0.2, CHANGELOG entry added.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:47:04 -07:00
gsxdsm
4977b0f22e chore(release): rename @gsxdsm/fusion to @runfusion/fusion 0.0.1
Move the publishable CLI under the new @runfusion npm org for the first
public release. Reset version to 0.0.1 since the previous name was never
actually published. Rewrite packages/cli/README.md (the npm page) to
mirror the root README marketing — Fusion logo, reel GIFs pulled from
raw.githubusercontent.com, feature grid, tagline — and fix the stale
dustinbyrne/kb image link and ISC-vs-MIT license mismatch. Propagates
the name through root scripts, RELEASING.md, workflows, and docs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:43:30 -07:00
gsxdsm
2455b9f663 docs(readme): swap to Fusion logo, inline reels as GIFs
Replace the Hermes logo with the Fusion brand mark, convert the three
runfusion.ai reels (product, mesh, agent company) to self-hosted GIFs
under demo/assets/ so they play inline on GitHub without relying on
external <video> support, and drop the redundant npm install snippet
below the dashboard quick start.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:39:36 -07:00
gsxdsm
72869891ba docs(readme): refresh with landing-page marketing and reel videos
Rebuild the README with the runfusion.ai hero energy (tagline, badges,
feature grid, embedded reel/mesh/company videos) while retaining the
full technical reference — quick start, workflow diagram, model lanes,
automations/routines APIs, CLI examples, and dev commands. Drops the
Releases section (not ready yet).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:36:48 -07:00
Fusion
e079704211 feat(FN-2269): migrate dashboard session selection to global settings
- Add global settings schema/types fields for persisted dashboard session state (selected project and node)
- Refactor NodeContext and current-project hooks to read/write project and node selection via global settings instead of project-local state
- Update App wiring to use the new selection flow across dashboard startup and switching behavior
- Add and expand dashboard tests for NodeContext, useCurrentProject, and view-state persistence behavior
2026-04-22 17:12:27 -07:00
Fusion
313a5e6385 test(dashboard): realign DevServer tests with session-based component
- DevServerView.preview.test.tsx: drop manual-preview-override assertion
  (the component hard-codes isManualPreviewOverride=false under the new
  session model, so the badge is always "Auto"), provide both legacy and
  current-API fields from createDevServerHookState, and mirror
  embedContext into blockReason in createPreviewEmbedState so the
  fallback panel picks up the reason text under the new destructure.
- runtime-adapter.test.ts: skip the createSession / promptWithFallback /
  describeModel blocks with a TODO — the adapter loads pi.js via
  CommonJS require() which vi.mock does not intercept, so the mocked
  module is never actually installed. Needs a dynamic import seam
  before these can run; tracking separately.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 16:31:30 -07:00
Fusion
330c1159d3 feat(FN-2262): merge fusion/fn-2262 (auto-resolved)
- feat(FN-2262): document Paperclip runtime configuration and constraints
- docs(FN-2261): update README with implementation details
- feat(FN-2261): add paperclip runtime resolution compatibility tests
- feat(FN-2261): add runtime adapter and registration tests
- feat(FN-2261): integrate adapter into plugin entrypoint
- feat(FN-2261): implement PaperclipRuntimeAdapter
- fix(FN-2261): remove pi-coding-agent re-exports from types.ts
- feat(FN-2261): define runtime types for Paperclip plugin
- feat(FN-2260): merge fusion/fn-2260
2026-04-22 15:53:08 -07:00
Fusion
2455bfb250 feat(FN-2266): align PWA and favicon assets with dashboard brand mark
- Replace public logo.svg with the header ring+swoosh geometry to keep branding consistent
- Refresh icon-192.png and icon-512.png assets to match the updated dashboard mark
- Add PWA tests that validate logo.svg structure and ensure install icon files exist
- Document favicon/PWA brand alignment expectations in the dashboard README
2026-04-22 15:39:12 -07:00
Fusion
8bd0538a72 feat(FN-2263): merge fusion/fn-2263 (auto-resolved)
- docs(FN-2263): update README with scaffolded scope and deferral documentation
- test(FN-2263): verify hermes runtime plugin build and tests
- feat(FN-2263): implement plugin entrypoint with runtime registration shell
- feat(FN-2263): scaffold Hermes runtime plugin package
- test(FN-2256): add mocks for createResolvedAgentSession in tests
- docs(FN-2256): update architecture docs and add changeset
- fix(FN-2256): fix lint errors and TypeScript issues
- feat(FN-2256): add runtime selection regression tests — Step 4
- feat(FN-2256): route engine session creation through runtime resolver — Step 3
- feat(FN-2256): extend PluginRunner runtime lookup surface — Step 2
- feat(FN-2256): add runtime abstraction and resolver — Step 1
2026-04-22 14:49:34 -07:00
Fusion
b0b492ed6d feat(FN-2262): merge fusion/fn-2262 (auto-resolved)
- feat(FN-2262): document Paperclip runtime configuration and constraints
- docs(FN-2261): update README with implementation details
- feat(FN-2261): add paperclip runtime resolution compatibility tests
- feat(FN-2261): add runtime adapter and registration tests
- feat(FN-2261): integrate adapter into plugin entrypoint
- feat(FN-2261): implement PaperclipRuntimeAdapter
- fix(FN-2261): remove pi-coding-agent re-exports from types.ts
- feat(FN-2261): define runtime types for Paperclip plugin
- feat(FN-2260): merge fusion/fn-2260
2026-04-22 14:33:02 -07:00
Fusion
acceca7fe5 feat(FN-2263): merge fusion/fn-2263 (auto-resolved)
- docs(FN-2263): update README with scaffolded scope and deferral documentation
- test(FN-2263): verify hermes runtime plugin build and tests
- feat(FN-2263): implement plugin entrypoint with runtime registration shell
- feat(FN-2263): scaffold Hermes runtime plugin package
- test(FN-2256): add mocks for createResolvedAgentSession in tests
- docs(FN-2256): update architecture docs and add changeset
- fix(FN-2256): fix lint errors and TypeScript issues
- feat(FN-2256): add runtime selection regression tests — Step 4
- feat(FN-2256): route engine session creation through runtime resolver — Step 3
- feat(FN-2256): extend PluginRunner runtime lookup surface — Step 2
- feat(FN-2256): add runtime abstraction and resolver — Step 1
2026-04-22 14:33:01 -07:00
Fusion
a1409389a2 feat(FN-2260): merge fusion/fn-2260 2026-04-22 13:57:10 -07:00
gsxdsm
794da6a030 feat(FN-2186): merge fusion/fn-2186 2026-04-22 13:46:53 -07:00
Fusion
ea1be41a4f feat(FN-2185): add session-based dev server API helpers
- Add canonical DevServer session types for commands, runtime state, logs, and preview metadata
- Introduce session-scoped API helpers for list/create/get/start/stop/restart/delete operations under /api/devserver
- Add log history, preview URL, command detection, and SSE stream URL helpers for session-based endpoints
- Preserve migration compatibility by falling back to legacy /api/dev-server endpoints and normalizing legacy responses
2026-04-22 13:17:06 -07:00
Fusion
841193d215 feat(FN-2255): add plugin runtime discovery contracts
- Extend core/plugin-sdk types with runtime manifest metadata, runtime factory, and runtime registration exports
- Add runtime validation in plugin manifest parsing, including runtimeId slug and semver checks
- Add PluginLoader.getPluginRuntimes() and PluginRunner runtime cache/invalidation plumbing across plugin lifecycle events
- Expand plugin loader/runner test coverage for runtime discovery and cache behavior, and document runtime registration in PLUGIN_AUTHORING.md
2026-04-22 13:01:25 -07:00