Skip to content

feat(orchestration): executor exposure + Node parallel/resumable (Workflow Phase 5a)#55

Merged
ZhiXiao-Lin merged 1 commit into
mainfrom
feat/orchestration-sdk-node-parallel
May 29, 2026
Merged

feat(orchestration): executor exposure + Node parallel/resumable (Workflow Phase 5a)#55
ZhiXiao-Lin merged 1 commit into
mainfrom
feat/orchestration-sdk-node-parallel

Conversation

@ZhiXiao-Lin
Copy link
Copy Markdown
Contributor

First slice of Phase 5 (SDK ergonomics). The SDK linchpin + the first grammar exposed to Node.

What

  • core: AgentSession::agent_executor() → an AgentExecutor backed by the session (its registry, LLM client, workspace, MCP tools, subagent tracker, parallelism cap). This is what the orchestration combinators run against; a host can substitute its own for cross-node placement. AgentSession::session_store() exposes the store for the resumable combinator.
  • sdk/node: AgentStepSpecObject / StepOutcomeObject (#[napi(object)], Option<Value> for output_schema/structured) + From conversions; Session.parallel(specs) and Session.parallelResumable(specs, workflowId) async methods. parallelResumable rejects when no sessionStore is configured.

Scope

This is the spec-list grammar (data in/out — no cross-FFI closures). Callback-based pipeline stages and the Python SDK land in follow-up sub-PRs (per the agreed "full grammar, both SDKs" plan, built incrementally). The callback pipeline is the part that must carefully honor #32's no-throw/no-panic FFI constraints, so it gets its own focused PR.

Verification

  • Conversion unit test (object ↔ Rust field round-trip) green.
  • Node SDK cargo fmt --check + cargo clippy --lib -D warnings clean; core + combinators unchanged (their suites already green on main).

… 5a)

The SDK linchpin + the first SDK grammar.

core: AgentSession::agent_executor() returns an AgentExecutor backed by the
session (its registry, LLM client, workspace, MCP tools, subagent tracker,
parallelism cap) — what the orchestration combinators run against; a host can
substitute its own for cross-node placement. AgentSession::session_store()
exposes the configured store for the resumable combinator.

sdk/node: AgentStepSpecObject / StepOutcomeObject (#[napi(object)], with
Option<Value> for output_schema/structured) + From conversions, and
Session.parallel(specs) / Session.parallelResumable(specs, workflowId) async
methods over the executor. parallelResumable rejects when no sessionStore is
configured.

Pipeline (callback stages across FFI) and the Python SDK land in follow-up
sub-PRs. Conversion unit test green; Node SDK fmt + clippy clean; core +
combinators unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants