@worca/app 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +22 -9
  2. package/agents/clarify.meta.json +4 -4
  3. package/agents/decomposer.meta.json +5 -5
  4. package/agents/implementer.meta.json +15 -5
  5. package/agents/manualTestsChecklist.meta.json +5 -4
  6. package/agents/manualWebUiTesting.meta.json +9 -4
  7. package/agents/planReviewer.meta.json +12 -4
  8. package/agents/planner.meta.json +12 -5
  9. package/agents/refiner.meta.json +15 -4
  10. package/agents/reviewer.meta.json +14 -4
  11. package/agents/worca-cc-clarify.md +7 -0
  12. package/agents/worca-cc-code-reviewer.md +11 -6
  13. package/agents/worca-cc-decomposer.md +7 -0
  14. package/agents/worca-cc-implementer.md +9 -0
  15. package/agents/worca-cc-manual-tests-checklist.md +8 -5
  16. package/agents/worca-cc-manual-web-ui-testing.md +10 -6
  17. package/agents/worca-cc-plan-refiner.md +11 -6
  18. package/agents/worca-cc-plan-reviewer.md +10 -7
  19. package/agents/worca-cc-planner.md +9 -0
  20. package/agents/worca-cc-workspace-reviewer.md +11 -4
  21. package/agents/worca-cc-workspace-scanner.md +8 -4
  22. package/agents/workspaceReviewer.meta.json +15 -4
  23. package/agents/workspaceScanner.meta.json +5 -4
  24. package/package.json +8 -2
  25. package/skills/worca/SKILL.md +5 -5
  26. package/src/cli/render.mjs +148 -0
  27. package/src/cli/worca-cc.mjs +319 -45
  28. package/src/core/agent-gen.mjs +69 -31
  29. package/src/core/agent-registry.mjs +124 -144
  30. package/src/core/agent-store.mjs +164 -4
  31. package/src/core/artifacts.mjs +189 -21
  32. package/src/core/ask/catalog.mjs +111 -0
  33. package/src/core/ask/comment-deps.mjs +55 -0
  34. package/src/core/ask/events.mjs +506 -0
  35. package/src/core/ask/follow.mjs +107 -0
  36. package/src/core/ask/git-allowlist.mjs +226 -0
  37. package/src/core/ask/limits.mjs +54 -0
  38. package/src/core/ask/mcp-stdio.mjs +135 -0
  39. package/src/core/ask/models.mjs +125 -0
  40. package/src/core/ask/prompt.mjs +261 -0
  41. package/src/core/ask/proposal.mjs +170 -0
  42. package/src/core/ask/redact.mjs +30 -0
  43. package/src/core/ask/spawn.mjs +153 -0
  44. package/src/core/ask/store.mjs +360 -0
  45. package/src/core/ask/tool-deps.mjs +63 -0
  46. package/src/core/ask/tools.mjs +848 -0
  47. package/src/core/ask/turn.mjs +416 -0
  48. package/src/core/ask/worktree-deps.mjs +27 -0
  49. package/src/core/ask/worktrees.mjs +285 -0
  50. package/src/core/chat/command-router.mjs +20 -3
  51. package/src/core/claude-runner.mjs +434 -57
  52. package/src/core/config.mjs +264 -41
  53. package/src/core/cost-budget.mjs +29 -2
  54. package/src/core/db.mjs +684 -47
  55. package/src/core/diff-anchor.mjs +213 -0
  56. package/src/core/diff-comments.mjs +273 -0
  57. package/src/core/engine-select.mjs +32 -0
  58. package/src/core/git-info.mjs +49 -10
  59. package/src/core/graph/builtin-workflows.mjs +51 -0
  60. package/src/core/graph/executor.mjs +894 -0
  61. package/src/core/graph/registry-ports.mjs +12 -0
  62. package/src/core/graph/scheduler.mjs +1065 -0
  63. package/src/core/graph/seed-templates.mjs +318 -0
  64. package/src/core/model-env.mjs +112 -8
  65. package/src/core/model-test.mjs +79 -0
  66. package/src/core/orchestrator.mjs +902 -4098
  67. package/src/core/overview-agent.mjs +15 -3
  68. package/src/core/phases.mjs +208 -537
  69. package/src/core/pipeline-delete.mjs +13 -2
  70. package/src/core/plugin-api.mjs +8 -3
  71. package/src/core/plugin-config.mjs +178 -28
  72. package/src/core/plugin-inventory.mjs +6 -2
  73. package/src/core/plugin-manifest.mjs +199 -11
  74. package/src/core/plugin-models.mjs +1 -0
  75. package/src/core/plugin-repo.mjs +16 -4
  76. package/src/core/plugin-shim-child.mjs +9 -3
  77. package/src/core/plugin-shim.mjs +77 -14
  78. package/src/core/plugin-store.mjs +236 -29
  79. package/src/core/plugin-workflows.mjs +90 -41
  80. package/src/core/preflight.mjs +135 -3
  81. package/src/core/projects.mjs +7 -5
  82. package/src/core/protocol.mjs +8 -35
  83. package/src/core/recoverable-error.mjs +1 -1
  84. package/src/core/run-harness.mjs +3585 -0
  85. package/src/core/run-manifest.mjs +5 -1
  86. package/src/core/settings.mjs +109 -13
  87. package/src/core/skills.mjs +10 -3
  88. package/src/core/source-bindings.mjs +175 -0
  89. package/src/core/sources.mjs +87 -25
  90. package/src/core/stats.mjs +25 -6
  91. package/src/core/title.mjs +51 -4
  92. package/src/core/workflows.mjs +358 -259
  93. package/src/core/workspace-scan.mjs +4 -0
  94. package/src/core/worktree.mjs +98 -7
  95. package/src/shared/graph/agent-meta.mjs +278 -0
  96. package/src/shared/graph/constants.mjs +105 -0
  97. package/src/shared/graph/geometry.mjs +157 -0
  98. package/src/shared/graph/layout.mjs +134 -0
  99. package/src/shared/graph/loops.mjs +130 -0
  100. package/src/shared/graph/manifest.mjs +257 -0
  101. package/src/shared/graph/ports.mjs +153 -0
  102. package/src/shared/graph/route.mjs +397 -0
  103. package/src/shared/graph/template.mjs +165 -0
  104. package/src/shared/graph/thumbnail.mjs +67 -0
  105. package/src/shared/graph/validate.mjs +491 -0
  106. package/src/shared/graph/verdict.mjs +41 -0
  107. package/ui/public/app.js +4008 -1670
  108. package/ui/public/ask-markdown.mjs +145 -0
  109. package/ui/public/ask-model.mjs +264 -0
  110. package/ui/public/ask-panel.mjs +1880 -0
  111. package/ui/public/chat-settings-view.mjs +6 -2
  112. package/ui/public/diff-view.mjs +66 -11
  113. package/ui/public/file-tree.mjs +305 -0
  114. package/ui/public/graph/composer.mjs +889 -0
  115. package/ui/public/graph/inspector.mjs +183 -0
  116. package/ui/public/graph/model.mjs +37 -0
  117. package/ui/public/graph/palette.mjs +144 -0
  118. package/ui/public/graph/run-decor.mjs +410 -0
  119. package/ui/public/graph/run-hosts.mjs +201 -0
  120. package/ui/public/graph/save-dialog.mjs +56 -0
  121. package/ui/public/graph/view.mjs +858 -0
  122. package/ui/public/guardrails-view.mjs +4 -2
  123. package/ui/public/hljs-loader.mjs +180 -0
  124. package/ui/public/index.html +269 -265
  125. package/ui/public/log-filter.mjs +22 -4
  126. package/ui/public/log-line.mjs +45 -19
  127. package/ui/public/models-view.mjs +171 -9
  128. package/ui/public/plugins-view.mjs +106 -4
  129. package/ui/public/source-pane.mjs +190 -8
  130. package/ui/public/stats-view.mjs +81 -1
  131. package/ui/public/style.css +1459 -229
  132. package/ui/public/syntax-highlight.mjs +270 -0
  133. package/ui/public/thinking-orb.mjs +110 -0
  134. package/ui/server.mjs +1667 -98
  135. package/src/core/channels.mjs +0 -302
  136. package/src/core/runners.mjs +0 -167
  137. package/src/core/workflow-validator.mjs +0 -185
  138. package/ui/public/composer-core.mjs +0 -211
package/README.md CHANGED
@@ -12,9 +12,10 @@ quality gates, pausing to ask *you* the questions that matter, and keeping
12
12
  every run isolated in its own git worktree and branch.
13
13
 
14
14
  It ships as a **web UI**, a **CLI**, and an installable **`/worca` skill** for
15
- Claude Code — all running the same engine.
15
+ Claude Code — all running the same engine. See the
16
+ **[architecture in one picture](docs/ARCHITECTURE.md)**.
16
17
 
17
- ![Running pipeline with live flow graph and streaming log](docs/screenshots/running.png)
18
+ [![The Worca stack clients, the engine, the headless Claude Code harness, and model endpoints](docs/screenshots/architecture.png)](docs/ARCHITECTURE.md)
18
19
 
19
20
  ## How a run works
20
21
 
@@ -62,6 +63,8 @@ and durations, the clarify Q&A, agent transcripts, and logs:
62
63
  - **Mock mode** — the entire pipeline runs offline with a deterministic mock
63
64
  (no `claude`, no tokens) for demos, development, and CI.
64
65
 
66
+ ![Running pipeline with live flow graph and streaming log](docs/screenshots/running.png)
67
+
65
68
  ### Agents
66
69
 
67
70
  - **11 data-driven agents** — planner, plan refiner, plan reviewer,
@@ -69,7 +72,8 @@ and durations, the clarify Q&A, agent transcripts, and logs:
69
72
  vertical-slice tasks, one implementer each), manual-tests checklist, manual
70
73
  web-UI testing (drives a browser via Playwright), workspace scanner, and
71
74
  workspace reviewer. Each agent is a markdown prompt plus a metadata sidecar
72
- — new agents drop in without engine changes.
75
+ declaring its typed input/output ports — new agents drop in without engine
76
+ changes.
73
77
  - **AI-assisted agent creation** — describe a new agent in the UI and Worca
74
78
  generates both its system prompt and metadata (or paste your own prompt and
75
79
  let it infer just the wiring); edit, regenerate, and save.
@@ -79,11 +83,13 @@ and durations, the clarify Q&A, agent transcripts, and logs:
79
83
 
80
84
  ### Workflow Composer
81
85
 
82
- - **Compose your own pipeline** — drag agents onto a canvas to build
83
- sequential steps, parallel groups, and feedback loops (an agent that emits
84
- a verdict can loop back to an earlier step until it passes or hits its
85
- cycle cap). Saved workflows appear in the New Pipeline picker; **Reset to
86
- default** redraws the standard Plan Refine Implement Review.
86
+ - **Compose your own pipeline** — drag agents onto a canvas and wire their typed
87
+ ports: each card declares what it consumes and produces, a wire only connects
88
+ compatible ports, and a wire that closes a cycle becomes a loop with its own
89
+ cycle cap (a reviewer keeps sending work back until it passes or the budget
90
+ runs out). Flow cards **Task** (the run's request), **End** (the result),
91
+ **AND**, **OR**, **Combine** — express joins, choices and merges without any
92
+ code. Saved pipelines appear in the New Pipeline picker.
87
93
 
88
94
  ![Workflow Composer — drag agents into steps, groups, and feedback loops](docs/screenshots/composer.png)
89
95
 
@@ -158,7 +164,13 @@ Requirements:
158
164
 
159
165
  - **Node.js >= 22.13.0** (the built-in `node:sqlite` store)
160
166
  - The **[Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI**
161
- (`claude`) on your `PATH` — for real runs; mock mode needs nothing
167
+ (`claude`) on your `PATH` — for real runs; mock mode needs nothing.
168
+ On **native Windows** both the [native installer](https://docs.anthropic.com/en/docs/claude-code/setup)
169
+ (`claude.exe`) and `npm install -g @anthropic-ai/claude-code` work: npm puts a
170
+ `claude.cmd` shim on `PATH` that Node cannot spawn, so Worca runs the package's
171
+ native `claude.exe` next to it instead. If that binary is missing (the package's
172
+ `postinstall` didn't run) or the layout isn't npm's, Worca says so rather than
173
+ a bare `ENOENT`; `WORCA_CLAUDE_BIN` can always point at a `claude.exe` directly.
162
174
 
163
175
  ## Quick start
164
176
 
@@ -209,6 +221,7 @@ The skill starts the same deterministic orchestrator.
209
221
 
210
222
  ## Documentation
211
223
 
224
+ - [Architecture](docs/ARCHITECTURE.md) — the whole stack in one picture
212
225
  - [Guardrails](docs/guardrails.md) — policy model, enforcement, limitations
213
226
  - [Storage](docs/storage.md) — where state lives, project keys, migration
214
227
  - [Releasing](docs/RELEASING.md) — how `@worca/app` versions are published
@@ -1,5 +1,9 @@
1
1
  {
2
2
  "key": "clarify",
3
+ "metaVersion": 2,
4
+ "mockRole": "clarify",
5
+ "inputs": [{ "id": "task", "type": "md" }],
6
+ "outputs": [{ "id": "answers", "type": "json", "filename": "clarify.json", "artifactKind": "clarify" }],
3
7
  "domain": "coding",
4
8
  "displayName": "Clarify",
5
9
  "description": "Turns hidden decisions into questions before planning. Multiple-choice, so later steps never guess.",
@@ -7,11 +11,7 @@
7
11
  "icon": "<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M9.4 9.3a2.7 2.7 0 0 1 5.2 1c0 1.8-2.6 2.1-2.6 3.6\" stroke-linecap=\"round\" fill=\"none\"/><circle cx=\"12\" cy=\"17\" r=\"0.7\" fill=\"currentColor\" stroke=\"none\"/>",
8
12
  "agentFile": "worca-cc-clarify.md",
9
13
  "runnerType": "clarifier",
10
- "loopSource": false,
11
14
  "fanOut": true,
12
- "produces": ["clarify"],
13
- "consumes": ["userPrompt"],
14
- "connectsTo": ["planner"],
15
15
  "asksQuestions": true,
16
16
  "questionsLocked": true,
17
17
  "questionsDefault": true,
@@ -1,5 +1,10 @@
1
1
  {
2
2
  "key": "decomposer",
3
+ "metaVersion": 2,
4
+ "mockRole": "decomposer",
5
+ "promptHints": "Read the approved plan and break it into tracer-bullet vertical slices grouped into ordered phases. Within a phase, tasks must be parallel-safe and edit DISJOINT files; dependencies are expressed only as phase order. Write each task as a SELF-CONTAINED markdown file so an implementer needs nothing but that file.",
6
+ "inputs": [{ "id": "plan", "type": "md" }],
7
+ "outputs": [{ "id": "tasks", "type": "json", "filename": "decomposition.json", "artifactKind": "decomposition" }],
3
8
  "domain": "coding",
4
9
  "displayName": "Decompose",
5
10
  "description": "Splits an approved plan into vertical-slice tasks. Each task gets its own implementer.",
@@ -8,12 +13,7 @@
8
13
  "icon": "<path d=\"M12 3v6M12 9l-5 5M12 9l5 5M5 14h2M17 14h2M6 18h2M16 18h2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
9
14
  "agentFile": "worca-cc-decomposer.md",
10
15
  "runnerType": "producer",
11
- "loopSource": false,
12
16
  "fanOut": true,
13
- "produces": ["decomposition"],
14
- "consumes": ["plan"],
15
- "optionalConsumes": [],
16
- "connectsTo": ["implementer"],
17
17
  "asksQuestions": true,
18
18
  "questionsLocked": false,
19
19
  "questionsDefault": false,
@@ -1,5 +1,20 @@
1
1
  {
2
2
  "key": "implementer",
3
+ "metaVersion": 2,
4
+ "mockRole": "implementer",
5
+ "sideEffect": "code",
6
+ "workspaceFanOut": true,
7
+ "workspaceStrategy": "task",
8
+ "promptHints": "Work inside the project directory (your cwd). Commit nothing; just edit files and tests.",
9
+ "inputs": [
10
+ { "id": "fix", "type": "md", "required": false, "loop": true, "as": "fix-review",
11
+ "directive": "Address EVERY critical and major issue in the review below, then re-run the tests. Follow the plan; deviate only if something does not work at all." },
12
+ { "id": "task", "type": "json", "required": false, "expands": true,
13
+ "directive": "Implement the task below using TDD (red-green-refactor). The TASK file is a self-contained vertical slice and is AUTHORITATIVE — do exactly what it says and nothing outside its scope. The plan is reference/context only; you do NOT need to read the whole plan." },
14
+ { "id": "plan", "type": "md",
15
+ "directive": "Implement the plan using TDD (red-green-refactor). Follow it with NO deviation; deviate slightly only if a step does not work at all." }
16
+ ],
17
+ "outputs": [{ "id": "done", "type": "void" }],
3
18
  "domain": "coding",
4
19
  "displayName": "Implementation",
5
20
  "description": "Writes the code from the approved plan, strict TDD. In fix mode, addresses only the issues a review flagged.",
@@ -7,12 +22,7 @@
7
22
  "icon": "<path d=\"M9 8l-4 4 4 4M15 8l4 4-4 4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
8
23
  "agentFile": "worca-cc-implementer.md",
9
24
  "runnerType": "producer",
10
- "loopSource": false,
11
25
  "fanOut": true,
12
- "produces": ["code"],
13
- "consumes": ["plan","review"],
14
- "optionalConsumes": ["review"],
15
- "connectsTo": ["reviewer","manualTestsChecklist"],
16
26
  "asksQuestions": true,
17
27
  "questionsLocked": false,
18
28
  "questionsDefault": false,
@@ -1,5 +1,10 @@
1
1
  {
2
2
  "key": "manualTestsChecklist",
3
+ "metaVersion": 2,
4
+ "mockRole": "manual-tests-checklist",
5
+ "promptHints": "Read the implementation plan and the implemented changes ({diffInstruction}), then write a markdown checklist of concrete manual test cases a human can run against the app. Each case: a `- [ ]` line with steps and the expected result.",
6
+ "inputs": [{ "id": "plan", "type": "md" }],
7
+ "outputs": [{ "id": "checklist", "type": "md", "filename": "manual-tests-checklist.md" }],
3
8
  "domain": "coding",
4
9
  "displayName": "Manual Tests Checklist",
5
10
  "description": "Drafts a manual test checklist for the change. User-visible flows, edge cases, regressions worth clicking through.",
@@ -7,10 +12,6 @@
7
12
  "icon": "<rect x=\"6\" y=\"4\" width=\"12\" height=\"17\" rx=\"2\"/><path d=\"M9.5 4V2.8h5V4\" stroke-linejoin=\"round\"/><path d=\"M8.8 12l1.6 1.6L13.4 10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
8
13
  "agentFile": "worca-cc-manual-tests-checklist.md",
9
14
  "runnerType": "producer",
10
- "loopSource": false,
11
- "produces": ["checklist"],
12
- "consumes": ["plan","code"],
13
- "connectsTo": ["manualWebUiTesting"],
14
15
  "asksQuestions": true,
15
16
  "questionsLocked": false,
16
17
  "questionsDefault": false,
@@ -1,5 +1,14 @@
1
1
  {
2
2
  "key": "manualWebUiTesting",
3
+ "metaVersion": 2,
4
+ "mockRole": "manual-web-ui-testing",
5
+ "promptHints": "Execute the manual test checklist against the running web UI using the Playwright tools. Severity calibration: a failing manual case is at least major.",
6
+ "verdict": { "filename": "webui-review-cycle{cycle}.json" },
7
+ "inputs": [{ "id": "checklist", "type": "md" }],
8
+ "outputs": [
9
+ { "id": "review", "type": "md", "when": "blocking", "filename": "webui-review-cycle{cycle}.md", "artifactKind": "webui" },
10
+ { "id": "pass", "type": "void", "when": "clean" }
11
+ ],
3
12
  "domain": "coding",
4
13
  "displayName": "Manual web UI testing",
5
14
  "description": "Runs the manual checklist in the live web UI via Playwright. Reports what passed, failed, or blocked.",
@@ -7,10 +16,6 @@
7
16
  "icon": "<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M10 8.5l5 3.5-5 3.5V8.5Z\" fill=\"currentColor\" stroke=\"none\"/>",
8
17
  "agentFile": "worca-cc-manual-web-ui-testing.md",
9
18
  "runnerType": "verifier",
10
- "loopSource": true,
11
- "produces": ["review"],
12
- "consumes": ["checklist","code"],
13
- "connectsTo": ["implementer"],
14
19
  "asksQuestions": true,
15
20
  "questionsLocked": false,
16
21
  "questionsDefault": false,
@@ -1,5 +1,17 @@
1
1
  {
2
2
  "key": "planReviewer",
3
+ "metaVersion": 2,
4
+ "mockRole": "plan-review",
5
+ "promptHints": "Review the implementation PLAN against the original request and the real codebase. Do NOT rewrite the plan. Only critical/major block (the planner then revises).",
6
+ "wantsRequest": true,
7
+ "workspaceFanOut": true,
8
+ "workspaceStrategy": "explore",
9
+ "verdict": { "filename": "plan-review-cycle{cycle}.json" },
10
+ "inputs": [{ "id": "plan", "type": "md" }],
11
+ "outputs": [
12
+ { "id": "review", "type": "md", "when": "blocking", "filename": "{base}-plan-review.md", "store": "project" },
13
+ { "id": "pass", "type": "void", "when": "clean" }
14
+ ],
3
15
  "domain": "coding",
4
16
  "displayName": "Plan Review",
5
17
  "description": "Reviews the plan against the request and the codebase. Blocking issues bounce it back for a cold re-plan.",
@@ -7,11 +19,7 @@
7
19
  "icon": "<path d=\"M10.5 4a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13Z\"/><path d=\"M15.5 15.5L21 21\" stroke-linecap=\"round\"/><path d=\"M7.6 10.3l2 2 3.3-3.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
8
20
  "agentFile": "worca-cc-plan-reviewer.md",
9
21
  "runnerType": "verifier",
10
- "loopSource": true,
11
22
  "fanOut": true,
12
- "produces": ["review"],
13
- "consumes": ["plan"],
14
- "connectsTo": ["planner", "implementer", "decomposer"],
15
23
  "asksQuestions": true,
16
24
  "questionsLocked": false,
17
25
  "questionsDefault": false,
@@ -1,5 +1,17 @@
1
1
  {
2
2
  "key": "planner",
3
+ "metaVersion": 2,
4
+ "mockRole": "planner-plan",
5
+ "promptHints": "Write a complete, build-ready implementation plan. It MUST contain concrete code snippets for the features and MUST end with a \"## Clarifications (Q&A)\" section reproducing the questions and the user answers below so the reviewer can see them.",
6
+ "workspaceFanOut": true,
7
+ "workspaceStrategy": "explore",
8
+ "inputs": [
9
+ { "id": "task", "type": "md" },
10
+ { "id": "answers", "type": "json", "required": false, "as": "answers" },
11
+ { "id": "revise", "type": "md", "required": false, "loop": true,
12
+ "directive": "## Revise to address the review\n\nA reviewer found issues with the previous plan. Re-plan from scratch (cold start) and address EVERY critical and major finding in the review below. Preserve the \"## Clarifications (Q&A)\" section." }
13
+ ],
14
+ "outputs": [{ "id": "plan", "type": "md", "filename": "{base}{vsuffix}.md", "store": "project" }],
3
15
  "domain": "coding",
4
16
  "displayName": "Plan",
5
17
  "description": "Explores the codebase and writes the implementation plan. Architecture, task breakdown, concrete code snippets; can ask clarifying questions first.",
@@ -7,12 +19,7 @@
7
19
  "icon": "<path d=\"M8 6h11M8 12h11M8 18h8\" stroke-linecap=\"round\"/><circle cx=\"4\" cy=\"6\" r=\"1.1\"/><circle cx=\"4\" cy=\"12\" r=\"1.1\"/><circle cx=\"4\" cy=\"18\" r=\"1.1\"/>",
8
20
  "agentFile": "worca-cc-planner.md",
9
21
  "runnerType": "producer",
10
- "loopSource": false,
11
22
  "fanOut": true,
12
- "produces": ["plan"],
13
- "consumes": ["userPrompt", "clarify", "review"],
14
- "optionalConsumes": ["clarify", "review"],
15
- "connectsTo": ["refiner", "implementer", "planReviewer", "decomposer"],
16
23
  "asksQuestions": true,
17
24
  "questionsLocked": false,
18
25
  "questionsDefault": false,
@@ -1,5 +1,20 @@
1
1
  {
2
2
  "key": "refiner",
3
+ "metaVersion": 2,
4
+ "mockRole": "refiner",
5
+ "promptHints": "Read the current plan, critically review it INCLUDING its code snippets, then write an improved version and a machine-readable review.\n\nMark a finding critical/major only if it must be fixed before implementation.",
6
+ "wantsRequest": true,
7
+ "workspaceFanOut": true,
8
+ "workspaceStrategy": "explore",
9
+ "verdict": { "filename": "refine-review-cycle{cycle}.json" },
10
+ "inputs": [
11
+ { "id": "plan", "type": "md" },
12
+ { "id": "revise", "type": "md", "required": false, "loop": true }
13
+ ],
14
+ "outputs": [
15
+ { "id": "plan", "type": "md", "when": "clean", "filename": "{base}{vsuffix}.md", "store": "project" },
16
+ { "id": "revise", "type": "md", "when": "blocking", "filename": "{base}{vsuffix}.md", "store": "project", "artifactKind": "plan" }
17
+ ],
3
18
  "domain": "coding",
4
19
  "displayName": "Refine Plan",
5
20
  "description": "Rewrites the latest plan into a tighter version. Fixes structure, correctness, and code snippets until no blocking issues remain.",
@@ -7,11 +22,7 @@
7
22
  "icon": "<path d=\"M12 3v3M12 18v3M4.5 7.5l2 1M17.5 15.5l2 1M4.5 16.5l2-1M17.5 8.5l2-1\" stroke-linecap=\"round\"/><path d=\"M12 8.2l1.2 2.6L16 12l-2.8 1.2L12 15.8l-1.2-2.6L8 12l2.8-1.2L12 8.2Z\" stroke-linejoin=\"round\"/>",
8
23
  "agentFile": "worca-cc-plan-refiner.md",
9
24
  "runnerType": "producer",
10
- "loopSource": false,
11
25
  "fanOut": true,
12
- "produces": ["plan","review"],
13
- "consumes": ["plan"],
14
- "connectsTo": ["implementer","refiner","decomposer"],
15
26
  "asksQuestions": true,
16
27
  "questionsLocked": false,
17
28
  "questionsDefault": false,
@@ -1,5 +1,19 @@
1
1
  {
2
2
  "key": "reviewer",
3
+ "metaVersion": 2,
4
+ "mockRole": "reviewer",
5
+ "promptHints": "Review the git diff of what was implemented against the plan.",
6
+ "wantsRequest": true,
7
+ "workspaceStrategy": "review",
8
+ "verdict": { "filename": "impl-review-cycle{cycle}.json" },
9
+ "inputs": [
10
+ { "id": "plan", "type": "md" },
11
+ { "id": "done", "type": "void", "required": false, "as": "worktree" }
12
+ ],
13
+ "outputs": [
14
+ { "id": "review", "type": "md", "when": "blocking", "filename": "{base}-impl-review.md", "store": "project" },
15
+ { "id": "pass", "type": "void", "when": "clean" }
16
+ ],
3
17
  "domain": "coding",
4
18
  "displayName": "Review Implementation",
5
19
  "description": "Reviews the implementation diff against the plan. Honest verdict; blocking findings loop back to the implementer.",
@@ -7,11 +21,7 @@
7
21
  "icon": "<path d=\"M12 3l7 3v5c0 4.4-3 7.6-7 9-4-1.4-7-4.6-7-9V6l7-3Z\" stroke-linejoin=\"round\"/><path d=\"M9 12l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
8
22
  "agentFile": "worca-cc-code-reviewer.md",
9
23
  "runnerType": "verifier",
10
- "loopSource": true,
11
24
  "fanOut": true,
12
- "produces": ["review"],
13
- "consumes": ["plan","code"],
14
- "connectsTo": ["implementer","manualTestsChecklist"],
15
25
  "asksQuestions": true,
16
26
  "questionsLocked": false,
17
27
  "questionsDefault": false,
@@ -7,6 +7,13 @@ model: inherit
7
7
 
8
8
  You are the **Clarify** agent in a deterministic multi-agent pipeline (Clarify -> Plan -> Refine -> Implement -> Review). You are spawned headlessly by an orchestrator script and run BEFORE the Planner. Your sole job is to surface the few genuine open decisions, so the Planner can plan without guessing. You NEVER write a plan.
9
9
 
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt — never hardcode filenames.
13
+
14
+ - **in `task`** (md) — the user's task/prompt (plus any attached markdown / extra files).
15
+ - **out `answers`** (json) — your questions, in the shape contracted below. The engine folds the user's answers back into this same file.
16
+
10
17
  ## Cardinal rule: NEVER ASSUME, NEVER PAD
11
18
 
12
19
  Surface the decisions that **materially** change the plan — core requirements, scope boundaries, externally-visible behavior, data shapes, or library/architecture choices — that you genuinely cannot resolve from the task text or the codebase. **Actively hunt for the things a downstream agent (planner/implementer) would otherwise silently assume** and turn each into a question. At the same time, do NOT ask stupid or unnecessary questions: for **low-impact** details (naming, minor file placement, obvious conventions, anything readable from the codebase), do NOT ask — the Planner will pick a sensible default. Ask only what you genuinely cannot decide.
@@ -7,12 +7,17 @@ model: inherit
7
7
 
8
8
  You are the **Code Reviewer** agent in a deterministic Plan -> Refine -> Implement -> Review pipeline. You are spawned headlessly, once per review cycle. After your review, the orchestrator runs the Implementer in FIX mode against your findings, then runs you again — looping until you report NO critical and NO major issues (or a cycle cap with a user gate). Your honesty about severities controls the loop: do not downgrade real defects to end it, and do not invent blocking issues to prolong it.
9
9
 
10
- ## Inputs (from the task prompt)
11
- - The absolute path of the PLAN that was implemented.
12
- - The absolute path to write the review markdown. The orchestrator places it in the machine-wide external store, keyed by repo identity and outside the working tree (e.g. `<worcaHome>/store/<projectKey>/reviews/<DD-MM-YY-name>-impl-review.md`, default `~/.worca-cc/store/<projectKey>/reviews/...`). Always write to the exact absolute path you are given.
13
- - The absolute path to write `review-cycleN.json`.
14
- - The cycle number.
15
- - Your cwd is the project repo, so you can run git.
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt never hardcode filenames.
13
+
14
+ - **in `plan`** (md) — the plan that was implemented.
15
+ - **in `done`** (void, optional) — the implementer's staged worktree. Review THAT tree's diff.
16
+ - **out `review`** (md, on a blocking verdict) — your review markdown.
17
+ - **out `pass`** (void, on a clean verdict) — the no-blocking-issues signal; it carries no file.
18
+ - **verdict** (json) — the review JSON the orchestrator gates on; its shape is contracted below.
19
+
20
+ Your cwd is the project repo, so you can run git. The cycle number is in the task prompt.
16
21
 
17
22
  ## What to do
18
23
 
@@ -12,6 +12,13 @@ path is in the prompt). Break it into **tracer-bullet vertical slices** so that
12
12
  parallel implementers can each pick up one self-contained task file without reading
13
13
  the whole plan.
14
14
 
15
+ ## Ports
16
+
17
+ The engine binds every port to an absolute path in the task prompt — never hardcode filenames.
18
+
19
+ - **in `plan`** (md) — the approved implementation plan to split.
20
+ - **out `tasks`** (json) — the decomposition manifest, in the shape contracted below. The per-task markdown files go in the tasks directory the prompt names.
21
+
15
22
  ## Draft vertical slices
16
23
 
17
24
  Break the plan into thin vertical slices. Each slice is a tracer bullet that cuts
@@ -7,6 +7,15 @@ model: inherit
7
7
 
8
8
  You are the **Implementer** agent in a deterministic Plan -> Refine -> Implement -> Review pipeline. You are spawned headlessly. You operate in ONE of two modes, stated in the task prompt: `implement` or `fix`. You write real code into the target project working directory (your cwd is the project). The Code Reviewer will inspect your changes via `git diff` against the orchestrator's checkpoint commit, so your changes must be real, committed-quality work. You do not need to stage or commit — the orchestrator records intent-to-add for any new files after you finish so they show up in the reviewer's diff.
9
9
 
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt — never hardcode filenames.
13
+
14
+ - **in `fix`** (md, optional, loop) — a code review to address. When it is bound, you are in FIX mode.
15
+ - **in `task`** (json, optional) — one decomposed vertical slice. When it is bound, that task file is authoritative and the plan is reference only.
16
+ - **in `plan`** (md) — the approved implementation plan. Always bound.
17
+ - **out `done`** (void) — the signal that the working tree now carries your change; it carries no file.
18
+
10
19
  ## Cardinal rule: FOLLOW THE PLAN
11
20
 
12
21
  The latest plan (its absolute path is in the prompt) is authoritative. Implement it faithfully, step by step, with NO deviation in approach, file layout, naming, or scope. Do not add features the plan does not call for. Do not refactor unrelated code. Do not "improve" the design on your own initiative.
@@ -7,11 +7,14 @@ model: inherit
7
7
 
8
8
  You are the **Manual Tests Checklist** agent in a deterministic multi-agent pipeline (Plan -> Refine -> Implement -> Review, with optional manual-testing steps). You are spawned headlessly. Your single deliverable is a **markdown checklist of manual test cases** written to the absolute path given in the task prompt. You do not run the app, write code, or emit a review verdict — you author the checklist that a human (or the Manual web UI testing agent) will execute.
9
9
 
10
- ## Inputs (from the task prompt)
11
- - The user's original request / task description.
12
- - The absolute path of the approved PLAN markdown (the latest `-vN`).
13
- - Access to the implementation via git: your cwd is the project repo. If a checkpoint ref is named, `git diff <ref>` shows the implemented change (new files are intent-to-added, so they appear); otherwise use `git diff` plus `git diff HEAD`, and always cross-check with `git status` and `git diff --stat` (a plain `git diff` can look empty when the change is entirely new files).
14
- - The absolute output path for the checklist markdown (e.g. a `MOCK_OUT:` line or an explicit "write the checklist to <path>" instruction). Use that path verbatim.
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt never hardcode filenames.
13
+
14
+ - **in `plan`** (md) the approved implementation plan.
15
+ - **out `checklist`** (md) — the manual test checklist you author.
16
+
17
+ The user's original request comes with the task prompt. Access to the implementation is via git: your cwd is the project repo. If a checkpoint ref is named, `git diff <ref>` shows the implemented change (new files are intent-to-added, so they appear); otherwise use `git diff` plus `git diff HEAD`, and always cross-check with `git status` and `git diff --stat` (a plain `git diff` can look empty when the change is entirely new files).
15
18
 
16
19
  ## What to do
17
20
  1. Read the plan in full to learn the intended behavior, scope, and acceptance criteria.
@@ -7,12 +7,16 @@ model: inherit
7
7
 
8
8
  You are the **Manual web UI testing** agent in a deterministic Plan -> Refine -> Implement -> Review pipeline (with manual-testing steps). You are spawned headlessly, once per testing cycle. You **execute the manual test checklist against the live, running web UI** using the Playwright MCP browser tools, and you write a verdict JSON. The orchestrator gates on your verdict: if you report critical/major issues, it runs the Implementer in FIX mode and re-runs you — looping until you report none (or a cycle cap with a user gate). Your honesty about severities controls the loop: do not downgrade real defects to end it, and do not invent blocking issues to prolong it.
9
9
 
10
- ## Inputs (from the task prompt)
11
- - The absolute path of the manual test **checklist markdown** to execute (authored by the Manual Tests Checklist agent). Each `- [ ]` item is a case with steps + an Expected result.
12
- - The absolute path of the PLAN that was implemented (for context on intended behavior).
13
- - The absolute path to write `review-cycleN.json`.
14
- - The cycle number.
15
- - Optionally a screenshots directory under the pipeline dir to save evidence.
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt never hardcode filenames.
13
+
14
+ - **in `checklist`** (md) — the manual test checklist to execute (authored by the Manual Tests Checklist agent). Each `- [ ]` item is a case with steps + an Expected result.
15
+ - **out `review`** (md, on a blocking verdict) your findings written up as markdown.
16
+ - **out `pass`** (void, on a clean verdict) — the no-blocking-issues signal; it carries no file.
17
+ - **verdict** (json) — the review JSON the orchestrator gates on; its shape is contracted below.
18
+
19
+ The cycle number comes with the task prompt, as does an optional screenshots directory under the pipeline dir for evidence.
16
20
 
17
21
  ## Getting the app running (required)
18
22
  The UI must be reachable before you can test it.
@@ -7,12 +7,17 @@ model: inherit
7
7
 
8
8
  You are the **Plan Refiner** agent in a deterministic Plan -> Refine -> Implement -> Review pipeline. You are spawned headlessly, once per refine cycle. The orchestrator loops you: it keeps running you (cycle 1, 2, 3 …) until your review reports NO critical and NO major issues, or a cycle cap with a user gate is reached. Your honesty about severities is what makes the loop terminate correctly — never downgrade real problems to make the loop end, and never inflate trivia to keep it going.
9
9
 
10
- ## Inputs (from the task prompt)
11
- - The absolute path of the INPUT plan to review (the latest version so far).
12
- - The absolute path to write the REFINED plan (`-vN`, e.g. `<base>-v2.md` on cycle 1, `-v3.md` on cycle 2, …). Use the exact path given.
13
- - The absolute path to write `review-cycleN.json` for this cycle.
14
- - The cycle number.
15
- - The original task/prompt context and the plan's own `## Clarifications (Q&A)` section (preserve and respect the user's answers).
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt never hardcode filenames.
13
+
14
+ - **in `plan`** (md) — the INPUT plan to review (the latest version so far).
15
+ - **in `revise`** (md, optional, loop) your own previous output coming back for another cycle.
16
+ - **out `plan`** (md, on a clean verdict) — the refined plan, when nothing blocks any more.
17
+ - **out `revise`** (md, on a blocking verdict) — the refined plan when issues remain; it re-enters your `revise` input for the next cycle. Both arms write the SAME plan file.
18
+ - **verdict** (json) — the review JSON the orchestrator gates on; its shape is contracted below.
19
+
20
+ The cycle number, the original task/prompt context, and the plan's own `## Clarifications (Q&A)` section (preserve and respect the user's answers) come with the task prompt.
16
21
 
17
22
  ## Fan-out (parallel sub-agents) — USE IT when enabled
18
23
 
@@ -9,13 +9,16 @@ You are the **Plan Reviewer** agent in a deterministic multi-agent pipeline. You
9
9
 
10
10
  Contrast with the Plan Refiner: the refiner reviews AND rewrites the plan itself. You only review and report; the Planner does the rewriting. Keep that separation — never edit the plan file.
11
11
 
12
- ## Inputs (from the task prompt)
13
- - The absolute path of the PLAN markdown to review.
14
- - The original user request (in the task header) and any attached files.
15
- - The absolute path to write the review markdown.
16
- - The absolute path to write `plan-review-cycleN.json`.
17
- - The cycle number.
18
- - Your cwd is the project repo, so you can inspect the real codebase.
12
+ ## Ports
13
+
14
+ The engine binds every port to an absolute path in the task prompt never hardcode filenames.
15
+
16
+ - **in `plan`** (md) the plan markdown to review.
17
+ - **out `review`** (md, on a blocking verdict) — your review markdown.
18
+ - **out `pass`** (void, on a clean verdict) the no-blocking-issues signal; it carries no file.
19
+ - **verdict** (json) — the review JSON the orchestrator gates on; its shape is contracted below.
20
+
21
+ The original user request (in the task header), any attached files, and the cycle number come with the task prompt. Your cwd is the project repo, so you can inspect the real codebase.
19
22
 
20
23
  ## What to do
21
24
 
@@ -7,6 +7,15 @@ model: inherit
7
7
 
8
8
  You are the **Planner** agent in a deterministic multi-agent pipeline (Plan -> Refine -> Implement -> Review). You are spawned headlessly by an orchestrator script. You write implementation plans (PLAN), and on a plan-review rewind you revise from the review (REVISE). You never ask the user questions — a separate Clarify agent runs before you and its answers are provided in your task prompt. Read the task prompt carefully and obey the mode markers.
9
9
 
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt — never hardcode filenames.
13
+
14
+ - **in `task`** (md) — the user's task/prompt (plus any attachments).
15
+ - **in `answers`** (json, optional) — the Clarify agent's questions and the user's answers. Honor them.
16
+ - **in `revise`** (md, optional, loop) — a plan review that bounced the plan back. When it is bound, you are in REVISE mode (see below).
17
+ - **out `plan`** (md) — the implementation plan you write.
18
+
10
19
  ## Fan-out (parallel sub-agents) — USE IT when enabled
11
20
 
12
21
  The orchestrator decides per run whether you may fan out. When it is enabled, your task prompt carries a `## Fan-out ENABLED` block AND the **Task/Agent tool is in your tool list**. In that case, do NOT explore the codebase serially when the work spans multiple areas. Instead:
@@ -7,10 +7,17 @@ model: inherit
7
7
 
8
8
  You are the **Workspace Reviewer** agent in a deterministic Plan -> Refine -> Implement -> Review pipeline running over a WORKSPACE (a set of 2+ member projects). You replace the single-project Code Reviewer for workspace runs. You are spawned headlessly, once per review cycle. After your review, the orchestrator runs the Implementer in FIX mode against your findings, then runs you again — looping until you report NO critical and NO major issues (or a cycle cap with a user gate). Your honesty about severities controls the loop: do not downgrade real defects to end it, and do not invent blocking issues to prolong it. As fixes land across cycles, your blocking count should genuinely fall.
9
9
 
10
- ## Inputs (from the task prompt)
11
- - The `## Workspace Context` block (the frozen, point-in-time interconnection description) and the `## Workspace projects` block listing each member's worktree directory (a sub-agent's cwd) and its checkpoint ref (the diff base).
12
- - The absolute path of the PLAN that was implemented.
13
- - The absolute path to write the synthesized review markdown, the absolute path to write `review-cycleN.json`, and the cycle number.
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt never hardcode filenames.
13
+
14
+ - **in `plan`** (md) — the plan that was implemented.
15
+ - **in `done`** (void, optional) — the implementer's staged worktrees. Review THOSE trees' diffs.
16
+ - **out `review`** (md, on a blocking verdict) — your ONE synthesized review markdown.
17
+ - **out `pass`** (void, on a clean verdict) — the no-blocking-issues signal; it carries no file.
18
+ - **verdict** (json) — the single synthesized review JSON the orchestrator gates on; its shape is contracted below.
19
+
20
+ The task prompt also carries the `## Workspace Context` block (the frozen, point-in-time interconnection description), the `## Workspace projects` block listing each member's worktree directory (a sub-agent's cwd) and its checkpoint ref (the diff base), and the cycle number.
14
21
 
15
22
  ## What to do (review-fanout, cap 8)
16
23
 
@@ -7,10 +7,14 @@ model: inherit
7
7
 
8
8
  You are the **Workspace Scanner** agent. You run OUTSIDE the Plan -> Refine -> Implement -> Review pipeline: the wizard's scan engine spawns you once, before a workspace is saved, to discover how its member projects interconnect and to write a single, human-editable interconnection description. You are strictly **read-only** — you investigate and report; you NEVER edit, commit, or branch in any member repo.
9
9
 
10
- ## Inputs (from the task prompt)
11
- - The member projects: each project's name, `projectKey`, and the directory to investigate (a throwaway worktree when graphify built a graph there, else the project root).
12
- - For each project, whether a `graphify-out/` knowledge graph is available (use it when present; otherwise fall back to `Read`/`Grep`/`Glob`).
13
- - The absolute path to write the interconnection description markdown.
10
+ ## Ports
11
+
12
+ The engine binds every port to an absolute path in the task prompt never hardcode filenames.
13
+
14
+ - **in `task`** (md) — the scan request.
15
+ - **out `workspace`** (md) — the interconnection description you write.
16
+
17
+ The task prompt also names the member projects — each project's name, `projectKey`, and the directory to investigate (a throwaway worktree when graphify built a graph there, else the project root) — and, per project, whether a `graphify-out/` knowledge graph is available (use it when present; otherwise fall back to `Read`/`Grep`/`Glob`).
14
18
 
15
19
  ## What to do
16
20
 
@@ -1,5 +1,20 @@
1
1
  {
2
2
  "key": "workspaceReviewer",
3
+ "metaVersion": 2,
4
+ "mockRole": "workspace-reviewer",
5
+ "workspaceVariantOf": "reviewer",
6
+ "promptHints": "Review what was implemented across the member projects against the plan.\n\nThe issue list is the UNION of every per-project critical/major issue (never collapse one), sorted by projectKey then severity, each location prefixed \"<projectKey>: \".",
7
+ "workspaceFanOut": true,
8
+ "workspaceStrategy": "review",
9
+ "verdict": { "filename": "ws-review-cycle{cycle}.json" },
10
+ "inputs": [
11
+ { "id": "plan", "type": "md" },
12
+ { "id": "done", "type": "void", "required": false, "as": "worktree" }
13
+ ],
14
+ "outputs": [
15
+ { "id": "review", "type": "md", "when": "blocking", "filename": "{base}-ws-review.md", "store": "project" },
16
+ { "id": "pass", "type": "void", "when": "clean" }
17
+ ],
3
18
  "domain": "shared",
4
19
  "displayName": "Workspace Review",
5
20
  "description": "Fans out one review per changed project in the workspace. Synthesizes a single cross-project verdict.",
@@ -7,11 +22,7 @@
7
22
  "icon": "<path d=\"M12 3l7 3v5c0 4.4-3 7.6-7 9-4-1.4-7-4.6-7-9V6l7-3Z\" stroke-linejoin=\"round\"/><path d=\"M8 11l2 2 4-4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
8
23
  "agentFile": "worca-cc-workspace-reviewer.md",
9
24
  "runnerType": "verifier",
10
- "loopSource": true,
11
25
  "fanOut": true,
12
- "produces": ["review"],
13
- "consumes": ["plan", "code"],
14
- "connectsTo": ["implementer"],
15
26
  "asksQuestions": true,
16
27
  "questionsLocked": false,
17
28
  "questionsDefault": false,