poly-weaver 1.0.0 → 1.1.0
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/dist/agents/implementors/adapter.d.ts +2 -0
- package/dist/agents/implementors/adapter.d.ts.map +1 -1
- package/dist/agents/implementors/adapter.js +8 -4
- package/dist/agents/implementors/adapter.js.map +1 -1
- package/dist/agents/implementors/handler.d.ts.map +1 -1
- package/dist/agents/implementors/handler.js +33 -6
- package/dist/agents/implementors/handler.js.map +1 -1
- package/dist/agents/implementors/prompts.d.ts +5 -4
- package/dist/agents/implementors/prompts.d.ts.map +1 -1
- package/dist/agents/implementors/prompts.js +14 -13
- package/dist/agents/implementors/prompts.js.map +1 -1
- package/dist/agents/implementors/types.d.ts +6 -4
- package/dist/agents/implementors/types.d.ts.map +1 -1
- package/dist/agents/interviewers/adapter.d.ts.map +1 -1
- package/dist/agents/interviewers/adapter.js +2 -1
- package/dist/agents/interviewers/adapter.js.map +1 -1
- package/dist/agents/interviewers/completion-warning.d.ts +5 -0
- package/dist/agents/interviewers/completion-warning.d.ts.map +1 -0
- package/dist/agents/interviewers/completion-warning.js +20 -0
- package/dist/agents/interviewers/completion-warning.js.map +1 -0
- package/dist/agents/interviewers/handler.d.ts.map +1 -1
- package/dist/agents/interviewers/handler.js +5 -0
- package/dist/agents/interviewers/handler.js.map +1 -1
- package/dist/agents/interviewers/types.d.ts +2 -0
- package/dist/agents/interviewers/types.d.ts.map +1 -1
- package/dist/agents/plan-steering.d.ts +16 -0
- package/dist/agents/plan-steering.d.ts.map +1 -0
- package/dist/agents/plan-steering.js +102 -0
- package/dist/agents/plan-steering.js.map +1 -0
- package/dist/agents/planners/adapter.d.ts +3 -1
- package/dist/agents/planners/adapter.d.ts.map +1 -1
- package/dist/agents/planners/adapter.js +13 -20
- package/dist/agents/planners/adapter.js.map +1 -1
- package/dist/agents/planners/handler.d.ts.map +1 -1
- package/dist/agents/planners/handler.js +44 -55
- package/dist/agents/planners/handler.js.map +1 -1
- package/dist/agents/planners/prompts.d.ts +6 -5
- package/dist/agents/planners/prompts.d.ts.map +1 -1
- package/dist/agents/planners/prompts.js +32 -18
- package/dist/agents/planners/prompts.js.map +1 -1
- package/dist/agents/planners/types.d.ts +8 -12
- package/dist/agents/planners/types.d.ts.map +1 -1
- package/dist/agents/prompt-utils.d.ts +2 -0
- package/dist/agents/prompt-utils.d.ts.map +1 -1
- package/dist/agents/prompt-utils.js +5 -0
- package/dist/agents/prompt-utils.js.map +1 -1
- package/dist/agents/reviewers/adapter.d.ts.map +1 -1
- package/dist/agents/reviewers/adapter.js +6 -2
- package/dist/agents/reviewers/adapter.js.map +1 -1
- package/dist/agents/reviewers/handler.d.ts.map +1 -1
- package/dist/agents/reviewers/handler.js +22 -7
- package/dist/agents/reviewers/handler.js.map +1 -1
- package/dist/agents/reviewers/prompts.d.ts +4 -4
- package/dist/agents/reviewers/prompts.d.ts.map +1 -1
- package/dist/agents/reviewers/prompts.js +43 -23
- package/dist/agents/reviewers/prompts.js.map +1 -1
- package/dist/agents/reviewers/types.d.ts +7 -4
- package/dist/agents/reviewers/types.d.ts.map +1 -1
- package/dist/agents/reviewers/types.js.map +1 -1
- package/dist/agents/runner.d.ts +4 -4
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +13 -3
- package/dist/agents/runner.js.map +1 -1
- package/dist/flow/artifacts.d.ts +8 -1
- package/dist/flow/artifacts.d.ts.map +1 -1
- package/dist/flow/artifacts.js +82 -0
- package/dist/flow/artifacts.js.map +1 -1
- package/dist/flow/built-in/default-factory.d.ts.map +1 -1
- package/dist/flow/built-in/default-factory.js +0 -2
- package/dist/flow/built-in/default-factory.js.map +1 -1
- package/dist/flow/executor.d.ts +1 -2
- package/dist/flow/executor.d.ts.map +1 -1
- package/dist/flow/executor.js +25 -29
- package/dist/flow/executor.js.map +1 -1
- package/dist/flow/non-default-feedback.d.ts +14 -0
- package/dist/flow/non-default-feedback.d.ts.map +1 -0
- package/dist/flow/non-default-feedback.js +45 -0
- package/dist/flow/non-default-feedback.js.map +1 -0
- package/dist/flow/types.d.ts +11 -5
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/flow/types.js +1 -2
- package/dist/flow/types.js.map +1 -1
- package/dist/managed-spec.d.ts +2 -0
- package/dist/managed-spec.d.ts.map +1 -1
- package/dist/managed-spec.js +22 -0
- package/dist/managed-spec.js.map +1 -1
- package/dist/offscreen/agent-viewer.d.ts +4 -1
- package/dist/offscreen/agent-viewer.d.ts.map +1 -1
- package/dist/offscreen/agent-viewer.js +58 -2
- package/dist/offscreen/agent-viewer.js.map +1 -1
- package/dist/orchestrator.d.ts +1 -2
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +5 -10
- package/dist/orchestrator.js.map +1 -1
- package/dist/prompts.d.ts +0 -16
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +0 -35
- package/dist/prompts.js.map +1 -1
- package/dist/providers/base-completion.d.ts +12 -2
- package/dist/providers/base-completion.d.ts.map +1 -1
- package/dist/providers/base-completion.js +111 -2
- package/dist/providers/base-completion.js.map +1 -1
- package/dist/providers/claude/completion.d.ts +3 -1
- package/dist/providers/claude/completion.d.ts.map +1 -1
- package/dist/providers/claude/completion.js +40 -4
- package/dist/providers/claude/completion.js.map +1 -1
- package/dist/providers/claude/session.d.ts +1 -32
- package/dist/providers/claude/session.d.ts.map +1 -1
- package/dist/providers/claude/session.js +1 -138
- package/dist/providers/claude/session.js.map +1 -1
- package/dist/providers/claude/strategy.d.ts.map +1 -1
- package/dist/providers/claude/strategy.js +3 -1
- package/dist/providers/claude/strategy.js.map +1 -1
- package/dist/providers/codex/completion.d.ts +3 -1
- package/dist/providers/codex/completion.d.ts.map +1 -1
- package/dist/providers/codex/completion.js +36 -5
- package/dist/providers/codex/completion.js.map +1 -1
- package/dist/providers/codex/session.d.ts +1 -1
- package/dist/providers/codex/session.d.ts.map +1 -1
- package/dist/providers/codex/session.js +1 -1
- package/dist/providers/codex/session.js.map +1 -1
- package/dist/providers/codex/strategy.d.ts.map +1 -1
- package/dist/providers/codex/strategy.js +3 -1
- package/dist/providers/codex/strategy.js.map +1 -1
- package/dist/providers/completion-gate.d.ts +14 -0
- package/dist/providers/completion-gate.d.ts.map +1 -0
- package/dist/providers/completion-gate.js +36 -0
- package/dist/providers/completion-gate.js.map +1 -0
- package/dist/providers/copilot/observation.d.ts +2 -3
- package/dist/providers/copilot/observation.d.ts.map +1 -1
- package/dist/providers/copilot/observation.js +28 -25
- package/dist/providers/copilot/observation.js.map +1 -1
- package/dist/providers/copilot/session.d.ts +0 -33
- package/dist/providers/copilot/session.d.ts.map +1 -1
- package/dist/providers/copilot/session.js +0 -149
- package/dist/providers/copilot/session.js.map +1 -1
- package/dist/providers/types.d.ts +9 -14
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/session/restore.d.ts +2 -1
- package/dist/session/restore.d.ts.map +1 -1
- package/dist/session/restore.js +26 -3
- package/dist/session/restore.js.map +1 -1
- package/dist/session/session-store.d.ts.map +1 -1
- package/dist/session/session-store.js +9 -2
- package/dist/session/session-store.js.map +1 -1
- package/dist/terminal/host.d.ts +2 -0
- package/dist/terminal/host.d.ts.map +1 -1
- package/dist/terminal/host.js +19 -15
- package/dist/terminal/host.js.map +1 -1
- package/dist/terminal/layout.d.ts +7 -4
- package/dist/terminal/layout.d.ts.map +1 -1
- package/dist/terminal/layout.js +5 -3
- package/dist/terminal/layout.js.map +1 -1
- package/dist/terminal/output.d.ts +9 -2
- package/dist/terminal/output.d.ts.map +1 -1
- package/dist/terminal/output.js +13 -3
- package/dist/terminal/output.js.map +1 -1
- package/dist/user/curate-handler.d.ts +1 -5
- package/dist/user/curate-handler.d.ts.map +1 -1
- package/dist/user/curate-handler.js +32 -69
- package/dist/user/curate-handler.js.map +1 -1
- package/dist/user/handler.d.ts.map +1 -1
- package/dist/user/handler.js +18 -1
- package/dist/user/handler.js.map +1 -1
- package/dist/user/host-prompt.d.ts.map +1 -1
- package/dist/user/host-prompt.js +5 -4
- package/dist/user/host-prompt.js.map +1 -1
- package/dist/user/prompt.d.ts +3 -0
- package/dist/user/prompt.d.ts.map +1 -1
- package/dist/user/prompt.js.map +1 -1
- package/dist/user/review-feedback.d.ts +43 -0
- package/dist/user/review-feedback.d.ts.map +1 -0
- package/dist/user/review-feedback.js +184 -0
- package/dist/user/review-feedback.js.map +1 -0
- package/dist/user/review-plan-pane.d.ts +5 -0
- package/dist/user/review-plan-pane.d.ts.map +1 -0
- package/dist/user/review-plan-pane.js +26 -0
- package/dist/user/review-plan-pane.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ITER, SPEC } from "../flow/types.js";
|
|
2
|
+
import { REVIEW_FEEDBACK } from "../user/review-feedback.js";
|
|
3
|
+
const COMMON = "## User clarification and steering\n\nKeep the plan aligned with explicit user guidance from question answers, ordinary chat, or labeled user review feedback, without a separate edit request. Integrate its meaning into the relevant plan sections rather than append comments verbatim. Distinguish user guidance from reviewer findings; reviewer findings alone are not user steering. Later explicit user guidance supersedes conflicting earlier intent; unrelated discussion and your own preferences do not authorize scope changes.";
|
|
4
|
+
const PLAN_ONLY = "Edit only the plan; do not edit repository files.";
|
|
5
|
+
const REVIEW_ONLY = "Edit the plan only for explicit user guidance; report other findings as review issues instead of fixing them. Do not edit repository files.";
|
|
6
|
+
const DEFER_SPEC = "Record required Iteration Spec changes in the plan rather than applying them.";
|
|
7
|
+
const IMPLEMENTATION_VERDICT = "Base your verdict on the updated plan. Do not approve while required implementation or specification work remains outstanding; documenting it in the plan is not completion.";
|
|
8
|
+
export function appendPlanSteering(prompt, role, managed, context, implReplan = false) {
|
|
9
|
+
if (!context)
|
|
10
|
+
return prompt;
|
|
11
|
+
const references = [];
|
|
12
|
+
const seen = new Set();
|
|
13
|
+
for (const [label, file] of [
|
|
14
|
+
["Read the current main plan", context.mainPlanFile],
|
|
15
|
+
["Read the current change plan", context.changePlanFile],
|
|
16
|
+
["Read the selected pending Iteration Spec", context.iterationSpecFile],
|
|
17
|
+
]) {
|
|
18
|
+
if (!file || seen.has(file))
|
|
19
|
+
continue;
|
|
20
|
+
seen.add(file);
|
|
21
|
+
if (!prompt.includes(file))
|
|
22
|
+
references.push(`${label}: ${file}`);
|
|
23
|
+
}
|
|
24
|
+
let responsibility;
|
|
25
|
+
switch (role) {
|
|
26
|
+
case "planner":
|
|
27
|
+
responsibility = `${PLAN_ONLY}${managed ? ` ${DEFER_SPEC}` : ""}`;
|
|
28
|
+
break;
|
|
29
|
+
case "plan-reviewer":
|
|
30
|
+
responsibility = `${REVIEW_ONLY}${managed ? ` ${DEFER_SPEC}` : ""} Base your verdict and any plan citations on the updated plan.`;
|
|
31
|
+
break;
|
|
32
|
+
case "implementor":
|
|
33
|
+
responsibility = managed
|
|
34
|
+
? "Align the selected pending Iteration Spec with changed durable intent, including changes recorded in the plan. Complete the required implementation and current-spec application. Applied history is immutable."
|
|
35
|
+
: "";
|
|
36
|
+
break;
|
|
37
|
+
case "implementation-reviewer":
|
|
38
|
+
responsibility = `${REVIEW_ONLY}${managed ? ` ${DEFER_SPEC}` : ""} ${IMPLEMENTATION_VERDICT}`;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
let suffix = "";
|
|
42
|
+
if (role === "planner" && implReplan) {
|
|
43
|
+
suffix = "Write one complete revised plan, retaining the full intended scope and clearly identifying the implementation delta. Do not edit any other plan file.";
|
|
44
|
+
}
|
|
45
|
+
else if (role === "implementor" && context.changePlanKind === "complete") {
|
|
46
|
+
suffix = "The supplied plan includes the full intended scope and identifies the implementation delta. Apply the delta without repeating completed work.";
|
|
47
|
+
}
|
|
48
|
+
else if (role === "implementor" && context.changePlanKind === "delta") {
|
|
49
|
+
suffix = "Read the main plan together with the separate change plan. Apply the delta and incorporate its explicit user steering and required specification changes into the main plan; do not replace the main plan with a delta-only plan.";
|
|
50
|
+
}
|
|
51
|
+
const feedback = context.reviewFeedbackFile
|
|
52
|
+
? [
|
|
53
|
+
`Read the retained user review context: ${context.reviewFeedbackFile}`,
|
|
54
|
+
"Batches are chronological. Issue snapshots are reviewer findings; keep/drop/revise are user decisions, and additions and rejection comments are user-authored. Keeping a finding does not make it user steering. A drop is an intentional waiver, not proof of a fix; respect it without re-raising rephrasings, unless later explicit user guidance supersedes it. This is retained context, not a new verdict-refinement request.",
|
|
55
|
+
role === "planner"
|
|
56
|
+
? "Incorporate unconsumed additions and revision guidance into the complete plan, alongside retained drops and the immediate feedback. Preserve their meaning and constraints, not a verbatim appendix."
|
|
57
|
+
: "",
|
|
58
|
+
].filter(Boolean).join("\n\n")
|
|
59
|
+
: "";
|
|
60
|
+
return [prompt, references.join("\n"), COMMON, responsibility, suffix, feedback]
|
|
61
|
+
.filter(Boolean).join("\n\n");
|
|
62
|
+
}
|
|
63
|
+
/** Runtime identity, not snapshotted factory code, owns this permission. */
|
|
64
|
+
export function defaultPlanSteering(kind, name, steps) {
|
|
65
|
+
if (kind !== "built-in" || name !== "default")
|
|
66
|
+
return undefined;
|
|
67
|
+
const planner = steps.find((step) => step.role === "planner");
|
|
68
|
+
if (!planner?.writes.plan)
|
|
69
|
+
return undefined;
|
|
70
|
+
const changePlanner = steps.find((step) => step.role === "planner" && step.writes.plan !== planner.writes.plan);
|
|
71
|
+
const implementor = steps.find((step) => step.role === "implementor");
|
|
72
|
+
return {
|
|
73
|
+
mainPlanKey: planner.writes.plan,
|
|
74
|
+
changePlanKey: implementor?.reads.revisePlan ?? changePlanner?.writes.plan,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export function resolvePlanSteering(step, ctx) {
|
|
78
|
+
if (!ctx.planSteering || !(step.role === "planner" || step.role === "implementor" ||
|
|
79
|
+
(step.role === "reviewer" && (!step.variant || step.variant === "plan" || step.variant === "impl"))))
|
|
80
|
+
return undefined;
|
|
81
|
+
const mainPlanFile = ctx.artifacts.getFile(ctx.planSteering.mainPlanKey);
|
|
82
|
+
const changeKey = step.reads.revisePlan ?? ctx.planSteering.changePlanKey;
|
|
83
|
+
const change = changeKey ? ctx.artifacts.get(changeKey) : undefined;
|
|
84
|
+
const consumingChange = step.role === "implementor" && !!step.reads.revisePlan && !!change?.file;
|
|
85
|
+
return {
|
|
86
|
+
mainPlanFile,
|
|
87
|
+
reviewFeedbackFile: ctx.artifacts.getFile(REVIEW_FEEDBACK),
|
|
88
|
+
changePlanFile: change?.meta?.steeringIncorporated && !consumingChange ? undefined : change?.file,
|
|
89
|
+
iterationSpecFile: step.managedSpec
|
|
90
|
+
? ctx.artifacts.getFile(ITER) ?? (step.reads.spec ? ctx.artifacts.getFile(step.reads.spec) : undefined)
|
|
91
|
+
: undefined,
|
|
92
|
+
changePlanKind: consumingChange
|
|
93
|
+
? change.meta?.completeSuccessor === true ? "complete" : "delta"
|
|
94
|
+
: undefined,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function steeringRationaleFile(step, ctx) {
|
|
98
|
+
return step.managedSpec
|
|
99
|
+
? ctx.artifacts.getFile(step.reads.explanation ?? SPEC)
|
|
100
|
+
: undefined;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=plan-steering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-steering.js","sourceRoot":"","sources":["../../src/agents/plan-steering.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,15 +2,17 @@ import type { PlannerDriver, PlanResult, PlannerPromptSet } from "./types.js";
|
|
|
2
2
|
import type { ProviderStrategy } from "../../providers/types.js";
|
|
3
3
|
import type { ProviderContext } from "../../flow/types.js";
|
|
4
4
|
import { BaseAdapter } from "../runner.js";
|
|
5
|
+
import { type PlanSteeringContext } from "../plan-steering.js";
|
|
5
6
|
type PlannerRunOptions = {
|
|
6
7
|
outputPlanFile?: string;
|
|
7
8
|
resumeSessionId?: string;
|
|
8
9
|
planFile?: string;
|
|
9
10
|
explanationFile?: string;
|
|
10
11
|
feedbackFile?: string;
|
|
11
|
-
feedbackSource?: "reviewer" | "user";
|
|
12
|
+
feedbackSource?: "reviewer" | "user" | "curated";
|
|
12
13
|
implReplan?: boolean;
|
|
13
14
|
managedSpec?: boolean;
|
|
15
|
+
planSteering?: PlanSteeringContext;
|
|
14
16
|
};
|
|
15
17
|
export declare function selectPlannerPrompt(taskFile: string, opts: PlannerRunOptions, prompts?: PlannerPromptSet): string;
|
|
16
18
|
export declare class PlannerAdapter extends BaseAdapter implements PlannerDriver {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/agents/planners/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/agents/planners/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,KAAK,iBAAiB,GAAG;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,gBAAwC,GAChD,MAAM,CAKR;AA2DD,qBAAa,cAAe,SAAQ,WAAY,YAAW,aAAa;IAIpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFzB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,EACE,OAAO,CAAC,EAAE,gBAAgB,YAAA,EAC3C,IAAI,CAAC,EAAE,OAAO,EACd,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,eAAe,EACzB,iBAAiB,CAAC,EAAE,MAAM;IAKtB,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,UAAU,CAAC;CAsEvB"}
|
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
import { BaseAdapter } from "../runner.js";
|
|
2
2
|
import { defaultPlannerPrompts } from "./prompts.js";
|
|
3
3
|
import { writeFile } from "node:fs/promises";
|
|
4
|
+
import { appendPlanSteering } from "../plan-steering.js";
|
|
4
5
|
export function selectPlannerPrompt(taskFile, opts, prompts = defaultPlannerPrompts) {
|
|
6
|
+
return appendPlanSteering(selectBasePlannerPrompt(taskFile, opts, prompts), "planner", opts.managedSpec === true, opts.planSteering, opts.implReplan);
|
|
7
|
+
}
|
|
8
|
+
function selectBasePlannerPrompt(taskFile, opts, prompts) {
|
|
5
9
|
if (opts.feedbackFile) {
|
|
6
10
|
// Impl-replan: dedicated prompts with correct labels
|
|
7
11
|
if (opts.implReplan) {
|
|
8
12
|
if (opts.resumeSessionId) {
|
|
9
|
-
return prompts.implResumeRevision(opts.feedbackFile, opts.outputPlanFile);
|
|
13
|
+
return prompts.implResumeRevision(opts.feedbackFile, opts.outputPlanFile, opts.planSteering, opts.explanationFile);
|
|
10
14
|
}
|
|
11
|
-
return prompts.implRevision(taskFile, opts.planFile, opts.feedbackFile, opts.outputPlanFile);
|
|
15
|
+
return prompts.implRevision(taskFile, opts.planFile, opts.feedbackFile, opts.outputPlanFile, opts.planSteering, opts.explanationFile);
|
|
12
16
|
}
|
|
13
17
|
// Normal plan revision
|
|
14
18
|
if (opts.resumeSessionId) {
|
|
15
|
-
return prompts.resumeRevision(opts.feedbackFile, opts.feedbackSource ?? "reviewer", opts.outputPlanFile, opts.managedSpec, opts.explanationFile);
|
|
19
|
+
return prompts.resumeRevision(opts.feedbackFile, opts.feedbackSource ?? "reviewer", opts.outputPlanFile, opts.managedSpec, opts.explanationFile, opts.planSteering);
|
|
16
20
|
}
|
|
17
|
-
return prompts.revision(taskFile, opts.planFile, opts.feedbackFile, opts.feedbackSource ?? "reviewer", opts.outputPlanFile, opts.managedSpec, opts.explanationFile);
|
|
21
|
+
return prompts.revision(taskFile, opts.planFile, opts.feedbackFile, opts.feedbackSource ?? "reviewer", opts.outputPlanFile, opts.managedSpec, opts.explanationFile, opts.planSteering);
|
|
18
22
|
}
|
|
19
|
-
return prompts.initial(taskFile, opts.outputPlanFile, opts.managedSpec, opts.explanationFile);
|
|
23
|
+
return prompts.initial(taskFile, opts.outputPlanFile, opts.managedSpec, opts.explanationFile, opts.planSteering);
|
|
20
24
|
}
|
|
21
25
|
export class PlannerAdapter extends BaseAdapter {
|
|
22
26
|
prompts;
|
|
@@ -59,20 +63,10 @@ export class PlannerAdapter extends BaseAdapter {
|
|
|
59
63
|
await writeFile(opts.outputPlanFile, result.responseText, "utf-8");
|
|
60
64
|
nativePlanFilePath = opts.outputPlanFile;
|
|
61
65
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
(!result.observed && this.strategy.session.extractClarifications
|
|
67
|
-
? this.strategy.session.extractClarifications(result.sessionFilePath, result.lineOffset)
|
|
68
|
-
: []),
|
|
69
|
-
nativePlanFilePath !== undefined
|
|
70
|
-
? Promise.resolve(nativePlanFilePath)
|
|
71
|
-
: (!result.observed && this.strategy.session.extractPlanFilePath
|
|
72
|
-
? this.strategy.session.extractPlanFilePath(result.sessionFilePath, result.lineOffset)
|
|
73
|
-
: undefined),
|
|
74
|
-
]);
|
|
75
|
-
const planFilePath = nativePlanFilePath ?? extractedPlanFilePath;
|
|
66
|
+
const planFilePath = nativePlanFilePath ??
|
|
67
|
+
(!result.observed && this.strategy.session.extractPlanFilePath
|
|
68
|
+
? await this.strategy.session.extractPlanFilePath(result.sessionFilePath, result.lineOffset)
|
|
69
|
+
: undefined);
|
|
76
70
|
if (planMode.nativePlanFile && !planFilePath) {
|
|
77
71
|
// Native mode must provide a provider plan path or SDK plan content.
|
|
78
72
|
throw new Error("Native plan file extraction failed: no plan path or content was returned");
|
|
@@ -80,7 +74,6 @@ export class PlannerAdapter extends BaseAdapter {
|
|
|
80
74
|
return {
|
|
81
75
|
sessionId: result.sessionId,
|
|
82
76
|
rawText: result.responseText,
|
|
83
|
-
clarifications: clarifications.length > 0 ? clarifications : undefined,
|
|
84
77
|
agentUsed: this.name,
|
|
85
78
|
planFilePath,
|
|
86
79
|
sessionFilePath: this.sessionFilePath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/agents/planners/adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/agents/planners/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/agents/planners/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/agents/planners/handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAoB7B,qBAAa,kBAAmB,YAAW,WAAW;IAGxC,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,WAAW,CAAK;gBAEJ,MAAM,EAAE,aAAa;IAEnC,OAAO,CACX,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,UAAU,CAAC;CAuHvB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { writeFile } from "node:fs/promises";
|
|
2
1
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { refreshSteeringPlans } from "../../flow/artifacts.js";
|
|
4
|
+
import { resolvePlanSteering, steeringRationaleFile } from "../plan-steering.js";
|
|
5
|
+
import { consumePlannerFeedback, materializeReviewFeedback, pendingPlannerFeedback } from "../../user/review-feedback.js";
|
|
4
6
|
import { readPlanFromContract, removeFileIfExists, } from "../../orchestrator.js";
|
|
5
7
|
import { TASK, } from "../../flow/types.js";
|
|
6
8
|
import { bindAttemptFailureReporter, bindDriverRuntime, bindObserverDiagnosticsReporter, bindPtyBufferReporter, bindSessionReporter, flushDriverSidecar, } from "../runner.js";
|
|
@@ -16,28 +18,41 @@ export class PlannerRoleHandler {
|
|
|
16
18
|
this.driver = driver;
|
|
17
19
|
}
|
|
18
20
|
async execute(step, ctx, retry) {
|
|
19
|
-
|
|
21
|
+
await refreshSteeringPlans(ctx);
|
|
22
|
+
await materializeReviewFeedback(ctx);
|
|
23
|
+
const feedbackBatches = pendingPlannerFeedback(ctx);
|
|
24
|
+
const planSteering = resolvePlanSteering(step, ctx);
|
|
25
|
+
const implReplan = planSteering
|
|
26
|
+
? step.writes.plan !== ctx.planSteering.mainPlanKey
|
|
27
|
+
: !step.reads.spec && step.reads.task !== undefined && step.reads.task !== TASK;
|
|
28
|
+
const specFile = (implReplan ? planSteering?.mainPlanFile : undefined)
|
|
29
|
+
?? (step.reads.spec && ctx.artifacts.getFile(step.reads.spec))
|
|
20
30
|
?? (step.reads.task && ctx.artifacts.getFile(step.reads.task));
|
|
21
31
|
if (!specFile)
|
|
22
32
|
throw new Error("PlannerRoleHandler: spec or task artifact missing");
|
|
23
|
-
const explanationFile =
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
const explanationFile = planSteering ? steeringRationaleFile(step, ctx)
|
|
34
|
+
: step.managedSpec && step.reads.explanation
|
|
35
|
+
? ctx.artifacts.getFile(step.reads.explanation)
|
|
36
|
+
: undefined;
|
|
26
37
|
// Read feedback from verdict artifact (set by incorporateFeedback)
|
|
27
38
|
const verdictArtifact = step.reads.verdict
|
|
28
39
|
? ctx.artifacts.get(step.reads.verdict) : undefined;
|
|
29
40
|
const feedbackFile = verdictArtifact?.file;
|
|
30
|
-
const
|
|
31
|
-
|
|
41
|
+
const source = verdictArtifact?.meta?.source;
|
|
42
|
+
const feedbackSource = feedbackFile && (source === "reviewer" || source === "user" || source === "curated")
|
|
43
|
+
? source
|
|
32
44
|
: undefined;
|
|
33
|
-
const prevPlanFile =
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
45
|
+
const prevPlanFile = planSteering && !implReplan
|
|
46
|
+
? planSteering.mainPlanFile : ctx.artifacts.getFile(step.writes.plan);
|
|
47
|
+
if (this.planVersion === 0 || planSteering) {
|
|
48
|
+
const restoredVersion = ctx.artifacts.getMeta(planSteering ? ctx.planSteering.mainPlanKey : step.writes.plan, "version");
|
|
49
|
+
if (restoredVersion != null && restoredVersion > this.planVersion)
|
|
37
50
|
this.planVersion = restoredVersion;
|
|
38
51
|
}
|
|
39
52
|
this.planVersion++;
|
|
40
|
-
const outputPlanFile =
|
|
53
|
+
const outputPlanFile = planSteering
|
|
54
|
+
? join(ctx.sessionDir, `plan-v${this.planVersion}-${randomUUID()}.md`)
|
|
55
|
+
: planFileForVersion(ctx.sessionDir, this.planVersion);
|
|
41
56
|
const stepAny = step;
|
|
42
57
|
const sessionKey = stepAny.sessionShareKey ?? step.id;
|
|
43
58
|
const boundaryFired = stepAny.sessionBoundary?.(ctx) === true;
|
|
@@ -45,12 +60,6 @@ export class PlannerRoleHandler {
|
|
|
45
60
|
ctx.sessionIds.delete(sessionKey);
|
|
46
61
|
}
|
|
47
62
|
const resumeSessionId = await resolveResumeSessionId(ctx, stepAny, this.driver, sessionKey, ctx.sessionIds.get(sessionKey), boundaryFired);
|
|
48
|
-
// implReplan is the "impl-review revising the plan" case: a planner step
|
|
49
|
-
// whose task input is remapped to something other than TASK (and whose
|
|
50
|
-
// input is therefore not the original task). Spec-driven planning still
|
|
51
|
-
// reads `spec`, NOT a remapped task, so it must NOT be flagged as
|
|
52
|
-
// impl-replan. The flag selects implementation-plan/review prompt labels.
|
|
53
|
-
const implReplan = !step.reads.spec && step.reads.task !== undefined && step.reads.task !== TASK;
|
|
54
63
|
bindSessionReporter(this.driver, ctx.lastStepSessionFilePaths);
|
|
55
64
|
bindPtyBufferReporter(this.driver, ctx);
|
|
56
65
|
bindAttemptFailureReporter(this.driver, ctx);
|
|
@@ -77,6 +86,7 @@ export class PlannerRoleHandler {
|
|
|
77
86
|
feedbackSource,
|
|
78
87
|
implReplan,
|
|
79
88
|
managedSpec: step.managedSpec === true,
|
|
89
|
+
planSteering,
|
|
80
90
|
});
|
|
81
91
|
const actualPlanFile = planResult.planFilePath ?? outputPlanFile;
|
|
82
92
|
const planText = await readPlanFromContract(actualPlanFile);
|
|
@@ -91,48 +101,27 @@ export class PlannerRoleHandler {
|
|
|
91
101
|
ctx.lastStepSessionFilePaths?.push(planResult.sessionFilePath);
|
|
92
102
|
}
|
|
93
103
|
// Store plan artifact (use the actual file the plan was written to)
|
|
94
|
-
|
|
104
|
+
const artifact = {
|
|
95
105
|
file: actualPlanFile,
|
|
96
106
|
text: planText,
|
|
97
|
-
meta: {
|
|
98
|
-
|
|
107
|
+
meta: {
|
|
108
|
+
version: this.planVersion,
|
|
109
|
+
...(planSteering ? {
|
|
110
|
+
steeringPlan: true,
|
|
111
|
+
canonicalPlanKey: ctx.planSteering.mainPlanKey,
|
|
112
|
+
...(implReplan ? { completeSuccessor: true } : {}),
|
|
113
|
+
} : {}),
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
if (planSteering)
|
|
117
|
+
ctx.artifacts.set(ctx.planSteering.mainPlanKey, artifact);
|
|
118
|
+
ctx.artifacts.set(step.writes.plan, artifact);
|
|
119
|
+
await refreshSteeringPlans(ctx);
|
|
120
|
+
await consumePlannerFeedback(ctx, step, feedbackBatches);
|
|
99
121
|
// Track session for resume
|
|
100
122
|
if (planResult.sessionId) {
|
|
101
123
|
ctx.sessionIds.set(sessionKey, planResult.sessionId);
|
|
102
124
|
}
|
|
103
|
-
// Merge in-planning clarifications (AskUserQuestion Q&A) into the
|
|
104
|
-
// planner's input baseline: spec if present, task otherwise.
|
|
105
|
-
if (!step.managedSpec && planResult.clarifications?.length) {
|
|
106
|
-
const specKey = step.reads.spec;
|
|
107
|
-
const taskKey = step.reads.task;
|
|
108
|
-
const specArtifact = specKey ? ctx.artifacts.get(specKey) : undefined;
|
|
109
|
-
const baseline = specArtifact?.text != null
|
|
110
|
-
? { key: specKey, artifact: specArtifact }
|
|
111
|
-
: (() => {
|
|
112
|
-
if (!taskKey || taskKey !== TASK)
|
|
113
|
-
return null;
|
|
114
|
-
const taskArtifact = ctx.artifacts.get(taskKey);
|
|
115
|
-
return taskArtifact?.text != null
|
|
116
|
-
? { key: taskKey, artifact: taskArtifact }
|
|
117
|
-
: null;
|
|
118
|
-
})();
|
|
119
|
-
if (baseline) {
|
|
120
|
-
const entries = planResult.clarifications.map((c) => ({
|
|
121
|
-
type: "qa",
|
|
122
|
-
clarification: c,
|
|
123
|
-
}));
|
|
124
|
-
const result = appendClarifications(baseline.artifact.text, entries, ctx.nextClarificationNumber);
|
|
125
|
-
ctx.nextClarificationNumber = result.nextNumber;
|
|
126
|
-
ctx.artifacts.set(baseline.key, {
|
|
127
|
-
...baseline.artifact,
|
|
128
|
-
text: result.content,
|
|
129
|
-
file: baseline.artifact.file,
|
|
130
|
-
});
|
|
131
|
-
if (baseline.artifact.file) {
|
|
132
|
-
await writeFile(baseline.artifact.file, result.content, "utf-8");
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
125
|
await cleanupStepLiveSidecar(sidecarPath);
|
|
137
126
|
return { kind: "continue" };
|
|
138
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/agents/planners/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/agents/planners/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { PlannerPromptSet } from "./types.js";
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
2
|
+
import type { PlanSteeringContext } from "../plan-steering.js";
|
|
3
|
+
export declare function buildPlannerPrompt(taskFile: string, outputPlanFile: string | undefined, managedSpec?: boolean, explanationFile?: string, steering?: PlanSteeringContext): string;
|
|
4
|
+
export declare function buildRevisionPrompt(taskFile: string, planFile: string | undefined, feedbackFile: string, source: "reviewer" | "user" | "curated", outputPlanFile: string | undefined, managedSpec?: boolean, explanationFile?: string, steering?: PlanSteeringContext): string;
|
|
5
|
+
export declare function buildResumeRevisionPrompt(feedbackFile: string, source: "reviewer" | "user" | "curated", outputPlanFile: string | undefined, managedSpec?: boolean, explanationFile?: string, steering?: PlanSteeringContext): string;
|
|
6
|
+
export declare function buildImplRevisionPrompt(planFile: string, prevRevisePlanFile: string | undefined, feedbackFile: string, outputPlanFile: string | undefined, steering?: PlanSteeringContext, explanationFile?: string): string;
|
|
7
|
+
export declare function buildImplResumeRevisionPrompt(feedbackFile: string, outputPlanFile: string | undefined, steering?: PlanSteeringContext, explanationFile?: string): string;
|
|
7
8
|
export declare const defaultPlannerPrompts: PlannerPromptSet;
|
|
8
9
|
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/planners/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/planners/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAmE/D,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,UAAQ,EACnB,eAAe,CAAC,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,MAAM,CAoBR;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,EACvC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,UAAQ,EACnB,eAAe,CAAC,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,MAAM,CAkCR;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,EACvC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,UAAQ,EACnB,eAAe,CAAC,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,MAAM,CAqBR;AAID,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,CAAC,EAAE,mBAAmB,EAC9B,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAmBR;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,CAAC,EAAE,mBAAmB,EAC9B,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAcR;AAID,eAAO,MAAM,qBAAqB,EAAE,gBAMnC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { managedIterationClosureDirective } from "../prompt-utils.js";
|
|
2
2
|
/** Append the "write plan as markdown" instruction when an output path is given. */
|
|
3
3
|
function appendOutputFileInstruction(lines, outputPlanFile) {
|
|
4
4
|
if (outputPlanFile) {
|
|
@@ -19,7 +19,7 @@ function managedExplanationLine(explanationFile) {
|
|
|
19
19
|
? `Read its supporting Iteration Rationale: ${explanationFile}`
|
|
20
20
|
: "No supporting Iteration Rationale file was provided.";
|
|
21
21
|
}
|
|
22
|
-
function managedPlannerRepositorySpecificationLines(revision = false) {
|
|
22
|
+
function managedPlannerRepositorySpecificationLines(revision = false, steering) {
|
|
23
23
|
return [
|
|
24
24
|
"## Repository specification",
|
|
25
25
|
"",
|
|
@@ -35,17 +35,19 @@ function managedPlannerRepositorySpecificationLines(revision = false) {
|
|
|
35
35
|
"### Legacy-spec migration",
|
|
36
36
|
"### Consistency checks",
|
|
37
37
|
"",
|
|
38
|
-
|
|
38
|
+
steering
|
|
39
|
+
? "Record required Iteration Spec changes under Iteration updates when explicit user guidance changes durable requirements, rationale, scope, or acceptance outcomes, or when an important uncovered or contradictory point requires correction. Describe each proposed change clearly; do not edit the Iteration Spec. Write `None` when no update is needed."
|
|
40
|
+
: "Only propose an Iteration Spec update for an important uncovered or contradictory point, and call it out clearly. Write `None` under Iteration updates when no update is needed.",
|
|
39
41
|
"",
|
|
40
42
|
"## Strict rules",
|
|
41
43
|
"",
|
|
42
44
|
"- Do not modify repository files.",
|
|
43
|
-
`- ${
|
|
44
|
-
"- In native plan mode, write the plan only through the provider's native plan mechanism; do not create or edit working-tree files.",
|
|
45
|
+
`- ${managedIterationClosureDirective(steering)}`,
|
|
46
|
+
...(steering ? [] : ["- In native plan mode, write the plan only through the provider's native plan mechanism; do not create or edit working-tree files."]),
|
|
45
47
|
];
|
|
46
48
|
}
|
|
47
49
|
// ── Planner prompts ──
|
|
48
|
-
export function buildPlannerPrompt(taskFile, outputPlanFile, managedSpec = false, explanationFile) {
|
|
50
|
+
export function buildPlannerPrompt(taskFile, outputPlanFile, managedSpec = false, explanationFile, steering) {
|
|
49
51
|
if (managedSpec) {
|
|
50
52
|
const lines = [
|
|
51
53
|
`Read the accepted Iteration Spec: ${taskFile}`,
|
|
@@ -53,7 +55,7 @@ export function buildPlannerPrompt(taskFile, outputPlanFile, managedSpec = false
|
|
|
53
55
|
"",
|
|
54
56
|
"Create an implementation plan.",
|
|
55
57
|
"",
|
|
56
|
-
...managedPlannerRepositorySpecificationLines(),
|
|
58
|
+
...managedPlannerRepositorySpecificationLines(false, steering),
|
|
57
59
|
];
|
|
58
60
|
appendManagedPlanOutputInstruction(lines, outputPlanFile);
|
|
59
61
|
return lines.join("\n");
|
|
@@ -66,8 +68,8 @@ export function buildPlannerPrompt(taskFile, outputPlanFile, managedSpec = false
|
|
|
66
68
|
appendOutputFileInstruction(lines, outputPlanFile);
|
|
67
69
|
return lines.join("\n");
|
|
68
70
|
}
|
|
69
|
-
export function buildRevisionPrompt(taskFile, planFile, feedbackFile, source, outputPlanFile, managedSpec = false, explanationFile) {
|
|
70
|
-
const sourceLabel = source === "reviewer" ? "reviewer's" : "user's";
|
|
71
|
+
export function buildRevisionPrompt(taskFile, planFile, feedbackFile, source, outputPlanFile, managedSpec = false, explanationFile, steering) {
|
|
72
|
+
const sourceLabel = source === "curated" ? "curated mixed reviewer/user" : source === "reviewer" ? "reviewer's" : "user's";
|
|
71
73
|
if (managedSpec) {
|
|
72
74
|
const lines = [
|
|
73
75
|
`Read the accepted Iteration Spec: ${taskFile}`,
|
|
@@ -76,7 +78,7 @@ export function buildRevisionPrompt(taskFile, planFile, feedbackFile, source, ou
|
|
|
76
78
|
if (planFile) {
|
|
77
79
|
lines.push(`Read your previous implementation plan: ${planFile}`);
|
|
78
80
|
}
|
|
79
|
-
lines.push(`Read the ${sourceLabel} feedback: ${feedbackFile}`, "", `Revise the implementation plan to address the ${sourceLabel} feedback.`, "", ...managedPlannerRepositorySpecificationLines(true));
|
|
81
|
+
lines.push(`Read the ${sourceLabel} feedback: ${feedbackFile}`, "", `Revise the implementation plan to address the ${sourceLabel} feedback.`, "", ...managedPlannerRepositorySpecificationLines(true, steering));
|
|
80
82
|
appendManagedPlanOutputInstruction(lines, outputPlanFile);
|
|
81
83
|
return lines.join("\n");
|
|
82
84
|
}
|
|
@@ -90,15 +92,15 @@ export function buildRevisionPrompt(taskFile, planFile, feedbackFile, source, ou
|
|
|
90
92
|
appendOutputFileInstruction(lines, outputPlanFile);
|
|
91
93
|
return lines.join("\n");
|
|
92
94
|
}
|
|
93
|
-
export function buildResumeRevisionPrompt(feedbackFile, source, outputPlanFile, managedSpec = false, explanationFile) {
|
|
94
|
-
const sourceLabel = source === "reviewer" ? "reviewer's" : "user's";
|
|
95
|
+
export function buildResumeRevisionPrompt(feedbackFile, source, outputPlanFile, managedSpec = false, explanationFile, steering) {
|
|
96
|
+
const sourceLabel = source === "curated" ? "curated mixed reviewer/user" : source === "reviewer" ? "reviewer's" : "user's";
|
|
95
97
|
if (managedSpec) {
|
|
96
98
|
const lines = [
|
|
97
99
|
`Read the new ${sourceLabel} feedback: ${feedbackFile}`,
|
|
98
100
|
...(explanationFile ? [`Read the supporting Iteration Rationale: ${explanationFile}`] : []),
|
|
99
101
|
"",
|
|
100
102
|
"Retain the accepted Iteration Spec and repository-specification scope. Revise every affected implementation and .poly-spec application step for the new feedback.",
|
|
101
|
-
|
|
103
|
+
managedIterationClosureDirective(steering),
|
|
102
104
|
];
|
|
103
105
|
appendManagedPlanOutputInstruction(lines, outputPlanFile, true);
|
|
104
106
|
return lines.join("\n");
|
|
@@ -112,23 +114,35 @@ export function buildResumeRevisionPrompt(feedbackFile, source, outputPlanFile,
|
|
|
112
114
|
return lines.join("\n");
|
|
113
115
|
}
|
|
114
116
|
// ── Impl-revision planner prompts ──
|
|
115
|
-
export function buildImplRevisionPrompt(planFile, prevRevisePlanFile, feedbackFile, outputPlanFile) {
|
|
117
|
+
export function buildImplRevisionPrompt(planFile, prevRevisePlanFile, feedbackFile, outputPlanFile, steering, explanationFile) {
|
|
116
118
|
const lines = [
|
|
117
119
|
`Read the approved implementation plan: ${planFile}`,
|
|
118
120
|
];
|
|
119
|
-
if (prevRevisePlanFile) {
|
|
121
|
+
if (prevRevisePlanFile && prevRevisePlanFile !== planFile) {
|
|
120
122
|
lines.push(`Read your previous change plan: ${prevRevisePlanFile}`);
|
|
121
123
|
}
|
|
122
|
-
lines.push(`Read the implementation review: ${feedbackFile}`, "",
|
|
124
|
+
lines.push(`Read the implementation review: ${feedbackFile}`, "", steering
|
|
125
|
+
? "Revise the complete main plan to address the implementation review, clearly identifying the implementation delta."
|
|
126
|
+
: "Create a change plan to address the review issues.");
|
|
127
|
+
if (steering?.iterationSpecFile) {
|
|
128
|
+
lines.push(managedExplanationLine(explanationFile), "", ...managedPlannerRepositorySpecificationLines(true, steering));
|
|
129
|
+
}
|
|
123
130
|
appendOutputFileInstruction(lines, outputPlanFile);
|
|
124
131
|
return lines.join("\n");
|
|
125
132
|
}
|
|
126
|
-
export function buildImplResumeRevisionPrompt(feedbackFile, outputPlanFile) {
|
|
133
|
+
export function buildImplResumeRevisionPrompt(feedbackFile, outputPlanFile, steering, explanationFile) {
|
|
127
134
|
const lines = [
|
|
128
135
|
`Read the new implementation review: ${feedbackFile}`,
|
|
129
136
|
"",
|
|
130
|
-
|
|
137
|
+
steering
|
|
138
|
+
? "Revise the complete main plan to address the implementation review, clearly identifying the implementation delta."
|
|
139
|
+
: "Create a new change plan to address the issues.",
|
|
131
140
|
];
|
|
141
|
+
if (steering?.iterationSpecFile) {
|
|
142
|
+
if (explanationFile)
|
|
143
|
+
lines.push(managedExplanationLine(explanationFile));
|
|
144
|
+
lines.push("Retain the complete implementation and repository-specification scope.", managedIterationClosureDirective(steering));
|
|
145
|
+
}
|
|
132
146
|
appendOutputFileInstruction(lines, outputPlanFile);
|
|
133
147
|
return lines.join("\n");
|
|
134
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agents/planners/prompts.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agents/planners/prompts.ts"],"names":[],"mappings":"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"}
|