mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-18 04:51:36 +00:00
feat(cloud-workers): session placement, dispatch, and worker turn routing (#106332)
* feat(gateway-protocol): add session placement schema Closed state discriminator for session execution placement (local/requested/provisioning/syncing/starting/active/draining/reconciling/reclaimed/failed), sessions.dispatch params, and worker-admission transcript/live cursor extensions. Swift protocol models mirror the schema. * feat(state): add worker session placement table worker_session_placements rows carry placement state, transition generation, worker ownership metadata, ACK cursors, and the turn claim columns used for atomic admission. * feat(cloud-workers): add durable placement state machine store SQLite-backed placement store split by concern: state table (placement-state), discriminated record types + shape invariants (placement-record), row codec + CAS transition values (placement-row-codec), atomic turn-claim admission/release/waiters (placement-turn-claims), and lifecycle CAS transitions (placement-store). * feat(cloud-workers): sync workspaces and attach sessions to worker environments Environment service session attachment + turn credentials, tunnel workspace commands over a dedicated SSH runner, and git/plain workspace sync into $HOME/.openclaw-worker/workspaces with an immutable manifest. Symlink escapes are rejected locally before transfer (macOS openrsync stat-fails them opaquely) and again by the remote manifest guard. * feat(worker): run one-shot embedded turns from launch descriptors Worker runtime executes a single embedded turn from a stdin launch descriptor and reports completed/failed/fenced on stdout for the gateway launcher. Terminal lifecycle live events are deferred past the final transcript flush; transcript projection helpers are shared via transcript-message instead of duplicated in the runtime. * feat(cloud-workers): dispatch placements and route worker turns Dispatch service drives local->requested->provisioning->syncing->starting->active with failure teardown (placement-dispatch-failure) and restart/runtime recovery incl. lost-worker reclaim (placement-dispatch-recovery). Worker turn launcher claims the placement turn atomically, builds a windowed launch descriptor (worker-turn-payload), runs the remote one-shot worker, and reconciles the committed transcript; agent runners route turns through the session placement admission provider. * feat(gateway): expose session placement RPCs and startup reconciliation sessions.dispatch RPC with lifecycle admission barriers, operator-facing placement projection on session listings, placement-aware session reset guard, and startup/interval reconciliation wiring for worker placements.
This commit is contained in:
committed by
GitHub
parent
06b27b9e1d
commit
e98c7dfbcb
@@ -338,6 +338,7 @@ export const cliCommandCatalog: readonly CliCommandCatalogEntry[] = [
|
||||
bypassConfigGuard: true,
|
||||
hideBanner: true,
|
||||
loadPlugins: "never",
|
||||
ownsProtocolStdout: true,
|
||||
networkProxy: "bypass",
|
||||
},
|
||||
},
|
||||
|
||||
@@ -191,6 +191,7 @@ describe("command-path-policy", () => {
|
||||
bypassConfigGuard: true,
|
||||
loadPlugins: "never",
|
||||
hideBanner: true,
|
||||
ownsProtocolStdout: true,
|
||||
networkProxy: "bypass",
|
||||
});
|
||||
expectResolvedPolicy(["configure"], {
|
||||
|
||||
@@ -254,6 +254,7 @@ describe("command-startup-policy", () => {
|
||||
expect(shouldBypassConfigGuardForCommandPath(["worker"])).toBe(true);
|
||||
expect(policy.hideBanner).toBe(true);
|
||||
expect(policy.loadPlugins).toBe(false);
|
||||
expect(policy.suppressDoctorStdout).toBe(true);
|
||||
});
|
||||
|
||||
it("suppresses startup stdout for the bare acp protocol", () => {
|
||||
|
||||
Reference in New Issue
Block a user