xiaoju
10113f6ec6
chore(cli): clean up step-ask nits from PR #156 review
...
CI / check (pull_request) Successful in 2m23s
- Remove dead-code detailRef null guards (already validated upstream)
- Fix ?: to explicit T | null on external error type boundary
- Drop unnecessary async from resolveAskWorkflow (no await)
- Simplify double negation: opts.fork !== false → opts.fork
Refs #146
2026-06-07 11:44:45 +00:00
xiaoju
b5e094ab4d
feat(cli): step ask — read-only query to historical step sessions
...
CI / check (pull_request) Successful in 2m46s
Adds `uwf step ask <step-hash> -p <prompt>` for asking follow-up
questions to a completed step's agent without mutating thread state.
- Fork-by-default: creates and caches a fork session per step (cache
key `<stepHash>:ask`); subsequent asks reuse it.
- `--no-fork` fallback: spawns a fresh session with the step's detail
ref injected as context.
- `--agent` overrides the recorded agent; otherwise resolves from the
step's agent field via config alias.
- Updates `packages/cli/README.md` and `packages/util/src/usage-reference.ts`
so the new subcommand is discoverable via README and `uwf prompt usage`.
Fixes #146
2026-06-07 10:33:41 +00:00
scottwei
4c5cc27d52
Merge pull request 'feat(cli): thread poke — re-run head step with supplementary prompt' ( #148 ) from fix/144-thread-poke into main
...
CI / check (push) Successful in 2m44s
Reviewed-on: #148
Reviewed-by: xiaomo <xiaomooo@shazhou.work >
2026-06-07 07:53:27 +00:00
xingyue
df244c52e8
Revert "Merge pull request 'chore: release — bump @ocas/* ^0.4.0, @shazhou/proman ^0.6.3' ( #150 ) from release/bump-ocas-proman into main"
...
CI / check (pull_request) Successful in 3m45s
This reverts commit 9d0c6df62c , reversing
changes made to 00d960daba .
2026-06-07 15:25:31 +08:00
xiaoju
e4c46c8150
feat(cli): add thread poke command
...
CI / check (pull_request) Successful in 3m43s
Re-runs the head step's agent with a supplementary prompt and replaces
the head step (rewires new step's prev to old head's prev) instead of
appending. Skips moderator re-route — the role of the head step is
reused.
Fixes #144
2026-06-07 07:19:26 +00:00
xingyue
0f5bb1f191
chore: release — bump @ocas/* ^0.4.0, @shazhou/proman ^0.6.3
...
CI / check (pull_request) Successful in 2m35s
Published:
- @united-workforce/protocol@0.1.1
- @united-workforce/util-agent@0.1.2
- @united-workforce/agent-builtin@0.1.3
- @united-workforce/agent-claude-code@0.1.4
- @united-workforce/agent-hermes@0.1.5
- @united-workforce/agent-mock@0.1.3
- @united-workforce/cli@0.3.1
- @united-workforce/eval@0.1.6
2026-06-07 15:06:43 +08:00
xingyue
3a26285872
chore: bump @ocas/* to ^0.4.0 and @shazhou/proman to ^0.6.3
CI / check (pull_request) Successful in 3m28s
2026-06-07 14:12:03 +08:00
xiaoju
513846f4ab
fix: update solve-issue test path from .workflows/ to examples/
...
CI / check (pull_request) Successful in 1m52s
Tests were referencing the old .workflows/ directory which no longer exists.
Updated workflow path and aligned assertions with current procedure content.
小橘 🍊 (NEKO Team)
2026-06-06 23:01:33 +00:00
xiaoju
d97840cf8d
chore: release cli@0.3.0 util@0.1.3 agent-hermes@0.1.3 agent-claude-code@0.1.2 agent-builtin@0.1.2 agent-mock@0.1.2
CI / check (push) Successful in 1m46s
2026-06-06 00:13:48 +00:00
xiaoju
f989dee85b
fix: bootstrap — remind to restart session after skill install/update
...
CI / check (pull_request) Successful in 1m42s
- Step 3 (fresh install): warn skills not active until new session
- Step 2 (upgrade): same reminder after regenerating skills
- Step 3 (upgrade): add v0.2.1 migration note for enum → const
Refs #123
2026-06-05 23:48:53 +00:00
xiaoju
68079cc003
fix: unify $status to const-only, drop enum support ( #123 )
...
CI / check (pull_request) Successful in 1m43s
- Validator: hasStatusConst/getConstStatuses replace enum checks
- enum in $status is now rejected with clear error message
- All docs/examples/tests migrated from enum to const/oneOf
- bootstrap hello.yaml updated
Fixes #123
2026-06-05 23:31:56 +00:00
xiaoju
adc3982a4a
fix: bootstrap agent discovery + adapter version independence ( #120 )
...
CI / check (pull_request) Successful in 1m42s
- Step 1: detect hermes/claude before choosing adapter
- Adapter versions independent from CLI — install @latest
- ACP verification: hermes acp --help
- Remove uwf-builtin (not ready)
Refs #120
2026-06-05 22:29:35 +00:00
xiaoju
caba82fe36
fix: bootstrap PATH fix guidance — find binary location + update shell config ( #118 #1 )
CI / check (pull_request) Successful in 1m44s
2026-06-05 16:45:33 +00:00
xiaoju
6aee2ed5ef
fix: bootstrap docs — pnpm/npm parity, adapter order, preset table ( #118 )
...
CI / check (pull_request) Successful in 2m27s
- Show pnpm and npm install commands side-by-side
- Clarify adapter must be installed before uwf setup --agent
- Add version verification steps with PATH troubleshooting
- --agent takes adapter command name (uwf-hermes), not npm package
- Preset providers shown as table with default base URLs
- Non-preset providers must specify --base-url manually
Fixes #118 (#2 , #3 , #4 , #5 )
2026-06-05 16:41:35 +00:00
xiaoju
7a788a9d90
fix: suppress ExperimentalWarning, PEP 668 guidance, setup help
...
CI / check (pull_request) Successful in 2m31s
- All 5 CLI bins: shebang --disable-warning=ExperimentalWarning
- Remove NODE_OPTIONS injection from thread.ts spawn (redundant now)
- Bootstrap pip install: venv (recommended) / pipx / source options
- setup --help mentions interactive wizard mode
- Update shebang test to accept -S flag
Fixes #116
2026-06-05 16:12:06 +00:00
xiaoju
fde87b6274
fix: setup UX improvements — adapter check, ENOENT, SQLite warning, VERSION, PATH docs
...
CI / check (pull_request) Successful in 2m24s
- setup validates adapter binary availability, prints install command if missing
- setup prints 'Config saved to <path> ✓' on success
- spawn ENOENT gives actionable error with which command
- SQLite ExperimentalWarning suppressed via NODE_OPTIONS
- bootstrap VERSION reads cli package.json (was reading util)
- bootstrap PATH guidance is shell-agnostic
Fixes #114
2026-06-05 15:42:22 +00:00
xiaoju
3be92bfac2
fix: bootstrap adds Step 0 environment pre-flight check
...
CI / check (pull_request) Successful in 3m44s
- Node.js, pnpm/npm, global bin PATH, hermes CLI checks with FIX instructions
- Agent must pass all checks before proceeding to install
- Install commands changed from npm to pnpm (with npm fallback)
- hermes PATH guidance moved from Step 1 to Step 0
Fixes #112
2026-06-05 14:09:33 +00:00
xiaoju
5450bc1230
fix: workflow-authoring flat schema, bootstrap PATH guidance
...
CI / check (pull_request) Successful in 2m18s
- #110.3: flat schema example uses enum: [done] instead of bare const
(bare const fails validate-semantic hasStatusEnum check)
- #110.4: bootstrap adds 'which hermes' PATH check and venv guidance
- #110.1: already fixed in rc.1 (inline hello.yaml)
- #110.2: already fixed in rc.1 (capabilities: [] present)
Fixes #110
2026-06-05 11:44:20 +00:00
xiaoju
57ae6d1755
fix: preset base-url auto-fill, bootstrap ACP docs, friendlier errors
...
CI / check (pull_request) Successful in 2m26s
- #106 : uwf setup --provider <preset> now auto-fills --base-url
- #107 : bootstrap documents hermes ACP dependency (pip install hermes-agent[acp])
- #107 : verify step uses inline hello.yaml instead of missing examples/eval-simple.yaml
- #108 : workflow name mismatch error suggests how to fix (rename file or change YAML name)
Fixes #106 , Fixes #107 , Fixes #108
2026-06-05 11:06:35 +00:00
xiaoju
c5eb8b79d1
fix: expand bootstrap prompt with full onboarding and upgrade guide
...
CI / check (pull_request) Successful in 2m56s
- Fresh install: CLI + adapter install, uwf setup, skills, e2e verify
- Upgrade: update packages, regenerate skills, migrate workflows
- Explicitly tells agent to ask user for provider/api-key/model
- Lists all available adapters with install commands
- Documents v0.2.0 $START migration
Fixes #104
2026-06-05 10:35:01 +00:00
xiaoju
36a3ca6a08
chore: bump cli@0.2.0, util@0.1.2
CI / check (push) Successful in 2m25s
2026-06-05 10:11:19 +00:00
xiaoju
fbfd31a042
feat: replace $START _ status with new/resume semantics
...
CI / check (pull_request) Successful in 2m27s
BREAKING: All workflow YAML files must update $START._ to $START.new + $START.resume.
The resume edge prompt replaces the previously hardcoded resume message.
- evaluate.ts: remove START_ROLE/START_STATUS special case, use $status like all nodes
- thread.ts: resolveEvaluateArgs passes 'new', cmdThreadResume passes 'resume'
- validate.ts: reject '_' everywhere (no longer valid)
- validate-semantic.ts: require 'new' and 'resume' edges on $START
- All workflow YAMLs and test fixtures updated
Fixes #101
2026-06-05 09:30:09 +00:00
xiaoju
a536efee00
fix: simplify prompt subcommands, framework-agnostic bootstrap
...
CI / check (pull_request) Successful in 3m24s
- `uwf prompt usage` now outputs only the usage skill (was three combined)
- `uwf prompt bootstrap` replaces `setup` with framework-agnostic instructions
- Remove `usage-reference` and `setup` subcommands
- Remove `generateBootstrapReference` from util (moved to cli)
Fixes #99
小橘 🍊 (NEKO Team)
2026-06-05 08:52:35 +00:00
xiaoju
427568a21d
chore: version bump agent-hermes@0.1.1 cli@0.1.1 eval@0.1.2
...
CI / check (push) Successful in 2m37s
小橘 🍊 (NEKO Team)
2026-06-05 06:29:25 +00:00
xiaoju
825f0c641a
fix: resolve --agent override via config alias before raw command
...
CI / check (pull_request) Successful in 3m37s
When --agent is passed to uwf thread exec, try config.agents[alias]
first (e.g. 'hermes' → config.agents.hermes = {command: 'uwf-hermes'}),
then fall back to parseAgentOverride for raw command names.
Also change eval CLI default --agent from 'hermes' to 'uwf-hermes'
so it works without config alias lookup.
Refs #91
2026-06-05 04:20:09 +00:00
xiaoju
c892b9125b
chore: remove prepublishOnly guards (proman handles release)
CI / check (push) Successful in 2m26s
2026-06-05 02:29:53 +00:00
xiaoju
63cb4d3645
fix: remove _ single-exit for user roles
...
CI / check (pull_request) Successful in 3m7s
$START keeps _ (special entry node). All user-defined roles now require
explicit $status enum in frontmatter + matching graph keys.
- moderator: remove UNIT_STATUS fallback, error on missing $status
- validate: reject _ graph keys for non-$START roles
- validate-semantic: remove checkSingleExitRole(), require $status enum
- update all test fixtures to use explicit status values
- fix examples/analyze-topic.yaml
Fixes #86
2026-06-05 02:00:45 +00:00
xiaoju
248ac710fd
feat: agent-mock emits fixed $usage stats
...
CI / check (pull_request) Successful in 1m41s
- Mock agent returns {turns:1, inputTokens:0, outputTokens:0, duration:0}
- E2E test 1 (linear workflow) asserts usage in CAS step nodes
- 747 tests pass
Fixes #75
Refs #68
2026-06-04 22:19:29 +00:00
xiaomo
172c232e61
Merge pull request 'feat: add $usage field to adapter protocol' ( #80 ) from feat/74-usage-in-protocol into main
...
CI / check (push) Successful in 1m41s
feat: add $usage field to adapter protocol (#80 )
2026-06-04 22:14:12 +00:00
xiaoju
99f40c2488
feat: add $usage field to adapter protocol
...
CI / check (pull_request) Successful in 2m28s
- Add Usage type to protocol (turns, inputTokens, outputTokens, duration)
- Add usage to StepRecord, StepNodePayload, StepEntry, STEP_NODE_SCHEMA
- Thread usage through util-agent extract pipeline (writeStepNode → persistStep → createAgent)
- All adapters return usage: null as placeholder (mock, hermes, claude-code, builtin)
- 746 tests pass, no breaking changes (usage not in schema required array)
Fixes #74
Refs #68
2026-06-04 15:41:07 +00:00
xingyue
83bcda60ff
refactor(prompt): rename subcommands and add frontmatter output
...
CI / check (pull_request) Successful in 3m1s
- Rename: user→usage-reference, author→workflow-authoring, adapter→adapter-developing
- Remove: developer (content lives in CLAUDE.md)
- All prompts output complete SKILL.md with YAML frontmatter
- Setup instructions simplified: uwf prompt bootstrap > SKILL.md
- Remove all bun references, use pnpm/npm
- Fix CLAUDE.md: fixed→independent versioning
- Delete old reference files (user/author/developer/adapter)
Closes #66
2026-06-04 22:46:11 +08:00
xiaoju
3401873051
chore: rebranding cleanup — reset versions to 0.1.0, bun→pnpm in docs
...
CI / check (pull_request) Successful in 2m49s
- All 9 packages reset to version 0.1.0
- CLAUDE.md: bun→pnpm, fixed→independent versioning, proman commands
- docs/architecture.md: bun→pnpm in toolchain table
- docs/sync-readme.md: bun→pnpm in conventions
2026-06-04 13:05:26 +00:00
xiaoju
18170a4313
refactor: extract validateCount, replace CLI spawn with direct import
...
CI / check (pull_request) Successful in 2m24s
- Extract validateCount() from cmdThreadExec (throw instead of process.exit)
- 5 validation tests now import validateCount directly (no subprocess)
- Only --help tests still spawn CLI (need Commander output)
- Test time: 1.7s → 475ms
Fixes #61
2026-06-04 12:31:17 +00:00
xiaoju
66c2e2a79b
fix: use node dist/cli.js instead of npx tsx in thread-step-count tests
...
CI / check (pull_request) Successful in 3m30s
npx tsx hangs in CI Docker (30s+ timeout). node dist/cli.js runs in <2s.
2026-06-04 11:57:32 +00:00
xiaoju
58b58d511e
fix: add timeout to cmdThreadExec count logic tests
CI / check (pull_request) Failing after 4m17s
2026-06-04 11:48:46 +00:00
xiaoju
596c05bfcc
fix: use node dist/cli.js instead of npx tsx in prompt help test
...
CI / check (pull_request) Failing after 3m40s
npx tsx fails in CI (tsx not found, npm tries to install it)
2026-06-04 11:32:09 +00:00
xiaoju
d26f54e8ea
fix: biome format + remove unused noConsole suppressions
CI / check (pull_request) Failing after 3m58s
2026-06-04 11:22:46 +00:00
xiaoju
883bd79bcb
fix: add timeout to CI-slow tests + check stderr for help output
CI / check (pull_request) Failing after 1m55s
2026-06-04 11:18:49 +00:00
xiaoju
63454a4cfd
fix: OCAS_DIR → OCAS_HOME in test helpers + exclude integration tests from CI
...
CI / check (pull_request) Failing after 2m27s
- Remaining OCAS_DIR references caused test isolation failures
- agent-hermes integration tests need 'hermes' CLI, skip in CI
Fixes #58
2026-06-04 11:06:42 +00:00
xiaoju
9f5891169e
fix: add missing workflow destructure in current-role test
...
CI / check (pull_request) Failing after 1m37s
The createMarker call used shorthand 'workflow' but the variable
was not destructured from cmdThreadStart.
Fixes #56
2026-06-04 10:56:44 +00:00
xiaomo
f56e24cf82
Merge pull request 'test: expand E2E coverage — suspend, count, mustache, completed resume' ( #51 ) from test/33-more-e2e into main
...
CI / check (push) Failing after 1m28s
test: expand E2E coverage — suspend, count, mustache, completed resume (#51 )
2026-06-04 09:04:09 +00:00
xiaoju
974c2b8f1b
test: add E2E tests for suspend/resume, --count, mustache, and completed resume ( #33 )
...
CI / check (pull_request) Failing after 1m40s
4 new E2E scenarios:
4. $SUSPEND → resume lifecycle (suspendedRole/suspendMessage metadata)
5. --count 3 runs entire pipeline in one invocation
6. mustache template variables rendered into edgePrompt
7. completed thread resume (衔尾蛇: end → start, CAS chain preserved)
Total: 7 E2E scenarios, all passing.
2026-06-04 09:03:01 +00:00
xingyue
dbb7885ffd
chore: fix biome check errors (40 → 0)
...
CI / check (pull_request) Failing after 1m39s
- Auto-fix: import sorting, formatting (17 files)
- Unsafe auto-fix: unused vars, template literals (7 files)
- Manual: nursery/noConsole → suspicious/noConsole suppression
- Manual: suppress noExcessiveCognitiveComplexity for cmdThreadResume and parseWorkflowPayload
- Manual: remove unused destructured vars in current-role tests
Closes #48
2026-06-04 16:45:45 +08:00
xiaomo
cd7e4e77ff
Merge pull request 'feat: agent-mock package for deterministic E2E testing ( #33 )' ( #44 ) from test/33-mock-agent into main
...
CI / check (push) Failing after 1m38s
feat: agent-mock package for deterministic E2E testing (#44 )
2026-06-04 08:38:51 +00:00
xiaoju
80e8efb05e
test: E2E integration tests with uwf-mock agent ( #33 )
...
CI / check (pull_request) Failing after 2m30s
Three scenarios testing the full CLI pipeline:
1. Linear workflow (planner → worker → $END): CAS chain integrity
2. Loop workflow (developer ↔ reviewer): moderator routing through cycles
3. Role mismatch detection: agent catches routing bugs
Uses workflow add → thread start → thread exec with uwf-mock,
verifying CAS state, thread lifecycle, and error handling.
Updated assertions to use getThread().status === 'completed'
(aligned with PR #45 unified thread storage).
Refs #33
2026-06-04 08:06:22 +00:00
xingyue
06af1dc668
fix: resolve workflow from CAS chain in collectCompletedThreads
...
CI / check (pull_request) Failing after 1m28s
Instead of hardcoding workflow as empty string for completed/cancelled
threads, use resolveWorkflowFromHead to get the actual workflow hash
from the CAS chain, consistent with active thread handling.
Closes #46
2026-06-04 15:35:08 +08:00
xiaomo
bbea89c067
Merge pull request 'refactor: unified thread storage + resume completed threads' ( #45 ) from refactor/39-unified-thread-storage into main
...
CI / check (push) Failing after 1m26s
refactor: unified thread storage + resume completed threads (#45 )
2026-06-04 07:25:56 +00:00
xingyue
bda3e3a861
feat(cli): resume completed threads (衔尾蛇: end → start)
...
CI / check (pull_request) Failing after 3m45s
uwf thread resume now supports completed threads:
- Evaluates workflow graph from $START to find first role
- Clears completed state (status → idle, completedAt → null)
- Builds resume prompt with supplement context
- Full CAS chain preserved for rich context
Suspended resume behavior unchanged.
Cancelled/idle threads still rejected.
425 tests pass.
Part of #39 , closes #43
2026-06-04 15:13:47 +08:00
xingyue
ca7b68ca5f
refactor(cli): unify thread storage, remove history prefix
...
- store.ts: all threads in @uwf/thread/* with status tag
- Remove HISTORY_VAR_PREFIX, ThreadHistoryLine, deleteThread
- Add loadActiveThreads, loadHistoryThreads, completeThread
- Add migrateHistoryVarsToThreadVars migration
- thread.ts: replace deleteThread+addHistoryEntry with completeThread
- shared.ts: remove findHistoryEntry fallback
- Update all tests for unified storage model
422 tests pass.
Part of #39 , closes #41 , closes #42
2026-06-04 15:01:20 +08:00
xiaoju
6b7636b088
refactor: unify env vars (UWF_HOME, OCAS_HOME) + env only in CLI ( #37 )
...
CI / check (pull_request) Failing after 3m6s
Breaking changes:
- UWF_STORAGE_ROOT → UWF_HOME
- WORKFLOW_STORAGE_ROOT removed (no fallback)
- OCAS_DIR → OCAS_HOME (aligned with ocas CLI)
Library functions no longer read process.env:
- util-agent/storage.ts: resolveStorageRoot(override), getGlobalCasDir(override)
- agent-hermes: isResumeDisabled(flag) pure function, CLI reads env
- agent-claude-code: CLI reads CLAUDE_MODEL and passes to agent
Fixes #37
2026-06-04 05:12:05 +00:00