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
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/** Append the "write plan to file" instruction when an output path is given. */
|
|
2
|
+
function appendOutputFileInstruction(lines, outputPlanFile, label = "complete plan") {
|
|
3
|
+
if (outputPlanFile) {
|
|
4
|
+
lines.push(`Write the ${label} markdown to this file: ${outputPlanFile}`);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Build the initial planner prompt.
|
|
9
|
+
* The planner reads the task from a file — this prompt tells it what to do.
|
|
10
|
+
*/
|
|
11
|
+
export function buildPlannerPrompt(taskFile, outputPlanFile) {
|
|
12
|
+
const lines = [
|
|
13
|
+
`Read the task description from the file: ${taskFile}`,
|
|
14
|
+
"",
|
|
15
|
+
"Create a detailed implementation plan for this task. Your plan should include:",
|
|
16
|
+
"- Architecture decisions and rationale",
|
|
17
|
+
"- Step-by-step implementation approach",
|
|
18
|
+
"- Key files to create or modify",
|
|
19
|
+
"- Potential risks and mitigations",
|
|
20
|
+
"",
|
|
21
|
+
];
|
|
22
|
+
appendOutputFileInstruction(lines, outputPlanFile);
|
|
23
|
+
lines.push("Do planning only. Do not implement code changes.");
|
|
24
|
+
return lines.join("\n");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build the revision planner prompt (when feedback was received).
|
|
28
|
+
*/
|
|
29
|
+
export function buildRevisionPrompt(taskFile, planFile, feedbackFile, source = "reviewer", outputPlanFile) {
|
|
30
|
+
const sourceLabel = source === "reviewer" ? "reviewer's" : "user's";
|
|
31
|
+
const lines = [
|
|
32
|
+
`Read the original task from: ${taskFile}`,
|
|
33
|
+
];
|
|
34
|
+
if (planFile) {
|
|
35
|
+
lines.push(`Read your previous plan from: ${planFile}`);
|
|
36
|
+
}
|
|
37
|
+
lines.push(`Read the ${sourceLabel} feedback from: ${feedbackFile}`, "", `Revise your plan to address the ${sourceLabel} feedback.`, "Keep what works, fix what was flagged.");
|
|
38
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
39
|
+
lines.push("Do planning only. Do not implement code changes.");
|
|
40
|
+
return lines.join("\n");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build a lighter revision prompt for resumed sessions.
|
|
44
|
+
* The agent already has the task and previous plan in context,
|
|
45
|
+
* so we only reference the feedback file.
|
|
46
|
+
*/
|
|
47
|
+
export function buildResumeRevisionPrompt(feedbackFile, source = "reviewer", outputPlanFile) {
|
|
48
|
+
const sourceLabel = source === "reviewer" ? "reviewer's" : "user's";
|
|
49
|
+
const lines = [
|
|
50
|
+
`Read the ${sourceLabel} feedback from: ${feedbackFile}`,
|
|
51
|
+
"",
|
|
52
|
+
`Revise your plan to address the ${sourceLabel} feedback.`,
|
|
53
|
+
"Keep what works, fix what was flagged.",
|
|
54
|
+
];
|
|
55
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
56
|
+
lines.push("Do planning only. Do not implement code changes.");
|
|
57
|
+
return lines.join("\n");
|
|
58
|
+
}
|
|
59
|
+
// ─── Impl-revision planner prompts ──────────────────────────────────────
|
|
60
|
+
/**
|
|
61
|
+
* Prompt for the planner:impl step — plans fixes based on the approved plan
|
|
62
|
+
* and implementation review issues.
|
|
63
|
+
*/
|
|
64
|
+
export function buildImplRevisionPrompt(planFile, prevRevisePlanFile, feedbackFile, outputPlanFile) {
|
|
65
|
+
const lines = [
|
|
66
|
+
`Read the approved implementation plan from: ${planFile}`,
|
|
67
|
+
];
|
|
68
|
+
if (prevRevisePlanFile) {
|
|
69
|
+
lines.push(`Read your previous revision from: ${prevRevisePlanFile}`);
|
|
70
|
+
}
|
|
71
|
+
lines.push(`Read the implementation review from: ${feedbackFile}`, "", "Plan the changes needed to address the review issues.", "Focus on concrete fixes — what to change, where, and why.");
|
|
72
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
73
|
+
lines.push("Do planning only. Do not implement code changes.");
|
|
74
|
+
return lines.join("\n");
|
|
75
|
+
}
|
|
76
|
+
export function buildImplResumeRevisionPrompt(feedbackFile, outputPlanFile) {
|
|
77
|
+
const lines = [
|
|
78
|
+
`Read the implementation review from: ${feedbackFile}`,
|
|
79
|
+
"",
|
|
80
|
+
"Plan the changes needed to address the new review issues.",
|
|
81
|
+
];
|
|
82
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
83
|
+
return lines.join("\n");
|
|
84
|
+
}
|
|
85
|
+
// ── Minimal planner prompts ──
|
|
86
|
+
export function buildMinimalPlannerPrompt(taskFile, outputPlanFile) {
|
|
87
|
+
const lines = [
|
|
88
|
+
`Read the task description from the file: ${taskFile}`,
|
|
89
|
+
"",
|
|
90
|
+
"Create an implementation plan for this task.",
|
|
91
|
+
];
|
|
92
|
+
appendOutputFileInstruction(lines, outputPlanFile);
|
|
93
|
+
return lines.join("\n");
|
|
94
|
+
}
|
|
95
|
+
export function buildMinimalRevisionPrompt(taskFile, planFile, feedbackFile, source, outputPlanFile) {
|
|
96
|
+
const sourceLabel = source === "reviewer" ? "reviewer's" : "user's";
|
|
97
|
+
const lines = [
|
|
98
|
+
`Read the original task from: ${taskFile}`,
|
|
99
|
+
];
|
|
100
|
+
if (planFile) {
|
|
101
|
+
lines.push(`Read your previous plan from: ${planFile}`);
|
|
102
|
+
}
|
|
103
|
+
lines.push(`Read the ${sourceLabel} feedback from: ${feedbackFile}`, "", `Revise your plan to address the ${sourceLabel} feedback.`);
|
|
104
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
105
|
+
return lines.join("\n");
|
|
106
|
+
}
|
|
107
|
+
export function buildMinimalResumeRevisionPrompt(feedbackFile, source, outputPlanFile) {
|
|
108
|
+
const sourceLabel = source === "reviewer" ? "reviewer's" : "user's";
|
|
109
|
+
const lines = [
|
|
110
|
+
`Read the ${sourceLabel} feedback from: ${feedbackFile}`,
|
|
111
|
+
"",
|
|
112
|
+
`Revise your plan to address the ${sourceLabel} feedback.`,
|
|
113
|
+
];
|
|
114
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
115
|
+
return lines.join("\n");
|
|
116
|
+
}
|
|
117
|
+
// ── Minimal impl-revision planner prompts ──
|
|
118
|
+
export function buildMinimalImplRevisionPrompt(planFile, prevRevisePlanFile, feedbackFile, outputPlanFile) {
|
|
119
|
+
const lines = [
|
|
120
|
+
`Read the approved implementation plan from: ${planFile}`,
|
|
121
|
+
];
|
|
122
|
+
if (prevRevisePlanFile) {
|
|
123
|
+
lines.push(`Read your previous revision from: ${prevRevisePlanFile}`);
|
|
124
|
+
}
|
|
125
|
+
lines.push(`Read the implementation review from: ${feedbackFile}`, "", "Plan the changes needed to address the review issues.");
|
|
126
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
127
|
+
return lines.join("\n");
|
|
128
|
+
}
|
|
129
|
+
export function buildMinimalImplResumeRevisionPrompt(feedbackFile, outputPlanFile) {
|
|
130
|
+
const lines = [
|
|
131
|
+
`Read the implementation review from: ${feedbackFile}`,
|
|
132
|
+
"",
|
|
133
|
+
"Plan the changes needed to address the new review issues.",
|
|
134
|
+
];
|
|
135
|
+
appendOutputFileInstruction(lines, outputPlanFile, "complete revised plan");
|
|
136
|
+
return lines.join("\n");
|
|
137
|
+
}
|
|
138
|
+
// ─── Prompt set exports ──────────────────────────────────────────────────
|
|
139
|
+
export const defaultPlannerPrompts = {
|
|
140
|
+
initial: buildPlannerPrompt,
|
|
141
|
+
revision: buildRevisionPrompt,
|
|
142
|
+
resumeRevision: buildResumeRevisionPrompt,
|
|
143
|
+
implRevision: buildImplRevisionPrompt,
|
|
144
|
+
implResumeRevision: buildImplResumeRevisionPrompt,
|
|
145
|
+
};
|
|
146
|
+
export const minimalPlannerPrompts = {
|
|
147
|
+
initial: buildMinimalPlannerPrompt,
|
|
148
|
+
revision: buildMinimalRevisionPrompt,
|
|
149
|
+
resumeRevision: buildMinimalResumeRevisionPrompt,
|
|
150
|
+
implRevision: buildMinimalImplRevisionPrompt,
|
|
151
|
+
implResumeRevision: buildMinimalImplResumeRevisionPrompt,
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agents/planners/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type PlannerPromptSet = {
|
|
2
|
+
initial: (taskFile: string, outputPlanFile: string | undefined) => string;
|
|
3
|
+
revision: (taskFile: string, planFile: string | undefined, feedbackFile: string, source: "reviewer" | "user", outputPlanFile: string | undefined) => string;
|
|
4
|
+
resumeRevision: (feedbackFile: string, source: "reviewer" | "user", outputPlanFile: string | undefined) => string;
|
|
5
|
+
implRevision: (planFile: string, prevRevisePlanFile: string | undefined, feedbackFile: string, outputPlanFile: string | undefined) => string;
|
|
6
|
+
implResumeRevision: (feedbackFile: string, outputPlanFile: string | undefined) => string;
|
|
7
|
+
};
|
|
8
|
+
import type { StepMeta } from "../../flow/types.js";
|
|
9
|
+
export interface PlannerDriver {
|
|
10
|
+
readonly name: string;
|
|
11
|
+
/** Spawn a PTY process, run the task, detect completion, send exit, return result. */
|
|
12
|
+
run(taskFile: string, opts: {
|
|
13
|
+
outputPlanFile: string;
|
|
14
|
+
resumeSessionId?: string;
|
|
15
|
+
planFile?: string;
|
|
16
|
+
feedbackFile?: string;
|
|
17
|
+
feedbackSource?: "reviewer" | "user";
|
|
18
|
+
implReplan?: boolean;
|
|
19
|
+
producers?: Record<string, StepMeta>;
|
|
20
|
+
consumers?: Record<string, StepMeta[]>;
|
|
21
|
+
}): Promise<PlanResult>;
|
|
22
|
+
/** Get the session ID for resume/correlation. */
|
|
23
|
+
getSessionId(): string | undefined;
|
|
24
|
+
}
|
|
25
|
+
export type UserClarification = {
|
|
26
|
+
question: string;
|
|
27
|
+
answer: string;
|
|
28
|
+
};
|
|
29
|
+
export type PlanResult = {
|
|
30
|
+
sessionId: string;
|
|
31
|
+
rawText?: string;
|
|
32
|
+
clarifications?: UserClarification[];
|
|
33
|
+
agentUsed: string;
|
|
34
|
+
/** Path where the plan was actually written (may differ from outputPlanFile for native plan files). */
|
|
35
|
+
planFilePath?: string;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agents/planners/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IAC1E,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,GAAG,MAAM,EAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,KAC/B,MAAM,CAAC;IACZ,cAAc,EAAE,CACd,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,GAAG,MAAM,EAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,KAC/B,MAAM,CAAC;IACZ,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GAAG,SAAS,KAC/B,MAAM,CAAC;IACZ,kBAAkB,EAAE,CAClB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GAAG,SAAS,KAC/B,MAAM,CAAC;CACb,CAAC;AAEF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,sFAAsF;IACtF,GAAG,CACD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QACJ,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;QACrC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;KACxC,GACA,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB,iDAAiD;IACjD,YAAY,IAAI,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/planners/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { RoleHandler } from "../flow/types.js";
|
|
2
|
+
import type { ProviderStrategy } from "../providers/types.js";
|
|
3
|
+
export interface HandlerOpts {
|
|
4
|
+
opinionless?: boolean;
|
|
5
|
+
variant?: string;
|
|
6
|
+
yolo?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface RoleModule {
|
|
9
|
+
createHandler(driverName: string, workdir: string, opts?: HandlerOpts): RoleHandler;
|
|
10
|
+
availableDrivers(): string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function registerRole(name: string, mod: RoleModule): void;
|
|
13
|
+
export declare function createHandler(role: string, driverName: string, workdir: string, opts?: HandlerOpts): RoleHandler;
|
|
14
|
+
export declare function availableDriversForRole(role: string): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Creates a self-registering role module with the standard dual-path pattern:
|
|
17
|
+
* factory (test seam) → provider (production adapter).
|
|
18
|
+
*/
|
|
19
|
+
export declare function createRoleModule<TDriver, TFactory>(config: {
|
|
20
|
+
roleName: string;
|
|
21
|
+
fromFactory: (factory: TFactory, workdir: string, opts?: HandlerOpts) => TDriver;
|
|
22
|
+
fromProvider: (strategy: ProviderStrategy, workdir: string, opts?: HandlerOpts) => TDriver;
|
|
23
|
+
toHandler: (driver: TDriver) => RoleHandler;
|
|
24
|
+
}): {
|
|
25
|
+
registerProvider: (name: string, strategy: ProviderStrategy) => void;
|
|
26
|
+
registerFactory: (name: string, factory: TFactory) => void;
|
|
27
|
+
availableDrivers: () => string[];
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACpF,gBAAgB,IAAI,MAAM,EAAE,CAAC;CAC9B;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAEhE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GACpE,WAAW,CAIb;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC;IACjF,YAAY,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC;IAC3F,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,CAAC;CAC7C,GAAG;IACF,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrE,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3D,gBAAgB,EAAE,MAAM,MAAM,EAAE,CAAC;CAClC,CAiCA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const modules = new Map();
|
|
2
|
+
export function registerRole(name, mod) {
|
|
3
|
+
modules.set(name, mod);
|
|
4
|
+
}
|
|
5
|
+
export function createHandler(role, driverName, workdir, opts) {
|
|
6
|
+
const mod = modules.get(role);
|
|
7
|
+
if (!mod)
|
|
8
|
+
throw new Error(`No handler registered for role "${role}"`);
|
|
9
|
+
return mod.createHandler(driverName, workdir, opts);
|
|
10
|
+
}
|
|
11
|
+
export function availableDriversForRole(role) {
|
|
12
|
+
return modules.get(role)?.availableDrivers() ?? [];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Creates a self-registering role module with the standard dual-path pattern:
|
|
16
|
+
* factory (test seam) → provider (production adapter).
|
|
17
|
+
*/
|
|
18
|
+
export function createRoleModule(config) {
|
|
19
|
+
const providers = new Map();
|
|
20
|
+
const factories = new Map();
|
|
21
|
+
function registerProvider(name, strategy) {
|
|
22
|
+
providers.set(name, strategy);
|
|
23
|
+
}
|
|
24
|
+
function registerFactory(name, factory) {
|
|
25
|
+
factories.set(name, factory);
|
|
26
|
+
}
|
|
27
|
+
function availableDrivers() {
|
|
28
|
+
return [...new Set([...factories.keys(), ...providers.keys()])];
|
|
29
|
+
}
|
|
30
|
+
function roleCreateHandler(driverName, workdir, opts) {
|
|
31
|
+
const factory = factories.get(driverName);
|
|
32
|
+
if (factory) {
|
|
33
|
+
return config.toHandler(config.fromFactory(factory, workdir, opts));
|
|
34
|
+
}
|
|
35
|
+
const strategy = providers.get(driverName);
|
|
36
|
+
if (!strategy) {
|
|
37
|
+
throw new Error(`Unknown ${config.roleName} driver: "${driverName}". Available: ${availableDrivers().join(", ")}`);
|
|
38
|
+
}
|
|
39
|
+
return config.toHandler(config.fromProvider(strategy, workdir, opts));
|
|
40
|
+
}
|
|
41
|
+
registerRole(config.roleName, { createHandler: roleCreateHandler, availableDrivers });
|
|
42
|
+
return { registerProvider, registerFactory, availableDrivers };
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE9C,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,GAAe;IACxD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EAAE,UAAkB,EAAE,OAAe,EAAE,IAAkB;IAErE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,GAAG,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAoB,MAKnD;IAKC,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAA0B;QAChE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,eAAe,CAAC,IAAY,EAAE,OAAiB;QACtD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,SAAS,gBAAgB;QACvB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,SAAS,iBAAiB,CAAC,UAAkB,EAAE,OAAe,EAAE,IAAkB;QAChF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,CAAC,QAAQ,aAAa,UAAU,iBAAiB,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClG,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEtF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReviewerDriver, ReviewResult, ReviewPromptBuilder, ReviewerRunOpts } from "./types.js";
|
|
2
|
+
import type { ProviderStrategy } from "../../providers/types.js";
|
|
3
|
+
import { BaseAdapter } from "../runner.js";
|
|
4
|
+
export declare class ReviewerAdapter extends BaseAdapter implements ReviewerDriver {
|
|
5
|
+
private readonly promptBuilder;
|
|
6
|
+
private readonly resumePromptBuilder?;
|
|
7
|
+
constructor(strategy: ProviderStrategy, workdir: string, promptBuilder?: ReviewPromptBuilder, resumePromptBuilder?: ReviewPromptBuilder | undefined, yolo?: boolean);
|
|
8
|
+
run(taskFile: string, planFile: string, opts: ReviewerRunOpts): Promise<ReviewResult>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/agents/reviewers/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,qBAAa,eAAgB,SAAQ,WAAY,YAAW,cAAc;IAItE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAHrC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,EACE,aAAa,GAAE,mBAAyC,EACxD,mBAAmB,CAAC,EAAE,mBAAmB,YAAA,EAC1D,IAAI,CAAC,EAAE,OAAO;IAKV,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,YAAY,CAAC;CA2BzB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { selectReviewerPromptBuilder } from "./types.js";
|
|
2
|
+
import { BaseAdapter } from "../runner.js";
|
|
3
|
+
import { buildWhipHint } from "../whip-hint.js";
|
|
4
|
+
import { buildReviewerPrompt } from "./prompts.js";
|
|
5
|
+
export class ReviewerAdapter extends BaseAdapter {
|
|
6
|
+
promptBuilder;
|
|
7
|
+
resumePromptBuilder;
|
|
8
|
+
constructor(strategy, workdir, promptBuilder = buildReviewerPrompt, resumePromptBuilder, yolo) {
|
|
9
|
+
super(strategy, workdir, yolo);
|
|
10
|
+
this.promptBuilder = promptBuilder;
|
|
11
|
+
this.resumePromptBuilder = resumePromptBuilder;
|
|
12
|
+
}
|
|
13
|
+
async run(taskFile, planFile, opts) {
|
|
14
|
+
const builder = selectReviewerPromptBuilder(this.promptBuilder, this.resumePromptBuilder, opts.resumeSessionId);
|
|
15
|
+
const rawPrompt = await builder(taskFile, planFile, opts.outputVerdictFile);
|
|
16
|
+
const artifactLabel = opts.variant === "impl" ? "implementation" : "plan";
|
|
17
|
+
const hint = buildWhipHint(this.strategy.name, opts, {
|
|
18
|
+
producer: (names) => `The ${artifactLabel} was produced by ${names}.`,
|
|
19
|
+
consumer: (names) => `Your review will be sent to ${names}.`,
|
|
20
|
+
});
|
|
21
|
+
const prompt = this.applyWhipHint(hint, rawPrompt);
|
|
22
|
+
const result = await this.runAgent({
|
|
23
|
+
prompt,
|
|
24
|
+
workdir: this.workdir,
|
|
25
|
+
resumeSessionId: opts.resumeSessionId,
|
|
26
|
+
sessionFilePath: this.sessionFilePath,
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
raw: result.responseText,
|
|
30
|
+
agentUsed: this.name,
|
|
31
|
+
sessionId: this.sessionId,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/agents/reviewers/adapter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAI3B;IACA;IAJnB,YACE,QAA0B,EAC1B,OAAe,EACE,gBAAqC,mBAAmB,EACxD,mBAAyC,EAC1D,IAAc;QAEd,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAJd,kBAAa,GAAb,aAAa,CAA2C;QACxD,wBAAmB,GAAnB,mBAAmB,CAAsB;IAI5D,CAAC;IAED,KAAK,CAAC,GAAG,CACP,QAAgB,EAChB,QAAgB,EAChB,IAAqB;QAErB,MAAM,OAAO,GAAG,2BAA2B,CACzC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,eAAe,CACrB,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1E,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE;YACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,aAAa,oBAAoB,KAAK,GAAG;YACrE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,+BAA+B,KAAK,GAAG;SAC7D,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEnD,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,GAAG,EAAE,MAAM,CAAC,YAAY;YACxB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type PhaseLabelSpec } from "../../flow/dsl.js";
|
|
2
|
+
import type { AgentStep } from "../../flow/types.js";
|
|
3
|
+
export declare function review(opts: {
|
|
4
|
+
driver: string;
|
|
5
|
+
reads: Record<string, string>;
|
|
6
|
+
writes: Record<string, string>;
|
|
7
|
+
id?: string;
|
|
8
|
+
variant?: string;
|
|
9
|
+
feedbackToTask?: boolean;
|
|
10
|
+
phaseLabel?: PhaseLabelSpec;
|
|
11
|
+
}): AgentStep;
|
|
12
|
+
//# sourceMappingURL=dsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.d.ts","sourceRoot":"","sources":["../../../src/agents/reviewers/dsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,wBAAgB,MAAM,CAAC,IAAI,EAAE;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B,GAAG,SAAS,CAMZ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { agentStep } from "../../flow/dsl.js";
|
|
2
|
+
export function review(opts) {
|
|
3
|
+
return agentStep("reviewer", {
|
|
4
|
+
feedbackToTask: false,
|
|
5
|
+
idPrefix: "review",
|
|
6
|
+
phaseLabel: opts.variant === "impl" ? "🔍 Reviewing Impl..." : "🔍 Reviewing Plan...",
|
|
7
|
+
}, opts);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=dsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../../src/agents/reviewers/dsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,mBAAmB,CAAC;AAGnE,MAAM,UAAU,MAAM,CAAC,IAQtB;IACC,OAAO,SAAS,CAAC,UAAU,EAAE;QAC3B,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,sBAAsB;KACtF,EAAE,IAAI,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReviewerDriver } from "./types.js";
|
|
2
|
+
import { type BaseStep, type StepContext, type StepSignal, type RetryFn, type RoleHandler } from "../../flow/types.js";
|
|
3
|
+
export declare class ReviewerRoleHandler implements RoleHandler {
|
|
4
|
+
private driver;
|
|
5
|
+
constructor(driver: ReviewerDriver);
|
|
6
|
+
execute(step: BaseStep, ctx: StepContext, retry: RetryFn): Promise<StepSignal>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/agents/reviewers/handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,mBAAoB,YAAW,WAAW;IACzC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,OAAO,CACX,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,CAAC;CA2CvB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { readVerdictFromContract, removeFileIfExists, } from "../../orchestrator.js";
|
|
4
|
+
import { resolveWhipNeighbors, } from "../../flow/types.js";
|
|
5
|
+
export class ReviewerRoleHandler {
|
|
6
|
+
driver;
|
|
7
|
+
constructor(driver) {
|
|
8
|
+
this.driver = driver;
|
|
9
|
+
}
|
|
10
|
+
async execute(step, ctx, retry) {
|
|
11
|
+
const taskFile = ctx.artifacts.getFile(step.reads.task);
|
|
12
|
+
if (!taskFile)
|
|
13
|
+
throw new Error("ReviewerRoleHandler: task artifact missing");
|
|
14
|
+
const planFile = ctx.artifacts.getFile(step.reads.plan);
|
|
15
|
+
if (!planFile)
|
|
16
|
+
throw new Error("ReviewerRoleHandler: plan artifact missing");
|
|
17
|
+
const outputVerdictFile = join(ctx.sessionDir, "verdict.json");
|
|
18
|
+
const resumeSessionId = ctx.sessionIds.get(step.id);
|
|
19
|
+
const { producers, consumers } = resolveWhipNeighbors(step, ctx);
|
|
20
|
+
const { reviewResult, verdictRaw, verdictData } = await retry("reviewer", async (attempt) => {
|
|
21
|
+
await removeFileIfExists(outputVerdictFile);
|
|
22
|
+
const reviewResult = await this.driver.run(taskFile, planFile, {
|
|
23
|
+
outputVerdictFile,
|
|
24
|
+
resumeSessionId: attempt === 1 ? resumeSessionId : undefined,
|
|
25
|
+
producers,
|
|
26
|
+
consumers,
|
|
27
|
+
variant: step.variant,
|
|
28
|
+
});
|
|
29
|
+
const verdictData = await readVerdictFromContract(outputVerdictFile);
|
|
30
|
+
const verdictRaw = await readFile(outputVerdictFile, "utf-8");
|
|
31
|
+
return { reviewResult, verdictRaw, verdictData };
|
|
32
|
+
});
|
|
33
|
+
// Unified verdict artifact — data for predicates, text+meta on rejection
|
|
34
|
+
ctx.artifacts.set(step.writes.verdict, {
|
|
35
|
+
file: outputVerdictFile,
|
|
36
|
+
data: verdictData,
|
|
37
|
+
...(!verdictData.approved && {
|
|
38
|
+
text: verdictRaw,
|
|
39
|
+
meta: { source: "reviewer" },
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
if (reviewResult.sessionId) {
|
|
43
|
+
ctx.sessionIds.set(step.id, reviewResult.sessionId);
|
|
44
|
+
}
|
|
45
|
+
return { kind: "continue" };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/agents/reviewers/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,GAMrB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,OAAO,mBAAmB;IACV;IAApB,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAE9C,KAAK,CAAC,OAAO,CACX,IAAc,EACd,GAAgB,EAChB,KAAc;QAEd,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAE7E,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAE7E,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,eAAe,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEjE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1F,MAAM,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;YAE5C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7D,iBAAiB;gBACjB,eAAe,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;gBAC5D,SAAS;gBACT,SAAS;gBACT,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,yEAAyE;QACzE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACrC,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,WAAW;YACjB,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,IAAI;gBAC3B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;aAC7B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YAC3B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACtD,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 { ReviewerDriver, ReviewPromptBuilder } from "./types.js";
|
|
3
|
+
import type { DriverName } from "../../flow/types.js";
|
|
4
|
+
export { review } from "./dsl.js";
|
|
5
|
+
export { ReviewerRoleHandler } from "./handler.js";
|
|
6
|
+
export type { ReviewerDriver, ReviewPromptBuilder } from "./types.js";
|
|
7
|
+
export type ReviewerFactory = (workdir: string, promptBuilder?: ReviewPromptBuilder, resumePromptBuilder?: ReviewPromptBuilder) => ReviewerDriver;
|
|
8
|
+
export declare const registerProvider: (name: DriverName, strategy: ProviderStrategy) => void;
|
|
9
|
+
export declare const registerFactory: (name: string, factory: ReviewerFactory) => void, availableDrivers: () => string[];
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/reviewers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AActD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,mBAAmB,EACnC,mBAAmB,CAAC,EAAE,mBAAmB,KACtC,cAAc,CAAC;AA+BpB,eAAO,MAAM,gBAAgB,EAA2B,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAC/G,eAAO,MAAQ,eAAe,oDAAE,gBAAgB,gBAAQ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ReviewerAdapter } from "./adapter.js";
|
|
2
|
+
import { ReviewerRoleHandler } from "./handler.js";
|
|
3
|
+
import { createRoleModule } from "../registry.js";
|
|
4
|
+
import { buildMinimalReviewerPrompt, buildMinimalResumeReviewerPrompt, buildResumeReviewerPrompt, buildImplementationReviewerPrompt, buildResumeImplementationReviewerPrompt, buildMinimalImplementationReviewerPrompt, buildMinimalResumeImplementationReviewerPrompt, } from "./prompts.js";
|
|
5
|
+
export { review } from "./dsl.js";
|
|
6
|
+
export { ReviewerRoleHandler } from "./handler.js";
|
|
7
|
+
function resolveReviewerPrompts(opts) {
|
|
8
|
+
if (opts?.variant === "impl") {
|
|
9
|
+
return {
|
|
10
|
+
pb: opts?.opinionless ? buildMinimalImplementationReviewerPrompt : buildImplementationReviewerPrompt,
|
|
11
|
+
rpb: opts?.opinionless ? buildMinimalResumeImplementationReviewerPrompt : buildResumeImplementationReviewerPrompt,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
pb: opts?.opinionless ? buildMinimalReviewerPrompt : undefined,
|
|
16
|
+
rpb: opts?.opinionless ? buildMinimalResumeReviewerPrompt : buildResumeReviewerPrompt,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const mod = createRoleModule({
|
|
20
|
+
roleName: "reviewer",
|
|
21
|
+
fromFactory: (factory, workdir, opts) => {
|
|
22
|
+
const { pb, rpb } = resolveReviewerPrompts(opts);
|
|
23
|
+
return factory(workdir, pb, rpb);
|
|
24
|
+
},
|
|
25
|
+
fromProvider: (strategy, workdir, opts) => {
|
|
26
|
+
const { pb, rpb } = resolveReviewerPrompts(opts);
|
|
27
|
+
return new ReviewerAdapter(strategy, workdir, pb, rpb, opts?.yolo);
|
|
28
|
+
},
|
|
29
|
+
toHandler: (driver) => new ReviewerRoleHandler(driver),
|
|
30
|
+
});
|
|
31
|
+
export const registerProvider = mod.registerProvider;
|
|
32
|
+
export const { registerFactory, availableDrivers } = mod;
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/reviewers/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAoB,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,yBAAyB,EACzB,iCAAiC,EACjC,uCAAuC,EACvC,wCAAwC,EACxC,8CAA8C,GAC/C,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AASnD,SAAS,sBAAsB,CAAC,IAAkB;IAIhD,IAAI,IAAI,EAAE,OAAO,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,iCAAiC;YACpG,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,uCAAuC;SAClH,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;QAC9D,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,yBAAyB;KACtF,CAAC;AACJ,CAAC;AAED,MAAM,GAAG,GAAG,gBAAgB,CAAkC;IAC5D,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACtC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACxC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,IAAI,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC;CACvD,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,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the reviewer prompt with the JSON schema embedded.
|
|
3
|
+
*/
|
|
4
|
+
export declare function buildReviewerPrompt(taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
5
|
+
/**
|
|
6
|
+
* Build a lighter reviewer prompt for resumed sessions.
|
|
7
|
+
* The model already has the task and previous plan in context,
|
|
8
|
+
* so only reference the revised plan.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildResumeReviewerPrompt(_taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Build a lighter implementation reviewer prompt for resumed sessions.
|
|
13
|
+
* The model already has the approved plan in context,
|
|
14
|
+
* so only ask it to re-check the implementation.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildResumeImplementationReviewerPrompt(_taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Build the implementation reviewer prompt with the JSON schema embedded.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildImplementationReviewerPrompt(_taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
21
|
+
export declare function buildMinimalReviewerPrompt(taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
22
|
+
export declare function buildMinimalResumeReviewerPrompt(_taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
23
|
+
export declare function buildMinimalImplementationReviewerPrompt(_taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
24
|
+
export declare function buildMinimalResumeImplementationReviewerPrompt(_taskFile: string, planFile: string, outputVerdictFile: string): Promise<string>;
|
|
25
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/reviewers/prompts.ts"],"names":[],"mappings":"AA2BA;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;;;GAIG;AACH,wBAAsB,uCAAuC,CAC3D,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAejB;AA6BD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,gCAAgC,CACpD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,wCAAwC,CAC5D,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,8CAA8C,CAClE,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|