66 Commits

Author SHA1 Message Date
f651389ad8 chore(workflows): deduplicate workspace committer role
Extract shared buildWorkspaceCommitterRole into workflows/_shared/workspace-committer.ts
with parameterized conventionalCommitScopeHint and branchCheckoutExample.

Both develop-sense and develop-workflow committer/index.ts now re-export from the
shared module. Duplicate prompt.ts files removed.

Fixes #10
2026-04-29 11:11:51 +00:00
16bea3b8a7 fix(committer): forbid --author flag, use repo git config identity 2026-04-29 11:09:01 +00:00
03146b210a refactor(solve-issue): align committer/publish prompts and docs with agent role workflow
- publish/prompt.ts: require 'Fixes #N' in Ref section to auto-close issues
- CONVENTIONS.md: update Role Patterns table (committer uses createRole hermesAdapter), fix Meta Convention (committed not success)
- committer/prompt.ts: add defaultBranch guard before branch creation to prevent empty PR diffs
- implement/prompt.ts: strengthen git commit prohibition

Refs #9
2026-04-29 11:06:05 +00:00
小橘 🍊(NEKO Team)
c585e0d8a8 Refactor committer into Hermes agent with branch/commit/push workflow
Add solve-issue committer after implement; replace develop-sense and develop-workflow script roles with createRole(hermesAdapter). Implement prompt no longer does git; publish prompt asks for meaningful PR titles.

Refs #9

Made-with: Cursor
2026-04-29 10:44:28 +00:00
aef9943746 fix(solve-issue): prepare supports local repo path from trigger prompt
If the trigger prompt specifies a local repo path (--repo /path or absolute path),
prepare validates it instead of cloning to ~/Code/. Enables running solve-issue
on repos outside the default ~/Code directory.

小橘 🍊(NEKO Team)
2026-04-29 10:09:34 +00:00
小橘 🍊(NEKO Team)
95df8bc3c2 refactor(workflows): use createRole instead of compileWorkflowSpec
Switch build.ts and solve-issue inner roles to @uncaged/nerve-workflow-utils createRole with LlmExtractorConfig. Remove @uncaged/nerve-daemon from workspace dependencies; keep override for linking. Planner uses createCursorAdapter ask mode; dynamic cwd via start.meta.workdir.

Made-with: Cursor
2026-04-29 10:01:02 +00:00
小橘 🍊(NEKO Team)
70fd064bad Refactor workflows to use compileWorkflowSpec from nerve-daemon
Remove workflows/_shared; wire createLlmExtractFn, zodMeta, and createCursorAdapter(mode ask). Plan/implement/publish compile inner specs via daemon.

Made-with: Cursor
2026-04-29 09:35:13 +00:00
56ce22fb1b Migrate workflows to WorkflowSpec-style roles (RFC-003)
Replace createCursorRole/createHermesRole with adapter + prompt + zod meta.

Add shared compileRoleSpec, cursor ask adapter, nerve.yaml extract defaults.

Refs #248

Made-with: Cursor
2026-04-29 09:23:55 +00:00
66ce30cdfb rename: generate-workflow → develop-workflow, generate-sense → develop-sense
小橘 🍊(NEKO Team)
2026-04-29 00:20:01 +00:00
86f02da306 refactor: rename workflows to verb phrases, delete gitea-issue-solver
- workflow-generator → generate-workflow
- sense-generator → generate-sense
- Delete gitea-issue-solver (replaced by solve-issue)

小橘 🍊(NEKO Team)
2026-04-28 23:17:26 +00:00
64a5fc5301 chore(workflow): auto-generated commit 2026-04-28 22:46:19 +00:00
d786827ac8 chore(workflow): auto-generated commit 2026-04-28 22:37:27 +00:00
d6e95f5c65 chore(workflow): auto-generated commit 2026-04-28 22:24:20 +00:00
95587260f6 chore(workflow): auto-generated commit 2026-04-28 16:02:16 +00:00
57c740cdde Revert "chore(workflow): auto-generated commit"
This reverts commit 75f2768a8c7713879bb2ab564f42f24bc609338e.
2026-04-28 15:49:22 +00:00
75f2768a8c chore(workflow): auto-generated commit 2026-04-28 14:46:13 +00:00
3d9f239230 refactor: moderator uses dual limits — max coder rounds (20) + max total rejections (10)
Either limit triggers END. Simple, no per-rejector budgets.
2026-04-28 14:27:40 +00:00
bbcaf1eba5 refactor: moderator uses per-rejector limits instead of shared coderCount
- coder self-iterations (done=false): max 5
- reviewer rejections: max 3
- tester rejections: max 3
- committer rejections: max 2
Each budget is independent, no longer starved by coder's own passes.
2026-04-28 14:22:04 +00:00
fbcc1ff30c feat: add CONVENTIONS.md, reviewer references it instead of hardcoding rules
- CONVENTIONS.md covers: language paradigm, naming, error handling,
  workflow/sense structure, role patterns, meta convention, git rules
- Reviewer prompt now: cat CONVENTIONS.md + check diff against it
- Single source of truth for all roles
2026-04-28 14:19:20 +00:00
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
bd89dcaff6 chore(workflow): auto-generated commit 2026-04-28 13:33:14 +00:00
994de1e7ff chore(workflow): auto-generated commit 2026-04-28 13:20:29 +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
ef7d83ad0a chore(sense): auto-generated commit 2026-04-28 13:02:12 +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
d638623456 refactor(workflow-generator): simplify meta to routing booleans + log-to-file
- planner: { ready }, coder: { done }, tester: { passed }, committer: { success }
- planner/coder: createCursorRole, tester: createHermesRole
- committer: direct spawn, output to .log file
- moderator: coder loop (max 5), committer fail → coder
- bundle 24kb → 8.7kb

Fixes #5
2026-04-28 10:22:57 +00:00
bf77e3452a chore: gitignore dist/ for workflow-generator 2026-04-28 08:50:47 +00:00
a469f30b42 refactor(workflow-generator): multi-file DIP + Role Factory + esbuild bundle
- Split 500-line monolith into roles/{planner,coder,tester,committer}/
- Each role: index.ts (build function) + prompt.ts (pure function)
- Use createCursorRole/createLlmRole/createHermesRole factories
- DIP: env vars read in index.ts, injected via build.ts
- esbuild bundle to dist/index.js (24kb)
- Moderator logic preserved: planner→coder→tester→committer with retries

Fixes xiaoju/nerve-workspace#3
2026-04-28 08:48:23 +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
34e42c5c3e chore: remove test workflows (hello-world, pr-code-reviewer, pr-summarizer) 2026-04-28 04:42:23 +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