poly-weaver 0.2.5
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.
- package/README.md +388 -0
- package/dist/agents/implementors/adapter.d.ts +18 -0
- package/dist/agents/implementors/adapter.d.ts.map +1 -0
- package/dist/agents/implementors/adapter.js +36 -0
- package/dist/agents/implementors/adapter.js.map +1 -0
- package/dist/agents/implementors/dsl.d.ts +11 -0
- package/dist/agents/implementors/dsl.d.ts.map +1 -0
- package/dist/agents/implementors/dsl.js +9 -0
- package/dist/agents/implementors/dsl.js.map +1 -0
- package/dist/agents/implementors/handler.d.ts +10 -0
- package/dist/agents/implementors/handler.d.ts.map +1 -0
- package/dist/agents/implementors/handler.js +55 -0
- package/dist/agents/implementors/handler.js.map +1 -0
- package/dist/agents/implementors/index.d.ts +10 -0
- package/dist/agents/implementors/index.d.ts.map +1 -0
- package/dist/agents/implementors/index.js +21 -0
- package/dist/agents/implementors/index.js.map +1 -0
- package/dist/agents/implementors/prompts.d.ts +20 -0
- package/dist/agents/implementors/prompts.d.ts.map +1 -0
- package/dist/agents/implementors/prompts.js +72 -0
- package/dist/agents/implementors/prompts.js.map +1 -0
- package/dist/agents/implementors/types.d.ts +24 -0
- package/dist/agents/implementors/types.d.ts.map +1 -0
- package/dist/agents/implementors/types.js +2 -0
- package/dist/agents/implementors/types.js.map +1 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +25 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/planners/adapter.d.ts +22 -0
- package/dist/agents/planners/adapter.d.ts.map +1 -0
- package/dist/agents/planners/adapter.js +67 -0
- package/dist/agents/planners/adapter.js.map +1 -0
- package/dist/agents/planners/dsl.d.ts +13 -0
- package/dist/agents/planners/dsl.d.ts.map +1 -0
- package/dist/agents/planners/dsl.js +9 -0
- package/dist/agents/planners/dsl.js.map +1 -0
- package/dist/agents/planners/handler.d.ts +9 -0
- package/dist/agents/planners/handler.d.ts.map +1 -0
- package/dist/agents/planners/handler.js +86 -0
- package/dist/agents/planners/handler.js.map +1 -0
- package/dist/agents/planners/index.d.ts +10 -0
- package/dist/agents/planners/index.d.ts.map +1 -0
- package/dist/agents/planners/index.js +21 -0
- package/dist/agents/planners/index.js.map +1 -0
- package/dist/agents/planners/prompts.d.ts +30 -0
- package/dist/agents/planners/prompts.d.ts.map +1 -0
- package/dist/agents/planners/prompts.js +153 -0
- package/dist/agents/planners/prompts.js.map +1 -0
- package/dist/agents/planners/types.d.ts +37 -0
- package/dist/agents/planners/types.d.ts.map +1 -0
- package/dist/agents/planners/types.js +2 -0
- package/dist/agents/planners/types.js.map +1 -0
- package/dist/agents/registry.d.ts +29 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +44 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/reviewers/adapter.d.ts +10 -0
- package/dist/agents/reviewers/adapter.d.ts.map +1 -0
- package/dist/agents/reviewers/adapter.js +35 -0
- package/dist/agents/reviewers/adapter.js.map +1 -0
- package/dist/agents/reviewers/dsl.d.ts +12 -0
- package/dist/agents/reviewers/dsl.d.ts.map +1 -0
- package/dist/agents/reviewers/dsl.js +9 -0
- package/dist/agents/reviewers/dsl.js.map +1 -0
- package/dist/agents/reviewers/handler.d.ts +8 -0
- package/dist/agents/reviewers/handler.d.ts.map +1 -0
- package/dist/agents/reviewers/handler.js +48 -0
- package/dist/agents/reviewers/handler.js.map +1 -0
- package/dist/agents/reviewers/index.d.ts +10 -0
- package/dist/agents/reviewers/index.d.ts.map +1 -0
- package/dist/agents/reviewers/index.js +33 -0
- package/dist/agents/reviewers/index.js.map +1 -0
- package/dist/agents/reviewers/prompts.d.ts +25 -0
- package/dist/agents/reviewers/prompts.d.ts.map +1 -0
- package/dist/agents/reviewers/prompts.js +143 -0
- package/dist/agents/reviewers/prompts.js.map +1 -0
- package/dist/agents/reviewers/types.d.ts +35 -0
- package/dist/agents/reviewers/types.d.ts.map +1 -0
- package/dist/agents/reviewers/types.js +10 -0
- package/dist/agents/reviewers/types.js.map +1 -0
- package/dist/agents/runner.d.ts +62 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +136 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/agents/simplifiers/adapter.d.ts +12 -0
- package/dist/agents/simplifiers/adapter.d.ts.map +1 -0
- package/dist/agents/simplifiers/adapter.js +27 -0
- package/dist/agents/simplifiers/adapter.js.map +1 -0
- package/dist/agents/simplifiers/dsl.d.ts +11 -0
- package/dist/agents/simplifiers/dsl.d.ts.map +1 -0
- package/dist/agents/simplifiers/dsl.js +9 -0
- package/dist/agents/simplifiers/dsl.js.map +1 -0
- package/dist/agents/simplifiers/handler.d.ts +9 -0
- package/dist/agents/simplifiers/handler.d.ts.map +1 -0
- package/dist/agents/simplifiers/handler.js +39 -0
- package/dist/agents/simplifiers/handler.js.map +1 -0
- package/dist/agents/simplifiers/index.d.ts +10 -0
- package/dist/agents/simplifiers/index.d.ts.map +1 -0
- package/dist/agents/simplifiers/index.js +20 -0
- package/dist/agents/simplifiers/index.js.map +1 -0
- package/dist/agents/simplifiers/prompts.d.ts +11 -0
- package/dist/agents/simplifiers/prompts.d.ts.map +1 -0
- package/dist/agents/simplifiers/prompts.js +24 -0
- package/dist/agents/simplifiers/prompts.js.map +1 -0
- package/dist/agents/simplifiers/types.d.ts +15 -0
- package/dist/agents/simplifiers/types.d.ts.map +1 -0
- package/dist/agents/simplifiers/types.js +2 -0
- package/dist/agents/simplifiers/types.js.map +1 -0
- package/dist/agents/whip-hint.d.ts +23 -0
- package/dist/agents/whip-hint.d.ts.map +1 -0
- package/dist/agents/whip-hint.js +41 -0
- package/dist/agents/whip-hint.js.map +1 -0
- package/dist/ansi.d.ts +39 -0
- package/dist/ansi.d.ts.map +1 -0
- package/dist/ansi.js +158 -0
- package/dist/ansi.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +309 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/dsl.d.ts +25 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +16 -0
- package/dist/dsl.js.map +1 -0
- package/dist/flow/artifacts.d.ts +13 -0
- package/dist/flow/artifacts.d.ts.map +1 -0
- package/dist/flow/artifacts.js +27 -0
- package/dist/flow/artifacts.js.map +1 -0
- package/dist/flow/built-in/default.d.ts +15 -0
- package/dist/flow/built-in/default.d.ts.map +1 -0
- package/dist/flow/built-in/default.js +123 -0
- package/dist/flow/built-in/default.js.map +1 -0
- package/dist/flow/built-in/default.ts +152 -0
- package/dist/flow/built-in/why-so-serious.d.ts +15 -0
- package/dist/flow/built-in/why-so-serious.d.ts.map +1 -0
- package/dist/flow/built-in/why-so-serious.js +147 -0
- package/dist/flow/built-in/why-so-serious.js.map +1 -0
- package/dist/flow/custom/AUTHORING.md +558 -0
- package/dist/flow/custom/index.d.ts +3 -0
- package/dist/flow/custom/index.d.ts.map +1 -0
- package/dist/flow/custom/index.js +2 -0
- package/dist/flow/custom/index.js.map +1 -0
- package/dist/flow/custom/load.d.ts +19 -0
- package/dist/flow/custom/load.d.ts.map +1 -0
- package/dist/flow/custom/load.js +117 -0
- package/dist/flow/custom/load.js.map +1 -0
- package/dist/flow/diagram.d.ts +37 -0
- package/dist/flow/diagram.d.ts.map +1 -0
- package/dist/flow/diagram.js +596 -0
- package/dist/flow/diagram.js.map +1 -0
- package/dist/flow/dsl.d.ts +65 -0
- package/dist/flow/dsl.d.ts.map +1 -0
- package/dist/flow/dsl.js +210 -0
- package/dist/flow/dsl.js.map +1 -0
- package/dist/flow/executor.d.ts +22 -0
- package/dist/flow/executor.d.ts.map +1 -0
- package/dist/flow/executor.js +185 -0
- package/dist/flow/executor.js.map +1 -0
- package/dist/flow/index.d.ts +16 -0
- package/dist/flow/index.d.ts.map +1 -0
- package/dist/flow/index.js +12 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/flow/inspect.d.ts +21 -0
- package/dist/flow/inspect.d.ts.map +1 -0
- package/dist/flow/inspect.js +54 -0
- package/dist/flow/inspect.js.map +1 -0
- package/dist/flow/neighbors.d.ts +10 -0
- package/dist/flow/neighbors.d.ts.map +1 -0
- package/dist/flow/neighbors.js +48 -0
- package/dist/flow/neighbors.js.map +1 -0
- package/dist/flow/params.d.ts +21 -0
- package/dist/flow/params.d.ts.map +1 -0
- package/dist/flow/params.js +44 -0
- package/dist/flow/params.js.map +1 -0
- package/dist/flow/types.d.ts +159 -0
- package/dist/flow/types.d.ts.map +1 -0
- package/dist/flow/types.js +33 -0
- package/dist/flow/types.js.map +1 -0
- package/dist/flow-editor/index.d.ts +9 -0
- package/dist/flow-editor/index.d.ts.map +1 -0
- package/dist/flow-editor/index.js +6 -0
- package/dist/flow-editor/index.js.map +1 -0
- package/dist/flow-editor/llm.d.ts +33 -0
- package/dist/flow-editor/llm.d.ts.map +1 -0
- package/dist/flow-editor/llm.js +137 -0
- package/dist/flow-editor/llm.js.map +1 -0
- package/dist/flow-editor/names.d.ts +5 -0
- package/dist/flow-editor/names.d.ts.map +1 -0
- package/dist/flow-editor/names.js +21 -0
- package/dist/flow-editor/names.js.map +1 -0
- package/dist/flow-editor/save.d.ts +59 -0
- package/dist/flow-editor/save.d.ts.map +1 -0
- package/dist/flow-editor/save.js +143 -0
- package/dist/flow-editor/save.js.map +1 -0
- package/dist/flow-editor/tui.d.ts +56 -0
- package/dist/flow-editor/tui.d.ts.map +1 -0
- package/dist/flow-editor/tui.js +628 -0
- package/dist/flow-editor/tui.js.map +1 -0
- package/dist/flow-editor/validate.d.ts +39 -0
- package/dist/flow-editor/validate.d.ts.map +1 -0
- package/dist/flow-editor/validate.js +192 -0
- package/dist/flow-editor/validate.js.map +1 -0
- package/dist/git-info.d.ts +6 -0
- package/dist/git-info.d.ts.map +1 -0
- package/dist/git-info.js +26 -0
- package/dist/git-info.js.map +1 -0
- package/dist/orchestrator.d.ts +55 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +240 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/preflight.d.ts +30 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +107 -0
- package/dist/preflight.js.map +1 -0
- package/dist/preview-panel.d.ts +87 -0
- package/dist/preview-panel.d.ts.map +1 -0
- package/dist/preview-panel.js +418 -0
- package/dist/preview-panel.js.map +1 -0
- package/dist/prompts.d.ts +34 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +67 -0
- package/dist/prompts.js.map +1 -0
- package/dist/providers/base-completion.d.ts +56 -0
- package/dist/providers/base-completion.d.ts.map +1 -0
- package/dist/providers/base-completion.js +111 -0
- package/dist/providers/base-completion.js.map +1 -0
- package/dist/providers/claude/completion.d.ts +28 -0
- package/dist/providers/claude/completion.d.ts.map +1 -0
- package/dist/providers/claude/completion.js +103 -0
- package/dist/providers/claude/completion.js.map +1 -0
- package/dist/providers/claude/index.d.ts +2 -0
- package/dist/providers/claude/index.d.ts.map +1 -0
- package/dist/providers/claude/index.js +2 -0
- package/dist/providers/claude/index.js.map +1 -0
- package/dist/providers/claude/session.d.ts +55 -0
- package/dist/providers/claude/session.d.ts.map +1 -0
- package/dist/providers/claude/session.js +172 -0
- package/dist/providers/claude/session.js.map +1 -0
- package/dist/providers/claude/strategy.d.ts +14 -0
- package/dist/providers/claude/strategy.d.ts.map +1 -0
- package/dist/providers/claude/strategy.js +38 -0
- package/dist/providers/claude/strategy.js.map +1 -0
- package/dist/providers/codex/completion.d.ts +21 -0
- package/dist/providers/codex/completion.d.ts.map +1 -0
- package/dist/providers/codex/completion.js +63 -0
- package/dist/providers/codex/completion.js.map +1 -0
- package/dist/providers/codex/index.d.ts +2 -0
- package/dist/providers/codex/index.d.ts.map +1 -0
- package/dist/providers/codex/index.js +2 -0
- package/dist/providers/codex/index.js.map +1 -0
- package/dist/providers/codex/session.d.ts +46 -0
- package/dist/providers/codex/session.d.ts.map +1 -0
- package/dist/providers/codex/session.js +151 -0
- package/dist/providers/codex/session.js.map +1 -0
- package/dist/providers/codex/strategy.d.ts +14 -0
- package/dist/providers/codex/strategy.d.ts.map +1 -0
- package/dist/providers/codex/strategy.js +41 -0
- package/dist/providers/codex/strategy.js.map +1 -0
- package/dist/providers/copilot/completion.d.ts +22 -0
- package/dist/providers/copilot/completion.d.ts.map +1 -0
- package/dist/providers/copilot/completion.js +65 -0
- package/dist/providers/copilot/completion.js.map +1 -0
- package/dist/providers/copilot/index.d.ts +2 -0
- package/dist/providers/copilot/index.d.ts.map +1 -0
- package/dist/providers/copilot/index.js +2 -0
- package/dist/providers/copilot/index.js.map +1 -0
- package/dist/providers/copilot/session.d.ts +39 -0
- package/dist/providers/copilot/session.d.ts.map +1 -0
- package/dist/providers/copilot/session.js +185 -0
- package/dist/providers/copilot/session.js.map +1 -0
- package/dist/providers/copilot/strategy.d.ts +14 -0
- package/dist/providers/copilot/strategy.d.ts.map +1 -0
- package/dist/providers/copilot/strategy.js +48 -0
- package/dist/providers/copilot/strategy.js.map +1 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +6 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/invoke.d.ts +14 -0
- package/dist/providers/invoke.d.ts.map +1 -0
- package/dist/providers/invoke.js +55 -0
- package/dist/providers/invoke.js.map +1 -0
- package/dist/providers/path-utils.d.ts +7 -0
- package/dist/providers/path-utils.d.ts.map +1 -0
- package/dist/providers/path-utils.js +9 -0
- package/dist/providers/path-utils.js.map +1 -0
- package/dist/providers/prompt-file.d.ts +8 -0
- package/dist/providers/prompt-file.d.ts.map +1 -0
- package/dist/providers/prompt-file.js +17 -0
- package/dist/providers/prompt-file.js.map +1 -0
- package/dist/providers/registry.d.ts +17 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +49 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +145 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +5 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/version.d.ts +11 -0
- package/dist/providers/version.d.ts.map +1 -0
- package/dist/providers/version.js +31 -0
- package/dist/providers/version.js.map +1 -0
- package/dist/pty/exit.d.ts +12 -0
- package/dist/pty/exit.d.ts.map +1 -0
- package/dist/pty/exit.js +43 -0
- package/dist/pty/exit.js.map +1 -0
- package/dist/pty/spawn.d.ts +20 -0
- package/dist/pty/spawn.d.ts.map +1 -0
- package/dist/pty/spawn.js +163 -0
- package/dist/pty/spawn.js.map +1 -0
- package/dist/pty/types.d.ts +44 -0
- package/dist/pty/types.d.ts.map +1 -0
- package/dist/pty/types.js +2 -0
- package/dist/pty/types.js.map +1 -0
- package/dist/session/dir.d.ts +19 -0
- package/dist/session/dir.d.ts.map +1 -0
- package/dist/session/dir.js +31 -0
- package/dist/session/dir.js.map +1 -0
- package/dist/session/locator.d.ts +28 -0
- package/dist/session/locator.d.ts.map +1 -0
- package/dist/session/locator.js +88 -0
- package/dist/session/locator.js.map +1 -0
- package/dist/session/reader.d.ts +12 -0
- package/dist/session/reader.d.ts.map +1 -0
- package/dist/session/reader.js +94 -0
- package/dist/session/reader.js.map +1 -0
- package/dist/startup-tui.d.ts +75 -0
- package/dist/startup-tui.d.ts.map +1 -0
- package/dist/startup-tui.js +504 -0
- package/dist/startup-tui.js.map +1 -0
- package/dist/status-bar.d.ts +29 -0
- package/dist/status-bar.d.ts.map +1 -0
- package/dist/status-bar.js +135 -0
- package/dist/status-bar.js.map +1 -0
- package/dist/terminal-input.d.ts +51 -0
- package/dist/terminal-input.d.ts.map +1 -0
- package/dist/terminal-input.js +212 -0
- package/dist/terminal-input.js.map +1 -0
- package/dist/user/dsl.d.ts +13 -0
- package/dist/user/dsl.d.ts.map +1 -0
- package/dist/user/dsl.js +19 -0
- package/dist/user/dsl.js.map +1 -0
- package/dist/user/handler.d.ts +16 -0
- package/dist/user/handler.d.ts.map +1 -0
- package/dist/user/handler.js +49 -0
- package/dist/user/handler.js.map +1 -0
- package/dist/user/index.d.ts +5 -0
- package/dist/user/index.d.ts.map +1 -0
- package/dist/user/index.js +4 -0
- package/dist/user/index.js.map +1 -0
- package/dist/user/prompt.d.ts +86 -0
- package/dist/user/prompt.d.ts.map +1 -0
- package/dist/user/prompt.js +320 -0
- package/dist/user/prompt.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +50 -0
- package/schemas/review-verdict.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
# poly-weaver
|
|
2
|
+
|
|
3
|
+
Orchestrates pluggable AI coding agents in iterative plan-review loops.
|
|
4
|
+
|
|
5
|
+
poly-weaver spawns AI CLI tools (Claude Code, Codex CLI, GitHub Copilot CLI) via PTY and drives them through a declarative **Flow DSL** that defines the workflow as composable steps. A planner agent drafts a plan, a reviewer agent evaluates it, and the user can intervene at each checkpoint. Once approved, an implementor agent executes the plan with its own review cycle. A simplifier agent can optionally refine the result after implementation. All inter-step data flows through an artifact-based system — steps declare what they read and write, and data is exchanged via a shared artifact store.
|
|
6
|
+
|
|
7
|
+
## How it works
|
|
8
|
+
|
|
9
|
+
The default flow uses a **two-layered loop** structure:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Task
|
|
13
|
+
│
|
|
14
|
+
▼
|
|
15
|
+
┌─── Outer loop (user feedback) ──────────────────────────────────┐
|
|
16
|
+
│ │
|
|
17
|
+
│ ┌──────────┐ ┌──────────────┐ │
|
|
18
|
+
│ │ Planner │──▶│ User review │──▶ accept / give feedback │
|
|
19
|
+
│ └──────────┘ └──────────────┘ │ │
|
|
20
|
+
│ ▲ │ feedback │ accept │
|
|
21
|
+
│ └──────────────────┘ ▼ │
|
|
22
|
+
│ ┌─── Inner loop ──────────┐ │
|
|
23
|
+
│ │ Plan ──▶ Review │ │
|
|
24
|
+
│ │ ▲ rejected │ │ │
|
|
25
|
+
│ │ └──────────────┘ │ │
|
|
26
|
+
│ │ │ approved │ │
|
|
27
|
+
│ └─────────┼────────────────┘ │
|
|
28
|
+
│ ▼ │
|
|
29
|
+
│ ┌──────────────┐ │
|
|
30
|
+
│ │ User approve │──▶ restart / ok │
|
|
31
|
+
│ └──────────────┘ │
|
|
32
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
33
|
+
│ ok
|
|
34
|
+
▼
|
|
35
|
+
┌─── Impl loop ──────────────┐
|
|
36
|
+
│ Implement ──▶ Review │
|
|
37
|
+
│ ▲ rejected │ │
|
|
38
|
+
│ └───────────────┘ │
|
|
39
|
+
│ │ approved │
|
|
40
|
+
└──────────┼──────────────────┘
|
|
41
|
+
▼
|
|
42
|
+
Done
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
In **auto mode** (`--auto`), user review steps are skipped — the reviewer loop alone decides approval. The startup TUI renders a live ASCII flow diagram reflecting the configured mode.
|
|
46
|
+
|
|
47
|
+
### "Why So Serious" workflow
|
|
48
|
+
|
|
49
|
+
The **why-so-serious** workflow (selectable via Shift+Tab in the TUI) extends the default flow with two additions:
|
|
50
|
+
|
|
51
|
+
1. **Conditional re-planning** — if the implementation reviewer finds more than 2 issues, a planner step runs before the next implementation attempt to draft a targeted fix plan. When issues are within threshold, the implementor revises normally.
|
|
52
|
+
2. **Simplification pass** — after the implementation loop is approved, a simplifier agent reviews the codebase and produces a simplification plan, which the implementor then applies.
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
Default impl loop Why-so-serious impl loop
|
|
56
|
+
──────────────── ────────────────────────
|
|
57
|
+
Implement → Review issues > 2 ? → Planner (fix plan)
|
|
58
|
+
↑ rejected │ Implement → Review
|
|
59
|
+
└────────────┘ ↑ rejected │
|
|
60
|
+
│ approved └────────────┘
|
|
61
|
+
▼ │ approved
|
|
62
|
+
Done ▼
|
|
63
|
+
Simplifier → Implement
|
|
64
|
+
▼
|
|
65
|
+
Done
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Custom flows
|
|
69
|
+
|
|
70
|
+
Custom flows live in `~/.poly-weaver/flows/` as `.mjs` files. Each file exports a factory function that receives the DSL toolkit and returns a flow template:
|
|
71
|
+
|
|
72
|
+
```js
|
|
73
|
+
// ~/.poly-weaver/flows/my-flow.mjs
|
|
74
|
+
export default function (dsl) {
|
|
75
|
+
const { defineFlow, loop, artifactData, plan, review, TASK } = dsl;
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
name: "my-flow",
|
|
79
|
+
params: [
|
|
80
|
+
{ key: "planner", type: "driver", role: "planner", label: "Planner", default: "claude" },
|
|
81
|
+
{ key: "reviewer", type: "driver", role: "reviewer", label: "Reviewer", default: "codex" },
|
|
82
|
+
{ key: "maxIterations", type: "number", label: "Max Iterations", default: 5, min: 1, max: 50 },
|
|
83
|
+
],
|
|
84
|
+
build(values) {
|
|
85
|
+
return defineFlow("my-flow", [
|
|
86
|
+
loop(values.maxIterations, artifactData("verdict", "approved"), [
|
|
87
|
+
plan({ driver: values.planner, reads: { task: TASK, verdict: "verdict" }, writes: { plan: "plan" } }),
|
|
88
|
+
review({ driver: values.reviewer, variant: "plan", reads: { task: TASK, plan: "plan" }, writes: { verdict: "verdict" } }),
|
|
89
|
+
]),
|
|
90
|
+
]);
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The DSL toolkit is imported via `poly-weaver/dsl` and includes all step builders (`plan`, `review`, `implement`, `simplify`, `user`), loop/predicate helpers, and the `TASK` constant. Use `create-flow` and `modify-flow` subcommands for LLM-assisted authoring. See [`src/flow/custom/AUTHORING.md`](src/flow/custom/AUTHORING.md) for the full DSL reference.
|
|
97
|
+
|
|
98
|
+
Each agent is a real CLI process (Claude Code, Codex, or GitHub Copilot) running in a pseudo-terminal. poly-weaver reads their session files to detect completion, extract responses, and feed feedback.
|
|
99
|
+
|
|
100
|
+
## Installation
|
|
101
|
+
|
|
102
|
+
### Prerequisites
|
|
103
|
+
|
|
104
|
+
- Node.js 18+
|
|
105
|
+
- A C++ toolchain for [node-pty](https://github.com/nicktomlin/node-pty):
|
|
106
|
+
- **Windows** — Visual Studio Build Tools
|
|
107
|
+
- **macOS** — Xcode Command Line Tools
|
|
108
|
+
- **Linux** — `build-essential`
|
|
109
|
+
- At least one supported AI CLI installed and authenticated:
|
|
110
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — `npm install -g @anthropic-ai/claude-code`
|
|
111
|
+
- [Codex CLI](https://github.com/openai/codex) — `npm install -g @openai/codex`
|
|
112
|
+
- [GitHub Copilot CLI](https://github.com/github/copilot-cli) — `winget install GitHub.CopilotCLI`
|
|
113
|
+
|
|
114
|
+
### Install from GitHub Packages
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npm install -g poly-weaver
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Install from source
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
git clone https://github.com/gim-home/poly-weaver.git
|
|
124
|
+
cd poly-weaver
|
|
125
|
+
npm install # installs dependencies and builds automatically
|
|
126
|
+
npm link # registers the `poly-weaver` command globally
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Uninstall
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm uninstall -g poly-weaver
|
|
133
|
+
# or if installed from source:
|
|
134
|
+
npm unlink -g poly-weaver
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Usage
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
poly-weaver
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
This opens an interactive TUI to configure the task, select providers for each role, and set options before starting the orchestration loop.
|
|
144
|
+
|
|
145
|
+
You can also pass arguments directly:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Pass a task directly
|
|
149
|
+
poly-weaver "Refactor the auth module to use JWT"
|
|
150
|
+
|
|
151
|
+
# Read task from a file
|
|
152
|
+
poly-weaver task.md
|
|
153
|
+
|
|
154
|
+
# Choose providers for each role
|
|
155
|
+
poly-weaver "Add unit tests" --planner claude --reviewer copilot --implementor claude
|
|
156
|
+
|
|
157
|
+
# Plan only (skip implementation)
|
|
158
|
+
poly-weaver "Design a caching layer" --plan-only
|
|
159
|
+
|
|
160
|
+
# Fully automated (no user checkpoints)
|
|
161
|
+
poly-weaver "Fix the login bug" --auto
|
|
162
|
+
|
|
163
|
+
# Opinionless mode — minimal prompts, agent decides the approach
|
|
164
|
+
poly-weaver "Refactor the auth module" --opinionless
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### CLI options
|
|
168
|
+
|
|
169
|
+
| Option | Description | Default |
|
|
170
|
+
|---|---|---|
|
|
171
|
+
| `[task]` | Task description or path to a `.md`/`.txt` file | _(interactive)_ |
|
|
172
|
+
| `--planner <cli>` | Provider for planning (`claude` \| `codex` \| `copilot`) | `claude` |
|
|
173
|
+
| `--reviewer <cli>` | Provider for reviewing (`claude` \| `codex` \| `copilot`) | `codex` |
|
|
174
|
+
| `--implementor <cli>` | Provider for implementation (`claude` \| `codex` \| `copilot`) | `claude` |
|
|
175
|
+
| `--simplifier <cli>` | Provider for simplification (`claude` \| `codex` \| `copilot`) | `claude` |
|
|
176
|
+
| `--max-iterations <n>` | Max plan-review cycles | `5` (range: 1–50) |
|
|
177
|
+
| `--max-impl-iterations <n>` | Max implementation-review cycles | `5` (range: 1–50) |
|
|
178
|
+
| `--auto` | Skip user review phases | `false` |
|
|
179
|
+
| `--plan-only` | Stop after plan approval, skip implementation | `false` |
|
|
180
|
+
| `--workdir <path>` | Working directory for agent CLIs | current directory |
|
|
181
|
+
| `--opinionless` | Use minimal prompts; let agents decide how to plan/review/implement | `false` |
|
|
182
|
+
| `--no-yolo` | Run agents without auto-approving permissions | `false` (agents run with permission-skipping) |
|
|
183
|
+
| `--whip-mode` / `--no-whip-mode` | Enable/disable neighbor awareness hints between agents | `false` |
|
|
184
|
+
| `--workflow <name>` | Workflow template to use | `default` |
|
|
185
|
+
| `--config <path>` | Path to a JSON config file | _(none)_ |
|
|
186
|
+
| `--verbose` | Preserve session files for debugging | `false` |
|
|
187
|
+
|
|
188
|
+
Workflow is selected via `--workflow <name>` or **Shift+Tab** in the TUI. Built-in workflows: `default`, `why-so-serious`. Custom flows are also available (see below).
|
|
189
|
+
|
|
190
|
+
### Subcommands
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
poly-weaver create-flow # LLM-assisted custom flow creation
|
|
194
|
+
poly-weaver modify-flow # Modify an existing custom flow
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Architecture
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
src/
|
|
201
|
+
├── cli.ts # Entry point, argument parsing (Commander)
|
|
202
|
+
├── orchestrator.ts # Builds flow from template, runs executor
|
|
203
|
+
├── config.ts # Config file loading, user config persistence
|
|
204
|
+
├── dsl.ts # DSL toolkit barrel for custom flows (poly-weaver/dsl)
|
|
205
|
+
├── prompts.ts # Shared prompt utilities (verdict schema, feedback derivation)
|
|
206
|
+
├── preflight.ts # CLI availability checks
|
|
207
|
+
├── startup-tui.ts # Interactive startup TUI with live flow diagram
|
|
208
|
+
├── preview-panel.ts # Shared TUI panel rendering (config fields, flow diagram)
|
|
209
|
+
├── status-bar.ts # Persistent status bar rendering
|
|
210
|
+
├── terminal-input.ts # Terminal input utilities
|
|
211
|
+
├── git-info.ts # Git branch/status detection
|
|
212
|
+
├── ansi.ts # Shared ANSI helpers
|
|
213
|
+
├── version.ts # App version constant
|
|
214
|
+
├── flow/
|
|
215
|
+
│ ├── types.ts # FlowStep, ArtifactStore, FlowTemplate, FlowParam
|
|
216
|
+
│ ├── dsl.ts # DSL helpers: defineFlow, loop, predicates
|
|
217
|
+
│ ├── executor.ts # Walks a FlowDefinition, runs steps
|
|
218
|
+
│ ├── neighbors.ts # Data-flow consumer map computation
|
|
219
|
+
│ ├── artifacts.ts # MapArtifactStore implementation
|
|
220
|
+
│ ├── params.ts # Flow param resolution (CLI > file > user > default)
|
|
221
|
+
│ ├── diagram.ts # ASCII flow diagram renderer for TUI
|
|
222
|
+
│ ├── inspect.ts # Flow definition introspection utilities
|
|
223
|
+
│ ├── index.ts # Re-exports
|
|
224
|
+
│ ├── built-in/
|
|
225
|
+
│ │ ├── default.ts # Default two-layered flow template
|
|
226
|
+
│ │ └── why-so-serious.ts # Why-so-serious flow template (conditional replan + simplify)
|
|
227
|
+
│ └── custom/
|
|
228
|
+
│ ├── load.ts # Custom flow loader (discovers ~/.poly-weaver/flows/*.mjs)
|
|
229
|
+
│ ├── index.ts # Re-exports
|
|
230
|
+
│ └── AUTHORING.md # Full DSL reference for custom flow authors
|
|
231
|
+
├── flow-editor/
|
|
232
|
+
│ ├── tui.ts # Flow editor TUI (create/modify modes)
|
|
233
|
+
│ ├── llm.ts # LLM prompt builders and code generation
|
|
234
|
+
│ ├── validate.ts # Flow code validation pipeline
|
|
235
|
+
│ ├── save.ts # Flow file persistence with backup
|
|
236
|
+
│ ├── names.ts # Random flow name generator
|
|
237
|
+
│ └── index.ts # Re-exports
|
|
238
|
+
├── agents/
|
|
239
|
+
│ ├── registry.ts # Role registry: registerRole, createHandler
|
|
240
|
+
│ ├── runner.ts # AgentRunner — shared spawn→detect→exit lifecycle
|
|
241
|
+
│ ├── whip-hint.ts # Whip mode hint builder
|
|
242
|
+
│ ├── index.ts # Registers built-in providers, re-exports DSL helpers
|
|
243
|
+
│ ├── planners/
|
|
244
|
+
│ │ ├── prompts.ts # Planner prompt builders and prompt sets
|
|
245
|
+
│ │ ├── dsl.ts # plan() DSL helper
|
|
246
|
+
│ │ ├── handler.ts # PlannerRoleHandler (artifact ↔ driver bridge)
|
|
247
|
+
│ │ ├── adapter.ts # PlannerAdapter (driver ↔ provider bridge)
|
|
248
|
+
│ │ ├── types.ts # PlannerDriver interface
|
|
249
|
+
│ │ └── index.ts # Self-registers into role registry
|
|
250
|
+
│ ├── reviewers/ # Same structure + prompts.ts
|
|
251
|
+
│ ├── implementors/ # Same structure + prompts.ts
|
|
252
|
+
│ └── simplifiers/ # Same structure + prompts.ts
|
|
253
|
+
├── user/
|
|
254
|
+
│ ├── dsl.ts # user() DSL helper for user-review steps
|
|
255
|
+
│ ├── handler.ts # User checkpoint handler
|
|
256
|
+
│ ├── prompt.ts # User prompt rendering
|
|
257
|
+
│ └── index.ts # Re-exports
|
|
258
|
+
├── providers/
|
|
259
|
+
│ ├── types.ts # ProviderStrategy, SessionHandler, CompletionDetector
|
|
260
|
+
│ ├── registry.ts # Built-in provider registry (name → strategy)
|
|
261
|
+
│ ├── invoke.ts # Non-interactive provider invocation
|
|
262
|
+
│ ├── base-completion.ts # Shared completion detection logic
|
|
263
|
+
│ ├── prompt-file.ts # Prompt file writing utilities
|
|
264
|
+
│ ├── path-utils.ts # Path helpers
|
|
265
|
+
│ ├── index.ts # Re-exports all provider strategies
|
|
266
|
+
│ ├── claude/
|
|
267
|
+
│ │ ├── strategy.ts # ClaudeStrategy
|
|
268
|
+
│ │ ├── session.ts # Claude session file handling
|
|
269
|
+
│ │ ├── completion.ts # Claude completion detection
|
|
270
|
+
│ │ └── index.ts
|
|
271
|
+
│ ├── codex/
|
|
272
|
+
│ │ ├── strategy.ts # CodexStrategy
|
|
273
|
+
│ │ ├── session.ts # Codex session file handling
|
|
274
|
+
│ │ ├── completion.ts # Codex completion detection
|
|
275
|
+
│ │ └── index.ts
|
|
276
|
+
│ └── copilot/
|
|
277
|
+
│ ├── strategy.ts # CopilotStrategy
|
|
278
|
+
│ ├── session.ts # Copilot session file handling
|
|
279
|
+
│ ├── completion.ts # Copilot completion detection
|
|
280
|
+
│ └── index.ts
|
|
281
|
+
├── session/
|
|
282
|
+
│ ├── dir.ts # Session temp directory lifecycle
|
|
283
|
+
│ ├── reader.ts # JSONL session file parser
|
|
284
|
+
│ └── locator.ts # Session file discovery
|
|
285
|
+
└── pty/
|
|
286
|
+
├── spawn.ts # PTY spawning (node-pty)
|
|
287
|
+
├── exit.ts # Exit signal handling
|
|
288
|
+
└── types.ts # PTY-related types
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Opinionless mode
|
|
292
|
+
|
|
293
|
+
By default, poly-weaver prompts include prescriptive criteria for each role — evaluation rubrics for reviewers, structural requirements for planners, step-by-step instructions for implementors.
|
|
294
|
+
|
|
295
|
+
With `--opinionless`, prompts are stripped to the structural minimum: file path references and the verdict output schema. The agent decides how to approach its role. The verdict schema is also simplified — each issue only requires a `description`, with `category` and `severity` left to the agent's discretion.
|
|
296
|
+
|
|
297
|
+
This is useful when the AI agent has its own strong conventions, or when you want to compare agent behavior with and without prescriptive guidance.
|
|
298
|
+
|
|
299
|
+
### Whip mode
|
|
300
|
+
|
|
301
|
+
With `--whip-mode`, each agent receives a hint describing who produced its input and who will consume its output. For example, a planner might see:
|
|
302
|
+
|
|
303
|
+
> The previous step was performed by Claude. Codex will review your plan.
|
|
304
|
+
|
|
305
|
+
Hints are suppressed when neighbors use the same provider — telling Claude that Claude produced the input is not actionable. This means whip mode only adds value in **mixed-provider workflows** where agents benefit from knowing their neighbors' capabilities and conventions.
|
|
306
|
+
|
|
307
|
+
Toggle it in the TUI or pass `--whip-mode` / `--no-whip-mode` on the command line.
|
|
308
|
+
|
|
309
|
+
### Registry + Handler + Adapter + Runner
|
|
310
|
+
|
|
311
|
+
The agent system has four layers:
|
|
312
|
+
|
|
313
|
+
- **Role Registry** (`src/agents/registry.ts`) — maps role names (planner, reviewer, implementor) to role modules. Each module self-registers on import and exposes `createHandler()` and `availableDrivers()`.
|
|
314
|
+
- **Role Handlers** (e.g. `PlannerRoleHandler`) — bridge the artifact store and the driver interface. They read artifacts declared in the step's `reads`, call the driver, and write results to the step's `writes`.
|
|
315
|
+
- **Role Adapters** (e.g. `PlannerAdapter`) — implement the driver interface by translating role-specific calls into generic agent runs with the appropriate prompts and file routing. Each adapter wraps a `ProviderStrategy`.
|
|
316
|
+
- **`AgentRunner`** — executes the shared lifecycle: snapshot session files → spawn PTY → detect completion → extract response → exit. Accepts any `ProviderStrategy`.
|
|
317
|
+
|
|
318
|
+
DSL helpers (`plan()`, `review()`, `implement()`, `simplify()`, `user()`) create flow step definitions. The executor walks the flow and uses the registry to instantiate handlers, which delegate to adapters, which delegate to the runner.
|
|
319
|
+
|
|
320
|
+
For programmatic use outside flows, `invoke(provider, prompt, workdir)` in `src/providers/invoke.ts` offers one-shot non-interactive provider invocation — resolve provider, spawn PTY, detect completion, return response text.
|
|
321
|
+
|
|
322
|
+
### Artifact system
|
|
323
|
+
|
|
324
|
+
Steps declare what they read and write via `reads` and `writes` mappings (e.g. `reads: { task: "task", verdict: "verdict" }`). Data flows through a shared in-memory `ArtifactStore` — a `Map<string, Artifact>` where each artifact can carry:
|
|
325
|
+
|
|
326
|
+
- `file` — path to an artifact file on disk (in the session temp directory)
|
|
327
|
+
- `text` — human-readable content
|
|
328
|
+
- `data` — parsed structured data (for predicates to inspect programmatically)
|
|
329
|
+
- `meta` — metadata (e.g. source, version)
|
|
330
|
+
|
|
331
|
+
## Adding a provider
|
|
332
|
+
|
|
333
|
+
1. Implement `ProviderStrategy`, `SessionHandler`, and `CompletionDetector` (see `src/providers/types.ts`)
|
|
334
|
+
2. Register the provider strategy with each role module:
|
|
335
|
+
|
|
336
|
+
```ts
|
|
337
|
+
import * as planners from "./agents/planners/index.js";
|
|
338
|
+
import * as reviewers from "./agents/reviewers/index.js";
|
|
339
|
+
import * as implementors from "./agents/implementors/index.js";
|
|
340
|
+
import * as simplifiers from "./agents/simplifiers/index.js";
|
|
341
|
+
|
|
342
|
+
const myProvider = new MyStrategy();
|
|
343
|
+
planners.registerProvider("my-cli", myProvider);
|
|
344
|
+
reviewers.registerProvider("my-cli", myProvider);
|
|
345
|
+
implementors.registerProvider("my-cli", myProvider);
|
|
346
|
+
simplifiers.registerProvider("my-cli", myProvider);
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## Adding a role
|
|
350
|
+
|
|
351
|
+
1. Create six files in `src/agents/<role>/`:
|
|
352
|
+
|
|
353
|
+
| File | Purpose |
|
|
354
|
+
|------|---------|
|
|
355
|
+
| `types.ts` | Driver interface, run options, and result types |
|
|
356
|
+
| `prompts.ts` | Role-specific prompt builders and prompt sets |
|
|
357
|
+
| `adapter.ts` | Extends `BaseAdapter`; bridges the driver to `AgentRunner` via prompt selection |
|
|
358
|
+
| `handler.ts` | Implements `RoleHandler`; orchestrates artifacts, retry, and session state |
|
|
359
|
+
| `dsl.ts` | DSL helper (e.g. `myRole()`) that wraps `agentStep()` with role defaults |
|
|
360
|
+
| `index.ts` | Module entry — calls `createRoleModule()`, exports DSL helper and `registerProvider` |
|
|
361
|
+
|
|
362
|
+
2. Wire the role into the system (2 edits):
|
|
363
|
+
- **`src/agents/index.ts`** — add a side-effect import (`import "./<role>/index.js"`) and re-export the DSL helper
|
|
364
|
+
- **`src/flow/types.ts`** — add the role name to the `BuiltinRole` union
|
|
365
|
+
|
|
366
|
+
3. Use the DSL helper in a flow:
|
|
367
|
+
|
|
368
|
+
```ts
|
|
369
|
+
import { myRole } from "./agents/index.js";
|
|
370
|
+
|
|
371
|
+
const steps = [
|
|
372
|
+
myRole({ driver: "claude", reads: { task: "task" }, writes: { output: "result" } }),
|
|
373
|
+
];
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
## Development
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
npm run build # Compile TypeScript
|
|
380
|
+
npm run dev # Run via tsx (no build step)
|
|
381
|
+
npm test # Run unit tests (vitest)
|
|
382
|
+
npm run test:e2e # Run end-to-end tests
|
|
383
|
+
npm run typecheck # Type-check without emitting
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
## License
|
|
387
|
+
|
|
388
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ImplementorDriver, ImplementResult, ImplementorPromptSet } from "./types.js";
|
|
2
|
+
import type { StepMeta } from "../../flow/types.js";
|
|
3
|
+
import type { ProviderStrategy } from "../../providers/types.js";
|
|
4
|
+
import { BaseAdapter } from "../runner.js";
|
|
5
|
+
type ImplementorRunOptions = {
|
|
6
|
+
resumeSessionId?: string;
|
|
7
|
+
feedbackFile?: string;
|
|
8
|
+
producers?: Record<string, StepMeta>;
|
|
9
|
+
consumers?: Record<string, StepMeta[]>;
|
|
10
|
+
};
|
|
11
|
+
export declare function selectImplementorPrompt(planFile: string, opts: ImplementorRunOptions, prompts?: ImplementorPromptSet): string;
|
|
12
|
+
export declare class ImplementorAdapter extends BaseAdapter implements ImplementorDriver {
|
|
13
|
+
private readonly prompts?;
|
|
14
|
+
constructor(strategy: ProviderStrategy, workdir: string, prompts?: ImplementorPromptSet | undefined, yolo?: boolean);
|
|
15
|
+
run(planFile: string, opts?: ImplementorRunOptions): Promise<ImplementResult>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/agents/implementors/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,KAAK,qBAAqB,GAAG;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;CACxC,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,qBAAqB,EAC3B,OAAO,GAAE,oBAAgD,GACxD,MAAM,CAQR;AAED,qBAAa,kBAAmB,SAAQ,WAAY,YAAW,iBAAiB;IAI5E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFzB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,EACE,OAAO,CAAC,EAAE,oBAAoB,YAAA,EAC/C,IAAI,CAAC,EAAE,OAAO;IAKV,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,eAAe,CAAC;CAiB5B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseAdapter } from "../runner.js";
|
|
2
|
+
import { buildAgentWhipHint } from "../whip-hint.js";
|
|
3
|
+
import { defaultImplementorPrompts } from "./prompts.js";
|
|
4
|
+
export function selectImplementorPrompt(planFile, opts, prompts = defaultImplementorPrompts) {
|
|
5
|
+
if (opts.feedbackFile) {
|
|
6
|
+
if (opts.resumeSessionId) {
|
|
7
|
+
return prompts.resumeRevision(opts.feedbackFile);
|
|
8
|
+
}
|
|
9
|
+
return prompts.revision(planFile, opts.feedbackFile);
|
|
10
|
+
}
|
|
11
|
+
return prompts.initial(planFile);
|
|
12
|
+
}
|
|
13
|
+
export class ImplementorAdapter extends BaseAdapter {
|
|
14
|
+
prompts;
|
|
15
|
+
constructor(strategy, workdir, prompts, yolo) {
|
|
16
|
+
super(strategy, workdir, yolo);
|
|
17
|
+
this.prompts = prompts;
|
|
18
|
+
}
|
|
19
|
+
async run(planFile, opts = {}) {
|
|
20
|
+
const rawPrompt = selectImplementorPrompt(planFile, opts, this.prompts);
|
|
21
|
+
const hint = buildAgentWhipHint(this.strategy.name, opts, "implementation");
|
|
22
|
+
const prompt = this.applyWhipHint(hint, rawPrompt);
|
|
23
|
+
const result = await this.runAgent({
|
|
24
|
+
prompt,
|
|
25
|
+
workdir: this.workdir,
|
|
26
|
+
resumeSessionId: opts.resumeSessionId,
|
|
27
|
+
sessionFilePath: this.sessionFilePath,
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
sessionId: result.sessionId,
|
|
31
|
+
rawText: result.responseText,
|
|
32
|
+
agentUsed: this.name,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/agents/implementors/adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AASzD,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAA2B,EAC3B,UAAgC,yBAAyB;IAEzD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAI9B;IAHnB,YACE,QAA0B,EAC1B,OAAe,EACE,OAA8B,EAC/C,IAAc;QAEd,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAHd,YAAO,GAAP,OAAO,CAAuB;IAIjD,CAAC;IAED,KAAK,CAAC,GAAG,CACP,QAAgB,EAChB,OAA8B,EAAE;QAEhC,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;YACjC,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,SAAS,EAAE,IAAI,CAAC,IAAI;SACrB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type PhaseLabelSpec } from "../../flow/dsl.js";
|
|
2
|
+
import type { AgentStep } from "../../flow/types.js";
|
|
3
|
+
export declare function implement(opts: {
|
|
4
|
+
driver: string;
|
|
5
|
+
reads: Record<string, string>;
|
|
6
|
+
writes?: Record<string, string>;
|
|
7
|
+
id?: string;
|
|
8
|
+
feedbackToTask?: boolean;
|
|
9
|
+
phaseLabel?: PhaseLabelSpec;
|
|
10
|
+
}): AgentStep;
|
|
11
|
+
//# sourceMappingURL=dsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.d.ts","sourceRoot":"","sources":["../../../src/agents/implementors/dsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B,GAAG,SAAS,CAMZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../../src/agents/implementors/dsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,mBAAmB,CAAC;AAGnE,MAAM,UAAU,SAAS,CAAC,IAOzB;IACC,OAAO,SAAS,CAAC,aAAa,EAAE;QAC9B,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,oBAAoB;KACjC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ImplementorDriver } from "./types.js";
|
|
2
|
+
import { type BaseStep, type StepContext, type StepSignal, type RetryFn, type RoleHandler } from "../../flow/types.js";
|
|
3
|
+
export declare class ImplementorRoleHandler implements RoleHandler {
|
|
4
|
+
private driver;
|
|
5
|
+
/** Tracks the last execution mode per step ID for session invalidation. */
|
|
6
|
+
private lastModeByStep;
|
|
7
|
+
constructor(driver: ImplementorDriver);
|
|
8
|
+
execute(step: BaseStep, ctx: StepContext, retry: RetryFn): Promise<StepSignal>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/agents/implementors/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,sBAAuB,YAAW,WAAW;IAI5C,OAAO,CAAC,MAAM;IAH1B,2EAA2E;IAC3E,OAAO,CAAC,cAAc,CAA+C;gBAEjD,MAAM,EAAE,iBAAiB;IAEvC,OAAO,CACX,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,CAAC;CAqDvB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { resolveWhipNeighbors, } from "../../flow/types.js";
|
|
2
|
+
export class ImplementorRoleHandler {
|
|
3
|
+
driver;
|
|
4
|
+
/** Tracks the last execution mode per step ID for session invalidation. */
|
|
5
|
+
lastModeByStep = new Map();
|
|
6
|
+
constructor(driver) {
|
|
7
|
+
this.driver = driver;
|
|
8
|
+
}
|
|
9
|
+
async execute(step, ctx, retry) {
|
|
10
|
+
// Check for revise-plan (pure plan follower mode)
|
|
11
|
+
const revisePlanFile = step.reads.revisePlan
|
|
12
|
+
? ctx.artifacts.getFile(step.reads.revisePlan)
|
|
13
|
+
: undefined;
|
|
14
|
+
const currentMode = revisePlanFile ? "revise-plan" : "normal";
|
|
15
|
+
const lastMode = this.lastModeByStep.get(step.id);
|
|
16
|
+
let planFile;
|
|
17
|
+
let feedbackFile;
|
|
18
|
+
let resumeSessionId;
|
|
19
|
+
if (revisePlanFile) {
|
|
20
|
+
// Pure plan follower: revise-plan only, no verdict, fresh session.
|
|
21
|
+
planFile = revisePlanFile;
|
|
22
|
+
feedbackFile = undefined;
|
|
23
|
+
resumeSessionId = undefined;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Normal mode: original plan + verdict feedback
|
|
27
|
+
const basePlanFile = ctx.artifacts.getFile(step.reads.plan);
|
|
28
|
+
if (!basePlanFile)
|
|
29
|
+
throw new Error("ImplementorRoleHandler: plan artifact missing");
|
|
30
|
+
planFile = basePlanFile;
|
|
31
|
+
const verdictArtifact = step.reads.verdict
|
|
32
|
+
? ctx.artifacts.get(step.reads.verdict) : undefined;
|
|
33
|
+
feedbackFile = verdictArtifact?.file;
|
|
34
|
+
// Resume only if previous invocation was also in normal mode (or first time).
|
|
35
|
+
resumeSessionId = (lastMode === undefined || lastMode === "normal")
|
|
36
|
+
? ctx.sessionIds.get(step.id)
|
|
37
|
+
: undefined;
|
|
38
|
+
}
|
|
39
|
+
const { producers, consumers } = resolveWhipNeighbors(step, ctx);
|
|
40
|
+
const implResult = await retry("implementor", async (attempt) => {
|
|
41
|
+
return this.driver.run(planFile, {
|
|
42
|
+
resumeSessionId: attempt === 1 ? resumeSessionId : undefined,
|
|
43
|
+
feedbackFile: feedbackFile ?? undefined,
|
|
44
|
+
producers,
|
|
45
|
+
consumers,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
this.lastModeByStep.set(step.id, currentMode);
|
|
49
|
+
if (implResult.sessionId) {
|
|
50
|
+
ctx.sessionIds.set(step.id, implResult.sessionId);
|
|
51
|
+
}
|
|
52
|
+
return { kind: "continue" };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/agents/implementors/handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,GAMrB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,OAAO,sBAAsB;IAIb;IAHpB,2EAA2E;IACnE,cAAc,GAAG,IAAI,GAAG,EAAoC,CAAC;IAErE,YAAoB,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAEjD,KAAK,CAAC,OAAO,CACX,IAAc,EACd,GAAgB,EAChB,KAAc;QAEd,kDAAkD;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;YAC1C,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,WAAW,GACf,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,QAAgB,CAAC;QACrB,IAAI,YAAgC,CAAC;QACrC,IAAI,eAAmC,CAAC;QAExC,IAAI,cAAc,EAAE,CAAC;YACnB,mEAAmE;YACnE,QAAQ,GAAG,cAAc,CAAC;YAC1B,YAAY,GAAG,SAAS,CAAC;YACzB,eAAe,GAAG,SAAS,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACpF,QAAQ,GAAG,YAAY,CAAC;YACxB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;gBACxC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,YAAY,GAAG,eAAe,EAAE,IAAI,CAAC;YAErC,8EAA8E;YAC9E,eAAe,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,CAAC;gBACjE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC/B,eAAe,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;gBAC5D,YAAY,EAAE,YAAY,IAAI,SAAS;gBACvC,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAE9C,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProviderStrategy } from "../../providers/types.js";
|
|
2
|
+
import type { ImplementorDriver, ImplementorPromptSet } from "./types.js";
|
|
3
|
+
import type { DriverName } from "../../flow/types.js";
|
|
4
|
+
export { implement } from "./dsl.js";
|
|
5
|
+
export { ImplementorRoleHandler } from "./handler.js";
|
|
6
|
+
export type { ImplementorDriver, ImplementorPromptSet } from "./types.js";
|
|
7
|
+
export type ImplementorFactory = (workdir: string, prompts?: ImplementorPromptSet) => ImplementorDriver;
|
|
8
|
+
export declare const registerProvider: (name: DriverName, strategy: ProviderStrategy) => void;
|
|
9
|
+
export declare const registerFactory: (name: string, factory: ImplementorFactory) => void, availableDrivers: () => string[];
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/implementors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,iBAAiB,CAAC;AAexG,eAAO,MAAM,gBAAgB,EAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAC/G,eAAO,MAAQ,eAAe,uDAAE,gBAAgB,gBAAQ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ImplementorAdapter } from "./adapter.js";
|
|
2
|
+
import { ImplementorRoleHandler } from "./handler.js";
|
|
3
|
+
import { createRoleModule } from "../registry.js";
|
|
4
|
+
import { minimalImplementorPrompts } from "./prompts.js";
|
|
5
|
+
export { implement } from "./dsl.js";
|
|
6
|
+
export { ImplementorRoleHandler } from "./handler.js";
|
|
7
|
+
const mod = createRoleModule({
|
|
8
|
+
roleName: "implementor",
|
|
9
|
+
fromFactory: (factory, workdir, opts) => {
|
|
10
|
+
const prompts = opts?.opinionless ? minimalImplementorPrompts : undefined;
|
|
11
|
+
return factory(workdir, prompts);
|
|
12
|
+
},
|
|
13
|
+
fromProvider: (strategy, workdir, opts) => {
|
|
14
|
+
const prompts = opts?.opinionless ? minimalImplementorPrompts : undefined;
|
|
15
|
+
return new ImplementorAdapter(strategy, workdir, prompts, opts?.yolo);
|
|
16
|
+
},
|
|
17
|
+
toHandler: (driver) => new ImplementorRoleHandler(driver),
|
|
18
|
+
});
|
|
19
|
+
export const registerProvider = mod.registerProvider;
|
|
20
|
+
export const { registerFactory, availableDrivers } = mod;
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/implementors/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAoB,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAKtD,MAAM,GAAG,GAAG,gBAAgB,CAAwC;IAClE,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,OAAO,IAAI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC,gBAA0E,CAAC;AAC/G,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ImplementorPromptSet } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the initial implementor prompt.
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildImplementorPrompt(planFile: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Build the implementor revision prompt (when reviewer feedback was received).
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildImplementorRevisionPrompt(planFile: string, feedbackFile: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Build a lighter implementor revision prompt for resumed sessions.
|
|
12
|
+
* The agent already has task and plan context in-session.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildImplementorResumeRevisionPrompt(feedbackFile: string): string;
|
|
15
|
+
export declare function buildMinimalImplementorPrompt(planFile: string): string;
|
|
16
|
+
export declare function buildMinimalImplementorRevisionPrompt(planFile: string, feedbackFile: string): string;
|
|
17
|
+
export declare function buildMinimalImplementorResumeRevisionPrompt(feedbackFile: string): string;
|
|
18
|
+
export declare const defaultImplementorPrompts: ImplementorPromptSet;
|
|
19
|
+
export declare const minimalImplementorPrompts: ImplementorPromptSet;
|
|
20
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/implementors/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CASR;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAID,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAED,wBAAgB,2CAA2C,CACzD,YAAY,EAAE,MAAM,GACnB,MAAM,CAMR;AAID,eAAO,MAAM,yBAAyB,EAAE,oBAIvC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,oBAIvC,CAAC"}
|