33 Commits

Author SHA1 Message Date
76760c4d29 fix: reviewer — remove 'missing files from planner' check, planner designs roles not files 2026-04-28 14:16:23 +00:00
18e201b49c fix: reviewer prompt — reject or approve, no middle ground 2026-04-28 14:13:33 +00:00
daf07b5746 feat: add reviewer role to all three workflows
- workflow-generator, sense-generator, gitea-issue-solver all now have:
  planner → coder → reviewer → tester → committer → END
- Reviewer uses createHermesRole with git diff/status for static analysis
- Checks: garbage files, secrets, debug code, unrelated changes
- Planner prompt now requires Role Behavior sections for every role
- Coder prompt now emphasizes reading initial user prompt for specifics
2026-04-28 13:56:37 +00:00
e8765abac6 fix: pass nerveRoot to tester prompts for correct path resolution
Hermes agent cwd is not necessarily the nerve workspace root.
Inject nerveRoot into tester prompts so all file paths and commands
use absolute paths to the workspace directory.
2026-04-28 13:03:31 +00:00
495d8d1b60 chore(workflow): auto-generated commit 2026-04-28 12:55:08 +00:00
0fab8a68c3 chore: declare pnpm workspace, remove per-package lockfiles and pnpm config
- Add pnpm-workspace.yaml (senses/*, workflows/*)
- Add root build script: pnpm -r build
- Remove pnpm.onlyBuiltDependencies from sense package.json
- Remove pnpm.overrides from workflow package.json
- Remove per-package pnpm-lock.yaml and node_modules
2026-04-28 11:11:41 +00:00
7fb161cf96 fix: tester prompts — build before list, remove non-existent dry-run command
- Both workflow/sense tester: build first, then validate, then list
- workflow-generator: remove nerve workflow dry-run (doesn't exist)
- sense-generator: add build step before sense list/trigger
2026-04-28 11:04:31 +00:00
6778ba5246 refactor: clarify coder done semantics + allow multi-step iterations
- done=true means all files created, build+lint pass
- done=false means progress made, continue next iteration
- Updated both sense-generator and workflow-generator coder prompts
2026-04-28 11:02:25 +00:00
4cf10ad7bf feat: migrate senses to TypeScript source + esbuild bundle
- Move index.js → src/index.ts with proper types for all 4 senses
- Move schema.ts → src/schema.ts
- Add package.json with esbuild build script per sense
- Bundle to index.js at sense root (daemon loads this)
- Update sense-generator coder prompt with TypeScript conventions

Fixes #224
2026-04-28 07:26:53 +00:00
1940ccedd6 refactor: bundle sense-generator to dist/ via esbuild
- Add esbuild build script to package.json
- Add .gitignore for dist/
- Remove stale tsc-generated .js files (now bundled)
- Include sense files generated by workflow run (hermes-gateway-health update, worker-process-metrics)
- Clean up nerve.yaml (remove deleted workflows, migrate reflexes to interval)
2026-04-28 05:31:04 +00:00
2c77f7ffc2 refactor: simplify index.ts — env vars only, drop cfg/spawnSafe 2026-04-28 04:56:52 +00:00
f1720eea5e refactor: infer Meta types from zod schema instead of hand-writing 2026-04-28 04:52:21 +00:00
645f0bacf2 refactor: remove redundant context from prompts, delegate to nerve-dev skill
- Remove nerveYaml injection from planner (skill has it)
- Remove sensesDir/nerveRoot from coder and tester (skill has conventions)
- Prompts now just say 'read the skill' instead of inlining knowledge
- BuildSenseGeneratorDeps reduced to { provider, cwd }
- index.ts drops getNerveYaml(), SENSES_DIR, readFileSync
2026-04-28 04:50:21 +00:00
e460d64786 refactor: inline types.ts into role index.ts, remove separate type files 2026-04-28 04:46:21 +00:00
fc2ca13dc3 refactor: remove buildSenseExamples, use @uncaged/nerve-skills for agent discovery
- Delete buildSenseExamples() (~25 lines of runtime file reading)
- Remove senseExamples from BuildSenseGeneratorDeps and BuildPlannerDeps
- Planner prompt now directs agent to read nerve-dev skill via npm package
- Clean up unused existsSync import

Closes xiaoju/nerve-workspace#2
2026-04-28 04:38:33 +00:00
69eb4ffe49 refactor: use destructuring to simplify build functions 2026-04-28 04:04:49 +00:00
cb61e98979 refactor(sense-generator): full DIP — all deps injected via build functions
Every role is self-contained (types.ts, prompt.ts, index.ts).
No shared.ts, no cross-role imports. All dependencies injected:

  index.ts          — wiring (resolve env, call buildSenseGenerator)
  build.ts          — buildSenseGenerator(deps) → WorkflowDefinition
  moderator.ts      — pure routing, composes meta from role types
  roles/planner/    — buildPlannerRole(deps), self-contained
  roles/coder/      — buildCoderRole(deps), self-contained
  roles/tester/     — buildTesterRole(deps), self-contained

Workflow is now reusable: buildSenseGenerator() can be called with
any provider/paths, not hardcoded to this machine.

小橘 🍊(NEKO Team)
2026-04-28 04:00:38 +00:00
6d3313223f refactor(sense-generator): inject provider from index.ts, roles are now sync
Provider resolved once at top level, injected into each build*Role().
Role builders no longer async — they're pure factory calls.

小橘 🍊(NEKO Team)
2026-04-28 03:56:02 +00:00
21237e19a0 refactor(sense-generator): extract moderator to its own file
小橘 🍊(NEKO Team)
2026-04-28 03:53:49 +00:00
6a2d6b0627 fix(sense-generator): derive attempt count from steps, not llmExtract
attempt is a deterministic fact (count of tester steps), not something
an LLM should guess. Removed from tester meta schema, moderator counts
it directly from context.steps.

小橘 🍊(NEKO Team)
2026-04-28 03:51:42 +00:00
7c4883ddec refactor(sense-generator): tester → createHermesRole for e2e verification
Replaced 122-line hand-written smoke test with createHermesRole.
Hermes runs the full lifecycle check autonomously via terminal:
files → nerve.yaml → sense list → trigger → query → logs on failure.

All 3 roles now use factories:
  planner: createCursorRole (ask mode)
  coder:   createCursorRole (default mode)
  tester:  createHermesRole (e2e verification)

小橘 🍊(NEKO Team)
2026-04-28 03:48:26 +00:00
bc4ac8a5cc refactor(sense-generator): prompt.ts instead of prompt.md + mustache
Static imports, no runtime file reads, bundler friendly.
Removed mustache dependency.

小橘 🍊(NEKO Team)
2026-04-28 03:38:26 +00:00
a811660a33 refactor(sense-generator): extract prompts to prompt.md templates
Each role's prompt is now a separate markdown file with {{mustache}} placeholders,
loaded at module init and interpolated at runtime.

小橘 🍊(NEKO Team)
2026-04-28 03:32:51 +00:00
516a28533a refactor(sense-generator): extract meta schemas to types.ts
小橘 🍊(NEKO Team)
2026-04-28 02:38:07 +00:00
fd3a8c64f2 refactor(sense-generator): remove unnecessary buildWorkflow wrapper
小橘 🍊(NEKO Team)
2026-04-28 02:32:55 +00:00
2d63639ed1 refactor(sense-generator): split roles into separate directories
Following nerve-dev best practice: each role gets its own directory.

Structure:
  index.ts                    — 31 lines (WorkflowDefinition + moderator)
  roles/planner/index.ts      — 48 lines (createCursorRole)
  roles/coder/index.ts        — 33 lines (createCursorRole)
  roles/tester/index.ts       — 122 lines (hand-written smoke test)
  roles/shared.ts             — 63 lines (providers, helpers)
  roles/types.ts              — 5 lines (SenseMeta)

Was: single 416-line index.ts

Refs uncaged/nerve#210
小橘 🍊(NEKO Team)
2026-04-28 02:30:12 +00:00
e05c71d6b0 refactor(sense-generator): use createCursorRole factory, slim meta to routing-only
- planner/coder: replaced 80+ lines hand-written agent calls with createCursorRole()
- SenseMeta slimmed to routing signals only (senseName, filesCreated, passed/attempt)
- Roles read context from thread via nerve thread <id>, not from previous role's meta
- tester stays hand-written (pure CLI logic)
- Re-exported spawnSafe from workflow-utils for helper use

Refs uncaged/nerve#210

小橘 🍊(NEKO Team)
2026-04-28 02:22:38 +00:00
8ff6003a75 refactor(sense-generator): use createCursorRole and slim SenseMeta
Replace hand-written planner and coder with createCursorRole from nerve-workflow-utils. Prompts instruct reading the Nerve thread via nerve thread show. Extract uses resolveDashScopeProvider. SenseMeta keeps routing-only fields; tester remains hand-written with filesystem and smoke checks.

Made-with: Cursor
2026-04-28 02:20:01 +00:00
714a320bdc feat: add hello-world workflow and update sense-generator config
- Add hello-world workflow generated by workflow-generator
- Add package.json/tsconfig.json to sense-generator
- Update nerve.yaml

小橘 🍊(NEKO Team)
2026-04-25 06:12:29 +00:00
9f2067db7d fix: add dryRun early-return for all roles in workflow-generator
llmExtract returns {} as T in dryRun mode, causing .map() on undefined.
Each role now returns mock data immediately when dryRun is true.

小橘 🍊(NEKO Team)
2026-04-25 04:24:42 +00:00
9a3c50c257 refactor: consolidate senses — merge tcp-socket-stats into system-health, remove cpu-usage
- Remove cpu-usage sense (redundant with system-health loadavg)
- Remove linux-tcp-socket-stats (merged into linux-system-health)
- Remove disk-usage-mounts (unused)
- Add tcp socket fields to system-health schema + migration
- Simplify nerve.yaml: 4 senses → 2

小橘 <xiaoju@shazhou.work>
2026-04-24 06:13:51 +00:00
d1a2ee876a fix: hermesRun command and tester verdict via llmExtract
- Fix hermes invocation: 'hermes -q' → 'hermes chat -q' with proper flags
- Replace fragile string.includes('PASS') with llmExtract judge
  (previous false positive: matched '--pass-session-id' in usage text)

小橘 🍊(NEKO Team)
2026-04-23 12:20:11 +00:00
56c7588c82 feat: sense-generator workflow with llmExtract metadata extraction
- Planner uses cursor-agent ask mode (not plan mode) for stdout output
- llmExtract: structured metadata extraction via DashScope qwen-plus + tool_choice
- Replaces fragile regex name parsing with reliable LLM tool call
- Removed unknown-sense artifact from failed generation

小橘 🍊(NEKO Team)
2026-04-23 12:01:12 +00:00