poly-weaver 0.5.1 → 0.6.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 (146) hide show
  1. package/dist/agents/implementors/handler.d.ts.map +1 -1
  2. package/dist/agents/implementors/handler.js +2 -1
  3. package/dist/agents/implementors/handler.js.map +1 -1
  4. package/dist/agents/planners/handler.d.ts.map +1 -1
  5. package/dist/agents/planners/handler.js +2 -1
  6. package/dist/agents/planners/handler.js.map +1 -1
  7. package/dist/agents/reviewers/handler.d.ts.map +1 -1
  8. package/dist/agents/reviewers/handler.js +9 -2
  9. package/dist/agents/reviewers/handler.js.map +1 -1
  10. package/dist/agents/runner.d.ts +40 -1
  11. package/dist/agents/runner.d.ts.map +1 -1
  12. package/dist/agents/runner.js +213 -14
  13. package/dist/agents/runner.js.map +1 -1
  14. package/dist/agents/simplifiers/handler.d.ts.map +1 -1
  15. package/dist/agents/simplifiers/handler.js +2 -1
  16. package/dist/agents/simplifiers/handler.js.map +1 -1
  17. package/dist/ansi.d.ts +26 -0
  18. package/dist/ansi.d.ts.map +1 -1
  19. package/dist/ansi.js +26 -0
  20. package/dist/ansi.js.map +1 -1
  21. package/dist/cli.js +46 -16
  22. package/dist/cli.js.map +1 -1
  23. package/dist/flow/built-in/default.js +1 -1
  24. package/dist/flow/built-in/default.js.map +1 -1
  25. package/dist/flow/built-in/default.ts +1 -1
  26. package/dist/flow/built-in/why-so-serious.js +1 -1
  27. package/dist/flow/built-in/why-so-serious.js.map +1 -1
  28. package/dist/flow/executor.d.ts.map +1 -1
  29. package/dist/flow/executor.js +7 -2
  30. package/dist/flow/executor.js.map +1 -1
  31. package/dist/flow/types.d.ts +5 -0
  32. package/dist/flow/types.d.ts.map +1 -1
  33. package/dist/flow/types.js.map +1 -1
  34. package/dist/orchestrator.d.ts +10 -4
  35. package/dist/orchestrator.d.ts.map +1 -1
  36. package/dist/orchestrator.js +34 -14
  37. package/dist/orchestrator.js.map +1 -1
  38. package/dist/providers/claude/session.d.ts +3 -1
  39. package/dist/providers/claude/session.d.ts.map +1 -1
  40. package/dist/providers/claude/session.js +2 -2
  41. package/dist/providers/claude/session.js.map +1 -1
  42. package/dist/providers/codex/session.d.ts +6 -3
  43. package/dist/providers/codex/session.d.ts.map +1 -1
  44. package/dist/providers/codex/session.js +24 -4
  45. package/dist/providers/codex/session.js.map +1 -1
  46. package/dist/providers/copilot/session.d.ts +3 -1
  47. package/dist/providers/copilot/session.d.ts.map +1 -1
  48. package/dist/providers/copilot/session.js +15 -2
  49. package/dist/providers/copilot/session.js.map +1 -1
  50. package/dist/providers/types.d.ts +14 -2
  51. package/dist/providers/types.d.ts.map +1 -1
  52. package/dist/providers/types.js.map +1 -1
  53. package/dist/pty/exit.d.ts +13 -5
  54. package/dist/pty/exit.d.ts.map +1 -1
  55. package/dist/pty/exit.js +19 -19
  56. package/dist/pty/exit.js.map +1 -1
  57. package/dist/pty/spawn.d.ts +12 -6
  58. package/dist/pty/spawn.d.ts.map +1 -1
  59. package/dist/pty/spawn.js +22 -70
  60. package/dist/pty/spawn.js.map +1 -1
  61. package/dist/pty/types.d.ts +12 -3
  62. package/dist/pty/types.d.ts.map +1 -1
  63. package/dist/session/locator.d.ts +23 -2
  64. package/dist/session/locator.d.ts.map +1 -1
  65. package/dist/session/locator.js +67 -4
  66. package/dist/session/locator.js.map +1 -1
  67. package/dist/status-bar.d.ts +21 -1
  68. package/dist/status-bar.d.ts.map +1 -1
  69. package/dist/status-bar.js +109 -34
  70. package/dist/status-bar.js.map +1 -1
  71. package/dist/terminal/cleanup.d.ts +21 -0
  72. package/dist/terminal/cleanup.d.ts.map +1 -0
  73. package/dist/terminal/cleanup.js +22 -0
  74. package/dist/terminal/cleanup.js.map +1 -0
  75. package/dist/terminal/host.d.ts +244 -0
  76. package/dist/terminal/host.d.ts.map +1 -0
  77. package/dist/terminal/host.js +642 -0
  78. package/dist/terminal/host.js.map +1 -0
  79. package/dist/terminal/input-router.d.ts +146 -0
  80. package/dist/terminal/input-router.d.ts.map +1 -0
  81. package/dist/terminal/input-router.js +426 -0
  82. package/dist/terminal/input-router.js.map +1 -0
  83. package/dist/terminal/layout.d.ts +55 -0
  84. package/dist/terminal/layout.d.ts.map +1 -0
  85. package/dist/terminal/layout.js +51 -0
  86. package/dist/terminal/layout.js.map +1 -0
  87. package/dist/terminal/output.d.ts +83 -0
  88. package/dist/terminal/output.d.ts.map +1 -0
  89. package/dist/terminal/output.js +107 -0
  90. package/dist/terminal/output.js.map +1 -0
  91. package/dist/terminal/render.d.ts +36 -0
  92. package/dist/terminal/render.d.ts.map +1 -0
  93. package/dist/terminal/render.js +233 -0
  94. package/dist/terminal/render.js.map +1 -0
  95. package/dist/terminal/virtual-terminal.d.ts +54 -0
  96. package/dist/terminal/virtual-terminal.d.ts.map +1 -0
  97. package/dist/terminal/virtual-terminal.js +110 -0
  98. package/dist/terminal/virtual-terminal.js.map +1 -0
  99. package/dist/terminal-input.d.ts +10 -0
  100. package/dist/terminal-input.d.ts.map +1 -1
  101. package/dist/terminal-input.js +46 -0
  102. package/dist/terminal-input.js.map +1 -1
  103. package/dist/user/auto-curate-prompt.d.ts +17 -0
  104. package/dist/user/auto-curate-prompt.d.ts.map +1 -0
  105. package/dist/user/auto-curate-prompt.js +22 -0
  106. package/dist/user/auto-curate-prompt.js.map +1 -0
  107. package/dist/user/curate-handler.d.ts.map +1 -1
  108. package/dist/user/curate-handler.js +10 -2
  109. package/dist/user/curate-handler.js.map +1 -1
  110. package/dist/user/curate-prompt.d.ts +9 -7
  111. package/dist/user/curate-prompt.d.ts.map +1 -1
  112. package/dist/user/curate-prompt.js +2 -341
  113. package/dist/user/curate-prompt.js.map +1 -1
  114. package/dist/user/handler.d.ts +13 -1
  115. package/dist/user/handler.d.ts.map +1 -1
  116. package/dist/user/handler.js +27 -15
  117. package/dist/user/handler.js.map +1 -1
  118. package/dist/user/hard-wrap.d.ts +11 -0
  119. package/dist/user/hard-wrap.d.ts.map +1 -0
  120. package/dist/user/hard-wrap.js +44 -0
  121. package/dist/user/hard-wrap.js.map +1 -0
  122. package/dist/user/host-curate-prompt.d.ts +34 -0
  123. package/dist/user/host-curate-prompt.d.ts.map +1 -0
  124. package/dist/user/host-curate-prompt.js +453 -0
  125. package/dist/user/host-curate-prompt.js.map +1 -0
  126. package/dist/user/host-prompt.d.ts +21 -0
  127. package/dist/user/host-prompt.d.ts.map +1 -0
  128. package/dist/user/host-prompt.js +337 -0
  129. package/dist/user/host-prompt.js.map +1 -0
  130. package/dist/user/index.d.ts +3 -3
  131. package/dist/user/index.d.ts.map +1 -1
  132. package/dist/user/index.js +2 -2
  133. package/dist/user/index.js.map +1 -1
  134. package/dist/user/plan-pane.d.ts +18 -0
  135. package/dist/user/plan-pane.d.ts.map +1 -0
  136. package/dist/user/plan-pane.js +33 -0
  137. package/dist/user/plan-pane.js.map +1 -0
  138. package/dist/user/prompt.d.ts +25 -42
  139. package/dist/user/prompt.d.ts.map +1 -1
  140. package/dist/user/prompt.js +16 -278
  141. package/dist/user/prompt.js.map +1 -1
  142. package/dist/user/split-surface.d.ts +32 -0
  143. package/dist/user/split-surface.d.ts.map +1 -0
  144. package/dist/user/split-surface.js +66 -0
  145. package/dist/user/split-surface.js.map +1 -0
  146. package/package.json +2 -1
@@ -0,0 +1,337 @@
1
+ import { bold, dim, green, reset, visibleLength, } from "../ansi.js";
2
+ import { RawInputParser } from "./prompt.js";
3
+ import { clipToWidth } from "./curate-prompt.js";
4
+ import { buildPlanPane } from "./plan-pane.js";
5
+ /** Maximum visible rows for the multiline feedback editor. */
6
+ const FEEDBACK_EDITOR_MAX_ROWS = 5;
7
+ /** Lines of overlap when paging the plan (PageUp/PageDown). */
8
+ const PLAN_PAGE_OVERLAP = 1;
9
+ const ACTIVE_PREFIX = " ❯ ";
10
+ const INACTIVE_PREFIX = " ";
11
+ /**
12
+ * Host-backed user-review prompt with a top-down stack layout.
13
+ *
14
+ * Plan on top (header rule + scrollable body), full-width dim ─ separator, a
15
+ * blank top-margin row, the controls block (Approve + bounded feedback editor
16
+ * + optional hint), and a blank bottom-margin row above the host status bar.
17
+ *
18
+ * Key handling:
19
+ * - ↑/↓ toggles between Approve and the editor (does NOT scroll the plan).
20
+ * - PageUp/PageDown/Home/End/wheel scrolls the plan.
21
+ * - Ctrl+D submits feedback (or accepts when on Approve), Ctrl+C accepts.
22
+ * - Ctrl+] is consumed by the host's `InputRouter` for dump capture.
23
+ */
24
+ export class HostBackedUserPrompt {
25
+ host;
26
+ constructor(host) {
27
+ this.host = host;
28
+ }
29
+ async prompt(plan, _phase, context) {
30
+ if (!this.host.isInteractive) {
31
+ return { accepted: true };
32
+ }
33
+ return new Promise((resolve) => {
34
+ const state = {
35
+ mode: "input",
36
+ lines: [""],
37
+ cursorLine: 0,
38
+ feedbackScrollTop: 0,
39
+ planScrollTop: 0,
40
+ planAtEnd: false,
41
+ };
42
+ const parser = new RawInputParser();
43
+ let detach;
44
+ const finish = (result) => {
45
+ detach?.();
46
+ detach = undefined;
47
+ resolve(result);
48
+ };
49
+ const mode = {
50
+ getSurface: () => {
51
+ const layout = this.host.getLayout();
52
+ const cols = Math.max(20, layout.columns);
53
+ const rows = Math.max(1, layout.childRows);
54
+ return buildSurface(plan, context, state, cols, rows);
55
+ },
56
+ onInput: (chunk) => {
57
+ const events = parser.parseChunk(chunk);
58
+ let dirty = false;
59
+ for (const event of events) {
60
+ if (event.type === "ctrl-c") {
61
+ finish({ accepted: true });
62
+ return true;
63
+ }
64
+ if (event.type === "submit") {
65
+ if (state.mode === "approve") {
66
+ finish({ accepted: true });
67
+ return true;
68
+ }
69
+ const text = state.lines.join("\n").trim();
70
+ if (text.length > 0) {
71
+ finish({ accepted: false, comments: text });
72
+ return true;
73
+ }
74
+ continue;
75
+ }
76
+ if (event.type === "newline") {
77
+ if (state.mode === "approve") {
78
+ finish({ accepted: true });
79
+ return true;
80
+ }
81
+ state.lines.push("");
82
+ state.cursorLine = state.lines.length - 1;
83
+ dirty = true;
84
+ continue;
85
+ }
86
+ if (event.type === "arrow") {
87
+ if (event.direction === "up" && state.mode === "input") {
88
+ state.mode = "approve";
89
+ dirty = true;
90
+ }
91
+ else if (event.direction === "down" && state.mode === "approve") {
92
+ state.mode = "input";
93
+ dirty = true;
94
+ }
95
+ continue;
96
+ }
97
+ if (event.type === "scroll-page") {
98
+ const { planHeight, planLines } = planMetrics(plan, context, state, this.host);
99
+ const step = Math.max(1, planHeight - PLAN_PAGE_OVERLAP);
100
+ const max = Math.max(0, planLines - planHeight);
101
+ if (event.direction === "up") {
102
+ state.planScrollTop = Math.max(0, state.planScrollTop - step);
103
+ }
104
+ else {
105
+ state.planScrollTop = Math.min(max, state.planScrollTop + step);
106
+ }
107
+ state.planAtEnd = state.planScrollTop >= max;
108
+ dirty = true;
109
+ continue;
110
+ }
111
+ if (event.type === "scroll-home") {
112
+ state.planScrollTop = 0;
113
+ state.planAtEnd = false;
114
+ dirty = true;
115
+ continue;
116
+ }
117
+ if (event.type === "scroll-end") {
118
+ const { planHeight, planLines } = planMetrics(plan, context, state, this.host);
119
+ state.planScrollTop = Math.max(0, planLines - planHeight);
120
+ state.planAtEnd = true;
121
+ dirty = true;
122
+ continue;
123
+ }
124
+ if (event.type === "scroll-lines") {
125
+ const { planHeight, planLines } = planMetrics(plan, context, state, this.host);
126
+ const max = Math.max(0, planLines - planHeight);
127
+ state.planScrollTop = Math.min(max, Math.max(0, state.planScrollTop + event.delta));
128
+ state.planAtEnd = state.planScrollTop >= max;
129
+ dirty = true;
130
+ continue;
131
+ }
132
+ if (event.type === "insert") {
133
+ if (state.mode === "approve")
134
+ state.mode = "input";
135
+ const last = state.lines.length - 1;
136
+ state.lines[last] = state.lines[last] + event.text;
137
+ state.cursorLine = last;
138
+ dirty = true;
139
+ continue;
140
+ }
141
+ if (event.type === "backspace") {
142
+ if (state.mode === "approve") {
143
+ state.mode = "input";
144
+ dirty = true;
145
+ continue;
146
+ }
147
+ const last = state.lines.length - 1;
148
+ if (state.lines[last].length > 0) {
149
+ state.lines[last] = state.lines[last].slice(0, -1);
150
+ dirty = true;
151
+ }
152
+ else if (state.lines.length > 1) {
153
+ state.lines.pop();
154
+ state.cursorLine = state.lines.length - 1;
155
+ dirty = true;
156
+ }
157
+ continue;
158
+ }
159
+ // tab/esc/dump ignored — dump is consumed by the host router.
160
+ }
161
+ if (dirty)
162
+ this.host.scheduleParentUiRender();
163
+ return true;
164
+ },
165
+ };
166
+ detach = this.host.attachParentUi(mode);
167
+ });
168
+ }
169
+ }
170
+ /**
171
+ * Build the natural-height controls block (no padding):
172
+ * ❯ Approve (Enter) — when state.mode === "approve"
173
+ * _ — feedback editor (1..5 rows; placeholder when empty)
174
+ * Ctrl+D to submit — hint, only when input mode and editor non-empty
175
+ *
176
+ * Returns its natural height (1..7 rows). Cursor is pane-local.
177
+ */
178
+ function buildControlsBlock(state, width) {
179
+ const approveRow = state.mode === "approve"
180
+ ? `${ACTIVE_PREFIX}${bold}${green}Approve (Enter)${reset}`
181
+ : `${INACTIVE_PREFIX}${dim}Approve${reset}`;
182
+ const showPlaceholder = state.lines.length === 1 && state.lines[0].length === 0;
183
+ const showHint = !showPlaceholder && state.mode === "input";
184
+ const hintRow = showHint
185
+ ? `${INACTIVE_PREFIX}${dim}Ctrl+D to submit${reset}`
186
+ : undefined;
187
+ const unboundedEditor = showPlaceholder ? 1 : state.lines.length;
188
+ const editorHeight = Math.min(FEEDBACK_EDITOR_MAX_ROWS, Math.max(1, unboundedEditor));
189
+ if (showPlaceholder) {
190
+ state.feedbackScrollTop = 0;
191
+ }
192
+ else {
193
+ const cur = Math.min(Math.max(0, state.cursorLine), state.lines.length - 1);
194
+ if (cur < state.feedbackScrollTop)
195
+ state.feedbackScrollTop = cur;
196
+ else if (cur >= state.feedbackScrollTop + editorHeight) {
197
+ state.feedbackScrollTop = cur - editorHeight + 1;
198
+ }
199
+ const maxScroll = Math.max(0, state.lines.length - editorHeight);
200
+ if (state.feedbackScrollTop > maxScroll)
201
+ state.feedbackScrollTop = maxScroll;
202
+ if (state.feedbackScrollTop < 0)
203
+ state.feedbackScrollTop = 0;
204
+ }
205
+ const placeholder = "Type feedback (multi-line, Ctrl+D to submit)";
206
+ const editorBody = [];
207
+ if (showPlaceholder) {
208
+ const first = state.mode === "input"
209
+ ? `${ACTIVE_PREFIX}${dim}${placeholder}${reset}`
210
+ : `${INACTIVE_PREFIX}${dim}${placeholder}${reset}`;
211
+ editorBody.push(first);
212
+ while (editorBody.length < editorHeight)
213
+ editorBody.push("");
214
+ }
215
+ else {
216
+ for (let i = 0; i < editorHeight; i++) {
217
+ const idx = state.feedbackScrollTop + i;
218
+ if (idx >= state.lines.length) {
219
+ editorBody.push("");
220
+ continue;
221
+ }
222
+ const isFirstUnderlying = idx === 0 && i === 0;
223
+ const prefix = isFirstUnderlying && state.mode === "input"
224
+ ? ACTIVE_PREFIX
225
+ : INACTIVE_PREFIX;
226
+ editorBody.push(`${prefix}${state.lines[idx]}`);
227
+ }
228
+ }
229
+ const lines = [
230
+ approveRow,
231
+ ...editorBody,
232
+ ...(hintRow ? [hintRow] : []),
233
+ ];
234
+ const approveRowInBlock = 0;
235
+ const editorStart = 1;
236
+ let cursorRow;
237
+ let cursorCol;
238
+ if (state.mode === "approve") {
239
+ cursorRow = approveRowInBlock;
240
+ cursorCol = ACTIVE_PREFIX.length;
241
+ }
242
+ else if (showPlaceholder) {
243
+ cursorRow = editorStart;
244
+ cursorCol = ACTIVE_PREFIX.length;
245
+ }
246
+ else {
247
+ const offset = Math.min(Math.max(0, state.cursorLine - state.feedbackScrollTop), editorHeight - 1);
248
+ cursorRow = editorStart + offset;
249
+ const lineIdx = state.feedbackScrollTop + offset;
250
+ const lineText = state.lines[lineIdx] ?? "";
251
+ const isFirstUnderlying = lineIdx === 0 && offset === 0;
252
+ const prefixLen = isFirstUnderlying
253
+ ? ACTIVE_PREFIX.length
254
+ : INACTIVE_PREFIX.length;
255
+ cursorCol = prefixLen + visibleLength(lineText);
256
+ }
257
+ if (cursorRow < 0)
258
+ cursorRow = 0;
259
+ if (cursorCol < 0)
260
+ cursorCol = 0;
261
+ if (cursorCol >= width)
262
+ cursorCol = Math.max(0, width - 1);
263
+ return {
264
+ lines: lines.map((l) => clipToWidth(l, width)),
265
+ cursor: { row: cursorRow, col: cursorCol },
266
+ };
267
+ }
268
+ /**
269
+ * Compute the plan area's available height given total `rows` and the natural
270
+ * controls block height. Reserves 1 row for the dim ─ separator, 1 for the
271
+ * top-margin blank, and 1 for the bottom-margin blank.
272
+ */
273
+ function computePlanRows(controlsHeight, rows) {
274
+ return Math.max(1, rows - controlsHeight - 3);
275
+ }
276
+ function buildPlanLines(plan, context, state, width, planRows) {
277
+ const pane = buildPlanPane(plan, context.phaseLabel, width);
278
+ const total = pane.lines.length;
279
+ const maxScroll = Math.max(0, total - planRows);
280
+ // Re-pin to the new bottom when the user last scrolled to End and the plan
281
+ // window has since shrunk (e.g. the controls block grew while typing).
282
+ if (state.planAtEnd)
283
+ state.planScrollTop = maxScroll;
284
+ if (state.planScrollTop > maxScroll)
285
+ state.planScrollTop = maxScroll;
286
+ if (state.planScrollTop < 0)
287
+ state.planScrollTop = 0;
288
+ const sliced = pane.lines.slice(state.planScrollTop, state.planScrollTop + planRows);
289
+ while (sliced.length < planRows)
290
+ sliced.push("");
291
+ return {
292
+ lines: sliced.map((l) => clipToWidth(l, width)),
293
+ total,
294
+ };
295
+ }
296
+ function buildSurface(plan, context, state, cols, rows) {
297
+ const controls = buildControlsBlock(state, cols);
298
+ const planRows = computePlanRows(controls.lines.length, rows);
299
+ const { lines: planLines } = buildPlanLines(plan, context, state, cols, planRows);
300
+ const separator = `${dim}${"─".repeat(cols)}${reset}`;
301
+ const composed = [
302
+ ...planLines,
303
+ separator,
304
+ "",
305
+ ...controls.lines,
306
+ "",
307
+ ];
308
+ // Pad / clip to exactly `rows` rows. The plan area is the only flex region;
309
+ // controls + separator + margins remain anchored to the bottom.
310
+ while (composed.length < rows)
311
+ composed.push("");
312
+ if (composed.length > rows) {
313
+ // Clip from the top of the plan area; never clip controls.
314
+ composed.splice(0, composed.length - rows);
315
+ }
316
+ // Cursor row sits in the controls block: planRows + 1 (separator) + 1 (top
317
+ // margin) + controls.cursor.row.
318
+ let cursorRow = planRows + 1 + 1 + controls.cursor.row;
319
+ if (cursorRow < 0)
320
+ cursorRow = 0;
321
+ if (cursorRow >= rows)
322
+ cursorRow = rows - 1;
323
+ return {
324
+ lines: composed,
325
+ cursor: { row: cursorRow, col: controls.cursor.col },
326
+ };
327
+ }
328
+ function planMetrics(plan, context, state, host) {
329
+ const layout = host.getLayout();
330
+ const cols = Math.max(20, layout.columns);
331
+ const rows = Math.max(1, layout.childRows);
332
+ const controls = buildControlsBlock(state, cols);
333
+ const planHeight = computePlanRows(controls.lines.length, rows);
334
+ const pane = buildPlanPane(plan, context.phaseLabel, cols);
335
+ return { planHeight, planLines: pane.lines.length };
336
+ }
337
+ //# sourceMappingURL=host-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-prompt.js","sourceRoot":"","sources":["../../src/user/host-prompt.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- export type { UserPromptHandler, UserPromptResult, UserPromptContext } from "./prompt.js";
2
- export { InteractiveUserPrompt, AutoUserPrompt, RawInputParser } from "./prompt.js";
1
+ export type { UserPromptHandler, UserPromptResult, UserPromptContext, UserPhaseLabel, } from "./prompt.js";
2
+ export { AutoUserPrompt, RawInputParser } from "./prompt.js";
3
3
  export { UserRoleHandler } from "./handler.js";
4
4
  export { user } from "./dsl.js";
5
5
  export { CurateVerdictRoleHandler, buildCuratedVerdict } from "./curate-handler.js";
6
- export { CurateVerdictPrompt } from "./curate-prompt.js";
6
+ export { AutoCuratePrompt } from "./auto-curate-prompt.js";
7
7
  export type { CuratePromptHandler, CurateDecision, CurateDecisionRecord, CurateResult, } from "./curate-prompt.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,MAAM,oBAAoB,CAAC"}
@@ -1,6 +1,6 @@
1
- export { InteractiveUserPrompt, AutoUserPrompt, RawInputParser } from "./prompt.js";
1
+ export { AutoUserPrompt, RawInputParser } from "./prompt.js";
2
2
  export { UserRoleHandler } from "./handler.js";
3
3
  export { user } from "./dsl.js";
4
4
  export { CurateVerdictRoleHandler, buildCuratedVerdict } from "./curate-handler.js";
5
- export { CurateVerdictPrompt } from "./curate-prompt.js";
5
+ export { AutoCuratePrompt } from "./auto-curate-prompt.js";
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Phase label drives the right-pane header text. Computed by
3
+ * `UserRoleHandler` from the verdict artifact + previous step role.
4
+ */
5
+ export type PhaseLabel = "first" | "revised" | "approved" | "unapproved";
6
+ export interface PlanPaneOutput {
7
+ /** Lines (already styled & wrapped) to render. Includes header + rule. */
8
+ lines: string[];
9
+ /** Number of body content lines (post-scroll-clamp helper for callers). */
10
+ contentLines: number;
11
+ }
12
+ /**
13
+ * Build the right-pane plan view. Header (bold cyan) + thin rule + hard-wrapped
14
+ * plan body. Caller is responsible for slicing by `scrollTop` and clipping to
15
+ * the available pane height.
16
+ */
17
+ export declare function buildPlanPane(plan: string, phase: PhaseLabel, width: number): PlanPaneOutput;
18
+ //# sourceMappingURL=plan-pane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-pane.d.ts","sourceRoot":"","sources":["../../src/user/plan-pane.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;CACtB;AAeD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,GACZ,cAAc,CAWhB"}
@@ -0,0 +1,33 @@
1
+ import { bold, cyan, dim, reset } from "../ansi.js";
2
+ import { hardWrapLine } from "./hard-wrap.js";
3
+ function headerText(phase) {
4
+ switch (phase) {
5
+ case "first":
6
+ return "Generated Plan";
7
+ case "revised":
8
+ return "Revised Plan";
9
+ case "approved":
10
+ return "Approved Plan";
11
+ case "unapproved":
12
+ return "Unapproved Plan (Max Iterations Reached)";
13
+ }
14
+ }
15
+ /**
16
+ * Build the right-pane plan view. Header (bold cyan) + thin rule + hard-wrapped
17
+ * plan body. Caller is responsible for slicing by `scrollTop` and clipping to
18
+ * the available pane height.
19
+ */
20
+ export function buildPlanPane(plan, phase, width) {
21
+ const lines = [];
22
+ const w = Math.max(1, width);
23
+ lines.push(`${bold}${cyan}${headerText(phase)}${reset}`);
24
+ lines.push(`${dim}${"─".repeat(w)}${reset}`);
25
+ if (plan.length > 0) {
26
+ for (const raw of plan.split(/\r?\n/)) {
27
+ for (const wrapped of hardWrapLine(raw, w))
28
+ lines.push(wrapped);
29
+ }
30
+ }
31
+ return { lines, contentLines: lines.length };
32
+ }
33
+ //# sourceMappingURL=plan-pane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-pane.js","sourceRoot":"","sources":["../../src/user/plan-pane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAe9C,SAAS,UAAU,CAAC,KAAiB;IACnC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,cAAc,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,eAAe,CAAC;QACzB,KAAK,YAAY;YACf,OAAO,0CAA0C,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,KAAiB,EACjB,KAAa;IAEb,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/C,CAAC"}
@@ -1,10 +1,8 @@
1
- import { type FeatureGates } from "../providers/registry.js";
2
- import type { BuiltinRole } from "../flow/types.js";
3
1
  export interface UserPromptResult {
4
2
  accepted: boolean;
5
3
  comments?: string;
6
4
  }
7
- type RawInputEvent = {
5
+ export type RawInputEvent = {
8
6
  type: "insert";
9
7
  text: string;
10
8
  } | {
@@ -22,9 +20,21 @@ type RawInputEvent = {
22
20
  } | {
23
21
  type: "arrow";
24
22
  direction: "up" | "down";
23
+ } | {
24
+ type: "scroll-page";
25
+ direction: "up" | "down";
26
+ } | {
27
+ type: "scroll-home";
28
+ } | {
29
+ type: "scroll-end";
30
+ } | {
31
+ type: "scroll-lines";
32
+ delta: number;
25
33
  } | {
26
34
  type: "dump";
27
35
  };
36
+ /** Lines moved per single mouse-wheel notch in prompt scroll handling. */
37
+ export declare const PROMPT_WHEEL_LINES_PER_EVENT = 3;
28
38
  /**
29
39
  * Stateful parser for raw stdin bytes in normal VT mode and passive kitty keyboard
30
40
  * protocol mode.
@@ -41,55 +51,28 @@ export declare class RawInputParser {
41
51
  onDeferred(cb: (events: RawInputEvent[]) => void): void;
42
52
  private mapKey;
43
53
  }
54
+ /**
55
+ * Phase label for the user-review screen. Computed by `UserRoleHandler`
56
+ * from the verdict artifact and `ctx.previousStepRole`.
57
+ */
58
+ export type UserPhaseLabel = "first" | "revised" | "approved" | "unapproved";
44
59
  export interface UserPromptContext {
45
- /** Whether the reviewer approved the plan. undefined = no verdict yet. */
46
- verdictApproved?: boolean;
47
- /** True when no prior verdict exists (first review before any reviewer runs). */
48
- isFirstReview?: boolean;
49
- /** Who produced the verdict: "user" | "reviewer" | undefined. */
50
- verdictSource?: string;
51
- /** Role of the step that executed immediately before this user step. */
52
- previousStepRole?: BuiltinRole | "user";
60
+ /** Phase label that drives the right-pane plan header and left-pane subtitle. */
61
+ phaseLabel: UserPhaseLabel;
53
62
  }
54
63
  export interface UserPromptHandler {
55
64
  /**
56
65
  * Present the plan to the user and collect their decision.
57
- * @param plan - The full plan text. Displayed unless the provider streamed it natively (see FeatureGates.nativePlanMode).
58
- * @param phase - Which checkpoint triggered this prompt
59
- * @param context - Optional context with verdict status
60
- */
61
- prompt(plan: string, phase: string, context?: UserPromptContext): Promise<UserPromptResult>;
62
- }
63
- /**
64
- * Interactive user prompt handler.
65
- * Displays the plan (unless nativePlanMode gate suppresses it) and collects multiline input.
66
- * Empty input = accept, non-empty = comments for revision.
67
- *
68
- * Uses a raw stdin reader instead of readline so that input works in
69
- * both standard VT mode and passive kitty keyboard protocol mode.
70
- */
71
- export declare class InteractiveUserPrompt implements UserPromptHandler {
72
- readonly gates: FeatureGates;
73
- readonly onDumpRequested?: (() => void) | undefined;
74
- constructor(gates?: FeatureGates, onDumpRequested?: (() => void) | undefined);
75
- prompt(plan: string, phase: string, context?: UserPromptContext): Promise<UserPromptResult>;
76
- /** True unless the provider already streamed the plan natively (planner → user). */
77
- private shouldDisplayPlan;
78
- private printPlan;
79
- /**
80
- * Two-row selector: "Approve" row and multiline feedback input area.
81
- * `❯` arrow moves between rows to indicate which is active.
82
- * Input row is active by default — just start typing.
83
- * Enter inserts a newline; Ctrl+D submits.
84
- * Approve requires ↑ then Enter.
66
+ * @param plan - The full plan text. Always shown in the right pane (when wide enough).
67
+ * @param phase - The step ID that triggered this prompt
68
+ * @param context - Phase-label context computed by the UserRoleHandler
85
69
  */
86
- private collectDecision;
70
+ prompt(plan: string, phase: string, context: UserPromptContext): Promise<UserPromptResult>;
87
71
  }
88
72
  /**
89
- * No-op handler that always accepts. Used for --auto mode and as the default.
73
+ * No-op handler that always accepts. Used for `auto=true` flow runs.
90
74
  */
91
75
  export declare class AutoUserPrompt implements UserPromptHandler {
92
76
  prompt(): Promise<UserPromptResult>;
93
77
  }
94
- export {};
95
78
  //# sourceMappingURL=prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/user/prompt.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,aAAa,GACd;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,eAAe,CAAkD;;IAazE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAI1C;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI,GAAG,IAAI;IAIvD,OAAO,CAAC,MAAM;CAmDf;AAED,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAE3D,QAAQ,CAAC,KAAK,EAAE,YAAY;IAC5B,QAAQ,CAAC,eAAe,CAAC,GAAE,MAAM,IAAI;gBAD5B,KAAK,GAAE,YAA4B,EACnC,eAAe,CAAC,GAAE,MAAM,IAAI,aAAA;IAGjC,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IA6B5B,oFAAoF;IACpF,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,SAAS;IAiBjB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;CAkOxB;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,iBAAiB;IAChD,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAG1C"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/user/prompt.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,eAAe,CAAkD;;IAUzE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAI1C;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI,GAAG,IAAI;IAIvD,OAAO,CAAC,MAAM;CA2Df;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAE7E,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,iBAAiB;IAChD,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAG1C"}