Files
united-workforce/packages/workflow-register/README.md
T
xiaoju 064696c558 docs: update architecture docs and package READMEs for post-split structure
- 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>
2026-05-09 04:39:57 +00:00

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, types ProviderConfig, 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);