064696c558
- Rewrite docs/architecture.md with 15-package map, dependency graph, updated engine paths - Update CLAUDE.md monorepo structure section - Add READMEs for: workflow-protocol, workflow-runtime, workflow-util, workflow-cas, workflow-register, workflow-execute, workflow-reactor - Fix agent READMEs: update deps from @uncaged/workflow to actual packages - Mark workflow-as-agent plan as outdated Fixes #153 小橘 <xiaoju@shazhou.work>
2.0 KiB
2.0 KiB
@uncaged/workflow-register
Bundle validation, dynamic export extraction, registry YAML, and model/provider resolution.
What This Package Does
It validates workflow .esm.js bundles, extracts descriptor / run exports at runtime, reads and writes workflow.yaml, and resolves which LLM endpoint/model to use from registry config (resolveModel, splitProviderModelRef).
Key Exports
From src/index.ts:
- Bundle:
buildDescriptor,importWorkflowBundleModule,validateWorkflowBundle,ensureUncagedWorkflowSymlink,extractBundleExports,stringifyWorkflowDescriptor,validateWorkflowDescriptor - Bundle types:
ExtractBundleExportsOptions,ExtractedBundleExports,WorkflowBundleValidationInput,WorkflowDescriptor,WorkflowRoleDescriptor,WorkflowRoleSchema - Registry:
getRegisteredWorkflow,listRegisteredWorkflowNames,parseWorkflowRegistryYaml,readWorkflowRegistry,registerWorkflowVersion,rollbackWorkflowToHistoryHash,stringifyWorkflowRegistryYaml,unregisterWorkflow,workflowRegistryPath,writeWorkflowRegistry - Registry types:
WorkflowConfig,WorkflowHistoryEntry,WorkflowRegistryEntry,WorkflowRegistryFile - Config:
resolveModel,splitProviderModelRef, typesProviderConfig,ResolvedModel
Dependencies
- Workspace:
@uncaged/workflow-protocol,@uncaged/workflow-util - Peer:
acorn,yaml,zod^4 — parsing/validation at runtime for consumers
Usage
import { readFile } from "node:fs/promises";
import { readWorkflowRegistry, validateWorkflowBundle } from "@uncaged/workflow-register";
import { getDefaultWorkflowStorageRoot } from "@uncaged/workflow-util";
const reg = await readWorkflowRegistry(getDefaultWorkflowStorageRoot());
if (!reg.ok) throw new Error(reg.error.message);
const path = "./my.esm.js";
const source = await readFile(path, "utf8");
const v = validateWorkflowBundle({ filePath: path, source });
if (!v.ok) throw new Error(v.error);