xiaoju
0d5678c961
feat: add thread start/show/list/kill commands
...
- thread start: ULID generation, StartNode to CAS, threads.yaml
- thread show: active (done:false) or archived (done:true)
- thread list: active threads, --all includes history
- thread kill: archive to history.jsonl
Refs #309 , #313
2026-05-18 09:09:10 +00:00
xiaoju
a8e2aa85f8
feat: add @uncaged/cli-uwf with workflow put/show/list commands
...
Refs #309 , #312
2026-05-18 09:03:55 +00:00
xiaoju
2a4d35399b
feat: add @uncaged/uwf-moderator with JSONata evaluation engine
...
5 tests passing: transition, condition match, fallback,
missing role error, output expansion.
Refs #309 , #311
2026-05-18 08:58:21 +00:00
xiaoju
391915411e
feat: add @uncaged/uwf-protocol with all shared types
...
Refs #309 , #310
2026-05-18 08:53:37 +00:00
scottwei
4aaf49bfc6
Merge pull request 'jshang/optimize-dashboard-ui' ( #308 ) from jshang/optimize-dashboard-ui into main
...
Reviewed-on: uncaged/workflow#308
2026-05-18 08:45:46 +00:00
xiaoju
08de1ae5eb
docs: fresh uwf-* packages, depend on @uncaged/json-cas, no reuse
2026-05-18 08:44:04 +00:00
xiaoju
c91a3d1ec6
docs: add description to condition definitions
2026-05-18 08:41:29 +00:00
xiaoju
13d932f69c
docs: config with provider/model/agent registries and alias-based overrides
2026-05-18 08:38:08 +00:00
jiashuang
f705d9b8ea
refactor: optimize ui for dashboard
2026-05-18 16:20:05 +08:00
xiaoju
f84d327410
docs: add .env for API keys, separate from config.yaml
2026-05-18 08:19:48 +00:00
xiaoju
9c2f93629b
docs: add models config (default + extract LLM)
2026-05-18 08:16:03 +00:00
xiaoju
bcefcb9af7
docs: add section 4 — key data types with shared StepRecord
2026-05-18 08:13:18 +00:00
xiaoju
b14dce2bc6
docs: fix inconsistencies — title, terminology, threads.yaml, JSONata context
2026-05-18 08:09:40 +00:00
xiaoju
85c572e770
docs: inline roles/moderator into Workflow, output as cas_ref, detail polymorphic
2026-05-18 08:07:20 +00:00
xiaoju
9a89885ce6
docs: rewrite CAS structure — flatten refs, named conditions, config.yaml, output naming
2026-05-18 07:55:04 +00:00
xiaoju
d095ceaafa
docs: agent CLI takes thread-id + role, outputs CAS hash, step owns pointer
2026-05-18 07:24:14 +00:00
xiaoju
2a0346f48b
docs: simplify show to pure thread-id → head query, all output JSON
2026-05-18 07:18:29 +00:00
xiaoju
b4e25ea002
docs: add done field to step output
2026-05-18 07:12:38 +00:00
xiaoju
77f2060e6b
docs: step on ended thread is an error, not null head
2026-05-18 07:11:50 +00:00
xiaoju
8f9a925179
docs: simplify step output to workflow/thread/head
2026-05-18 07:10:11 +00:00
jiashuang
2f3fff3536
refactor: introduce react-router
2026-05-18 15:06:16 +08:00
xiaoju
a7eb9814ae
docs: fix agent invocation format in thread step
2026-05-18 07:05:35 +00:00
xiaoju
a8024e6d42
docs: use full 26-char Crockford Base32 ULIDs for thread IDs
2026-05-18 07:03:40 +00:00
xiaoju
6d94d9c85a
docs: fix hash format to 13-char Crockford Base32 (XXH64)
2026-05-18 07:03:02 +00:00
xiaoju
49a4d08c04
docs: add thread list --all and thread kill
2026-05-18 06:59:47 +00:00
xiaoju
d5773369af
docs: uwf thread subcommands, simplify start output
2026-05-18 06:58:35 +00:00
xiaoju
f49e014f41
docs: update CLI design — uwf naming, simplify commands and agent protocol
2026-05-18 06:56:55 +00:00
xiaoju
ab48a8169d
docs: add stateless workflow CLI design
...
Refs #297
2026-05-18 06:37:25 +00:00
xiaomo
2b707fb44e
Merge pull request 'refactor: replace extractRefs with schema casRef annotations (Phase 2)' ( #290 ) from feat/285-phase2-remove-extractrefs into main
2026-05-16 11:50:47 +00:00
xiaoju
6306b23a9f
refactor: replace extractRefs with schema casRef annotations
...
Migrate all templates to use .meta({ casRef: true }) on Zod schema
fields instead of manual extractRefs functions. Remove extractRefs
from RoleDefinition type entirely.
- develop: planner phases[].hash, coder completedPhase annotated
- solve-issue, smoke, init templates: extractRefs removed
- create-workflow.ts: uses collectCasRefs(schema, meta)
- RoleDefinition: extractRefs field removed (breaking)
218 tests pass, 0 fail.
Fixes #289 , Refs #285
2026-05-16 10:48:45 +00:00
xiaomo
6bb8cf8315
Merge pull request 'feat: add collectCasRefs — schema-level CAS ref annotation (Phase 1)' ( #288 ) from feat/285-cas-ref-annotation into main
2026-05-16 10:43:16 +00:00
xiaoju
93b7947d7c
feat: add collectCasRefs — extract CAS refs from schema meta annotations
...
Replaces manual extractRefs functions with declarative schema-level
casRef annotations. Walks Zod v4 schemas recursively, collecting
string values from fields marked with .meta({ casRef: true }).
Supports: objects, arrays, discriminatedUnion, nullable/optional.
8/8 test cases pass (flat, nested, union, null, mixed).
Refs #285 , addresses #286
2026-05-16 10:42:24 +00:00
xingyue
9584a86fb7
Merge pull request 'chore: fix biome cognitive complexity warnings' ( #287 ) from chore/fix-biome-complexity-warnings into main
2026-05-16 10:40:27 +00:00
Scott Wei
defc0afc27
chore: fix biome cognitive complexity warnings
...
Refactor dashboard graph/schema helpers and descriptor role validation
into smaller functions so bun run check passes without warnings.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 18:33:00 +08:00
xiaomo
9f6633d5bf
Merge pull request 'refactor(workflow-protocol): require AgentFn Opt generic' ( #284 ) from refactor/agent-fn-required-opt into main
2026-05-16 10:27:07 +00:00
Scott Wei
7dadf874e1
refactor(workflow-protocol): require AgentFn Opt generic
...
Make AgentFn<Opt> always take a mandatory options argument, removing
the void conditional overload. Simplify createAgentAdapter, restore
exports needed by tests, and fix CLI test bundles to use cas.put
instead of disallowed @uncaged/* imports.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-16 18:23:07 +08:00
xiaomo
ba90214af6
Merge pull request 'chore: internalize unused exports across all packages' ( #283 ) from chore/audit-exports-cleanup into main
2026-05-16 09:59:57 +00:00
xiaoju
5bbac3e4f7
chore: internalize unused exports across all packages
...
Audit public API surfaces using reachability analysis from application
entry points (Worker, CLI, Dashboard). Symbols not reachable from any
application's customization tree are removed from package index.ts files.
Source files and internal usage are untouched — only the public export
surface is narrowed.
Changes by package:
- workflow-util: -7 exports (base32 internals, logger config types)
- workflow-cas: -12 exports (merkle internals, serialization details)
- workflow-execute: -24 exports (engine internals, LLM extract details)
- workflow-reactor: -4 exports (reactor config/invocation internals)
- workflow-register: -8 exports (redundant protocol re-exports, internal YAML fns)
- workflow-runtime: curated re-export subset (stop full protocol re-export)
- workflow-util-agent: -5 exports (internal agent helpers)
- workflow-agent-cursor: -1 export (validateCursorAgentConfig)
- workflow-agent-hermes: -1 export (validateHermesAgentConfig)
Note: workflow-protocol index.ts unchanged — downstream packages still
import removed symbols via internal paths. Protocol cleanup requires
updating workflow-runtime/src/types.ts first (separate PR).
Refs #273 , #274 , #275 , #276 , #277 , #278 , #279 , #280 , #281 , #282
2026-05-16 09:58:56 +00:00
xiaomo
131021b1a7
Merge pull request 'chore: remove symlink dead code' ( #271 ) from chore/remove-symlink-dead-code into main
2026-05-16 06:22:34 +00:00
xiaoju
e42555fd9c
chore: remove symlink dead code
...
Now that bundles are fully self-contained (no external @uncaged/* imports),
the symlink mechanism is no longer needed.
- Delete ensure-uncaged-workflow-symlink.ts
- Remove ensureUncagedWorkflowSymlink from all imports/exports
- Remove ExtractBundleExportsOptions type (storageRoot param)
- Simplify extractBundleExports to single-arg signature
- Clean up stale comments
2026-05-16 06:21:34 +00:00
xiaomo
3a26eb28e5
Merge pull request 'chore: make bundle fully self-contained, no external imports' ( #270 ) from chore/no-external-bundle into main
2026-05-16 06:16:28 +00:00
xiaoju
c1a17b707c
chore: make bundle fully self-contained, no external imports
...
- Remove uncagedWorkflowExternals() from scaffold build script
- Remove --external from Bun.build config
- Tighten bundle validator: only Node built-ins allowed, all deps must be inlined
- Update skill.ts documentation
Bundles are now deterministic — same Node/Bun version = same behavior,
no dependency resolution at runtime.
2026-05-16 05:12:49 +00:00
xiaoju
4ea1e0d8a4
chore: publish 0.5.0-alpha.4 — unified env() API
2026-05-15 10:19:38 +00:00
xiaoju
b1a9d2ec3f
refactor: replace requireEnv/optionalEnv with env(name, fallback)
...
Bundles must run without env vars — env vars are overrides, not requirements.
Single function: env(name, fallback) always returns string with a default.
- Removed requireEnv and optionalEnv
- Updated bundle entries, tests, and skill docs
小橘 🍊
2026-05-15 10:07:49 +00:00
xiaoju
2b8707a706
style: use optionalEnv fallback param instead of ?? operator
...
小橘 🍊
2026-05-15 09:52:07 +00:00
xiaoju
241bfbf6d9
fix: hardcode absolute paths for agent CLI defaults in bundle entry
...
Validator requires absolute paths — bare command names like 'cursor-agent'
fail validation. Use `which` to discover the path, write it directly.
小橘 🍊
2026-05-15 09:49:42 +00:00
xiaoju
40530d757e
fix: use optionalEnv with defaults for agent CLI paths in bundle entry
...
requireEnv causes silent worker crash when env vars are missing —
thread shows 0 steps with no error. Use optionalEnv + sensible defaults.
Also added pitfall guidance in skill author docs.
小橘 🍊
2026-05-15 09:25:39 +00:00
xiaoju
0f3661b566
refactor: unify GATEWAY_SECRET + DASHBOARD_API_KEY into WORKFLOW_DASHBOARD_SECRET
2026-05-15 09:12:12 +00:00
xingyue
9c44c709e9
fix(dashboard): replace broken partial-order layering with longest-path
...
The previous computeLayers used a reachability-based relation (a « b)
with depth tiebreaker to define a < b, then grouped nodes by == into
equivalence classes. However == is NOT an equivalence relation (fails
transitivity), making the grouping order-dependent and incorrect for
graphs with parallel branches.
Replace with standard Sugiyama longest-path layering:
1. DFS to detect and remove back-edges (break cycles)
2. Kahn's topological sort on the resulting DAG
3. rank(n) = max(rank(pred) + 1) for longest-path assignment
4. Group nodes by rank into layers
Also removes the experimental dagre layout strategy that was added
for comparison — longest-path produces better results for our
workflow graphs.
2026-05-15 14:48:02 +08:00
xingyue
8892ab9978
fix(dashboard): add left/right handles to end node for skip-forward edges
2026-05-15 14:15:35 +08:00