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
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
xingyue
7ec86d82a3
fix(dashboard): sidePath supports both feedback and skip-forward edges
2026-05-15 14:11:58 +08:00
xingyue
f728b36e8d
fix(dashboard): route skip-forward edges to side (planner→end was hidden)
2026-05-15 14:10:25 +08:00
xingyue
3431d3070b
refactor(dashboard): reachability-based partial order for graph layout
...
Replace linear spine walk with a proper partial order:
- a « b = a ~> b AND NOT b ~> a (strict precedence)
- a ~ b = incomparable under «
- depth tiebreaker for incomparable nodes
- Equivalent nodes (same layer) placed side-by-side horizontally
2026-05-15 14:05:53 +08:00
xingyue
576df067d4
chore: remove generated bundle from git, fix biome format
2026-05-15 09:42:33 +08:00
xingyue
a46a225d04
fix(dashboard): render system prompt as markdown
2026-05-15 09:41:52 +08:00
xiaoju
f74b482cc0
chore: version 0.5.0-alpha.3, add publish-all script
...
- scripts/publish-all.mjs: pins workspace:^ before npm publish, restores after
- Workaround for bun publish workspace:^ resolution bug in pre mode
小橘 🍊
2026-05-15 01:37:27 +00:00
xiaomo
89abfdc257
Merge pull request 'feat(dashboard): show system prompt per role' ( #269 ) from feat/show-system-prompt into main
2026-05-15 01:28:12 +00:00
xiaoju
77e395b913
chore: version 0.5.0-alpha.1
...
小橘 🍊
2026-05-15 01:27:54 +00:00
xingyue
b65a006d45
feat(dashboard): show system prompt per role in workflow detail
...
- Add systemPrompt to WorkflowRoleDescriptor (protocol)
- Propagate systemPrompt through buildDescriptor and validateWorkflowDescriptor
- Display system prompt as collapsible <details> in RoleCard
2026-05-15 09:27:03 +08:00
xiaomo
5994548f0b
Merge pull request 'chore: add .env.example with all supported env vars' ( #207 ) from chore/205-env-example into main
2026-05-15 01:25:10 +00:00
xiaoju
0871ae54ea
fix: remove unused WORKFLOW_LLM_API_KEY per review
...
No consumers after #262 removed llmProvider from bundle entries.
WORKFLOW_CURSOR_WORKSPACE has no env var counterpart, not added.
小橘 🍊
2026-05-15 01:24:29 +00:00
xiaoju
9576d69032
chore: enter changeset pre mode (alpha), version 0.5.0-alpha.0
...
小橘 🍊
2026-05-15 01:22:44 +00:00
xiaoju
64dadf114d
fix: align .env.example with actual env vars
...
- Remove non-existent: WORKFLOW_LLM_BASE_URL, WORKFLOW_LLM_MODEL, WORKFLOW_CURSOR_LLM_PROVIDER
- Add missing: WORKFLOW_CURSOR_COMMAND (required for develop workflow)
小橘 🍊
2026-05-15 01:20:38 +00:00
xiaomo
baaa1d1dc8
Merge pull request 'chore: biome format fix + pre-push hook' ( #268 ) from chore/biome-fix-and-pre-push-hook into main
2026-05-15 01:20:38 +00:00
xiaoju
3074cd5f0c
chore: add .env.example with all supported env vars
...
Documents all environment variables used across the workflow engine:
- LLM config (base URL, API key, model)
- Cursor agent config (model, timeout, provider)
- Hermes agent config (model, timeout)
- Storage and display options
Fixes #205
2026-05-15 01:20:38 +00:00
xingyue
15edc99c72
chore: add pre-push hook (check + test) and fix lint-log-tags for macOS
2026-05-15 09:11:39 +08:00
xingyue
153178c545
fix: biome format issues (12 errors)
2026-05-15 09:10:39 +08:00
xiaomo
fac215bd21
Merge pull request 'chore(dashboard): remove unused _parentRequired param' ( #267 ) from chore/remove-parentRequired-param into main
2026-05-15 00:30:51 +00:00
xingyue
9822e68c55
chore(dashboard): remove unused _parentRequired param from flattenSchema
2026-05-15 08:25:39 +08:00