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
@@ -1,7 +1,5 @@
1
- import { RawInputParser } from "./prompt.js";
2
- import { bold, cyan, dim, green, red, reset, yellow, clearToEol, cursorUp, visibleLength, } from "../ansi.js";
3
- const DECISION_CYCLE = ["keep", "drop", "revise"];
4
- function tagFor(decision) {
1
+ import { green, red, reset, yellow, visibleLength, } from "../ansi.js";
2
+ export function tagFor(decision) {
5
3
  switch (decision) {
6
4
  case "keep":
7
5
  return `${green}[K]${reset}`;
@@ -20,7 +18,6 @@ function codePointWidth(cp) {
20
18
  return 0;
21
19
  if (cp > 0xffff)
22
20
  return 2;
23
- // Reuse `visibleLength` for BMP wideness; cheap because input is one char.
24
21
  return visibleLength(String.fromCodePoint(cp));
25
22
  }
26
23
  /**
@@ -50,7 +47,6 @@ export function wrapToWidth(text, width) {
50
47
  let lineWidth = 0;
51
48
  for (const token of tokens) {
52
49
  const tokenWidth = visibleLength(token);
53
- // Hard-break any single token longer than width into width-sized chunks.
54
50
  if (tokenWidth > width) {
55
51
  if (line.length > 0) {
56
52
  out.push(line);
@@ -135,339 +131,4 @@ export function clipToWidth(line, width) {
135
131
  out += reset;
136
132
  return out;
137
133
  }
138
- export class CurateVerdictPrompt {
139
- onDumpRequested;
140
- constructor(onDumpRequested) {
141
- this.onDumpRequested = onDumpRequested;
142
- }
143
- async prompt(verdict) {
144
- if (!process.stdin.isTTY || verdict.issues.length === 0) {
145
- return {
146
- decisions: verdict.issues.map((_, index) => ({ index, decision: "keep" })),
147
- };
148
- }
149
- return this.runChecklist(verdict);
150
- }
151
- runChecklist(verdict) {
152
- const issues = verdict.issues;
153
- const decisions = issues.map(() => "keep");
154
- const comments = issues.map(() => undefined);
155
- let cursor = 0;
156
- let prevRendered = 0;
157
- return new Promise((resolve) => {
158
- process.stdin.setRawMode(true);
159
- process.stdin.resume();
160
- const parser = new RawInputParser();
161
- const renderHeader = (cols) => {
162
- const n = issues.length;
163
- const s = n === 1 ? "" : "s";
164
- const title = clipToWidth(`${bold}${cyan}User Verdict Curation${reset} — ${n} issue${s}`, cols);
165
- const summaryLines = wrapToWidth(verdict.summary, cols).map((l) => `${dim}${l}${reset}`);
166
- return [title, ...summaryLines];
167
- };
168
- const renderRow = (i, cols) => {
169
- const isCursor = i === cursor;
170
- const arrow = isCursor ? `${bold}❯${reset}` : " ";
171
- const tag = tagFor(decisions[i]);
172
- const issue = issues[i];
173
- const meta = [];
174
- if (issue.severity)
175
- meta.push(issue.severity);
176
- if (issue.category)
177
- meta.push(issue.category);
178
- const metaStr = meta.length ? `${dim}[${meta.join("/")}]${reset} ` : "";
179
- const prefix = `${arrow} ${tag} ${metaStr}`;
180
- const tail = decisions[i] === "revise" && comments[i] ? ` ${dim}— …${reset}` : "";
181
- const desc = issue.description.replace(/\s+/g, " ");
182
- const avail = cols - visibleLength(prefix) - visibleLength(tail);
183
- if (avail <= 0) {
184
- // Not enough room for any description text; fall back to prefix-only.
185
- // The detail panel below still shows the full issue body.
186
- return clipToWidth(prefix, cols);
187
- }
188
- // Clip the description alone to the available width, then concat the
189
- // tail. Composing first and clipping last would silently drop the tail
190
- // when the description is long — the revise-marker would never render.
191
- const clippedDesc = clipToWidth(desc, avail);
192
- return `${prefix}${clippedDesc}${tail}`;
193
- };
194
- const renderDetail = (i, cols) => {
195
- const n = issues.length;
196
- const issue = issues[i];
197
- const out = [];
198
- out.push(clipToWidth(` ${dim}─── Issue ${i + 1} of ${n} — Details ───${reset}`, cols));
199
- const bodyWidth = Math.max(1, cols - 2);
200
- for (const l of wrapToWidth(issue.description, bodyWidth)) {
201
- out.push(` ${l}`);
202
- }
203
- if (decisions[i] === "revise" && comments[i]) {
204
- out.push(clipToWidth(` ${dim}[Revise comment]${reset}`, cols));
205
- for (const l of wrapToWidth(comments[i], bodyWidth)) {
206
- out.push(` ${l}`);
207
- }
208
- }
209
- return out;
210
- };
211
- const renderFooter = (cols) => {
212
- const plain = "↑/↓ navigate · k/d/r set · Tab cycle · Enter edit comment · Ctrl+D submit · Ctrl+C keep-all";
213
- return wrapToWidth(plain, cols).map((l) => `${dim}${l}${reset}`);
214
- };
215
- const drawAll = () => {
216
- const cols = Math.max(20, process.stdout.columns ?? 80);
217
- const lines = [
218
- ...renderHeader(cols),
219
- ...issues.map((_, i) => renderRow(i, cols)),
220
- "",
221
- ...renderDetail(cursor, cols),
222
- "",
223
- ...renderFooter(cols),
224
- ];
225
- for (const line of lines) {
226
- process.stdout.write(`\r${clearToEol}${line}\n`);
227
- }
228
- // Erase any stale trailing rows from a taller previous draw.
229
- const stale = Math.max(0, prevRendered - lines.length);
230
- for (let i = 0; i < stale; i++) {
231
- process.stdout.write(`\r${clearToEol}\n`);
232
- }
233
- // Walk cursor back to the top of the rendered region.
234
- const totalAdvanced = lines.length + stale;
235
- for (let i = 0; i < totalAdvanced; i++) {
236
- process.stdout.write(cursorUp);
237
- }
238
- prevRendered = lines.length;
239
- };
240
- const moveToRow = (rowIdx) => {
241
- if (rowIdx > 0)
242
- process.stdout.write(`\x1b[${rowIdx}B`);
243
- };
244
- const moveToTop = (rowIdx) => {
245
- if (rowIdx > 0)
246
- process.stdout.write(`\x1b[${rowIdx}A`);
247
- };
248
- // Active event sink — swapped between the curate-mode and comment-mode
249
- // handlers. Both stdin chunks AND deferred events (bare ESC after the
250
- // escape-timeout in legacy VT mode) flow through this sink, so Esc is
251
- // observable regardless of whether the terminal is in passive kitty mode.
252
- let activeSink;
253
- parser.onDeferred((events) => activeSink?.(events));
254
- const finalize = (result) => {
255
- process.stdin.removeListener("data", onCurateChunk);
256
- process.stdin.setRawMode(false);
257
- process.stdin.resume();
258
- // Move cursor below all rendered rows
259
- moveToRow(prevRendered);
260
- process.stdout.write("\r");
261
- resolve(result);
262
- };
263
- const ensureCommentForRevise = async (prevDecision) => {
264
- if (decisions[cursor] !== "revise" || comments[cursor])
265
- return;
266
- const c = await collectComment(cursor);
267
- if (c !== undefined) {
268
- comments[cursor] = c;
269
- }
270
- else {
271
- // User cancelled the comment prompt without typing anything.
272
- // Revert the decision so a comment-less revise can never be
273
- // submitted from the checklist.
274
- decisions[cursor] = prevDecision === "revise" ? "keep" : prevDecision;
275
- }
276
- drawAll();
277
- };
278
- const handleCurateEvents = async (events) => {
279
- for (const event of events) {
280
- if (event.type === "dump") {
281
- this.onDumpRequested?.();
282
- continue;
283
- }
284
- if (event.type === "ctrl-c") {
285
- const result = {
286
- decisions: issues.map((_, index) => ({ index, decision: "keep" })),
287
- };
288
- finalize(result);
289
- return;
290
- }
291
- if (event.type === "submit") {
292
- // A `revise` without a non-empty comment is meaningless: the sub-loop
293
- // only advances when the user provides a revise instruction. Defensively
294
- // downgrade those rows to "keep" before emitting the result.
295
- for (let i = 0; i < issues.length; i++) {
296
- if (decisions[i] === "revise" && !comments[i]) {
297
- decisions[i] = "keep";
298
- }
299
- }
300
- const result = {
301
- decisions: issues.map((_, index) => {
302
- const dec = decisions[index];
303
- const rec = { index, decision: dec };
304
- if (dec === "revise" && comments[index]) {
305
- rec.comment = comments[index];
306
- }
307
- return rec;
308
- }),
309
- };
310
- finalize(result);
311
- return;
312
- }
313
- if (event.type === "arrow") {
314
- const prev = cursor;
315
- if (event.direction === "up") {
316
- cursor = (cursor - 1 + issues.length) % issues.length;
317
- }
318
- else if (event.direction === "down") {
319
- cursor = (cursor + 1) % issues.length;
320
- }
321
- if (prev !== cursor)
322
- drawAll();
323
- continue;
324
- }
325
- if (event.type === "newline") {
326
- // Enter on a revise row → edit comment. Otherwise, no-op.
327
- if (decisions[cursor] === "revise") {
328
- const prevDecision = decisions[cursor];
329
- const c = await collectComment(cursor);
330
- if (c !== undefined) {
331
- comments[cursor] = c;
332
- drawAll();
333
- }
334
- else if (!comments[cursor]) {
335
- decisions[cursor] = "keep";
336
- drawAll();
337
- }
338
- void prevDecision;
339
- }
340
- continue;
341
- }
342
- if (event.type === "tab") {
343
- const prevDecision = decisions[cursor];
344
- const i = DECISION_CYCLE.indexOf(decisions[cursor]);
345
- decisions[cursor] = DECISION_CYCLE[(i + 1) % DECISION_CYCLE.length];
346
- if (decisions[cursor] !== prevDecision) {
347
- drawAll();
348
- await ensureCommentForRevise(prevDecision);
349
- }
350
- continue;
351
- }
352
- if (event.type === "insert") {
353
- const ch = event.text.toLowerCase();
354
- const prevDecision = decisions[cursor];
355
- if (ch === "k")
356
- decisions[cursor] = "keep";
357
- else if (ch === "d")
358
- decisions[cursor] = "drop";
359
- else if (ch === "r")
360
- decisions[cursor] = "revise";
361
- else
362
- continue;
363
- if (decisions[cursor] !== prevDecision) {
364
- drawAll();
365
- await ensureCommentForRevise(prevDecision);
366
- }
367
- continue;
368
- }
369
- // esc, backspace — ignored in curate mode
370
- }
371
- };
372
- const onCurateChunk = (chunk) => {
373
- void handleCurateEvents(parser.parseChunk(chunk));
374
- };
375
- const collectComment = (issueIdx) => {
376
- return new Promise((resolveComment) => {
377
- // Snapshot the rendered area we need to walk back over after input.
378
- const baseRows = prevRendered;
379
- const cols = Math.max(20, process.stdout.columns ?? 80);
380
- // Move just below the rendered region (single physical line).
381
- moveToRow(baseRows);
382
- const rawLabel = `Revise comment for issue ${issueIdx + 1} (Enter submits, Esc cancels): `;
383
- // Reserve at least 4 cols of input area; clip the label as needed so
384
- // the prompt + visible buffer always fit on a single physical row.
385
- const maxLabelWidth = Math.max(0, cols - 4);
386
- const label = clipToWidth(`${dim}${rawLabel}${reset}`, maxLabelWidth);
387
- const labelVisible = visibleLength(label);
388
- const inputCols = Math.max(1, cols - labelVisible);
389
- let buffer = comments[issueIdx] ?? "";
390
- const renderPrompt = () => {
391
- // Single-line render: clear, then write label + tail-of-buffer that
392
- // fits in `inputCols`. When the buffer is wider than the input
393
- // area, prepend `…` and slice off the head so the typing cursor
394
- // stays visible at the right edge. ASCII-only fast path on slice;
395
- // for wide-glyph content `clipToWidth` is the safety net below.
396
- let display;
397
- const bufWidth = visibleLength(buffer);
398
- if (buffer.length === 0) {
399
- display = "";
400
- }
401
- else if (bufWidth > inputCols) {
402
- const tail = buffer.slice(-(Math.max(1, inputCols - 1)));
403
- display = `…${tail}`;
404
- }
405
- else {
406
- display = buffer;
407
- }
408
- // Defense in depth: clip the entire composed line. Guarantees the
409
- // physical row stays within `cols` even if a wide glyph slipped
410
- // through the slice math.
411
- const line = clipToWidth(`${label}${display}`, cols);
412
- process.stdout.write(`\r${clearToEol}${line}`);
413
- };
414
- renderPrompt();
415
- const finishComment = (result) => {
416
- // Restore curate sink before redrawing so any deferred events that
417
- // arrive during `drawAll` route to the curate handler.
418
- process.stdin.removeListener("data", onCommentChunk);
419
- activeSink = handleCurateEvents;
420
- process.stdin.on("data", onCurateChunk);
421
- // Clear prompt line, walk back to top of the rendered region,
422
- // then redraw (drawAll handles cursor accounting via prevRendered).
423
- process.stdout.write(`\r${clearToEol}`);
424
- moveToTop(baseRows);
425
- drawAll();
426
- resolveComment(result);
427
- };
428
- const handleCommentEvents = (events) => {
429
- for (const event of events) {
430
- if (event.type === "dump") {
431
- this.onDumpRequested?.();
432
- continue;
433
- }
434
- if (event.type === "ctrl-c" || event.type === "esc") {
435
- finishComment(undefined);
436
- return;
437
- }
438
- if (event.type === "submit" || event.type === "newline") {
439
- finishComment(buffer.trim() ? buffer.trim() : undefined);
440
- return;
441
- }
442
- if (event.type === "backspace") {
443
- if (buffer.length > 0) {
444
- buffer = buffer.slice(0, -1);
445
- renderPrompt();
446
- }
447
- continue;
448
- }
449
- if (event.type === "insert") {
450
- buffer += event.text;
451
- renderPrompt();
452
- continue;
453
- }
454
- // tab, arrow — ignored while editing the comment
455
- }
456
- };
457
- const onCommentChunk = (chunk) => {
458
- handleCommentEvents(parser.parseChunk(chunk));
459
- };
460
- // Swap from curate to comment handler.
461
- process.stdin.removeListener("data", onCurateChunk);
462
- activeSink = handleCommentEvents;
463
- process.stdin.on("data", onCommentChunk);
464
- });
465
- };
466
- // Initial render and listener wiring.
467
- drawAll();
468
- activeSink = handleCurateEvents;
469
- process.stdin.on("data", onCurateChunk);
470
- });
471
- }
472
- }
473
134
  //# sourceMappingURL=curate-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"curate-prompt.js","sourceRoot":"","sources":["../../src/user/curate-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curate-prompt.js","sourceRoot":"","sources":["../../src/user/curate-prompt.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { UserPromptHandler } from "./prompt.js";
1
+ import type { UserPromptHandler, UserPhaseLabel } from "./prompt.js";
2
2
  import type { BaseStep, StepContext, StepSignal, RetryFn, RoleHandler } from "../flow/types.js";
3
3
  /**
4
4
  * RoleHandler adapter that bridges UserPromptHandler with the flow executor.
@@ -13,4 +13,16 @@ export declare class UserRoleHandler implements RoleHandler {
13
13
  constructor(userPhase: UserPromptHandler);
14
14
  execute(step: BaseStep, ctx: StepContext, _retry: RetryFn): Promise<StepSignal>;
15
15
  }
16
+ /**
17
+ * Compute the phase label from the verdict artifact and previous step role.
18
+ *
19
+ * Rules:
20
+ * - No verdict artifact yet → `"first"` (first review before any reviewer runs)
21
+ * - Verdict with `meta.source === "user"` → `"revised"` (planner regenerated
22
+ * in response to user feedback)
23
+ * - Verdict with `data.approved === true` → `"approved"`
24
+ * - Verdict with `data.approved === false` (and not user-source) → `"unapproved"`
25
+ * (reviewer rejected and max iterations were reached)
26
+ */
27
+ export declare function computePhaseLabel(step: BaseStep, ctx: StepContext): UserPhaseLabel;
16
28
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/user/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EACV,QAAQ,EAER,WAAW,EACX,UAAU,EACV,OAAO,EACP,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,iBAAiB;IAE1C,OAAO,CACX,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,UAAU,CAAC;CAsCvB"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/user/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,QAAQ,EAER,WAAW,EACX,UAAU,EACV,OAAO,EACP,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,iBAAiB;IAE1C,OAAO,CACX,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,UAAU,CAAC;CAyBvB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,GACf,cAAc,CAShB"}
@@ -15,26 +15,13 @@ export class UserRoleHandler {
15
15
  const displayArtifact = step.reads.display;
16
16
  const displayText = displayArtifact
17
17
  ? ctx.artifacts.getText(displayArtifact) ?? "" : "";
18
- // Build prompt context from the verdict artifact
19
- const verdictArtifactName = step.writes.verdict;
20
- const verdictData = verdictArtifactName
21
- ? ctx.artifacts.getData(verdictArtifactName)
22
- : undefined;
23
- const verdictSource = verdictArtifactName
24
- ? ctx.artifacts.getMeta(verdictArtifactName, "source")
25
- : undefined;
26
- const promptCtx = {
27
- verdictApproved: verdictData?.approved,
28
- isFirstReview: verdictData === undefined,
29
- verdictSource,
30
- previousStepRole: ctx.previousStepRole,
31
- };
18
+ const phaseLabel = computePhaseLabel(step, ctx);
19
+ const promptCtx = { phaseLabel };
32
20
  const result = await this.userPhase.prompt(displayText, step.id, promptCtx);
33
21
  if (result.accepted) {
34
22
  const userStep = step;
35
23
  return { kind: userStep.breakOnAccept ? "break-loop" : "continue" };
36
24
  }
37
- // Rejected — write to verdict artifact with data + text + meta
38
25
  const verdictKey = step.writes.verdict;
39
26
  if (verdictKey) {
40
27
  ctx.artifacts.set(verdictKey, {
@@ -46,4 +33,29 @@ export class UserRoleHandler {
46
33
  return { kind: "restart-loop" };
47
34
  }
48
35
  }
36
+ /**
37
+ * Compute the phase label from the verdict artifact and previous step role.
38
+ *
39
+ * Rules:
40
+ * - No verdict artifact yet → `"first"` (first review before any reviewer runs)
41
+ * - Verdict with `meta.source === "user"` → `"revised"` (planner regenerated
42
+ * in response to user feedback)
43
+ * - Verdict with `data.approved === true` → `"approved"`
44
+ * - Verdict with `data.approved === false` (and not user-source) → `"unapproved"`
45
+ * (reviewer rejected and max iterations were reached)
46
+ */
47
+ export function computePhaseLabel(step, ctx) {
48
+ const verdictKey = step.writes.verdict;
49
+ if (!verdictKey)
50
+ return "first";
51
+ const data = ctx.artifacts.getData(verdictKey);
52
+ if (data === undefined)
53
+ return "first";
54
+ const source = ctx.artifacts.getMeta(verdictKey, "source");
55
+ if (source === "user")
56
+ return "revised";
57
+ if (data.approved === true)
58
+ return "approved";
59
+ return "unapproved";
60
+ }
49
61
  //# sourceMappingURL=handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/user/handler.ts"],"names":[],"mappings":"AAUA;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,SAA4B;QAA5B,cAAS,GAAT,SAAS,CAAmB;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CACX,IAAc,EACd,GAAgB,EAChB,MAAe;QAEf,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,MAAM,WAAW,GAAG,eAAe;YACjC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtD,iDAAiD;QACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,MAAM,WAAW,GAAG,mBAAmB;YACrC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAyB,mBAAmB,CAAC;YACpE,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,aAAa,GAAG,mBAAmB;YACvC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAS,mBAAmB,EAAE,QAAQ,CAAC;YAC9D,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,SAAS,GAAsB;YACnC,eAAe,EAAE,WAAW,EAAE,QAAQ;YACtC,aAAa,EAAE,WAAW,KAAK,SAAS;YACxC,aAAa;YACb,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;SACvC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAE5E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAgB,CAAC;YAClC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACtE,CAAC;QAED,+DAA+D;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACvC,IAAI,UAAU,EAAE,CAAC;YACf,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC5B,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACzB,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;gBAC3B,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/user/handler.ts"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,SAA4B;QAA5B,cAAS,GAAT,SAAS,CAAmB;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CACX,IAAc,EACd,GAAgB,EAChB,MAAe;QAEf,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,MAAM,WAAW,GAAG,eAAe;YACjC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,SAAS,GAAsB,EAAE,UAAU,EAAE,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAE5E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAgB,CAAC;YAClC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACvC,IAAI,UAAU,EAAE,CAAC;YACf,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC5B,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACzB,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;gBAC3B,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAClC,CAAC;CACF;AAMD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAc,EACd,GAAgB;IAEhB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IACvC,IAAI,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAc,UAAU,CAAC,CAAC;IAC5D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAS,UAAU,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC9C,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Hard-wrap `line` to fit within `width` visible columns, preserving every
3
+ * character (no whitespace-aware reflow, no dropped trailing text). SGR escape
4
+ * sequences are passed through without consuming visible width. Empty input
5
+ * yields a single empty string so blank lines are preserved.
6
+ *
7
+ * Shared between `plan-pane.ts` (used by both user-review and curate prompts)
8
+ * and any other surface that needs character-preserving wrap.
9
+ */
10
+ export declare function hardWrapLine(line: string, width: number): string[];
11
+ //# sourceMappingURL=hard-wrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hard-wrap.d.ts","sourceRoot":"","sources":["../../src/user/hard-wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAkClE"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Hard-wrap `line` to fit within `width` visible columns, preserving every
3
+ * character (no whitespace-aware reflow, no dropped trailing text). SGR escape
4
+ * sequences are passed through without consuming visible width. Empty input
5
+ * yields a single empty string so blank lines are preserved.
6
+ *
7
+ * Shared between `plan-pane.ts` (used by both user-review and curate prompts)
8
+ * and any other surface that needs character-preserving wrap.
9
+ */
10
+ export function hardWrapLine(line, width) {
11
+ if (width < 1)
12
+ width = 1;
13
+ if (line.length === 0)
14
+ return [""];
15
+ const out = [];
16
+ let cur = "";
17
+ let curVis = 0;
18
+ let i = 0;
19
+ while (i < line.length) {
20
+ if (line[i] === "\x1b" && line[i + 1] === "[") {
21
+ // eslint-disable-next-line no-control-regex
22
+ const m = /^\x1b\[[0-9;]*m/.exec(line.slice(i));
23
+ if (m) {
24
+ cur += m[0];
25
+ i += m[0].length;
26
+ continue;
27
+ }
28
+ }
29
+ const cp = line.codePointAt(i);
30
+ const ch = String.fromCodePoint(cp);
31
+ const cw = cp === 0xFE0F ? 0 : cp > 0xFFFF ? 2 : 1;
32
+ if (curVis + cw > width && cur.length > 0) {
33
+ out.push(cur);
34
+ cur = "";
35
+ curVis = 0;
36
+ }
37
+ cur += ch;
38
+ curVis += cw;
39
+ i += ch.length;
40
+ }
41
+ out.push(cur);
42
+ return out;
43
+ }
44
+ //# sourceMappingURL=hard-wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hard-wrap.js","sourceRoot":"","sources":["../../src/user/hard-wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAa;IACtD,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,GAAG,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAEnC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9C,4CAA4C;YAC5C,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC;gBACN,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACjB,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAChC,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,IAAI,MAAM,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,GAAG,EAAE,CAAC;YACT,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,EAAE,CAAC;QACb,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;IACjB,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type CuratePromptHandler, type CurateResult } from "./curate-prompt.js";
2
+ import type { ReviewVerdict } from "../agents/reviewers/types.js";
3
+ import type { TerminalHost } from "../terminal/host.js";
4
+ /**
5
+ * Host-backed curate-verdict prompt. The plan is always visible:
6
+ *
7
+ * - When `cols >= COLLAPSE_AT_COLS`: side-by-side. Issues panel on the
8
+ * left, plan on the right, with a `dim │` divider per row.
9
+ * - When `cols < COLLAPSE_AT_COLS`: top-down stack. Plan on top
10
+ * (`max(3, floor((rows - 1) / 2))` rows), full-width `dim ─` divider,
11
+ * issues panel below for the remaining rows. Both panels scroll
12
+ * independently — plan via PageUp/PageDown/Home/End/wheel, issues via
13
+ * Up/Down cursor movement (the issues pane auto-scrolls to keep the
14
+ * active issue visible).
15
+ *
16
+ * Issues panel: title + summary + per-issue rows. Each issue's full
17
+ * description is wrapped inline; when the cursor row is in revise mode and
18
+ * the editor is open, an inline buffer line renders directly under the
19
+ * issue.
20
+ *
21
+ * - k/d/r toggles the cursor row's decision.
22
+ * - Tab cycles keep → drop → revise → keep.
23
+ * - Enter on a revise row begins or finishes the inline edit; Esc cancels.
24
+ * - PageUp/PageDown/Home/End/wheel scrolls the plan.
25
+ * - Up/Down moves the cursor among issues.
26
+ * - Ctrl+D submits, Ctrl+C accepts all (keep all).
27
+ * - Ctrl+] is consumed by the host's `InputRouter` for dump capture.
28
+ */
29
+ export declare class HostBackedCuratePrompt implements CuratePromptHandler {
30
+ private readonly host;
31
+ constructor(host: TerminalHost);
32
+ prompt(verdict: ReviewVerdict, planText?: string): Promise<CurateResult>;
33
+ }
34
+ //# sourceMappingURL=host-curate-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-curate-prompt.d.ts","sourceRoot":"","sources":["../../src/user/host-curate-prompt.ts"],"names":[],"mappings":"AAQA,OAAO,EAML,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAmC,MAAM,qBAAqB,CAAC;AAMzF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,sBAAuB,YAAW,mBAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,YAAY;IAEzC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAiM/E"}