poly-weaver 0.15.3 → 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.
Files changed (306) hide show
  1. package/dist/agents/implementors/adapter.d.ts +2 -0
  2. package/dist/agents/implementors/adapter.d.ts.map +1 -1
  3. package/dist/agents/implementors/adapter.js +8 -4
  4. package/dist/agents/implementors/adapter.js.map +1 -1
  5. package/dist/agents/implementors/handler.d.ts.map +1 -1
  6. package/dist/agents/implementors/handler.js +40 -8
  7. package/dist/agents/implementors/handler.js.map +1 -1
  8. package/dist/agents/implementors/prompts.d.ts +5 -4
  9. package/dist/agents/implementors/prompts.d.ts.map +1 -1
  10. package/dist/agents/implementors/prompts.js +14 -13
  11. package/dist/agents/implementors/prompts.js.map +1 -1
  12. package/dist/agents/implementors/types.d.ts +6 -4
  13. package/dist/agents/implementors/types.d.ts.map +1 -1
  14. package/dist/agents/interviewers/adapter.d.ts.map +1 -1
  15. package/dist/agents/interviewers/adapter.js +2 -1
  16. package/dist/agents/interviewers/adapter.js.map +1 -1
  17. package/dist/agents/interviewers/completion-warning.d.ts +5 -0
  18. package/dist/agents/interviewers/completion-warning.d.ts.map +1 -0
  19. package/dist/agents/interviewers/completion-warning.js +20 -0
  20. package/dist/agents/interviewers/completion-warning.js.map +1 -0
  21. package/dist/agents/interviewers/handler.d.ts.map +1 -1
  22. package/dist/agents/interviewers/handler.js +8 -1
  23. package/dist/agents/interviewers/handler.js.map +1 -1
  24. package/dist/agents/interviewers/types.d.ts +2 -0
  25. package/dist/agents/interviewers/types.d.ts.map +1 -1
  26. package/dist/agents/plan-steering.d.ts +16 -0
  27. package/dist/agents/plan-steering.d.ts.map +1 -0
  28. package/dist/agents/plan-steering.js +102 -0
  29. package/dist/agents/plan-steering.js.map +1 -0
  30. package/dist/agents/planners/adapter.d.ts +3 -1
  31. package/dist/agents/planners/adapter.d.ts.map +1 -1
  32. package/dist/agents/planners/adapter.js +30 -18
  33. package/dist/agents/planners/adapter.js.map +1 -1
  34. package/dist/agents/planners/handler.d.ts.map +1 -1
  35. package/dist/agents/planners/handler.js +51 -57
  36. package/dist/agents/planners/handler.js.map +1 -1
  37. package/dist/agents/planners/prompts.d.ts +6 -5
  38. package/dist/agents/planners/prompts.d.ts.map +1 -1
  39. package/dist/agents/planners/prompts.js +32 -18
  40. package/dist/agents/planners/prompts.js.map +1 -1
  41. package/dist/agents/planners/types.d.ts +8 -12
  42. package/dist/agents/planners/types.d.ts.map +1 -1
  43. package/dist/agents/prompt-utils.d.ts +2 -0
  44. package/dist/agents/prompt-utils.d.ts.map +1 -1
  45. package/dist/agents/prompt-utils.js +5 -0
  46. package/dist/agents/prompt-utils.js.map +1 -1
  47. package/dist/agents/reviewers/adapter.d.ts.map +1 -1
  48. package/dist/agents/reviewers/adapter.js +7 -2
  49. package/dist/agents/reviewers/adapter.js.map +1 -1
  50. package/dist/agents/reviewers/handler.d.ts.map +1 -1
  51. package/dist/agents/reviewers/handler.js +45 -11
  52. package/dist/agents/reviewers/handler.js.map +1 -1
  53. package/dist/agents/reviewers/prompts.d.ts +4 -4
  54. package/dist/agents/reviewers/prompts.d.ts.map +1 -1
  55. package/dist/agents/reviewers/prompts.js +43 -23
  56. package/dist/agents/reviewers/prompts.js.map +1 -1
  57. package/dist/agents/reviewers/types.d.ts +9 -4
  58. package/dist/agents/reviewers/types.d.ts.map +1 -1
  59. package/dist/agents/reviewers/types.js.map +1 -1
  60. package/dist/agents/runner.d.ts +18 -1
  61. package/dist/agents/runner.d.ts.map +1 -1
  62. package/dist/agents/runner.js +147 -21
  63. package/dist/agents/runner.js.map +1 -1
  64. package/dist/agents/simplifiers/handler.d.ts.map +1 -1
  65. package/dist/agents/simplifiers/handler.js +7 -2
  66. package/dist/agents/simplifiers/handler.js.map +1 -1
  67. package/dist/auto-update/detect-agents.d.ts +1 -0
  68. package/dist/auto-update/detect-agents.d.ts.map +1 -1
  69. package/dist/auto-update/detect-agents.js +8 -7
  70. package/dist/auto-update/detect-agents.js.map +1 -1
  71. package/dist/cli.js +16 -4
  72. package/dist/cli.js.map +1 -1
  73. package/dist/crosscheck/coordinator.d.ts +5 -0
  74. package/dist/crosscheck/coordinator.d.ts.map +1 -1
  75. package/dist/crosscheck/coordinator.js +177 -91
  76. package/dist/crosscheck/coordinator.js.map +1 -1
  77. package/dist/crosscheck/live-agent-session.d.ts +7 -1
  78. package/dist/crosscheck/live-agent-session.d.ts.map +1 -1
  79. package/dist/crosscheck/live-agent-session.js +61 -7
  80. package/dist/crosscheck/live-agent-session.js.map +1 -1
  81. package/dist/crosscheck/state.d.ts +3 -0
  82. package/dist/crosscheck/state.d.ts.map +1 -1
  83. package/dist/crosscheck/state.js +17 -2
  84. package/dist/crosscheck/state.js.map +1 -1
  85. package/dist/dump/collector.d.ts.map +1 -1
  86. package/dist/dump/collector.js +3 -0
  87. package/dist/dump/collector.js.map +1 -1
  88. package/dist/dump/service.d.ts.map +1 -1
  89. package/dist/dump/service.js +3 -0
  90. package/dist/dump/service.js.map +1 -1
  91. package/dist/dump/types.d.ts +3 -0
  92. package/dist/dump/types.d.ts.map +1 -1
  93. package/dist/dump/types.js.map +1 -1
  94. package/dist/flow/artifacts.d.ts +8 -1
  95. package/dist/flow/artifacts.d.ts.map +1 -1
  96. package/dist/flow/artifacts.js +82 -0
  97. package/dist/flow/artifacts.js.map +1 -1
  98. package/dist/flow/built-in/default-factory.d.ts.map +1 -1
  99. package/dist/flow/built-in/default-factory.js +0 -2
  100. package/dist/flow/built-in/default-factory.js.map +1 -1
  101. package/dist/flow/executor.d.ts +1 -2
  102. package/dist/flow/executor.d.ts.map +1 -1
  103. package/dist/flow/executor.js +30 -29
  104. package/dist/flow/executor.js.map +1 -1
  105. package/dist/flow/non-default-feedback.d.ts +14 -0
  106. package/dist/flow/non-default-feedback.d.ts.map +1 -0
  107. package/dist/flow/non-default-feedback.js +45 -0
  108. package/dist/flow/non-default-feedback.js.map +1 -0
  109. package/dist/flow/types.d.ts +16 -5
  110. package/dist/flow/types.d.ts.map +1 -1
  111. package/dist/flow/types.js +1 -2
  112. package/dist/flow/types.js.map +1 -1
  113. package/dist/managed-spec.d.ts +2 -0
  114. package/dist/managed-spec.d.ts.map +1 -1
  115. package/dist/managed-spec.js +22 -0
  116. package/dist/managed-spec.js.map +1 -1
  117. package/dist/offscreen/agent-viewer.d.ts +4 -1
  118. package/dist/offscreen/agent-viewer.d.ts.map +1 -1
  119. package/dist/offscreen/agent-viewer.js +58 -2
  120. package/dist/offscreen/agent-viewer.js.map +1 -1
  121. package/dist/offscreen/controller.d.ts +13 -2
  122. package/dist/offscreen/controller.d.ts.map +1 -1
  123. package/dist/offscreen/controller.js +212 -91
  124. package/dist/offscreen/controller.js.map +1 -1
  125. package/dist/offscreen/fork-launch.d.ts +2 -2
  126. package/dist/offscreen/fork-launch.d.ts.map +1 -1
  127. package/dist/offscreen/fork-launch.js +2 -2
  128. package/dist/offscreen/fork-launch.js.map +1 -1
  129. package/dist/offscreen/fork.d.ts +16 -2
  130. package/dist/offscreen/fork.d.ts.map +1 -1
  131. package/dist/offscreen/fork.js +79 -40
  132. package/dist/offscreen/fork.js.map +1 -1
  133. package/dist/offscreen/inquiry-pane.d.ts +2 -1
  134. package/dist/offscreen/inquiry-pane.d.ts.map +1 -1
  135. package/dist/offscreen/inquiry-pane.js +8 -2
  136. package/dist/offscreen/inquiry-pane.js.map +1 -1
  137. package/dist/offscreen/panes.d.ts +1 -0
  138. package/dist/offscreen/panes.d.ts.map +1 -1
  139. package/dist/offscreen/registry.d.ts +2 -2
  140. package/dist/offscreen/registry.d.ts.map +1 -1
  141. package/dist/offscreen/registry.js +5 -1
  142. package/dist/offscreen/registry.js.map +1 -1
  143. package/dist/offscreen/resolve.d.ts +2 -0
  144. package/dist/offscreen/resolve.d.ts.map +1 -1
  145. package/dist/offscreen/resolve.js +5 -1
  146. package/dist/offscreen/resolve.js.map +1 -1
  147. package/dist/offscreen/session-turn-monitor.d.ts +3 -1
  148. package/dist/offscreen/session-turn-monitor.d.ts.map +1 -1
  149. package/dist/offscreen/session-turn-monitor.js +10 -2
  150. package/dist/offscreen/session-turn-monitor.js.map +1 -1
  151. package/dist/offscreen/split-inquiry.d.ts.map +1 -1
  152. package/dist/offscreen/split-inquiry.js +5 -0
  153. package/dist/offscreen/split-inquiry.js.map +1 -1
  154. package/dist/offscreen/starting-pane.d.ts +13 -0
  155. package/dist/offscreen/starting-pane.d.ts.map +1 -0
  156. package/dist/offscreen/starting-pane.js +24 -0
  157. package/dist/offscreen/starting-pane.js.map +1 -0
  158. package/dist/offscreen/surface.d.ts +1 -0
  159. package/dist/offscreen/surface.d.ts.map +1 -1
  160. package/dist/offscreen/surface.js +5 -3
  161. package/dist/offscreen/surface.js.map +1 -1
  162. package/dist/orchestrator.d.ts +1 -2
  163. package/dist/orchestrator.d.ts.map +1 -1
  164. package/dist/orchestrator.js +12 -11
  165. package/dist/orchestrator.js.map +1 -1
  166. package/dist/prompts.d.ts +0 -16
  167. package/dist/prompts.d.ts.map +1 -1
  168. package/dist/prompts.js +0 -35
  169. package/dist/prompts.js.map +1 -1
  170. package/dist/providers/base-completion.d.ts +12 -2
  171. package/dist/providers/base-completion.d.ts.map +1 -1
  172. package/dist/providers/base-completion.js +111 -2
  173. package/dist/providers/base-completion.js.map +1 -1
  174. package/dist/providers/claude/completion.d.ts +3 -1
  175. package/dist/providers/claude/completion.d.ts.map +1 -1
  176. package/dist/providers/claude/completion.js +40 -4
  177. package/dist/providers/claude/completion.js.map +1 -1
  178. package/dist/providers/claude/session.d.ts +1 -32
  179. package/dist/providers/claude/session.d.ts.map +1 -1
  180. package/dist/providers/claude/session.js +1 -138
  181. package/dist/providers/claude/session.js.map +1 -1
  182. package/dist/providers/claude/strategy.d.ts.map +1 -1
  183. package/dist/providers/claude/strategy.js +3 -1
  184. package/dist/providers/claude/strategy.js.map +1 -1
  185. package/dist/providers/codex/completion.d.ts +3 -1
  186. package/dist/providers/codex/completion.d.ts.map +1 -1
  187. package/dist/providers/codex/completion.js +36 -5
  188. package/dist/providers/codex/completion.js.map +1 -1
  189. package/dist/providers/codex/session.d.ts +1 -1
  190. package/dist/providers/codex/session.d.ts.map +1 -1
  191. package/dist/providers/codex/session.js +1 -1
  192. package/dist/providers/codex/session.js.map +1 -1
  193. package/dist/providers/codex/strategy.d.ts.map +1 -1
  194. package/dist/providers/codex/strategy.js +3 -1
  195. package/dist/providers/codex/strategy.js.map +1 -1
  196. package/dist/providers/completion-gate.d.ts +14 -0
  197. package/dist/providers/completion-gate.d.ts.map +1 -0
  198. package/dist/providers/completion-gate.js +36 -0
  199. package/dist/providers/completion-gate.js.map +1 -0
  200. package/dist/providers/copilot/completion.d.ts +32 -21
  201. package/dist/providers/copilot/completion.d.ts.map +1 -1
  202. package/dist/providers/copilot/completion.js +100 -165
  203. package/dist/providers/copilot/completion.js.map +1 -1
  204. package/dist/providers/copilot/environment.d.ts +2 -0
  205. package/dist/providers/copilot/environment.d.ts.map +1 -0
  206. package/dist/providers/copilot/environment.js +8 -0
  207. package/dist/providers/copilot/environment.js.map +1 -0
  208. package/dist/providers/copilot/fork-state.d.ts +7 -0
  209. package/dist/providers/copilot/fork-state.d.ts.map +1 -0
  210. package/dist/providers/copilot/fork-state.js +150 -0
  211. package/dist/providers/copilot/fork-state.js.map +1 -0
  212. package/dist/providers/copilot/observation.d.ts +274 -0
  213. package/dist/providers/copilot/observation.d.ts.map +1 -0
  214. package/dist/providers/copilot/observation.js +2075 -0
  215. package/dist/providers/copilot/observation.js.map +1 -0
  216. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.d.mts +2 -0
  217. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.d.mts.map +1 -0
  218. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.mjs +426 -0
  219. package/dist/providers/copilot/observer-extension/com.github.copilot/extensions/poly-weaver-observer/extension.mjs.map +1 -0
  220. package/dist/providers/copilot/observer-extension/plugin.json +6 -0
  221. package/dist/providers/copilot/record-properties.d.ts +4 -0
  222. package/dist/providers/copilot/record-properties.d.ts.map +1 -0
  223. package/dist/providers/copilot/record-properties.js +14 -0
  224. package/dist/providers/copilot/record-properties.js.map +1 -0
  225. package/dist/providers/copilot/session.d.ts +3 -61
  226. package/dist/providers/copilot/session.d.ts.map +1 -1
  227. package/dist/providers/copilot/session.js +6 -321
  228. package/dist/providers/copilot/session.js.map +1 -1
  229. package/dist/providers/copilot/strategy.d.ts +3 -5
  230. package/dist/providers/copilot/strategy.d.ts.map +1 -1
  231. package/dist/providers/copilot/strategy.js +59 -66
  232. package/dist/providers/copilot/strategy.js.map +1 -1
  233. package/dist/providers/fork-cleanup.d.ts +4 -0
  234. package/dist/providers/fork-cleanup.d.ts.map +1 -0
  235. package/dist/providers/fork-cleanup.js +21 -0
  236. package/dist/providers/fork-cleanup.js.map +1 -0
  237. package/dist/providers/fork.d.ts +8 -3
  238. package/dist/providers/fork.d.ts.map +1 -1
  239. package/dist/providers/fork.js.map +1 -1
  240. package/dist/providers/invoke.d.ts.map +1 -1
  241. package/dist/providers/invoke.js +85 -34
  242. package/dist/providers/invoke.js.map +1 -1
  243. package/dist/providers/live.d.ts.map +1 -1
  244. package/dist/providers/live.js +43 -17
  245. package/dist/providers/live.js.map +1 -1
  246. package/dist/providers/observer-run.d.ts +4 -0
  247. package/dist/providers/observer-run.d.ts.map +1 -0
  248. package/dist/providers/observer-run.js +23 -0
  249. package/dist/providers/observer-run.js.map +1 -0
  250. package/dist/providers/session-launch.d.ts +3 -1
  251. package/dist/providers/session-launch.d.ts.map +1 -1
  252. package/dist/providers/session-launch.js +38 -19
  253. package/dist/providers/session-launch.js.map +1 -1
  254. package/dist/providers/types.d.ts +162 -15
  255. package/dist/providers/types.d.ts.map +1 -1
  256. package/dist/providers/types.js.map +1 -1
  257. package/dist/session/restore.d.ts +2 -1
  258. package/dist/session/restore.d.ts.map +1 -1
  259. package/dist/session/restore.js +26 -3
  260. package/dist/session/restore.js.map +1 -1
  261. package/dist/session/resume.d.ts.map +1 -1
  262. package/dist/session/resume.js +16 -2
  263. package/dist/session/resume.js.map +1 -1
  264. package/dist/session/session-store.d.ts.map +1 -1
  265. package/dist/session/session-store.js +9 -2
  266. package/dist/session/session-store.js.map +1 -1
  267. package/dist/terminal/host.d.ts +2 -0
  268. package/dist/terminal/host.d.ts.map +1 -1
  269. package/dist/terminal/host.js +19 -15
  270. package/dist/terminal/host.js.map +1 -1
  271. package/dist/terminal/layout.d.ts +7 -4
  272. package/dist/terminal/layout.d.ts.map +1 -1
  273. package/dist/terminal/layout.js +5 -3
  274. package/dist/terminal/layout.js.map +1 -1
  275. package/dist/terminal/output.d.ts +9 -2
  276. package/dist/terminal/output.d.ts.map +1 -1
  277. package/dist/terminal/output.js +13 -3
  278. package/dist/terminal/output.js.map +1 -1
  279. package/dist/terminal/paste-submit.d.ts.map +1 -1
  280. package/dist/terminal/paste-submit.js +43 -37
  281. package/dist/terminal/paste-submit.js.map +1 -1
  282. package/dist/user/curate-handler.d.ts +1 -5
  283. package/dist/user/curate-handler.d.ts.map +1 -1
  284. package/dist/user/curate-handler.js +32 -69
  285. package/dist/user/curate-handler.js.map +1 -1
  286. package/dist/user/handler.d.ts.map +1 -1
  287. package/dist/user/handler.js +18 -1
  288. package/dist/user/handler.js.map +1 -1
  289. package/dist/user/host-curate-prompt.d.ts.map +1 -1
  290. package/dist/user/host-curate-prompt.js +9 -6
  291. package/dist/user/host-curate-prompt.js.map +1 -1
  292. package/dist/user/host-prompt.d.ts.map +1 -1
  293. package/dist/user/host-prompt.js +14 -10
  294. package/dist/user/host-prompt.js.map +1 -1
  295. package/dist/user/prompt.d.ts +3 -0
  296. package/dist/user/prompt.d.ts.map +1 -1
  297. package/dist/user/prompt.js.map +1 -1
  298. package/dist/user/review-feedback.d.ts +43 -0
  299. package/dist/user/review-feedback.d.ts.map +1 -0
  300. package/dist/user/review-feedback.js +184 -0
  301. package/dist/user/review-feedback.js.map +1 -0
  302. package/dist/user/review-plan-pane.d.ts +5 -0
  303. package/dist/user/review-plan-pane.d.ts.map +1 -0
  304. package/dist/user/review-plan-pane.js +26 -0
  305. package/dist/user/review-plan-pane.js.map +1 -0
  306. package/package.json +4 -2
@@ -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;AAG3C,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,CAAC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,gBAAwC,GAChD,MAAM,CA4CR;AAED,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;CA6DvB"}
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,21 +1,26 @@
1
1
  import { BaseAdapter } from "../runner.js";
2
2
  import { defaultPlannerPrompts } from "./prompts.js";
3
+ import { writeFile } from "node:fs/promises";
4
+ import { appendPlanSteering } from "../plan-steering.js";
3
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) {
4
9
  if (opts.feedbackFile) {
5
10
  // Impl-replan: dedicated prompts with correct labels
6
11
  if (opts.implReplan) {
7
12
  if (opts.resumeSessionId) {
8
- return prompts.implResumeRevision(opts.feedbackFile, opts.outputPlanFile);
13
+ return prompts.implResumeRevision(opts.feedbackFile, opts.outputPlanFile, opts.planSteering, opts.explanationFile);
9
14
  }
10
- 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);
11
16
  }
12
17
  // Normal plan revision
13
18
  if (opts.resumeSessionId) {
14
- 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);
15
20
  }
16
- 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);
17
22
  }
18
- return prompts.initial(taskFile, opts.outputPlanFile, opts.managedSpec, opts.explanationFile);
23
+ return prompts.initial(taskFile, opts.outputPlanFile, opts.managedSpec, opts.explanationFile, opts.planSteering);
19
24
  }
20
25
  export class PlannerAdapter extends BaseAdapter {
21
26
  prompts;
@@ -44,24 +49,31 @@ export class PlannerAdapter extends BaseAdapter {
44
49
  promptPrefix: planMode.argPrefix,
45
50
  planMode: true,
46
51
  });
47
- // Extract clarifications and plan file path in parallel — both read the
48
- // same session file independently and have no data dependency.
49
- const [clarifications, planFilePath] = await Promise.all([
50
- this.strategy.session.extractClarifications
51
- ? this.strategy.session.extractClarifications(result.sessionFilePath, result.lineOffset)
52
- : [],
53
- this.strategy.session.extractPlanFilePath
54
- ? this.strategy.session.extractPlanFilePath(result.sessionFilePath, result.lineOffset)
55
- : undefined,
56
- ]);
52
+ let nativePlanFilePath = result.nativePlanResult?.path;
53
+ if (!nativePlanFilePath
54
+ && result.nativePlanResult?.content !== undefined
55
+ && opts.outputPlanFile) {
56
+ await writeFile(opts.outputPlanFile, result.nativePlanResult.content, "utf-8");
57
+ nativePlanFilePath = opts.outputPlanFile;
58
+ }
59
+ if (!nativePlanFilePath
60
+ && result.observed
61
+ && result.responseText.trim().length > 0
62
+ && opts.outputPlanFile) {
63
+ await writeFile(opts.outputPlanFile, result.responseText, "utf-8");
64
+ nativePlanFilePath = opts.outputPlanFile;
65
+ }
66
+ const planFilePath = nativePlanFilePath ??
67
+ (!result.observed && this.strategy.session.extractPlanFilePath
68
+ ? await this.strategy.session.extractPlanFilePath(result.sessionFilePath, result.lineOffset)
69
+ : undefined);
57
70
  if (planMode.nativePlanFile && !planFilePath) {
58
- // Native mode must extract a provider plan path; outputPlanFile fallback is non-native only.
59
- throw new Error("Native plan file extraction failed: no plan file found in session JSONL");
71
+ // Native mode must provide a provider plan path or SDK plan content.
72
+ throw new Error("Native plan file extraction failed: no plan path or content was returned");
60
73
  }
61
74
  return {
62
75
  sessionId: result.sessionId,
63
76
  rawText: result.responseText,
64
- clarifications: clarifications.length > 0 ? clarifications : undefined,
65
77
  agentUsed: this.name,
66
78
  planFilePath,
67
79
  sessionFilePath: this.sessionFilePath,
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/agents/planners/adapter.ts"],"names":[],"mappings":"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"}
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":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAmB7B,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;CAqIvB"}
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,9 +1,11 @@
1
- import { writeFile } from "node:fs/promises";
2
1
  import { join } from "node:path";
3
- import { appendClarifications } from "../../prompts.js";
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
- import { bindAttemptFailureReporter, bindDriverRuntime, bindPtyBufferReporter, bindSessionReporter, flushDriverSidecar, } from "../runner.js";
8
+ import { bindAttemptFailureReporter, bindDriverRuntime, bindObserverDiagnosticsReporter, bindPtyBufferReporter, bindSessionReporter, flushDriverSidecar, } from "../runner.js";
7
9
  import { bindStepLiveSidecar, cleanupStepLiveSidecar, resolveResumeSessionId, } from "../session-resume.js";
8
10
  /** Return the plan file path for a given version (1-based). */
9
11
  function planFileForVersion(root, version) {
@@ -16,28 +18,41 @@ export class PlannerRoleHandler {
16
18
  this.driver = driver;
17
19
  }
18
20
  async execute(step, ctx, retry) {
19
- const specFile = (step.reads.spec && ctx.artifacts.getFile(step.reads.spec))
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 = step.managedSpec && step.reads.explanation
24
- ? ctx.artifacts.getFile(step.reads.explanation)
25
- : undefined;
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 feedbackSource = feedbackFile
31
- ? verdictArtifact?.meta?.source
41
+ const source = verdictArtifact?.meta?.source;
42
+ const feedbackSource = feedbackFile && (source === "reviewer" || source === "user" || source === "curated")
43
+ ? source
32
44
  : undefined;
33
- const prevPlanFile = ctx.artifacts.getFile(step.writes.plan);
34
- if (this.planVersion === 0) {
35
- const restoredVersion = ctx.artifacts.getMeta(step.writes.plan, "version");
36
- if (restoredVersion != null && restoredVersion > 0)
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 = planFileForVersion(ctx.sessionDir, this.planVersion);
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,16 +60,15 @@ 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);
57
- bindDriverRuntime(this.driver, { output: ctx.output, terminalHost: ctx.terminalHost });
66
+ bindObserverDiagnosticsReporter(this.driver, ctx);
67
+ bindDriverRuntime(this.driver, {
68
+ output: ctx.output,
69
+ terminalHost: ctx.terminalHost,
70
+ providerObserverRuns: ctx.providerObserverRuns,
71
+ });
58
72
  const sidecarPath = bindStepLiveSidecar(this.driver, ctx, sessionKey, stepAny.driver);
59
73
  let planResult;
60
74
  let planText;
@@ -72,6 +86,7 @@ export class PlannerRoleHandler {
72
86
  feedbackSource,
73
87
  implReplan,
74
88
  managedSpec: step.managedSpec === true,
89
+ planSteering,
75
90
  });
76
91
  const actualPlanFile = planResult.planFilePath ?? outputPlanFile;
77
92
  const planText = await readPlanFromContract(actualPlanFile);
@@ -86,48 +101,27 @@ export class PlannerRoleHandler {
86
101
  ctx.lastStepSessionFilePaths?.push(planResult.sessionFilePath);
87
102
  }
88
103
  // Store plan artifact (use the actual file the plan was written to)
89
- ctx.artifacts.set(step.writes.plan, {
104
+ const artifact = {
90
105
  file: actualPlanFile,
91
106
  text: planText,
92
- meta: { version: this.planVersion },
93
- });
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);
94
121
  // Track session for resume
95
122
  if (planResult.sessionId) {
96
123
  ctx.sessionIds.set(sessionKey, planResult.sessionId);
97
124
  }
98
- // Merge in-planning clarifications (AskUserQuestion Q&A) into the
99
- // planner's input baseline: spec if present, task otherwise.
100
- if (!step.managedSpec && planResult.clarifications?.length) {
101
- const specKey = step.reads.spec;
102
- const taskKey = step.reads.task;
103
- const specArtifact = specKey ? ctx.artifacts.get(specKey) : undefined;
104
- const baseline = specArtifact?.text != null
105
- ? { key: specKey, artifact: specArtifact }
106
- : (() => {
107
- if (!taskKey || taskKey !== TASK)
108
- return null;
109
- const taskArtifact = ctx.artifacts.get(taskKey);
110
- return taskArtifact?.text != null
111
- ? { key: taskKey, artifact: taskArtifact }
112
- : null;
113
- })();
114
- if (baseline) {
115
- const entries = planResult.clarifications.map((c) => ({
116
- type: "qa",
117
- clarification: c,
118
- }));
119
- const result = appendClarifications(baseline.artifact.text, entries, ctx.nextClarificationNumber);
120
- ctx.nextClarificationNumber = result.nextNumber;
121
- ctx.artifacts.set(baseline.key, {
122
- ...baseline.artifact,
123
- text: result.content,
124
- file: baseline.artifact.file,
125
- });
126
- if (baseline.artifact.file) {
127
- await writeFile(baseline.artifact.file, result.content, "utf-8");
128
- }
129
- }
130
- }
131
125
  await cleanupStepLiveSidecar(sidecarPath);
132
126
  return { kind: "continue" };
133
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/agents/planners/handler.ts"],"names":[],"mappings":"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"}
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
- export declare function buildPlannerPrompt(taskFile: string, outputPlanFile: string | undefined, managedSpec?: boolean, explanationFile?: string): string;
3
- export declare function buildRevisionPrompt(taskFile: string, planFile: string | undefined, feedbackFile: string, source: "reviewer" | "user", outputPlanFile: string | undefined, managedSpec?: boolean, explanationFile?: string): string;
4
- export declare function buildResumeRevisionPrompt(feedbackFile: string, source: "reviewer" | "user", outputPlanFile: string | undefined, managedSpec?: boolean, explanationFile?: string): string;
5
- export declare function buildImplRevisionPrompt(planFile: string, prevRevisePlanFile: string | undefined, feedbackFile: string, outputPlanFile: string | undefined): string;
6
- export declare function buildImplResumeRevisionPrompt(feedbackFile: string, outputPlanFile: string | undefined): string;
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;AAmEnD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,UAAQ,EACnB,eAAe,CAAC,EAAE,MAAM,GACvB,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,EAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,UAAQ,EACnB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAkCR;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,GAAG,MAAM,EAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,UAAQ,EACnB,eAAe,CAAC,EAAE,MAAM,GACvB,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,GACjC,MAAM,CAcR;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,MAAM,CAQR;AAID,eAAO,MAAM,qBAAqB,EAAE,gBAMnC,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
- const MANAGED_ITERATION_CLOSURE_DIRECTIVE = "Do not move the Iteration Spec to `applied/`; a later stage does that.";
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
- "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.",
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
- `- ${MANAGED_ITERATION_CLOSURE_DIRECTIVE}`,
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
- MANAGED_ITERATION_CLOSURE_DIRECTIVE,
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}`, "", "Create a change plan to address the review issues.");
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
- "Create a new change plan to address the issues.",
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
  }