Files
united-workforce/packages/workflow-execute
xiaoju 1e9900bed3 feat(#194): Phase 2 — Engine layer Merkle call stack wiring
- Protocol: AgentFnResult = string | { output, childThread }, RoleOutput.childThread,
  ThreadContext.bundleHash for parent state lookup
- Runtime: create-workflow normalizes AgentFnResult, propagates childThread in RoleOutput
- Engine: ExecuteThreadOptions.parentStateHash, appendStateForStep writes childThread,
  putStartNode uses parentStateHash
- workflowAsAgent: reads parent head state from threads.json, passes parentStateHash
  to child, returns { output, childThread: rootHash }
- Integration test: 4 cases verifying bidirectional Merkle links (306 lines)

Phase 2 of #194 (Merkle Call Stack). Closes #196.

小橘 <xiaoju@shazhou.work>
2026-05-12 02:10:06 +00:00
..

@uncaged/workflow-execute

Thread engine: execution, fork/GC, extract pipeline, supervisor/worker wiring, and workflow-as-agent.

What This Package Does

It runs WorkflowFn generators against disk-backed threads, integrates CAS and registry-backed extract (createExtract), coordinates LLM tool usage via @uncaged/workflow-reactor, handles fork plans and garbage collection, and exposes workflowAsAgent for nesting workflows.

Key Exports

From src/index.ts:

  • Engine: createWorkflow (engine-local re-export), executeThread, getWorkerHostScriptPath
  • Fork / parse: buildForkPlan, parseThreadDataJsonl, selectForkHistoricalSteps, tryParseRoleStepRecord, tryParseWorkflowResultRecord
  • GC / pause: garbageCollectCas, createThreadPauseGate
  • Engine types: ExecuteThreadIo, ExecuteThreadOptions, ForkHistoricalStep, ForkPlan, GcResult, ParsedThreadStartRecord, PrefilledDiskStep, SupervisorDecision, ThreadPauseGate
  • Extract: buildExtractUserContent, createExtract, extractFunctionToolFromZodSchema, llmErrorToCause, llmExtract, types ExtractFn, ExtractThreadContext, LlmError, LlmExtractArgs
  • Agent composition: workflowAsAgent, WorkflowAsAgentOptions

Dependencies

  • Workspace: @uncaged/workflow-protocol, @uncaged/workflow-runtime, @uncaged/workflow-util, @uncaged/workflow-cas, @uncaged/workflow-reactor, @uncaged/workflow-register
  • npm: yaml
  • Peer: zod ^4

@uncaged/workflow-reactor is used for LLM-backed extract and supervisor flows (extract-fn.ts, supervisor.ts).

Usage

import { executeThread } from "@uncaged/workflow-execute";
// Typical callers are CLI/tests that supply ExecuteThreadIo (paths, CAS, abort, logger, …).