mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-05 08:10:39 +00:00
## Summary
Adds the server-side run pairing surface for joining one active API-mode
agent session, sending pair messages, reading a compact transcript, and
ending pairing explicitly before workflow release continues.
This PR wires the feature end to end:
- adds OpenAPI paths and shared `fabro-types` DTOs for pair lifecycle,
messages, transcript entries, and run event details
- adds typed `RunEvent` variants for pair lifecycle and pair-scoped
user/system messages
- extends the workflow steering hub and agent session drain path with
typed pair control items, single-target validation, pair parking, and
pair end/resume behavior
- extends worker JSONL control and server transports for pair
start/message/end while preserving existing
steer/interrupt/answer/cancel behavior
- adds Axum handlers for `/api/v1/runs/{id}/pair`, pair messages, pair
transcript, and `/api/v1/runs/{id}/events/{seq}`
- adds `fabro-client` helpers for the new endpoints
## Notes
The subprocess path does not add a bidirectional worker ack channel in
this PR. Instead, the HTTP pair handlers only return lifecycle/message
success after the corresponding durable runtime event is observed, so
mpsc enqueue success alone is not treated as API success.
The plan checklist in
`docs/superpowers/plans/2026-05-18-server-side-run-pairing-api-events.md`
is included with that distinction left visible.
## Verification
- `cargo build -p fabro-api`
- `cargo check -p fabro-api -p fabro-client -p fabro-agent -p
fabro-workflow -p fabro-interview -p fabro-server`
- `cargo +nightly-2026-04-14 fmt --check --all`
- `cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D
warnings`
- `cargo nextest run -p fabro-api pair
run_event_round_trips_pair_lifecycle_events
run_event_round_trips_agent_pair_messages`
- `cargo nextest run -p fabro-workflow pair`
- `cargo nextest run -p fabro-interview pair`
- `cargo nextest run -p fabro-server pair
subprocess_answer_transport_pair_commands_enqueue_control_messages steer
interrupt`
|
||
|---|---|---|
| .. | ||
| 2026-04-29-metadata-snapshot-events.md | ||
| 2026-04-30-duplicate-type-unification.md | ||
| 2026-04-30-preserve-exec-failure-diagnostics.md | ||
| 2026-05-02-event-module-split.md | ||
| 2026-05-02-server-readiness-timeouts.md | ||
| 2026-05-02-settings-driven-llm-providers-models.md | ||
| 2026-05-04-cross-tab-sse-coordination.md | ||
| 2026-05-04-model-test-bounded-concurrency.md | ||
| 2026-05-04-unique-git-checkpoint-commit-message-path.md | ||
| 2026-05-05-clean-pierre-virtualizer-integration.md | ||
| 2026-05-05-decouple-interrupts-from-steering.md | ||
| 2026-05-06-cli-input-overrides.md | ||
| 2026-05-06-improve-cli-api-error-display.md | ||
| 2026-05-06-polished-foreground-tty-logging.md | ||
| 2026-05-08-generated-typescript-api-client-migration.md | ||
| 2026-05-08-run-owned-sandbox-lifecycle.md | ||
| 2026-05-09-daytona-run-terminal.md | ||
| 2026-05-09-fixed-project-workflow-directory.md | ||
| 2026-05-09-inline-markdown-run-titles.md | ||
| 2026-05-09-live-stage-token-projection.md | ||
| 2026-05-09-remove-local-worktree-mode.md | ||
| 2026-05-09-run-files-diff-scope-picker.md | ||
| 2026-05-10-auth-sessions-backend.md | ||
| 2026-05-10-auth-sessions-frontend.md | ||
| 2026-05-10-live-events-page.md | ||
| 2026-05-10-sandbox-services-backend.md | ||
| 2026-05-10-sandbox-services-frontend.md | ||
| 2026-05-11-automations-end-to-end.md | ||
| 2026-05-13-path-based-daytona-dockerfiles.md | ||
| 2026-05-13-sandbox-repo-layout-plan.md | ||
| 2026-05-14-optional-llm-install.md | ||
| 2026-05-15-sandbox-network-details.md | ||
| 2026-05-16-chats-new-fabro-web-port.md | ||
| 2026-05-16-source-aware-template-diagnostics.md | ||
| 2026-05-16-static-workflow-structure-rendering.md | ||
| 2026-05-17-live-provider-workflow-testing.md | ||
| 2026-05-17-provider-adapter-boundary-cleanup.md | ||
| 2026-05-18-server-side-run-pairing-api-events.md | ||
| 2026-05-18-vault-and-credential-source-cleanup.md | ||
| 2026-05-20-daytona-managed-sandbox-labels.md | ||