1e9900bed3
- 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>
@uncaged/workflow-cas
Content-addressable storage implementation, bundle hashing, and Merkle helpers.
What This Package Does
It implements CasStore from @uncaged/workflow-protocol, hashes workflow bundle bytes and strings with XXH64, and builds serializable Merkle nodes for thread/step/content payloads used when persisting execution artifacts.
Key Exports
From src/index.ts:
- CAS:
createCasStore - Hash:
hashString,hashWorkflowBundleBytes - Merkle:
createContentMerkleNode,getContentMerklePayload,parseMerkleNode,putContentMerkleNode,putStepMerkleNode,putThreadMerkleNode,serializeMerkleNode - Types:
CasStore,MerkleNode,MerkleNodeType,StepMerklePayload,ThreadMerklePayload
Dependencies
- Workspace:
@uncaged/workflow-protocol(CasStorecontract),@uncaged/workflow-util - npm:
xxhashjs,yaml
Usage
import { createCasStore, hashWorkflowBundleBytes } from "@uncaged/workflow-cas";
import { getGlobalCasDir } from "@uncaged/workflow-util";
const store = createCasStore(getGlobalCasDir());
const hash = await hashWorkflowBundleBytes(esmJsBytes);