制約条件
- すべてのマイルストーンは、実行可能で再現可能なものを最後に残します。純粋な足場だけのマイルストーンはありません。
- エンジンは、実行時にクラウドSDKやモデルへの依存を持ちません。
- 各パッケージは、1つのpnpm + Bunモノレポ内で独立してバージョン管理(Changesets)され、Turborepoでキャッシュされ、Biomeでlintされ、同じ場所に
*.spec.tsを持ちます。
実際のパッケージ構成
coreは自分自身のインターフェース以外には依存しません。sdkとyamlはcoreに依存し、それ以外はすべて内側に依存します。
マイルストーン
M0 — 仕様とcontract
✅ 完了。 記録上のcontractとしての設計ドキュメントとZodスキーマ:
InputDecl, ToolContract, Step, FlowSpec, Run, JournalEntry, PackManifest, DomainError。M1 — コアエンジン(再現性を証明済み)
✅ 完了。
@browserflow/core: コンパイラ(resolve → typecheck → DAG → canonicalize → digest)、Rider(DAGスケジューラ、手順ライフサイクル、リトライ、冪等性)、Journal、Store(memory + SQLite)、再開、リプレイ。@browserflow/yamlのparse + canonical emit。std/transform, std/http, std/shell, std/fs, std/control。CLI compile, run, replay, inspect, runs, lint, emit。M2 — オーサリングの同等性(2つの顔、1つの真実)
✅ 完了。 完全な型推論を備えた
@browserflow/sdkのfluent builder。YAML round-tripはCIで固定点です。CLI emit, lint, --check, --dry。M3 — ブラウザーTool
🟡 おおむね完了。1つの接続点は後回し。
@browserflow/browser: Recording構造、正規化、digest化、browserTool()の決定論的リプレイは完全に実装済みです。CLI browserflow recordは--ops <file>(事前解決済みの操作リスト → canonical Recording)を受け取ります。ライブのインタラクティブなPlaywrightキャプチャ(ブラウザーを開き、クリックして進み、自動キャプチャする)は計画中です。それを支える注入モデルとopsの接続点はすでに配置されています。M4 — Packとレプリケーション(デプロイ + SDKの複製)
✅ 完了。
@browserflow/registry: Pack形式、pack init/add/publish/export, install, browserflow.lock, digest検証。CLI pack, install, registry mirror | ls | verify。ファイルバンドルによるair-gap export/import。リモートサンドボックス実行用の@browserflow/e2bアダプター。M5 — Launcher(どこでも起動)
✅ 完了。 CLI
serve(Hono経由のREST)、mcp(@modelcontextprotocol/sdk経由のMCPサーバー)、schedule(croner経由のローカルcron)。移植性conformance suiteは、すべてのフロントで同一のRun出力になることを検証します。E2Bサンドボックスは--sandbox e2b経由で統合済みです。M6 — サービス(コントロールプレーン)
✅ Routes、auth、RBAC、Postgresは完了。canvasは後回し。
packages/web-api(Bun上のHono): SQLite backed PlaneStoreを使うregistry、runs、deploys、schedules、secrets routes。apps/web(Next.js 15): runs list、run detail、timeline、YAML emitter。Auth、RBAC、multi-tenancy、Postgresは出荷済みです。WrapperStoreインターフェース(orgs、users、memberships/RBAC、API keys、automations、run refs、schedule refs、secrets、authoring sessions、audit log)は、in-memory、SQLite、Postgres(永続行の上にあるwrite-through cache)の実装を出荷しています。サービスを参照してください。Canvas editorはまだプレースホルダーです(step cardsのみで、interactionはありません)。M6.1 — MCP-as-a-productと実行の可観測性(#46–#75)
✅ 完了。 2回目のパスでM6の上に載せました: REST公開ゲートから独立したオートメーションごとのMCP toggle(#73)、キャプチャ済み手順リテラルからbind可能なオートメーション上のtyped parameters(#72)、buffered JSONと並ぶMCP SSE streaming(Streamable HTTP
notifications/progress)(#66)、get-run-status polling toolを持つMCP queue dispatch mode(#67)、CDP screencastによる実行中Runのlive browser view(sync dispatchのみ)(#68)、APIキーごとのscopes(オートメーションallowlist、スコープ外では不可視 + 403)(#64)、クライアント別config snippetを持つ実際の**“Connect via MCP”** panel(#63)、Run Inspectorのfull Journal(手順timelineだけでなく、effect/skip entriesを含む順序付きログ)(#56)、そしてBuild StudioとRun Inspectorからのrun stop/cancel(#55)。Connect via MCP、Runs & Inspector、Access Controlを参照してください。Post-1.0候補(コミット対象外)
これらは探索的な方向性であり、コミットメントではありません。
- より多くのstd tool kindと、community pack registry。
- 同じJournalセマンティクスを持つ分散/worker-pool実行。
- Pack上の署名付きprovenance attestation(SLSA-style)。
codetoolのサンドボックス強化パス(WASM / capabilityごとのprocess isolation)。- UIで2つのFlowSpec digestをvisual diffする機能。
やらないこと
- モデルをruntime execution pathに置くこと。(今後もありません。これがthesisです。)
- 再現性や移植性を有料サービスに依存させること。
- 数行を節約するために、エンジンへambient global stateを追加すること。
coreを特定のtransport、store、cloudに結合すること。
ビルド順を1行で: contracts → engine + replay → dual authoring → browser tool → packs + replication → launchers → service。各手順は独立して出荷可能であり、それぞれが再現可能な実行で終わります。
関連項目
FlowSpec IR
M0で固定された正規化とdigestのルール。
実行
M1が届けるRider、Journal、再開、リプレイ。
ToolとPack
M4で到達するPack形式とレプリケーション。
Launcher
どこでも実行するためのM5の移植性conformance suite。