REST Launcher
browserflow serve は、Registry内のFlowをHTTPエンドポイントとして公開します。内部では Hono on Bun を使っており、ホストはNode、Bun、Deno、edgeランタイム間でポータブルに保たれます。ポータビリティ契約に従い、変わるのはLauncherのtransportだけで、エンジンとFlowSpecは一定のままなので、同じLauncherコードがそれらすべてで動作します。
buildRunDeps(どの Store、どの Secrets、どのbrowser providerか)を構築し、その後、解決済みのFlowSpecを実行します。手元のラップトップで検証したFlowは、FlowSpecとPack digestが同一であるため、ここでも再現されます。
Flowへ入力を投稿する
標準的なdaily-price-watch Flowを実行するには、そのFlowのtyped inputをFlowの runs routeへ投稿します。このFlowでは、browser Tool(search-price@1.2.0)がtransformと、シークレットwebhookへの条件付き http.post に値を渡します。
secret.WEBHOOK_URL として参照されるシークレットwebhook URLは、実行時にserving process上で解決され、secrets capabilityを宣言した手順にだけ注入されます。リクエスト、レスポンス、いかなるログにも流れません。
リクエストボディはFlowのtyped
inputs です。daily-price-watch では、これは query フィールドです。Flowの入力schemaと一致しない入力を投稿すると、Runが開始する前に拒否されます。同期またはfire-and-poll
Launcher仕様に従い、各routeは2つの方法のどちらかで応答できます。routeごとに選択できます。| モード | 呼び出し方法 | レスポンス | 使用する場面 |
|---|---|---|---|
| 同期 | POST /flows/:name/runs(デフォルト) | 完了した Run をinlineで返す | Flowがすばやく完了し、呼び出し元が結果をinlineで受け取りたい場合 |
| Fire-and-poll | POST /flows/:name/runs?mode=async | HTTP 202 + run id。GET /runs/:id をpollする | Flowの実行時間が長く、接続を開いたままにしたくない場合 |
Rider が同じRunとJournalを生成します。違いは、Launcherがホスト向けに結果をどう整形するかだけです。
サーバーを起動する
browserflow serve --registry ./registry --port 8080 は、./registry 内のFlowに対してHTTPホストを立ち上げます。サービス層へデプロイする
自分でbrowserflow serve を実行する場合、インフラは不要です。チームがマネージドなデプロイを必要とする場合、オプションのコントロールプレーンによって、これを宣言的なデプロイにできます。PackをplaneのRegistryに公開し、その後、必要なfrontでそのFlowを公開します。
API surface全体
上記のroute形状がREST frontの中核です。完全なリクエストschemaとレスポンスschema、pollingエンドポイント、error semanticsについては、専用のAPI Referenceを参照してください。APIリファレンス
REST Launcherの完全なリクエストschemaとレスポンスschema。
Launcher
CLI、REST、MCP、cron、CI、containerの各frontと、ポータビリティ契約。
サービスへデプロイする
マネージドなコントロールプレーンでPackを公開し、Flow digestをデプロイします。